邵懷禹,錢俊彥,翟仲毅
(桂林電子科技大學(xué) 計算機(jī)與信息安全學(xué)院,廣西 桂林 541004)
物聯(lián)網(wǎng)中的眾多設(shè)備每時每刻都在產(chǎn)生大量數(shù)據(jù),這些數(shù)據(jù)有很大一部分會涉及用戶的隱私。然而,越來越密集和普遍地收集與處理在人們的私人生活中產(chǎn)生的數(shù)據(jù),會引起嚴(yán)重的安全和隱私問題[1-2]。物聯(lián)網(wǎng)的若干固有缺陷加劇了其安全性和隱私挑戰(zhàn),包括缺乏中央控制及設(shè)備資源的異構(gòu)性等。如今,這些數(shù)據(jù)大部分存儲在云數(shù)據(jù)中心,而互聯(lián)網(wǎng)上的云存儲大都依賴于作為受信任的第三方數(shù)據(jù)服務(wù)提供者來傳輸和存儲數(shù)據(jù)。盡管這些系統(tǒng)在大多數(shù)情況下運行良好,但仍受制于傳統(tǒng)中心化管理的固有弱點,因此云存儲會受到各種安全威脅,包括中間人攻擊、惡意軟件及暴露私人消費者和公司敏感數(shù)據(jù)的攻擊等[3]。此外,當(dāng)前的云存儲應(yīng)用程序能夠在數(shù)據(jù)存儲上收取超出其核心成本的高額費用,而可供用戶選擇的物美價廉的數(shù)據(jù)服務(wù)提供商卻很少,用戶也無法參與這些數(shù)據(jù)的監(jiān)管。
當(dāng)?shù)谌綌?shù)據(jù)服務(wù)提供商出現(xiàn)技術(shù)故障時,可能導(dǎo)致數(shù)據(jù)泄露或不可用,存儲在數(shù)據(jù)中心的數(shù)據(jù)文件極易被偽造,而且由于數(shù)據(jù)中心存儲著海量數(shù)據(jù),當(dāng)部分?jǐn)?shù)據(jù)被偽造或篡改后,很難被察覺,被篡改的數(shù)據(jù)混雜在正常數(shù)據(jù)中,對后續(xù)的學(xué)習(xí)研究產(chǎn)生不利影響。因此,亟需一種解決方案,在保護(hù)用戶隱私免于泄露的情況下,安全高效地存儲數(shù)據(jù)。
區(qū)塊鏈作為去中心化的數(shù)據(jù)存儲系統(tǒng),有潛力解決有關(guān)用戶隱私保護(hù)的問題。區(qū)塊鏈[4]的核心是位于互聯(lián)網(wǎng)上的系統(tǒng)參與者之間共享的分布式數(shù)字分類帳,該數(shù)字分類帳永遠(yuǎn)保存在互聯(lián)網(wǎng)上,交易或事件經(jīng)過驗證并記錄在分類帳中,為用戶數(shù)據(jù)記錄和共享信息提供了一種方法。在區(qū)塊鏈網(wǎng)絡(luò)中,選定的成員保留其分類帳的副本,且必須在接受新分類帳之前,通過共識過程集體驗證所有新交易。區(qū)塊鏈的匿名性和防篡改性使其在許多需要考慮隱私問題的領(lǐng)域得以應(yīng)用[5-6]。
基于區(qū)塊鏈存儲物聯(lián)網(wǎng)數(shù)據(jù)[7-8]會增加另一層安全保障,數(shù)據(jù)記錄在去中心化的分類帳中,黑客幾乎不可能篡改分類帳以覆蓋現(xiàn)有的數(shù)據(jù)記錄。區(qū)塊鏈通過允許任何有權(quán)訪問網(wǎng)絡(luò)的人員跟蹤過去發(fā)生的交易來提供透明性,這可為識別數(shù)據(jù)泄露時采取快速的補救措施提供一種可靠的方式。因此,由于區(qū)塊鏈具有去中心化、匿名性和防篡改性,使其成為解決物聯(lián)網(wǎng)隱私數(shù)據(jù)保護(hù)問題的潛在解決方案[9-10]。
鑒于此,針對物聯(lián)網(wǎng)用戶的身份認(rèn)證,通過鏈上采用基于區(qū)塊鏈公鑰地址的身份認(rèn)證和鏈下采用群簽名[11]的身份認(rèn)證方式,解決基于區(qū)塊鏈應(yīng)用場景下匿名和溯源的矛盾問題。針對數(shù)據(jù)存儲問題,提出基于區(qū)塊鏈的數(shù)據(jù)存儲模型,利用IPFS[12]存儲原數(shù)據(jù),生成原數(shù)據(jù)的數(shù)據(jù)標(biāo)識,進(jìn)行數(shù)據(jù)的版權(quán)證明和完整性驗證,通過設(shè)計的以太坊平臺[13]的智能合約完成數(shù)據(jù)標(biāo)識的上鏈和訪問操作,通過唯一的數(shù)據(jù)標(biāo)識為數(shù)據(jù)完整性提供保證。測試結(jié)果表明,該方案在保護(hù)用戶隱私的前提下能夠安全有效地存儲數(shù)據(jù)。
通過對物聯(lián)網(wǎng)用戶隱私數(shù)據(jù)保護(hù)問題的研究,總結(jié)出基于區(qū)塊鏈的物聯(lián)網(wǎng)隱私數(shù)據(jù)保護(hù)方案需要解決的物聯(lián)網(wǎng)用戶身份認(rèn)證問題、物聯(lián)網(wǎng)用戶隱私數(shù)據(jù)的安全存儲問題及物聯(lián)網(wǎng)用戶隱私數(shù)據(jù)的完整性驗證問題3個技術(shù)難點,并利用區(qū)塊鏈不可篡改、去中心化等特性,提出了一種基于區(qū)塊鏈的物聯(lián)網(wǎng)用戶隱私數(shù)據(jù)保護(hù)方案。
基于保護(hù)區(qū)塊鏈用戶隱私數(shù)據(jù)的相關(guān)研究[14-17],通過鏈上數(shù)字簽名、鏈下群簽名的方式進(jìn)一步增強匿名性。物聯(lián)網(wǎng)用戶身份認(rèn)證如圖1所示。不同于其他密碼學(xué)算法,群簽名有獨有的特點[18],群內(nèi)的人可以以群組的名義對消息進(jìn)行簽名,群外的人可以通過群密鑰驗證簽名的正確性,卻無法知道簽名者的真實身份,只有群管理者可以對簽名者進(jìn)行追溯??紤]到區(qū)塊鏈的偽匿名性對用戶隱私的保護(hù)所存在的缺陷,攻擊者通過分析大量的交易數(shù)據(jù)可以追溯用戶的真實身份,所以數(shù)據(jù)在存儲之前通過群簽名的方式進(jìn)行處理,即便攻擊者破解了區(qū)塊鏈的偽匿名性,用戶也可以在群簽名的保護(hù)下隱藏真實身份。
圖1 物聯(lián)網(wǎng)用戶身份認(rèn)證
基于以太坊區(qū)塊鏈的技術(shù)為物聯(lián)網(wǎng)用戶提供公私鑰對,數(shù)據(jù)只有在有效的區(qū)塊鏈簽名和群簽名的情形下才被認(rèn)為是有效數(shù)據(jù),如果有惡意用戶隨意發(fā)送消息到區(qū)塊鏈來破壞系統(tǒng)穩(wěn)定性,可以通過特定群管理者的私鑰來追蹤簽名者并進(jìn)行懲罰。由于區(qū)塊鏈技術(shù)本身不具有可追溯性,無法有效懲治破壞系統(tǒng)穩(wěn)定性的惡意用戶,群簽名的可追溯特性正好彌補了這一缺陷,為有效管理提供了保障。
物聯(lián)網(wǎng)用戶的隱私數(shù)據(jù)通常數(shù)量巨大且難以組織管理。在利用IPFS以內(nèi)容尋址、分片的方式存儲原數(shù)據(jù)的前提下,為了高效、安全地組織管理,需要對數(shù)據(jù)的標(biāo)識信息進(jìn)行上鏈。數(shù)據(jù)標(biāo)識就是用固定的標(biāo)識代表數(shù)據(jù),與存儲在IPFS上的數(shù)據(jù)有一一對應(yīng)關(guān)系,方便大量物聯(lián)網(wǎng)用戶數(shù)據(jù)的組織和管理,便于以后對數(shù)據(jù)的訪問。
在智能合約的存儲中定義了Data_id數(shù)據(jù)結(jié)構(gòu),智能合約通過solidity語言編寫。數(shù)據(jù)標(biāo)識中分別定義了字符串類型的Hash、字節(jié)類型的sig、字符串類型的Groupsig和Groupid以及無符號整型timestamp,分別表示存儲在IPFS上原數(shù)據(jù)返回的哈希值(通過這個哈希值地址可從IPFS上返回完整的原數(shù)據(jù))、以太坊上的橢圓曲線數(shù)字簽名算法(ECDSA)產(chǎn)生的數(shù)字簽名、群簽名算法產(chǎn)生的群簽名、不同群的標(biāo)識和用來維護(hù)不可偽造性的時間戳。Data_id數(shù)據(jù)結(jié)構(gòu)如下:
struct Data_id{
string Hash;
bytes sig;
string Groupsig;
string Groupid;
uint timestamp;
}
數(shù)字簽名sig的計算式為
sig=sign(keccak256(Hash,timestamp),
privatekey),
(1)
其中:sign表示ECDSA;keccak256表示以太坊中使用的SHA-3哈希算法,產(chǎn)生256位哈希;privatekey為用戶私鑰。群簽名Groupsig的計算式為
Groupsig=groupsig(Hash,groupprivatekey),
(2)
其中:groupsig表示群簽名算法;groupprivatekey表示群成員私鑰。
以太坊區(qū)塊鏈內(nèi)進(jìn)行的任何交易和計算的傭金都會被礦工收取,網(wǎng)絡(luò)中的礦工對交易進(jìn)行確認(rèn),并確定哪些交易能進(jìn)入新區(qū)塊,交易傭金以gas計算,并以Ether支付。gas是以太坊網(wǎng)絡(luò)的“燃料”,用于進(jìn)行交易,執(zhí)行智能合約并啟動DApps,支付數(shù)據(jù)存儲費用。
根據(jù)以太坊的特性及部署合約、存儲數(shù)據(jù)的需要,定義了如圖2所示的數(shù)據(jù)存儲模型,將交易類型定義為創(chuàng)建合約的交易、調(diào)用合約的交易2種,其各字段的定義如下。
圖2 基于區(qū)塊鏈的物聯(lián)網(wǎng)隱私數(shù)據(jù)存儲區(qū)塊結(jié)構(gòu)
1)賬戶公鑰:發(fā)起創(chuàng)建合約交易或者調(diào)用合約交易的以太坊賬戶的公鑰地址,證明發(fā)送者身份的唯一標(biāo)識。
2)數(shù)字簽名:以太坊中利用ECDSA產(chǎn)生的數(shù)字簽名,用于驗證交易的合法性。
3)合約地址:合約在成功部署后,被礦工確認(rèn)寫入?yún)^(qū)塊鏈后產(chǎn)生的智能合約的地址,以太坊中的其他賬戶可以通過訪問合約地址進(jìn)行合約的調(diào)用。
4)交易哈希:交易在被寫進(jìn)區(qū)塊之前,會產(chǎn)生用以標(biāo)識交易的哈希,便于在以后追蹤每個交易具體執(zhí)行的操作。
5)gas上限:即gas limit,其值必須大于等于交易需要消耗的gas,多余的gas會原路退回到發(fā)送者的賬戶,若用戶設(shè)置的gas limit太低,則交易會被取消,消耗的gas也不會退回。
6)gas單價:發(fā)送者愿意為gas付出的單價。
7)函數(shù)名:智能合約中定義的可供外部賬戶調(diào)用的函數(shù),具體定義了可供調(diào)用的函數(shù)為set(·)和get(·),分別用于數(shù)據(jù)的存儲和獲取。
1)物聯(lián)網(wǎng)用戶加入用戶群,獲取群成員私鑰,將需要上傳的數(shù)據(jù)上傳至IPFS,并獲取返回的數(shù)據(jù)內(nèi)容地址(哈希值)。
2)物聯(lián)網(wǎng)用戶調(diào)用如式(2)所示的群簽名算法和如式(1)所示的以太坊數(shù)字簽名算法,分別計算群簽名和橢圓曲線數(shù)字簽名。
3)物聯(lián)網(wǎng)用戶調(diào)用智能合約中的set(·)函數(shù),上傳數(shù)據(jù)標(biāo)識,判斷智能合約驗證數(shù)字簽名是否由發(fā)送方本人簽名。若簽名正確,則將數(shù)據(jù)標(biāo)識上鏈;若簽名不正確,則返回上傳數(shù)據(jù)之前的操作。
4)系統(tǒng)內(nèi)其他用戶調(diào)用智能合約中的get(·)函數(shù),獲取指定Groupid的用戶數(shù)據(jù)。
5)根據(jù)獲得的數(shù)據(jù)標(biāo)識中的Groupid和Groupsig,調(diào)用群簽名服務(wù)器,驗證群簽名的正確性。若驗證正確,則進(jìn)行下一步;若驗證失敗,則報告給相應(yīng)的群管理員,對簽名進(jìn)行追蹤,追蹤上傳錯誤信息的群簽名者,并采取相應(yīng)措施。
6)根據(jù)數(shù)據(jù)標(biāo)識中的數(shù)據(jù)內(nèi)容地址,從IPFS獲取數(shù)據(jù),本地驗證數(shù)據(jù)的哈希正確性。若正確,則完整性的驗證完成;若驗證錯誤,則返回步驟5)中驗證失敗的下一步操作。
實驗環(huán)境和配置如下:
1)運行在Intel?CoreTMi5-9400F CPU 下的Ubuntu 18.04.4 LTS 64位操作系統(tǒng),內(nèi)存為8 GiB;
2)運行在Intel?CoreTMi5-6300HQ CPU win10操作系統(tǒng)下VMware Workstation 14 Player 14.1.1中的Ubuntu 18.04.3 LTS 64位操作系統(tǒng),內(nèi)存為2 GiB;
3)在Ubuntu 18.04.4上通過Ganache模擬以太坊私有鏈運行場景,并運行IFPS本地節(jié)點;
4)Truffle框架用來編譯和部署合約[19],通過MetaMask錢包連接指定的私有網(wǎng)絡(luò),實現(xiàn)交易簽名和發(fā)送交易的確認(rèn);
5)通過React架構(gòu)[20]設(shè)計實現(xiàn)Web界面,方便用戶與區(qū)塊鏈進(jìn)行交互;
6)在Ubuntu 18.04.4上通過PBC Library實現(xiàn)并搭建群簽名的服務(wù)器端,通過RPC調(diào)用實現(xiàn)群簽名的各項功能,虛擬機(jī)上的Ubuntu 18.04.3系統(tǒng)用來遠(yuǎn)程調(diào)用群簽名服務(wù),測試服務(wù)器性能。
啟動本地IPFS節(jié)點,如圖3所示,物聯(lián)網(wǎng)用戶通過Web界面選擇上傳IPFS的數(shù)據(jù),上傳成功后,獲得返回的數(shù)據(jù)哈希值。上傳原數(shù)據(jù)到IPFS的結(jié)果如圖4所示。
圖3 啟動IPFS
圖4 上傳文件到IPFS
利用Truffle實現(xiàn)智能合約的編譯和部署,合約部署成功后,返回合約的地址等信息,合約部署返回的具體信息如圖5所示。從圖5可看出,合約地址為0x05a2C96492be5e9b3C1fC032Fe56414b1afA51fB,后續(xù)通過訪問此合約地址進(jìn)行測試。
圖5 部署智能合約
獲得IPFS返回值后,調(diào)用如式(2)所示的Groupsig函數(shù),對哈希值進(jìn)行群簽名,本地生成數(shù)據(jù)標(biāo)識后,點擊用戶界面的上傳數(shù)據(jù)標(biāo)識按鈕,調(diào)用如下智能合約函數(shù):
set(Hash,sig,Groupsig,Groupid,timestamp)→1/0,
(3)
向以太坊發(fā)送交易,Web端調(diào)用MetaMask,對交易進(jìn)行簽名確認(rèn),簽名在以太坊區(qū)塊鏈驗證成功后,數(shù)據(jù)寫入?yún)^(qū)塊鏈。圖6為返回信息。從圖6可看出,數(shù)據(jù)標(biāo)識上傳區(qū)塊鏈成功。
圖6 返回信息
通過Ganache可以驗證交易是否成功。圖7為交易詳情截圖。從圖7可看出,區(qū)塊298寫入了一個由創(chuàng)建的賬戶地址‘0xB9D65d4941C2AC75E3467-0Ee7C0651f008Fc9E49’發(fā)送至之前部署的合約地址‘0x05a2C96492be5e9b3C1fC032Fe56414b1afA51fB’的交易,數(shù)據(jù)存儲成功。
圖7 交易詳情
用戶通過Web界面可以獲取之前上傳的Groupid為shy的數(shù)據(jù)標(biāo)識。調(diào)用智能合約函數(shù):
get(Groupid)→(Hash,sig,Groupsig,Groupid,timestamp)/0,
(4)
若輸入的Groupid錯誤,則獲取失敗,如圖8所示;若輸入的Groupid正確,則獲取成功,如圖9所示。其中:timestamp時間戳表示距離1970年1月1日的毫秒數(shù);blockChainHash表示從區(qū)塊鏈獲取的哈希值。根據(jù)數(shù)據(jù)標(biāo)識中的群簽名,調(diào)用
圖8 獲取數(shù)據(jù)標(biāo)識失敗
圖9 獲取數(shù)據(jù)標(biāo)識成
group_verify(Groupid, Groupsig,Hash)→1/0
(5)
進(jìn)行驗證,返回值為true,如圖10所示。從圖10可看出,返回的json數(shù)據(jù)中result的值正確,驗證成功。
圖10 群簽名驗證
根據(jù)blockChainHash,可以通過IPFS客戶端獲取原數(shù)據(jù),如圖11所示。從圖11可看出,通過查看和下載數(shù)據(jù)哈希為‘QmSrppdso7r8WynfEZ5th9-ULzDtb8Ay7d6xECnFX35cHpZ’的數(shù)據(jù),即可驗證數(shù)據(jù)的完整性。
圖11 IPFS數(shù)據(jù)檢索
在Ubuntu 18.04.4上部署了群簽名的RPC服務(wù),為系統(tǒng)用戶提供群簽名算法的函數(shù)調(diào)用,群簽名服務(wù)的響應(yīng)速度對系統(tǒng)性能有重要影響。通過分別在本地調(diào)用和遠(yuǎn)程Ubuntu 18.04.3虛擬機(jī)調(diào)用,測試各請求函數(shù)的響應(yīng)時間。時間消耗對比如圖12所示,每個函數(shù)的調(diào)用時間消耗都是30次調(diào)用的平均值。從圖12可看出,遠(yuǎn)程虛擬機(jī)均比本地調(diào)用時間消耗多,時間消耗最多的是請求函數(shù)create_group,分別為0.309 3、0.228 9 s,其次為sig_verify、open_cert和group_sig函數(shù),與群簽名實際計算復(fù)雜度相符,總體時間消耗都在可接受范圍內(nèi)。
圖12 群簽名服務(wù)各函數(shù)時間消耗對比
針對物聯(lián)網(wǎng)用戶的身份認(rèn)證問題,采用鏈上基于區(qū)塊鏈公鑰地址的身份認(rèn)證和鏈下群簽名的身份驗證方式,解決了區(qū)塊鏈中匿名和溯源的矛盾問題。提出了基于區(qū)塊鏈的數(shù)據(jù)存儲模型,利用IPFS存儲原數(shù)據(jù),生成原數(shù)據(jù)的數(shù)據(jù)標(biāo)識,以進(jìn)行數(shù)據(jù)的版權(quán)證明和完整性驗證。設(shè)計了以太坊平臺的智能合約,完成數(shù)據(jù)的上傳、下載等操作,通過唯一的數(shù)據(jù)標(biāo)識,為數(shù)據(jù)完整性提供了保證。仿真實驗結(jié)果表明,該方案在保護(hù)用戶隱私的前提下,能夠安全有效地存儲數(shù)據(jù)。后續(xù)將在智能合約的效率和存儲容量及區(qū)塊產(chǎn)生速度等方面作進(jìn)一步研究。