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

使用GPShell向带DM权限的SSD写入RSA公钥失败及APDU格式困惑

解决GPShell写入DM RSA公钥的6A86错误及相关疑问

我来帮你一步步拆解这些问题,结合Global Platform规范和工具使用经验,整理如下:

一、排查6A86(P1/P2参数错误)的核心原因

返回6A86本质是命令的P1/P2参数不符合卡片的预期,常见触发场景和排查点:

  • GPShell脚本参数错误:导入DM RSA公钥的标准APDU是80 DA P1 P2 Lc Data,其中P1应设为0x00(表示导入公钥类型),P2通常设为0x00(默认密钥版本)。如果你的put_dm_keys命令填错了这两个参数,就会直接返回6A86。
  • 未正确选中目标SSD:执行put_dm_keys前必须用select -AID <你的SSD_AID>切换到目标安全域,如果误选中主域或其他SSD,参数逻辑不匹配也会触发错误。
  • 密钥类型不匹配:DM权限的SSD需要导入的是RSA公钥作为验证密钥,若GPShell命令误指定为对称密钥类型(比如MAC/ENC密钥),也会导致参数校验失败。

二、Global Platform密钥传输格式(Format1/Format2)解析

根据Global Platform Card Specification v2.2+的定义,密钥传输分为两种格式:

  • Format1(明文传输):格式为0x01 + 密钥长度 + 密钥明文HEX,适用于公钥这类无需保密的场景(比如DM验证公钥),测试环境下用这个最省心。
  • Format2(加密传输):格式为0x02 + 加密后密钥长度 + 加密密钥密文(含CMAC校验),需要用当前域的ENC密钥加密后传输,适合生产环境的对称密钥导入,公钥一般不需要用这个。

三、RSA公钥转HEX的正确姿势

你需要把OpenSSL生成的公钥转换为DER编码的纯十六进制字符串,步骤如下:

  1. 先将PEM格式公钥转成DER二进制格式:
    openssl rsa -in your_pubkey.pem -pubout -outform der -out pubkey.der
    
  2. 将DER文件转成无空格的HEX字符串:
    xxd -p -c 2000 pubkey.der > pubkey.hex
    
    注意:绝对不能包含PEM的头/尾标识(-----BEGIN PUBLIC KEY-----这类),必须是纯DER编码的二进制转HEX。

四、用Global Platform Pro(GPP)加载DM RSA公钥

完全可以用GPP完成这个操作,而且比GPShell更简洁,命令示例如下:
假设你的SSD AID是A000000151000000,RSA公钥的HEX文件是pubkey.hex,密钥类型为DM_RSA_PUB(对应GP规范的委托管理验证公钥):

java -jar gp.jar --put-key A000000151000000 --key DM_RSA_PUB --file pubkey.hex

如果需要指定密钥版本,加上--key-version 01参数即可。

内容的提问来源于stack exchange,提问作者Roman Gr.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:50:28