arm trustzone
arm的trustzone并不涉及到具体的crypto算法,只是实现:
1) 敏感信息的安全存储;
2) 控制bus和debug的安全访问,保证信息不被泄露;
trustzone是system_level的实现,涉及到软硬件,硬件方面包括:
1) ARM processor;
2) Bus fabric;
3) system peripheral IP;
硬件devices被attacked的几种方式:
1) Hack attack,通过植入病毒和木马,来执行一些非法的软件。
2) Shake attack,attackers可以物理访问到device,并且可以实现一些主动的动作,force pins,
利用JTAG,BIST,IO boundary scan,reprogrammming memory device。
3) Lab attack,attackes可以通过实验室设备,实验device,在silicon的metal layer加探针等操作。
危险性极大。
目前硬件中常用的几种security 实现方式:
1) 外加hardware security module,像SIM card这样。并不通用,而且成本高。
2) 在内部加入自己的hardware security module,security与normal world之间的数据交换复杂,因为没有形成
一个系统的解决方案。
3) software virtualization,任何带mmu的processor都可以实现,security通过hypervisor来实现,
但是对于DMA和GPU这样的master,没有解决方案。
trustzone的硬件architecture:主要分为system achitecture,processor architecture,debug architecture
1) system achitecture:主要是指,bus中已经包含security signal,memory也可以通过增加一根security的信号,来物理上将
硬件bus系统隔绝为两个world。
2) Processor architecture:
arm-a9之后的processor都直接支持secure,两个virtual processor,之间切换,只能通过
指令SMC(Secure Monitor Call),或其他的一些exception,IRQ,FIQ,external Data Abort,external Prefetch Abort
当前的processor处在secure还是non-secure,通过coprocessor,CP15中的寄存器SCR(Secure Config Reg)来表示,
其中有一个NSbit,当processor处在monitor状态时,该状态位无效。
mmu,支持secure扩展,可以看做是两个virtual mmu,其中的TLB(Translation Lookaside Buffers),可以同时包含secure和
non-secure,在切换时,也不需要切换。
cache,加入secure特性的扩展后,world switch时,不需要再进行cache flush,任何non-lockdown的cache line都可以被evict,
与security属性无关,也就是说,secure的cache line可以被evict,为non-secure cache line加载。
interrupt,secure的interrupt,的很多控制寄存器,如mask,enable,clear,必须是由security world来访问。
推荐实现,IRQ应用在normal world,FIQ应用在secure world,monitor状态下,所有的irq被mask掉。
exception vector,支持TZ的proceesor的有三组exception vector tables,分别是normal world,secure world,
Monitor mode。各个基地址,可以通过CP15中的VBAR(Vector Base Address Register)
Multiprocessor system,主要分为SMP(Symmetric Multi-processor),AMP(Asymmetric Multi-processor),主要影响
在于软件,AMP结构中,软件调度更加复杂,
3) Debug architecture:可以分为processor debug components和system debug components。
processor debug:针对secure和privilege加入了更多的enable控制信号,
Secure privilege invasive debug(JTAG),SPIDEN signal
Secure privilege non-invasive debug(trace),SPNIDEN signal
Secure user invasive debug,SUIDEN signal
Secure user non-invasive debug,SUNIDEN signal
secure debug只有在确认安全的环境下,才能打开
global的enable信号:
global invasive debug mode,DEGEN
global non-invasive debug mode,NIDEN
对于multiprocessor debug control,每个cluster中的每个processor都有这些control signal。
armv7之后,每个processor内部都有PMU(performance Monitor Unit),内部counter记录processor执行
指令中的各个状态,如cache line evictions等,可以通过CP15的设置,来防止被non-secure非法看到
system debug:通过arm的coresight来保证,
arm提供的支持TrustZone的hardware的IP;
1) TrustZone Protection Controller(TZPC),主要实现对各个peripheral的secure的动态权限设置。再通过bus发送过来的状态,来
判断,该笔操作是否合法。

2) TZASC(TrustZone Address Space Controller),典型应用是将区分同一个AXI slave,比如chip外的DRAM,只挂载一个,
但是我们可以将其地址空间分为一半secure,一半non-secure
3) 其他的常用组建,Cache Controller,DMA Controller,interconnect,GIC
TrustZone Software achitecture:软件的实现方式比较灵活,最复杂的是在Secure World单独运行自己的OS(AMP结构),
最简单的是在Secure World,中使用一个标准的lib(SMP结构)。
在一个secure system中,boot是信任链的最底层,是最重要的一部分,TrustZone要求,boot都是开始自Secure World。

secure boot之后,需要加cryptographic checks对bootload进行检查,算法一般选择RSA-PSS,公钥和golden签名也都保存在
device中,boot的时候,进行验证。
在进行secure world的切换时,从secure到non-secure,可以直接修改CPSR寄存器,直接进行world的切换,
如果processor中带有NEON,VFP这样的coprocessor reg,进行context-switching,可以选择Lazy context switch,
AARCH64架构中的secure结构:

在软件应用中,secure和normal的interaction:

在软件切换过程中,有一个问题时,secure world的执行,可能会打断normal world的interrupt,
所以,一般要求secure world使用FIQ。
在armv7的AARCH32架构中,secure model与AARCH64是不同的,secure os执行在EL3,所以为了AARCH3和AARCH64能够保持统一,
需要secure os在secure状态下,和non-secure状态下的TTBR1_EL1不同,

arm trustzone的更多相关文章
- An Exploration of ARM TrustZone Technology
墙外通道:https://genode.org/documentation/articles/trustzone ARM TrustZone technology has been around fo ...
- ARM TrustZone白皮书部分阅读
嵌入式系统安全的一些解决方法及缺陷 外部硬件安全模块:在主SoC之外包含一个专用的硬件安全模块或可信元件,e.g. 手机的SIM卡.隔离仅限于可以从非易失性存储器运行的相对静态程序 内部硬件安全模块: ...
- ARM的体系结构与编程系列博客——ARM处理器系列介绍
ARM处理器系列介绍 现在到了3月,过年过得过于舒服了.系列博客也停更了近半月,我果然是个慢(lan)性(gui)子,那么趁着到校的第一天晚上,就写一篇博客来继续我的系列博客了!众所周知,ARM处理器 ...
- ARM Linux 内核 panic 之cache 一致性 ——Cortex-A9多核cache和TLB一致性广播
ARM Linux 内核 panic 之cache 一致性 ——Cortex-A9多核cache和TLB一致性广播 Cortex-A9的多喝CPU可以接收和执行一致性广播操作,当其使能并处于SMP模式 ...
- ARM Linux 内核 panic 之cache 一致性 ——cci-400 cache一致互联
ARM Linux 内核 panic 之cache 一致性 ——cci-400 cache一致互联 CCI-400 集合了互联和一致性功能,有 2 个 ACE slave 接口和 3 个 ACE-Li ...
- 如何在 arm 官网上找到合适的手册
http://infocenter.arm.com/help/advanced/help.jsp 在这里输入合适的版号即可 这样就可以不用去 CSDN 了 100000_0000_00_EN - AR ...
- [转帖]Marvell第二代ARM处理器ThunderX2解析
Marvell第二代ARM处理器ThunderX2解析 https://www.cnbeta.com/articles/tech/853137.htm 长久以来,服务器数据中心市场一直被x86 CPU ...
- Smart210学习记录-----中断
1. OVERVIEW OF VECTORED INTERRUPT CONTROLLER(概述向量中断控制器) 主要有4个VIC,4个TZIC还有一个很特殊的ARM PrimeCell PL192.主 ...
- STM32、Cortex-A、Cortex-R、Cortex-M、SecurCore
STM32是就是基于Cortex-M3这个核生产的CPU. arm7是arm公司推出的以V4指令集设计出来的arm核--其代表的芯片有s3c44b0 arm9是arm公司推出的以V5指令集设计出来的a ...
随机推荐
- jmeter_用户并发登录
部分摘自:https://blog.csdn.net/weixin_41291554/article/details/80492276 第一种方案:对登录账号和密码进行参数化 1.添加设置线程数: N ...
- 【Loadrunner】Loadrnner 参数化策略
Loadrnner 参数化策略 参数化策略 关键:类型+数据+策略 1.Select next row ( 如何取) 选择下一行 1)Sequential:顺序的 每个VU都从第一行开始,顺序依次向下 ...
- VS Code Html Zen coding
zen coding是一种编写html和css的方法, 很快捷. 打开Views/Home/About.cshtml, 然后在空白处输入div然后按Tab: 随后完整的div标签就出来了: zen c ...
- shell 变量的数值计算实践 expr
expr(evaluate(求值)expressions(表达式))命令既可以用于整数运算,也可以用于相关字符串长度.匹配等的运算处理 expr 用做计算 必须有一个空格才会计算 [root@salt ...
- MongoDB的客户端管理工具--nosqlbooster 连接MongoDB服务器
nosqlbooster的官网地址为https://nosqlbooster.com.大家如果想直接下载,可以登入下载网址https://nosqlbooster.com/downloads. 下载w ...
- 前端 HTML 常用标签 head标签相关内容 link标签
link标签 引入CSS样式文件 href="./index.css" CSS文件的路径 <!-- 引入CSS样式文件 --> <link rel="s ...
- UIBezierPath使用
效果图,Demo的例子是我自己做的,下面曲线的代码是从别处copy过来的 copy地址 -(void)touchesBegan:(NSSet<UITouch *> *)touches wi ...
- 011-docker-安装-rabbitmq-management:3.7.13
1.搜索镜像 docker search rabbitmq 2.拉取合适镜像 选择合适tag:https://hub.docker.com/,下载3.7.13 带web管理界面版本 docker pu ...
- Font Awesome 最简单应用例子
简介: Font Awesome为您提供可缩放的矢量图标,您可以使用CSS所提供的所有特性对它们进行更改,包括:大小.颜色.阴影或者其它任何支持的效果. 使用方法: 引入<link rel=&q ...
- vue-router路由管理器
安装vue-router npm install vue-router 在main.js中引入 import VueRouter from 'vue-router' Vue.use(VueRouter ...