劉 宇,陳 哲,李孟恒,覃團(tuán)發(fā)
1.廣西大學(xué) 計(jì)算機(jī)與電子信息學(xué)院,南寧530004
2.廣西多媒體通信與網(wǎng)絡(luò)技術(shù)重點(diǎn)實(shí)驗(yàn)室,南寧530004
隨著智能醫(yī)療[1]的蓬勃發(fā)展,無線體域網(wǎng)被廣泛應(yīng)用到智能醫(yī)療中[2-3],用戶穿戴各式各樣的傳感器設(shè)備,這些傳感器會(huì)在體域網(wǎng)中相互連通,協(xié)助人們完成數(shù)據(jù)采集、數(shù)據(jù)加密和數(shù)據(jù)傳輸?shù)裙ぷ?。由于采集的?shù)據(jù)遍布全身且過于分散,傳統(tǒng)體域網(wǎng)通常采用依賴匯聚節(jié)點(diǎn)的星型網(wǎng)絡(luò)連接[4-5],在這種連接方式下,一旦匯聚節(jié)點(diǎn)被攻破,其中的用戶隱私數(shù)據(jù)就會(huì)泄露甚至被攻擊者篡改,繼而引起醫(yī)療上的錯(cuò)誤診斷。另外,對(duì)于暴露在外界的體域網(wǎng)來說,數(shù)據(jù)通常是在公開信道中進(jìn)行傳輸?shù)?,如果這些數(shù)據(jù)不加密將會(huì)很容易遭到劫持和篡改,因此提高傳感器節(jié)點(diǎn)在體域網(wǎng)中的安全性,是當(dāng)前亟待解決的問題。
為了保護(hù)這些與個(gè)人隱私相關(guān)的生理數(shù)據(jù),許多研究者都提出了相關(guān)的安全機(jī)制,大體上都包含了身份認(rèn)證和信息加密。文獻(xiàn)[6]提出了利用PUF函數(shù)實(shí)現(xiàn)會(huì)話雙方的雙向認(rèn)證和秘鑰交換,遺憾的是該方案為了降低執(zhí)行開銷而放棄了散列函數(shù),使得接收方無法校驗(yàn)加密信息的完整性。文獻(xiàn)[7]提出利用心電信號(hào)來分配傳感器的秘鑰,但前提是所有的傳感器都得檢測(cè)到心電信號(hào),這一方法限制了傳感器的位置分布,同時(shí)增加了硬件復(fù)雜度。文獻(xiàn)[8]提出了一種體域網(wǎng)輕量級(jí)協(xié)議,該協(xié)議能實(shí)現(xiàn)傳感器匿名相互認(rèn)證,然而卻被文獻(xiàn)[9]的研究者發(fā)現(xiàn)該協(xié)議易受到傳感器節(jié)點(diǎn)模擬攻擊和集線器節(jié)點(diǎn)欺騙攻擊。針對(duì)上述問題,本文提出了一種基于聯(lián)盟區(qū)塊鏈的體域網(wǎng)信息安全應(yīng)用,采用IBM貢獻(xiàn)的開源項(xiàng)目Hyperledger Fabric(以下簡(jiǎn)稱Hyperledger)搭建聯(lián)盟區(qū)塊鏈,將用戶身上每一個(gè)傳感器都作為區(qū)塊鏈節(jié)點(diǎn),通過成員服務(wù)提供商(Membership Service Provider,MSP)對(duì)節(jié)點(diǎn)身份進(jìn)行管理,只有經(jīng)過認(rèn)證的節(jié)點(diǎn)才能加入到通道子網(wǎng)中,確保了用戶數(shù)據(jù)的隱私性,再利用Hyperledger分布式記賬[10]的特點(diǎn)來保證醫(yī)療數(shù)據(jù)不可篡改。針對(duì)體域網(wǎng)匯聚節(jié)點(diǎn)易受攻擊的問題,本文還提出了一種傳感器節(jié)點(diǎn)間安全通信的新方式,將傳感器通信轉(zhuǎn)移至區(qū)塊鏈上,交由區(qū)塊鏈節(jié)點(diǎn)進(jìn)行通信,使通信過程更可靠、更安全。
現(xiàn)有的區(qū)塊鏈分為公有鏈、聯(lián)盟鏈和私有鏈三種。公有鏈?zhǔn)且环N全公開的區(qū)塊鏈[11],任何區(qū)塊鏈節(jié)點(diǎn)都可以接入到公有鏈中,其中的交易信息和交易記錄對(duì)所有節(jié)點(diǎn)都是公開透明的,每一個(gè)區(qū)塊鏈節(jié)點(diǎn)都包含全網(wǎng)的所有交易記錄,且網(wǎng)絡(luò)中不存在任何中心化的節(jié)點(diǎn),但因?yàn)樗泄?jié)點(diǎn)都加入到一條鏈上,所以它處理交易的速度很慢,代表網(wǎng)絡(luò)有比特幣和以太坊。不同于公有區(qū)塊鏈,聯(lián)盟鏈并不是全公開的區(qū)塊鏈,聯(lián)盟鏈通常是由同行業(yè)的許多機(jī)構(gòu)共同構(gòu)成。聯(lián)盟鏈有嚴(yán)格的身份管理機(jī)制,聯(lián)盟的數(shù)據(jù)對(duì)外不可見,保證了數(shù)據(jù)的隱私性。私有鏈則是一種完全封閉的區(qū)塊鏈,通常由企業(yè)內(nèi)部搭建而成,權(quán)限的管控相比于聯(lián)盟鏈來說更為嚴(yán)格,因此隱私性相比于前兩者來說更高,交易的處理速度也更快,但相對(duì)也更加中心化。通過上述對(duì)比,公有鏈公開透明的特點(diǎn)不利于保護(hù)體域網(wǎng)用戶的隱私數(shù)據(jù),且冗雜龐大的全網(wǎng)交易記錄對(duì)于體域網(wǎng)來說是沉重的負(fù)擔(dān),過長(zhǎng)的交易同步時(shí)間也是體域網(wǎng)無法忍受的。私有鏈更加偏向于中心化,適合企業(yè)內(nèi)部搭建使用,而本文需要將用戶的傳感器、不同醫(yī)療機(jī)構(gòu)的區(qū)塊鏈節(jié)點(diǎn)聯(lián)系在一起,需要多方機(jī)構(gòu)共同協(xié)作,應(yīng)用部分去中心化的聯(lián)盟鏈更為合適,因此本文最終選擇了聯(lián)盟區(qū)塊鏈作為體域網(wǎng)的應(yīng)用。
本文采用區(qū)塊鏈來管理體域網(wǎng),分布式的區(qū)塊鏈需要達(dá)成一個(gè)一致的結(jié)果,因此需要根據(jù)體域網(wǎng)的特點(diǎn)選擇合適的共識(shí)算法。區(qū)塊鏈目前可以考慮的幾種共識(shí)算法里面,工作量證明(Proof of Work,PoW)是最常見的一種[12],它要求參與共識(shí)的節(jié)點(diǎn)解決復(fù)雜難題求出hash值,某一節(jié)點(diǎn)找到正確的hash值就可以生成一個(gè)新的區(qū)塊進(jìn)行全網(wǎng)廣播,但缺點(diǎn)是解決復(fù)雜難題需要很長(zhǎng)時(shí)間,耗費(fèi)資源太多,不適合體域網(wǎng)。權(quán)益證明(Proof of Stack,PoS)[13]則像是股票一樣,持有股權(quán)越多、持有時(shí)間越長(zhǎng)的節(jié)點(diǎn),它的話語權(quán)就越大,通常聯(lián)盟區(qū)塊鏈節(jié)點(diǎn)規(guī)模遠(yuǎn)不如公有區(qū)塊鏈龐大,因此這類節(jié)點(diǎn)很有可能最終演化成中心化節(jié)點(diǎn),形成安全隱患。Kafka共識(shí)[14]可以接受區(qū)塊鏈上少于1/2的節(jié)點(diǎn)故障或失效,這對(duì)于體域網(wǎng)中有故障風(fēng)險(xiǎn)的傳感器來說十分友好,且耗費(fèi)資源遠(yuǎn)低于PoW和PoS共識(shí)算法,因此本文選擇使用Kafka共識(shí)。
區(qū)塊鏈節(jié)點(diǎn)對(duì)賬本的更新稱為一次交易,經(jīng)過哈希函數(shù)y=hash(x)對(duì)交易內(nèi)容x加密會(huì)生成固定長(zhǎng)度的哈希值y,通過y不能反解出x,且不同的x和x'經(jīng)過哈希后幾乎不可能生成同樣的哈希值y,因此哈希函數(shù)非常適合用于檢驗(yàn)內(nèi)容x的完整性。在區(qū)塊鏈中,每一個(gè)區(qū)塊都有上一個(gè)區(qū)塊的哈希值,哈希值包含著區(qū)塊中的信息,因而能保證數(shù)據(jù)難以被篡改。
非對(duì)稱加密就是采用公鑰和私鑰進(jìn)行加解密,私鑰由自己保管,公鑰散發(fā)到外部,且公鑰和私鑰是成對(duì)存在的,公鑰可以解密私鑰加密的內(nèi)容,反之私鑰也可以解密公鑰加密的內(nèi)容。
本文采用橢圓曲線加密算法,該算法是基于橢圓曲線上點(diǎn)群離散對(duì)數(shù)難題設(shè)計(jì)的。假設(shè)p為大于3的素?cái)?shù),橢圓曲線y2=x3+ax+b,其中a、b為常數(shù)且滿足4a3+27b2≠0mod p,P1=(x1,y1)與P2=(x2,y2)是雙曲線上的兩點(diǎn),O為無窮遠(yuǎn)點(diǎn)。定義該橢圓曲線的加法和減法:
其中橫坐標(biāo)滿足x3=m2-x1-x2,縱坐標(biāo)滿足-y3=
由上述公式可知橢圓曲線上兩點(diǎn)相加,得到的點(diǎn)仍在橢圓曲線上,因此可以考慮假設(shè)兩個(gè)點(diǎn)P和Q在橢圓曲線上。在等式kP=P+P+…+P=Q中,已知k和P由加法公式可以很輕松地求出Q,而如果已知P和Q卻很難求出k,因此在本文中k即是簽名所需的私鑰,Q就是分發(fā)出去的公鑰。
由于聯(lián)盟區(qū)塊鏈上的所有操作都需要節(jié)點(diǎn)簽名,本文主要把橢圓曲線算法用于身份認(rèn)證的數(shù)字簽名過程當(dāng)中。假設(shè)傳感器節(jié)點(diǎn)A要發(fā)送一段消息m,將消息經(jīng)過哈希散列函數(shù)處理后生成消息的摘要y=hash(m),傳感器A用自己的私鑰加密消息摘要y并和消息m一起發(fā)送給機(jī)構(gòu)節(jié)點(diǎn)B,如果機(jī)構(gòu)節(jié)點(diǎn)B能用A發(fā)布的公鑰解開,則證明消息的來源確實(shí)是傳感器節(jié)點(diǎn)A,機(jī)構(gòu)節(jié)點(diǎn)B再將消息m哈希處理后得到摘要y',若y=y',則說明消息m沒有被篡改過。數(shù)字簽名過程如圖1所示。
圖1 數(shù)字簽名
本文采用非對(duì)稱加密技術(shù)進(jìn)行數(shù)字簽名,每個(gè)區(qū)塊鏈節(jié)點(diǎn)可以保證自身的私鑰得到妥善保管,但卻不能保證發(fā)布在外面的公鑰沒有被其他節(jié)點(diǎn)冒充,因此還需要引入證書來幫助管理公鑰。證書的原理與簽名類似,權(quán)威證書頒發(fā)機(jī)構(gòu)(Certificate Authority,CA)會(huì)在區(qū)塊鏈節(jié)點(diǎn)的公鑰后加入CA的私鑰簽名形成證書,用以擔(dān)保該公鑰的安全性。每一個(gè)區(qū)塊鏈節(jié)點(diǎn)本地還會(huì)存有一套CA根證書,根證書上包含CA的公鑰,用以核查頒發(fā)的證書是否是經(jīng)由CA簽名的。證書的安全總是可以由上一級(jí)的證書來證明,一直追溯到最上級(jí)的根證書,形成一條完整的證書信任鏈,如圖2所示。
圖2 PKI架構(gòu)
由于采集的數(shù)據(jù)遍布全身且過于分散,傳統(tǒng)體域網(wǎng)通常采用依賴匯聚節(jié)點(diǎn)的星型網(wǎng)絡(luò)連接。為了解決匯聚節(jié)點(diǎn)易受攻擊的問題,本文不采用傳統(tǒng)體域網(wǎng)的星型網(wǎng)絡(luò)連接方式,而是將用戶的每一個(gè)傳感器仿真節(jié)點(diǎn)都部署到云端服務(wù)器,云端采用CentOS 7系統(tǒng)并配置好Hyperledger相關(guān)的運(yùn)行環(huán)境,之后就可以部署一個(gè)區(qū)塊鏈節(jié)點(diǎn),并實(shí)現(xiàn)傳感器節(jié)點(diǎn)和區(qū)塊鏈節(jié)點(diǎn)的一一對(duì)應(yīng)。這樣做的好處一是避免了匯聚節(jié)點(diǎn)的存儲(chǔ)轉(zhuǎn)發(fā),降低了匯聚節(jié)點(diǎn)一旦被攻破將導(dǎo)致用戶所有數(shù)據(jù)丟失的風(fēng)險(xiǎn);再一個(gè)是強(qiáng)化了體域網(wǎng)中傳感器的身份管理,當(dāng)傳感器要獲得合法的區(qū)塊鏈節(jié)點(diǎn)身份時(shí),會(huì)單獨(dú)受到更為嚴(yán)格的審查,冒充傳感器節(jié)點(diǎn)將會(huì)變得更加困難。
聯(lián)盟區(qū)塊鏈?zhǔn)峭袠I(yè)的多個(gè)機(jī)構(gòu)一起聯(lián)合搭建起來的,因此僅有用戶的傳感器節(jié)點(diǎn)是遠(yuǎn)遠(yuǎn)不夠的,還需要醫(yī)療機(jī)構(gòu)、保健機(jī)構(gòu)和康復(fù)中心等提供大量的區(qū)塊鏈節(jié)點(diǎn)。本文的整個(gè)區(qū)塊鏈網(wǎng)絡(luò)節(jié)點(diǎn)架構(gòu)如圖3所示。
本文的聯(lián)盟區(qū)塊鏈節(jié)點(diǎn)分為CA節(jié)點(diǎn)、Peer節(jié)點(diǎn)和Orderer節(jié)點(diǎn)三大類。
(1)CA節(jié)點(diǎn)是Certificate Authority證書頒發(fā)中心,負(fù)責(zé)用戶客戶端登記注冊(cè)和證書頒發(fā),客戶端在區(qū)塊鏈上的任何操作都離不開CA節(jié)點(diǎn)頒發(fā)的身份證明。
(2)Peer節(jié)點(diǎn)又可以細(xì)分為背書節(jié)點(diǎn)和記賬節(jié)點(diǎn)。當(dāng)客戶端發(fā)起交易之前,會(huì)先發(fā)起交易的提案交由背書節(jié)點(diǎn)來模擬執(zhí)行交易,背書節(jié)點(diǎn)是由Peer節(jié)點(diǎn)中動(dòng)態(tài)選舉出來的,因此本文選擇將背書的功能交由各類機(jī)構(gòu)和中心的Peer節(jié)點(diǎn)來完成,減少傳感器Peer節(jié)點(diǎn)的負(fù)擔(dān)。記賬節(jié)點(diǎn)則只是負(fù)責(zé)同步新的交易到賬本上,所有的Peer節(jié)點(diǎn)都可以作為記賬節(jié)點(diǎn),每個(gè)Peer節(jié)點(diǎn)都維護(hù)一份聯(lián)盟區(qū)塊鏈賬本的副本。
(3)Orderer節(jié)點(diǎn)也叫作排序節(jié)點(diǎn),負(fù)責(zé)給新生成的交易進(jìn)行排序并廣播給聯(lián)盟中的所有區(qū)塊鏈Peer節(jié)點(diǎn),通知它們更新自己的賬本副本。
身份管理機(jī)制是聯(lián)盟區(qū)塊鏈相對(duì)于公有區(qū)塊鏈最獨(dú)特的一點(diǎn),也正是因?yàn)橛辛松矸莨芾頇C(jī)制進(jìn)而才能實(shí)現(xiàn)聯(lián)盟準(zhǔn)入機(jī)制,實(shí)現(xiàn)隱私數(shù)據(jù)對(duì)外不可見,這對(duì)于脆弱的體域網(wǎng)來說非常重要。本文的身份管理由證書與PKI架構(gòu)實(shí)現(xiàn),一個(gè)傳感器區(qū)塊鏈節(jié)點(diǎn)的身份注冊(cè)過程分為線下和線上兩部分,具體的授予過程如圖4所示。
圖3 區(qū)塊鏈網(wǎng)絡(luò)節(jié)點(diǎn)架構(gòu)
圖4 身份注冊(cè)
用戶在線下憑借身份證明向CA機(jī)構(gòu)申請(qǐng)用戶名和密碼,再在客戶端憑用戶名和密碼在線發(fā)送注冊(cè)請(qǐng)求;CA機(jī)構(gòu)會(huì)在數(shù)據(jù)庫中標(biāo)識(shí)該用戶名和密碼并返回注冊(cè)證書給用戶;用戶憑借注冊(cè)證書再向CA申請(qǐng)TLS證書用于連接本聯(lián)盟區(qū)塊鏈網(wǎng)絡(luò);CA核對(duì)數(shù)據(jù)庫中是否標(biāo)識(shí)了該注冊(cè)用戶,如果已標(biāo)識(shí)則返回TLS證書給用戶客戶端。
智能合約[15-16]是一個(gè)區(qū)塊鏈網(wǎng)絡(luò)能否正常運(yùn)行的核心所在,區(qū)塊鏈節(jié)點(diǎn)通過身份驗(yàn)證后就可以申請(qǐng)加入聯(lián)盟通道(Channel),第一次創(chuàng)立聯(lián)盟通道需要為這個(gè)聯(lián)盟通道安裝智能合約,智能合約中包含了能實(shí)現(xiàn)本文需求的算法。
算法1初始化傳感器節(jié)點(diǎn)
1.INPUT user_name&&user_id&&sensor_id
2.IF user_id存在THEN
3. IF sensor_id存在THEN
4. break;
5. ELSE加入新的傳感器節(jié)點(diǎn)
6. END IF
7.ELSE創(chuàng)建新用戶&&加入新的傳感器節(jié)點(diǎn)
8.END IF
算法1輸入了用戶名、用戶id和傳感器id,通過初始化傳感器節(jié)點(diǎn),可以方便醫(yī)療機(jī)構(gòu)節(jié)點(diǎn)遍歷所有的用戶及傳感器的信息,并了解到用戶的傳感器活躍狀態(tài)。
算法2采集傳感器信息
1.給不同類型的傳感器設(shè)定不同的sensor_type
2.監(jiān)聽用戶傳感器的sensor_data并記錄current_time
3.將信息user_name&&user_id&&sensor_id&&sensor_type&&sensor_data&¤t_time組拼成json
4.IF user_name||user_id||sensor_id不存在THEN
5. break;
6.ELSE將json記入賬本
7.END IF
由于智能合約內(nèi)部不允許直接調(diào)用函數(shù)返回本地變量和本地時(shí)間,因此算法2是客戶端采集并傳入?yún)?shù)給智能合約記入賬本得以實(shí)現(xiàn)的。醫(yī)療機(jī)構(gòu)可以通過user_id&&sensor_id查詢到用戶的某個(gè)傳感器采集到的信息sensor_data,并且該條信息還記錄了采集的日期和時(shí)間,便于醫(yī)療機(jī)構(gòu)做數(shù)據(jù)統(tǒng)計(jì)和分析。
算法3生理結(jié)果分析
1.IF user_id||sensor_id不存在THEN
2.return;
3.END IF
4.根據(jù)user_id和sensor_id查詢?cè)撚脩裟硞鞲衅鞯姆N類sensor_type和采集到的sensor_data數(shù)據(jù)
5.根據(jù)不同的sensor_type執(zhí)行不同的生理分析函數(shù),以心率傳感器為例:
6.IF sensor_type==heart_rate THEN
7.IF sensor_data<40 THEN
8. 數(shù)據(jù)分析:用戶心率過緩,易造成大腦供血不足,建議及早就醫(yī)
9.ELSE IF sensor_data>160 THEN
10. 數(shù)據(jù)分析:用戶心動(dòng)過速,恐有心臟疾病,應(yīng)避免劇烈運(yùn)動(dòng)及早就醫(yī)
11.ELSE數(shù)據(jù)分析:用戶心率正常
12.END IF
13.END IF
當(dāng)用戶和醫(yī)療機(jī)構(gòu)需要分析用戶生理數(shù)據(jù)時(shí),需要提供user_id和sensor_id,得到傳感器的不同類型sensor_type和數(shù)據(jù)sensor_data。根據(jù)不同的sensor_type,算法3對(duì)sensor_data進(jìn)行不同的處理,并提供不同的數(shù)據(jù)分析函數(shù)。
區(qū)塊鏈節(jié)點(diǎn)注冊(cè)成功之后就擁有了合法身份,并憑借該身份加入聯(lián)盟通道。聯(lián)盟通道中通常包含用戶的所有傳感器Peer節(jié)點(diǎn)和若干個(gè)醫(yī)療機(jī)構(gòu)的Peer和Orderer節(jié)點(diǎn),節(jié)點(diǎn)架構(gòu)如4.2節(jié)所述,這些節(jié)點(diǎn)聯(lián)合起來形成一個(gè)通道子網(wǎng)絡(luò),數(shù)據(jù)記入賬本就是在這個(gè)子網(wǎng)絡(luò)中運(yùn)行智能合約實(shí)現(xiàn)的。以傳感器的Peer節(jié)點(diǎn)為例,當(dāng)傳感器在某個(gè)時(shí)間點(diǎn)需要上傳生理數(shù)據(jù)時(shí),節(jié)點(diǎn)客戶端會(huì)發(fā)起交易的提案,區(qū)塊鏈網(wǎng)絡(luò)會(huì)根據(jù)預(yù)先設(shè)定好的背書策略選定背書節(jié)點(diǎn);背書節(jié)點(diǎn)按照智能合約提供的方法模擬執(zhí)行,完成后會(huì)把背書結(jié)果和簽名返回給客戶端;客戶端接收到足夠的背書結(jié)果以后,先核查背書結(jié)果是否一致,如果一致再將交易提案、背書結(jié)果和背書簽名打包成交易信息廣播給網(wǎng)絡(luò)中的Orderer排序節(jié)點(diǎn);排序節(jié)點(diǎn)收到交易信息后按時(shí)間順序生成新的區(qū)塊并廣播給通道子網(wǎng)絡(luò)中的所有Peer節(jié)點(diǎn),通知它們更新賬本信息。整個(gè)流程如圖5所示。
圖5 數(shù)據(jù)記入賬本
通過上述過程,傳感器節(jié)點(diǎn)就可以把采集到的數(shù)據(jù)寫入到賬本中,并且該數(shù)據(jù)還會(huì)綁定用戶的身份信息和傳感器id等信息,其他機(jī)構(gòu)的Peer節(jié)點(diǎn)可以通過用戶的身份信息和傳感器的id在賬本中查詢到用戶的生理數(shù)據(jù)。同理,其他傳感器Peer節(jié)點(diǎn)通過應(yīng)用程序客戶端也能查詢到該數(shù)據(jù),因此可以把傳感器之間的安全通信轉(zhuǎn)移到區(qū)塊鏈上進(jìn)行。
體域網(wǎng)中對(duì)于生理數(shù)據(jù)的安全性要求非常高。在體域網(wǎng)中數(shù)據(jù)安全主要指數(shù)據(jù)的完整性和隱私性。本文通過以下四點(diǎn)來保護(hù)用戶的數(shù)據(jù):
(1)第3.1節(jié)曾提到每一個(gè)區(qū)塊都記錄有前一個(gè)區(qū)塊和自身的哈希值,這個(gè)哈希值包含了交易的內(nèi)容,如果交易的內(nèi)容被篡改了,哈希值會(huì)改變,前后區(qū)塊就會(huì)斷開,這就防止了用戶的生理數(shù)據(jù)被惡意篡改。
(2)區(qū)塊鏈中的每一個(gè)Peer節(jié)點(diǎn)都會(huì)維護(hù)一份賬本,整個(gè)區(qū)塊鏈就形成了分布式記賬,本文采用的Kafka共識(shí)可以容忍小于1/2的節(jié)點(diǎn)故障,因此僅僅某一個(gè)節(jié)點(diǎn)惡意篡改賬本上的交易是無法達(dá)成區(qū)塊鏈大多數(shù)節(jié)點(diǎn)共識(shí)的,這就維護(hù)了用戶數(shù)據(jù)的完整性。
(3)聯(lián)盟區(qū)塊鏈中的節(jié)點(diǎn)都會(huì)進(jìn)行嚴(yán)格的身份管理和審查,在此之后才有資格加入聯(lián)盟鏈的Channel通道中,該通道是封閉式的,只有加入到通道的節(jié)點(diǎn)才能發(fā)起交易和記賬,因此用戶的隱私數(shù)據(jù)對(duì)于通道外的節(jié)點(diǎn)是不可見的,這在一定程度上保障了用戶數(shù)據(jù)的隱私性。
(4)在Channel通道中還可以通過私有數(shù)據(jù)Private Data技術(shù)進(jìn)一步提升用戶數(shù)據(jù)的隱私安全,存放在Private Data中的數(shù)據(jù)可以只針對(duì)某些機(jī)構(gòu)組織開放,這些組織可以查看到Private Data中的內(nèi)容,其他的記賬節(jié)點(diǎn)只能記錄這些內(nèi)容的加密hash值用于校對(duì)。
本文將聯(lián)盟區(qū)塊鏈引入體域網(wǎng),進(jìn)一步保障了體域網(wǎng)用戶信息的完整性和隱私性。在提高體域網(wǎng)安全性能的同時(shí),也要兼顧體域網(wǎng)的其他特性。由于構(gòu)成體域網(wǎng)的傳感器大多都是隨身攜帶的,因此體域網(wǎng)對(duì)于功耗的要求也十分嚴(yán)格,無論采用何種加密算法或是安全機(jī)制,體域網(wǎng)功耗都始終是一個(gè)繞不開的話題。圖6是本文引入聯(lián)盟區(qū)塊鏈到體域網(wǎng)后的心率傳感器節(jié)點(diǎn)功耗圖。
圖6 心率傳感器節(jié)點(diǎn)功耗
圖6的每一個(gè)峰值代表傳感器發(fā)起一次交易,可以看到傳感器平時(shí)處于低功耗的檢測(cè)狀態(tài),需要發(fā)起交易時(shí)消耗的功率也很小,實(shí)際情況下也不會(huì)在如此短暫的時(shí)間內(nèi)頻繁地發(fā)起交易,因此完全符合體域網(wǎng)低功耗的要求。除了對(duì)功耗有所要求外,體域網(wǎng)還對(duì)傳輸時(shí)延有所要求。圖7上面的曲線是一次心率傳感器數(shù)據(jù)上鏈所需要的時(shí)間,下面的曲線是其他區(qū)塊鏈節(jié)點(diǎn)獲取這次交易內(nèi)容所需時(shí)間。
圖7 交易時(shí)延
可以看到,數(shù)據(jù)上鏈所需要的時(shí)延在1.5 s左右,數(shù)據(jù)查詢的時(shí)延在0.25 s左右,相對(duì)于現(xiàn)有的體域網(wǎng)來說,數(shù)據(jù)上鏈所需要的時(shí)延較高,如果僅僅是傳感器節(jié)點(diǎn)傳輸給機(jī)構(gòu)節(jié)點(diǎn),這個(gè)結(jié)果尚可以接受,如果是兩個(gè)傳感器節(jié)點(diǎn)在區(qū)塊鏈上相互通信,這個(gè)時(shí)延還需要降低。通過測(cè)試并分析代碼,發(fā)現(xiàn)在整個(gè)數(shù)據(jù)上鏈的過程中,交易的背書過程其實(shí)很快就完成了,真正耗費(fèi)了大量時(shí)間的是廣播交易結(jié)果這一個(gè)過程,這也是下一步研究的方向,即考慮如何提高廣播效率。
本文提出了基于聯(lián)盟區(qū)塊鏈的體域網(wǎng)信息安全應(yīng)用,通過分布式賬本和區(qū)塊的哈希鏈保障了用戶數(shù)據(jù)的完整性,防止被攻擊者輕易篡改,再通過身份管理和通道子網(wǎng)實(shí)現(xiàn)了數(shù)據(jù)的隔離,一定程度上保護(hù)了數(shù)據(jù)的隱私性,利用私有數(shù)據(jù)Private Data技術(shù)添加查看權(quán)限和加密交易結(jié)果,進(jìn)一步維護(hù)了用戶數(shù)據(jù)隱私性。在此基礎(chǔ)上,本文還通過實(shí)驗(yàn)測(cè)試了體域網(wǎng)的功耗和時(shí)延,論證了該應(yīng)用是否符合體域網(wǎng)的現(xiàn)實(shí)要求。實(shí)驗(yàn)結(jié)果表明,該應(yīng)用可以滿足體域網(wǎng)低功耗的要求,但在傳輸時(shí)延上還有待提高,證明了聯(lián)盟區(qū)塊鏈應(yīng)用于體域網(wǎng)以改善體域網(wǎng)的安全性是具有可行性的。下一步就是探究如何進(jìn)一步降低傳感器與傳感器在區(qū)塊鏈上通信的傳輸時(shí)延。