
見證人加密:樂趣與收益並存
這篇文章探討了將見證人加密(WE)與零知識證明(ZKP)結合的潛力,藉此實現隱私鏈上永續合約和投票系統。我討論了一種克服 WE 靜態輸出限制的技巧,這可能為新型態的隱私智能合約開啟大門。
感謝 Jay 和 Zac 對此進行的有趣討論。
簡介
我們在 ZKP(零知識證明)上獲得了很多樂趣。人們認為我們也會在 FHE(全同態加密)上獲得很多樂趣。對此我持樂觀態度。但我同時認為,將 ZKP + WE 結合起來做一些事情也會很有趣。
WE 是指證人加密(Witness Encryption)。它就像一個 ZKP,由你定義一組約束或一個程式。但與 ZKP 不同的是,它不是產生一個證明,而是向你揭示一個秘密。
過去我曾認為 WE 很無聊,因為你無法輸出動態的內容。但現在我不這麼想了,我認為透過一個有趣的技巧(hack),你可以輸出動態內容。但在那之前,我們必須先談談 ZKperp。
ZKperp
永續合約(Perps)曾風靡一時。但我的一位交易員朋友說,她不想在那上面交易,因為他們會知道她的倉位,然後她會被「割肉」。我指的是鏈上永續合約。
我的另一位朋友說,我們無法用 ZKP 來實現它,因為如果我們要進行罰沒(slash),私有狀態就會洩漏。
這就是第一個主要技巧:
你可以加密任何你想建立的槓桿倉位,並將抵押品全部放入 ZKP 中。然後你設置一個 WE 盒子,如果你處於抵押不足的狀態,WE 就可以被開啟,你的秘密就會被揭示,然後你就會被罰沒。
</第一個技巧>
那麼我們的 WE 程式在檢查什麼呢?
- 在最近的一個以太坊區塊中,價格 x = y
- 該區塊已由共識完成最終確認(finalized)
- 在這種情況下,你的倉位處於抵押不足狀態
如果所有這些條件都成立,你就應該被罰沒。而你確實會被罰沒,因為你的秘密就是你的倉位,以及執行罰沒所需的某種輔助資訊。
這可行嗎?
這看起來是個有趣的想法。在 WE 中驗證 ZKP(這基本上就是你在這裡需要做的)有多實際?並非昂貴到無法想像:https://eprint.iacr.org/2020/889.pdf https://eprint.iacr.org/2026/175.pdf
重點摘要:
「我們得到了 338 TB 的大小」
「總體而言,我們得出結論,這種證人加密方法雖然成本非常高,但在現實中是可以實現的。」
「由於我們主要的證人加密協議擴展性為 O(N^3)」
「子集合加總問題(sub-set sum)」
投票
這看起來是個有趣的技巧。你可以做一個 ZKP 永續合約,這是一件很有用的事情。但這只是功能的極小部分。啊,但我認為不僅如此。讓我以投票為例。你可能會說這行不通,對吧,因為讓我們套用舊的程式邏輯:
- 驗證以太坊狀態
- 驗證所有投票都已上鏈
- 將它們加總
啊,我們在第 3 點失敗了,我們無法將它們加總,因為它們要麼是明文(那誰在乎),要麼是加密的,而 WE 無法對其進行加總。
好吧,那我們就在 WE 程式中加入一些東西,比如:
- 驗證以太坊狀態
- 獲取所有上鏈的投票
- 對於每一張選票,解密它。將它們加總
- 如果 贊成 > 反對,則揭示秘密
在這種情況下,秘密 = true。所以它並不是真正的秘密,只是一個 真/假 標誌。但如果你希望它是可驗證的(例如由智能合約驗證),你可以將其替換為簽名。
但這可能行不通。因為 WE 表示,在你有滿足條件的證人之前,它在計算上是安全的。但如果你有一個滿足條件的證人,你可能就能回推並了解輸出它的程式。所以如果裡面藏有秘密,你可能會洩漏該秘密。
- 驗證以太坊狀態
- 獲取所有上鏈的投票
- 同態地加總所有選票
- 同態加總後的選票總和大於 x
- 解密並檢查 x > 法定人數,如果為真則返回 1
</第二個技巧>
敏銳的讀者會注意到,這與第一個方案面臨完全相同的問題。如果我獲得一次求值結果,並且能夠獲取程式中的秘密,那麼我就能發現內部發生了什麼。在 ZK perp 的例子中,這沒關係,因為我們只揭示輸出,之後就沒有其他東西可以挖掘了。
一次性程式
所以,這加上區塊鏈為你提供了一種可以利用的「一次性程式」。最大的限制是我們無法確定在單次調用後秘密是否仍能隱藏。原始論文說不行,但 AADP 論文說你可以進行幾次求值而仍不洩漏內部情況。這似乎是一個值得嘗試證明的有趣課題。它將解鎖很多東西。
對私有狀態的一般性檢查
假設你正試圖建立一個私有智能合約生態系統。你可能會遇到一個限制:如果某物是私有的,我就無法對其進行檢查。這就是為什麼 ZK perp 很難實現。現在你可以透過這種方式進行檢查:如果條件為真,則證人加密會返回某個秘密,然後根據此結果執行相應操作。
這可以應用於一類「如果為 x 則執行 y」的智能合約。
它能擊敗我的老對手「你無法僅用 ZKP 建立私有 Uniswap」嗎?為什麼你無法用 ZKP 建立私有 Uniswap
問題在於,每次有人存款時,我們都需要更新資金池的總餘額。我們可以使用「僅解密某個秘密」的技巧,但它無法讓我們更新資金池中的餘額。這與投票問題以及我第二個技巧失敗的原因相同。
結論
我們擁有了類似於使用證人加密的私有 if / else 迴圈。我們可以用它來製作 ZK perp,這看起來既有趣又有用。我們應該嘗試證明各種 WE 方案在給定滿足條件的證人時,不會洩漏關於電路的資訊。
1 則貼文 - 1 位參與者
[閱讀完整主題](https://ethresear.ch/t/we-for-fun-and-profit/24700)
相關文章
其他收藏 · 0