ソルト(Salt)
ソルトとは
ソルト(Salt)とは、パスワードなどをハッシュ値へと変換する際に、パスワードに付与するランダムな文字列のことです。
仮にハッシュ値で保存しているパスワードが外部に漏洩した場合、元に戻すことが困難であるハッシュ値でも、弱いパスワード(推測しやすい文字や短いパスワードなど)であれば、十分な時間をかければ元のデータを推測されてしまう危険性があります。
そこで、ソルトと呼ばれるランダムな文字列をパスワードに連結してから、ハッシュ値へと変換します。
ソルトを付与することで、レインボーテーブル攻撃を回避することができます。ただし、ソルトを毎回同じ固定値で設定している場合、そのソルトを使い新しいレインボーテーブルを生成することができるため、ソルトは固定値ではなく、ユーザー毎にランダムな値で生成することが望ましいとされています。
ソルトをランダムで生成するのは理解できましたが、ログイン時にパスワードが正しいかを比較する時はどうやるのですか?
ソルトをランダムに生成するのは、パスワードを保管する時の話です。
ソルトはパスワードのハッシュ値同様にデータベースに保管しておき、ログイン時の比較には同じソルトを使用します。
ソルトの使用例
次のように2人ユーザが同じパスワード「password01」を使用しているとします。
ユーザ名 | パスワード |
ユーザA | password01 |
ユーザB | password01 |
このパスワードにソルトを付与してハッシュ値へと変換します。このように同じパスワードであってもソルトが異なるとハッシュ値は全く違う値になるのです。※以下の例はSHA256を使用しています。
ユーザ名 | ソルト | ハッシュ値 |
ユーザA | F0231135E500C25F | d6c86aa0012ab67e4ec3071e3046d2d3b75428a58a1b382ccaecebcb8b1aea22 |
ユーザB | 1OP3A125E580019F | 89495b4a9d858b95a4ea5fd80ebf91ba093e74c93e2702299aa5c1939db4f2c1 |
ランダムに付与されるソルトにより同じ値でもハッシュ値が異なるため、攻撃者が事前にハッシュ値を予測することは困難です。
helpful
この記事は役に立ちましたか?