从欧洲DTCO公司卡读取数据
Posted
技术标签:
【中文标题】从欧洲DTCO公司卡读取数据【英文标题】:Reading data from European DTCO company card 【发布时间】:2012-05-22 15:00:08 【问题描述】:我需要能够从欧洲数字行车记录仪公司卡(智能卡)中读取卡和公司识别数据。这些在文档COMMISSION REGULATION (EC) No 1360/2002 中进行了描述,但我遇到了问题。我需要能够读取的数据包含在文件 EF 标识 中,必须使用安全消息来读取该文件,因此我需要发出 Manage Secure Environment APDU 命令这需要一个密钥标识符来标识卡上的密钥。
我不知道在哪里可以找到这些关键标识符或构成它们的数据(在文档的附录中描述)。我正在等待我们在欧洲的合作伙伴的反馈,但我想借此机会在这里提问,希望有人会这样做并能够提供一些建议。
密钥标识符由设备序列号、日期、制造商代码和制造商特定类型组成。这表明存在问题,因为我需要能够从任何公司卡访问数据,无论制造商、发行人或持有人如何。不知道如何获取数据来组成密钥。
我意识到这是非常专业的信息,但已经停滞了一个多星期,所以我非常渴望找到解决方案,以便我可以继续。
【问题讨论】:
【参考方案1】:我相信您首先必须从国家 CA 获得证书。然后,您可以执行以下算法(从附录 11 第 4 节简化):
-
选择并读取卡证书 (EF_CERTIFICATE)
发出管理安全环境命令以选择根 CA 公钥
颁发带有国家 CA 证书的验证证书
发出管理安全环境命令以选择国家 CA 公钥
使用您的证书颁发验证证书
发出管理安全环境命令以选择您的公钥
发出内部验证命令。验证响应。
发出获取挑战命令
发出外部身份验证命令
计算会话密钥
选择文件 EF_IDENTIFICATION
使用安全消息传递执行读取二进制命令(您需要会话密钥来计算校验和并解密结果)。
【讨论】:
感谢您的帮助,但事实证明,我们昨天才知道,我们没有必要这样做。我们受委托替换的应用程序不会访问卡上的安全信息,而是使用开放的与应用程序无关的序列号(来自 EF ICC 的 cardExtendedSerialNumber)来识别哪个卡在哪个读卡器中,并与用户输入的内容一起使用应用程序特定的卡号创建一个表,该表可用于寻址包含特定卡的读卡器。我们被告知要做同样的事情。 @Steve:啊,简单多了。感谢您发布后续消息。【参考方案2】:我不知道标准,但我假设您读出了EF Card_Certificate
,恢复证书内容并从中提取密钥标识符。
假设您拥有根证书(在此处发布:http://dtc.jrc.it/erca_of_doc/EC_PK.zip),您需要:
-
读取 EF CA_Certificate
遵循附录 11 第 3.3.3 节中的算法
从证书内容中提取 CA 公钥
读取 EF Card_Certificate
遵循附录 11 第 3.3.3 节中的算法
密钥标识符现在应该是已恢复证书内容的 20-27 字节。
【讨论】:
我想知道这是否可能。我已经可以阅读 Card_Certificate,我将深入研究规范,看看它是否包含我需要的标识符。 @Steve Crane:我浏览了标准并添加了更多指针。 谢谢,这是最有帮助的。如果您不熟悉使用智能卡、密钥和证书,尝试遵循该标准并不容易。 取得了一些进展,但仍然有些挣扎。当您说“假设您拥有根证书”时,这是否意味着我们需要从卡以外的地方获得证书才能完成身份验证过程?我没有这样的证书。你怎么得到一个?当我们正在编写一个需要一个的应用程序时,我们是否需要请求某个权威机构向我们颁发一个? @Steve Crane:我相信根证书是 ECRA 发布的。以上是关于从欧洲DTCO公司卡读取数据的主要内容,如果未能解决你的问题,请参考以下文章
使用C#,nmodbus4,实现了读取单个从站的数据,使用2个timer读取2个从站时,程序卡死。