随着物联网IOT的高速发展,越来越多的智能终端在用户层面普及,大到电网的无线供配电,小到家里的智能开关、智能音箱。让人们在手机上随时随地可以查看到自己家的温湿度和图像,手指点点就能控制电器工作。我们在享受便利的同时,却往往忽视了隐私的保护。操作系统的漏洞、应用安全的不完善,都会导致物联设备被恶意代码注入,从而导致个人账号等隐私泄露。那么如何去防范恶意代码攻击呢?
从当前的技术角度来讲,仅仅通过系统层面的应用数据隔离和虚拟化技术,是不足以提供安全的应用运行环境的。代码可以很轻松的访问整个硬件的RAM与ROM,应用间没有数据隔离机制,这样就避免不了恶意代码的越界访问,也无法防范恶意篡改和关键隐私泄露。TEE(Trusted Execution Environment)技术由此应运而生。
TEE 是 Trusted Execution Environment的缩写,即为可信任执行环境。通常用来进行数字版权管理、移动支付和敏感数据保护,安全等级较高。而可信任环境,依赖于可信任硬件,目前各芯片构架厂商均有自己的TEE技术,例如Intel的SGX,ARM的TrustZone。他们的原理各有差异,但均能实现对关键代码和数据的完全隔离与保护,开发者基于可信硬件和可信系统,来开发可信应用,来保障用户隐私。
TrustZone是 ARM于2008年发布的技术,首先应用在Cortex-A芯片上,旨在保护移动端物联网设备的信息安全。TrustZone的原理主要是将RAM与ROM分配为两个部分,安全区和非安全区。非安全区运行普通的操作系统和应用,例如安卓系统和安卓应用,而安全区运行TEE OS和针对特定应用定制的安全代码。安全区代码对全局地址数据均有访问权限,而非安全区只能访问自身,如果想要与安全区进行数据交互,必须通过预留的API接口。这样用户就可以将密钥和加解密过程放入安全区,封装为安全应用,与非安全区进行交互时也不用担心泄露密钥等关键隐私。如今安卓手机的指纹、支付大多都使用了TrustZone技术,关键隐私仅保存于设备本身的安全区,非安全区的应用无法直接访问,仅能通过特定API接口传递信息。即便最坏情况,非安全应用得知了与安全区通信的API接口格式和位置,但安全区传递出来的是经过私钥加密的签名,而非私钥,私钥仅在安全区内使用并且不会对外直接传递,这就从源头上杜绝了隐私泄露。(只要将RSA运算代码和私钥放入安全区,对外仅传递签名而非私钥,就可避免私钥的泄露。这种方法并不能保障用户的账号绝对安全,但可以保证私钥不会泄露。用户账号的安全性如何,取决于账号管理系统的安全措施和TEE安全应用的编写水平。了解数字签名:数字签名-阮一峰、RSA:RSA非对称加密)
随着物联网的飞速发展,移动互联网已经不仅仅局限于手机、电脑等用户终端,越来越多的开始向智能家居、移动物联网方向渗透。这类设备强调极低的系统功耗、较长的产品寿命、智能化的用户交互体验,但这些设备大多使用无TrustZone技术的Cortex-M芯片,用户的账户隐私在这些设备中保存,极大的增加了隐私泄露的风险。
2016年,ARM公司推出了Cortex-M家族的继承者,分别是Cortex-M23和Cortex-M33 MCU,这两款内核基于ARMv8构架并且加入了TrustZone功能,看中的就是物联网信息安全。其中,Cortex-M23是Cortex-M0+的继任者,主打超低功耗。而Cortex-M33是Cortex-M3和Cortex-M4的继任者,性能更强,具有DSP浮点运算功能。ARM Cortex-M23与Cortex-M33是首款基于ARM公司最新的ARMv8-M架构的嵌入式处理器,而Cortex-M0/0+、Cortex-M3、Cortex-M4和Cortex-M7则是基于上一代的ARMv7-M架构。
Cortex-A与Cortex-M的TrustZone并没有太大功能上的区别,均可实现Secure与Non-Secure的划分,但M系列和A系列架构本身就存在差异,所以从实现上来看略有差异,详情可见ARM官网:ARM TrustZone技术
ARMv7-M的TrustZone比较难用,市面上几乎没有它的产品就很好的说明了这一点,因为它有着一条神奇的规定:基地址(Base Address)必须对齐(Aligned with)到它的尺寸(Size),而且尺寸必须是2的整数次方。就是说如果我想给安全区划分一块274KB的内存,ARMv7-M需要用1KB+16KB+256KB+1KB将其组合出来,这根本上的导致了几乎没有什么RTOS可以很好的使用它的MPU。而ARMv8-M很好的改正了这一点,更改为 起始地址+终止地址。
STM32L5为STM32L低功耗家族最新一代的MCU,针对物联网安全设计,已通过PSA level2认证。主要有三方面的特点:系统信息安全、低功耗、系统集成度和性能的提升。
STM32L5采用了ARMv8-M架构下的TrustZone机制,在同一颗芯片上实现了两个世界,安全世界和非安全世界,它们同时存在于同一颗芯片上,但是物理机制又保证了两个世界有可靠的隔离。基于L5的TZ硬件基础,ARM的TF-M已经提供了L5的支持,并经过了PSA level2认证。片上内置的AES加解密引擎、SHA验证模块、PKA公钥算法加速器,为加解密提供了足够的运算能力。
信息安全,不仅仅是加解密,系统上的隔离、代码和执行的保护、安全启动固件的支持也很重要。这些功能元素,L5都有硬件和软件的支持。新加入“代码和执行保护” 硬件,包括灵活的软件隔离、安全启动、密钥存储和硬件加密加速器。TEE系统方面有ISEEM TEE SDK支持,提供了完善的安全启动流程、加解密算法框架,支持SHA、AES、RSA等常用加解密算法。ISEEM固件内置OTA升级功能,可实现硬件在TEE环境下的远程升级,助力TEE技术在IOT领域的应用。
STM32L5提供了嵌入式SMPS降压转换器,可进一步减低MCU的运行功耗。LDO模式下的运行功耗为106μA/MHz,SMPS降压转换器模式下,运行功耗低至62μA/MHz(3V时)。关断电流为17nA,停止模式下为3µA,完整保留SRAM和外围状态时,唤醒时间为5µs。
STM32L5内核为110MHz的Cortex-M33,为Cortex-M4改进而来,同频条件下比Cortex-M4有20%的运算能力提升,相比于Cortex-M0+改进而来的Cortex-M23性能也有比较大的提升。凭借出色的内核,以及对DSP指令和浮点运算的支持,结合ST ART Accelerator™存储器加速技术,STM32L5系列MCU在110 MHz时取得165 DMIPS / 427 CoreMark™的测试成绩。经过市场检验的ST ART Accelerator™是STM32L5 MCU的一项创新的增强功能,现在通过8KB的指令缓存支持内部闪存和外部存储器加速,在软件耗尽外部存储器时可以提高取指效率。
STM32L5引入了新的数字外设,包括即使在系统电压1.8V时也能使USB保持数据传输的内置专用电源的USB Full Speed控制器,以及符合USB Type-C Rev. 1.2和USB Power Delivery Rev. 3.0的UCPD控制器,专为物联网应用而设计。智能模拟功能包括最先进的模数转换器(ADC)、两个功率门控数模转换器(DAC)、两个超低功耗比较器和两个运算放大器,其中两个运算放大器有外部或内部电压跟随电路和可编程增益放大器(PGA)功能。除此之外还有CAN FD工业用通信接口,STM32L5 MCU为工业传感器或控制器、家庭自动化设备、智能电表、健身追踪器、智能手表、医用泵或表计等产品提供一个理想的平台。
STM32L5x2 MCU配备512 KB双区闪存,允许读写同时操作,方便设备管理,并支持错误校正码(ECC)诊断,提高数据安全性;还配备256KB SRAM,支持高速外部存储器,包括单线、双线、四线或八线SPI和Hyperbus 闪存或SRAM,提供SRAM、PSRAM、NOR、NAND或FRAM存储器接口。
好的芯片离不开完善的软件支持,了解完芯片硬件特性后,来看下STM32L5的软件和开发环境。STM32L5提供了完备的软件开发包,包括:HAL/LL库的外设驱动API,FreeRTOS、FatFS、USB协议栈、TF-M安全固件等中间件,以及大量的项目例程。用户可以借助SDK,快速投入到开发进程,搭建STM32L5的TEE运行环境。
IDE可以使用STM32CubeIDE进行一站式管理,完成配置、开发、烧录全流程,亦可使用第三方工具。
后续的文章会结合实际工程,进一步了解STM32L5,以此硬件平台为基础进行TEE开发与应用。
参考的PPT资料来源:STM32L5官方培训课程