原文標題:《DAOrayaki |zkPairing:橢圓曲线配對的 zkSNARKs》(zkPairing: zkSNARKs for Elliptic Curve Pairings)
撰文: Jonathan W.,Vincent H.,and Yi Sun
編譯:Skyhigh Feng
配對是許多加密協議的核心組成部分。本文我們介紹 circom-pairing1,一種在 Circom 用於橢圓曲线配對的 zkSNARK 電路的概念驗證實現。
基於配對的密碼學(Pairing-based cryptography2) (PBC) 建立在一個叫做橢圓曲线配對(elliptic curve pairing3)的數學對象存在的橢圓曲线密碼學(elliptic curve cryptography4)之上。雖然配對的定義相對復雜,但它們是零知識密碼學現代發展的許多加密對象的基礎: BLS 數字籤名、 KZG 多項式承諾和 zkSNARKs。
由於 ZK 生態系統中的這個關鍵角色,在 zkSNARKs 中實現配對極大地擴展了可尋址密碼構造的範圍,並增加了 SNARKs 的反射能力。特別是,我們設想的應用程序的 ZK 身份(ZK Identity5) ,區塊鏈擴容,和可編程的 SNARKs 。最後的「解鎖」可能會帶來一個未來,任何人都可以在運行中自由組合和聯合不同的 SNARKs 。
由於配對涉及許多復雜的橢圓曲线操作,在 zkSNARK 中實現它們會帶來許多挑战。首先,對於非自然域上的橢圓曲线算法,我們必須使用 zk-ECDSA6 的大整數和 ECC 優化,但是要適應我們的曲线和 BLS12-381 的配對涉及到在域擴展上操作的事實。其次,Miller 的計算配對算法 Miller's algorithm7允許在標准計算模型中進行許多優化,我們將這些優化移植到 zkSNARK 設置中。最後,由於配對計算的復雜性,即使最終優化的電路也可能相當大,這意味着需要一些基礎設施的最佳實踐來適應 Circom 工具棧。
在這一系列的文章中,我們提出了一個在 BLS12-381 曲线上的最優 Ate 配對的概念驗證 Circom 實現,以及一個在 BLS 籤名驗證中的應用實例。然後,我們概述了其他潛在的應用,如遞歸 SNARK 和多項式承諾驗證,我們認爲這種方法很容易推廣應用。
我們實現了循環配對 circom-pairing8 代碼庫,它爲 BLS12-3819 曲线上的以下操作提供未經審核的 ZK 電路:
Tate 配對是最簡單的橢圓曲线配對之一。該算法滿足雙线性特性,適用於密碼學領域,對橢圓曲线的計算和算法的正確實現起到了很好的檢驗作用。
最佳配對:最佳配對是實踐中最常用的配對。計算類似於 Tate 配對 ( 使用 Miller 的算法,我們將在以後的文章中討論 ) ; 然而,涉及的步驟較少,而每一步的算法更加復雜,最終的結果是一個較短的總計算。
BLS10 籤名驗證 ( 短公鑰 ) : 籤名驗證允許檢查一個 BLS 籤名. 給定籤名 s,生成元 G,公鑰 xG,和哈希 hash ,驗證電路轉換 hash 到橢圓曲线點 H(m), 使用 maptoG2 下面的電路,然後驗證 s 確實是由給定的公鑰和消息生成的籤名。BLS 籤名驗證涉及到評估兩個最優的 Ate 配對來驗證這一點 e(s,G) = e(H(m), xG) , e 表示最佳的 Ate 配對
散列 hash 到曲线: maptoG2 的 BLS 籤名驗證操作通過計算橢圓曲线上的點對。正在籤名的消息必須首先散列成一個數值。然後,這個散列值被轉換成橢圓曲线上的一個點; 散列到曲线電路執行這種轉換。
更詳細的文件,我們的電路在這裏可用。這些電路沒有經過審核,也不打算用作生產級應用的庫。
爲了說明我們的電路,我們在 zkpairing.xyz11 實現了一個演示,它允許用戶生成任何 BLS 籤名 ( 以特定的輸入格式 ) 有效性的證明。如果用戶沒有一個特定的 BLS 籤名他們可以指定以太坊信標鏈上的任何塊號,並且演示會將塊數據解析爲適當的格式,並生成一個驗證該驗證者籤名的證明區塊。對於每個證明,我們提供所有的數據 - 在三個小文件中 - 任何人都可以用來在自己的計算機上驗證證明!
所有基准測試都運行在 32 核 3.1 GHz、256G RAM、1T 硬盤和 400G 交換機 (AWS r5.8 xlarge 實例 ) 上。
請注意,驗證和 Tate 配對是非常大的電路,因此它們需要特殊的硬件和設置來運行。特別是,必須使用 C++ 生成見證服務器,使用 rapidsnark 進行證明,使用補丁版本的 Node.js 而不使用垃圾收集生成密鑰。所有這些都必須在具有大容量內存的機器上完成; 我們的設置工作流程在《大電路最佳實踐》( Best Practices for Large Circuits12 )文檔中有詳細說明。
因爲配對是許多加密協議的核心組成部分,所以用於配對計算的 zkSNARKs 允許我們將以下高級原語放入 SNARK 中:
BLS 籤名驗證: Boneh-Lynn-Shacham (BLS) 數字籤名是一種基於橢圓曲线配對的籤名方案。由於能夠使用 BLS 有效地計算聚合籤名和閾值籤名,它目前被用於區塊鏈,如 Etherum 2.0、 ZCash 和 Dfinity 。驗證 BLS 籤名涉及到一個配對檢查,檢查兩個橢圓曲线配對是否相等,因此通過 zkPairing 直接啓用。這解鎖了潛在的可伸縮應用程序,比如輕型客戶機和橋接的籤名聚合。
遞歸 SNARK 驗證: 因爲 Groth16 證明驗證只涉及配對檢查,所以 SNARK-ing 配對允許 SNARK-ing 整個驗證算法,稱爲遞歸驗證。這使我們能夠構建一個 zkSNARK 的 zkSNARK 的... 無限廣告,使开發人員能夠構建不同的 SNARK 證明,而不是構建一個單一的大型 SNARK 和大大增加可能的 SNARK 的復雜性。我們正在調整我們的電路,以遞歸 Groth16 驗證 BN254,並希望在不久的將來發布一個概念證明。
KZG 多項式承諾驗證: KZG 多項式承諾是 PlonK 的基礎,PlonK 是具有通用可信設置的新一代 zkSNARK 之一。因爲驗證 KZG 承諾涉及到一個配對檢查,zkSNARK-ing 配對使我們能夠驗證任何建立在 SNARK 中的 KZG 承諾之上的東西,包括 PlonK 驗證本身!
很快就會看到第 2 部分討論了 zkPairing 的實現技術!
參考1.https://github.com/yi-sun/circom-pairing2.https://en.wikipedia.org/wiki/Pairing-based_cryptography3.https://medium.com/@VitalikButerin/exploring-elliptic-curve-pairings-c73c1864e6274.https://en.wikipedia.org/wiki/Elliptic-curve_cryptography5.https://0xparc.org/blog/zk-id-26.https://0xparc.org/blog/zk-ecdsa-27.https://crypto.stanford.edu/pbc/notes/ep/miller.html8.https://github.com/yi-sun/circom-pairing9.https://hackmd.io/@benjaminion/bls12-38110.https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bls-signature-0411.https://zkpairing.xyz/12.https://hackmd.io/V-7Aal05Tiy-ozmzTGBYPA?view鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。
標題:三分鐘了解 zkPairing:橢圓曲线配對的 zkSNARKs
地址:https://www.torrentbusiness.com/article/14496.html
標籤: