C# 使用行车记录仪智能卡进行外部身份验证

C# 使用行车记录仪智能卡进行外部身份验证,c#,smartcard,smartcard-reader,pcsc,C#,Smartcard,Smartcard Reader,Pcsc,我用带C的C从行车记录仪卡上读出识别数据 我只需要读出唯一的卡ID,就可以用一张驾驶员卡来完成,我会发送正确的APDU来完成这个任务。我现在正试图读出一张公司卡的ID,做同样的事情,如我能找到的文档(ECE/TRANS/SC.1/2006/2和子附录)中所述。这不管用 如果我正确理解文档,问题是在选择DF和EF之后,必须重新进行身份验证(仅在公司卡上),以从EF读取唯一标识数据。现在,通过阅读文档,我可以理解我必须使用“管理安全环境”来设置/请求公钥?然后使用“内部身份验证”、“获取挑战”,运行

我用带C的C从行车记录仪卡上读出识别数据

我只需要读出唯一的卡ID,就可以用一张驾驶员卡来完成,我会发送正确的APDU来完成这个任务。我现在正试图读出一张公司卡的ID,做同样的事情,如我能找到的文档(ECE/TRANS/SC.1/2006/2和子附录)中所述。这不管用

如果我正确理解文档,问题是在选择DF和EF之后,必须重新进行身份验证(仅在公司卡上),以从EF读取唯一标识数据。现在,通过阅读文档,我可以理解我必须使用“管理安全环境”来设置/请求公钥?然后使用“内部身份验证”、“获取挑战”,运行“外部身份验证”,最后使用“读取二进制文件”读取数据。但只有在将逻辑设置为正确的EF之后。这件事我说得对吗

如果我是正确的,有人知道我可以在哪里/如何从卡中请求公钥吗?使用什么算法来解密使用公钥的挑战,并最终将什么发送回卡


如果我没有正确理解,有人能解释使用行车记录仪智能卡进行身份验证的步骤吗?如果使用白痴术语,我将不胜感激,因为我对这一行完全陌生,仍在努力学习。

我多年来没有详细研究行车记录仪规格,但这可能有助于您开始:

  • 挑战只是一个随机数,你必须自己加密(对称算法)或签名(非对称算法)。之前必须定义适当的算法,因为卡必须遵循相同的规则进行检查
  • 外部身份验证更可能使用对称加密(没有人喜欢签署未知的东西,也可能是消息的哈希代码)
  • 检索公钥有两种标准化模式:
    • 作为对特殊生成非对称密钥对命令的响应(有一个命令,它只读取但不生成新密钥)
    • 或者在一些文件中使用标准的读取命令(例如,一个证书,它的优点是您可以检查它的签名)来读取。规范中必须说明哪种情况适用
  • ManageSecurityEnvironment只通知卡,在后续操作(如PSO)中使用哪个密钥,并给出其控件引用模板、id和使用限定符

很好,先生,谢谢。我会一整天都在调查这件事(如果没有人打扰我的话),我会让你随时了解最新情况。你以前也帮过我。你似乎是这些问题的堆栈溢出专家。谢谢你!后续问题:我尝试使用generatekeypair指令获取公钥。我在sw1和SW2上得到了错误,它拨到“指令代码不受支持或无效”。它应该是代码46或0x46,但这不起作用。不过,我可以阅读卡片证书。有没有办法从卡证书中提取公钥?它有196字节长。如果是这样的话,您是否知道应该阅读哪些文档?尝试0x47而不是0x46可能会有所帮助。原则上,您应该能够提取公钥。证书由1)公钥、2)附加信息(签名可能包含或不包含)3)指示、签名机构和4)签名组成。考虑到仅RSA-2048签名就需要256字节,您可以使用椭圆曲线公钥和签名。X.509是一个广泛使用的证书计划。非常感谢您的帮助!我目前正在实习,必须这样做。我会用这周剩下的时间来做这件事,我会告诉你最新的消息!在你的回答中,你说我必须使用之前必须定义的适当算法。你知道怎么做吗?使用MSE命令?另外,我想使用对称算术,但如果我理解正确的话。这需要一个所谓的“IV”。如何从卡片中检索?另一方面:0x47也不起作用,看起来。。。所以我读取了证书并试图从中获取数据。