◆莊 園 甘 勇 王冰麗 賀 蕾
( 1.鄭州輕工業大學(鄭州)計算機與通信工程學院 河南 450002; 2.鄭州工程技術大學(鄭州) 河南 450044 )
射頻識別(Radio Frequency Identification,RFID)技術是一種自動識別技術,采用無線射頻技術完成實體之間的非接觸式通信。RFID理論基礎誕生于1948年,源于雷達技術,后被廣泛應用于物流管理、醫藥、供應鏈管理、電子收費、航空航天等領域。RFID標簽主要分為三種:有源標簽、無源標簽和半有源標簽,其中無源標簽成本低廉且前景廣闊,因此本文將重點介紹無源標簽。由于無源標簽在計算能力和存儲資源極為有限,RFID標簽在許多應用中不適合使用基于大數計算的對稱加密或操作過于復雜的非對稱加密作為安全加密方法,因此如何在RFID系統中確保隱私安全是一項具有挑戰性的問題[1]。
當前,RFID標簽認證協議往往都基于傳統的集中式數據庫,它極大地限制了身份認證過程中后端服務器中數據的檢索效率。在數據檢索性能方面,順序搜索的時間復雜度為,其平均查找長度為,在搜索失敗的情況下,則共計需要次比較。假設數據結構通過區塊鏈技術進行設計,則數據庫可以通過Merkle哈希樹快速驗證區塊中是否存在待對比信息,并且最多進行次對比就可驗證數據的真實性[2]。此外,部分協議在標簽和閱讀器之間的通信過程中,通常使用標簽真實ID進行身份驗證,這可能導致泄露標簽隱私信息,攻擊者可以通過不同類型的攻擊來獲取存儲在 RFID標簽或后端服務器中的所有信息。
在RFID認證協議中哈希函數的應用較為廣泛,其中經典的Hash-Lock協議由S. A. Weis等人[3]首次提出于2003年,該協議使用哈希函數完成RFID身份驗證,以便攻擊者無法通過重復查詢從標簽答復中獲取關鍵信息來跟蹤標簽的移動。但后續學者分析發現,該協議以真實的標簽ID進行信息傳輸,這使得標簽身份信息易受到攻擊造成信息泄露。Liu Yang和 Peng Yu[4]提出了一種用于標簽、閱讀器和后端服務器的三方身份認證協議,協議確保了各方實體之間的有效認證,然而在每個認證過程中,標簽和后端服務器執行大量的哈希操作,導致計算開銷較大。M.Ohkubo等人[5]使用了兩個哈希函數:和參與身份驗證,并提出了 Hash-Chain協議,協議每輪結束時通過哈希函數對密鑰及時更新,保證協議的前向安全。Jung-Sik Cho[6]提出了一種基于哈希函數的身份認證協議,但在后續的研究中,Masoud[7]分析了Cho等人提出的協議,指出該協議不具有抵抗拒絕服務攻擊和假冒攻擊的能力。Shafiqul Abidin[8]提出了一種基于橢圓曲線函數和哈希函數的RFID標簽認證協議,該協議使用11次散列哈希函數,6次點積和6次基于橢圓曲線方程的大數運算,因此標簽較重的計算負擔阻礙了其推廣。Guang等人[9]基于動態密鑰機制的思想提出了一種移動RFID第三方認證協議,協議采用動態密鑰機制確保數據的安全性和保密性,并且認證過程中閱讀器允許在可移動的場景下進行讀寫操作。Prosanta Gope等人[10]對協議[9]進行了分析,表示協議無法抵抗去同步攻擊,同時也不適用于低成本的RFID系統,在此基礎上他們對此協議進行了改進,稱協議可以抵抗跟蹤攻擊并同步進行攻擊,提供匿名性和轉發安全性。
基于比特幣的區塊鏈數據結構[11],結合本文所提方案,給出以下數據結構設計構想。在協議認證過程中,將會話中秘密信息進行哈希加密后存入區塊中,其中區塊體中的秘密值基于Merkle哈希樹進行存儲,區塊頭中存儲由眾多秘密值生成的根節點、時間戳以及隨機數,一個區塊存儲基本信息的存儲結構如圖1所示。當標簽向后端數據庫發送認證消息后,數據庫通過 Merkle哈希樹可以對塊內的任何秘密值是否被篡改進行快速的檢測,檢驗一份數據的完整性不需要樹上全部節點參與,僅根據 Merkle根到各分支節點的直接路徑,沿此直接路徑從分支節點追溯到Merkle根處,然后通過計算根節點與待檢測秘密值求得的哈希值判斷數據的真實性和完整性。

圖1 基于比特幣的數據結構設計
例如,要想驗證HID是否存在于該塊中,僅需節點Hash2、Hash34和Merkle根即可完成驗證。在由N個交易組成的區塊中,至多計算 2 log2(n)次哈希即可驗證數據是否存在。
基于區塊鏈技術的RFID匿名認證協議過程主要由初始化階段、雙向認證階段兩部分構成。協議中出現的符號說明如下表1所示。
在初始化階段,數據庫端存儲標簽的基本信息,包括TID,oldTID,HID,S,s1,s2等信息;標簽存儲TID,HID,S,s1,s2;共享密鑰S的標志位status初始值默認為0;HID是標簽的偽名,用來代替TID在信道上傳輸,以保護用戶隱私,其初始值為TID的哈希值;假設Hash加密足夠安全,標簽和數據庫均可執行Hash運算和XOR操作,且兩者都具有一個偽隨機數發生器;協議的認證流程建立在后臺數據庫端與閱讀器之間為安全通信的基礎上。

表1 協議符號說明
安全協議的認證流程如圖2所示,協議流程如下:

圖2 協議認證流程圖
步驟1:DB→R→T:Rd,OTA
后臺數據庫產生偽隨機數Rd和認證請求OTA,通過閱讀器,將Rd和OTA一起發送至標簽。
步驟2:T→R→DB:Q1||Q2 ||Rt
標簽收到Rd,OTA后,通過偽隨機數生成器產生隨機數Rt,并計算Q1 =h(Rt⊕Rd)⊕S,Q2 =h(Rt⊕Rd⊕S) ⊕HID,標簽形成消息Q1||Q2 ||Rt后通過閱讀器發送給標簽。
步驟 3、4、5:DB→R→T:Q3 ||Rd或Q4 ||Q5 ||Rd
后臺數據庫接收到標簽的消息后,首先對比驗證數據的真實性,用本身存儲的隨機數Rd和接收的消息Rt,計算S'=Q1 ⊕h(Rd⊕Rt),查找區塊中是否存在一個S,使S'=S,若不存在則說明標簽不合法,認證失敗并退出。然后判斷S'的標志位status的值,若為0則認證繼續,若為1則說明密鑰失效,認證失敗并退出。接下來數據庫獲取區塊中的密鑰S、隨機數Rd以及接收的消息Rt,計算HID'=Q2 ⊕h(Rd⊕Rt⊕S),并驗證HID'和區塊鏈中存儲的HID、oldHID是否一致,具體情況如下:
若三者皆不相等,則說明此標簽沒有在數據庫中進行登記,是不合法的,認證失敗并退出。
若存在一條記錄使HID'=HID,則計算Q3 = (h(s1⊕Rd⊕HID') ||h(s2⊕Rd⊕HID')),并發送給標簽。
若存在一條記錄使HID'=oldHID,則認為是在之前的認證過程中由于物理因素或惡意攻擊等導致標簽與后臺數據庫失去了同步,同樣認證此標簽是合法的,則進行以下計算,并生成消息Q4 ||Q5 ||Rd發送給標簽。

步驟6:T→R→DB:Y||Rt
如果標簽接收到消息Q3 ||Rt,用其本身存儲的s1、s2、HID以及接收的消息Rd,計算Q3'并與Q3進行比較,若不相等則標簽認證失敗,并退出協議。
Q3'= (h(s1 ⊕Rd⊕HID) ||h(s2 ⊕Rd⊕HID))
如果標簽接收到消息Q4 ||Q5 ||Rd,計算并更新HID=Q5 ⊕ (Rd⊕Rt),然后計算比較Q4與Q4',若不相等則標簽認證失敗,并退出協議。
Q4'= (h(sO1 ⊕Rd⊕HID) ||h(sO2 ⊕Rd⊕HID))
認證通過后,標簽向后臺數據庫發送認證成功標識Y和隨機數Rt,并更新標簽中S的status值為1,表明標簽此時的密鑰已經無效。
步驟5:DB→R→T:m1 ||m2 ||m3 ||Rd
后臺數據庫接收到標簽的認證成功標識Y,更新密鑰和偽名等 信 息 , 即S'=h(S⊕Rd⊕Rt),s1'=h(s1 ⊕Rd⊕Rt),s2'=h(s2 ⊕Rd⊕Rt),HID'=h(HID⊕Rd⊕Rt), 然 后 計 算m1 =S'⊕ (Rd⊕Rt)、m2 =s1'⊕ (Rd⊕Rt)、m3 =s2'⊕ (Rd⊕Rt),并形成消息m1||m2 ||m3 ||Rd發送給標簽。
GNY形式化證明所使用的表示和推理規則遵循文獻[15]中的相關內容。協議根據GNY邏輯的要求形式化表述,其中D表示后端服務器與讀寫器,T表示標簽。
(1)協議理想化表述
根據GNY邏輯公式和命題對協議的認證過程進行形式化描述如下:

(2)協議初始化假設
為了研究的方便,對協議的相關情形進行合理化假設,比如數據庫端在每一輪協議中都生成新的隨機數以保證數據的新鮮性,即A3 :D|≡#Rd。

(3)安全目標證明
根據(1)、(2)中的命題和假設,以及GNY邏輯推理規則我們可以證得以下安全目標:
G1:T|≡D~S
說明:標簽相信閱讀器與數據庫端發送過真實的共享密鑰S
推理:由消息M5和前文的假設{A6,A7,A1 0 ,A11},經被告知規則T1、T3、擁有規則P1、P2、P5和新鮮性規則F1,結合消息解釋規則I1,可證得安全目標T|≡D~S。
說明:閱讀器端相信標簽發送過真實的標簽偽名HID
推理:由消息M2和合理假設{A2,A3,A1 2 ,A9},經被告知規則T1、T3,擁有規則P1、P2、P5和新鮮性規則F1,結合消息解釋規則I1,可證得安全目標D|≡T~HID。
G3:T|≡D?HID
說明:標簽相信數據庫擁有真實的標簽偽名HID
推理:由消息M3和假設{A5,A6,A7,A13},經被告知規則T1、T5,擁有規則P2和新鮮性規則F1,結合消息解釋規則I3,I6,可證得安全目標T|≡D?HID。

類似的,我們還可以推理出安全目標G4,G5,G6。
G4 :D|≡T~S
G5 :T|≡D~s1
G6 :T|≡D~s2
從協議形式化分析可以看出,標簽和閱讀器通過雙向認證確保用戶的安全性和保密性,每輪通信都加入隨機數保證了每條消息的新鮮性,可以有效抵抗重傳攻擊和假冒攻擊。
本節將對提出的基于區塊鏈的RFID匿名認證協議進行安全性分析,具體從假冒攻擊、重放攻擊、跟蹤攻擊、雙向認證、去同步化攻擊五個方面說明協議的安全性。
(1)假冒攻擊
在認證過程中,攻擊者假冒數據庫端向標簽發送認證請求消息{Rd,OTA},標簽響應請求后,攻擊者竊取到標簽的響應消息Q1||Q2 | |Rt,當真正合法的數據庫端發送請求消息{Rd',OTA}時,攻擊者假冒標簽用上一輪獲取的標簽消息回應數據庫端,數據庫端用本身存儲的Rd'和接收的消息Rt,計算S'=Q1 ⊕h(Rt⊕Rd'),由于Rd'≠Rd,可知S≠S',協議認證失敗并退出,因此攻擊者無法假冒數據庫端欺騙標簽。
(2)重傳攻擊
假設攻擊者獲取到標簽、閱讀器和后臺數據庫的相關信息,在這之后的認證過程中也無法實現重傳攻擊。因為認證過程中的消息都引入隨機數以保持數據的新鮮性,如Q1 =h(Rt⊕Rd) ⊕S,Q3 = (h(s1 ⊕Rd⊕HID') | |h(s2 ⊕Rd⊕HID'))等,同時在每一輪認證結束后,協議及時更新共享密鑰與標簽密鑰。因此,攻擊者無法對數據庫端或標簽進行重傳攻擊。
(3)跟蹤攻擊
協議為保證標簽的隱私,對標簽的身份標識進行哈希加密生成標簽偽名HID,用來代替TID在信道上傳輸。同時標簽任意一輪的響應信息中都包含隨機數{Rt,Rd}以便確保數據的新鮮性,假設攻擊者對標簽進行定位追蹤,攻擊者獲取到相關認證消息,通過分析竊取到的信息來追蹤發出響應的標簽,由于Rd和Rt在每一次的認證中都不相同,標簽偽名HID可以有效保證標簽隱私,且Hash操作具有不可逆性,因此,攻擊者無法進行跟蹤攻擊。
(4)雙向認證
在協議第三步中數據庫端接收到標簽的消息后,首先驗證消息Q1中包含的S是否為合法密鑰,若認證通過,繼續驗證HID的合法性,若計算得到的HID'和區塊中存儲的HID,oldHID均不相等,則認證失敗并退出,若相等則對應的將計算結果向標簽再次發出響應。在協議第五步中標簽接收到消息分別計算并比較Q3'與Q3和Q4'與Q4,若兩者相等,則標簽認證成功,向數據庫端發送認證成功消息Y,至此雙向認證完成。
(5)去同步化攻擊
在認證過程中,可能出現物理因素或人為惡意攻擊等原因,導致數據庫端與標簽未能同步更新出現異步情況。假如標簽未及時得到更新仍保留上一輪信息,即使數據庫端已更新信息,但區塊中仍舊存儲著上一輪認證成功的標簽信息 {oldHID,so1,so2},當標簽發出認證請求時,數據庫端在區塊中檢索已有的{HID,oldHID,s1,s2,so1,so2},即使檢索不到當前標簽信息,但仍能與上一輪標簽信息匹配,使標簽與數據庫端完成認證,同時有效地抵御了去同步化攻擊。
基于上述分析結果,本文所提協議具有較高的安全性。此外,表2給出本文協議與其他認證協議在安全方面的對比結果,顯然,本文協議較其他協議具有更強大的安全性。Y表示能抵抗此種攻擊,N表示不能抵抗此種攻擊。

表2 所提協議與其他協議的安全性對比
本文提出了一種全新的基于區塊鏈技術的RFID匿名認證協議。協議中標簽使用偽名代替真實的身份信息進行通信,避免將身份透漏給不信任的實體,后端數據庫通過 Merkle哈希樹實現認證過程中數據的快速查找驗證,每輪認證結束后,為保證協議的前向安全,標簽和數據庫端均對偽名和密鑰進行更新。經安全分析可知,協議可以抵抗假冒攻擊、重傳攻擊、跟蹤攻擊和去同步化攻擊,在相互完成認證的基礎上還提供了匿名性。在保證安全性的同時提高協議性能以及在區塊鏈技術基礎上如何完成群組標簽所有權轉換是下一步待解決的問題。