2

重複の可能性:
SHA-1 はパスワード ストレージに対して安全ですか?

私は暗号化が初めてで、疑問があります。くだらない質問かもしれませんが質問させてください。SHA1 が復号化できないことはわかっています。しかし、ハッカーが暗号化されていないパスワードとその SHA1 暗号化された値の 2 つの列を含むテーブルを作成した場合、簡単に考えてみましょう。行には、彼がプログラムを使用して 6 か月で生成したすべての文字の組み合わせのパスワードが含まれています (たとえば、9 億レコード)。SHA1 で暗号化されたパスワードを取得した場合、暗号化されていないパスワードを簡単に取得できませんか?

はいの場合、これを防ぐための解決策はありますか?

前もって感謝します。

4

4 に答える 4

8

あなたが説明している攻撃は、レインボー テーブルと呼ばれます。はい、確かに短いパスワードの有効な懸念事項です。つまり、パスワードの最小長に関する一般的なセキュリティ要件です。ただし、テーブルのサイズは、パスワードの長さに応じて指数関数的に大きくする必要があります。たとえば、大文字と小文字を区別する英数字のパスワードでは、1 文字追加するごとにテーブルが 62 倍になります。したがって、特定の長さを超えると計算が困難になります。(たった 8 文字で、約 218兆通りの組み合わせが生まれます。)

もう 1 つの予防措置として、パスワードをソルトすることもできます (ハッシュを計算する前に、単純に各パスワードに定数文字列を追加する必要がある場合があります)。このように、攻撃者が事前に計算されたレインボー テーブルにアクセスできたとしても、ハッシュに対しては役に立ちません。ソルトごとに新しいレインボー テーブルを計算する必要があります。

于 2012-06-13T06:26:57.807 に答える
5

レインボー テーブル攻撃を防ぐ一般的な解決策は、Saltを使用することです。

ただし、SHA1 はあまり安全とは見なされていないことを付け加えておきます。強力なコンピュータを使えば、ブルート フォースを使用して暗号化されていないパスワードを見つけるのは非常に簡単です。パスワードを保存するには、bcrypt や PBKDF2 などの低速ハッシュ アルゴリズムを使用することをお勧めします。

于 2012-06-13T06:39:55.367 に答える
1

あなたが説明したような辞書攻撃は、ハッシュをソルトすることで防ぐことができます。基本的に、使用されている辞書の範囲を超えて、平文の長さと複雑さを強制します。

実装も簡単です。1つの方法は、「0shunF1ave」などのパスワードを維持し、それをプレーンテキストに添付することです。したがって、SHA1(password)を保存する代わりに、SHA1( "0shunF1ave" + password)を保存します。パスワードを確認するときは、SHA1( "0shunF1av1" + candidate)などの候補に対して、最初に保存されたハッシュに対して同じハッシュを実行し、それらが一致するかどうかを確認します。

于 2012-06-13T06:37:20.660 に答える
1

はい。そのため、ハッシュをソルトすることが重要です。あなたが話しているテーブルのタイプが適切にソルトされている限り、単一のパスワードにのみ役立ちます。

たとえば、http://msdn.microsoft.com/en-us/magazine/cc164107.aspxを参照してください。

于 2012-06-13T06:28:39.480 に答える