元のSHA-1ハッシュを維持する方法で、ファイルを悪意を持って変更できますか?


33

この記事や他の多くの記事によると、SHA-1は安全ではありません。

私の場合、パスワードやデジタル証明書については心配していません。ファイルの整合性が心配です。

ファイル(ISOイメージや実行可能ファイルなど)が次のように悪意を持って変更されることは合理的に可能ですか?

  • 元のファイルのSHA-1ハッシュを維持し、
  • ファイルの全体的なコンテンツと操作を維持します(もちろん、今では元々存在しなかった悪意のあるコンテンツも含まれるようになりました)

私の見方では、SHA-1衝突を引き起こすような方法でファイルを変更すると、ファイルはまったく役に立たなくなります。ISOが完全に破損するか、実行可能ファイルが完全にスクランブルされるため、実行可能ファイルではなくなります。

しかし、私の見方は間違っている可能性があります。これまでのところ、ファイルの検証に対するSHA-1の継続的な適合性に関して、Googleの検索では何も見つかりませんでした。洞察はありますか?


7
答えは「依存する」です。ISOにたまたま多くのjpegファイルまたはムービーファイルが含まれている場合は、ターゲット実行可能ファイルと一緒に可能です。jpegファイルは、サイズや外観を変更せずに大幅に変更できます。最終的に、ファイルが大きいほど、より多くのファイルを再生する必要があり、非破壊的な衝突の可能性が高くなります。
ポール

7
@cpast正確には、多くのWebサイトがSHA-1ハッシュをリストして、ダウンロードを検証できるようにします。それについて考えると、ハッカーがコンテンツ公開されたハッシュを変更することでWebサイトを侵害する可能性がはるかに高いようです。その後、あなたは本当にめちゃくちゃです。
-misha256

1
fyiだけですが、特にMicrosoft / MSDNからのダウンロードでは、SHA-1は非常に一般的であるため、私の質問では具体的に質問しています。もちろん、一部のWebサイトはMD5ハッシュを公開し、他のSHA256などを公開しています
misha256

2
質問は、なぜあなたはでしょう、である必要があるハッシュ使用する任意の使いやすいように速いだけである選択肢は、存在する場合には、既知の脆弱性を、とそうでない広く利用できる(例えばSHA-256) ?さらに、暗号作成者が1つの脆弱性のみが見つかった後にハッシュを安全でないと宣言する理由があります。有名なブルース・シュナイアーの引用は、「攻撃は常に良く、彼らは悪くなることはありません」
BlueRaja -ダニーPflughoeft

3
@ misha256これらのsha1ハッシュは、セキュリティではなくダウンロードの破損をチェックするためのものです。あなたがセキュリティをしたい場合は、署名されたファイルを使用してのgpg
Daenyth

回答:


41

SHA-1でこれを達成した人はまだいません。理論的には可能ですが、まだ実用的ではありません。SHA-1の安全性に関するレポートは、セキュリティレベルが望んでいるほど高くないことを意味しているだけであり、このことを考えていたほど心配する前に何年も必要ないことを意味します。

特定のファイルと同じSHA-1ハッシュを持つファイルを作成することは、同じSHA-1ハッシュを使用して2つのファイルを自分で作成するよりも困難です。そして、私たちが知る限り、世界の誰もまだこの簡単なタスクを達成していません。だからといって、明日は実現できないというわけではありません。


特定のファイルとの衝突に対するSHA-1に対する既知の攻撃もありますか?私は、その攻撃はMD5とSHA-1のどちらにも見つからなかったという印象を受けました(2番目のプリイメージ攻撃ではなく、単なる衝突攻撃です)
15年

FlameマルウェアはMD5衝突を使用して、Microsoftからのものであるように見え、Windows Updateをハイジャックしました。彼らはたくさんのMicrosoft証明書を選択できたかもしれませんが、同じMD5を持つ2つのファイルを見つけようとしただけではありませんでした。
アロンフォスター

2
@Aronいいえ、これは特定のファイルとの衝突の例ではありません。Flameには、Microsoftが証明書署名要求に従ってX.509証明書に署名するライセンスサーバーがありました。つまり、攻撃者は、ある制限内で署名対象を制御します。衝突を発見した既存の証明書はありませんでした。マイクロソフトは、アクティベーションの一部として顧客からのCSRに署名しました。これにより、コリジョン攻撃(セカンドプレイメージ攻撃ではありません)を使用できます。
15年

2
@OlivierDulacいいえ、実際に行われたことはありません。既知のSHA-1コリジョンはありません。推定コストは単なる推定値である-それは、誰かがそれをやったことはありません、これは我々は誰もがそれを行わなかったことだし、それはコストだと思うどのくらいであるが、我々は、これは、それがどのくらいだと思いますコスト。
cpast

4
@cpast行われたかどうかはわかりませんが、300万ドルの攻撃はNSAの年間予算の0.03%未満です(実際、ハードウェアを所有していて、レンタルする必要があります)。彼らがそれをするための手段と動機を持っているので、おそらく彼らはすでにやったと結論づけることは合理的です。Flameを思い出してください。
ベイン

26

理論的には可能ですが、まだ行われていません。

探しているのは「ハッシュ衝突」と呼ばれ、同じハッシュを持つ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のようなアルゴリズムを1晩で2 ^ 64から2 ^ 47に変更する人はいません。多くの個人がそれに対して使用している数学についての論文を発表しているので、それは時間とともに起こります。通常、攻撃の複雑さはアルゴリズムの開始からゆっくりと低下するのを見ることができます(通常、最高の攻撃は誕生日攻撃です)。

衝突にいくつかの変化が見られるという事実は、SHA-1がトンネルの終わりに光を見ていることを示唆しています。まだ強力ですが、現在ははるかに安全な最新のSHA-3に移行したい場合があります。

このような決定は、脅威モデルの観点から実際に行う必要があります。攻撃者がこれらの衝突のいずれかを取得した場合、攻撃者がどれだけのダメージを与えることができるか。攻撃者は、数台のラップトップにアクセスできるキディを台本にしているのでしょうか、それともスーパーコンピューティングクラスタ全体を自由に使える政府を台本にしているのでしょうか。攻撃者がハッシュを使用する前に、どのくらいの時間ウィンドウを破る必要がありますか(暗号の多くの使用には、パスワードローテーションなどの「ガードの変更」が含まれます)。これらはすべて、衝突を考慮しなければならない度合いに影響します。


8
誕生日攻撃の段落については、2 ^ 80は2 ^ 160の平方根であり、半分ではありません(2 ^ 159になります)。
アンドリューモートン

質問は、2番目のプリイメージ攻撃についてですが、答えは衝突についてです。SHA-1に対するプリイメージ攻撃— さらにMD5— 途方もなく非実用的です。(MD5に対する2 ^ 123プリイメージ攻撃ありますが、あなたは2 ^ 160力ずくで立ち往生しているSHA-1付き。)
マットのNordhoff

「SHA-1は160ビットコードであるため、重複を見つけるには平均で2 ^ 159の総当たり攻撃が必要になります。」ただし、2 ^ 2コードには2 ^ 2の推測が必要です。なぜ-1なのかわかりません。「短い話」、「アルゴリズムの強度を半分にするため、SHA-1では2 ^ 80が必要」...「MD5では2 ^ 64が必要」...「これらはそれぞれ160と128の半分です。」ここで-1'edになっているはずです。ビットは指数関数的に強度を増すため、160ビットハッシュの強度を半分にすると、80ビットハッシュではなく159ビットハッシュとして扱われます。各ビットは、ブルートフォース攻撃の課題を2倍にします。
TOOGAM

@TOOGAM:彼は「平均して」と言った。複数の試行にわたって、ブルートフォース攻撃に成功するには、キースペースの平均 50%のみを検索する必要があります。半分のコメントについては、上記のAndrew Mortonのコメントがそれを説明しています。複雑さの半分ではなく、平方根でなければなりません。
リード

