保障嵌入式系统启动过程的安全性和完整性
安全启动是U-Boot中最重要的安全机制之一,它通过密码学方法验证启动过程中加载的所有镜像的完整性和真实性。
安全启动基于公钥基础设施(PKI)和数字签名技术,主要流程包括:
在U-Boot中启用安全启动需要以下步骤:
openssl genrsa -out private_key.pem 2048 openssl rsa -in private_key.pem -pubout -out public_key.pem
在configs/目录下的板级配置文件中添加:
CONFIG_FIT_SIGNATURE=y CONFIG_RSA=y CONFIG_OF_CONTROL=y CONFIG_OF_SEPARATE=y
mkimage -f fit-image.its -k private_key.pem -K u-boot.dtb -r fit-image.itb
U-Boot的安全启动验证过程:
每一阶段都使用前一级的公钥验证下一级的签名。
优点:
缺点:
为了防止未经授权的访问和修改,U-Boot提供了命令行密码保护机制。
配置步骤:
CONFIG_AUTOBOOT_KEYED=y CONFIG_AUTOBOOT_ENCRYPTION=y CONFIG_AUTOBOOT_DELAY_STR="password"
setenv bootdelay 3 setenv bootcmd "run default_bootcmd" setenv bootstopkeys "password" saveenv
启用密码保护后:
对于更复杂的安全需求,可以:
# 生成密码哈希 echo -n "mypassword" | sha256sum # 在U-Boot中设置 setenv secure_boot_hash "a1b2c3...xyz" setenv bootstopkeys "sha256,a1b2c3...xyz"
通过自定义命令实现:
# 在board.c中添加
int do_otp_auth(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
{
// 实现OTP验证逻辑
return 0;
}
U_BOOT_CMD(
otpauth, 1, 1, do_otp_auth,
"Perform OTP authentication",
""
);