原文標題:《Programmable Privacy and Onchain Compliance using Homomorphic Encryption》
原文作者:Rand Hindi
原文編譯:Luccy,BlockBeats
編按:< /blockquote>9 月19 日, a16z 的加密團隊在Nakamoto Challenge 中提出了七個問題,分別是:原子可組合性和共享定序的局限性、DePIN 驗證、JOLT + Lasso 問題、合規可編程隱私、最佳LVR 緩解、設計MEV 交易供應鏈以及利用區塊鏈進行Deepfake 保護。對於合規可程式隱私問題,開源加密工具Zama 提出了一種解決方案,完全同態加密(FHE) 或說fhEVM 機密智能合約協議。 fhEVM 以其在加密狀態上進行計算的能力,為開發者提供了在鏈上建立合規可編程隱私應用的新途徑。去中心化識別(DID)作為數位身分的頒發者,儲存在加密狀態中,實現了使用者身分的隱私和可程式設計合規的雙贏。透過監管合約定義個體之間的代幣轉移規則,實現了對轉帳條件的動態監管。此設計在智慧合約層級執行監管規定,無需硬編碼,使用者透過幾行 Solidity 代碼即可確保應用程式的合規性。Zama 執行長 Rand Hindi 在文章中展示如何使用 fhEVM 建立一個合規的 ERC20 代幣,透過鏈上 DIDs 進行身份抽象化。他指出,相對於其他隱私解決方案,fhEVM 的所有數據和計算均發生在鏈上,確保了可組合性和數據可用性。
幾個月前,a16z的加密團隊發布了Nakamoto Challenge(中本挑戰),這是在區塊鏈中解決的最重要問題清單。其中,第四個問題特別引起了我們的注意:「合規可編程隱私」,因為我們一直在積極思考這個問題,今天,我們提出了使用同態加密和fhEVM 機密智能合約協議的第一個解決方案。
fhEVM 是一個常規的 EVM,其中包含一些 precompiles,可以使用我們的 TFHE-rs 同態加密庫在加密狀態上進行計算。從開發者的角度來看,沒有涉及密碼學,他們只需使用我們提供的加密資料類型(euint32,ebool 等)編寫 Solidity 程式碼。 fhEVM 相對於其他隱私解決方案的一個重大優勢是,所有的資料和計算都發生在鏈上。這意味著您可以獲得與常規明文合約相同的可組合性和數據可用性。
這個特性對於建立可程式隱私至關重要,因為所有的存取控制邏輯都可以在合約本身中定義。在協議中沒有需要硬編碼的內容,用戶無需在鏈外執行任何操作以確保合規性。應用程式可以直接強制執行合規性,只需幾行 Solidity 程式碼。
在這篇文章中,我們將展示如何使用鏈上 DIDs 建立一個合規的 ERC20 代幣。本教學的原始程式碼可以在 fhEVM 儲存庫的 examples 資料夾中找到。
透過鏈上、保密的DID 進行身份抽象
去中心化識別(DID )是由政府、註冊機構、公司或使用者本身等實體所頒發的獨特數位身分。這個 DID 可以與證明使用者擁有 DID 的加密金鑰綁定,例如 EVM 錢包。但它還可以儲存一系列屬性,例如使用者的年齡、國籍、社會安全號等。這些屬性反過來可以用來證明你滿足某些條件(稱為「證明」),例如年滿 18 歲或不是納尼亞公民。由政府、註冊機構、公司或使用者本身等實體頒發的,例如政府、註冊機構、公司或使用者本身。
大多數 DID 實際上是在用戶端實現的,它們利用零知識證明產生證明。雖然在許多情況下這是可行的,但當涉及多個用戶參與交易、需要對 DID 應用複雜規則,或者需要所有人遵循一套通用規則時,情況就會變得複雜。這本質上與邊緣應用與雲端應用的權衡相似。
然而,擁有一個集中式的 DID 註冊表可以解決這些問題,因為您可以簡單地要求註冊表檢查每個人是否符合規定。這也將使得法規追蹤變得更簡便,因為您只需在一個地方進行實施。區塊鏈將是這個理想的基礎設施,因為它將允許 DID 和需要遵循規定的應用之間的可組合性,以及規定之間的可組合性。這本質上與邊緣應用與雲端應用的權衡相似。
問題:每個人都會看到所有人的身分!
幸運的是,我們有一個解決方案:同態加密,更具體地說是 fhEVM!由於在加密狀態上具有可組合性的能力,我們可以直接在鏈上以加密形式託管用戶的 DID,並透過簡單的合約呼叫讓合規的應用程式驗證屬性。透過智慧合約管理身分的能力,我們稱之為「身分抽象」,類似於透過具有帳戶抽象的智慧合約管理資金的方式。
本教學分為3 個部分:
身分抽象是透過一個註冊合約實現的,該合約負責管理身分和證明。在這裡,我們假設 DIDs 是官方政府身分證。註冊表本身由中央機構(例如 AFNIC)管理,該機構可以建立註冊機構(例如 KYC 公司,如 Onfido,Jumio 等),然後註冊機構可以建立使用者 DIDs。然後,用戶透過其註冊機構來管理和更新其 DID。
監管在一個合約中定義,該合約對基於用戶DID 中包含的資訊的個體之間的代幣轉移規則進行編碼。它基本上在合約層級而不是用戶層級執行監管。
合規的機密轉帳是在一個合規的ERC20 合約中實現的,該合約使用法規合約來強制執行代幣轉移的合規性,而不對ERC20 API 本身進行任何更改。在這個例子中,我們使用了一個機密的 ERC20 合約,其中餘額和金額是隱藏的,但對於一個常規的、明文的 ERC20 代幣同樣有效。
身分註冊合約
身分註冊合約是一個由註冊機構發放使用者DID 的註冊表,其中包含一組加密標識,如國籍、年齡、社會安全號碼等。這些標識以加密的 32 位元值(euint32)的形式儲存。
該合約也處理權限,包括:
允許合約擁有者(例如AFNIC)新增、刪除或更新註冊機構。
允許註冊機構新增、刪除或更新他們建立的使用者 DID。
允許使用者授予智慧合約存取其 DID 特定屬性的權限。這裡需要注意,用戶有責任不向惡意合約授予存取權限,就像他們有責任不讓惡意合約花費他們的代幣一樣。
第一步,實作建立和管理DID 的邏輯:
註:圖片為部分截圖,可在原文查看完整程式碼
下一步是實作標識和存取控制的邏輯。
識別碼簡單來說是一個字串(例如「出生日期」)和一個加密的 32 位元值。它只能由註冊機構創建或更新。使用者不能建立自己的標識符,因為我們希望它們經過註冊機構的認證。
然而,由於識別碼是加密的,使用者需要授予合約存取特定值的權限,我們將透過一個簡單的存取控制機制來處理,類似於您可以允許合約花費您的ERC20 代幣的簡單存取控制機制。
註:圖片為部分截圖,可在原文查看完整程式碼
現在我們可以透過新增必要的取得器,加入一些條件和錯誤處理,來完成我們的身分註冊合約。
註:圖片為部分截圖,原文可查看完整程式碼
監理合約
下一步是建立監理合約。
在實施兩個個體之間的轉帳規則時,重要的是要認識到這些規則可能會隨時間演變。有一個單一的智能合約來定義給定上下文(如資金轉移)的所有監管規定,這意味著 ERC20 合約無需自己追蹤監管規定。政府只需更新此合約,它將自動傳播到實施了它的所有代幣。
在核心部分,監理合約只是一組與加密身分屬性相符的條件。為了防止濫用,用戶不會直接授予監管合約存取權限,而是授予 ERC20 代幣合約存取權限,然後由 ERC20 代幣合約執行對監管合約的委託調用。這種方法確保只有用戶信任的 ERC20 合約才能存取他們的資訊。請記住,在寄件者和接收者在它們之間發生轉帳之前,它們都必須已經授予 ERC20 合約許可。
在這個例子中,我們將實施一些基本規則:
國內的轉帳是無限制的,但向外國的轉帳上限為1 萬代幣。
黑名單用戶無法轉帳或接收代幣。
用戶不能將代幣轉移到黑名單國家。
與其使交易失敗,可能會洩露敏感訊息,如果其中一個條件不滿足,我們將簡單地將轉帳金額設為 0。這使用了一個稱為cmux 的同態三元運算子:value = TFHE.cmux(encryptedCondition, valueIfTrue, valueIfFalse);
註:圖片為部分截圖,可在原文查看完整程式碼< h1>合規的隱私ERC20 合約
現在我們有了身分註冊和監管合約,我們終於可以創建符合要求的、保護隱私的代幣合約了。這個合約將被稱為 CompliantERC20,具有以下關鍵特點:
用戶餘額和轉帳金額都是加密的。
合規性透過呼叫監管合約來執行轉帳。
可以授予白名單地址(例如監管機構)對某些餘額的可見性。
註:圖片為部分截圖,可在原文查看完整程式碼
可簡單的呼叫監管合約。這表示使用者在發起任何轉帳之前必須提供對 ERC20 合約的存取權;否則,轉帳將會回滾。
最後,我們現在可以建立我們的ERC20 合約:
類似於用戶授予DeFi 協議花費他們的代幣的權限,他們需要授予合約存取監管合約所需的識別的權限。這是透過呼叫 Identity.grantAccess(contractAddress, identifiers) 來實現的,可以透過呼叫 ERC20.identifiers() 視圖方法來檢索。此清單直接來自 ERC20Rules 合約,以允許屬性的更新。
合規和隱私可以共存
如果有合適的工具,建立合規並不難。雖然我們最初建立 fhEVM 以在區塊鏈中實現隱私,但我們很快就意識到這項技術可以用於身分管理,從而實現可程式設計合規。
此設計還遠非完美,但我們相信它可以繼續改進,並作為一個真實的用例推出,使合規不再等同於監管。
「原文連結」
歡迎加入律動 BlockBeats 官方社群:
Telegram 訂閱群:https://t.me/theblockbeats
Telegram 交流群:https://t.me/BlockBeats_App
Twitter 官方帳號:https://twitter.com/BlockBeatsAsia