周志彬 王國軍 劉 琴 賈維嘉
1(湖南師范大學信息科學與工程學院 長沙 410012) 2(中南大學信息科學與工程學院 長沙 410083) 3(廣州大學計算機科學與教育軟件學院 廣州 510006) 4(湖南大學信息科學與工程學院 長沙 410082) 5(上海交通大學計算機科學與工程系 上海 200240)
無線射頻識別(radio frequency identification, RFID)技術是物聯網環境下普遍采用的一種物理層無線通信技術.該技術能夠將附著有RFID標簽(Tag)的物品通過閱讀器(Reader)將數據傳輸至后臺服務器(Server),從而實現物品的網絡互聯,具有很重要的現實意義,被應用到物聯網的各個領域.由于RFID主要是通過無線方式實現信息傳遞,而通信雙方都是性能受限的設備,隨著其應用越來越廣泛,其安全性與隱私性成為了當前的研究熱點[1-4].在其基礎之上提出的RFID群證明技術是一種防偽造協議[5-6],其基本思想是利用物聯網中的閱讀器在某個既定的時間段內,對屬于同一個群組(group)的2個或者多個標簽信息進行收集,如果時間段設置足夠短,可以認為這些標簽同時出現在Reader識別范圍內,稱為同時掃描(simultaneous scan),然后生成一個群證明(grouping proof)作為同時掃描到多個標簽的證據,提交給后臺的驗證服務器(Verifier)驗證,確保多標簽組成的實體的完整性.RFID群證明技術可用于藥劑核對、物流信息校驗等,因而在物聯網環境下的醫療衛生[7-9]、物流管理[10-11]等領域有著廣泛的應用.
根據在協議執行中Reader與后臺的數據連接狀態,群證明協議分為在線與離線2種.在線協議中,Reader與后臺的Verifier始終保持連接,群證明的驗證也是由Verifier在線完成[12-13].而離線協議不要求Reader與Verifier的連續數據連接,Reader處于離線模式下工作,從Verifier獲取群信息以后,先與群組內標簽分別進行通信,發送隨機數NR搜集Tag的信息認證碼(message authentication code, MAC)響應,計算群證明;最后再與Verifier建立連接,提交并驗證群證明數據,其系統模型如圖1所示:

Fig. 1 System model of off-line grouping proof protocol圖1 離線群證明協議系統模型
這種方式不要求Reader與Verifier的實時連接,具備更好的實用性,但也存在一定的安全問題,其中最主要的問題就是grouping-proof的正確性只能通過Verifier進行,如果在群證明過程中有無關Tag或者敵手冒充的Tag參與協議,則協議生成的proof在Reader提交給Verifier之前,都不會被發現,因此無法適用于一些時效性要求較高的場合.但如果完全將驗證grouping-proof的權限交給Reader,在Reader不可信的情況下,又難免造成Tag信息的泄露,威脅Tag的隱私安全.
本文的主要貢獻包括4個方面:
1) 對Batina的協議[14]進行了分析,指出其在冒充攻擊以及中間人攻擊中存在一定的安全風險;
2) 構建了一種消息封裝方式,通過會話密鑰和群組密鑰,將標簽的身份信息封裝在群證明消息中,使得群證明消息中包含群成員信息以及身份信息;
3) 基于該消息封裝方式,提出了一種支持2個標簽的RFID離線匿名雙層校驗群證明協議,該協議能夠在確保標簽隱私的前提下授權閱讀器進行群證明校驗,提高系統對于非法群證明的響應效率,并在其基礎上將其擴充為AGPDL,支持多個標簽的雙層校驗群證明;
4) 對AGPDL協議進行了安全性分析和性能分析,指出其相對于其他群證明協議的優勢.
群證明的思想最早由Juels[5]在2004年提出,稱為”yoking-proof”,通過Reader對標簽信息的搜集,其能夠完成對2個標簽的群證明,在后續的研究中,這一思路被不斷地擴展,其中Saito[6]對yoking-proof的一些安全問題進行了分析,并提出了相應的改進,首次引入群組(group)的概念,支持多個標簽參與群證明,最終發展成為grouping-proof群證明協議.
就目前來說,由于在線模式的群證明協議對網絡連接要求較高,在許多場景中的實用性不高,當前的群證明協議的研究均是針對離線模式來進行的.
Burmester等人[15]對離線群證明協議進行了分析,指出大部分協議存在的一些問題:1)容易遭到重放攻擊,敵手可以通過對之前協議會話中的消息進行記錄與重放,欺騙標簽,從而進行群證明的偽造;2)Reader缺乏對群證明有效性進行校驗的功能.如果敵手通過某種方式偽造無效的群證明,在提交到后臺之前都無法發現,從而降低了協議的執行效率;3)部分協議不支持匿名,無法保護標簽的隱私信息.作者后來在文獻[16]中,針對這些問題進行了改進,提出采用數據編碼的方式對標簽信息進行校驗,提升了系統的安全性.
在協議的安全算法方面,考慮到RFID標簽有限的計算能力,許多的RFID群證明安全協議均采用位運算或者單向Hash函數來實現消息的加密[8,16-18],其中文獻[8]提出了IMRIP群證明協議,使用偽隨機數發生器與二進制位運算實現了智能醫療中的用藥管理,并進行了安全性分析與性能分析,能夠以較小的開銷防御冒充攻擊、重放攻擊等攻擊手段,同時也能確保閱讀器數據的安全,具有較強的實用性.這類方案具有計算開銷低、系統響應快的優點,但安全性并不高,很難應用在安全性要求較高的場合中.許多學者開始研究如何將傳統加密方案應用到RFID標簽中,但一方面由于RFID系統中標簽的數量十分龐大,對稱加密會帶來大量的密鑰分配開銷,不具備實際意義;另一方面,對稱加密算法的系統開銷過大,不適用于RFID系統[19].現有的研究均是基于公鑰加密來進行的.由于相對于RSA加密方案,ECC在安全性和性能開銷方面更加適合,成為了研究的主要方向.Batina等人在文獻[20]中提出了一種適用于ECC的RFID標簽芯片;隨后提出了基于ECC的RFID認證協議[21];基于該協議,Batina等人[22]設計了ID-transder認證協議,并于文獻[14]中,將其應用于RFID群證明中,提出了標簽防串謀群證明協議CTP(colluding tag prevention).該協議能夠在Reader和Tag不可信的情況下確保生成有效的離線群證明;但之后Hermans等人[23]和Kang[24]的研究中指出,CTP協議存在一些安全問題.其中文獻[23]指出其容易遭受冒充攻擊與中間人攻擊;文獻[24]指出其標簽容易遭受惡意追蹤,并提出采用Reader與Tag之間的雙向認證來防止冒充與追蹤.
在本節中,我們主要介紹文獻[14]中提出的CTP協議,并對該協議進行安全性分析.
CTP協議中使用的符號標識如表1所示:

Table 1 Notation of CTP表1 CTP符號標識
CTP的協議流程如圖2所示,在協議執行前,TagA與TagB已經存儲了Verifier的公鑰Y.

Fig. 2 CTP protocol圖2 CTP協議
協議中“Start left”與“Start right”消息用于讓Tag確認自己在協議中的位置.TagA隨機選擇整數rA,計算TA,1,由Reader轉發到TagB.后者隨機選擇整數rB,計算TB,1,并使用自己的私鑰sB以及rB,點rSTA,1的x坐標x(rsTA,1),和rs計算TB,2.然后將{TB,1,TB,2}發送給Reader.接下來,Reader將TB,2轉發給TagA,后者使用TB,2,私鑰sA,以及rA,公鑰Y計算TA,2,最后,由Reader向Verifier提交群證明:
(TA,1,TA,2,rs,TB,1,TB,2).
(1)
Verifier收到群證明后,進行校驗:
sAP=(y-1TA,2-TA,1)x(TB,2)-1,
(2)
sBP=(y-1TB,2-TB,1)x(rsTA,1)-1.
(3)
如果校驗通過,則群證明有效,添加時間戳后存儲在服務器上.
CTP協議能夠通過橢圓曲線加密保證群證明的有效性,但仍存在一些問題.其中包括冒充攻擊、中間人攻擊[23]以及惡意追蹤[24].其中,文獻[24]通過加入Reader與Tag之間的雙向認證來解決冒充攻擊,為此要求所有Tag均必須存儲Reader的公鑰,但考慮到實際的RFID中,Reader往往會經常發生變化,該方案在密鑰分配上將會帶來一定的困難.此外,CTP協議還容易遭受拒絕服務攻擊(deny of proof, DoP)攻擊[25].DoP攻擊的作用在于有意構建無效的群證明,敵手于協議執行時在合法Tag中混入非法Tag,并參與到群證明的生成.這樣一來,就能夠干擾正常的群證明計算,該攻擊方式主要針對離線模式的群證明協議,因為離線模式下,只有將群證明數據提交到Verifier驗證時才能發現其是否合法,敵手很容易讓Reader計算出大量無效群證明,干擾協議的執行.
為了避免DoP攻擊,就必須在將群證明數據提交到Verifier之前,授權Reader對Tag的消息進行校驗,為此,Reader需要存儲Tag的身份信息,而考慮到RFID系統中,Reader并不屬于可信實體,如果敵手通過某種方式,獲取了Reader中的數據,會造成Tag信息的泄露,從而給整個系統帶來安全威脅.
本文中RFID群證明協議一共包含3個部分:Reader,Tag,Verifier,三者的特點描述如下:
本文中,Reader被看成一個有可能被不可信第三方入侵的設備,敵手能夠通過入侵Reader獲取其中的數據.
本文中考慮的Tag屬于低功耗的被動標簽,具有有限的存儲空間以及計算能力,容易被敵手控制,并獲取其數據.根據需要,標簽被劃分為不同的群組(group),表示為G={G1,G2,…,Gn}.
Verifier是一個位于后臺的可信第三方,保存了所有的密鑰以及標簽的群組信息.
在協議執行前,Verifier將群組信息發送至Reader,授權其進行群證明數據的收集和校驗.在協議執行過程中,Reader對群組內的標簽進行信息搜集,并計算相應的群證明GP.經過第1層校驗后提交到Verifier,并由Verifier進一步驗證.
在協議的執行過程中,存在2種信道,其中Reader與Tag的通信信道被認為是不安全的,敵手能夠竊聽甚至控制該信道中的信息.而Reader與Verifier間的信道被認為是安全的,敵手無法竊聽和修改其中傳輸的信息.
在群證明協議中,敵手的目的主要有2個:1)偽造能夠通過Verifier驗證的群證明;2)獲取關于Reader與Tag的隱私數據.文獻[26]給出了關于敵手能力的一般性定義:敵手能夠完全控制Reader與Tag之間的信道,包括對信道中的消息進行修改、延遲以及重放.除此之外,敵手能夠對Tag進行入侵甚至完全控制.
群證明協議的安全需求包含5個方面:
1) 匿名性.敵手無法通過對協議消息的竊聽獲取關于消息來源者的信息.
2) 位置隱私.敵手無法對Reader或Tag的位置進行追蹤.
3) 抵抗重放攻擊.敵手無法通過使用之前協議會話中的消息來欺騙Reader或者Tag,生成有效的群證明.
4) 抵抗DoP攻擊.敵手無法在協議執行過程中通過非法Tag生成無效群證明,提交到Verifier,影響到系統對于非法群證明的響應速度.
5) Tag隱私數據保護.在Reader被敵手侵入的情況下,敵手無法通過存儲在Reader中的數據獲取關于Tag的秘密信息.
為了解決第3節中提到的問題,我們提出采用雙層校驗的AGPDL群證明協議.為敘述方便,我們首先將群組中的標簽數量設置為2個,即TagA與TagB.之后本文將該協議擴展至多個標簽的情況.為確保2個標簽被“同時掃描”,AGPL中的協議各方通過各自的計時器來判斷協議會話是否超時,如果會話超時,則終止協議.協議中的相關符號說明如表1所示.
AGPL協議的包含3個階段:1)初始化階段;2)群證明生成階段;3)校驗階段.
后臺服務器對所有標簽進行分組,不失一般性,本文假設群組包含的標簽數量為2個的情況,協議中的符號標識名稱及描述如表2所示,其中TagA與TagB被劃分為同一個群組G.

Table 2 Notation of AGPDL表2 AGPDL符號標識
Verifier為群組G選擇隨機數kG∈,并計算KG=kGP作為群組G的公鑰,然后將私鑰kG與Reader共享,并將公鑰KG存儲在TagA,TagB中,同時存儲二者的公鑰{SA,SB}.
群證明計算階段的協議流程如圖3所示:

Fig. 3 AGPDL protocol with two tags圖3 2標簽的AGPDL協議流程
1) Reader選擇偽隨機數rs,使用當前的群組公鑰計算Hash函數C=h(rs⊕KG),并與消息“Start left”一起發送給TagA.


