我目前正在研究ARM的TrustZone,例如这里:
ARM information center.据我所知,使用TrustZone可以创建基于AMBA AXI总线的安全环境.
在ARM website它说:“这个安全和非安全世界的概念超越了处理器,包括SoC内存,软件,总线事务,中断和外设.”我读到外围设备可以通过AMBA AXI总线的NonSecure位连接到TrustZone(额外信号用于区分可信和不可信请求).
1)除了AMBA AXI总线的额外引脚外,什么是带有TrustZone的SoC中的TrustZone专用硬件?
2)是否可以将外部非易失性存储器(例如闪存)或其分区连接到TrustZone,以访问安全世界(通过外部存储器接口,然后是内部AXI总线)?如果不是,如何在安全的世界中使用秘密(作为密钥)(在保险丝的帮助下?)?如果是,如何防止包含恶意代码的Flash连接?
3)在芯片出厂之前或之后,是否有可能作为芯片供应商(例如TI或NXP)的客户在安全领域实施代码?
谢谢您的回答.
最佳答案 TrustZone是ARM发布的一套标准.它为OEM(嵌入式软件程序员)和SOC供应商提供了一些安全解决方案的工具.根据需要保护的内容,它们有不同的需求.所以每个SOC都会有所不同.一些SOC制造商将尝试在同一安全应用程序上竞争,但他们仍然会有所区别.
1) What, except the extra pin of AMBA AXI bus, is the TrustZone specific hardware in a SoC with TrustZone?
供应商想要的任何东西. GIC(ARMv7-A)中断控制器,L1和L2控制器以及MMU都是大多数Cortex-A CPU中的TrustZone感知外设.这些是由ARM设计并在SOC中实现的.同样,存在可以放置在外围设备和SOC之间的各种存储器分区/排除设备.例如NIC301和各种专有的BUS互连技术.
其他硬件可能包括物理篡改,电压和温度监控,时钟监控和加密加速器.
2) Is it possible to connect an external non-volatile memory (e.g. Flash) or a partition of it to TrustZone with access to secure world (via external memory interface and -then internal- the AXI bus)? If no, how are secrets (as keys) stored to be used in the secure world (with help of fuses??)? If yes, how is it prevented that a Flash including malicious code is connected?
如上所述,像NIC301这样的芯片可以对AXI外设进行物理分区.请参见下图.任何TrustZone解决方案的一部分都是一些安全启动机制.所有CPU都将在安全的世界中启动.安全启动机制可能会有所不同.例如,一次性可编程ROM可能适用于某些应用.许多都具有可编程熔丝,其具有在SOC ROM中实现的公钥/私钥机制. SOC ROM启动软件将验证闪存中的图像是否由烧过一次保险丝的人正确签名.
这个OEM映像可以设置许多TrustZone外设,其中大部分都有锁定位.一旦设置,外设中的寄存器在下次硬启动之前不能更改.
3) Is it possible to implement code to the secure world as a customer of a chip vendor (e.g. TI or NXP), either before or after the chip left the factory?
是的,这是安全启动机制. ARM TrustZone文档中未指定如何保护代码.如果您制造芯片并具有带有MESH层的片上ROM,则可能足以进行安全启动.但是,TI和NXP将实施公钥/私钥机制,并验证是否只能加载由OEM签名的软件.这个OEM软件可能有错误(可能是SOC供应商的ROM加载器),但至少可以创建一个安全的启动链.
使用公钥,即使完全访问芯片,也只允许攻击者从OEM加载以前发布的软件.一些解决方案也可能具有撤销机制以防止使用先前发布的软件.
> Typical ARM bus
> ARM partition checker
> Handling ARM TrustZone