安全载体厂商接入说明

接入流程

安全载体厂商注册

安全载体厂商通过填写申请表方式进行注册,注册后会有工作人员根据您填写的联系方式进行回访。通过审核之后,方可进行后续流程。

安全载体厂商芯片功能验证

安全载体厂商注册完成,需要参考安全载体SDK适配中描述的相关接口 ,进行测试开发并需要完成对应的相关功能验证。安全载体厂商需要抽象和芯片交互的设备驱动接口,具体的驱动接口由设备厂商实现。

产品线对接ID中心

函谷物联安全系统与安全载体厂商进行服务对接的时候,需要厂商的产线与函谷物联安全系统的ID中心进行服务的对接来交换相关的测试和安全数据。

目前通过服务对接,ID中心传输如下信息给安全载体厂商:

  • 设备的唯一身份标识
  • 设备个人化数据

为了保证对接过程的安全性,需要使用安全方式进行数据交换。

密钥

安全载体中的密钥是保证设备进行安全传输的关键,对于不同的场景需要采用不同的加密方式,当前函谷物联安全系统支持的类型密钥:RSA-1024。其他密钥方式,敬请期待。

安全载体SDK适配

HISK SDK封装了底层安全载体、接口的操作细节,其具体的功能实现依赖底层的安全载体SDK,故安全载体厂商需要适配移植安全载体SDK的相关SAL(Security Abstract Level)接口,如下为具体接口定义。

预定义类型

原类型 typedef类型
unsigned char U8
unsigned short U16
unsigned long U32

获取密钥分散因子

方法 接口说明
U16 sal_get_se_id(U8 *se_id, U16 *id_len); 获取密钥分散因子

请求参数

参数名称 参数类型 输入/输出 说明
se_id U8 * in/out 入参为存放安全载体唯一编号字串buf的起始地址,出参时buf中存储安全载体唯一编号,长度不大于32位
id_len U16 * in/out 入参为安全载体唯一编号的buf长度,出参为SE编号字串的实际长度

返回参数

类型 说明
U16 方法执行结果,0 表示成功,失败参考设备错误码

获取设备ID

方法 接口说明
U16 sal_get_device_id(U8 *id, const U16 id_len); 获取设备ID

请求参数

参数名称 参数类型 输入/输出 说明
id U8 * in/out 入参为存放设备ID字串的buf起始地址,出参时buf中存储设备ID,长度为16字节
id_len const U16 in 设备ID的长度

返回参数

类型 说明
U16 方法执行结果,0 表示成功,失败参考设备错误码

非对称加解密

方法 接口说明
U16 sal_asymmetric_crypt(U8 *in_data, U16 in_data_len, U8 asymm_mode, U8 asymm_type, U8 key_index, U8 *out_data, U16 *out_data_len); 非对称加密解密

请求参数

参数名称 参数类型 输入/输出 说明
in_data U8 * in 存放输入的数据起始地址
in_data_len U16 in 输入的数据长度
asymm_mode U8 in 非对称加解密类型
asymm_type U8 in 非对称算法
key_index U8 in 使用的密钥
out_data U8 * in/out 入参为存放输出的数据buf起始地址,出参时buf中存储处理的数据
out_data_len U16 * in/out 入参为参数out_data的buf长度,出参为实际长度

返回参数

类型 说明
U16 方法执行结果,0 表示成功,失败参考设备错误码

非对称加解密类型

类型 说明
0x51 AsymEncrypt
0x52 AsymDecrypt
0x53 AsymSign
0x54 AsymVerifySign

非对称算法

类型 说明
0x00 RSA_NOPADDING
0x01 RSA_SHA1_PKCS1
0x02 RSA_SHA256_PKCS1
0x03 RSA_SHA384_PKCS1
0x04 RSA_SHA512_PKCS1
0x05 SM2_SM3
0x06 ECDSA

对称加解密

方法 接口说明
U16 sal_symmetric_crypt(U8 *in_data, U16 in_data_len, U8 symm_mode, U8 symm_type, U8 key_index, U8 *out_data, U16 *out_data_len); 对称加密解密

请求参数

参数名称 参数类型 输入/输出 说明
in_data U8 * in 存放输入的数据起始地址
in_data_len U16 in 输入的数据长度
symm_mode U8 in 对称加解密类型
symm_type U8 in 对称算法
key_index U8 in 使用的密钥
out_data U8 * in/out 入参为存放输出数据的buff起始地址,出参时buf中存储处理的数据
out_data_len U16 * in/out 入参为参数out_data的buf长度,出参为实际长度

返回参数

类型 说明
U16 方法执行结果,0 表示成功,失败参考设备错误码

对称加解密类型

类型 说明
0x51 Encrypt
0x52 Decrypt
0x53 SignMac
0x54 VerifyMac

对称算法

类型 说明
0x00 DES_CBC_NOPADDING
0x01 DES_ECB_NOPADDING
0x02 AES_CBC_NOPADDING
0x03 AES_ECB_NOPADDING
0x04 DES_CBC_ISO9797_M1
0x05 DES_CBC_ISO9797_M2
0x06 AES_CBC_ISO9797_M1
0x07 AES_CBC_ISO9797_M2

签名计算

方法 接口说明
U16 sal_compute_digest(U8 *data, const U16 data_len, U8 *digest, U16 *digest_len, const U8 hash_type); 计算摘要

请求参数

参数名称 参数类型 输入/输出 说明
data U8 * in 存放计算摘要的原始数据起始地址
data_len const U16 in 计算摘要的原始数据的长度
digest U8 * in/out 入参为存放摘要的buff起始地址,出参时buf中存储计算的摘要
digest_len U16 * in/out 入参为参数out_data的buf长度,出参为实际长度
hash_type const U8 in 计算摘要的算法

返回参数

类型 说明
U16 方法执行结果,0 表示成功,失败参考设备错误码

计算摘要算法

类型 说明
0x00 SHA1
0x01 SHA224
0x02 SHA256
0x03 SHA384
0x04 SHA512

开启事务

方法 接口说明
U16 sal_open_session(); 与安全载体交互前开启事务,设备可以进行上电和初始化

返回参数

类型 说明
U16 方法执行结果,0 表示成功,失败参考设备错误码

关闭事务

方法 接口说明
U16 sal_close_session(); 与安全载体交互结束,设备可以进行下电以及清理

返回参数

类型 说明
U16 方法执行结果,0 表示成功,失败参考设备错误码

选中安全应用

方法 接口说明
U16 sal_select_application(); 选中安全载体中交互的应用

返回参数

类型 说明
U16 方法执行结果,0 表示成功,失败参考设备错误码

设备端错误码

返回值 描述
0x9000 执行正确
0x7021 未知安全载体类型错误