历史上的今天
今天是:2026年02月28日(星期六)
2023年02月28日 | 安全启动 - STM32安全启动应用
2023-02-28 来源:zhihu
安全启动实现了信任根。为了整体安全的需要,需要将信任传递到下一级。这个信任传递是通过加解密技术完成的。
在启动时,我们要至少保证下一级固件的完整可靠性。意味着,我们要使用认证技术,对用户固件进行验证。对用户固件进行验证可以使用哈希函数,也可以使用基于对称密钥的验证码 AES-GCM。
系统在安全启动前,需要保存已经烧录到 Flash 里的用户固件的哈希值。这个哈希值,通过前面所提到的 STM32 安全技术,保证它不会被内外攻击所改变。
系统在安全启动时,利用前面所构造的安全执行环境,对需要进一步执行的用户固件,进行一个哈希运算。哈希运算一般是采用 SHA256。
系统比较这两个值。如果计算出来的哈希值,与存储的哈希值相同,我们认为没有人对用户固件进行了改动。安全启动这时可以执行一个敏感信息的清理工作。如果有可能,可以将安全启动部分设置成不可访问,然后就放心大胆地跳转到用户固件去执行。
如果哈希值验证不通过,则系统直接重启。
对于 AES-GCM 来计算固件的验证码,也与算 SHA256 相同,都是对固件重新计算出一个值,然后与保存的值进行比较。
可重用的安全引擎
前面提到 STM32 SBSFU 将一些安全高度敏感的操作,包装在安全引擎里。这些安全高度敏感操作包括从安全引擎的初始化,从 Flash 中读取密钥、读写固件、进行加解密运算,像AES、ECDSA,还有从 Flash 中读些安全相关关的参数。
安全引擎是安全启动的核心可信代码,需要多项 STM32 平台的安全保护技术来综合保护,例如 Firewall 或者 MPU。安全引擎对外提供单一入口。在调用返回前,清理敏感信息。安全引擎也可以被用户固件调用。对用户固件来说,安全引擎是安全服务提供方。
安全启动在智能锁中的应用
对于某个特定的应用,只要资源不是受限制,那么安全启动的功能总是应该相似的。对于智能锁,我们可以直接应用 STM32 SBSFU。在编译 STM32 SBSFU 工程文件前,需要准备 python 环境。Python 环境是为了对密钥进行转化以及为固件更新所需要的对固件进行封装。
STM32 用户拿到 STM32 SBSFU 开发包时,一般会包含三个工程。
① 中间件 SE 安全引擎 Project:该工程是安全启动的核心可信代码,包括受信任的代码和密钥。密钥可以是对称密钥或者椭圆曲线 ECC 公钥。防火墙的调用门机制就是在该工程中实现。该工程输出的固件,会集成到安全启动与安全固件更新工程中去。
② 安全启动与安全固件更新 Project:该工程配置安全防护措施,集成安全引擎。该工程同时对外输出安全引擎的符号文件,供用户固件使用。
③ 用户固件工程Project:这是一个固件示例。
用户仅需要依次对这三个工程编译就可以了。在安全启动与安全固件手册更新有详细的一步一步操作说明。
前面提到 STM32 安全启动对外提供了受安全保护的安全引擎。用户程序的加解密操作,若需要比较高安全的服务,可以考虑使用安全引擎所提供的加解密服务。即使安全引擎中的服务不能满足需要,也可以考虑扩展安全引擎的功能。这个扩展不影响安全引擎的安全防护能力。
史海拾趣
|
功率MOSFET具有导通电阻低、负载电流大的优点,因而非常适合用作开关电源(switch-mode power supplies,SMPS)的整流组件,不过,在选用MOSFET时有一些注意事项。 功率MOSFET和双极型晶体管不同,它的栅极电容比较大,在导通之前要先对该电容充 ...… 查看全部问答> |
|
LCD驱动的开发流程是怎么样的.从上层->内核->硬件是怎样一个过程,有哪位大虾帮一下.谢谢罗!!!! LCD驱动的开发流程是怎么样的?从上层->内核->硬件是怎样一个过程,有哪位大虾帮一下.谢谢罗!!!!… 查看全部问答> |
|
一台电脑出厂时候,需要进行耳机和麦克风测试:是否能正常输出声音与输入,现在想改进以前的测试方式,可否将耳机与麦的两者的接口直接用一跟线连接起形成一简单的工作回路测试(耳机与麦都是3pin脚),直接将耳机的输出信号当作麦克风的输入信号,并保存成 ...… 查看全部问答> |
|
使用WinDbg與Virtual PC調試驅動程序時,如果讓Virtual PC停止全速運\行進行單步調試時,Virtual PC會占用100%的CPU資源,宿主電腦會運\行得很慢,請問這個有辦法解決嗎?… 查看全部问答> |
|
调试stm32时经常出现"FlashDownloadFailed-"Cortex-M3" MDK中出现 Error: Flash download failed-"Cortex-M3"的原因及解决办法 出现这处问题通常是MDK中的Flash的编程算法没有配置或没有配置正确, 在主菜单中打开Flash->Configure Falsh Tools配置窗口,切换到“Utilities"页。 按“S ...… 查看全部问答> |
|
最近刚开始接触开关电源,发现反激式开关电源电路中的变压器经常是多路输出的,那么每一路的输出电压与出入电压比值是不是每一路副边线圈与原边的匝数比啊,反馈绕组是不是也一样啊,我也按照这种方法计算过,发现实际值和计算的不一样啊,这个问题 ...… 查看全部问答> |




