周啟揚(yáng) 李飛 章嘉彥 李亞林 宋佳琦
(成都信息工程大學(xué),成都 610225)
主題詞:車聯(lián)網(wǎng) 匿名身份認(rèn)證 區(qū)塊鏈技術(shù) SM9加密算法
在車聯(lián)網(wǎng)中,汽車作為移動(dòng)網(wǎng)絡(luò)單元需要不斷地向周圍車輛廣播和接收消息[1],網(wǎng)絡(luò)規(guī)模巨大、無線信道開放等特點(diǎn)使其更容易遭受隱私和安全威脅[2]。2017年,Kromtech 安全中心發(fā)現(xiàn)原屬于車輛跟蹤設(shè)備公司SVR Tracking 的50 多萬條用戶真實(shí)身份登錄憑證泄露。《2018年智能網(wǎng)聯(lián)汽車信息安全年度報(bào)告》指出,本田、保時(shí)捷等多家大型汽車公司以及多個(gè)共享汽車公司都存在車輛數(shù)據(jù)交互時(shí)用戶真實(shí)身份信息泄露的情況,導(dǎo)致出現(xiàn)多起車輛用戶信息被攻擊者破解的事件[3]。
所以,在保證通信安全的同時(shí),還需保證車輛的隱私信息不被泄露或竊取。為此,研究者提出了許多認(rèn)證方法,其中,匿名身份認(rèn)證機(jī)制很好地彌補(bǔ)了普通認(rèn)證技術(shù)在用戶信息泄露方面的缺陷。
目前,針對(duì)車聯(lián)網(wǎng)匿名身份認(rèn)證的研究中,主要采用4 種方法:基于公鑰基礎(chǔ)設(shè)施(Public Key Infrastructure,PKI)的方案[4-5]、基于零知識(shí)的匿名認(rèn)證機(jī)制[6]、基于假名的匿名認(rèn)證技術(shù)[7-8]以及基于群簽名的匿名認(rèn)證機(jī)制[9]。上述方案都能在一定程度上保證車輛信息的私密性,但同時(shí)也帶來了計(jì)算資源、管理、存儲(chǔ)資源開銷過大等問題。
SM9 加密算法是一種采用用戶身份標(biāo)識(shí)生成公私鑰對(duì)、不依賴數(shù)字證書的加密算法[10]。算法基于橢圓曲線的雙線映射性質(zhì),通過了Cheon[11]、Boneh和Franklin[12]以及Bellare-Rogaway[13]提出的密鑰安全性相關(guān)檢測(cè)模型[14-15]的檢測(cè)。
本文將區(qū)塊鏈技術(shù)與匿名身份認(rèn)證技術(shù)、SM9加密算法相結(jié)合,提出一種適用于車聯(lián)網(wǎng)的匿名身份認(rèn)證方案,以解決證書申請(qǐng)頻繁、車載資源利用率不足、證書使用率不高的問題,保證車輛的信息安全。
本文設(shè)計(jì)的車聯(lián)網(wǎng)區(qū)塊鏈系統(tǒng)架構(gòu)如圖1所示,由車輛、路側(cè)單元(Road Side Unit,RSU)和可信中心(云服務(wù)提供商)構(gòu)成。
其中,可信中心由車輛服務(wù)提供商設(shè)立的多個(gè)記賬節(jié)點(diǎn)采用分布式的結(jié)構(gòu)組成,記賬節(jié)點(diǎn)參與新區(qū)塊的生成。區(qū)塊生成時(shí),記賬節(jié)點(diǎn)選擇機(jī)制為:每個(gè)節(jié)點(diǎn)處都有一張用于記錄周圍節(jié)點(diǎn)網(wǎng)絡(luò)狀態(tài)和工作狀態(tài)的狀態(tài)表,每個(gè)節(jié)點(diǎn)定時(shí)通知周圍節(jié)點(diǎn)自身工作狀態(tài)值,周圍記賬節(jié)點(diǎn)收到通知后回復(fù)確認(rèn)信息并更新該節(jié)點(diǎn)的工作狀態(tài)值。每個(gè)節(jié)點(diǎn)狀態(tài)值的計(jì)算公式為:

