鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

数据结构

本小节主要描述了与密码设备相关的各类数据结构和字段定义,为开发人员提供统一的数据结构规范,以便于开发、调试和对接密码设备。

设备信息定义

字段名称

数据长度(字节)

含义

IssuerName

40

设备生产厂商名称。

DeviceName

16

设备型号。

DeviceSerial

16

设备编号,包含:日期(8字符)、批次号(3字符)、流水号(5字符)。

DeviceVersion

4

密码设备内部软件的版本号。

StandardVersion

4

密码设备支持的接口规范版本号。

AsymAlgAbility

8

前4字节标识支持的算法,标识方法为非对称算法标识按位或的结果;后4字节标识算法的最大模长,标识方法为支持的最大模长按位或的结果。

SymAlgAbility

4

所有支持的对称算法,表示方法为对称算法标识按位或的结果。

HashAlgAbility

4

所有支持的杂凑算法,表示方法为杂凑算法标识按位或运算结果。

BufferSize

4

支持的最大文件存储空间(单位字节)。

数据结构定义。

typedef struct { 
unsigned char IssuerName[40]; 
unsigned char DeviceName[16]; 
unsigned char DeviceSerial[16]; 
unsigned int DeviceVersion; 
unsigned int StandardVersion; 
unsigned int AsymAlgAbility[2]; 
unsigned int SymAlgAbility; 
unsigned int HashAlgAbility; 
unsigned int BufferSize; 
} DEVICEINFO;

密钥分类及存储定义

  • 设备密钥与内部用户密钥
    • 设备密钥只能在设备初始化时生成或安装,内部用户密钥通过密码设备管理工具生成或安装。
    • 设备密钥和内部用户密钥存放于密钥存储区,索引号从0开始检索,每个索引号对应一个签名密钥对和一个加密密钥对。其中,索引号为0表示设备密钥。索引号从1开始表示用户密钥。

      密钥对索引号

      公钥

      私钥

      0x00

      设备签名公钥

      设备签名私钥

      设备加密公钥

      设备加密私钥

      0x01

      用户签名公钥

      用户签名私钥

      用户加密公钥

      用户加密私钥

      ……

      ……

      ……

      ……

      ……

  • 密钥加密密钥

    密钥加密密钥通过密码设备管理工具生成或安装,密钥长度为128位,存放于密钥存储区,使用索引号从1开始。

    密钥索引号

    密钥加密密钥

    0x01

    密钥加密密钥001

    ……

    ……

会话密钥

会话密钥使用设备接口函数生成或导入,会话密钥使用句柄检索。

ECC密钥数据结构定义

密钥结构存储时顺序为从高到低,即密钥存放时从密钥结构数组的最高位开始,最高字节填在最高位,不足位填充数据0。

表1 公钥数据结构定义

字段名称

数据长度(字节)

含义

bits

4

密钥位长

x

ECCref_MAX_LEN

公钥x坐标

y

ECCref_MAX_LEN

公钥y坐标

表2 私钥数据结构定义

字段名称

数据长度(字节)

含义

bits

4

密钥位长

K

ECCref_MAX_LEN

私钥

实际数据结构定义:

#define ECCref_MAX_BITS 512 
#define ECCref_MAX_LEN ((ECCref_MAX_BITS+7) / 8) 
typedef struct ECCrefPublicKey_st { 
unsigned int bits; 
unsigned char x[ECCref_MAX_LEN]; 
unsigned char y[ECCref_MAX_LEN]; 
} ECCrefPublicKey; 
typedef struct ECCrefPrivateKey_st { 
unsigned int bits; 
unsigned char K[ECCref_MAX_LEN]; 
} ECCrefPrivateKey;

ECC加密数据结构定义

表3 加密数据结构定义

字段名称

数据长度(字节)

含义

x

ECCref_MAX_LEN

X分量

y

ECCref_MAX_LEN

Y分量

M

32

明文的杂凑值

L

4

密文数据长度

C

L

密文数据

实际的数据结构定义:

typedef struct ECCCipher_st { 
unsigned char x[ECCref_MAX_LEN]; 
unsigned char y[ECCref_MAX_LEN]; 
unsigned char M[32]; 
unsigned int L; 
unsigned char C[]; 
} ECCCipher;

ECC签名数据结构定义

表4 签名数据结构定义

字段名称

数据长度(字节)

含义

r

ECCref_MAX_LEN

签名的r部分

s

ECCref_MAX_LEN

签名的s部分

实际数据结构定义:

typedef struct ECCSignature_st { 
unsigned char r[ECCref_MAX_LEN]; 
unsigned char s[ECCref_MAX_LEN]; 
} ECCSignature;