私は bcrypt ハッシュを研究してきました。もちろん、このスキームの大きな利点の 1 つは、その「適応性」です。しかし、単純に SHA-1 ハッシュの反復回数を増やす以外に、どのように適応できるのでしょうか? たとえば、SHA-1 で値を 1000 回ハッシュする代わりに、反復回数を 10,000 回に増やします。これは同じ目標を達成していませんか?bcrypt の適応性を高めるものは何ですか?
6 に答える
ハッシュ関数を使用して多くの反復を行うには、いくつかの微妙な点があります。これは、何らかの「塩漬け」が必要であり、既存のハッシュ関数は期待できるほど「ランダム」ではないためです。したがって、注意が必要です。その場合、PBKDF2になります。PBKDF2は、パスワードハッシュとまったく同じではない鍵導出用に設計されましたが、それも非常に優れていることがわかりました。
bcryptは、Blowfishブロック暗号から派生しているという点で、PBKDF2-with-SHA-1よりも(わずかに)有利です。多くの反復を行うことのポイントは、パスワード処理を遅くし、特に攻撃者にとって遅くすることです。通常の正直なシステムでは、パスワードの推測が大幅に妨げられるため、この機能が遅くなることは許容されます。ただし、攻撃者は、通常のシステムでは使用されないハードウェア、たとえばプログラム可能なGPUを使用する可能性があります。これにより、その種類のハードウェアに適した計算が大幅に向上します。Blowfishとbcryptは、RAMベースのルックアップテーブル(変更されたテーブル)を使用します処理中); このようなテーブルは、汎用CPUの場合は扱いやすいですが、GPUでは非常に面倒です。したがって、bcryptは、GPUを使用した攻撃者による処理の強化をいくらか妨げます。これは、bcryptをPBKDF2よりもパスワードストレージに少し望ましいものにするボーナスです。
両方の代わりにscryptがあります。bcryptとは異なり、これはやや珍しいblowfish暗号を使用せず、代わりに標準のハッシュ関数を使用します。また、メモリと時間の両方の効率が悪いため、専用ハードウェアに実装するのが難しいように特別に設計されています。
あなたの代替案は少し指定不足です。パスワードとソルトをハッシュスキームに組み合わせる方法については言及していません。これを間違った方法で行うと、脆弱性につながる可能性があります。bcrypt (およびその他の標準 KDF) の利点は、これが明確に指定されていることです。
一般的な HMAC-SHA1 モードで PBKDF2 を見ると、提案したものと非常によく似ています。
それは本質的にそれです。任意のハッシュ関数を反復できます。一部のハッシュ関数は他のものよりも優れているため、慎重に選択してください。
たとえば、MD5 は最近壊れていると見なされており、特定のプレフィックスベースの攻撃や誕生日攻撃に苦しむハッシュ関数のカテゴリに属しています。
bcrypt は、別の関数を使用した場合に明示的に実装する必要があるいくつかのこと (salt など) を適切に処理できるため、経験則として優れています。
別の回答で述べたように、ハッシュ関数を反復するメカニズムは非常に重要です。これは、アルゴリズムを予期せず弱めたり、時間とメモリのトレードオフ攻撃を防ぐことができない可能性があるためです。
これが、PBKDF2 があなたの味方である理由です。RFC 2898で詳しく説明されています。また、PBKDF2 は特定のハッシュ アルゴリズムに依存しないため、将来性があります。たとえば、SHA3 が NIST によってファイナライズされると、MD5 を SHA3 に交換できます。
また、将来性にわずかな問題があります。Bcrypt は、保護しているパスフレーズが「 8 ~ 56 文字」である限り機能します。将来、何らかの理由でより長いパスフレーズが必要になった場合に備えて、心に留めておくべき重要な注意事項があります。
「適応性」は実際の暗号化とは何の関係もないと思いますが、代わりに bcrypt は適応ハッシュです。時間の経過とともに遅くなる可能性があるため、ハッシュとソルトに対する特定のブルートフォース検索攻撃に対する耐性が維持されます。