web-dev-qa-db-ja.com

部分的なハッシュリークは、現実的にどれほどひどいでしょうか。

パスワードを保存するための現在の推奨事項は、Argon2、scrypt、PBKDF2、bcryptなどの低速の鍵導出関数の使用ですが1、多くのWebサイトは依然として従来のhash(password + salt)メソッドを使用しており、MD5、SHA-1、SHA-256が最も一般的に使用されるハッシュ関数です。

ソルトmySuperSecretPassword123を含む!8(L-_20hsのSHA-1ハッシュはE5D0BEE0300BF17508CABA842084753685781907です。

攻撃者がソルトとハッシュの前半を盗むことを想定しているため、E5D0BEE0300BF17508CA。また、攻撃者はSHA-1が使用されていること、およびソルトとパスワードがどのように連結されているかを認識していると想定します。

攻撃者が元のパスワードを回復することはどのくらい困難ですか?


1 bcrypt 技術的には主要な派生関数ではありませんが、この質問の目的では同じように機能します。

26
MechMK1

実際、それは完全なハッシュリークと同じくらい悪いです。


ハッシュクラッキングは以下によって行われます:

  1. パスワード候補の生成
  2. それらをハッシュする
  3. 結果のハッシュをクラックしたいハッシュと比較する

部分的なハッシュリークの場合、これらの手順のいずれも遅くなることはないため、これは速度的に完全なハッシュリークと非常に似ています。


部分的なハッシュ出力が十分に長くない場合、多くのパスワード候補が一致することに注意してください。そのシナリオでは、どの候補が実際のパスワードであったかを知ることができません。

52
Benoit Esnard

これは、パスワードの精度とハッシュプレフィックスのサイズによって異なります。

大きな接頭辞/不正なパスワード

これが、たとえば30ビットのエントロピーを含む平均的なジョーのパスワードのハッシュであると仮定すると( "mySuperSecretPassword123"には、これよりも少ないエントロピーが含まれることはほぼ確実です)、控えめに考えると Kerckhoffsの原則 そして、攻撃者がパスワードの生成方法を知っていると仮定すると、2つしかありません。30 可能なパスワード。リークされたプレフィックスがSHA-1ハッシュからの80ビットである場合、ハッシュプレフィックスと一致するパスワード候補は1つだけである可能性が非常に高くなります。

基本的に、log2(password space)がリークされたプレフィックスよりも小さい場合、ハッシュ全体がリークされたと見なすこともできます。

小さい接頭辞/適切なパスワード

プレフィックスが小さい場合、またはパスワードが適切な場合はどうなりますか?たとえば、2のパスワードスペースがあるとします。50、そしてあなたは40ビットのプレフィックスをリークしました。攻撃者はパスワードを解読することはできません。10 ハッシュと一致するパスワードですが、これはまだ問題です。 250 レート制限なしでも、オンライン攻撃を開始するには大きすぎます。しかし、攻撃者がオフライン攻撃でプレフィックスに一致するものに推測を事前にフィルタリングできる場合、攻撃者は2を試すだけで済みます。10 オンライン攻撃では、実行可能な場合があります。

log2(password space) - prefix size > 0の場合、攻撃者は正確なパスワードを解読できない可能性がありますが、十分に小さい場合は、オンライン攻撃で使用するパスワード候補のプールを生成できます。

とても良いパスワード

もちろん、2より大きいパスワードスペースからランダムに選択した場合100 (保守的になる)確率が一定であれば、部分的または完全なハッシュのリークは関係ありません。とにかくクラックされることは決してないからです。

14
AndrolGenhald

160ビットのハッシュの半分しかない場合は、80の不明なビットがあることを意味します。これにより、$ 2 ^ 80 = 1.2089258196146292e + 24 $のハッシュが残ります。

つまり、パスワードをこれらのいずれかにハッシュ化でき、可能なパスワードの数が指数関数的に減少します(2 ^ 80倍少なくなります)が、攻撃者はこれだけに基づいてパスワードを見つけることはできません。ランダム。

明らかにそうなることはめったにないので、誰かがパスワードを生成する最新の辞書攻撃を使用した場合、おそらくパスワードの候補が比較的少なくなります。次に、そのパスワードの小さなリストを実際の認証サービスに対してテストして、正確なパスワードを取得できます。

TLDR:

  • パスワードがランダムの場合:大丈夫
  • 最新の辞書攻撃でパスワードを生成できる場合(例:: smolbanana73):変更することをお勧めします。

注: Have I been Pwned は、パスワードがリストにあるかどうかを確認するために、パスワードの最初の数ビットを要求しますが、重要ではないほど小さいです。

4
RedBorg