前言
本文针对ARMv8m架构M23/M33 MCU安全特性使用进行介绍,以nxp LPC55xx系列和STM32L5xx系列为例,为大家阐述如何使用Trustzone技术提高物联网设备安全性,适合有一定平台安全基础的物联网设备开发人员、安全方案开发人员。
背景
为了提升平台安全性,ARM推出了ARMv8m架构,该架构引入了Trustzone安全扩展,该技术主要利用隔离技术将地址空间划分安全和非安全区域,实现了空间隔离,这里我们称之为安全世界和非安全世界,两个世界的切换/交互通过指令集增加的几条指令实现(SG/BXNX/BLXNX)。该架构主要包括两个系列产品,以m23为代表的baseline产品以及以m33以为代表的mainline产品,前者可以认为是m0的安全版本,后者是m3/m4的安全版本。因为本文主要目的是实操,所以Trustzone具体技术知识不展开讲述。
现状
市面上已经有多家芯片厂商推出了m23/m33内核的MCU产品
厂商 | 型号 |
---|---|
NXP 恩智浦 | LPC55xx |
ST 意法 | STM32L5xx |
Nuvoton 新塘 | M2351 |
Microchip 微芯 | SAM L10/L11 |
Renesas 瑞萨 | RA2x |
Nordic | NRF5340 |
Dialog 戴泺格 | DA1469x |
ADI 亚德诺 | ---- |
Silicon Labs 芯科zhan | Gecko Series 2 |
紫光展锐(原RDA) | 春藤v5663 |
GigaDevice 兆易创新 | GD32E232 |
这气势不亚于当年的cortex m0/m3/m4,因为大家知道安全是制约物联网规模的重要原因之一,而armv8m中的trustzone能够解决设备中大部分安全问题。
安全目标
利用这些芯片我们可以实现哪些安全目标?
安全目标 | 方法 |
---|---|
密钥安全 | 安全世界密钥存储区无法被非安全世界的非法软件直接读取 |
算法安全 | 关键算法可以放在安全世界来防止运行时篡改 |
外设保护 | 外设可以放进安全世界来防止数据的原始数据的篡改 |
实操LPC55xx
设置安全属性单元SAU
/* SAU region boundaries */
#define REGION_0_BASE 0
#define REGION_0_END 0x0FFFFFFFU
#define REGION_1_BASE 0x20000000U
#define REGION_1_END 0xFFFFFFFFU
#define REGION_2_BASE 0x1000FE00U
#define REGION_2_END 0x1000FFFFU/* Set SAU Control register: Disable SAU and All Secure */SAU->CTRL = 0;/* Set SAU region number */SAU->RNR = 0;/* Region base address */SAU->RBAR = REGION_0_BASE & SAU_RBAR_BADDR_Msk;/* Region end address */SAU->RLAR = ((REGION_0_END & SAU_RLAR_LADDR_Msk) | ((0U << SAU_RLAR_NSC_Pos) & SAU_RLAR_NSC_Msk)) |((1U << SAU_RLAR_ENABLE_Pos) & SAU_RLAR_ENABLE_Msk);/* Set SAU region number */SAU->RNR = 0x00000001U;/* Region base address */SAU->RBAR = REGION_1_BASE & SAU_RBAR_BADDR_Msk;/* Region end address */SAU->RLAR = ((REGION_1_END & SAU_RLAR_LADDR_Msk) | ((0U << SAU_RLAR_NSC_Pos) & SAU_RLAR_NSC_M