0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于M33核NXP LPC55Sxx MCU拥有的TrustZone技术来实现IoT安全

UtFs_Zlgmcu7890 来源:lp 2019-03-26 09:58 次阅读

物联网IoT)是嵌入式开发者的热门话题,IoT系统产品变得更加复杂,同时也需要更好的方案来保证系统的安全。本文介绍基于M33核NXP LPC55Sxx MCU拥有的TrustZone技术来实现IoT安全。

一、TrustZone技术介绍

LPC5500系列MCU以Arm最新的Cortex-M33为核心,与前几代产品相比,改进了产品架构并提高了集成度;大幅减小了功耗,并提供高级安全功能,通过Arm TrustZone-M保护资产。

近几年来,物联网(IoT)成为了嵌入式开发者的热门话题。IoT系统产品变得更加复杂,同时也需要更好的方案来保证系统的安全。

传统的方案是通过把软件分成特权和非特权两部分解决。特权级软件利用MPU防止非特权软件的应用,访问包含敏感信息在内的关键系统资源。

这些方案对一些IoT系统非常适合,但是在一些情况下,只有两层划分是不够的。特别是那些包含很多复杂特权级别的软件组成的系统,特权级代码的一个缺陷,就可能导致黑客彻底的控制整个系统。

为了更好地提高MCU的安全性能,Arm在ARMv8-M架构中引入了TrustZone技术。ARMv8-M中的TrustZone技术是一种可选择的安全扩展,旨在为各种嵌入式系统应用提供基本的安全保障。

TrustZone技术将系统分为安全区和非安全区两部分,并通过特殊的指令实现两种区域内函数的相互访问。

TrustZone的概念不是最新的了,它被应用在Arm Cortex-A系列处理器中已经有一段时间了,现在被扩展到了ARMv8-M 处理器中,它与Cortex-A处理器中的TrustZone并不是完全相同的,本篇中所描述的TrustZone技术都是基于Cortex-M处理器的。

1.1TrustZone的特性:

允许用户将内存划分为安全和非安全区域;

允许在未经过身份验证时阻止调试安全代码/数据;

NVIC、MPU、SYSTICK、内核控制寄存器等也被备份到两个区域中 ,安全代码和非安全代码可以独立访问自己的资源;

安全区和非安全区都有MSP和PSP堆栈指针;

提出了Secure Gateway的概念,非安全代码可以通过Secure Gateway访问特定的安全代码,这也是非安全代码访问安全代码的唯一方式;

提供了一个Stack Limit Checking(堆栈限制检查)功能,可以用于检测堆栈溢出的情况。在Cortex-M33对应的ARMv8-M架构中,每个堆栈指针都有相应的堆栈限制寄存器

1.2Register banking

上节提到一些有内核相关的寄存器也被备份到了安全/非安全区域中,下图展示了具体哪些通用/特殊寄存器被备份到两种内存中。

1.3TrustZone 技术可以满足的安全需求

Data protection:敏感数据可以存储在安全内存中,只可以被安全软件访问。只有在安全检查和授权之后,非安全软件才可以访问安全APIs。

Firmware protection:固件可以预装载在安全区域中,防止逆向操作和恶意攻击。

Operation protection:关键操作可以像安全固件一样,被预加载到安全内存中,并且配置适当的外设仅在安全状态下访问。通过这种方式, 可以保护操作免受来自非安全端的入侵。

Secure boot:安全启动机制可以使用户对自己的平台充满信心,因为它始终从安全内存启动。

二、Secure/Non-Secure存储器配置

在Cortex-M33中,如果选配了TrustZone技术,则4G的内存空间将被划分为安全和非安全内存区域。安全内存空间又可以进一步划分为两种类型: Secure和Non-secure Callable(NSC)。

三种内存区域的特性:

Secure:安全数据只可以被安全代码访问,安全代码只有在CPU处于安全模式时才可以被执行;

Non-secure:非安全数据可以被安全和非安全状态访问,但非安全代码只能在CPU处于非安全状态时被执行;

Non-secure Callable(NSC):NSC区域作为非安全函数访问安全函数的跳板。非安全代码需要先跳转到NSC区域中,执行SG指令,然后再跳转到相应的的安全函数处执行,这也是NS代码访问S函数的唯一方式。

引入NSC存储区的原因,是为了防止其他二进制数据(例如,具有与SG指令的操作码相同的值的查找表)被用作安全状态的入口函数。

2.1内存区域的的安全属性定义

内存区域的安全属性是由Secure Attribution Unit(SAU)和Implementation Defined Attribution Unit(IDAU) 共同决定的。

SAU的作用和IDAU是相似的,都是用于分离安全区和非安全区。两者最大的区别是SAU位于CPU内部,IDAU在CPU外部。

无论是IDAU和SAU都可以定义一块内存的安全属性,此时CPU会选择两者中较高的安全属性作为此块内存最终的安全属性,最高的安全属性是Secure,其次是Non-Secure Callable,最后是Non-secure。

2.2IDAU

IDAU除了可以向处理器指示特定存储器地址是Secure、NSC还是Non-secure,提供存储器地址所在的区域编号之外,它还可以标记免受安全检查的内存区域,例如ROM表。

理论上,IDAU是可以设计为可编程的,但是IDAU接口上的信号位于时序的关键路径上,这会使IDAU的设计变得非常复杂,不切实际,也会导致设计中的门数更高。

实际上,IDAU只提供了有限的可配置的简单存储器映射。

LPC55Sxx 的IDAU提供的配置如下图所示:

其中,0x00000000到0x1FFFFFFF是NS区域,在0x20000000到0xFFFFFFF范围内,是根据存储器地址的第28位来判断该内存地址的安全属性,若Bit_28=0, 则为非安全地址,若Bit_28=1, 则为安全地址。

2.3SAU

SAU为每个内存区域定义了一个Region Number(RN)。RN可以被TT指令用来决定目标内存的访问权限和安全属性。RN的数量可以被SAU配置为0、4或者8。

SAU是由设计者配置的,设计者可以在IDAU配置的内存属性的基础上,用SAU去重定义内存中的一些区域的安全属性,CPU会根据IDAU和SAU的配置,决定内存的最终安全属性。

LPC55Sxx复位后,默认的SAU配置是: 所有存储空间都是安全的。结合IDAU的默认配置,LPC55Sxx的最终默认配置如下图所示,即所有内存区域都是安全的。

三、Secure/Non-secure转换

第二节中介绍了如何利用SAU和IDAU配置一块内存区域的安全属性,用户可以在安全区和非安全区定义相应的函数,TrustZone技术允许两种状态下的函数相互调用,在进行相互调用时需要用到几个特殊指令:SG、BXNS、BLXNS, 如下表所示。

执行状态切换时的具体操作如下图所示:

SG指令:用于从非安全状态切换到安全状态,是从非安全区跳转到NSC区域之后执行的第一条指令;

BXNS指令: 用于从安全状态返回到非安全状态;

BLXNS指令: 用于在安全状态下调用非安全函数。

这里介绍两种特殊的函数:Entry function和Non-secure function。

Entry function是指那些可以被非安全函数调用的安全函数;

Non-secure function是指那些可以被安全函数调用的非安全函数。

用户在实现两种状态下函数的相互调用时,不需要额外关注该执行哪条特殊指令(SG/BXNS/BLXNS),而只需要将那些被调用的函数定义为Entry function或 Non-secure function即可。下面简单介绍如何定义以及使用Entry function和Non-secure function。

3.1Entry function

Entry function需要用“__attribute__((cmse_nonsecure_entry)) ”属性修饰,举例如下:

此时func1()已经被定义为了entry function,在非安全内存中调用entry function的方法与调用普通的非安全函数的方法是相同的,如下所示:

这样即可实现非安全函数调用安全函数的功能。

3.2Non-secure function call

Non-secure function函数定义如下所示:

在安全内存中的调用non-secure function的方法如下:

这样即可实现在安全函数中调用0x21000248u处的非安全函数。

四、总结

看到这里,各位看官是不是对LPC55Sxx中的TrustZone技术的使用方法有了初步的了解呢,下面小编再为大家总结一下使用TrustZone时软件的工作流程:

在明白了这些之后,大家就可以开始行动起来,利用手里的LPC55Sxx来设计自己的安全系统了。

TrustZone详细培训视频最后,让我们来看看由本文作者做的,一个关于TrustZone的详细培训视频,您可以更深入地理解前面所讲的内容。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16016

    浏览量

    343579
  • 寄存器
    +关注

    关注

    30

    文章

    5028

    浏览量

    117715
  • 物联网
    +关注

    关注

    2867

    文章

    41622

    浏览量

    358335

原文标题:【技术解析】设计安全系统?你也可以!

