パスワードへのソルトの目的を理解するのに問題があります。主な用途はレインボーテーブル攻撃を阻止することであることは私の理解です。ただし、これを実装するために私が見たメソッドは、問題を実際に難しくするようには見えません。
私はソルトを次のように使用することを示唆する多くのチュートリアルを見てきました:
$hash = md5($salt.$password)
その理由は、ハッシュが元のパスワードではなく、パスワードとソルトの組み合わせにマッピングされるようになったためです。しかし$salt=foo
、$password=bar
そして、と言い$hash=3858f62230ac3c915f300c664312c63f
ます。今、レインボーテーブルを持つ誰かがハッシュを逆にして、入力 "foobar"を考え出すことができます。次に、パスワードのすべての組み合わせ(f、fo、foo、... oobar、obar、bar、ar、ar)を試すことができます。パスワードを取得するのにさらに数ミリ秒かかる場合がありますが、それ以外はそれほど多くありません。
私が見た他の用途は私のLinuxシステムです。/ etc / shadowには、ハッシュされたパスワードが実際にソルトとともに保存されます。たとえば、「foo」のソルトと「bar」のパスワードは、次のようにハッシュされます$1$foo$te5SBM.7C25fFDu6bIRbX1
。ハッカーがなんとかしてこのファイルを入手できたとしても、のリバースハッシュにte5SBM.7C25fFDu6bIRbX
は "foo"が含まれていることがわかっているため、ソルトの目的はわかりません。
誰もがこれに当てることができる光をありがとう。
編集:助けてくれてありがとう。私が理解していることを要約すると、ソルトはハッシュされたパスワードをより複雑にするため、事前に計算されたレインボーテーブルに存在する可能性がはるかに低くなります。以前私が誤解していたのは、すべてのハッシュにレインボーテーブルが存在すると想定していたことです。