跳到主要内容
版本:Next

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 的芯片后,将会在工具栏看到 image-20251210142736413按钮,此功能界面即为 Auto chips AC784x 芯片的HSM 脱机编程插件配置入口, 如下图所示:

image-20251210142655630

3:AC7843x HSM 功能配置

image-20251210142912224

3.1:根密钥

image-20251210142937099

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

3.2:HSM 算法配置

image-20251210143402696

  • 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 支持调试访问权限设置,可配置芯片的调试访问认证功能,安全调试配置,支持配置和鉴权,配置界面如下所示:

image-20251210144643780

  • 使能安全调试配置(或鉴权):开启配置或者鉴权开关。

  • Soc Debug Key: 设置安全调试使用的算法类型,支持以下类型的算法:

    • ECC256:配置为ECC 验签算法。
    • SM2: 设置为SM2 验签算法。
  • 公钥:设置配置安全调试所需要的公钥,长度为64 字节。

    提示

    公钥在配置过程和鉴权过程中都会使用,如公钥保留为空,即使界面配置为开启,都将禁用当前模块的功能。

  • 私钥:设置鉴权安全调试所需要的私钥,长度为32字节。

    警告

    当需要重新编程开启了安全调试功能的芯片时,必须提供私钥,否则无法进行鉴权,导致无法访问芯片而导致编程失败,当芯片未开启安全调试时,则可将此设置保留为空,表示无需进行鉴权。

3.4:安全启动

Soc 安全启动表示Soc 固件的安全启动验证功能,用于检查固件是否被修改,此固件并非HSM 固件,而是指用户固件,配置界面如下所示:

image-20251210145835907

  • 使能安全启动:开启soc 固件安全启动配置功能。

  • 安全启动算法:配置方法同HSM 校验算法,见HSM FW verify key

  • Soc FW Verify Key:配置方法同 HSM 校验算法,见 HSM FW verify key

    提示

    SOC 安全启动和 HSM 安全启动配置方法虽然相同,但是两者并无直接关联,可以独立进行设置。

3.4:安全启动参数

开启 SOC 固件安全启动功能后,需要检查并设置 SOC 固件的安全启动参数,当参数没有提供,或者参数设置错误时,编程器对目标芯片进行配置后,将导致芯片无法进行正常引导,安全启动参数配置的界面如下所示:

image-20251210150346794

  • 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 的配置过程中,可以设置相关证书的密钥等级,再完成所有的产品配置之后,也可以设置产品的生命周期,进行生命周期管理,如下所示:

image-20251210155216746

  • 密钥升级:设置HSM 配置时的密钥等级,默认为 Level 1。
  • 设置生命周期:设置产品的生命周期,当开启此设置时,PowerWriter 在完成所有的HSM 配置之后,将切换产品的生命周期。

3.5.1:清除或添加用户密钥

PowerWriter 支持HSM 功能,用户Key 的清除和导入操作,以便在SOC 侧可以利用HSM 的硬件加密引擎进行数据的加密、解密、生成MAC、验证MAC、生成签名,验证签名等操作,关于HSM 用户KEY 的开发文档请参考官方的资料和DEMO,本文不做具体的描述,用户KEY 的清除和添加操作界面如下所示:

image-20251219164210239

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 安全功能选项,如下所示:

image-20251225092750254

4.1:设置新OTP key

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

image-20251225092921660

  • 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 鉴权,才能连接上目标芯片,

image-20251225094006132

警告

使能鉴权功能,请尽可能保持开启状态,减少无法访问芯片的可能情形,此外当前的 debug auth key 表示鉴权时芯片的实时密钥,这个密钥可能是以下二种可能中的一种:

  • 16字节 0xff,表示这是一个空的芯片,未进行配置。
  • 上一次配置的 debug auth key,当芯片之前使用过设置 新的OTP key 功能,并配置过 debug auth key 之后的密钥。

PowerWriter 将优先使用用户填写的密钥进行调试访问认证,如认证失败,则会尝试使用芯片默认值进行鉴权,如果都失败,则意味着填写的密钥错误。

4.3:Boot 配置

AC7805X 芯片支持低功耗standby 模式唤醒 bypass 安全启动 ,当选择 secure boot 模式时,表示开启安全启动功能,当选择 Standby 模式后,表示standby 模式唤醒后执行安全启动流程,如下所示:

image-20251225095249221

4.4:芯片状态切换

当芯片从unlock 状态切换为 lock 状态后,可以开启不同内存区域的访问权限,设置lock 不需要进行鉴权,如果设置为了 lock之后,配置芯片数据状态,则需要使用 chip state key 进行鉴权。

image-20251225095437431

警告

使能鉴权功能,请尽可能保持开启状态,减少无法访问芯片的可能情形,此外当前的 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 进行鉴权,界面为如下所示:

image-20251225100207111

警告

使能鉴权功能,请尽可能保持开启状态,减少无法访问芯片的可能情形,此外当前的 key install key 表示鉴权时芯片的实时密钥,这个密钥可能是以下二种可能中的一种:

  • 16字节 0xff,表示这是一个空的芯片,未进行配置。
  • 上一次配置的 key install key,当芯片之前使用过设置 新的OTP key 功能,并配置过 key install key 之后的密钥。

PowerWriter 将优先使用用户填写的密钥进行鉴权,如鉴权失败,则会尝试使用芯片默认值进行鉴权,如果都失败,则意味着填写的密钥错误。

4.6:安全启动

AC7805x 支持用户固件安全启动,使能安全启动后,固件在执行前,将先进行固件的完整性验证,开启安全启动功能的固件编程,在进行编程时需要使用 FW install key 进行鉴权,界面为如下所示:

image-20251225100621676

开启安全启动时,需要配置以下信息,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 将优先使用用户填写的密钥进行鉴权,如鉴权失败,则会尝试使用芯片默认值进行鉴权,如果都失败,则意味着填写的密钥错误。