如何对智能卡进行终端认证?

问题描述 投票:0回答:2

我正在尝试使用智能卡电子签名应用程序对文档进行数字签名。这是国民身份证,我遵循

ICAO 9303
TR-03110
规范。如果我没记错的话,在选择
eSign
应用程序之前,我应该事先执行
Terminal Authentication
作为
Signature Terminal

ICAO 9303
中指出:

The following sequence of commands SHALL be used with secure messaging to implement Terminal Authentication:

MSE:Set DST
PSO:Verify Certificate
MSE:Set AT
Get Challenge
External Authenticate

Steps 1 and 2 are repeated for every CV certificate to be verified (CVCA Link Certificates, DV Certificate, Terminal Certificate).

要执行

MSE:Set DST
,应使用以下
APDU

INS - 0x22
P1/P2 - 0x81B6
Data - 0x83 Reference of a public key, ISO 8859-1 encoded name of the public key to be set

这是我不明白的

Data
部分。我到底需要在那里提供什么?如何找到公钥或其名称?

nfc digital-signature smartcard apdu contactless-smartcard
2个回答
2
投票

我到底需要在那里提供什么?如何找到公钥或其名称?

在开始 TA 之前,您应该确保终端拥有自己的有效简历证书链 + 正确的私钥:

  1. DV证书
  2. 终端IS证书
  3. IS证书对应的私钥

TA的第一步是证书链验证:

  1. 读取EF.CVCA并找到芯片已知的根证书的CHR
  2. 选择终端 DV 证书的父证书。 EF.CVCA 中的 CHR 必须等于 DV 证书中的 CAR。
  3. 发送 MSE:使用所选 CHR 设置 DST
  4. 发送PSO:用终端的DV证书验证证书
  5. 发送MSE:用终端DV证书的CHR设置DST(必须等于IS证书中的CAR)
  6. 发送PSO:用终端的IS证书验证证书 现在芯片知道终端的公钥,并可以用它来验证终端用其私钥签名的密码。

证书持有者参考 (CHR) 和证书授权参考 (CAR) 是编码为字符串值的 ID。


0
投票

JMRTD 图书馆可以提供帮助:

JMRTD:机器可读旅行证件的开源 Java 实现

完成终端认证的简单步骤如下

  • 首先IS(检查系统)将终端证书链发送到IC(芯片)。
  • IS 验证证书链并提取终端的公钥。
  • IC 向终端发送挑战。
  • 使用私钥签署挑战。
  • IC验证签名。

通过这种方式,IC 对终端进行身份验证并授予对敏感数据组的访问权限。

© www.soinside.com 2019 - 2024. All rights reserved.