(4)
最后將消息{ma,ra}發送給Reader.
3) Reader將rs,mA,C以及消息“Start right”發送給TagB.
4) TagB首先使用自己的群組公鑰KG驗證C的合法性,如果驗證成功,選擇偽隨機數k2∈,計算rB,,并計算:

(5)

(6)
其中,TB用于Reader驗證TagB的group身份,mB用于Verifier對TagB的身份進行確認.并發送消息{mB,TB,rB}給Reader.
5) Reader發送TB給TA.
6) TagA計算

(7)
并發送至Reader.
最終,Reader生成grouping-proof為
GP={mA,TA,mB,TB,rA,rB,rs}.
(8)
驗證一共分為2個階段進行:1)Reader匿名驗證階段;2)Verifier認證階段.
1) Reader匿名驗證階段

(9)

(10)
2) Verifier認證階段
群證明GP第2階段的驗證由Verifier進行,主要用于確認參與群證明的Tag身份,其認證過程如下:
u1=rswmodn,
(11)
u2=rAwmodn.
(12)
最后驗證
rA=x(u1P+u2SA)
(13)
是否成立,如果成立,則驗證成功,否則驗證失敗.
之前的協議描述中,假定每個群組中的Tag數量為2個,接下來對協議進行擴展,使其能夠應用在包含多個Tag的群組中.
首先,我們討論groupG包含3個Tag的情況,即TagA,TagB,TagC,此時群證明的計算流程如圖4所示.

Fig. 4 AGPDL protocol with three tags圖4 3標簽的AGPDL協議
圖4中,虛線表示該協議消息是經過Reader轉發的.mA,TB,mB的計算分別如式(4)~(6)所示.其中TagC的協議消息的計算為

(14)

(15)
TC被發送到TagA.TagA計算:

(16)
最后,Reader計算的群證明可以表示為
GP3={mA,TA,mB,TB,mC,TC,rA,rB,rC,rs}.
(17)
為了進行群證明校驗,Reader匿名驗證階段的驗證式修改為

(18)

(19)

(20)
進一步考慮群組G={Tag1,Tag2,…,Tagn}(n≥3)的情況,可以得到多Tag群證明的計算鏈如圖5所示:

Fig. 5 AGPDL protocol with n tags圖5 n標簽的AGPDL協議
同理,可得消息Ti與mi的計算表達式為

(21)
相應的群證明:
GP={m1,T1,r1,m2,T2,r2,…,mn,Tn,rn}.
(22)
Reader匿名校驗階段采用的驗證式為

(23)
Verifier按照式(11)~(13)的方式對群證明進行最終的驗證,并認證Tag的身份.
在協議執行中,實體間傳遞的消息集合可以表示為{{mi,Ti,ri|i=1,2,…,n},rs},其中{ri|i=1,2,…,n}以及rs分別是由Tag與Reader生成的偽隨機數,而其余消息均是通過這些偽隨機數計算生成.敵手無法通過這些消息確定發送方的身份,從而確保了協議各方的匿名性.

在DoP攻擊中,敵手通過使用非法Tag參與群證明,破壞協議的執行,在AGPDL中,敵手在不知道群組密鑰的情況下,無法以大概率構造出合法的GPi,從而無法通過驗證式,協議在Reader驗證階段就會提前終止,而不會被提交到Verifier.
在AGPDL中,為了在抵御DoP攻擊的同時,最大程度地確保Tag信息的安全性,Reader中存儲的信息為{kG,KG},其中并不包含標簽的身份信息,即使敵手通過某種方式控制了Reader,并得到了其中的數據,也無法據此推斷出Tag的任何隱私信息.
敵手的冒充攻擊分為2種情況:冒充Tag或者冒充Reader.其中,冒充Tag的攻擊中,敵手希望能夠冒充一個合法的Tag,欺騙Reader通過群證明,并進一步欺騙Verifier.而冒充Reader主要是搜集Tag的秘密信息,或者在沒有掃描到Tag的情況下生成grouping-proof,欺騙Verifier.現分別描述如下:
1) 敵手冒充Tag