@AndrewMortonの良い点、私は言葉遣いがはっきりしませんでした。文献では、状態の数と状態の数の2を底とする対数が頻繁に切り替わることがわかります。私の言い回しは、ビット数を半分にすることを指しました。なぜなら、人々はビット数の「強さ」について話す傾向があるからです。前後に切り替えることに慣れていたので、無意識のうちにやった。混乱を取り除くために編集します。
コートアンモン-モニカ

8

その記事で説明されているSHA-1の欠陥は非常に具体的です。攻撃者が同じ値にハッシュする2つのものを作成することを可能にします(これは「衝突攻撃」と呼ばれます)。ただし、衝突攻撃では、攻撃者が関連する両方のファイルを制御する必要があります。攻撃者が元のファイルを制御しない場合、衝突攻撃では同じハッシュ値を持つ別のファイルを見つけることができません。

TLS / SSL(および一般的な署名)でこれが重要な理由は、これらを使用すると、攻撃者が多くの場合両方のファイル制御できるためです。TLS証明書は主にそれを要求する人によって作成されます(彼らが制御しないビットはしばしば予測可能です)。

ファイルの場合、同じ状況が常に当てはまるわけではありません。ファイルを作成している人が攻撃者であるという懸念がある場合(たとえば、1つのものが独立して良いと確認され、同じハッシュで邪悪なペイロードを送信する場合)、SHA-1攻撃が適用されます。 (David Schwartzが述べたように、それはまだ重要ではありませんが)それを段階的に廃止に向けて 元のファイルが信頼されている場合、攻撃者は現在知られているSHA-1攻撃を適用できませんが、可能であれば、段階的に廃止することを検討する必要があります(選択肢がある場合は、SHA- 2)。


「衝突は役に立たない」に対応して-攻撃者は、有用な衝突を取得することを攻撃者に要求しませんが、一般的に「衝突」を「有用な衝突」に変えるのはそれほど難しくありません。多くのファイル形式には、ファイルの機能に影響を与えずに必要なものを自由に使用できるかなりの余裕があります。攻撃者は通常、機能部分を望みどおりに保ちながら、衝突を取得するために(衝突が実際に検出可能な場合)変更することができます。「アカデミック攻撃」と「実際の攻撃」のギャップは大きくなる可能性があります。「任意の衝突」と「有用な衝突」の間のギャップは、一般的にはるかに小さくなります。


より深刻な問題は、アルゴリズムの選択とは無関係ですが、ハッシュの取得方法です。ハッシュが行うことは、問題を「実際のファイルを取得する」から「実際のハッシュ値を取得する」にシフトすることです。ファイルと同じ接続タイプで同じサーバーから送信されたハッシュ値は、悪意のある変更に対してまったく価値がありません(ファイルを改ざんできる攻撃者はハッシュを改ざんできます)。ハッシュは、ファイルを信頼できる以上にハッシュを信頼できる場合にのみ役立ちます。場合によっては(トレント、ミラー)場合もありますが、そうでない場合によく使用されます。したがって、整合性の検証にハッシュを使用する場合は、常に注意する必要があります。


5

衝突攻撃プリイメージ攻撃を区別する必要があります。同じ値にハッシュする2つのメッセージを見つけることは、衝突攻撃です。
特定の特定のメッセージ(ここでは実行可能ファイル)を同じハッシュを持つ別のメッセージに置き換えることは、(2番目の)プリイメージ攻撃です。

SHA-1は、その番号の引用を提供していないWikipediaの記事によると、衝突攻撃が2 52回の操作で実行できる限り壊れています(実際に信頼できるとわかっている最高の攻撃は、マークスティーブンスによるものです、2 60の操作が必要です)。しかし、2 52の悲観的なケースを想定しましょう。

