謝海寶, 郝偉偉, 呂 磊
1(河南省市場監督管理局 信息中心, 鄭州 450008)
2(河南工業大學 信息科學與工程學院, 鄭州 450008)
射頻識別技術雖出現在上個世紀上半時期, 但真正得到大范圍推廣卻是在本世紀; 該技術是一種不需要與特定商品相接觸, 就可以讀出該特定商品中存放數據的技術[1,2]. 一個完整的射頻識別系統具備成本低、較容易部署、使用壽命長等優勢, 使得射頻識別技術現在多個領域中應用, 比如: 門禁系統、地鐵卡系統、校園卡系統等[3,4].
比較經典的射頻識別系統一般至少包含后臺數據庫、電子標簽、讀卡器3個實體設備[5-7]. 后臺數據庫主要用來存放系統應用過程中產生的數據, 具備強大的計算和搜索查找能力, 同時也具備較大的存儲空間;電子標簽一般主要在用戶手上, 用于存放用戶的一些個人隱私信息, 比如: 用戶標識、用戶金額等, 電子標簽計算能力有限、存儲空間同樣也有限; 讀卡器一般主要固定在某個地方, 用于讀取電子標簽中信息, 再將讀取的信息發送給后臺數據庫, 很多時候讀卡器并不真正的參與運算.
在上述經典的射頻識別系統中, 電子標簽與讀卡器之間無線方式交互數據, 極其容易被第三方竊聽, 導致用戶隱私信息泄露, 研究人員一般認為不可靠、不安全; 讀卡器與后臺數據庫之間絕大多數基于有線方式交互信息, 第三方獲取數據并不是很容易, 一般可認定為安全、可靠, 并可將二者看成一個系統或整體對待[8,9]. 文中為能夠保證電子標簽與后臺數據庫二者間數據交互安全, 提出一個采用偽隨機函數實現加密的輕量級認證協議.
文獻[10]中利用散列函數設計一個認證協議, 對協議分析, 可以提供一些安全需求, 但因數據加密過程中部分數據第三方可以獲取, 使得協議無法抵抗第三方窮舉分析.
文獻[11]中設計一個超輕量級的協議, 雖能夠極大程度上降低系統計算量, 但依據現有的研究結果表明, 超輕量級的協議絕大多數都是基于按位運算實現,而簡單的按位運算是無法提供絕對的安全性, 因此文獻[11]中協議安全性級別有待商榷.
文獻[12]中利用經典的哈希函數設計一個認證協議. 協議設計過程中充分考慮到各種常見類型的攻擊,因此該協議具備良好的安全需求. 但電子標簽一端將會多次用到哈希函數進行運算, 將會使得系統整體計算量增加, 低沉本受限制的電子標簽無法大規模推廣.
文獻[13]中基于物理不可克隆技術設計一個認證協議. 物理不可克隆技術使得協議可以抵抗假冒攻擊等, 但對協議分析, 表明協議最后一個步驟并沒有完成電子標簽對讀卡器的驗證, 使得協議存在安全缺陷.
文獻[14]中結合Universal哈希函數給出一個協議. Universal哈希函數與經典的哈希函數之間存在些許不同, 但整體工作原理相差并不大. 因具備的單向性,是第三方難以假冒或重放; 卻無法在低成本電子標簽系統中推廣使用.
文獻[15]中采用RRAM物理不可克隆技術設計一個認證協議. 協議設計過程中, 部分消息加密時未混入隨機數, 使得部分消息前后多次認證過程中消息計算數值相同, 給了第三方破解機會.
對近些年經典協議進行分析, 指出大多數協議存在或多或少缺陷不足, 文中基于偽隨機函數設計一個輕量級的認證協議.
(1)協議中部分符號解釋
READER: 由讀卡器和后臺數據庫構成的整體
TAG: 電子標簽
IDT: TAG的假名身份標識
IDT_new: TAG當前的假名身份標識
IDT_old: TAG上次的假名身份標識
IDT_L: TAG真實身份標識前面一半
IDT_R: TAG真實身份標識后面一半
KEY: TAG與READER二者間共享秘密值
KEYnew: TAG與READER二者間當前共享秘密值
KEYold: TAG與READER二者間上次共享秘密值
f(x,y): 偽隨機函數
x: TAG生成的隨機數
y: READER生成的隨機數
⊕: 按位異或運算
&: 按位與運算
(2)認證協議步驟
可以結合圖1中的流程, 將文中協議步驟描述如下:

