web-dev-qa-db-ja.com

bcryptで塩を保存する必要がありますか?

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");

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

183
RodeoClown

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

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

210
Greg Hewgill