作者:Steven Li(胡飛瞳)
來源:IPFS原力區
散列(hash)函數是區塊鏈所利用的技術中的最為基礎的部分了,也是非常重要的部分之一。一個好的散列函數在一個密碼體系中的地位也十分重要。Filecoin作為新一代的區塊鏈,在散列函數的採用上也十分大膽。其中Posaidon就是比較新的散列算法。
IT人士對於散列(Hash)再熟悉不過了。Hash表是一種基本的數據結構,而這種數據結構是依靠hash函數來進行索引和訪問的。由於Hash函數在尋址上具有很高的效率上的優勢,算法複雜度基本上是O(1)。因此,Hash函數被廣泛應用與資料庫和其他數據處理系統中。
簡單來說,散列函數就是把任意長度的輸入,通過散列算法,變換成固定長度的輸出,該輸出就是散列值。通常輸入的數據長度要大於運算得出的散列值,同時因為這個散列值一定程度上可以代表原數據,因此也被成為摘要。工程師比較熟悉的 md5 就是使用最為廣泛的 hash 函數,一般用來驗證數據的完整性。
因為散列值是一個固定長度,比如說md5sum的輸出是128位,也就是16位元組,那麼這個散列值的所有可能性就是 2^128。這個範圍和IPv6的地址範圍差不多。
一個 hash 函數可以由以下特性來進行評估:
除了hash函數的一般性特性只要,用於密碼學的 hash 函數有更嚴格的要求:
前面提到的 md5 散列函數,在區塊鏈系統中完全沒有被採用,其主要原因就是在碰撞安全性不能滿足要求,密碼學界在2007年就發現了其碰撞破解的辦法,而最新的發現其雙塊攻擊在普通計算機上就可以很快實現。而廣泛使用的SHA256函數的碰撞安全性是 md5 的 2^64 倍,
IPFS的CID(內容標識,也就是散列之)在數據格式的定義上採用MultiHash,也就是說,是一個可擴展的數據格式和方案。用戶可以根據需要隨時支持新的協議。其格式大致如下:
大家常見的以 Qm 打頭的CID是採用SHA256算法的,Qm是SHA256的base58編碼後的結果。當前,IPFS支持的常見hash算法包括:
注1: SHA家族的算法,由美國國家安全局(NSA)所設計,並由美國國家標準與技術研究院(NIST)發布,是美國的政府標準。SHA-x表示第x代。
注2: BLAKE2的改進版本於2012年12月21日宣布推出。它由Jean-Philippe Aumasson、Samuel Neves、Zooko Wilcox-O'Hearn和Christian Winnerlein設計,用於取代廣泛使用但已被攻破的MD5和SHA-1算法。Blake2的特點是計算更快,安全性高。
由於 Filecoin 的代碼基於IPFS之上,因此IPFS中使用的hash算法,也就自然在Filecoin中被採用,包括使用於libp2p, IPLD, 以及存儲市場和檢索市場。
這一點可以從Filecoin在選擇 Blake-2b 和 SHA-3 上可以看出來,Blake算法曾被其發明人Jean-Philippe Aumasson, Luca Henzen, Willi Meier, and Raphael C.-W. Phan 提交到NIST去競爭 SHA-3,但最終敗給了 Keccak(以太坊目前使用,將來也可能替換)。但 Blake2 效率更高,在實踐中安全性不輸SHA-3。因此,blake2在Filecoin中被廣泛採用。
在Filecoin中 blake2b 使用在以下一些地方:
Filecoin區別於現有區塊鏈的一個顯著特點是它的證明系統,也就是其複製證明和時空證明機制。在這一套機制中,hash算法也被廣泛用到。
基於Feistel算法的hash函數,又成為F-Hash。Filecoin採用F-Hash來為SDR過程中的每一個節點計算找尋父節點,這些父節點隨機分布,沒有規律,同時,這些父節點又完全均勻地分布在整個sector的空間中。這簡直就是使用F-Hash的最佳場合。
在ZCash中,PedersenHash 是為 PedersenCommitment服務,這在ZCash的交易中起到舉足輕重的作用。Filecoin的複製證明和時空證明採用與ZCash類似的零知識證明,所以順理成章地採用PedersenHash。
在這種情況下,Filecoin團隊毅然決定,在Filecoin的證明系統中,與零知識證明相關的hash算法採用 Pedersen Poseidon。
這帶來一個問題,那就是對SHA又特殊支持的晶片效率要高很多。這也就是為什麼Filecoin團隊最近一直在暗示AMD CPU效率更高的原因,因為AMD的多數晶片都支持 SHA-NI,而Intel目前並不支持。這個問題是的Intel設備非常尷尬,也使得市場處於一個不平衡的狀態。
既然如此,為什麼Filecoin團隊不換一個Hash算法,來達成某種平衡,不同的設備都可以進入網絡進行競爭對Filecoin網絡來說不是更好嗎?但是,我的判斷是,並不會。因為這裡又充分的理由採用SHA-256。具體原因是什麼,留給讀者自己思考。