这取决于您使用的标记类型以及您希望克隆的保护级别.
> NFC标签(由NFC Forum定义)没有防止克隆的保护.这些标签旨在作为可自由读取的数据的容器(所谓的NDEF消息).任何人都可以从一个标签读取NDEF消息并将其复制到另一个标签.
>许多NFC标签还包含由标签制造商预编程的唯一标识符,不能在普通标签上修改.您可以使用此唯一标识符来确定标签是否由您(即您知道其ID)或伪造(即您不知道其ID)发出.您还可以在标记的ID及其数据上创建数字签名,而不是使用正版ID列表.这样,您可以查看数据和签名是否用于具有不同唯一标识符的标记.但是,仍然可以从标记中提取所有数据.因此,您应该知道,如果攻击者可以将唯一标识符更改为标记ID的值,则可以使用专用硬件(例如Proxmark等)和现成标签.所以这肯定不是完美的克隆保护.
>您可以使用非接触式智能卡/标签,提供通信加密和基于共享密钥的访问控制(例如MIFARE DESFire).使用此方法,您可以存储不希望攻击者能够在受密钥保护的内存区域中克隆的数据.但是,如果您希望能够从应用程序中读取该数据(即没有直接与卡通信的在线后端),则需要存储密钥才能访问应用程序中的内存区域.因此,在离线场景(即存储在应用程序中的密钥)中,攻击者可能能够提取该密钥并使用它来克隆标记.
>您可以使用包含秘密非对称密钥的标记/智能卡,并提供使用该密钥对加密质询进行签名的命令.在这种情况下,为了验证标签是否是正版,您可以从标签请求此类签名以进行随机质询,并根据对应公钥的标签验证签名.这肯定是最安全的解决方案,因为您不需要在应用程序中存储任何共享密钥.唯一现成的NFC标签解决方案(我现在知道)提供这样的功能似乎是Inside Secure的VaultIC.虽然您可以基于非接触式智能卡(例如Java卡)的非对称加密功能自己创建一个.
请注意,对于上述所有克隆保护方案,您必须创建一个应用程序,以检查标记是真实的还是克隆的.默认情况下,NFC电话仅使用(1)中的信息,因此不执行任何此类检查.