智能IC卡及智能密码钥匙密码应用接口规范修订版 - 图文(3)

2019-08-30 14:06

GBXX/T ××××-2009 SGD_SM1_MAC SGD_SSF33_ECB SGD_SSF33_CBC SGD_SSF33_CFB SGD_SSF33_OFB SGD_SSF33_MAC SGD_SMS4_ECB SGD_SMS4_CBC SGD_SMS4_CFB SGD_SMS4_OFB SGD_SMS4_MAC 0x00000400—0x800000xx 0x00000110 0x00000201 0x00000202 0x00000204 0x00000208 0x00000210 0x00000401 0x00000402 0x00000404 0x00000408 0x00000410 SM1算法MAC运算 SSF33算法ECB加密模式 SSF33算法CBC加密模式 SSF33算法CFB加密模式 SSF33算法OFB加密模式 SSF33算法MAC运算 SMS4算法ECB加密模式 SMS4算法CBC加密模式 SMS4算法CFB加密模式 SMS4算法OFB加密模式 SMS4算法MAC运算 为其它分组密码算法预留 6.1.2 非对称密码算法标识

非对称密码算法标识仅定义了密码算法的类型,在使用非对称算法进行数字签名运算时,可将非对称密码算法标识符与密码杂凑算法标识符进行“或”运算后使用,如“RSA with SHA1”可表示为SGD_RSA | SGD_SHA1,即0x00010002,“|”表示“或”运算。

非对称密码算法标识的编码规则为:从低位到高位,第0位到第7位为0,第8位到第15位按位表示非对称密码算法的算法协议,如果所表示的非对称算法没有相应的算法协议则为0,第16位到第31位按位表示非对称密码算法类型,例如:

非对称密码算法的标识如表2所示。

表 2 标签 SGD_RSA SGD_SM2_1 SGD_SM2_2 SGD_SM2_3 0x00000400~0x800000xx 标识符 0x00010000 0x00020100 0x00020200 0x00020400 描述 RSA算法 椭圆曲线签名算法 椭圆曲线密钥交换协议 椭圆曲线加密算法 为其它非对称密码算法预留 6.1.3 密码杂凑算法标识 密码杂凑算法标识符可以在进行杂凑运算或计算MAC时应用,也可以与非对称密码算法标识符进行“或”运算后使用,表示签名运算前对数据进行杂凑运算的算法类型。

密码杂凑算法标识的编码规则为:从低位到高位,第0位到第7位表示密码杂凑算法,第8位到第31位为0,例如:

密码杂凑算法的标识如表3所示。

表 3 标签 SGD_SM3 SGD_SHA1 SGD_SHA256 0x00000010~0x000000FF 标识符 0x00000001 0x00000002 0x00000004 描述 SM3杂凑算法 SHA1杂凑算法 SHA256杂凑算法 为其它密码杂凑算法预留 6.2 基本数据类型

本规范中的字节数组均为高位字节在前(Big-Endian)方式存储和交换。基本数据类型定义如表4所示:

10

GBXX/T ××××-2009

表 4

类型名称 INT8 INT16 INT32 UINT8 UINT16 UINT32 BOOL BYTE CHAR SHORT USHORT LONG ULONG UINT WORD DWORD FLAGS LPSTR HANDLE DEVHANDLE HAPPLICATION HCONTAINER 描述 有符号8位整数 有符号16位整数 有符号32位整数 无符号8位整数 无符号16位整数 无符号32位整数 布尔类型,取值为TRUE或FALSE 定义 字节类型,无符号8位整数 typedef UINT8 BYTE 字符类型,无符号8位整数 typedef UINT8 CHAR 短整数,有符号16位 无符号16位整数 长整数,有符号32位整数 长整数,无符号32位整数 无符号32位整数 字类型,无符号16位整数 typedef INT16 SHORT typedef UINT16 USHORT typedef INT32 LONG typedef UINT32 ULONG typedef UINT32 UINT typedef UINT16 WORD 双字类型,无符号32位整数 typedef UINT32 DWORD 标志类型,无符号32位整数 typedef UINT32 FLAGS 8位字符串指针,按照UTF8格式存储及交换 句柄,指向任意数据对象的起始地址 设备句柄 应用句柄 容器句柄 typedef CHAR * LPSTR typedef void * HANDLE typedef HANDLE DEVHANDLE typedef HANDLE HAPPLICATION typedef HANDLE HCONTAINER 6.3 常量定义

