1

dtb に新しいエントリを作成するときのハッシュ + ソルトの考え方を理解しています。ソルトに固定文字列がある場合、それを実装するのは難しくないかもしれませんが、たとえばユーザーの誕生日をソルトとして使用したい場合はどうすればよいですか? そのパスワードをデータベースに保存するのは簡単ですが、ログイン中にこれをハッシュする方法は? applicationContext-security.xmlファイルのこのコードをグーグルで検索しました。ここではusername、ソルトの値を使用しています。

<!-- authentication from database -->
<security:authentication-manager>
    <security:authentication-provider>
        <security:jdbc-user-service
            data-source-ref="dataSource"
            users-by-username-query="
          select username,password, enabled 
          from users where username=?"authorities-by-username-query="
          select u.username, ur.authority from users u, user_roles ur 
          where u.user_id = ur.user_id and u.username =?  " />
    <security:password-encoder hash="sha-256">
        <security:salt-source user-property="username" />
        </security:password-encoder-->
    </security:authentication-provider>

</security:authentication-manager>

つまり、ユーザーの誕生日をソルトとして使用したい場合は、それを dtb に保存し、dtb から引き出してからソルトとして使用する必要があります。usersテーブル列usernamepassword, , がある場合、パスワードをハッシュできるため、意味がありませんが、攻撃者にとっては、値がソルトとして使用されることbirthdayは明らかです。birthday私が欠けているものはありますか、それとも本当にうまくいきますか?

4

2 に答える 2

1

ソルトは機密情報ではなく、開示されても問題ありません。ソルトは、ハッシュに対するレインボー テーブル攻撃を単純に防ぎます。ソルトにはかなり高いレベルのエントロピーが必要であり、誕生日は、たとえば からの 32 バイトほど安全ではない可能性があることに注意してくださいSecureRandom

于 2013-08-16T12:52:11.890 に答える
1

ソルトを使用する目的は、ハッカーからデータベースがダンプされた場合にユーザーのパスワードを保護することです。ハッシュは一方向の変換であるため (プレーン テキストのパスワードを取得するために変換を逆にすることはできません)、ハッカーはハッシュの辞書を使用してユーザーのパスワードを推測します (一般的なパスフレーズを使用)。そのため、ソルトを追加すると、このタイプの攻撃に対する追加の保護レイヤーが追加されます。

ウィキペディアから:

辞書攻撃

レインボーテーブルアタック

于 2013-08-16T12:52:04.403 に答える