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