杜 旋,郭 崇,姜學峰,王正敏,李 威
1.杭州師范大學,杭州 311121
2.浙江中煙工業有限責任公司,杭州 310008
3.遼寧工業大學 管理學院,遼寧 錦州 121001
無線射頻技術(Radio Frequency Identification,RFID)完成了信息的傳輸,實現了信息傳輸的目的[1-3]。開放環境下的無線通信是一種不安全的通信系統,容易受到黑客攻擊以及其他各種安全威脅[4-5]。實際生活應用中,經常變化所有權。例如:零售商品過程中,零售商、批發商是否還有該商品的歸屬權問題[6-8]。
針對該問題,許多專家學者設計出不同的所有權轉移協議:(1)有基于可信第三方的所有權轉移協議,比如:文獻[9]。該種方法安全性主要依賴于可信第三方,同時也增加了通信實體數,使得該協議的應用受到一定的局限。(2)無可信第三方參與的所有權轉移協議,比如:文獻[10]、文獻[11]。但上述協議存在一定的安全問題。(3)基于二次剩余定理的所有權轉移協議,比如:文獻[12]、文獻[13]、文獻[14]。此類協議安全性依賴于二次剩余定理,該定理的安全性基于數學中大數分解難題,使得采用該算法的協議計算量較大。
本文對文獻[15]中所提出的協議進行詳細分析,發現所提協議無法抵抗攻擊者發起的去同步化攻擊。對協議進行詳細分析的過程在第2章中體現;在文獻[15]基礎之上,結合第2章的詳細分析,第3章設計出能夠抵抗去同步化攻擊的所有權轉移協議。所提協議中引入計數器count,通過計數器的值來解決原協議中存在的去同步化攻擊缺陷問題。
文獻[15]中提出了一種改進的超輕量級RFID所有權轉移協議,協議中聲稱可以抵抗去同步化攻擊。但本文研究發現,文獻[15]中的所有權轉移協議并不能抵抗去同步化攻擊。具體攻擊過程如下:
攻擊者通過監聽手段,可以獲得文獻[15]中一個完整的通信過程中所有的信息,即:IDS,M,N,P,Q,X,Y。攻擊者在獲得上述信息之后,立刻阻斷前面五步的通信過程,通過不斷重放消息Q的手段,可以使得Dj與T之間的共享密鑰失去同步。
第一次重放:攻擊者偽裝成Di給Dj發送截獲的Q消息。因為之前認證Q通過,因此重放信息Q也一定可以認證通過。重放消息之前,Di中存放的信息如下:si,ti,X,Y,IDSold=IDS,IDSnew=IDS⊕N T⊕NR 。重放消息之后,Di產生隨機數Si+1,并計算ti+1,X1,Y1,同時更新數據 IDSold=IDS,IDSnew=IDS⊕NT⊕NR ,令此處的 IDSnew=IDS1,ui=si,vi=ti,si=si+1,ti=ti+1。 Di更新完之后,將會把 X1、Y1的消息發送給標簽,攻擊者阻斷兩者之間的信息傳輸。
第二次重放:在第一次重放之后,攻擊者截獲到Di傳給標簽的X1、Y1。此時攻擊者阻止該信息傳輸給標簽,同時攻擊者再次重放消息Q。因為Di中存放的有本次以及上次認證過程中用到的共享密鑰,因此Q還是可以通過認證。再次重放消息Q以后,Di會進行如下操作:
Di產生隨機數 Si+2,并計算 ti+2,X2,Y2;同時更新數據 IDSold=IDSnew=IDS1,IDSnew=IDS1⊕NT⊕NR ,令此處的 IDSnew=IDS2,ui=si+1,vi=ti+1,si=si+2,ti=ti+2。 Di更新完之后,將會把 X2、Y2的消息發送給標簽,攻擊者阻斷兩者之間的信息傳輸。
第三次重放:在第二次重放之后,攻擊者截獲到Di傳給標簽的X2、Y2。此時攻擊者阻止該信息傳輸給標簽,同時攻擊者再次重放消息Q。因為Di中存放的有本次以及上次認證過程中用到的共享密鑰,因此Q還是可以通過認證。再次重放消息Q以后,Di會進行如下操作:
Di產生隨機數 Si+3,并計算ti+3,X3,Y3;同時更新數據 IDSold=IDSnew=IDS2,IDSnew=IDS2⊕NT⊕NR,令此處的 IDSnew=IDS3,ui=si+2,vi=ti+2,si=si+3,ti=ti+3 。 Di更新完之后,將會把 X3、Y3的消息發送給標簽,攻擊者阻斷兩者之間的信息傳輸。
三次重放攻擊完成之后,攻擊者將原本截獲的消息X、Y傳給標簽。因為在前面的三次重放攻擊過程中,標簽端始終沒有進行共享密鑰的更新,因此X和Y肯定可以通過認證;通過認證之后,標簽更新共享密鑰,IDS=IDS⊕N T⊕NR,即IDS=IDS1;共享密鑰為ti+1。
分析上面標簽端與Di端最終存放的共享密鑰信息可以發現,兩者之間出現不同步。標簽端存放的信息為IDS1、ti+1;Di端存放的信息為IDS3、ti+3。到此為止,攻擊者成功通過重放攻擊使得Di與標簽之間的共享密鑰不再一樣,從而使得后續的認證失敗,因此原協議無法抵抗去同步化攻擊。
改進的協議中,在S_old端引入消息計數器count,通過計數器count的值來抵抗重放攻擊。計數器count用來記錄消息Q的重放次數,count的值不存在或為0,說明Q消息是第一次傳輸過來;count的值不為0時,說明消息Q可能是重放過來的消息。針對兩種不同的情況,S_old端進行的操作不同,不僅可以抵抗重放攻擊,而且也避免了S_old與標簽之間的不同步問題。
設計的協議中各符號的含義:
標簽的原所有者用符號S_old表示;
標簽的新所有者用符號S_new表示;
標簽用符號T表示;
第i個標簽用符號Ti表示;
第i個標簽的標識符ID的左半部分用符號IDi_L表示;
第i個標簽的標識符ID的右半部分用符號IDi_R表示;
標簽標識符ID的左半部分用符號ID_L表示;
標簽標識符ID的右半部分用符號ID_R表示;
標簽最開始保存的數據用符號r_x表示;
標簽產生的隨機數用符號r1表示;
標簽的原所有者生成的隨機數用符號r2表示;
梅森數用符號n表示;
密鑰的長度用符號L表示;
標簽Ti的私鑰用符號S_i表示;
標簽Ti的公鑰用符號K_i表示,其中K_i=S_i2mod n;
標簽Ti上一輪的私鑰用符號U_i表示;
標簽Ti上一輪的公鑰用符號V_i表示,其中U_i=V_i2mod n;
標簽的新所有者生成的隨機數用符號S_i+1表示;
本輪認證的公鑰用符號K_i+1表示,其中K_i+1=S_i+12mod n;
標簽的新所有者對消息Q的計數器用符號count表示;
M,N,P,Q,X,Y:協議中的通信數據;
MIXBITS(a,b):對(a,b)進行運算得到新的隨機數;
異或運算用符號⊕表示;
與運算用符號&表示;
[X]L:取[]運算結果的前L位。
對圖1中出現的M,N,P,Q,X,Y符號的說明:
M=K_i⊕r1;
N=r2⊕IDi_R;
P=[(r1⊕r2⊕K_i)2mod n]L,表示取[]運算結果的前L位;
Q=[(r1⊕r2⊕ID_R)2mod n]L,表示取[]運算結果的前L位;
X=S_i+1⊕r1⊕IDi_R ;
Y=K_i+1&r1&IDi_R。

