ストレッチング
ストレッチングとは、パスワードのハッシュ値を総当り攻撃(ブルートフォース攻撃)などから推測されないようにするために、ハッシュ値への計算を数千回~数万回繰り返し行うことです。
ストレッチングの必要性
コンピュータの進化は早く、計算する処理速度も向上しているため、弱いパスワードや文字数が長くないパスワードなどは、総当り攻撃(ブルートフォース攻撃)などで十分な時間をかければ元のデータを推測されてしまう危険性があります。
この時間を事実上不可能といえる時間にするためにストレッチングを実施します。
ストレッチングは回数が多いほど解析が困難となり安全性が高まります。しかし、ストレッチング回数が多いほどサーバの負荷が増えるため、サーバの性能や負荷を考慮して検討する必要があります。
ソルトとの違い
ソルトとは、パスワードをハッシュ値へと変換する際に、パスワードに付与するランダムな文字列のことです。
ソルトは、レインボーテーブル攻撃などを防ぐ役割を持ちます。レインボーテーブル攻撃は事前に特殊なテーブルを生成します。パスワードにソルトが付与されることで、全く違うハッシュ値が生成されるため、レインボーテーブル攻撃では元のデータを推測することができません。
ただし、ソルトを毎回同じ固定値で設定している場合、そのソルトを使い新しいレインボーテーブルを生成することができるため、ソルトは固定値ではなく、ユーザー毎にランダムな値で生成することが望ましいとされています。
ソルトとストレッチングの主な役割の違いは
ソルトは、レインボーテーブル攻撃や辞書攻撃、総当り攻撃(ブルートフォース攻撃)などで事前に準備されたハッシュ値を無効化するための手段です。
そして、ストレッチングは、十分な時間をかけても元のデータを推測できなくするための手段です。