ESP32芯片模组乐鑫科技杭州代理处电话公司SoC支持外部HSM安全签名
乐鑫ESP32系列芯片使用安全启动机制,以确保只有可信任的固件能够在flash中运行。然而,为了满足这一机制,需要小心管理签名密钥,也就是说签名密钥必须由可信的实体安全地生成和存储。
硬件安全模块是一种专门用于保护和管理密钥的加密设备,它还可以提供专业的加密服务,如明文加密、数字签名等。目前,许多云服务提供了基于云HSM的解决方案。
外部提供了一个符合PKCS#11标准的加密接口,可以用来对固件进行签名和其他操作。借助PKCS#11接口,还可以使用远程的HSM云服务。
Espsecure.py脚本(Esptool工程的一部分)与标准PKCS#11接口集成,以实现与各种外部HSM设备的兼容,并能对ESP32芯片模组乐鑫科技杭州代理处电话公司ESP32固件进行签名。
请留意,根据所示,为了使用HSM模式,你需要在Espsecure.py的配置中提供适用于供应商的特定PKCS#11库路径。
ESP32芯片模组乐鑫科技杭州代理处电话公司的SecureBootV2机制初始支持使用RSA-PSS 3072或ESDSA NISTP256算法生成已签名的应用程序。
使用YubiKey进行签名操作
我们将展示如何使用YubiKey5系列作为外部HSM进行签名。
安装
请点击这里查看YubiKey主机工具和PKCS#11库的详细配置。
请注意:下述配置是在Ubuntu22.10操作系统上完成的。
# 安装 esptool 4.5 及 HSM 依赖项
pip install esptool[hsm]==4.5.dev3
# 安装工具和 PKCS#11 接口库
sudo apt install yubico-piv-tool ykcs11
# 在 9c(数字签名)域中生成 ECC P256 私钥
yubico-piv-tool -a generate -s 9c -A ECCP256
HSM配置文件的设置
下面是ESP32芯片模组乐鑫科技杭州代理处电话公司需要提供给espsecure.py的HSM配置文件。
$ cat hsm_cfg.ini
# 基于 YubiKey 的外部 HSM 配置文件
[hsm_config]
# PKCS11 共享对象/库
pkcs11_lib = /usr/lib/x86_64-linux-gnu/libykcs11.so
# HSM 登录凭证(YubiKey 默认 PIN 码)
credentials = 123456
# 要使用的域(YubiKey 默认域)
slot = 0
# 用于存储私钥的对象的标签(默认)
label = Private key for Digital Signature
# 用于存储相应公钥的对象的标签(默认)
label_pubkey = Public key for Digital Signature
请注意,libykcs11.so 路径应替换为您系统里的安装路径。
生成签名
请执行以下指令,使用hsm_cfg.ini文件中的配置为固件进行签名操作。
$ espsecure.py sign_data --version 2 --hsm --hsm-config hsm_cfg.ini --output signed.bin unsigned.bin
espsecure.py v4.5-dev
Trying to establish a session with the HSM.
Session creation successful with HSM slot 0.
Trying to extract public key from the HSM.
Got public key with label Public key for Digital Signature.
Connection closed successfully
Trying to establish a session with the HSM.
Session creation successful with HSM slot 0.
Got private key metadata with label Private key for Digital Signature.
Signing payload using the HSM.
Signature generation successful.
Connection closed successfully
Pre-calculated signatures found
1 signing key(s) found.
Signed 65536 bytes of data from unsigned.bin. Signature sector now has 1 signature blocks.
验证签名
出于完整性考虑,ESP32芯片模组乐鑫科技杭州代理处电话公司可以使用外部 HSM 提供的公钥来验证签名。
$ espsecure.py verify_signature --version 2 --hsm --hsm-config hsm_cfg.ini signed.bin
espsecure.py v4.5-dev
Trying to establish a session with the HSM.
Session creation successful with HSM slot 0.
Trying to extract public key from the HSM.
Got public key with label Public key for Digital Signature.
Connection closed successfully
Signature block 0 is valid (ECDSA).
Signature block 0 verification successful using the supplied key (ECDSA).
文档
更多关于使用 HSM 进行安全签名的说明可参阅 Esptool 文档。
请注意,此功能将在Esptoolv4.5 release版本中提供。目前,在Esptooldev版本中您可以使用pip install esptool[hsm]==4.5.dev3来进行先行试用。