徐遠(yuǎn)澤, 張文科
(衛(wèi)士通信息產(chǎn)業(yè)股份有限公司,四川成都610041)
射頻識(shí)別技術(shù)(Radio Frequency Identification,RFID)是一種非接觸式的自動(dòng)識(shí)別技術(shù),它基于大規(guī)模集成電路與無(wú)線通信技術(shù),利用射頻信號(hào)或者空間耦合的傳輸特性來(lái)實(shí)現(xiàn)對(duì)物體的自動(dòng)識(shí)別。近年來(lái),隨著物聯(lián)網(wǎng)的快速發(fā)展,作為物聯(lián)網(wǎng)四大關(guān)鍵技術(shù)之一的RFID技術(shù)呈現(xiàn)出加速發(fā)展趨勢(shì)[1]。目前,RFID技術(shù)已被廣泛應(yīng)用于物流、供應(yīng)鏈、動(dòng)物和車(chē)輛識(shí)別、門(mén)禁系統(tǒng)、圖書(shū)管理、自動(dòng)收費(fèi)和生產(chǎn)制造等領(lǐng)域,特別是超高頻段(800-900 MHz)的RFID具有廣闊的應(yīng)用市場(chǎng)前景[2-3]。
RFID技術(shù)獲得快速發(fā)展的同時(shí),其安全性問(wèn)題日益突出,并逐漸受到人們的重視。在美國(guó)拉斯維加斯舉行的Black Hat 2004會(huì)議上,Lukas Grunwa-ld公開(kāi)展示了一個(gè)名為RF Dump的工具,它可以利用RFID系統(tǒng)的弱點(diǎn)發(fā)動(dòng)攻擊。任何一個(gè)人,只要在自己的筆記本電腦中插上一個(gè)讀寫(xiě)器,就可以使用RF Dump軟件獲得3英尺內(nèi)的被動(dòng)式RFID標(biāo)簽中的數(shù)據(jù)。美國(guó)的密碼學(xué)研究專家Adi Shamir表示,目前的RFID系統(tǒng)毫無(wú)安全可言,簡(jiǎn)直是暢通無(wú)阻。RFID標(biāo)簽因其成本受限、存儲(chǔ)空間有限和計(jì)算能力較弱等特點(diǎn),成為了RFID系統(tǒng)被攻擊的主要對(duì)象[4]。于是,IBM等公司研究人員想出了裁剪標(biāo)簽天線、標(biāo)簽外套電磁屏蔽罩等物理保護(hù)機(jī)制,然而這些方法均以犧牲標(biāo)簽?zāi)承┕δ軄?lái)實(shí)現(xiàn)安全保護(hù),存在使用不便等問(wèn)題[5],因此,基于密碼技術(shù)的安全保護(hù)機(jī)制得到國(guó)內(nèi)外學(xué)者的廣泛關(guān)注。
在2007年,德國(guó)Ruhr大學(xué)的A.Bogdanov提出了一種針對(duì)RFID等安全應(yīng)用環(huán)境的輕量級(jí)密碼算法—PRESNET算法,因其具有優(yōu)秀的算法安全性及硬件實(shí)現(xiàn)效率,成為輕量級(jí)密碼算法的典型代表,并已成為ISO/IEC 29192-2:2012輕量級(jí)密碼算法國(guó)際標(biāo)準(zhǔn)。在2011年,我國(guó)中科院吳文玲、張蕾等人提出了一種輕量級(jí)算法—LBlock算法。該算法考慮了實(shí)現(xiàn)代價(jià)、實(shí)現(xiàn)效率和算法安全性等多方面因素,是我國(guó)輕量級(jí)密碼領(lǐng)域研究的成果之一。以下主要針對(duì)上述兩種算法的FPGA實(shí)現(xiàn)展開(kāi)研究。
PRESENT算法[6]基于SP網(wǎng)絡(luò)結(jié)構(gòu),加解密過(guò)程需要32輪迭代運(yùn)算,其數(shù)據(jù)分組長(zhǎng)度為64比特,密鑰有80比特和128比特兩種長(zhǎng)度。于是,根據(jù)密鑰長(zhǎng)度的不同,PRESENT算法分為PRESENT-80和PRESENT-128兩種版本。以下主要研究PRESE-NT-128在RFID系統(tǒng)上的應(yīng)用。
圖1 PRESENT算法加密流程
PRESENT-128每輪加密主要由三種運(yùn)算組成:異或、S盒替換、P置換。異或運(yùn)算是每輪數(shù)據(jù)進(jìn)行加密的第一種運(yùn)算,主要是將當(dāng)前狀態(tài)數(shù)據(jù)與輪密鑰進(jìn)行異或處理。S盒替換是非線性運(yùn)算,首先將異或結(jié)果按4比特分組,劃分為16組,分別送入S盒進(jìn)行替換處理,其輸入輸出關(guān)系如表1,表中x代表十進(jìn)制輸入,S(x)代表十進(jìn)制輸出。P置換是將S盒處理的結(jié)果進(jìn)行比特位的重新排序,提高數(shù)據(jù)的擴(kuò)散速度,P置換的輸入輸出關(guān)系如表2所示,表中i代表輸入的比特位,P(i)代表輸出比特位,如輸入的第4比特位經(jīng)過(guò)P置換后變成輸出的第1比特位。
表1 PRESENT-128算法的S盒
表2 PRESENT-128算法的P置換
PRESENT-128每輪的密鑰更新過(guò)程如下:首先,密鑰存儲(chǔ)在密鑰寄存器K中,其按比特可表示為k127k126…k0。密鑰寄存器循環(huán)左移61位,然后,高8位數(shù)據(jù)經(jīng)過(guò)S盒替換,輪計(jì)數(shù)值與寄存器的62-66比特位進(jìn)行異或運(yùn)算,經(jīng)過(guò)上述變換得到新的密鑰,并將新密鑰的高64位作為輪密鑰輸出。上述過(guò)程可表示為以下表達(dá)式:
PRESENT-128的解密過(guò)程同加密過(guò)程相似,只是解密過(guò)程中使用的S盒和P置換是逆S盒和逆P置換,并且子密鑰的使用順序是反向的。
LBlock算法[7]基于Feistel架構(gòu),數(shù)據(jù)分組長(zhǎng)度為64比特,密鑰長(zhǎng)度為80比特,迭代輪數(shù)32輪。算法的過(guò)程如下:
首先,將64比特明文P分成左右兩個(gè)32比特X1和X0,即
最后,將輸出X32和X33拼接在一起作為64比特密文輸出
為加快推進(jìn)木圖工程建設(shè)項(xiàng)目審批制度改革,加強(qiáng)從事土木工程活動(dòng)的勘察設(shè)計(jì)企業(yè)和施工圖審查機(jī)構(gòu)的動(dòng)態(tài)監(jiān)管,提高勘察設(shè)計(jì)行業(yè)信息化管理水平,健全全過(guò)程電子監(jiān)管,推進(jìn)施工圖審查提速增效和企業(yè)誠(chéng)信管理,營(yíng)造誠(chéng)實(shí)守信的勘察設(shè)計(jì)市場(chǎng)環(huán)境??梢越?shù)字化施工圖審查系統(tǒng)平臺(tái)、勘察設(shè)計(jì)企業(yè)和施工圖審查機(jī)構(gòu)信用評(píng)價(jià)管理平臺(tái)。兩個(gè)平臺(tái)的同步運(yùn)用,進(jìn)一步完善了勘察設(shè)計(jì)行業(yè)的事中事后管理措施,全面提高審批效率,實(shí)現(xiàn)了事半功倍。
其中F函數(shù)包括兩種運(yùn)算:S盒替換和P置換。S盒采用984個(gè)不同的4比特輸入4比特輸出S盒,P置換是將8個(gè)S盒的輸出進(jìn)行順序交換變化。S盒的輸入輸出關(guān)系如表3,其中x代表十進(jìn)制輸入,S(x)代表十進(jìn)制輸出。P置換的過(guò)程如下:
假設(shè)P置換的32位輸入為X,按4比特分組可表示為
經(jīng)過(guò)P置換后輸出為
表3 LBlock算法的S盒
LBlock每輪的密鑰更新過(guò)程如下:首先,密鑰存儲(chǔ)在密鑰寄存器K中,其按比特可表示為k79k78…k0。密鑰寄存器循環(huán)左移29位,然后,高8位數(shù)據(jù)經(jīng)過(guò)S8盒和S9盒替換,輪計(jì)數(shù)值與寄存器的46-50比特位進(jìn)行異或運(yùn)算,經(jīng)過(guò)上述變換得到新的密鑰,并將新密鑰的高32位作為輪密鑰輸出。上述過(guò)程可表示為以下表達(dá)式:
LBlock的解密過(guò)程同加密過(guò)程相似,只是解密過(guò)程中先進(jìn)行S盒和P置換,然后再進(jìn)行循環(huán)移位,循環(huán)移位的方向反向,并且子密鑰的使用順序也是反向的。
在2013年,我國(guó)正式發(fā)布了超高頻段RFID協(xié)議——GB/T29768-2013《信息技術(shù) 射頻識(shí)別800/900 MHz空中接口協(xié)議》,并于2014年正式進(jìn)入實(shí)施階段。協(xié)議主要針對(duì)840MHz-845MHz、920MHz-925MHz頻段范圍內(nèi)的RFID應(yīng)用,并對(duì) RFID安全性進(jìn)行了充分考慮,涵蓋了安全鑒別和安全通信內(nèi)容,對(duì)規(guī)范我國(guó)超高頻段RFID應(yīng)用具有重要的指導(dǎo)作用。
將算法應(yīng)用到協(xié)議中,設(shè)計(jì)了圖2所示的對(duì)稱加密雙向鑒別協(xié)議[6]。
圖2 對(duì)稱加密雙向鑒別協(xié)議
基于PRESENT-128或者LBlock的對(duì)稱加密雙向鑒別協(xié)議過(guò)程如下:
首先,讀寫(xiě)器發(fā)送安全參數(shù)獲取命令?
第二步,標(biāo)簽對(duì)安全參數(shù)獲取命令做出響應(yīng),將標(biāo)簽標(biāo)識(shí)符TID以及安全模式、安全功能等安全參數(shù)發(fā)送給讀寫(xiě)器?
第三步,讀寫(xiě)器用根密鑰RK和標(biāo)簽的TID生成鑒別密鑰AK,發(fā)送請(qǐng)求鑒別命令Req_SAuth給標(biāo)簽?
第四步,標(biāo)簽收到請(qǐng)求鑒別命令后,生成隨機(jī)數(shù)RNt發(fā)送給讀寫(xiě)器?
第五步,讀寫(xiě)器生成隨機(jī)數(shù)RNr和會(huì)話密鑰SK,使用PRESENT-128算法或者LBlock算法對(duì)鑒別密鑰AK、待加密數(shù)據(jù)RNr||RNt||SK 進(jìn)行加密,并得到加密結(jié)果 EAK(RNr||RNt||SK),將加密結(jié)果通過(guò)雙向鑒別命令 Mul_SAuth(RNt||EAK(RNr||RNt||SK))發(fā)送給標(biāo)簽?
第六步,標(biāo)簽收到鑒別命令后,首先判斷接收到的RNt是否與自己在第四步中自己產(chǎn)生的RNt相等,若相等,標(biāo)簽通過(guò)PRESENT-128算法或者LBlock算法,載入密鑰AK以及加密數(shù)據(jù) EAK(RNr||RNt||SK)),解密得到 RNr′||RNt′||SK。 接著比較RNt′與RNt,若相等,則標(biāo)簽認(rèn)為讀寫(xiě)器通過(guò)鑒別,將RNr′發(fā)送給讀寫(xiě)器,跳轉(zhuǎn)到開(kāi)放狀態(tài),并將SK作會(huì)話密鑰為安全通信階段使用?如果不相等,則標(biāo)簽認(rèn)為讀寫(xiě)器未通過(guò)鑒別,發(fā)送響應(yīng)數(shù)據(jù)包,跳轉(zhuǎn)到仲裁狀態(tài)?
第七步,讀寫(xiě)器接收到RNr”后,比較RNr”和RNr是否相等,若相等,則認(rèn)為標(biāo)簽通過(guò)鑒別,且將SK作會(huì)話密鑰為安全通信階段使用?如果不相等,則讀寫(xiě)器認(rèn)為標(biāo)簽未通過(guò)鑒別。
圖3 PRESENT-128接口圖
設(shè)計(jì)的算法模塊接口如圖3所示,PRESENT-128共有6個(gè)端口。 其中 CLK、Ready、Data_i、Key_i為 6 個(gè)輸入端口,Data_o、Done為2個(gè)輸出端口。6個(gè)輸入端口中,CLK為時(shí)鐘信號(hào)?Data_i和Key_i分別為64比特的明文輸入和128比特的初始密鑰輸入?Ready為明文和密鑰輸入信號(hào),當(dāng)Ready=1后的第一個(gè)時(shí)鐘上升沿,明文和初始密鑰開(kāi)始從端口Data_i和Key_i輸入。2個(gè)輸出信號(hào)中,Data_o為加密后的64比特?cái)?shù)據(jù)輸出?Done為輸出有效信號(hào),當(dāng)Done為1時(shí),代表Data_o輸出的數(shù)據(jù)為最終加密的有效數(shù)據(jù)。
如圖4所示,PRESENT-128加密硬件實(shí)現(xiàn)由兩個(gè)并行處理的部分組成:數(shù)據(jù)加密處理和密鑰擴(kuò)展處理。電路開(kāi)始運(yùn)行時(shí),首先將待加密數(shù)據(jù)和初始密鑰分別載入Data和Key兩個(gè)個(gè)寄存器。Data是64位的寄存器,用于存儲(chǔ)加密數(shù)據(jù)。Key為128位的寄存器,用于存儲(chǔ)密鑰。數(shù)據(jù)加載完成后,開(kāi)始進(jìn)行數(shù)據(jù)加密處理,同時(shí)進(jìn)行密鑰的擴(kuò)展更新,每一輪的加密和密鑰擴(kuò)展均在一個(gè)時(shí)鐘周期內(nèi)完成。在每一輪加密過(guò)程中,Data與相應(yīng)的加密輪密鑰進(jìn)行異或,然后將異或的結(jié)果經(jīng)過(guò)16個(gè)4比特輸入4比特輸出的S盒進(jìn)行變換,變換后的數(shù)據(jù)又經(jīng)過(guò)P_Layer進(jìn)行混淆處理,處理后的結(jié)果更新到Data中。于此同時(shí),密鑰進(jìn)行更新處理,首先進(jìn)行61比特循環(huán)左移,然后將相應(yīng)的比特位進(jìn)行S盒置換以及異或運(yùn)算處理,生成新的密鑰數(shù)據(jù)以更新Key寄存器,并將高32比特?cái)?shù)據(jù)作為輪密鑰送入數(shù)據(jù)加密處理。按上述步驟進(jìn)行32輪加密,最后輸出加密結(jié)果。
圖4 PRESENT-128加密硬件結(jié)構(gòu)
圖5 LBlock接口圖
LBlock算法的硬件接口同PRESENT-128算法相似,同樣有6個(gè)端口。 其中 CLK、Ready、Data_i、Key_i為 6個(gè)輸入端口,Data_o、Done為2個(gè)輸出端口。6個(gè)輸入端口中,CLK為時(shí)鐘信號(hào)?Data_i和Key_i分別為64比特的明文輸入和80比特的初始密鑰輸入?Ready為明文和密鑰輸入信號(hào),當(dāng)Ready=1后的第一個(gè)時(shí)鐘上升沿,明文和初始密鑰開(kāi)始從端口Data_i和Key_i輸入。2個(gè)輸出信號(hào)中,Data_o為加密后的64比特?cái)?shù)據(jù)輸出?Done為輸出有效信號(hào),當(dāng)Done為1時(shí),代表Data_o輸出的數(shù)據(jù)為最終加密的有效數(shù)據(jù)。
圖6 LBlock加密硬件結(jié)構(gòu)
如圖6所示,LBlock加密的硬件實(shí)現(xiàn)也可以分為兩個(gè)并行處理的部分:數(shù)據(jù)加密處理和密鑰擴(kuò)展處理。電路開(kāi)始運(yùn)行時(shí),首先將待加密數(shù)據(jù)和初始密鑰分別載入 Data_L、Data_R和 Key三個(gè)寄存器。 Data_L和 Data_R均是 32位的寄存器,用于存儲(chǔ)加密數(shù)據(jù)。Key為128位的寄存器,用于存儲(chǔ)密鑰。數(shù)據(jù)加載完成后,開(kāi)始進(jìn)行數(shù)據(jù)加密處理,同時(shí)進(jìn)行密鑰的擴(kuò)展更新,每一輪的加密和密鑰擴(kuò)展均在一個(gè)時(shí)鐘周期內(nèi)完成。在每一輪加密過(guò)程中,Data_R與相應(yīng)的加密輪密鑰進(jìn)行異或,然后將異或的結(jié)果經(jīng)過(guò)8個(gè)4比特輸入4比特輸出的S盒進(jìn)行置換,置換后的數(shù)據(jù)又經(jīng)過(guò)P_Layer進(jìn)行混淆處理,處理后的結(jié)果與Data_L異或生成新的Data_R,同步將更新前的Data_R數(shù)據(jù)存儲(chǔ)到Data_L中。于此同時(shí),密鑰進(jìn)行更新處理,首先進(jìn)行29比特循環(huán)左移,然后將相應(yīng)的比特位進(jìn)行S盒置換以及異或運(yùn)算處理,生成新的密鑰數(shù)據(jù)以更新Key寄存器,并將最高32比特密鑰數(shù)據(jù)作為輪密鑰送入數(shù)據(jù)加密處理。按上述步驟進(jìn)行31輪加密,第32輪取消Data_L和Data_R的交換作為輸出結(jié)果。
利用Xilinx ISE9.2i軟件,選擇xilinx公司型號(hào)為xc5vlx330的FPGA作為平臺(tái)庫(kù),對(duì)LBlock算法、PRESENT-128的Verilog HDL代碼進(jìn)行綜合分析,評(píng)估了算法在FPGA上實(shí)現(xiàn)情況。實(shí)現(xiàn)的結(jié)果見(jiàn)表4,其中還列出了PRESENT-80的實(shí)現(xiàn)結(jié)果。
根據(jù)表4可以看出,LBlock的FPGA實(shí)現(xiàn)占用了資源75 Sclices,比PRESENT-80的資源占用量 79Sclices和 PRESENT-128的資源占用量90Sclices均小。然而,LBlock的最大工作頻率為521MHz,比PRESNT-80和 PRESNT-128的最大工作頻率較低,導(dǎo)致其吞吐量也比PRESENT-80和PRESENT-128稍低。
表4 實(shí)現(xiàn)結(jié)果比較
PRESENT-128因其密鑰長(zhǎng)度最長(zhǎng),導(dǎo)致其電路用于存儲(chǔ)密鑰的FFs數(shù)比LBlock和 PRESENT-80的都多,同時(shí) PRESENT-128電路LUTs數(shù)也占用較多,導(dǎo)致其資源占用Sclices數(shù)最多。將其與FPGA的總資源做一個(gè)比較,得到表5所示結(jié)果。從表5可知,PRESENT-128各項(xiàng)資源占用量均在0.2%以下,顯然,LBlock和PRESENT-80的資源占用量也是低于0.2%的,因此,再次證明PRESENT算法和LBlock算法是適合于RFID等輕量化的安全應(yīng)用環(huán)境,同時(shí)也是適合于FPGA硬件實(shí)現(xiàn)的。
表5 PRESENT-128占用FPGA資源情況
RFID技術(shù)快速發(fā)展的同時(shí),其安全性問(wèn)題日益突出,基于輕量級(jí)密碼算法的RFID安全方案得到廣泛研究。PRESENT算法和LBlock算法因其安全性高、實(shí)現(xiàn)效率高等優(yōu)點(diǎn)得到廣泛研究。通過(guò)對(duì)這兩種算法的研究,實(shí)現(xiàn)了算法在協(xié)議上的應(yīng)用,同時(shí)研究了這兩種算法在FPGA上的實(shí)現(xiàn)結(jié)構(gòu)和實(shí)現(xiàn)性能。通過(guò)在統(tǒng)一FPGA平臺(tái)下對(duì)兩種算法進(jìn)行了評(píng)估分析,從結(jié)果中可以看出,這兩種輕量級(jí)算法是適合于FPGA硬件實(shí)現(xiàn)的,特別是可以作為RFID系統(tǒng)中標(biāo)簽和讀寫(xiě)器的安全組成部分。
[1] 李如年.基于RFID技術(shù)的物聯(lián)網(wǎng)研究[J].中國(guó)電子科學(xué)研究院學(xué)報(bào), 2009,4(06):594-597.
[2] WEINSTEIN Ron.RFID:A Technical Overview and Its Application to the Enterprise[J].IT professional, 2005,7(3):27-33
[3] OREN Yossef,SHAMIR Adi.Remote Password Extraction from RFID Tags[J].IEEE Transactions on Computers archive,2007,56(9):1292-1296.
[4] 張宏壯,王建民.RFID中的安全隱私問(wèn)題及策略分析[J].微計(jì)算機(jī)信息,2008,24(6-3):47-49.
[5] 彭朋,韓偉力,趙一鳴等.基于RFID的物聯(lián)網(wǎng)安全需求研究[J].計(jì)算機(jī)安全,2011(01):75-79.
[6] A.BOGDANOV, L.R.KNUDSEN, G.LEANDER, and et al.PRESENT:An Ultra-Lightweight Block Cipher[C]//The 9th InternationalWorkshop on Cryptographic Hardware and Embedded Systems.Berlin:Springer Berlin Heidelberg, 2007:450-466.
[7] WU Wenling,ZHANG Lei.LBlock:A Lightweight Block Cipher[C]//The 9th International Conference on Applied Cryptography and Network Security.Berlin:Springer Berlin Heidelberg,2011:327-344.
[8] 全國(guó)信息技術(shù)標(biāo)準(zhǔn)化技術(shù)委員會(huì).GB/T 29768-2013,信息技術(shù) 射頻識(shí)別800-900MHz空中接口協(xié)議[S].北京:中國(guó)標(biāo)準(zhǔn)出版社,2014:45-50.