GM-T 0017-2023 智能密码钥匙密码应用接口数据格式规范_第1页
GM-T 0017-2023 智能密码钥匙密码应用接口数据格式规范_第2页
GM-T 0017-2023 智能密码钥匙密码应用接口数据格式规范_第3页
GM-T 0017-2023 智能密码钥匙密码应用接口数据格式规范_第4页
GM-T 0017-2023 智能密码钥匙密码应用接口数据格式规范_第5页
已阅读5页,还剩223页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

智能密码钥匙密码应用接口数据格式规范国家密码管理局发布I前言 引言 V 1 1 1 24.1符号 24.2缩略语 2 3 46.1概述 4 4 5 6 67.1概述 67.2CLA(类别)字节 77.3INS(指令)字节 77.4参数字节 7.5数据字段字节 7.6状态字节 8.1设备管理指令 8.2访问控制指令 8.3应用管理指令 8.4文件管理指令 8.5容器管理指令 8.6密码服务指令 8.7验证调试类指令 9.1使用要求 9.2CCID协议 Ⅱ 附录B(规范性)安全报文计算过程 附录C(资料性)编程范例 附录D(规范性)SM9APDU指令 附录E(资料性)SM9算法编程范例 210附录G(规范性)BLE接口协议 217参考文献 Ⅲd)更改了缩略语“CBC”“ECf)更改了APDU报文结构概述(见6.1,2012年版的7j)更改了ChangeDevAuthKey(修改设备认证密钥)指令的命令o)更改了GenRSAKeyPair(生成RSA签名密钥对)、ImportRSAKeyPair(导入RSA加密密钥mentDataAndKeyWithECC(SM2产生协商数据并计算会话密钥)和GenerateKeyWithECCt)更改了DecryptInit(解密初始化)指令的命令报文数据域,增加了“算法标识”字段VGB/T16649.3识别卡带触点的集成电路卡第3部分:电信号和传输协议2容器container密码设备中用于保存密钥所划分的唯一性存储空间。设备认证deviceauthentication智能密码钥匙对应用程序的认证。设备认证密钥deviceauthenticationkey用于设备认证的密钥。设备标签devicelabel设备的别名。4符号和缩略语4.1符号下列行号适用于本文件表示字事B和B2并APDU命合的服文数据长度APDU命令直的参数1ARDU命令的返回状态码2表示1个字节16进制数表示2个字节16进制数表示若干个字节16进制数4.2缩略语下列缩略语适用于本文件。APDU应用协议数据单元(ApplicationProtocolDataUnit)API应用编程接口(ApplicationProgrammingInterface)ASCII美国信息交换标准码(AmericanStandardCodeforInformationInterchange)BLE低功耗蓝牙(BluetoothLowEnergy)CBC密文分组链接(CipherBlockChaining)CCID集成电路卡接口设备(IntegrctedCircuitsCardInterfaceDevice)CLAAPDU的类型字节(ClassType)COS卡操作系统(CardOperatingSystem)ECB电码本(ElectronicCodebook)HID人机接口设备(HumanInterfaceDevice)3NFCAPDU的命令字节(InstructionByteofCom设备2设备1设备nNFC46APDU报文结构1234命令头命令体[Lc字段][数据字段][Le字段]按照表1中的4种情况,对应的命令APDU的4种结构见图3。情况1 情况2 命令头Le字段情况3Lc字段Lc字段图3命令APDU的4种结构5载了1个或2个长度字段;B1是第1个长度字段的一部分。表2命令APDU的编码1234 0,则期望返回数据的65536字节。6——没有字节用于值为0的Le。情况4:L=5+(B₂|B₃),(B₁)=0,并且(B₂|B₃)≠0。——Lc字段由前3个字节组成,其中B₁=0,B₂和B₃为Lc(≠0)的实际值(1~65535),B₂为——B₄~BL2是数据字段中的Lc字节。——Le字段由最后的2个字节B1和B.组成,B为高位字节。若Le为0,则期望返回数据的65536字节。6.4响应APDU响应APDU结构见图5,本文件定义的响应APDU由下列内容组成:——必备的2字节状态字(SW1、SW2)。[数据字段]图5响应APDU结构7.1概述命令APDU的内容见表3。表3命令APDU内容类别1指令的类别1参数11指令参数11指令参数23在命令的数据字段中发送的字节串7表4响应APDU内容在响应的数据字段中收到的字节串状态字节111100x1000— 一1001—INS表示请求处理的命令。按照GB/T16本文件定义的INS代码见表6。值8表6本文件定义的INS代码(续)值章条CE05GenerateAgreementDataWGencrateAgreementDataAndKeyW9表6本文件定义的INS代码(续)值章条表6本文件定义的INS代码(续)值章条产品支持SM9算法的SM9算法指令应行合附录D百规定7.4参数字节7.5数据字段字节在数据字段(即DATA域中的数据)中对本文件定义的数据结构(复合数据类型)进行传输时,结构体中的基本数据类型租大整数均以BigEndian(高位字节在前)方式进行编码,整个结构体以紧缩格式进行编码(即各数据元素之间以单字节对齐)。7.6状态字节响应的状态字节SW1SW8表示了智能密码钥匙内的处理状态。本文件定义的状态字节值的结构方案见图6。正常处理警告处理执行出错检验出错图6状态字节的结构方案本文件定义的SW1SW2编码的一般含义见表7。对于每个命令,相应的条款提供了更详细的含义。常用的状态字节的定义和说明应符合附录A的规定。当SW1的值为65,68,69和6A时,SW2的值见表8~表11。处理正常,无进一步限定(SW2=00,其他值都是RFU)(在SW2中进一步的限定,见表8)(在SW2中进一步的限定,见表9)(在SW2中进一步的限定,见表10)(在SW2中进一步的限定,见表11)没有信息被给出写EEPROM出错没有信息被给出没有信息被给出引用的数据无效没有信息被给出数据字段中的参数不正确文件未找到无足够的文件存储空问不正确的参数P1、P2引用的数据未找到见表12。1111 3不存在意义正确执行写EEPROM失败长度错误(Lc与DATA域数据长度不一致)不满足安全状态113期望返回全部设备信息typedefstructStruct_costypedefstructStruct_Version{意义规则设备厂商信息以“\O’为结束符的ASCII字符串发行厂商信息以‘\0’为结束符的ASCII字符串以‘\0’为结束符的ASCII字符串以‘\0’为结束符的ASCII字符串分组密码算法标识的编码规则:从低位到高位,第0位~第7位为0,第8位~第15位~第31位按位表示非对称密码算法类型。当多密码杂凑算法标识的编码规则:法,第8位~第31位为0。当多个密码杂凑算法同时存在时,可用“或”的形式表示。详细定义应符合持多种认证算法,各算法按照与AlgSymCap同样的表15设备信息描述(续)数据项意义规则设备总空间大小用户可用空间大小设备支持的APDU命令数据域最大长度3:通过设备自带的键盘输人PIN码。WOR日3:显示按键玉(不造理盘);显示按键Key(自带键盘,可用于输入PIN码);0表余有限制0表示不限制用于今后扩展使用意义次版本号智能密码钥匙可能回送的状态码见表17。表17GetDevInfo命令响应状态码意义执行此命令前,应通过取随机数命令从设备获取8字节随机数。设备认证流程应符合GM/T0016见表18。表18DevAuth命令报文编码1—1—13不存在P2的定义见表19。表19P2的定义定义SM4(设备一定支持,默认算法)命令报文数据域由加密的认证数据组成。表20DevAuh命令晌应状态码意义正确执有0认证方法锁定引用数据无效ChangeDevAuthKey命令用于更改设备认证密钥。见表21。11113新设备认证密钥的密文数据+消息鉴别码(MAC)数据元(4字节)—不存在P2的定义见表22。表22P2的定义定义SM4(设备一定支持,默认算法)命令报文数据域由新设备认证密钥的密文数据和消息鉴别码(MAC)数据元组成,用于加密及MAC运算的密钥为原设备认证密钥。数据加密及MAC运算过程应符合附录B的规定。智能密码钥匙可能回送的状态码见表23。意义写EEPROM失败长度错误(Lc与DATA域数据长度不一致)设备认证密钥已经锁定引用数据无效校验失败,X为可重试次数(设备内在MAC校验失败时返回此错误代码)1111PIN类型(0x00为管理员PIN,0x01为用户PIN)32最大重试次数(1字节)+当前剩余重试次数(1字节)+出厂默认PIN码状态(1字节)意义没有打开应用长度1111PIN类型(0x00为管理员PIN,0x01为用户PIN)3应用ID(2字节)+新PIN的密文数据十消息鉴别码(MAC)数据元(4字节)不存在意义正确执行写EEPROM失败长度错误(Lc与DATA域数据长度不一致)表27ChangePin命令响应状态码(续)意义引用数据无效校验失败,X为可重试次数(设备内在MAC校验失败时返回此错误代码)数据域不正确(新PIN码加密的补足错误)1111PIN类型(0x00为管理员PIN,0x01为用户PIN)3应用ID(2字节)+加密的校验数据(16字节)不存在智能密码钥匙可能回送的状态码见表29。意义长度错误(Lc与DATA域数据长度不一致)引用数据无效没有打开应用参数P1、P2不正确8.2.7UnblockPin(解锁PIN)见表30。表30UnblockPin命令报文编码长度11113应用ID(2字节)+新用户PIN的密文数据十消息鉴别码(M不存在加密及线路保护密钥为管理员PIN经过密码杂凑运算(使用SM3算法)后的前16字节数据。加密以及MAC运算使用SM4算法。数据加密及MAC运算过程应符合附录B的规定。智能密码钥匙可能回送的啾态码见表31表31UnblockPin命令响应状态码意义0正确执行写EEPROM头贩0认证方法锁定8引用数据无效ClearSecureState命令用于清除指定应用的安全状态。安全状态至少包括PIN码认证状态。见表32。长度11113不存在意义长度错误(Lc与DATA域数据长度不一致)没有打开应用见表34。长度1 1l 3cosAPPLICATIONINFO结构体的大小coAPDIICATONNEO结构体的字节流组码数据命令报文数据为以下结梅体以紧缩格武表示)的流编码数据。typedefstuctStructPPuiONGdwAdmoBioRcrryCoum,7管理员日令重试次数ULONOdwUserPinRetryCount;//符合GM/T0016坤的权限类型定义。智能密码钥匙可能回送的状态码见表35。表35CreateApplication命令响应状态码意义长度错误(Lc与DATA域数据长度不一致)设备空间不足,无法创建更多应用见表36。11 113智能密码钥匙可能回送的状态码见表37。表37EnumApplication命令响应状态码意义正确执行,所有数据都已经返回长度错误(Lc与DATA域数据长度不一致)CLA错误DeleteApplication命令用于删除设备见表38。111 13应用名称长度(不含‘\0’字符)智能密码钥匙可能回送的状态码见表39。意义长度错误(Lc与DATA域数据长度不一致)见表40。11 11 3应用名称长度(不含‘\0'字符)2数据类型说明0441516282过此ID引用打开的应用意义长度错误(Lc与DATA域数据长度不一致)已有打开的应用,当前设备不支持同时打开多个应用见表43。长度11113不存在意义长度错误(Lc与DATA域数据长度不一致)引用的应用不存在长度111应用ID的高字节1X3FILEATTRIBUTE结构体的大小不存在表46。数失型说明04文件大小44写权限控制标识意义长度错误(Lc与DATA域数据长度不一致)引用的应用不存在同名文件已存在见表48。1—1113文件名长度文件名不存在意义长度错误(Lc与DATA域数据长度不一致)引用的应用不存在写EEPROM失败见表50。表50FnumFiles命令报文编码11不存在不存在3智能密码钥匙可能回送的状态码见表51。意义1—1113文件名长度文件名2数据类型说明04文件大小4484写权限控制标识智能密码钥匙可能回送的状态码见表54。意义长度错误(Lc与DATA域数据长度不一致)RcadFile命令用于从指定文件的指定开始位置读取指无。见表55。表55ReadFile命令报文编码111—32命令报文编码见表56。数据类型说明022242据)628响应报文数据的长度由Le的值决定(Le的值应与命令报文编码中的wReadLen相等)。如果Le智能密码钥匙可能回送的状态码见表57。表57ReadFile命令响应状态码意义见表58。1113不存在命令报文编码见表59。表59WriteFile命令报文数据域编码数据类型说明02224262待写入数据的长度待写入数据智能密码钥匙可能回送的状态码见表60。意义长度错误(偏移量和Lc之和超过文件长度)见表61。1 1 1 1 32意义长度错误(Lc与DATA域数据长度不一致)写EEPROM失败引用的应用珠找到见表63。111132返回容器ID值(2字节)智能密码钥匙可能回送的状态码见表64。意义长度错误(Lc与DATA域数据长度不一致)引用的应用未找到见表65。111 13应用ID(2字节)和容器ID(2字节)不存在命令报文数据由应用ID和待关闭的容器ID组成。智能密码钥匙可能回送的状态码见表66。表66CloseContainer命令响应状态码意义长度错误(Lc与DATA域数据长度不一致)引用的应用未找到引用的容器未找到8.5.5EnumContainei(枚举容器)EnumComainer命令用于枚举特定应用中存在的所有容器。已经打开该应用的情况下风香毗命令见表67。表67EnumContainer命令报文编码表述1113应用ID(2字节)2命令报文数据为应用ID。响应报文数据是返回的容器名称列表。每个应用的名称以单个‘\0’结束,以双‘\0’表示列表的结束。智能密码钥匙可能回送的状态码见表68。意义长度错误(Lc与DATA域数据长度不一致)引用的应用未找到8.5.6DeleteContainer(见表69。—1113不存在意义长度错误(Lc与DATA域数据长度不一致)引用的应用未找到指定的容器未找到111132 数据类型说明01容器类型,0表示未定、尚未分配类型或者为空容器,11454911意义长度错误(Lc与DATA域数据长度不一致)引用的应用未找到指定的容器未找到1111 3应用ID、容器ID和数字证书信息不存在数据类型说明022241549意义长度错误(Lc与DATA域数据长度不一致)引用的应用不存在见表77。111132见表78。表78ExportCertificate响应报文数据域编码数据类型说明044智能密码钥匙可能回送的状态码见表79。意义引用的容器不存在引用的应用不存在8.6中APDU指令的编程范例见附录C。SM2算法的使用应符合GB/T35276中的规定。见表80。表80GenRandom命令报文编码值1111不存在不存在3智能密码钥匙可能回送的状态码见表81。表81GenRandom命令响应状态码意义8.6.3GenRSAKeyPair(生成见表82。表82GenRSAKeyPair命令报文编码11—11 3应用ID(2字节)+容器ID(2字节)+RSA密钥位长度(2字节)2报文数据域为应用ID(2字节)+容器ID(2字节)+RSA密钥位长度(2字节)。响应报文数据域为签名密钥对的公钥数据。见表83。表83GenRSAKeyPair响应报文数据域编码数据类型说明04一般为0x00010001智能密码钥匙可能回送的状态码见表84。表84GenRSAKeyPair命令响应状态码意义正确执行长度错陕(Ec与DAF域数度不致)不满足安金状态功能不支导空间不是引用的应用不存在引用的容器不存在8.6.4ImportRSAKePair(导入RSA加密密钥对)ImportRSAKeyPair命令在指定应用的容器中导入RSA加密公私钥对。应通过用户权限验证。使用RSA算法时,不宜支持2048位以下的密钥位长度。见表85。1—1 3 不存在保护的RSA加密私钥组成。RSA私钥的格式使用PKCS#1中定义的私钥格式数据类型说明022244用于加密待导入的加密密钥对私钥的会话密844待导入加密密钥对的密钥位长度4待导入加密密钥对私钥密文长度(字节数)智能密码钥匙可能回送的状态码见表87。意义长度错误(Lc与DATA域数据长度不一致)空间不足引用的容器不存在引用的应用不存在8.6.5RSASignData(RSA签名)见表88。1111:输入为待签名数据的原文,在设备内进行密码杂凑运算和PKCS≠1编码签名;其他情况则先进行PKCS#1编码,然后签名132智能密码钥匙可能回送的状态码见表89。表89RSASignData命令响应状态码意义长度错误(Lc与DATA域数据长度不一致)引用的应用不存在引用的容器不存在RSAVerify命令用RSA公钥(从外部输入)对数据进行签名验证。见表90。表90RSAVerify命令报文编码1111:待验证数据为原文;2:待验证数据为原文做密码杂凑后的数据,若数据长1支持的密码杂凑算法:3公钥、待验签数据和签名数据无数据类型说明0444公钥模指数,一般为0x0001000142意义正确执行,验签成功长度错误(Lc与DATA域数据长度不一致)见表93。11132命令报文数据域见表94。数据类型说明02224484实际长度为BitLen/8字节4一般为0x00010001响应报文数据域编码见表95所示,会话密钥密文应按照PKCS#1的规定进行封装。数据类型说明022意义长度错误(Lc与DATA域数据长度不一致)引用的应用不存在引用的容器不存在见表97。表97ExtRSeoKeyOperat1113公钥、待运算数据2输出数据长度(为公钥模长的字节数)见表98。数据类型说明0444公钥模指数,一般为0x000100014意义正确执行,公钥运算成功长度错误(Lc与DATA域数据长度不一致)公钥运算失败11 1表100GenECCKeyPair命令报文编码(续)32期望返回的公钥数据字节长度命令报文各数据域见表101。数据类型说明0224见表102。数据类型锐明0ECCPUBLICKEYBLOB结构中的XCoordinECCPUBLICKEYBLOB结构中的YCoordin智能密码钥匙可能回送的状态码见表103。意义长度错误(Lc与DATA域数据长度不一致)引用的应用不存在引用的容器不存在1113导入的加密密钥对数据无typedefstructSKF_ENVELOPE//当前版本为1//用于加密待导入SM2密钥对的对称算法标识,限定为使用ECB模式对密钥对数据进行typedefstructStruct_ECCCIPHERBLOB(BYTEXCoordinate[ECC_MAX_XCOORDINATE_BITS_LEN/8];BYTEYCoordinate[ECC_MAX_YCOORDINATE_BITS_LEN/8];typedefstructStruct_ECCPUBLBYTEXCoordinate[ECC_MAX_XCOORDINATE_BITS_LEN/8];BYTEYCoordinate[ECC_MAX_YCOORDINATE_BITS_LEN/8];typedefstructStruct_ECCPRIVABYTEPrivateKey[ECC_MAX_MODULUS_BITS_LEN/8];数据类型说明02224484用于加密待导入加密密钥对的会话密钥算法标识4待导入加密密钥对的密钥位长度4待导入加密密钥对私钥密文长度(字节为单位)CPRIVATEKEYBLOB结构中的Priva效部分4ECCCIPHERBLOB结构体中X坐标和4ECCCIPHERBLOB结构体中的密文数智能密码钥匙可能回送的状态码见表106。表106ImportECCKeyPair命令响应状态码意义长度错误(Lc与DATA域数据长度不一致)引用的应用不存在引用的容器不存在ECCSignData命令使用指定容器中SM2签名私钥对输入数据进行签名并返回签名结果。见表107。1111:输入为待签名数据的原文。当使用SM2算法时,在设备内进行SM2预处2:输入的待签名数据为原始数据的杂凑值。当使用S(SM2的预处理过程遵守GB/T35276的要求)1 3P1=1时,应用ID(2字节)+容器ID(2字节)+用户ID长度(4字节)十用户ID值十输入的待签名数据;P1=2时,应用ID(2字节)十容器ID(2字节)十输入2期望设备返回所有签名结果数据typedefstructStruct_ECCSIGNATUREBLOB{BYTEr[ECC_MAX_MODULUS_BITBYTEs[ECC_MAX_MODUL数据类型说明044rs意义长度错误(Lc与DATA域数据长度不一致)引用的应用不存在引用的容器不存在8.6.12ECCVerify(SM2验签)见表110。表110ECCVerify命令报文编码11—11 3公钥、签名数据和待验签数据 无见表111。数据类型说明044ECCPUBLICKEYBLOB结构中的XCoordinate,曲ECCPUBLICKEYBLOB结构中的YCoordinate,曲4待验证签名的数据长度待验证签名的数据RS智能密码钥匙可能回送的状态码见表112。意义正确执行,验签成功长度错误(Lc与DATA域数据长度不一致)8.6.13.1定义与范围ECClxpolSessionKe命冷在没备的指器中见表113值11113外部公钥数据2见表114。数据类型说明022244外部公钥的密钥位长度84typedefstructStruct_ECCCIBYTEXCoordinate[ECC_MAX_XCOORDINATE_BITBYTEYCoordin数据类型说明044ECCCIPHERBLOB中的HASH数据42意义长度错误(Lc与DATA域数据长度不一致)引用的应用不存在引用的容器不存在不支持的会话密钥算法标识见表117。11113外部公钥和待加密数据2见表118。表118ExtECCEncrypt命令报文数据域编码数据类型说明04外部公钥的密钥位长度4外部公钥ECCPUBLICKEYBLOB结构中的外部公钥ECCPUBLICKEYBLOB结构中的4待加密的数据长度待加密的数据见表119。数据类型字节长度说明044ECCCIPHERBLOB结构中的XCoordin点的X坐标ECCCIPHERBLOB结构中的YCoordin点的Y坐标4密文数据字节长度密文数据表120ExtECCEncrypt命令响应状态码意义长度错误(Lc与DATA域数据长度不一致)111132数据类型说明02224484发起方的ID长度数据类型说明044发起方SM2公钥ECCPUBLICKEYBLOB结发起方SM2公钥ECCPUBLICKEYBLOB结4发起方临时SM2公钥ECCPUBLICKEY-BLOB结构中的XCoordinate,曲线—发起方临时SM2公钥ECCPUBLICKEY-BLOB结构中的YCoordinate,曲线4智能密码钥匙可能回送的状态码见表124。意义长度错误(Lc与DATA域数据长度不一致)引用的应用不存在引用的容器不存在GenerateAgreementDataAndKeyWithECC命令使用SM2密钥协商算法,产生协商参数并计算会见表125。11113会话密钥算法标识、发起方的SM2公钥、发起方临时SM2公钥、发起方ID、响2见表126。数据类型字节长度说明02224484发起方SM2密钥对的密钥位长度发起方SM2公钥ECCPUBLICKEYBLOB结构中的XCoordinate,曲线上点的X坐标发起方SM2公钥ECCPUBLICKEYBLOB结构中的YCoordinate,曲线上点的Y坐标4发起方临时SM2密钥对的密钥位长度发起方临时SM2公钥ECCPUBLICKEY-BLOB结构中的XCoordinate,曲—发起方临时SM2公钥ECCPUBLICKEY-BLOB结构中的YCoordinate,曲坐标4发起方的ID长度4响应方的ID长度响应方的ID见表127。数据类型说明04响应方SM2密钥对的密钥位长度4响应方SM2公钥ECCPUBLICKEYBLOB结响应方SM2公钥ECCPUBLICKEYBLOB结4响应方临时SM2密钥对密钥位长度响应方临时SM2公钥ECCPUBLICKEY-BLOB结构中的XCoordinate,曲线上点的X响应方临时SM2公钥ECCPUBLICKEY-BLOB结构中的YCoordinate,曲线上点的Y2意义长度错误(Lc与DATA域数据长度不一致)引用的应用不存在引用的容器不存在见表129。1 113密钥协商句柄、响应方SM2公钥、响应方临时SM22见表30。说明0WOR段2224发起方的密钥协商句柄84响应方SM2公钥ECCPUBLICKEYBLOB结构中的XCoordinato,丽线上点的X坐标BYTEARRAY响应方SM2公钥ECCPUBLICKEYBLOB结响应方临时SM2密钥对密钥位长度响应方临时SM2公钥ECCPUBLICKEY-BLOB结构中的XCoordinate,曲线响应方临时SM2公钥ECCPUBLICKEY-BLOB结构中的YCoordinate,曲线4响应方的ID长度响应方的ID见表131。数据类型说明02智能密码钥匙可能回送的状态码见表132。表132GenerateKeyWithECC命令响应状态码意义长度错误(Lc与DATA域数据长度不一致)引用的应用不存在引用的容器不存在无见表133。表133ExportPublicKey命令报文编码11100表示签名公钥,01表示加密公钥13数据域长度2期望获取的公钥长度。如果为0,表示获取实际长度的公钥数据表134ExportPublicKey命令报文数据域编码数据类型字节长度说明0222数据类型说阴04BY个LCARRAY说明04BitLen/8曲线上点的X坐标BitLen/8曲线上点的Y坐标数据类型字节长度说明04用户标识长度4SM9用户标识智能密码钥匙可能回送的状态码见表138。引用的应用不存在引用的容器不存在11—13数据域长度—2期望获取的会话密钥ID长度数据类型说明02224484141;当容器为RSA类型时,此参数为RSA公钥加表141用SM2公钥加密的会话密钥密文数据类型字节长度说明044ECCCIPHERBLOB结构中的XCoordin点的X坐标ECCCIPHERBLOB结构中的YCoordin点的Y坐标4密文数据字节长度密文数据数据类型字节长度说明04PAIRKEYPACKAGEBLOB结构中的长度4响应报文的数据域为对应导入的会话密钥的ID。智能密码钥匙可能回送的状态码见表143。意义Lc错误(Lc不满足解密条件)P1/P2参数错误(算法不支持)引用的容器不存在空间不足不支持的会话密钥算法标识见表144。11113数据域长度命令报文数据域见表145。说明022242642BYTEARRAY4意义引用的会话密钥不存在引用的应用不存在引用的容器不存在11113数据域长度应用ID(2字节)+容器ID(2字节)十密钥ID(2字节)数据2期望回送的密文数据长度。如果为0,表示回送实际长度的密文数据引用的对称密钥不存在数据错误(密钥句柄与EncryptInit命令指定的不符)引用的应用不存在引用的容器不存在对同一密钥的Encrypt命令或EncryptFinal命令,则应重新下传EncryptInit命令。见表149。长度1111 3数据域长度c应用ID(2字节)+容器ID(2字节)+密钥ID(2字节)+待2期望回送的密文数据度。如果为0,表示回送实命令服文数据域由应用容器ID、和待的一个或多个明文分组数据组成。响应报文数据域为期望长度的密文数据。智能密码钥匙可能回送的状态码见表150。表150EncryptUpdate命令响应状态码意义引用的对称密钥不存在引用的应用不存在引用的容器不存在11—113数据域长度应用ID(2字节)+容器ID(2字节)十密钥ID(2字节)+组数据或不存在2期望回送的密文数据长度。如果为0,表示回送实际长度的密文数据意义引用的对称密钥不存在引用的应用不存在引用的容器不存在11X数据类型字节长度说明0224264算法标识2起始向量的实际长度4反馈值的位长度意义引用的应用不存在引用的对称密钥不存在引用的容器不存在111 1 3数据域长度应用ID(2字节)+容器ID(2字节)+密钥ID(2字节)2期望回送的数据长度。如果为0,表示回送实际长度的数据意义引用的应用不存在引用的容器不存在1111长度3数据域长度应用ID(2字节)+容器ID(2字节)+密钥ID(2字节)2期望回送的数据长度。如果为0,表示回送实际长度的数据引用的对称密钥不存在引用的应用不存在引用的容器不存在1113数据域长度应用ID(2字节)十容器ID(2字节)+密钥ID(2字节)十组数据或不存在2期望回送的明文数据长度。如果为0,表示回送实际长度的明文数据意义引用的应用不存在引用的容器不存在引用的密钥不存在见表162。表162DigestInit命令报文编码111—13当算法为SHA256时,Lc和DATA域不存在当算法为SM3且Lc和DATA域不存在时,表示使用SM3算法进行密码杂凑当算法为SM3且Lc和DATA域存在时,表示执行SM2算法签名预处理1操对于算法为SM3且Lc存在时,输入数据为签名者公钥、签名表163DigestInit命令报文数据域编码数据类型字节长度说明04外部SM2密钥对的密钥位长度44智能密码钥匙可能回送的状态码见表164。意义长度错误(Lc与DATA域数据长度不一致)引用的应用不存在8.6.29.3命令报文见表163表165Digest命令报文编码值11113消息数据的长度消息数据2意义正确执行长度错误(Lc与DATA域数据长度不一致)1111—3消息数据的长度消息数据意义正确执行长度错误(Lc与DATA域数据长度不一致)见表169表169DigestEjhaI命令报文编码值值113消息数据的长度消息数据2意义正确执行长度错误(Lc与DATA域数据长度不一致)11 11 3表172MACInit命令报文数据域编码数据类型说明02224264分组密码算法标识24智能密码钥匙可能回送的状态码见表173。表173MACInit命令响应状态码意义长度错误(Lc与DATA域数据长度不一致)数据字段中的参数不正确MAC命令用于计算单包数据的消息鉴别码。见表174。长度11—13应用ID(2字节)+容器ID(2字节)十密钥ID(2返回的MAC结果的数据长度意义长度错误(Lc与DATA域数据长度不一致)1113应用ID(2字节)+容器ID(2字节)+密钥ID(意义长度错误(Lc与DATA域数据长度不一致)长度11113应用ID(2字节)+容器ID(2字节)+密钥ID(2返回的MAC结果的数据长度意义长度错误(Lc与DATA域数据长度不一致)表180HMACInit命令报文编码1l13表181IwACtai命令服文数据域编码税明02224264无响应数据智能密码钥匙可能回送的状态码见表182。表182HMACInit命令响应状态码意义长度错误(Lc与DATA域数据长度不一致)数据字段中的参数不正确1111—3应用ID(2字节)+容器ID(2字节)+密钥ID(2意义长度错误(Lc与DATA域数据长度不一致)下传HMACUpdate命令之前,应下传HMACInit命令初始化带密钥的杂凑运算操作。HMA-CUpdate命令以下传HMACFinal命令作为结束。见表185。表185HMACUpdate命令报文编码1脸用ID(2容器节)十密钥ID(智能密码钥匙可能回送的状态码见表186表186HMACUpdate命令响应状态码意义长度错误(Lc与DATA域数据长度不一致)长度1111一3应用ID(2字节)+容器ID(2字节)十密钥ID(2返回的HMAC结果的数据长度意义长度错误(Lc与DATA域数据长度不一致)见表189。11 113应用ID(2字节)十容器ID(2字节)十密钥ID(2字节)智能密码钥匙可能回送的状态码见表190。意义长度错误(Lc与DATA域数据长度不一致)ExtRSAPriKeyOperation命令直接使用外部传入的RSA私钥对输入数据做私钥运算并输出11113外部私钥和待运算数据2输出数据长度(为公钥模长的字节数)数据类型说明0444一般为0x00010001实际长度为BitLen/8字节表192ExtRSAPriKeyOperation命令报文数据域编码(续)数据类型说明4待运算数据智能密码钥匙可能回送的状态码见表193。表193ExtRSAPriKeyOperation命令响应状态码意义正确执行长度错误(Lc与DATA域数据长度不一致)ExtECCDecrypt命令使用外部传入的SM2私钥对输入数据做解密运算并输出结果。见表194。11113外部私钥和待解密数据2见表195。数据类型字节长度说明04外部SM2密钥对的密钥位长度4ECCCIPHERBLOB结构中的XCoordin点的X坐标ECCCIPHERBLOB结构中的YCoordin点的Y坐标ECCCIPHERBLOB结构中的HASH数据,明文的4密文数据字节长度密文数据见表196。数据类型说明044智能密码钥匙可能回送的状态码见表197。表197ExtECCDecrypt命令响应状态码意义正确执行长度错误(Lc与DATA域数据长度不一致)ExtECCSign命令使用外部传入的SM见表198。—1113外部私钥和待签名数据2期望设备返回所有签名数据见表199。数据类型说明044外部私钥ECCPRIVATEKEYBLOB结构中的4待签名数据长度待签名数据数据类型说明0rs意义长度错误(Lc与DATA域数据长度不一致)11113命令报文数据2期望设备返回所有加密结果数据见表203,表203LISymmKeyEaorypl命令报文数据域编码字节长度说明0算法标识426对称密钥起始血度4待加密数据长度待加密数据响应报文数据为加密后的密文数据。智能密码钥匙可能回送的状态码见表204。意义正确执行长度错误(Lc与DATA域数据长度不一致)不支持的算法标识见表205。111132见表206。数据类型说明04算法标识426244待解密数据长度待解密数据智能密码钥匙可能回送的状态码见表207。意义长度错误(Lc与DATA域数据长度不一致)不支持的算法标识见表208。表208ExtHMAC命令报文编码1 111 32数据类型说明044264消息数据长度—消息数据意义正确执行长度错误(Lc与DATA域数据长度不一致)不支持的算法标识长度1111 322数据类型说明04一般为0x00010001实际长度为BitLen/8字节意义长度错误(Lc与DATA域数据长度不一致)长度本113SM2密钥对的密钥位长度2数据类型字节长度说明0ECCPUBLICKEYBLOB结构中的XCoordinate,曲ECCPUBLICKEYBLOB结构中的YCoordinate,曲ECCPRIVATEKEYBLOB结构中的Pri数据意义长度错误(Lc与DATA域数据长度不一致)智能密码钥匙可采用USB、蓝牙或其他通信接口。本章定义了智能密码钥匙采用USB或蓝牙应遵循的接口协议。USB定义了USBMassStorage、HID、CCID接口协议;蓝牙定义了BLE接口协CCID协议参考规范SpecificationforIntegratedCircuit(s)CardsInterfaceDevices,RevisionUSBMassStorage协议相关术语定义见表217。加状态码)SPC-2规范中定义的错误代码类型(参见SPC-2)行总线大容量存储类产品猝发传输规范,版本1.0,1999)BOT定义的数据项(详见BOT)BOT定义的数据项(详见BOT)BOT定义的数据项(详见BOT)Sma(optercms千temcec水塑非算机系统捷5CSE基衣命令-3)USB大容量存储设备类(TbeUSBmassstoraetevrecclas5是一种计算机和移动设备之间的传当设备(智能IC下读卡器或智能密码钥匙)采用USB(符合USB1.1以上规范)连接端口,符合USB大容量存储设备类中MSC和BOT规范时,插入到安装了MicrosoftWindows和Linux操作系统设备应使用USBMassStorageClass-Bulk-OmlyTransport规范叩的SCSI(SmallComputerSystemInterface,小型计算机系统接口)命令实现APDU命令响应对。设备宜支持SCSI的REQUEST_SENSE命令和实现CDROM媒体白启动的相关指令,这些指令参见SPC-3和MMC-4规范;REQUEST_SENSE命令用于应用管理软件从智能IC卡读卡器或智能密码钥匙读取错误类型9.3.3APDU命令响应对9.3.3.1.1发送APDU扩展指令定义通过USBMassStorage协议给智能密码钥匙发送APDU指令的格式定义见表218。域值011129“GMCAPIDFS”的ASCII码表示域值01令,则将命令发给主卡;0x12——为操作智能密码钥匙;12采用高位在前(BigEndian)格式,双字节34见第7章7APDU命令体域值0111域值01命令,则将命令发给主卡;0x12——为操作智能密码钥匙;12采用高位在前(BigEndian)格式3见第7章指令PREVENTALLOWMEDIUMRE智能IC卡读卡器或智能密码钥匙应支持的SenseKey和ASC&ASCQ见表223和表224定义。01表224ASC&ASCQ定义防操作冲突:为了避免设备受多线程和进程的操作冲突,底层定义了错误代码:0xCACB;1)收到APDU操作命令,执行命令;2)等待PC发来“接收响应”的CBW,如果接收到PC发来“接收响应”的CBW,返回响应,继续1;如果接收到PC发来“发送命令”的CBW,返回0xCACB的错误代码,继续2)。底层在等待接收PC发来“接收响应”的CBW过程中,设置最多等待CBW命令包时间内仍未收到“接收响应”的CBW,将停止等待增加等待时间扩展功能:1)一般操作设备的APDU命令等待时间设为1min2)当“发送命令”接收到0xCACD的SenseCode时,PC继续发送“接收响应”,并将该“接收响应”令还是接收到0xCACD的SenseCode,则退出HID协议相关术语定义见表225所示。表225HID协议相关术语HID(HumanInterfaceDevice)人机接口设备是计算机直接与人交互的设备。当设备(智能IC卡读卡器或智能密码钥匙)采用USB(符合USB1.1以上规范)协议,且符合USBHID规范时,插入到安装了MicrosoftWindows、Linux和MacOS操作NN数据包前3字节不写入数据区,从第4字节开始写入数据区,但应对第2字节进行分析,判断是否还有级级联发送的具体流程见图9。NN级联最后一包包头:0x210x0iLen,Len是最后一包出去包头的字节长度,这个长度包含了最后2字节的状态字。9.4.3.1.4HID延时处理HID设备在处理上位机的命令数据时,可能需要一定的时间,这段时间可能超出HID的可接受的响延时的处理实际上是交给了定时器去处理,当需要调用COS时就开启定时器和溢出中断使能,关掉串行中断使能。延时包的处理流程见图10IN令牌包Get_Repou包图10HID设备数据延时处理流程而且是在定时器溢出程序中完成的,在里面采用查询的方式。(规范性)设备返回码定义见表A.1。表A.1设备返回码定义说明长度错误(Lc与DATA域数据长度不一致)引用的数据无效SM数据对象不正确没有选择(打开)应用数据字段中的参数不正确无足够的文件存储空问引用的数据未找到引用的对称密钥不存在已有打开的应用,当前设备不支持同时打开多个应用引用的容器未找到表A.1设备返回码定义(续)说明不支持的会话密钥算法标识引用的密钥未找到a)在待加密数据前填充两字节的数据长度(以LittleEndian方式表示),作为加密过程的输入MAC是使用命令的所有元素(包括命令头)产生的,MAC是命令数据域中的一部分,长度为4字节。b)将设备回送的8字节随机数加上L-8个字节0x00,得到L字节结果作(CLA的低半字节置为0x4) 编程范例BYTEAuthData[16];/*取随机数*/RetValuc=SKF_Transmit(hDev,CommAPDU,CommLcn,RcspAPDU,&RcspLcn){/*错误处理*/{/*错误处理*/memcpy(Rand,RespAPDU,RcspL/*得到加密认证数据*/苦/*设备认证*/*P2=0x00;/*使用默认的SM4算法*/Lc十+;memcpy(Data,AuthDatRetValue=SKF_Transmit(hDev,CommAPDU,CommLen,Rcs{/*错误处理*//*错误处理*/}BYTE*CLA,*INS,*P1,*P2,*Lc,*Data,*Le;BYTECommAPDU[64],RespAPDU[64];ULONGRespLen;BYTEEncryptedNewAuthKey[16];/*得到加密认证数据*/i.使用外部设备或软件,使用原设备认证密钥,参照附录B,加密NewAuthKey并保存在En-/*修改设备认证密钥*/Lc十+;memcpy(Data,EncryptedNcwAuthKcRetValue=SKF_Transmit(hDev,CommAPDU,CommLcn,RespAPDU,&Res/*错误处理*/{/*锆误处理*/.BYTENewLabel[32]=wlbe";ULONGLabelLen=8;memcpy(Data,NewLabel,NewLabRetValue=SKF_Transmit(hDev,CommAPDU,CommLen,RespAPDU,&Res{/*错误处理*/{/*错误处理*/}/*使用设备认证接口,完成设备认证*//**设置应用信息*/APPLICATIONINFOappICHARszApplicatinName[32]CHARszAdminPin[16]="adminPin";memset(&applnfo,0,sizcof(appIstrcpy(appInfo.szApplicatinName,sstrcpy(appInfo.szAdminPstrcpy(appInfo.szUserPappInfo.bApplicationNameLen=strlen(szApplicatinName);appInfo.bAdminPinLen=strlen(appInfo.bUserPinLen=strlenappInfo.dwUserPinRetappInfo.byContainerNum=16;/*添加应用指令数据*/BYTE*CLA,*INS,*P1,×P2,*Lc,*DBYTECommAPDU[64+sizeof(appInfo)],RespAPDU[64];ULONGCommLen;BYTERand[16];memset(CommAPDU,0,sizcof(CommAmemset(RespAPDU,0,sizcof(RespAPDU));*INS=0x20;//Crmemcpy(Data,applhlo,sizcolCapp{/错误处理*/…Sw1=RespAPDU[Respleo-2{/*错误处理C.6删除应用/*使用设备认证接口,完成设备认证*//**设置应用名称信息*/CHARszApplicatinNamc[32]="appNa/*添加应用指令数据*/BYTE*CLA,*INS,*P1,*P2,BYTECommAPDU[64+sizeof(appInfo)],RespAPDU[64];/*删除应用*/memset(CommAPDU,0,sizeof(CommAmemset(RespAPDU,0,sizeof(RespALc[2]=strlen(szApplicamemcpy(Data,szApplicatinName,strlen(szApplicatCommLen=7+strlen(szAppRetValue=SKF_Transmit(hDev,CommAPDU,CommLen,RespAPDU/*错误处理*/}{/*错误处理*/}/*PIN码信息*/CHARszOldAdminPin[16]="oldAdminPCHARszNewAdminPin[16]/*指令数据*/BYTE*CLA,*INS,BYTECommAPDU[64+sizeof(appInfo)],/*打开应用*/memset(CommAPDU,0,sizcof(CommAmemset(RespAPDU,0,sizeof(RespALc[2]=strlen(szApplicamemcpy(Data,szApplicatinName,strlen(szApplicatLe=Data+strlen(szApplicatiCommLen=9+strlen(szAppRetValuc=SKF_Transmit(hDev,CommAPDU,CommLen,RespAPDU,&Rcs{/*错误处理*/}{/*错误处理*/}{/*错误处理*/}memcpy(pAppld,RespAPDU+/*取随机数*/memset(CommAPDU,0,sizeof(CommAmemset(RespAPDU,0,sizcof(RespA{/*错误处理*/}if((SW1!=0x90)||(SW{/*错误处理*/{/*错误处理*/}memcpy(pRandom,RespAPD/*对原PIN码进行SM3运算*//*加密NewAdminPIN*//*SM4(…)函数由软件实现*/SM4(sm3Hash,16,szNewAdminPin,16,enc/*修改PIN码*/memset(CommAPDU,0,sizeof(CommAmemset(RespAPDU,0,sizcof(RespA*P2=0x00//管理员PIN码memcpy(Data,pAppId,2);//pmemcpy(Data+2,cncNewAdminPIN,16);//encNew/*计算Mac,SM4_MAC由软件实现*/SM4_MAC(sm3Hash,16,pRandom,8,CommAPDU,7+2+16,/*/发送指令*/RetValuc=SKF_Transmit(hDev,CommAPDU,CommLen,Res《/*错误处理*/{/*错误处理*//*PIN码信息*/CHARszAdminPin[16]/*指令数据*/BYTECommAPDU[64+sizcof(appInfo)],RespAPDU[64];/*打开应用*/memset(CommAPDU,0,sizeof(CommAmemset(RespAPDU,0,sizcof(RespALc[2]=strlen(szApplicamemcpy(Data,szApplicatinName,strlen(szApplicatLc=Data+strlen(szApplicCommLen=9+strlen(szAppRetValuc=SKF_Transmit(hDev,CommAPDU,CommLen,RespAPDU,&RespLen);{/*错误处理*/}SW1=RespAPDU[RcspLen-2];{/*锆误处理*/…/*返回数据格式错误,后极取wApp{错误处理*//*获取AppID*/**取随机数*/memset(CommAPDU,0,sizcof(CommAPDU));memsct(RespAPDU,0,sizcof(RespARetValue=SKF_Transmit(hDev,CommAPDU,CommLen,RespAPDU,&RespLen);{/*错误处理*/}{/*错误处理*/}{/*错误处理*/}memcpy(pRandom,RespAP/**加密pRandom*//*SM4(…)函数由软件实现*/SM4(sm3Hash,16,pRando/**校验PIN码*/memset(CommAPDU,0,sizcof(Commmemset(RespAPDU,0,sizcof(RespAmemcpy(Data,pAppId,2);//pmemcpy(Data+2,cncRandom,16);//cnRetValuc=SKF_Transmit(hDev,CommAPDU,CommLen,RespAPDU,&RcspLcn);/*错误处理*/}{/*错误处理/C.9PIN解锁/*PIN码信息*/BYTE*CLA,INS,xPL,xP2,WEeBYTECommAPDO[64+sizcofULONGCommLcn;/*打开应用*/memset(CommAPDU,0,sizcof(CommAmemset(RespAPDU,0,sizeof(RespALc[2]=strlen(szApplicamemcpy(Data,szApplicatinName,strlen(szApplicatLe=Data+strlen(szApCommLen=9+strlen(szAppRetValue=SKF_Transmit(hDev,CommAPDU,CommLen,RespAPDU/*错误处理*/}if((SW1!=0x90)||(SW/*错误处理*/}/*错误处理*/}memcpy(pAppld,RespAPDU+/*取随机数*/memset(CommAPDU,0,sizcof(CommAmemset(RespAPDU,0,sizeof(RespARetValue=SKF_Transmit(hDcv,CommAPDU,CommLcn,RcspAPDU,&RespLen);/*错误处理*//*错误处理*/}{/*错误处理*/memcpy(pRandom,RespAPD/*对原PIN码进行SM3运算*//*加密NewUscrPin*/SM4(sm3Hash,16,szNewUserPin,16,/*解锁PIN码*/memset(CommAPDU,0,sizcof(CommAmemsct(RespAPDU,0,sizcof(RespAmemcpy(Data,pAppld,2);//pmemcpy(Data+2,encNewUserPIN,16);//encNewA/*计算Mac,SM4_MAC由软件实现*/SM4_MAC(sm3Hash,16,pRandom,8,CommAPDU,7+2+16,RetValue=SKF_Transmit(hDev,CommAPDU,CommLen,Res/*错误处理*/{/*错误处理×/}器*/BYTE*CLA,*INS,*P1,*P2,*Lc,*Data,*Le;ULONGRespLen;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论