14

bcryptは、たとえば、

def md5lots(password, salt, rounds):
    if (rounds < 1)
        return password
    else
        newpass = md5(password + salt)
        return md5lots(newpass, salt, rounds-1)

その誇大宣伝を考えると、私よりも知的な人々がbcryptがこれよりも優れていることを理解したように感じます. 誰かが「賢い素人」用語の違いを説明できますか?

4

5 に答える 5

4

主な違い - データを検証するために設計された MD5 およびその他のハッシュ関数は高速になるように設計されており、bcrypt() は低速になるように設計されています。

データを検証するときは、できるだけ早くデータを検証したいので、速度が必要です。

資格情報を保護しようとすると、速度が低下します。MD5 や SHA1 などは安価に実行できるため、パスワード ハッシュのコピーを持つ攻撃者は、さらに多くのブルート フォース攻撃を実行できます。

対照的に、bcrypt は意図的に高価です。これは、本物のユーザーによる認証が 1 回または 2 回試行される場合はほとんど問題になりませんが、ブルート フォースの場合ははるかにコストがかかります。

于 2011-08-22T11:31:48.217 に答える
3

bcrypt とMD5 を使用した複数回のハッシュには、次の 3 つの重要な違いがあります。

  1. 出力のサイズ: MD5 の場合は 128 ビット (16 バイト)、bcrypt の場合は 448 ビット (56 バイト)。何百万ものハッシュをデータベースに保存する場合、これを考慮する必要があります。
  2. MD5 に対して衝突とプリイメージ攻撃が可能です。
  3. Bcrypt は、CPU がますます強力になるにつれて、より多く反復するように構成できます。

したがって、MD5 でソルティング アンド ストレッチを使用することは、bcrypt を使用するほど安全ではありません。この問題は、MD5 よりも優れたハッシュ関数を選択することで解決できます。

たとえば、SHA-256 を選択した場合、出力サイズは 256 ビット (32 バイト) になります。bcrypt のように反復回数を増やすようにソルティング アンド ストレッチングを構成できる場合、結果のハッシュを格納するために必要なスペースの量を除いて、両方の方法に違いはありません。

于 2011-08-19T01:02:24.343 に答える
1

この質問にはすでに回答がありますが、BCryptとハッシュループの微妙な違いを指摘したいと思います。非推奨のMD5アルゴリズムと指数関数的なコスト係数は無視します。これは、質問で簡単に改善できるためです。

ハッシュ値を計算し、その結果を使用して次のハッシュ値を計算します。BCryptの実装を見ると、各反復で結果のハッシュ値と元のパスワード(キー)が使用されていることがわかります。

Eksblowfish(cost, salt, key)
  state = InitState()
  state = ExpandKey(state, salt, key)
  repeat (2^cost)
    state = ExpandKey(state, 0, key)
    state = ExpandKey(state, 0, salt)
  return state

これが理由です。Bcryptでハッシュされたパスワードを取得して反復を続行することはできません。これは、元のパスワードを知っている必要があるためです。私はそれを証明することはできませんが、これによりBcryptは単純なハッシュループよりも安全になると思います。

于 2012-09-14T11:21:19.700 に答える
1

PBKDF2またはパスワードベースのキー派生関数の実装について効果的に話している. 効果的には BCrypt と同じで、パスワードを取得するのにかかる CPU 時間を長くできるという利点があります。BCrypt のようなものに対するこれの利点は、パスワードを何回繰り返したかを知ることで、パスワードを増やす必要があるときに、データベース内のすべてのパスワードをリセットせずにそれを実行できることです。アルゴリズムが最終結果を n 回目の反復 (n は前の反復回数) であるかのように取得し、続行するだけです。

独自のライブラリを作成する代わりに、適切な PBKDF2 ライブラリを使用することをお勧めします。すべての暗号化と同様に、何かが安全かどうかを知る唯一の方法は、インターウェブによって「テスト」されているかどうかです。(こちらをご覧ください

この方法を使用するシステム:
.NET には既に実装されているライブラリがあります。 Mac、Linux、および Windows のファイル暗号化では、この暗号化方式の多くの反復 (10,000 以上) のバージョンを使用して、ファイル システムを保護しています Wi-Fi ネットワークは、多くの場合、この暗号化方法を使用して保護されていますソース


質問していただきありがとうございます。パスワードを保護するために使用していた方法を調査する必要がありました。

TTD

于 2011-08-18T23:55:23.867 に答える
0

厳密に言えば、bcryptは実際にテキストを暗号化します。

OrpheanBeholderScry疑い

64回。

ただし、パスワードから派生したキーとランダムに生成されたソルトを使用してそれを行います。

パスワードハッシュはハッシュではありません

「パスワード ハッシュ アルゴリズム」 (bcrypt など)の真の長所は、大量の RAM を使用することです。

SHA2 は高速になるように設計されています。あなたがリアルタイム Web サーバーで、ファイルの整合性を検証したい場合は、非常に高速に実行され、リソース使用量が非常に少ないものが必要です。これは、パスワードハッシュのアンチテーゼです。

  • SHA2 は高速になるように設計されています
  • SHA2 は 128 バイトの RAM で動作可能
  • SHA2 はハードウェアに簡単に実装可能
  • 毎秒3 億 3000 万のハッシュを計算できる USB スティック デバイスを所有しています
  • 実際、私はそれらの17を所有しています

「高速」ハッシュを複数回実行する場合(たとえば、 PBDKF2 の一般的な推奨値は10,000 です)、実際にはセキュリティを追加していません。

必要なのは、ハードウェアに実装するのが難しいハッシュです。必要なのは、GPU で並列化するのが難しいハッシュです。

過去数十年にわたって、RAM がパスワード ハッシュの試みを遅くする鍵であることを学びました。カスタム ハードウェアは生の計算を実行する際に優れています (実際、CPU の 1% だけが計算専用であり、残りはマシン命令をより高速なものに変換することに専念しています。プリフェッチ、アウトオブオーダー実行、分岐予測、キャッシュ)。カスタム ハードウェアを台無しにする方法は、アルゴリズムが大量の RAM に触れる必要があるようにすることです。

  • SHA2: 128 バイト
  • 暗号化: 4 KB
  • scrypt (設定可能): LiteCoin で 16 MB
  • Argon2 (構成可能): ドキュメントの例で 64 MB

パスワードハッシュとは、単純に高速ハッシュを複数回使用することを意味するものではありません。

  • 最近推奨される bcrypt のコスト ファクターは 12 です。そのため、計算には約 250 ミリ秒かかります。
  • 最新のシングルコア CPU でその時間コストに匹敵するには、約 330,000 回の SHA2 の反復を実行する必要があります。

しかし、2.5W、USB、SHA2 スティックに戻ると、330 Mhashes/sec です。それを防ぐには、8,300 万回の反復が必要になります。

  • CPUコストだけを追加しようとしている場合: 負けています。
  • メモリコストを追加する必要があります

bcrypt は 21 年前のもので、4KB しか使用しません。それでも、MD5、SHA-1、または SHA2 ハッシュよりも無限に優れています。

于 2012-05-04T02:13:22.620 に答える