少し前に、誰かがmd5の弱点を悪用して、別の証明書と同じmd5でWeb証明書を作成していると聞きました。
彼らは悪い発行方針を通して証明書を作成することができました、そして私は彼らが200ps3を計算していたと思います。
だから私は疑問に思いました、証明書のためにウェブ全体をこすり取り、それらすべてでデータベースを作成し、ブルートフォースを使用してデータベース内のものと同じmd5を持つ証明書を作成することは可能ですか?
So my question: Does anyone know the math behind this?
つまり、一意のmd5がいくつあるのでしょうか。 32 ^ 16だと思います。 md5にはいくつの証明書があり(古いものも含めて、引き続き機能します)、平均的なコンピューターのハッシュ/分を見積もります。
多くの証明書がsha1に変更されたことを知っています。私はこれが可能だとは思わないと言わなければなりませんが、それは私を長い間悩ませてきた考えであり、私は入力が必要です! md5はたくさんありますが、私は高速のコンピューターを持っています;)
MD5は、衝突を簡単に見つけることができるため非推奨になりました。数年前、私は1分以内にMD5衝突を生成する方法を示す論文を書きました。その後、これはほんの数秒に改良されました。
同じMD5合計で2つの異なるポストスクリプトドキュメントを生成することは、ポストスクリプトがコンピュータ言語であり、ポストスクリプトビューアがこの言語を評価するという事実を利用しています。それは巧妙なトリックです。これは次のように機能します。File1にはバイナリブロックQ、コード、ドキュメントA、ドキュメントBの順にあります。File1を表示すると、Qを調べてAを表示するコードが実行されます。
次に、File2というFile1のコピーを作成します。 のみ QをQと同じMD5合計を持つQ 'に変更します。これは、他に何も変更されないため、File2のMD5合計がFile1と同じであることを意味します。しかし、File2を表示すると、同じコードが実行され、Q 'が表示され、ドキュメントBが出力されます。かわいい!
しかし、ここでは、衝突がMD5で簡単に見つけられるという事実を使用しています。 (私が知る限り)誰も任意のMD5ダイジェストを反転することはできません。また、特定のファイルのMD5合計に一致する2番目の入力を見つけることもできません(これは「2番目の原像抵抗」と呼ばれます)。
したがって、上記で提案したことはまだ実行不可能です。あなたが求めた数学:MD5は128ビットを出力するので、ランダムダイジェストが特定のダイジェストと一致する可能性は$ 1/2 ^ {128} $であり、したがって、目的のダイジェストを再現するには、予想される$ 2 ^ {128} $の試行が必要です。ダイジェスト。
既存の攻撃は約衝突:攻撃者はtwo同じMD5にハッシュするが、内容が異なる証明書を作成します。それらの1つは「良性」(攻撃者の名前が含まれています)であり、これは攻撃者が署名のためにCAに送信するものです。 CAは、完全に有効な証明書要求であるため、署名します(これは攻撃者からのものであり、実際には攻撃者の名前が含まれています)。 MD5の衝突のおかげで、署名はalso証明書に接続されたときに検証可能ですother。そのため、攻撃者は、CAの制御不能なコンテンツを選択した証明書でCA署名を取得しました。攻撃者は、結果として得られる2つの証明書が両方とも「構造的に有効」であるように衝突を見つける必要があるため、詳細は少し複雑です。
あなたが求めているのは何か非常に異なる:あなたは攻撃者が既存証明書のハッシュと一致する証明書を生成しようとしていることについて尋ねています。 しなかったそもそも生成します。これは2回目の原像攻撃と呼ばれ、一般に衝突を見つけるよりも困難です。特に、現在、2番目のプレイメージに関してMD5に既知の弱点はありません。
2つあります128 可能なMD5出力(16です32、32ではありません16)。一般的に、[〜#〜] n [〜#〜]入力メッセージがある場合m1、m2、... mN、そしてあなたは新しいメッセージを作りたいmすべてとは異なるm私ただし、mのMD5がm]のいずれかのMD5と等しくなるようにします。私(どれでもかまいません)、最もよく知られている攻撃方法は、ランダムなメッセージを試すことですm一致するまで。その操作の平均コストは2128/ N。
おそらく2よりはるかに少ないです32 そこにSSL証明書があるので、これは攻撃コストが少なくとも2になることを意味します96、これは既存のテクノロジーではまったく実行不可能です。したがって、この攻撃は機能しません。 CA公開鍵の解読ははるかに簡単になります(攻撃されたCA鍵が1024ビットRSA鍵の場合、実行可能ではありませんが、約100万倍簡単になります)。
実際、証明書の場合、証明書には発行元のCAの名前が含まれているため、攻撃はそれよりもコストがかかります。 CAからの一致する署名がある(たとえば、同じMD5を使用する)だけでは、結果の証明書を使用するには不十分です。CAと適切に「チェーン」する必要があります。これは、CA名を「発行者名」として含めることを意味します。 。したがって、上記の式の[〜#〜] n [〜#〜]は、実際に存在する証明書の総数ではなく、証明書の総数CA具体的にターゲットにする必要があります。これは低く、攻撃コストはさらに高くなります。