热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

ARMV8M中的TrustZone如何保护代码的安全?

来源|STM32STM32L5基于Cortex-M33内核,其内核基于ARMV8-M架构,自带有TrustZone安全技术,从内核到整个芯

来源 | STM32

STM32L5基于Cortex-M33 内核,其内核基于ARMV8-M架构,自带有TrustZone安全技术,从内核到整个芯片系统,实现了安全区域和非安全区域之间的有效隔离。

在调试端口保护方面,TrustZone 和 RDP(读保护)的配合,同样可以实现灵活的调试端口访问控制,有效阻断来自调试端口对片上代码的窥探。

TrustZone 保护片上代码的机密性

  • 调试端口连接可控

    在RDP1或者RDP0.5条件下,如果芯片使用了TrustZone上电调试接口就不可连接(具有类似RDP2的效果)

    比RDP2更灵活,可以由用户代码控制后续调试端口访问权限,实现安全调试,并保留修改选项字节的可能性

  • 用户片上Flash进一步隔离

    安全闪存区域不能被非安全世界任意访问

    非安全世界不能访问安全世界的数据

    非安全世界不能访问安全世界的外设

    非安全世界访问安全世界的函数,需要按照一定规则,不可随意调用

TrustZone 助力代码保护示例

  • 资源在“安全世界”和“非安全世界”之间的分配

  • 示例菜单和测试功能

  • 示例运行注意事项

资源的分配

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

  • 安全世界:

    关键操作,关键数据

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

  • 非安全世界:

    人机交互

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

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

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

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

运行示例

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

  • 读保护级别为0.5

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

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

  • 保护效果

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

带身份认证的调试使能

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

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

例程运行注意事项

  • 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】:即使通过通信端口在非安全区注入恶意代码来调用打开调试端口的功能,由于不知道签名所需要的私钥,验证无法通过,不能打开调试端口

------------ END ------------


●嵌入式专栏精选教程

●精选汇总 | ST工具、下载编程工具

●精选汇总 | 嵌入式软件设计与开发

●精选汇总 | STM32、MCU、单片机

欢迎关注我的公众号,回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。

欢迎关注我的视频号:

点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。


推荐阅读
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 尽管深度学习带来了广泛的应用前景,其训练通常需要强大的计算资源。然而,并非所有开发者都能负担得起高性能服务器或专用硬件。本文探讨了如何在有限的硬件条件下(如ARM CPU)高效运行深度神经网络,特别是通过选择合适的工具和框架来加速模型推理。 ... [详细]
  • vivo Y5s配备了联发科Helio P65八核处理器,这款处理器采用12纳米工艺制造,具备两颗高性能Cortex-A75核心和六颗高效能Cortex-A55核心。此外,它还集成了先进的图像处理单元和语音唤醒功能,为用户提供卓越的性能体验。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 解决IIS无法访问映射网络驱动器的问题
    探讨IIS在尝试访问映射的网络驱动器时遇到的问题及其解决方案,包括配置和权限设置等方面的详细分析。 ... [详细]
  • 本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 本文详细介绍了C语言的起源、发展及其标准化过程,涵盖了从早期的BCPL和B语言到现代C语言的演变,并探讨了其在操作系统和跨平台编程中的重要地位。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • Linux环境下进程间通信:深入解析信号机制
    本文详细探讨了Linux系统中信号的生命周期,从信号生成到处理函数执行完毕的全过程,并介绍了信号编程中的注意事项和常见应用实例。通过分析信号在进程中的注册、注销及处理过程,帮助读者理解如何高效利用信号进行进程间通信。 ... [详细]
author-avatar
campionezhao
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有