当前位置: 首页 > news >正文

带 TrustZone 的按键点灯工程示例

关键字:TrustZone, Secure, NonSecure

1. 引言

假设软件存在漏洞,攻击者利用软件漏洞就有可能导致关键的信息受损。这种情况下,使用系统隔离,将关键的资源以及操作和普通的分开,普通的应用程序无法访问关键资源,从而可以有效的降低软件漏洞带来的风险。

TrustZone 是系统隔离的一种硬件手段,它将整个系统分为安全世界和非安全世界。安全世界可以存储像密钥、配置关键外设等,非安全世界运行其余代码。这样,即使非安全侧遭受到攻击,由于访问权限的限制,安全侧的数据以及关键外设不会受到影响。

TrustZone 技术,在一个芯片上,按照地址,划分了安全世界和非安全世界。但一个地址,它的安全属性,有三种 Secure、NSC、Non-Secure。

为什么在安全世界中,要存在一个 NSC 区域呢?TZ 隔离出的两个世界,安全世界和非安全世界。安全世界可以随意调用非安全世界的代码,而非安全世界调安全世界的 API 则要经过中转站(NSC 区域)。不同安全属性的地址区域的调用关系如图 1 所示。

图1. 地址区域中的属性关系图

2. 按键点灯实验

接下来,我们将通过按键点灯实验,来体会系统隔离的魅力所在。这也将更好的帮助去理解系统的安全侧和非安全侧。

2.1. 使用准备

硬件:

  • NUCLEO-H563ZI

软件:

  • CubeMX 6.12.1 (或最新版本)
  • STM32Cube_FW_H5_V1.2.0 (或最新版本)
  • STM32CubeProgrammer 2.17.0 (或最新版本)
  • IAR EW for Arm 9.50.2 (或最新版本)
2.2. 实验思想

在实验中,开启 USER_BUTTON (处于非安全侧)的外部中断功能。当用户按下按键并松开手,触发上升沿中断。在上升沿中断回调函数中,去翻转小灯 LED1_GREEN(处于安全侧)、LED2_YELLOW(处于非安全侧)、LED3_RED(处于非安全侧)。

引脚及所处状态总结如表 1 所示。

表1. 引脚及其所处状态表

2.3. 实验步骤
2.3.1. CubeMX 配置

1)使能 TrustZone,将 PC13 设置为 EXTI 模式,PB0、PF4、PG4 设置为推挽输出模式并设置处于安全侧还是非安全侧。设置如图 2 所示。

图2. GPIO 配置图

2)使能 PC13 的外部中断线 EXTI Line13。如图 3 所示。

图3. EXTI Line13 配置

3)点击 GENERATE CODE 生成代码。

2.3.2. 代码配置

1)如何实现在非安全侧调用安全侧的代码?需要在 Secure/Src/secure_nsc.c 中实现,在 Secure_nsclib/secure_nsc.h 中声明小灯状态翻转函数 void SECURE_LEDToggle(void)。

2)在非安全侧函数调用安全侧代码 SECURE_LEDToggle();

2.3.3. STM32CubeProgrammer 配置

1)首先需要使能 TrustZone 功能,点击 OB->User Configuration 2->TZEN,使能。

图4. TZEN 配置图

2)通过查看非安全侧代码,发现位于 0x0810 0000 ~ 0x081F FFFF。开启 TZ,默认所有的 Bank2 均处于安全侧。因此,我们需要手动更改 Bank2 的区域为非安全侧。如图 5、图 6 所示

图5. 非安全侧代码所处 ROM 地址区域

图6. 更改 Bank2 的安全属性

2.3.4. 编译代码并下载

编译下载后,当按下用户按键并松开后,小灯点亮。再次相同操作,小灯熄灭。

注:编译时,先编译安全代码,再编译非安全侧代码。

3. 小结

通过上面演示,操作非安全侧按键去点亮安全侧的 LED1 和非安全侧的 LED2、LED3, 来帮助大家更好的理解安全侧与非安全侧的资源与外设调用。

http://www.lryc.cn/news/610990.html

相关文章:

  • 【C++篇】C++11:右值引用与移动语义
  • mac安装pycharm
  • CVPR优秀论文 | DashGaussian:在200秒内优化三维高斯点绘制
  • 蓝桥杯常用java API
  • 『 C++ 入门到放弃 』- 智能指针
  • 飞算JavaAI—AI编程助手 | 引领开发新时代,智能化编程的完美助手
  • 从「同步」到「异步」:用 aiohttp 把 Python 网络 I/O 榨到极致
  • Vue.js之核心语法与指令
  • 网络 —— 笔记本(主机)、主机虚拟机(Windows、Ubuntu)、手机(笔记本热点),三者进行相互ping通
  • 初始MyBatis
  • LabVIEW 2025 安装攻略(附图文教程)适用于测试与自动控制领域
  • MySQL 查询性能优化与索引失效问题全解析
  • 使用公众号的消息模板给关注用户发消息
  • MySQL CONV()函数
  • spring webflux链路跟踪【traceId日志自动打印】
  • 移动端 WebView 调试实战 深色模式样式失效与主题切换异常排查指南
  • 前端1.0
  • Lua语言程序设计1:基础知识、数值、字符串与表
  • 针对软件定义车载网络的动态服务导向机制
  • linux_https,udp,tcp协议(更新中)
  • 实战项目3-工控软件-2.0- 自定义控件HMILabel的创建
  • 漏洞分析:90分钟安全革命
  • 赛灵思ZYNQ官方文档UG585自学翻译笔记:Quad-SPl Flash 闪存控制器
  • 信息系统项目管理中的沟通管理实战精解
  • 智慧油站误报率↓77%:陌讯多模态融合算法实战解析
  • 【Git】git提交代码报错Git: husky > pre-commit
  • 【Java面试题】注解,异常相关知识
  • 二维数点问题 1
  • Dell电脑Windows系统更新后声卡驱动无法识别插线耳机问题
  • 第13届蓝桥杯Scratch_选拔赛_初级组_真题2022年1月22日