3.4.6.1: 杰发HSM安全功能
1:特别提示
PowerWriter 对AC784x 或者 AC780x 安全芯片的HSM 功能的支持,只支持 脱机功能,无法使用PowerWriter 客户端软件连接编程器和芯片,实时进行操作,在使用PowerWriter HSM 插件配置之前,需要熟练 Auto chips 官方的开发验证软件 ATC link tools 的使用流程,以及参数配置方法,Power Writer 在对HSM 功能的脱机功能支持,对官方的软件流程和逻辑关系重新进行了整理,界面更简洁。
Power Writer HSM 插件配置属性名称,基本和官方工具 ATC link tools 保持一致,本文档不再逐一列举每一个参数的对应关系。
2:功能入口
当选择 Auto Chips AC784x 的芯片后,将会在工具栏看到 按钮,此功能界面即为 Auto chips AC784x 芯片的HSM 脱机编程插件配置入口, 如下图所示:

3:AC7843x HSM 功能配置

3.1:根密钥
在进行HSM 的配置之前,根密钥一般需要最先进行配置,PowerWriter 默认开启配置根密钥的功能,请核对或根据实际应用场景进行调整。
3.2:HSM 算法配置

- OTP Key 解密算法:设置HSM 密钥(证书)数据的加解密算法,可选择以下其一:
- AES128:设置为AES128-CBC 加解密算法。
- SM4:设置为SM4 加解密算法。
- HSM 固件安全启动算法:设置HSM 固件安全启动的校验算法,可设置为以下其一:
- RSA2048 (非对称): 界面输入公钥(E(64) + N(256)= 320 字节)。
- SM2(非对称): 界面输入公钥(64 字节, 第一个字节表示压缩格式,当密钥包含65 字节时,请去除第一个字节再填写)。
- AES128_CMAC(对称): 界面输入原密码,长度为16 字节。
- SM4_CMAC(对称): 界面输入原密码,长度为16 字节。
- HSM FW verify key:设置HSM 固件启动时的校验校验算法,数据长度见 HSM 固件安全启动算法配置。
- HSM 固件安装和升级算法:设置HSM 固件安装或者升级的校验算法,算法类型和格式和 HSM 固件安全启动算法设置方法一致,此处不在重复说明。
- HSM FW upgrade encrypt key:设置HSM 固件安装或者升级的数据加解密算法,长度为16 字节,并符合以下规则:
- 签名 RSA 算法对应的加密算法是 AES128-CBC。
- 签名 SM2 算法对应的加密算法是 SM4-CBC。
- 签名 AES128-CMAC 算法对应的加密算法是 AES128-CBC。
- 签名 SM4-CMAC 算法对应的加密算法是 SM4-CBC。
- HSM 固件:添加安装或者升级时所需要的 HSM 安全固件。
- X: 当点击 x 按钮时,可清除导入的HSM 固件。
3.3:安全调试
HSM 支持调试访问权限设置,可配置芯片的调试访问认证功能,安全调试配置,支持配置和鉴权,配置界面如下所示:
使能安全调试配置(或鉴权):开启配置或者鉴权开关。
Soc Debug Key: 设置安全调试使用的算法类型,支持以下类型的算法:
- ECC256:配置为ECC 验签算法。
- SM2: 设置为SM2 验签算法。
公钥:设置配置安全调试所需要的公钥,长度为64 字节。
提示公钥在配置过程和鉴权过程中都会使用,如公钥保留为空,即使界面配置为开启,都将禁用当前模块的功能。
私钥:设置鉴权安全调试所需要的私钥,长度为32字节。
警告当需要重新编程开启了安全调试功能的芯片时,必须提供私钥,否则无法进行鉴权,导致无法访问芯片而导致编程失败,当芯片未开启安全调试时,则可将此设置保留为空,表示无需进行鉴权。
3.4:安全启动
Soc 安全启动表示Soc 固件的安全启动验证功能,用于检查固件是否被修改,此固件并非HSM 固件,而是指用户固件,配置界面如下所示:
使能安全启动:开启soc 固件安全启动配置功能。
安全启动算法:配置方法同HSM 校验算法,见HSM FW verify key。
Soc FW Verify Key:配置方法同 HSM 校验算法,见 HSM FW verify key。
提示SOC 安全启动和 HSM 安全启动配置方法虽然相同,但是两者并无直接关联,可以独立进行设置。
3.4:安全启动参数
开启 SOC 固件安全启动功能后,需要检查并设置 SOC 固件的安全启动参数,当参数没有提供,或者参数设置错误时,编程器对目标芯片进行配置后,将导致芯片无法进行正常引导,安全启动参数配置的界面如下所示:

- Image 校验地址:设置Soc安全启动的校验地址信息,请参考ATC Link tool 的参数设置。
- Image 校验大小:设置Soc安全启动的校验大小,请参考ATC Link tool 的参数设置。
- Image 签名地址:设置Soc安全启动的签名数据地址,请参考ATC Link tool 的参数设置。
- Image 签名内容:设置Soc安全启动的签名数据内容,请参考ATC Link tool 的参数设置。
- Image 签名公钥地址:设置Soc安全启动的签名所使用的公钥存储地址,请参考ATC Link tool 的参数设置。
- Image 签名公钥内容:设置Soc安全启动的签名所使用的公钥内容,请参考ATC Link tool 的参数设置。
- Image 校验头地址:设置Soc安全启动的校验头存储地址,请参考ATC Link tool 的参数设置。
- Image 校验头大小:设置Soc安全启动的校验头大小,请参考ATC Link tool 的参数设置。
- Image 校验版本地址:设置Soc安全启动的校验版本存储地址,请参考ATC Link tool 的参数设置。
- Bootinfo 地址:设置Soc安全启动的Boot info 信息地址,请参考ATC Link tool 的参数设置。
当开启了Soc 安全启动后,请务必核查安全启动参数设置,错误的参数配置,将导致目标芯片无法进行引导。
3.5:其他
再进行HSM 的配置过程中,可以设置相关证书的密钥等级,再完成所有的产品配置之后,也可以设置产品的生命周期,进行生命周期管理,如下所示:
- 密钥升级:设置HSM 配置时的密钥等级,默认为 Level 1。
- 设置生命周期:设置产品的生命周期,当开启此设置时,PowerWriter 在完成所有的HSM 配置之后,将切换产品的生命周期。
3.5.1:清除或添加用户密钥
PowerWriter 支持HSM 功能,用户Key 的清除和导入操作,以便在SOC 侧可以利用HSM 的硬件加密引擎进行数据的加密、解密、生成MAC、验证MAC、生成签名,验证签名等操作,关于HSM 用户KEY 的开发文档请参考官方的资料和DEMO,本文不做具体的描述,用户KEY 的清除和添加操作界面如下所示:

