天天看點

射頻識别技術漫談(12)——三次互相認證

射頻識别系統中由于卡片和讀寫器并不是固定連接配接為一個不可分割的整體,二者在進行資料通訊前如何确信對方的合法身份就變得非常重要。根據安全級别的要求不同,有的系統不需認證對方的身份,例如大多數的ttf模式的卡片;有的系統隻需要卡片認證讀寫器的身份或者讀寫器認證卡片的身份,稱為單向認證;還有的系統不僅卡片要認證讀寫器的身份,讀寫器也要認證卡片的身份,這種認證我們稱為互相認證。mifare系列卡片中的認證就是互相認證。

    最常見的認證是使用密碼或者叫密碼,就像特務見面,隻要說對了密碼(密碼)就可以确信對方是自己人。直接說密碼(密碼)存在巨大的風險,萬一被别人聽到了後果不堪設想,是以最好不要直接說出密碼,而是通過某種方式(運算)把密碼隐含在一串資料裡,這樣不相幹的人聽到了也不知道什麼意思。為了讓隐含着密碼的這一串資料沒有規律性,對密碼運算時一定要有随機數的參加。于是最常見的互相認證是雙方見面時一方給另一方一個随機數,讓對方利用密碼和約定的算法對這個随機數進行運算,如果結果符合預期則認證通過,否則認證不通過。

   “3”真是一個神奇的數字:做事的時候“三思而後行”才不會犯大錯;劉備“三顧茅廬”才把諸葛亮請出山;tcp協定中經過“三次握手”就可以确信雙方的連接配接是成功的。mifare系列卡片采用的互相認證機制也被稱為“三次互相認證”,如下圖所示。

    卡片認證讀寫器的合法性,先向讀寫器發送一個随機數,讀寫器用事先約定的有密碼參與的算法對随機數進行運算,然後把運算的結果回送給卡片,卡片收到後檢查這個結果對不對,如果對就通過認證,不對就沒有通過認證,其情形就是上圖中的圖a。

    讀寫器認證卡片也是向卡片發送一個随機數,卡片用事先約定的有密碼參與的算法對随機數進行運算,然後把運算的結果回送給讀寫器,讀寫器收到後檢查這個結果對不對,如果對就通過認證,不對就沒有通過認證,其情形就是上圖中的圖b。

    可見卡片和讀寫器認證對方時都是給對方一個随機數,對方傳回對随機數的運算結果。這樣的“一來一回”我們稱之為“兩次互相認證”。那麼卡片與讀寫器互相認證就需要兩個“一來一回”,應該稱為“四次互相認證”才對啊?為什麼是“三次互相認證”呢?上圖中表現的很明顯,讀寫器在回送對卡片随機數的運算結果時搭了一次便車,把自己認證卡片的随機數也一同送了過去,進而減少了一次資料傳送,四次互相認證就變成了“三次互相認證”。

    完整的互相認證過程如下:卡片先向讀寫器發送一個随機數b,讀寫器用事先約定的有密碼參與的算法對随機數b進行運算,然後把運算的結果連同随機數a一起送給卡片,卡片收到後先檢查讀寫器對随機數b運算的結果對不對,如果不對就不再往下進行,如果正确就對随機數a用事先約定的有密碼參與的算法進行運算,然後把運算的結果送給讀寫器,讀寫器收到後檢查這個結果對不對,如果對就通過認證,不對就沒有通過認證,其情形就是上圖中的圖c。

    認證的過程中多次提到“事先約定的算法”,到底是什麼樣的算法呢。這個沒有具體規定,但有一個要求是必須的,就是這個算法一定要有密碼和随機數的參與。比如desfire中使用3des算法,卡片的主密鑰作為des密鑰對随機數進行des運算。雙方使用的“算法”以及“參加運算的密碼”可以相同,也可以不同,這要看雙方的約定。

    認證完成後随機數也并不是就沒有用了,這兩個随機數的組合可以作為下一步操作的資料加密密鑰,desfire中就是這樣。

繼續閱讀