介绍启用trustfence功能的系统的安全固件更新过程。有关Digi Embedded Yocto固件更新机制的总体概述,请参见从U-Boot程序固件

安全固件更新过程不仅仅是安全更新设备。它还验证交付的映像来自已知源,并且映像没有被修改以引入恶意软件。

安全固件更新是TrustFence生态系统的一部分,除了在您的项目中启用TrustFence之外,不需要进一步操作即可使用它。启用trustfence的系统的生成构件将准备好执行安全固件更新。按照来自Linux的程序固件更新启用trustfence的系统。

出于安全考虑,仅在封闭设备上支持安全固件更新。它不能在开放的设备上使用。看到安全引导概述

安全固件更新在标准固件更新过程中引入了两个新的安全元素:

文件散列验证

哈希校验保证了固件更新包的完整性。它确保包包含最初生成的工件,并且没有被更改。

生成固件更新包,计算固件更新过程中涉及的每个元素(图像、脚本等)的加密散列,并将其存储在固件更新包内的固件更新描述文件中。在安装时提取所有包元素,计算它们的哈希值,并与存储在描述文件中的哈希值进行比较。如果有任何散列不同,则固件更新过程将终止,以确保所有文件与生成特定固件更新包期间包含的文件完全相同。

签名验证

哈希验证确保固件更新包中包含的文件与sw-update描述文件中的期望值匹配,并且自安装时生成以来没有更改过。但是,第三方仍然可以创建自定义包,修改sw-update描述文件以使散列匹配,但将不需要的软件添加到更新包中。

为了避免这种情况,签名/验证过程在更新包本身的源中建立信任。由于固件更新包中包含的固件更新描述文件已经包含了所有包文件的哈希值,因此对该文件进行签名并将其签名包含在包中是有意义的。在进行固件更新时,使用安全引导IMG公钥验证签名,该公钥在启用了trustfence的系统的恢复分区中可用。这意味着只有经过验证的源生成的描述文件才能被安装程序接受。如果描述文件被外部源修改(例如更改文件哈希值),则签名验证将失败,并且安装过程将中止。

用于签名固件更新包的私钥与用于签名引导构件的私钥相同。这也意味着在密钥撤销的情况下,使用TRUSTFENCE_KEY_INDEX变量来获得正确的签名密钥。为了在安装已签名的固件更新包之前验证它们,在生成TrustFence构件的同时,将相应的公钥复制到恢复分区中。

安全固件更新机制依赖于TRUSTFENCE_SIGN变量。完成后,该设置默认为1在项目中启用TrustFence(INHERIT += "trustfence")。如果您在项目中手动将此选项设置为“0”,您也将禁用安全固件更新。