数据常量标识定义了在规范中用到的常量的取值。 数据常量标识的定义如表5所示。

表5 常量名 TRUE FALSE DEVAPI ADMIN_TYPE USER_TYPE 取值 0x00000001 0x00000000 _stdcall 0 1 描述 布尔值为真 布尔值为假 _stdcall函数调用方式 管理员PIN类型 用户PIN类型 6.4 复合数据类型 6.4.1 版本

(1)类型定义

typedef struct Struct_Version{

BYTE major; BYTE minor; }VERSION;

11

GBXX/T ××××-2009 (2)数据项描述参见表6:

表 6

数据项 major minor 6.4.2 设备信息 (1)类型定义

typedef struct Struct_DEVINFO{

VERSION Version;

CHAR Manufacturer[64]; CHAR Issuer[64]; CHAR Label[32];

CHAR SerialNumber[32]; VERSION HWVersion;

VERSION FirmwareVersion; ULONG AlgSymCap; ULONG AlgAsymCap; ULONG AlgHashCap; ULONG DevAuthAlgId; ULONG TotalSpace; ULONG FreeSpace; BYTE Reserved[64]; }DEVINFO,*PDEVINFO; (2)数据项描述参见表7:

表 7

数据项 Version Manufacturer Issuer Label SerialNumber HWVersion AlgSymCap AlgAsymCap AlgHashCap DevAuthAlgId TotalSpace FreeSpace 12

类型 VERSION 版本号 意义 备注 数据结构版本号,本结构的版本号为1.0 以 ‘\\0’为结束符的ASCII字符串 以 ‘\\0’为结束符的ASCII字符串 以 ‘\\0’为结束符的ASCII字符串 以 ‘\\0’为结束符的ASCII字符串 类型 BYTE BYTE 意义 主版本号 次版本号 备 注 主版本号和次版本号以“.”分隔,例如 Version 1.0,主版本号为1,次版本号为0;Version 2.10,主版本号为2,次版本号为10。 CHAR数组 设备厂商信息 CHAR数组 发行厂商信息 CHAR数组 设备标签 CHAR数组 序列号 VERSION ULONG ULONG ULONG ULONG ULONG ULONG 设备硬件版本 设备本身固件版本 分组密码算法标识 密码杂凑算法标识 设备认证使用的分组密码算法标识 设备总空间大小 用户可用空间大小 FirmwareVersion VERSION 非对称密码算法标识 GBXX/T ××××-2009 Reserved (1)类型定义

typedef struct Struct_RSAPUBLICKEYBLOB{

ULONG AlgID; ULONG BitLen;

BYTE Modulus[MAX_RSA_MODULUS_LEN];

BYTE PublicExponent[MAX_RSA_EXPONENT_LEN]; }RSAPUBLICKEYBLOB, *PRSAPUBLICKEYBLOB; MAX_RSA_MODULUS_LEN为算法模数的最大长度; MAX_RSA_EXPONENT_LEN为算法指数的最大长度。 (2)数据项描述参见表8:

表8

数据项 AlgID BitLen Modulus 类型 ULONG ULONG BYTE数组 意义 算法标识号 模数的实际位长度 模数n = p * q 必须是8的倍数 实际长度为BitLen/8字节 #define MAX_RSA_MODULUS_LEN 256 #define MAX_RSA_EXPONENT_LEN 4 一般为00010001 备注 BYTE 保留扩展 6.4.3 RSA公钥交换数据块

