Hash
為什麼要為零知識證明發明新的雜湊函式?
最近,發明了新的雜湊函式。它們的主要目的是滿足零知識證明系統的需求。我說的是 Poseidon-256、Starkad-256 等。見論文。
這些散列函式相對於 Blake3 或 SHA3 等現有散列函式的主要優勢是什麼?這些功能有何不同?
讓我們看一個如何在零知識證明系統中使用加密雜湊函式的範例。以下用 Zokrates DSL Toolbox 編寫的程式碼是使用零知識證明系統計算雜湊的範例。首先編譯程式指令。然後我們將通過設置進行運算電路的設置。然後我們導出驗證者併計算證明。
import "hashes/sha256/512bitPacked" as sha256packed def main(private field a, private field b, private field c, private field d) -> (field[2]): h = sha256packed([a, b, c, d]) return h
讓我們還分析另一個程式碼範例,在使用 Zokrates Toolbox 建構零知識證明時建構 Pedersen Hash。
import "hashes/pedersen/6bit" as pedersen def main() -> (field): field[6] e = [1, 1, 0, 0, 0, 0] field[2] d = pedersen(e) 5483803361072598088157572477433311028290255512997784196805059543720485966024 == d[0] 8712718144085345152615259409576985937188455136179509057889474614313734076278 == d[1] return 1
正如我們在這兩個範例中所看到的,在表示為大素數域上的電路的密碼散列函式下證明原像的知識成為零知識證明系統中算術電路構造中計算成本最高的部分之一。因此,所有對發明 SNARK 和 STARK 友好的加密雜湊函式的追求都受到了熱烈的歡迎!
這個問題中提到的論文聲稱每個消息位的約束數量比 Pedersen Hash 減少,這可能會提高 ZKSNARK 多項式承諾的構造性能。同樣,提出的二進制散列函式 STARKAD 在不久的將來可能有利於建構基於 ZKSTARK 的系統。
我們的雜湊函式 Poseidon 每個消息位使用的約束比 Pedersen Hash 少 8 倍,而我們的二進制雜湊函式 Starkad 比其他最近的設計有很大的優勢