簡體   English   中英

MIFARE Classic - 什么會導致“全零密鑰”和“未知密鑰”錯誤?

[英]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 中出現“全零密鑰”和“未知密鑰”錯誤?

這些並不是真正的錯誤 這只是告訴您 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 種可能的條件下發生

  1. 0x00 寫入扇區尾部的所有 16 個字節

  2. 在扇區尾部寫入完成之前,卡已從讀卡器中取出。 被稱為卡片撕裂,它可能導致所有 0x00 寫入所有 16 個字節。

在上述任一條件下, Accces 位現在將為 00 00 00... 這將不可逆轉地鎖定扇區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM