You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

完成PACE令牌交换后,如何读取ePassport受保护DG4数据?

PACE认证后读取受保护DG4(访问条件10FFFF)的操作指南

针对你遇到的6982(安全状态不满足)和6986(命令不允许)错误,完成PACE GENERIC MAPPING令牌交换后,必须执行以下步骤才能访问DG4:

1. 激活并验证安全信道(SM)

PACE令牌交换仅完成密钥协商,需立即激活安全信道:

  • 向芯片发送MANAGE SECURITY ENVIRONMENT命令(示例:00 22 01 00 XX),指定后续命令的安全机制(如CMAC认证、数据加密),参数需匹配芯片配置
  • 发送SM保护的测试命令(如安全信道下的GET CHALLENGE),确认响应符合安全信道要求,验证会话密钥派生正确

2. 通过安全信道选中DG4文件

禁止使用未加密的SELECT命令访问DG4,必须走安全信道流程:

  • 先发送SM保护的SELECT命令选中EF.DIR(FID: 0100),获取DG4的文件标识符(通常为0104)
  • 再发送带SM保护的SELECT命令选中DG4,命令格式示例:00 A4 02 0C 02 01 04(需附加CMAC或加密封装)

3. 使用SM保护的命令读取DG4数据

所有访问受保护DG的命令必须经过安全信道处理:

  • 若启用CMAC认证:命令尾部需附加会话密钥生成的CMAC校验值
  • 若启用数据加密:命令参数和芯片响应都需用会话加密密钥加密
  • 禁止直接发送未保护的READ BINARY命令(如00 B0 00 00 FF),否则会触发6986错误

4. 验证访问权限匹配

访问条件10FFFF对应PACE认证后SM保护访问,需确认:

  • PACE认证使用的凭证(MRZ/CAN/PIN)具备DG4的访问权限(部分芯片要求PIN认证才能访问敏感DG)
  • 会话密钥的权限级别正确:需派生具备读取权限的SM密钥(而非仅认证密钥)

关键代码调整(基于你的C#实现)

在PACE认证函数完成令牌交换后,添加SM激活与文件访问逻辑:

// 激活安全信道(示例:设置CMAC认证+数据加密)
var activateSmCmd = new CommandApdu(0x00, 0x22, 0x01, 0x00, new byte[] { 0x80, 0x01, 0x02 });
var smResponse = SendApdu(activateSmCmd);

// 通过安全信道选中EF.DIR
var selectDirCmd = new CommandApdu(0x00, 0xA4, 0x02, 0x0C, new byte[] { 0x01, 0x00 });
var dirResponse = SendSecureApdu(selectDirCmd); // 封装SM保护的命令

// 通过安全信道选中DG4
var selectDg4Cmd = new CommandApdu(0x00, 0xA4, 0x02, 0x0C, new byte[] { 0x01, 0x04 });
var dg4SelectResponse = SendSecureApdu(selectDg4Cmd);

// 读取DG4数据(SM保护)
var readDg4Cmd = new CommandApdu(0x00, 0xB0, 0x00, 0x00, 0xFF);
var dg4Data = SendSecureApdu(readDg4Cmd);

注意:SendSecureApdu方法需实现SM的加密/CMAC生成逻辑,严格遵循ICAO Doc 9303 Part11的安全信道规范

内容的提问来源于stack exchange,提问作者Bouls

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:16:24