安全载体厂商接入说明
接入流程
安全载体厂商注册
安全载体厂商通过填写申请表方式进行注册,注册后会有工作人员根据您填写的联系方式进行回访。通过审核之后,方可进行后续流程。
安全载体厂商芯片功能验证
安全载体厂商注册完成,需要参考安全载体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 |
未知安全载体类型错误 |