TrustZone

引子

今天在知乎看到一篇“华为的指纹解锁对比 iPhone Touch ID 安全性如何”的贴子,下面有Meta7产品经理的回复:

 

1,华为是基于芯片硬件的安全解决方案。指纹加密,存储,校验的程序是运行在海思芯片里物理隔离的安全OS中,安卓环境下的程序无法直接访问,即使手机被root后,这部分仍然不能被访问和篡改。

 

2,手机并不会保存指纹图像,只保存经过提取后的模板信息,通过指纹模板并不能还原出指纹图像。所有指纹模板信息只在手机本地用AES256算法加密,每个芯片都有独一无二的密钥,这个密钥在芯片出厂时就被一次性熔断写入,无法从外部读取和修改。指纹模板数据只能写入和删除,无法读取和修改,因此也不会上传任何服务器,也不会被任何第三方程序读取。

 

3,指纹安全程序对外提供经过签名的验证结果,整个过程通过RSA 2048签名保护,无法被仿冒和篡改。支付宝就是通过这个结果来判断是否要付款的。

 

4,手机解锁指纹可以设置多个,但支付指纹只能用其中指定的一个。

 

5,华为采用的指纹传感器面积最大,精度最高(192*192像素,像素密度508dpi,某果用的是88*88/500dpi,某星和某肠用的是114*1),保证了指纹验证程序可以拿到更多的数据进行比较验证,因此安全性也最高。这也是我们为什么把指纹放在了手机后背的原因,当然如果把手机做成像水果那样喜人的长下巴,正面也是能放得下的。

 

又前段时间申迪研究的 Huawei mate 7 TrustZone exploit  ,实现了从Meta7 TrustZone中获取指纹数据。所以想探究下TrustZone究竟是什么黑科技。

TrustZone简介

TrustZone是ARM针对消费电子设备安全所提出的一种架构。

  • TrustZone来解决哪些问题

主要应用于移动支付等高价值或敏感性的领域。传统方法中,一旦手机被root就没有办法保证交易的可靠性。

  • TrustZone实现原理

TrustZone系统的安全,是通过将SoC的硬件和软件资源划分到两个空间来获得的。这两个空间是安全子系统对应的安全空间,和其他子系统对应的普通空间。AMBA3 AXI总线系统能确保安全空间的资源不会被普通空间所访问。而在ARM处理器核也有相应的扩展,来让两个空间的代码能分时运行在同一个核上,这就实际上节省了一个核。另一方面就是扩展了调试体系,使得安全空间的调试有相应的访问控制。

 

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

 

TrustZone_第1张图片

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

 

TrustZone_第2张图片

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

 

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

 

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

 

TrustZone_第3张图片

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

 

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

 

TrustZone_第4张图片

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

 

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

 

TrustZone_第5张图片

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

参考文档

  1. Huawei mate 7 TrustZone exploit,http://retme.net/index.php/2015/07/31/mate7-TZ-exploit.html

  2. ARM Trustzone技术手机安全平台及移动支付方案,王骏超,http://www.c114.net/topic/3413/a684742.html

  3. 华为的指纹解锁对比 iPhone Touch ID 安全性如何,http://www.zhihu.com/question/25038240

  4. TEE的国内外发展现状和趋势,http://www.trustkernel.com/uploads/pubs/TEE-2015安全支付论坛.pdf

  5. TrustZone技术简介,http://blog.csdn.net/braveheart95/article/details/8878319,博客下还有《消费电子设备的安全威胁和安全需求》《可信执行环境(TEE)介绍》两篇文章

  6. 苹果公司iOS安全白皮书-iOS 8.3 or later,http://www.apple.com/business/docs/iOS_Security_Guide.pdf

你可能感兴趣的:(TrustZone)