ソルトとストレッチングについて
投稿日: 更新日:
ソルトとストレッチング
バスワードをハッシュ化して保存する時や、パスワードベース暗号化において使われる技術です。
それぞれ違った役割があります。
ソルトについて
ソルトとはパスワードに結合させるランラムな値のことです。
「パスワード+ソルト」としてハッシュ値を取ることでレインボーテーブル攻撃を防ぎます。
ソルトを足さない場合、パスワードとハッシュ値の対応表が事前にあればハッシュ値からパスワードを逆算できることになります。しかし、ソルトを足せばそのようなことは不可能です。ソルトはランダムな値なのでそれを知らない限り対応表を事前に作成するのは困難になります。また、ソルトのビット数だけ候補も増えることになります。
「事前に」というところがポイントです。ソルトを知ってから対応表を作るのはとても時間がかかります。
ストレッチングについて
ハッシュ関数→ハッシュ関数→ハッシュ関数・・・と何回もハッシュ値を取ることです。
総当たりにかかる時間を増やす効果があります。
1回ハッシュ値をとるのに0.1秒かかるとしましょう。
1回しかハッシュ関数を通さない場合100回の総当たりをするのにかかる時間はたった10秒です。しかし、10回ハッシュ関数を取ることにすれば、100回の総当たりにかかる時間は100秒と長くなります。
普通のログインするユーザーに取っては0.1秒も1秒も少しの差ですが、攻撃者にとっては大きな差となります。
まとめ
ソルト・・・レインボーテーブル攻撃を防ぐもの!
ストレッチング・・・総当たり攻撃を防ぐもの!