4

私はMichaelHartlの本を読んでいます(素晴らしい、無料のリソース、ところで、Michaelに感謝します!)。パスワードのソルトとハッシュについて質問があります。パスワードをソルトするポイントは、ハッカーがレインボー攻撃を実行しないようにすることです。これは、ハッカーが使用されている暗号化の種類を推測できる場合、基本的にブルートフォース攻撃です。この種の攻撃を防ぐために、暗号化される前にパスワードをランダム化するためにソルトが使用されますが、そのソルトは暗号化されたパスワードと一緒に保存する必要がありますか?もしそうなら、ハッカーがデータベースにアクセスして暗号化されたパスワードを取得できる場合、ハッカーはソルトを取得してレインボー攻撃を続行することもできませんか?

これがMichaelのプロセスのコード例です...

>> Time.now.utc
=> Fri Jan 29 18:11:27 UTC 2010
>> password = "secret"
=> "secret"
>> salt = secure_hash("#{Time.now.utc}--#{password}")
=> "d1a3eb8c9aab32ec19cfda810d2ab351873b5dca4e16e7f57b3c1932113314c8"
>> encrypted_password = secure_hash("#{salt}--#{password}")
=> "69a98a49b7fd103058639be84fb88c19c998c8ad3639cfc5deb458018561c847"

本当にありがとう!

4

1 に答える 1

9

いいえ、レインボー攻撃はブルートフォース攻撃と同じではありません。

レインボーテーブルは、文字列とそのハッシュの大きなデータベースと考えることができます。誰かがあなたのデータベースにアクセスすると、パスワードハッシュをレインボーテーブルのものと比較して、パスワードを簡単に取得できます。

ソルトは、パスワードにビットを追加することでこれを防ぎます。ソルトが十分に長い場合、ハッシュはレインボーテーブルに含まれません。

ブルートフォース攻撃を使用する場合はハッシュを計算する必要がありますが、レインボー攻撃を使用する場合はすでにハッシュがあります。

そうです、誰かがあなたのデータベースにアクセスすると、彼らもあなたのソルトを手に入れることができます。しかし、それがレコードごとに一意であるかどうかは関係ありません。

于 2011-03-06T22:30:01.733 に答える