Android MIFARE讀寫器詳解3

2021-07-05 21:26:52 字數 1569 閱讀 8790

射頻識別系統中由於卡片和讀寫器並不是固定連線為乙個不可分割的整體,二者在進行資料通訊前如何確信對方的合法身份就變得非常重要。

根據安全級別的要求不同,有的系統不需認證對方的身份,例如大多數的ttf模式的卡片;有的系統只需要卡片認證讀寫器的身份或者讀寫器認證卡片的身份,稱為單向認證;

還有的系統不僅卡片要認證讀寫器的身份,讀寫器也要認證卡片的身份,這種認證我們稱為相互認證。mifare系列卡片中的認證就是相互認證。最常見的認證是使用密碼,

只要說對了口令(密碼)就可以確信對方是自己人。直接說口令(密碼)存在巨大的風險,萬一被別人聽到了後果不堪設想,所以最好不要直接說出密碼,

而是通過某種方式(運算)把密碼隱含在一串資料裡,這樣不相干的人聽到了也不知道什麼意思。為了讓隱含著密碼的這一串資料沒有規律性,

對密碼運算時一定要有隨機數的參加。於是最常見的相互認證是雙方見面時一方給另一方乙個隨機數,讓對方利用密碼和約定的演算法對這個隨機數進行運算,

如果結果符合預期則認證通過,mifare系列卡片採用的相互認證機制也被稱為「三次相互認證」,如下圖所示。

卡片認證讀寫器的合法性,先向讀寫器傳送乙個隨機數,讀寫器用事先約定的有密碼參與的演算法對隨機數進行運算,

然後把運算的結果回送給卡片,卡片收到後檢查這個結果對不對,如果對就通過認證,不對就沒有通過認證,其情形就是上圖中的圖a。

讀寫器認證卡片也是向卡片傳送乙個隨機數,卡片用事先約定的有密碼參與的演算法對隨機數進行運算,然後把運算的結果回送給讀寫器,

讀寫器收到後檢查這個結果對不對,如果對就通過認證,不對就沒有通過認證,其情形就是上圖中的圖b。

可見卡片和讀寫器認證對方時都是給對方乙個隨機數,對方返回對隨機數的運算結果。這樣的「一來一回」我們稱之為「兩次相互認證」。

那麼卡片與讀寫器互相認證就需要兩個「一來一回」,應該稱為「四次相互認證」才對啊?為什麼是「三次相互認證」呢?上圖中表現的很明顯,

讀寫器在回送對卡片隨機數的運算結果時搭了一次便車,把自己認證卡片的隨機數也一同送了過去,從而減少了一次資料傳送,四次相互認證就變成了「三次相互認證」。

完整的相互認證過程如下:卡片先向讀寫器傳送乙個隨機數b,讀寫器用事先約定的有密碼參與的演算法對隨機數b進行運算,然後把運算的結果連同隨機數a一起送給卡片,

卡片收到後先檢查讀寫器對隨機數b運算的結果對不對,如果不對就不再往下進行,如果正確就對隨機數a用事先約定的有密碼參與的演算法進行運算,然後把運算的結果送給讀寫器,

讀寫器收到後檢查這個結果對不對,如果對就通過認證,不對就沒有通過認證,其情形就是上圖中的圖c。

認證的過程中多次提到「事先約定的演算法」,到底是什麼樣的演算法呢。這個沒有具體規定,但有乙個要求是必須的,就是這個演算法一定要有密碼和隨機數的參與。

比如desfire中使用3des演算法,卡片的主金鑰作為des金鑰對隨機數進行des運算。雙方使用的「演算法」以及「參加運算的密碼」可以相同,也可以不同,這要看雙方的約定。

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

參考文件

時間起草與2015-10-15

linux讀寫flash mtd的讀寫

打算讀寫 mtdblock3 請確定mtdblock3是未被掛載的,不然一定會讀寫失敗 開始上 mtdfd open dev mtdblock3 o trunc o rdwr if mtdfd 0 開啟裝置,注意是mtdblock3,而不是mtd3。lseek mtdfd,0,seek set 設定...

c 檔案讀寫 文字讀寫

include int main else return 0 格式 intfscanf file stream,constchar format,返回值 如果成功,該函式返回成功匹配和賦值的個數。如果到達檔案末尾或發生讀錯誤,則返回 eof 引數1 file stream 檔案指標 引數2 cons...

隨機讀寫 vs 順序讀寫

資訊儲存在硬碟裡,把它拆開也看不見裡面有任何東西,只有些碟片。假設,你用顯微鏡把碟片放大,會看見碟片表面凹凸不平,凸起的地方被磁化,凹的地方是沒有被磁化 凸起的地方代表數字1 磁化為1 凹的地方代表數字0。因此硬碟可以以二進位制來儲存表示文字 等資訊。機械盤 資料是儲存的扇區的,讀寫是依靠磁頭的擺動...