a16z:鏈上可信設定儀式

語言: CN / TW / HK

作者:Valeria Nikolaenko and Sam Ragsdale

可信設定儀式是加密貨幣社群的痛點,也是興奮點之一。儀式的目標是產生值得信賴的加密金鑰,以確保加密貨幣錢包、區塊鏈協議或零知識證明系統的安全。這些(有時是浮誇的)程式經常是一個特定專案安全的信任根基,因此正確處理它們非常重要。

區塊鏈專案以許多創造性的方式舉行儀式,涉及blowtorches、radioactive dust、airplanes,但所有這些都有一個共同點:它們都涉及一個集中的協調人。通過這項工作,我們展示瞭如何通過用智慧合約取代中心化的協調者來分散這一過程。此外,我們正在開源一個庫,允許任何人在以太坊鏈上執行這樣一個儀式(被加密貨幣從業者稱為Kate-Zaverucha-Goldberg——KZG)或 “power-of-tau ”儀式。任何人只需支付交易費用即可參與!

我們的去中心化方法有侷限性,但它仍然是有用的。由於目前鏈上資料的限制,加密引數的大小必須保持簡短,即不超過64KB。但參與者的數量沒有上限,人們可以永久地繼續提交貢獻。這些短引數的應用包括小型零知識SNARKs、資料可用性取樣和Verkle樹。

可信設定儀式的歷史和機制

在一個典型的可信設定儀式中,一群參與者將合作生成一組加密引數。每個參與方使用本地生成的祕密資訊來生成有助於建立這些引數的資料。正確的設定可以確保祕密不被洩露,祕密只在協議指定的範圍內使用,並且這些祕密在儀式結束時被完全銷燬。只要儀式中至少有一方表現得誠實,不被破壞,並銷燬其本地祕密,整個設定就可以被視為安全。(當然,這是假設數學是正確的,程式碼沒有錯誤)。

一些最突出的儀式是由Zcash舉辦的,這是一個面向隱私的區塊鏈專案。這些儀式的參與者產生了公共引數,旨在讓Zcash使用者構建和驗證私人加密貨幣交易。六個參與者在2016年進行了第一個Zcash儀式,即Sprout。兩年後,加密貨幣研究員Ariel Gabizon(現在是Aztec的首席科學家)在儀式的設計中發現了一個毀滅性的漏洞,這個漏洞是由一篇基礎研究論文繼承下來的。該漏洞可能使攻擊者能夠在不被發現的情況下創造無限的Zcash幣。Zcash團隊將這個漏洞保密了7個月,直到系統升級,Sapling(其儀式涉及90名參與者)解決了這個問題。雖然基於安全漏洞的攻擊不會影響使用者的交易隱私,但無限造假的前景破壞了Zcash的安全前提。(理論上不可能知道是否發生了攻擊)。

另一個值得注意的可信設定的例子是主要為Semaphore設計的永久“power-of-tau”儀式,這是一種用於以太坊匿名信令的隱私保護技術。這個設定使用了BN254橢圓曲線,到目前為止有71個參與者。其他著名的專案後來使用這個設定在上面執行他們自己的儀式,包括Tornado.Cash(最近被美國政府制裁),Hermez網路,和Loopring。Aztec在BLS12_381橢圓曲線上為zkSync運行了一個類似的儀式,有176名參與者,這是一個“第二層”以太坊擴充套件解決方案,使用零知識rollups。Filecoin,一個去中心化的資料儲存協議,在第一階段和第二階段分別有19和33個參與者,進行了一個分叉原始回購的儀式。Celo,一個第一層區塊鏈,也為他們的輕客戶端Plumo舉行了一個儀式。

永久的儀式對參與者的數量沒有限制。換句話說,不是信任其他人來執行一個可信的設定儀式,而是任何人都可以參與,以滿足他們對安全的任何程度。一個值得信賴的參與者確保了所有結果引數的安全;這個鏈條就像它最強大的環節一樣強大。正如其名稱所暗示的那樣,永久儀式可以永久執行,就像最初的“powers-of-tau ceremony”儀式的前提那樣。也就是說,專案經常決定他們的儀式有一個具體的開始和結束時間,這樣他們就可以把產生的引數嵌入到他們的協議中,而不必擔心不斷地更新它們。

