我在Android上使用ISO 14443卡开发移动POS应用程序,我面临着一个相当重要的问题。
目前,我可以通过IsoDep.transceive
发送所有正确的APDU命令来读取卡中的所有公共数据
我目前必须处理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 Book 2说:
为了获得表7中指定的恢复数据,请应用恢复 附件A2.1中关于签名静态应用数据的功能 Issuer Public Key与相应的算法结合使用。如果 恢复的数据预告片不等于BC' SDA失败。
我知道解密恢复数据之前的第一步是获取发卡行公钥(带有RID,AID的五个第一个字节和证书颁发机构公钥索引),然后将其与恢复功能一起使用来解密签署的申请数据。
所以我的问题是:
如何获取具有RID和公钥索引的此发卡行公钥?
任何人都可以帮助我理解这个恢复功能,以便开发一个函数,或者Java中是否有任何现有函数来执行此操作?
PS:在现有功能的情况下,如果可能,我也想解释^^
答案 0 :(得分:2)
How do I get this Issuer Public Key with RID and Public Key Index ?
在Real方案中,颁发者将自签名证书发送给CA,并在还原CA中提供证书及其公钥 - CA PUBLIC KEY 强>
相同的公钥存储在终端中。
当终端读取EMV卡的AFL数据时,它读取标签90 - 我 ssuer公钥证书并使用存储的CA公钥解密它,
它向终端提供颁发者公钥,然后终端使用发行者公钥。
希望这有助于理解EMV的证书概念。
答案 1 :(得分:1)
最终为那些想要^^
的人找到解决方案[..]每个终端应能够为每个注册应用程序提供商(RID)存储六个证书颁发机构公钥[..]
与我合作的社会有这些CAPK。
答案 2 :(得分:1)
您可能会发现javaemvreader非常有用。