Aleo 是一個面向隱私的區塊鏈項目,致力於提供高度隱私保護的智慧合約和去中心化應用程式。它使用了零知識證明技術來保護交易資料的隱私性。 Aleo 包含智慧合約、leo 語言和使用說明等模組,同時也有針對帳戶、私鑰、視圖鍵和地址的相關說明。關於記錄模型和交易方面,Aleo 採用了密文字段和承諾的方式來處理。此外,Aleo 還使用了零知識證明技術來實現隱私功能,並配置了網路合約令牌合約credit.aleo。
原文標題:《第一部分Aleo 技術介紹(一)》
來源:AleoSwap 由ZenoX Labs 提供支持
1.Aleo 專案概述
區塊鏈是一個重置系統,區塊鏈資料公開透明,任何人都可以查看,這也暴露了用戶的隱私資訊。如何保護資料的隱私成為區塊鏈一個前期待解決的問題。 Zerocash 是基於比特幣的UTXO模型的隱私交易協議,則Zether是基於以太坊的帳戶模型的隱私交易協議。這些協議使用零知識證明技術程式設計程式保護交易資料的隱私性,實現交易的發送方接收方和交易金額的完全隱藏。但是這些協定無法實現智能合約/函數層面的隱私性。
Aleo是一個面向隱私的區塊鏈平台項目,致力於提供高度隱私保護的智慧合約和去中心化應用程式。透過使用零知識證明等密碼學技術,讓使用者在不洩露原始資料的情況下驗證隱私資料的有效性和合理性。即實現鏈下零知識證明的生成,鏈上實現零知識證明的驗證(交易的簡潔性)。
Aleo主要包含以下幾個大的模組:
· 智能合約:與以太坊等平台類似,Aleo 支援智慧合約的開發與執行。在不同的地方,Aleo 的智能合約行為在於提供更高程度的隱私。
· leo 語言:Aleo 提供了一種名為leo 的程式語言,專為隱私保護而設計。 Aleo 語言使開發人員能夠創建支援隱私的智慧合約,並在保護用戶資料的同時實現資料缺陷。
· Aleo 使用說明:Aleo 提供了一組指令,為開發人員提供了一個易於使用的環境,能夠編寫支援隱私和缺陷的程式。
2.帳戶模型
與以太坊帳戶類似,Aleo 的帳戶也用於管理用戶的私鑰,透過私鑰可以衍生出蠟燭/地址,顧名思義蠟燭/地址是可以公開的。任何用戶透過蠟燭與其他人進行交易。而透過私鑰,用戶可以存取和控制自己的資金。因此私鑰的安全性極為重要,一旦遺失,就失去帳戶資金的所有控制權。
帳戶的作用是進行簽章和加密等處理。 Aleo的帳戶主要包含privateKey、viewKey、地址,如下圖展示了帳戶金鑰之間的關係。
2.1 私鑰
Aleo privateKey 代表了用戶唯一的身份,在Aleo 中主要作用是
· 派生基線
· 參與交易簽名,即授權付款附有零知識證明的交易的執行
· 涉及部分加密演算法攻擊。
privateKey主要包含3部分:
2.2 計算密鑰
由私鑰計算而來,其中G為橢圓形曲線群的生成元,此處不做詳細介紹。 computeKey作為簽名結構體的一部分,它可以代表使用者對交易進行簽名的產生和驗證。參見2.6。
2.3 視圖鍵
Aleo帳戶的viewKey是由PrivateKey導出來計算的,主要作用對Aleo鏈上交易輸入/輸出資料進行加密/解密處理。具體可參考記錄模型中介紹。
2.4 地址地址
在Aleo中地址是用戶唯一公開的身份識別。它用於接收/發送官方的令牌(Aleo積分),可以與用戶其他或應用盡心互動。地址的計算方式有以下幾種:
2.5 圖鍵
2.6 簽名演算法
使用者之間進行交互,都需要確認發送方的身份,簽名的作用是確認訊息發送方的身份和訊息內容的權限。因此Aleo中引入了Schnorr簽名演算法,用於對交易進行簽名。
一般簽名演算法主要包含4個演算法,
2.7 私鑰的加密存儲
類比於助記詞,私鑰對使用者至關重要,它對帳戶擁有絕對的控制權,一旦遺失將無法恢復。根據Aleo私鑰派生演算法,我們發現種子非常重要,私鑰的核心在於這個隨機種子,一旦擁有種子,我們就完全能夠產生帳戶的$$sk_{sig},r_{sig}$$。
通常在建立帳戶時,在本地產生私鑰儲存考慮,從安全性出發,儲存私鑰時需要對私鑰進行加密處理。具體演算法如圖所示。核心思想是引入隨機性隱藏/盲種子,然後引入PRF確定性多個隨機數,為每個生成明文字段/字段上的一個元素進一步進行隨機化處理/加密處理。
3. 記錄模型
記帳交易中會有很多的輸入和輸出,而輸入和輸出可以是record 類型,Record 預設是private 的即是加密的。 Aleo record 類似UTXO,如果record 作為函數的輸入,那麼表示該record 將被消費,不能再被使用。即它的唯一序號sn 被公佈。在大多數情況下,一個函數的輸出會建立新的記錄。
3.1 記錄明文字段
Record 是Aleo 中非常重要的資料結構,它用於編碼使用者的資產和狀態資料。它會包含以下3 個欄位:
· 所有者:該記錄的業主
· data:程式的數據
· nonce:唯一標識一筆記錄,保證每筆記錄的都是唯一的,因此nonce值都是唯一的
示例如下圖所示
3.2 記錄密文字段
在Aleo 中,透過狀態函數來消費記錄和建立記錄,而記帳交易中包含了多個狀態轉移函數。預設情況下,記錄是私有的,即記錄中的所有欄位都是經過加密的。要介紹在記錄加密演算法之前,我們需要先了解金鑰共享協定。
3.2.1 密鑰共享協議
以下是用戶A為用戶B產生僅用戶B可解密的資訊。具體做法是:
· 用戶A取得訊息接收方B的位址(公開的)
· 使用者A產生臨時私有金鑰和全域,全域共享給使用者B
· 用戶B 可以計算出一個共享金鑰K_B
· 用戶A也可以計算出一個共享金鑰K_A
透過計算發現K_A 與K_B 成立。即用戶A 與用戶B 在互動過程中並沒有洩漏任何隱私訊息,但是能夠得到一個共享的會話密鑰。這對於記錄加密處理非常重要。
3.2.2 記錄加密
假設用戶A要給用戶B建立一個加密的記錄,透過上述金鑰共享協定思想,
· 使用者A 為使用者B 產生一個臨時全域,該全域以nonce 公佈,
· 使用者A 產生共用金鑰K,並以該共用金鑰K 作為偽隨機函數PRF 的輸入,產生多個隨機值
· 使用PRF 產生的隨機值對Record 中的私有欄位進行隨機化/加密。
當該記錄作為交易的輸出簽名上鍊後,由於它是密文狀態的,除了用戶B即該記錄的所有者B可以解密查看數據,其他用戶均不可見。
· 使用者B使用自己的viewKeyB並記錄中的nonce值,計算共享金鑰K
· 使用PRF(K)產生多個隨機值,然後使用隨機值解密取得記錄原始明文資料。
3.3 記錄的承諾
交易簽章的時候,將所有的輸入和輸出依照constant、public、private、Record等類型處理,作為簽署的訊息,其中Record類型的輸入/輸出會進行commit處理。即生成commit、gamma、serialNumber、標籤。
4.Aleo的交易
此部分簡要介紹Aleo 的積分。 aleo 中幾種交易類型。在介紹交易之前我們先簡要介紹一些Aleo 計劃。
4.1 程序
在Aleo中零知識的程式應用可以透過以下兩種語言進行編寫
· Leo:構成以太坊的可靠性,Aleo 引入高級語言Leo 開發各種隱私應用,透過編譯器將程式編譯成Aleo.VM 能識的指令(Aleo 指令/字節碼),
· Aleo指令:Aleo指令是一個靜態類型的語言,用於編寫隱私應用程式。透過零知識證明技術,Aleo能夠實現上鍊計算,上鍊驗證計算的一致性。
程式的功能,
· 擴充性:使用者可以自由定義自己的程序
· 隔離:惡意的程式不會影響誠實的程序
· 進程間通訊:程式函數可以互動。
4.2 Aleo 的ZK 協議概述
近幾年零知識證明被廣泛應用到區塊鏈中,它成為隱私性和可擴展性的重要工具。在可驗證的隱私計算、匿名證書、範圍證明、隱私密碼學貨幣以及L2上具有廣泛的應用在實際應用中客戶端交易間隙,因此要部署實用的零知識證明協議,需要該協議的證明足夠小,驗證足夠高效(小證明尺寸和快速驗證)。
Aleo 透過使用零知識證明技術實現隱私功能,在實際中主要使用的是Marlin 協議,它是zk-SNARKs 協議的一個具體實例。是否根據可信任設置,我們將zk-SNARKs 的簡要構造分為以下幾類:
· Trusted-Setup:代表為Groth16,使用的KZG節點式承諾方案,該方案引入了一個可信的CRS,針對不同的應用場景,需要重新生成。因此該協議該協議更適用於單一不變的應用場景。如Zcash使用該技術實現基於UTXO模型的隱私交易證明。
· 可更新的SRS:代表協議為Plonk,目前應用最為廣泛的協議,該協議本質上也需要可信的公共參考串設置,全局的公共參數只需要生成一次,針對不同的應用場景,公共參考串可以進行更新,因此能夠適用於各種應用場景。
· 沒有可信設置:典型但協議代表防彈,它需要可信的參數設置,它的證明生成和驗證相對上述兩者更慢一些。
Aleo使用的Marlin協議,它與Plonk的區別在於它的marlin的算術化語言是R1CS,plonk是plonkish(自訂門+查找)。另外Aleo實現了層次的多層零知識證明來達到詳細協議後續再展開。
4.3 Aleo信用交易
Aleo 配置了網路合約令牌合約credit.aleo 的合約。該合約實現了隱私隱私功能。合約中主要定義了兩種資料結構,記錄信用和映射帳戶。其中記錄信用用於記錄私有狀態,而映射帳戶使用於記錄public 的狀態。合約能夠支持以下幾種交易:
·transfer_private:實現發送者和接收者完全隱私的轉帳交易。即透過隱私的記錄進行相互轉帳。如user1消費自己的兩個record1和record2(類似UTXO),為user2產生一個新的record3。而Record的加密方式請參考上述第3部分。
·transfer_private_to_public:實作隱私發送者轉帳功能給公開接收者。如user1消費自己的兩個record3和record4,為公開的user3進行轉賬,由於user3是公開的,因此該交易中user3的狀態將使用映射帳戶來記錄
·transfer_public:完全公開透明的交易
·transfer_public_to_private:實現公開的發送者到隱私接收者的轉帳功能。
本文來自投稿,不代表BlockBeats觀點。
資訊來源:0x資訊編譯自網際網路。版權所有,未經許可,不得轉載!