MIFARE 只读和写保护块同时存在?

MIFARE read-only & write protected block at the same time?

哪个 MIFARE 卡支持单个块,可以编程为需要密码才能写入,但每个人都可以读取其数据?这样的标准是否适用于所有平台,特别是 iOS。它可以使用其 NFC 芯片在此类卡上执行上述两种操作吗?

MIFARE 产品系列1 中有相当多的产品允许通过身份验证 key/password 写保护信息(同时具有信息可自由阅读):

  • MIFARE Ultralight EV1:32位明文密码验证,密码可作为写密码(自由读,"authenticated"写)或read/write密码(仅"authenticated" read/write)。不能为单个块设置密码,只能为从特定偏移量开始的所有块设置一个密码。请注意,恩智浦的许多 NTAG 产品也具有这些功能。
  • MIFARE Ultralight C:与上述类似的功能,但具有使用 2-key-TDES 的更强大的身份验证机制。
  • MIFARE Classic:每个扇区可以有单独的密钥。你总是需要钥匙来阅读和写作。
  • MIFARE DESFire EV1:不是按块组织,而是按文件组织。每个文件可以有多个键设置为读保护 and/or 写保护。因此,您可以拥有一个可自由读取但需要密钥才能写入的文件。

你的第二个要求,“这样的标准是否适用于所有平台,特别是 iOS”,回答起来有点复杂:首先,写信给NFC 标签在 iOS 中是不可能的(除了某些 jailbreak?)因此,我将其解释为:哪些标签支持写保护并且可以使用 iOS 设备读取?

iOS 设备只能读取已包含 NDEF 消息的 NFC 论坛标签。此外,由于 NFC 论坛标签规范(还没有?)定义访问 NDEF 数据的身份验证方法,所有数据都需要可自由读取。

因此,除了可能用于 MIFARE Classic 之外,以上所有都可以使用。您需要格式化标签以包含 NDEF 消息。

例如,您可以使用 Ultralight C/EV1 标签,将 NDEF 消息存储到其上,然后为存储 NDEF 数据的区域(即所有页面 >= 3)设置写保护。但是,仅对特定块添加写保护是行不通的。您可以采用写保护部分位于 NDEF 消息末尾 Ultrlaight 标签块边界的方式制作 NDEF 消息。然后您可以仅为该特定块(以及所有更高但未使用的块)添加写保护。不幸的是,这会导致对 NDEF 消息的大小字段进行潜在的操作(从数据中删除该写保护块)。因此,从安全角度来看,NDEF 消息的部分写保护可能不是一个好主意。

与上述类似,您也可以使用 DESFire EV1。当用作 NFC 论坛标签时,NDEF 消息存储在单个文件中。因此,您可以使用身份验证密钥限制对该文件的写入。

由于iOS无法写入标签,您可能会使用其他平台将更新写入标签。例如,Android 能够向上述任何标签发送身份验证所需的低级命令。同样,许多基于 PC 的读者都支持这一点(尽管 DESFire 通常在那里有更好的支持)。


1) 请注意,还有其他产品(甚至来自其他制造商)也提供类似功能。