重複の可能性:
PHP パスワードの安全なハッシュとソルト
salt が s ランダム、高エントロピー、長い文字列、ハッシュがsha512
orであると仮定するとbcrypt
、
なぜhash(password + perUserSalt)
十分ではないと見なされるのでしょうか?
この質問は、著者が次のように述べているPHP の新しいパスワードハッシュ API RFCを読んだ後に発生しました。
Hash(password + salt) = ダメ
重複の可能性:
PHP パスワードの安全なハッシュとソルト
salt が s ランダム、高エントロピー、長い文字列、ハッシュがsha512
orであると仮定するとbcrypt
、
なぜhash(password + perUserSalt)
十分ではないと見なされるのでしょうか?
この質問は、著者が次のように述べているPHP の新しいパスワードハッシュ API RFCを読んだ後に発生しました。
Hash(password + salt) = ダメ
何年も前は、データベースに保存するためにパスワードを次のようにハッシュするのが一般的でした。たとえば、次のようになります。
$hashedPassword = MD5($password . $salt);
ハードウェアが高速になり、MD5、SHA-1 だけでなく SHA-512 などの既知の高速ハッシュ関数も総当たり攻撃が非常に高速になりました。今日[2012年]、一般的なハードウェアで約8 ギガの MD5 値を計算することが可能であり、500,000 語を含む英語辞書全体をブルート フォースするのに、わずか 1 ミリ秒しか必要としません!
そのため、BCrypt や PBKDF2 のような鍵派生関数が発明されました。これらにはコスト パラメータがあり、ハッシュを何度も繰り返します (コスト係数によって反復回数が決まります)。各反復では、元のソルトを使用して新しいハッシュ値を計算します。そのため、ソルトを関数に個別に渡す必要があり、前に連結することはできません。
$hashedPassword = Bcrypt($password, $salt);
リンクされた記事は、今日では単一のハッシュ計算では不十分であることを説明したい、またはハッシュ関数に渡す前にソルトをパスワードと連結できないことを示したいと考えています。