朱 巖,宋曉旭,薛顯斌,秦博涵,劉國偉
1.北京科技大學(xué) 計(jì)算機(jī)與通信工程學(xué)院,北京 100083
2.北京市經(jīng)濟(jì)和信息化委員會,北京 100029
區(qū)塊鏈技術(shù)作為一種不可更改、去中心、公開可訪問的交易系統(tǒng),已經(jīng)被認(rèn)為是未來金融、醫(yī)療、保險(xiǎn)、政府等領(lǐng)域的一種潛在革新性的技術(shù).越來越多的研究學(xué)者已認(rèn)識到了區(qū)塊鏈技術(shù)的顛覆性,并對區(qū)塊鏈的安全性進(jìn)行分析[1].而近年來一種被稱為智能合約(smart contract)的區(qū)塊鏈技術(shù)已被提出,它作為一種兩方或多方締結(jié)的、具有法律效力的可執(zhí)行計(jì)算機(jī)協(xié)議,正受到學(xué)術(shù)界和工業(yè)界的廣泛關(guān)注.1994年密碼學(xué)家Nick Szabo[2]首次提出“智能合約”這個(gè)術(shù)語,指出“智能合約就是執(zhí)行合約條款的可計(jì)算交易協(xié)議”,他指出計(jì)算機(jī)代碼可以代替手工操作,進(jìn)行自動化的復(fù)雜數(shù)字財(cái)產(chǎn)交易,因此在債券、眾籌、物流、金融、計(jì)算法律學(xué)等領(lǐng)域具有廣泛的應(yīng)用前景.
在概念上,智能合約是各方對數(shù)字資產(chǎn)轉(zhuǎn)移的一種約定.現(xiàn)有的區(qū)塊鏈技術(shù)僅支持特定指令集上簡單的腳本式語言,不足以支持復(fù)雜合約的執(zhí)行.為了最大限度的保證協(xié)議方的權(quán)益,避免數(shù)字資產(chǎn)由于合約執(zhí)行而受到非法侵害或包含其中的秘密被泄露,某些情況下要求智能合約的參與方輸入具有隱私性以及合約執(zhí)行過程中對敵手攻擊具有抵抗能力.然而,現(xiàn)有的交易指令集僅限制在對合約數(shù)據(jù)的完整性和所有權(quán)認(rèn)證方面,對于參與方數(shù)據(jù)的隱私性尚不存在必要的安全措施,同時(shí),腳本運(yùn)行安全也存在安全風(fēng)險(xiǎn),例如,2014年3月發(fā)生的Mt.Gox 事件中,敵手針對Bitcoin 腳本程序進(jìn)行攻擊,使得85 萬個(gè)Bitcoin 被盜取.因此,現(xiàn)有交易指令集很難達(dá)到上述目標(biāo).而針對這一問題已有學(xué)者展開研究,例如,文獻(xiàn)[3]中提出一種“沙箱” 式的智能合約系統(tǒng),通過在區(qū)塊鏈上存儲金融交易的特殊加密形式,從而保護(hù)交易隱私不被泄露,但必須保證“沙箱” 的安全,分布式沙箱的構(gòu)造仍是一個(gè)未解決的問題;文獻(xiàn)[4]中提出了一種被稱為Zerocoin 的比特幣加密擴(kuò)展方案,它通過引入零知識證明來擴(kuò)展交易協(xié)議,以允許完全匿名的貨幣交易,從而保證貨幣的隱私性,但此方法不能夠支持復(fù)雜的業(yè)務(wù);類似工作又如文獻(xiàn)[5],通過采用數(shù)據(jù)加密方式,構(gòu)建了一種擁有隱私保護(hù)的基于分類賬本的數(shù)字貨幣.文獻(xiàn)[6]提出將數(shù)字資產(chǎn)創(chuàng)建視為評估行為的過程,搭建基于信譽(yù)值的區(qū)塊鏈系統(tǒng),但評估不等于具體的安全措施.總之,上述工作對數(shù)字貨幣的隱私性進(jìn)行了有益探索,但并沒有根本性地解決智能合約的執(zhí)行安全問題.
安全多方計(jì)算(secure multi-party computation,SMPC)理論及實(shí)現(xiàn)技術(shù)是解決上述問題的一種較好的候選技術(shù).在密碼學(xué)上,SMPC 是指多方能以協(xié)同方式完成一項(xiàng)計(jì)算任務(wù),并保持計(jì)算過程中各方輸入的私密性,以及最終計(jì)算結(jié)果忠誠方的一致性.文獻(xiàn)[7]提出了基于同態(tài)加密方式設(shè)計(jì)求解分布式線性方程組的安全兩方計(jì)算協(xié)議和安全多方計(jì)算協(xié)議;文獻(xiàn)[8]中,作者使用SMPC 以及密鑰共享協(xié)議構(gòu)造多租賃用戶模型下的外包計(jì)算協(xié)議.薦于智能合約是對兩方或多方交易的程序?qū)崿F(xiàn),因此,本文將智能合約的執(zhí)行視為多租賃用戶模型下的外包計(jì)算.
已有一些文獻(xiàn)提出采用安全多方計(jì)算實(shí)現(xiàn)智能合約,例如,文獻(xiàn)[9]針對Bitcoin 中的貨幣交易中的忠實(shí)性和隱私性問題,提出一種時(shí)間相關(guān)的承諾(timed commitments)擴(kuò)展Bitcoin 中的指令集,進(jìn)一步保證了貨幣交易的安全.文獻(xiàn)[10]擴(kuò)展了前述工作,實(shí)現(xiàn)了一種更加一般化的安全兩方計(jì)算協(xié)議.文獻(xiàn)[11]采用Bitcoin 網(wǎng)絡(luò)設(shè)計(jì)了一種支持“索賠或退款”(claim-or-refund)的兩方公平協(xié)議,并將其擴(kuò)展到帶有處罰(penalties)的安全多方計(jì)算協(xié)議設(shè)計(jì)中.然而,上述工作主要是針對Bitcoin 網(wǎng)絡(luò)及其指令集開展的研究,并沒有對常用的智能合約開發(fā)與安全執(zhí)行進(jìn)行研究,因此需要進(jìn)一步開展安全智能合約執(zhí)行系統(tǒng)領(lǐng)域的研究.
本文針對區(qū)塊鏈中智能合約執(zhí)行安全問題開展了研究,通過提出基于SMPC 的智能合約框架、面向線性秘密共享的公平安全多方計(jì)算算法設(shè)計(jì),以及非阻塞信息傳遞接口(non-blocking MPI),系統(tǒng)性地給出了基于SMPC 的智能合約執(zhí)行流程、語言結(jié)構(gòu)以及語法規(guī)范,實(shí)現(xiàn)了具有輸入隱私性和計(jì)算正確性的公平SMPC 方法,保障了計(jì)算節(jié)點(diǎn)錯(cuò)誤下的安全群組通信,上述工作將為未來智能合約語言的設(shè)計(jì)開發(fā)和執(zhí)行安全提供理論基礎(chǔ).
區(qū)塊鏈技術(shù)的核心是對交易的支持,通過區(qū)塊鏈交易可實(shí)現(xiàn)數(shù)字資產(chǎn)的創(chuàng)建、轉(zhuǎn)移、變更、終止等過程.文獻(xiàn)[12]中概述了現(xiàn)有加密貨幣中所使用的指令集.現(xiàn)有的交易指令集僅限制在對合約數(shù)據(jù)的完整性和所有權(quán)認(rèn)證方面,對于參與方數(shù)據(jù)的隱私性尚不存在必要的安全措施,同時(shí),腳本運(yùn)行也存在安全風(fēng)險(xiǎn).交易指令集是為保證比特幣中交易安全而提出,它是一種基于棧的腳本式語言,具有以下特點(diǎn):簡單、緊湊、容易理解;不帶有循環(huán)結(jié)構(gòu);支持各種密碼操作;有限的時(shí)間和存儲開銷;非Turing 完全的.
智能合約是執(zhí)行合約條款的可計(jì)算交易協(xié)議,智能合約不是一段簡單的可執(zhí)行程序,在程序中包含財(cái)務(wù)和法律屬性.所以智能合約的制定,需要多個(gè)行業(yè)的參與,例如金融、法律以及計(jì)算機(jī)行業(yè)等.為了保證用戶的數(shù)據(jù)隱私和數(shù)據(jù)安全,用戶希望在自身信息不被他人獲取的情況下協(xié)作完成計(jì)算任務(wù).基于這些要求,本文提出了一種新的智能合約執(zhí)行架構(gòu),稱為基于SMPC 的智能合約執(zhí)行架構(gòu)(SMPC-SC).SMPC-SC 將單方執(zhí)行合約擴(kuò)展到多方共同完成合約的執(zhí)行.
圖1 基于安全多方計(jì)算的智能合約執(zhí)行系統(tǒng)Figure 1 Execution system of smart contract based on SMPC
當(dāng)合約運(yùn)行時(shí),根據(jù)合約參與方的要求,智能合約的多方執(zhí)行環(huán)境被建立,SMPC 被用來完成智能合約的安全執(zhí)行.本文搭建的智能合約執(zhí)行腳本將智能合約的運(yùn)行環(huán)境配置為SMPC 的執(zhí)行環(huán)境.SMPCSC 的基礎(chǔ)架構(gòu)如圖1 所示.系統(tǒng)由合約層、計(jì)算層和群組通信層組成,分別對應(yīng)了區(qū)塊鏈結(jié)構(gòu)中的交易層、數(shù)據(jù)層[13]和共識層.
(1)合約層:合約層封裝了合約的調(diào)度算法、編輯器以及智能合約.它是實(shí)現(xiàn)區(qū)塊鏈系統(tǒng)的靈活編程和運(yùn)行數(shù)據(jù)的基礎(chǔ).
(2)安全計(jì)算層:安全計(jì)算層封裝了SMPC 的算法以及密鑰共享算法,在執(zhí)行智能合約的計(jì)算任務(wù)時(shí)調(diào)用SMPC 算法.
(3)群組通信層:群組通信層封裝了P2P 協(xié)議、MPI 以及拜占庭協(xié)議.P2P 協(xié)議強(qiáng)調(diào)每個(gè)節(jié)點(diǎn)地位對等,不存在任何中心化特殊節(jié)點(diǎn).系統(tǒng)的數(shù)據(jù)傳播協(xié)議使用的是MPI 協(xié)議.共識算法采用的是拜占庭協(xié)議.
智能合約的整個(gè)執(zhí)行過程是建立在區(qū)塊鏈網(wǎng)絡(luò)之上的,當(dāng)智能合約進(jìn)行計(jì)算時(shí),調(diào)用計(jì)算層的SMPC計(jì)算協(xié)議,在SMPC 計(jì)算協(xié)議執(zhí)行過程中,多方之間使用非阻塞MPI 群組通信協(xié)議進(jìn)行通信.
執(zhí)行系統(tǒng)中的合約層封裝了執(zhí)行合約的調(diào)度算法,解釋器以及智能合約的相關(guān)算法.在合約層中我們給出了基于SMPC 的智能合約模型,在合約執(zhí)行過程中將調(diào)用安全計(jì)算層的SMPC 算法.
區(qū)塊鏈?zhǔn)蔷S護(hù)數(shù)字貨幣交易的基礎(chǔ)技術(shù)[14],區(qū)塊鏈的核心技術(shù)是對交易的支持,通過使用區(qū)塊鏈技術(shù),數(shù)字資產(chǎn)能夠進(jìn)行創(chuàng)建、交易、更改等操作.區(qū)塊鏈對數(shù)字資產(chǎn)交易的支持經(jīng)歷了從交易到合約、再到智能合約的過程,三者之間既存在聯(lián)系也存在差異:
(1)交易:是數(shù)字資產(chǎn)轉(zhuǎn)移的記錄,以腳本代碼的方式在區(qū)塊鏈上被體現(xiàn).區(qū)塊鏈依據(jù)時(shí)間排序記錄了系統(tǒng)中所有的交易信息,因此每個(gè)有效的交易都能夠追溯到上一個(gè)交易.
(2)合約:涉及到兩方或者多方之間自愿的具有法律效益的協(xié)議,合約通常是記錄未來數(shù)字資產(chǎn)交易的協(xié)議.包括具體交易時(shí)間、交易流程等.
(3)智能合約:是一種數(shù)字形式的承諾,包括合約參與方執(zhí)行這些承諾的協(xié)議,或者說它是能夠自動執(zhí)行合約條款的計(jì)算程序.
智能合約不是傳統(tǒng)的計(jì)算機(jī)程序,它的本質(zhì)是合約.傳統(tǒng)的計(jì)算機(jī)程序是單方執(zhí)行的,合約是多方達(dá)成的協(xié)議.智能合約是多方共同完成一個(gè)具有法律效益的計(jì)算任務(wù),需要中立的公正機(jī)構(gòu)或仲裁機(jī)構(gòu)參與監(jiān)督合約的運(yùn)行,確立其合法性.智能合約需要一種安全運(yùn)行機(jī)制保證合約的運(yùn)行安全,智能合約應(yīng)該具有以下特性:
(1)公平性:其他參與方不能比忠誠方獲取任何優(yōu)勢(忠誠方是指執(zhí)行過程完全按照指定過程執(zhí)行的參與方).
(2)正確性:在合約執(zhí)行結(jié)束后,忠誠方的結(jié)果是一致的,并且與預(yù)期結(jié)果相同(預(yù)期結(jié)果是指單個(gè)誠實(shí)節(jié)點(diǎn)在沒有任何攻擊的情況下執(zhí)行整個(gè)智能合約所得到的執(zhí)行結(jié)果).
(3)隱私性:對于每個(gè)參與方的輸入,在合約執(zhí)行期間,任何參與方不能夠獲得他人的敏感信息,并且每個(gè)參與方獲得的輸出只包含計(jì)算后應(yīng)該獲得的信息.
滿足上述特性的智能合約對于區(qū)塊鏈來說是很重要的.原因在于數(shù)字資產(chǎn)被記錄在區(qū)塊鏈中,只有這樣一種足夠安全可靠的合約才能被信任去操作區(qū)塊鏈.為此,我們引入了一種密碼技術(shù)安全多方計(jì)算(SMPC),以保證智能合約執(zhí)行的安全性.SMPC 的引入能夠使智能合約滿足上述三種特性:
(1)SMPC 強(qiáng)調(diào)多方共同參與完成一項(xiàng)計(jì)算任務(wù),以及每一方的計(jì)算任務(wù)相同,這滿足了公平性.
(2)正確性體現(xiàn)在SMPC 中所有忠誠方得到的最終結(jié)果是一致的.
(3)每一個(gè)SMPC 的參與方都不能獲得其他參與方的輸入,這滿足了隱私性.
本文通過一個(gè)簡單的Alice 給Bob 轉(zhuǎn)賬的實(shí)例來介紹基于SMPC 的智能合約模型.假設(shè)Alice 的賬戶余額為AliceVal;Bob 的賬戶余額是BobVal;Alice 給Bob 的轉(zhuǎn)賬金額是X.整個(gè)交易過程是多方參與計(jì)算,Bob 將自己的賬戶余額進(jìn)行秘密共享給參與方,Alice 將自己的賬戶余額以及轉(zhuǎn)賬金額進(jìn)行秘密共享給參與方,參與方拿到密文后,直接對密文進(jìn)行運(yùn)算,然后將計(jì)算結(jié)果發(fā)送給重構(gòu)方,重構(gòu)方進(jìn)行重構(gòu)得到最終的計(jì)算結(jié)果.圖2 是以轉(zhuǎn)賬智能合約實(shí)例展示了基于SMPC 的智能合約的整體框架.
本文在智能合約模型中引入了一個(gè)可信方Dealer,它是來管理和監(jiān)督智能合約的執(zhí)行過程.事實(shí)上,Dealer 不會參與智能合約的計(jì)算,Dealer 在執(zhí)行過程中只是起到了驗(yàn)證和通知的作用,因此Dealer 的存在并不影響智能合約的公平性.為了完成智能合約的執(zhí)行,本文在智能合約語言中引入了幾個(gè)控制字符,在轉(zhuǎn)賬智能模型中有以下四種控制字符:
(1)@SMPCConfig 定義了基礎(chǔ)的操作環(huán)境,并建立了操作參數(shù),例如,變量ParmSMPC 定義了SMPC 的參數(shù).
(2)@execute··· 用來規(guī)定下面的函數(shù)執(zhí)行者,其他的參與方來驗(yàn)證執(zhí)行者的身份(例如@execte Dealer 表示,下面的函數(shù)由Dealer 完成執(zhí)行,其他的參與方在函數(shù)執(zhí)行之前,負(fù)責(zé)驗(yàn)證Dealer的身份).
(3)@before 和@after 表示下面的函數(shù)在特定函數(shù)之前或者之后執(zhí)行.
圖2 轉(zhuǎn)賬智能合約模型Figure 2 Model of transfer smart contract
圖3 展示了整個(gè)智能合約在運(yùn)行時(shí)的時(shí)序和狀態(tài)轉(zhuǎn)換.智能合約的執(zhí)行過程要經(jīng)歷四個(gè)階段:初始化階段,對合約的調(diào)用方進(jìn)行身份驗(yàn)證,初始化合約的執(zhí)行環(huán)境并對合約的數(shù)據(jù)進(jìn)行初始化;秘密分享階段,調(diào)用方將計(jì)算值進(jìn)行秘密分發(fā)給計(jì)算節(jié)點(diǎn);SMPC 階段,計(jì)算節(jié)點(diǎn)執(zhí)行自己的計(jì)算任務(wù),最后將計(jì)算結(jié)果發(fā)給Dealer;秘密重構(gòu)階段,Dealer 收集計(jì)算結(jié)果并對其進(jìn)行重構(gòu)得出最終結(jié)果并將結(jié)果傳到賬本中.
圖3 合約的狀態(tài)轉(zhuǎn)換圖Figure 3 Transfer graph of contract state
初始化:驗(yàn)證付款方以及收款方的身份,征集參與計(jì)算的節(jié)點(diǎn)并對執(zhí)行環(huán)境和數(shù)據(jù)進(jìn)行初始化.
(1)身份認(rèn)證.智能合約使用secp256kl 橢圓曲線[15]派生的公鑰導(dǎo)出地址,通過使用相應(yīng)的私鑰和橢圓曲線數(shù)字簽名算法生成簽名,證明地址所有權(quán),從而來驗(yàn)證Alice 和Bob 的身份.認(rèn)證Alice的身份,驗(yàn)證者Dealer 向Alice 發(fā)送一個(gè)挑戰(zhàn)(challenge),Alice 對挑戰(zhàn)進(jìn)行簽名,給Dealer 發(fā)送響應(yīng)(response),Dealer 對Alice 發(fā)送的response 用公鑰進(jìn)行認(rèn)證,從而認(rèn)證Alice 身份;同樣的,認(rèn)證Bob 的身份.
(2)征集計(jì)算節(jié)點(diǎn).這里需要至少征集100 個(gè)節(jié)點(diǎn),從100 個(gè)節(jié)點(diǎn)中隨機(jī)選取10 個(gè)節(jié)點(diǎn)作為參與者參與計(jì)算(此處征集結(jié)點(diǎn)數(shù)以及隨機(jī)選取節(jié)點(diǎn)數(shù)并非定值,本文為方便描述將其賦值為100 和10);將參與者ip 存入公共存儲區(qū)的“machines” 文件中.
(3)環(huán)境和數(shù)據(jù)的初始化.連接machines 文件中列出的機(jī)器并啟動每臺機(jī)器的守護(hù)進(jìn)程,以及獲取參與運(yùn)算機(jī)器的數(shù)量,并計(jì)算門限t=2 num/3.
當(dāng)上面三個(gè)動作全部完成后,Dealer 通知調(diào)用者Alice 和Bob 進(jìn)入秘密分享階段.
秘密分享:對于Alice 來說,轉(zhuǎn)賬動作是付款,是用Alice 賬戶余額減去轉(zhuǎn)賬金額X;對于Bob 來說,轉(zhuǎn)賬動作是收款,是將X加到Bob 賬戶余額中.Alice 和Bob 將參與計(jì)算的值進(jìn)行秘密分享.
(1)Alice 將自己的賬戶余額AliceVal 以及轉(zhuǎn)賬金額X 進(jìn)行秘密分享,這里需要保證至少t個(gè)節(jié)點(diǎn)成功接收秘密分享片段(這里調(diào)用第4 節(jié)安全多方計(jì)算模型中的SPSharingProtocol( )函數(shù)來進(jìn)行秘密共享).
(2)Bob 將自己的賬戶余額BobVal 進(jìn)行秘密分享,和Alice 密鑰分享過程相同,這里需要保證至少t個(gè)節(jié)點(diǎn)成功接收秘密分享片段.當(dāng)Alice 和Bob 秘密分享結(jié)束,Dealer 通知所有參與節(jié)點(diǎn)進(jìn)行SMPC.如果少于t個(gè)節(jié)點(diǎn)成功接收了秘密片段,Dealer 通知Alice 和Bob 重新進(jìn)行秘密共享.
SMPC:計(jì)算節(jié)點(diǎn)調(diào)用安全計(jì)算層的SMPC 算法去完成合約的計(jì)算過程,當(dāng)自己的計(jì)算任務(wù)完成之后,將結(jié)算結(jié)果發(fā)送給重構(gòu)方,如果重構(gòu)方收到的正確的計(jì)算結(jié)果少于t個(gè),那么計(jì)算節(jié)點(diǎn)重新進(jìn)行計(jì)算階段.
秘密重構(gòu):重構(gòu)方收到計(jì)算節(jié)點(diǎn)發(fā)送的計(jì)算結(jié)果,進(jìn)行秘密重構(gòu)得到最終的結(jié)果.秘密重構(gòu)要求至少有門限值t個(gè)正確的結(jié)果,才能重構(gòu)出正確的最終結(jié)果.在重構(gòu)階段,調(diào)用安全計(jì)算層中的秘密重構(gòu)算法.除此之外,智能合約的計(jì)算結(jié)果上傳到區(qū)塊鏈上,這里涉及到簽名和認(rèn)證過程.
智能合約是存儲在區(qū)塊鏈中,一旦有人調(diào)用智能合約,區(qū)塊鏈節(jié)點(diǎn)開始執(zhí)行上述操作,完成智能合約的調(diào)用.
安全多方計(jì)算(SMPC)是n個(gè)參與者P1,P2,···,Pn,需要共同執(zhí)行某一個(gè)計(jì)算任務(wù)
每一方Pi只能得到自己的輸入xi,并且只能獲得自己的輸出yi,SMPC 有以下安全要求:
(1)忠誠性,大部分的參與方是忠誠的,忠誠是指參與方完全按照規(guī)定執(zhí)行任務(wù).
(2)終止性,在有限的時(shí)間中,忠誠方能夠終止執(zhí)行計(jì)算任務(wù).
(3)隱私性,任何參與方Pi不能夠得到其他參與方的輸入xj(ij).
(4)一致性,所有忠誠方最終得到相同的輸出y1=y2=···=yn.
如果對于大小為n的域中,少于t個(gè)參與方是不誠實(shí)的(多數(shù)參與方式忠誠的,例如t 由于智能合約需要中立的公正機(jī)構(gòu)或仲裁機(jī)構(gòu)參與監(jiān)督合約的運(yùn)行,在這里引入SMPC,使公正機(jī)構(gòu)或仲裁機(jī)構(gòu)不僅僅起到一個(gè)監(jiān)督作用,而且還讓它們參與智能合約的執(zhí)行.SMPC 的執(zhí)行過程中,每一方的計(jì)算任務(wù)是一致的,不存在任何中心化特殊節(jié)點(diǎn),由此特性可以保證引入SMPC 的智能合約的公平性.SMPC 隱私性的特性體現(xiàn)到智能合約中,保護(hù)合約各方的輸入信息的私密性,保證了智能合約的隱私性. 由于MPI 支持非阻塞通信,可以滿足SMPC 中門限是t的要求.如圖4 所示是SMPC 加減法的流程圖.根據(jù)SMPC 的加減法流程圖給出的數(shù)據(jù)流圖,假設(shè)參與方為n個(gè),以計(jì)算a與b的和為例,整體數(shù)據(jù)的流向圖如圖5 所示. SMPC 算法的執(zhí)行過程是建立在MPI 多方通信機(jī)制上,但進(jìn)行秘密分享時(shí),由于需要發(fā)送給每方的密鑰片段是不同的,所以調(diào)用MPI 中的散發(fā)函數(shù),將密鑰片段發(fā)送給參與計(jì)算的參與方.當(dāng)各方通過MPI非阻塞通信收到密鑰片段后,對其進(jìn)行計(jì)算,然后通過MPI 非阻塞通信將計(jì)算結(jié)果發(fā)送給重構(gòu)方.重構(gòu)方通過MPI 中的收集函數(shù)收集其它方的計(jì)算結(jié)果,將收到的結(jié)果進(jìn)行秘密重構(gòu)得出最終結(jié)果. SMPC 的加減法運(yùn)算主要分為以下三個(gè)階段: (1)秘密分享:利用Shamir 的秘密共享方案[16]使用拉格朗日插值公式完成了基本的(t,n)門限秘密共享,其過程如下:在Fp中,對于給定的秘密a,隨機(jī)選取t?1 個(gè)隨機(jī)數(shù)(r1,r2,···,rt?1),令r0=a構(gòu)成多項(xiàng)式方程.對于分布式計(jì)算中的任意具有標(biāo)識的成員Pi(其中,i∈[1,n])所獲得秘密a的共享值為ai=fa(xi);同樣地,對于給定的秘密b,隨機(jī)選取t?1個(gè)隨機(jī)數(shù)(l1,l2,···,lt?1),令l0=b構(gòu)成多項(xiàng)式方程對于分布式計(jì)算中的任意具有標(biāo)識xi的成員Pi所獲得秘密b的共享值為bi=fb(xi); (2)計(jì)算階段:每個(gè)成員Pi通過MPI 非阻塞通信中的接收函數(shù)接收需要計(jì)算的數(shù)值,分別進(jìn)行各自的計(jì)算,得出計(jì)算結(jié)果ci,將計(jì)算結(jié)果通過MPI 非阻塞通信中的發(fā)送函數(shù)發(fā)送; (3)秘密重構(gòu):成員使用MPI 通信中的收集函數(shù),收集其他節(jié)點(diǎn)發(fā)送來的結(jié)果,然后進(jìn)行秘密重構(gòu).如果由m(mt)名成員所計(jì)算的結(jié)果{c1,c2,···,cm} 恢復(fù)出原始秘密值c,那么可求解出其中稱(α1,α2,···,αn)為一個(gè)重組向量.偽代碼中使用MPI 通信函數(shù)中的收集函數(shù),收集成員Pi的發(fā)來的ci,然后進(jìn)行秘密重構(gòu),得出最終的結(jié)果. 圖4 安全多方計(jì)算加減法流程圖Figure 4 Flow chart of SMPC addition and subtraction 圖5 安全多方計(jì)算加法數(shù)據(jù)流圖Figure 5 Data flow chart of SMPC addition and subtraction 為了保證上述安全多方計(jì)算過程的抗攻擊性,進(jìn)一步引入可驗(yàn)證秘密共享機(jī)制如下:取乘法群的一個(gè)p階生成元為g獲得循環(huán)子群,采用可驗(yàn)證秘密分享對a進(jìn)行分享,將(其中p|(q?1))進(jìn)行廣播,那么通過驗(yàn)證等式是否成立即可驗(yàn)證分享fa(x)是否正確.同樣的采用可驗(yàn)證密鑰分享對b進(jìn)行分享,將進(jìn)行廣播,那么通過驗(yàn)證等式是否成立,即可驗(yàn)證分享fb(x)是否正確.通過驗(yàn)證是否成立即可驗(yàn)證fa(x)+fb(x)的計(jì)算結(jié)果是否正確.這至少有t方計(jì)算結(jié)果正確才能重構(gòu)出最終正確的計(jì)算結(jié)果,即門限值為t. 安全多方計(jì)算中實(shí)現(xiàn)多名參與者之間的高效通信問題是極其重要的,本文采用MPI[17,18]通信機(jī)制,滿足在安全多方計(jì)算過程中的通信要求. 表1 中的函數(shù)屬于MPI 系統(tǒng)函數(shù),其中Init()初始化MPI 執(zhí)行環(huán)境,建立多個(gè)MPI 進(jìn)程之間的聯(lián)系,為后續(xù)通信做準(zhǔn)備;Finalize()函數(shù)來終止MPI 的執(zhí)行環(huán)境.Size()函數(shù)返回在給定通信域中所包含的進(jìn)程個(gè)數(shù),即參與方個(gè)數(shù);Rank()函數(shù)返回給定通信域中的進(jìn)程號,即給定參與方id. 表1 MPI 中的系統(tǒng)函數(shù)Table 1 System functions in MPI 表2 中描述的是調(diào)用的MPI 中的通信函數(shù),MPI 應(yīng)用于多方安全計(jì)算通信時(shí),主要應(yīng)用的函數(shù)是廣播,收集,散發(fā)以及全交換函數(shù).將任務(wù)進(jìn)行秘密的分發(fā)調(diào)用Scatter()函數(shù),將生成的分享片段分發(fā)給參與方;各方調(diào)用Gather()函數(shù)收集密鑰片段;調(diào)用Alltoall()函數(shù)來完成各方之間的完全消息交換. 表2 MPI 中的通信函數(shù)Table 2 Communication functions in MPI 在本文的SMPC-SC 執(zhí)行系統(tǒng)中,主要使用上述功能來實(shí)現(xiàn)底層通信.在系統(tǒng)中可能存在兩種攻擊:截?cái)喙粢约巴ㄐ潘矫苄怨?在MPI 中為防止截?cái)喙?這里采用非阻塞范式來解決,而通信私密性問題主要是通過計(jì)算層中的安全多方計(jì)算解決. 本文通過時(shí)間約束以及門限限制來防止截?cái)喙? (1)時(shí)間約束:在一定的時(shí)間內(nèi),完成通信或者結(jié)束通信. (2)門限限制:在時(shí)間約束的前提下,增加門限限制.在通信被關(guān)閉之前消息正確傳輸?shù)臄?shù)量必須不少于門限值. 在MPI-2.2 版本中點(diǎn)對點(diǎn)通信已經(jīng)滿足了阻塞和非阻塞通信的功能.阻塞調(diào)用是指調(diào)用結(jié)果返回之前,當(dāng)前線程被掛起,直到得到結(jié)果之后才會返回;非阻塞指在不能得到返回結(jié)果之前,該調(diào)用不會阻塞當(dāng)前進(jìn)程.對于一個(gè)有效的非阻塞通信,要求在有限的時(shí)間內(nèi)通信必須被關(guān)閉,同時(shí)要保證忠誠方的數(shù)量超過了門限值.安全多方計(jì)算的底層異步通信過于復(fù)雜,不便于描述,下面僅僅對簡單的發(fā)送和接收函數(shù)進(jìn)行描述. 圖6 展示了非阻塞通信的發(fā)送函數(shù)加上時(shí)間約束和門限限制之后的流程圖.首先建立一個(gè)時(shí)間約束,這里假設(shè)在時(shí)間tc內(nèi),使用Isend 函數(shù)向n個(gè)進(jìn)程發(fā)送n條消息.最終所使用的時(shí)間記為tc′,所成功發(fā)送的消息數(shù)量記為n′.在時(shí)間tc內(nèi),n條消息全部發(fā)送,通信被關(guān)閉;當(dāng)tc′tc時(shí),如果超過了n條消息被成功發(fā)送,那么關(guān)閉通信成功,通信被關(guān)閉;其他情況,通信是失敗的. 實(shí)現(xiàn)的偽代碼如圖7 所示,在偽代碼中,接收函數(shù)和發(fā)送函數(shù)類似,使用進(jìn)程號去控制0 號進(jìn)程發(fā)送消息,其他進(jìn)程接收消息.調(diào)用System.currentTimeMillis( )函數(shù)獲取當(dāng)前的時(shí)間time.0 號進(jìn)程通過for 循環(huán)給其他進(jìn)程發(fā)送100 條消息,然后使用MPI.REQUEST NULL.Test 函數(shù)監(jiān)視發(fā)送狀態(tài).當(dāng)成功發(fā)送的消息數(shù)量超過67=×100并且當(dāng)前時(shí)間小于等于time+10 ms 時(shí),說明成功完成了通信. 圖6 非阻塞send 函數(shù)流程圖Figure 6 Flowchart of non-blocking send function flowchart 圖7 MPI 非阻塞發(fā)送和接收函數(shù)偽代碼Figure 7 Pseudo code of MPI non-blocking sending and receiving function 智能合約日益成為區(qū)塊鏈技術(shù)研究的熱點(diǎn),然而如何保證智能合約在兩方或多方協(xié)同計(jì)算下的執(zhí)行安全仍然是目前沒有解決的問題,而采用密碼學(xué)中的安全多方計(jì)算技術(shù)來設(shè)計(jì)和實(shí)現(xiàn)智能合約被認(rèn)為是最具潛力的解決方案之一.據(jù)此,本文研究基于安全多方計(jì)算的智能合約,采用MPI 通信機(jī)制中的非阻塞通行方式,支持SMPC 每方計(jì)算過程中的相互通信,滿足至少門限值t個(gè)參與方能夠正確通信.SMPC 引入到智能合約,將SMPC 的特性體現(xiàn)到智能合約的公平性、隱私性以及正確性,從而通過安全多方計(jì)算技術(shù)保證智能合約執(zhí)行系統(tǒng)的安全,本文研究對未來智能合約設(shè)計(jì)具有一定的理論指導(dǎo)意義.5 基于MPI的多方通信機(jī)制
6 總結(jié)