これは、その規模での攻撃が理論的に考えられるだけでなく、マルチGPUリグで1日以内完全に実行できるため懸念されます。もちろん、これは「任意の2つの」メッセージが実行されるアプリケーションの問題です。攻撃者が問題に余分なお金を投じることを望んでいる場合、または1年を費やすことを望んでいる場合、スティーブンスによって与えられた2 60の数字(これは256倍の仕事です)でさえ完全に実行可能です。
これはまさに、スパイ行為やサイバー犯罪に関与する誰かが証明書を偽造することを妨げることのない種類のものです。

現在、プリイメージ攻撃は2倍の指数を持っているため、衝突攻撃を2 52と仮定すると、2 104の操作になりますが、これはまったく異なることです。

これは非実用的であるだけでなく(前の段落で述べたものよりも10億倍速いマシンでも、約600万年ほどかかります)、エネルギーを生成する小さな手段を考えると、これは完全に不可能です。

このような大規模な計算を行うには、単一の操作に専念する余裕があるものよりもはるかに大きなエネルギー源が必要になります。いいえ、太陽ほどのエネルギー源ではありませんが、それでもかなり大きなエネルギー源です。

現実的には、1ワットから10〜50 GFLOPSを得ることができます。ある種の奇跡が起こり、プロセッサーが一晩でエネルギー効率が数千倍向上すると仮定すると、1 SHA≈1 FLOP(かなり楽観的!)と仮定できます。つまり、10年以内に2 104個のハッシュ計算を実行するには、10 12 Wの発電所が必要です。1年以内に攻撃を実行するには、10 13 Wの発電所が必要です。これは、米国、フランス、日本の原子力発電所全体が一緒に生産できる量の約50倍であり、1つのハッシュを偽造するためだけです。

これは起こりません。同じ目標を達成するためのはるかに簡単な方法があります(元のハッシュを保存し、そのハッシュを置換する、誰かを脅迫するなど)。


「...同じことを達成するはるかに簡単な方法...」xkcd.com/538に
ラルフJ

2

質問で言及された記事の一般的なポイントは次のとおりです。SHA1は非推奨であり、まだスムーズに行う時間がある間は廃止する必要があります。一部の地域では、GoogleとMicrosoftが期限を実施しているため、時間がなくなっています。

非推奨テクノロジーの経験則:

  • 新しい設計を行うか、機能を追加する場合は、使用しないでください(SHA1)。
  • 古いものを維持する場合は、いつ交換するかを計画します(SHA1)。

Bruce Schneierによる2012年のブログ投稿からの要約引用: 「ポイントは、コミュニティの私たちは、SHA-1からSHA-2 / SHA-3への移行を今すぐ開始する必要があるということです。」


2

質問のSHA-1ハッシュ衝突の部分については、いくつかの回答で対処されています。

ただし、この大部分は、作業しているファイルの種類に依存します。

ファイルの全体的なコンテンツと操作を維持します(ただし、もちろん、元々そこになかった悪意のあるコンテンツが含まれており、コンテンツが変更されています)

これが意味することは、変更を検出するものによって大きく異なります。

  • (合理的な)チャンスではなく、署名された実行可能ファイルである場合、何らかの方法で2つのハッシュ衝突を取得する必要があります。ファイルのSHA-1と内部.exe署名です。
  • 署名されていない実行可能ファイル、.com、署名されていない.dllなどの場合、それらのリソースフォークは操作を変更しない方法で追加できるため、(最終的に)「通常」では検出できないハッシュ衝突が発生する可能性があります操作。
  • ソースコードファイルまたは類似の構造(.cs、.c、.h、.cpp、.rb、.yml、.config、.xml、.pl、.bat、.ini)の場合、追加、変更、または削除有効なコメント構文に制限して、変更をほとんどの用途で認識できないようにすることができます(テキストエディターで開くのではなく、コンパイルまたは実行します)。
  • .isoまたは.zipまたはその他のコンテナ形式の場合、ほとんどのランダムな変更によりコンテナが破損するため、これも起こりにくいです。以下を行うことができます:偽のファイルエントリを追加するか、コンテナ内のコンテンツを変更して再チェックしますが、複雑さの層を追加し、結果をチェックするための時間を追加します。どのような内容が変更される可能性があるか。
  • テキストまたはテキストのような形式の場合、「有効な」ファイルでありながら、ほぼすべての方法で変更できますが、コンテンツはおそらく目立つでしょう。
  • .rtf、.doc、.html、.xslx、およびその他のマークアップ風の形式などの多くの形式では、パーサーが検出できない方法で追加または変更できます。 、自由度が低い)ファイルを変更して(最終的に)ハッシュ衝突を取得する一方で、有効なファイルであるだけでなく、使用される典型的なアプリケーションに見える方法で目立って変更されないようにすることができます。

