22

自明に壊れないものはありますか?

4

11 に答える 11

44

この 2008 年の回答は現在、危険なほど古くなっています。SHA (すべてのバリアント) は自明に壊れるようになりました。ベスト プラクティスは (2013 年 1 月現在) キーストレッチ ハッシュ (PBKDF2 など) を使用するか、理想的には RAM を集中的に使用するハッシュ ( Bcrypt など) を使用し、ユーザーごとのソルトを追加することです。それも。

ポイント 2、3、および 4 は引き続き注意を払う価値があります。

詳細については、IT Security SE サイトを参照してください。


元の2008年の回答:

  1. 実績のあるアルゴリズムを使用します。SHA-256 はデータベースで 64 文字を使用しますが、問題のない列にインデックスがあり、MD5 や SHA-1 より信頼性が高く、証明済みのハッシュです。また、標準のセキュリティ スイートの一部として、ほとんどの言語で実装されています。ただし、SHA-1 を使用する場合は気を悪くしないでください。

  2. パスワードをハッシュするだけでなく、他の情報も含めてください。パスワードだけでなく、「username:password:salt」などのハッシュを使用することがよくありますが、これをいじると、辞書攻撃を実行するのがさらに難しくなります。

  3. セキュリティは難しい分野です。独自のアルゴリズムやプロトコルを発明できるとは思わないでください。

  4. 「[AddUser] Hash of GeorgeBush:Rep4Lyfe:ASOIJNTY is xyz」のようなログを書き込まないでください。

于 2008-09-22T18:51:23.313 に答える
32

暗号化とパスワードの保存に関する最初のルールは「自分で発明しないでください」ですが、セキュリティの外観を維持するために必要な絶対的な最小値は次のとおりです。

基本ルール:

  1. プレーン テキストのパスワードを保存しないでください (つまり、パスワードを表示したり、送信したりすることはできません)。
  2. 保護されていない回線 (プレーン テキスト、エンコード、またはハッシュ) を介して、保存されているパスワードの表現を決して送信しないでください。
  3. スピードは敵です。
  4. ハードウェアと暗号解読の改善に合わせて、プロセスを定期的に再分析して改善します。
  5. 暗号化とプロセスは、ソリューションの ごく一部です。
  6. 障害点には、ストレージ、クライアント、送信、処理、ユーザー、法的令状、侵入、および管理者が含まれます。

手順:

  1. 合理的な最小限のパスワード要件を適用します。
  2. パスワードを頻繁に変更します。
  3. 取得できる最強のハッシュを使用してください -ここではSHA-256が提案されました。
  4. パスワードを固定ソルトと組み合わせます(データベース全体で同じ)。
  5. 前のステップの結果を、このレコードに保存および添付されている一意のソルト(ユーザー名、レコード ID、GUID、長い乱数など) と組み合わせます。
  6. ハッシュ アルゴリズムを複数回 ( 1000 回以上) 実行します。理想的には、前のハッシュに毎回異なるソルトを含めます。速度はあなたの敵であり、複数の反復は速度を低下させます。頻繁に反復が 2 倍になります (これには、新しいハッシュをキャプチャする必要があります。次回パスワードを変更するときに実行してください)。

ああ、SSL やその他の回線セキュリティを実行していない限り、パスワードがプレーン テキストで送信されるのを許可しないでください。また、クライアントからの最終ハッシュと保存されたハッシュのみを比較する場合は、それをプレーン テキストで送信することも許可しないでください。クライアントに nonce (1 回使用される数値) を送信し、生成されたハッシュ (上記の手順を使用) でそれをハッシュしてから、そのハッシュを送信する必要があります。サーバー側で同じプロセスを実行し、2 つのワンタイム ハッシュが一致するかどうかを確認します。その後、それらを処分してください。もっと良い方法がありますが、それが最も簡単な方法です。

于 2008-09-23T18:58:08.250 に答える
16

CodingHorrorは、昨年、この素晴らしい記事を掲載しました。記事の最後にある推奨事項はbcryptです。

于 2008-09-22T18:43:43.037 に答える
8

前述のアルゴリズムは暗号的に安全なハッシュアルゴリズムです(ただし、MD5は現在安全であるとは見なされていません)。

ただし、パスワードからキーを取得するために特別に作成されたアルゴリズムがあります。これらは主要な導出関数です。これらは対称暗号で使用するように設計されていますが、パスワードの保存にも適しています。たとえば、 PBKDF2は、ソルト、多数の反復、および優れたハッシュ関数を使用します。ライブラリ(.NETなど)を実装しているライブラリがある場合は、それを検討する必要があると思います。

于 2008-09-22T19:13:44.010 に答える
6

MD5やSHA1などの強力な暗号化ハッシュ関数を使用しますが、適切なソルトを使用するようにしてください。そうしないと、レインボーテーブル攻撃を受けやすくなります。

