2012-09-27 44 views
1

我正在開發一個「開放的分佈式雲存儲系統」。有沒有一種快速散列算法能夠抵抗故意的碰撞,如果是,哪一個?

開放我的意思是任何人都可以參與託管文件。

我目前的設計使用文件內容的sha1散列作爲全局文件ID。

給出客戶端已經知道這個哈希值並從「帶寬捐獻者」接收文件。

客戶端現在需要通過生成散列並將其與期望值進行比較來驗證文件確實是否正確。

不過我擔心的是有人可能會故意修改一個文件來產生相同的散列。據我所知,對於CRC家族的哈希來說這很容易實現。一些「谷歌搜索」顯示了很多關於MD5相同的說法。

現在我的問題是:有沒有滿足beeing

  • 快大數據量的
  • 以及分佈在散列範圍的標準散列算法(又名「獨一無二」)
  • 具有
  • 是故意的衝突攻擊

所有的O耐足夠目標範圍(「比特長度」)這意味着我可以考慮實現一個服務於我的需求的設置,其中包含一個祕密組件,例如一個祕密的openssl密鑰或一個散列函數的共享密鑰。

不幸的是我不能用這個。

+0

你想要的是一個安全的散列函數。對於你的應用程序來說,速度絕對應該是安全性的第二要素 - 記住,諸如SHA-1或SHA-256等函數的散列速度要比客戶端可以接收文件的速度快幾個數量級反正網絡連接。 –

回答

2

你所要求的是一種單向函數,它的存在是一個重大的開放性問題。

使用密碼散列函數,您希望避免的特定攻擊稱爲「第二次圖像前攻擊」。

這應該可以幫助你使用谷歌搜索你想要的東西,但據我所知實際上沒有任何已知的針對MD5的實際的第二預映像攻擊。

首先,您可能發現很容易找到兩個具有相同散列的任意文件,並且每次嘗試時都會找到兩個不同的對。

但是很難生成一個僞裝成某些特定文件的文件 - 換句話說,前面提到的「兩個任意文件」中的一個實際上不太可能屬於存儲中的非惡意代理。

如果你仍然不滿意,你可能想嘗試類似SHA-1或SHA-2或GOST。

+2

是的,沒有已知的針對MD5的攻擊。但最新的研究結果太接近了。強烈建議不要在安全領域使用MD5。 GOST(34311)也不是好選擇。 –

+0

確實。爲什麼現在可以選擇MD5作爲新的應用程序,當有更多更好的解決方案時? –

2

首先,散列值永遠不會識別文件,因爲總會有衝突。

話雖如此,你在找什麼叫做cryptographic hash。這些被設計爲不容易(即,除暴力外)容許修改數據,同時保持散列,或用給定散列產生新數據。

因此,SHA家族沒問題。

+1

哈希當然可以識別一個文件。你可能會認爲飛機不能用於旅行,因爲它可能會崩潰。 *我們所做的一切都有可能的失敗模式。 –

2

目前,SHA1已經足夠。沒有碰撞是已知的。

這將有助於很多知道你哈希的東西的平均大小。但最有可能的是,如果您的平臺主要是64位,那麼SHA512是您的最佳選擇。您可以截斷哈希並只使用它的256位。如果你的平臺主要是32位的,SHA256是你的最佳選擇。

相關問題