秦 捷,馬兆豐,段鵬飛,羅守山
(北京郵電大學(xué) 網(wǎng)絡(luò)空間與安全學(xué)院,北京 100876)
由于傳統(tǒng)區(qū)塊鏈系統(tǒng)在鏈上數(shù)據(jù)完整性和安全性方面存在局限性[1],且鏈上與鏈下的數(shù)據(jù)無法進(jìn)行高效協(xié)同。因此,本文提出在提供隱私保護(hù)的同時(shí)保證鏈上與鏈下數(shù)據(jù)的強(qiáng)關(guān)聯(lián)性。采用零知識證明、鏈下計(jì)算等技術(shù)來解決數(shù)據(jù)協(xié)同的關(guān)鍵性問題,最終實(shí)現(xiàn)區(qū)塊鏈性能拓展與安全性能的提升。將鏈下的交易數(shù)據(jù)生成零知識證明并置于區(qū)塊鏈中存儲,達(dá)到隱私保護(hù)的效果。
區(qū)塊鏈?zhǔn)沁\(yùn)用密碼學(xué)技術(shù)將區(qū)塊以鏈表形式聯(lián)系起來,由眾多參與者一起完成并維護(hù)的分布式賬本[2],由于具有去中心化、不可篡改等特點(diǎn),使其在近幾年受到更深入的研究與使用。其中,以聯(lián)盟鏈為框架的區(qū)塊鏈平臺(例如Fabric)在國內(nèi)得到了越來越多的研究與實(shí)際上的應(yīng)用開發(fā),然而聯(lián)盟鏈中的賬本交易數(shù)據(jù)對于每個(gè)參與維護(hù)區(qū)塊鏈的組織來說是公開透明的,這意味著每個(gè)組織都能夠看見鏈上每個(gè)用戶的交易信息。用戶的交易等隱私信息很容易被泄露,這對于一些特別注重隱私性的行業(yè)是不能夠接受的[3]。
因此,在既可以實(shí)現(xiàn)區(qū)塊鏈去中心化的功能同時(shí)也可以對鏈的信息進(jìn)行安全性的保障是本文研究的重要課題。問題的處理關(guān)鍵在于,交易底層的區(qū)塊鏈信息和實(shí)際應(yīng)用層間的傳輸接口隱私保密度,以及處理交易的智能合約的可驗(yàn)證度。針對與基于零知識證明的隱私保護(hù)有機(jī)結(jié)合的問題,本文在研究同態(tài)的Paillier算法的基礎(chǔ)上,給出了與零知識驗(yàn)證結(jié)合的區(qū)塊鏈隱私保護(hù)方法。
零知識證明是屬于當(dāng)前區(qū)塊鏈鏈下Layer2擴(kuò)容的一種技術(shù)路線,其利用零知識驗(yàn)證進(jìn)行鏈下的安全運(yùn)算形成數(shù)據(jù),隨后再將計(jì)算結(jié)果交給鏈上的智能協(xié)議驗(yàn)證,以建立鏈下計(jì)算鏈上驗(yàn)證的隱私防護(hù)系統(tǒng)[4]。零知識證明技術(shù)盡管在一些數(shù)字貨幣如Zcash、Monero中有了廣泛應(yīng)用[5],但其對數(shù)據(jù)所產(chǎn)生的智能合約證明的效率仍然比較慢?;诖?,將數(shù)據(jù)利用零知識證明和鏈下的加密算法形成證據(jù),然后將計(jì)算結(jié)果交給鏈上的智能合約驗(yàn)證,以建立鏈下計(jì)算鏈上驗(yàn)證的隱私與安全體系[6]。
隨著數(shù)據(jù)時(shí)代的到來,本機(jī)處理數(shù)據(jù)的負(fù)載也越來越大。而云計(jì)算的發(fā)展很好地解決了對數(shù)據(jù)計(jì)算處理的效率問題,但將數(shù)據(jù)外包給第三方服務(wù)器進(jìn)行加密很有可能造成數(shù)據(jù)泄露,因此本方案結(jié)合安全多方協(xié)議,在云服務(wù)器上對數(shù)據(jù)高效計(jì)算的同時(shí)保證數(shù)據(jù)的隱私性。
在基于零知識證明的鏈下計(jì)算鏈上驗(yàn)證的拓展架構(gòu)方案中,會面臨分布式存儲可能帶來的風(fēng)險(xiǎn),使得這種鏈上存證鏈下計(jì)算面臨越來越復(fù)雜的安全考驗(yàn),同時(shí)也增大了數(shù)據(jù)丟失與鏈上鏈下數(shù)據(jù)不協(xié)同帶來的不確定風(fēng)險(xiǎn)。因此,如何在功能拓展的同時(shí)確保鏈上鏈下數(shù)據(jù)協(xié)同統(tǒng)一,規(guī)避數(shù)據(jù)在管理過程中的風(fēng)險(xiǎn)問題是架構(gòu)需要著重討論的內(nèi)容。
針對這一難題,一般給出的解決方案是對數(shù)據(jù)在鏈下進(jìn)行計(jì)算、生成證據(jù)、加密等處理后再上傳,這其中就包括上面所提到的零知識證明的隱私保護(hù)相關(guān)理念與保護(hù)手段[7]。但區(qū)塊鏈與傳統(tǒng)的隱私保護(hù)機(jī)制不同[8],如果直接對數(shù)據(jù)進(jìn)行加密處理后再上傳可能會導(dǎo)致整個(gè)鏈上交易無法完成共識,即便使用零知識證明技術(shù)在加密算法環(huán)境下滿足了隱私安全的需求,但是鏈上數(shù)據(jù)的協(xié)同一致性也會大打折扣。
基于此背景,對于區(qū)塊鏈鏈上數(shù)據(jù)與鏈下數(shù)據(jù)存儲相結(jié)合的可拓展性研究逐漸受到關(guān)注。Niu等人[9]將可搜索加密方案應(yīng)用到了區(qū)塊鏈架構(gòu)上,通過區(qū)塊鏈實(shí)現(xiàn)了不信任的多方間建立可靠數(shù)據(jù)共享的方案,然而該方案基于復(fù)雜的索引與排序算法進(jìn)行設(shè)計(jì),所以計(jì)算開銷過大。文獻(xiàn)[10]提出了一種區(qū)塊鏈多授權(quán)可搜索的屬性基加密方案,并結(jié)合布隆過濾器與可搜索加密減少鏈上搜索時(shí)間,但只能在簇內(nèi)可信的機(jī)制下適用。以上方案在安全性和開銷效率之間的平衡難以得到解決,所以需要一種解決方案來滿足兩者之間的需求平衡。讓鏈上服務(wù)回歸鏈上,鏈下服務(wù)回歸鏈下,實(shí)現(xiàn)鏈上鏈下數(shù)據(jù)協(xié)同,提出鏈上鏈下協(xié)同一致的方案,以達(dá)到區(qū)塊鏈的高可用性、高安全性和高拓展性[11]。
本文主要的研究工作如下:(1)研究基于零知識證明的數(shù)據(jù)上鏈機(jī)制和鏈下計(jì)算技術(shù),實(shí)現(xiàn)隱私保護(hù)功能,提高交易數(shù)據(jù)的隱私保護(hù)能力。(2)提出基于區(qū)塊鏈的數(shù)據(jù)協(xié)同模型,構(gòu)建一種基于區(qū)塊鏈的安全可控?cái)?shù)據(jù)協(xié)同技術(shù)架構(gòu),以此保障交易數(shù)據(jù)流通中的隱私安全。
區(qū)塊鏈科技的源頭是以比特幣為代表的加密貨幣[12],由化名為中本聰?shù)膶W(xué)者在Bitcoin:A Peer-to-Peer Electronic Cash System中提出關(guān)于區(qū)塊鏈的概念,是指一個(gè)可以根據(jù)時(shí)間序列將所有儲存數(shù)據(jù)的區(qū)塊以鏈表的形式組織的數(shù)據(jù)結(jié)構(gòu)體[13]。它可以通過使用密碼學(xué)維持一個(gè)去中心化的賬本,而這種賬本的各節(jié)點(diǎn)間的信息共享關(guān)系是無法修改并且也不能進(jìn)行偽造的。這樣的結(jié)構(gòu)形成了一個(gè)去中心化的分布式系統(tǒng),存儲每個(gè)節(jié)點(diǎn)的歷史交易記錄信息,所有節(jié)點(diǎn)通過共識機(jī)制來保證數(shù)據(jù)庫上數(shù)據(jù)的一致性,并使交易具有可追溯和不可逆轉(zhuǎn)的特性[14]。區(qū)塊鏈技術(shù)最初是用于記錄比特幣等加密貨幣交易的數(shù)據(jù)結(jié)構(gòu),加密貨幣的技術(shù)原理是利用區(qū)塊鏈的分布式網(wǎng)絡(luò)基于密碼學(xué)算法來生成的,代表著區(qū)塊鏈技術(shù)的1.0時(shí)代——數(shù)字貨幣時(shí)代[15]。 隨著數(shù)字加密貨幣技術(shù)平臺的發(fā)展,后來在數(shù)字貨幣的基礎(chǔ)上加入了智能合約的概念,代表著區(qū)塊鏈技術(shù)的2.0時(shí)代[16]。與加密貨幣相關(guān)的底層技術(shù)逐步改進(jìn)形成了區(qū)塊鏈技術(shù),如今在其他領(lǐng)域也展現(xiàn)出迅猛的發(fā)展勢頭,在各個(gè)行業(yè)與領(lǐng)域中進(jìn)行智能化應(yīng)用的開發(fā),代表著區(qū)塊鏈發(fā)展進(jìn)入到3.0時(shí)代[17]。
零知識證明技術(shù),最早是由Goldwasser等人于20世紀(jì)80年代提出的一種最小泄露證明。其設(shè)計(jì)理念與證明思想被廣泛應(yīng)用于身份證明、電子現(xiàn)金、數(shù)字簽名等場景。
通常來說,零知識證明的初始化過程包括以下幾個(gè)步驟[18]:
(1)聲明:證明方根據(jù)論斷內(nèi)容產(chǎn)生一些派生的數(shù)據(jù),然后把它們發(fā)送給驗(yàn)證方。
(2)挑戰(zhàn):驗(yàn)證方利用斷言產(chǎn)生一些等價(jià)問題,然后把這些問題發(fā)送給證明方。
(3)響應(yīng):證明方求解這些等價(jià)問題,然后把對應(yīng)的解答返回給驗(yàn)證方(但驗(yàn)證方無法利用這些等價(jià)問題的解答獲得原問題的解答)。
(4)驗(yàn)證:驗(yàn)證方判斷那些等價(jià)問題的解答是否正確。
初始化算法:Setup(1λ)→str,輸入安全參數(shù)λ,輸出公共字符串str。
證明算法:Prove(str,ι,ω) →π,輸入公共字 符串str,語句ι∈L(其中L是NP Language),證據(jù)ω,輸出證明π。
驗(yàn)證算法:Vrfy(str,ι,ω)→b,輸入公共字符串str,語句ι,證據(jù)ω,輸出布爾變量b∈ { 0,1},判斷輸入證明語句ι是否成立。
檢查算法:Check(str,ι,ω)→d,輸入公共字符串str,語句ι,證據(jù)ω,輸出布爾變量d∈ { 0,1},判斷ω是否使得ι成立。
Paillier加密算法是Pascal Paillier在1999年發(fā)明的概率公鑰加密算法。優(yōu)點(diǎn)是原理簡單、易實(shí)現(xiàn),缺點(diǎn)是僅支持加法運(yùn)算。
(1)密鑰生成:先隨意選定兩個(gè)大素?cái)?shù)p和q,運(yùn)算出它們的積n=pq和最小公倍數(shù)λ=lcm(q? 1,p? 1)。選擇隨機(jī)數(shù)g,且滿足最大公約數(shù)gcd(L(gλmodn2),n)=1。定義L(x) = (x? 1)/n,存 在u=(L(gλmodn2))?1。此時(shí)得到公鑰為(n,g),私鑰為(λ,u)。
(2)加密:對于明文m,明文信息需要滿足m小于n,選擇一個(gè)隨機(jī)數(shù)r (3)解密:對于密文c,明文m=(L(cλm modn2) /L(gλm o dn2)) modn。 同時(shí),Paillier也存在快速生成密鑰的算法:在密鑰長度相同的情況下,可以快速生成密鑰g=n+1,λ=Φ(n),u=Φ(n) ? 1modn。所以n更像是加密環(huán)境值,g對應(yīng)密鑰。 星際文件系統(tǒng)(Inter Planetary File System,IPFS)是一種點(diǎn)對點(diǎn)的分布式文件系統(tǒng),同樣具有去中心化存儲的特性,因此與區(qū)塊鏈具有較好的結(jié)合性,同時(shí)也可以較好地解決當(dāng)前區(qū)塊鏈中區(qū)塊存儲容量存在限制的問題[19]。 目前有一些與區(qū)塊鏈和IPFS相關(guān)的研究,王路陽等人[20]提出了一種基于區(qū)塊鏈和IPFS網(wǎng)絡(luò)的監(jiān)控信息隱私保護(hù)機(jī)制。該方案結(jié)合IPFS和區(qū)塊鏈技術(shù),解決了監(jiān)控管理中的隱私保護(hù)問題。其中區(qū)塊鏈用于安全存儲帶有哈希的信息,并為哈希值提供驗(yàn)證信息,IPFS用于存儲和分發(fā)監(jiān)控信息。Hao等人[21]針對農(nóng)產(chǎn)品可溯性管理中數(shù)據(jù)可能被篡改從而影響食品安全的問題,提出了一種基于IPFS的區(qū)塊鏈存儲模型。該方案主要用于存儲不同環(huán)節(jié)中農(nóng)產(chǎn)品的信息,該方案存儲數(shù)據(jù)完全公開透明,雖然通過區(qū)塊鏈保證了數(shù)據(jù)不被篡改,然而并未考慮存儲數(shù)據(jù)的安全問題。 有關(guān)區(qū)塊鏈和IPFS技術(shù)的應(yīng)用結(jié)合問題還處在理論研究的起步階段,許多方案還未得到實(shí)際的應(yīng)用和落地[22]。因此區(qū)塊鏈和IPFS技術(shù)的應(yīng)用結(jié)合仍然任重而道遠(yuǎn),相關(guān)應(yīng)用的探索還要一直持續(xù),但是可以為兩者的進(jìn)一步實(shí)質(zhì)性結(jié)合提供借鑒價(jià)值。 在數(shù)據(jù)存儲和共享上,IPFS能夠處理重復(fù)冗余的數(shù)據(jù)文件,把相同的文件合并,減少了數(shù)據(jù)復(fù)雜程度,節(jié)省了服務(wù)器的存儲資源。對上傳到IPFS的數(shù)據(jù)文件進(jìn)行加密和哈希函數(shù)處理后,都會生成唯一文件哈希密文值。哈希密文值唯一指定了數(shù)據(jù)文件,對數(shù)據(jù)信息進(jìn)行修改后就會重新獲得更新的不重復(fù)的哈希值。在獲取文件時(shí),IPFS進(jìn)行用戶訪問權(quán)限控制,完成驗(yàn)證后根據(jù)密文哈希值從分布式存儲節(jié)點(diǎn)中返回解密之后的內(nèi)容。 基于目前的零知識證明技術(shù)現(xiàn)狀[23],針對基于零知識證明的交易數(shù)據(jù)隱私保護(hù)的工作可以從零知識證明的區(qū)塊鏈隱私保護(hù)、加密后數(shù)據(jù)的鏈上鏈下一致協(xié)同兩方面展開。 本文基于零知識證明的交易數(shù)據(jù)隱私保護(hù)模型如圖1所示。方案設(shè)計(jì)包括區(qū)塊鏈、交易存證服務(wù)、零知識證明算法和同態(tài)加密算法創(chuàng)建隱私保護(hù)模型,以實(shí)現(xiàn)區(qū)塊鏈系統(tǒng)中的交易安全與隱私保護(hù)。 圖1 鏈上零知識驗(yàn)證模型 基于區(qū)塊鏈的隱私保護(hù)方案的設(shè)計(jì)包含5個(gè)對象:交易雙方、智能合約、區(qū)塊鏈網(wǎng)絡(luò)與密鑰管理方。交易雙方包括交易生產(chǎn)者和消費(fèi)者。智能合約預(yù)先設(shè)置包含零知識證明驗(yàn)證的觸發(fā)條件,在去中心化的前提下判斷零知識證明證據(jù)及承諾的有效性。參與共識的組織節(jié)點(diǎn)利用驗(yàn)證密鑰(Verification Key,VK)對交易雙方提出的交易內(nèi)容進(jìn)行零知識電路校驗(yàn),以確保區(qū)塊鏈上信息的完整性與一致性。密鑰管理方有一種絕對可信的機(jī)制,來產(chǎn)生證明密鑰(Proving Key,PK)與VK進(jìn)行零知識證明。 本文在經(jīng)典同態(tài)加密算法Paillier算法的基礎(chǔ)上,研究了能夠進(jìn)行零知識證明驗(yàn)證并能夠?qū)τ脩綦[私交易數(shù)據(jù)進(jìn)行保護(hù)的方案算法[6,18],并對其進(jìn)行數(shù)據(jù)協(xié)同方面的改進(jìn)。該算法能夠在不透露交易雙方所有交易細(xì)節(jié)的情形下,通過智能合約系統(tǒng)確認(rèn)雙方之間交易內(nèi)容的合法性,同時(shí)能夠獨(dú)立對用戶的隱私數(shù)據(jù)進(jìn)行加密處理。若驗(yàn)證未通過,則用戶可能發(fā)起了惡意交易并向應(yīng)用端返回錯(cuò)誤處理信息,否則將此次交易結(jié)果寫入?yún)^(qū)塊中。 設(shè)計(jì)和構(gòu)建基于零知識證明的簡潔非交互式知識驗(yàn)證系統(tǒng)需要進(jìn)行信息證明,例如范圍證明和相等性證明,并對此次產(chǎn)生的數(shù)據(jù)和承諾證明進(jìn)行加密操作。在完成交易數(shù)據(jù)初始化和證明生成之后,與鏈上部署的智能合約進(jìn)行交互。通過加密和零知識證明處理之后的數(shù)據(jù)校驗(yàn)方法,可以在不向各節(jié)點(diǎn)提供交易細(xì)節(jié)的前提下,檢驗(yàn)交易合規(guī)性。在共識驗(yàn)證通過后,交易雙方的交易數(shù)據(jù)密文上鏈存儲到區(qū)塊中。 在設(shè)計(jì)方案中,交易雙方在區(qū)塊鏈網(wǎng)絡(luò)中進(jìn)行P2P通信。為了不泄露交易隱私,交易雙方各自生成零知識證據(jù)和承諾,并對這些承諾和交易數(shù)據(jù)進(jìn)行加密;密鑰管理方為本次交易生成新的證明密鑰與驗(yàn)證密鑰,證明方向智能合約提交證據(jù)以進(jìn)行驗(yàn)證;最后,如果認(rèn)證成功,將本次交易上塊,否則予以撤銷。認(rèn)證者在不接觸交易數(shù)據(jù)的前提下進(jìn)行了本次交易的認(rèn)證,保障了交易雙方的信息安全。 2.2.1 零知識證明過程 本方案中交易雙方的交易過程在應(yīng)用層進(jìn)行,為了確保交易過程中的隱私不被泄露且支持智能合約端對密文的零知識證明驗(yàn)證的合法性,應(yīng)用層除了為交易雙方進(jìn)行同態(tài)加密產(chǎn)生密文,還須產(chǎn)生零知識證明對應(yīng)的相等性證明和范圍證明證據(jù)。然后將上述信息和經(jīng)過加密后的成交數(shù)據(jù)發(fā)送到交易層的鏈碼端,鏈碼端負(fù)責(zé)對本次成交的有效性加以檢驗(yàn)。 基于交易數(shù)據(jù)的零知識證明框架主要分為以下5個(gè)步驟,如圖2所示。 圖2 零知識證明生成過程 (1)問題轉(zhuǎn)換:由于非交互式零知識驗(yàn)證不能直接應(yīng)用于計(jì)算,因此為了圍繞這個(gè)問題進(jìn)行證明,需要將要證明的問題的陳述轉(zhuǎn)化成零知識證明能夠理解的形式,即二次算術(shù)程序,可以解決所有基于算術(shù)電路的多項(xiàng)式復(fù)雜程度的非確定性(Non-deterministic Polynomial,NP)問題的證明和驗(yàn)證。將表示計(jì)算式的電路問題轉(zhuǎn)換為一階約束系統(tǒng)(Rank-1 Constraint System,R1CS)(向量點(diǎn)積形式),以構(gòu)造完整的零知識證明交易框架。 (2)生成多項(xiàng)式:將生成的R1CS向量表達(dá)式轉(zhuǎn)換為多項(xiàng)式二次算術(shù)程序(Quadratic Assignment Problem,QAP)問題以實(shí)現(xiàn)對上述電路問題的證明驗(yàn)證,這一步驟主要完成待證明計(jì)算式驗(yàn)證和多項(xiàng)式驗(yàn)證之間的等價(jià)轉(zhuǎn)換。 (3)引入約束:完成問題到多項(xiàng)式證明的轉(zhuǎn)換后,需要再引入包括橢圓曲線密碼體系下的系數(shù)知識假設(shè)等約束,限制證明者在證明生成過程中的參數(shù)使用,防止證明者使用不符合約束條件的多項(xiàng)式進(jìn)行惡意攻擊。 (4)信任初始化:在進(jìn)行證明和認(rèn)證之前,需要設(shè)置和生成一些公共的參數(shù),例如通過密鑰管理方為交易生成公共參數(shù),為交易雙方提供證明密鑰和驗(yàn)證密鑰。 (5)使用PK生成承諾和證據(jù):區(qū)塊鏈驗(yàn)證節(jié)點(diǎn)使用VK對證明者零知識承諾信息和零知識證據(jù)進(jìn)行驗(yàn)證。 2.2.2 安全多方計(jì)算過程 安全多方計(jì)算過程如下文所述。 (1)參與方使用密鑰生成算法生成公私鑰對(Pub,Prv)。 (2)參與方將輸入經(jīng)過同態(tài)加密處理后產(chǎn)生的密文發(fā)送給服務(wù)器。 (3)云服務(wù)器接收到密文后,使用安全多方計(jì)算協(xié)議進(jìn)行處理,得到y(tǒng)→f(c1,c2,… ,cn)。 服務(wù)器在對安全多方計(jì)算流程中得到的結(jié)果進(jìn)行同態(tài)計(jì)算得到Eval(y”) → (y”1,y”2,… ,y” n),并將結(jié)果返回至對應(yīng)的參與者。 2.2.3 數(shù)據(jù)協(xié)同過程 在鏈下通過零知識證明驗(yàn)證和同態(tài)加密對數(shù)據(jù)實(shí)現(xiàn)了隱私保密,為保證通過零知識證明驗(yàn)證和同態(tài)加密的數(shù)據(jù)保持鏈上和鏈下的協(xié)同安全,基于區(qū)塊鏈隱私保護(hù)的數(shù)據(jù)協(xié)同方法還采用了星際文件分布式數(shù)據(jù)存儲體系IPFS。 方案模型結(jié)合了區(qū)塊鏈、IPFS、智能合約以及前面提到的零知識證明和同態(tài)加密Paillier算法,以達(dá)到保護(hù)數(shù)據(jù)隱私,實(shí)現(xiàn)數(shù)據(jù)在協(xié)同一致中的安全共享。利用鏈下的分布式數(shù)據(jù)體系的方法保存數(shù)據(jù)信息,將文件數(shù)據(jù)本身保存在IPFS中,而加密后的哈希值等元信息則成為IPFS的鍵值保存在區(qū)塊內(nèi)。通過這樣的方式實(shí)現(xiàn)了數(shù)據(jù)的協(xié)同一致。并按照交易邏輯使用智能合約系統(tǒng)進(jìn)行相關(guān)處理,以得出數(shù)據(jù)處理結(jié)果,在數(shù)據(jù)存儲的過程中實(shí)現(xiàn)鏈上數(shù)據(jù)與鏈下存儲的協(xié)同一致,避免數(shù)據(jù)隱私泄露。 本節(jié)對李龔亮等人[6]提出的支持零知識證明的同態(tài)加密(Homomorphic Encryption Based on Paillier and Zero-Knowledge Proof,HEPZP)算法進(jìn)行描述及實(shí)現(xiàn),并從密文性驗(yàn)證和數(shù)據(jù)協(xié)同方面對其設(shè)計(jì)進(jìn)行改進(jìn),以更好地應(yīng)用于區(qū)塊鏈上的交易數(shù)據(jù)服務(wù)。 算法公式中涉及的參數(shù)如表1所示。 表1 方案相關(guān)參數(shù) 3.1.1 系統(tǒng)參數(shù)生成 區(qū)塊鏈系統(tǒng)中擁有一份獨(dú)立的系統(tǒng)參數(shù),且該參數(shù)在區(qū)塊鏈系統(tǒng)初始化存儲在賬本后便不可篡改,在整個(gè)系統(tǒng)的生命周期中保持不變。系統(tǒng)參數(shù)在交易過程中為交易雙方提供公私鑰生成、交易密文生成以及零知識證據(jù)產(chǎn)生等功能。 選取兩個(gè)較大的素?cái)?shù)p和q,計(jì)算兩者的乘積n和(q? 1,p? 1)的最小公倍數(shù)λ,定義式L(x) = (x? 1)/n。在Zn*2中選擇階很大的元素g1以滿足的最大公倍數(shù)為1,即互素。計(jì)算系統(tǒng)參數(shù)。指定隨機(jī)數(shù)r 3.1.2 公私鑰生成 每個(gè)參與交易的用戶需要持有一對由系統(tǒng)生成的公私鑰。其中,公鑰作為用戶的唯一標(biāo)識,可當(dāng)作每一個(gè)用戶的交易地址,而私鑰由用戶自己保存,并需要確保私鑰的隱私安全性。 選擇隨機(jī)數(shù)v 3.1.3 加密過程 當(dāng)交易雙方都需要完成交易過程時(shí),應(yīng)用層要求對交易中的有關(guān)數(shù)據(jù)和交易信息進(jìn)行加密,然后再發(fā)送到鏈碼端。加密過程如下文所述。 對于明文m 獲得4份密文c=(c1,c2,c3,E),其中E與零知識證明證據(jù)的生產(chǎn)有關(guān),其加密函數(shù)也記 為Enc(m,r0,r1,Pub,P)。 3.1.4 解密過程 對密文c來說,需要對明文數(shù)據(jù)m和用來為鏈碼端創(chuàng)建相等性證據(jù)的r0進(jìn)行解密。 解密m:使用系統(tǒng)參數(shù)P中的(n,h)和私鑰v,以及密文中的 (E,c1),先從密文中提取明文數(shù)據(jù)對應(yīng)的加密結(jié)果cm,再計(jì)算得到原始明文: 解密r0:使用系統(tǒng)參數(shù)P中的(n,h)和私鑰v,以及密文中的 (c2,c3),從密文中提取出隨機(jī)數(shù)對應(yīng)的加密數(shù)據(jù)cr0,并計(jì)算得到原始數(shù)據(jù): 解密函數(shù)分別記為Decm(c,Prv,P)和Decr0(c,Prv,P)。 3.2.1 相等性證明 (1)應(yīng)用端使用交易雙方選取的隨機(jī)數(shù)(r0,r1),以及產(chǎn)生的交易金額密文ct。 (2)根據(jù)密文為交易雙方生成承諾E和F: 式中:a為參數(shù);b為余額;t為交易的金額。 (3)根據(jù)承諾E和F產(chǎn)生相等性證據(jù)。 (4)智能合約通過承諾和相等性證據(jù),以及雙方的公鑰和系統(tǒng)參數(shù)完成相等性證明過程。 3.2.2 范圍證明 交易金額大于0證明如下: (1)應(yīng)用端使用交易雙方選取的隨機(jī)數(shù)(r0,r1),以及產(chǎn)生的交易金額密文ct。 (2)根據(jù)上述步驟(1)中隨機(jī)數(shù)密文產(chǎn)生承諾E,如式(9)所示。在范圍證明中,參數(shù)a的絕對值需要大于或等于1。 (3)承諾產(chǎn)生范圍證據(jù)。 (4)智能合約端通過承諾與范圍證據(jù),以及消費(fèi)者的公鑰和系統(tǒng)參數(shù)完成校驗(yàn)。 交易余額大于0證明如下: (1)應(yīng)用端使用交易雙方選取的隨機(jī)數(shù)(r0,r1),以及產(chǎn)生的交易金額密文ct,消費(fèi)者的輸入金額密文ca。 (2)解密出輸入金額密文ca的明文以及產(chǎn)生輸入金額密文ca時(shí)的隨機(jī)數(shù)r0in。計(jì)算剩余金額s=in?t。計(jì)算加密剩余金額的隨機(jī)數(shù)r0s=r0in?r0t。 (3)利用同態(tài)加密加法同態(tài)的性質(zhì)獲得交易余額的加密密文cs。 (4)根據(jù)上述步驟(1)中隨機(jī)數(shù)密文產(chǎn)生承諾E,如式(9)所示。 (5)智能合約端通過承諾與范圍證據(jù),以消費(fèi)者的公鑰和系統(tǒng)參數(shù)完成校驗(yàn)。 3.2.3 密文正確性證明 驗(yàn)證過程的實(shí)現(xiàn),需要在鏈上部署證明方的鏈碼,證明方將經(jīng)過智能合約驗(yàn)證后的證據(jù)承諾與鏈碼本身交由區(qū)塊鏈網(wǎng)絡(luò)節(jié)點(diǎn)驗(yàn)證,并根據(jù)數(shù)字簽名或數(shù)字證書進(jìn)行身份驗(yàn)證,完成交易的零知識驗(yàn)證。區(qū)塊鏈網(wǎng)絡(luò)共識的其他節(jié)點(diǎn)也可通過鏈碼進(jìn)行參與。需要驗(yàn)證在同態(tài)加密Paillier下密文的正確性。 給定密文c和證明密鑰PK,證明者需要證明其知道明文m和隨機(jī)數(shù) (r0,r1),使得密文c=Enc(m,r0,r1)。 證明者隨機(jī)選擇 (m”,r0”,r1”),并計(jì)算c=Enc(m”,r0”,r1”)。 驗(yàn)證者生成挑戰(zhàn)變量e,令證明者計(jì)算出明文和隨機(jī)數(shù)對應(yīng)的證據(jù)為 (z1,z2,z3),其中z1=m”+em,,并發(fā)送給驗(yàn)證方。 驗(yàn)證者計(jì)算Enc(z1,z2,z3),如果Enc(z1,z2,z3) 等同于c”?ce,則驗(yàn)證成功。 對于交易雙方給出的承諾和證明,區(qū)塊鏈的各節(jié)點(diǎn)加以驗(yàn)證。只有當(dāng)每個(gè)產(chǎn)生的證明都經(jīng)過智能合約驗(yàn)證后,本次交易才驗(yàn)證通過。當(dāng)該交易通過區(qū)塊鏈運(yùn)行的共識方案后,即可寫入到區(qū)塊中。 交易方案的過程主要包括應(yīng)用層和鏈碼端兩部分,假設(shè)消費(fèi)者向生產(chǎn)者發(fā)起交易,則應(yīng)用層步驟如下: (1)得到消費(fèi)者的公鑰和私鑰,作為被轉(zhuǎn)賬方的生產(chǎn)者僅需提供公鑰而非私鑰和系統(tǒng)參數(shù)P,通過兩者的公鑰Pub對交易輸入進(jìn)行加密,產(chǎn)生交易輸入密文。 (2)產(chǎn)生的交易數(shù)據(jù)僅能夠通過交易參與者的私鑰Prv才能解密查看,因此通過消費(fèi)者的私鑰和系統(tǒng)參數(shù)對所有交易輸入信息進(jìn)行解密,并計(jì)算交易余額。 (3)基于方案的零知識證明算法來生成可信任不被泄露的零知識交易證據(jù),同時(shí)對交易輸入輸出金額密文上的承諾形成范圍驗(yàn)證和相等性證明。 (4)發(fā)送到區(qū)塊鏈網(wǎng)絡(luò)其他節(jié)點(diǎn)的交易數(shù)據(jù)需要由參與雙方進(jìn)行數(shù)字簽名,并將密文和零知識證據(jù)相關(guān)承諾發(fā)送到鏈碼端,請求本次交易校驗(yàn)。 在此過程中,必須要在鏈下對數(shù)據(jù)進(jìn)行零知識證明的證據(jù)產(chǎn)生和同態(tài)加密之后,再對數(shù)據(jù)進(jìn)行上鏈操作,方案中使用的加密算法是零知識證明應(yīng)用于同態(tài)加密Paillier算法得到的,數(shù)據(jù)上載存儲則是在區(qū)塊鏈運(yùn)行的智能協(xié)議中,添加將加密后的哈希數(shù)據(jù)保存在IPFS的流程,部署智能合約并同步到區(qū)塊鏈網(wǎng)絡(luò)。 算法1:上傳數(shù)據(jù)upload 根據(jù)算法對文件中記錄字段進(jìn)行加密,得到密文計(jì)算結(jié)果C”: 式中:dh為記錄字段的第h條記錄;PKHE為算法的證明密鑰;rh為對記錄字段加密過程中產(chǎn)生的隨機(jī)數(shù)。 generate(X)為用戶X生成密鑰。該設(shè)計(jì)中采用上文提到的公私鑰生成算法生成非對稱密鑰。非對稱密鑰中的公鑰用于對信息加密,私鑰用于對信息解密。 write(Y)將信息Y的內(nèi)容寫入IPFS中,Y中包含區(qū)塊字段的所需信息,生成對應(yīng)的區(qū)塊字段。 check(X)用于驗(yàn)證角色的權(quán)限,查看當(dāng)前用戶是否可以讀取監(jiān)控信息。 hash(F)計(jì)算文件數(shù)據(jù)哈希值,將信息F進(jìn)行哈希函數(shù)計(jì)算后得到一串哈希值。 設(shè)計(jì)的模型中,生產(chǎn)者在上傳數(shù)據(jù)時(shí)可以根據(jù)合約內(nèi)容對文件數(shù)據(jù)進(jìn)行加密,并由鏈碼端將數(shù)據(jù)密文存儲到分布式文件系統(tǒng)中,并向生產(chǎn)者用戶返回相應(yīng)哈希值。同時(shí)合約也會將產(chǎn)生的哈希值信息等同于交易上鏈。此后,消費(fèi)者根據(jù)哈希值在IPFS系統(tǒng)中進(jìn)行交易數(shù)據(jù)的查詢。 (1)隱私性:數(shù)據(jù)加密是保證隱私數(shù)據(jù)安全性的基本要求。方案采用了將同態(tài)加密Paillier算法和零知識證明相結(jié)合的方式對數(shù)據(jù)進(jìn)行加密后的儲存。在各區(qū)塊鏈節(jié)點(diǎn)的智能合約終端查看到的所有交易數(shù)據(jù)全部處于密文狀態(tài)。利用鏈下算法處理應(yīng)用數(shù)據(jù)在鏈上公開的隱私泄露問題,維護(hù)交易數(shù)據(jù)的隱私性。 (2)真實(shí)性:數(shù)據(jù)內(nèi)容在區(qū)塊鏈儲存流程中與生產(chǎn)者進(jìn)行綁定,將數(shù)據(jù)文件存放到IPFS中,而相應(yīng)的數(shù)據(jù)內(nèi)容哈希值在經(jīng)過對生產(chǎn)者的私鑰密碼進(jìn)行簽名后,進(jìn)行區(qū)塊鏈上持久化且不可篡改的儲存,以保證數(shù)據(jù)內(nèi)容哈希值與生產(chǎn)者之間的一一對應(yīng),因?yàn)閿?shù)據(jù)內(nèi)容修改會導(dǎo)致相應(yīng)的數(shù)據(jù)內(nèi)容哈希值發(fā)生變化,所以在數(shù)據(jù)發(fā)生變化時(shí)可以根據(jù)哈希值判斷是否發(fā)生了攻擊篡改。 (3)防抵賴性:將參加交易過程的每個(gè)用戶產(chǎn)生的交易信息都同等存儲在鏈上,同時(shí)基于區(qū)塊鏈可溯源和不可篡改的特點(diǎn),對數(shù)據(jù)共享流程進(jìn)行跟蹤溯源,實(shí)現(xiàn)了防抵賴性功能。 (4)零知識性:零知識性是指在證明者Prover與驗(yàn)證者Verifier的交互過程中只通信正確的知識,不會泄露額外的信息。系統(tǒng)參數(shù)為公開值,證明者Prover向驗(yàn)證者Verifier發(fā)送的簽名函數(shù)稱為正確的知識證據(jù),驗(yàn)證者返回給證明者的隨機(jī)數(shù)c稱為驗(yàn)證挑戰(zhàn),證明者接收到隨機(jī)數(shù)c后回復(fù)驗(yàn)證者的知識證據(jù) ()signr稱為應(yīng)答。在證明過程交易雙方的交互中,沒有向其他用戶和節(jié)點(diǎn)泄露交易的細(xì)節(jié),因此具備零知識性。 為了驗(yàn)證論文提出的基于同態(tài)加密和零知識證明的同態(tài)加密算法的性能,本章采用聯(lián)盟鏈中的Fabric項(xiàng)目對該算法進(jìn)行實(shí)現(xiàn)。在完成對基于Fabric 2.2版本的聯(lián)盟鏈系統(tǒng)的環(huán)境搭建后,本章對算法的實(shí)現(xiàn)效果進(jìn)行了測試,以驗(yàn)證算法的可行性和測試該算法的實(shí)現(xiàn)效率。 本文的仿真實(shí)現(xiàn)實(shí)驗(yàn)在虛擬機(jī)中進(jìn)行,采用的虛擬機(jī)是VMware,機(jī)器配置處理器內(nèi)核4個(gè),內(nèi)存6 GB。在虛擬機(jī)中采用Ubuntu16.04操作系統(tǒng),所需的環(huán)境配置包括go1.15.9、docker20.1.7和docker-compose1.29.2等服務(wù)。本文零知識證明隱私保護(hù)方案中涉及的智能合約采用go語言進(jìn)行編寫。 功能性測試主要包括數(shù)據(jù)加密成功測試、零知識驗(yàn)證測試和數(shù)據(jù)真實(shí)性測試3個(gè)部分。 測試過程中鏈碼實(shí)例化為用戶A在賬本中存儲密文50的金額,然后向另一用戶B發(fā)起轉(zhuǎn)賬10的交易。在正確的交易過程中,為用戶A生成一個(gè)密文金額為40的余額,為用戶B生成一個(gè)密文金額為10的轉(zhuǎn)賬金額。將生成的密文信息與零知識證明證據(jù)發(fā)送至鏈碼端驗(yàn)證,通過在節(jié)點(diǎn)中查看容器日志可以發(fā)現(xiàn)鏈碼端出現(xiàn)的交易信息均為密文狀態(tài),同時(shí)也通過了各種零知識證明的驗(yàn)證,并向應(yīng)用端返回交易成功的信息。 通過使用用戶私鑰修改鏈下IPFS系統(tǒng)存儲的信息模擬惡意用戶篡改攻擊。經(jīng)過鏈下鏈上的協(xié)同驗(yàn)證,發(fā)現(xiàn)此時(shí)鏈下信息計(jì)算生產(chǎn)的哈希值發(fā)生了改變且與鏈上存儲的哈希值不相同,以此來確定該數(shù)據(jù)被攻擊篡改,保障了數(shù)據(jù)的真實(shí)性。 在功能性測試中,當(dāng)應(yīng)用端正確計(jì)算交易結(jié)果時(shí),鏈碼端還可在交易數(shù)據(jù)是密文的情況下對交易結(jié)果進(jìn)行檢驗(yàn),并能夠驗(yàn)證通過,將交易結(jié)果密文保存在賬本中。在測試過程中,當(dāng)應(yīng)用端提交一次惡意交易時(shí),如用戶使輸出金額大于輸入金額,這樣雖然在應(yīng)用端可以生成相應(yīng)的密文信息和零知識證據(jù),但是在鏈碼端卻無法利用這些證據(jù)完成校驗(yàn)過程,所以鏈碼端可以判斷此次交易為惡意交易,拒絕將這次的交易結(jié)果寫入賬本。因此,在區(qū)塊鏈的交易中使用本文算法不僅可以對交易雙方的信息進(jìn)行保密,避免用戶隱私泄露,同時(shí)還能夠在鏈碼端進(jìn)行零知識證明驗(yàn)證,保證交易過程的合法性。 效率測試是指對算法的密鑰生成、加解密過程和零知識證明密文正確性驗(yàn)證過程進(jìn)行測試,并與Paillier算法進(jìn)行對比。算法的穩(wěn)定性主要是建立在離散對數(shù)的計(jì)算方面,當(dāng)使用的密鑰長度足夠大時(shí),根據(jù)密碼分析理論可以確保算法不被輕易攻擊破解。 本文實(shí)驗(yàn)分別對系統(tǒng)參數(shù)中的密鑰長度n取長度為1 024、2 048、4 096位進(jìn)行測試,由于4 096位的長度基本已能夠保證本文算法的安全性,這里便不再對更大位數(shù)的n進(jìn)行測試。在實(shí)驗(yàn)過程中,對每個(gè)長度的密鑰進(jìn)行多次獨(dú)立的實(shí)驗(yàn),每次得到的實(shí)驗(yàn)結(jié)果都相對穩(wěn)定趨于確定的值,最后進(jìn)行多次仿真實(shí)驗(yàn)后記錄實(shí)驗(yàn)數(shù)據(jù)并取平均值繪圖記錄,如圖3~圖6所示。 圖3 不同密鑰長度密鑰生成時(shí)間 圖4 不同密鑰長度加密時(shí)間 圖5 不同密鑰長度解密時(shí)間 圖6 不同密鑰長度零知識密文驗(yàn)證時(shí)間 零知識證明算法與Paillier算法在同樣實(shí)驗(yàn)條件下的測試結(jié)果表明,雖然實(shí)驗(yàn)中本文零知識證明算法的加解密時(shí)間比Paillier算法耗時(shí)稍長,但在實(shí)驗(yàn)所使用的密鑰長度下的結(jié)果相差并非很大,當(dāng)密鑰長度達(dá)到4 096位時(shí)加解密的相差范圍在20~50 ms,而此時(shí)4 096位密鑰在應(yīng)用中已經(jīng)達(dá)到很高的數(shù)量級。此外,在密鑰生成時(shí)間下,相較于Paillier算法,零知識證明算法耗時(shí)較少,在4 096位的密鑰長度下相差的時(shí)間達(dá)到了秒級。在智能合約端對密文驗(yàn)證時(shí)間進(jìn)行測試,結(jié)果表明:即使在密鑰很長的情況下,驗(yàn)證時(shí)間也可以保持在1秒左右,在正常的密鑰長度下,零知識證明過程均能夠在毫秒級別被完成。 區(qū)塊鏈去中心化的特征,促使之前以中心化機(jī)構(gòu)或可信第三方為核心的交易方式,逐漸轉(zhuǎn)化為端對端去中心化的交易。但在金融、知識產(chǎn)權(quán)和醫(yī)療等對數(shù)據(jù)有較強(qiáng)的隱私性的領(lǐng)域,傳統(tǒng)區(qū)塊鏈公開透明的特性不太能夠較好應(yīng)用。因此本文將零知識證明方法與同態(tài)加密過程運(yùn)用于交易過程,根據(jù)交易前后賬戶變動(dòng)和資金輸入輸出情況,產(chǎn)生圍繞交易金額的相等性證明和范圍證明,使交易在被驗(yàn)證的同時(shí)對交易內(nèi)容進(jìn)行加密,能夠適用于交易數(shù)據(jù)需要進(jìn)行隱私保護(hù)的場景。1.4 IPFS系統(tǒng)
2 系統(tǒng)方案
2.1 方案模型
2.2 方案描述
3 方案實(shí)現(xiàn)
3.1 算法設(shè)計(jì)
3.2 零知識證明驗(yàn)證
3.3 數(shù)據(jù)上鏈交易方案設(shè)計(jì)
3.4 數(shù)據(jù)協(xié)同設(shè)計(jì)
4 安全性分析
5 實(shí)驗(yàn)分析
5.1 功能性測試
5.2 效率測試
6 結(jié)語