|
Don Felton, Frederic Piry, Danny Kershaw和Bryan Lawrence ,ARM公司
安全性的实现是从软硬件发展的角度,寻求安全防卫的成本和防卫失效代价间的平衡。ARM把这种威胁分为三个部分:
软件攻击:这是一种最大的威胁,由于它没有特别的硬件需求,并且可以攻击许多不同的设备; 简单硬件攻击:它之所以得名是由于它需要用一些简单仪器,如逻辑分析仪和示波器。这类的攻击通常发生在后街小店里,他们通过硬件修改或加入额外的逻辑来旁路器件限制; 实验室攻击:这种攻击意味着一旦攻击成功,可以获得高额的商业利润,因此被称为高利润攻击。它需要的设备成本很高,如敏感的频谱分析仪和扫描电子显微镜。这类型的攻击需要智能卡级别的安全性防卫才能抵御,如用一个完整的金属层来阻隔敏感信号,这种方法要求器件在去除封装后就必须失效。
不同的应用范围,从手持式游戏设备,机顶盒,汽车娱乐设备,对安全的需求有多样性。ARM支持两种安全方案。第一种是经典的多处理器方案,由一个处理器提供安全服务,其他的提供正常的服务。第二种是TrustZone,从虚拟角度讲,安全和普通软件在一个处理器上并存,当中用增强的硬件来区分两种软件,并利用精心设计的机制来控制上下文的切换。
多处理器安全性方案在现在的产品中得到广泛的应用,如机顶盒和手机。通常的方法是用一块相对简单的控制处理器和一个密码加速器来完成处理高强度的密码运算任务,在绝大多数情况下,ARM7处理器是这种控制处理器的理想选择,面积小而功耗低。
而多处理器分割的选择是基于多处理器MPCore的,把其中的一种内核配制成安全处理器,剩下的内核来运行普通的软件。这个系统的优势在于Cache一致性的协议可以使普通的数据被所有的核容易地访问。而安全性的数据独立成为一部分,不能被普通处理器所访问。
带ARM7安全内核的MPCore
创建一个安全的环境用来保存秘密信息和实现安全处理来抵御攻击, 经典的方法是构建一个完备的子系统来完成这样的任务。这种方法最典型的应用是在手机里(在SIM卡上进行安全处理),和机顶盒上(条件访问CA)。安全子系统通常用相对简单的处理器来进行协议控制,还可扩展用密码加速器来完成计算机密集型任务。这个示例中的系统就是以这种典型安全架构设计理念为基础的。

