原文標題:《Part I Aleo 技術介紹(一)》
原文來源:AleoSwap powered by ZenoX Labs
區塊鏈是一個分散式系統,區塊鏈資料公開透明,任何人都可以查看,這也暴露了用戶的隱私信息。如何保護資料的隱私成為區塊鏈一個亟待解決的問題。 Zerocash 是基於 Bitcoin 的 UTXO 模型的隱私交易協議,則 Zether 是基於 Ethereum 的帳戶模型的隱私交易協議。這些協議使用零知識證明技術一定程度上保護交易資料的隱私性,實現交易的發送方接收方和交易金額的完全隱藏。但是這些協定無法做法智能合約/函數層面的隱私性。
Aleo 是一個面向隱私的區塊鏈平台項目,致力於提供高度隱私保護的智慧合約和去中心化應用程式。透過使用零知識證明等密碼學技術,允許使用者在不洩露原始資料的情況下驗證隱私資料的有效性和合理性。即實現鏈下零知識證明的生成,鏈上實現零知識證明的高效驗證(交易的簡潔性)。
Aleo 主要包含以下幾個大的模組:
· 智能合約:與以太坊等平台類似,Aleo 支援智能合約的開發與執行。不同之處在於,Aleo 的智能合約著重於提供更高水準的隱私。
· leo 語言:Aleo 提供了一種名為 leo 的程式語言,專為隱私保護而設計。 Aleo 語言使開發人員能夠創建支援隱私的智慧合約,並在保護用戶資料的同時實現資料完整性。
· Aleo instructions:Aleo 提供了一套指令,為開發人員提供了一個易於使用的環境,使其能夠編寫支援隱私和完整性的程序。
與Ethereum 帳戶類似,Aleo 的帳戶也是用於管理使用者的私鑰,透過私鑰可以衍生出公鑰/地址,顧名思義公鑰/地址是可以公開的。任何用戶可以透過公鑰與其他人進行交易。而透過私鑰,用戶可以存取和控制自己的資金。因此私鑰的安全性尤其重要,一旦遺失,則喪失帳戶資金的所有控制權。
帳戶的作用是進行簽章和加密等處理。 Aleo 的帳戶主要包含 privateKey, viewKey, address, 如下圖展示了帳戶金鑰之間的關係。
Aleo privateKey 代表了使用者唯一的身份,在Aleo 中主要作用是
· 派生公鑰
· 參與交易簽名,即授權一筆附有零知識證明的交易的執行
· 參與某些加密演算法運算。
privateKey 主要包含3 個部分:
p >2.2 computeKey
由私鑰計算而來,其中G 為橢圓曲線群的生成元,此處不做詳細介紹。 computeKey 作為簽名結構體的一部分,它可以代表使用者對交易進行簽名的產生和驗證。詳見2.6.
Aleo 帳戶的viewKey 是由PrivateKey 計算出來的,主要作用對Aleo 鏈上交易輸入/輸出資料進行加密/解密處理。具體可參考 Record 模型中介紹。

在Aleo中地址是使用者唯一公開的身份識別。它用於接收/發送官方的 token(Aleo credits),可以與其它用戶或應用盡心互動。網址的計算方式有以下幾種:
< /p>

一般簽章演算法主要包含4 個演算法,

< img src="https://image.blockbeats.cn/upload/2024-01-18/290415ced4f1677a577a900943e49965ce81f4f0.png?x-oss-process=image/quality,cqp.
一筆交易中會有很多的inputs 和outputs,而inputs 和outputs 可以是record 類型,Record 預設是private 的即是加密的。 Aleo record 類似於 UTXO,如果 record 作為函數的輸入,那麼表示該 record 將被消費 consumed,不能再被使用。即它的唯一識別序號 sn 被公佈。在多數情況下,一個函數的輸出會創造出新的 record。
Record 是Aleo 中非常重要的資料結構,它用於編碼使用者的資產和狀態資料。它會包含如下3 個欄位:
· owner:該record 的擁有者
· data:program 的data
· nonce:唯一標識一個record,確保每個Record 的都是唯一的,因此nonce 值都是唯一的 p>
範例如下圖

在Aleo 中,透過狀態函數來消費records 和創建records,而一筆交易中包含了多個狀態轉移函數。預設情況下,record 是 private 的,即 record 中的所有欄位都是經過加密的。在介紹 Record 的加密演算法前,我們需要先了解金鑰共享協定。
如下是用戶A 為用戶B 產生僅用戶B 可以解密的資訊。具體做法是:
· 用戶A 取得訊息接收者B 的位址(公開的)
· 使用者B 可以計算出一個共享金鑰K_B< /p>
· 用戶A 也可以計算出一個共享密鑰K_A
透過計算發現K_A 與K_B 相等。即使用者 A 與使用者 B 在互動過程中並沒有洩漏任何隱私訊息,但是能夠得到一個共享的會話金鑰。這對於 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 原始明文資料。
交易簽章的時候,會將所有的inputs 和outpus依照constant、public、private、Record 等類型進行處理,作為簽署的訊息,其中Record 類型的input/output 會進行commit 處理。即產生 commit, gamma, serialNumber, tag。

該部分簡要介紹Aleo 的credits.aleo 中幾種交易類型。在介紹交易之前我們先簡單介紹一些 Aleo 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
< /p>
· inter-process communication: program 函式可以互動。
近年來零知識證明被廣泛應用到區塊鏈中,它成為隱私性和擴展性的重要工具。在可驗證的外包計算、匿名證書、範圍證明、隱私密碼學貨幣以及 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 實現了一層的遞歸零知識證明來達到詳細協議後續再展開。
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_publicvate_toprivate_publicvated轉帳功能。如user1 消費自己的兩個record3 和record4,為公開的user3 進行轉賬,由於user3 是公開的,因此該交易中user3 的狀態將使用mapping account 來記錄

>· transfer_public_to_private:實作公開的傳送者到隱私接收者轉帳功能。
本文來自投稿,不代表BlockBeats 觀點。
歡迎加入律動 BlockBeats 官方社群:
Telegram 訂閱群:https://t.me/theblockbeats
Telegram 交流群:https://t.me/BlockBeats_App
Twitter 官方帳號:https://twitter.com/BlockBeatsAsia