14

新しいシステムでは、バイナリ入力 (たとえば、1 キロバイトのテキスト、またはより大きなテキストとバイナリ ファイル) からデジタル署名を計算するために一方向ハッシュが必要です。この必要性は、Scons (ビルド システム) がコマンドラインとソース ファイルをハッシュする方法と、Git (バージョン管理システム) がファイルをハッシュしてストレージ/同期用の署名を計算する方法に似ています。

Scons は MD5 を使用し、Git は SHA-1 を使用することを思い出してください。

MD5 と SHA-1 は「壊れて」いますが、Scons も Git も特にセキュリティのためにハッシュを使用していません (たとえば、パスワードを保存するためではありません)。(もちろん、これはレガシーの採用による部分的な合理化です。)

質問: 新しいシステムで (非暗号化/セキュリティ) 一方向ハッシュに SHA256 (MD5 や SHA-1 ではなく) を使用しますか?

懸念事項は次のとおりです。

  1. MD5 と SHA-1 の採用には長い歴史があります
  2. SHA256 は比較的新しい (歴史はそれほど多くない) ですが、現在、新しい作業に推奨されているようです (ただし、「より強力な」アルゴリズムの強度は、私のアプリケーションには特に必要ありません)。
  3. SHA256 は計算に時間がかかる
  4. SHA256 はより長いキーを生成します (これらはディレクトリ/ファイル名として使用され、インデックス ファイルに格納されます) が、生成されたキーを切り捨てることができると思います (ハッシュはそれほど強力ではありませんが、十分なはずです)、または単にストレージが安価であると仮定しますファイルシステムはそれを処理できます。

Scons や Git コミュニティと一致する回答に特に興味があります。または「できるだけ早く新しいハッシュに移行したい!」(彼らの計画が何であるかわかりませんか?)

4

4 に答える 4

27

はい、SHA-256 を使用します。SHA-256 は、セキュリティ目的以外にも多くのことを念頭に置いていました。実際、SHA1 を置き換える必要があった理由の 1 つは、まさにハッシュ関数が必要なためです。ハッシュ アルゴリズムは有限サイト出力を生成します。未定の量の入力がある間。最終的には衝突が発生します。出力が大きいほど。衝突の可能性が低い (適切なハッシュ アルゴリズムを使用している場合)。

Git はファイル名として SHA1 を使用するため、SHA1 を採用しました。小型でコンパクトであることを望んでいました。SHA256 は、はるかに大きなダイジェストを生成します。より多くのディスク スペースと、より多くのデータをネットワーク経由で送信するために消費します。この質問は、git で衝突が発生した場合にどうなるかを具体的に説明しています。

あなたのポイントを見るには:

  1. SHA256 は、問題があった場合に十分長い間使用されてきました。私たちは今までにそれらを見たはずです。
  2. それ自体は「より強い」というわけではなく、衝突が発生する可能性は低くなります (それがより強い基準である場合、はい、より強力です)。
  3. SHA-256 は低速で​​す。はい。もっと遅い?あなたのニーズが何であるかによって異なります。95%の人に。適切な実装を使用していると仮定すると、パフォーマンスは許容されます。
  4. 一般に、SHA2 のハッシュを切り捨てることは問題ありません
于 2011-06-26T15:24:37.077 に答える
7

MD5 を使用しても、悪意のない衝突の可能性はほとんどありません。ここに思考実験があります:

十分に詰め込まれたハード ドライブには、1M のファイルが含まれる場合があります。実験のために、10M のファイルがあると想像してください。世界の人口は 1000 万人で、それぞれに 1 台のコンピューターがあり、すべてのファイルが異なるとします。

10E6 * 10E9 = 1E17, < 2^57 の多数の異なるファイルと競合することになります。

このような大げさなケースでの MD5 衝突の確率は、2^71 分の 1 未満、または約 2E21 分の 1 未満です! これを大局的に見ると、衝突確率が 10M に 1 の場合、実験をおよそ 2E14 回繰り返す必要があります。つまり、ビッグバン以降、1 時間ごとにすべてのファイルを置き換え、さらに数十億年続けなければなりません。 .

2E14 / 24 / 365 / 13500E6 = 1.69

もちろん、SHA1 や SHA256 を使用すると、確率はさらに小さくなり、悪意のある攻撃に対する耐性も得られます。MD5 とは異なり、誰かが同じハッシュを持つために意図的にファイルを作成することは (現在) 不可能です。

于 2012-05-17T09:10:37.050 に答える
1

何をしているかによります。SHA-256 ハッシュの計算にはかなりの時間がかかります。多くのアプリケーションにとっては大したことではありませんが、アプリが 1 分間に数百または数千の計算をしようとしている場合はどうでしょうか? 追加の時間が多すぎることに気付くかもしれません。

ただし、SHA-1 は SHA-256 よりも衝突の可能性がはるかに高くなります。ただし、そのような可能性は非常に小さく (SHA-1 の場合は 2^160/2 に 1 と思います)、ほとんどのアプリではヒットしない可能性が高いことを理解してください。ただし、ハッシュするものが多いほど、チャンスは高くなります。数百万または数十億ものハッシュを行っている場合、これは懸念事項になる可能性があります。

于 2011-06-26T18:13:50.507 に答える