bcryptでソルトを保存する必要がありますか?


189

bCryptのjavadocには、パスワードを暗号化する方法に関する次のコードがあります。

String pw_hash = BCrypt.hashpw(plain_password, BCrypt.gensalt()); 

平文のパスワードが以前にハッシュされたものと一致するかどうかを確認するには、checkpwメソッドを使用します。

if (BCrypt.checkpw(candidate_password, stored_hash))
    System.out.println("It matches");
else
    System.out.println("It does not match");

これらのコードスニペットは、ランダムに生成されたソルトが破棄されることを私に示唆しています。これは事実ですか、それとも誤解を招くコードスニペットですか?

回答:


214

ソルトはハッシュに組み込まれます(base64スタイルの形式でエンコードされます)。

たとえば、従来のUnixパスワードでは、ソルトはパスワードの最初の2文字として保存されていました。残りの文字はハッシュ値を表しています。チェッカー関数はこれを知っており、ハッシュを引き離してソルトを元に戻します。


59
ソルトはパスワードに組み込まれています。だから塩を保存する必要はありません。
Swapnonil Mukherjee、

2
それをありがとう。私は彼らがjavadocでそれを言って
くれれ

1
ありがとう-私もこれを理解しようとしていました!これが良いアイデアかどうか今疑問に思います。ソルトをハッシュに保持することには、ソルトを個別に保存するよりもメリット/デメリットがありますか?
Adam

8
@Adam-ソルトはランダムに生成されるため、データベースで2つのものを関連付ける方法を用意する必要はありません。
ロデオクラウン2011年

ソースコードを確認したところ、salt引数のJavaDocは「おそらくBCrypt.gensaltを使用して生成された」のですが、genSalt()メソッドを使用する必要があるか、例外が発生することがわかりました= /
the_new_mr
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.