式中,St為節(jié)點(diǎn)狀態(tài)值;Tj為生成前j個(gè)新區(qū)塊所花費(fèi)的總時(shí)間;Tci為生成前j個(gè)區(qū)塊中的第i個(gè)區(qū)塊所花費(fèi)的時(shí)間。
St越大,表明該記賬節(jié)點(diǎn)工作量越大。當(dāng)有假名請(qǐng)求時(shí),根據(jù)自身節(jié)點(diǎn)狀態(tài)值是否大于0.9來判斷是否需要將請(qǐng)求轉(zhuǎn)發(fā)給周圍狀態(tài)值最小的節(jié)點(diǎn)。
為了確保新加入的節(jié)點(diǎn)身份真實(shí)可靠,共識(shí)機(jī)制采用瑞波共識(shí)算法,只有請(qǐng)求加入的節(jié)點(diǎn)通過不少于51%的記賬節(jié)點(diǎn)審核時(shí),區(qū)塊鏈系統(tǒng)自動(dòng)認(rèn)為該申請(qǐng)節(jié)點(diǎn)通過審核,將該節(jié)點(diǎn)加入記賬節(jié)點(diǎn),并記錄到區(qū)塊鏈中,否則此次申請(qǐng)無效,可有效防止惡意節(jié)點(diǎn)隨意加入。
本文區(qū)塊鏈的結(jié)構(gòu)設(shè)計(jì)如圖2所示,分為區(qū)塊頭和區(qū)塊體2 個(gè)部分。區(qū)塊頭包含前一區(qū)塊的索引、假名、時(shí)間戳和與車輛通信的RSU的編號(hào)Uid。車輛信息和假名保存在默克爾(Merkle)樹中,區(qū)塊頭中保存默克爾樹的根節(jié)點(diǎn)信息和后一區(qū)塊的索引。區(qū)塊體中每個(gè)葉子節(jié)點(diǎn)記錄著1個(gè)車輛假名和其他輔助信息。

圖2 區(qū)塊鏈結(jié)構(gòu)
在部署階段,系統(tǒng)需先定義相關(guān)參數(shù):Cid為曲線標(biāo)識(shí)符;Fq為橢圓曲線基域;a、b分別為橢圓曲線方程參數(shù);β為扭曲參數(shù);N為曲線的素因子;Cf為曲線余因子;E(Fq)為定義在Fq上的一個(gè)橢圓曲線E;k為E(Fq)相對(duì)于N的嵌入次數(shù);P1、P2分別為N階循環(huán)加法群G1、G2的生成元;GT為N階乘法循環(huán)群;e為從G1×G2到GT的雙線性對(duì),eid為e的標(biāo)識(shí)符;[s]P代表加法群G1、G2中元素P的s倍。
然后選擇隨機(jī)數(shù)s∈[1,N-1]作為主私鑰,再計(jì)算G2中的元素[s]P2得到公鑰Ppub,將Ppub作為主公鑰組成系統(tǒng)主密鑰對(duì)(s,Ppub)并向網(wǎng)絡(luò)中公布公鑰Ppub。車輛的密鑰對(duì)主要由用戶的假名Pid和1 個(gè)字節(jié)的私鑰生成函數(shù)識(shí)別符hid生成。設(shè)車輛Va的假名為Pida,H為密碼輔助函數(shù),則Va的私鑰Ska生成公式為:

車輛Va的公鑰Pka可由系統(tǒng)任一用戶生成:

車輛間加密、隨機(jī)密鑰生成流程如下:
a.計(jì)算群G1的元素Qa=[H(Pida||hid,N)]P1+Ppub。
b.產(chǎn)生隨機(jī)數(shù)r∈[1,N-1]。
c.計(jì)算G1中的元素C=[r]Qa,轉(zhuǎn)換為比特串。
d.計(jì)算GT中的元素g=e(Ppub,P2)。
e.計(jì)算GT中的元素ω=gr,并將結(jié)果轉(zhuǎn)換為比特串。
f.利用密鑰導(dǎo)出模塊(Key Derivation Function,KDF)函數(shù)K計(jì)算生成的隨機(jī)秘鑰R1=K(C||ω||Pida,L),L為R1的長(zhǎng)度,如果R1不全為0則輸出,否則返回b。
g.輸出(R1,C),之前生成的C為R1對(duì)應(yīng)的密文。
解密流程為:
a.驗(yàn)證C是否屬于G1,如果不屬于則退出解密。
b.計(jì)算群GT中的元素ω′=e(C,Ska)并轉(zhuǎn)換為比特串。
c.將C轉(zhuǎn)換為比特串并計(jì)算R1′=K(C||ω′||Pida,L),若全為0,則退出。
d.輸出。
2.3.1 改進(jìn)的身份認(rèn)證方案
基于假名的身份認(rèn)證技術(shù)中,服務(wù)提供商為車輛和RSU進(jìn)行認(rèn)證,并給車輛頒發(fā)一定數(shù)量的假名。RSU負(fù)責(zé)數(shù)據(jù)轉(zhuǎn)發(fā),車輛利用假名進(jìn)行通信。該過程如圖3所示。

圖3 基于假名證書的身份認(rèn)證方案
針對(duì)上述方案中證書存儲(chǔ)開銷過大、車輛與RSU通信頻繁,影響車輛通信效率以及假名申請(qǐng)受RSU 部署影響等問題進(jìn)行改進(jìn),如圖4所示。車輛在起動(dòng)時(shí)使用出廠自帶的備用假名。云服務(wù)提供商由分布式節(jié)點(diǎn)組成的計(jì)算中心和區(qū)塊鏈系統(tǒng)組成,負(fù)責(zé)計(jì)算轉(zhuǎn)發(fā)申請(qǐng)的RSU部署密度、處理區(qū)塊節(jié)點(diǎn)和假名的生成等功能。

圖4 改進(jìn)的假名身份認(rèn)證方案
車輛行駛過程中遇到RSU 稀疏程度不同的區(qū)域時(shí),可信中心下發(fā)的假名數(shù)量n也有差異:

式中,nR為前方距離lR內(nèi)RSU 的數(shù)量;Sv為車輛正常使用的資源容量;lCi為第i個(gè)假名長(zhǎng)度;vt為目前車輛的平均速度;T為每個(gè)假名使用的安全時(shí)間。
2.3.2 區(qū)塊的管理
2.3.2.1 假名的組成
一個(gè)假名主要由2 個(gè)部分組成:由時(shí)間戳得到的4位16 進(jìn)制哈希值;通過隨機(jī)函數(shù)生成的4 位16 進(jìn)制數(shù)。將這2個(gè)部分組合成1個(gè)唯一的8位16進(jìn)制假名,從而防止假名的重復(fù)。
2.3.2.2 區(qū)塊的生成
區(qū)塊按照前文的規(guī)則由選定的計(jì)算節(jié)點(diǎn)負(fù)責(zé)生成。當(dāng)一個(gè)區(qū)塊準(zhǔn)備生成時(shí),首先獲取前一區(qū)塊的位置,并把本次生成區(qū)塊的位置通知其他計(jì)算節(jié)點(diǎn),再根據(jù)式(4)得到需要生成的假名數(shù)量n,將它們依次存入?yún)^(qū)塊體中作為默克爾樹的葉子節(jié)點(diǎn),生成默克爾樹,得到根節(jié)點(diǎn)。然后將根節(jié)點(diǎn)、假名等數(shù)據(jù)寫入?yún)^(qū)塊頭,生成一個(gè)完整的區(qū)塊。
2.3.2.3 車輛內(nèi)部區(qū)塊的刪除
當(dāng)車輛通過區(qū)塊的申請(qǐng)獲得一個(gè)新區(qū)塊時(shí),停止使用舊假名進(jìn)行通信,當(dāng)最后一個(gè)舊假名通信停止時(shí),刪除車輛內(nèi)存儲(chǔ)的舊區(qū)塊,同時(shí)啟用接收到的新區(qū)塊中的第1個(gè)假名進(jìn)行通信。
2.3.3 假名區(qū)塊申請(qǐng)及車輛間密鑰協(xié)商過程
2.3.3.1 區(qū)塊申請(qǐng)
車輛行駛時(shí),首先選擇存儲(chǔ)于區(qū)塊中的假名和相應(yīng)的密鑰對(duì)進(jìn)行通信,當(dāng)一個(gè)區(qū)塊中的多個(gè)假名均被使用過后,在進(jìn)入RSU范圍時(shí)后開始申請(qǐng)新的區(qū)塊和假名。車輛將存儲(chǔ)在區(qū)塊頭中的假名和第R1個(gè)假名PidR1以[Pid||R1||SK1(PidR1)]的形式發(fā)送給RSU(其中SK1為PidR1的私鑰),RSU負(fù)責(zé)將車輛的消息和自己的Uid發(fā)送給可信區(qū)塊及密鑰管理中心(Key Distribution Center,KDC),KDC查找區(qū)塊頭假名信息找到區(qū)塊,根據(jù)區(qū)塊體中存儲(chǔ)的假名信息找到第R1個(gè)假名公鑰并解開加密內(nèi)容核實(shí)PidR1,如果PidR1為該區(qū)塊存儲(chǔ)的第R1個(gè)假名,車輛身份即得到證實(shí)并根據(jù)Uid周圍RSU分布情況生成數(shù)量為n的新假名,再基于新假名對(duì)應(yīng)生成數(shù)量為n的私鑰,并將假名和私鑰放入新生成的區(qū)塊中,否則將其列為可疑車輛并告知其他節(jié)點(diǎn)。然后KDC用車輛第R1個(gè)假名的公鑰PKR1加密隨機(jī)數(shù)R2和生成的第R2個(gè)假名PidR2以[PKR1(R2||PidR2)]的形式通過RSU發(fā)送給車輛,車輛用第R1個(gè)假名的私鑰SK1解開后得到R2,再根據(jù)R2找到第R2個(gè)假名并核實(shí),此時(shí)便完成了車輛與KDC 的雙向認(rèn)證。然后車輛再通過RSU發(fā)送R2給KDC,KDC收到后將區(qū)塊通過第R2個(gè)假名對(duì)應(yīng)的公鑰PKR2加密發(fā)送給車輛,車輛解密后刪除原區(qū)塊并存儲(chǔ)收到的區(qū)塊,這樣就完成了一次區(qū)塊的申請(qǐng)。
2.3.3.2 密鑰協(xié)商
車輛Va將自己當(dāng)前假名Pida和通信請(qǐng)求發(fā)送給車輛Vb,車輛Vb根據(jù)SM9 加密流程得到隨機(jī)數(shù)R1和對(duì)應(yīng)密文C1,然后將C1和自己當(dāng)前假名Pidb發(fā)送給Va,Va解開后得到R1和Pidb,然后同樣以SM9 加密流程得到R2和對(duì)應(yīng)密文C2,將確認(rèn)信息和C2發(fā)送給Vb,Vb解開后得到R2,此時(shí)已經(jīng)完成了Va、Vb間的認(rèn)證,最后再以R1、R2作為初始密鑰使用高級(jí)加密標(biāo)準(zhǔn)算法(Advanced Encryption Standard,AES)對(duì)其后兩車間的通信數(shù)據(jù)進(jìn)行加密、解密,直到通信結(jié)束。
目前,基于用戶身份信息的車輛攻擊方式主要有跟蹤和假冒。
當(dāng)攻擊車輛Vk意圖對(duì)用戶車輛Va進(jìn)行跟蹤攻擊時(shí),Vk需定期獲取Va的身份信息以確保跟蹤目標(biāo)。Vk選擇目標(biāo)的成功率為1/Vn,Vn為當(dāng)前區(qū)域車輛數(shù)量。即使Vk以1/Vn的概率正確跟蹤目標(biāo)并與Va進(jìn)行一次通信獲得了Va的車輛信息,下次通信時(shí)由于Va的假名發(fā)生了變化,Vk將再次無法準(zhǔn)確判斷跟蹤的目標(biāo),所以Vk無法連續(xù)跟蹤目標(biāo)車輛Va。
當(dāng)車輛Vk意圖仿冒Va的用戶信息對(duì)Va進(jìn)行攻擊時(shí),Vk需要不停獲取Va在行駛過程中使用的假名,即使Vk可以完整監(jiān)聽到Va使用過的假名信息,但由于Va假名使用順序與假名排列順序相關(guān)性不強(qiáng),所以Vk無法獲得Va所使用的假名在區(qū)塊體中的正確排列順序,即使Vk可以截獲Va的區(qū)塊申請(qǐng)信息并仿冒Va進(jìn)行區(qū)塊的申請(qǐng),也無法通過KDC的身份認(rèn)證。
綜上所述,基于區(qū)塊鏈技術(shù)的車聯(lián)網(wǎng)匿名身份認(rèn)證技術(shù)可以防范目前車聯(lián)網(wǎng)中常見的攻擊方式,保障用戶的信息安全。
仿真環(huán)境使用英特爾i7 4700HQ 處理器,處理器工作頻率為2.4 GHz,內(nèi)存容量為8 G,內(nèi)存工作頻率為2 000 MHz,測(cè)試數(shù)據(jù)量為7 萬條。仿真采用了基于VanetMobiSim_NS_2 的車輛換道模型[16-17],主要對(duì)假名生成速度、城市和各自郊區(qū)的跟蹤情況與基于OpenSSL假名證書的方法的跟蹤情況進(jìn)行比較,相關(guān)的參數(shù)設(shè)定如表1所示。

表1 仿真參數(shù)設(shè)定
首先對(duì)假名生成速度進(jìn)行仿真對(duì)比,將相同物理環(huán)境的3臺(tái)虛擬機(jī)部署為擁有3個(gè)節(jié)點(diǎn)的分布式服務(wù)供應(yīng)商。將其假名生成速度與基于OpenSSL 的假名證書生成方式進(jìn)行比較,結(jié)果如圖5所示。
從圖5中可以看出,隨著假名請(qǐng)求數(shù)量的增加,2種方式單位耗時(shí)不斷增加,但本文方案證書生成效率均優(yōu)于傳統(tǒng)OpenSSL方案。
攻擊者為了正確攻擊到目標(biāo)車輛,有時(shí)可能會(huì)根據(jù)車輛假名建立假名集合輔助攻擊。攻擊者選擇攻擊目標(biāo)后可能使用的攻擊方法分為2種。一是隨機(jī)選擇假名跟蹤,攻擊者可能認(rèn)為假名集中的所有車輛都有相同概率為目標(biāo)車輛,所以選擇一個(gè)假名進(jìn)行跟蹤,此時(shí)假設(shè)假名集的大小為PN。則攻擊者選擇正確的概率為p=1/PN。二是統(tǒng)計(jì)跟蹤,攻擊者通過統(tǒng)計(jì)正在使用的假名和使用過的假名進(jìn)行權(quán)值篩選,近期使用的假名再次使用的概率低,計(jì)算選出概率最高的假名作為下一次的攻擊目標(biāo)。這樣的攻擊方式成功率會(huì)明顯提升。

圖5 假名生成速度比較
圖6和圖7分別分析了市區(qū)和郊區(qū)2種工況下攻擊者成功跟蹤車輛的概率隨車輛數(shù)量變化的情況,其中郊區(qū)的跟蹤成功率比市區(qū)高,但隨著單位時(shí)間內(nèi)車輛通過數(shù)量增加,跟蹤成功率均明顯下降。

圖6 市區(qū)車輛跟蹤情況

圖7 郊區(qū)車輛跟蹤情況
由城市和郊區(qū)的跟蹤成功率計(jì)算得到平均跟蹤成功率,再將本文方法與使用OpenSSL方法的平均跟蹤成功率進(jìn)行比較,結(jié)果如圖8所示。
從圖8可以看出,使用本文方案的跟蹤成功率是假名證書的30%左右。
由各項(xiàng)仿真結(jié)果可以看出,基于區(qū)塊鏈的匿名認(rèn)證方式是一種效率更高、承載量更大、更能保證用戶和車輛身份信息安全的匿名身份認(rèn)證方式。

圖8 2種方案跟蹤成功率的比較
本文在總結(jié)現(xiàn)有匿名身份認(rèn)證方式的特點(diǎn)與不足的基礎(chǔ)上,結(jié)合SM9加密算法設(shè)計(jì)了基于區(qū)塊鏈的假名身份認(rèn)證機(jī)制,提出了區(qū)塊鏈結(jié)構(gòu)以及區(qū)塊生成的智能合約,改進(jìn)了傳統(tǒng)的假名身份認(rèn)證系統(tǒng)結(jié)構(gòu),設(shè)計(jì)了基于SM9加密算法的車輛通信流程。
將區(qū)塊鏈技術(shù)應(yīng)用于匿名身份認(rèn)證系統(tǒng),解決了傳統(tǒng)匿名身份認(rèn)證中假名證書申請(qǐng)、存儲(chǔ)和管理方面證書申請(qǐng)頻繁、車載資源利用率不足、證書使用率不高的問題,降低了RSU分布情況對(duì)車輛安全性的影響。目前,智能汽車數(shù)量不斷增加,車輛之間通信頻繁,因此對(duì)服務(wù)提供商的假名區(qū)塊申請(qǐng)請(qǐng)求的傳輸與處理速度有一定的要求。但移動(dòng)網(wǎng)絡(luò)的帶寬在短時(shí)間內(nèi)無法得到全面提升,車輛、RSU、KDC三者之間的通信速度仍會(huì)受到一定的限制。所以,如何在保障車輛信息安全的條件下進(jìn)一步降低證書的申請(qǐng)頻率,提升每個(gè)假名的利用率將是后續(xù)的研究方向。