我正在为一个实现全球平台安全通道协议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通过阅读可公开获得的全球平台卡规范,我的软件需要使用常数182 (或者181号,我用了两种方法)和序列计数器(这里是“0013”),零填充到16个字节,来生成会话密钥。然后它需要连接主机挑战,序列号,卡挑战,和“8000.”为签名制作明文的填充。用会话密钥签名,结果应该与卡密码相匹配。一旦我可以复制供应商工具计算,我就可以在我的perso机器中使用相同的代码。很简单。
在.Net 4.5 TripleDESCryptoServiceProvider和MACTripleDES中工作,我得到不匹配的值。我不愿意整合弹跳城堡,只是想看看它是否能让事情变得更好。我的密钥计算是在因特网计算器上验证的,但是我当然看不到卡的会话密钥。在线签名计算器不同意我的代码,但他们也不同意样本数据。我只知道签名是错误的,或者至少与工作工具不同。
所以我想问题是,在任何地方都有这种计算的例子吗?当然,我先问了芯片供应商。
发布于 2020-02-21 15:19:16
Python中的一个例子是Asterix项目:https://github.com/suma12/asterix
在该项目中对SCP02.py进行少量的切分就足以运行和复制我的示例数据。
https://stackoverflow.com/questions/60338076
复制相似问题