3

我正在使用 ISO 14443 卡在 Android 上开发移动 POS 应用程序,我面临一个相当重要的问题。

目前,我可以通过发送所有正确的 APDU 命令来读取卡中的所有公共数据IsoDep.transceive

我目前必须处理CDOL1,特别是Data Authenticate Code以下是我从测试卡中收集的三个 CDOL:

9F0206 9F0306 9F1A02 9505 5F2A02 9A03 9C01 9F3704 9F3501 9F4502 9F4C08 9F3403

9F0206 9F0306 9F1A02 9505 5F2A02 9A03 9C01 9F3704 9F3501 9F4502 9F4C08 9F3403 9F2103 9F4005

9F0206 9F0306 9F1A02 9505 5F2A02 9A03 9C01 9F3704 9F3501 9F4502 9F4C08 9F3403 9F5301

EMV 书 2 说:

为了获得表 7 中指定的恢复数据,使用发行者公钥结合相应的算法,对签名静态应用数据应用附件 A2.1 中指定的恢复函数。如果 Recovered Data Trailer 不等于“BC”,则 SDA 失败。

我知道解密恢复数据之前的第一步是获取颁发者公钥(带有 RID、AID 的前五个字节和证书颁发机构公钥索引),然后将其与恢复功能一起使用来解密签名的应用程序数据.

所以我的问题是:

  1. 如何获得带有 RID 和公钥索引的颁发者公钥?

  2. 任何人都可以帮助我理解这个恢复功能以便开发一个功能,或者 Java 中是否有任何现有的功能可以做到这一点?

PS:在现有功能的情况下,如果可能的话,我还想解释一下^^

4

3 回答 3

3
How do I get this Issuer Public Key with RID and Public Key Index ?

在真实场景中,颁发者将自签名证书发送给 CA,而在还原时,CA 将证书连同其公钥 - CA PUBLIC KEY一起提供。

相同的公钥存储在终端中。

当终端读取 EMV 卡的 AFL 数据时,它会读取 Tag 90 - I ssuer Public Key Certificate并使用存储的 CA 公钥对其进行解密,

它将颁发者公钥提供给终端,然后终端相应地使用颁发者公钥。

希望这有助于理解 EMV 的证书概念。

于 2015-08-13T06:25:07.903 回答
2

Found the solution finally for those who want ^^

  1. When it says that you need the RID and the Index, it's because :

[..] each terminal shall be able to store six certification authority public keys per Registred Application Provider (RID) [..]

And the society I'm working with had these CAPK.

  1. It appears that the encryption used is RSA, and now that I have the public key, it's !
于 2015-07-16T15:39:29.777 回答
1

您可能会发现javaemvreader非常有用。

于 2015-07-17T20:56:10.887 回答