web-dev-qa-db-ja.com

短いハッシュ長を使用したパスワードの保護

データベースへのブルートフォース攻撃が発生した場合に誤検知の衝突の可能性を高めるために、パスワードに意図的に短いハッシュ長を使用している人はいますか?

ハッシュの長さを決定しようとしたとき、私のデフォルトの仮定は「ストレージは安い、巨大にする」でした。ただし、実際には、パスワードの弱点は短いか簡単に推測できることであることが多いため、データベースが侵害された場合にユーザーを助けるハッシュの長さはありません。

元のパスワードをわかりにくくするために、意図的に短いハッシュを使用している人はいますか?たとえば、ハッシュの可能性が100万しかない場合は、あらゆる場所で衝突が発生します。アプリケーションが正常に実行されている場合、攻撃者はとにかく数回以上試行することはできず、幸運な推測の可能性はほぼ0になります。データベースが侵害された場合、攻撃者は力ずくで見つけます。ハッシュスキームに関係なく、すべての簡単なパスワード。ただし、衝突の可能性が高い場合、ブルートフォースは、ユーザーが実際には他の場所で再利用していないパスワードの一致を見つける可能性があります。

複数の辞書の単語が一致する可能性が比較的高い一方で、ランダムな入力が数回の試行で衝突するのを十分に保護する長さを選択する必要があると思います。そして多分そのバランスは存在しません。

だから私の質問は:誰かがそれをしますか?その名前はありますか?

1
Vectorjohn

現在または歴史的に、これを行っている人を私は知りません。

パスワードの発見に対する抵抗というあなたが得ているものはわかりますが、オフライン攻撃を軽減する方法として衝突の可能性を高めることは、疑わしい価値があります。そうすることの潜在的な利点は、欠点よりも重要です。

  • 特定のユーザーがターゲットにされている場合、衝突が多くない限り、攻撃者は別のサイトに対してすべての衝突を試みたり、一致するまでリークしたりするのは簡単です...これにより、実際のパスワードが確認され、メリットがキャンセルされます衝突から。

  • 衝突の数が増えると、(元のサイトで)認証するためのオンラインの誤検知のリスクが高まります。

  • これは、認証の信頼性/否認防止性が低下することも意味します。ユーザー以外の誰かが(理論的には)ユーザーの実際のパスワードなしでユーザーとしてログインする可能性があります。通常、十分に衝突耐性のあるハッシュ関数を使用する場合、現実の世界ではこのリスクは事実上ゼロです。しかし、故意に衝突を探すこ​​とにより、実際に否認防止を保証するベストプラクティスに従っていないと主張することができます。

代わりに、追加のプライベートマテリアル(暗号化キーまたはペッパー)を [〜#〜] hsm [〜#〜] に保存するだけで、探している多くのメリットを得ることができます。適切に実装されている場合、これにより、頻繁な衝突の欠点なしに、オフライン攻撃に対する実際の抵抗が得られます。

4
Royce Williams

このようなスキームの唯一の利点は、自分のデータベースが侵害された場合、他のサイトが別のサイトを使用する可能性があるため、自分のサイトではなく、他のサイトでユーザーのアカウントを侵害する可能性が低いことです。ハッシュアルゴリズム(および別のソルト)。これにより、ハッシュの衝突ではなく、元のパスワードが実際に必要になります。

一方、パスワードハッシュと衝突した場合は、サイトの場合は関係ありません元のパスワードでない場合は、そのパスワードを使用してサイトにログインできます。したがって、長いランダムな元のパスワードを持っている人は、短い共通パスワードとの衝突によって危険にさらされる可能性があります。これは悪いです。

基本的に、あなたはあなた自身のセキュリティを犠牲にして他のサイトに疑わしい利益を与えています。それは非常に見当違いのように思われるので、私は誰もがそれをしているとはとても思えません。

0
Ben