于 2008-09-22T18:45:24.967 に答える
6

ハッシュされたパスワード値に一意のソルトを追加します (ソルト値をデータベースに保存します)。一意のソルトを使用する場合、SHA1 や MD5 よりも安全なアルゴリズムを使用する利点は、実際には必要ありません (その時点では、ソルトの使用は途方もない改善ですが、漸進的な改善です)。

于 2008-09-22T18:55:15.630 に答える
5

2013 年 1 月の更新

元の回答は 2008 年のもので、過去 5 年間で状況が少し変化しました。クラウド コンピューティングと強力な並列プロセッサ グラフィックス カードがすぐに利用できるようになったことで、MD5 または SHA1 としてハッシュ化された最大 8 文字または 9 文字のパスワードは簡単に解読できるようになりました。

SHA512 のようなより厳しいものと同様に、長いソルトは必須です。

ただし、すべての SHA バリアント ハッシュは、通信の暗号化 (すべてのメッセージが暗号化されて送受信されるメッセージ) 用に設計されています。このため、高速になるように設計されています。

パスワードハッシュの世界では、ハッシュの生成が速いほど、多数のハッシュを生成するのにかかる時間が短くなるため、この設計は大きな欠点です。

SHA512 のような高速ハッシュは、1 秒間に数百万回、場合によっては数十億回も生成できます。安価な並列処理を導入すると、パスワードのあらゆる可能な順列が絶対に必要になります。

キーストレッチングは、これに対抗する 1 つの方法です。キーストレッチ アルゴリズム (PBKDF2 など) は、より高速なハッシュ (SHA512 など) を何千回も適用するため、通常、ハッシュの生成に 1/5 秒程度かかります。ログインしている人は気付かないでしょうが、毎秒 5 ハッシュしか生成できない場合、ブルート フォース攻撃ははるかに困難になります。

次に、ユーザーごとのランダムなソルトが常に存在する必要があります。これは、ハッシュの最初のnバイトとしてランダムに生成できます(その後、ハッシュを作成して比較する前に、パスワード テキストから削除されて追加されます)、または追加の DB 列として生成されます。

そう:

パスワードをデータベースにハッシュするには、どのアルゴリズムを使用すればよいですか?

  • ハッシュ生成を遅くするためのキーストレッチ。私はおそらくPBKDF2に行きます。

  • ユーザーごとのソルトは、ユーザーごとの新しい攻撃を意味し、ソルトを取得する方法を考え出す作業もあります。

コンピューティング能力と可用性は飛躍的に向上しています。これらのルールは、さらに 4 年以内に再び変更される可能性があります。将来性のあるセキュリティが必要な場合は、bcrypt/scrypt スタイルのハッシュを調査します。これらは、低速のキーストレッチ アルゴリズムを使用し、多くの RAM を使用してハッシュを生成するステップを追加します。大量の RAM を使用すると、安価な並列プロセッサの有効性が低下します。

2008 年 9 月のオリジナル (コメントが意味を成すように残されています)

MD5+salt または SHA1+salt は「自明に壊れる」わけではありません。ほとんどのハックは巨大なレインボー テーブルに依存しており、これらは salt ではあまり役に立ちません[update, now they are]

MD5+salt は比較的弱いオプションですが、簡単には壊れません[update, now it is very easy to break]

SHA2 は 512 まであります - すぐに入手できるキットでクラックするのはかなり不可能[update, pretty easy up to 9 char passwords now]です - どこかの軍事バンカーにそれを実行できる Cray があると確信していますが[You can now rent this 'Cray' from Amazon]

于 2008-09-22T18:57:24.330 に答える
2

MD5またはSHAと、すべてのエントリに対してランダムに生成されたソルト値の組み合わせ

于 2008-09-22T18:45:13.640 に答える
1

前述のように、単純なハッシュ アルゴリズムはここでは使用しないでください。理由は次のとおりです。

http://arstechnica.com/security/2012/08/passwords-under-assault/

http://msdn.microsoft.com/en-us/library/system.security.cryptography.rfc2898derivebytes.aspxなどの別のものを使用してください

于 2013-01-22T12:49:00.007 に答える
0

All hashing algorithms are vulnerable to a "dictionary attack". This is simply where the attacker has a very large dictionary of possible passwords, and they hash all of them. They then see if any of those hashes match the hash of the password they want to decrypt. This technique can easily test millions of passwords. This is why you need to avoid any password that might be remotely predictable.

But, if you are willing to accept the threat of a dictionary attack, MD5 and SHA1 would each be more than adequate. SHA1 is more secure, but for most applications this really isn't a significant improvement.

于 2008-09-22T18:47:42.107 に答える
-2

MD5/SHA1ハッシュはどちらも適切な選択です。MD5はSHA1よりわずかに弱いです。

于 2008-09-22T18:43:11.960 に答える