Trustzone技术细节

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Trustzone技术细节
1.trustzone硬件划分
每个物理的处理器核提供两个虚拟核,一个是非安全核(non-secure,ns),另一个
是安全核(secure,s),arm体系保证了很多硬件资源都是双份的,每个虚拟核独享自己
的那份资源,大大简化了软件设计。

在这二者之间切换的机制叫做monitor模式。

ns核只能访问ns的系统资源,而安全核能访问所有资源。

普通世界的软件可以使用smc指令或
者通过硬件异常机制的一个子集来进入到monitor模式,从而获取安全世界的服务。

普通
世界只能获取安全世界的服务,要想拿到点其他东西,就连门都没有了。

cp15的scr寄存器中存有一个ns十一位代表了当前cpu所处的世界,ns=0则表示恩
全世界,只有恩全世界能够修正scr寄存器,另外,monitor模式下总是恩全世界。

3.trustzone和mmu
安全世界和普通世界都有自己的虚拟mmu,实际上只是两个世界都有一份ttbr0、
ttbr1、ttbcr,也就是会有两个mmu表。

但tlb是共享的,在tlb里面会对安全世界的
tlb项打上tag,所以实际上一个tlb也是逻辑上被划分了两个,不同世界各管各的。


外tlb对不同世界的项打上tag也不是必须的,不同soc可以不一定实现这个功能,毕竟
转换世界的时候刷出整个tlb就可以了。

mmu表里的描述符里也会有一个ns位,对于普通世界,处理器做地址转换的时候无视这个位,对于安全世界,处理器做地址转换的时候按
照描述符里的ns位来确定地址转换的物理地址空间,ns=0的时候是按照安全世界的物理
空间来做地址转换的,反之就是按安全世界的物理空间来做地址转换的。

这里可以存有疑点,什么就是恩全世界的物理地址空间和普通世界的物理地址空间?
看上去恩全世界可以出访所有资源,怎么还是普通世界出访mmu表时漠视里面的ns十一位?
这两个问题是相关的,首先要明白对资源的保护可不是通过mmu表里的ns位,而且tzasc和tzpc来做保护。

划分为安全世界的物理地址空间和普通世界的物理地址空间,
并不是说道两个地址空间的内存map不一样,而是说道同一个物理地址实际上被贴上
了安全和普通的两个“烙印”,这个“烙印”就是对cache和tlb而言的(特别就是cache),也就是说恩全世界和普通世界出访同一个物理内存地址的内容,最后在cache
里就是存有两份的。

假设两个世界共享资源某一块内存用以搞可视化,如果普通世界更新
了一些内容,这些内容暂时还在cache里,这时候恩全世界如果以安全世界的身份去出访
这块内容的话,出访的就是cache里安全世界自己的东西,这就有可能引致cache不一致。

所以恩全世界也以普通世界的身份去出访的话,那样就能够确保cache的一致。

另外,对
普通世界而言,描述符的ns十一位的确没意义,因为它就可以出访普通世界的资源。

tlb(translationlookasidebuffer)传输后备缓冲器用以加快虚拟地址到物理地址的
转换速度的缓存。

5.trustzone和中断
中断也是隔离的,安全世界和普通世界有独立的vbar寄存器,中断向量表。

唯独monitor模式下有自己的中断向量表,寄存器是mvbar,smc指令就是跳到这个向量表。

gic可以配置某个中断号属于安全世界还是普通世界的,有关gic的安全的配置只有安全
世界下才有权限配置。

通常,irq会被配置成普通世界的中断源,而fiq配成安全世界的,这是因为arm上的操作系统比如linux只用irq。

当中断来的时候,如果该中断属于当前
世界,那么中断就在当前世界处理了,如果不属于,那么会触发切换到monitor模式,monitor模式的代码需要考虑是不是切换到另外的世界来处理中断或是丢弃该中断。

cpsr
里面的f和a位是用来maskfiq和externalabort中断的,普通世界能不能修改两个bit
也是安全世界说了算,scr里面有禁止这两个bit被安全世界修改的位。

6.trustzone的
物理内存和外设保护
trustzone须要物理内存和外设于两个世界之间的隔绝,这就是恩全世界真正在乎的
东西---因为你所要维护的信息和内容就在内存里或是经过某些外设。

物理内存和外设的隔离保护通过tzasc和tzpc的设置来达到目的。

tzasc可以把物理内存分成多个区域,每个区域的访问权限可以灵活配置为安全区域或是非安全区域,甚至
可以配置成只有普通世界可以访问。

tzpc则是配置不同的外设属于哪个世界。

当然了
tzasc和tzpc的配置只能在安全世界下进行。

7.trustzone和多核
比如说四核的soc,每个核都可以硝酸锶两个交互式核,那么总共可以存有8个世界。

虽然cache一致性、中断处置等机制硬件层都尽量避免相同世界互相阻碍。

但是在系统软
件设计上,cache的一致性,多核之间的普通世界和安全世界之间的状态管理和同步都须
要精心设计。

如果采用的场景不繁杂,最出色就布局恩全世界只在一个核上运转,所有其
他核上的命令都经过这个核最终产生命令,这样珍可以精简软件设计,减少系统的可靠性
和稳定性。

8.trustzone和acp
acp(acceleratorcoherenceport)作为axislaveinterface,也带有安全属性,比如某个pcie是连到acp端口的,如果pcie是配置为属于普通世界的,那么acp产生的事务
也是non-secure的,这时候打个比方说acp的作用region是ddr的区域0-128m,那么
0-128m必须配置为属于普通世界,或者说可以把linux的dmazone配置在128m以内,并
把这个dma区域配置为属于普通世界,否则acp功能就没法用了。

总结,soc启动的时候就已经开始工作在secure世界,secure启动代码须要搞所有
的安全方面的初始化和资源配置,并load安全内核和普通世界代码(比如说linux),由于硬件单元的积极支持,理论上现有的普通世界操作系统代码不须要修正或者很少修正就
能够正常工作,唯一不值
缺的是一个通过安全世界的驱动程序。

trustzone技术中,tee系统代码开发才是大头,现有的开源项目如openvirtualization以及op-tee可以提供不少参考。

另外,tee技术还须要比较关键的一环就是secureboot,这就是整个系统的rootofsecure,从上电boot就确保必须启动的image没被盗用,从而从根本上保证系统的安全性。

那又就是另外一个话题了。

相关文档
最新文档