Collision-Resistance
反映現有樹結構的類似 Merkle 的雜湊樹
我想知道反映另一棵樹結構的雜湊樹結構的安全性。在普通的 Merkle 樹中,塊雜湊形成樹的葉子,所有內部節點都是通過對其子節點進行雜湊計算的,但是如果被雜湊的數據已經符合自然樹結構T怎麼辦?您能否通過將 T 的葉節點替換為其雜湊值並將 T 的內部節點替換為其子節點的雜湊值來從T安全地創建雜湊樹?
我對這種資料結構的激勵範例是分層文件系統。我已經編寫了一些實現這個想法的程式碼,但我想知道這種方法是否真的安全。
這裡的概念驗證程式碼:https ://github.com/michaelsproul/antifa/tree/master/src
我試圖通過採用來自Certificate Transparency的幀字節來使其具有第二原像抗性。文件
h(00 || contents)
的雜湊是 ,目錄的雜湊是h(01 || child1 || child2 || ...)
. 子項在散列之前按名稱排序,但他們的名稱不包含在散列中(儘管也許應該避免保留順序的重命名攻擊)。
src
這是在 PoC 目錄上執行的範例:$ tree . ├── bin │ └── shasum.rs ├── hash.rs ├── lib.rs └── main.rs 1 directory, 4 files $ cd .. && target/release/antifa src []: SHA-256:9c9489d389f253820a7b7b04a00f38cc04e7d9381e6e6792a69cade7982c6ab1 ["lib.rs"]: SHA-256:e070004ebdeca318c5451f5f4e716d5322c286e7a347b3bef987402efc362454 ["main.rs"]: SHA-256:83e39d33c072b917ac299bb761442f51e473ccb69b0b40cbf87a80e892fb68b6 ["bin"]: SHA-256:22065eed254ac789dddc348d1f429f0e27a09f4e7f0a432d7c4f70e26d5b0e4a ["bin", "shasum.rs"]: SHA-256:c91146c4ac71b8b336cdd8d70475ea8fed3186b16e189ba9d3e003fc80da9113 ["hash.rs"]: SHA-256:984b35e7bb55608982bcf1e76d461e0bacd6e75b54f0f0fca5dfac12b23e6135
(文件路徑現在顯示為它們的組件列表)
是的:這允許根雜湊對目錄樹的全部內容進行身份驗證,例如,惡意儲存伺服器無法欺騙您接受偽造文件來替換您之前要求它儲存的文件。這就是Tahoe-LAFS的結構,或者至少是不可變部分的結構,以及啟用身份驗證時 ZFS 塊指針的儲存方式。更廣泛地說,有一些關於經過身份驗證的資料結構的文獻基本上都是建立在這個想法之上的。