PublicExponent BYTE数组 6.4.4 RSA私钥交换数据块 (1)类型定义

公开密钥e typedef struct Struct_RSAPRIVATEKEYBLOB{

ULONG AlgID; ULONG BitLen;

BYTE Modulus[MAX_RSA_MODULUS_LEN];

BYTE PublicExponent[MAX_RSA_EXPONENT_LEN]; BYTE PrivateExponent[MAX_RSA_MODULUS_LEN]; BYTE Prime1[MAX_RSA_MODULUS_LEN/2]; BYTE Prime2[MAX_RSA_MODULUS_LEN/2];

BYTE Prime1Exponent[MAX_RSA_MODULUS_LEN/2]; BYTE Prime2Exponent[MAX_RSA_MODULUS_LEN/2]; BYTE Coefficient[MAX_RSA_MODULUS_LEN/2]; }RSAPRIVATEKEYBLOB, *PRSAPRIVATEKEYBLOB;

MAX_RSA_MODULUS_LEN为RSA算法模数的最大长度; (2)数据项描述参见表9:

表9

数据项 AlgID BitLen Modulus PublicExponent

类型 ULONG ULONG BYTE数组 BYTE数组 意义 算法标识号 模数n = p * q 公开密钥e 实际长度为BitLen/8字节 一般为00010001 13

备注 模数的实际位长度 必须是8的倍数 GBXX/T ××××-2009 PrivateExponent BYTE数组 Prime1 Prime2 Prime1Exponent Prime2Exponent Coefficient (1)类型定义

typedef struct Struct_ECCPUBLICKEYBLOB{

ULONG AlgID; ULONG BitLen;

BYTE XCoordinate[ECC_MAX_XCOORDINATE_BITS_LEN/8]; BYTE YCoordinate[ECC_MAX_YCOORDINATE_BITS_LEN/8]; }ECCPUBLICKEYBLOB, *PECCPUBLICKEYBLOB;

ECC_MAX_XCOORDINATE_LEN为ECC算法X坐标的最大长度; ECC_MAX_YCOORDINATE_LEN为ECC算法Y坐标的最大长度。 (2)数据项描述参见表10:

表10

数据项 AlgID BitLen 类型 ULONG ULONG 意义 算法标识号 模数的实际位长度 必须是8的倍数 备注 BYTE数组 BYTE数组 BYTE数组 BYTE数组 BYTE数组 私有密钥d 素数p 素数q d mod (p-1)的值 实际长度为BitLen/8字节 实际长度为BitLen/16字节 实际长度为BitLen/16字节 实际长度为BitLen/16字节 d mod (q -1)的值 实际长度为BitLen/16字节 q模p的乘法逆元 实际长度为BitLen/16字节 6.4.5 ECC公钥交换数据块

XCoordinate BYTE数组 曲线上点的X坐标 有限域上的整数 #define ECC_MAX_XCOORDINATE_BITS_LEN 512 YCoordinate BYTE数组 曲线上点的Y坐标 有限域上的整数 #define ECC_MAX_YCOORDINATE_BITS_LEN 512 6.4.6 ECC私钥交换数据块 (1)类型定义

typedef struct Struct_ECCPRIVATEKEYBLOB{

ULONG AlgID; ULONG BitLen;

BYTE PrivateKey[ECC_MAX_MODULUS_BITS_LEN/8]; }ECCPRIVATEKEYBLOB, *PECCPRIVATEKEYBLOB;

ECC_MAX_MODULUS_BITS_LEN为ECC算法模数的最大长度; (2)数据项描述参见表11:

表11

数据项 AlgID BitLen 类型 ULONG ULONG 意义 算法标识号 模数的实际位长度 必须是8的倍数 备注 14


智能IC卡及智能密码钥匙密码应用接口规范修订版 - 图文(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:石油一个案例关于配送

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: