实战经验|STM32H5OEMiROT之体验

原创 STM32单片机 2024-02-06 17:26


关键字:OEMiROT, iROT, Root Of Trust,  安全启动, 固件更新, 信任根


目录预览

1、前言

2、准备工作

3、烧录 OEMiROT 固件并运行
4、固件更新
5、还原


01

前言


本文档通过一个动手实验, 详细演示了如何在 STM32H563 上运行一个 OEMiROT 的功能. 旨在针对那些 OEM 想自己实现一个基于 STM32H563 上的 iROT 功能而又不知如何开始的开发者.


02

准备工作


开发板 : NUCLEO-H563ZI



软件包 : STM32Cube_FW_H5_V1.1.0

工具:
• STM32CubeProgrammer v2.14.0
• Tera Term 串口终端显示
• Trust Package Creator(安装 STM32CubeProgrammer 时一并安装, 注意勾选)

IDE: STM32CubeIDE v1.13.0


03

烧录 OEMiROT 固件并运行


3.1. 脚本环境配置板编程基础


本动手实验基于 STM32CubeH5 固件包, 此包必须位于一个没有中文且没有空格的路径下, 于是我们将此包拷贝到 C:\workspace 目录, 在此包路径 \STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning 目录下有一个 env.bat 文件, 用文本编辑器(如记事本)打开此文件: 



检查上面两行, STM32CubeProgrammer_CLI.exe, 以及 STM32TrustedPackageCreator_CLI.exe 这两个工具的安装路径是否跟你电脑中的安装路径符 合, 如果不符, 则需要进行相应的修改.


3.2. 运行 OEMiROT 预配置(provisioning)脚本


再进入到 cube 包下的目录 STM32Cube_FW_H5_V1.1.0\Projects\NUCLEOH563ZI\ROT_Provisioning\OEMiROT 目录下, 有一个名为 provisioning.bat 的脚本, 双击运行它:



如上图, 系统会自动打开一个 DOS 命令终端窗口, 在此动手实验过程中, 如无特别说明, 此窗口将一直保持, 我们将通过此窗口的提示信息进行每一步的操作.

如上图, 信息提示我们打开TrustedPackageCreator 工具, 生成 OEMiROT_Config.obk 文件.


3.3. 生成 OEMiROT_Config.obk


打开 TrustedPackageCreator 工具:



如上图, 在最左边 ①处点击 “H5”, 然后在②处选项”OBKey”, 接下来在③处选择STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\OEMiROT\Config 目录下的 OEMiRoT_Config.xml 文件, 此文件为生成 OEMiROT 对应 obk 文件的配置文档. 然后下面会显示 3 个密钥对, 从上到下分别为 :
• OEMiRoT_Authentication_S.pem: Secure APP 对应的认证密钥(使用公钥)
• OEMiRoT_Authentication_NS.pem: Non Secure APP 对应的认证密钥(使用公钥)
• OEMiRoT_Encryption.pem : Secure APP+Non Secure APP 固件加密密钥对应的解包密钥(使用私钥)

这三个密钥其实都是成对的, 即公钥私钥对. 位于 Keys 目录下. STM32CubeH5 包下已经自带了默认的密钥对, 如果你不想使用默认的, 则可以点击上图中的4中的 “Regenerate” 重新生成这三个密钥对. 一旦重新生成, 则需要注意保存这三个密钥对.

接下来就要生成 OEMiROT 对应的 obk 文件了, 在右边的输出路径下, 选择一个路径, 比如Binary 目录. 最后点击生成. 则将在 Binary 目录下生成 OEMiRoT_Config.obk 文件.


3.4. 生成 DA 对应的 obk 文件


回到脚本终端窗口, 输入回车键 :



如上图, 提示你通过 TPC 工具生成 DA_Config.obk 文件. 有关如何生成 DA_Config.obk 文件,之前已有其它文档讲述, 且 STM32CubeH5 包下STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Binary 此目录中已经有现存的 DA 对应的 obk 文件, 其对应的私钥和证书分别位于上一级目录下的 Keys 目录和 Certificates 目录下, 这些文件均可直接使用, 所以这里不再重复讲述它们的生成过程.

直接按下回车键..


3.5. 编译 OEMiROT_Boot 工程



如上图, 提示用户打开 OEMiROT_Boot 工程并编译.

于是用 STM32CubeIDE 打开工程, 路径为: STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\Applications\ROT\OEMiROT_Boot\STM32CubeIDE 目录下, 编译过后,会在工程下的 Binary 目录下生成 OEMiROT_Boot.bin 文件.

再回到终端窗口按下回车键…


3.6. 编译 OEMiROT_Appli_TrustZone 工程


用 STM32CubeIDE 打开工程: STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\Applications\ROT\OEMiROT_Appli_TrustZone\STM32CubeIDE

此工程下有两个子工程 :



如上图所示, 先编译 Secure 工程, 再编译 NonSecure 工程. 编译通过后, postbuild 脚本会在Binary 目录下生成原始 bin 文件和加密后的固件.



原始 bin 文件是用来初始安装的, 而加密后的固件是用来做升级的. 加密和签名过程正是postbuild 脚本来实现的, 其对应的固件加密密钥是此次编译过程中脚本随机产生的密钥. 此密钥会通过 3.3 节中所产生的 OEMiRoT_Encryption.pem 对应的公钥来进行打包并放入 header 中.而签名所用的私钥并正是 3.3 节中所产生的 OEMiRoT_Authentication_S.pem 私钥, 它对应Secure 工程签名, OEMiRoT_Authentication_NS.pem 则对应 Non Secure 工程签名.


3.7. 手动生成加密且签名的映像文件(可选)


除了通过 postbuild 脚本来自动生成固件加密且签名的映像文件外, 你也可以通过手动的方式来生成它.如下图, 我们可通过 TPC 手动将原始 bin 文件加密且签名.



如上图, 打开 TPC, 左边①处选择 “H5”, 然后在②处选择”Image Gen”, 在③处输入配置文件 : STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\OEMiROT\Images\ OEMiROT_S_Code_Image.xml. 然后在Firmware area size 处保持默认的 0x6000, version :1.0.0, Firmware binary input file 处导入S App 生成的明文固件映像. Image Out File 处即可生成的加密且签名的固件。加密的密钥是随机的, 它通过打包进 header 中, 如之前描述. 这就是手动生成加密且签名的固件映像方法. 由于App 工程的 postbuild 脚本会自动完成, 所以, 这一步骤并不是必须的.

此外需要注意地是, 在 STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\OEMiROT\Images 目录下还有其它几个用来手动生成加密签名映像的配置文件, 如下图所示 :



通过这几个文件名, 顾名思义, 分别对应着 Secure App 的固件, 数据, NonSecure App 的固件,数据映像, 如果需要手动生成这四种加密且签名的映像文件, 则通过 TPC 手动导入对应的 xml配置文件. 在 Firmware binary input file 输入原始 bin 文件, 在 Image Out File 处输入导出文件, 然后点击 Generate Image, 生成最终的加密且签名的映像文件(如rot_tz_s_app_enc_sign.hex, 或者 rot_tz_ns_app_enc_sign.hex).


3.8. 生成加密签名的数据映像(可选)


回到终端窗口按下回车键, 如下所示 :



提示我们通过 TPC 手动生成加密数据映像. 工程中默认是未定义任何 Data image 的(flash_layout.h 头文件):



因此, 此步骤默认我们是可以跳过. 如果工程中此宏修改成 1, 则需要手动通过 TPC 来生成加密的数据映像. 方法类似于 3.6 节的手动生成环节, 只不过配置文件换成 xxx_Data_Image.xml.

这一步骤, 我们直接在终端窗口中按下回车键…



接下来再次提示生成 NS APP 对应的 Data Image, 同理, 在工程中默认宏中是没有配置的, 因此直接按下回车键…


3.9. 预配置(provisioning)



在做预配置之前, 提示你是否已将 BOOT0 引脚拉低. 确认 NUCLEO-H563ZI 板上的 BOOT0引脚没有连到 VDD(CN4 的 BOT0 引脚未接任何东西即可). 确认后按下回车键…



如上图, 这此过程中, 脚本会自动烧录 boot, S APP, NS APP 三个 bin 文件, 以及配置 option bytes, 接下来提示你输入芯片最终的 product state, 这里我们输入”CLOSED”…(千万别设置为 LOCKED 状态!)



如上图所示, 在此过程中, 脚本会先将芯片的 product state 切换到 provisioning 状态, 然后再做预配置, 这里会预配置 OEMiROT 的 obk 文件,以及 DA 的 obk 文件, 然后最终将芯片的product state 设置为你上一步输入的最终芯片状态. 最后系统提供已完成. 到这一步, 脚本的整个流程结束. 接下来, 我们验证下烧录后的芯片是否工作正常.


3.10.检查程序运行状态


打开 Tera Term, 设置串口波特率为 115200 bps, 然后复位板子, 查看打印信息…



如上图所示, 当打印信息显示 User App #A 时, 表示 NS APP 已经运行成功, 所有程序运行结果均正常!


04

固件更新


接下来, 我们将演示通过 NS APP 触发程序跳转到内置的 bootloader 中, 并通过串口下载新的加密固件, 复位后并安装它.


4.1. 修改代码, 并重新编译工程


打开 NS APP 的工程, 在 main.c 文件中将 NS APP 的版本号从 “A”改成”B”:



然后重新编译 NS APP 工程.

Postbuild 脚本将重新生成 S APP 和 NS APP 的加密固件 :



如上图所示, 这四个文件均将重新生成.

接下来我们将升级 APP 固件.


4.2. 跳转到 loader 程序


在串口终端中我们输入”1”:



如上图所示, 输入 1 后, 程序跳转到芯片内置的 bootloader 中.

断开 Tera Term 的串口连接 :



4.3. 通过 STM32CubeProgrammer 下载新固件


打开 STM32CubeProgrammer, 并通过串口模式连接芯片:



将新生成 NS APP 的加密后的固件 rot_tz_ns_app_enc_sign.hex 拖入到STM32CubeProgrammer 中 :



如上图点击下载.

同样的, 也可以将 S APP 的加密固件 rot_tz_s_app_enc_sign.hex 拖入STM32CubeProgrammer 中并下载 :



下载成功后, 断开 STM32CubeProgrammer 的串口连接, 并使 Tera Term 重新连接串口 , 然后再重启 NUCLEO-H563ZI 板, 于是可以看到如下打印信息 :



如上图所示, NS APP 的版本打印信息从 “A”已经改成”B”了, 这说明固件(加密且签名的)已经更新成功.


05

还原


5.1. DA 回退


打开 STM32CubeProgrammer, 采用 ST-Link 模式, 在未连接的情况下,在左边选择盾牌图标, 然后再选择”DA”选项卡, 再点 Discover 按键….



界面变成如下所示 :



如上图所示, 第一个红框内输入 DA 私钥文件 :

STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Keys\key_1_root.pem,

第二个红模式内输入证书 : STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Certificates\ cert_root.b64

然后击点 continue 按键, 然后界面变成如下所示 :



如上图所示, 在左边选择”Full Regression”, 然后再点击 Execute 按键…



然后如上图所示, DA 回退成功. 此时,查看 option bytes 值 , product state 已经变成Open(0xED), TZEN 依然使能(TZEN=0xB4) :



5.2. 关闭 trustzone


如果需要也可以将 TZEN 关闭(TZEN=0xC3, 可直接修改, 这点与U5必须伴随 RDP回退操作不同), 这样芯片就完成恢复成原始状态了.






完整内容请点击“阅读原文”

STM32单片机 ST MCU (产品+工具+资料+技术+市场+活动)x 您的关注x您的支持 = STM32 单片机蝴蝶乐园
评论 (0)
  • 飞凌嵌入式作为龙芯合作伙伴,隆重推出FET-2K0300i-S全国产自主可控工业级核心板!FET-2K0300i-S核心板基于龙芯2K0300i工业级处理器开发设计,集成1个64位LA264处理器,主频1GHz,提供高效的计算能力;支持硬件ECC;2K0300i还具备丰富的连接接口USB、SDIO、UART、SPI、CAN-FD、Ethernet、ADC等一应俱全,龙芯2K0300i支持四路CAN-FD接口,具备良好的可靠性、实时性和灵活性,可满足用户多路CAN需求。除性价比超高的国产处理器外,
    飞凌嵌入式 2025-05-07 11:54 61浏览
  • 文/郭楚妤编辑/cc孙聪颖‍相较于一众措辞谨慎、毫无掌舵者个人风格的上市公司财报,利亚德的财报显得尤为另类。利亚德光电集团成立于1995年,是一家以LED显示、液晶显示产品设计、生产、销售及服务为主业的高新技术企业。自2016年年报起,无论业绩优劣,董事长李军每年都会在财报末尾附上一首七言打油诗,抒发其对公司当年业绩的感悟。从“三年翻番顺大势”“智能显示我第一”“披荆斩棘幸从容”等词句中,不难窥见李军的雄心壮志。2012年,利亚德(300296.SZ)在深交所创业板上市。成立以来,该公司在细分领
    华尔街科技眼 2025-05-07 19:25 319浏览
  • 这款无线入耳式蓝牙耳机是长这个样子的,如下图。侧面特写,如下图。充电接口来个特写,用的是卡座卡在PCB板子上的,上下夹紧PCB的正负极,如下图。撬开耳机喇叭盖子,如下图。精致的喇叭(HY),如下图。喇叭是由电学产生声学的,具体结构如下图。电池包(AFS 451012  21 12),用黄色耐高温胶带进行包裹(安规需求),加强隔离绝缘的,如下图。451012是电池包的型号,聚合物锂电池+3.7V 35mAh,详细如下图。电路板是怎么拿出来的呢,剪断喇叭和电池包的连接线,底部抽出PCB板子
    liweicheng 2025-05-06 22:58 479浏览
  • 二位半 5线数码管的驱动方法这个2位半的7段数码管只用5个管脚驱动。如果用常规的7段+共阳/阴则需要用10个管脚。如果把每个段看成独立的灯。5个管脚来点亮,任选其中一个作为COM端时,另外4条线可以单独各控制一个灯。所以实际上最多能驱动5*4 = 20个段。但是这里会有一个小问题。如果想点亮B1,可以让第3条线(P3)置高,P4 置低,其它阳极连P3的灯对应阴极P2 P1都应置高,此时会发现C1也会点亮。实际操作时,可以把COM端线P3设置为PP输出,其它线为OD输出。就可以单独控制了。实际的驱
    southcreek 2025-05-07 15:06 343浏览
  • 后摄像头是长这个样子,如下图。5孔(D-,D+,5V,12V,GND),说的是连接线的个数,如下图。4LED,+12V驱动4颗LED灯珠,给摄像头补光用的,如下图。打开后盖,发现里面有透明白胶(防水)和白色硬胶(固定),用合适的工具,清理其中的胶状物。BOT层,AN3860,Panasonic Semiconductor (松下电器)制造的,Cylinder Motor Driver IC for Video Camera,如下图。TOP层,感光芯片和广角聚焦镜头组合,如下图。感光芯片,看着是玻
    liweicheng 2025-05-07 23:55 237浏览
  • 文/Leon编辑/cc孙聪颖‍《中国家族企业传承研究报告》显示,超四成“企二代” 明确表达接班意愿,展现出对家族企业延续发展的主动担当。中国研究数据服务平台(CNRDS)提供的精准数据进一步佐证:截至 2022 年,已有至少 280 家上市家族企业完成权杖交接,其中八成新任掌门人为创始人之子,凸显家族企业代际传承中 “子承父业” 的主流模式。然而,对于“企二代” 而言,接棒掌舵绝非易事。在瞬息万变的商业环境中,他们既要在白热化的市场竞争中开拓创新、引领企业突破发展瓶颈,又需应对来自父辈管理层的经
    华尔街科技眼 2025-05-06 18:17 22浏览
  • UNISOC Miracle Gaming奇迹手游引擎亮点:• 高帧稳帧:支持《王者荣耀》等主流手游90帧高画质模式,连续丢帧率最高降低85%;• 丝滑操控:游戏冷启动速度提升50%,《和平精英》开镜开枪操作延迟降低80%;• 极速网络:专属游戏网络引擎,使《王者荣耀》平均延迟降低80%;• 智感语音:与腾讯GVoice联合,弱网环境仍能保持清晰通话;• 超高画质:游戏画质增强、超级HDR画质、游戏超分技术,优化游戏视效。全球手游市场规模日益壮大,游戏玩家对极致体验的追求愈发苛刻。紫光展锐全新U
    紫光展锐 2025-05-07 17:07 252浏览
  • 硅二极管温度传感器是一种基于硅半导体材料特性的测温装置,其核心原理是利用硅二极管的电学参数(如正向压降或电阻)随温度变化的特性实现温度检测。以下是其工作原理、技术特点及典型应用:一、工作原理1、‌PN结温度特性‌硅二极管由PN结构成,当温度变化时,其正向电压 VF与温度呈线性负相关关系。例如,温度每升高1℃,VF约下降2 mV。2、‌电压—温度关系‌通过jing确测量正向电压的微小变化,可推算出环境温度值。部分型号(如SI410)在宽温域内(如1.4 K至475 K)仍能保持高线性度。
    锦正茂科技 2025-05-09 13:52 68浏览
  • 随着智能驾驶时代到来,汽车正转变为移动计算平台。车载AI技术对存储器提出新挑战:既要高性能,又需低功耗和车规级可靠性。贞光科技代理的紫光国芯车规级LPDDR4存储器,以其卓越性能成为国产芯片产业链中的关键一环,为智能汽车提供坚实的"记忆力"支持。作为官方授权代理商,贞光科技通过专业技术团队和完善供应链,让这款国产存储器更好地服务国内汽车厂商。本文将探讨车载AI算力需求现状及贞光科技如何通过紫光国芯LPDDR4产品满足市场需求。 车载AI算力需求激增的背景与挑战智能驾驶推动算力需求爆发式
    贞光科技 2025-05-07 16:54 179浏览
  • Matter协议是一个由Amazon Alexa、Apple HomeKit、Google Home和Samsung SmartThings等全球科技巨头与CSA联盟共同制定的开放性标准,它就像一份“共生契约”,能让原本相互独立的家居生态在应用层上握手共存,同时它并非另起炉灶,而是以IP(互联网协议)为基础框架,将不同通信协议下的家居设备统一到同一套“语义规则”之下。作为应用层上的互通标准,Matter协议正在重新定义智能家居行业的运行逻辑,它不仅能向下屏蔽家居设备制造商的生态和系统,让设备、平
    华普微HOPERF 2025-05-08 11:40 227浏览
  • 在过去的很长一段时间里,外卖市场呈现出美团和饿了么双寡头垄断的局面。美团凭借先发优势、强大的地推团队以及精细化的运营策略,在市场份额上长期占据领先地位。数据显示,截至2024年上半年,美团外卖以68.2%的市场份额领跑外卖行业,成为当之无愧的行业老大。其业务广泛覆盖,从一线城市的繁华商圈到二三线城市的大街小巷,几乎无处不在,为无数消费者提供便捷的外卖服务。饿了么作为阿里本地生活服务的重要一环,依托阿里强大的资金和技术支持,也在市场中站稳脚跟,以25.4%的份额位居第二。尽管市场份额上与美团有一定
    用户1742991715177 2025-05-06 19:43 53浏览
  • 温度传感器的工作原理依据其类型可分为以下几种主要形式:一、热电阻温度传感器利用金属或半导体材料的电阻值随温度变化的特性实现测温:l ‌金属热电阻‌(如铂电阻 Pt100、Pt1000):高温下电阻值呈线性增长,稳定性高,适用于工业精密测温。l ‌热敏电阻‌(NTC/PTC):NTC 热敏电阻阻值随温度升高而下降,PTC 则相反;灵敏度高但线性范围较窄,常用于电子设备温控。二、热电偶传感器基于‌塞贝克效应‌(Seebeck effect):两种不同
    锦正茂科技 2025-05-09 13:31 69浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