图1,MPCore功能模块框图
运行安全服务的系统要求包含一个独特的密钥(生产出的每个器件不同)来为外部存储器的数据解密,如Flash。特殊的硬件包括一个信息发生器,用来产生随机数据,一个稳定的实时时钟可以用来中断数据版权管理设备的活动,一个稳定的计数器用在安全计算组件标准中。还有一些普通的模块在系统里充当安全角色,如 Timer,Watchdog提供检测系统稳定性的机制和防止某些形式的软件攻击。
外围设备的共享 两个系统已经这样构筑起来:提供 安全服务的处理器内核给通过 AHB2AXI桥访问MPCore子系统的外围设备。这使安全服务处理器内核可以访问动态和静态存储器的控制器。MPcore处理器没有权限访问所有的安全的外围设备,从而实现了高度的安全隔离。 两级安全中断信号配置 安全系统中的中断结构有两级中断控制器组成:
- 安全中断控制器 - 普通中断控制器
安全中断信号控制器的任务是从众多中断源中辨别出安全中断信号,这个系统中的普通域不能控制或影响它。 为了确保安全, 安全中断控制器必须存在于安全域的存储器空间,这样一来,只有安全的访问可以控制它。 非安全中断控制器从由安全中断控制器转化来的中断信号源中创造出普通中断信号。这种控制器存在于非安全域中,提供用户模式的中断信号控制。 处理器间通信模块/软件模块中断 IPCM(Inter-Processor Communications Module) 提供最大32个带控制逻辑和中断信号发生器的邮箱支持处理器间通信: - IPCM给其他内核输送中断信号 - IPCM传送小量数据至其他内核
IPCM在软件控制下产生中断信号。这些中断信号通常附带着数据并直接传输到一个或最多32个不同的中断输出。每个中断信号输出对应于IPCM中的每个邮箱来源, 邮箱目的, 邮箱屏蔽寄存器。这些寄存器因此能在数据被传送和接收时候控制中断信号线有效。中断信号输出在系统集成期间与系统中断控制器相连,一个或多个中断信号输出可以与每个中断信号控制器相连。通常IPCM有至少一个中断信号输出与系统中每个中断信号控制器相连,使任何一个内核可以将信号送至任何其它的内核。 安全调试 安全器件的调试设备本身就需要有安全特性,并能够被与用户的特殊权限相关的一系列静态信号使能,这是由系统设计保证的。现有以下几种选择:
- 不调试 - 只适用于非安全的 - 安全和非安全
ARM7TDMI-S有一个DBGEN输入端口,根据用户授权来使能或关闭调试。在一个成型的产品设备里内核对调试工具通常是不可见的。 安全启动顺序 第一阶段:整个系统在上电后会被复位,然后系统控制器释放ARM7处理器从静态片内存储器的安全启动代码中启动。这个从0x0000地址执行小的代码序列是安全启动的第一阶段,也叫BootStrap。这个最初的ROM代码必须得到芯片制造商,安全提供商的安全软件开发组的认证,或者是基于ARM提供的代码实例。
第二阶段:安全导入序列的第二阶段是执行Bootloader代码。代码从外部的FLASH/ROM中载入,二进制映像由万能密钥和散乱序列来检测,如果没有被加密的话,可能被直接执行。如果映像被加密,执行前必须在片上存储器中被解密。显然,不加密的二进位的映像更容易被黑客追踪,反之解密过程的忽略可以减少系统导入的时间。Bootloader初始化外围设备,并根据设备的配置选择运行的模式,配置外设在安全和普通域的可见度。Bootloader通常由安全软件供应商的1级或2级安全组编写的(可以基于ARM提供的代码实例)。
第三阶段:在最后一个阶段,完成安全软件启动之后,TrustZone软件可以验证普通操作系统的映像或者移交给普通的操作系统启功序列控制,或者还可以扮演认证角色积极协助开始阶段的存储器拷贝。
对存储器的要求在系统内部有许多种存储器的组合,片内ROM、RAM和外部的FLASH,动态存储器都是存在的。这些存储器分配在不同的安全域和普通域。主要的执行代码,安全服务程序的集合,通常需要占用大量的片上RAM.有两种办法来解决这个问题。第一种,将加密的安全程序在外部的FLASH中,并分页映射在安全域的RAM中来执行,这要求你能了解最详尽的安全模块的组成信息。另一种,主要的变量和确定的代码被放置在片上ROM,于安全域中在本地执行,这就是在下面的实例中,启动ROM和程序ROM的大小有所不同的原因。
使用多处理器MPCore的安全方案
ARM的MPCore是基于多个ARM11处理器的,给系统设计者揭示了一个有趣的系统级安全方案.MPCore可以建成一个允许软件选择是否支持安全与普通域进行硬件分隔的系统。如果系统选择不进行硬件分隔的话,安全服务可以通过运行在普通操作系统的安全模块来支持。如果选择硬件分隔的话, 安全模块在CPU0的私密安全域运行,CPU0就转变成特定的安全处理器。 为了实现硬件分隔,所有的MPCore的CPU在对称多处理器(SMP)模式下运行,同时存储管理单元(MMU)被使能。安全存储区域被CPUO标识为非共享cacheable,普通域存储区域可以被任何处理器标识为共享cacheable。在MPCore边界, CPUO发起访问并且访问不共享时,AXI安全状态信号将起作用。这样产生的AXI安全状态信号可以被ASIC的其它部分或ASSP的外围设备使用,从而决定访问是否是安全域发起的,让外部设备做出相应的回应。 非安全数据被标识为可共享的,意味着SCU将保证所有被标识为write back cacheable的数据在各个MPCore 的MP11的一致性。因此,与用ARM7作为安全处理器的解决方案相比, 作为安全处理器的MP11能快速并方便地访问非安全域的数据。一个MP11的面积比ARM7的7倍还要大,但同时也能提供相应倍数级别的处理性能,这取决于最终应用。你可以选择实现用软件来完成全部加解密的操作,可以节省在ARM7系统里的硬件加速器,同时能提供额外的灵活性,使你的设备可以应用在更多不同的领域。

图2,系统级安全设计方案
在这个推荐的解决方案中, CPU0完全用来执行安全任务,运行可信任的代码。在启动环节,图中带有浅蓝色三角的部分被配置为安全或正常的区域,蓝色部分的是非安全区域。图中灰色的部分混合在两个域中,可能同时为普通和安全域传输数据,也可以带有多个不同的接口,一个用来进行安全访问,一个用来进行非安全的访问(高速的外部设备和I/O)。在 AXI上标识为安全的访问,只可能是被CPU0初始化为非共享的cacheable或non-cacheable。 |