2011-08-16 6 views
14

は、どのように私よりも、よりインテリジェントな人々がbcryptのは、これよりも優れていることを考え出したことを、その誇大広告与えられ、私は感覚を得るbcryptとハッシングの違いは何回ですか?

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

たとえば、よりbcrypt強いです。誰かが「スマート・レイマン」の言葉の違いを説明できますか?

+1

bcryptのラウンド数は「2^i」なので、指数関数的な増加ですが、非常に良い質問です...関連するノートでは、bcryptとHMACハッシュを「追加」硬化"。 –

答えて

3

MD5で複数回をハッシュbcryptのととの間の3つの重要な違いがあります

  1. 出力の大きさ:128ビット(16バイト)MD5および448ビットについて(bcryptの場合は56バイト)。数百万のハッシュをデータベースに格納する場合は、これを考慮する必要があります。
  2. MD5に対して衝突や画像攻撃が可能です。
  3. Bcryptは、CPUがますます強力になるにつれ、ますます反復するように設定できます。

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

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

+0

bcryptでハッシュ前パスワード(作業要素12)があり、作業係数を14に増やした場合は、パスワードをリセットする必要がありますか?または仕事の要因が知られているハッシュされたパスワードを再暗号化することができます –

+0

OK、MD5を忘れて、それは私の質問のポイントではありません。私のサンプルプログラムで、bcryptの出力と同じ長さの任意のハッシュを仮定します。ポイント1は削除されます。上記の私のサンプルはちょうどそれを解決するので(CPU時間を長くするための繰り返しハッシング)、ポイント3も削除されます。ポイント2が残っています:より良いハッシュを仮定すると、bcryptはより良くなりますか? –

+0

@luke塩漬けと伸ばしの反復回数を設定できる場合は何もありません。 – JVerstry

1

実際にPBKDF2またはパスワードベースのキー導出機能を実装することについて話しています。効果的にはBCryptと同じことですが、パスワードを取得するのにかかるCPU時間を長くすることができるという利点があります。このようなBCryptの利点は、パスワードを入力した回数を知ることで、パスワードを増やす必要が生じたときにとすることができ、がデータベース内のすべてのパスワードをリセットせずに済みます。あたかもアルゴリズムがn回目の繰り返し(nは前回の繰り返し回数です)にあるかのように最終結果を取得しておきます。

自分で作成するのではなく、適切なPBKDF2ライブラリを使用することをお勧めします。これは、すべての暗号化と同様に、何かが安全であるかどうかを知る唯一の方法です。
.NETがすでに実装ライブラリーがあります。このメソッドを使用し

システムを(hereを参照してください)。それを参照してくださいhere
Mac、linuxおよびwindowsファイルの暗号化では、この暗号化方式の多くの反復(10,000+)バージョンを使用してファイルシステムを保護しています。
のWi-Fiネットワークは、多くの場合、
Source

おかげ質問をするために暗号化するこの方法を使用して固定されている、それは私が私のパスワードを確保するために使用した方法を研究するために私を余儀なくされました。

TTD

4

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

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

資格情報を保護しようとすると、スピードがあなたに作用します。パスワードハッシュのコピーを持つ攻撃者は、MD5やSHA1などが実行するのが安価であるため、より多くのブルートフォース攻撃を実行することができます。対照的に、bcryptは故意に高価です。純正ユーザーが認証を試みる試行が1〜2回ある場合はほとんど問題はありませんが、多くの場合、ブルートフォースよりもコストがかかりますです。 OrpheanBeholderScryDoubt

は倍

0

厳密 bcryptのが実際にテキストを暗号化し、話します。

しかし、あなたのパスワードとランダムに生成された塩から派生した鍵でそれを行います。

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を単純なハッシングループよりも安全にすると思います。

関連する問題