2017-03-17 169 views
1

比方說,我在瀏覽器中將1G文件分割爲1024塊1Mb,得到每個塊的SHA1並暫時保存這個散列。最後,在對所有塊進行散列處理之後,執行之前收集的所有SHA1散列(執行哈希散列)的SHA1。然後將此「最終」-hash發送到我的服務器。Sha1哈希多個sha1哈希 - >安全以識別文件?

這個散列是安全的,以確定我的文件在服務器上? (假設我們有一個安全的連接,並且sha1沒有碰撞)

做一個多哈希哈希是一個壞主意?

+1

是的,但爲什麼?你是否用相同的散列保護免受僞造,或者你只需​​要確定兩個文件是否不同?對於第一種情況,僅使用SHA256或SHA-512,SHA1不足以滿足當前的最佳實踐。對於第二種情況,單個SHA1就足夠了,但建議移動到SHA-256。 – zaph

回答

0

這應該工作。假設SHA-1是collision free,對於兩個不同的文件,這些散列中至少有一個彼此不同。所以「最終」哈希值也會有所不同。

通常,散列哈希不會提高安全性。如果你想要更安全的使用SHA-256。

+0

關於你的鏈接,如果你閱讀它,你會發現需要大量的計算機能力:6500年的CPU計算完成第一階段攻擊加上 110年的GPU計算完成第二階段。這是一個可行的攻擊?不。那種攻擊類型證明了對於常見的用法SHA1確實是碰撞安全的。 – zaph

+1

我已閱讀此內容。幾年來,SHA1在理論上已經崩潰,現在它們構成了一次碰撞。所以它被打破了。 時間消耗對你我來說可能是一個問題,但有些人擁有相當多的CPU和GPU。因此,如果您需要安全性,則不應將SHA1用於任何新項目。如果您不關心安全性,只需要一個用於內部使用的指紋,則可以使用SHA1,因爲您不會意外碰到碰撞。 – AbcAeffchen

+1

SHA1的使用取決於安全需求。它被認爲是破壞的認證,但不是像Git使用的文件唯一性。確定SHA-256通常是比SHA1更好的選擇,但SHA1在許多用途中仍然有效。如果您正在防範每個散列可花費6,500個CPU年的攻擊者,那麼您將遇到更大的問題,應該更關心[橡皮管密碼分析](https://en.wikipedia.org/wiki/Rubber-hose_cryptanalysis)。 – zaph

3

我想你的目標是檢查上傳文件的完整性,比較完成後在客戶端和服務器端計算出的chekcsum。然後對每個塊進行散列,將它們組合並散列結果應該足夠。

//pseudocode 
SHA1.digest ( 
    SHA1.digest(chunk 1) + SHA1.digest(chunk 2) + ... + SHA1.digest(chunk n)) 

但是請注意,您可以在將每個塊添加到計算中的完整文件上執行增量SHA1哈希。這樣的結果是,散列一步到位的完整文件,不需要臨時數據

SHA1.update(chunk 1) 
    SHA1.update(chunk 2) 
    ... 
    SHA1.update(chunk n) 
    SHA1.digest() 

考慮也如圖所示意見搬到SHA256,但可能爲了這個目的SHA1結合相同將是足夠的