[英]MIFARE Classic - What could cause "All-zero key" and "Unknown key" error?
我開發了一個 C# 應用程序來寫入 MIFARE Classic 卡。 我使用默認鍵( FF FF FF FF FF FF
)寫入卡。
寫入卡后,我注意到沒有數據進入扇區 1 的塊。相反,扇區 1 如下圖所示(使用 NXP TagInfo 讀取時):
此外,我無法再驗證扇區 1 內的塊。
這是在我用我的應用程序寫入卡后發生的。 在寫入之前,塊很好(可以讀取)。
那么什么會導致這個問題呢?
這些並不是真正的錯誤。 這只是告訴您 NXP TagInfo 無法讀取該扇區,因為它不知道(“未知密鑰”)對扇區 1 進行身份驗證所需的密鑰。
最明顯的原因是您使用的卡已經包含一些用非標准密鑰保護的數據(既不是工廠默認密鑰,也不是 NDEF 密鑰,也不是 NXP TagInfo 默認測試的任何其他密鑰。在這種情況下,您的應用程序一開始就無法寫入該卡的扇區 1。
但是,既然你指出
這是在我用我的應用程序寫入卡后發生的。 在寫入之前,塊很好(可以讀取)。
我假設您的應用程序寫入扇區 1(塊 7)的最后一個塊。 每個扇區的最后一個塊是扇區尾部。 該塊包含該塊的訪問控制信息(身份驗證密鑰 A 和 B 以及訪問位)。 該塊的格式如下:
XX XX XX XX XX XX ZZ ZZ ZZ GG YY YY YY YY YY YY
其中XX XX XX XX XX XX
(6個字節)是key A, YY YY YY YY YY YY
(6個字節)是key B, ZZ ZZ ZZ
(3個字節)是訪問條件, GG
(1個字節)是一般目的字節。
因此,如果覆蓋此塊,則會更改該扇區的身份驗證密鑰和訪問條件。 因此,如果您將新的身份驗證數據(新的密鑰 A/B 和新的訪問位)寫入該塊,則需要使用更新后的信息進行未來的身份驗證嘗試。
但是,如果您將部分數據寫入該塊,則很可能將訪問位設置為無效值。 在這種情況下(訪問位包含無效值),整個扇區將永久無法使用。 作為一項安全功能,MIFARE CLassic 卡將阻止對訪問條件無效的扇區進行訪問。 一旦扇區處於該狀態,就無法恢復。
關於尾部塊和訪問位,另請參閱以下問題:
00 00 00 00 00 00 KeyA 可以在 2 種可能的條件下發生
0x00 寫入扇區尾部的所有 16 個字節
在扇區尾部寫入完成之前,卡已從讀卡器中取出。 被稱為卡片撕裂,它可能導致所有 0x00 寫入所有 16 個字節。
在上述任一條件下, Accces 位現在將為 00 00 00... 這將不可逆轉地鎖定扇區。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.