王 楠(北方工業(yè)大學(xué) 信息學(xué)院,北京 100144)
在這個信息飛速傳遞的時代,數(shù)據(jù)無時無刻不在交互傳輸,數(shù)據(jù)信息傳遞到各個平臺的服務(wù)器上,其中也包含一些敏感的數(shù)據(jù)。為了降低資源受限用戶的存儲和管理負(fù)擔(dān),這些數(shù)據(jù)大多被存儲在云服務(wù)器中,一旦存在惡意的云服務(wù)器會對數(shù)據(jù)進(jìn)行篡改、刪除或出售給其他服務(wù)器,造成用戶數(shù)據(jù)泄露從而帶來損失。用戶擔(dān)心數(shù)據(jù)泄露,會在上傳數(shù)據(jù)前進(jìn)行加密,但加密后的數(shù)據(jù)需要解密才能獲取,需要將全部密文轉(zhuǎn)化為明文,然后用戶在全部明文中查找需求的明文。實(shí)際場景中,絕大多數(shù)的用戶執(zhí)行解密操作時只想獲取其中的部分內(nèi)容,但是在大量的加密數(shù)據(jù)中想要檢索到自己想要的那一部分明文實(shí)現(xiàn)起來非常困難,大大降低了檢索的效率。所以,雖然有很多成熟的加密算法,但一般加密算法加密后再上傳會給后續(xù)檢索帶來很大困擾。
此時需要一種加密算法,加密復(fù)雜度高,不易被破解,以保障數(shù)據(jù)安全。對于加密者來說,能對密文直接進(jìn)行檢索。在此需求下,可搜索加密技術(shù)應(yīng)運(yùn)而生。最原始的可搜索加密的模型,包括數(shù)據(jù)擁有者、云服務(wù)器和用戶三部分,它允許數(shù)據(jù)擁有者以一種私密的方式把自己的數(shù)據(jù)外包給云端,同時保持?jǐn)?shù)據(jù)的可搜索的能力,即數(shù)據(jù)擁有者加密明文后,將密文上傳到云服務(wù)器,云服務(wù)器保管這些數(shù)據(jù),并且提供搜索服務(wù)。其他用戶訪問時,根據(jù)密文不能得到任何關(guān)于明文的相關(guān)信息,保障了信息的安全。
但隨著技術(shù)的普及和需求的不斷提升,可搜索加密也暴露出一些問題:用戶需要在服務(wù)器提供搜索服務(wù)前支付費(fèi)用,一旦惡意的服務(wù)器返回錯誤的數(shù)據(jù),用戶無法索賠。在某些情況下,用戶也可能存在惡意,否認(rèn)服務(wù)器發(fā)來的正確結(jié)果,或故意發(fā)現(xiàn)錯誤令牌造成服務(wù)器無法檢索到正確結(jié)果,此情況概率很小,對于用戶來說沒有實(shí)質(zhì)收益。因此,在本方案中默認(rèn)用戶是誠實(shí)的,只考慮服務(wù)器的惡意問題。將區(qū)塊鏈技術(shù)引入系統(tǒng),利用區(qū)塊鏈系統(tǒng)的不可篡改、可追蹤等優(yōu)點(diǎn),解決了用戶公平性的問題,避免上述安全事件的發(fā)生。
2000年,song等人首次提出了可搜索加密(Searchable Encryption,SE)的思想[1],并在此基礎(chǔ)上加以實(shí)現(xiàn)。用戶可以通過關(guān)鍵詞在密文中進(jìn)行檢索,該技術(shù)通過加密明文的關(guān)鍵詞生成搜索憑證即訪問令牌,服務(wù)器通過令牌獲得與關(guān)鍵詞相對應(yīng)的密文,返還給用戶。
根據(jù)加密類型的不同,可搜索加密可分為對稱可搜索加密和非對稱可搜索加密,非對稱可搜索加密2004年由Boneh等首次提出[2],利用橢圓曲線算法實(shí)現(xiàn),此加密方式的加密密鑰和解密密鑰不同,導(dǎo)致了算法更加復(fù)雜,解密效率低。相比之下,對稱可搜索加密的優(yōu)勢得以體現(xiàn)[3],相同的密鑰提升了加密解密的效率。最原始的對稱可搜索加密技術(shù)的系統(tǒng)模型大體如圖1所示,包括數(shù)據(jù)擁有者、云服務(wù)器和用戶3部分[4-6]。功能的實(shí)現(xiàn)通過以下3個步驟,步驟一:數(shù)據(jù)擁有者擁有文件集D,通過密鑰K將其加密為密文C,同時生成索引I,將密文C和索引I發(fā)送給云服務(wù)器保存,將密鑰K發(fā)送給用戶。步驟二:用戶生成訪問令牌,把想要搜索的關(guān)鍵字W通過密鑰K加密,轉(zhuǎn)換為搜索令牌Tw,并發(fā)送令牌給服務(wù)器,同時支付費(fèi)用。步驟三:服務(wù)器結(jié)合C、Tw、I生成對應(yīng)關(guān)鍵字W的密文C’,返還給用戶,最后用戶在本地用密鑰K解密C’,獲取想要的明文D'。如果該系統(tǒng)中,除了被授權(quán)的用戶,其他任何人不能通過密文得到明文信息,就可以說該SSE算法是安全的[7]。
圖1 SSE系統(tǒng)模型圖Fig.1 SSE System model diagram
區(qū)塊鏈技術(shù)源于2008年“中本聰”在密碼學(xué)郵件組發(fā)表的名為《比特幣:一種點(diǎn)對點(diǎn)電子現(xiàn)金系統(tǒng)》的論文中[8],之后成為數(shù)字加密貨幣體系的核心技術(shù)。應(yīng)用區(qū)塊鏈技術(shù)結(jié)合可搜索加密是因?yàn)橐韵聝牲c(diǎn):一,區(qū)塊鏈系統(tǒng)是由大量的分布式共識節(jié)點(diǎn)組成的系統(tǒng),沒有中心節(jié)點(diǎn),是由各個節(jié)點(diǎn)共同維護(hù)的系統(tǒng),避免了強(qiáng)大惡意節(jié)點(diǎn)壟斷的情況;二,智能合約的應(yīng)用,依靠合約的執(zhí)行來實(shí)現(xiàn)交易認(rèn)證[9]。區(qū)塊鏈上所有交易均完全公開,并且在加入到區(qū)塊鏈前經(jīng)過全部節(jié)點(diǎn)的驗(yàn)證。并且,時間戳機(jī)制使每一筆交易都有極強(qiáng)的可追溯性[10]。
智能合約在本系統(tǒng)中起到認(rèn)證作用,智能合約的概念最早于1994年由美國的NickSzabo提出[11],本質(zhì)是一系列計算機(jī)交易協(xié)議,在無需第三方的環(huán)境中執(zhí)行合約條款。智能合約的可編程性給區(qū)塊鏈技術(shù)提供了更多操作空間,在區(qū)塊鏈系統(tǒng)中智能合約能更好地發(fā)揮功能[12]。目前,智能合約技術(shù)被廣泛應(yīng)用在區(qū)塊鏈中[13]。
哈希加密算法有著非常好的性質(zhì),首先,哈希加密后密文等長,避免了攻擊者由密文長度獲取關(guān)于明文長度的相關(guān)信息;其次,哈希函數(shù)是典型的單向不可逆函數(shù),例如y=f(x),已知y的值,想要獲取x的值非常困難;最后,哈希函數(shù)的抗碰撞性非常適合對交易結(jié)果進(jìn)行驗(yàn)證。例如x1≠x2,則很難找到f(x1)=f(x2),即難找到兩個不同的關(guān)鍵字對應(yīng)相同的散列值[14,15]。
圖2 改進(jìn)后的系統(tǒng)模型Fig.2 Improved system model
解決了可搜索加密時交易雙方不公平的問題,方法是雙方支付一定數(shù)量的押金,由區(qū)塊鏈系統(tǒng)進(jìn)行檢測,一旦服務(wù)器存在惡意,包括返回錯誤搜索結(jié)果或不完整的搜索結(jié)果,在區(qū)塊鏈系統(tǒng)檢測后將會被扣留押金。區(qū)塊鏈的引入完善了可搜索加密的安全體系,提升了系統(tǒng)安全性,同時可以提供對結(jié)果的認(rèn)證,大大減少了用戶的計算量,本系統(tǒng)是用Python語言實(shí)現(xiàn)的。
加入?yún)^(qū)塊鏈系統(tǒng)后,本系統(tǒng)模型包含4部分,即:數(shù)據(jù)擁有者、服務(wù)器、用戶和區(qū)塊鏈系統(tǒng)。各個部分之間的交互關(guān)系及流程如圖2所示。
改進(jìn)后的具體步驟:
第一步:數(shù)據(jù)擁有者將明文數(shù)據(jù)D加密為密文C,同時生成索引I,將對應(yīng)的私鑰K發(fā)送給用戶,將密文C和索引I發(fā)送給云服務(wù)器。
第二步:用戶給出想要搜索的關(guān)鍵詞w,并加密該關(guān)鍵詞為令牌Tw,并將令牌Tw發(fā)送給區(qū)塊鏈系統(tǒng),同時向區(qū)塊鏈系統(tǒng)支付一定數(shù)量的押金,這是保障后續(xù)交易公平的必要準(zhǔn)備。
第三步:云服務(wù)器向區(qū)塊鏈系統(tǒng)發(fā)送交易請求,支付一定數(shù)量的押金,支付押金后,從區(qū)塊鏈系統(tǒng)中獲得搜索令牌Tw。
第四步:云服務(wù)器得到Tw后,可以結(jié)合數(shù)據(jù)擁有者發(fā)送的C、I在本地計算出關(guān)鍵詞對應(yīng)的密文結(jié)果C'。
第五步:云服務(wù)器將搜索結(jié)果C'返回給區(qū)塊鏈系統(tǒng),經(jīng)區(qū)塊鏈檢驗(yàn)后,判定該服務(wù)器是否為惡意,則該服務(wù)器支付的預(yù)定金不予退回。用戶支付的押金將被退回(本次交易終止)。
第六步:如果服務(wù)器誠實(shí)且提供正確數(shù)據(jù)信息,區(qū)塊鏈系統(tǒng)檢驗(yàn)后,將正確結(jié)果返還給用戶,用戶支付服務(wù)費(fèi)Tp,區(qū)塊鏈系統(tǒng)將服務(wù)費(fèi)Tp轉(zhuǎn)給服務(wù)器,同時退還雙方押金。第七步:用戶在本地解密出明文D'。
表1 符號及其含義Table 1 Symbols and their meanings
本方案所涉及到的符號及其含義在表1中列出。
本系統(tǒng)主要功能由9個算法構(gòu)成并實(shí)現(xiàn),包括(Setup,E nc,Token,Prepare,Appoint,Search,Verification,Pay,Dec)。
Setup(1k)→K以k為安全因子,生成密鑰列K。
Enc(K,D)→(I,C)將密鑰列K和文件數(shù)據(jù)集D作為輸入,輸出密文集C和索引I。
Token(K,w)→(Tw)將密鑰列K、關(guān)鍵詞集合W作為輸入,生成搜索令牌Tw。
Prepare(Tu,Tw)→null:用戶向區(qū)塊鏈系統(tǒng)支付押金Tu,防止用戶中途退出,用戶支付押金時將Tw也發(fā)送給服務(wù)器,用于解密及驗(yàn)證。
Appoint(Ts)→(Tw1)由服務(wù)器執(zhí)行,發(fā)送請求到區(qū)塊鏈,請求獲取Tw1(Tw1是令牌Tw的一部分),由于服務(wù)器可以根據(jù)Tw1獲取用戶的信息,因而發(fā)送請求時需要向區(qū)塊鏈系統(tǒng)支付押金Ts,支付后獲得部分令牌Tw1。
Search(Tw1,I)→(Cw,MACw)服務(wù)器得到Tw1后,結(jié)合索引I進(jìn)行搜索,輸出對應(yīng)的密文Cw,將數(shù)據(jù)擁有者發(fā)送密文C時附帶的帶密鑰哈希MACw和Cw一并發(fā)給區(qū)塊鏈系統(tǒng)。
Verification(t3w,Cw,MACw)→Ture/False判別算法,區(qū)塊鏈系統(tǒng)驗(yàn)證服務(wù)器是否為惡意,輸入Tw-Tw1和Cw,計算MACw',驗(yàn)證MACw'是否等于MACw。若相等,輸出Ture,否則輸出False,交易中止。
Pay(Tp)→Ci驗(yàn)證服務(wù)器非惡意后,區(qū)塊鏈系統(tǒng)將密文Ci返還給用戶,用戶支付費(fèi)用Tp給區(qū)塊鏈系統(tǒng),同時退還用戶押金Tu和服務(wù)器押金Ts。
Dec(Ci ,K)→Di用戶在本地輸入密鑰列K和得到的密文Cw,輸出對應(yīng)關(guān)鍵詞W的明文Di。
數(shù)據(jù)擁有者主要應(yīng)用到偽隨機(jī)函數(shù),包括F1,F2,F3,表示為{0,1}k×{0,1}*→{0,1}k。一個哈希函數(shù)H:{0,1}k→{0,1}m。
1)Setup:生成隨機(jī)密鑰列K1,K2,K3,{0,1}k→K1,K2,K3。
2)Enc:通過使用密鑰K1,數(shù)據(jù)擁有者加密明文D={D1,D2,…,Dn}為密文文件,即C={C1,C2,…,Cn}Ci=ε.Enc(K1,Ci),之后生成密文集合C。令W={w1,w2,…,wn}為明文集D的關(guān)鍵詞集合,其中,m表示關(guān)鍵詞的數(shù)量,對于每一個關(guān)鍵詞Wi(1≤i≤m),選擇初始化為空、大小為n的數(shù)組DB(wi)接收。如果文件集中第j個文件包含關(guān)鍵詞wi,那么DB(wi)[j]=1,否則DB(wi)[j]=0。
數(shù)據(jù)擁有者把(t1wi,ewi,MACwi)放到索引I中,將C,I上傳到云服務(wù)器。
3)Token:數(shù)據(jù)擁有者在步驟2)發(fā)送C,I的同時,會將K1,K2,K3發(fā)送給用戶,用戶根據(jù)想要搜索的關(guān)鍵詞w,生成令牌,進(jìn)行如下計算:
4)Prepare:用戶將步驟3)中生成的t1w,t2w,t3w,發(fā)送給區(qū)塊鏈系統(tǒng),同時為了避免用戶中途退出,需要用戶支付押金Tu。為了避免服務(wù)器的惡意行為,后續(xù)需要服務(wù)器支付押金。
5)Appoint:服務(wù)器向區(qū)塊鏈發(fā)送請求,想要獲得t1w和t2w,由于服務(wù)器可以通過t1w和t2w獲取數(shù)據(jù)信息,因而需要服務(wù)器支付押金。服務(wù)器支付押金Ts,區(qū)塊鏈系統(tǒng)發(fā)送t1w和t2w給服務(wù)器,t3w由區(qū)塊鏈系統(tǒng)保留。
請求算法如下:
Algorithm:Appoint Input: Ts Output:null if blockchain system get Ts then return(t1 w, t2 w)else return Tu to server
6)Search:服務(wù)器通過t1w,t2w結(jié)合數(shù)據(jù)擁有者發(fā)來的(t1wi,ewi,MACwi)計算:
I=(t1wi,ewi,MACwi),將t1w作為密鑰,解密出ewi,MACwi中對應(yīng)關(guān)鍵詞w的ew和MACw。
服務(wù)器繼續(xù)解密,將t2w作為密鑰解密ew得到DB(w),DB(w)=θ.Dec(t2w,ew)。若DB(wi)[j]=1將對應(yīng)的文件Cj放入Cw集中,將Cw和MACw發(fā)送給區(qū)塊鏈系統(tǒng)。
搜索算法如下:
Algorithm:Search find ew from ewi DB(w)=θ.Dec(t2 w, ew)for j in DB(w) do if DB(w)[j]=1 Cw=Cw∪Cj Send Cw MACw to Blockchain end
7)Verification:驗(yàn)證交易的可靠性,判別服務(wù)器是否有惡意。若服務(wù)器返回正確結(jié)果,則用戶支付服務(wù)費(fèi),交易正常進(jìn)行;若服務(wù)器有惡意,則扣留服務(wù)器支付的押金。
用戶支付服務(wù)費(fèi)Tp,區(qū)塊鏈系統(tǒng)根據(jù)t3w和Cw計算出MACw':
驗(yàn)證算法如下:
Algorithm:Verification Input:t3 w , Cw , MACw Output:true/false if MACw' ==MACw return true else return false
8)Pay:若步驟7)輸出True,區(qū)塊鏈系統(tǒng)將用戶支付的押金Tu和服務(wù)器支付的押金Ts返還給用戶和服務(wù)器,同時將服務(wù)費(fèi)Tp給服務(wù)器;若步驟7)輸出False,區(qū)塊鏈系統(tǒng)將用戶支付的押金Tu和服務(wù)費(fèi)Tp返還給用戶,不退還服務(wù)器支付的押金Ts,一并返還給用戶。
支付算法如下:
Algorithm:Pay if get.Verification()==true User send Tp to blockchain system Blockchain system send Ts +Tp to server Blockchain system send Tu to user else Blockchain system send Tu + Ts to user
9)Dec:若交易證明出現(xiàn)在區(qū)塊鏈中,則用戶可以從中獲得Ci,使用對稱密鑰K1進(jìn)行解密,Di=ε.Dec(K1,Ci)(1≤i≤n)。
4.1.1 數(shù)據(jù)擁有者的安全性
數(shù)據(jù)擁有者在本地加密數(shù)據(jù),加密后上傳到服務(wù)器,加密過程獨(dú)立完成,以加密文檔的形式上傳給服務(wù)器,因此該系統(tǒng)的數(shù)據(jù)擁有者是安全的。
4.1.2 用戶的安全性和公平性
用戶將令牌上傳到區(qū)塊鏈,由區(qū)塊鏈保管,服務(wù)器支付押金后才能獲取相應(yīng)的令牌,沒有泄露風(fēng)險,保障了用戶數(shù)據(jù)的安全性;服務(wù)器得到令牌后,解密出相應(yīng)密文,發(fā)送到區(qū)塊鏈系統(tǒng),經(jīng)區(qū)塊鏈系統(tǒng)認(rèn)證后,結(jié)果正確,用戶支付服務(wù)費(fèi),結(jié)果不正確,用戶不需要支付服務(wù)費(fèi),同時服務(wù)器支付的押金還會作為賠款支付給用戶,避免了用戶支付費(fèi)用后得不到正確的搜索結(jié)果的情況,保障了用戶的交易公平性。
4.1.3 服務(wù)器的安全性和公平性
服務(wù)器得到數(shù)據(jù)擁有者發(fā)送的索引和密文以及區(qū)塊鏈系統(tǒng)發(fā)送的令牌,均是以加密形式呈現(xiàn),服務(wù)器利用令牌進(jìn)行搜索操作后,發(fā)送給區(qū)塊鏈的依然是密文形式的文件,保障了服務(wù)器的安全性;服務(wù)器執(zhí)行搜索操作后,只要返回正確的搜索結(jié)果,即可通過區(qū)塊鏈的驗(yàn)證,得到相應(yīng)的服務(wù)費(fèi),保障了服務(wù)器的交易公平性。
4.1.4 區(qū)塊鏈的安全性和公平性
區(qū)塊鏈中的每個區(qū)塊都有其對應(yīng)的哈希值,會被下一個區(qū)塊引用和驗(yàn)證,作為下一個區(qū)塊的預(yù)哈希。如果修改某個區(qū)塊的內(nèi)容,那么該區(qū)塊的哈希值一定會變,該區(qū)塊的下一個區(qū)塊已經(jīng)引用了該區(qū)塊的哈希值,這一原理使區(qū)塊鏈具有不可篡改性。交易過程中,區(qū)塊鏈主要起到保留押金、支付費(fèi)用和交易驗(yàn)證等功能,由于區(qū)塊鏈的高透明度,保障了交易的公平性。
4.1.5 加密算法安全性
數(shù)據(jù)擁有者在本地加密,采用偽隨機(jī)函數(shù)加密索引,采用AES高級加密標(biāo)準(zhǔn)加密文件,該加密算法密鑰長度達(dá)到128位,將明文分塊加密,保障了加密數(shù)據(jù)的安全性。
4.1.6 令牌安全性
用戶執(zhí)行關(guān)鍵詞加密時,采用和數(shù)據(jù)擁有者同樣的偽隨機(jī)函數(shù)進(jìn)行加密,算法復(fù)雜度高,同樣的關(guān)鍵詞每次生成相同的令牌。除令牌外,服務(wù)器得不到與關(guān)鍵詞有關(guān)的任何信息,保障了搜索令牌的安全性。
圖3 文件數(shù)量與密鑰生成時間的關(guān)系Fig.3 The relationship between the number of document and the key generation time
圖4 文件數(shù)量與建立索引時間的關(guān)系Fig.4 The relationship between the number of documents and the building index time
通過仿真實(shí)驗(yàn)對系統(tǒng)性能進(jìn)行評估,具體實(shí)驗(yàn)環(huán)境為Intel Core i5-8500 CPU,64位操作系統(tǒng),8.00G內(nèi)存,使用python語言進(jìn)行編程,版本為Python3.8.0。
分別執(zhí)行了從100~1000個文件的加密,文件數(shù)量與密鑰生成時間的關(guān)系如圖3所示,文件數(shù)量與建立索引時間的關(guān)系如圖4所示,文件數(shù)量與執(zhí)行搜索時間的關(guān)系如圖5所示,文件數(shù)量與區(qū)塊鏈執(zhí)行驗(yàn)證的時間如圖6所示。
綜合各項性能指標(biāo),本系統(tǒng)具有較好的性能。
本文提出了將區(qū)塊鏈系統(tǒng)引入可搜索加密模型的方案,主要針對惡意服務(wù)器,保障了交易雙方的公平性,通過認(rèn)證算法判斷服務(wù)器是否存在惡意(包括返回錯誤搜索結(jié)果和不完整搜索結(jié)果等惡意行為)。引入押金機(jī)制確保了交易公平進(jìn)行。區(qū)塊鏈系統(tǒng)保障了交易的可追溯和數(shù)據(jù)的不可篡改,提高系統(tǒng)的可靠性和透明度。對本方案的安全性和
圖5 文件數(shù)量與執(zhí)行搜索時間的關(guān)系Fig.5 The relationship between the number of documents and the search time
圖6 文件數(shù)量與區(qū)塊鏈驗(yàn)證時間的關(guān)系Fig.6 The relationship between the number of documents and the blockchain verification time
性能進(jìn)行了評估,證明方案是切實(shí)可行的,并具有很好的系統(tǒng)性能。