文章出处:【微信号:Zlgmcu7890,微信公众号:周立功单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    恩智浦LPC55S16 MCU获得了PSA 2级和SESIP 2级保证认证

    LPC55S16 MCU属于恩智浦EdgeVerse™计算和安全产品组合,是基于Arm® Cortex®-M33内核的通用LPC5500
    发表于 11-21 09:28 1604次阅读

    大联大世平集团推出基于NXP Cortex M33 LPC55S26产品的电脑外设参考设计

    大联大世平推出的基于NXP Cortex M33 LPC55S26的电脑外设参考设计方案,可助力广大用户快速设计出包含键盘、鼠标、耳机在内的一套电脑外设产品。
    发表于 04-15 11:45 2074次阅读
    大联大世平集团推出基于<b class='flag-5'>NXP</b> Cortex <b class='flag-5'>M33</b> <b class='flag-5'>LPC55</b>S26产品的电脑外设参考设计

    NXP LPC54110试用体验】+结项

    通过前几节的学习,深入的体会到了LPC系列MCU的强大。NXP LPC5411x ARM® Cortex®-M4 微控制器 (
    发表于 08-29 08:19

    LPC55S16-EVK MCU用于工业应用!!!

    LPC55S16-EVK功能和应用LPC55S16-EVK开发板基于LPC55S1x MCU系列,这是基于Arm®Cortex®-M33
    发表于 09-08 17:08

    怎么实现基于业界首款Cortex-M33微控制器LPC55S69的电路设计?

    怎么实现基于业界首款Cortex-M33微控制器LPC55S69的电路设计?
    发表于 06-15 09:14

    物联网安全之cortex m23/m33 MCU ***实操 精选资料分享

    本文针对ARMv8m架构MCU安全特性进行介绍,以nxp LPC55xx系列和STM32L5xx系列为例,为大家阐述如何使用
    发表于 07-23 07:52

    基于LPC55xxx CM33的***原理与应用是什么

    LPC55sxx系列开发板,MCUXpresso IDE v11.1.1_3241集成开发工具。二:实现原理2.1:区域划分***将内存和外设分为安全区域(S)和非
    发表于 02-09 06:39

    介绍Cortex-A和Cortex-MTrustZone之间的差异

    应用,数字版权保护等等,都是基于TrustZone实现保护的。其实对于底层安全技术来说,无论是哪个场景的
    发表于 07-13 14:45

    ARMv8-M trustzone IOT安全之基于Cortex-M33的TFM测试

    1、基于Cortex-M33的TFM 测试  针对IOT(Internet Of Things,万物物联),ARM v8-M 架构也引入了trus
    发表于 09-14 14:41

    Arm Cortex®-M33处理器技术参考手册

    Cortex®-M33处理器是一款低门数、高能效的处理器,适用于微控制器和深度嵌入式应用。 该处理器基于ARM®V8-M架构,主要用于安全性非常重要的环境。 处理器支持的接口包括: ·Code
    发表于 08-17 07:23

    LPC55S69是两个ARM Cortex M33内核,这种双内核应用在那种场景中比较合适?

    NXPLPC55S69是两个ARM Cortex M33内核,这种双内核应用在那种场景中比较合适?显示全部
    发表于 10-30 07:40

    LPC55S66JBD64K NXP Semiconductors LPC55S6x Arm® Cortex®-M33微控制器

    电子发烧友网为你提供NXP(ti)LPC55S66JBD64K相关产品参数、数据手册,更有LPC55S66JBD64K的引脚图、接线图、封装手册、中文资料、英文资料,LPC55S66J
    发表于 10-29 13:06

    物联网安全之cortex m23/m33 MCU trustzone实操

    本文针对ARMv8m架构MCU安全特性进行介绍,以nxp LPC55xx系列和STM32L5xx系列为例,为大家阐述如何使用Trustzone
    发表于 12-04 13:51 11次下载
    物联网<b class='flag-5'>安全</b>之cortex m23/<b class='flag-5'>m33</b> <b class='flag-5'>MCU</b> <b class='flag-5'>trustzone</b>实操

    基于LPC55xxx CM33核的TrustZone原理与应用

    基本的安全保障。本文基于CM33核的LPC55sxx系列开发板,MCUXpresso IDE v11.1.1_3241集成开发工具。二:实现原理2.1:区域划分
    发表于 12-05 15:51 13次下载
    基于<b class='flag-5'>LPC55</b>xxx CM<b class='flag-5'>33</b>核的<b class='flag-5'>TrustZone</b>原理与应用

    [LPC55S6X]解决在-dist之后无法编译的问题的思路

    在进行bsp适配的时候,在bsp\lpc55sxx\lpc55s36_nxp_evk下输入命令scons —dist
    的头像 发表于 10-11 17:00 378次阅读
    [<b class='flag-5'>LPC55</b>S6X]解决在-dist之后无法编译的问题的思路