王 冠,張倩倩
(1.北京工業大學 信息學部,北京 100124;2.北京市可信計算重點實驗室,北京 100124)
隨著物聯網的成熟和普及,一種通過互聯網連接車輛的特殊網絡應運而生:車聯網。車聯網是物聯網的一個子集,通過車對車(V2V)、車對基礎設施(V2I)連接實現通信。車聯網是一個復雜的綜合網絡系統,連接車內外的人、車載智能系統以及城市環境中的各種信息物理系統。通過將車輛、傳感器和移動設備集成到一個全球網絡中,車聯網超越了遠程信息處理、車輛自組織網絡和智能交通,使各種服務能夠交付給車輛和運輸系統以及車上和車輛周圍的人。車聯網實時采集、處理和共享道路信息,緩解交通管控中的交通擁堵,通過預警減少交通事故,保障車輛安全[1]。傳統的車聯網環境主要由可信實體(TA)、路邊基站單元(RSU)和車載移動單元(OBU)3個基本網絡節點組成。TA執行車輛的注冊、認證等功能,RSU設置在道路兩側或十字路口,利用專用短程通信協議通過無線信道與車輛通信,OBU用于采集上傳的相關車輛信息[2]。
當前有大量車聯網身份認證協議,它們用密碼學方法結合區塊鏈、云霧計算、邊緣計算等手段,實現了車聯網身份認證協議的安全高效[2-6]。
文獻[3]針對多TA網絡模型提出一種基于區塊鏈的認證和密鑰協議,將TA的計算負載卸載到RSU,提高認證效率,但該協議并沒有抵抗內部攻擊的手段。文獻[4]設計了一種基于對稱加密算法和霧計算的車聯網認證協議,有4層架構,并應用了SGX抵抗特權攻擊,但該協議并沒有有效利用RSU。文獻[5]提出一個基于邊緣計算的的車聯網身份認證隱私保護協議,該協議將車輛作為邊緣節點參與認證,RSU不參與認證,但是沒有抵抗特權用戶攻擊。文獻[6]提出了一種基于密鑰共享和動態代理機制的去中心化車輛身份驗證方案,基于信任管理的區塊鏈聚合子認證結果,實現協同認證,存儲在防篡改區塊鏈中的信譽較高的邊緣計算節點可以將最終聚合的認證結果上傳到中心服務器,實現去中心化認證,但是沒有抵抗內部攻擊。文獻[7]設計了一種基于SGX技術的工業物聯網認證協議,該協議采用SGX存儲主密鑰,同時借助SGX內存保密的特點實現機密計算,該協議可以有效抵抗特權用戶攻擊和終端節點的追蹤攻擊[7]。文獻[2]設計了一種基于區塊鏈和secGear統一機密計算框架的車聯網認證協議,在滿足抗抵賴要求的同時實現了跨區域認證,并采用secGear框架實現了認證表的機密計算,保護了認證表的安全。
但是隨著網絡中車輛的激增,區塊鏈性能開銷大,逐漸不能滿足認證所需的安全高效。在車聯網中應用邊緣計算、霧計算等新興技術手段提高了認證的高效,但是增加了網絡節點,且沒有最大程度地利用RSU。現存的大部分認證協議主要考慮了外部攻擊,如重放攻擊、竊聽攻擊、捕獲攻擊等。隨著軟件復雜性的增加,攻擊者有可能會利用木馬等惡意軟件來獲取系統內部的信息,竊取認證表,從而實現內部攻擊,內部攻擊危害相比于外部攻擊更大,系統內部充滿威脅[7]。基于此,該文設計了一種基于可信計算技術的安全高效的身份認證協議,抵抗了內部攻擊,同時實現了計算的卸載。
該協議最大程度地利用RSU,RSU不再只是實現簡單的轉發功能,將身份認證過程中的主要計算工作卸載到RSU內完成。TA和RSU實現遠程認證,TA將生成的主密鑰通過遠程認證實現的安全通道傳輸給可信的RSU。在身份認證與密鑰協商階段,OBU通過公共信道將信息發送給RSU后,RSU根據收到的信息,從中取出車輛離線注冊時留在TA的認證標識,發送給TA,TA收到此標識后,從內存的OBU認證表中取出對應信息發送給RSU,在RSU內將TA發來的信息和OBU發來的信息進行計算對比,計算完成后,RSU將對應的信息分別轉發給OBU和TA。
該協議利用SGX技術提供的安全機制來保證認證協議的安全性,利用SGX的密封機制來保存主密鑰,內存隔離機制來實現機密計算,遠程認證機制來安全地傳輸主密鑰。
IntelSGX(Intel Software Guard Extension)[8]是對Intel架構的一組擴展,旨在為計算機上執行的敏感計算提供完整性和機密性保護。SGX是一系列可信計算設計中的最新迭代,旨在通過利用遠程計算機中的可信硬件來解決安全遠程問題。可信硬件建立安全容器,遠程計算服務用戶將所需的計算和數據上傳到安全容器中,可信硬件在執行計算時保護數據的機密性和完整性[9]。SGX技術主要包括隔離執行和遠程認證兩個核心機制[10]。
SGX技術允許應用程序在一個受保護的容器中執行,稱為Enclave。Enclave是應用程序地址空間中的一個受保護區域,即使存在特權惡意軟件,它也提供了機密性和完整性。如果Enclave外的軟件試圖訪問Enclave內存區域,即使是特權軟件,如虛擬機管理器、BIOS或操作系統,也會受到阻止。SGX阻止所有其他軟件訪問位于Enclave內的代碼和數據,包括系統軟件和來自其他Enclave的訪問。檢測到修改Enclave內容時,阻止或中止執行。
為了實現SGX內存保護,需要新的硬件結構。EPC(Enclave Page Cache)是用于存儲Enclave頁和SGX結構的保護內存,該內存受軟硬件訪問的保護。EPC內存儲了許多不同Enclaves的代碼和數據,當Enclave執行對EPC的內存訪問時,處理器決定是否訪問。處理器在稱為EPCM(Enclave Page Cache Map)的硬件結構中維護EPC中每個頁面的安全性和訪問控制信息。EPC為系統中的Enclave提供受保護的內存區域。EPCM是附加到每個EPC頁面的安全元數據。EPCM包含硬件保護Enclave內存訪問所需的信息。EPC頁面和EPCM條目之間存在1∶1的映射。內存加密引擎(MEE)是一個硬件單元,加密處理器包主存(DRAM)之間的通信數據。創建Enclave時,會將Enclave二進制文件加載到EPC中,并建立Enclave標識。Enclave創建過程分為多個階段:初始化Enclave控制結構、分配EPC頁并將Enclave內容加載到頁中、測量Enclave內容并最終建立Enclave標識。加載完后,處理器會計算Enclave中所有內容的摘要(SHA-256) ,與開發者簽名中的摘要進行對比。只有相匹配,才會通過完整性驗證,然后執行相應應用代碼。
SGX架構提供了兩種機制,一種用于在同一平臺上運行的2個Enclave之間進行本地證明,另一種用于擴展本地證明以向平臺外的第3方進行遠程證明。
遠程認證需要使用非對稱加密。SGX啟用了一個特殊的Enclave,稱為Quoting Enclave,專門用于遠程證明。SGX引入了EPID(Enhanced Privacy ID),EPID是一種組簽名方案,它允許平臺對對象進行簽名,而無需唯一標識平臺或鏈接不同的簽名。Quoting Enclave創建用于簽署平臺證明的EPID密鑰,然后由EPID后端基礎設施認證。EPID密鑰不僅代表平臺,還代表底層硬件的可信度。當Enclave 系統運行時,只有Quoting Enclave可以訪問EPID密鑰,并且EPID密鑰綁定到處理器固件的版本。因此,可以看到一個QUOTE是由處理器本身發出的。
首先,應用程序需要來自平臺外部的服務,并與服務提供商建立通信。服務提供商向應用程序發出挑戰,以證明它確實要在一個或多個Enclave內運行必要的組件;應用程序提供Quoting Enclave的Enclave身份,并將其與服務提供商的挑戰一起傳遞給應用程序的Enclave;Enclave生成一個清單,其中包括對質詢的響應和一個臨時生成的公鑰,以供挑戰者用于將秘密傳送回Enclave,然后它生成清單的哈希摘要,并將其作為EREPORT指令的用戶數據包含在內,EREPORT指令將生成一個將清單綁定到Enclave的報告,然后Enclave將報告發送到應用程序;應用程序將REPORT轉發給Quoting Enclave進行簽名;Quoting Enclave使用EGETKEY指令檢索其報告密鑰并驗證報告。Quoting Enclave創建QUOTE結構并使用EPID密鑰對其進行簽名。Quoting Enclave將QUOTE結構返回給應用程序;應用程序將QUOTE結構發送給服務挑戰者;挑戰者使用EPID公鑰證書和撤銷信息或認證服務來驗證報價上的簽名,并通過清單摘要驗證清單的完整性。
該系統包括3個實體:TA、RSU和OBU[11]。在這個模型中,TA知道部署了哪些RSU。車輛在接入車聯網中要與TA進行認證,整體流程如圖1所示。

圖1 整體流程
針對車聯網應用場景,該文提出一種基于SGX的身份認證協議,以確保車聯網的數據傳輸和指令傳輸的安全高效。該協議主要包括初始化協議、注冊階段、遠程認證階段、身份認證及密鑰協商階段。
(1)超級管理員選取隨機數(MK),將MK作為主密鑰保存在TA中的SGX,TA生成全局隨機數(IDT),RSU內也包含IDT。
(2)超級管理員將單向哈希函數h(),消息認證碼對HMack(Mac,Ver)等寫入所有的OBU和RSU的內存中。
在車輛注冊階段,用戶和車輛需要在TA進行注冊,TA為車輛生成身份標識(IDi),該階段在離線環境中進行,注冊步驟如下:
(1)用戶在TA中輸入密碼(PWi)和生物信息(BIOi),TA為車輛選擇身份標識(IDi),創建智能卡(IDSC),計算(σi,τi)=Gen(BIOi),RPW=h(IDi‖PWi|σi),V=h(RPW‖IDSC)。
(2)TA生成隨機數(rs,Ks),使用IDT計算Ni,VIDi和Fi,其中Ni=rs⊕h(IDi‖PWi‖σi‖IDSC),VIDi=h(rs‖IDi‖IDT),Fi=h(IDT‖VIDi)⊕rs。
(3)TA獲取隨機數(W),并將W、VIDi、Fi、Ks、IDi輸入到SGX的安全接口,安全接口使用主密鑰(MK)計算并返回PVIDi,PFi,SW,PKs,PIDi,其中PVIDi=VIDi⊕h(W‖MK),PFi=Fi⊕h(W‖MK),PKs=Ks⊕h(W‖MK),PIDi=IDi⊕h(W‖MK),SW=W⊕h(IDT‖MK)。
(4)TA將{W,PVIDi,PFi,PKs,PIDi}存儲在自己內存中的認證表中,TA獲取當前時間戳(t1),并將{Ni,V,VIDi,SW,Ks,τi,IDi,t1}通過安全信道發送給OBU,將智能卡交給用戶。
(5)OBU接收到TA返回的信息后,判斷時間戳(t1)的新鮮性,如果t1不新鮮,則拒絕該請求并要求重發;否則,OBU將{Ni,V,VIDi,SW,Ks,τi,IDi}保存在自己的內存中,并給TA返回一條確認消息。
在基于SGX的身份認證協議中,為了確保主密鑰的安全性,主密鑰的部署方式必須是可信的。TA首先需要通過認證建立與RSU的安全會話通道,然后將主密鑰發送到RSU中。利用SGX提供的遠程認證建立TA與RSU可信區的認證會話,同時通過密鑰交換協議協商出雙方的會話密鑰。最終TA通過會話密鑰加密主密鑰并發送給RSU。通過遠程認證,RSU中的Enclave可以證明自己的身份合法,未經篡改同時運行在啟用了SGX的正版平臺,這保證了主密鑰的安全[12-14]。認證流程如圖2所示。

圖2 遠程認證流程
認證過程如下:(1)TA向RSU發起挑戰,RSU執行幾個步驟來構造遠程認證流的初始消息。RSU Enclave初始化后,RSU Application執行Ecall進入Enclave,RSU Enclave調用sgx_ra_init()并將結果和DHKE Context返回給RSU Application,sgx_ra_init()函數的參數為TA的公鑰,該公鑰應該硬編碼到RSU Enclave,可確保最終用戶無法更改密鑰,從而Enclave只能與預期的遠程服務通信。然后,RSU Enclave調用sgx_get_extended_epid_group_id()來檢索EPID的擴展GID以生成msg0。
(2)RSU調用sgx_ra_get_msg1()來生成包含DHKE客戶端公鑰(Ga)的msg1,該方法的其他參數包括在上一步中獲得的DHKE Context和一個指向用于計算客戶端DHKE密鑰的sgx_ra_get_ga()存根函數的指針。當RSU Enclave鏈接到sgx_tkey_exchange庫并導入sgx_tkey_exchange時,該函數由SDK自動生成。將msg0和msg1一起發送給TA,msg0‖msg1=(ExGID‖Ga‖GID),其中“‖”表示連接。
(3)從RSU接收msg1后,TA檢查請求中的值,生成自己的DHKE參數,并向Intel認證服務中心(IAS)發送查詢用以檢索客戶端發送的Intel EPID GID的簽名撤銷列表(SigRL),Intel認證服務只支持擴展GID的值為0。TA使用P-256曲線生成一個隨機的EC密鑰(Gb),通過Ga和Gb派生出密鑰(KDK),對KDK執行AES-128CMAC算法派生出SMK。TA將msg2=(Gb‖SPID‖Quote_Type‖KDF_ID‖SigSP(Ga,Gb))‖CMACSMK(Gb‖SPID‖Quote_Type‖KDF_ID‖SigSP(Ga,Gb))‖SigRL(GID)發給RSU。其中SPID為服務提供商ID,Quote_Type為客戶端請求的Quote類型(0x0表示不可鏈接,0x1表示可鏈接)。KDF_ID通常為0x1,使用服務提供商的EC私鑰計算ECDSA簽名得到SigSP(Ga,Gb)。
(4)RSU接收到msg2后,應用程序調用sgx_ra_proc_msg2()函數來生成msg3。該調用執行以下任務。驗證TA Enclave的簽名、檢查SigRL、返回msg3,其中包含用于驗證特定Enclave的Quote,msg3=CMACSMK(Ga‖Ps_Security_Prop‖Quote)‖Ga‖Ps_Security_Prop‖Quote。
(5)TA接收到msg3后,需要做以下操作。驗證msg3中的Ga是否與msg1中的Ga匹配;驗證CMACSMK(M);驗證Quote中的前32個字節是否匹配SHA-256摘要(Ga‖Gb‖VK),其中‖表示連接;驗證RSU提供的認證證據,驗證證據要求服務提供者向IAS提交QUOTE并獲得認證報告。該報告由IAS報告簽名私鑰簽名,服務提供者必須使用IAS報告簽名公鑰驗證該簽名。TA從KDK派生出128比特的會話密鑰,用會話密鑰通過該AES/GCM/NoPadding算法加密要傳輸的主密鑰。TA將驗證結果和加密的MK作為msg4發送給RSU[15]。
(6)RSU收到msg4后在Enclave中調用sgx_ra_get_keys()獲取會話密鑰,并調用SGX加密庫提供的AES解密函數sgx_rijindael128GCM_decrypt()解密出MK,然后通過SGX密封函數sgx_seal_data()密封MK。
在該階段中,用戶首先進行登錄,登錄成功后進入身份認證階段,TA、RSU和OBU三方都要進行認證,并協商出會話密鑰,該階段如圖3所示。
(1)用戶在車輛的設備終端輸入登錄需要的身份信息,登錄驗證通過后進入車輛身份認證與密鑰協商階段。車輛在進入車聯網區域時,車輛的OBU通過不安全的網絡信道將{Q1,M1,SW,t1}發送給RSU。


圖3 三方身份認證階段
協議使用時間戳(t1、t2)來抵抗重放攻擊,在每次接收到消息時,會先檢查時間戳的新鮮性,如果時間戳不新鮮,丟棄此消息要求重發。
該協議主密鑰存儲在SGX內,TA中的OBU認證表的內容都經過主密鑰的加密,包括存儲的會話密鑰、OBU的ID等敏感信息,即使內部特權用戶獲得認證表,也無法獲取有效消息。且RSU中的計算都是在SGX中進行,特權用戶攻擊者也無法窺得該機密計算的過程。
該協議使用的變量在每個會話中都是動態變化的,其中的重要參數{Q1,M1,SW},在每一輪的認證過程中都是不同的,包括在TA和RSU之間傳輸的{W,PVIDi,PFi,PKs,PIDi}也是在認證過后實時更新的。不存在可以一直追蹤的常量,因此攻擊者無法追蹤某個參數進而獲取敏感信息。
攻擊者可以在網絡中截獲{Q1,Q2,M1,M2,SW,PVIDi,PFi,PKs,PIDi},其中攻擊者要想從Q1,Q2中獲得敏感信息,需要獲取ri,VIDi,但這兩個參數不在網絡中傳輸。M1,M2已經被單向哈希函數加密,從中無法獲取有效信息。SW經過主密鑰的計算,PVIDi,PFi,PKs,PIDi均已經通過主密鑰進行加密計算,因此也無法獲取有效信息。
在該協議中,認證表存儲在內存中,假設認證表泄露,認證表中的內容{W,PVIDi,PFi,PKs,PIDi}即使被攻擊這獲取,他也無法獲取有效內容。因為W為隨機數,在下一次認證時W也會更新,并且在此次認證后的會話過程中也無法通過W獲取到會話密鑰或者其他有效信息,{PVIDi,PFi,PKs,PIDi}都已經通過主密鑰進行計算,因此也無法獲取到有效信息。綜上,該協議抵抗了認證表泄露攻擊。
在比較計算成本時,通過模擬實驗估算協議中每個實體的計算時間,其中用安卓手機來模擬車輛,用聯想筆記本電腦來模擬RSU和TA。兩臺設備的配置如表1所示,得出的運行時間如表2所示,其中定義th為哈希函數的運算時間,tsym為一次對稱加解密的運算時間,te為一次模指數運算的時間。

表2 實驗結果 ms
該協議將TA中的主要計算工作卸載到RSU內進行,實現了分布式計算,解決了可信中心(TA)負載過大的問題。在分析計算成本時,需要分別分析車輛(OBU)、路邊單元(RSU)和可信中心(TA)的計算成本,其中簡單的異或運算⊕小到忽略不計,HAMC簽名所用時間與哈希函數所用時間相同。TA將主密鑰通過Intel SGX遠程認證建立的安全通道傳輸給RSU,這個操作只在系統遠程認證時部署一次,不會在系統運行過程中帶來時間消耗。系統中使用SGX主要帶來模式切換開銷和訪存開銷,在文獻[12]中經過評測得到模式切換開銷僅為8μs,訪存開銷為3μs,故在以下的計算分析中忽略SGX的計算開銷。
計算消耗的比較結果如表3所示。從表中可以看出,文中協議的計算消耗是最低的,并且實現了TA的計算卸載,因此文中協議在具備安全性的保證下計算耗能也更低,實現了分布式計算,具備車聯網協議要求的高效及時性。

表3 計算開銷對比
在分析通信開銷時,假設時間戳的長度為32 bit,隨機數、密鑰、身份標識的長度為160 bit,哈希函數和對稱加解密的輸出為256 bit,得出通信開銷對比如表4所示。

表4 通信開銷對比
在計算開銷和通信開銷在總成本中占比相等的情況下進行對比,文中協議的計算開銷遠小于文獻[11]的計算開銷,與文獻[2]相比,文中的通信開銷增加了21.59%,但計算開銷減少了23.16%。由此得出文中協議優于以上兩種協議。同時,文獻[2]在模型中設置了多個TA,增加了網絡節點。文中協議實現了分布式計算,將TA的計算負載卸載到RSU中完成,同時也沒有在網絡中增加節點,相較于其他協議降低了成本。
車聯網的身份認證協議目前多數使用基于區塊鏈的方式,或者使用復雜的加密運算方式,或是采用在網絡中增加云霧節點等方式,使得計算通信開銷過大。為了解決這個問題,文中協議在車聯網中使用了可信計算(SGX)技術,將TA的計算負載卸載到RSU中完成,實現了分布式計算,大大地降低了TA的計算成本,實現了去中心化的身份認證,通過與現有的認證協議進行對比,該協議的計算開銷有所減少。另外,該文采用了SGX技術,將主密鑰保存在由可信硬件保護的環境中,并利用主密鑰對TA中的車輛關系認證表進行加密,防止了認證表泄露攻擊,同時抵御了內部特權用戶的攻擊。