レインボー攻撃

http://securityblog.jp/words/609.html
ユーザ情報の流出などで、パスワードのハッシュ値が攻撃者の手元にある場合に、それを元に攻撃者が不正ログインを試みる攻撃。
ハッシュ関数は不可逆的なので通常、パスワードのハッシュ値から元のパスワードを割り出すことはできない。しかし単純にパスワードをハッシュ変換していた場合は、パスワードが同じであればハッシュ値が同じになるため、多くのユーザに共通のハッシュ値は多くのユーザが共通で使っているパスワードだと推測できる。(例えば"0000"や"password")
その事実と、あらかじめパスワードによく使われる単語について元パスワードとハッシュ変換値の対応表として保存してあるものを使って、パスワードが何であるかを確定する。



実際には、元パスワードとハッシュ変換値の対応表をそのまま保存すると莫大な保存容量が必要になってしまうので、レインボーテーブルという方式で保存容量を削減したかたちで対応表を保存するため、レインボー攻撃と呼ばれる。

ハッシュ変換する際に、ユーザ毎に違った文字列(ソルト・salt)を付与しておけばこの攻撃を防ぐことができる。
ソルトは単なる連番でも問題ない。ソルトが判明してもレインボー攻撃に対する強度は変わらないので同じDB内にパスワードとソルトを保存してもいい。