シナリオを説明しましょう。データベースがダンプされ、すべてのパスワードがハッシュされます。
一部のユーザーが2回サインアップしており、同じハッシュを持っているように見えます。これらのハッシュをハッシュクラッキングプログラムで実行しても、何も表示されません。これは、おそらくそれらがソルト処理されていて、ソルトがないためです。しかし、ユーザーは2つのアカウントで同じハッシュを持っているので、saltはランダムな値を含まないでしょう、そうですか?
サイトが依然として脆弱であり、独自のアカウントを作成して独自のハッシュを取得できた場合、サインアップしたパスワードを知っていればソルトをリバースエンジニアリングできますか?
衝突を無視すると、同じハッシュ値を持つ2人のユーザーは、両方のパスワード、salt、pepperが同じであることを意味します。したがって、これは通常、次のいずれかを意味します
サイトはすべてのユーザーに対して固定ソルトを使用します:これにより、スキームがペッパーのみのパスワードハッシュスキームにレンダリングされます(「塩」はコード内にあります)。力ずくで、平文のパスワードの知識を利用することで、「塩」の価値を知ることができます。
もちろん、これは、選択した別のアカウントを登録し、hash(password + X)
のようなものを総当たりすることを試み、X
を調べたい値として比較することで実行できます。新しいアカウントの作成後に抽出したハッシュへの出力。
ハードコードされたソルト(ペッパーのみ)を使用するのと同じくらいバカなことをしているサイトは、MD5やSHA-1のようなものを使用しているため、ブルートフォース攻撃がはるかに速くなります。
サイトはユーザーからの特定の情報に由来する非固有の塩を使用します:(ユーザー名、電子メールなど)これはブルートフォースを使用して確認できます。
抽出したデータベースには塩が含まれていないため、1番目のケースである可能性が高いです。
注:Rainbowテーブルで重複ハッシュが見つからなかったからといって、それが簡単なパスワードであるとは限りません。同じ強力なパスワードを使用する2つのアカウントを持つ同じユーザーである可能性があります。