更新于2020/06/07>
NTAG 424支持“安全动态消息”,可能适用于您的使用情况。您可以存储带有“动态部分”的任何NDEF消息,该部分可选择加密和身份验证。
引用NTAG 424 datasheet的第9.3节:
安全动态消息(SDM)允许进行机密和完整性保护的数据交换,而无需先进行身份验证。 NT4H2421Tx支持从PICC上的StandardData文件之一读取SDM。安全动态消息允许对读取的数据添加安全性,同时仍然能够使用标准NDEF读取器访问它。典型用例是一个包含URI和一些元数据的NDEF,其中SDM允许将这些元数据与后端服务器进行机密和完整性保护的通信。
但请注意,这种解决方案并不适用于某些特定的尾部重放场景,例如:
在使用SDM时,必须考虑到与阅读安全动态消息相关的剩余风险。由于SDM允许自由阅读受保护的消息,即没有任何预先的读者身份验证,因此任何人都可以读取该消息。这意味着潜在攻击者也能够读取并存储一条或多条消息,并在以后的时间点上播放它们给验证器。如果该系统的使用情况不能接受这种剩余风险,则应用遗留的互相认证(使用挑战响应协议)和随后的安全消息传递。这将需要使用自己的应用程序,并在标准NDEF读操作之外运行。其他降低SDM剩余风险的方法可以应用,而不完全消除它:(请注意,上述传统的双向认证协议是我在下面原始答案中描述的内容)
有一个有趣的实现后端服务器的项目(带有个性化指令标签)。
以下是原始答案:
普通的非可编程智能卡通常提供以下一种或几种组合:
烧丝位 -- 存储区域中的每个位的值只能以一种方式改变(从零到一或从一到零,但不能同时发生)
单调计数器 -- 存储在卡上的整数值在个性化后只能朝一个方向改变(增加或减少,但不能同时进行)
电子钱包 -- 一个整数值可以由一个实体减少并由另一个实体增加(两个实体都通过不同的秘密钥匙证明自己)
这些功能都没有直接提供任何不可预测的令牌(请参见注1)。
另一个方面是,您的“令牌收集器”必须拥有允许卡片写入访问的密钥(以便能够修改计数器/电子钱包)-- 这使得他们可以轻松耗尽所有剩余的烧丝位或计数器/电子钱包值(有效地导致其他“令牌收集器”出现拒绝服务状态)。访问控制无法细分为仅允许单个令牌收集(这可能是您想要的情况)。
使用可编程智能卡,您可以(半)轻松地实现任何所需的操作语义 - 查看Java Card(可编程智能卡的成本更高)。
祝好运!
注意1:实际上有些卡可以为它们的电子钱包生成不可预测的“余额证书”,但我不知道任何支持此功能的CL卡。
注意2:基于密码的身份验证不适合作为“令牌收集器”,因为“令牌收集器”可以轻松截取发送到卡片的密码。MIFARE Classic也不适合,因为加密密钥需要直接加载到读卡器中(中继不可能)。
注意3:请注意,通过执行这种中继身份验证,您授予“令牌收集器”与相应密钥绑定的所有访问权限(尽管他/她不知道会话密钥的值)。因此,Ultralight-C不是一个好选择,因为您从技术上讲会完全授予他/她访问卡的权限。同样,不要使用DESFire卡主密钥进行中继身份验证--创建一个具有2个应用程序密钥的新应用程序(只有您知道的随机值),并使用第二个密钥(而不是应用程序主密钥)进行中继身份验证。记得同时更改卡主密钥。
注意4:DESFire EV2具有命令中继保护,因此您需要测试它在您的情况下是否有效。