Hash

將 SHA256 嵌入到 BitTorrent 的 SHA1 中

  • January 7, 2021

BitTorrent 使用 SHA1 作為其雜湊值,但 SHA1 是不安全的,人們可以篡改原像並仍然獲得相同的雜湊值,對吧?

所以想像一下,我想非常確定我在 BitTorrent 上共享的文件將被下載它的人正確下載。包含2個文件是否有效,即:

  1. 我實際共享的文件;
  2. 包含我正在共享的文件的 SHA256 的文件。

然後接收者必須檢查 SHA256 是否匹配(加上檢查 SHA1 是否匹配,這將由 BitTorrent 客戶端自動完成)。

SHA-1 的問題是在實際攻擊shattered.io NIST於 2011 年將其從數字簽名中刪除之前的碰撞攻擊,因為發現碰撞會對數字簽名造成災難性後果。SHA-1 的一般衝突需要 $ 2^{80} $ -時間,這在 2011 年及以後被認為是低的。Rabin 是第一個使用雜湊(當時稱為壓縮)來證明其簽名方案的安全性的人,我們現在稱之為Rabin 簽名方案。NIST 仍然允許 SHA-1 將非數字簽名應用程序用作2019 年的可接受狀態,NIST.SP.800-131Ar2

BitTorrent 使用 SHA1 作為其雜湊值,但 SHA1 是不安全的,人們可以篡改原像並仍然獲得相同的雜湊值,對吧?

這不是給定雜湊值的原像攻擊 $ h = H(m) $ 對於一些消息 $ m $ 找到原像 $ x $ 散列函式的 $ H $ 以便 $ h = H(x) $ . 我們可以有 $ m=x $ 或不。根據定義,原像攻擊不需要平等。可以看出,這對於密碼破解非常有幫助,無論您是否找到相同的密碼都沒有關係,因為兩者都在工作。SHA-1 上沒有比一般的原像攻擊更好的原像攻擊,但這仍然需要 $ 2^{180} $ -時間。

您嘗試的是收到消息的第二原像攻擊 $ m $ 及其雜湊值 $ h = H(m) $ 找另外一個 $ m’ $ 這樣 $ h = H(m’) $ . SHA-1 沒有比通用原像攻擊更快的第二原像攻擊,並且通用第二原像攻擊的成本為 $ 2^{160} $ - SHA-1 的時間。

隨意篡改你會得到 $ 1/2^{180} $ 如果我們將 SHA-1 的輸出視為均勻隨機,則被篡改的文件具有相同雜湊的機率。

尋找第二個原像是非常危險的。例如; 可以為現有的 ISO 設計一個新的惡意 IOS 並替換它。BitTorrent 網路存在一個問題,即許多人共享同一個文件,這將在人們下載的 IOS 上造成衝突。因此,對於主動下載,它可能是不可能的。對於新的下載,如果攻擊者能夠快速找到第二個原像攻擊,那麼他們可能會在分發之前替換原始副本,也是IFs吧?

所以想像一下,我想非常確定我在 BitTorrent 上共享的文件將被下載它的人正確下載。包含2個文件是否有效,即:

我實際共享的文件;包含我正在共享的文件的 SHA256 的文件。然後接收者必須檢查 SHA256 是否匹配(加上檢查 SHA1 是否匹配,這將由 BitTorrent 客戶端自動完成)。

SHA256 計算是免費的,因為它沒有密鑰。IF攻擊者仍然可以像您一樣計算惡意 ISO 及其 SHA256 雜湊並儲存。

風險管理

SHA-1 的使用實際上取決於風險管理。例如,Git 仍然使用 SHA-1,Linus 對此有明確的理由

Git 不需要 SHA-1 的第二個原像抵抗作為安全功能,因為它總是傾向於保留對象的最早版本以防發生衝突,從而防止攻擊者偷偷覆蓋文件。

現在 BitTorrent 呢?

BitTorrent 將文件分成 64 KB – 2 MB 的塊。torrent 的元數據文件(.torrent 文件)儲存每個片段的大小和雜湊值。與儲存的info_hash一起,使 BitTorrent 對故意篡改(中毒)具有很強的抵抗力。使用 info_hash 中的值來驗證塊 SHA-1。

對此有研究;

自適應內容中毒以防止 P2P 網路中的非法文件分發*

我們發現 BitTorrent 對內容中毒的抵抗力最強。

….

因為索引文件分佈在 P2P 文件共享系統之外,所以可以使用元數據中包含的可靠雜湊來驗證每個塊。此驗證為 BitTorrent 協議提供了對內容中毒的高抵抗力。

Bittorent 的 GitHub 上也有關於這個問題的長篇大論;簡而言之,如果您信任共享 .torrent 文件的主機,那麼您是安全的。

不,如果他們之前插入了已知周消息,他們只能篡改原圖像。可以預先計算兩個(或更多)消息,使它們具有相同的散列,即衝突。也可以簡單地使用具有相同 SHA-1 的兩個已知文件,例如來自 SHAttered 攻擊的 PDF 文件。然後他們可以根據使用的文件執行特定操作。

只有當接收者可以信任共享雜湊時,共享雜湊才有意義。將其託管在數據旁邊是沒有意義的。如果您在網站上看到這樣的散列,則散列有兩個功能:確保文件已完全正確下載,並確保從不太受信任的鏡像下載文件時文件正確。要使用密碼學解決此問題,您將使用簽名,由預先信任的證書中的公鑰驗證(例如,通過驗證/驗證證書鏈)。

似乎 bittorrent 將散列分佈在種子本身之外。這使得它在洪流節點分發期間不受更改的影響,但在我看來,它不會完全避免分發具有相同雜湊的兩個不同/預先計算的文件。從這個意義上說,對整個文件單獨散列可能確實有幫助,因為攻擊肯定不會針對 SHA-256。

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