this の記事や他の多くの記事によると、SHA-1は安全ではありません。
私の場合、パスワードやデジタル証明書については心配していません。ファイルの整合性が心配です。
ファイル(ISOイメージや実行可能ファイルなど)が次のような方法で悪意を持って変更されることは合理的に可能ですか?
私の考えでは、SHA-1の衝突が発生するようにファイルを変更すると、ファイルはまったく役に立たなくなります。 ISOは完全に破損するか、実行可能ファイルが完全にスクランブルされて、もはや実行可能ファイルではなくなります。
しかし、私がそれを見る方法はまちがっているかもしれません。これまでのところ、SHA-1のファイル検証への継続的な適合性に関して、Google検索で何も見つかりませんでした。洞察はありますか?
SHA-1でこれを達成した人はまだいません。理論的には可能ですが、まだ実用的ではありません。 SHA-1の不安定性に関するレポートは、セキュリティレベルが私たちが望むほど高くないことを意味します。つまり、私たちが思ったほど心配する必要がなくなるまでに何年もかかりません。
特定のファイルと同じSHA-1ハッシュを使用してファイルを作成するのは、同じSHA-1ハッシュを使用して2つのファイルを作成するよりも困難です。そして、私たちの知る限り、この簡単な作業でさえ、世界中の誰もまだ達成していません。だからといって、明日は起こり得ないということではありません。
理論的には可能ですが、まだ実現していません。
あなたが探しているものは「ハッシュ衝突」と呼ばれています:同じハッシュを持つ2つのファイル。 SHA-1のような暗号化ハッシュコードは、通常、これを困難にするように設計されています。 SHA-1は160ビットのコードであるため、重複を見つけるために平均して2 ^ 159のブルートフォース攻撃を試みます。暗号化ハッシュよりも確実に優れたアルゴリズムが見つかった場合、そのハッシュは「壊れている」と見なされます。
MD-5は、非常に壊れたハッシュの例です。強度は128ビットで、平均2 ^ 127回の試行が必要でした。既知の脆弱性を悪用すると、実際に必要な試行回数は2 ^ 47と低くなる可能性があります。これは2 ^ 127よりも小さいLOTです。実際、最新のコンピューティングクラスタでは1日足らずで行われています。
これは、SHA-1の使用方法に最も近いためです。ただし、これは、ハッシュが破壊されないようにするために暗号解読で使用される最も一般的な方法ではありません。通常、1つのファイルを選択して攻撃者が一致させることを求めるのではなく、攻撃者が選択した2つのファイル間の衝突を許可します。この種の攻撃には、ベンチマークが容易になるという利点があります。ファイルをクラックするのが「難しい」とわかった場合、それは別のファイルも同様に強力であることを意味しますか?攻撃者が両方のファイルを選択できるこの攻撃は、最悪の最悪の事態を確実に捉えます。
この種の攻撃は、「 誕生日の攻撃 」として知られる興味深いトリックを可能にします。簡単に言えば、誕生日攻撃を使用するとアルゴリズムの強度が半減するため、SHA-1には平均で2 ^ 80回の試行が必要であり、MD5では平均で2 ^ 64回の試行が必要です。これらはそれぞれ160と128の半分です。
SHA-1には、その強度を2 ^ 80から2 ^ 69に減少させる既知の攻撃があります。これはそれほど重要ではありません。 2 ^ 69回の試行は長い時間です。
ただし、歴史から、ハッシュアルゴリズムは自然に破壊されるのではなく、時間の経過とともに破壊されることがわかりました。 MD-5のようなアルゴリズムを一晩で2 ^ 64から2 ^ 47にクラックする人はいません。多くの個人がそれに対して使用している数学についての論文を発表しているので、それは時間の経過とともに起こります。通常、アルゴリズムの開始時から攻撃の複雑さが徐々に下がっていく様子を観察できます(通常、最良の攻撃は誕生日攻撃です)。
衝突にいくつかの変化が見られるという事実は、SHA-1がトンネルの終わりに光を見ていることを示唆しています。それはまだ強力ですが、現在より安全な最新のSHA-3にアップグレードしたいという要望があるかもしれません。
このような決定は、脅威モデルの観点から本当に行う必要があります。攻撃者がこれらの衝突の1つを受けた場合に、攻撃者がどれだけのダメージを与えることができるか。攻撃者は、いくつかのラップトップにアクセスできるスクリプトキディ、またはスーパーコンピューティングクラスタ全体を自由に利用できる政府ですか。攻撃者がハッシュを使用しなくなるまでの時間枠の大きさ(暗号化の多くの使用には、パスワードローテーションなどの「ガードの変更」が含まれます)。これらはすべて、衝突を考慮する必要のある深刻度に影響します。
この記事で説明されているSHA-1の欠陥は非常に具体的です。攻撃者は同じ値にハッシュする2つのものを作成することができます(これは「衝突攻撃」と呼ばれます)。ただし、衝突攻撃では、攻撃者が関与する両方ファイルを制御する必要があります。攻撃者が元のファイルを制御していない場合、衝突攻撃では同じハッシュ値を持つ別のファイルを見つけることができません。
これがTLS/SSL(および一般的に署名)に重要な理由は、これらの場合、攻撃者は多くの場合canで両方のファイルを制御するためです。 TLS証明書は、ほとんどの場合、それを要求する人によって作成されます(制御できないビットは予測可能であることが多いため)。したがって、衝突により、正当な証明書と不正な証明書が作成され、正当な証明書が署名され、署名が転送されます。
ファイルの場合、同じ状況が常に当てはまるとは限りません。ファイルを作成する人が攻撃者であることが懸念される場合(たとえば、1つのものが正当であると個別に検証され、同じハッシュで悪質なペイロードが送信されるなど)、SHA-1攻撃が適用されます。段階的廃止に向けて(ただし、David Schwartzが述べたように、まだ重要ではありません)。元のファイルが信頼できる場合、攻撃者は現在知られているSHA-1攻撃を適用することはできませんが、可能な場合は段階的に廃止することを検討する必要があります(選択肢がある場合は、SHA- 2)。
「衝突は役に立たない」への対応-攻撃は、攻撃者が有用衝突を取得できるようにする必要はありませんが、「衝突」を回すことはそれほど難しくありません「便利な衝突」に。多くのファイル形式には、ファイルの機能に影響を与えることなく、必要なものをすべて含めることができるかなりの量のスペースがあります。攻撃者は通常、機能部品を意図したとおりに維持しながら、衝突を取得するために(衝突が実際に検出可能な場合)変更することができます。 「学術的攻撃」と「実践的攻撃」のギャップは大きくなる可能性があります。 「任意の衝突」と「有用な衝突」の間のギャップは一般にはるかに小さくなります。
アルゴリズムの選択とは関係のないより深刻な問題は、ハッシュの取得方法です。ハッシュが行うことは、問題を「実際のファイルを取得する」から「実際のハッシュ値を取得する」にシフトすることだけです。ファイルと同じサーバーから同じ接続タイプを介して送信されるハッシュ値は、悪意のある変更に対してはまったく役に立ちません(ファイルを改ざんできる攻撃者はハッシュを改ざんできます)。ハッシュは、ファイルを信頼できるよりもハッシュを信頼できる場合にのみ役立ちます。それは時々ありますが(トレント、ミラー)、そうでない場合によく使用されます。そのため、整合性の検証にハッシュを使用する場合は常に注意が必要です。
衝突攻撃とプリイメージ攻撃を区別する必要があります。同じ値にハッシュされるany twoメッセージを見つけることは衝突攻撃です。
特定の特定のメッセージ(ここでは実行可能ファイル)を同じハッシュを持つ別のメッセージに置き換えることは、(2番目の)プリイメージ攻撃です。
SHA-1は、2で衝突攻撃を実行できる限り壊れています。52 ウィキペディアの記事によると、その番号の引用を提供していない操作(私が知っている、実際に信頼できる最高の攻撃は、マークスティーブンスによる攻撃で、260 操作)。 仮定の悲観的な2の場合を考えましょう52。
これは、そのスケールでの攻撃が理論的に考えられるだけでなく、実際に完全に実行可能であるという懸念があります1日以内マルチGPUリグ。もちろん、これは、「任意の2つの」メッセージが行うアプリケーションの問題です。 260 スティーブンスが与えた数値(これは256倍の作業です)は、攻撃者が問題にいくらか余分のお金を投入するか、1年の時間を費やす意思がある場合に完全に実現可能です。
これはまさに防止できませんスパイ活動やサイバー犯罪に関与している人物が証明書を偽造することを防止します。
現在、プリイメージ攻撃の指数は2倍なので、252 衝突攻撃の場合は2になります104 まったく別の球場です。
これは非現実的であるだけでなく(前の段落で述べたものよりも10億倍速いマシンでも約600万年かかります)、エネルギーを生成するという私たちの狡猾な手段を考えると、これは完全に不可能です。
このような大規模な計算を行うには、1回の操作に費やすことができるものよりもはるかに大きなエネルギー源が必要になります。いいえ、太陽ほどのエネルギー源ではありませんが、それでもかなり大きなものです。
現実的には、1ワットから10〜50 GFLOPSの何かを期待できます。ある種の奇跡が起こり、プロセッサが一晩で約数千倍のエネルギー効率を上げると仮定すると、1 SHA≈1 FLOP(かなり楽観的です!)と想定できます。これは、実行2104 10年以内のハッシュ計算、あなたは10が必要です12W発電所。 1年以内に攻撃を実行するには、1013W発電所。これは、米国、フランス、および日本の原子力発電所全体が一緒に生産できるエネルギーの約50倍です。
これは起こりませんです。同じ目標を達成するはるかに簡単な方法があります(元のハッシュを格納するサーバーを悪用し、そのハッシュを置き換える、誰かを脅迫するなど)。
質問で言及されている記事のgeneralポイントは次のとおりです。SHA1は非推奨であり、スムーズに実行する時間がある間に段階的に廃止する必要があります。一部の地域では、GoogleとMicrosoftが期限を設定しているため、時間がなくなりつつあります。
非推奨 テクノロジーの経験則:
Bruce Schneierによる2012年のブログ投稿の要約引用: "コミュニティの私たちが、SHA-1からSHA-2/SHA-3への移行を今すぐ開始する必要があるということです。"
質問のSHA-1ハッシュ衝突部分については、これはいくつかの回答で対処されています。
ただし、これの大部分は、処理するファイルのタイプに依存します。
ファイルの全体的な内容と操作を維持します(もちろん、現在は
もともとそこになかった悪質なコンテンツ変更内容)
これが何を意味するかは、変更を検出しているものによって大きく異なります。
したがって、残っているのは、破損しておらず、おそらく検出できないある程度の構造で衝突を取得する方法です。
非常に高速なコンピューターと小さめのファイルがあり、有効なバイトシーケンスでの変更とハッシュの再計算に1ミリ秒かかるとしましょう(おそらくいくつかの専用ハードウェアが必要です)。 Ifハッシュ分布が完全にランダムであり、範囲全体に分散されている場合、SHA-1との衝突が2^160
試行(ブルートフォース)。
2^160/1000/60/60/24/365.24
= 4.63x10^37 years
= 46,300,000,000,000,000,000,000,000,000,000,000,000 years
= 46 undecillion years.
でもねえ、2^60
および2^52
バージョンを使用して、好きなようにファイルを変更できるように(そうではありません)、1回の試行で1ミリ秒で実行できるように見せかけます。
2^52 yields 142,714 years
/*humans might still be around to care, but not about these antiquated formats*/
2^60 yields 3.65x10^7 years = 36,500,000 years
/*machines will probably have taken over anyway*/
しかし、ちょっと、あなたは幸運になるかもしれません。本当に、本当に、幸運なことに、人々が何よりも奇跡を起こす奇跡。
実際にはそうではありませんが、一度にこれらの条件の1つを満たすことができますが、両方を満たすことはできません。私の知る限り