需要[全球平台安全通道2计算示例

问题描述 投票:0回答:1

我正在为实现全球平台安全通道协议2的支付芯片编写个性化软件。我有一个芯片供应商提供的工具可以登录到卡上,但是我无法复制这些计算来进行自己的登录。供应商工具只有一个工厂密钥,或者只有具有三个相同部分的密钥集。这就是供应商工具所知道的,它可以登录到卡:

cm> auth
=> 80 50 00 00 08 A0 13 2D 8B C1 E6 6E 9A 00          .P.....-...n..          host challenge:     A0132D8B C1E66E9A
(122317 usec)                       vv indicates SCP02
<= 00 00 00 00 00 00 00 00 00 00 FF 02 00 13 BA 2A    ...............*        seq num: 0013    card challenge:     BA2A16C9DC0E
   16 C9 DC 0E 30 11 F0 19 01 0D BF 2B 90 00          ....0......+..          card cryptogram:    3011F019 010DBF2B
 Status: No Error                                                               
 => 84 82 00 00 10 29 FD 73 3D 5A 91 6C 6F EA A6 56    .....).s=Z.lo..V        host cryptogram: 29FD733D5A916C6FEAA656B82A6B8928
   B8 2A 6B 89 28                                     .*k.(
(75647 usec)
<= 90 00                                              ..
Status: No Error

通过阅读公开可用的Global Platform Card Specification,我的软件需要使用常数182(或者可能是181,我同时尝试了两种方式)和序列计数器(此处为“ 0013”),零填充为16个字节,以创建会话密钥。然后,它需要连接主机质询,序列号,卡质询和“ 8000 ...”填充以使纯文本成为签名。用会话密钥签名,结果应与卡密码匹配。一旦可以复制供应商工具的计算,就可以在perso机器中使用相同的代码。很容易。

在.Net 4.5 TripleDESCryptoServiceProvider和MACTripleDES中工作,我得到的值不匹配。我不愿意整合Bouncy Castle,只是为了看看它是否会使事情变得更好。我的密钥计算已在internet calculators上进行了验证,但是我当然看不到卡的会话密钥。在线签名计算器不同意我的代码,但他们也不同意示例数据。我所知道的是签名出来有误,或者至少与工作工具不同。

所以我想问题是,此计算的示例在任何地方都可用吗?当然我先问了芯片供应商。

smartcard signature 3des emv globalplatform
1个回答
0
投票

Python中的一个示例是Asterix项目:https://github.com/suma12/asterix

在该项目中对SCP02.py的小规模修改足以运行并复制我的样本数据。

© www.soinside.com 2019 - 2024. All rights reserved.