以太坊計劃為即將到來的ProtoDankSharding和DankSharding升級執行一個較小的可信設定儀式。這兩個升級將增加以太坊鏈提供給客戶的儲存資料量。這些資料將有一個建議的30至60天的有效期。該儀式正在積極開發中,並計劃在明年初執行六週。(更多細節見kzg-ceremony-specs:

http://github.com/ethereum/kzg-ceremony-specs/)它將成為迄今為止執行的最大的區塊鏈可信設定儀式。

談到可信設定儀式,偏執狂是一種美德。如果一臺機器的硬體或軟體被破壞,就會破壞其生成的祕密的安全性。洩露祕密的偷偷摸摸的旁門左道攻擊也很難被排除。例如,一部手機可以通過記錄CPU振動的聲波來監視計算機的執行。在實踐中,由於很難消除所有可能的側通道攻擊,包括那些仍未被發現或披露的攻擊,甚至有人提議將機器飛到太空中,在那裡舉行儀式。

就目前而言,嚴肅的儀式參與者的遊戲規則通常如下。購買一臺新機器(未受汙染的硬體)。通過移除所有的網絡卡(以防止本地祕密離開機器)來實現空氣隔離。在一個遙遠的未公開的地點,在法拉第籠中執行機器(以挫敗可能的窺探者)。用大量的熵和難以複製的資料(如隨機按鍵或視訊檔案)作為偽隨機祕密發生器的種子(以使祕密難以破解)。最後,銷燬機器(連同任何祕密的痕跡)將一切燒成灰燼。

協調可信的設定儀式

下面是一些以前的可信設定儀式參與者的有趣的引言:

  • “……用blowtorch有條不紊地逐件加熱電子產品,直到所有東西都被燒黑……”——Peter Todd 在物理上銷燬當地的祕密。
  • “我這裡有一塊布,上面有來自切爾諾貝利反應堆核心的石墨粉……你每四個脈衝(從連線到微控制器的蓋革計數器)計數,你比較脈衝一和二之間的時間間隔以及脈衝三和四之間的時間間隔,如果它更大,你得到一個零,如果它更小,你得到一個一”。 “……我們即將坐上這架飛機,生成我們的隨機數……”—— Ryan Pierce和Andrew Miller談祕密生成。

Zcash power-of-tau儀式第41輪涉及一架飛機。

  • “銷售人員說他們有13臺電腦。我問我們是否可以從這13臺中挑選一臺。他問我是否有特別要找的東西(很困惑,因為它們都是一樣的),我說我只是想隨便挑一個。他說他不能讓我們進入後面的倉庫。我問他是否可以拿兩個出來,這樣我們就可以從這兩個中挑選一個。他用手推車運出了兩臺。Jerry從這兩臺電腦中選擇了一臺,我們把它帶到收銀臺結賬”。 — Peter Van Valkenburgh 談購買新機器。
  • “儀式的前幾個小時是在一個用鋁箔和保鮮膜製成的臨時法拉第籠裡進行的。我把膝上型電腦移出法拉第籠,因為它的通風條件很差,摸起來很熱”。——Koh Wei Jie 談側面通道保護。
  • “……在山上舉行了一部分儀式,沒有鄰居”。——Micheal Lapinski 談關於側通道保護。
  • “我選擇使用周圍的視訊來產生足夠的熵”——Muhd Amrullah談關於隨機值的產生。

Zcash聯合創始人Zooko Wilcox的弟弟Za Wilcox在2016年破壞了一臺用於生成隨機數的電腦,用於一個可信的儀式。

所有這些儀式都依賴於一個集中的協調人。協調員是個人或私人伺服器或其他一些實體,他們被委託登記和命令參與者,作為中繼者,將前一個參與者的資訊轉發給下一個參與者,併為可審計性目的保留所有通訊的集中日誌。協調員通常還負責將日誌永久地提供給公眾;當然,集中式系統總是有可能出現數據丟失或管理不當的情況。(例如,Perpetual-power-of-tau儲存在Microsoft Azure和Github上)。

我們覺得很諷刺的是,當去中心化是加密貨幣精神的核心原則時,加密貨幣專案必須依賴中心化的可信設定儀式。因此,我們決定展示直接在以太坊區塊鏈上執行一個小型的永續權力的儀式的可行性。這個設定是完全去中心化的,無許可權的,抗審查的,而且只要任何一個參與者是誠實的,就很安全(見免責宣告)。參加儀式的費用只有29.26萬到17.76 gas(按目前的價格計算約為7到400美元),這取決於所需的結果引數的大小(在這種情況下是8到1024個powers-of-tau)。(具體費用見下表——我們在文章後面會更詳細地介紹這些計算方法)。

目前,我們建議不要將該程式碼用於除實驗目的之外的其他用途,如果有人發現程式碼中有任何問題,請向我們報告,我們將非常感激。我們希望收集對我們方法的反饋和審計。

瞭解KZG或 “power-of-tau “儀式

讓我們來探討一下最流行的信任設定之一,這就是所謂的KZG(power-of-tau) 儀式。這要歸功於以太坊聯合創始人Vitalik Buterin,他關於可信設定的博文為我們在本節中的想法提供了參考。該設定生成了power-of-tau的程式設計,之所以被命名為“tau”,是因為“tau”剛好是用來表達參與者產生的祕密的變數。

pp = [[]1, [2]1, [3]1, …, [n]1; []2, [2]2, …, [k]2]

對於某些應用程式(例如,Groth16,一種由 Jens Groth 在 2016 年設計的流行 zkSNARK 證明方案),設定的第一階段之後是第二階段,即多方計算(MPC)儀式,為特定的 SNARK 電路生成引數.然而,我們的工作只關注第一階段。第一階段——tau 的生成——已經作為通用 SNARK(例如 PLONK 和 SONIC)以及其他密碼學應用程式(例如 KZG 承諾、Verkle 樹和資料可用性)的基礎構建塊非常有用取樣(DAS)。一般來說,通用 SNARK 引數應該非常大,以便它們可以支援大而有用的電路。包含更多門的電路通常更有用,因為它們可以捕獲大量計算; tau 的數量大致對應於電路中門的數量。因此,典型的設定大小為 |pp| = ~40 GB 並且能夠支援具有 ~228 個門的電路。鑑於以太坊當前的限制,將如此大的引數放在鏈上是不可行的,但對小型 SNARK 電路、Verkle 樹或 DAS 有用的較小的可信設定儀式可以在鏈上執行。

以太坊基金會計劃為 200 KB 到 1.5 MB 的 power-of-tau 舉辦幾個較小的儀式。雖然更大的儀式可能看起來更好,但考慮到更大的引數可以建立更有用的 SNARK 電路,事實上,更大的並不總是更好。某些應用程式,例如 DAS,特別需要一個更小的應用程式! [原因是非常技術性的,但如果你好奇,那是因為具有 n 次冪的設定(在 G1 中)只能使 KZG-commitments 對次數 ≤ n 的多項式,這對於確保KZG-承諾下面的多項式可以從任何n個評價中重建是至關重要的。這一特性使資料可用性取樣成為可能:每次成功獲得(取樣)多項式的t個隨機評價,就能保證多項式能以t/n的概率被完全重構。如果你想了解更多關於DAS的資訊,請檢視Buterin在以太坊研究論壇上的這篇帖子:

http://ethresear.ch/t/2d-data-availability-with-kate-commitments/8081。

我們設計了一個可以部署在以太坊區塊鏈上的智慧合約,以執行一個可信的設定儀式。該合約將公共引數(tower-of-tau)完全儲存在鏈上,並通過使用者的交易收集參與。

一個新的參與者首先會讀取這些引數:

pp0 = ([]1, [2]1, [3]1, …, [n]1; []2, [2]2, …, [k]2) 。

然後對一個隨機的祕密’進行取樣,並計算出更新的引數:

pp1 = ([‘]1, [(‘)2]1, [(‘)3]1, …, [(‘)n]1; [‘]2, [(‘)2]2, …, [(‘ )k]2)。

並將其公佈在鏈上,並提供證明,以證明三件事:

  1. 對離散邏輯的瞭解:參與者知道’。(證明對可信設定儀式的最新貢獻是建立在所有之前的參與者的工作之上的)。
  2. pp1的形式良好:元素確實程式設計了增量權力。(驗證了新參與者對儀式的貢獻的形式良好性)。
  3. 更新是不遞減的:’≠0。(這是為了防止攻擊者試圖通過刪除所有參與者過去的工作來破壞系統。)

智慧合約驗證該證明,如果它是正確的,它將更新它所儲存的公共引數。你可以在repo中找到更多關於數學的細節和它背後的推理。

計算gas成本

在鏈上執行設定的主要挑戰是使可信的設定儀式儘可能地節省gas。理想情況下,提交一個貢獻的成本不超過50美元。(大型專案可能會對貢獻者的gas進行補貼,在這種情況下,數百名參與者每人花費100美元是比較容易想象的)。下面,我們將詳細介紹設定中最昂貴的部分。較低的gas成本將降低貢獻成本並允許構建更長的引數(更多的 tau 功率和更大的 SNARK 電路)!

我們的設定適用於elliptic curve BN254(也稱為BN256、BN128和alt_bn128),它支援以太坊上的以下預編譯合約:

  • ECADD允許新增兩個elliptic curve點,即從[]1和[]1計算[+]1:gas成本150
  • ECMULT允許elliptic curve點與scalar相乘,即從a和[]1計算出[a*]1:gas成本為6,000。
  • ECPAIR允許對elliptic curve對的乘積進行檢查,即計算e([1]1, [1]2)* … *e([1]1, [1]2) = 1 這相當於檢查1*1+ … + k*k = 0 : gas成本34000 * k + 45000

如果以太坊啟用BLS12_381(如EIP-2537中的建議),我們的設定合約也可以很容易地適用於這個其他curve。

讓我們估計一下更新設定的gas成本([]1, [2]1, [3]1, …, [n]1; []2):

  1. 核實證明的gas成本。每個參與者更新設定,並提交一個有上述三個組成部分的證明。證明的第1和第3部分—“對離散日誌的瞭解 ”和 “更新是不遞減的”,驗證起來非常便宜。挑戰在於如何在鏈上驗證第2部分,即“pp1的良好形式”。它需要一個大的多標度乘法(MSM)和兩個配對。
  2. e(0[1]1 + 1[]1 + 2[2]1 + … + n-1[n-2]1, []2) = e([]1 + 1[2]1 + … +n-1[n-1]1, [1]2)。

其中0,…,n-1是偽隨機抽樣的scalars。就預編譯的智慧合約而言,需要:

(2n-4) x ECADD + (2n-4) x ECMULT + ECPAIRk=2 = (2n-4) x 6,150 + 113,000 gas。

儲存資料的gas成本。每個參與者還將更新的資料儲存在鏈上,作為calldata(每位元組68個gas),佔n*64*68個gas。(熟悉elliptic curve密碼學的人可以注意到:儲存壓縮的點會使解壓縮在整個成本中占主導地位,正如我們對n=256的測量一樣)。

這給我們帶來了以下的gas成本估算表,應該為未來的優化提供參考:

我們正在探索降低gas成本的解決方案,敬請關注。

開源庫:evm-powers-of-tau

我們已經在

github.com/a16z/evm-power-of-tau上公開了我們基於EVM的儀式 repo。用我們的策略舉行儀式很簡單,也很透明:

  1. 部署儲存和驗證合約(合約/KZG.sol)。
  2. 貢獻者從之前的交易calldata中讀取儀式引數
  3. 貢獻者在本地生成一個祕密,計算出更新的引數
  4. 貢獻者生成他們的證明:pi1,pi2
  5. 貢獻者通過KZG.potUpdate()將更新的引數提交給公共區塊鏈上部署的智慧合約。
  6. 智慧合約將驗證更新的有效性,如果提交的引數不符合要求,則會恢復原狀。
  7. 多個貢獻者可以永久地執行第2-5步,每個人都會增加儀式的安全性
  8. 每當開發人員對提交的數量和質量有信心時,他們可以查詢區塊鏈上的當前引數,並使用這些值作為他們的加密金鑰

我們的 repo 使用 arkworks-rs 來計算第二和第三步(rust 計算可以在 src/pot_update.rs 中找到),但使用者可能想寫自己的。整個更新提交的端到端流程可以在test/integration_test.rs的整合測試中找到。

請注意,我們選擇使用calldata在鏈上儲存更新的power-of-tau引數,因為它比儲存要便宜好幾個數量級。在src/query.rs中可以找到一個基於ethers-rs的對該資料的查詢。

最後,證明和詳細的方程式可以在techreport/main.pdf的技術報告中找到。

未來的工作

在這個可信的設定儀式可以在生產中使用之前,我們建議首先對數學證明和樣本實現進行全面審計。

在實施過程中,更新儀式的交易成本隨著設定規模的增加而線性增長。對於大多數應用(SNARKs,DAS),我們希望設定n>=256,目前每次更新的成本為73美元。

我們也許能夠通過有效更新計算的STARK證明和對更新值的向量承諾來實現亞線性驗證成本增長。這種構造也將消除對Ethereum L1 BN254預編譯的依賴,使其能夠使用更受歡迎的BLS12-381 curve。

所有的儀式策略都是有取捨的。我們認為這種結構是堅實的,並且有很大的可驗證的抗審查特性。但是,我們還是要提醒大家不要使用這種方法,直到有更多的工作來驗證我們方法的合理性。

鳴謝

  • Dan Boneh–在這項工作的早期階段提供了有用的反饋。
  • Joe Bonneau – 澄清了技術報告早期版本中的論述。
  • William Borgeaud – 感謝在TurboPlonk/Plonky2中對BLS的討論。
  • Mary Maller – 對該方法的一般機械性的思考

編輯:Robert Hackett @rhhackett

編輯於 2022-09-08 05:22