【官方原创】如何基于DevelopPackage开启安全启动(MP15x) LAT6036

关键字:安全启动、签名、OTP

1. 引言

官方WIKI中对安全启动的描述比较晦涩难懂,客户常常不能很好地理解如何开启安全启动。

本篇应用笔记将以尽量简洁的语言介绍如何基于Developer Package来开启这一功能。

2. 基本概念

所谓安全启动,通常包含两个层面的安全保证:

  1. 签名的安全保证:就是确保运行在板子上的软件是被特定用户授权过的软件,如果篡改过的

软件或者其他调试软件在没有获取用户签名的情况下,是不能运行在板子上的。

  1. 加密的安全保证:这是一个更高的安全启动,就是软件被加密了,板子上运行的软件是不能

被外界看到的,同时没有签名他们也不能运行未经签名的软件。目前MP15x只支持签名的安全保

证。

3. 硬件需求

如上图所示,STM32MP15x包含多种型号,只有STM32MP15xC/F系列的芯片才能支持安

全启动。

4. 开启安全启动

主要分为5个步骤:

  1. 生成authentication keys;

  2. 把 Hash (SHA256) of the ECC Public Key 烧录到 OTP中;

  3. close 板子(这一步可以放到最后来做,为了测试方便,尽量先不要close板子);

  4. 准备签名的软件;

  5. 烧录软件验证

❖ 生成 authentication keys 文件(KeyGen tool - stm32mpu

STM32MP15x需要的是ECC公钥的Hash值(PKH),ROM code会先用这个公钥的Hash

值来对比存在TF-A的STM32Header里面的公钥。

运用如下命令生成authentication keys,这几个key一定要保存好,将来bin文件的签名都

要依赖这一组keys,也要牢记保护密码。

STM32MP_KeyGen_CLI -pubk ./public.pem -prvk ./private.pem -hash ./pubKeyHash.bin -pwd test123

该工具需要通过安装STM32CubeProgrommer获取。

❖ 烧录公共keys的hash值到OTP

有以下几种烧录方式:

  1. U-Boot stm32key command(link)

  2. STM32CubeProgrammer(link)

  3. U-Boot fuse command(link)

  4. Secure Secret Provisioning

❖ 编译并生成带签名的TF-A文件(link1

mbedTLS这个库是必须的。

获取mbedTLS库的方式有两种:

一是直接从github获取:https://github.com/Mbed-TLS/mbedtls 版本 2.28.1,然后

编译;

二是通过yocto 获取源码,然后编译,devtool modify mbedtls;devtool build

mbedtls。

PC $> MBEDTLS_DIR=<mbedtls path> make -f ../Makefile.sdk TRUSTED_BOARD_BOOT=1

TF_A_DEVICETREE= <board name> TF_A_CONFIG="optee sdcard emmc usb"

DEPLOYDIR=$FIP_DEPLOYDIR_ROOT/arm-trusted-firmware stm32

生成带签名的FSBL image:

PC $ > STM32_SigningTool_CLI -pubk <path to meta-st-stm32mp>key/stm32mp15/publicKey.pem

prvk <path to meta-st-stm32mp>key/stm32mp15/privateKey.pem -pwd <password> -t fsbl -bin arm

trusted-firmware/tf-a-<board name>-sdcard.stm32 -o arm-trusted-firmware/tf-a-<board name>

sdcard_Signed.stm32

带签名的tfa生成后烧录,重启板子,可以看到如下打印:

❖ 编译并生成带有签名的FIP文件(link2

这个操作可以在TF-A源码目录下进行,文档可以参考(docs/plat/stm32mp1.rst)。

注:TF-A v2.8 版本以后TF-A源码目录下tools/cert_create/中将没有 cert_create工具

直接供用户使用,需要使用如下指令先生成 cert_create 工具。

PC $> cd <TF-A source code>

PC \> make OPENSSL_DIR=OECORE_NATIVE_SYSROOT/bin PLAT=stm32mp2 DEBUG=1

V=1 certtool

编译完毕后, tools/cert_create/路径下将会出现cert_create可执行文件。

再通过如下脚本生成各种证书:

然后通过如下脚本生成fip文件:

注意,该脚本缺少如下两个证书,需要手动添加:

编译成功后,把对应的FIP文件烧录到对应的分区,重启盒子能看到如下的打印:

❖ close板子

最后都验证成功后,可以close板子,参考这个wiki:

https://wiki.st.com/stm32mpu/wiki/How_to_secure_STM32_MPU#Close_the_device

意法半导体公司及其子公司 ("ST")保留随时对 ST 产品和 / 或本文档进行变更的权利,恕不另行通知。买方在订货之前应获取关于 ST 产品 的最新信息。 ST 产品的销售依照订单确认时的相关 ST 销售条款。 买方自行负责对 ST 产品的选择和使用, ST 概不承担与应用协助或买方产品设计相关的任何责任。 ST 不对任何知识产权进行任何明示或默示的授权或许可。 转售的 ST 产品如有不同于此处提供的信息的规定,将导致 ST 针对该产品授予的任何保证失效。 ST 和 ST 徽标是 ST 的商标。若需 ST 商标的更多信息,请参考 www.st.com/trademarks。所有其他产品或服务名称均为其 各自所有者的财 产。 本文档是ST中国本地团队的技术性文章,旨在交流与分享,并期望借此给予客户产品应用上足够的帮助或提醒。若文中内容存有局限或与ST 官网资料不一致,请以实际应用验证结果和ST官网最新发布的内容为准。您拥有完全自主权是否采纳本文档(包括代码,电路图等)信息,我 们也不承担因使用或采纳本文档内容而导致的任何风险。 本文档中的信息取代本文档所有早期版本中提供的信息。 © 2020 STMicroelectronics - 保留所有权利

相关推荐
醒醒酒2 小时前
sqli-labs Less1-4 新手修仙版
数据库·计算机网络·安全·web安全·网络安全·oracle
147API2 小时前
Prompt Injection 怎么防:攻击面与工程防线(含安全 Checklist)
网络·安全·prompt
v_for_van2 小时前
STM32低频函数信号发生器(四通道纯软件生成)
驱动开发·vscode·stm32·单片机·嵌入式硬件·mcu·硬件工程
悟能不能悟2 小时前
SimpleDateFormat 为什么线程不安全
开发语言·安全
未来之窗软件服务2 小时前
服务器运维(二十五)终端安全证书管控与Nginx HTTPS 部署—东方仙盟练气期
运维·服务器·安全·仙盟创梦ide·东方仙盟
奔跑的web.2 小时前
TypeScript namespace 详解:语法用法与使用建议
开发语言·前端·javascript·vue.js·typescript
信创天地2 小时前
从 “替代” 到 “超越”:信创系统架构师如何筑牢自主可控技术底座
运维·安全·系统架构·开源·dubbo·risc-v
你怎么知道我是队长2 小时前
win11系统查看设备配置
android·java·javascript
乾元2 小时前
社交工程 2.0:生成式 AI 驱动的高拟真钓鱼与认知对抗
网络·人工智能·安全·机器学习·架构