したがって、残っているのは、破損しておらず、おそらくある程度検出できない構造で衝突を取得する方法です。

  1. 必要な機能変更(悪意のあるコンテンツの挿入など)を行い、ファイル形式固有の有効性を維持するために追加の変更を行います。
  2. 機能しないセクションを追加します(コメントブロックの間、テキストファイルの最後に3kの改行がある場合、現在のコメントブロックを分離します)
  3. 変更する文字/コードポイント/バイトを追加または選択し、可能なすべての有効な組み合わせを試してください(たとえば、すべてのバイトの組み合わせが異なるエンコーディングに有効であるとは限りません)。
  4. ハッシュを再計算し、衝突が一致するかどうかを確認します。
  5. そうでない場合は、3に進みます。

有効なバイトシーケンスでの変更とハッシュの再計算に1ミリ秒かかるような超高速コンピューターと小さなファイルがあるとします(おそらく専用ハードウェアが必要です)。ハッシュ分布が完全にランダムであり、範囲全体に分布している場合2^160試行ごとにSHA-1との衝突が発生します(強引に強制)。

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それらは私たちが好きな方法でファイルを変更できるようにします(彼らはそうしません)、そして、それらも1msごとに行うことができます:

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*/

しかし、ちょっと、あなたは幸運になるかもしれません。本当に、本当に、何よりも奇跡のような、人々の呼び出しの奇跡はラッキーです。


0

実際には、一度にこれらの条件の1つを満たすことはできますが、両方ではありません。私の知る限り


1
まだほとんど不可能です。十分な計算能力があれば、すべてが可能です。

-6

はい、可能です。ウイルスがEXEでどのように機能するかを考えてください。マルウェアのペイロードは元のEXEに追加されるため、プログラムは元の機能を実行しますが、ウイルスとしても拡散します。ここで、同じハッシュを維持するには、特別に細工された追加のパディングが必要になります

これは、ファイルが大きくなることを意味します。しかし、EXEの場合は、使用頻度の低いコードを削除して、プログラムが最初は動作しているように見えるようにすることもできます。JPEGの場合、画像をさらに圧縮するか、別の画像を完全に使用できます。ISOの場合、ファイルのセットを削除できます。ハッシュを複製するために必要な計算はより難しく、特定の場合には数学的に不可能かもしれませんが、一般的には可能です。


7
-1この投稿のすべてが完全に構成されています。長さ拡張攻撃は「同じハッシュを維持する」わけではありません(ハッシュは既知の方法で変化するだけです。また、ウイルスが「使用頻度の低いコード」を削除しなければならない理由はありません(それが何であるかをどのように判断するのでしょうか?)。そして、jpegは何と関係がありますか!?
BlueRaja-ダニーPflughoeft

2
これはちょうど完全に間違っている、私も全部答え書き換えることなく、修正を示唆し始めることはできません
マーク・K・コーワン

2
-1まったく正しくありません。別名「悪くない」(ウォルフガング・パウリ)
オリビエデュラック

1
まあ、一般的に何かが可能であれば、特定のケースで明らかにそれが可能であるという事実から始めることができます。ただし、その逆は必ずしも当てはまりません。特定のケースで解決できる問題を想像するのは簡単ですが、一般的にはそうではありません。
CVn
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.