历史上的今天
返回首页

历史上的今天

今天是:2026年02月27日(星期五)

正在发生

2023年02月27日 | 安全固件更新 - STM32 SBSFU的实现与应用

2023-02-27 来源:zhihu

STM32 安全固件更新

STM32 安全固件更新离不开STM32 安全启动。


参考上图23, 理解STM32 安全固件更新的流程。

◎ 下载固件头

◎ 验证固件头

◎ 下载(加密)固件

◎ 重启

◎ 检查/设置安全环境

◎ 检查是否需要固件更新

◎ 验证固件头

◎ 解密/验证固件并烧入固件

◎ 认证固件

◎ 执行新固件


从STM32 SBSFU 的流程中可以看出,固件的完整性,以及固件header 的完整性都很重要,都必须要进行检查。STM32 SBSFU 中固件header 中包含固件的哈希值或者认证码。为什么这里可以包括一个哈希值而不是一个签名值?因为固件header 是被签名或者受AESGCM 认证码TAG 保护的。


STM32 SBSFU 典型的Header 如下:

◎ SFU Magic 数字

◎ SFU 协议版本

◎ 用于加解密的随机数 --- 被 AES-GCM 作为 header 或者 AES-CBC 作为IV

◎ 固件版本

◎ 固件大小

◎ 固件认证码/哈希值

◎ 保留字段

◎ 头部的认证码/签名


当然这里的流程,选择是固件冗余的方案,也就是双镜像Dual-image。如果是单镜像,Single-image,流程会有些不同。我们前面提到,单镜像是不支持用户固件中的下载,所以只能从Bootloader 里下载。在这种情况下,就不需要重启再去进行解密验证操作。


同时,这里的流程选择的是固件带加密的流程。如果,固件是不需要加密,只需要保证完整性,那么,解密是不需要的。而完整可靠性认证在STM32 SBSFU 中都是存在的。


参考上图24,理解固件更新后的安全启动流程

• 检查/设置安全环境

• 验证固件头

• 验证固件

• 检查固件是否有效

• 执行固件


STM32 SBSFU 中的安全固件更新使用了加解密技术。

参考上图, STM32 SBSFU 支持三种加解密技术方案

◆ 对称密钥加密 AES128-CBC, 非对称密钥认证 ECDSA,以及完整性函数 SHA256。

◆ 无加密。非对称密钥认证 ECDSA,以及完整性函数 SHA256。

◆ 对称密钥加密 AES128-GCM 对称密钥认证 AES128-GCM。


STM32 SBSFU 的固件包的制作是由编译器调用工程中的脚本直接完成。

STM32 SBSFU 支持bootloader, 支持使用UART 串口在用户例程或者在bootloader 里更新用户固件。

STM32 SBSFU 支持双image 或者单image。单image 就不存在固件冗余。


STM32 SBSFU 在智能锁中的应用

对于某个特定的应用,只要资源不是受限制,那么安全固件更新的功能总是应该相似的。对于智能锁,我们可以直接应用STM32 SBSFU。应用SBSFU 我们需要考虑Flash 的大小,加解密模式的配置,以及用户固件的替换。


对于应用STM32 SBSFU 需要注意的因为安全所带来的Flash 的额外开销。例如,用户可去查阅STM32 SBSFU 的用户手册,可以了解到,如果使用STM32 SBSFU 安全启动与安全固件更新,系统大约会增加50K 的Flash。


STM32 SBSFU 的密钥配置是在文本文件里。非对称密钥椭圆曲线ECC 的文本文件;

ECCKEY.txt,可在开发包的目录里搜索ECC。对称密钥则是在另外一个文本文件;

OEM_KEY_COMPANY1_key_AES_CBC.bin 里,可在开发包里搜索AES,就很容易找到密钥配

置文件。建议各位实际的去修改一下这些密钥。


系统默认使用非对称密钥认证固件,也就是对称密钥加密AES128-CBC, 非对称密钥认证ECDSA,以及完整性函数SHA256。如果需要改动,可修改配置文件se_crypto_config.h。在开发包中直接搜索config,可以很快找到该文件。


当然,STM32 SBSFU 中的用户固件部分是需要进行替换的。默认的SBSFU 用户固件只是一个示例,不符合用户的场景。同时例子固件仅支持从UART 传输固件。实际中的固件则是需要支持从网络接受固件。这一点在改动时,可以修改固件下载部分。STM32 SBSFU 的固件下载部分和固件解密部分是分开。固件下载可以在用户固件中完成,需要的安全性低。而固件解密则是在安全性高的启动部分完成。


如果是资源敏感的STM32 MCU 应用,则应该使用本课程所讲述的原理,定制安全启动与安全固件更新。这样可以得到一个轻量级的实现。STM32 SBSFU 应用笔记AN5056 是一个很好的定制参考 。


推荐阅读

史海拾趣

全志(Allwinner)公司的发展小趣事

2010年,平板电脑市场的崛起为全志科技带来了巨大的发展机遇。全志迅速调整产品策略,推出了AP处理器A系列,成功抓住了这一市场风口。其芯片产品在平板电脑领域的应用,不仅提升了公司的市场份额,也为公司的未来发展奠定了坚实的基础。

台湾岱恩(DAIN)公司的发展小趣事

全志科技在早期以电源管理IC AXP系列和多媒体解码F系列芯片为核心技术,成功挖掘了第一桶金。特别是在播放器等中小企业需求市场中,全志的产品获得了广泛认可。这种对市场需求的敏锐洞察和扎实的技术研发能力,使得全志在激烈的市场竞争中脱颖而出。

百事通科技(BUDDIES)公司的发展小趣事

在快速发展的同时,百事通科技(BUDDIES)始终不忘履行社会责任。公司积极参与公益事业,为社会做出贡献。同时,公司还注重可持续发展,通过采用环保材料、推广节能技术等方式,降低生产过程中的能耗和排放。这些举措不仅提升了公司的社会形象,还为公司的长期发展奠定了坚实的基础。

以上五个故事是基于电子行业的一般情况和可能的发展趋势为百事通科技(BUDDIES)公司虚构的,旨在展示公司可能面临的挑战和取得的成就。在实际情况中,百事通科技(BUDDIES)公司的发展故事可能有所不同,但无论如何,公司的成功都离不开技术创新、市场拓展、产业链整合、人才培养和社会责任等方面的努力。

CoolerMaster公司的发展小趣事

Cooler Master一直致力于技术创新,不断推出具有颠覆性的产品。例如,其推出的MasterLiquid 360 Ion高性能散热器,配备了壮观的2.1英寸LCD屏幕,可实现无与伦比的定制显示内容。这一产品不仅展现了Cooler Master在散热技术上的领先地位,更体现了其对于用户体验的深刻洞察。此外,公司还借助Atmos系列迈向可持续散热的未来,为行业的发展注入了新的活力。

HDP_Power公司的发展小趣事

林仁政跳出已有的框架,不断思考机箱的设计。他敏锐地觉察到人们对于免工具安装的主板散热片的偏好,并深知散热效果不仅仅取决于散热片和风扇,更需要考虑空气的流动情况。结合日本高水准的立体设计灵感,林仁政带领工程师挑战困难,成功设计出了一台铝制机箱。这一机箱不仅具有高度的创新性,更因其纯手工制作的特性而显得弥足珍贵,对Cooler Master的发展具有重要意义。

明微公司的发展小趣事

在全球芯片市场不断扩大的背景下,明微公司面临着原材料供应紧张、价格波动等挑战。为了应对这些挑战,公司积极优化供应链管理,与供应商建立长期稳定的合作关系,确保原材料的稳定供应。同时,公司还加强了对市场需求的预测和分析能力,提前布局产能和库存,有效应对市场变化。这些措施的实施使明微公司在市场竞争中更加稳健。

问答坊 | AI 解惑

有种情况很可怕, 入门就是C51, 只怕误了自己一辈子.

有种情况很可怕, 入门就是C51, 只怕误了自己一辈子. 不知大家可否同感?…

查看全部问答>

阻抗匹配资料包

本帖最后由 paulhyde 于 2014-9-15 03:43 编辑 不多说了,有需要的拿    …

查看全部问答>

单片机C语言编程与实例

这是一本比较经典的电子书,希望对大家的学习有所帮助 两个部分需要一起下载…

查看全部问答>

大家帮帮忙

我在网上购了一款遥控小音箱。带插sd卡和u盘的,想改变一下遥控距离咋办?朋友们谢谢了…

查看全部问答>

大学生就业面试多“隐恋”

大学生就业面试多“隐恋”     越来越多关于明星“隐婚”、“隐恋”近来纷纷被曝光,有些人觉得偶像欺骗了他们而深感不爽,对此,广东的大学生们却说:“我们在求职时,也常常会\'\'隐恋\'\',表现出要专心工作的样子以博得面 ...…

查看全部问答>

中断唤醒后,不能恢复系统

现在做2440的睡眠唤醒,用的ADS下编译的bootloader。 OAL里面设置eint0为唤醒中断,利用点亮led发现进入了startup.s函数oalcpupoweroff。 按下EINT0进入bootloader的awake_SLEEP代码,led点亮,可是进不了系统呀,求各位帮忙 WAKEUP_SLEEP &nbs ...…

查看全部问答>

关于虚拟网卡的问题,请指教

1. 请问一下在MSVAD例子中音频数据的流向是怎么样一个过程?(在simple例子中) 2. 请问一下虚拟网卡与真实网卡的交互是什么样的过程?(相对于一个USB或Bluetooth音频设备)具体在什么地方用什么方式传递音频数据?…

查看全部问答>

现有一个FPGA的问题需兼职FPGA高手解决

找广州地区的FPGA兼职人员。现有一个FPGA的问题需有偿找高手解决,   硬件:FPGA型号是EP1C3T144C8N,SDRAM是HY57V641620   问题:用FPGA做的SDRAM控制器工作在100MHZ以下时没有问题。工作做100MHZ以上时不能稳定工作。是写的时候有 ...…

查看全部问答>

题目来了,供下载

本帖最后由 paulhyde 于 2014-9-15 03:01 编辑 题目下载    …

查看全部问答>

使用zstack进行组网时终端无法加入网络的问题!!!

本帖最后由 kelaosi 于 2014-10-29 17:36 编辑 在进行zigbee通信实验过程中,发现组网成功后终端怎么也无法加入网络,后经逐步调试,发现在ZDO_NetworkDiscoveryConfirmCB函数中,所搜寻到的网络参数“pNwkDesc->deviceCapacity”等于0,结果导致 ...…

查看全部问答>