> これですが、辞書攻撃を、Webで稼動中の掲示板に対して行うことを想定して
> いますでしょうか。それとも、既にテーブル内容が流出していることを
> 前提に、辞書攻撃でパスワードを解析しよう、というお話でしょうか。
テーブル内容が流出していることを前提にしています。
> 後者だとすると、テーブルが流出した時点でsaltはだだ漏れです。
そうです。
> これは、ひとつのパスワードがばれても、同じハッシュになっている他の
> パスワードが芋づる式にばれることはない、ということでしょうか?
違います。辞書攻撃に必要な計算量が増えるという意味です。
> 同時間で、ほぼ同数のパスワードが抜かれてしまいそうに思う
> のですが。
salt があると、探索空間が salt のビット数分広がるため、
辞書攻撃に要する時間が長くなります。以下のページにも、
同様な示唆があります。
http://www.itmedia.co.jp/enterprise/0307/24/epn09.html
http://www.microsoft.com/japan/msdn/library/ja/f_and_m/html/vxconprotectingpasswordcredentials.asp
データベース中には複数のMD5化されたパスワードが存在する
わけですが、salt がないと、単一の辞書を使って、全ての
パスワードに対する試行を行うことができます。これに対し、
salt があると、2 の salt のビット数乗 の辞書が必要になる
わけです。
> 別の場所に置いてあるだけ"秘密"の方がまだマシかも。
これを気にするのであれば、salt とプログラム埋め込みのsecret
の両方を使うのが良いと思います。どちらか片方だけであれば、
salt の方を選ぶのが良い習慣だと思います。