劉立波 鄭巧珍 付 強(qiáng)
(中國船舶重工集團(tuán)公司第七二二研究所 武漢 430079)
無線射頻識別技術(shù)(Radio Frequency Identification,RFID)是一種自動識別技術(shù),能實現(xiàn)對感知物品的精確定位和資源共享,它的信息讀取過程不需要人工干預(yù),還能夠在惡劣環(huán)境下工作[1]。但是在RFID 應(yīng)用越來越廣泛的同時,RFID 系統(tǒng)的安全問題也越來越嚴(yán)峻。為了提高RFID 系統(tǒng)的安全性,研究者們把密鑰方法應(yīng)用到RFID認(rèn)證協(xié)議中,但是RFID 標(biāo)簽其儲存空間和計算能力都有限,無法實現(xiàn)復(fù)雜的高安全加密算法。另一方面,Hash函數(shù)因操作簡單、易實現(xiàn),可以被廣泛用于RFID標(biāo)簽中[1]。因此密鑰方法與Hash 函數(shù)方法相結(jié)合的認(rèn)證協(xié)議也應(yīng)運(yùn)而生。
本文針對一種基于非對稱密鑰和Hash 函數(shù)的RFID 雙向認(rèn)證協(xié)議的不足提出了改進(jìn)方案,同時用BAN邏輯驗證改進(jìn)協(xié)議的安全性。
RFID 系統(tǒng)一般分為三個部分:標(biāo)簽(Tag)、讀寫器(Reader)、數(shù)據(jù)庫(Data Base)。數(shù)據(jù)庫和讀寫器一般都具有足夠的存儲和計算能力,兩者之間可以使用有線信道通信,目前的密碼算法和安全協(xié)議完全可以保護(hù)兩者的通信安全,因此RFID 的安全問題主要在讀寫器和標(biāo)簽之間[1]。
文獻(xiàn)[1]中介紹的RFID 雙向認(rèn)證協(xié)議。其認(rèn)證過程和更新過程如圖1所示。
表1 文獻(xiàn)[1]協(xié)議中的標(biāo)識符
其中,標(biāo)簽和讀寫器中都引入隨機(jī)數(shù)產(chǎn)生模塊和相同的Hash 算法,另外,標(biāo)簽上存儲有DID 和秘密值——數(shù)字串num;讀寫器上存放非對稱密鑰對{K,K-1}和非對稱加密算法;數(shù)據(jù)庫中存有標(biāo)簽的標(biāo)識符ID、加密后的數(shù)字串Dnum和標(biāo)簽信息DM。
該協(xié)議能讓標(biāo)簽與讀寫器實現(xiàn)雙向身份認(rèn)證,在應(yīng)用方面有不少優(yōu)點(diǎn)。比如標(biāo)簽中ID 雖然使用非對稱密鑰加密,但是標(biāo)簽并不需要運(yùn)行非對稱加密算法,降低了標(biāo)簽的負(fù)載;不同于類似Hash 鏈的RFID 認(rèn)證協(xié)議,該協(xié)議的后端數(shù)據(jù)庫只用根據(jù)ID查詢信息,而不用計算所有ID 的Hash 值來與之匹配等。
但是該協(xié)議還是仍然存在不足之處。比如標(biāo)簽易被跟蹤,num 的更新不同步和非對稱加密算法使用不當(dāng)?shù)葐栴}。以下是具體的分析。
1)標(biāo)簽容易被跟蹤。在標(biāo)簽端存儲的DID 沒有進(jìn)行過更新,每一次標(biāo)簽都是向讀寫器發(fā)送同樣的信息,雖然攻擊者無法根據(jù)DID得到標(biāo)簽的真實ID,但是非法攻擊者卻可以將DID 視作ID 的別稱,跟蹤標(biāo)簽及其攜帶者。
2)非對稱密鑰算法使用過多,造成計算資源的浪費(fèi)。協(xié)議在執(zhí)行步驟3)時,讀寫器直接將ID 發(fā)送給數(shù)據(jù)庫,由此可以認(rèn)為該協(xié)議將讀寫器與數(shù)據(jù)庫之間的信道默認(rèn)是安全的,當(dāng)讀寫器與數(shù)據(jù)庫之間的通信是安全的時候,讀寫器就不需要再對num和M加解密,可以節(jié)省非對稱密鑰算法的計算開銷。
3)隨機(jī)數(shù)產(chǎn)生器依然要求一定的計算能力。標(biāo)簽端在更新階段需要產(chǎn)生高質(zhì)量的偽隨機(jī)數(shù),而當(dāng)前應(yīng)用廣泛、高效的梅森旋轉(zhuǎn)算法,通過反饋位移寄存器產(chǎn)生隨機(jī)數(shù),算法最大周期為219937-1,標(biāo)簽需進(jìn)行19937 次位移操作,這將增加標(biāo)簽的負(fù)擔(dān)[3]。
圖1 文獻(xiàn)[1]協(xié)議認(rèn)證與更新過程
4)無法抵抗中繼攻擊。中繼攻擊是中間人攻擊的一種,攻擊者在讀寫器端偽裝成標(biāo)簽,又在標(biāo)簽端偽裝成讀寫器,偽標(biāo)簽與偽讀寫器可以通信,然后通過轉(zhuǎn)發(fā)真正的讀寫器與標(biāo)簽之間的消息,使假冒標(biāo)簽通過讀寫器的認(rèn)證[4]。這種偽裝攻擊是最難抵抗的一種攻擊。
5)存在更新不同步問題。在更新數(shù)字串num時,新的數(shù)字串Nnum 是由標(biāo)簽產(chǎn)生的,如果在標(biāo)簽已經(jīng)進(jìn)行后,攔截了標(biāo)簽向讀寫器發(fā)送的更新消息,即步驟12)未執(zhí)行,那么就會造成標(biāo)簽的數(shù)字串num已更新,而數(shù)據(jù)庫里面的數(shù)字串num還是上一次認(rèn)證時使用的,從而引起更新不同步問題,使合法標(biāo)簽認(rèn)證失敗。
根據(jù)對原協(xié)議的分析,本文提出了以下的改進(jìn)方案,如圖2所示。
表2 改進(jìn)協(xié)議中的新引入的標(biāo)識符
改進(jìn)方案的具體步驟如下:
1)讀寫器→標(biāo)簽:讀寫器發(fā)送請求Query,計時模塊開始計時;
2)標(biāo)簽→讀寫器:標(biāo)簽返回DID;
3)讀寫器→數(shù)據(jù)庫:讀寫器若在規(guī)定時間T0內(nèi)收到標(biāo)簽回復(fù)(T1 4)數(shù)據(jù)庫→讀寫器:數(shù)據(jù)庫根據(jù)ID 查找相應(yīng)num和M,返回給讀寫器; 5)讀寫器→標(biāo)簽:讀寫器產(chǎn)生R1并且發(fā)送給標(biāo)簽,同時用num與R1計算哈希值H1=H(num‖ R1); 6)標(biāo)簽→讀寫器:標(biāo)簽應(yīng)答時間T1' 7)讀寫器:比較H1和H2,若相等,則標(biāo)簽為合法標(biāo)簽,讀寫器完成認(rèn)證和信息的讀??; 8)讀寫器:產(chǎn)生新的隨機(jī)數(shù)R2和R3,然后使用R2更新ID:NID=ID⊕R2,再加密NID,同時還用R2計 算 H3=H(num‖R2) , 最 后P=DNID⊕H(num‖R3); 9)讀寫器→標(biāo)簽:讀寫器打包發(fā)送{H3,R2,R3,P,更新命令}; 10)標(biāo) 簽:先 使 用R2與num 計 算 哈 希 值H4=H(num‖R2),比較H3和H4,若相等,則進(jìn)行標(biāo)簽更新,DNID=P⊕H(num‖R3),Nnum=num⊕R3,最 后 用 更 新 后 的 Nnum 與 R3計 算H5=H(Nnum‖R3); 11)標(biāo)簽→讀寫器:標(biāo)簽發(fā)送H5與更新成功消息; 12)讀寫器→數(shù)據(jù)庫:讀寫器更新數(shù)字串Nnum=num⊕R3,然后計算H6=H(Nnum‖R3)是否與H5相等,相等則表示更新成功,然后發(fā)送更新后的NID和Nnum給數(shù)據(jù)庫; 13)數(shù)據(jù)庫:更新NID和Nnum。 在認(rèn)證協(xié)議的改進(jìn)方案中,雙向身份認(rèn)證過程與原協(xié)議基本一致,只是減少了對num和M的解密計算,增加了讀寫器的計時模塊,但是對更新過程進(jìn)行了較大的修改。 首先新協(xié)議增加了標(biāo)簽ID 的更新,來防止攻擊者跟蹤標(biāo)簽及其攜帶者;其次由于讀寫器與數(shù)據(jù)庫之間使用的是安全信道,改進(jìn)協(xié)議減去了對num和M的加解密過程;然后新協(xié)議將產(chǎn)生隨機(jī)數(shù)的任務(wù)都交給讀寫器來完成,減輕了標(biāo)簽的計算任務(wù);同時讀寫器引入了計時模塊,有效預(yù)防了中繼攻擊;最后新協(xié)議也解決了更新不同步的問題。 改進(jìn)協(xié)議在安全性方面有了很大地提高,具體如下。 1)雙向認(rèn)證與防竊聽。標(biāo)簽利用非對稱密鑰認(rèn)證閱讀器,閱讀器通過Hash 函數(shù)來認(rèn)證標(biāo)簽。與此同時,協(xié)議中無論是非對稱密鑰算法,還是Hash函數(shù)都可以保護(hù)ID與num的機(jī)密性。 2)防重放攻擊。在認(rèn)證過程和更新過程中引入隨機(jī)數(shù),使得每一輪認(rèn)證信息與以前都不同,可以防止攻擊者利用竊聽到的信息進(jìn)行重放來偽裝合法的標(biāo)簽。 3)防篡改攻擊。標(biāo)簽和讀寫器之間使用了Hash 函數(shù)進(jìn)行加密,在Hash 函數(shù)中引入數(shù)字串num,由于數(shù)字串num 是秘密信息,所以當(dāng)攻擊者攻擊協(xié)議時,攻擊者無法計算出正確的Hash 值,有效防止了認(rèn)證消息被非法篡改。 4)防同步破壞攻擊。在本協(xié)議中,標(biāo)簽的更新由讀寫器發(fā)起,在標(biāo)簽完成更新后,還需要使用新的數(shù)字串Nnum 與隨機(jī)數(shù)R3進(jìn)行Hash 運(yùn)算,由讀寫器確認(rèn)更新成功來保證同步更新。即使更新過程中,讀寫器和標(biāo)簽之間的消息被攔截(無論是步驟10),還是步驟12)),數(shù)據(jù)庫也可以通過存儲了上一輪的ID 和num 和當(dāng)前更新的NID 和Nnum,避免了數(shù)據(jù)庫和標(biāo)簽中ID 和num 不一致而無法繼續(xù)認(rèn)證的問題。 5)防位置跟蹤。協(xié)議在運(yùn)行期間,攻擊者可以通過一些非法手段得到標(biāo)簽的部分?jǐn)?shù)據(jù)信息,特別是某些關(guān)鍵數(shù)據(jù),對合法標(biāo)簽進(jìn)行位置跟蹤[2],但是改進(jìn)協(xié)議會在每次完成信息認(rèn)證后,立即更新用戶的ID 信息和數(shù)字串num,動態(tài)信息認(rèn)證可以防止攻擊者的跟蹤。 圖2 改進(jìn)協(xié)議的認(rèn)證與更新過程 6)防中繼攻擊。解決RFID中繼攻擊的方法就是對認(rèn)證過程的時間進(jìn)行限制,由于中繼攻擊的偽標(biāo)簽和偽讀寫器需要一定的通信時間,假冒標(biāo)簽的認(rèn)證通常會比正常認(rèn)證過程耗時更多,設(shè)置一個合理的時間限制就可以避免中繼攻擊。因此改進(jìn)協(xié)議在讀寫器中加入了計時模塊,在步驟3)和步驟8)中,一旦標(biāo)簽的響應(yīng)時間超過預(yù)先設(shè)置的限制,讀寫器就會中斷此次認(rèn)證。 利用BAN 邏輯分析法驗證改進(jìn)協(xié)議的安全性,但是由于篇幅原因,只證明認(rèn)證階段。改進(jìn)協(xié)議的流程可以用BAN邏輯語言描述為 消息(1):Tag →Reader:{ID}K 消息(2):Reader →DB:{ID}key 消息(3):DB →Reader:{Tag ?numReader,M}key 消息(4):Reader →Tag:R1 消息(5):Tag →Reader:H(Tag ?numReader,R1) 讀寫器與數(shù)據(jù)庫之間的消息和分析論證無關(guān),將其去除,其他消息轉(zhuǎn)換為BAN 模型可以識別的理想化模型: 消息(1):Reader ?{ID}K 消息(4):Tag ?R1 協(xié)議的初始假設(shè)有以下這些: 假設(shè) 7:Reader|≡Tag|?{ID}K 假設(shè) 8:Reader|≡#{ID}K 假設(shè) 9:Reader|≡#(R1) 協(xié)議希望證明的目標(biāo)是: 目標(biāo)(1):Reader|≡ID; 首先證明目標(biāo)1)Reader|≡ID (g)由(e)和(f)中的結(jié)論,根據(jù)臨時值驗證規(guī)則 , 可 以 得 到 結(jié) 論 Reader|≡Tag|≡ 本文分析了一種基于非對稱密鑰和Hash 函數(shù)的RFID 雙向認(rèn)證協(xié)議,并且針對其進(jìn)行了協(xié)議的改進(jìn),修補(bǔ)了其中的漏洞。然后本文對改進(jìn)協(xié)議也進(jìn)行了性能分析和安全性驗證,相較于原協(xié)議,改進(jìn)協(xié)議抗攻擊能力更強(qiáng)。但本文并沒有在硬件上對改進(jìn)協(xié)議進(jìn)行實驗驗證,因此協(xié)議距離實際應(yīng)用還有一段距離,必然還需要進(jìn)一步的完善。4 改進(jìn)協(xié)議安全性能分析
5 改進(jìn)協(xié)議安全性驗證
6 結(jié)語