web-dev-qa-db-ja.com

ランダムソルトはどのように機能しますか?

パスワードのハッシュにランダムソルトを使用する方法がわかりません。おそらくランダムソルトはパスワードのハッシュ以外のものを指しますか?これが私の思考プロセスです:

  1. 塩は、ハッシュする前にパスワードの最後に余分なジャンクを追加するために使用され、レインボーテーブルによってクラックされる可能性と戦います

  2. ただし、パスワードが正しいことを確認できるようにするには、パスワードを暗号化する前に各パスワードに同じソルトを使用して、特定のユーザー用に保存されたハッシュと一致するかどうかを確認する必要があります

  3. ランダムなソルトが使用されている場合、そのパスワードを再度確認するにはどうすればよいですか?ランダムソルトは、各暗号化に使用するためにどこかに保存されていますか?何らかの計算されたソルトを使用するのではなく、ハッシュされたパスワードと一緒にソルトが保存される場合、攻撃者はデータを保持しているかどうか本質的に知らないので、私には安全性が低いようです。

ここに何か欠落しているかどうか、またはランダムなソルティングが暗号化の別のシナリオに関係しているのかどうかはわかりませんが、この特定のケースでは意味がありません。上記の暗号化前にパスワードをハッシュする場合、ランダムソルトはどのように機能しますか?

45
Kevin DiTraglia

ランダムソルトは、各暗号化に使用するためにどこかに保存されていますか?

はい

ハッシュされたパスワードと一緒にソルトが保存されると、攻撃者がデータを保持しているかどうか攻撃者が本質的に知らないのではなく、ソルトがハッシュされたパスワードと一緒に保存される場合、私にとって安全性が低いようです。

あなたが言ったように、塩がすることと発明するために発明された唯一のことはそうではないので、それはそうではありません:

レインボーテーブルにひかれる可能性と戦うために

そして何も。それは単一のパスワードに複雑さを追加します-そして、データベース内のすべてのパスワードに対して、それはユニークです。パスワードを確認するには、パスワードと一緒に保管する必要があります。これは、その単一のパスワードのセキュリティを最少ビットで損なうことはありません-ハッシュアルゴリズムは、ソルトなしと同じくらい安全です。

しかし、データベース全体を見ると、攻撃者はそれぞれのソルトを使用して非常に単一のハッシュを個別に計算する必要があり、それらに対して一括操作を実行できないため、すべてのパスワードはレインボー攻撃からよりよく保護されています。

40
F.P

ソルトなしでハッシュされたパスワードを検証するには、MD5(privided_password)を計算し、データベースに保存されているデータと比較します。 decode多くのパスワードをハッシュテーブルで簡単に検索します。 (MD5はパスワードの保存に弱いことがわかっています。たとえば、ハッシュがSHA-512よりも短いという理由だけでMD5を使用しています。)

Saltを使用する場合は、MD5(provided_password + salt)を計算し、データベースと比較する必要があります。ソルトはハッシュの一部なので、ソルトをデータベースに保存し、パスワードをユーザーに保存します。

3人のユーザーがpassw0rdをパスワードとして使用し、ソルトなしでMD5を使用してパスワードをハッシュ化すると、誰かがデータベースを盗むと、次のようになります。

|username    | password                         |
|user1       | 71d00b760d017b2999eb54e32f41f592 |
|user7       | 71d00b760d017b2999eb54e32f41f592 |
|user13      | 71d00b760d017b2999eb54e32f41f592 |

したがって、ハッカーがハッシュテーブルで1つのパスワードを見つけると(オンラインにはたくさんあります)、彼は他のすべてのパスワードを知っています。

最初のステップは、塩を使用することです。すべてのパスワードにはハッシュ前に追加のデータがありますが、同じソルトが使用されます。

|username    | salt | password                         |
|user1       | SALT | a66a96b36d78e452202c12d36b6d198c |
|user7       | SALT | a66a96b36d78e452202c12d36b6d198c |
|user13      | SALT | a66a96b36d78e452202c12d36b6d198c |

このスキームを使用すると、ハッカーはハッシュをブルートフォースしてパスワードを取得する必要があります。しばらく時間がかかりますが、1つのパスワードが解読されるとすぐに、他のすべてのパスワードも明らかにされます。

次のステップはランダムな塩です。すべてのパスワードには、異なるランダムソルトがあります。

|username    | salt | password                         |
|user1       | SALT | a66a96b36d78e452202c12d36b6d198c |
|user7       | ASDF | 8062279f0ba04fa6ee41d0a9e04f4c93 |
|user13      | ABCD | 5743092bfb79214247c50c4102af0b99 |

この場合、たとえすべてのユーザーが同じパスワードを持っているとしても、ハッカーはすべてのパスワードをブルートフォースなしでは知ることができません。この例では、ソルトは非常に短く、わずか4バイトですが、より大きなソルト(128バイト以上)を使用して、パスワードをブルートフォースすることが難しくなります。

24
ThoriumBR