本發(fā)明屬于智能合約安全領(lǐng)域,更具體地,涉及一種基于可信環(huán)境的智能合約保護(hù)方法和系統(tǒng)。
背景技術(shù):
智能合約(smartcontracts)是一套數(shù)字形式定義的承諾,對(duì)數(shù)字資產(chǎn)進(jìn)行控制并規(guī)定了合約參與者的權(quán)利與義務(wù),智能合約由計(jì)算機(jī)系統(tǒng)自動(dòng)執(zhí)行,智能合約的執(zhí)行過程就是對(duì)數(shù)據(jù)的處理過程。本質(zhì)上講,智能合約就是使用計(jì)算機(jī)系統(tǒng)中如果-則(if-then)的方式與真實(shí)世界的財(cái)產(chǎn)進(jìn)行交互。雖然智能合約概念提出較早,但是由于缺乏能夠支持智能合約特性的系統(tǒng)或者技術(shù),智能合約的目標(biāo)難以實(shí)現(xiàn)。
區(qū)塊鏈(blockchain)技術(shù)因?yàn)榫哂腥ブ行幕?,交易過程透明且可追蹤等特性被廣泛的應(yīng)用于金融領(lǐng)域,區(qū)塊鏈的出現(xiàn)完美的解決了智能合約實(shí)現(xiàn)過程中的障礙。由于區(qū)塊鏈具有去中心化,交易記錄不可篡改并且可被追蹤的特性,這些特性就保證了智能合約執(zhí)行的公正性,并且區(qū)塊鏈本身就是一個(gè)應(yīng)用程序,智能合約就能夠與它交互。區(qū)塊鏈的出現(xiàn)使得智能合約快速發(fā)展,如今智能合約被廣泛應(yīng)用,并且成為了區(qū)塊鏈技術(shù)的特性之一。
在區(qū)塊鏈執(zhí)行的智能合約通常包括部署以及執(zhí)行兩個(gè)階段,在部署階段創(chuàng)建者創(chuàng)建智能合約,并將智能合約部署到區(qū)塊鏈之上,由于區(qū)塊鏈的公開性,部署在區(qū)塊鏈上的智能合約對(duì)所有人都是可見的。在執(zhí)行階段,區(qū)塊鏈節(jié)點(diǎn)獲取要執(zhí)行的智能合約,之后獲取處理的數(shù)據(jù),并通常在類似于虛擬機(jī)的環(huán)境中讓智能合約對(duì)數(shù)據(jù)進(jìn)行處理,之后區(qū)塊鏈節(jié)點(diǎn)對(duì)結(jié)果共識(shí),將共識(shí)結(jié)果返回給創(chuàng)建方。
然而,現(xiàn)有的智能合約系統(tǒng)存在以下技術(shù)問題:首先,智能合約一旦部署在區(qū)塊鏈之上,智能合約就要被公開,這就意味著智能合約能夠被智能合約創(chuàng)建者以外的人看到,但是有些智能合約的創(chuàng)建者不想讓別人看到智能合約的內(nèi)容,這就涉及到版權(quán)問題,非常明顯,當(dāng)今智能合約系統(tǒng)不能夠保護(hù)智能合約版權(quán);其次,智能合約的執(zhí)行環(huán)境類似于虛擬機(jī),不能夠抵抗惡意主機(jī)內(nèi)核級(jí)別的信息竊取,意味著惡意攻擊者可以獲取智能合約,通過挖掘智能合約本身代碼存在的漏洞,進(jìn)而損害智能合約使用者的權(quán)益;第三,智能合約在執(zhí)行之前,需要獲取數(shù)據(jù)源提供的數(shù)據(jù),但是當(dāng)前執(zhí)行智能合約的過程中并不能夠?qū)?shù)據(jù)源提供的數(shù)據(jù)進(jìn)行保護(hù),攻擊者可能將數(shù)據(jù)源提供的數(shù)據(jù)緩存到本地或者將數(shù)據(jù)進(jìn)行轉(zhuǎn)發(fā),進(jìn)而竊取數(shù)據(jù)源提供的數(shù)據(jù)。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)的以上缺陷或改進(jìn)需求,本發(fā)明提供了一種基于可信環(huán)境的智能合約保護(hù)方法和系統(tǒng),其目的在于,解決現(xiàn)有智能合約系統(tǒng)中存在的容易出現(xiàn)智能合約信息泄漏而導(dǎo)致無法保護(hù)智能合約版權(quán)、智能合約使用者權(quán)益受損的技術(shù)問題,以及容易出現(xiàn)數(shù)據(jù)泄露而導(dǎo)致數(shù)據(jù)被竊取的技術(shù)問題。
為實(shí)現(xiàn)上述目的,按照本發(fā)明的一個(gè)方面,提供了一種基于可信環(huán)境的智能合約保護(hù)方法,其是應(yīng)用在一種智能合約保護(hù)系統(tǒng)中,所述智能合約保護(hù)系統(tǒng)包括區(qū)塊鏈節(jié)點(diǎn)、客戶端和數(shù)據(jù)提供方,其特征在于,所述方法包括以下步驟:
(1)客戶端創(chuàng)建智能合約,并在可信環(huán)境下對(duì)該智能合約進(jìn)行哈希運(yùn)算,使用對(duì)稱加密算法對(duì)智能合約進(jìn)行加密處理,并將加密處理后的智能合約部署在區(qū)塊鏈上,以獲得智能合約地址。
(2)區(qū)塊鏈節(jié)點(diǎn)向客戶端發(fā)送合約信息獲取請(qǐng)求,客戶端根據(jù)該信息獲取請(qǐng)求與區(qū)塊鏈節(jié)點(diǎn)進(jìn)行可信環(huán)境認(rèn)證,如果可信環(huán)境認(rèn)證通過則進(jìn)入步驟(3),否則過程結(jié)束。
(3)客戶端在可信環(huán)境中使用區(qū)塊鏈節(jié)點(diǎn)提供的一次性公鑰對(duì)步驟(1)中哈希運(yùn)算的結(jié)果、對(duì)稱加密智能合約過程使用的密鑰、以及智能合約地址作為合約信息進(jìn)行非對(duì)稱加密,并將加密結(jié)果傳送到區(qū)塊鏈節(jié)點(diǎn);
(4)區(qū)塊鏈節(jié)點(diǎn)在可信環(huán)境中使用與一次性公鑰對(duì)應(yīng)的一次性私鑰對(duì)加密結(jié)果進(jìn)行非對(duì)稱解密,并使用非對(duì)稱加密算法對(duì)解密得到的對(duì)稱密鑰以及哈希值進(jìn)行加密,連同智能合約地址一同存儲(chǔ)在本地合約信息存儲(chǔ)池;
(5)區(qū)塊鏈節(jié)點(diǎn)從客戶端獲取其需要執(zhí)行的智能合約地址,根據(jù)該智能合約地址獲取區(qū)塊鏈中對(duì)應(yīng)的智能合約密文、以及步驟(4)中本地存儲(chǔ)的合約信息,在可信環(huán)境中對(duì)合約信息進(jìn)行非對(duì)稱解密,以得到哈希運(yùn)算的結(jié)果以及加密智能合約時(shí)使用的對(duì)稱密鑰,使用該對(duì)稱密鑰解密智能合約密文,并對(duì)解密后的智能合約進(jìn)行哈希運(yùn)算,判斷得到的結(jié)果與哈希運(yùn)算的結(jié)果是否一致,如果一致則進(jìn)入步驟(6),否則過程結(jié)束。
(6)區(qū)塊鏈節(jié)點(diǎn)向數(shù)據(jù)提供方發(fā)送數(shù)據(jù)獲取請(qǐng)求,數(shù)據(jù)提供方根據(jù)該數(shù)據(jù)獲取請(qǐng)求與區(qū)塊鏈節(jié)點(diǎn)進(jìn)行可信環(huán)境認(rèn)證,如果可信環(huán)境認(rèn)證通過則進(jìn)入步驟(7),否則過程結(jié)束。
(7)區(qū)塊鏈節(jié)點(diǎn)將新的一次性公鑰發(fā)送到數(shù)據(jù)提供方,數(shù)據(jù)提供方在可信環(huán)境中使用對(duì)稱加密算法對(duì)數(shù)據(jù)獲取請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)進(jìn)行加密,使用新的一次性公鑰對(duì)對(duì)稱加密算法中的一次性對(duì)稱密鑰進(jìn)行加密,并將加密后的數(shù)據(jù)和加密后的對(duì)稱密鑰發(fā)送到區(qū)塊鏈節(jié)點(diǎn);
(8)區(qū)塊鏈節(jié)點(diǎn)將加密后的數(shù)據(jù)和加密后的對(duì)稱密鑰讀入到可信環(huán)境中,并對(duì)可信環(huán)境的數(shù)據(jù)輸出做出一定的限制,在可信環(huán)境中使用與一次性公鑰對(duì)應(yīng)的一次性私鑰對(duì)加密后的一次性對(duì)稱密鑰進(jìn)行非對(duì)稱解密,使用解密后的一次性對(duì)稱密鑰對(duì)加密后的數(shù)據(jù)進(jìn)行解密,并使用步驟(5)中解密后的智能合約對(duì)解密后的數(shù)據(jù)進(jìn)行處理,以獲得智能合約運(yùn)算結(jié)果。
(9)區(qū)塊鏈節(jié)點(diǎn)向客戶端發(fā)送一次性對(duì)稱密鑰獲取請(qǐng)求,客戶端根據(jù)該一次性對(duì)稱密鑰獲取請(qǐng)求與區(qū)塊鏈節(jié)點(diǎn)進(jìn)行可信環(huán)境認(rèn)證,如果可信環(huán)境認(rèn)證通過則進(jìn)入步驟(10),否則過程結(jié)束。
(10)區(qū)塊鏈節(jié)點(diǎn)將新的一次性公鑰發(fā)送到客戶端,客戶端在可信環(huán)境中產(chǎn)生一次性對(duì)稱密鑰,使用該新的一次性公鑰對(duì)一次性對(duì)稱密鑰進(jìn)行加密,并將加密結(jié)果發(fā)送到區(qū)塊鏈節(jié)點(diǎn);
(11)區(qū)塊鏈節(jié)點(diǎn)在可信環(huán)境中使用與一次性公鑰對(duì)應(yīng)的一次性私鑰對(duì)加密后的一次性對(duì)稱密鑰進(jìn)行非對(duì)稱解密,使用得到的一次性對(duì)稱密鑰對(duì)步驟(8)中得到的智能合約運(yùn)算結(jié)果進(jìn)行加密,并將加密結(jié)果在區(qū)塊鏈節(jié)點(diǎn)之間進(jìn)行共識(shí);
(12)客戶端獲取共識(shí)的結(jié)果,并在可信環(huán)境中使用步驟(10)中的一次性對(duì)稱密鑰對(duì)共識(shí)的結(jié)果進(jìn)行解密。
按照本發(fā)明的另一方面,提供了一種基于可信環(huán)境的智能合約保護(hù)方法,其是應(yīng)用在一種智能合約保護(hù)系統(tǒng)中,所述智能合約保護(hù)系統(tǒng)包括區(qū)塊鏈節(jié)點(diǎn)、客戶端和數(shù)據(jù)提供方,所述方法包括以下步驟:
(1)客戶端創(chuàng)建智能合約,并在可信環(huán)境下對(duì)該智能合約進(jìn)行哈希運(yùn)算,使用對(duì)稱加密算法對(duì)智能合約進(jìn)行加密處理,并將加密處理后的智能合約部署在區(qū)塊鏈上,以獲得智能合約地址。
(2)區(qū)塊鏈節(jié)點(diǎn)向客戶端發(fā)送合約信息獲取請(qǐng)求,客戶端根據(jù)該信息獲取請(qǐng)求與區(qū)塊鏈節(jié)點(diǎn)進(jìn)行可信環(huán)境認(rèn)證,如果可信環(huán)境認(rèn)證通過則進(jìn)入步驟(3),否則過程結(jié)束。
(3)客戶端在可信環(huán)境認(rèn)證通過以后在可信環(huán)境中使用區(qū)塊鏈節(jié)點(diǎn)提供的一次性公鑰對(duì)步驟(1)中哈希運(yùn)算的結(jié)果以及對(duì)稱加密智能合約過程使用的密鑰作為合約信息進(jìn)行非對(duì)稱加密,并將加密結(jié)果以及智能合約地址傳送到區(qū)塊鏈節(jié)點(diǎn);
(4)區(qū)塊鏈節(jié)點(diǎn)在可信環(huán)境中使用與一次性公鑰對(duì)應(yīng)的一次性私鑰對(duì)加密結(jié)果進(jìn)行非對(duì)稱解密,并使用非對(duì)稱加密算法對(duì)解密得到的對(duì)稱密鑰以及哈希值進(jìn)行加密,連同智能合約地址一同存儲(chǔ)在本地合約信息存儲(chǔ)池。
(5)區(qū)塊鏈節(jié)點(diǎn)從客戶端獲取其需要執(zhí)行的智能合約地址,根據(jù)該智能合約地址獲取區(qū)塊鏈中對(duì)應(yīng)的智能合約密文、以及步驟(4)中本地存儲(chǔ)的合約信息,在可信環(huán)境中對(duì)合約信息進(jìn)行非對(duì)稱解密,以得到哈希運(yùn)算的結(jié)果以及加密智能合約時(shí)使用的對(duì)稱密鑰,使用該對(duì)稱密鑰解密智能合約密文,并對(duì)解密后的智能合約進(jìn)行哈希運(yùn)算,判斷得到的結(jié)果與哈希運(yùn)算的結(jié)果是否一致,如果一致則進(jìn)入步驟(6),否則過程結(jié)束。
(6)區(qū)塊鏈節(jié)點(diǎn)向數(shù)據(jù)提供方發(fā)送數(shù)據(jù)獲取請(qǐng)求,數(shù)據(jù)提供方根據(jù)該數(shù)據(jù)獲取請(qǐng)求與區(qū)塊鏈節(jié)點(diǎn)進(jìn)行可信環(huán)境認(rèn)證,如果可信環(huán)境認(rèn)證通過則進(jìn)入步驟(7),否則過程結(jié)束。
(7)區(qū)塊鏈節(jié)點(diǎn)將新的一次性公鑰發(fā)送到數(shù)據(jù)提供方,數(shù)據(jù)提供方在可信環(huán)境中使用對(duì)稱加密算法對(duì)數(shù)據(jù)獲取請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)進(jìn)行加密,使用新的一次性公鑰對(duì)對(duì)稱加密算法中的一次性對(duì)稱密鑰進(jìn)行加密,并將加密后的數(shù)據(jù)和加密后的對(duì)稱密鑰發(fā)送到區(qū)塊鏈節(jié)點(diǎn);
(8)區(qū)塊鏈節(jié)點(diǎn)將加密后的數(shù)據(jù)和加密后的對(duì)稱密鑰讀入到可信環(huán)境中,并對(duì)可信環(huán)境的數(shù)據(jù)輸出做出一定的限制,在可信環(huán)境中使用與一次性公鑰對(duì)應(yīng)的一次性私鑰對(duì)加密后的一次性對(duì)稱密鑰進(jìn)行非對(duì)稱解密,使用解密后的一次性對(duì)稱密鑰對(duì)加密后的數(shù)據(jù)進(jìn)行解密,并使用步驟(5)中解密后的智能合約對(duì)解密后的數(shù)據(jù)進(jìn)行處理,以獲得智能合約運(yùn)算結(jié)果。
(9)區(qū)塊鏈節(jié)點(diǎn)向客戶端發(fā)送一次性對(duì)稱密鑰獲取請(qǐng)求,客戶端根據(jù)該一次性對(duì)稱密鑰獲取請(qǐng)求與區(qū)塊鏈節(jié)點(diǎn)進(jìn)行可信環(huán)境認(rèn)證,如果可信環(huán)境認(rèn)證通過則進(jìn)入步驟(10),否則過程結(jié)束。
(10)區(qū)塊鏈節(jié)點(diǎn)將新的一次性公鑰發(fā)送到客戶端,客戶端在可信環(huán)境中產(chǎn)生一次性對(duì)稱密鑰,使用該新的一次性公鑰對(duì)一次性對(duì)稱密鑰進(jìn)行加密,并將加密結(jié)果發(fā)送到區(qū)塊鏈節(jié)點(diǎn);
(11)區(qū)塊鏈節(jié)點(diǎn)在可信環(huán)境中使用與一次性公鑰對(duì)應(yīng)的一次性私鑰對(duì)加密后的一次性對(duì)稱密鑰進(jìn)行非對(duì)稱解密,使用得到的一次性對(duì)稱密鑰對(duì)步驟(8)中得到的智能合約運(yùn)算結(jié)果進(jìn)行加密,并將加密結(jié)果在區(qū)塊鏈節(jié)點(diǎn)之間進(jìn)行共識(shí);
(12)客戶端獲取共識(shí)的結(jié)果,并在可信環(huán)境中使用步驟(10)中的一次性對(duì)稱密鑰對(duì)共識(shí)的結(jié)果進(jìn)行解密。
優(yōu)選地,步驟(1)中使用的對(duì)稱加密算法可以是des算法、3des算法、aes算法等。
優(yōu)選地,步驟(3)中使用的非對(duì)稱加密算法可以是rsa、elgamal、背包算法、rabin、d-h、ecc等。
按照本發(fā)明的另一方面,提供了一種基于可信環(huán)境的智能合約保護(hù)系統(tǒng),其是應(yīng)用在一種智能合約保護(hù)系統(tǒng)中,所述智能合約保護(hù)系統(tǒng)包括區(qū)塊鏈節(jié)點(diǎn)、客戶端和數(shù)據(jù)提供方,所述系統(tǒng)包括:
第一模塊,其設(shè)置于客戶端中,用于創(chuàng)建智能合約,并在可信環(huán)境下對(duì)該智能合約進(jìn)行哈希運(yùn)算,使用對(duì)稱加密算法對(duì)智能合約進(jìn)行加密處理,并將加密處理后的智能合約部署在區(qū)塊鏈上,以獲得智能合約地址。
第二模塊,其設(shè)置于區(qū)塊鏈節(jié)點(diǎn)中,用于向客戶端發(fā)送合約信息獲取請(qǐng)求,客戶端根據(jù)該信息獲取請(qǐng)求與區(qū)塊鏈節(jié)點(diǎn)進(jìn)行可信環(huán)境認(rèn)證,如果可信環(huán)境認(rèn)證通過則進(jìn)入第三模塊,否則過程結(jié)束。
第三模塊,其設(shè)置于客戶端中,用于在可信環(huán)境中使用區(qū)塊鏈節(jié)點(diǎn)提供的一次性公鑰對(duì)第一模塊中哈希運(yùn)算的結(jié)果、對(duì)稱加密智能合約過程使用的密鑰、以及智能合約地址作為合約信息進(jìn)行非對(duì)稱加密,并將加密結(jié)果傳送到區(qū)塊鏈節(jié)點(diǎn);
第四模塊,其設(shè)置于區(qū)塊鏈節(jié)點(diǎn)中,用于在可信環(huán)境中使用與一次性公鑰對(duì)應(yīng)的一次性私鑰對(duì)加密結(jié)果進(jìn)行非對(duì)稱解密,并使用非對(duì)稱加密算法對(duì)解密得到的對(duì)稱密鑰以及哈希值進(jìn)行加密,連同智能合約地址一同存儲(chǔ)在本地合約信息存儲(chǔ)池;
第五模塊,其設(shè)置于區(qū)塊鏈節(jié)點(diǎn)中,用于從客戶端獲取其需要執(zhí)行的智能合約地址,根據(jù)該智能合約地址獲取區(qū)塊鏈中對(duì)應(yīng)的智能合約密文、以及第四模塊中本地存儲(chǔ)的合約信息,在可信環(huán)境中對(duì)合約信息進(jìn)行非對(duì)稱解密,以得到哈希運(yùn)算的結(jié)果以及加密智能合約時(shí)使用的對(duì)稱密鑰,使用該對(duì)稱密鑰解密智能合約密文,并對(duì)解密后的智能合約進(jìn)行哈希運(yùn)算,判斷得到的結(jié)果與哈希運(yùn)算的結(jié)果是否一致,如果一致則進(jìn)入第六模塊,否則過程結(jié)束。
第六模塊,其設(shè)置于區(qū)塊鏈節(jié)點(diǎn)中,用于向數(shù)據(jù)提供方發(fā)送數(shù)據(jù)獲取請(qǐng)求,數(shù)據(jù)提供方根據(jù)該數(shù)據(jù)獲取請(qǐng)求與區(qū)塊鏈節(jié)點(diǎn)進(jìn)行可信環(huán)境認(rèn)證,如果可信環(huán)境認(rèn)證通過則進(jìn)入第七模塊,否則過程結(jié)束。
第七模塊,其設(shè)置于數(shù)據(jù)提供方中,用于接收區(qū)塊鏈節(jié)點(diǎn)發(fā)送的新的一次性公鑰,在可信環(huán)境中使用對(duì)稱加密算法對(duì)數(shù)據(jù)獲取請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)進(jìn)行加密,使用新的一次性公鑰對(duì)對(duì)稱加密算法中的一次性對(duì)稱密鑰進(jìn)行加密,并將加密后的數(shù)據(jù)和加密后的對(duì)稱密鑰發(fā)送到區(qū)塊鏈節(jié)點(diǎn);
第八模塊,其設(shè)置于區(qū)塊鏈節(jié)點(diǎn)中,用于將加密后的數(shù)據(jù)和加密后的對(duì)稱密鑰讀入到可信環(huán)境中,并對(duì)可信環(huán)境的數(shù)據(jù)輸出做出一定的限制,在可信環(huán)境中使用與一次性公鑰對(duì)應(yīng)的一次性私鑰對(duì)加密后的一次性對(duì)稱密鑰進(jìn)行非對(duì)稱解密,使用解密后的一次性對(duì)稱密鑰對(duì)加密后的數(shù)據(jù)進(jìn)行解密,并使用第五模塊中解密后的智能合約對(duì)解密后的數(shù)據(jù)進(jìn)行處理,以獲得智能合約運(yùn)算結(jié)果。
第九模塊,其設(shè)置于區(qū)塊鏈節(jié)點(diǎn)中,用于向客戶端發(fā)送一次性對(duì)稱密鑰獲取請(qǐng)求,客戶端根據(jù)該一次性對(duì)稱密鑰獲取請(qǐng)求與區(qū)塊鏈節(jié)點(diǎn)進(jìn)行可信環(huán)境認(rèn)證,如果可信環(huán)境認(rèn)證通過則進(jìn)入第十模塊,否則過程結(jié)束。
第十模塊,其設(shè)置于客戶端中,用于接收區(qū)塊鏈節(jié)點(diǎn)發(fā)送的新的一次性公鑰,在可信環(huán)境中產(chǎn)生一次性對(duì)稱密鑰,使用該新的一次性公鑰對(duì)一次性對(duì)稱密鑰進(jìn)行加密,并將加密結(jié)果發(fā)送到區(qū)塊鏈節(jié)點(diǎn);
第十一模塊,其設(shè)置于區(qū)塊鏈節(jié)點(diǎn)中,用于在可信環(huán)境中使用與一次性公鑰對(duì)應(yīng)的一次性私鑰對(duì)加密后的一次性對(duì)稱密鑰進(jìn)行非對(duì)稱解密,使用得到的一次性對(duì)稱密鑰對(duì)第八模塊中得到的智能合約運(yùn)算結(jié)果進(jìn)行加密,并將加密結(jié)果在區(qū)塊鏈節(jié)點(diǎn)之間進(jìn)行共識(shí);
第十二模塊,其設(shè)置于客戶端中,用于獲取共識(shí)的結(jié)果,并在可信環(huán)境中使用第十模塊中的一次性對(duì)稱密鑰對(duì)共識(shí)的結(jié)果進(jìn)行解密。
按照本發(fā)明的另一方面,提供了一種基于可信環(huán)境的智能合約保護(hù)系統(tǒng),其是應(yīng)用在一種智能合約保護(hù)系統(tǒng)中,所述智能合約保護(hù)系統(tǒng)包括區(qū)塊鏈節(jié)點(diǎn)、客戶端和數(shù)據(jù)提供方,所述系統(tǒng)包括:
第一模塊,其設(shè)置于客戶端中,用于創(chuàng)建智能合約,并在可信環(huán)境下對(duì)該智能合約進(jìn)行哈希運(yùn)算,使用對(duì)稱加密算法對(duì)智能合約進(jìn)行加密處理,并將加密處理后的智能合約部署在區(qū)塊鏈上,以獲得智能合約地址。
第二模塊,其設(shè)置于區(qū)塊鏈節(jié)點(diǎn)中,用于向客戶端發(fā)送合約信息獲取請(qǐng)求,客戶端根據(jù)該信息獲取請(qǐng)求與區(qū)塊鏈節(jié)點(diǎn)進(jìn)行可信環(huán)境認(rèn)證,如果可信環(huán)境認(rèn)證通過則進(jìn)入第三模塊,否則過程結(jié)束。
第三模塊,其設(shè)置于客戶端中,用于在可信環(huán)境認(rèn)證通過以后在可信環(huán)境中使用區(qū)塊鏈節(jié)點(diǎn)提供的一次性公鑰對(duì)第一模塊中哈希運(yùn)算的結(jié)果以及對(duì)稱加密智能合約過程使用的密鑰作為合約信息進(jìn)行非對(duì)稱加密,并將加密結(jié)果以及智能合約地址傳送到區(qū)塊鏈節(jié)點(diǎn);
第四模塊,其設(shè)置于區(qū)塊鏈節(jié)點(diǎn)中,用于在可信環(huán)境中使用與一次性公鑰對(duì)應(yīng)的一次性私鑰對(duì)加密結(jié)果進(jìn)行非對(duì)稱解密,并使用非對(duì)稱加密算法對(duì)解密得到的對(duì)稱密鑰以及哈希值進(jìn)行加密,連同智能合約地址一同存儲(chǔ)在本地合約信息存儲(chǔ)池;
第五模塊,其設(shè)置于區(qū)塊鏈節(jié)點(diǎn)中,用于從客戶端獲取其需要執(zhí)行的智能合約地址,根據(jù)該智能合約地址獲取區(qū)塊鏈中對(duì)應(yīng)的智能合約密文、以及第四模塊中本地存儲(chǔ)的合約信息,在可信環(huán)境中對(duì)合約信息進(jìn)行非對(duì)稱解密,以得到哈希運(yùn)算的結(jié)果以及加密智能合約時(shí)使用的對(duì)稱密鑰,使用該對(duì)稱密鑰解密智能合約密文,并對(duì)解密后的智能合約進(jìn)行哈希運(yùn)算,判斷得到的結(jié)果與哈希運(yùn)算的結(jié)果是否一致,如果一致則進(jìn)入第六模塊,否則過程結(jié)束。
第六模塊,其設(shè)置于區(qū)塊鏈節(jié)點(diǎn)中,用于向數(shù)據(jù)提供方發(fā)送數(shù)據(jù)獲取請(qǐng)求,數(shù)據(jù)提供方根據(jù)該數(shù)據(jù)獲取請(qǐng)求與區(qū)塊鏈節(jié)點(diǎn)進(jìn)行可信環(huán)境認(rèn)證,如果可信環(huán)境認(rèn)證通過則進(jìn)入第七模塊,否則過程結(jié)束。
第七模塊,其設(shè)置于數(shù)據(jù)提供方中,用于接收區(qū)塊鏈節(jié)點(diǎn)發(fā)送的新的一次性公鑰,在可信環(huán)境中使用對(duì)稱加密算法對(duì)數(shù)據(jù)獲取請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)進(jìn)行加密,使用新的一次性公鑰對(duì)對(duì)稱加密算法中的一次性對(duì)稱密鑰進(jìn)行加密,并將加密后的數(shù)據(jù)和加密后的對(duì)稱密鑰發(fā)送到區(qū)塊鏈節(jié)點(diǎn);
第八模塊,其設(shè)置于區(qū)塊鏈節(jié)點(diǎn)中,用于將加密后的數(shù)據(jù)和加密后的對(duì)稱密鑰讀入到可信環(huán)境中,并對(duì)可信環(huán)境的數(shù)據(jù)輸出做出一定的限制,在可信環(huán)境中使用與一次性公鑰對(duì)應(yīng)的一次性私鑰對(duì)加密后的一次性對(duì)稱密鑰進(jìn)行非對(duì)稱解密,使用解密后的一次性對(duì)稱密鑰對(duì)加密后的數(shù)據(jù)進(jìn)行解密,并使用第五模塊中解密后的智能合約對(duì)解密后的數(shù)據(jù)進(jìn)行處理,以獲得智能合約運(yùn)算結(jié)果。
第九模塊,其設(shè)置于區(qū)塊鏈節(jié)點(diǎn)中,用于向客戶端發(fā)送一次性對(duì)稱密鑰獲取請(qǐng)求,客戶端根據(jù)該一次性對(duì)稱密鑰獲取請(qǐng)求與區(qū)塊鏈節(jié)點(diǎn)進(jìn)行可信環(huán)境認(rèn)證,如果可信環(huán)境認(rèn)證通過則進(jìn)入第十模塊,否則過程結(jié)束。
第十模塊,其設(shè)置于客戶端中,用于接收區(qū)塊鏈節(jié)點(diǎn)發(fā)送的新的一次性公鑰,在可信環(huán)境中產(chǎn)生一次性對(duì)稱密鑰,使用該新的一次性公鑰對(duì)一次性對(duì)稱密鑰進(jìn)行加密,并將加密結(jié)果發(fā)送到區(qū)塊鏈節(jié)點(diǎn);
第十一模塊,其設(shè)置于區(qū)塊鏈節(jié)點(diǎn)中,用于在可信環(huán)境中使用與一次性公鑰對(duì)應(yīng)的一次性私鑰對(duì)加密后的一次性對(duì)稱密鑰進(jìn)行非對(duì)稱解密,使用得到的一次性對(duì)稱密鑰對(duì)第八模塊中得到的智能合約運(yùn)算結(jié)果進(jìn)行加密,并將加密結(jié)果在區(qū)塊鏈節(jié)點(diǎn)之間進(jìn)行共識(shí);
第十二模塊,其設(shè)置于客戶端中,用于獲取共識(shí)的結(jié)果,并在可信環(huán)境中使用第十模塊中的一次性對(duì)稱密鑰對(duì)共識(shí)的結(jié)果進(jìn)行解密。
總體而言,通過本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,能夠取得下列有益效果:
(1)由于本發(fā)明采用了步驟(1)到步驟(5),客戶端在可信環(huán)境內(nèi)加密智能合約,并部署加密后的智能合約密文,同時(shí)區(qū)塊鏈節(jié)點(diǎn)在可信環(huán)境內(nèi)對(duì)智能合約密文解密。因此能夠解決智能合約信息泄露導(dǎo)致的智能合約版問題以及智能合約使用者權(quán)益受損問題。
(2)由于本發(fā)明采用了步驟(6)到步驟(12),傳輸數(shù)據(jù)之前在可信環(huán)境內(nèi)對(duì)數(shù)據(jù)加密,并且數(shù)據(jù)到達(dá)目的地之后在可信環(huán)境內(nèi)解密并參與對(duì)應(yīng)的運(yùn)算并且對(duì)智能合約的輸出進(jìn)行限制。因此能夠解決數(shù)據(jù)源提供的數(shù)據(jù)被竊取的問題。
(3)本發(fā)明的開銷低:本發(fā)明對(duì)智能合約以及數(shù)據(jù)加解密采用對(duì)稱加密算法加密,在兼顧安全性的同時(shí)能夠減少加解密帶來的性能開銷。
附圖說明
圖1是本發(fā)明智能合約保護(hù)系統(tǒng)的架構(gòu)圖。
圖2是本發(fā)明基于可信環(huán)境的智能合約保護(hù)方法的流程圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個(gè)實(shí)施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
本發(fā)明整體思路在于,利用可信環(huán)境能夠保障其內(nèi)執(zhí)行程序的完整性與機(jī)密性的特性,保護(hù)智能合約部署之前智能合約加密過程,保護(hù)智能合約的執(zhí)行過程,保護(hù)智能合約輸入數(shù)據(jù)以及計(jì)算結(jié)果數(shù)據(jù)加密過程,防止智能合約在部署階段和執(zhí)行階段信息的泄露。
如圖1所示,本發(fā)明基于可信環(huán)境的智能合約保護(hù)體系包括客戶端(比如以太坊中創(chuàng)建智能合約的節(jié)點(diǎn))、區(qū)塊鏈節(jié)點(diǎn)(比如以太坊中執(zhí)行智能合約的節(jié)點(diǎn))、數(shù)據(jù)提供方(比如以太坊中提供輸入數(shù)據(jù)的節(jié)點(diǎn))、可信環(huán)境(比如sgx硬件創(chuàng)建的保護(hù)環(huán)境)、非可信環(huán)境、智能合約信息處理模塊(a)、區(qū)塊鏈節(jié)點(diǎn)信息傳輸模塊(b)(比如以太坊中節(jié)點(diǎn)交互接口)、輸入數(shù)據(jù)傳輸模塊(c)、智能合約執(zhí)行模塊(d)、本地合約信息存儲(chǔ)池(e)以及區(qū)塊鏈智能合約存儲(chǔ)池(f),客戶端和區(qū)塊鏈節(jié)點(diǎn)通信連接,數(shù)據(jù)提供方和區(qū)塊鏈節(jié)點(diǎn)通信連接,區(qū)塊鏈節(jié)點(diǎn)之間存在通信連接。
客戶端用于部署智能合約,獲取智能合約共識(shí)結(jié)果;
區(qū)塊鏈節(jié)點(diǎn)用于獲取客戶端部署的智能合約,根據(jù)數(shù)據(jù)提供方提供的數(shù)據(jù),運(yùn)行智能合約并獲取相應(yīng)結(jié)果,并在區(qū)塊鏈內(nèi)對(duì)結(jié)果達(dá)成共識(shí)。
數(shù)據(jù)提供方用于給區(qū)塊鏈節(jié)點(diǎn)提供運(yùn)行智能合約時(shí)所需要的數(shù)據(jù)。
可信環(huán)境用于保障內(nèi)部執(zhí)行程序的完整性與機(jī)密性,其內(nèi)部執(zhí)行的程序?qū)ν獠渴遣豢梢姟?/p>
非可信環(huán)境與可信環(huán)境相相反,其內(nèi)執(zhí)行的程序不能夠保證完整性與機(jī)密性。
如圖2所示,本發(fā)明基于可信環(huán)境的智能合約保護(hù)方法,其是應(yīng)用在一種智能合約保護(hù)系統(tǒng)中,該智能合約保護(hù)系統(tǒng)包括區(qū)塊鏈節(jié)點(diǎn)、客戶端和數(shù)據(jù)提供方,所述方法包括以下步驟:
(1)客戶端創(chuàng)建智能合約,并在可信環(huán)境下對(duì)該智能合約進(jìn)行哈希運(yùn)算,使用對(duì)稱加密算法對(duì)智能合約進(jìn)行加密處理,并將加密處理后的智能合約部署在區(qū)塊鏈上,以獲得智能合約地址。
具體而言,本步驟中可信環(huán)境可以是sgx(softwareguardextensions)等技術(shù)創(chuàng)建的執(zhí)行環(huán)境,在可信環(huán)境內(nèi)執(zhí)行操作之前要進(jìn)行可信環(huán)境的創(chuàng)建,在可信環(huán)境內(nèi)操作完成之后要注銷可信環(huán)境。
本步驟中使用的對(duì)稱加密算法可以是數(shù)據(jù)加密標(biāo)準(zhǔn)(dataencryptionstandard,簡(jiǎn)稱des)算法、三次數(shù)據(jù)加密標(biāo)準(zhǔn)(tripledataencryptionstandard,簡(jiǎn)稱3des)算法、高級(jí)加密標(biāo)準(zhǔn)(advancedencryptionstandard,簡(jiǎn)稱aes)算法等。
(2)區(qū)塊鏈節(jié)點(diǎn)向客戶端發(fā)送合約信息獲取請(qǐng)求,客戶端根據(jù)該信息獲取請(qǐng)求與區(qū)塊鏈節(jié)點(diǎn)進(jìn)行可信環(huán)境認(rèn)證,如果可信環(huán)境認(rèn)證通過則進(jìn)入步驟(3),否則過程結(jié)束。
具體而言,本步驟中的可信環(huán)境認(rèn)證是通過簽名的方式實(shí)現(xiàn)。
(3)客戶端在可信環(huán)境中使用區(qū)塊鏈節(jié)點(diǎn)提供的一次性公鑰對(duì)步驟(1)中哈希運(yùn)算的結(jié)果、對(duì)稱加密智能合約過程使用的密鑰、以及智能合約地址作為合約信息進(jìn)行非對(duì)稱加密,并將加密結(jié)果傳送到區(qū)塊鏈節(jié)點(diǎn);
作為另一種實(shí)現(xiàn)方式,本步驟也可以為:
(3’)客戶端在可信環(huán)境認(rèn)證通過以后在可信環(huán)境中使用區(qū)塊鏈節(jié)點(diǎn)提供的一次性公鑰對(duì)步驟(1)中哈希運(yùn)算的結(jié)果以及對(duì)稱加密智能合約過程使用的密鑰作為合約信息進(jìn)行非對(duì)稱加密,并將加密結(jié)果以及智能合約地址傳送到區(qū)塊鏈節(jié)點(diǎn);
本步驟中使用的非對(duì)稱加密算法可以是諸如rsa、elgamal、背包算法、rabin、d-h、橢圓曲線加密(ellipticcurvecryptosystems,簡(jiǎn)稱ecc)等。
(4)區(qū)塊鏈節(jié)點(diǎn)在可信環(huán)境中使用與一次性公鑰對(duì)應(yīng)的一次性私鑰對(duì)加密結(jié)果進(jìn)行非對(duì)稱解密,并使用非對(duì)稱加密算法對(duì)解密得到的對(duì)稱密鑰以及哈希值進(jìn)行加密,連同智能合約地址一同存儲(chǔ)在本地合約信息存儲(chǔ)池。
具體而言,本地合約信息存儲(chǔ)池中存儲(chǔ)的內(nèi)容如表1所示:
表1
(5)區(qū)塊鏈節(jié)點(diǎn)從客戶端獲取其需要執(zhí)行的智能合約地址,根據(jù)該智能合約地址獲取區(qū)塊鏈中對(duì)應(yīng)的智能合約密文、以及步驟(4)中本地存儲(chǔ)的合約信息,在可信環(huán)境中對(duì)合約信息進(jìn)行非對(duì)稱解密,以得到哈希運(yùn)算的結(jié)果以及加密智能合約時(shí)使用的對(duì)稱密鑰,使用該對(duì)稱密鑰解密智能合約密文,并對(duì)解密后的智能合約進(jìn)行哈希運(yùn)算,判斷得到的結(jié)果與哈希運(yùn)算的結(jié)果是否一致,如果一致則進(jìn)入步驟(6),否則表示完整性校驗(yàn)未通過,過程結(jié)束。
(6)區(qū)塊鏈節(jié)點(diǎn)向數(shù)據(jù)提供方發(fā)送數(shù)據(jù)獲取請(qǐng)求,數(shù)據(jù)提供方根據(jù)該數(shù)據(jù)獲取請(qǐng)求與區(qū)塊鏈節(jié)點(diǎn)進(jìn)行可信環(huán)境認(rèn)證,如果可信環(huán)境認(rèn)證通過則進(jìn)入步驟(7),否則過程結(jié)束。
(7)區(qū)塊鏈節(jié)點(diǎn)將新的一次性公鑰發(fā)送到數(shù)據(jù)提供方,數(shù)據(jù)提供方在可信環(huán)境中使用對(duì)稱加密算法對(duì)數(shù)據(jù)獲取請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)進(jìn)行加密,使用新的一次性公鑰對(duì)對(duì)稱加密算法中的一次性對(duì)稱密鑰進(jìn)行加密,并將加密后的數(shù)據(jù)和加密后的對(duì)稱密鑰發(fā)送到區(qū)塊鏈節(jié)點(diǎn);
(8)區(qū)塊鏈節(jié)點(diǎn)將加密后的數(shù)據(jù)和加密后的對(duì)稱密鑰讀入到可信環(huán)境中,并對(duì)可信環(huán)境的數(shù)據(jù)輸出做出一定的限制,在可信環(huán)境中使用與一次性公鑰對(duì)應(yīng)的一次性私鑰對(duì)加密后的一次性對(duì)稱密鑰進(jìn)行非對(duì)稱解密,使用解密后的一次性對(duì)稱密鑰對(duì)加密后的數(shù)據(jù)進(jìn)行解密,并使用步驟(5)中解密后的智能合約對(duì)解密后的數(shù)據(jù)進(jìn)行處理,以獲得智能合約運(yùn)算結(jié)果。
具體而言,對(duì)數(shù)據(jù)輸出的限制是通過設(shè)定一個(gè)數(shù)據(jù)量閾值,超過該數(shù)據(jù)量閾值部分的數(shù)據(jù)會(huì)進(jìn)行收費(fèi),超出的越多,收費(fèi)也就越高。
(9)區(qū)塊鏈節(jié)點(diǎn)向客戶端發(fā)送一次性對(duì)稱密鑰獲取請(qǐng)求,客戶端根據(jù)該一次性對(duì)稱密鑰獲取請(qǐng)求與區(qū)塊鏈節(jié)點(diǎn)進(jìn)行可信環(huán)境認(rèn)證,如果可信環(huán)境認(rèn)證通過則進(jìn)入步驟(10),否則過程結(jié)束。
(10)區(qū)塊鏈節(jié)點(diǎn)將新的一次性公鑰發(fā)送到客戶端,客戶端在可信環(huán)境中產(chǎn)生一次性對(duì)稱密鑰,使用該新的一次性公鑰對(duì)一次性對(duì)稱密鑰進(jìn)行加密,并將加密結(jié)果發(fā)送到區(qū)塊鏈節(jié)點(diǎn);
(11)區(qū)塊鏈節(jié)點(diǎn)在可信環(huán)境中使用與一次性公鑰對(duì)應(yīng)的一次性私鑰對(duì)加密后的一次性對(duì)稱密鑰進(jìn)行非對(duì)稱解密,使用得到的一次性對(duì)稱密鑰對(duì)步驟(8)中得到的智能合約運(yùn)算結(jié)果進(jìn)行加密,并將加密結(jié)果在區(qū)塊鏈節(jié)點(diǎn)之間進(jìn)行共識(shí);
(12)客戶端獲取共識(shí)的結(jié)果,并在可信環(huán)境中使用步驟(10)中的一次性對(duì)稱密鑰對(duì)共識(shí)的結(jié)果進(jìn)行解密。
本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。