射頻識別技術漫談(12)——三次相互認證并生成臨時的通訊密鑰在通訊技術中的應用非常普遍,Mifare Desfire也使用了這種成熟的認證加密方法。Desfire在卡片數(shù)據(jù)傳輸前使用DES或3DES進行3次握手認證,認證成功一方面表明卡片和讀寫器雙方是可以相互信任的,同時為雙方之后的數(shù)據(jù)傳送提供了一組臨時使用的段密碼進行加密保護。
DES/3DES的基本運算包括加密和解密,Desfir卡片規(guī)定,當讀寫器(PCD)與卡片(PICC)進行DES/3DES運算時,卡片總是進行加密運算,與之對應,讀寫器總是進行解密運算。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運算的結果作為下一次運算的初始向量。發(fā)送數(shù)據(jù)使用發(fā)送CBC模式,接收數(shù)據(jù)使用接收CBC模式。第一次運算的初始向量規(guī)定為8字節(jié)的00.
以下描述3次握手認證和段密碼產(chǎn)生的過程及實例,假設卡片密碼為16個00:
第一步:讀寫器作為發(fā)起認證的主導方,向卡片發(fā)送認證(Authenticate)命令,并攜帶一個表示密碼序號的參數(shù)(卡片上每種應用可以最多有14組不同的密碼,其序號為0-D)。如果選定的應用標識符AID為0,那么認證將指向卡片的主密碼(卡片密鑰),在此情況下,密碼序號必須為0。如果AID不為0,則認證的是某一應用的密碼。卡片進入磁場上電復位后將默認選中AID為0。也就是說卡片復位的首次密碼認證總是指向卡片主密碼。如果卡片上不存在指定的密碼組號,卡片將返回一個錯誤碼。
第二步:卡片用讀寫器指定的密碼加密一組8字節(jié)的隨機數(shù)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位閉合左循環(huán),從而將第一個字節(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解密運算,得到的結果稱為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加密運算,得到結果RndA+RndB’。卡片首先將自己原來的RndB大循環(huán)左移8位,看結果是否等于RndB’,如果不相等,卡片將停止認證過程,并回送一個錯誤碼。如果相等,證明卡片使用的密碼和讀寫器使用的密碼一致,卡片將獲得的RndA也大循環(huán)左移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’)后執(zhí)行DES/3DES解密從而得到Rnd A’,并把自己之前產(chǎn)生的RndA大循環(huán)左移8位,得到的結果與Rnd A’比較,如果不相等,讀寫器將退出認證過程并可將卡片休眠。
第六步:卡片將當前的應用設置為通過認證狀態(tài),如果AID=0,則將卡片本身設置為通過認證狀態(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運算強行轉化為DES運算。如果之后的數(shù)據(jù)傳輸確實想使用單DES操作(使段密碼的前8字節(jié)與后8字節(jié)相等),應使用前8個字節(jié),即RndA第一部分+RndB第一部分,而不能使用后8個字節(jié)。
得到16字節(jié)的段密碼后,3次相互握手認證完成。如果之后的通訊是DES/3DES加密傳輸,則使用剛產(chǎn)生的16字節(jié)段密碼作為臨時的DES密鑰。
審核編輯 黃宇
-
RFID
+關注
關注
388文章
6199瀏覽量
238631 -
射頻識別
+關注
關注
8文章
578瀏覽量
39021
發(fā)布評論請先 登錄
相關推薦
如何監(jiān)測TCP三次握手過程
TCP三次握手與負載均衡的配置
TCP三次握手與連接建立的關系
TCP三次握手的步驟詳解
TCP三次握手的網(wǎng)絡抓包分析
TCP三次握手安全性分析
TCP三次握手與UDP的區(qū)別
TCP三次握手的基本原理
TCP三次握手協(xié)議的作用
TCP三次握手的詳細過程
使用TRF7970A進行MIFARE DESFire EV1 AES認證
![使用TRF7970A進行MIFARE <b class='flag-5'>DESFire</b> EV1 AES<b class='flag-5'>認證</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論