[280] Re:hash_user_password()
投稿者:(ぱ)
2007/02/20 02:13:25
なんだかすごく初心者な発言をしている気がしますが、聞くは一時の恥ということで。
>データベース中には複数のMD5化されたパスワードが存在する
>わけですが、salt がないと、単一の辞書を使って、全ての
>パスワードに対する試行を行うことができます。これに対し、
>salt があると、2 の salt のビット数乗 の辞書が必要になる
>わけです。
つまりこういうことでしょうか。
・パスワード候補となりうる文字列に「秘密」を連結し、MD5ハッシュ値を算出する。
大量の文字列に対してこれを行い、辞書を作る。
・辞書が何らかの記憶媒体に載るとしたら、ハッシュ値がばれればパスワードもばれる。
ハッシュ値の方から逆引きできるようなしかけにしておけば一瞬。
・辞書を作るにはひとつのパスワードを抜くのと同じ計算量が必要だけど、
「秘密」方式では、その計算量で、全てのパスワードがばれる。
うーん、でも、
>salt があると、探索空間が salt のビット数分広がるため、
saltがばれてる状態では、「探索空間が salt のビット数分広がる」ことはない
ように思いますが…まだ何か勘違いしてますでしょうか。
>これを気にするのであれば、salt とプログラム埋め込みのsecret
>の両方を使うのが良いと思います。どちらか片方だけであれば、
>salt の方を選ぶのが良い習慣だと思います。
両方使うようにして、今までの分はsaltを空文字にしておけば、
今までの投稿については、以前のパスワードが変わらず使えるかなあ、と
一瞬考えたのですが、D/B流出の時にパスワードがばれる危険性を考えて
いるのだからそれじゃ本末転倒ですね (^^;
今までの投稿が削除できなくなってもおそらく誰も困らないでしょうから
(いまさら「しくじったので書き直し」はないでしょうから)、今度時間が
できたときに修正しておきます。