如何保护包含NDEF消息的Mifare Classic标签?

问题描述:

用Android来保护Mifare Ultralight非常容易,对此有一个Ndef.makeReadonly()方法。但Mifare Classic标签返回Ndef.canMakeReadonly() == false,所以这是不可能的。我听说可以只读标签,或者至少通过设置a或b键来保护它。如何保护包含NDEF消息的Mifare Classic标签?

有此methid在MifareClassic科技:authenticateSectorWithKeyB(int sectorIndex, byte[] key)

有谁知道这是否可以用来做一个NDEF消息对MIFARE经典标签只读?或者,我还可以在标签上写入ndef消息,然后以某种方式将其锁定为新写入?

可以使用验证方法。

首先,这里是为MIFARE经典4K数据表:

总之一写保护是这样的:

Mifare Classic分为4 * 16个字节的扇区(只适用于前1K左右......更高的区块有点不同,但在规范中有记载)。其中64个字节用于认证/保护。对于该卡的每个扇区,你做到以下几点:

  1. 验证使用科亚
  2. 读取扇区尾部的扇区。
  3. 修改扇区尾部的访问位。
  4. 将扇形拖车写回卡上。

为的Mifare经典的KEYA值是:

字节[] KEY_DEFAULT = {(字节)为0xFF,(字节)为0xFF,(字节)为0xFF,(字节)为0xFF,(字节) 0xFF时,(字节)为0xFF};

对于未格式化的工厂新鲜卡片。

字节[] KEY_MIFARE_APPLICATION_DIRECTORY = {(字节)0XA0,(字节)0xA1,(字节)0xA2,(字节)0xA3执行,(字节)0xA4,(字节)0xA5的};

对于卡的第一个扇区

字节[] KEY_NFC_FORUM =
{(字节)0xD3,(字节)0xF7,(字节)0xD3,(字节)0xF7,(字节) 0xD3,(字节)0xF7};

对于所有其他部门。

重要提示:您必须将原始KeyA密钥写回卡中。如果这些与上面显示的键不同,则卡将不再符合Ndef标准。

对于变形访问位你有两个选择:

  1. 只允许读的科亚。这会给你100%的写保护,不能被撤销。

  2. 启用KeyA的读取和KeyB的读取/写入。还将密钥存储在KeyB中。这将允许您使用您的密钥KeyB对卡进行保护来验证写保护扇区。

背景:Android只会使用上面显示的KeyA值验证Ndef格式标签。 Ndef检测代码从不尝试使用KeyB,因此您可以将KeyB用于您自己的目的。

+1

Thanx为您的答复。虽然这可能确实有效,但我觉得它确实很复杂。有谁知道如果使用makeReadOnly()来支持密码保护标签也会在未来使用Mifare标签(例如未来的Android版本)吗?或者是否有人知道那里会有这样的库? – 2011-05-23 18:30:44

+0

好的答案,ndef数据可以通过正常的ndef读写从多个受保护的块中读写吗? Ndef.writeNdefMessage写入并使用getNdefMessage获取消息? – gaara87 2013-01-29 09:32:01

+0

它解决了我的问题...谢谢你的解释.. – 2014-09-26 09:51:28