这第二个示例涉及更新引导固件。我们系统的要求如下:
• 新的固件镜像通过网络提供。
• 只能安装经过身份验证的镜像。
• 固件版本不能回滚。
为了实现这些目标,OEM 使用其私钥对图像进行签名。下载设备配备了公钥,它可以用来验证签名。当固件更新时,非易失性计数器会递增,允许检测回滚。
我们的系统如下图所示:
镜像的下载在非安全状态下进行。镜像本身不是秘密,因此我们不需要保护其机密性。下载的镜像被放置在内存中,并发出请求到安全状态以安装它。
安全状态软件负责进行身份验证。它使用 OEM 的公钥进行身份验证,通常存储在芯片外的闪存中。这个密钥不是秘密,因此我们不需要确保机密性。我们需要确保密钥的真实性,并检测替代密钥的尝试。我们通过在芯片上保存密钥的哈希来实现这一点,该哈希可以在需要时用于检查密钥。哈希需要较少的位数,而芯片上的内存很昂贵。
当加载和检查公钥时,可以检查新的固件镜像。我们希望确保它是真实的(签名匹配),并且它是比已安装的固件版本更新的版本。
假设这些检查都通过了,镜像就被安装了,并且 NV 计数器递增。递增 NV 计数器意味着,如果攻击者尝试安装旧的固件,设备将检测到该尝试。
在这个示例中,TrustZone 允许我们确保用于验证固件镜像的密钥受到保护,并且固件镜像无法回滚。