手机字库备份还原教程

1 TrustZone体系架构
ARM TrustZone是基于硬件的安全功能,它通过对原有硬件架构进行修改,在处理器层次引入了两个不同权限的保护域——安全世界和普通世界,任何时刻处理器仅在其中的一个环境内运行。同时这两个世界完全是硬件隔离的,并具有不同的权限,正常世界中运行的应用程序或操作系统访问安全世界的资源受到严格的限制,反过来安全世界中运行的程序可以正常访问正常世界中的资源。这种两个世界之间的硬件隔离和不同权限等属性为保护应用程序的代码和数据提供了有效的机制:通常正常世界用于运行商品操作系统(例如Android、iOS等),该操作系统提供了正常执行环境(Rich Execution Environment,REE);安全世界则始终使用安全的小内核(TEE-kernel)提供可信执行环境(Trusted Execution Environment,TEE),机密数据可以在TEE中被存储和访问。这样一来即使正常世界中的操作系统被破坏或入侵(例如iOS已被越狱或Android已被ROOT),黑客依旧无法获取存储在TEE中的机密数据。

图1(a)描述了Cortex-A上采用的TrustZone架构,该架构中还引入了一种称为监视模式的处理器模式,该模式负责在世界过渡时保留处理器状态,两个世界可以通过称为安全监视器调用(SMC)的特权指令进入监视模式并实现彼此切换。
除了Cortex-A微架构外,ARM发布的新一代Cortex-M微架构同样为TrustZone提供了硬件支持。与Cortex-A相同的是,Cortex-M依旧将处理器运行状态划分为安全世界和正常世界,并阻止运行于正常世界的软件直接访问安全资源。不同的是,Cortex-M已针对更快的上下文切换和低功耗应用进行了优化。具体来说,Cortex-M中世界之间的划分是基于内存映射的,并且转换是在异常处理代码中自动发生的(如图1(b)所示)。这意味着,当从安全内存运行代码时,处理器状态为安全,而当从非安全内存运行代码时,处理器状态为非安全。Cortex-M中的TrustZone技术排除了监视模式,也不需要任何安全的监视软件,这大大减少了世界切换延迟,使得世界之间的转换为更高效。为了在两个世界之间架起桥梁,Cortex-M引入了三个新指令:secure gateway(SG),branch with exchange to non-secure state(BXNS)和branch with link and exchange to non-secure state(BLXNS)。 SG指令用于在安全入口点的第一条指令中从非安全状态切换到安全状态。安全软件使用BXNS指令来返回到非安全程序;最后,安全软件使用BLXNS指令来调用非安全功能。此外,Cortex-M中的状态转换也可以由异常和中断触发。
2 基于TrustZone的TEE系统
TrustZone通过硬件隔离出的安全世界提供了TEE,根据在安全世界中运行的可信程序的不同,又可以将其提供的TEE划分为两类:TEE内核与TEE服务。
在TEE内核中,可信程序实现一套基本的OS功能,以管理多个TEE实例,每个实例托管一个特定的应用程序。TEE内核实现的功能有:管理安全世界的内存、对每个TEE实施内存保护、处理TEE与OS之间的通信以及为TEE应用程序提供API 。为了解决正常世界中的操作系统和TEE内核的协同工作问题,业界提出了一系列有关TEE内核的标准。在2009年,Open Mobile Terminal Platform (OMTP)便提出了一个TEE标准,该标准定义了TEE应该支持的一系列安全功能。随后,GlobalPlatform组织以此为基础定义了可信应用程序可以依赖的内部API,以及正常世界的OS软件与TEE中的应用程序进行交互的通信接口。许多常见的TEE产品方案都遵守GlobalPlatform标准,例如SierraTEE、T6 、OP-TEE、Open-TEE和Samsung KNOX。
与TEE内核不同,TEE服务只实现某种特定功能,它们不需要任何低级OS逻辑来管理它们自己的内存和跨世界的通信。为了避免相互干扰,设备上只能部署一种TEE服务。与TEE内核相比,这是一个缺点,后者允许多个应用程序在独立的TEE实例中运行。但是,TEE内核的缺点是,与部署单个TEE服务的系统相比,它们通常依赖于较大的TCB,这意味着相比于TEE服务,TEE内核可能存在着更多的漏洞。常见的TEE服务包括:可信存储、安全的身份验证和加密、Rich OS验证和监控、可信I/O等。
而tee本身就算有了root权限也不能直接管理,查看(selinux的mac)
损坏的都是储存在persist里的密钥和证书,这些东西除了在工厂里能够被烧写之外似乎不能再次写入:(