我们的标签使用 NXP NTAG 424 DNA 芯片。每次扫描都会使单调计数器递增,并用芯片密钥生成 AES-CMAC 认证码。我们的验证服务检查认证码和计数器,拒绝已通过验证的认证码。没有密钥,仅凭复制的链接无法生成新的有效认证码。扫描通过验证,能确认标签本身是真品,但不能证明它所附着的物品是真品。
单调计数器如何防止克隆
仅存储数据的 NFC 标签(如 NTAG 216)只能提供信息,无法提供安全保障。它们存储的是任何读卡器都能复制的静态信息。每次扫描 NFC 标签,内部计数器都会加一。该计数值与标签的唯一数据和密钥相结合,通过 AES-CMAC(基于分组密码的消息认证码)生成加密签名。由于每次扫描计数器都会变化,即使是同一个标签,每次生成的签名也各不相同。
认证公式如下。
CMAC = AES-CMAC(K, UID || Counter || Data)
其中,K 是密钥,UID 是标签的唯一标识符,Counter 随每次扫描递增,Data 是标签的载荷数据。伪造标签在不知道密钥的情况下,无法预测未来的计数值或生成有效签名,因此克隆在数学上不可行。
硬件安全模块保存主密钥,并根据主密钥和各标签的 UID 派生出每个标签的独有密钥。我们将该密钥一次写入标签的 NTAG 424 DNA 芯片,之后无法从芯片中读出。即使从一个标签中提取出密钥,也不能为其他标签生成有效认证码。
静态 NFC 标签与我们的 NTAG 424 DNA 标签对比
| 功能 | 静态 NFC 标签 | 我们的 NTAG 424 DNA 标签 |
|---|---|---|
| 静态序列号 | 容易复制 | 不单独依赖此项 |
| 递增计数器 | 如有计数器,读数也无签名 | 每次扫描递增 |
| AES-CMAC 验证 | 无保护 | 通过 AES-CMAC 验证 |
| 克隆检测 | 不支持 | 计数器偏离 |
| 芯片验证 | 无 | ECC secp224r1 |
| 物理拆封检测 | 不支持 | TagTamper 检测导线 |