射頻識別技術(shù)漫談(12)——三次相互認證并生成臨時的通訊密鑰在通訊技術(shù)中的應(yīng)用非常普遍,Mifare Desfire也使用了這種成熟的認證加密方法。Desfire在卡片數(shù)據(jù)傳輸前使用DES或3DES進行3次握手認證,認證成功一方面表明卡片和讀寫器雙方是可以相互信任的,同時為雙方之后的數(shù)據(jù)傳送提供了一組臨時使用的段密碼進行加密保護。
DES/3DES的基本運算包括加密和解密,Desfir卡片規(guī)定,當(dāng)讀寫器(PCD)與卡片(PICC)進行DES/3DES運算時,卡片總是進行加密運算,與之對應(yīng),讀寫器總是進行解密運算。DES密鑰有16個字節(jié),如果前8個字節(jié)與后8個字節(jié)相同,則進行DES運算,反之如果前8個字節(jié)和后8個字節(jié)不同,則進行3DES運算。如下表所示:
DES/3DES運算每次操作8字節(jié),如果數(shù)據(jù)不足8字節(jié),必須填充為8字節(jié),填充的數(shù)據(jù)通常是00,如果正好要進行DES運算的數(shù)據(jù)是“00 00 00”(比如“讀取所有數(shù)據(jù)”命令),則填充一個0x80,后面再填充00。
所有的DES/3DES操作使用密碼塊鏈接模式(CBC),即上一次DES運算的結(jié)果作為下一次運算的初始向量。發(fā)送數(shù)據(jù)使用發(fā)送CBC模式,接收數(shù)據(jù)使用接收CBC模式。第一次運算的初始向量規(guī)定為8字節(jié)的00.
以下描述3次握手認證和段密碼產(chǎn)生的過程及實例,假設(shè)卡片密碼為16個00:
第一步:讀寫器作為發(fā)起認證的主導(dǎo)方,向卡片發(fā)送認證(Authenticate)命令,并攜帶一個表示密碼序號的參數(shù)(卡片上每種應(yīng)用可以最多有14組不同的密碼,其序號為0-D)。如果選定的應(yīng)用標識符AID為0,那么認證將指向卡片的主密碼(卡片密鑰),在此情況下,密碼序號必須為0。如果AID不為0,則認證的是某一應(yīng)用的密碼??ㄆM入磁場上電復(fù)位后將默認選中AID為0。也就是說卡片復(fù)位的首次密碼認證總是指向卡片主密碼。如果卡片上不存在指定的密碼組號,卡片將返回一個錯誤碼。
第二步:卡片用讀寫器指定的密碼加密一組8字節(jié)的隨機數(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)返回給讀寫器。
第三步:讀寫器用待認證的密碼16個00,對收到的ek(RndB)進行DES/3DES解密從而得到RndB=98 E4 EE 2E 8B 4B F7 B1。接下來讀寫器對RndB進行8位閉合左循環(huán),從而將第一個字節(jié)移到了最后一個字節(jié)的位置,結(jié)果記為RndB’,RndB’=E4 EE 2E 8B 4B F7 B1 98。然后讀寫器自己產(chǎn)生一個8字節(jié)的隨機數(shù)RndA,例如RndA=00 11 22 33 44 55 66 77,并與RndB’連接起來組成RndA+RndB’=00 11 22 33 44 55 66 77 E4 EE 2E 8B 4B F7 B1 98共16字節(jié),使用CBC模式的DES/3DES解密運算,得到的結(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加密運算,得到結(jié)果RndA+RndB’。卡片首先將自己原來的RndB大循環(huán)左移8位,看結(jié)果是否等于RndB’,如果不相等,卡片將停止認證過程,并回送一個錯誤碼。如果相等,證明卡片使用的密碼和讀寫器使用的密碼一致,卡片將獲得的RndA也大循環(huán)左移8位得到RndA’=11 22 33 44 55 66 77 00,然后對RndA’進行DES/3DES加密運算,得到的結(jié)果稱為ek(RndA’)=F1 81 F7 32 6D CD 86 A6回送給讀寫器。
第五步:讀寫器收到ek(RndA’)后執(zhí)行DES/3DES解密從而得到Rnd A’,并把自己之前產(chǎn)生的RndA大循環(huán)左移8位,得到的結(jié)果與Rnd A’比較,如果不相等,讀寫器將退出認證過程并可將卡片休眠。
第六步:卡片將當(dāng)前的應(yīng)用設(shè)置為通過認證狀態(tài),如果AID=0,則將卡片本身設(shè)置為通過認證狀態(tài)。
第七步:如果雙方所有的比較都成功,通過組合RndA和RndB得到一個16字節(jié)的段密碼,組合的方法如下:
段密碼=RndA第一部分+RndB第一部分+ RndA第二部分+RndB第二部分
對于本文中的例子,產(chǎn)生的段密碼為
00 11 22 33 98 E4 EE 2E 44 55 66 77 8B 4B F7 B1
之所以采取這種組合方法產(chǎn)生段密碼是為了避免惡意的讀寫器通過將RndA=RndB而將3DES運算強行轉(zhuǎn)化為DES運算。如果之后的數(shù)據(jù)傳輸確實想使用單DES操作(使段密碼的前8字節(jié)與后8字節(jié)相等),應(yīng)使用前8個字節(jié),即RndA第一部分+RndB第一部分,而不能使用后8個字節(jié)。
得到16字節(jié)的段密碼后,3次相互握手認證完成。如果之后的通訊是DES/3DES加密傳輸,則使用剛產(chǎn)生的16字節(jié)段密碼作為臨時的DES密鑰。
審核編輯 黃宇
-
RFID
+關(guān)注
關(guān)注
388文章
6152瀏覽量
237899 -
射頻識別
+關(guān)注
關(guān)注
8文章
577瀏覽量
38951
發(fā)布評論請先 登錄
相關(guān)推薦
評論