Coda Hale の記事「パスワードを安全に保存する方法」では、次のように主張しています。
bcrypt には、レインボー テーブル攻撃を防ぐためのソルトが組み込まれています。
彼はこの論文を引用しており、OpenBSD の の実装についてbcrypt
次のように述べています。
OpenBSD は、arcfour (arc4random(3)) キー ストリームから 128 ビットの bcrypt ソルトを生成し、カーネルがデバイス タイミングから収集したランダム データをシードします。
これがどのように機能するのかわかりません。私の塩の概念では:
- 保存されたパスワードごとに異なる必要があるため、それぞれに個別のレインボー テーブルを生成する必要があります。
- 反復できるように、どこかに保存する必要があります。ユーザーがログインしようとすると、パスワードの試行を行い、最初にパスワードを保存したときに行ったのと同じソルトとハッシュの手順を繰り返し、比較します
Devise (Rails ログイン マネージャー) を bcrypt で使用している場合、データベースにソルト列がないため、混乱します。ソルトがランダムでどこにも保存されていない場合、どうすれば確実にハッシュ プロセスを繰り返すことができるでしょうか?
要するに、どのようにして bcrypt に salt を組み込むことができるのでしょうか?