是否可以锁定 NFC 标签,然后再解锁并再次写入数据?

Is possible to lock a NFC tag and later unlock and write data again?

我正在开发一个NFC应用程序,它将在public个地方有标签,这样就需要用密码或其他工具锁定标签,以避免有人删除信息或修改其内容。标签应该可以在以后更新。那么,有可能做到这一点吗?或者当我锁定标签时,它会永远保持只读状态吗?

当然可以,但是AndroidAPI没有现成的方法。 您必须使用 APDU 来控制对标签的访问。

Ndef class 有一个 makeReadOnly 方法:http://developer.android.com/reference/android/nfc/tech/Ndef.html#makeReadOnly() 但是你不能解锁标签。

这在很大程度上取决于您使用的 NFC 标签的类型(以及价格)。典型的廉价 NFC 标签(例如 Topaz/Jewel 等 1 类标签或 MIFARE Ultralight、NTAG203、Kovio 2K 或 my-d NFC 等 2 类标签)不允许这样做。它们只能永久 写保护(这是在 public 位置安装标签时通常应该做的)。

其他标签确实提供了某种形式的基于身份验证的访问控制,可用于限制写入访问标签内存,例如

  • MIFARE Ultralight C:使用 3DES 的相互质询响应身份验证
  • NTAG21x,MIFARE Ultralight EV1,my-d move NFC:基于密码 "authentication",使用明文密码。请注意,明文密码可能具有严重的安全隐患。
  • MIFARE DESFire (EV1):使用 DES、3DES 或 AES 的相互质询响应身份验证
  • ...

身份验证不是 NFC 论坛标签操作规范的一部分,因此 tag/tag 取决于制造商。为了在 Android 上使用这些高级功能,您需要自己实现相关命令(使用 tech.transceive() 方法)。

请注意 Android 上的 Ndef.makeReadOnly() 不一定设置任何硬件锁定位。这种方法在某些情况下也可能只在协议级别设置写保护(即设置一个标志,请求 NFC 设备不写入任何数据,但不保护实际数据页不被覆盖)。