TrustZone技术简介

来源:互联网 发布:淘宝客qq群如何拉人 编辑:程序博客网 时间:2024/05/22 12:15

转自:http://www.360doc.com/content/13/0902/14/7324690_311596832.shtml


TrustZoneARM针对消费电子设备安全所提出的一种架构。对于这种设备的安全威胁,可以有几种形态的安全解决方案。

         外部的硬件安全模块,比如设备上的SIM卡。这种方式的优点是SIM卡具有特定的软硬件安全特性,能够保护卡内的密钥等资源,而且要攻破其防护所付出的代价很高。缺点就是与设备的接口通讯速度低,而且不能保护用户界面的安全,即与用户交互的数据的安全,所以在交易支付方面该方案还不能提供好的保护;

         内部的硬件安全模块,即把类似于智能卡的功能直接放到SoC里面。这种方式也只能保护诸如密钥之类的资源,不能保护用户交互数据。在SoC里面有两个核:一个普通的app核和一个安全核。两个核之间的通信速度也会比较低。而且在占用SoC面积,调试端口的访问控制等方面也需要很小心谨慎;

         软件虚拟化。虚拟化技术如果要保护用户界面的安全,就需要在GPU的控制上加入很多的验证,这对于图形处理的性能也会产生较大影响。同时,调试端口也仍然是一个问题。

TrustZone的硬件架构是整个系统设计过程中的安全体系的扩展,目标是防范设备可能遭受到的多种特定威胁(注意这种威胁除了来自恶意软件,黑作坊,还有可能来自设备的持有人)。系统的安全,是通过将SoC的硬件和软件资源划分到两个世界来获得的。这两个世界是安全子系统对应的安全世界,和其他子系统对应的普通世界。AMBA3 AXI总线系统能确保安全世界的资源不会被普通世界所访问。而在ARM处理器核也有相应的扩展,来让两个世界的代码能分时运行在同一个核上,这就实际上节省了一个核。另一方面就是扩展了调试体系,使得安全世界的调试有相应的访问控制。

在处理器架构上,每个物理的处理器核提供两个虚拟核,一个是非安全核(Non-secure, NS),另一个是安全核(Secure),在这二者之间切换的机制叫做monitor模式。NS核只能访问NS的系统资源,而安全核能访问所有资源。普通世界的软件可以使用SMC指令或者通过硬件异常机制的一个子集来进入到monitor模式。可以配置IRQFIQ,外部data abort, 外部prefetch abort这几个异常进入到monitor模式。下图展现了这种切换方式。

最简单的情况是,当普通世界的用户模式需要获取安全世界的服务时,首先需要进入到普通世界的特权模式,在该模式下调用SMC,处理器将进入到monitor模式,monitor模式备份普通世界的上下文,然后进入到安全世界的特权模式,此时的运行环境是安全世界的执行环境,此后进入到安全世界的用户模式,执行相应的安全服务。这里把安全世界的用户模式和特权模式分离,是因为通常特权模式中的执行环境是系统级别的,而用户模式的安全服务是应用级别的,两者的提供者通常是不同的。下图是软件架构的展示。也就是说,安全世界的执行环境要管理用户模式的服务和应用,并给它们提供编程接口。

通常而言,monitor模式中的代码是做两个虚拟核之间切换时的上下文备份和恢复。CP15SCR寄存器的NS位表明了当前处理器所处的安全状态,该寄存器在普通世界是不能被访问的。

对于L1内存,也需要做与两个世界对应的划分,这样,对于有TrustZone的处理器也有两个虚拟的MMU,使得每个世界都有自己本地的转换表,来控制地址映射。实际上,转换表的描述里面有一个NS域,对于NS的虚拟核,它会忽略这一位。而对于安全虚拟核,无论NS0或者1,都可以访问转换表,这也使得安全虚拟核可以访问任何内存。对于TLB而言,TLBtag可以记录当前的表是哪个世界的(这个不是ARM强制的,即各芯片厂商可以自己另外定义),从而让两个世界的TLB能够共存,这也使得世界之间的切换更加快速,而不用去刷TLB记录。同样的,对于cache,也扩展了一位tag来记录安全状态,从而也使得世界切换时不用刷cache

安全中断。在TrustZone技术中,IRQFIQ都可以配置为直接进入monitor模式。推荐的方式是普通世界的中断源使用IRQ,而安全世界的中断源使用FIQ。因为在Linux中,FIQ是不使用的,中断源都是IRQ。下图展现了IRQ配置为NS中断的情况。

当处理器运行在普通世界时,IRQ直接进入到普通世界的IRQ处理函数;如果处理器运行在安全世界,当IRQ发生时,会先进入到Monitor模式,然后跳到普通的IRQ处理函数执行。通常而言,进入到monitor模式再切换所导致的中断延迟的影响很小,尤其是对于非实时系统而言。

对于多核系统,是一个更加重量级的话题,设想4个物理核,每个又分为两个虚拟核,是什么样的情况,下图是一个展示。

在这样的系统中,外部内存的一致性,中断处理,多核之间的普通世界和安全世界之间的状态管理和同步都需要深思熟虑。

安全启动。下图是安全启动的顺序。

上电后,ROM中的bootloader初始化关键的外设,比如内存控制权,然后切换到外部的bootloader,然后安全世界的OS启动后会做相应的操作环境的初始化,之后才会让普通世界的bootloader去装载普通世界的OS。这里的签名协议是基于RSA算法的,所以设备里面当然会存有相应的公钥了。这其中有一个信任链的概念,就是说后装入的组件必须要能通过前面装入的组件的认证。一次性编程(OTP)硬件就是拿来做这个信任链的根的存储的。但是RSA公钥又长了点,比较浪费存储空间,于是只把公钥的hash放在OTP区域中就行了。当然,有了这样的安全启动,实现OMTP TR1 中的FSB就顺理成章了,只要有相应的私钥签名即可。那么,对于不需要更新启动链中组件的安全启动,是否还需要非对称算法呢?


0 0
原创粉丝点击