気になるのは最大の長さです。ウィキペディアから、2 ^ 256 ビット未満の任意の長さのメッセージが必要であると読みました。2の256乗ということですか?また、パスワードを複数回ハッシュする方が安全でしょうか? 例:
WHIRLPOOL(WHIRLPOOL(WHIRLPOOL(WHIRLPOOL("passw0rd"))))
それとも、衝突のリスクが高くなりますか?
気になるのは最大の長さです。ウィキペディアから、2 ^ 256 ビット未満の任意の長さのメッセージが必要であると読みました。2の256乗ということですか?また、パスワードを複数回ハッシュする方が安全でしょうか? 例:
WHIRLPOOL(WHIRLPOOL(WHIRLPOOL(WHIRLPOOL("passw0rd"))))
それとも、衝突のリスクが高くなりますか?
はい、これは 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 が精査したハッシュ アルゴリズムを使用することをお勧めします。