如何保护包含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数据表:
- 3.6存储器组织
- 3.6.3扇区尾 :
http://www.nxp.com/documents/data_sheet/MF1S703x.pdf
你是重要的章节
总之一写保护是这样的:
Mifare Classic分为4 * 16个字节的扇区(只适用于前1K左右......更高的区块有点不同,但在规范中有记载)。其中64个字节用于认证/保护。对于该卡的每个扇区,你做到以下几点:
- 验证使用科亚
- 读取扇区尾部的扇区。
- 修改扇区尾部的访问位。
- 将扇形拖车写回卡上。
为的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标准。
对于变形访问位你有两个选择:
只允许读的科亚。这会给你100%的写保护,不能被撤销。
启用KeyA的读取和KeyB的读取/写入。还将密钥存储在KeyB中。这将允许您使用您的密钥KeyB对卡进行保护来验证写保护扇区。
背景:Android只会使用上面显示的KeyA值验证Ndef格式标签。 Ndef检测代码从不尝试使用KeyB,因此您可以将KeyB用于您自己的目的。
Thanx为您的答复。虽然这可能确实有效,但我觉得它确实很复杂。有谁知道如果使用makeReadOnly()来支持密码保护标签也会在未来使用Mifare标签(例如未来的Android版本)吗?或者是否有人知道那里会有这样的库? – 2011-05-23 18:30:44
好的答案,ndef数据可以通过正常的ndef读写从多个受保护的块中读写吗? Ndef.writeNdefMessage写入并使用getNdefMessage获取消息? – gaara87 2013-01-29 09:32:01
它解决了我的问题...谢谢你的解释.. – 2014-09-26 09:51:28