您的位置:首页 > 其它

TrustZone初探 (二)

2016-03-20 10:58 302 查看
5. trustzone和中断
中断也是隔离的,安全世界和普通世界有独立的VBAR寄存器,中断向量表。唯独monitor模式下有自己的中断向量表,寄存器是MVBAR,smc指令就是跳到这个向量表。GIC可以配置某个中断号属于安全世界还是普通世界的,有关GIC的安全的配置只有安全世界下才有权限配置。通常,IRQ会被配置成普通世界的中断源,而FIQ配成安全世界的,这是因为ARM上的操作系统比如Linux只用IRQ。当中断来的时候,如果该中断属于当前世界,那么中断就在当前世界处理了,如果不属于,那么会触发切换到monitor模式,monitor模式的代码需要考虑是不是切换到另外的世界来处理中断或是丢弃该中断。CPSR里面的F和A位是用来mask
FIQ和external abort中断的,普通世界能不能修改两个bit也是安全世界说了算,SCR里面有禁止这两个bit被安全世界修改的位。




6. trustzone的物理内存和外设保护

Trustzone需要物理内存和外设在两个世界之间的隔离,这是安全世界真正在意的东西 --- 因为你所要保护的信息和内容就在内存里或是经过某些外设。
物理内存和外设的隔离保护通过TZASC和TZPC的设置来达到目的。TZASC可以把物理内存分成多个区域,每个区域的访问权限可以灵活配置为安全区域或是非安全区域,甚至可以配置成只有普通世界可以访问。TZPC则是配置不同的外设属于哪个世界。当然了TZASC和TZPC的配置只能在安全世界下进行。





7. trustzone和多核
比如四核的soc,每个核都可以配成两个虚拟核,那么总共会有8个世界。虽然cache一致性、中断处理等机制硬件层都尽量避免不同世界互相干扰。但是在系统软件设计上,cache的一致性,多核之间的普通世界和安全世界之间的状态管理和同步都需要精心设计。 如果使用的场景不复杂,最好就配置安全世界只在一个核上运行,所有其他核上的请求都经过这个核最终产生请求,这样简可以简化软件设计,增加系统的可靠性和稳定性。




8. trustzone和ACP
ACP(Accelerator Coherence Port)作为AXI slave interface,也带有安全属性,比如某个PCIe是连到ACP端口的,如果PCIe是配置为属于普通世界的,那么ACP产生的事务也是non-secure的,这时候打个比方说ACP的作用region是DDR的区域0-128M,那么0-128M必须配置为属于普通世界 ,或者说可以把linux的DMA
zone配置在128M以内,并把这个DMA区域配置为属于普通世界,否则ACP功能就没法用了。

总结,soc启动的时候就开始工作在secure世界,secure启动代码需要做所有的安全方面的初始化和资源配置,并load安全内核和普通世界代码(比如Linux),由于硬件单元的支持,理论上现有的普通世界操作系统代码不需要修改或者很少修改就能正常工作,唯一欠缺的是一个通过安全世界的驱动程序。TrustZone技术中,TEE系统代码开发才是大头,现有的开源项目如openvirtualization以及Op-Tee可以提供不少参考。
另外,TEE技术还需要比较重要的一环就是secure boot,这是整个系统的root of secure,从上电boot就保证要启动的image没被篡改,从而从根本上保证系统的安全性。那又是另外一个话题了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: