射頻識(shí)別技術(shù)漫談(12)——三次相互認(rèn)證并生成臨時(shí)的通訊密鑰在通訊技術(shù)中的應(yīng)用非常普遍,Mifare Desfire也使用了這種成熟的認(rèn)證加密方法。Desfire在卡片數(shù)據(jù)傳輸前使用DES或3DES進(jìn)行3次握手認(rèn)證,認(rèn)證成功一方面表明卡片和讀寫(xiě)器雙方是可以相互信任的,同時(shí)為雙方之后的數(shù)據(jù)傳送提供了一組臨時(shí)使用的段密碼進(jìn)行加密保護(hù)。
DES/3DES的基本運(yùn)算包括加密和解密,Desfir卡片規(guī)定,當(dāng)讀寫(xiě)器(PCD)與卡片(PICC)進(jìn)行DES/3DES運(yùn)算時(shí),卡片總是進(jìn)行加密運(yùn)算,與之對(duì)應(yīng),讀寫(xiě)器總是進(jìn)行解密運(yùn)算。DES密鑰有16個(gè)字節(jié),如果前8個(gè)字節(jié)與后8個(gè)字節(jié)相同,則進(jìn)行DES運(yùn)算,反之如果前8個(gè)字節(jié)和后8個(gè)字節(jié)不同,則進(jìn)行3DES運(yùn)算。如下表所示:
DES/3DES運(yùn)算每次操作8字節(jié),如果數(shù)據(jù)不足8字節(jié),必須填充為8字節(jié),填充的數(shù)據(jù)通常是00,如果正好要進(jìn)行DES運(yùn)算的數(shù)據(jù)是“00 00 00”(比如“讀取所有數(shù)據(jù)”命令),則填充一個(gè)0x80,后面再填充00。
所有的DES/3DES操作使用密碼塊鏈接模式(CBC),即上一次DES運(yùn)算的結(jié)果作為下一次運(yùn)算的初始向量。發(fā)送數(shù)據(jù)使用發(fā)送CBC模式,接收數(shù)據(jù)使用接收CBC模式。第一次運(yùn)算的初始向量規(guī)定為8字節(jié)的00.
以下描述3次握手認(rèn)證和段密碼產(chǎn)生的過(guò)程及實(shí)例,假設(shè)卡片密碼為16個(gè)00:
第一步:讀寫(xiě)器作為發(fā)起認(rèn)證的主導(dǎo)方,向卡片發(fā)送認(rèn)證(Authenticate)命令,并攜帶一個(gè)表示密碼序號(hào)的參數(shù)(卡片上每種應(yīng)用可以最多有14組不同的密碼,其序號(hào)為0-D)。如果選定的應(yīng)用標(biāo)識(shí)符AID為0,那么認(rèn)證將指向卡片的主密碼(卡片密鑰),在此情況下,密碼序號(hào)必須為0。如果AID不為0,則認(rèn)證的是某一應(yīng)用的密碼。卡片進(jìn)入磁場(chǎng)上電復(fù)位后將默認(rèn)選中AID為0。也就是說(shuō)卡片復(fù)位的首次密碼認(rèn)證總是指向卡片主密碼。如果卡片上不存在指定的密碼組號(hào),卡片將返回一個(gè)錯(cuò)誤碼。
第二步:卡片用讀寫(xiě)器指定的密碼加密一組8字節(jié)的隨機(jī)數(shù)RndB,例如RndB=98 E4 EE 2E 8B 4B F7 B1,加密方法使用DES/3DES,其結(jié)果用ek(RndB)表示,此處ek(RndB)=61 58 F4 51 8A 25 9B 00,并把ek(RndB)返回給讀寫(xiě)器。
第三步:讀寫(xiě)器用待認(rèn)證的密碼16個(gè)00,對(duì)收到的ek(RndB)進(jìn)行DES/3DES解密從而得到RndB=98 E4 EE 2E 8B 4B F7 B1。接下來(lái)讀寫(xiě)器對(duì)RndB進(jìn)行8位閉合左循環(huán),從而將第一個(gè)字節(jié)移到了最后一個(gè)字節(jié)的位置,結(jié)果記為RndB’,RndB’=E4 EE 2E 8B 4B F7 B1 98。然后讀寫(xiě)器自己產(chǎn)生一個(gè)8字節(jié)的隨機(jī)數(shù)RndA,例如RndA=00 11 22 33 44 55 66 77,并與RndB’連接起來(lái)組成RndA+RndB’=00 11 22 33 44 55 66 77 E4 EE 2E 8B 4B F7 B1 98共16字節(jié),使用CBC模式的DES/3DES解密運(yùn)算,得到的結(jié)果稱為dk(RndA+RndB’)=74 F4 AE 77 7A A4 31 E8 4B 18 BA 8F 74 CF 80 63發(fā)送給卡片。
第四步:卡片收到16字節(jié)dk(RndA+RndB’)后執(zhí)行DES/3DES加密運(yùn)算,得到結(jié)果RndA+RndB’。卡片首先將自己原來(lái)的RndB大循環(huán)左移8位,看結(jié)果是否等于RndB’,如果不相等,卡片將停止認(rèn)證過(guò)程,并回送一個(gè)錯(cuò)誤碼。如果相等,證明卡片使用的密碼和讀寫(xiě)器使用的密碼一致,卡片將獲得的RndA也大循環(huán)左移8位得到RndA’=11 22 33 44 55 66 77 00,然后對(duì)RndA’進(jìn)行DES/3DES加密運(yùn)算,得到的結(jié)果稱為ek(RndA’)=F1 81 F7 32 6D CD 86 A6回送給讀寫(xiě)器。
第五步:讀寫(xiě)器收到ek(RndA’)后執(zhí)行DES/3DES解密從而得到Rnd A’,并把自己之前產(chǎn)生的RndA大循環(huán)左移8位,得到的結(jié)果與Rnd A’比較,如果不相等,讀寫(xiě)器將退出認(rèn)證過(guò)程并可將卡片休眠。
第六步:卡片將當(dāng)前的應(yīng)用設(shè)置為通過(guò)認(rèn)證狀態(tài),如果AID=0,則將卡片本身設(shè)置為通過(guò)認(rèn)證狀態(tài)。
第七步:如果雙方所有的比較都成功,通過(guò)組合RndA和RndB得到一個(gè)16字節(jié)的段密碼,組合的方法如下:
段密碼=RndA第一部分+RndB第一部分+ RndA第二部分+RndB第二部分
對(duì)于本文中的例子,產(chǎn)生的段密碼為
00 11 22 33 98 E4 EE 2E 44 55 66 77 8B 4B F7 B1
之所以采取這種組合方法產(chǎn)生段密碼是為了避免惡意的讀寫(xiě)器通過(guò)將RndA=RndB而將3DES運(yùn)算強(qiáng)行轉(zhuǎn)化為DES運(yùn)算。如果之后的數(shù)據(jù)傳輸確實(shí)想使用單DES操作(使段密碼的前8字節(jié)與后8字節(jié)相等),應(yīng)使用前8個(gè)字節(jié),即RndA第一部分+RndB第一部分,而不能使用后8個(gè)字節(jié)。
得到16字節(jié)的段密碼后,3次相互握手認(rèn)證完成。如果之后的通訊是DES/3DES加密傳輸,則使用剛產(chǎn)生的16字節(jié)段密碼作為臨時(shí)的DES密鑰。
審核編輯 黃宇
-
RFID
+關(guān)注
關(guān)注
392文章
6448瀏覽量
242651 -
射頻識(shí)別
+關(guān)注
關(guān)注
8文章
593瀏覽量
39519
發(fā)布評(píng)論請(qǐng)先 登錄
如何監(jiān)測(cè)TCP三次握手過(guò)程
TCP三次握手與負(fù)載均衡的配置
TCP三次握手與連接建立的關(guān)系
TCP三次握手的步驟詳解
TCP三次握手的網(wǎng)絡(luò)抓包分析
TCP三次握手安全性分析
TCP三次握手與UDP的區(qū)別
TCP三次握手的基本原理
TCP三次握手協(xié)議的作用
TCP三次握手的詳細(xì)過(guò)程
DHCP 四次握手
使用TRF7970A進(jìn)行MIFARE DESFire EV1 AES認(rèn)證

評(píng)論