Hash
Merkle 樹節點中的雜湊或壓縮函式?
維基百科對 Merkle 樹的描述是:
樹中更靠前的節點是它們各自子節點的雜湊值。通常,使用諸如 SHA-2 或 SHA-3 之類的加密散列函式進行散列。
可以使用單向壓縮函式來定義加密散列函式。我們可以使用單向壓縮函式來散列孩子嗎?似乎更有效率。我們不做長度填充。對於每個節點,壓縮函式的計算量減少 1。
在 BitTorrent 的 Merkle 雜湊種子擴展和TTH (描述Tiger Tree Hashing的俄語版本)中,它們使用雜湊函式,而不是壓縮函式。我沒有找到關於 eMule 的 AICH 的數據。其他樹雜湊函式呢(我不知道;也許,你知道)?
在默克爾樹中,數據最終不可避免地會失去,因為它被壓縮掉了。如果 Merkle 樹使用非填充壓縮函式,則生成的散列的大小將逐級下降,導致頂部散列非常短。頂部雜湊越短,它對樹的內容就越少。Merkle Tree 中生成的雜湊值越長,樹越獨特,它表達數據的能力就越好。此外,如果壓縮函式的結果不是標準的(即依賴於樹級別),那麼從開發人員的角度來看,創建可以適用於任何和所有大小的 Merkle 樹的軟體是非常困難的。簡而言之,非填充壓縮函式會破壞樹的“唯一性”,
這取決於壓縮函式具有哪些屬性,而這又取決於雜湊函式的構造方式。
在基於Merkle-Damgård 構造的雜湊函式中,壓縮函式需要像雜湊函式本身一樣具有碰撞、原像和第二原像抗性。唯一的區別是輸入長度:壓縮函式具有恆定的輸入大小。
由於 Merkle 樹需要原像和第二原像抗性,因此來自正確大小的 Merkle-Damgård 散列(例如 SHA-2)的壓縮函式應該是安全的。
對於其他類型的雜湊函式,您需要查看針對壓縮函式聲稱的原像抗性。