智能卡从 CA 证书中检索公钥

问题描述

我正在尝试读取行驶记录仪公司的智能卡。除了识别部分,我可以很好地读取所有数据。这是我真正需要的部分。当我选择那个 DF 时,安全环境被重置,我必须重新进行身份验证。该过程在 ECE/TRANS/SC.1/2006/2/Add.1 的子附录 11 中有描述。虽然这个文档对我来说有点难以理解。

在这图片中,您可以看到行车记录仪公司卡的数据结构。 ID 部分后面的“AUT”告诉您需要进行身份验证。

Company card memory map

在 SO 上询问 another question 并对如何使用公钥/私钥进行大量研究后,我想我对如何进行身份验证有了一些基本的了解。在文档中,还有一个关于如何完成身份验证的非常详细的流程图。不幸的是,把它放在这里太大了。但我对这部分有疑问:

Part of authentication steps

现在,我从上往下数。所以左上角的第一个方块是第一步,左下角的最后一个方块是第7步。中间部分箭头是需要发送到卡的APDU命令,右边部分是智能卡。 PK 表示公钥。 CA 是指证书颁发机构。

如果您不知道公钥,您会发现您需要同时获得卡和 CA 证书。我已经这样做了,我可以从卡上读取它们。我不明白的部分是第 6 步和第 7 步。你看我需要用欧洲公钥验证卡 CA.C(这是证书的一部分)。我从哪里获得欧洲公钥以及使用什么算法来解密它?

编辑 这是验证过程吗?如果是这样,它会说用 CA 公钥打开标志,我如何得到这个?

enter image description here

编辑 2 我从 this link 找到了欧洲公钥。卡上 CA 证书的 CAR 部分与公钥的前 8 个字节匹配。这意味着它是正确的公钥。现在,如果我理解正确,我需要打开上图 CSM_019 中的第三步之后的标志。要打开标志,我需要使用我查询的公钥的正确算法吗?有谁知道用的是什么算法?

解决方法

第 6 步:这里不需要解密:您验证签名,也是证书(Card.CA.C)的一部分,如果正确,则可以提取包含的密钥(卡 CA 的公钥)并用于下一步。

第 7 步:您验证卡证书的签名(使用刚刚检索到的 card.ca 密钥制作),如果正确,您现在拥有卡的公钥(确定它是正确的,否则签名)会不匹配)。

该方案使用这种两步法,因此只需要 Eur.PK 公钥,而不是所有卡 CA 的密钥。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...