技術介紹(一):Aleo是如何保護數據隱私的?
BlockBeats 律動財經 2024-01-20 21:00
1. Aleo 項目概述
區塊鏈是一個分布式系統,區塊鏈數據公開透明,任何人都可以查看,這也暴露了用戶的隱私資訊。如何保護數據的隱私成為區塊鏈一個亟待解決的問題。Zerocash 是基於 Bitcoin 的 UTXO 模型的隱私交易協議,則 Zether 是基於 Ethereum 的帳戶模型的隱私交易協議。這些協議使用零知識證明技術一定程度上保護交易數據的隱私性,實現交易的發送方接收方和交易金額的完全隱藏。但是這些協議無法做法智能合約/函數層面的隱私性。
Aleo 是一個面向隱私的區塊鏈平台項目,致力於提供高度隱私保護的智能合約和去中心化應用程序。通過使用零知識證明等密碼學技術,允許用戶在不泄露原始數據的情況下驗證隱私數據的有效性和合理性。即實現鏈下零知識證明的生成,鏈上實現零知識證明的高效驗證(交易的簡潔性)。
Aleo 主要包含如下幾個大的模塊:
· 智能合約:與以太坊等平台類似,Aleo 支持智能合約的開發和執行。不同之處在於,Aleo 的智能合約着重於提供更高水平的隱私。
· leo 語言:Aleo 提供了一種名為 leo 的編程語言,專為隱私保護而設計。Aleo 語言使開發人員能夠創建支持隱私的智能合約,並在保護用戶數據的同時實現數據完整性。
· Aleo instructions:Aleo 提供了一套指令,為開發人員提供了一個易於使用的環境,使其能夠編寫支持隱私和完整性的程序。
2. account 模型
與 Ethereum 帳戶類似,Aleo 的帳戶也是用於管理用戶的私鑰,通過私鑰可以派生出公鑰/地址,顧名思義公鑰/地址是可以公開的。任何用戶可以通過公鑰與其他人進行交易。而通過私鑰,用戶可以訪問和控制自己的資金。因此私鑰的安全性尤為重要,一旦丟失,則喪失帳戶資金的所有控制權。
帳戶的作用是進行簽名和加密等處理。Aleo 的帳戶主要包含 privateKey, viewKey, address, 如下圖展示了帳戶密鑰之間的關係。
2.1 privateKey
Aleo privateKey 代表了用戶唯一的身份,在 Aleo 中主要作用是
· 派生公鑰
· 參與交易簽名,即授權一筆附有零知識證明的交易的執行
· 參與某些加密算法運算。
privateKey 主要包含 3 部分:
2.2 computeKey
由私鑰計算而來,其中 G 為橢圓曲線群的生成元,此處不做詳細介紹。computeKey 作為簽名結構體的一部分,它可以代表用戶對交易進行簽名的生成和驗證。詳見 2.6.
2.3 viewKey
Aleo 帳戶的 viewKey 是由 PrivateKey 計算出來的,主要作用對 Aleo 鏈上交易輸入/輸出數據進行加密/解密處理。具體可參考 Record 模型仲介紹。
2.4 地址 address
在 Aleo 中地址是用戶唯一公開的身份標識。它用於接收/發送官方的 token(Aleo credits),可以與其它用戶或者應用盡心交互。地址的計算方式有如下幾種:
2.5 graphKey
2.6簽名算法
用戶之間進行交互,都需要確認發送方的身份,簽名的作用是確認消息發送方的身份和消息內容的完整性。因此 Aleo 中引入了 Schnorr 簽名算法,用於對交易進行簽名。
一般簽名算法主要包含 4 個算法,
2.7 私鑰的加密儲存
類比於助記詞,私鑰對用戶至關重要,它對帳戶擁有絕對的控制權,一旦丟失將無法恢復。根據 Aleo 私鑰派生算法,我們發現 seed 非常重要,privateKey 的核心在於這個隨機 seed,一旦擁有 seed,我們就完全能夠生成帳戶的$$sk_{sig},r_{sig}$$。
通常在創建帳戶時,生成的私鑰儲存在本地,從安全性考慮,儲存私鑰時需要對私鑰進行加密處理。具體算法如圖所示。核心思想是引入隨機性隱藏/blind seed,然後引入 PRF 確定性生成多個隨機數,為每個明文字段/field 上的一個元素進一步進行隨機化處理/加密處理。
3. Record 模型
一筆交易中會有很多的 inputs 和 outputs,而 inputs 和 outputs 可以是 record 類型,Record 默認是 private 的即是加密的。Aleo record 類似於 UTXO,如果 record 作為一個函數的輸入,那麼表示該 record 將被消費 consumed,不能再被使用。即它的唯一標識序列號 sn 被公布。在多數情況下,一個函數的輸出會創建出新的 record。
3.1 Record 明文字段
Record 是 Aleo 中非常重要的數據結構,它用於編碼用戶的資產和狀態數據。它會包含如下 3 個字段:
· owner:該 record 的所有者
· data:program 的 data
· nonce:唯一標識一個 record,確保每個 Record 的都是唯一的,因此 nonce 值都是唯一的
示例如下圖所示
3.2 Record 密文字段
在 Aleo 中,通過狀態函數來消費 records 和創建 records,而一筆交易中包含了多個狀態轉移函數。默認情況下,record 是 private 的,即 record 中的所有字段都是經過加密的。要介紹 Record 的加密算法前,我們需要先了解密鑰共享協議。
3.2.1 密鑰共享協議
如下是用戶 A 為用戶 B 生成僅用戶 B 可以解密的資訊。具體做法是:
· 用戶 A 獲取消息接收方 B 的地址(公開的)
· 用戶 A 生成臨時私鑰和公鑰,並將公鑰共享給用戶 B
· 用戶 B 可以計算出一個共享密鑰 K_B
· 用戶 A 也可以計算出一個共享密鑰 K_A
通過計算髮現 K_A 與 K_B 相等。即用戶 A 與用戶 B 在交互過程中並沒有泄漏任何隱私資訊,但是能夠得到一個共享的會話密鑰。這對於 Record 加密處理非常重要。
3.2.2 Record 加密
假設用戶 A 要給用戶 B 創建一個加密的 Record, 通過上述密鑰共享協議思想,
· 用戶 A 為用戶 B 生成一個臨時公鑰,該公鑰作為 nonce 進行公布,
· 用戶 A 生成共享密鑰 K,並用該共享密鑰 K 作為偽隨機函數 PRF 的輸入,生成多個隨機值
· 使用 PRF 生成的隨機值為 Record 中 private 字段進行隨機化/加密。
當該 Record 作為交易的 output 簽名上鏈後,由於它是密文狀態的,除了用戶 B 即該 Record 的 ownerB 可以解密查看數據,其他用戶均不可見。
· 用戶 B 使用自己的 viewKeyB 和 Record 中的 nonce 值,計算共享密鑰 K
· 使用 PRF(K) 生成多個隨機值,然後使用隨機值解密獲取 Record 原始明文數據。
3.3 Record 的承諾
交易簽名的時候,會將所有的 inputs 和 outpus 按照 constant、public、private、Record 等類型進行處理,作為簽名的消息,其中 Record 類型的 input/output 會進行 commit 處理。即生成 commit, gamma, serialNumber, tag。
4. Aleo 的交易
該部分簡要介紹 Aleo 的 credits.aleo 中幾種交易類型。在介紹交易之前我們先簡要介紹一些 Aleo Program。
4.1 Program
在 Aleo 中 zero-knowledge 的 program 應用可以通過如下兩種語言進行編寫
· Leo: 類似於 Ethereum 的 solidity,Aleo 引入高級語言 Leo 開發各種隱私應用,然後通過編譯器將 program 編譯成 Aleo.VM 能識的指令 (Aleo instructions/bytecode),
· Aleo instructions: Aleo 指令是一個靜態類型的語言,用於編寫隱私應用程序。通過零知識證明技術,Aleo 能夠實現鏈下計算,鏈上驗證計算的一致性。
program 的 functionality,
· extensibility:用戶可以自由定義自己的 program
· isolation:惡意的 program 不會影響到誠實的 program
· inter-process communication: program 函數可以交互。
4.2 Aleo 的 ZK 協議概述
近幾年零知識證明被廣泛應用到區塊鏈中,它成為隱私性和擴展性的重要工具。在可驗證的外包計算、匿名證書、範圍證明、隱私密碼學貨幣以及 L2 上具有廣泛的應用。在實際應用中客戶端交易頻繁,因此要部署高效實用的零知識證明協議,需要該協議的證明足夠小,驗證足夠高效(small proof size and fast verification)。
Aleo 通過使用零知識證明技術實現隱私功能,在實際中主要使用的是 Marlin 協議,它是 zk-SNARKs 協議的一個具體實例。根據是否有 trusted-setup,我們將 zk-SNARKs 的構造簡要分為如下幾類:
· trusted-setup: 代表為 Groth16,使用的 KZG 多項式承諾方案,該方案引入了一個可信的 CRS,針對不同的應用場景,需要重新生成。因此該協議該協議更適用於單一不變的應用場景。如 Zcash 使用該技術實現基於 UTXO 模型的隱私交易證明。
· updatable SRS:代表協議為 Plonk,目前應用最為廣泛的協議,該協議本質上也是需要可信的公共參考串設置,只不過全局的公共參數只需要生成一次,針對不同的應用場景,公共參考串可以進行更新,因此能夠適用於各種各樣的應用場景。
· no trusted setup:典型協議代表為 bulletproof,它無需可信的參數設置,但是它的證明生成和驗證相對上述兩種更慢一些。
Aleo 使用的 Marlin 協議,它與 Plonk 的區別在於它的 marlin 的算術化語言是 R1CS,plonk 是 plonkish (custom gate + lookup)。此外 Aleo 實現了一層的遞歸零知識證明來達到詳細協議後續再展開。
4.3 Aleo credit 交易
Aleo 部署了網路原生 token 合約 credit.aleo 的合約。該合約實現了隱私轉賬功能。合約中主要定義了兩個數據結構,record credits 和 mapping account。其中 record credits 用於記錄 private 狀態,而 mapping acocunt 用於記錄 public 的狀態。合約能夠支持如下幾種交易:
· transfer_private:實現發送者和接收者完全隱私的轉賬交易。即通過隱私的 Record 進行相互轉賬。如 user1 消費自己的兩個 record1 和 record2(類似於 UTXO),為 user2 生成一個新的 record3。而 Record 的加密方式請參考上述第 3 部分。
· transfer_private_to_public:實現隱私發送者給公開接收者轉賬功能。如 user1 消費自己的兩個 record3 和 record4,為公開的 user3 進行轉賬,由於 user3 是公開的,因此該交易中 user3 的狀態將使用 mapping account 來記錄
· transfer_public:完全公開透明的交易
· transfer_public_to_private:實現公開的發送者到隱私接收者轉賬功能。
暢行幣圈交易全攻略,專家駐群實戰交流
▌立即加入鉅亨買幣實戰交流 LINE 社群(點此入群)
不管是新手發問,還是老手交流,只要你想參與虛擬貨幣現貨交易、合約跟單、合約網格、量化交易、理財產品的投資,都歡迎入群討論學習!
- 從零開始學合約系列講座熱烈報名中
- 掌握全球財經資訊點我下載APP
文章標籤
上一篇
下一篇