圖1 協議流程圖
① READER向TAG發送一個認證請求指令, READER與TAG之間將開啟認證.
② TAG接到消息, TAG先生成隨機數, 在依次計算得到消息M1=x⊕IDT_L、M2=f(x,IDT_R), 待消息計算完畢, TAG將向READER發送M1、M2、IDT.
③ READER接到消息, 先在數據庫中查找是否有數據與接到的IDT相同.
若未找到, 則協議停止.
若找到, 則協議可繼續. READER將對接到的M1進行變形, 并將變形之后結果帶入消息M2中可得到M2′=f(x′,IDT_R)=f(M1⊕IDT_L,IDT_R), 然后對比M2、M2′值是否相等.
若不相等, 則協議停止.
若相等, 則可表明TAG通過READER驗證, 協議再次繼續. READER將生成隨機數, 并依次計算得到消息M3=y⊕IDT_R,M4=f(x,y), 最后將M3,M4發送給TAG.
④ TAG接到消息后, TAG會發起對READER的驗證, 具體驗證過程如下:
TAG將先對接到的消息M3進行變形處理, 并將變形處理結果帶入消息M4中可得到M4′=f(x,y′)=f(x,M3⊕IDT_R), 接著比較M4、M4′二者是否相等.
若不相等, 協議停止.
若相等, 可表明READER通過TAG的驗證, 協議繼續. TAG將計算消息M5=f(x⊕KEY,y&KEY), 并將M5發送給READER. 待TAG發送消息M5之后,TAG一端將進行共享秘密值、TAG假名身份標識更新操作IDT=f(y,IDT)、KEY=f(x,KEY).
⑤ READER接到消息后, 先用當前READER與TAG間共享秘密值KEYnew來驗證TAG, 具體過程見下:
READER利用存放的KEYnew、之前計算所得x、自己生成y計算得到消息M5′=f(x⊕KEYnew,y&KEYnew),接著比較計算得到M5′與接到消息M5大小關系.
兩者關系不等, READER將再次用上次二者間共享秘密值驗證TAG, 即用KEYold替換KEYnew再次進行計算可得到M5′′=f(x⊕KEYold,y&KEYold), 然后再次對比M5與M5′′大小. 還是不等, 協議停止; 此時等,READER驗證TAG通過, 協議繼續執行, READER向TAG發送ACK確定消息, 同時READER端進行信息更新IDT_old=IDT_new,IDT_new=f(y,IDT),KEYnew=f(x,KEYold).
兩者關系等, READER驗證TAG通過, 協議繼續執行, READER向TAG發送ACK確定消息, 同時READER端進行信息更新IDT_old=IDT_new,IDT_new=f(y,IDT),KEYold=KEYnew,KEYnew=f(x,KEYnew).
⑥ TAG接到消息, 確定接到消息為ACK, 則表明TAG與READER間雙向認證完成, 協議可正常結束.
(1)雙向認證
雙向認證是協議要具備的最基本的安全需求. 文中協議具備該安全需求, 具體的分析見下:
在第③步中, READER將先通過TAG假名參數驗證TAG真實性, 接著將再次結合消息M1、M2對TAG進行驗證, 只有兩次都驗證通過, READER才會繼續執行協議.
在第④步中, TAG將結合消息M3、M4對READER進行驗證, 驗證通過, TAG將才會進行后續操作.
在第⑤步中, READER將先用KEYnew來驗證TAG真假; 驗證不通過時, READER將再次用KEYold來驗證TAG真偽. 前后兩次驗證通過, 協議才繼續.
基于上述分析, 文中協議可提供雙向認證安全需求.
(2)假冒攻擊
從理論上來講, 第三方既可以假冒成READER, 也可以假冒成TAG. 鑒于文中篇幅有限, 這里僅選取第三方假冒成READER來分析.
比如: READER假冒成合法讀卡器向合法TAG發送認證請求指令, 開始認證協議. 經過一段時候后,第三方可以收到合法TAG發送來的消息M1、M2, 第三方試圖通過對接到的消息M1、M2進行分析從而破解出隱私信息, 然后在計算正確消息M3、M4, 但第三方無法成功. 無法成功的主要原因有: 第三方不知曉TAG真實身份標識, 使得第三方無法通過消息M1、M2破解分析出合法TAG生成的隨機數x, 第三方在不知道隨機數x的情況下, 第三方只能隨機選擇一個數冒充為隨機數x, 可想而知, 第三方就無法計算出正確的消息M3、M4. 當合法TAG接到第三方發送來的消息M3、M4時, 只需要進行簡單計算, 合法TAG即可識別出第三方是假冒的, 協議停止.
基于上述分析, 文中協議可提供抵抗假冒攻擊安全需求.
(3)重放攻擊
第三方可以竊聽當前會話過程, 獲悉當前會話過程中所有消息, 待下輪會話時, 第三方可以重放竊聽的消息, 以企圖通過合法實體驗證, 進而獲取更多隱私信息. 但文中協議中, 第三方只能以失敗而告終, 具體原因如下: 文中協議設計過程中, 每個消息加密之時, 都引入隨機數, 或引入READER生成的隨機數, 或引入TAG生成的隨機數, 或同時引入READER、TAG生成的隨機數, 這樣操作之后, 將使得每輪消息計算值處于變動之中. 即: 第三方人員在重放上輪竊聽消息時,本輪認證中用到的消息值早已發生變更, 第三方重放消息失敗, 協議停止, 第三方未獲取任何隱私信息.
基于上述分析, 文中協議可提供抵抗重放攻擊安全需求.
(4)異步攻擊
文中協議在READER一端將會存放READER與TAG間之前認證過程中用到的共享秘密值, 這樣就可以抵抗第三方發起的異步攻擊. 具體原因分析如下: 當READER用當前共享秘密值發起對TAG驗證時, 驗證通過, 就直接進行后續操作; 如果沒有驗證驗證, 則READER將會調出上一輪認證過程中用到的共享秘密值, 將用上輪認證過程中用到的共享秘密值替換當前共享秘密值再次發起對TAG的驗證. 如果本次驗證還是失敗, 則READER將再次調出上上次認證用到的共享秘密值, 以此方式可以實現抵抗第三方發起的異步攻擊.
基于上述分析, 文中協議可提供抵抗異步攻擊安全需求.
(5)窮舉攻擊
第三方可能對竊聽獲悉的消息采用窮舉的方式窮盡出所有其可能值, 進而獲取隱私信息. 但文中協議可是第三方無法窮舉成功, 這里選擇消息M1、M2為例進行詳細分析:
第三方可以對消息M1進行變形處理, 并將變形處理結果帶入消息M2中可得到M2′=f(M1⊕IDT_L,IDT_R). 在變形之后所得到消息M2中, 第三方仍有兩個參量IDT_L、IDT_R不知曉, 因此第三方就無法采用窮舉方式窮盡所有可能值, 第三方只能以失敗而告終.
基于上述分析, 文中協議可提供抵抗窮舉攻擊安全需求.
(6)前向安全
第三方想通過竊聽獲悉的消息逆推出上輪認證用到的部分隱私信息, 以此來獲悉更多用戶隱私信息. 但文中協議中, 第三方無法從竊聽獲悉的消息中分析或逆推出上輪會話中用戶隱私信息, 具體原因分析如下:文中協議設計過程中, 每個認證消息均不是明文方式發送, 而是采用偽隨機函數加密之后再發送, 這使得第三方竊聽獲悉的數據是密文; 第三方在不知曉關鍵參數情況下, 是無法分析或逆推出之前認證中用戶隱私信息; 同時所有消息加密過程中都有隨機數的加入, 這樣使得前后每次消息值不同, 并且隨機數具備互異性、無法預測性, 更加增加了第三方破解分析難度.
基于上述分析, 文中協議可提供前向安全需求.
從文中前面章節有關經典射頻識別系統組成描述可以知曉, READER整體計算能力強、存儲空間大; 相反, TAG計算能力薄弱、存儲空間有限, 故本章節僅選取TAG作為性能分析對象. 將文中協議與其他近些年提出的經典協議進行性能方面分析, 結果見表1所示.

