智能卡相互认证

SmartCard MUTUAL AUTHENTICATION

您好,我正在寻找有关使用智能卡进行相互身份验证的信息,我想知道您是否可以帮助我。 我正在对 apdu 命令进行逆向工程,想知道如何计算 MAC。 例如我有以下内容:

APPLET: A4 00 04 0C XX XX XX
APDU: 00 84 00 00 08 C9
TRX: 00 82 00 00 28 [seed bytes Transformed enc mac ...] 00
TRX: B0 0C 0D 81 00 97 01 5D 8E 08 [MAC] 00

前两个命令我完全理解,但从第三个命令 00 82 开始,我想知道如何计算 MAC 以及接下来的内容,以便进行读数 我想了解信息和文档以阅读和了解有关 MUTUAL AUTHENTICATION

的更多信息

Mutual Authenticate 的总体简短总结(我同意,ISO 7816-4 在专注于接口的含义上有点简洁):

  • 相互验证是内部验证和外部验证命令的组合。

  • 首先,主机应用程序从卡中请求一个随机数。

  • 然后这个随机数以某种方式使用密钥加密,通常是通过应用 MAC 算法

  • 计算结果在Mutual Authenticate的命令数据字段中回传给卡片,并在外部生成另一个随机数。

  • 卡片验证MAC结果,如果成功则授予访问权限。它还使用不同的密钥从外部提供的随机数计算 MAC,并将其作为命令响应发送。如果不成功,则通过阻止密钥的错误计数器或通过大量延迟来制定一些防止暴力破解的措施。

  • 主机应用程序从卡中验证 MAC。如果结果正确,宿主应用程序可以确定,这是一张“合法”卡。

有两点很关键:

  • 如何分离和编码 MAC 和外部提供的随机数 - 例如作为使用两个数据对象的 TLV 结构
  • 如何识别两个键,因为在P2中只能指定一个。