需要全球平台安全通道 2 计算示例
global platform secure channel 2 computation example needed
我正在为实现全球平台安全通道协议 2 的支付芯片编写个性化软件。我有芯片供应商提供的可以登录卡的工具,但我无法复制这些计算来得出我的自己的登录。供应商工具只有一个出厂密钥,或者可能是一个包含三个相同部分的密钥集。 vendor工具就知道这么多了,可以登录卡了:
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...”填充以生成签名的明文。使用会话密钥对其进行签名,结果应与卡密码匹配。一旦我可以复制供应商工具计算,我就可以在我的个人机器上使用相同的代码。简单易行。
在 .Net 4.5 TripleDESCryptoServiceProvider 和 MACTripleDES 中工作时,我得到的值不匹配。我不愿意集成 Bouncy Castle 只是为了看看它是否能让事情变得更好。我的密钥计算在 internet calculators 上得到验证,但我当然看不到卡的会话密钥。在线签名计算器不同意我的代码,但他们也不同意示例数据。我所知道的是签名是错误的,或者至少与工作工具不同。
所以我想问题是,在任何地方都可以找到这种计算的例子吗?当然是先问芯片厂商了。
Python 中的一个示例是 Asterix 项目:
https://github.com/suma12/asterix
对该项目中的 SCP02.py 进行少量分割就足以 运行 并复制我的示例数据。
我正在为实现全球平台安全通道协议 2 的支付芯片编写个性化软件。我有芯片供应商提供的可以登录卡的工具,但我无法复制这些计算来得出我的自己的登录。供应商工具只有一个出厂密钥,或者可能是一个包含三个相同部分的密钥集。 vendor工具就知道这么多了,可以登录卡了:
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...”填充以生成签名的明文。使用会话密钥对其进行签名,结果应与卡密码匹配。一旦我可以复制供应商工具计算,我就可以在我的个人机器上使用相同的代码。简单易行。
在 .Net 4.5 TripleDESCryptoServiceProvider 和 MACTripleDES 中工作时,我得到的值不匹配。我不愿意集成 Bouncy Castle 只是为了看看它是否能让事情变得更好。我的密钥计算在 internet calculators 上得到验证,但我当然看不到卡的会话密钥。在线签名计算器不同意我的代码,但他们也不同意示例数据。我所知道的是签名是错误的,或者至少与工作工具不同。
所以我想问题是,在任何地方都可以找到这种计算的例子吗?当然是先问芯片厂商了。
Python 中的一个示例是 Asterix 项目: https://github.com/suma12/asterix
对该项目中的 SCP02.py 进行少量分割就足以 运行 并复制我的示例数据。