◆王森
(國(guó)家信息中心信息與網(wǎng)絡(luò)安全部 北京 100045)
射頻標(biāo)簽(RFID)在物聯(lián)網(wǎng)、智能制造、車聯(lián)網(wǎng)、穿戴設(shè)備中廣泛應(yīng)用,其安全性也被越來(lái)越重視[1]。射頻標(biāo)簽通過(guò)接收讀寫器的電磁場(chǎng)調(diào)制信號(hào)并返回信號(hào),實(shí)現(xiàn)信息交互,用于人員身份識(shí)別、物品物體識(shí)別等場(chǎng)景。由于射頻標(biāo)簽不是固定設(shè)備,因此存在被惡意攻擊人員獲取的風(fēng)險(xiǎn),因此面臨信息克隆、讀寫器讀取數(shù)據(jù)通信信息被截獲、逆向工程破解射頻標(biāo)簽存儲(chǔ)數(shù)據(jù)等安全威脅[2]。
射頻標(biāo)簽面臨偽造、竊聽(tīng)、非法訪問(wèn)、數(shù)據(jù)篡改等惡意攻擊。偽造是指相對(duì)于合法的讀寫器和射頻標(biāo)簽,存在仿冒的射頻標(biāo)簽欺騙讀寫器,或仿冒的讀寫器欺騙射頻標(biāo)簽。竊聽(tīng)是指惡意的用戶竊聽(tīng)射頻標(biāo)簽和讀寫器之間的數(shù)據(jù)通信,用以獲取數(shù)據(jù)或構(gòu)造重放攻擊。非法訪問(wèn)是指非當(dāng)前應(yīng)用的讀寫器,訪問(wèn)了當(dāng)前應(yīng)用的數(shù)據(jù)。數(shù)據(jù)篡改是指讀寫器對(duì)無(wú)權(quán)限的射頻標(biāo)簽數(shù)據(jù)進(jìn)行了修改操作。針對(duì)以上安全問(wèn)題,在射頻標(biāo)簽應(yīng)用中應(yīng)采用身份鑒別、訪問(wèn)控制、數(shù)據(jù)機(jī)密性和完整性保護(hù)等。
本文深入研究了基于密碼技術(shù)實(shí)現(xiàn)射頻標(biāo)簽應(yīng)用的保護(hù),包括基于對(duì)稱鑰分散算法的身份鑒別、基于分組對(duì)稱加密的數(shù)據(jù)加密保護(hù)、基于摘要算法的完整性保護(hù)等。在選擇密碼算法時(shí),使用了我國(guó)自主知識(shí)產(chǎn)權(quán)的商用密碼中SM4、SM1、SM7 等對(duì)稱加密算法,以及SM3哈希算法。本文技術(shù)方案符合國(guó)家標(biāo)準(zhǔn)中有關(guān)密碼算法和密鑰管理的要求[3-4]。
在使用密碼進(jìn)行,包括密碼算法、密碼協(xié)議和密鑰管理[5][6]。選擇密碼算法方案方面,可選對(duì)稱算法和非對(duì)稱算法。對(duì)稱加密算法需要的計(jì)算量較小,數(shù)據(jù)加密基于字節(jié)或比特的置換、移位等混淆變換,而非對(duì)稱密鑰算法的運(yùn)算是在較大數(shù)域中進(jìn)行對(duì)數(shù)求解等操作[7],對(duì)比來(lái)看對(duì)稱密鑰算法那更容易在硬件中實(shí)現(xiàn),因此更適合射頻標(biāo)簽。在身份鑒別過(guò)程中,對(duì)稱密碼算法需給鑒別者和被鑒別者分發(fā)相同的對(duì)稱密鑰,基于密鑰分散的方式可以實(shí)現(xiàn)高效的對(duì)稱密鑰分發(fā)。
在射頻標(biāo)簽系統(tǒng)中,讀寫器端只需要保留根密鑰,不需要保存分散結(jié)果密鑰。鑒別過(guò)程中通過(guò)密鑰分散算法,讀寫器基于射頻標(biāo)簽UID,使用相應(yīng)的應(yīng)用根密鑰進(jìn)行加密,計(jì)算結(jié)果即是與射頻標(biāo)簽相同的密鑰。
基于對(duì)稱加密算法,射頻標(biāo)簽實(shí)現(xiàn)了身份鑒別、訪問(wèn)控制鑒別等安全管理,以及數(shù)據(jù)存儲(chǔ)機(jī)密性保護(hù)和通信機(jī)密性保護(hù)。
射頻標(biāo)簽身份鑒別可以采用唯一標(biāo)識(shí)符和密鑰分散兩種方式,唯一標(biāo)識(shí)符基于摘要算法,密鑰分散基于對(duì)稱密碼算法。
唯一標(biāo)識(shí)符(UID,Unique Indentifier)是射頻標(biāo)簽在生產(chǎn)時(shí),制造廠商寫入到射頻標(biāo)簽相應(yīng)存儲(chǔ)空間,包含廠商信息、序列號(hào)等信息,并由廠商按照規(guī)則確保電子標(biāo)簽的唯一性。只有生產(chǎn)廠商具有標(biāo)識(shí)符數(shù)據(jù)區(qū)寫入權(quán)限,射頻標(biāo)簽出廠后唯一標(biāo)識(shí)符不能修改,只能讀取,可以看做生產(chǎn)廠商將UID 固化到射頻標(biāo)簽中。
基于UID 特性,發(fā)放系統(tǒng)寫入用于證明使用者身份的數(shù)字簽名,或使用者身份鑒別的唯一標(biāo)識(shí)符相關(guān)信息。以用戶Alice 為例,發(fā)卡時(shí)將用戶名Alice 和UID 進(jìn)行綁定,通過(guò)國(guó)密雜湊算法SM3 計(jì)算文本消息摘要:
發(fā)卡系統(tǒng)使用國(guó)密簽名算法SM2[8]計(jì)算H1的數(shù)字簽名e1,并將e1寫入射頻標(biāo)簽。在身份鑒別時(shí),為了驗(yàn)證Alice 和UID 的合法性,電子標(biāo)簽需要向讀寫器發(fā)送電子簽名e1,讀寫器根據(jù)Alice 和UID 計(jì)算哈希值H1`,并用簽名公鑰對(duì)數(shù)字簽名e1進(jìn)行解密獲得H1``。
對(duì)比H1``和H1`,如果結(jié)果為相等,則證明射頻識(shí)別卡片確實(shí)是經(jīng)發(fā)卡系統(tǒng)頒發(fā)給Alice 的。相反,匿名用戶沒(méi)有經(jīng)過(guò)讀寫器進(jìn)行簽發(fā),驗(yàn)證簽名的過(guò)程會(huì)失敗。唯一標(biāo)識(shí)符進(jìn)行身份鑒別過(guò)程如圖1所示。
圖1 基于唯一標(biāo)識(shí)符的射頻標(biāo)簽識(shí)別
密鑰分散實(shí)現(xiàn)了對(duì)稱密鑰的有效分發(fā),采用對(duì)稱加密算法實(shí)現(xiàn)身份鑒別。對(duì)稱加密算能夠在計(jì)算、存儲(chǔ)資源有限條件下運(yùn)行,相對(duì)于公鑰算法,對(duì)稱加密算法更適用于射頻標(biāo)簽系統(tǒng)。
在初始化階段,由密鑰管理中心為應(yīng)用APP 生成對(duì)應(yīng)的應(yīng)用根密鑰APPKey,并將APPKey 采用“密鑰注入”的方式,存儲(chǔ)到讀寫器安全密碼模塊中。安全密碼模塊保證APPKey 不會(huì)被明文導(dǎo)出,在密碼模塊內(nèi)部參與加解密運(yùn)算。
另一方面采用SM4 對(duì)稱加密算法計(jì)算分散密鑰idKey,其中加密密鑰為APPKey,明文為Alice|UID。
標(biāo)簽發(fā)行系統(tǒng)將分散密鑰idKey 通過(guò)“密鑰注入”方式安全寫入射頻標(biāo)簽中,密鑰分發(fā)過(guò)程如圖2 所示。
圖2 基于密鑰分散的身份密鑰分發(fā)示意圖
由于每個(gè)射頻標(biāo)簽具有唯一的UID,為此每個(gè)射頻標(biāo)簽的idKey不同,并且只有APPKey 才能制作idKey,因此其他射頻標(biāo)簽或攻擊者無(wú)法偽造idKey。因此,基于以上條件,保證idKey 是可用于身份鑒別的秘密信息。
讀寫器對(duì)射頻標(biāo)簽的身份鑒別可采用挑戰(zhàn)響應(yīng)式。由讀寫器向射頻標(biāo)簽發(fā)起身份鑒別過(guò)程,首先向射頻標(biāo)簽發(fā)送一個(gè)用于挑戰(zhàn)的隨機(jī)數(shù)rand,射頻標(biāo)簽用密鑰idKey 對(duì)rand 進(jìn)行加密,生成CRand。讀寫器用密鑰根據(jù)射頻標(biāo)簽相關(guān)數(shù)據(jù),按照分散密鑰生成算法計(jì)算idKey,解密CRand 得到rand`,比較rand 和rand`,若相等則證明射頻標(biāo)簽的身份。
在身份鑒別過(guò)程,惡意的攻擊者針對(duì)唯一標(biāo)識(shí)符可以進(jìn)行截獲,并進(jìn)行重放攻擊,實(shí)現(xiàn)惡意仿冒。分散密鑰方式在身份鑒別的過(guò)程中使用隨機(jī)數(shù)挑戰(zhàn),提高了抗重放攻擊的能力。因此,基于唯一標(biāo)識(shí)符身份的身份鑒別只適用于安全級(jí)別較低的場(chǎng)合,例如普通門禁。在高安全級(jí)別應(yīng)用中,應(yīng)支持讀寫器對(duì)電子標(biāo)簽的挑戰(zhàn)響應(yīng)鑒別[9]。
在射頻標(biāo)簽應(yīng)用中,應(yīng)對(duì)密鑰區(qū)和數(shù)據(jù)區(qū)的讀寫進(jìn)行訪問(wèn)控制,可以采用密鑰鑒別的方式實(shí)現(xiàn)。訪問(wèn)控制是一種安全措施,原理是基于安全策略,實(shí)現(xiàn)對(duì)主體訪問(wèn)客體操作合法性的判斷,并對(duì)非法操作予以阻攔。
以存儲(chǔ)空間為512 字節(jié)為例,被劃分為32 個(gè)數(shù)據(jù)塊,每塊16個(gè)字節(jié),如圖3 所示。存儲(chǔ)塊用2 位地址編碼。其中0x00 為制造商地址塊,0x01~0x03 為權(quán)限控制區(qū),0x02~0x07 為密鑰區(qū),0x08~0x1f為數(shù)據(jù)區(qū)。由于SM4 采用128 位分組,密鑰和密文都是16 字節(jié),因此密鑰區(qū)和數(shù)據(jù)存儲(chǔ)區(qū)的讀寫粒度為1 個(gè)區(qū)塊。
圖3 射頻芯片存儲(chǔ)空間及權(quán)限控制區(qū)設(shè)置示例圖
權(quán)限控制區(qū)的長(zhǎng)度為48 字節(jié)(3*16 字節(jié)),每2 個(gè)字節(jié)標(biāo)識(shí)一個(gè)區(qū)塊的操作權(quán)限,共有24 個(gè)區(qū)塊,對(duì)應(yīng)存儲(chǔ)塊0~23 的操作權(quán)限。權(quán)限控制區(qū)的2 字節(jié),代表密鑰選擇,b4、b3 決定對(duì)應(yīng)數(shù)據(jù)塊讀密鑰,b2、b1 決定對(duì)應(yīng)數(shù)據(jù)塊寫密鑰,b0 是密鑰區(qū)選擇位。
圖3中,以權(quán)限控制區(qū)第一個(gè)字節(jié)為例,代表區(qū)塊0的讀寫權(quán)限,讀寫鑒權(quán)密鑰為KEY2。
key0 為主密鑰,在電子標(biāo)簽發(fā)行時(shí)根據(jù)APPKey 分散生成的,即idKey 為key0。存儲(chǔ)區(qū)域操作權(quán)限key 的注入必須經(jīng)過(guò)key0 的鑒別過(guò)程。
通過(guò)讀寫key 的鑒別過(guò)程,執(zhí)行讀寫操作,實(shí)現(xiàn)基于對(duì)稱密鑰的訪問(wèn)控制。
射頻標(biāo)簽數(shù)據(jù)區(qū)域保存應(yīng)用有關(guān)信息,例如飯卡存儲(chǔ)金額、電子門禁卡存儲(chǔ)用戶信息、電子門票存儲(chǔ)票據(jù)信息等??紤]射頻標(biāo)簽的計(jì)算能力和存儲(chǔ)空間限制,為滿足安全性,數(shù)據(jù)應(yīng)使用加密技術(shù)進(jìn)行存儲(chǔ)。加密算法可以選擇分組加密算法SM4,相應(yīng)的密鑰由射頻標(biāo)簽產(chǎn)生生成隨機(jī)數(shù)。隨機(jī)數(shù)的生產(chǎn)應(yīng)符合相關(guān)國(guó)家密碼標(biāo)準(zhǔn),保證隨機(jī)數(shù)的可靠性。
射頻標(biāo)簽將生產(chǎn)的對(duì)稱加密密鑰必須存儲(chǔ)在密鑰存儲(chǔ)區(qū),按照密鑰管理要求不能以明文方式讀取。
存儲(chǔ)數(shù)據(jù)時(shí),射頻標(biāo)簽調(diào)用加密密鑰對(duì)數(shù)據(jù)進(jìn)行加密。當(dāng)與讀寫器進(jìn)行數(shù)據(jù)交互時(shí),電子標(biāo)簽讀取密文,解密成明文后發(fā)送給讀寫器。
為防止惡意攻擊者采用篡改密文方式進(jìn)行攻擊,數(shù)據(jù)應(yīng)采用計(jì)算摘要的方式進(jìn)行完整性保護(hù)。存儲(chǔ)數(shù)據(jù)時(shí)計(jì)算明文的摘要hash,應(yīng)聯(lián)接明文和摘要,共同加密后保存。讀取數(shù)據(jù)時(shí),解密數(shù)據(jù),首先驗(yàn)證計(jì)算結(jié)果前半部分明文hash 和后半部分是否相等,當(dāng)相等時(shí)證明數(shù)據(jù)沒(méi)有被篡改。
此外,通信時(shí)應(yīng)采用加密和完整性技術(shù)進(jìn)行防護(hù)。通信加密采用密鑰交換協(xié)議,以及分散的通信密鑰。在標(biāo)簽發(fā)行時(shí),使用通信應(yīng)用根和標(biāo)簽UID 分散生成通信密鑰,基于挑戰(zhàn)響應(yīng)算法進(jìn)行身份認(rèn)證,挑戰(zhàn)過(guò)程中的隨機(jī)數(shù)參與生產(chǎn)通信加密密鑰。為保證通信數(shù)據(jù)不可篡改,通信協(xié)議應(yīng)采用哈希算法進(jìn)行完整性保護(hù)。
在整個(gè)射頻標(biāo)簽系統(tǒng)中,密鑰通過(guò)分層模式進(jìn)行管理,最頂層密鑰為主根密鑰,通過(guò)主根密鑰生成身份鑒別應(yīng)用根、訪問(wèn)控制應(yīng)用根等密鑰。密鑰的安全存儲(chǔ)及全生命周期管理應(yīng)符合密碼應(yīng)用安全性相關(guān)要求。密鑰分發(fā)系統(tǒng)、讀寫器、和射頻標(biāo)簽中,密鑰通過(guò)安全密碼模塊進(jìn)行管理。主根密鑰采用Shamir 秘密分割門限算法[10]進(jìn)行保護(hù)。
在該算法中,為了構(gòu)建(k,n)門限方案,即密鑰成為n 個(gè)分量,其中k 個(gè)分量可以還原密鑰。要保護(hù)的密鑰S,為了構(gòu)造多項(xiàng)式,隨機(jī)選擇k-1個(gè)正整數(shù)a1,a2…ak-1,令a0=S,由此構(gòu)建多項(xiàng)式,
設(shè)i=1…n,分別計(jì)算f(i),并分配給n個(gè)持有人(i,f(i)),此時(shí)多項(xiàng)式中a0,a1,a2…ak-1為未知參數(shù),因此無(wú)法通過(guò)k-1計(jì)算得到a0。
當(dāng)還原密鑰時(shí),k個(gè)密鑰分量的保存者提供(i,f(i)),并代入到多項(xiàng)式中,此時(shí)可以構(gòu)建a0,a1,a2…ak-1為變量的k個(gè)k元方程組。通過(guò)解方程租的方式可以得到a0,a1,a2…ak-1。其中a0即為根密鑰S。
通過(guò)門限分割方式,實(shí)現(xiàn)了根密鑰有效防護(hù)。
射頻標(biāo)簽在電子門禁、電子憑證等方面廣泛應(yīng)用。在很多場(chǎng)合,采用電子門禁進(jìn)行重要部門部位的管理是安全防護(hù)的重要措施。與業(yè)務(wù)應(yīng)用系統(tǒng)的安全防護(hù)不同,射頻標(biāo)簽應(yīng)用通常不基于公鑰算法和PKI 體系[11],同時(shí)為了有效進(jìn)行身份鑒別,通?;谖ㄒ粯?biāo)識(shí)符分散密鑰和對(duì)稱密碼鑒別的方式。該方案解決了對(duì)稱密鑰管理中密鑰分發(fā)的難題,讀寫器不需要保存每個(gè)射頻標(biāo)簽的密鑰,只需要保存相應(yīng)根密鑰。身份鑒別時(shí),基于用戶的標(biāo)識(shí)進(jìn)行加密計(jì)算,加密的結(jié)果作為標(biāo)簽身份密鑰。由于根密鑰是秘密的,即使生成算法公開(kāi),用戶唯一標(biāo)識(shí)也公開(kāi),生成的用戶分散密鑰也是秘密的。除了對(duì)稱加密技術(shù)產(chǎn)生身份標(biāo)識(shí)的密鑰,公鑰算法也可以用于生成身份標(biāo)識(shí)密鑰,密鑰算法SM9就具有這種特性[12],未來(lái)將會(huì)出現(xiàn)使用SM9 算法的射頻標(biāo)簽,將會(huì)在車聯(lián)網(wǎng)、穿戴設(shè)備、工業(yè)互聯(lián)網(wǎng)、智能制造等應(yīng)用中發(fā)揮重大作用。