圖1 改進的協議
結合圖1協議步驟如下:
(1)S_old向T發出請求命令Request。
(2)T 收到信息后,首先計算r1=r_x、M=K_i⊕r1的值,然后將ID_L、M發送給S_old。
(3)S_old收到信息后,第一步是在數據庫中驗證ID_L的真偽。為假,協議停止;反之,第二步是S_old產生一個隨機數r2,然后通過計算得到隨機數r1。接著再用r1、r2、與IDi_L相對應的IDi_R以及K_i來計算 N=r2⊕IDi_R和 P=[(r1⊕r2⊕K_i)2mod n]L,最后將N、P發送給T。
(4)T收到信息后,第一步是用自身存放的ID_R來計算N⊕ID_R得到r2,然后標簽驗證P的正確性,即

若P′與P不相等,說明S_old是偽造的,協議立刻終止;若P′與P相等,說明標簽認證S_old通過,然后標簽就開始更新數據r_x=MIX BITS(r1,r2)。再接著開始計算Q,最后把Q發送給S_old。
(5)S_old收到信息后,第一步是驗證Q的真假,即

為假,協議終止;反之,S_old將Q、r1、ID_L的值通過安全信道一并傳給S_new。
(6)S_new收到信息后,第一步是在數據庫中查找是否存在Q′與Q相等,若存在,并且相對應的計數器count的值不為0,說明該消息Q之前已傳輸過來過,為了抵抗攻擊者的重放攻擊,S_new執行步驟(7);若不存在,S_new執行步驟(8)。
(7)S_new在數據庫中驗證ID_L的真偽。為假,協議終止;反之,S_new不做任何更新,直接將上次認證過程中計算得到的X和Y的值傳給標簽。
(8)S_new先將Q的值存放在自己的數據庫中,并且分配相對應的計數器,同時令該計數器count的值為1,接著S_new在數據庫中驗證ID_L的真偽。為假,協議終止;反之,S_new生成一個長度為L位的隨機數S_i+1,將該值作為當前認證過程中的新的私鑰,并計算K_i+1=S_i+12mod n,計算完成之后,開始更新數據 U_i=S_i、V_i=K_i、S_i=S_i+1、K_i=K_i+1,再接著用自身生成的隨機數S_i+1、S_old傳輸過來的r1、計算得到的K_i+1、與IDi_L相對應的IDi_R來計算 X=S_i+1⊕r1⊕IDi_R、Y=K_i+1&r1&IDi_R,最后把X、Y發送給T。
(9)T收到信息后,第一步是計算得到私鑰S_i+1,然后用計算得到的私鑰S_i+1、自身生成的隨機數r1、自身存放的ID_R來驗證Y的正確性,即

