零知识证明应用到区块链中的技术挑战
零知識證明應用到區塊鏈中的技術挑戰
李康1,2, 孫毅1,2, 張珺3, 李軍4, 周繼華5, 李忠誠1
1. 中國科學院計算技術研究所,北京 100190
2. 中國科學院大學,北京 100049
3. 內蒙古大學,內蒙古自治區 呼和浩特 010021
4. 布比(北京)網絡技術有限公司,北京 100190
5. 重慶金美通信有限責任公司,重慶 400030
摘要:區塊鏈是一種以密碼學算法為基礎的點對點分布式賬本技術,然而,公開透明的區塊鏈賬本輔以社會學挖掘、數據挖掘等統計學方法,使得用戶的隱私面臨重大威脅,因而隱私保護成為當前區塊鏈技術研究的熱點??偨Y了已有的隱私保護方案,重點聚焦于零知識證明技術,闡述并分析了零知識證明應用到區塊鏈隱私保護方案中的技術挑戰,并給出了具有指導意義的解決方案。
關鍵詞:區塊鏈;隱私保護;零知識證明
doi:10.11959/j.issn.2096-0271.2018006
論文引用格式:李康, 孫毅, 張珺, 等. 零知識證明應用到區塊鏈中的技術挑戰[J]. 大數據, 2018, 4(1): 57-65.
LI K, SUN Y, ZHANG J, et al. Technical challenges in applying zero-knowledge proof to blockchain[J]. Big Data Research, 2018, 4(1): 57-65.1? 引言
區塊鏈的出現首次從技術上解決了基于信任的中心化模型帶來的安全問題,它基于密碼學算法保證了價值的安全轉移,基于散列鏈及時間戳機制保證了數據的可追溯、不可篡改特性,基于共識算法保證了節點間區塊數據的一致性。區塊鏈這種技術體系正在深刻地變革著各行各業的生產方式,成為未來數字經濟時代價值互聯網的構建基石。
自2008年比特幣提出以來,區塊鏈技術得到了快速發展和應用,承載著各種功能的區塊鏈平臺應運而生,如智能合約平臺以太坊、去中心存儲平臺Filecoin以及金融商業級解決方案Corda等。基于區塊鏈的行業應用也越來越豐富,例如,倫敦證券交易所、倫敦清算所、法國興業銀行、瑞士瑞銀集團以及歐洲清算中心等機構聯合成立的區塊鏈集團將區塊鏈技術應用到證券領域,旨在通過區塊鏈技術改變證券交易的清算和結算方式;美國Factom公司將區塊鏈技術應用到數字存證領域,嘗試通過區塊鏈技術革新商業社會以及政府部門的數據管理和數據記錄方式;美國Chronicled公司將區塊鏈技術應用到供應鏈溯源領域,保證商品的真實性,保護消費者權益。
然而,區塊鏈的公開透明也給用戶的隱私保護帶來了巨大的挑戰。區塊鏈參與方維護一個共同的賬本,皆可查看并且驗證其他參與方的交易數據,這就給參與方的隱私泄露開了一道大門,如圖1所示[1]。因此,隱私保護成為了制約區塊鏈應用發展的瓶頸之一。
圖1 ?2013年比特幣交易圖譜
為此,如何在不犧牲區塊鏈人人可驗證、公開透明等特性的前提下,使參與方的隱私數據受到保護,成為當前區塊鏈研究領域的主要科學問題。
針對上述現狀,本文將總結區塊鏈領域中現有的隱私保護方案,重點圍繞零知識證明技術,闡述其如何應用到區塊鏈中實現交易隱私保護,并介紹零知識證明與區塊鏈結合中亟待解決的幾個技術挑戰。
2 ?區塊鏈隱私保護方案研究現狀
區塊鏈中最主要的組成部分就是交易,交易是驅動區塊鏈系統運轉的信息載體,通過交易,區塊鏈節點可以將資金在用戶之間進行轉移,并進行一系列更為復雜的操作,比如執行相關的智能合約。交易涉及的基本元素有發送方、接收方、金額,雖然發送方與接收方在區塊鏈系統中一般表示為公鑰地址,但是輔之社會學挖掘方法,可以將現實世界中的真實身份與公鑰地址聯系起來,而區塊鏈作為公開的交易賬本,任何人均可從中查出其他用戶在該系統中發生過的行為,如資金流轉過程、合約執行過程等,從而泄露了用戶的隱私。因此,如何保證用戶在區塊鏈系統中的操作行為不被其他人獲取是區塊鏈隱私保護的主要內容,而實現這一目標的解決方案就是保護交易的關鍵性信息不被泄露。
自比特幣后的區塊鏈平臺紛紛開始重視交易的隱私保護,并從協議級別支持交易的隱私保護,而且無需喪失區塊鏈公開可驗證的特性,這為區塊鏈的進一步應用發展奠定了基礎。
達世幣是最早在區塊鏈中實現了交易隱私保護并且得到大規模應用的平臺。它采用了一種稱為“混幣”的技術,實現了匿名發送(darksend)的功能。匿名發送是混幣技術的一種實現版本,基本思想是使用網絡中的主節點將來自多個用戶的交易混合形成單筆交易。在達世幣匿名發送中,每個用戶需將交易發送至主節點,主節點需要至少3筆交易進行混合,然后形成單一交易中的多個輸出,同時確保輸出亂序。為了從整體上提高系統隱私性,規定使用固定面值0.1、1、10、100的交易金額,在每輪混幣過程中,所有用戶應該提交相同面值的輸入與輸出,除了使用相同面值外,交易手續費會從交易中移除,并且在獨立、不可鏈接的交易中支付。在匿名發送中,主節點承擔了保護隱私的責任,存在被攻擊的可能。通過引入 鏈式混合(chaining)技術,用戶會隨機選擇多個主節點,這些主節點構成一條鏈,最后輸出混合后的交易;通過引入基于中繼系統的盲化技術(blinding),用戶可不直接向交易池提交交易,相反在全網中隨機選擇主節點,然后要求該主節點將交易提交至目標主節點,這樣目標主節點就難以獲取用戶的真實身份。但是達世幣的局限性在于,節點始終需要信任網絡挑選的主節點以及參與混幣服務的用戶,一旦主節點被控制,或者參與混幣的用戶是惡意的,都會在一定程度上導致用戶隱私泄露。
為了避免達世幣中存在的主節點信任風險,門羅幣采用了一種不依賴于主節點的加密混合方案,其中涉及兩個關鍵的技術點:一是隱秘地址技術,另一個是環簽名技術。隱秘地址的基本原理是,當發送者發送一筆資金時,首先通過接收者地址,基于橢圓曲線生成一次性公鑰,然后發送者將交易連同附加信息廣播到區塊鏈網絡中,接收者時刻使用自己的私鑰監測區塊鏈中的交易,如果能成功解析該交易,證明發送者已發送相關交易;當接收者想要花費交易時,使用私鑰連同附加信息計算出簽名私鑰,對交易進行簽名即可花費,保障了輸入與輸出地址不可關聯的特性。環簽名基本思想是利用自己的私鑰以及若干個用戶的公鑰對交易簽名,驗證簽名時,則使用其他人的公鑰以及簽名中包含的參數,從而達成隱藏發送者信息的目的。但是門羅幣的局限性在于,用戶在使用環簽名技術時,需要依賴其他用戶的公鑰,如果其他用戶是惡意的,則會在一定程度上導致用戶隱私泄露。
2016年11月,國際著名銀行區塊鏈聯盟 R3組織開源了其為金融機構打造的商業級解決方案——Corda平臺。在金融機構業務環境中,隱私保護是必不可少的一環,Corda在這方面下了不少工夫。首先,傳統的區塊鏈中,所有節點都會維護一個共同的賬本,隱私泄露的可能性會大大增加,因此,Corda直接摒棄了交易進行廣播的行為,只在交易相關方之間進行交易的傳播與見證。其次,采取了敏感信息抽離(tear-off)技術,即將敏感信息進行散列,并且組成分層 Merkle樹,使得非敏感信息仍可以通過 Merkle樹進行分支驗證,而一旦出現法律糾紛時,可以申請披露敏感信息,進行驗證。最后,采用了復合簽名技術,通過為每個簽名主體賦予協商好的權重,輔以簽名閾值設置,則可以設置靈活的簽名方案,從而保護簽名人的信息。
2016年 11月,以隱私為主要功能的零幣(Zcash)[2]區塊鏈系統進行了開源,致力于打造一個完美的隱私保護平臺。零幣使用了零知識證明中最為著名的zkSNARKs[3-10]技術,該技術具有非交互性、簡潔性、公開可驗證等特性。零幣系統中有透明地址與匿名地址之分,使用匿名地址可達到交易隱私保護的目的,包含匿名地址的交易稱為隱秘交易,隱秘交易將發送方、接收方、轉移金額全部隱藏在生成的零知識證據中,區塊鏈節點根據事先生成的零知識證據驗證密鑰,可驗證隱秘交易的真實性,保證只有真實的發送方在有真實資產的情況下才可以完成一筆有效的隱秘交易。由于隱秘交易不包含發送方、接收方、轉移金額等關鍵性信息,使得攻擊者無法根據交易追溯性獲取更多信息,從而有效地保護了用戶的隱私。
除上述已應用到區塊鏈平臺進行隱私保護的技術之外,區塊鏈研究人員還將同態加密技術列為隱私保護的關鍵性密碼學技術。同態加密的特性使得交易相關方見證明文,而交易無關方可以見證密文,即可驗證交易的有效性。但是由于同態加密技術效率較為低下,與區塊鏈的結合還處于一個相對初級的階段。如果未來同態加密技術取得重大突破,將會大大促進同態加密技術在區塊鏈系統中的應用。
3 ?零知識證明應用到區塊鏈中的技術挑戰
零知識證明是指一方(證明者)向另一方(驗證者)證明一個陳述是正確的,而無需透露除該陳述正確以外的任何信息,適用于解決任何NP問題。而區塊鏈恰好可以抽象成多方驗證交易是否有效(NP問題)的平臺,因此,兩者是天然相適應的。將零知識證明應用到區塊鏈中需要考慮的技術挑戰分為兩大類:一類是適用于隱私保護的區塊鏈架構設計方案,包括隱秘交易所花資產存在性證明、匿名資產雙花問題、匿名資產花費與轉移、隱秘交易不可區分等技術挑戰;另一類是零知識證明技術本身帶來的挑戰,包括參數初始化階段、算法性能以及安全問題等技術挑戰。
3.1 ?隱秘交易所花資產存在性證明
在不使用零知識證明的區塊鏈系統中,證明交易所花資產存在有兩種模型:未花費的交易輸出(unspent transaction outputs,UTXO)模型與賬戶模型。在UTXO模型中,每一筆交易的輸入會引用來自前一筆交易的輸出,區塊鏈節點會根據保存的UTXO集合來驗證一筆交易花費資產是否存在;在賬戶模型中,每一筆交易會指定發送方,區塊鏈節點會根據保存的賬戶信息驗證一筆交易花費資產是否存在并且足夠。如果在區塊鏈中使用零知識證明保證交易的隱私,首要解決的就是如何證明隱秘交易所花資產存在于區塊鏈上。由于隱秘交易隱藏了發送者地址信息,所以隱秘交易所花資產不能來源于區塊鏈中已存在的透明資產,也就意味著不能明確地引用前一筆交易輸出或者賬戶。因此,隱秘交易花費的資產應該是匿名的,這就需要設計一套機制來發行匿名資產,并對匿名資產進行標識。零幣系統中存在兩種匿名資產發行機制:一是花費“挖礦”所得的獎勵,即將獎勵轉換為匿名資產,這樣做的目的是為了系統中有足夠多的匿名資產,防止匿名資產被追蹤;二是通過正常的交易將透明資產轉換為匿名資產。那么,當隱秘交易花費匿名資產時,如何讓區塊鏈節點相信該匿名資產的存在?零幣系統給鑄造的每一個匿名資產打上一個數字承諾的烙印,并將這些數字承諾組織成一棵Merkle樹,用來標識系統中已出現過的所有匿名資產(包括花費和未花費的)。隱秘交易包含匿名資產所在的Merkle樹的根散列值以及證明該匿名資產確實存在于Merkle樹中的零知識證據,區塊鏈節點通過公開的驗證密鑰可驗證隱秘交易所花費的資產確實在區塊鏈的系統中出現過,但是不知道具體是哪一個匿名資產,也不能證明該匿名資產是否已經被花費,因此會存在雙花問題,接下來將會探討如何解決匿名資產雙花的問題。綜上所述,區塊鏈交易隱私保護方案需要設計一套匿名資產發行機制及存在性證明機制(Merkle樹),確保其公開可驗證特性。
3.2 ?匿名資產雙花問題
區塊鏈要解決的一個最核心的問題就是資金雙花,在UTXO模型的區塊鏈中,區塊鏈節點都要維護UTXO集合,當驗證一筆交易時,將該交易引用的輸出從UTXO集合中移除,這樣當驗證另一筆花費同樣輸出的交易時,會因為在UTXO集合中無法查找到該輸出而變得無效。在賬戶模型中,區塊鏈節點皆維護賬戶狀態,其中包括余額,當驗證交易時,首先會判斷賬戶余額是否足夠,因此也可有效阻止雙花。為了實現區塊鏈交易隱私保護,需要使用匿名資產,然而會存在雙花問題,所以需進一步加強匿名資產在區塊鏈中的屬性。零幣系統賦予每一個匿名資產唯一的序列號,區塊鏈節點將出現過的所有序列號保存起來,當發起一筆隱秘交易時,需要披露序列號,節點檢查該序列號是否已經出現過,這樣能夠有效地阻止匿名資產的雙花問題。注意,應選擇合適的散列函數以及隨機數,編碼匿名資產數字承諾與序列號,確保它們相互關聯,并且一一對應。
3.3 ?匿名資產花費與轉移
在不使用零知識證明的區塊鏈系統中,資產花費是通過公鑰私鑰對進行的,資產轉移是通過在交易中指定接收方地址完成的。為了實現隱私保護,隱秘交易需要隱藏發送者以及接收者,那么區塊鏈節點如何驗證匿名資產被擁有的人花費,并且轉移到了合適的接收方?隱秘交易花費的是匿名資產,匿名資產應至少包括金額、所屬公鑰地址等屬性,因此,在生成匿名資產時,需要將金額、所屬公鑰地址編碼進數字承諾。當花費一筆匿名資產時,將私鑰、公鑰與數字承諾之間的生成關系編碼進零知識證據中,結合匿名資產存在性證明,區塊鏈節點可使用零知識證明的公開驗證密鑰來驗證數字承諾確實存在,而且是通過相應的公鑰地址、金額生成,并且發送交易的人擁有公鑰地址對應的私鑰,確保只有匿名資產所屬者才擁有花費的權利。
匿名資產所有權的轉移是如何發生的?由于隱秘交易中不含接收方,并且每一個匿名資產都與所屬者公鑰相關聯,因此采用銷毀舊匿名資產、生成新匿名資產的策略保證匿名資產的轉移。匿名資產數字承諾的生成需要所屬公鑰地址、金額等信息,并且這些原始信息也要發送給接收方,因此接收方需要提供兩個公鑰,一個是支付公鑰,一個是加密公鑰。支付公鑰供發送者生成數字承諾,加密公鑰供發送者加密生成數字承諾過程中用到的信息。當然,支付公鑰與加密公鑰可以是同一個,但是為了安全著想,建議使用不同的公鑰。接收方需要監聽區塊鏈上的交易,嘗試用自己的私鑰解密隱秘交易中包含的加密信息,如果解密成功,則代表該隱秘交易的接收方是自己,將該匿名資產歸入自己的支付密鑰對賬戶下,便于以后花費。
除匿名資產花費以及轉移外,還應將花費的資產總額與轉移產生的資產總額之間的關系編碼進零知識證據,即花費的資產總額應該大于或等于轉移產生的資產總額,以保證隱秘交易的有效性。
綜上所述,零知識證明應用到區塊鏈中需要設計一套合理的匿名資產所有權驗證規則及轉移規則,將這些規則使用零知識證明技術編碼進零知識證據,從而達到區塊鏈公開可驗證的特性。
3.4 ?隱秘交易不可區分特性
為達到交易隱私保護的目的,區塊鏈中的隱秘交易理應是不可區分的,即無法通過對比、分析隱秘交易對其進行聚類。另外,由于零知識證明需要電路(驗證規則轉換而來)是固定的,因此,在使用零知識證明的區塊鏈中,隱秘交易應該具有固定的輸入與輸出數量,當輸入與輸出數量無法滿足規定數量時,應該構建隨機冗余的輸入與輸出,并且生成的零知識證據中應包含判定輸入與輸出是冗余還是真實的條件,區塊鏈節點接收到隱秘交易時,會根據輸入與輸出的真實與否決定是否處理對應的匿名資產,隱秘交易的不可區分特性進一步加強了交易隱私的保護。
3.5 ?零知識證明初始化階段
零知識證明分交互式與非交互式兩種,而在區塊鏈的系統中,交互式是不適合的,因為區塊鏈中的每一個節點都要驗證交易的有效性,而交互式需要發送方與區塊鏈系統全網驗證節點進行信息交換才能達到保護隱私的目的,所以在區塊鏈系統中應該采取非交互式零知識證明。非交互式零知識證明中, zkSNARKs最為成熟。zkSNARKs算法需要一個中心化的初始化階段,用于創建生成零知識證據的證明密鑰以及驗證零知識證據的驗證密鑰。而區塊鏈本身是一個去中心化的系統,那么zkSNARKs算法的初始化階段無疑給區塊鏈帶來了信任風險,因此如何保證zkSNARKs算法可信地構造初始化階段是應用到區塊鏈中需要克服的關鍵性技術挑戰。零幣系統中設計了一種多方安全計算式的初始化階段[11],即多方在不泄露各自信息的前提下協同計算出證明密鑰與驗證密鑰,但是證明密鑰與驗證密鑰只需生成一次,后續可以反復使用。但是零幣系統使用的多方安全計算局限于少數人,無法讓更多人參與進來,因此后續需要進一步改進多方安全計算的性能,使zkSNARKs算法初始化的構建方案更加去中心化。
3.6 ?zkSNARKs算法性能
zkSNARKs算法目前的性能較差,計算復雜度主要來自于底層依賴的橢圓曲線配對運算,目前零幣系統使用的是BN254橢圓曲線[12],生成一筆隱秘交易對應的零知識證據需要40 s左右,并占用約4 GB內存,這導致無法在現有的移動設備上使用 zkSNARKs算法,并且40 s的時間在高并發場景下也顯得很慢。因此需要精心設計對配對操作友好的橢圓曲線,目前已有相關研究進展,例如零幣系統開發者已設計出BLS12-381[13]橢圓曲線,初步測試,可以將生成零知識證據的時間縮短到7 s,內存占用縮減到40 MB左右,大大提高了zkSNARKs算法的可用性。
zkSNARKs算法安全性依賴于底層選取的橢圓曲線,BN254橢圓曲線實現的安全性約為128 bit,最近有研究[14]表明,BN類橢圓曲線的安全性實際為 110 bit左右。因此設計橢圓曲線時,應考慮該曲線對應的安全性。
綜上所述,當零知識證明算法應用于區塊鏈隱私保護時,需要滿足區塊鏈的核心功能特性,即資產確權及轉移和防止雙花。本文基于零知識證明算法,給出了一套匿名資產發行、轉移機制,在保護用戶隱私的同時有效地實現了資產確權和轉移以及防止雙花的功能特性。在零知識證明與區塊鏈實際結合中,建議使用成熟、高效、安全的zkSNARKs算法,并給出了zkSNARKs算法進一步優化的方向。
4 ?結束語
在數字經濟全球化背景下,區塊鏈技術的出現使得通過互聯網進行價值轉移成為可能,然而區塊鏈的公開透明特性也給人們的隱私保護帶來了巨大的挑戰,因此如何實現隱私保護成為了阻礙區塊鏈進一步發展的難題。
本文詳細講解了當下區塊鏈平臺實現隱私保護采取的方法,重點圍繞零知識證明技術展開,闡述了零知識證明與區塊鏈結合需要考慮的幾個常見問題,并且對零知識證明在區塊鏈中的技術挑戰做了說明。未來區塊鏈的隱私保護仍然任重而道遠,如何實現快速高效、可信的零知識證明算法以及如何實現能夠抵抗量子計算的零知識證明算法,都是需要進一步解決的問題。
點擊下方?閱讀原文?即可獲取全文
作 者 簡 介
李康(1992-),男,中國科學院計算技術研究所碩士生,主要研究方向為區塊鏈技術。
?
孫毅(1979-),男,博士,中國科學院計算技術研究所研究員,主要研究方向為區塊鏈、互聯網服務優化。
?
張珺(1975-),女,博士,內蒙古大學副教授,主要研究方向為未來互聯網、區塊鏈技術。
?
李軍(1974-),男,博士,布比(北京)網絡技術有限公司首席運營官,主要研究方向為區塊鏈技術。
?
周繼華(1979-),男,博士,重慶金美通信有限責任公司副總工程師,主要研究方向為通信安全。
?
李忠誠(1962-),男,博士,中國科學院計算技術研究所研究員,主要研究方向為計算機網絡。
?
《大數據》期刊
《大數據(Big?Data?Research,BDR)》雙月刊是由中華人民共和國工業和信息化部主管,人民郵電出版社主辦,中國計算機學會大數據專家委員會學術指導,北京信通傳媒有限責任公司出版的科技期刊。
關注《大數據》期刊微信公眾號,獲取更多內容
總結
以上是生活随笔為你收集整理的零知识证明应用到区块链中的技术挑战的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 广播和多播
- 下一篇: 作者:李大中(1976-),男,中国联合