馬曉旭,羅茂玲,楊 帆,王金寶,肖 敏,唐 飛
(1.中國(guó)電子科技網(wǎng)絡(luò)信息安全有限公司,四川 成都 610041;2.重慶郵電大學(xué),重慶 400065)
智能合約是指能自動(dòng)執(zhí)行部分功能的協(xié)議,并減少協(xié)議執(zhí)行過(guò)程中的人工干預(yù)。例如,支付合約能自動(dòng)計(jì)算合同當(dāng)事人的待付金額,并在滿足條件時(shí)自動(dòng)執(zhí)行這筆金額的支付過(guò)程。1994 年跨領(lǐng)域知名學(xué)者Nick Szabo 提出智能合約的概念,指出:“一個(gè)智能合約是一套以數(shù)字形式定義的承諾,包括合約參與方可以在合約環(huán)境中執(zhí)行這些承諾的協(xié)議?!庇捎诩夹g(shù)原因,智能合約出現(xiàn)后一直沒(méi)有得到廣泛應(yīng)用。區(qū)塊鏈為智能合約提供了一個(gè)非中心化、不可篡改和公開(kāi)透明的執(zhí)行環(huán)境,使得智能合約的應(yīng)用越來(lái)越廣泛。智能合約在區(qū)塊鏈中的應(yīng)用使得區(qū)塊鏈從以比特幣為代表的1.0 時(shí)代過(guò)渡到以以太坊為代表的2.0 時(shí)代。智能合約與區(qū)塊鏈的結(jié)合被認(rèn)為是區(qū)塊鏈?zhǔn)澜缰械囊淮卫锍瘫缴?jí)[1]。
目前,代表性的智能合約應(yīng)用平臺(tái)主要為以太坊(Ethereum)和超級(jí)賬本(Hyperledger Fabric)。以太坊是最早的智能合約平臺(tái),其中的智能合約是一串代碼的合集,包括代碼中各種函數(shù)及代碼運(yùn)行過(guò)程產(chǎn)生的各種狀態(tài)[1]。以太坊支持利用多種高級(jí)編程語(yǔ)言編寫智能合約,專門的編譯器將合約編譯成字節(jié)碼后部署到區(qū)塊鏈,隨后智能合約作為一段程序被運(yùn)行到網(wǎng)絡(luò)中所有節(jié)點(diǎn)上,任何人無(wú)法修改已發(fā)布的合約。Fabric 智能合約(smart contact)也曾被稱為鏈上代碼(chaincode),其實(shí)質(zhì)是在驗(yàn)證節(jié)點(diǎn)(validating node)上運(yùn)行分布式交易程序,用以執(zhí)行特定的業(yè)務(wù)規(guī)則,最終更新賬本的狀態(tài),在具體實(shí)現(xiàn)中,可以采用虛擬機(jī)或者容器等技術(shù),構(gòu)造安全隔離運(yùn)行環(huán)境。
智能合約公開(kāi)部署在區(qū)塊鏈上,其任何節(jié)點(diǎn)都可以運(yùn)行智能合約的特性可能造成智能合約代碼和數(shù)據(jù)中隱私信息的泄露。目前國(guó)內(nèi)外學(xué)者針對(duì)隱私智能合約開(kāi)展了大量的研究。Hawk 等人[2]和Arbitrum 等人[3]在區(qū)塊鏈系統(tǒng)中引入代理人等可信管理器,減弱了區(qū)塊鏈的非中心化特點(diǎn),也增加了針對(duì)區(qū)塊鏈系統(tǒng)的攻擊面。ZEXE[4]、smartFHE[5]、zkay[6]和ZeeStar[7]通過(guò)利用包括零知識(shí)證明、遞歸證明合成等密碼學(xué)知識(shí),構(gòu)建了開(kāi)發(fā)隱私智能合約的通用框架,但智能合約的部署需要集成專門的插件,開(kāi)發(fā)和部署代價(jià)高。
隨著區(qū)塊鏈應(yīng)用的不斷普及和深入[8-10],鏈與鏈之間的互聯(lián)互通成為必要,因此,跨鏈技術(shù)應(yīng)運(yùn)而生。跨鏈技術(shù)能夠?qū)崿F(xiàn)不同區(qū)塊鏈之間的跨鏈數(shù)據(jù)訪問(wèn)與傳遞、跨鏈資產(chǎn)互換與轉(zhuǎn)移及跨鏈智能合約調(diào)用等[8]。智能合約的自動(dòng)執(zhí)行和不可篡改性,使得基于智能合約的跨鏈技術(shù)(如哈希時(shí)間鎖定合約)具有不依賴第三方的完全非中心化優(yōu)勢(shì)。跨鏈互操作可能涉及用戶的隱私信息,比如跨鏈資產(chǎn)互換和轉(zhuǎn)移會(huì)暴露用戶互換和轉(zhuǎn)移的資產(chǎn)數(shù)量。本文針對(duì)跨鏈操作場(chǎng)景,提出了一個(gè)簡(jiǎn)單易執(zhí)行的跨鏈隱私智能合約方案。該方案獨(dú)立于具體的區(qū)塊鏈平臺(tái),可以直接利用區(qū)塊鏈本身的密碼機(jī)制或根據(jù)實(shí)際場(chǎng)景需求靈活選擇密碼機(jī)制,實(shí)現(xiàn)安全和性能的平衡。該方案可在用戶本地執(zhí)行實(shí)現(xiàn)大部分的私密計(jì)算,盡可能減少耗費(fèi)和對(duì)區(qū)塊鏈性能的影響。
跨鏈技術(shù)的目的是實(shí)現(xiàn)跨鏈互操作性并解決跨鏈交易原子性問(wèn)題、跨鏈交易驗(yàn)證問(wèn)題和跨鏈交易資產(chǎn)管理問(wèn)題[11-12]??珂溁ゲ僮髦饕ú煌瑓^(qū)塊鏈之間的跨鏈數(shù)據(jù)訪問(wèn)與跨鏈數(shù)據(jù)傳遞、跨鏈資產(chǎn)互換與轉(zhuǎn)移和跨鏈智能合約調(diào)用等。
目前,主要的跨鏈技術(shù)有公證人機(jī)制、側(cè)鏈、中繼、分布式私鑰控制、哈希時(shí)間鎖定等。公證人機(jī)制是通過(guò)引入可信第三方作為中介進(jìn)行跨鏈的數(shù)據(jù)收集、交易確認(rèn)和驗(yàn)證。側(cè)鏈?zhǔn)且粋€(gè)獨(dú)立于主鏈的區(qū)塊鏈系統(tǒng),跨鏈交易通過(guò)側(cè)鏈與主鏈雙向錨定實(shí)現(xiàn)。中繼機(jī)制通過(guò)構(gòu)造一個(gè)第三方公有鏈,利用跨鏈消息傳遞協(xié)議,實(shí)現(xiàn)各個(gè)區(qū)塊鏈跨鏈數(shù)據(jù)的傳輸和追蹤。分布式私鑰控制是利用分布式密鑰生成技術(shù)和門限密鑰共享技術(shù),將原鏈數(shù)字資產(chǎn)映射到新的中間鏈上,并將資產(chǎn)私鑰份額共享給多個(gè)節(jié)點(diǎn),達(dá)到多節(jié)點(diǎn)控制資產(chǎn)使用權(quán)的目的,通過(guò)鎖定和解鎖2 種操作進(jìn)行跨鏈資產(chǎn)交換和價(jià)值轉(zhuǎn)移。哈希時(shí)間鎖定包括時(shí)間鎖和哈希鎖,讓交易雙方先利用智能合約鎖定資產(chǎn),如果雙方都在規(guī)定的時(shí)間內(nèi)輸入正確哈希值的原像,即可完成交易。哈希時(shí)間鎖定機(jī)制中交易參與方無(wú)須彼此信任,安全性較高,能夠?qū)崿F(xiàn)跨鏈資產(chǎn)的交換,目前已被應(yīng)用于WeCross、閃電網(wǎng)絡(luò)、Interledger、雷電網(wǎng)絡(luò)、Sprites 通道等。
零知識(shí)證明由Goldwasser 等人[13]提出,它是運(yùn)行在證明者和驗(yàn)證者之間的一種兩方密碼協(xié)議,可用于進(jìn)行成員歸屬命題證明或知識(shí)證明。零知識(shí)證明具有如下3 個(gè)性質(zhì):
(1)完備性。用于描述協(xié)議本身的正確性。給定某個(gè)陳述的有效證據(jù),如果證明者和驗(yàn)證者均誠(chéng)實(shí)運(yùn)行協(xié)議,那么證明者能使驗(yàn)證者相信該陳述的正確性。通俗地講,如果陳述為真,則驗(yàn)證者總是接受證明。
(2)可靠性??煽啃杂糜诒Wo(hù)誠(chéng)實(shí)驗(yàn)證者的利益,使其免于遭受惡意證明者的欺騙。通俗地講,如果陳述為假,則驗(yàn)證者總是拒絕提供證明。
(3)零知識(shí)性。零知識(shí)性是指證明者能向驗(yàn)證者證明某個(gè)陳述的正確性而不泄露除正確性以外的其他任何信息,即驗(yàn)證者無(wú)法從該證明過(guò)程中獲取額外的信息。
零知識(shí)證明的3 個(gè)性質(zhì)使其具備了信任建立和隱私保護(hù)的功能,具有良好的應(yīng)用前景[11],與區(qū)塊鏈的信任與隱私需求高度契合,比如區(qū)塊鏈匿名密碼貨幣(如Zcash、Monero)利用零知識(shí)證明可在不泄露用戶地址及金額的同時(shí)證明某筆未支付資金的擁有權(quán)并實(shí)現(xiàn)轉(zhuǎn)賬;區(qū)塊鏈擴(kuò)容的系列zk rollup方案將鏈上的復(fù)雜計(jì)算轉(zhuǎn)移到鏈下時(shí),利用零知識(shí)證明保障計(jì)算過(guò)程中數(shù)據(jù)的有效性。但是,當(dāng)區(qū)塊鏈的存儲(chǔ)容量限制和實(shí)時(shí)通信的高消費(fèi)要求被用于區(qū)塊鏈的零知識(shí)證明時(shí),需要具有簡(jiǎn)潔性和非交互的特點(diǎn),即簡(jiǎn)潔非交互零知識(shí)證明方案更適合區(qū)塊鏈,其中簡(jiǎn)潔性是指證明的通信復(fù)雜度與陳述規(guī)模成亞線性關(guān)系,非交互是指證明者只需向驗(yàn)證者發(fā)送1 輪消息即可完成證明過(guò)程。
簡(jiǎn)潔非交互式零知識(shí)證明(Zero-Knowledge Succinct Non-Interactive Arguments of Knowledge,zk-SNARKs)[14-15]是通用的非交互證明結(jié)構(gòu),其能支持任何算術(shù)電路并通過(guò)由可信第三方或者安全多方計(jì)算(Secure Multi-Party Computation,SMPC)生成公共參考串(Common Reference String,CRS)模型實(shí)現(xiàn)非交互過(guò)程,通信量為常數(shù)個(gè)群元素,驗(yàn)證復(fù)雜度可通過(guò)預(yù)處理達(dá)到常數(shù)次配對(duì)運(yùn)算,因此具有恒定大小的證明驗(yàn)證代價(jià)。zk-SNARKs 被用于以太坊、Zcash、Monero 等區(qū)塊鏈。
2.1.1 哈希時(shí)間鎖定原理
哈希時(shí)間鎖是基于哈希鎖和時(shí)間鎖來(lái)實(shí)現(xiàn)的。哈希鎖是基于密碼學(xué)中的Hash 函數(shù)的單向性和抗碰撞性進(jìn)行設(shè)計(jì)的。Hash 函數(shù)利用算法把任意長(zhǎng)度的輸入變換成固定長(zhǎng)度的輸出,該輸出就是Hash值或消息摘要(Message Digest)。
設(shè)H:X→Y是一個(gè)Hash 函數(shù),X表示所有消息的集合(有限集或無(wú)限集),Y表示所有消息摘要構(gòu)成的有限集合。對(duì)于Hash 函數(shù)的安全要求,通常采用下面的3 個(gè)問(wèn)題來(lái)進(jìn)行判斷:
(1)已知y∈Y,尋找x∈X,使得H(x)=y。
(2)已知x∈X,尋找x'∈X,使得x'≠x,并且H(x')=H(x)。
(3)尋找x,x'∈X,使得x'≠x,并且H(x')=H(x)。其中,消息x和x'稱為碰撞消息。
如果一個(gè)Hash 函數(shù)對(duì)上述3 個(gè)問(wèn)題不可解,則認(rèn)為它是安全的。第(1)個(gè)問(wèn)題不可解,則稱哈希函數(shù)具有單向性;第(1)個(gè)和第(2)個(gè)問(wèn)題不可解,則稱哈希函數(shù)具有抗弱碰撞性;第(1)個(gè)和第(3)個(gè)問(wèn)題不可解,則稱哈希函數(shù)具有抗強(qiáng)碰撞性。
哈希鎖是基于Hash 函數(shù)的安全性,將Hash 值看成一把鎖,而哈希原像則是唯一可以解開(kāi)這把鎖的鑰匙,即只有知道哈希原像才能解鎖,但利用哈希值直接求解哈希原像在計(jì)算過(guò)程上是不可行的。
時(shí)間鎖則是給出一個(gè)時(shí)間期限,交易雙方各自鎖定想要交換的資產(chǎn),并約定在這個(gè)時(shí)間期限內(nèi)進(jìn)行解鎖以實(shí)現(xiàn)資產(chǎn)交換,超時(shí)則交易失敗,此時(shí)交易雙方能拿回自己的資金,避免因欺詐或交易失敗造成的損失。哈希時(shí)間鎖定原理如圖1 所示。
圖1 哈希時(shí)間鎖定原理
由圖1 可知:假如有2 條區(qū)塊鏈ChainA 和ChainB,2 個(gè)用戶Alice 與Bob 分別擁有ChainA 和ChainB 的原生資產(chǎn)assetA 和assetB,他們利用哈希時(shí)間鎖定交換資產(chǎn)。具體步驟如下:
(1)Alice 選取一個(gè)秘密隨機(jī)數(shù)R,計(jì)算哈希值H(R),發(fā)送H(R)給Bob;然后Alice 指定一個(gè)時(shí)間點(diǎn)T1,在ChainA 上創(chuàng)建資產(chǎn)鎖定合約,合約執(zhí)行以下步驟:使用H(R)將自己在ChainA 上的assetA 加上哈希鎖;使用時(shí)間點(diǎn)T1將自己在ChainA 上的assetA 加上時(shí)間鎖。
只有獲得R并且在時(shí)間點(diǎn)T1之前才能將資產(chǎn)assetA 轉(zhuǎn)移走,如果到時(shí)間點(diǎn)T1后仍未解鎖,則允許撤銷鎖定,assetA 退回給Alice,即不會(huì)發(fā)生資產(chǎn)轉(zhuǎn)移。
(2)Bob 基于收到的H(R)和一個(gè)小于T1的時(shí)間點(diǎn)T2,在ChainB 上創(chuàng)建資產(chǎn)鎖定合約,合約執(zhí)行以下步驟:使用H(R)將自己在ChainB 上的assetB 加上哈希鎖;使用時(shí)間點(diǎn)T2將自己在ChainB上的assetB 加上時(shí)間鎖。
只有擁有R并且在時(shí)間點(diǎn)T2之前才能轉(zhuǎn)移資產(chǎn)assetB,如果到時(shí)間點(diǎn)T2后仍未解鎖,則資產(chǎn)assetB 超時(shí)鎖定,被退回給Bob。
(3)Alice 使用R在時(shí)間點(diǎn)T2前調(diào)用ChainB上的智能合約解鎖assetB,并將資產(chǎn)轉(zhuǎn)移給自己。
(4)因?yàn)锳lice 解鎖了assetB,所以Bob 也獲得R的值,Bob 使用R在時(shí)間點(diǎn)T1前解鎖assetA,并將資產(chǎn)轉(zhuǎn)移給自己。
2.1.2 哈希時(shí)間鎖定智能合約
哈希時(shí)間鎖定智能合約主要有資產(chǎn)鎖定、提取資產(chǎn)、退回資產(chǎn)及查詢鎖定信息4 個(gè)功能。以資產(chǎn)鎖定部分說(shuō)明隱私保護(hù)方案。資產(chǎn)交換雙方首先都需要在各自的鏈上創(chuàng)建智能合約實(shí)現(xiàn)自己資產(chǎn)的鎖定。設(shè)雙方各自將資產(chǎn)鎖定到一個(gè)中間賬戶地址,簡(jiǎn)化的哈希時(shí)間鎖定智能合約的資產(chǎn)鎖定的例子如圖2 所示。
圖2 簡(jiǎn)化的哈希時(shí)間鎖定合約:資產(chǎn)鎖定
資產(chǎn)鎖定需要發(fā)送者地址sender、接收者地址receiver、轉(zhuǎn)賬數(shù)額amount、時(shí)間鎖timeLock、哈希值hashValue和中間賬戶地址midAddress等作為輸入信息,主要是完成資產(chǎn)從發(fā)送者賬戶到中間賬戶的轉(zhuǎn)移,并利用哈希值和時(shí)間鎖進(jìn)行資產(chǎn)鎖定。資產(chǎn)接收者需要在時(shí)間鎖timeLock代表的時(shí)間之前,提供正確的哈希原像PreImage才可以提取鎖定的資產(chǎn)并發(fā)送給接收者賬戶。資產(chǎn)鎖定階段PreImage的值為空。合約的正確執(zhí)行過(guò)程首先要判斷發(fā)送者余額是否充足,即require語(yǔ)句“require(amount≤balance[sender])”的條件是否滿足。在條件滿足及其他的校驗(yàn)均通過(guò)時(shí),發(fā)送者賬戶余額blance[sender]會(huì)自動(dòng)減去轉(zhuǎn)賬的數(shù)額amount,此時(shí)將成為中間賬戶balance[midAddress]的余額增加數(shù)額amount,從而實(shí)現(xiàn)從發(fā)送者賬產(chǎn)到中間賬產(chǎn)的轉(zhuǎn)賬。最后需要返回哈希時(shí)間鎖定交易標(biāo)識(shí)htlcId,用于后續(xù)操作進(jìn)行識(shí)別,該標(biāo)識(shí)由哈希時(shí)間鎖定交易的發(fā)送者sender、接收者receiver、中間賬戶地址midAddress、鎖定資產(chǎn)的數(shù)量amount、哈希值hashValue、時(shí)間鎖timeLock等參數(shù)進(jìn)行計(jì)算得到。
在區(qū)塊鏈上,合約被公開(kāi)存儲(chǔ)和調(diào)用,合約代碼和數(shù)據(jù)都是公開(kāi)的,顯然會(huì)泄露用戶的隱私。比如哈希時(shí)間鎖定合約中雙方交換的資產(chǎn)數(shù)量amount和賬戶余額balance等隱私信息都是以明文的形式公開(kāi)的。
隱私保護(hù)是區(qū)塊鏈領(lǐng)域近年來(lái)的研究熱點(diǎn)[16],本文關(guān)注跨鏈場(chǎng)景下智能合約的隱私保護(hù)機(jī)制。哈希時(shí)間鎖定隱私智能合約如圖3 所示,以圖3 為例說(shuō)明跨鏈隱私智能合約的設(shè)計(jì)規(guī)則。隱私智能合約以保護(hù)合約代碼和合約數(shù)據(jù)的隱私性為目的,具體設(shè)計(jì)規(guī)則如下:
圖3 簡(jiǎn)化的哈希時(shí)間鎖定隱私合約:資產(chǎn)鎖定
(1)一個(gè)隱私智能合約包括一個(gè)公開(kāi)的合約和若干零知識(shí)證明電路。公開(kāi)的合約部分對(duì)隱私變量及其相關(guān)表達(dá)式進(jìn)行了隱藏,不會(huì)泄露隱私,而零知識(shí)證明電路執(zhí)行隱私部分的零知識(shí)證明,以保證合約執(zhí)行的正確性,合約中的每一個(gè)函數(shù)對(duì)應(yīng)一個(gè)零知識(shí)證明電路。圖3 給出了與圖2 所示哈希時(shí)間鎖定智能合約對(duì)應(yīng)的隱私版本,其中的隱私變量為雙方交換的資產(chǎn)數(shù)額amount和各參與方賬戶的余額balance。
(2)支持隱私智能合約的區(qū)塊鏈賬本中的余額為賬戶持有者的公鑰密文。加密算法具有加法同態(tài)特性,便于根據(jù)交易在賬戶余額密文上進(jìn)行加、減操作。
(3)公開(kāi)合約中出現(xiàn)的隱私變量值都以密文形式出現(xiàn),由合約調(diào)用者用自己或者其他交易參與方的地址公鑰進(jìn)行加密。比如圖3 所示的隱私合約中公開(kāi)部分的amount*,是用交易參與方的地址公鑰PKmidAddress對(duì)資產(chǎn)數(shù)額明文amount加密后得到的密文,這個(gè)加密操作由合約調(diào)用者完成,便于后續(xù)賬戶余額的密文計(jì)算。
(4)公開(kāi)合約中出現(xiàn)的含有隱私變量的表達(dá)式可以整體用一個(gè)保密或密文變量替代。如圖2 中的表達(dá)式amount≤balance[sender],balance[sender]-amount,balance[midaddress]+amount在 圖3(a)的隱私合約中分別用P,代替,其中P取值為0或1,“0”表示require指定的條件amount≤balance[sender]不滿足,合約不會(huì)執(zhí)行,“1”表示條件滿足,合約執(zhí)行,P完全隱藏了隱私變量amount和balance[sender]的 值;[sender]old-amount,PKsender,ri)是資產(chǎn)交換發(fā)起者鎖定資產(chǎn)到中間賬戶地址后,將發(fā)起者的賬戶余額用發(fā)送者公鑰PKsender進(jìn)行加密,ri是加密時(shí)所取的隨機(jī)數(shù);
amount*是資產(chǎn)交換發(fā)起者鎖定資產(chǎn)到中間賬戶地址之后中間賬戶地址的余額密文,是中間賬戶之前的余額密文和交換資產(chǎn)數(shù)額密文amount*之和。
(5)在隱私合約中出現(xiàn)的需要隱私保護(hù)的數(shù)據(jù)或密文變量,由合約調(diào)用者在本地進(jìn)行私密計(jì)算,將密文結(jié)果作為合約中函數(shù)的參數(shù)輸入。例如,相比圖2中函數(shù)assetLockHTLC 的輸入?yún)?shù),圖3(a)的隱私合約privacyHTLC 中函數(shù)assetLockHTLC*的參數(shù)增加了binaryamount*,bool P,和binary proof,這 些參數(shù)的值由合約調(diào)用者在本地進(jìn)行私密計(jì)算,其中proof是合約調(diào)用者對(duì)這些本地私密計(jì)算生成的零知識(shí)證明,用于驗(yàn)證本地計(jì)算的正確性。
(6)將合約中的本地私密計(jì)算過(guò)程作為zk-SNARKs 零知識(shí)證明的約束構(gòu)建證明電路,合約調(diào)用者生成相應(yīng)的本地私密計(jì)算的零知識(shí)證明,由區(qū)塊鏈驗(yàn)證節(jié)點(diǎn)執(zhí)行合約和驗(yàn)證。圖3(b)顯示4 個(gè)電路約束:①SKsender和PKsender是一對(duì)合法的公私鑰對(duì);②P=1,即require 的條件必須滿足;③balance即合約調(diào)用者用自己賬戶余額和交換資產(chǎn)數(shù)額明文計(jì)算新的賬戶余額,并用自己的公鑰進(jìn)行加密得到新的余額密文;約束④顯示中間賬戶余額更新方法⊕amount*。由于合約調(diào)用者可能不是中間賬戶地址的擁有者,不能解密存儲(chǔ)在區(qū)塊鏈賬本中的中間賬戶余額密文,根據(jù)規(guī)則1,這個(gè)密文是用中間賬戶地址對(duì)應(yīng)的公鑰PKmidAddress加密,所以合約調(diào)用者需要先利用公鑰PKmidAddress對(duì)amount進(jìn)行加密得到密文amount*,然后利用加密算法的加法同態(tài)性,直接在密文上進(jìn)行加法運(yùn)算,對(duì)中間賬戶地址余額進(jìn)行更新。另外,密文、公鑰和調(diào)用者生成的證明作為零知識(shí)證明電路的公開(kāi)輸入,調(diào)用者的私鑰和調(diào)用者加密所取的隨機(jī)數(shù)作為零知識(shí)證明電路的私密輸入。
圖3 中各個(gè)變量代表的含義解釋如下:
①PKsender和PKmidAddress分別為資產(chǎn)交換發(fā)起者地址和中間賬戶地址對(duì)應(yīng)的公鑰;
②amount和amount*分別為交換資產(chǎn)數(shù)額明文和用PKmidAddress加密的密文;
③P取值為0 或1,“0”表示require指定的條件不滿足,合約不會(huì)執(zhí)行,“1”表示require指定的條件滿足,合約執(zhí)行;
④balance[sender]old和分別為資產(chǎn)交換發(fā)起者鎖定資產(chǎn)到中間賬戶地址之前發(fā)起者的賬戶余額明文和用PKsender加密的密文;
⑤balance[sender]new和分別為資產(chǎn)交換發(fā)起者鎖定資產(chǎn)到中間賬戶地址后發(fā)起者的賬戶余額明文和PKsender加密的密文;
⑥balance[midAddress]old和分別為資產(chǎn)交換發(fā)起者鎖定資產(chǎn)到中間賬戶地址之前中間賬戶地址的余額明文和用PKmidAddress加密的密文;
⑦balance[midAddress]new和分別為資產(chǎn)交換發(fā)起者鎖定資產(chǎn)到中間賬戶地址后的中間賬戶地址的余額明文和用PKmidAddress加密的密文;
⑧proof為資產(chǎn)交換發(fā)起者對(duì)輸入的隱私數(shù)據(jù)的零知識(shí)證明;
⑨SKsender為資產(chǎn)交換發(fā)起者地址和中間賬戶地址對(duì)應(yīng)的私鑰;
⑩{…,ri,…}為加密時(shí)所取的隨機(jī)數(shù)。
規(guī)則3 和規(guī)則4 確保智能合約的數(shù)據(jù)和代碼隱私都受到保護(hù),規(guī)則5 和規(guī)則6 保證所有的私密計(jì)算都在本地執(zhí)行,同時(shí)能夠?qū)?zhí)行結(jié)果進(jìn)行零知識(shí)驗(yàn)證,本地執(zhí)行私密計(jì)算確保隱私不會(huì)泄露,零知識(shí)證明的驗(yàn)證實(shí)現(xiàn)在不泄露隱私的前提下保證合約的正確執(zhí)行。
跨鏈隱私智能合約的具體執(zhí)行可以利用區(qū)塊鏈支持的橢圓曲線密碼機(jī)制實(shí)現(xiàn),包括基于橢圓曲線的加密和zk-SNARKs 等。在不同的應(yīng)用場(chǎng)景下,也可以選擇其他更為輕量級(jí)的密碼方案。本文方案沒(méi)有與具體的密碼方案進(jìn)行綁定,具有很好的靈活性和適應(yīng)性。同態(tài)加密算法主要用于跨鏈資產(chǎn)轉(zhuǎn)移或互換中對(duì)賬號(hào)余額的更新,所以只需要輕量級(jí)的加法同態(tài)加密算法。對(duì)于標(biāo)量數(shù)乘運(yùn)算,可以轉(zhuǎn)換為加法運(yùn)算。
在性能方面,從合約部署和執(zhí)行2 個(gè)過(guò)程對(duì)隱私智能合約和普通智能合約進(jìn)行對(duì)比。合約部署方面,隱私合約的部署成本要高于普通合約,零知識(shí)證明電路的部署增加了存儲(chǔ)成本,但是此成本是一次性花費(fèi)的,與之后的執(zhí)行無(wú)關(guān)。在合約執(zhí)行期間,所有的私密計(jì)算部分包括零知識(shí)證明的生成都由合約調(diào)用者在本地進(jìn)行計(jì)算,該操作是離鏈的,不會(huì)影響區(qū)塊鏈的吞吐量。與普通智能合約相比,隱私智能合約的執(zhí)行多了鏈上零知識(shí)證明的驗(yàn)證操作,對(duì)于選定的zk-SNARKs 方案,驗(yàn)證成本基本上是固定的。因此,隱私合約的部署和執(zhí)行成本都在可接受的范圍之內(nèi)。
本文設(shè)計(jì)了一個(gè)區(qū)塊鏈跨鏈隱私智能合約方案,該方案利用加密算法和零知識(shí)證明實(shí)現(xiàn)對(duì)合約代碼和數(shù)據(jù)中隱私信息的保護(hù),實(shí)現(xiàn)跨鏈操作中用戶的資產(chǎn)信息和私密數(shù)據(jù)的有效保護(hù)。該方案沒(méi)有與具體的區(qū)塊鏈平臺(tái)和密碼方案進(jìn)行綁定,給出了一個(gè)具有通用性的隱私智能合約設(shè)計(jì)方案。在實(shí)際應(yīng)用中可以根據(jù)具體的情景選擇密碼機(jī)制、靈活選取需要保護(hù)的隱私信息,平衡安全和性能2 個(gè)方面的需求。