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