TrustZone 是 ARM 发布的一套标准。它为 OEM(嵌入式软件程序员)和 SOC 供应商提供了一些工具来制定安全的解决方案。根据需要保护的内容,它们具有不同的需求。所以每个SOC都会不同。一些 SOC 制造商会尝试在相同的安全应用上展开竞争,但他们仍然会有所区别。
1) 除了 AMBA AXI 总线的额外引脚之外,具有 TrustZone 的 SoC 中的 TrustZone 特定硬件是什么?
供应商想要的任何东西。GIC (ARMv7-A) 中断控制器、L1 和 L2 控制器以及 MMU 都是大多数 Cortex-A CPU 中的 TrustZone 感知外设。这些由 ARM 设计并在 SOC 中实现。同样,有各种内存分区/排除设备可以放置在外围设备和 SOC 之间。例如 NIC301 和各种专有的 BUS 互连技术。
其他硬件可能包括物理篡改、电压和温度监控、时钟监控和密码加速器。
2) 是否可以将外部非易失性存储器(例如闪存)或其中的一个分区连接到 TrustZone 以访问安全世界(通过外部存储器接口,然后是内部的 AXI 总线)?如果不是,如何存储秘密(作为密钥)以在安全世界中使用(借助保险丝??)?如果是,如何防止连接包含恶意代码的 Flash?
如上所述,像 NIC301 这样的芯片可以对 AXI 外设进行物理分区。见下图 任何 TrustZone 解决方案的一部分是一些安全启动机制。所有 CPU 都将在安全世界中启动。安全启动机制可能会有所不同。例如,一次性可编程 ROM可能适用于某些应用。许多具有可编程保险丝,具有在 SOC ROM 中实现的公钥/私钥机制。SOC ROM 启动软件将验证闪存中的映像是否由烧过一次性保险丝的人正确签名。
此 OEM 映像可以设置许多 TrustZone 外围设备,其中大部分都具有锁定位。设置后,外设中的寄存器在下一次硬启动之前无法更改。
3) 作为芯片供应商(例如 TI 或 NXP)的客户,是否有可能在芯片出厂之前或之后为安全世界实施代码?
是的,这就是安全启动机制。ARM TrustZone 文档中没有指定如何保护代码。如果您制造芯片并拥有带有 MESH 层保护的片上 ROM,则可能足以实现安全启动。但是,TI 和 NXP 将实施公钥/私钥机制,并验证只能加载由 OEM 签名的软件。该 OEM 软件可能存在错误(可能还有 SOC 供应商提供的 ROM 加载程序),但至少可以创建安全引导链。
使用公钥,即使完全访问芯片也只会允许攻击者加载之前从 OEM 发布的软件。一些解决方案可能还具有撤销机制,以防止使用以前发布的软件。
请参阅:信任区