表1 不同協議之間性能分析對比
對表1中出現的符號所表示的意思解釋見下面:Ta符號代表的意思為按位運算的計算量(此處按位運算可包含按位異或運算、按位與運算等); Tb符號代表的意思為物理不可克隆函數的計算量; Tc符號代表的意思為隨機數發生器產生隨機數的計算量; Td符號代表的意思為哈希函數的計算量; Te符號代表的意思為偽隨機函數的計算量.
文中協議整個過程中TAG一端僅只生成一個隨機數, 故會有1 Tc計算量. 在步驟(2)中, TAG在計算消息M1時第1次用到Ta計算量, 在計算消息M2時第1次用到Te計算量; 在步驟(4)中, TAG在對消息M3變形處理時會第2次用到Ta計算量, 在計算消息M4′時會第2次用到Te計算量, 在計算消息M5時會第3次用到Te計算量, 在更新TAG假名身份標識、共享秘密值時分別第4次、第5次用到Te計算量.
基于上述分析, 文中協議在TAG一端總體計算量為2 Ta+5 Te+1 Tc.
文中協議一個完整會話包含的會話消息有M1、M2、IDT、M3、M4、M5、ACK、認證請求指令QUERY,其中消息M1、M2、IDT、M3、M4、M5每個長度都是L位, ACK、認證請求指令QUERY長度都是1個比特即可. 故文中協議通信量大小為6 L+2 bit.
通過本節及第3節分析, 可發現文中協議不僅可以彌補其他經典協議中安全不足, 同時在計算量方面優于其他協議, 具有推廣使用價值.
文中先介紹射頻識別技術在運用過程中出現的安全隱患, 在分析近些年經典的認證協議存在的問題, 最后設計出一個輕量級的認證協議. 文中設計協議在兼顧計算量的同時, 也考慮安全性, 故選擇輕量級的偽隨機函數作為消息加密算法; 為能夠應對假冒、重放等攻擊, 協議在消息加密中全部混入隨機數, 可保持消息新鮮性; 為能夠抵抗第三方發起的異步攻擊, 協議在READER一端存放若干輪之前認證用到的共享秘密值. 結合安全性、計算量等角度分析文中協議及近些年其他經典協議可發現, 文中協議可彌補其他協議安全不足之處, 同時可保證計算量、門電路總個數未增加.