Hash

對數字簽名的碰撞攻擊

  • July 22, 2021

在閱讀了這篇關於 MD5 碰撞攻擊的文件後,我仍然不明白碰撞如何使數字簽名變得不安全。在論文中,研究人員創建了兩個具有相同雜湊值的文件,一個是無辜的,一個是惡意的。惡意方首先發送好文件,對其進行簽名,然後將簽名複製到壞文件中以用於對付受害者。我的問題是這樣的:因為不可能在文件某處沒有巨大混亂的情況下創建碰撞(儘管不一定對使用者立即可見,例如,如果之前和之後"""在 Python 文件中),如果文件經過數字簽名,為什麼使用者不能簡單地確保文件不包含看似隨機的字節塊?例如,為什麼 SSL 證書不能用 MD5 散列,然後使用客戶端程式碼來驗證它們中沒有任何奇怪的字元串?

只要文件太長或非人類可讀,手動檢測這種隨機字節塊就很容易繞過。因此,要使這樣的事情起作用,您需要自動化該過程。

問題是,很難找到關於什麼是隨機字節塊和什麼是有效數據的有效規則集。

自動檢測算法必須了解所有應檢查的文件格式。因此,可以說,該程序可以檢測到 Python 三引號註釋。現在讓它檢查一個 Java 文件。Java 不做三引號註釋,而是使用 /* do 表示多行註釋。所以你的檢查員不明白這一點。或者,如果您的檢查器不理解 JPEG,您可以讓它檢查一個看起來像隨機字節的 JPEG 文件。

此外,帶有隨機字節的三引號字元串通常具有實際用途,例如,如果您查看 get-pip.py,它的末尾有一個 Base64 編碼的二進製文件,其中包含完整的 pip 安裝。或者任何 RSA 密鑰,它們也看起來像隨機字節,並且很容易將某些內容放入這些欄位中,這會導致 MD5 衝突。

當然,以上所有評論都是有效的(流氓證書、假網站……),但這是另一個故事:

假設你要買房子,比方說房子。

你很懶,想以數字方式簽署契約。

賣給你房子的人會給你一張有效的證書,甚至很高興簽署你將要簽署的契約。

現在,您使用 2048 位 RSA 密鑰和 MD5 散列,通過合格的電子簽名簽署契約。

您同意為房子支付約 20 萬美元。

現在,幾年後,你被起訴,因為你已經支付了 20 萬美元。

賣家現在聲稱您已經簽署了一份契約,說您願意支付 30 萬美元並向法院出示您的有效簽名。

現在你搞砸了,因為一個簡單的 MD5 衝突,不能通過檢測“奇怪”的字元串來檢測。

引用自:https://crypto.stackexchange.com/questions/24661