姚 爽, 張大偉, 李 勇, 王 偉
1. 北京交通大學 計算機與信息技術學院, 北京 100044
2. 智能交通數(shù)據(jù)安全與隱私保護技術北京市重點實驗室, 北京 100044
3. 北京交通大學 電子信息工程學院, 北京 100044
區(qū)塊鏈技術是一種去中心化、多方共識、公開透明的新型計算范式. 其去中心化的分布式數(shù)據(jù)處理、多方共識確認和數(shù)據(jù)不可篡改的特性為解決數(shù)據(jù)安全和信息共享問題提供了新的解決方案. 同時, 隨著產(chǎn)業(yè)區(qū)塊鏈技術的普及和發(fā)展, 區(qū)塊鏈系統(tǒng)也從強調(diào)去中心化的開放式公有鏈發(fā)展到多中心化的聯(lián)盟鏈, 區(qū)塊鏈交易場景也從單一的去中心化密碼貨幣發(fā)展到面向行業(yè)應用的多中心化數(shù)字資產(chǎn)交易系統(tǒng), 區(qū)塊鏈技術正成為目前的研究熱點.
區(qū)塊鏈系統(tǒng)的交易模型同傳統(tǒng)中心化系統(tǒng)有很大的不同. 首先, 在交易內(nèi)容確認方面, 中心化系統(tǒng)中所有交易過程的記錄和確認都是由系統(tǒng)的中心機構集中來完成的. 而在區(qū)塊鏈系統(tǒng)中, 客戶端首先將交易發(fā)送到區(qū)塊鏈網(wǎng)絡中, 由網(wǎng)絡中的特定節(jié)點來對交易進行分布式共識確認; 其次, 在賬本數(shù)據(jù)存儲方面, 傳統(tǒng)交易系統(tǒng)采用由中心機構集中安全存儲且賬本內(nèi)容不公開. 而區(qū)塊鏈交易系統(tǒng)則采用全網(wǎng)節(jié)點共同存儲賬本的方式, 賬本數(shù)據(jù)安全由共識機制、塊鏈式數(shù)據(jù)結構共同確保, 賬本內(nèi)容公開透明. 由此可見, 區(qū)塊鏈系統(tǒng)在提供了靈活的分布式數(shù)據(jù)處理和交易共識確認的同時, 也對交易數(shù)據(jù)的隱私保護提出了極大的挑戰(zhàn). 隨著產(chǎn)業(yè)區(qū)塊鏈應用的普及和推廣, 對區(qū)塊鏈交易隱私保護的需求也在日益增強. 首先, 在公開賬本中確保交易內(nèi)容隱私是在合作競爭環(huán)境下確保交易方合法利益的必然需求; 其次, 在面向行業(yè)應用的數(shù)字資產(chǎn)交易系統(tǒng)中確保權威機構能夠實現(xiàn)對交易的有效審計和監(jiān)管也是規(guī)范市場行為、保護交易方合法權益的有效手段. 因此, 在交易數(shù)據(jù)公開存儲、全網(wǎng)共識的情況下確保交易內(nèi)容的隱私保護和可靠監(jiān)管是產(chǎn)業(yè)區(qū)塊鏈應用發(fā)展面臨的主要問題之一, 對這一問題進行深入研究也具有極其重要的意義.
區(qū)塊鏈系統(tǒng)中的交易由交易身份和交易內(nèi)容兩部分組成. 其中交易身份用于標識數(shù)字資產(chǎn)的所有者,交易內(nèi)容用于表示數(shù)字資產(chǎn)本身的屬性. 區(qū)塊鏈交易內(nèi)容隱私是指對于區(qū)塊鏈系統(tǒng)中的某筆交易, 觀察者無法確認交易的具體內(nèi)容, 如交易金額、交易類型等. 即對于觀察者而言, 或者無法訪問到交易內(nèi)容、或者無法獲得交易內(nèi)容的明文信息. 目前的文獻多將交易身份和交易內(nèi)容隱私保護同時討論, 但我們認為在如下兩方面二者存在較大的不同: 首先, 二者的保護對象不同, 交易身份和交易內(nèi)容在基本屬性和操作方式上存在顯著差異. 區(qū)塊鏈系統(tǒng)中多采用公鑰作為用戶的身份標識, 并由此作為用戶對數(shù)字資產(chǎn)UTXO 或賬戶的權屬標記. 在交易過程中數(shù)字資產(chǎn)發(fā)生轉移時, 資產(chǎn)所屬用戶需使用對應的私鑰對交易行為進行簽名確認. 從交易安全的角度考慮, 交易身份的研究更關注于資產(chǎn)的權屬標記和支付確權等. 交易內(nèi)容如交易金額多采用數(shù)字形式表示, 在交易過程中用于表示數(shù)字資產(chǎn)的轉移金額等信息. 從交易安全的角度考慮,交易內(nèi)容的研究更關注于支付金額范圍的合理性和交易金額的平衡性等; 其次, 二者在隱私保護過程中采取了完全不同的設計思路和技術手段. 交易身份的隱私保護更強調(diào)交易過程中的身份混淆, 即將真實交易者的身份混淆在匿名集合中以確保身份隱私, 但同時必須解決支付確權和防雙花問題以確保交易安全. 鑒于不同的混淆方案, 可基于匿名群組消息協(xié)議、環(huán)簽名和零知識證明等分別實現(xiàn)協(xié)同、自主和全局身份混淆以保護隱私[1]; 而交易內(nèi)容的隱私保護更強調(diào)交易信息的機密性和公開可驗證性, 即在交易明文信息不可見的情況下區(qū)塊鏈驗證節(jié)點可確保金額范圍的合理性和交易金額的平衡性以保證交易安全. 因此, 現(xiàn)有方案多通過消息加密、私有存儲確保交易信息的機密性, 通過零知識證明確保密態(tài)數(shù)據(jù)交易規(guī)則的可驗證性. 鑒于二者在研究目標和技術路線上的不同, 本文將交易內(nèi)容同交易身份的隱私保護分離開單獨進行研究討論, 聚焦于內(nèi)容隱私保護的自有特點, 以期為讀者提供有益的研究借鑒.
區(qū)塊鏈交易內(nèi)容隱私保護是目前的研究熱點, 國內(nèi)外已有多篇文獻涉及到區(qū)塊鏈系統(tǒng)安全隱私問題的研究, 但尚缺乏單獨對交易內(nèi)容隱私保護的系統(tǒng)性分析和深入探討. 2017 年, 祝烈煌等人[2]從數(shù)據(jù)失真、數(shù)據(jù)加密和限制發(fā)布三方面討論了區(qū)塊鏈交易內(nèi)容隱私保護問題; 2018 年, Genkin 等人[3]對公有鏈不同密碼貨幣所采用的內(nèi)容隱私技術進行了討論; 王宗慧等人[4]從混幣方案、密碼學方案和安全通道方案三個方面對公有鏈數(shù)據(jù)隱私保護方案進行了研究; 2019 年, 何德彪等人[5]重點對內(nèi)容隱私保護方面的零知識證明和同態(tài)密碼進行了討論; 李旭東等人[6]從混幣技術、離鏈支付協(xié)議和密碼學方案三個方面對比特幣隱私保護問題和改進方案進行了研究; 2020 年, 張家碩等人[7]從零知識證明、安全多方計算、環(huán)簽名和可信計算等方面對區(qū)塊鏈隱私保護的實現(xiàn)技術手段進行了探討; 張奧等人[8]依據(jù)隱私保護的不同技術手段從地址混淆、信息隱藏、通道隔離這三個方面主要對公有鏈中的隱私保護機制進行了研究. 2021年, 李佩麗等人[9]主要從混合技術和零知識證明兩個方面討論了區(qū)塊鏈隱私保護技術, 從身份追蹤和內(nèi)容監(jiān)管兩方面探討了隱私監(jiān)管技術. 從隱私計算的范疇而言, 依據(jù)李鳳華等提出的泛在互聯(lián)環(huán)境下的隱私計算理論[10,11], 上述相關工作[2-9]所討論的區(qū)塊鏈交易隱私保護歸類為隱私防護技術, 這些技術面向區(qū)塊鏈交易內(nèi)容隱私保護的特定場景, 側重于基于密碼學等傳統(tǒng)數(shù)據(jù)安全技術實現(xiàn)隱私防護. 不同于隱私脫敏技術中采用失真且不可逆的方法進行防護, 區(qū)塊鏈交易隱私保護重點需解決密態(tài)交易數(shù)據(jù)的準確運算和規(guī)則校驗問題, 且對于交易對手方而言這些數(shù)據(jù)多具有可逆性. 面向交易內(nèi)容的隱私防護技術, 上述相關工作[2-9]多以公有鏈密碼貨幣為研究對象, 將交易身份和交易內(nèi)容兩部分一起討論, 依據(jù)所采取的具體技術分類來進行研究. 這一思路沒有集中分析面向交易內(nèi)容和交易身份的隱私保護在方案目標、設計思路和實現(xiàn)手段上的差異, 研究范圍也未聚焦到交易內(nèi)容隱私保護及其監(jiān)管的詳細方案. 此外, 上述工作對聯(lián)盟鏈中的隱私保護機制涉及較少, 也未對目前產(chǎn)業(yè)區(qū)塊鏈中面臨的隱私交易監(jiān)管問題進行深入探討.
鑒于上述問題, 本文基于區(qū)塊鏈交易模型公開可驗證的特點, 將區(qū)塊鏈交易內(nèi)容隱私保護分為三方面的內(nèi)容進行深入探討: 交易內(nèi)容隱藏、隱藏交易驗證和隱藏交易監(jiān)管. 其中, 交易內(nèi)容隱藏用于確保觀察者無法獲得交易明文數(shù)據(jù); 隱藏交易驗證用于確保共識節(jié)點可對隱藏后的交易內(nèi)容進行正確性驗證; 隱藏交易監(jiān)管用于確保監(jiān)管方可對隱藏后的交易內(nèi)容進行有效監(jiān)管. 本文從上述三個方面對公有鏈和聯(lián)盟鏈中內(nèi)容隱私保護的共性問題和解決方案進行了系統(tǒng)性地梳理. 首先, 基于區(qū)塊鏈交易模型的特點, 分析了區(qū)塊鏈交易內(nèi)容隱私保護所面臨的安全威脅及挑戰(zhàn); 其次, 我們認為在區(qū)塊鏈賬本公開存儲、多方共識確認情況下如何實現(xiàn)交易內(nèi)容的隱藏和隱藏交易的高效驗證是目前亟待解決的關鍵問題. 其中的隱藏交易驗證又是區(qū)塊鏈新型交易場景下的特定需求, 相關的研究工作非常活躍. 在公有鏈和聯(lián)盟鏈中, 由于去中心化和多中心化交易處理驗證方式的不同, 又使得二者采取了不同的內(nèi)容隱藏和驗證方案. 由此本文從交易內(nèi)容隱藏和隱藏交易驗證兩個方面對目前區(qū)塊鏈系統(tǒng)中所采取的不同隱私保護手段, 如: 同態(tài)密碼、加密技術、隔離技術、環(huán)簽名和零知識證明等進行了對比分析, 列舉了不同方案各自存在的優(yōu)缺點, 從其所涉及的設計思路、密碼算法和安全協(xié)議等方面進行了深入的探討; 此外, 隨著產(chǎn)業(yè)區(qū)塊鏈的發(fā)展, 隱私交易的監(jiān)管問題在行業(yè)應用中日益凸顯. 因此, 本文也從隱藏交易監(jiān)管方面對現(xiàn)有方案進行了總結分析. 最后,本文對交易內(nèi)容隱藏、隱藏交易驗證和隱藏交易監(jiān)管技術的未來發(fā)展進行了展望.
本文組織結構如下: 第1 節(jié)介紹了區(qū)塊鏈交易內(nèi)容隱私保護的基本概念和需解決的主要問題; 第2 節(jié)分析總結了當前區(qū)塊鏈交易內(nèi)容隱私保護所面臨的安全威脅及挑戰(zhàn); 第3 節(jié)從交易內(nèi)容隱藏、隱藏交易驗證和隱藏交易監(jiān)管三個方面對目前主流區(qū)塊鏈平臺中交易內(nèi)容隱私保護所采取的不同技術手段進行了對比分析; 第4 節(jié)對交易內(nèi)容和交易身份隱私保護技術的結合進行了分析討論; 第5 節(jié)為總結及未來展望.
區(qū)塊鏈系統(tǒng)采用交易多方共識確認模型提供了高效的信任構建方法, 同時也為鏈上數(shù)據(jù)流轉帶來了更多的安全和隱私保護問題. 區(qū)塊鏈系統(tǒng)在交易內(nèi)容隱私保護方面面臨的威脅主要包括:
(1) 區(qū)塊鏈系統(tǒng)采用了交易賬本全網(wǎng)公開的方式來存儲全部的歷史交易數(shù)據(jù), 區(qū)塊鏈系統(tǒng)中的所有節(jié)點都可以看到鏈上的明文數(shù)據(jù)并追溯交易流程, 極易造成用戶身份、交易類型和賬戶余額等隱私信息的泄露,例如敵手可以通過交易圖分析發(fā)現(xiàn)不同賬戶間的關聯(lián)關系[12]、追蹤特殊交易[13]以及發(fā)現(xiàn)交易規(guī)則[14]等, 給交易內(nèi)容隱私保護帶來了威脅.
(2) 區(qū)塊鏈系統(tǒng)采用多方共識方式來完成交易的確認, 參與共識的節(jié)點必然需要掌握更多的交易信息以實現(xiàn)交易規(guī)則驗證, 一旦共識節(jié)點出現(xiàn)問題, 必然會影響交易的正確驗證以及造成隱私數(shù)據(jù)泄露, 給交易內(nèi)容隱私保護帶來威脅.
(3) 傳統(tǒng)區(qū)塊鏈隱私保護的去中心化特點使得鏈上交易缺乏合理監(jiān)管, 對于惡意違法交易無法實現(xiàn)交易追蹤溯源和內(nèi)容監(jiān)管, 在應用層面可能帶來系統(tǒng)性的安全風險.
在傳統(tǒng)交易系統(tǒng)中, 用戶是向中心機構公開交易身份和交易內(nèi)容, 由中心機構完成信息的隱私保護.而區(qū)塊鏈系統(tǒng)中并無單一中心機構, 而是由系統(tǒng)整體安全機制來完成隱私保護. 因此, 受限于區(qū)塊鏈系統(tǒng)中交易模型的設計, 交易內(nèi)容隱私保護方案也面臨著如下一些技術挑戰(zhàn):
(1) 區(qū)塊鏈系統(tǒng)采用多方共識方式來實現(xiàn)交易的確認和信任的構建, 有時交易雙方對于作為觀察者的驗證節(jié)點來說是存在交易內(nèi)容隱私保護需求的, 簡單的信息隱藏方法無法滿足既保護信息又可驗證內(nèi)容的需求. 因此, 如何在保護交易內(nèi)容隱私的同時實現(xiàn)正確有效的交易驗證具有一定的挑戰(zhàn)性.
(2) 區(qū)塊鏈系統(tǒng)中采用多方確認后通過公開信道(區(qū)塊鏈賬本) 進行交易信息發(fā)布, 這一過程耗時較長. 因此, 在區(qū)塊鏈系統(tǒng)中多采用交易發(fā)送方到區(qū)塊鏈節(jié)點的單向通信方式. 這使得傳統(tǒng)交易系統(tǒng)中的多輪雙向隱私保護協(xié)議不再適用. 因此, 如何在區(qū)塊鏈系統(tǒng)單向傳輸交易數(shù)據(jù)的過程中實現(xiàn)交易認證和隱私保護也具有一定的挑戰(zhàn)性.
(3) 區(qū)塊鏈系統(tǒng)中的賬本數(shù)據(jù)采用追加存儲的方式, 添加的交易數(shù)據(jù)用于賬本的完整性驗證且不能刪除, 而隱私保護技術又帶來了額外的交易數(shù)據(jù)存儲開銷. 因此, 必須采取有效措施來降低隱私保護信息的存儲開銷, 以避免賬本數(shù)據(jù)的膨脹問題.
(4) 隨著區(qū)塊鏈系統(tǒng)在行業(yè)應用中的不斷普及和發(fā)展, 行業(yè)監(jiān)管同隱私保護間的矛盾也逐漸凸顯. 一方面, 區(qū)塊鏈系統(tǒng)中缺乏單一交易中心機構; 另一方面, 傳統(tǒng)的公有鏈中無監(jiān)管式的隱私保護方法是不適合于很多行業(yè)應用場景的. 因此, 如何在實現(xiàn)隱私保護的同時又可提供對于交易內(nèi)容的監(jiān)管也是一個頗具挑戰(zhàn)性的問題.
本文將從交易內(nèi)容隱藏、隱藏交易驗證和隱藏交易監(jiān)管三個方面介紹區(qū)塊鏈交易內(nèi)容隱私保護技術.首先, 當用戶提交交易時, 系統(tǒng)將通過交易內(nèi)容隱藏技術處理交易數(shù)據(jù)使得明文數(shù)據(jù)對于全網(wǎng)或部分未授權用戶不可見, 只有交易接收方可通過隱藏后的數(shù)據(jù)恢復出交易明文; 其次, 驗證節(jié)點使用隱藏交易驗證技術對交易密文信息進行合法性驗證; 此外, 對于存在監(jiān)管需求的區(qū)塊鏈系統(tǒng), 可使用隱藏交易監(jiān)管技術對交易內(nèi)容進行審計和監(jiān)管. 這一隱私保護模型在確保交易方明文交易數(shù)據(jù)保密性的同時, 又可保證共識節(jié)點對隱藏后的交易內(nèi)容進行正確性驗證和監(jiān)管方對交易規(guī)則的有效監(jiān)管. 由上述三方面內(nèi)容構成的交易內(nèi)容隱私保護模型如圖1 所示.
圖1 交易內(nèi)容隱私保護模型Figure 1 Model of transaction privacy protection
目前的區(qū)塊鏈系統(tǒng)多采用信息加密和數(shù)據(jù)隔離技術來實現(xiàn)交易內(nèi)容的隱藏.
3.1.1 交易信息加密
交易信息加密方案通過將含有隱私內(nèi)容的明文數(shù)據(jù)加密后上鏈, 達到區(qū)塊鏈交易內(nèi)容隱藏的目的. 只有擁有密鑰的用戶才能夠解密密文獲得隱私信息. 目前, 基于交易信息加密的隱私保護方案可分為同態(tài)密碼、非對稱/對稱加密和屬性加密三種.
同態(tài)密碼
同態(tài)密碼的同態(tài)性是指對明文進行加法和(或)乘法運算與對密文進行相應的運算,結果是等價的. 當前相關區(qū)塊鏈交易隱私保護方案所采用的主要同態(tài)密碼技術如表1 所示.
表1 同態(tài)密碼技術及相關區(qū)塊鏈交易隱私保護方案Table 1 Homomorphic encryption and its applications in blockchain privacy preserving
為了提高比特幣的隱私保護特性, Adam Back 和Gregory Maxwell 提出了保密交易的概念[15], 通過在比特幣網(wǎng)絡中使用Pedersen 承諾[16]實現(xiàn)對UTXO 中交易金額的隱藏.
定義1 (Pedersen 承諾) 設G為橢圓曲線點群G 中的生成元,H為橢圓曲線中的一個點, 隨機選擇r ∈Zn, 則v ∈Zn的Pedersen 承諾為: commit(r,v)+vH.
Pedersen 承諾具有綁定性(binding) 和隱藏性(hiding).
定義2 (綁定性) 給定承諾值commit(r,v), 對于任何PPT 敵手, 找到(r′,v′) 滿足m/=m′和commit(r′,v′)=commit(r,v) 的概率是可以忽略的.
定義3 (隱藏性) 對于任何v,v′∈Zp以及隨機選擇的r,r′∈Zp, commit(r,v) 和commit(r′,v′) 的分布是相同的.
定義4 (Pedersen 承諾同態(tài)性) commit(r1,v1) + commit(r2,v2) = (r1+r2)G+ (v1+v2)H=commit(r1+r2,v1+v2).
保密交易技術中通過構造基于橢圓曲線的Pedersen 承諾方案完成交易金額隱藏,v代表交易金額,r為隨機生成的盲化因子并且不公開. Pedersen 承諾所具有的隱藏性使得觀察者無法通過公開賬本中記錄的承諾值commit(r,v) 還原出交易金額, Pedersen 承諾的綁定性使得發(fā)送者無法再次更改交易金額, 從而在確保交易安全的情況下實現(xiàn)了交易內(nèi)容的隱私保護. 保密交易技術在公有鏈Elements[17]、Zerocoin[18]、Mimblewimble[19-21]、門羅幣[22,23]和零幣Zcash (sapling 版本)[25]中都得到了實際應用. 此外, 基于聯(lián)盟鏈Fabric 的FabZK[24]項目也使用了保密交易技術來實現(xiàn)交易內(nèi)容的隱藏.
此外, 目前已經(jīng)有相關研究提出使用Paillier 加法同態(tài)算法實現(xiàn)區(qū)塊鏈用戶交易金額的隱藏. Paillier加法同態(tài)算法基于復合剩余類困難問題, 其算法流程如下:
(3) Decrypt(sk,C)→m: 該算法為解密算法, 計算hm=Y/Xsk-1, 從hm中恢復明文m.
在PGC 方案中, 利用Twisted-ElGamal 加密實現(xiàn)交易金額隱藏和賬戶余額的隱藏. 首先, 交易參與者使用自己的公鑰加密賬戶余額. 當發(fā)生轉賬交易時, 交易發(fā)送方分別使用發(fā)送方和接收方的公鑰(pks,pkr) 加密交易金額v得到交易密文(Cs,Cr). 同時生成零知識證明πcorrect證明交易的正確性, 接收者收到證明和簽名后的交易密文, 完成隱藏交易. 交易確認完成后, 交易發(fā)送方和交易接收方可通過Twisted-ElGamal 算法的同態(tài)性使用交易密文(Cs,Cr) 各自更新加密的賬戶余額.
此外,PGC 方案[30]給出了在32 比特消息空間和128 比特安全強度下,Twisted-ElGamal 和Paillier算法運行的性能對比. 其中Twisted-ElGamal 工作在prime256v1 橢圓曲線上, Paillier 算法的模長為3072 位. 比較結果如表2 所示. 由比較可知, Twisted-ElGamal 具有更好的運算性能.
表2 Twisted-ElGamal 和Paillier 比較[30]Table 2 Benchmarks of Twisted-ElGamal and Paillier [30]
綜上所述, 基于同態(tài)承諾和同態(tài)加密的方案能夠保證交易內(nèi)容的隱私性, 其中, Twisted-ElGamal 算法不僅解密效率優(yōu)于Paillier 算法, 而且也是對零知識證明友好的. 但是以上方案實現(xiàn)交易內(nèi)容隱藏的同時也存在著一些問題: 雖然同態(tài)密碼方案實現(xiàn)了交易明文的隱藏, 但密文仍然會作為輸入輸出結果編碼存儲在公開賬本中, 如果未同時采取身份隱藏機制則會為交易路徑追蹤提供便利; 其次, 由于保密交易所基于的Pedersen 承諾具有單向特性, 即無法由承諾結果直接獲得被承諾值, 因此基于保密交易構建的交易支付過程必須通過其他方式在發(fā)送方和接收方之間進行交易明文的傳輸. 為了解決這一問題, 目前存在兩種解決方式, 第一種方式為交易雙方使用鏈外通道交互并記錄交易明文數(shù)據(jù), 如FabZK 即采用鏈外私有賬本的方式來實現(xiàn); 第二種方式為直接將交易數(shù)據(jù)明文進行加密并存儲在公開賬本中, 例如, 在門羅幣的最新實現(xiàn)中, 發(fā)送方和接收方之間通過ECDH 密鑰協(xié)商協(xié)議生成共享加密密鑰, 然后使用該密鑰對交易金額進行加密(異或) 并存儲在賬本上. 此外, 同態(tài)加密算法雖然可將交易金額直接加密存儲在鏈上, 但Paillier 算法的問題在于加解密效率較低. Twisted-ElGamal 算法在解密過程中采用區(qū)間計算離散對數(shù)的方式獲得m, 因此較適合于具有固定范圍的金額類數(shù)值. 因此, 在實際應用時可根據(jù)不同的場景需求擇優(yōu)選取.
非對稱/對稱加密
Zerocash 方案中使用接收者的公鑰通過匿名公鑰加密模式(key-privacy public-key encryption)[31]對交易金額、序列號生成因子和貨幣承諾(v,ρ,rcm) 進行加密, 然后將密文包含在隱蔽交易中并廣播到區(qū)塊鏈. 接收方需要監(jiān)聽區(qū)塊鏈上的交易, 嘗試用自己的私鑰解密隱蔽交易中包含的加密信息, 若解密成功, 則存儲解密后的敏感信息并在未來支付時使用. 零幣中的Sprout 版本則通過Curve25519 密鑰協(xié)商協(xié)議在發(fā)送方與接收方之間產(chǎn)生一個共同的會話密鑰, 然后通過一次性認證對稱加密方案(authenticated one-time symmetric encryption)[32]對敏感交易信息進行加密. Curve25519 密鑰協(xié)商協(xié)議協(xié)商會話密鑰的具體流程如圖2 所示:
圖2 Curve25519 密鑰協(xié)商協(xié)議Figure 2 Key agreement protocol on Curve25519
在密鑰協(xié)商過程中, 發(fā)送方首先隨機選擇一個臨時公私鑰對 epk/esk, 接收方擁有傳輸密鑰對(pkenc,skenc). 在密鑰交換過程中, 雙方利用自己的私鑰和對方的公鑰再使用一次Curve25519 函數(shù)就可以計算得到一個共同的秘密值, 然后利用這個秘密值派生出會話密鑰用于之后的對稱加密算法. 在交易發(fā)送時, 發(fā)送方連同密文Cenc和epk 一同發(fā)給接收者. 接收者監(jiān)聽區(qū)塊鏈上的交易, 嘗試利用自己的私鑰skenc和交易中公開的epk 計算出加密密鑰Kenc, 解密隱蔽交易中包含的加密信息, 若解密成功, 則接收這筆交易.
使用一次性認證對稱加密方案對敏感交易信息進行加密的流程如下:
(1) 發(fā)送方產(chǎn)生一個密鑰對(epk,esk).
(2) 通過Curve25519 密鑰協(xié)商協(xié)議K計算共享秘密值sharedSecret :=KA.Agree(esk, pkenc).
(3) 通過密鑰派生方案KDF 計算加密密鑰Kenc:= KDF(i,hsig, sharedSecret, epk, pkenc).
(4) 通過認證加密方案Sym 計算消息m對應的密文C:=Sym.EncryptKenc(m).
屬性加密
為了解決更細粒度隱私保護場景下的數(shù)據(jù)隱私保護問題, 一些基于屬性加密(attribute-based encryption, ABE)[33,34]的區(qū)塊鏈數(shù)據(jù)隱私保護方案[35,36]相繼被提出. ABE 分為密文策略屬性加密(ciphertext policy attribute-based encryption, CP-ABE) 和密鑰策略屬性加密(key policy attribute-based encryption, KP-ABE). 現(xiàn)有的區(qū)塊鏈系統(tǒng)下基于屬性加密的交易隱私保護方案多使用CP-ABE 算法.CP-ABE 的算法流程如下:
(1) Setup(1λ,S)→(PP,MK), 初始化算法輸入安全參數(shù)λ和屬性集S, 輸出公開參數(shù)PP 和主密鑰MK;
(2) KeyGen(MK,S)→SK, 密鑰生成算法輸入主密鑰MK 和屬性集S, 輸出用戶屬性私鑰SK;
(3) Encrypt(PP,M,A)→CT, 加密算法輸入公開參數(shù)PP, 明文M和訪問結構A, 輸出密文CT;
(4) Decrypt(PP,CT,SK)→M, 解密算法輸入公開參數(shù)PP, 密文CT 和用戶私鑰SK, 輸出明文M, 只有滿足訪問結構A的用戶才能解密獲得M.
Yuan 等人[37]使用CP-ABE 實現(xiàn)了一種區(qū)塊鏈數(shù)據(jù)隱私保護方案, 保證了數(shù)據(jù)的機密性.同時通過ABE 完成不同用戶對高級、低級數(shù)據(jù)的訪問權限控制, 即高級用戶可以查詢高級和低級數(shù)據(jù), 而低級用戶只能查詢低級數(shù)據(jù). Cheng 等人[38]提出了基于屬性加密的區(qū)塊鏈隱私保護方案并將其應用于車聯(lián)網(wǎng)用戶的隱私保護, 該方案通過設置用戶的交通屬性集合將用戶分組并設置不同訪問策略加密隱私內(nèi)容,只有滿足密文訪問控制策略的用戶才能解密密文獲得隱私內(nèi)容; Qiu 等人[39]提出了一種基于屬性加密算法的Fabric 數(shù)據(jù)訪問控制方案, 該方案將通道ID、組織ID 和用戶ID 作為用戶屬性集合, 根據(jù)屬性集合設置訪問控制策略, 在通道和組織層面為Fabric 提供了更細粒度的數(shù)據(jù)內(nèi)容隱私保護. 概括而言, 基于CP-ABE 方案的區(qū)塊鏈數(shù)據(jù)訪問控制方案通過設置屬性集合將用戶分組, 由數(shù)據(jù)發(fā)送方指定加密數(shù)據(jù)的用戶訪問控制列表, 一個屬性集可配置不同的多個訪問控制策略, 用戶可以根據(jù)需求使用不同嚴格程度的訪問控制策略加密隱私數(shù)據(jù)得到密文上鏈, 實現(xiàn)更多樣化、細粒度的交易內(nèi)容隱私保護, 如圖3 所示. 基于CP-ABE 的區(qū)塊鏈數(shù)據(jù)隱私保護方案主要包括如下幾個步驟:
圖3 基于屬性加密的區(qū)塊鏈隱私保護方案Figure 3 ABE-based blockchain privacy protection scheme
(1) 初始化: 首先生成公開參數(shù)PP 和主密鑰MK, 然后設置屬性集S, 利用MK 和S為各用戶生成屬性私鑰SK, 通過某種安全方式將屬性私鑰SK 發(fā)送給對應用戶.
(2) 數(shù)據(jù)加密上鏈: 數(shù)據(jù)發(fā)送方根據(jù)訪問結構A加密明文M生成密文CT, 密文CT 經(jīng)過共識確認,存儲于區(qū)塊鏈中.
(3) 數(shù)據(jù)解密: 接收方用戶請求區(qū)塊鏈網(wǎng)絡中包含該交易密文的對應信息, 得到對應的密文CT, 滿足訪問結構A的用戶能夠通過屬性密鑰SK 解密CT 得到對應明文.
綜上所述, Zcash 等使用對稱加密技術通過密文交易實現(xiàn)了交易內(nèi)容隱藏, 基于CP-ABE 的隱私保護方案通過設置屬性集合和不同的訪問控制策略實現(xiàn)了更細粒度的基于屬性的數(shù)據(jù)內(nèi)容隱藏. 基于信息加密的內(nèi)容隱藏方法必須提供較為復雜的隱藏交易驗證機制, 如基于零知識證明的驗證方案. 這在一定程度上增加了驗證過程的計算復雜性, 降低了驗證效率, 也帶來了額外的賬本存儲開銷. 上述屬性加密的保護方案也并未提供密文共識驗證算法, 若將密文解密得到明文再驗證, 如果存在惡意共識節(jié)點參與交易驗證,那么就會產(chǎn)生交易數(shù)據(jù)的隱私泄露問題. 因此, 在區(qū)塊鏈公開可驗證交易模型下, 如何設計鏈上密態(tài)數(shù)據(jù)的高效可驗證機制以確保交易規(guī)則符合性仍有待進一步深入研究.
3.1.2 基于業(yè)務邏輯的數(shù)據(jù)隔離技術
在目前得到廣泛應用的聯(lián)盟鏈系統(tǒng)中, 多面向業(yè)務邏輯適度引入中心化處理機制來設計區(qū)塊鏈系統(tǒng)的總體架構. 這不同于公有鏈交易全網(wǎng)共識的實現(xiàn)方式, 也為聯(lián)盟鏈中隱私保護的設計帶來了便利. 因此,F(xiàn)abric、Corda 和Quorum 等聯(lián)盟鏈采用適度的中心化機制完成隱私交易的處理, 同時設計了基于業(yè)務邏輯的數(shù)據(jù)隔離技術來實現(xiàn)交易內(nèi)容的隱私保護.
Hyperledger Fabric
Hyperledger Fabric[40,41]基于中心化的背書模型通過通道和私有數(shù)據(jù)集來實現(xiàn)交易內(nèi)容的隱私保護. Fabric 中的背書節(jié)點受到交易各方的信任對交易合法性進行背書驗證, 因此可以處理、訪問所有的隱私交易數(shù)據(jù), 這使得Fabric 無需使用復雜的密碼學機制來實現(xiàn)交易的驗證, 只需采用一定的機制來實現(xiàn)交易內(nèi)容隱藏即可.
為了保護交易內(nèi)容的數(shù)據(jù)隱私, Fabric1.0 引入了通道(channel) 機制. 所謂通道是指在Fabic 中多個成員間構成的私有通信子集, 以用來執(zhí)行保密交易. 該機制下, 交易可見的最小范圍是通道, 通道內(nèi)的鏈上交易數(shù)據(jù)對于屬于該通道的所有成員是可見的, 但對于通道外的成員是不可見的. 通道可理解為基于共識服務提供的一種通訊機制, 它將背書節(jié)點、提交節(jié)點和共識服務連接在一起, 形成一個具有保密性的虛擬通訊子鏈路, 從而實現(xiàn)業(yè)務隔離, 通道機制如圖4 所示. 其中, 共識服務與(節(jié)點1、節(jié)點3)、(節(jié)點1、節(jié)點2、節(jié)點3)、(節(jié)點2、節(jié)點3) 組成了三個相互獨立的通道, 加入到不同通道的Peer 節(jié)點能夠維護各通道對應的賬本和狀態(tài), 通道外的節(jié)點無法看到其中的賬本和交易數(shù)據(jù), 從而提高了交易內(nèi)容的隱私性.
圖4 Fabric 通道機制Figure 4 Channel in Fabric
通道的訪問控制機制通過“安全域” 劃分的方法在一定程度上保證了數(shù)據(jù)的隱私性, 但該機制只是粗粒度的數(shù)據(jù)隱私保護. 通道內(nèi)成員往往隸屬于不同的組織, 如果通道內(nèi)的部分組織不希望其他組織能夠查看一些特殊數(shù)據(jù), 這些組織需要單獨創(chuàng)建一個新的通道, 使該通道僅包含這些特殊數(shù)據(jù). 若要保護任意多方間的隱私數(shù)據(jù), 則需要構建大量的通道, 從而造成過多的資源開銷.
為了解決通道大量創(chuàng)建造成的資源浪費問題, Fabric1.2 引入了私有數(shù)據(jù)(private data) 機制, 如圖5 所示, 它允許通道上的成員之間可以提交、查詢私有數(shù)據(jù)而無需創(chuàng)建單獨的通道, 從而實現(xiàn)一些特殊數(shù)據(jù)僅在通道內(nèi)部分成員間共享. 相對于通道機制, 私有數(shù)據(jù)機制是一種更細粒度的數(shù)據(jù)隱私保護機制.
圖5 Fabric 中的私有數(shù)據(jù)集機制Figure 5 Private data collection in Fabric
在原有通道狀態(tài)庫的基礎上, Fabric1.2 的私有數(shù)據(jù)機制加入了私有狀態(tài)庫, 即部分組織間的私有數(shù)據(jù)會被存儲到私有狀態(tài)庫中. 同時為了保證這些私有數(shù)據(jù)的有效性和不可篡改, 還需要將這些私有數(shù)據(jù)的哈希值存儲到通道狀態(tài)庫中, 即“上鏈”. 私有數(shù)據(jù)僅存儲在部分已授權節(jié)點中, 但是所有節(jié)點都會在通道狀態(tài)中存儲私有數(shù)據(jù)的哈希值. 經(jīng)過授權的節(jié)點可以訪問這些私有數(shù)據(jù)并通過鏈上哈希值來進行完整性驗證, 而未授權的節(jié)點本身并沒有私有數(shù)據(jù). 通過這種方式在保證全局賬本一致的前提下, 實現(xiàn)了較通道機制更為細粒度的數(shù)據(jù)隱私保護.
Fabric 中含有私有數(shù)據(jù)的交易流程如下:
(1) 客戶端的應用程序向背書節(jié)點提交提案請求, 調(diào)用鏈碼讀取或寫入私有數(shù)據(jù). 私有數(shù)據(jù)(或用于在鏈碼中生成私有數(shù)據(jù)的數(shù)據(jù)) 包含在提案的臨時字段中.
(2) 背書節(jié)點模擬執(zhí)行交易并將私有數(shù)據(jù)存儲在臨時數(shù)據(jù)緩沖區(qū)中,然后根據(jù)既定的策略使用Gossip協(xié)議將私有數(shù)據(jù)分發(fā)給授權用戶.
(3) 背書節(jié)點將公開數(shù)據(jù)以提案響應的形式返回給客戶端, 其中包括私有數(shù)據(jù)哈希值.
(4) 客戶端應用程序將提案響應轉化為交易并發(fā)送給排序服務節(jié)點. 排序服務會將這些交易打包成區(qū)塊, 然后將區(qū)塊分發(fā)給所有的記賬節(jié)點. 通過這樣的方式, 通道上的所有節(jié)點都可以驗證交易的有效性而不需要知道具體的私有數(shù)據(jù).
(5) 提交區(qū)塊時, 接收到私有數(shù)據(jù)的授權節(jié)點會檢查臨時數(shù)據(jù)緩沖區(qū)中私有數(shù)據(jù)的哈希值是否與公開賬本全局狀態(tài)數(shù)據(jù)中的哈希值一致, 如果一致則將公開數(shù)據(jù)賬本追加到本地賬本, 并將私有數(shù)據(jù)寫入私有狀態(tài)庫中.
為了增強私有數(shù)據(jù)機制的功能, Fabric2.0 啟用了處理和共享私有數(shù)據(jù)的新模式. 之前的版本中私有數(shù)據(jù)僅在一個私有數(shù)據(jù)集合中共享, 但Fabric2.0 通過引入特定的API 函數(shù)實現(xiàn)了不同集合之間共享私有數(shù)據(jù)的功能.
Corda
Corda 是由R3 聯(lián)盟開發(fā)的適用于金融類應用場景的分布式賬本系統(tǒng), 于2016 年11 月實施開源[42].Corda 是一個基于半信任環(huán)境的、服務于現(xiàn)實世界金融活動的分布式賬本平臺, 同時滿足信息適度可見和高性能兩個核心特性, 采用聯(lián)盟鏈或私有鏈的形式, 用于記錄、管理及自動化執(zhí)行金融合約.
不同于公有鏈平臺具有的全局交易驗證及共識、單位時間產(chǎn)出數(shù)據(jù)塊等特征, Corda 平臺具有如下特點:
(1) 交易無需全網(wǎng)廣播, 而僅在交易的關聯(lián)方及驗證節(jié)點之間傳遞. 這樣可以減少節(jié)點接收的數(shù)據(jù)量,并且有效保證交易相關方的內(nèi)容隱私保護.
(2) 共識機制僅存在于負責驗證交易的節(jié)點之間, 而不是所有的參與節(jié)點, 從而加快了達成共識的速度, 提高了交易性能.
(3) 沒有“區(qū)塊” 的概念, 而是讓后續(xù)交易直接指向前序交易, 以達到數(shù)據(jù)不可篡改、可追溯的特性.
Corda 系統(tǒng)仍是基于UTXO 交易模型, 通過工作流來構建各種復雜的業(yè)務流程. 但不同于其它區(qū)塊鏈系統(tǒng)的是, Corda 中的交易無需全網(wǎng)廣播, 交易數(shù)據(jù)的流動均通過基于TLS 安全信道的點對點傳輸來完成, 且僅在交易的關聯(lián)方及驗證節(jié)點之間傳遞. 這一基于業(yè)務邏輯相關性來構建數(shù)據(jù)“安全域” 的方法有效地保護了交易對手方之間的數(shù)據(jù)隱私, 達到了“數(shù)據(jù)適度可見” 的安全目標.
此外, Corda 中存在一個受信任的公共服務Oracle 節(jié)點, 用來將現(xiàn)實世界中的事實(例如股票價格、外匯牌價、銀行利率等等) 注入到Corda 網(wǎng)絡中, 使之可以成為交易的一個輸入項. 同時為了確保引入外部數(shù)據(jù)后賬本交易數(shù)據(jù)的確定性(deterministic), Oracle 節(jié)點會對嵌入外部事實的交易進行簽名. 為了保護交易方的數(shù)據(jù)隱私, Oracle 節(jié)點采用了名為“交易部分屏蔽”(transaction tear-offs) 的數(shù)據(jù)簽名方案,系統(tǒng)將交易簽名數(shù)據(jù)的哈希計算過程構造成一棵Merkle 樹, 待簽名數(shù)據(jù)的哈希結果為Merkle 樹的根值.從而可以實現(xiàn)將一個保留了必要哈希分支的子樹發(fā)送給Oracle 節(jié)點, 使它仍然能按照簽名結構完成對整個交易的簽名. Corda 對記錄交易歷史的Merkle 樹結構進行剪枝后只留下原始數(shù)據(jù)的哈希運算結果, 從而保護了數(shù)據(jù)隱私. “交易部分屏蔽” 的哈希計算過程如圖6 所示.
圖6 Transaction tear-off的哈希計算過程Figure 6 Hash computation of transaction tear-off
Quorum
企業(yè)以太坊聯(lián)盟(enterprise ethereum alliance, EEA) 是一個會員驅動的標準化組織, 旨在開發(fā)基于以太坊的開放性企業(yè)級區(qū)塊鏈標準[43]. 摩根大通在EEA 框架的基礎上基于以太坊構建了開源的企業(yè)級區(qū)塊鏈平臺Quorum[44], 其通過引入私有交易和私有存儲的概念來實現(xiàn)交易內(nèi)容隱藏.
以太坊所有公開交易的數(shù)據(jù)都存儲在區(qū)塊鏈上, 任何人都可以訪問所有交易數(shù)據(jù). 為了實現(xiàn)交易內(nèi)容的隱藏, Quorum 將系統(tǒng)中的交易分為公有交易和私有交易, 以對其采用不同的交易處理流程和存儲方式.私有交易的處理流程如圖7 所示.
圖7 Quorum 私有交易處理流程Figure 7 Quorum private transaction flow
首先, 不同于公有交易, 私有交易加入了一個交易接受者身份(公鑰) 列表, 表明該私有交易應該只發(fā)送給這些列表成員. 其次, 為了單獨處理私有交易, Quorum 引入了交易管理器(Transaction Manager)和飛地(Enclave) 組件, Transaction Manager 專門用于處理和分發(fā)私有數(shù)據(jù); Enclave 則為同Transaction Manager 一一對應的組件, 專門用于完成數(shù)據(jù)加解密和密鑰管理工作. 最終, 私有交易數(shù)據(jù)荷載加密存儲在Transaction Manager 中, 而相應智能合約的執(zhí)行結果則存儲在相應節(jié)點的私有存儲數(shù)據(jù)庫中,Quorum 區(qū)塊中存儲的則是公有交易以及私有交易加密后的哈希值. 這樣既保護了私有交易隱私, 又實現(xiàn)了私有交易和公有交易參與統(tǒng)一的共識. 私有交易的具體執(zhí)行流程如下:
(1) 客戶端發(fā)送私有交易到Quorum 節(jié)點, 并在交易中直接指明每個接收者身份(公鑰).
(2) Quorum 節(jié)點將私有交易傳送至對應的Transaction Manager.
(3) Transaction Manager 通過Enclave 為每個接收者生成加密交易荷載并計算其哈希值.
(4) Transaction Manager 將私有交易的加密荷載及其哈希值分別點對點的傳播至每個交易接收方的Transaction Manager.
(5) 數(shù)據(jù)傳播成功后, Transaction Manager 將私有交易加密荷載的哈希值返回至對應的Quorum 節(jié)點.
(6) Quorum 節(jié)點將私有交易加密荷載的哈希值打包進Quorum 區(qū)塊. 當每個Quorum 節(jié)點執(zhí)行該以太坊交易時, 需要基于該以太坊交易的荷載(即私有交易加密荷載的哈希值) 向對應的Transaction Manager 請求原始的私有交易荷載.
(7) 根據(jù)Quorum 節(jié)點的請求, 各個交易接收方的Transaction Manager 通過Enclave 和接收到的加密私有交易荷載解密出原始的私有交易荷載.
(8) 交易接收方的Transaction Manager 將原始的私有交易荷載返回至對應的Quorum 節(jié)點, 非交易接收方則返回空消息.
(9) 交易涉及的每個Quorum 節(jié)點將私有交易提交至智能合約運行, 智能合約會將執(zhí)行私有交易時生成的狀態(tài)數(shù)據(jù)存儲至私有存儲數(shù)據(jù)庫.
綜上所述, Corda 通過引入點對點交易和數(shù)據(jù)傳輸、交易部分屏蔽簽名方案來構建交易關聯(lián)方之間的數(shù)據(jù)“安全域”, 從而實現(xiàn)了交易內(nèi)容的隱私保護. 但這一方案也存在一定的問題: Corda 的整體架構設計思想是基于中心化背書的點對點交易模式, 它在帶來信息適度可見和高處理性能優(yōu)勢的同時, 卻也具有不適合于“多方共識確認” 交易模式的弱點. 而“去(多) 中心化” 模式下的多方交易共識確認恰恰是區(qū)塊鏈的典型應用場景; Hyperledger Fabric 通過引入通道和私有數(shù)據(jù)集實現(xiàn)了細粒度的數(shù)據(jù)隱私保護機制, 以適用于多方交易過程中的私有數(shù)據(jù)保護. Quorum 采用類似的設計思想, 通過引入私有交易和私有存儲的概念實現(xiàn)了私有交易的數(shù)據(jù)隱私保護機制. 但這一類方案也存在一定的問題: 首先, 需在公共區(qū)塊鏈存儲之外引入私有狀態(tài)庫和點對點數(shù)據(jù)分發(fā)機制用于實現(xiàn)隱私數(shù)據(jù)的存儲, 這在一定程度上增加了系統(tǒng)實現(xiàn)的復雜度; 其次, 隱私明文數(shù)據(jù)在被信任節(jié)點的集中單點處理也加大了數(shù)據(jù)泄漏和單點失效的安全風險.
隱藏交易驗證需要實現(xiàn)密文條件下交易內(nèi)容的合法性和正確性驗證, 所要驗證的主要內(nèi)容包括: 隱藏交易的平衡性驗證, 即確保交易輸入輸出的金額相等, 一般通過同態(tài)密碼或零知識證明技術來實現(xiàn); 交易金額的范圍證明, 即確保交易金額在合法范圍內(nèi), 防止出現(xiàn)支付負值金額而憑空產(chǎn)生貨幣的問題, 一般通過零知識證明或環(huán)簽名技術來實現(xiàn); 貨幣的合法性驗證, 即在使用全局混幣方案的密碼貨幣中(如零幣),確保支付貨幣為一個已發(fā)行的合法貨幣, 一般通過零知識證明技術來實現(xiàn).
3.2.1 同態(tài)密碼
Pedersen 承諾的加法同態(tài)特性為礦工(驗證者) 使用金額承諾進行隱藏交易驗證提供了便利. 假設一個交易的輸入為v1,v2, 輸出為v3. 為了確保交易平衡, 即:v1+v2=v3, 構建的交易承諾應滿足:
Wang 等人[28]希望使用Paillier 方案利用Paillier 算法同態(tài)性來實現(xiàn)交易平衡性驗證. 但在這一方案中會使用不同接收方的公鑰來對輸出金額(UTXO) 進行Paillier 加密, 不同公鑰的加密結果使得無法利用Paillier 算法的同態(tài)特性進行平衡性驗證. 因此, 該方案引入一個dumb account 賬戶, 并對每一個輸出金額均使用dumb account 公鑰來進行Paillier 加密并將這一加密結構構造為一個承諾, 從而利用基于承諾的零知識證明方案來實現(xiàn)交易非負性和平衡性驗證. 交易驗證通過后會寫入?yún)^(qū)塊, 接收方通過查詢區(qū)塊收到各自隱藏金額并使用私鑰解密獲得明文交易金額. 因此, 該方案在使用Paillier 加密為接收方傳遞交易金額的同時, 還需引入dumb account 賬戶的加密(承諾) 金額, 這額外增加了系統(tǒng)的存儲開銷.
PGC 方案[30]則是為基于賬戶模型的區(qū)塊鏈交易系統(tǒng)而設計的, 它利用Twisted-ElGamal 同態(tài)加密算法對交易金額和賬戶余額進行加密, 從而可實現(xiàn)交易過程中賬戶余額的密態(tài)加減操作. 同時, Twisted-ElGamal 算法又是對零知識證明友好的, 基于加密結構便于構建出金額非負性、金額上限、金額比例等交易規(guī)則審計算法.
綜上所述, 在隱藏交易驗證方面, 加法同態(tài)承諾如Pedersen 承諾和同態(tài)加密方案能夠實現(xiàn)隱藏交易的平衡性驗證, 但同態(tài)承諾無法由承諾結果直接獲得承諾值, 而同態(tài)加密能夠實現(xiàn)承諾金額的傳遞但不利于零知識證明方案的構建. 因此, 二者均需增加額外的密碼運算來實現(xiàn)完整的密態(tài)交易和公開驗證功能.Twisted-ElGamal 算法在基于賬戶的交易模型下構建了高效的實現(xiàn)方案, 但如何在基于UTXO 的交易模型下實現(xiàn)密態(tài)交易驗證仍有待進一步研究. 此外, 同態(tài)加密方案在性能上存在不足, 目前全同態(tài)加密算法(fully homomorphic encryption, FHE)[45,46]的運行效率較低, 存在密文膨脹等問題, 只能適用于小數(shù)據(jù)規(guī)模場景, 無法在大規(guī)模數(shù)據(jù)場景中得到普遍應用.
3.2.2 零知識證明
零知識證明(zero-knowledge proof) 在區(qū)塊鏈交易內(nèi)容隱私保護方面發(fā)揮了重要作用. 零知識證明[47,48]是一種涉及兩方或多方的密碼協(xié)議, 證明者能夠在不泄露任何秘密內(nèi)容的情況下向驗證者完成秘密信息的證明[49]. 目前很多方案如零幣和門羅幣[50]等都是用零知識證明來實現(xiàn)隱藏交易內(nèi)容的驗證.
零幣Zcash[25,32]使用zk-SNARKs[51,52]非交互式零知識證明完成隱藏交易的正確性驗證. zk-SNARKs 將任意計算條件用算術電路C表示, 輸入數(shù)據(jù)后, 0 或1 作為驗證結果返回. zk-SNARKs 在Zcash 系統(tǒng)中的應用如圖8 所示. zk-SNARKs 主要有以下三個步驟:
圖8 Zcash 中的零知識證明協(xié)議Figure 8 Zero-knowledge proof in Zcash
(1) KeyGen(1λ,C)→(pk,vk). 輸入一個安全參數(shù)λ和F域-算術電路C, 生成零知識證明中的證明密鑰pk 和驗證密鑰vk.
(2) Prove(pk,x,a)→π. 輸入一個證明密鑰pk、公開信息x和證明者擁有的秘密信息a, 輸出一個非交互式證明π, 來表示證明者確實擁有某些知識.
(3) Verify(vk,x,π)→b. 輸入一個驗證密鑰vk 和公開信息x, 一個證明π, 如果驗證者被說服, 即他相信證明者確實擁有某種知識, 則驗證輸出為b=1.
表3 零知識證明系統(tǒng)比較Table 3 Comparison of three zero-knowledge proof systems
此外, Ma 等人提出了一種新的零知識證明方案NIZK[58], 該方案借鑒了Camenisch 等人于2008 年提出的基于Boneh-Boyen 簽名[59]的交互式范圍證明方案[60], 采用Fiat-Shamir 啟發(fā)式將方案構造為非交互式零知識證明方案. 該方案大幅縮短了零知識證明的生成時間, 但生成的零知識證明信息長度更長.Ma 等人方案同其他零知識證明方案的性能比較如表4 所示.
方案使用jsnark[63]前端編譯工具生成電路, 電路規(guī)模在220量級. 通用零知識證明方案實現(xiàn)時選取的是橢圓曲線bn128 上的有限域, 滿足128 比特安全性. 表4 中的C為電路大小,u,l為限定明文消息空間大小的參數(shù), 明文消息空間為[0,2L) , 其中L=u×l.
表4 NIZK 同其他零知識證明方案的比較[58]Table 4 Comparison of NIZK scheme to existing ZKP systems [58]
3.2.3 環(huán)簽名
在Maxwell 提出的保密交易方案中采用了Borromean 環(huán)簽名[64]來實現(xiàn)承諾值的范圍證明. 在基于Borromean 環(huán)簽名的保密交易方案中, 范圍證明方案的思路為首先將要證明的金額v分解為二進制形式,然后計算金額各位的承諾值, 并將承諾值作為公鑰生成環(huán)簽名, 接收方對簽名等進行驗證判定交易是否有效. 假設金額v ∈[0,2n),n為公開參數(shù), 金額v的Pedersen 承諾為commit=kG+vH, 已知G,H ∈G,G是G 的生成元,H的離散對數(shù)未知. 證明者有承諾commit 以及k和v, 生成證明π表明v ∈[0,2n).Borromean 環(huán)簽名實現(xiàn)承諾金額范圍證明和驗證的具體步驟如下:
首先, 發(fā)送方根據(jù)金額v生成其范圍證明π:
綜上所述, 門羅幣使用環(huán)簽名技術實現(xiàn)了交易金額的范圍證明, 保證交易金額處于合理區(qū)間. 但基于Borromean 環(huán)簽名的范圍證明方案生成的證明長度較大, 證明長度與所要證明的區(qū)間上界成線性相關, 交易大小主要受范圍證明長度影響, 導致效率較低. 因此最新的Monero 方案使用Bulletproofs 技術替換Borromean 環(huán)簽名, 優(yōu)化了范圍證明算法的性能, 基于Bulletproofs 方案的相關改進算法[65]也被提出.Zcash 方案使用zk-SNARKs 零知識證明能夠在不泄露明文數(shù)據(jù)的情況下完成隱藏交易驗證, 僅需生成很小數(shù)據(jù)量的證明就可完成大量數(shù)據(jù)的驗證. 但零知識證明技術在提供了良好的交易內(nèi)容隱私保護的同時,也存在一些不足: 首先, 由于系統(tǒng)引入了零知識證明算法, 使得隱藏交易驗證算法的開銷增大, 吞吐量與響應速度有待進一步提高; 其次, zk-SNARKs 在系統(tǒng)初始化時需要信任中心安全地生成公共參數(shù), 存在初始化各方共謀偽造新幣的安全風險, zk-STARKs 無需系統(tǒng)初始化, 并且是后量子安全的, 但其證明長度過長,在區(qū)塊鏈的實際應用中有一定局限性; 此外, 以上這些方案均未考慮實際應用中的交易內(nèi)容監(jiān)管問題.
為了解決區(qū)塊鏈隱私保護問題, 多種密碼技術應用到區(qū)塊鏈系統(tǒng)中用于實現(xiàn)交易內(nèi)容隱藏和隱藏交易驗證, 但同時也對區(qū)塊鏈交易監(jiān)管提出了更多挑戰(zhàn). 基于公有鏈的密碼貨幣多強調(diào)隱私保護, 無法實現(xiàn)交易內(nèi)容監(jiān)管, 為了滿足行業(yè)應用的監(jiān)管需求, 一些具有監(jiān)管功能的隱私保護方案也陸續(xù)被提出[66-70], 例如PRCash[71]、zkLedger[72]、FabZK[24]、PGC[30]以及ACT[67]方案等.
PRCash[71]使用基于UTXO 的Mimblewimble 交易模型來構建密態(tài)交易. 交易方使用交易金額的Perdersen 承諾在公開賬本中記錄交易, 同時系統(tǒng)引入監(jiān)管方, 基于用戶交易身份來限定用戶在一段時間內(nèi)的交易總額. 當用戶向系統(tǒng)注冊時, 監(jiān)管方使用隨機化簽名(randomizable signature)[73]來為用戶公鑰pku簽發(fā)證書. 當用戶接收到一筆新的交易輸出時, 如果用戶使用匿名身份進行交易, 需通過私鑰sku和偽隨機函數(shù)(pseudorandom function)[74]生成匿名身份PIDe接收交易輸出, 同時通過零知識證明生成監(jiān)管證明信息, 以確保PIDe生成私鑰和簽發(fā)證書中公鑰的正確對應以及匿名身份PIDe在當前時段的合法性. 此外, 用戶還需累加PIDe身份對應的所有UTXO 并通過范圍證明表明總額沒有超過限值; 如果用戶使用實名身份進行交易, 需使用監(jiān)管方公鑰pkr加密用戶公鑰pku并通過零知識生成監(jiān)管證明信息,以確保加密的公鑰pku同之前簽發(fā)證書中的公鑰pku相同, 從而完成交易. 監(jiān)管方在接收到交易中的上述監(jiān)管證明信息后, 如果驗證通過即可確認交易并寫入?yún)^(qū)塊. PRCash 方案提供了用戶派生身份的靈活驗證和匿名交易總額的有效監(jiān)管.
Naganuma 等人[69]在Zerocoin 協(xié)議的基礎上提出了可審計的Zerocoin 方案, 審計方能夠監(jiān)管某筆交易的交易軌跡. Zerocoin 在區(qū)塊鏈賬本中使用Pedersen 承諾來表示生成的密碼貨幣(coin), 為了實現(xiàn)監(jiān)管, 發(fā)送方發(fā)送交易的同時需要附帶審計信息. 審計信息包括: 用監(jiān)管方公鑰加密零幣承諾gyhz的一部分gy生成的密文Enc(pk,gy) 和一個零知識證明π:
零知識證明π用來防止發(fā)送方惡意地偽造審計密文. 交易方在貨幣支付過程中將y值作為貨幣序列號Serial 予以公開. 監(jiān)管方收到監(jiān)管信息后, 用私鑰解密Enc(pk,gy) 得到gy并根據(jù)π驗證密文真實性和監(jiān)管可靠性, 通過比較gy和gSerial將交易的收發(fā)方關聯(lián)起來, 實現(xiàn)交易軌跡監(jiān)管.
表5 zkLedger 賬本存儲結構Table 5 Ledger structure of zkLedger
綜上所述, 目前PRCash、Naganuma、zkLedger、PGC 和ACT 等方案中的隱藏交易監(jiān)管主要通過構建承諾值的零知識證明來實現(xiàn), 交易方使用承諾來隱藏交易金額, 監(jiān)管方使用交易方基于零知識證明生成的監(jiān)管證明信息進行監(jiān)管規(guī)則驗證. 目前的監(jiān)管方案如表6 所示, 這些方案在保護交易內(nèi)容隱私的前提下實現(xiàn)了交易內(nèi)容面向不同規(guī)則的有效監(jiān)管, 如PRCash、Naganuma 和zkLedger 等主要設計了交易總額限制的監(jiān)管規(guī)則, PGC 方案則提供了總額限制、比例規(guī)則等更為多樣的監(jiān)管規(guī)則. 但上述方案仍存在一些問題: PRCash、zkLedger 等方案面向公有鏈結構設計, 對于在聯(lián)盟鏈應用場景中的使用仍需要進一步優(yōu)化; FabZK 給出了Fabric 中的監(jiān)管架構設計, 但該方案需引入額外的鏈外賬戶存儲并要求監(jiān)管方需保持實時在線, 這在實際應用中具有一定的局限性; ACT 方案計算審計令牌時, 涉及的零知識證明生成時間較長, 如何優(yōu)化審計策略、提高審計效率需進一步研究. 雖然上述方案均提供了一些審計規(guī)則, 但對于日益普及的區(qū)塊鏈應用而言監(jiān)管規(guī)則仍顯不足, 如都無法滿足某些應用場景下監(jiān)管方監(jiān)管每筆交易金額的需求.
表6 相關可監(jiān)管隱私保護方案對比Table 6 Comparison of privacy protection schemes with regulation
此外, 通過將交易內(nèi)容和交易身份隱私保護方案相結合, 一些具有強隱私保護特性的區(qū)塊鏈交易系統(tǒng)也得到了廣泛應用. 本節(jié)參考姚前等人[1]關于區(qū)塊鏈身份隱私的研究, 對于交易內(nèi)容和交易身份隱私保護技術的結合展開進一步的分析討論.
(1) 同態(tài)密碼同無標識交易的結合
無標識交易技術是指在鏈上資產(chǎn)的表示(如UTXO) 中不包含資產(chǎn)所有者的身份標識, 資產(chǎn)權屬變更過程中的交易確認是由用戶采用資產(chǎn)表示中的秘密因子進行相應的密碼運算來完成的, 接收方通過密碼運算的結果來判斷資產(chǎn)權屬和交易確認的正確性[1]. 公開賬本中記錄的UTXO 中不再存有標識用戶身份的公鑰信息, 這使得所有基于交易地址的關聯(lián)分析技術失效, 尤其是增加了交易可鏈接性的分析難度. 基于Pedersen 承諾和無標識交易技術構建的Mimblewimble 方案[19]可有效地確保用戶交易隱私. 它通過同態(tài)承諾隱藏了交易金額, 并且利用承諾中的盲因子結合數(shù)字簽名實現(xiàn)了交易行為的確權和交易輸入輸出的平衡性驗證. Mimblewimble 在交易輸出承諾的構建過程中指定接收方隨機秘密選擇交易輸出的盲化因子r, 并由此實現(xiàn)對該UTXO 的權屬控制. 由于這一過程帶來了輸入輸出承諾盲化因子的差值(excess), 因此也將礦工對交易平衡的等式驗證過程轉化為驗證交易雙方共同構建以盲化因子差值為私鑰的正確簽名過程. 這一組合方案在開源密碼貨幣項目Grin[75]和Beam[76]中得到了應用.
(2) 同態(tài)密碼同自主混幣的結合
“混幣” 機制是將真實交易者發(fā)起的交易(UTXO) 隱藏在一個交易集合中, 從而使得觀察者無法確認真正的交易, 也即無法確認同每一個UTXO 相關聯(lián)的用戶身份. 它是區(qū)塊鏈系統(tǒng)中實現(xiàn)交易身份隱藏的基本思想. 自主混幣是指真實交易者在混幣過程中無需第三方中心機構和其他用戶的參與, 可自主完成混幣過程[1]. 自主混幣的實現(xiàn)機制為環(huán)簽名算法. 基于Pedersen 承諾的同態(tài)密碼方案結合自主混幣技術構建的RingCT (ring confidential transaction) 方案可有效地確保用戶交易隱私. 它將同態(tài)承諾隱藏交易金額同可鏈接環(huán)簽名隱藏交易身份相結合, 通過可鏈接環(huán)簽名將真實交易者身份隱藏在匿名集合中并完成了支付確權, 借助簽名可鏈接性實現(xiàn)了貨幣防雙花. 在交易內(nèi)容驗證方面采用同態(tài)承諾確保交易輸入輸出的平衡性驗證, 基于Bulletproofs 的零知識證明方案實現(xiàn)了交易金額的范圍證明. 這一組合方案在門羅幣[22]中得到了應用.
(3) 信息加密同全局混幣的結合
全局混幣技術是將待支付貨幣的真?zhèn)悟炞C問題轉化為一個已發(fā)行貨幣列表的成員證明問題, 從而實現(xiàn)支付貨幣在全部貨幣中的混淆[1]. 基于對稱加密的交易信息加密方案結合全局混幣技術構建的Zerocash方案可有效地確保用戶交易隱私. Zerocash 將系統(tǒng)中所有的貨幣承諾值構建為一棵Merkle 樹, 當真實交易者執(zhí)行交易時, 交易發(fā)送方通過零知識證明來確保支付貨幣為Merkle 樹中的成員并完成支付確權, 從而實現(xiàn)了真實身份在全部用戶身份集合中的混淆. 在交易內(nèi)容隱私保護方面, 交易發(fā)送方首先使用Curve25519 密鑰協(xié)商協(xié)議協(xié)商對稱密鑰, 而后通過對稱加密將交易內(nèi)容秘密傳送給交易接收方, 并通過zk-SNARKs 零知識證明方案確保密態(tài)交易內(nèi)容的規(guī)則合法性驗證. 這一過程在保護交易內(nèi)容的同時也確保了交易接收方的身份隱私. 這一組合方案在零幣[25]中得到了應用.
(4) 基于業(yè)務邏輯的數(shù)據(jù)隔離同可控匿名認證的結合
可控匿名認證是指在用戶身份標識的建立和認證過程中, 除監(jiān)管方以外不允許其他人確定交易者的真實身份. 在必要時, 監(jiān)管方可恢復出匿名化后交易方的真實身份[1]. 可控匿名認證在聯(lián)盟鏈中得到了廣泛應用, 通常用戶在實名申請后獲得一個匿名證書用于交易過程中的身份標識, 監(jiān)管者在必要時可通過證書和實名注冊信息恢復出用戶的真實身份. 基于業(yè)務邏輯的數(shù)據(jù)隔離技術同可控匿名認證方法[1]構造的隱私保護方案可有效地確保用戶交易隱私. 聯(lián)盟鏈中的用戶在通過匿名證書認證身份后, 可通過數(shù)據(jù)隔離機制控制隱私交易內(nèi)容的知悉范圍. 聯(lián)盟鏈中心化背書的特點也更便于實現(xiàn)身份的可控匿名和隱藏交易的快速驗證. 這一組合方案在聯(lián)盟鏈Hyperledger Fabric[40]和Corda[42]中得到了應用.
區(qū)塊鏈系統(tǒng)中的交易內(nèi)容隱私保護技術已經(jīng)成為當前研究的熱點. 密碼學技術在實現(xiàn)區(qū)塊鏈的交易內(nèi)容保護和監(jiān)管上發(fā)揮著重要作用. 首先, 在交易內(nèi)容隱藏方面, 目前的區(qū)塊鏈系統(tǒng)多采用保密交易(confidential transaction) 和加密技術. 已有的加密方案如一次性認證對稱加密方案、屬性加密等提供了更細粒度的內(nèi)容隱私保護, 但也給隱藏交易的驗證帶來了更多挑戰(zhàn). 聯(lián)盟鏈如Hyperledger Fabric, Corda和Quorum 等則通過通道隔離劃分“安全域” 以及鏈外私有數(shù)據(jù)存儲來解決交易內(nèi)容隱藏問題. 其次, 在隱藏交易驗證方面, 區(qū)塊鏈系統(tǒng)多采用基于零知識證明的范圍證明方案, 以及利用同態(tài)承諾方案的同態(tài)特性實現(xiàn)交易合法性和平衡性驗證, Hyperledger 等聯(lián)盟鏈則使用中心化背書方式來完成隱藏交易驗證. 最后, 目前的交易內(nèi)容監(jiān)管主要采用零知識證明技術通過構造可驗證加密方案來實現(xiàn)隱藏內(nèi)容監(jiān)管.
隨著區(qū)塊鏈技術的深入普及和推廣, 區(qū)塊鏈交易內(nèi)容隱私保護技術在以下幾個方面也有待進一步研究:
第一, 新型的區(qū)塊鏈交易內(nèi)容隱私保護算法的研究與設計一直是關注的熱點. 隨著區(qū)塊鏈系統(tǒng)新應用場景的不斷出現(xiàn), 需要設計滿足新需求的區(qū)塊鏈交易內(nèi)容隱私保護算法. 區(qū)塊鏈的應用已不僅限于密碼貨幣的點對點支付場景, 多方協(xié)作、數(shù)據(jù)交易、身份認證和隱私計算等新型應用場景下的隱私保護需求更加多樣, 參與方數(shù)量更多, 交互方式更加多元, 保護內(nèi)容更加多樣. 例如: 目前的安全多方計算+ 區(qū)塊鏈的隱私計算方案受到廣泛關注, 區(qū)塊鏈系統(tǒng)為安全多方計算過程中的數(shù)據(jù)確權、可信審計和數(shù)據(jù)流通提供了有效的支撐, 未來隨著區(qū)塊鏈運算性能和存儲容量的進一步提高, 能否在確保隱私的條件下提供更為靈活的隱私計算方案也備受期待. 因此, 如何設計多應用場景下細粒度隱私保護方案仍是未來的研究熱點.
第二, 交易內(nèi)容隱私保護算法性能和安全性方面的不足也有待進一步提高. 引入基于復雜密碼學算法的隱私保護方案一方面會降低原有區(qū)塊鏈系統(tǒng)的效率, 另一方面也帶來了安全證明方案難于構建的問題.例如, 2019 年Zcash 零知識證明系統(tǒng)存在的缺陷[77]就會導致貨幣偽造的問題. 這些不足必然會限制其進一步的大規(guī)模應用. 因此, 如何設計更為高效的密碼算法、提出更為完備的安全模型、構建更為嚴謹?shù)淖C明方案也是亟待解決的關鍵問題.
第三, 隨著區(qū)塊鏈技術在金融、政務、社會治理等領域的廣泛應用, 對于交易過程的監(jiān)管需求日益增強. 如何在監(jiān)管方及交易方共同參與模式下設計高效安全的交易內(nèi)容保護方案, 既確保交易方隱私又符合行業(yè)監(jiān)管要求, 達到隱私與監(jiān)管的平衡, 也有待進一步研究.
第四, 在隱私保護算法實現(xiàn)層面, 通過引入專用密碼設備來提升零知識證明以及同態(tài)加密等算法的計算性能、引入可信執(zhí)行環(huán)境(如SGX) 為隱私保護方案提供安全的計算環(huán)境以彌補密碼方案的不足也具有很好的研究前景.