【官方原创】如何基于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 - 保留所有权利

相关推荐
空&白9 分钟前
vue暗黑模式
javascript·vue.js
飞凌嵌入式39 分钟前
用「EN 18031认证」通关欧盟,这张 “网络安全护照” 已就位
网络·安全·能源
●VON1 小时前
CANN安全与隐私:从模型加固到数据合规的全栈防护实战
人工智能·安全
VT.馒头1 小时前
【力扣】2695. 包装数组
前端·javascript·算法·leetcode·职场和发展·typescript
css趣多多1 小时前
一个UI内置组件el-scrollbar
前端·javascript·vue.js
-凌凌漆-1 小时前
【vue】pinia中的值使用 v-model绑定出现[object Object]
javascript·vue.js·ecmascript
程序员清洒1 小时前
CANN模型安全:从对抗防御到隐私保护的全栈安全实战
人工智能·深度学习·安全
Hello_Embed2 小时前
libmodbus 移植 STM32(USB 串口后端篇)
笔记·stm32·单片机·嵌入式·freertos·libmodbus
秋邱2 小时前
不仅是极速:从 CANN SHMEM 看 AIGC 集群通信的“安全微操”艺术
安全·aigc
初恋叫萱萱2 小时前
CANN 生态安全加固指南:构建可信、鲁棒、可审计的边缘 AI 系统
人工智能·安全