目录
1.车规MCU少见TrustZone
- 什么是TrustZone
2.1 TrustZone隔离了什么?
2.2 处理器寄存器和异常处理
2.3 如何切换安全状态
2.4 TrustZone里实现了什么功能?
- 与HSM的比较
1.车规MCU少见TrustZone
在车规MCU里,谈到信息安全大家想到的大多可能都是御三家的HSM方案:英飞凌的HSM\SHE+、瑞萨的ICU、恩智浦的HSE/CSE,这些都被称为HTA(Hardware Trust Anchors)。
这三家的MCU架构里,Host和HSM分别有自己独立的CPU、密码算法硬件加速器、独占Flash等,如下图:
而当我Review Vector培训材料时,发现了以前经常听到但没有深入研究过的TrustZone也被当作了HTA:
那么什么是TrustZone?它与HSM区别在哪里?今天就通过Cortex-M33来分析一下。
2. 什么是TrustZone
根据Arm官方介绍,TrustZone最先是Arm A核的一种安全架构的统称,它在SOC系统级别提供硬件隔离机制将系统分成了两个运行环境:TEE(Trusted Execution Environment)和REE( Rich Execution Environment):
在REE中,通常执行复杂且功能丰富的应用软件,意味着其攻击面广,更易遭受网络攻击;在TEE中通常为REE提供授信服务,例如加解密、密钥管理等等,这与HSM/SHE的理念比较相似。
后来随着IoT的发展,M核的处理器也提出了相应的信息安全需求,所以TrustZone在ARM V8-M中作为Security Extension被引入。
2.1 TrustZone隔离了什么?
在Armv8-M架构下引入安全扩展后,从CPU、到系统外设资源再到访问方式上都做了隔离和新的设计。
从内核角度来看,与安全扩展相关的组件包括Processor Core、SAU、SMPU和NSMPU、BusMatrix,总结如下图:
对于Processor Core的运行状态,引入了Non-Secure和Secure状态:
SAU用于定义和识别存储器地址的安全区域和非安全区域,在Secure和Non-Secure状态下分别有各自的MPU;
通常情况下,CPU进行数据访问时,根据当前内核运行处于安全或非安全,从而索引到SMPU或者NSMPU的配置,如下图:
当CPU取指时,通过SAU中配置的目标地址安全属性,从而索引到SMPU或者NSMPU,如下:
既然内核、SAU和MPU有Secure和Non-Secure之分,那么在存储器、外设等属性上也应该有该分类。在M33里使用了AMBA5 AHB5,该总线携带安全、非安全访问标记,可实现安全和非安全的访问,因此,在芯片设计之初,从内核到芯片级别的完整硬件隔离机制可按如下示例实现:
2.2 处理器寄存器和异常处理
当安全扩展引入后,处理器分为了Secure和Non-Secure两种状态,因此对应状态的寄存器相应也有变化。如下图所示:
- R0-R12:Secure和Non-Secure状态共用一套;
- SP:包含MSP(Main)和PSP(Process)(针对Handler和Thread Mode),在不同状态下有两组Banked寄存器,后缀为S、NS;
- PSPLIM、MSPLIM:新增寄存器,用于限制MSP和PSP堆栈,在不同状态各有一套;
同样的,在异常也可以被指定为Secure和Non-Secure。那么从软件角度来看,中断向量表也需要分为安全和非安全两个,如下图:
可以看到,Secure和Non-Secure都有各自的Handler,有些中断是Banked,但也有些异常是只有Secure才有,如SecureFault。
需要注意的是,所有外设中断上电默认都指向Secure 向量表,但是我们可以在Secure状态运行的代码里修改权限,将外设指向Non-Secure向量表。
2.3 如何切换安全状态
在引入安全 扩展后,Armv8-M相应地也设计了新的指令,用于支持内核Secure和Non-Secure之间的函数调用。
- Non-Secure调用Secure侧函数的指令:SG
- Secure侧返回Non-Secure侧的指令:BXNS、BLXNS
具体使用方式如下图所示:
- NSC:全称Non-Secure Callable,是一段memory,是Armv8-M处理器允许SG指令调用的唯一类型;
- SG:Secure Gateway,如果SG如果不在NSC目标地址,则从NS到S的函数调用将产生Fault
上述示例具体实现如下:
对于中断的处理,两种状态可自由切换,硬件入栈上下文并根据条件清除寄存器,举例如下:
当CPU在Secure状态下运行代码时发生了NS的中断,此时被打断的代码、当前执行的上下文会被硬件自动压到对应状态的堆栈,此外还会自动清零当前寄存器防止数据泄露,当handler处理后,返回到Secure继续运行。
2.4 TrustZone里实现了什么功能?
从上面简介里我们可以发现,Armv8-M引入安全扩展的目的是为了实现系统隔离,借用网上对该架构的抽象图,主要是在CPU、资源、访问权限上做出了限制。
那引入TrustZone的目的就很明确了,希望在MCU内部建立一个隔离环境,为Non-Secure里的代码提供通信、数据等保护。
以IoT产品为例,常见的安全保护功能架构如下:
Non-Secure运行IoT功能相关的代码,但当其需要敏感信息、通信加解密技术时,就可以调用TrustZone中的相关软件功能,而Secure硬件资源则可以实现敏感数据存储、安全OTA等等。
3. 与HSM的比较
Armv8-M的TrustZone是基于CPU视角的,因此本质上Secure和Non-Secure是基于某种时间片技术分时复用CPU,这与HSM拥有自己独立内核是有区别的;
其次,TrustZone本身是不含密码学相关组件的,相当于它是一个系统级别的隔离框架,具体框架里如何装修是要芯片架构师来把控。如新思提供的HSM IP,它就把这两个概念融合到一起,如下图:
针对单核,它设计了Fx HSM,猜想应该也是在安全和非安全态切片运行,只是在该方案中,它添加了密码学硬件加速引擎、真随机数生成器 ;
针对多核来说,设计了Vx HSM,这与我们常见的evita HSM就很像了。
所以,个人认为:
- TrustZone是一种安全技术,用于ARM架构的处理器中,如ARM Cortex-A和Cortex-M系列处理器。
- 它将处理器的安全状态分为安全区域(Secure World)和普通区域(Normal World),实现了硬件级别的隔离和安全保护。
- 安全区域可以运行受信任的代码和安全应用,而普通区域则运行普通的应用程序。安全区域和普通区域之间的通信通过安全的通信通道进行,保证了安全性。
- 据了解,该技术广泛应用于移动设备、物联网设备等领域,用于保护敏感数据和执行安全的应用程序。
- HSM是一种专用的硬件设备,用于生成、存储和管理加密密钥,以及执行加密运算和安全操作。
- HSM通常包含硬件隔离、加密芯片、随机数生成器等安全组件,能够提供高级的安全保护,防止密钥泄露和恶意攻击。
- HSM广泛应用于安全领域,如金融行业、电子商务、云计算、汽车行业等,用于保护加密密钥、数字签名、加密数据等重要安全信息。
这两者主要区别在于,TrustZone是处理器级别的安全技术,用于实现硬件级别的隔离和安全保护,而HSM是一种专用的硬件设备,用于管理密钥和执行安全的加密运算。
作者:快乐的肌肉
文章来源:汽车MCU软件设计
推荐阅读
更多汽车电子干货请关注汽车电子与软件专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。