私はSSL/TLSのことについて読んでいて、 このサイトによると (Qualys SSL LabsによってAと評価されています)、MD5は完全に壊れており、SHA-1は2005年以来暗号学的に脆弱です。しかし、多くのプログラマーやマイクロソフトでさえ、ファイルの整合性をチェックするためにSHA-1/MD5しか提供していないことに気づきました...
私の知る限り、ファイルの1ビットを変更すると、それらのMD5/SHA-1が変更されるので、なぜ/どのようにして壊れますか? SHA-1/MD5で作成されたチェックサムを信頼できるのはどのような場合ですか? google.comのようにSHA-1をまだ使用しているSSL証明書はどうですか?
チェックサムおよび証明書の検証のためのMD5およびSHA-1のアプリケーションに興味があります。 この質問では扱われています のパスワードハッシュについては質問していません。
SHA-1とMD5は、衝突攻撃に対して脆弱であるという意味で壊れています。つまり、同じハッシュを持つ2つの文字列を見つけることが現実的になりました(またはSHA-1の場合はまもなく実現します)。
説明したように here の場合、衝突攻撃はパスワードまたはファイルの整合性に直接影響しません。これらは、それぞれプリイメージと2番目のプリイメージのケースに該当するためです。
ただし、MD5とSHA-1の方が計算コストはかかりません。これらのアルゴリズムでハッシュされたパスワードは、現在存在する強力なアルゴリズムよりも解読が容易です。特に問題はありませんが、より強力なアルゴリズムを使用することをお勧めします。
証明書の場合、署名には、特定の証明書のハッシュが特定のWebサイトで有効であることが記載されています。ただし、そのハッシュを使用して2つ目の証明書を作成できる場合は、他のWebサイトになりすますことができます。 MD5の場合、これはすでに発生しており、ブラウザーは予防策としてSHA-1を段階的に廃止する予定です( source )。
多くの場合、ファイルの整合性チェックは、ファイルが正しくダウンロードされたことを確認することを目的としています。ただし、ファイルが悪意を持って改ざんされていないことを確認するために使用されている場合は、衝突に対してより耐性のあるアルゴリズムを検討する必要があります( chosen-prefix attack も参照)。
MD5の場合、信頼性と能力の両方を備えたMD5を、耐衝突性が重要なコンテキストで使用することはありません。 SHA-1の場合、段階的に廃止されます。 SHA-1のブレイクはリリースされた時点では実用的ではありませんでしたが、衝突耐性が必要な場所で段階的に廃止することを考えることが重要になってきました。実際、それはis段階的に廃止されます。たとえば、SHA-1を使用した長期TLS証明書はChromeで機能しなくなり、SHA-2への変更が促されます。ただし、実際にはまだ壊れていないため、現時点では問題ありません。
すぐにすべてが削除されなかったのは、セキュリティにトレードオフが伴うためです。 10年間で実際の攻撃につながる可能性があることを理由に、主要な標準を落としたり、すべてを巨大なインストールベースと互換性がなくなったりすることはありません。互換性が重要です。
また、多くの用途で、MD5とSHA-1はまったくクラックされません。どちらも衝突耐性に対する弱点があります。つまり、攻撃者は同じものにハッシュする2つのメッセージを作成できます。どちらも、プリイメージ耐性(ハッシュを与える、そのハッシュを作成するものを見つける)、または2番目のプリイメージ耐性(メッセージを与える、同じハッシュを持つ別のメッセージを見つける)、または(それらの圧縮関数)に対して疑似ランダムとして破られていない機能。つまり、HMAC-MD5のような構成は、壊れたMD5の特性に依存しないため、依然として安全である可能性があります。理想的ではありませんが、確かですが、上記の「まだ安全である場合は互換性の問題」を参照してください。
とにかく、ハッシュによるファイル整合性チェックはほとんどの場合無意味です。ハッシュがファイルよりも安全なチャネルを介して送信されない限り、ファイルと同じくらい簡単にハッシュを改ざんできます。ただし、ハッシュareがファイルよりも安全に送信された場合でも、MD5とSHA-1はファイルの整合性を保護できます。攻撃者は正当なファイルに対してanyの影響力を持たないため(そして、本当に安全であるためにはzeroの影響力が必要です)、同じハッシュで新しいファイルを作成するにはMD5やSHA-1で誰も行ったことのない、2番目のプレイメージ耐性を破る。
整合性チェックと証明書の違いに注意してください。証明書は、ユーザーが作成したCSRからCAによって発行されます。攻撃者は実際の証明書の内容に大きな影響を与える可能性があるため、衝突攻撃により、攻撃者は合法的な証明書と偽の証明書を作成し、それらを衝突させ、合法的な証明書を発行させ、偽の証明書に署名を使用させることができます。対照的に、ファイルの整合性では、攻撃者は通常、正当なファイルをまったく制御できないため、givenファイルとの衝突を必要とするため、はるかに困難です(そして、私たちが知る限りでは、 MD5で行われます)。
MD5とSHA-1は高速であり、ハードウェアでサポートされる可能性があります。これは、より新しい、より安全なハッシュとは対照的です(ビットコインは、SHA-2の使用により、部分的なSHA-2衝突を計算するチップをマイニングするために)。
MD5コリジョン は実行可能であり、プリイメージ攻撃の進歩が行われました。ありisa既知のSHA-1衝突 公式のフルラウンドアルゴリズムの場合 攻撃により、その有効な複雑さが大幅に減少します 、これは、カジュアルな攻撃者にとってはまだ十分に実用的ではないかもしれませんが、可能性の領域にあります。壊れたと呼ばれる。
それにもかかわらず、「弱い」または壊れたハッシュは、暗号的に安全なアルゴリズムを必要としない用途には依然として有効ですが、本来は考えられていなかった多くの目的後で重要canになり、潜在的な攻撃面が露呈します。
良い例は、重複するファイルを見つけるか、gitなどのバージョン管理システムで使用することです-ほとんどの場合、信頼性の高い優れたパフォーマンスが必要ですが、必要ではありません厳格なセキュリティ-公式のgitリポジトリへの書き込みアクセス権を誰かに与えるには、他の人が混乱しないように信頼する必要があります。重複チェックでは、2つのファイルのサイズとハッシュが同じであることを確認した後、さらに内容を比較します。
ファクト(バイトごとの比較など)で安全でないハッシュを十分にバックアップしないと、リスクが発生する可能性があります。 Dropboxのような誰かが適切な検証なしにMD5で重複排除を行い、攻撃者が衝突するハッシュを使用してデータをこっそり侵入し、データ損失を引き起こした場合。
linus Himselfが言ったように、gitはこの問題に "trusting the elder" で対処します。
gitにハッシュXのファイルAがすでにある場合、ハッシュX(ただし内容が異なる)のリモートファイルがローカルバージョンを上書きする条件はありますか?
いいえ。それが同じSHA1を持っている場合、相手からオブジェクトを受け取ったときに、既に持っているオブジェクトをしない上書きすることを意味します。
つまり、衝突が発生した場合、特定のリポジトリ内の「以前の」オブジェクトは常に上書きされることになります。ただし、gitオブジェクトネットワークが完全に順序付けされていないDAGを生成するという意味で、「以前」は明らかにリポジトリごとであることに注意してください。したがって、直接の祖先の場合、異なるリポジトリは「以前」が何であるかについて合意します。オブジェクトは、直接関係のない別個のブランチを経由して来ました。2つの異なるリポジトリが2つのオブジェクトを異なる順序で取得している可能性があります。
ただし、「以前のバージョンがオーバーライドする」というのは、セキュリティの観点からは非常に重要です。gitモデルでは、主にownリポジトリのみを信頼する必要があることに注意してください。したがって、「git pull」を実行すると、新しい受信オブジェクトは定義上、既存のオブジェクトよりも信頼性が低くなるため、新しいオブジェクトが古いオブジェクトを置き換えることを許可するのは間違っています。
[元のソース: https://marc.info/?l=git&m=115678778717621&w=2]
そして、彼らが言うように、ディスク障害は偶発的なハッシュ衝突(数桁-SHA-1衝突<10)に遭遇するよりもはるかに可能性が高いです-40;ディスクの回復不可能なビットエラー〜10-15)。
衝突が存在する可能性がありますが、MD5とSHA1の両方が存在する場合にファイルの整合性をチェックしても、衝突が発生する可能性はほとんどありません。したがって、これらの単純なチェックの両方が同じファイルを検証する場合、それで十分です。とにかく、ほとんどの場合、1つでも確認する人はほとんどいないと思います。