若Y′與Y不相等,說明S_new是偽造的,協議立刻終止;若Y′與Y相等,說明標簽認證S_new成功,然后標簽開始更新數據K_i=Y⊕r2,標簽所有權轉移成功。
協議的改進策略主要表現在:新所有者S_new端引入對消息Q的計數器count概念。S_new收到Q消息后,第一步是驗證Q的值,即:根據計數器count的值,進行不同的操作。count的值為0,表示接收到的Q是第一次傳過來;count的值不為0,表示接收到的Q之前已經傳過來至少一次,為了抵抗攻擊者的重放攻擊及去同步化攻擊,新所有者S_new采取不更新隨機數的做法以此來抵抗攻擊者的攻擊。協議的改進優勢主要表現在:攻擊者無法通過重放消息Q使新所有者S_new與標簽T之間密鑰失去一致性,使得改進的協議能夠有效地抵抗攻擊者的蓄意的重放攻擊以及去同步化攻擊,保證了協議通信的安全性及可靠性。
針對文獻[15]所提出的協議中標簽的新所有者因無法抵抗重放消息而導致的去同步化攻擊問題,改進的協議引入對消息Q的計數器count的概念。根據count的值進行不相同的操作,來解決去同步化攻擊。當count的值不存在或為0的時候,標簽的新所有者才會產生新的隨機數;否則不會產生隨機數,從而可以避免多次接收到消息Q之后不斷產生隨機數,使得兩者之間的共享密鑰不同步的問題。