是否可以在NFC卡中实现令牌队列?

时间:2019-07-13 10:47:40

标签: nfc smartcard rfid mifare contactless-smartcard

该问题专门与MIFARE Ultralight C / EV1,MIFARE DESFire EV1甚至NTAG卡有关。我想实现一个令牌系统,以便普通用户每次读取其中一张卡时,都会得到一个可用的令牌。该令牌将从他们正在读取的NFC卡中“弹出”。换句话说,每次读取NFC芯片时,它将从卡的存储中发出不同的可用令牌。这可能实现吗?

1 个答案:

答案 0 :(得分:4)

常见的非可编程智能卡通常提供以下功能之一(或某种组合):

  • 保险丝位-单个位的值只能以一种方式(从零到一或从一到零,但不能同时改变)的存储区域< / p>

  • 单调计数器-卡上存储的整数值,个性化后只能在一个方向上更改(增加或减少,但不能同时改变)

  • 电子钱包-一个整数值,一个实体可以减小它,而另一个实体(两个实体都通过不同的秘密密钥证明自己)可以增加

  • >

这些功能都不能直接提供任何不可预测的标记(请参见注释1)。

另一方面是您的“令牌收集者”必须拥有一个允许对卡进行写访问的密钥(以便能够修改计数器/钱包),这使他们可以轻松耗尽所有剩余的保险丝位或计数器/钱包值(有效地导致其他“令牌收集者”的服务条件被拒绝)。访问控制不能细化为仅允许单个令牌收集(这可能是您想要的)。

使用可编程智能卡,您可以(半)轻松实现所需的任何操作语义-看一下Java Card(尽管可编程智能卡价格更高)。


鉴于您的“令牌收集器”在读取卡时处于联机状态,那么最简单的方法可能是仅使用卡来证明“令牌收集器”在附近并在服务器上生成“令牌”。

为证明与卡片的距离,“令牌收集者”将使用他/她的NFC手机在服务器和卡片之间中继相互身份验证命令。他/她不需要知道任何卡钥匙。

在这种情况下,可以使用任何具有相互身份验证的智能卡(例如Ultralight-C或DESFire)(请参见注释2和3)。

用于DESFire的通信看起来与此类似:

Simplified sequence diagram

祝你好运!


注1:实际上,有些卡可以为其电子钱包生成不可预测的“余额证明”,但是我不知道有支持此功能的CL卡。

注2:具有基于密码的身份验证的卡不适合使用,因为“令牌收集器”可以轻松拦截发送到卡的密码。 MIFARE Classic不适合使用,并且加密密钥需要直接加载到读取器中(无法中继)。

注3:请注意,通过执行此中继身份验证,您将授予“令牌收集器”绑定到相应密钥的所有访问权限(尽管他/她不知道会话密钥的值)。因此,Ultralight-C并不是一个很好的选择,因为从技术上讲,他/她将完全允许他/她访问卡。同样,请勿使用DESFire卡主密钥进行中继身份验证-使用两个应用程序密钥(只有您自己知道的随机值)创建一个新应用程序,并使用第二个密钥(而非应用程序主密钥)进行中继身份验证。记住也要更改卡的主密钥。

注4:DESFire EV2具有命令中继保护功能,因此您必须测试它是否适用于您的方案。

相关问题