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的更多相关文章

  1. An Exploration of ARM TrustZone Technology

    墙外通道:https://genode.org/documentation/articles/trustzone ARM TrustZone technology has been around fo ...

  2. ARM TrustZone白皮书部分阅读

    嵌入式系统安全的一些解决方法及缺陷 外部硬件安全模块:在主SoC之外包含一个专用的硬件安全模块或可信元件,e.g. 手机的SIM卡.隔离仅限于可以从非易失性存储器运行的相对静态程序 内部硬件安全模块: ...

  3. ARM的体系结构与编程系列博客——ARM处理器系列介绍

    ARM处理器系列介绍 现在到了3月,过年过得过于舒服了.系列博客也停更了近半月,我果然是个慢(lan)性(gui)子,那么趁着到校的第一天晚上,就写一篇博客来继续我的系列博客了!众所周知,ARM处理器 ...

  4. ARM Linux 内核 panic 之cache 一致性 ——Cortex-A9多核cache和TLB一致性广播

    ARM Linux 内核 panic 之cache 一致性 ——Cortex-A9多核cache和TLB一致性广播 Cortex-A9的多喝CPU可以接收和执行一致性广播操作,当其使能并处于SMP模式 ...

  5. ARM Linux 内核 panic 之cache 一致性 ——cci-400 cache一致互联

    ARM Linux 内核 panic 之cache 一致性 ——cci-400 cache一致互联 CCI-400 集合了互联和一致性功能,有 2 个 ACE slave 接口和 3 个 ACE-Li ...

  6. 如何在 arm 官网上找到合适的手册

    http://infocenter.arm.com/help/advanced/help.jsp 在这里输入合适的版号即可 这样就可以不用去 CSDN 了 100000_0000_00_EN - AR ...

  7. [转帖]Marvell第二代ARM处理器ThunderX2解析

    Marvell第二代ARM处理器ThunderX2解析 https://www.cnbeta.com/articles/tech/853137.htm 长久以来,服务器数据中心市场一直被x86 CPU ...

  8. Smart210学习记录-----中断

    1. OVERVIEW OF VECTORED INTERRUPT CONTROLLER(概述向量中断控制器) 主要有4个VIC,4个TZIC还有一个很特殊的ARM PrimeCell PL192.主 ...

  9. STM32、Cortex-A、Cortex-R、Cortex-M、SecurCore

    STM32是就是基于Cortex-M3这个核生产的CPU. arm7是arm公司推出的以V4指令集设计出来的arm核--其代表的芯片有s3c44b0 arm9是arm公司推出的以V5指令集设计出来的a ...

随机推荐

  1. URL地址中的#

    1.#的涵义 代表网页中的一个位置.井号后面的字符,就是该位置的标识符.比如, http://www.baidu.com/index.html#one 就代表网页index.html的one位置.浏览 ...

  2. java登录怎么做

    (一)1.先查找有没当前用户.2.对比用户名和密码3.返回用户信息 @Override public AppResultEntity userLogin(String username, String ...

  3. [daily][dpdk] 内核模块(网卡驱动)无法卸载

    由于程序的异常退出, 内核的引用计数没有被清除(我猜的). 所以驱动不能被卸载掉, 强制也不行. 如下: [root@localhost ~]# insmod /opt/scorpion/KingKo ...

  4. java定时任务的三种方式

    /**  * 普通thread  * 这是最常见的,创建一个thread,然后让它在while循环里一直运行着,  * 通过sleep方法来达到定时任务的效果.这样可以快速简单的实现,代码如下 */  ...

  5. Linux下安装jdk1.7

    Linux下安装jdk1.7 1.进入 /usr/local下创建一个文件夹software,用来存放安装包. [root@192 ~]# cd /usr/local/ 2.创建文件夹 [root@1 ...

  6. dedecms自定义表单提交成功后提示信息修改和跳转链接修改

    我们在用dedecms自定义表单提交成功后提示信息一般是"Dedecms 提示信息",这个要怎么改成自己想要的文字呢?还有就是提示页停留时间,目前估计就2秒,太快了,要如何设置长点 ...

  7. Ubuntu如何修改默认python版本为python3

    修改默认python版本 Ubuntu系统内置python2.7版本,默认运行python就是运行python2.7.现在很多人都是用python3作为开发语言,我们需要修改python的默认版本为p ...

  8. GUI库之Tkinter组件(二)

    一.Lable组件 Lable组件是用于在界面上输出描述的标签: 1.举个例子. # Lable组件 from tkinter import * root = Tk() root.title(&quo ...

  9. python文件的md5加密方法

    本文实例讲述了python文件的md5加密方法.分享给大家供大家参考,具体如下: 一.简单模式: from hashlib import md5 def md5_file(name): m = md5 ...

  10. wx:Textctrl

    import wx class Mywin(wx.Frame): def __init__(self, parent, title): super(Mywin, self).__init__(pare ...