良许Linux教程网 干货合集 ARMV8-M中的TrustZone如何保护代码的安全?

ARMV8-M中的TrustZone如何保护代码的安全?

STM32L5是一款基于Cortex-M33 内核的芯片,其内核采用了ARMV8-M架构,具备TrustZone安全技术。该芯片实现了安全区域和非安全区域之间的高效隔离,从内核到整个系统都具备了安全性保障。

除此之外,在调试端口保护方面,TrustZone和RDP的配合也能够实现灵活的调试端口访问控制,从而有效阻断调试端口对片上代码的窥视。

TrustZone技术还能保护片上代码的机密性,因为在RDP1或RDP0.5条件下,芯片采用TrustZone上电调试接口就不能连接,该技术比RDP2更加灵活,用户代码可以控制后续调试端口的访问权限,实现安全调试,并同时保留了修改选项字节的可能性。此外,安全闪存区域和非安全世界被进一步隔离,安全世界的数据和外设不能被非安全世界任意访问,非安全世界访问安全世界的函数需要按照一定规则,不可随意调用。

image-20231122211103538
image-20231122211103538

TrustZone 助力代码保护示例

  • 资源在“安全世界”和“非安全世界”之间的分配
  • 示例菜单和测试功能
  • 示例运行注意事项

资源的分配

  • 上电运行安全世界代码,做资源分配

  • 安全世界:

    关键操作,关键数据

    配合读保护,可以阻断调试端口连接

  • 非安全世界:

    人机交互

    可以使能调试端口,但是无法访问到安全世界的关键数据和外设

image-20231122211107010
image-20231122211107010

调试端口的连接控制RDP=0

  • 读保护级别为0(芯片缺省状态)

    芯片复位可被调试端口连接

image-20231122211109879
image-20231122211109879

运行示例

image-20231122211112524
image-20231122211112524
image-20231122211115228
image-20231122211115228

调试端口的连接控制RDP=0.5

  • 读保护级别为0.5

    硬件保证:CPU处于安全状态时,调试无法连接;包括复位时,运行安全代码时

    软件操作:安全代码在跳转到非安全区域之前,关闭调试端口

  • 保护效果

    CPU运行在非安全区域时,缺省调试无法连接;可通过身份认证来使能对非安全代码的调试

image-20231122211118187
image-20231122211118187

带身份认证的调试使能

  • 基于“挑战-应答”模型

    芯片产生随机序列,合法用户持有匹配私钥对随机序列的签名,才能被芯片使用其存储在安全世界里的对应公钥验签成功

image-20231122211121611
image-20231122211121611
image-20231122211124649
image-20231122211124649
image-20231122211129700
image-20231122211129700

例程运行注意事项

  • RDP0.5时,S代码自动关闭调试端口。使用STM32CUbeProgrammer hotplug也无法连接;IDE下载NS代码也不会成功;需要用户通过菜单打开调试端口,之后STM32Cubeprogramer才能连接成功,IDE下载也才能成功。

  • RDP非0时,片上Flash中如果没有可以跑到非安全状态的有效代码,调试端口不再可连

    除非改变启动方式,从系统BL启动(系统BL的代码是一定可以跑到非安全状态的)

    需要确保可以从系统BL启动(选项字节中的启动控制:nSWBOOT0)

  • 【Q】为何例程没有提供RDP回退的菜单?

    【A】TrustZone使能时,RDP回退只能由调试接口或者系统BL完成

    例程通过硬件和软件两方面一起作用,实现了对非安全代码的可控调试

    硬件:读保护级别不为零+TZ使能\r复位时+ 运行在安全代码区域时,调试不可连接

    软件:安全区代码在跳转到非安全区代码之前,软件关闭调试端口

    菜单【1】、【2】:测试作用,不会集成到产品中

    菜单【D】:即使通过通信端口在非安全区注入恶意代码来调用打开调试端口的功能,由于不知道签名所需要的私钥,验证无法通过,不能打开调试端口

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部