1

サイトのセキュリティ レベルをアップグレード中です。

パスワードを保存する最良の方法を調査しているときに、PHP 5.3 で BCRYPT オプションを見つけました。静的 SALT を使用するためにこの関数を実装しましたが、パスワードごとに異なる SALT を使用するか、目的を無効にする必要があることを読みました。

SALT をユーザー レコードと共にプレーン テキストでデータベースに保存する必要がありますか? これも目的に反しますか?または、md5 を使用してソルトをハッシュし、データベースに保存する必要がありますか?

これを実装して SALT を保存するときの最良の方法は何ですか?

4

2 に答える 2

3

bcryptのモジュラー crypt 形式には、128 ビットのソルトが既に含まれています。したがって、それとは異なる実装を使用しない限り、別のソルトは必要ありません。

ソルトの主な目的は、格納された値に対するルックアップ テーブル支援辞書攻撃が非現実的であるように、各入力を一意にすることであることに注意してください。


Jaccocryptは、PHP のネイティブ bcrypt 実装がソルトを自動的に生成しないことを思い出させてくれました。したがって、自分で行う必要があります。たとえば、次のようになります。

$salt = substr(str_replace('+', '.', base64_encode(call_user_func_array('pack', array_merge(array('H14N'), explode('.', uniqid('', true)))).pack('N2', mt_rand(), mt_rand()))), 0, 22);
$hash = crypt($password, '$2a$10$'.$salt.'$');
于 2012-05-21T07:38:54.963 に答える
2

ユーザーごとに新しいランダム ソルトを作成し、それをハッシュと共にデータベースに保存する必要があります。ほとんどの bcrypt 実装はすでにそれを行っています。出力を見ると$、ソルトを含む分離された値であることがわかります。

于 2012-05-20T19:38:03.767 に答える