4

これがばかげた質問である場合は申し訳ありませんが、私は知りたいだけです:bcryptのソルトのポイントは何ですか?つまり、パスワードからハッシュを作成するための次のコードがある場合:

function generateSalt() {
$salt = '$2a$13$';
$salt = $salt . '1111111111111111111111';
return $salt;
}

function generateHash($salt, $password) {
$hash = crypt($password, $salt);

return $hash;
}

$salt = generateSalt();

$providedPassword = generateHash($salt, rand(3,29));

echo $providedPassword;

上記の出力例:

$ 2a $ 13 $ 111111111111111111111uDdpsIcwCVOwEyNueskskXkniY5206fW

$ 2a $ 13 $ 111111111111111111111udcvrNt9quPukFRl8./jXRzDGfE9lw0W

したがって、ソルトがどこで終了するかを明確に確認できます。誰かがデータベースを取得した場合、ソルト部分を削除してハッシュされたパスワードだけを検索できるため、ソルトを使用しても意味がありません。だから、私はbcryptを間違って使用していますか?(静的な塩は、それが私のハッシュのどこに現れるかを示すためだけのものでした)、またはこれには理由がありますか?

4

2 に答える 2

4

ソルトの背後にある考え方は、2 つの入力が同じであっても、毎回異なるソルトが使用されている限り、ハッシュは同一ではないということです。

たとえば、多くのユーザーが同じパスワードを選択します。パスワードのハッシュを保存するだけの場合、データベースには同一のハッシュが多数含まれます。そのため、攻撃者がパスワードを 1 回見つけただけで、そのパスワードをすべてのユーザーに簡単に使用できてしまいます。ただし、パスワードがユーザーごとに異なるソルト値でハッシュされている場合、攻撃者はストアに保存されているすべてのハッシュをクラックする必要があります。

使用しているコードが何であるかはわかりませんが (そのcrypt関数は何ですか?)、実際のハッシュにソルト値を追加しても、ハッシュ自体も salt を使用して計算されている限り問題ありません。とにかく元のソルトを保存して、新しい入力 (パスワード) が保存されたハッシュと一致することを確認する必要があります。ただし、ハッシュを使用するたびにソルト値を変更する限り、元の入力に関する情報を収集する簡単な方法はありません。

于 2012-10-23T19:11:21.990 に答える
0

ハッシュのソルティングは、ハッシュがホスト間でオンラインで送信されている間に、ハッシュが元の値に逆にされる可能性がある攻撃に対してハッシュを強化する手段です。そのシナリオでは、盗聴者はハッシュをキャプチャできますが、ソルト値の知識がなければ、技術に関係なくハッシュを元に戻すことはできません.

于 2012-10-23T19:02:56.530 に答える