0

気になるのは最大の長さです。ウィキペディアから、2 ^ 256 ビット未満の任意の長さのメッセージが必要であると読みました。2の256乗ということですか?また、パスワードを複数回ハッシュする方が安全でしょうか? 例:

WHIRLPOOL(WHIRLPOOL(WHIRLPOOL(WHIRLPOOL("passw0rd"))))

それとも、衝突のリスクが高くなりますか?

4

1 に答える 1

2

はい、これは 2^256 ビットを意味します。もちろん、1 バイトは 2^3 ビットであるため、最大空間は 2^253 バイトになります。心配する必要はありません。

はい、複数回ハッシュすることをお勧めします。いいえ、「サイクル」について (あまり) 心配する必要はありません。多くの疑似乱数ジェネレーターは、同じ方法でハッシュを使用しています。ハッシュ アルゴリズムは、あまりにも多くの情報を失うべきではなく、短いサイクル タイムであってはなりません。


ただし、パスワード ハッシュは、パスワード ベースのキー派生関数を使用して計算する必要があります。その後、「鍵」が保管されます。PBKDF では、ハッシュ (PBKDF2 など) または鍵付きブロック暗号 (bcrypt) を使用できます。ほとんどの KDF は、基礎となるハッシュ アルゴリズムやブロック暗号を直接使用する代わりに、メッセージ認証コード (HMAC または MAC) を使用しています。

PBKDF への入力は、salt と反復カウントです。反復回数は、攻撃者があらゆる種類のパスワードを試してシステムをブルート フォースすることを困難にするために使用されます。基本的には、上で WHIRLPOOL で行ったことと同じです。通常、反復回数のみが 1 から 10,000 の間です。通常、各反復ではさらに多くのデータが混合されます。

さらに重要なことは、(パスワード固有の) ソルトを使用して、重複したパスワードを検出できないようにし、レインボー テーブルを使用した攻撃を回避することです。通常、ソルトは約 64 ~ 128 ビットです。ソルトと反復回数は「ハッシュ」とともに保存する必要があります。


最後に、WHIRLPOOL の代わりに SHA-512 などの NIST が精査したハッシュ アルゴリズムを使用することをお勧めします。

于 2013-08-08T01:54:25.007 に答える