我需要将文本数据写入/读取到 NFC 标签。我期望读/写应该工作的方式如下:
我想到了另一种方法,将加密数据写入标签一次,写入完成后使标签只读。我有能力做到这一点。但现在我意识到将标签设为只读并不是那么有效。
我在互联网上搜索了很多,但还没有找到任何可靠的文章或指南。因此,如果有人对NFC标签进行了密码保护,请指导我。
最佳答案
NFC 标签(或实际上是实现五个 NFC 论坛标签操作规范之一的 NFC 论坛标签)是一种简单的数据存储器,没有任何安全机制(除了将存储器锁定为只读)。这些标签旨在以 NDEF 格式存储可自由读取的数据。没有针对读取标签内容(或将标签内容复制到其他标签)的认证或保护机制进行标准化。
然而,一些现有的标签产品实现了超出 NFC 论坛规定的附加安全功能。
最简单的机制是一个简短的“密码”(通常是 32 位值)。对于身份验证,此密码以明文形式传输到标签,标签确认/拒绝身份验证。 (请注意,通过 NFC 以明文传输意味着任何嗅探通信的人都能够获取密码。)一些支持此类密码保护的标签可以使用身份验证在无访问、只读访问和只读访问之间切换定义的存储区域。读/写访问。
一种更复杂的方法是使用共享 key 的相互质询-响应身份验证。与简单的明文密码相比,这意味着被动窃听者无法发现共享 key 。与密码一样,验证状态可用于在大多数现有标签产品的无访问、只读访问和读/写访问之间切换定义的存储区域。然而,并非所有这些都以密码方式将内存访问和身份验证过程绑定(bind)在一起。
*) 请注意,自 2008 年以来,已知 MIFARE Classic 的专有身份验证和加密协议(protocol)已被破坏。此外,MIFARE Classic 仅支持配备 NXP NFC 芯片组的 Android 设备。
在 Android 上实现任何 from of 身份验证时,您应该注意以下几点:
Ndef
/NdefFormatable
类)来访问 protected 内存区域。相反,您需要使用标记技术类之一 ( NfcA
, ..., IsoDep
) 来交换特定于标记平台的低级命令。也不要尝试混合多个标签类(例如,使用 NfcA
发送身份验证命令,使用 Ndef
之后读取数据)。虽然这适用于某些设备,但它不适用于大多数设备,因为它们在这些通信对象之间切换时会重置与标签的通信。关于android - 读取/写入具有密码保护的 NFC 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36395457/