一、引导和信任链
引导是任何TrustZone系统的关键部分。只有在引导流程中之前运行的所有软件组件都是可信的情况下,才能信任某个软件组件。这通常被称为信任链。下图显示了一个简化的信任链:
在我们的示例中,首先运行的代码是boot ROM。我们必须隐式信任boot ROM,因为没有更早的引导阶段来验证其内容。由于它位于ROM中,可以防止对初始引导代码的重写。将初始引导代码保留在芯片上可以防止其被替换,因此我们可以隐式信任它。boot ROM代码通常很小且简单。其主要功能是从闪存加载和验证第二阶段的引导代码。
第二阶段的引导代码执行平台的系统初始化,例如设置用于片外DRAM的内存控制器。此代码还负责加载和验证将在安全和非安全状态下运行的映像。示例包括在安全状态加载TEE和在非安全状态加载像UEFI这样的更高级别固件。
之前我们介绍了System Control Processor (SCP)。SCP是许多现代SoC中执行低级系统控制的微控制器。在存在SCP或类似物的情况下,它也构成了信任链的一部分。下图显示了这一点: