打造更安全的嵌入式系统:你必须了解的Armv8-M架构

打造更安全的嵌入式系统:你必须了解的Armv8-M架构

关键词: ARMv8-M, 微控制器架构, 微控制器,TrustZone, 安全性, 嵌入式

确保基于微控制器的物联网应用的安全性可能会很棘手。安全性始于硬件层次,然后扩展到嵌入式软件。为了成功保障软件安全,开发人员要求底层硬件支持以下等关键特性:

  • 安全启动
  • 存储器保护
  • 加密引擎加速器
  • 真随机数发生器 (TRG)
  • 安全引脚复用
  • 软件隔离

虽然Arm® Cortex®-M处理器(如M0+、M3/4/7系列)支持其中一些特性,但要打造成功的解决方案可能既困难又耗时。

开发人员可以在硬件层次上运用一种新解决方案,即使用基于Armv8-M架构的新型Cortex-M23/33系列微控制器。这些处理器在设计时就考虑了安全性,包含许多安全特性,例如前面列出的那些特性,包括用于微控制器的Arm TrustZone®

通过本文,我们将更加熟悉Armv8-M架构,并探索如何利用TrustZone来提高嵌入式系统安全性。

Armv8-M架构简介


关于Armv8-M架构,首先要知道的是它是Arm的最新微控制器架构,面向低成本、深度嵌入的实时嵌入式系统而推出。该系列中加入了三款新型处理器:M23是低功耗版本,M33是高性能版本,最近推出的M35P是一款高性能、物理安全(防篡改)处理器(图1)。

图1:从性能角度看,新型Cortex-M23/33处理器是该系列中Cortex-M0+和Cortex-M4处理器的改良型。(图片来源:Arm)


相对于以前的几代架构,Armv8-M架构改善了性能,值得注意的几项重要改进包括:

  • 指令集增强功能
  • 灵活的断点配置
  • 动态重设中断优先级
  • 增强的跟踪支持
  • 更简单的存储器保护单元 (MPU) 设置

该架构最大和最有意义的改进是能够使用Arm TrustZone。TrustZone是该架构的安全扩展,允许开发人员从物理上隔离执行代码与存储区域,如RAM、代码空间和硬件中的外设。TrustZone支持将软件分拆到安全和不安全的区域中,然后在安全或非安全的处理器状态下执行。安全状态允许全面访问处理器的存储器和外设,而非安全状态只能访问非安全区域和故意暴露给非安全代码的安全功能(图 2)。

图2:TrustZone使用硬件隔离将处理器和应用区分为非安全和安全状态。在非安全状态下执行的代码不能访问或篡改安全存储器或代码。只有在安全状态下运行时才能访问安全存储器和代码。(图片来源:Arm)

开发人员可以选择哪些闪存和RAM位置属于安全状态,哪些属于非安全状态。当非安全代码调用安全功能时,非安全和安全状态之间的切换完全是在硬件中以确定的方式处理,在最坏的情况下,切换时间开销为三个时钟周期。CPU中有几个寄存器为安全状态和非安全状态所共享,但每个状态还有自己的堆栈指针、故障和控制寄存器。M33甚至还有一个堆栈限值寄存器,可用于检测堆栈溢出。

值得注意的是,TrustZone是一个处理器扩展,这意味着由器件是否包含TrustZone支持要由处理器制造商决定。既然TrustZone是可选的,下面我们就来了解目前可用的几款Armv8-M处理器以及它们如何处理TrustZone。

选择支持TrustZone的Armv8-M处理器

目前有几款处理器支持Armv8-M处理器。有意思的是,这些器件是如此新颖,以至于到2018年夏末,只有Microchip Technology一家制造商在生产。

其他处理器制造商(如 Nuvoton)已宣布即将推出此类器件。我们预计在未来12个月内,Armv8-M器件数量将大幅增加,包括那些支持TrustZone的器件。

Microchip主要生产两个版本的Armv8-M架构,即SAML10SAML11系列器件。SAML10版本不包含TrustZone,而SAML11版本则包含。图3显示了目前正在生产并供货的SAML10和SAML11器件的所有型号。这些型号之间的主要区别在于RAM、闪存、引脚和外设的有无及多少,这些是我们在选择微控制器时会考虑的因素。

图3:Microchip SAML10和SAML11微控制器型号。仅SAML11器件包含Arm TrustZone。

(图片来源:Microchip Technology)

对于希望开始使用Armv8-M的开发人员,有两种开发套件可供选择。

  • Microchip SAML10 Xplained评估板包括SAM L10E14A微控制器,后者含有16KB闪存、2KB数据闪存、4KB SRAM,并采用32引脚封装。
  • Microchip SAML11 Xplained评估板包括SAM L11E16A微控制器,后者含有64KB闪存、2KB数据闪存、16KB SRAM,同样采用32引脚封装。除了处理器不同之外,开发板是相同的。

图4所示为Xplained板的图片。

图4:Microchip SAML10/L11开发板基于Armv8架构。SAML11版本支持TrustZone(图片来源:Keil)

TrustZone应用的工作原理

使用TrustZone的开发人员会发现,嵌入式应用的开发方式将发生巨大变化。首先,开发人员需要区分其应用空间,确定哪些代码和库属于安全状态,哪些属于非安全状态。

确定后,开发人员创建两个不同的软件应用:一个用于安全代码,一个用于非安全代码。这可以利用Keil MDK之类的编译器/IDE非常容易地完成。开发人员最终得到的是一个多项目工作空间,其中一个项目是安全代码,另一个是非安全代码(图5)。

图5:使用TrustZone时,开发人员最终会得到一个多项目工作空间,其中一个项目专门用于安全代码,另一个项目用于用户代码。(图片来源:Keil)

当TrustZone应用启动时,代码开始在安全状态下执行。这样,开发人员可以立即建立信任根,由此执行应用的其余部分。系统完成启动后,应用将从安全状态切换到非安全状态,并执行所谓的用户代码。此时,应用就像任何其他嵌入式应用一样执行。主要区别在于非安全代码只能通过安全网关访问安全功能和回调(图6)。

图6:TrustZone应用从安全状态开始执行,在建立信任根之后进入非安全状态。非安全状态只能对安全代码中的公开函数进行函数调用,否则会抛出异常。(图片来源:Keil)

如果用户应用试图不通过安全网关访问安全代码、存储器或外设,就会产生异常。毫无疑问,这意味着软件有缺陷,生产环境中有漏洞,或者黑客试图访问系统。此时,代码可以决定如何阻止攻击,例如重启系统以删除任何可能在非安全SRAM中运行的注入代码。

利用TrustZone确保嵌入式应用安全性

有很多技术可以帮助提高嵌入式系统的安全性。下面几点技巧和诀窍有助于提高开发人员使用Armv8-M架构和TrustZone的兴趣:

  • 在复位期间使用安全区来建立信任根和可信执行环境。
  • 将安全关键任务、库和密钥放入安全区。
  • 将用户代码放在非安全区中。
  • 为了简单起见,将RTOS内核放在一个位置,安全区或非安全区均可。
  • 在安全区和非安全区中使用MPU可以改善进程隔离。
  • 尽量减少安全区中的代码有助于尽量减小使安全代码攻击面。
  • 启动从安全状态到非安全状态的转换之前,确保安全代码清除任何来自未分组寄存器中的秘密信息。


总结


确保基于微控制器的物联网应用的安全性十分重要,但也很棘手。安全性始于硬件层面,但许多运行Cortex-M0+、Cortex-M3/4/7内核的传统微控制器系列可能缺乏保障器件安全所需的特性。开发人员现在可以利用Cortex-M23和Cortex-M33内核上的新型Armv8-M架构,来保障使用越来越多这种架构处理器的嵌入式应用的安全性。



———————————————————–

如有任何问题,欢迎联系得捷电子Digi-Key客服团队。

中国(人民币)客服
- 400-920-1199
- service.sh@digikey.com
- QQ在线实时咨询 |QQ号:4009201199


中国(美金)/ 香港客服
- 400-882-4440
- 8523104-0500
- china.support@digikey.com

Digikey WeChat QR Code

到微信搜寻“digikey”或“得捷电子
关注我们官方微信
并登记成会员,
每周接收工程师秘技,
赚积分、换礼品、享福利

头像
得捷电子

Copyright©DigiKey Electronics