智能密码钥匙应用接口与设备之间的数据交换以 APDU 的形式进行编码。应用协议中的一个步骤由发送命令、接收实体处理它以及发回响应组成。因此,特定的响应对应于特定的命令,称作为命令响应对。APDU 可包含有命令报文或响应报文,它从接口设备发送到密码钥匙,或者相反地由密码钥匙发送到接口设备。
相关标准:
GM/T 0017-2012 《智能密码钥匙密码应用接口数据格式规范》
主要命令报文编码,主要构成如下图

CLA为指令的类别,是对于INS来说是具体的指令代码。


1.设备管理指令:
SetLabel(设置设备标签)
SetLabel命令用于设置或修改设备的标签,以80 02开头进行筛选

GetDevInfo(获取设备信息)
GetDevInfo 命令用于获取设备的一些特征信息,包括设备标签、广商信息、支持的算法等。以80 04开头进行筛选

2.访问控制指令:
DevAuth(设备认证)
DevAuth 命令是设备对应用程序的认证,以80 10开头进行筛选,注意:执行此命令前,需要通过取随机数命令从设备获取8字节随机数。
ChangeDevAuthKey(修改设备认证密钥)
ChangeDevAuthKey 命令用于更改设备认证密钥,以84 12开头进行筛选。

GetPinInfo(获取PIN 信息)
GetPinlnfo命令是获取指定应用下的PIN 码信息,包括最大重试次数、当前剩余重试次数,以及当前 PIN 码是否出厂默认 PIN 码。

ChangePin(修改 PIN)
ChangePin 命令用来修改指定应用的管理员 PIN 值或者用户 PIN值。

VerifyPin(校验 PIN)
VerifyPin 命令是校验 PIN码。校验成功后,会获得相应的权限,如果 PIN 码错误,会返回PIN码的重试次数,当重试次数为。时表示 PIN 码已经锁死。

3.密码服务指令
ECCSignData(ECC 签名)
ECCSignData 命令采用指定容器中ECC签名私钥对输入数据进行签名并返回签名数据。

注意:
在进行APDU分析时,需要关注在智能密码钥匙中发生的具体业务,再根据命令报文进行分析,OUT和IN是成对出现。
例1 提取签名过程中的数据:
请分析A1.pcap和A1.txt数据,验证用户终端调用智能密码钥匙进行签名过程的真实性,指出调用过程,提交下表中数据。
| 问题 | 答案 |
|---|---|
| 提交APDU签名命令报文和待签名数据 | |
| 提交APDU签名响应报文并说明报文内容 | (截图或粘贴数据) |
| 提交签名证书和签名算法 | |
| 提交签名原文、签名值、PKCS标准格式 | |
| 简述用户终端调用签名控件和智能密码钥匙完成签名的过程 | (说明过程,并附证据截图) |
解答:
题目说的是调用智能密码钥匙进行签名的过程,根据A1.pcap数据包的分析,使用了ECC-SM2-SM3算法套件,所以在GM/T 0017中,查看ECC签名中智能密码钥匙的命令报文。
在A1.txt中搜索80 74开头的内容

各项值解释:
80 74: 长度占2个字节表示ECC签名
02: P1,占1个字节,在描述中这样解释:
当为1时:输入待签名数据的原文。当使用SM2算法时,需在设备内进行SM2 预处理,然后对预处理结果进行签名操作
当为2时:输入的待签名数据原始数据的杂凑值。当使用SM2算法时,该待签名数据为原始数据经过SM2签名预处理的结果(SM2的预处理过程见GM/T AAAA)其他值暂不支持
所以这里表示输入的待签名数据原始数据的杂凑值。
00:P2,不做解释
00 00 24: 长度3个字节,表示命令报文数据长度
10 00 30 01 f2 52 71 e2 cf 00 77 93 c3 57 6d 85 91 b7 d2 f8 cc 69 fd 0a b1 17 37 d6 37 82 63 b0 a1 43 51 bd 1c:
DATA值,当P1=1时,应用ID(2字节)+容器ID(2字节)+用户 ID长度(4/字节)十用户ID 值+输入的待签名数据
已在FreeBuf发表 0 篇文章
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)