3.5.1.1:清除密钥
使用清除密钥功能,可以批量清除现有的密钥信息,支持清除所有的密钥,或者特定的密钥,等同于官方SDK 中的API:
Hal_StatusType HSM_Hal_RemoveKey(HSM_KeyId KeyId);
3.5.1.2:添加密钥
HSM key usages 配置结构:
/* usage flag for EVITA key */
#define EVITA_KEY_USE_FLAG_SIGN 0x1U
#define EVITA_KEY_USE_FLAG_VERIFY 0x2U
#define EVITA_KEY_USE_FLAG_ENCRYPT 0x4U
#define EVITA_KEY_USE_FLAG_DECRYPT 0x8U
#define EVITA_KEY_USE_FLAG_TIMESTAMP 0x10U
#define EVITA_KEY_USE_FLAG_SECUREBOOT 0x20U
#define EVITA_KEY_USE_FLAG_SECURESTORAGE 0x40U
#define EVITA_KEY_USE_FLAG_KEYCREATION 0x80U
#define EVITA_KEY_USE_FLAG_UTCSYNC 0x100U
#define EVITA_KEY_USE_FLAG_TRANSPORT 0x200U
#define EVITA_KEY_USE_FLAG_REMOVE 0x400U
#define EVITA_KEY_USE_FLAG_DHKE 0x80U
typedef struct
{
/* Attributes of use flags, only the least significant 10 bits are valid */
ehsm_uint16_t use_flags;
/* Attributes of trnsp flags, only the least significant 2 bits are valid */
ehsm_uint8_t trnsp_flags;
/* Attributes of auth flags */
ehsm_uint32_t auth_flag;
/* size of auth value */
ehsm_uint8_t auth_size;
/*if value is 0 means element has auth_value data else indicates auth_value data exist in other element,
NOTE now this flag only use on OTP key*/
ehsm_uint16_t auth_value_exist_flags;
/* Auth data, only valid when auth_flags isn't 0 */
ehsm_uint8_t auth_value[EHSM_EVITA_AUTH_VALUE_MAX_SIZE];
} ehsm_key_flags_element_st;
typedef struct
{
ehsm_key_flags_element_st sign;
ehsm_key_flags_element_st verify;
ehsm_key_flags_element_st encrypt;
ehsm_key_flags_element_st decrypt;
ehsm_key_flags_element_st timestamp;
ehsm_key_flags_element_st secureboot;
ehsm_key_flags_element_st securestorage;
ehsm_key_flags_element_st dhkey;
ehsm_key_flags_element_st utcsync;
ehsm_key_flags_element_st transport;
ehsm_key_flags_element_st remove;
} ehsm_key_usages_st;
ehsm_key_flags_element_st::use_flags 对应关系如下所示:
- SIGN: EVITA_KEY_USE_FLAG_SIGN
- VERIFY:EVITA_KEY_USE_FLAG_VERIFY
- ENCRYPT:EVITA_KEY_USE_FLAG_ENCRYPT
- DECRYPT:EVITA_KEY_USE_FLAG_DECRYPT
- TIMESTRAMP:EVITA_KEY_USE_FLAG_TIMESTAMP
- SECUREBOOT:EVITA_KEY_USE_FLAG_SECUREBOOT
- SECURESTORAGE:EVITA_KEY_USE_FLAG_SECURESTORAGE
- KEYCREATION:EVITA_KEY_USE_FLAG_KEYCREATION
- UTCSYNC:EVITA_KEY_USE_FLAG_UTCSYNC
- TRANCSPORT:EVITA_KEY_USE_FLAG_TRANSPORT
- REMOVE:EVITA_KEY_USE_FLAG_REMOVE
- ehsm_key_flags_element_st::trnsp_flags 默认为0。
- ehsm_key_flags_element_st::auth_flag 固定为 EVITA_AUTH_TYPE_PASSWD。
- ehsm_key_flags_element_st::auth_size 和 ehsm_key_flags_element_st::auth_value 等同于 Key useage info 中的认证码,一般为16字节,最大为32字节。
- ehsm_key_flags_element_st::auth_value_exist_flags 默认为0.
HSM Plain Key 配置结构:
typedef struct
{
HSM_GenKeyAlgo KeyAlgo; /**< Key generate algorithm */
uint16 RandomKeySize; /**< Key size only when KeyAlgo = RANDOM be used */
uint8 *PrivKey; /**< Pointer to the buffer, the private key store in buffer */
uint32 PrivKeyLen; /**< Private key length */
uint8 *PubKey; /**< Pointer to the buffer, the public key store in buffer */
uint32 PubKeyLen; /**< Public key length */
void *KeyUsages; /**< Key usages for attribute, e.g. enc/dec */
uint8 KeyUsagesCnt; /**< Key usages size */
uint8 *AuthValue; /**< Key authentication value */
uint32 AuthValueSize; /**< Key authentication value size */
uint32 ValidUtil; /**< Key valid time */
uint16 ExtParam; /**< E param size only RSA key, default set 0 */
HSM_KeyId KeyId; /**< Key ID according to key algorithm type */
} HSM_PlainKeyCfgType;
- 密钥 ID:密钥ID ,对应 HSM_PlainKeyCfgType::KeyId。
- 算法类型:加密算法类型,对应 HSM_PlainKeyCfgType::KeyAlgo。
- 有效期:密钥的有效期,对应 HSM_PlainKeyCfgType::ValidUtil。
- 随机key 长度:当选择算法类型为 HSM_ALG_RANDOM 时,可设置随机KEY 的长度,用户 MAC 的生成和验证,对应 HSM_PlainKeyCfgType::RandomKeySize。
- 随机key 长度:当选择算法类型为 RSA 算法时,可设置RSA 公钥 e 参数的长度,对应 HSM_PlainKeyCfgType::ExtParam。
- 认证码:对应 HSM_PlainKeyCfgType::AuthValue 以及 AuthValueSize,其中 AuthValueSize 为自动计算。
- 公钥:非对称算法时所需的公钥信息,对应 HSM_PlainKeyCfgType::PubKey以及 PubKeyLen,其中 PubKeyLen为自动计算。
- 私钥:非对称算法时所需的私钥信息,对应 HSM_PlainKeyCfgType::PrivKey以及 PrivKeyLen,其中 PrivKeyLen为自动计算。
PowerWriter 在做参数检查时,不会强制进行参数的修正,在提供证书信息时,请按HSM SDK API 格式进行提供,避免产生未知问题。
4:7805x HSM 功能配置
当选择 AC7805X 芯片之后,可以在工具栏看到扩展菜单,点击 扩展 按钮,进入扩展功能界面,扩展功能界面提供了AC7805x 芯片所有的HSM 安全功能选项,如下所示:

4.1:设置新OTP key
OTP key 存储了HSM 模块所需的的系统密钥,当前这些密钥为OTP 只能写入一次,密钥类型以及功能说明,如下所示:

- Chip root key: 用户自定义,用于加密、解密、计算MAC。
- BL verify key: 用于校验bootloader。
- FW upgrade key: 用于校验升级包的完整性。
- Debug auth key: 当开启Debug 访问认证,并选择密码模式时,用于开启Debug Port。
- FW install key: 用于开启 image 区域的擦除/编程权限。
- Key read key: 用于开启用户Flash key 的读权限。
- Key install key:用于开始用户Flash key 的写权限 。
- Chip state key:用于开启芯片 lock /unlock 区域的写权限。
如需要更新OTP key 的密钥,请勾选对应密钥的使能,并填写16 字节密钥值,如超出16 字节会收到提示信息,并截断,少于16 字节,将会用0 进行填充,默认全为0xff。
4.2:调试访问认证
AC7805X 芯片支持 AUTH_CHALLENGE 和 PASSWORD 两种模式进行调试访问认证,当选择鉴权方式为PASSWORD 后,鉴权密钥为 Debug auth key,
当芯片状态切换为 LOCK 状态后,连接芯片需要进行 DEBUG 鉴权,才能连接上目标芯片,
使能鉴权功能,请尽可能保持开启状态,减少无法访问芯片的可能情形,此外当前的 debug auth key 表示鉴权时芯片的实时密钥,这个密钥可能是以下二种可能中的一种:
- 16字节 0xff,表示这是一个空的芯片,未进行配置。
- 上一次配置的 debug auth key,当芯片之前使用过设置 新的OTP key 功能,并配置过 debug auth key 之后的密钥。
PowerWriter 将优先使用用户填写的密钥进行调试访问认证,如认证失败,则会尝试使用芯片默认值进行鉴权,如果都失败,则意味着填写的密钥错误。
4.3:Boot 配置
AC7805X 芯片支持低功耗standby 模式唤醒 bypass 安全启动 ,当选择 secure boot 模式时,表示开启安全启动功能,当选择 Standby 模式后,表示standby 模式唤醒后执行安全启动流程,如下所示:
4.4:芯片状态切换
当芯片从unlock 状态切换为 lock 状态后,可以开启不同内存区域的访问权限,设置lock 不需要进行鉴权,如果设置为了 lock之后,配置芯片数据状态,则需要使用 chip state key 进行鉴权。
使能鉴权功能,请尽可能保持开启状态,减少无法访问芯片的可能情形,此外当前的 chip state key 表示鉴权时芯片的实时密钥,这个密钥可能是以下二种可能中的一种:
- 16字节 0xff,表示这是一个空的芯片,未进行配置。
- 上一次配置的 chip state key,当芯片之前使用过设置 新的OTP key 功能,并配置过 chip state key 之后的密钥。
PowerWriter 将优先使用用户填写的密钥进行鉴权,如鉴权失败,则会尝试使用芯片默认值进行鉴权,如果都失败,则意味着填写的密钥错误。
如果当前芯片为lock 状态,并且调试访问认证也开启,并设置为了PASSWORD 模式,则在初始化芯片时,需要先进行调试访问认证鉴权,并确保调试鉴权功能开启,并提供正确的密钥,同时确保芯片状态鉴权开启,并正确填写密钥。
4.5:配置Flash key
AC7805x 芯片支持配置用户Flash key,Flash 可以一般作用APP 普通密钥进行数据的加解密,生成MAC 和验证MAC 操作,Flash key 可以重复修改,在写入新的 Flash key 之前,需要使用 Key install key 进行鉴权,界面为如下所示:

使能鉴权功能,请尽可能保持开启状态,减少无法访问芯片的可能情形,此外当前的 key install key 表示鉴权时芯片的实时密钥,这个密钥可能是以下二种可能中的一种:
- 16字节 0xff,表示这是一个空的芯片,未进行配置。
- 上一次配置的 key install key,当芯片之前使用过设置 新的OTP key 功能,并配置过 key install key 之后的密钥。
PowerWriter 将优先使用用户填写的密钥进行鉴权,如鉴权失败,则会尝试使用芯片默认值进行鉴权,如果都失败,则意味着填写的密钥错误。
4.6:安全启动
AC7805x 支持用户固件安全启动,使能安全启动后,固件在执行前,将先进行固件的完整性验证,开启安全启动功能的固件编程,在进行编程时需要使用 FW install key 进行鉴权,界面为如下所示:
开启安全启动时,需要配置以下信息,HSM 在执行安全启动验证时,需要用到以下参数,如下所示:
- MAC 内容:使用BL verify key 计算出的Firmware 16 字节MAC 内容,这部分内容在安全启动执行时,用于固件进行验证。
- MAC 地址:固件校验MAC 数据的存储地址。
- Rom Size:固件的大小,需要0x1000 对齐。
- Image start: 固件的起始地址,需要0x1000对齐。
- Image size: 固件的大小,需要0x1000 对齐。
使能鉴权功能,请尽可能保持开启状态,减少无法访问芯片的可能情形,此外当前的 FW install key 表示鉴权时芯片的实时密钥,这个密钥可能是以下二种可能中的一种:
- 16字节 0xff,表示这是一个空的芯片,未进行配置。
- 上一次配置的 FW install key,当芯片之前使用过设置 新的OTP key 功能,并配置过 FW install key 之后的密钥。
PowerWriter 将优先使用用户填写的密钥进行鉴权,如鉴权失败,则会尝试使用芯片默认值进行鉴权,如果都失败,则意味着填写的密钥错误。