プログラム

【パスワード】ソルト(Salt)とは

ソルト(Salt)

ソルトとは

ソルト(Salt)とは、パスワードなどをハッシュ値へと変換する際に、パスワードに付与するランダムな文字列のことです。

仮にハッシュ値で保存しているパスワードが外部に漏洩した場合、元に戻すことが困難であるハッシュ値でも、弱いパスワード(推測しやすい文字や短いパスワードなど)であれば、十分な時間をかければ元のデータを推測されてしまう危険性があります。

そこで、ソルトと呼ばれるランダムな文字列をパスワードに連結してから、ハッシュ値へと変換します。

ソルトの例

ソルトを付与することで、レインボーテーブル攻撃を回避することができます。ただし、ソルトを毎回同じ固定値で設定している場合、そのソルトを使い新しいレインボーテーブルを生成することができるため、ソルトは固定値ではなく、ユーザー毎にランダムな値で生成することが望ましいとされています。

ソルトをランダムで生成するのは理解できましたが、ログイン時にパスワードが正しいかを比較する時はどうやるのですか?
ソルトをランダムに生成するのは、パスワードを保管する時の話です。

ソルトはパスワードのハッシュ値同様にデータベースに保管しておき、ログイン時の比較には同じソルトを使用します。

ソルトの使用例

次のように2人ユーザが同じパスワード「password01」を使用しているとします。

ユーザ名パスワード
ユーザApassword01
ユーザBpassword01

このパスワードにソルトを付与してハッシュ値へと変換します。このように同じパスワードであってもソルトが異なるとハッシュ値は全く違う値になるのです。※以下の例はSHA256を使用しています。

ユーザ名ソルトハッシュ値
ユーザAF0231135E500C25Fd6c86aa0012ab67e4ec3071e3046d2d3b75428a58a1b382ccaecebcb8b1aea22
ユーザB1OP3A125E580019F89495b4a9d858b95a4ea5fd80ebf91ba093e74c93e2702299aa5c1939db4f2c1
ランダムに付与されるソルトにより同じ値でもハッシュ値が異なるため、攻撃者が事前にハッシュ値を予測することは困難です。

helpful