2) 敵手冒充Reader
敵手冒充Reader,能夠搜集到的信息為GPi,所有消息均采用密文傳輸,在不知道Tag密鑰的情況下,敵手無法通過這些消息反推出Tag的身份信息,也同樣無法在不同時掃描到所有Tag的情況下提交有效的群證明.
本文采用文獻[27]中使用的敵手模型,對于重放攻擊,定義能被敵手訪問的oracle包含4個:
1)Launch()→π,m.該oracle發起一個新的協議實例π,并且產生由Reader發出的第1條消息m.
2)SendTag(Tagi,m)→m′.該oracle將消息m和一個Tag的別名vtag作為輸入,功能是將消息m發送給vtag對應的標簽Tagi,i∈[1,n],并返回標簽的響應消息m′.
3)SendReader(π,m)→m′.該oracle表示在協議實例π中,將消息m發送給Reader,并返回其響應m′.
4)Corrupt(Tagi)→α.該oracle表示對Tagi進行破解,并獲取其內部信息α={si,P,KG}.

1) 系統設置階段
定義一個挑戰者S,完成下列工作:①使用安全參數k初始化系統,其中k表示ECC的密鑰長度.②設置Reader,Verifier以及標簽集合.
2) 詢問階段
敵手A調用Launch,SendTag,SendReader,獲取相關信息,另外,敵手還能夠調用Corrupt(Tagi),其中Tagi≠Tagx.
3) 挑戰階段
A調用Launch(),發起一個新的群證明協議實例π,使用在詢問階段得到的信息參與該協議,最終返回一個待驗證的群證明p,證明協議π在Tagx沒有參與協議的情況下,同時掃描到了group中包含Tagx在內的標簽集合{Tagi:i∈[1,n],Tagx}.如果p能夠同時被Reader和Verifier驗證通過,S輸出1,否則輸出0.



(24)



Fig. 6 The replay attack圖6 重放攻擊
具體攻擊過程如下:
1) 詢問階段
① 敵手A執行Launch()→π,δ,發起新的群證明協議實例π,并產生Reader的初始化消息δ={“Start first”,rs,C}.

③ 對于i=j+1,敵手A執行

(25)
得到返回值m′={ri,mi,Ti}.其中:

(26)
S將m′加入到τ中.
④ 對于i>j+1,敵手A執行
SendTag(Tagi,{rs,Ti-1,C})→m′,
(27)
得到返回值m′={ri,mi,Ti}.其中:

(28)
S將m′加入到τ中.
⑤S查詢集合τ,輸出

(29)
作為待定群證明.
2) 挑戰階段
① 由于敵手A能夠對除Tagx之外的所有Tag調用Corrupt(Tagi)→α,得到這些標簽的密鑰,因此協議π中的驗證表達式

(30)
在x≠i時成立.
② 對于標簽Tagx,其對應的驗證表達式為

(31)

證畢.
協議與其他方案的安全性比較如表3所示:

Table 3 Security Comparison of Grouping-Proof Protocols表3 群證明協議安全性對比
Notes:“√” means the protocol can provide corresponding security; “×” means the protocol can't provide corresponding security.
通過比較可以看出,AGPDL基本能夠滿足RFID群證明的安全需求,對于冒充攻擊以及DoP攻擊相對于其他協議具有一定的優勢.
在AGPDL中,主要的運算包含4種:基于橢圓曲線下的點乘(point multiplication)、模乘(modular multiplication)、取逆運算(modular inversion)以及Hash運算,分別表示為:Tecm,Tmul,Tinv,Th.文獻[30]指出這4種運算的開銷可以統一由模乘運算來進行等效,即Tinv≈3Tmul,Tecm≈1200Tmul,Th≈3.6Tmul.于是CTP與AGPDL的Tag端運算開銷比較如表4所示:

Table 4 Comparison of Computational Cost表4 運算開銷對比
通過比較可以看出:相對于CTP協議,本文協議在保證雙層校驗、防御DoP攻擊的同時,性能開銷有所降低.另外,考慮2標簽AGPDL與n標簽AGPDL的比較,可以看到標簽側的運算開銷一致,協議具有較好的可擴展性.
本文提出了一種采用雙層校驗的離線RFID群證明協議AGPDL,與傳統的將群證明的校驗完全交給Verifier不同,本文加入了Reader的匿名校驗階段,能夠在確保標簽隱私信息安全的情況下,由Reader提前對群證明數據進行檢查,防止DoP攻擊,提升系統的效率和實時性.同時能夠防止冒充攻擊、重放攻擊,并確保協議各方的匿名性.