Trust zone fingerprint]

频道:百科知识 日期: 浏览:0

Bitget下载

注册下载Bitget下载,邀请好友,即有机会赢取 3,000 USDT

APP下载   官网注册

我们拥有多年的区块链服务经验,为用户提供专业的服务信息。以下是对trustzone和trustzone指纹的介绍。选择可以随时随地解决玩币遇到的各种问题,让你不再为职称评定的繁琐业务而烦恼。

双系统手机是华为';sP9和P10

双系统手机是华为';P9和P10。真正同时运行两个操作系统的手机,也就是俗称的红绿系统,因为真实的用户需求并不强烈,所以一直没有听到什么进展。。一个棘手的想法是用其中一个系统替换Trustzone。2012年,ARM公司推出Trustzone安全解决方案、内核虚拟化、内存隔离等技术,可以使TrustZone'美国的操作系统在世界各地运行。Android运行在普通世界,如果Trustzone换成另一个操作系统,就可以实现基于虚拟化技术的双系统。当然现实中不会这么做。如果没有Trustzone,指纹等安全支付的功能将会丧失。

TrustZone

TrustZone

BilingualExample

1

Partialtrustdescribesanyregionthatisnotacompletetrustregion.

Partialtrustisusedtodescribeallareasofincompletetrust

Trustzone可以追溯到十多年前ARMv7发布的时候就有了,可惜一直没有实际使用。直到最近几年,一些真正的厂商才开始在芯片中大规模使用这种方案。目前主要有四个应用领域:

首先是无人机芯片。,DJI已经走在最前面,第二个连影子都没看见。无人机上的几个主要应用,如图像传输、图像处理、识别、飞行控制和存储等,都有安全需求。你可以用Trustzone,芯片里流动的数据来做每一步都在安全系统的控制之下,即使飞机被劫,要获取闪存和内存中的数据也要付出极大的代价。如果以后上了安卓或者其他操作系统,即使软件系统被黑了,数据和控制还是安全的。最后如果国家或行业出台政策实行禁飞区,即使无人机主人自己修改了闪存和软件,也可以强行接管。这些功能在芯片设计阶段就必须考虑,而DJI';s在这方面的眼光确实比别人长。

第二个是DRM,数字版权管理,也就是内容保护。如果国内用户想在手机上观看最新的好莱坞大片,那么播放设备必须经过认证,这可以通过trustzone来实现。中国一直在积极推动此事。估计再过一段时间就能实现了。当然,这是一把双刃剑,肯定会有一些用户不愿意购买支持DRM的设备,去看盗版。使用Trustzone本身并不能限制盗版,但却多了一个观看好莱坞大片的渠道。

第三是支付。使用Trustzone进行支付没有技术难度,对芯片性能的要求也不高。难的是平衡所有利益相关者。银行和运营商都想把支付的控制权掌握在自己手里,所以会大力推广NFC,和苹果合作。。移动支付软件厂商,如支付宝、微信等,都想通过与手机芯片、硬件厂商合作,在自己的平台上实现所有的功能。目前,大多数支付仍然基于软件和远程密钥认证。如果有人破解了手机,仍然可以读取支付层的密码。。trustzone做的就是在硬件上杜绝这种情况。

第四个是物联网。物联网安全有几种方式,安全检测可以放在服务器上,也可以放在终端芯片上。最终通常是一个MCU加上传感器和互连模块。,面积小。如果用硬件trustzone实现,加密、解密、密钥管理等功能都需要额外的内部模块,可能比MCU本身还要大,成本太高。但如果是高附加值的芯片,就没有问题。

让';从技术角度定义Trustzone可以做什么:

1。防止操作系统被攻破后关键数据泄露。密钥数据存储在特定的内存区域,该区域只能由安全的操作系统读取。

2。防止通过调试接口(如JTAG)读取寄存器、缓存、内存或闪存数据。

3。从芯片制造来说,初始密钥可以通过芯片熔丝来实现。未来启动的每一步都需要最高权限级别和密钥验证,建立信任链,防止软件被替换或恶意读取。

4。防止边带攻击,如测量内存粒子的信号猜测数据,使故障停止检查模块和更换外围设备。输入特定数据确定电磁信号特征,打开芯片直接测量内部信号线等。

是典型的ARMSoC内部结构。在这种结构中,Trustzone所做的就是保护芯片内部数据的安全,不允许非授权访问。即使这种访问来自CPU。它';乍一看有点复杂,但我们可以把它拆开来慢慢分析。从硬件的角度来说,比软件更清晰。可能认证通过了还需要回复,从头到尾讲解系统安全设计。

首先,根据Trustzone的说法,芯片分为安全世界和不安全世界。上图中间黑色的部分是总线,上面是主设备,下面是从设备(主设备中的缓存是个例外,后面会说)。。读写请求总是从主设备发送到从设备。

作为从设备,区分是否属于安全世界相对简单。如果从设备没有空间映射块,如I2C或PWM,那么我只需要在总线时访问它。添加一个额外的pin(名为PROT)来告诉它这次访问是否来自安全世界。如果从设备本身属于受保护的安全世界,不接受不安全的访问,那么干脆拒绝,返回错误的或者无意义的数据。相同的如果从属设备本身处于不安全的环境中,则可以为安全和不安全的访问返回正确的数据。还有,从设备所处的世界来说,是可以动态配置的,而动态配置本身需要在安全的世界里,这个后面会讲到。

用于块设备,包括闪存、sram和内存,它们的地址块有的需要在安全世界,有的在不安全世界。为了实现这一点,需要在它们前面插入一个验证模块(比如图中左边DDR上面的TZC400)。确定是否可以访问某个地址。当该地址被发送到该验证模块时,该模块将使用PROTpin查找该表,以查看该访问是否被允许,然后采取相应的措施。与前面的动态配置一样,表本身必须在安全环境中进行配置。

至此,从设备上分析完毕。是不是感觉特别简单?还有一些细节,在主设备也做完之后,我们会从系统的角度去关注。

对于一般的主设备来说,不考虑自身的缓存,实际上和从设备差不多。,也分为安全和非安全,可以在安全世界中动态配置。配置完成后,这些主设备会根据自己的世界驱动PROTpin和地址访问从设备,并得到相应的回报。但是,这里一般的主设备不包括中断控制器和系统MMU。、调试模块和处理器,下面具体分析这些异常模块。

首先是处理器。

在上述情况下,CCI总线连接后,处理器连接到高速缓存一致性端口ACE(如果不知道请参考上一篇文章';我不明白。它的缓存是可以被别人访问的,而且这个访问是从主设备到主设备(当然是处理器内部的从端口),不会通过总线发送到内存,也不会经过检测模块TZC400。然后是一个漏洞,通过在一个不安全的世界里操纵一个模块。比如上图橙色主设备假装读取一个受安全世界保护的内存地址。该地址最初存在于存储器中,受TZC400保护,但由于总线的监控功能,读取请求可能会发送到处理器缓存,从而绕过保护。

为了防止这种情况,处理器专门设计了所有的页表和缓存,并增加了一个标志位来表示这个缓存行是否属于安全世界。如果其他非安全世界主设备监听安全世界高速缓存线,因为安全位不同处理器将认为这是两个不同的地址,即使它们的地址是相同的,并返回高速缓存未命中。这样,数据就不会泄露。

可能有人会问,这个标志位来自页表,所以在页表中改变这个位就可以访问。事实上,没有。因为安全世界页表位于受保护的内存区域或缓存中,所以即使操作系统被破解也无法访问。

有人会说,它改变了非安全世界页表中的安全位,伪造了安全世界的地址。不是';CPU有没有可能模拟一次传输来访问安全世界,并发送给bus和TZC400?TZC400或者对等缓存看地址和PROTpin都符合要求,应该会返回机密数据吧?那';这是个好主意,但是当CPU处于一个不安全的世界时,它忽略了页表中的安全位,因此不可能发出PROT作为安全传输。所以,这点我们可以放心。

以上是其他主设备访问处理器,所以如果处理器本身处于不安全的世界。,是否可以访问其他主设备的安全缓存?当然有。所以唐';不要将其他主设备连接到ACE端口,以免被监控。一般来说,主设备不会';无法区分安全缓存和不安全缓存。这不';如果你有一个ACE-Lite界面也没关系。无论如何,缓存的数据是不能被读取的。

另外,还有一个例外,就是GPU。在最新的ARMG71图形处理器上,支持双向硬件一致性。换句话说,GPU也可以被监控和缓存。。为了简化设计,图形处理器被设定为永远处于不安全的世界。虽然CPU读取,但它不';我不在乎。它使用另一种机制来保护数据,这将在后面介绍。

熟悉处理器缓存的人可能会想到使用跨缓存线的不安全变量来访问受保护的数据。它';没用的,处理器设计者早就想到了这一点,不然它';一个非对齐访问异常(当包含独占访问时)否则,它就赢了';我不会给你数据,每个处理器的数据都不一样。

还有一个漏洞没有堵上,就是缓存维护、TLB和分支预测操作。ACE端口包含维护它们的DVM操作。安全如何保障?相同的地址中还有安全位和非安全位。不过话说回来,DVM操作无非就是让一些缓存、分支预测和TLB条目失效,并不存在安全数据被读取和TLB被篡改的情况。

这里你可能会觉得有点晕,很多漏洞需要堵上。。我们可以回顾一下,需要记住的是各种缓存操作,这些操作都有安全标志保护,避免出现漏洞。相比处理器设计者要考虑的情况,这个漏洞不值一提。

消除缓存漏洞后,还有其他隐患,比如模拟器。。调试模块可以用来访问各种从设备,也可以访问和影响处理器内部资源。从设备端保护很容易,只需要把调试模块当成通用主设备就可以了。处理器内部的寄存器、缓存等资源需要处理器从设计开始。定义所有资源的安全级别。受保护的资源将被禁止从调试模块进行未授权的访问。只有通过安全启动链,安全世界中的软件才能打开寄存器SDER,从而允许外部仿真器影响受保护的安全世界资源和处理器的运行状态。,以访问受保护的资源。

处理器中的资源是如何划分的?以ARMv8为例,如下图:

相信很多人都看过这张图。ARMv8的处理器分为四个权限级别,通常EL0运行用户态程序。,EL1内核,EL2虚拟机。EL0-1分为安全和不安全。EL3只有安全世界,EL2不区分它们。两个世界的切换必须经过EL3。我们谈到的处理器内部资源,包括寄存器、缓存、异常和MMU,都是以多种方式分组的。,团体之间可以';t看还是低级能';高级访问,从而确保安全性。没有需要软件维护的组,比如通用寄存器,防止非安全世界看到安全世界的数据。

导致安全切换的可能性有几种:中断和SMC指令。。中断可以分为以下几种情况:

在不安全的世界中,在EL1或者EL0中,当不安全的中断来临时,系统不需要切换到安全状态。作为一般中断,切换到EL1就可以了。在不安全的世界里在EL1或EL0中,当一个安全中断来临时,那么系统必须首先切换到EL3,否则它可以';不做安全世界切换。

在安全世界中,在EL1或EL0中,当安全中断来临时,不需要切换安全世界。,作为一般中断处理,直接切到EL1。

在安全世界中,在EL1或EL0中,当一个不安全的中断来临时,那么系统必须先切换到EL3,否则无法进行安全世界切换。

跳转到EL3的安全监控器程序处理上下文切换时,IRQ/FIQ中断屏蔽位没有作用,即使开启,也要等到安全监控器处理完毕才会触发。当跳下到对应的安全世界EL1时,会恢复原来的中断屏蔽,从而触发中断。此时处理中断的是安全世界中的中断程序,它在受保护的内存区,防止非安全世界中的程序篡改。

那么如何触发安全和不安全的中断呢?这是在中断控制器中定义的。在早期的定义中,只有FIQ可以作为安全中断,后来可以配置。此外,相应的安全世界配置寄存器只能在处理器的安全世界中被访问。

SMC命令类似于中断触发,只是软件可以触发并切换到安全监视器。在这里,非安全软件可以发出触发请求,并在通用寄存器中填入参数,但它可以';不能控制安全世界中的处理器做什么。,而且仍然可以';看不到受保护的内存数据。因此,防止数据泄露的任务依赖于安全的操作系统。

至此,安全启动后的基本硬件保护已经完成,但如果你以为这就是Trustzone,那就错了,精彩的在后面。

我们可以将Trustzone投入实际应用,看看是否可行。以DRM为例,如下图:

播放授权视频时,视频流来自网络或闪存,它们不';你不需要生活在安全的世界里。因为数据本身是加密的。然后,它被解密并放入受保护的内存中,等待解码。上图中,密码保护和解密由安全硬件模块Crypto完成。我们稍后将对此进行分析,并首先处理解密的视频流。此时有两种方案:

首先,自然地,所有进程都可以在安全世界中完成,因此图形处理器、视频处理器和显示模块都必须在安全世界中工作,并且可以访问安全世界中的数据,然后才能完成它们的工作。但这带来了一个问题,就是开车。。我们知道,图形处理器的驱动非常复杂,手机上只有Linux和windows下的图形驱动,配合OpenGLES/DirectX。

和安全世界的操作系统(TEE可信执行环境)是一个完全不兼容的安全系统,其中一些不';t甚至不支持SMP,所以完全不可能移植图形驱动,而且也没有';没有任何意义。在这种情况下,,只能把图形处理器从进程中挖出来,只留下相对简单生态的视频和显示模块驱动,工作在安全世界,GPU的输出送到显示模块,鱼龙混杂。这是一个可行的方案。确实有公司这么做。但从长远来看,图形处理器会一直参与这个过程。如果VR和AR普及,如果出了一个虚拟显示屏,在上面播放视频,然后放在一个虚拟的房间里,那么两者之间肯定是有交互的。此时,显示模块需要将视频图层发回GPU进行操作。如果GPU不在安全世界,就会造成泄密。

为了解决上述问题,还有第二种解决方案。,名为TZMP1(信任区媒体保护1),引入了保护世界的概念。

保护世界,在不安全的世界工作,从而兼容显卡驱动。安全呢??它需要添加四个NSAID的引脚,这类似于安全世界中的PROT信号,但划分更细,这样当GPU/视频/显示模块想要访问受保护的内存时,就提前定义了权限。而这个权限的设置也是通过上面提到的TZC400来实现的。,在安全启动链中完成。CPU的权限通常为0,是最低的。而显示控制器权限是只读的。

就这样,我们的老问题,恶意缓存监控,又回来了。。在A73和G71加CCI500/550的新总线系统中,可以支持双向硬件一致性。这意味着GPU也可以被监控。现在每个人都处在一个不安全的世界,缓存中的安全位没有';不工作。怎么解决?这需要公交车的配合。

ARM的总线CCI500/550具有保护模式。开启时不仅支持上面提到的NSAID引脚,还可以在监听时用一个缓存行失效命令代替监听传输,让目标直接失效对应的缓存行。这样仍然需要从内存中读取数据以确保安全性。而且这个过程对软件是透明的,不需要任何改动。

然而此时,辛辛苦苦的硬件一致性可以';根本加速不了,性能受影响。。好在运行OpenGLES的时候,GPU不会发出共享传输,CPU也不会闲着监视GPU的数据。下一代图形接口Vulkan将开始使用GPU双向一致性,届时会有影响。另一个缺点是如果OpenCL和DRM同时运行,OpenCL不需要双向硬件一致性,所以你必须重启系统,切换到无保护模式。

另外,在实际使用中,现有的TZC400作为内存保护模块有几个致命的缺陷。。

首先,它的配置只能在启动时完成,不能动态更改。也就是说,一旦某个内存给了安全世界,它就不能再被非安全世界的操作系统使用,哪怕是闲置的。当播放4K视频时,你需要分配数百兆的内存。不止一块。

如果一直被占用,对于一部4GB内存的手机来说,将是一个沉重的负担。怎么解决?只能更改为动态配置。此时,如果内存不足,非安全操作系统会向安全系统发出请求。让它将暂时未使用的物理内存设置为未受保护的内存区域,并设置一个时间来恢复它。但是内存分配机制会比较复杂,换内核可能会很危险。

如果忽略这一点,继续往下走,就会遇到第二个问题。。TZC400及其改进版本最多只能支持最小粒度为2MB的内存块管理。为什么不做薄一点?很简单,如果设置为4KB,与系统页面大小一致,那么4GB的物理内存需要100万个条目来管理。如果你做片上内存,大于二级缓存,不现实。

还有内存映射,就像MMU一样,CPU的MMU之后,数据访问又要经过MMU,延迟明显较大。此外,这层MMU可以';t使用二级缓存放页表,效率极低。。如果继续保持2MB的粒子,在分配内存的时候,很快就会因为块太大而用光。即使采用上一节的方法,也不能很好地解决问题。这是TZMP2V1。在这种情况下,第三种基于虚拟机的方案出现了。但是这个方案基本上颠覆了Trustzone的设计初衷。让';s看下图:

这里彻底去掉了TZC400作为内存保护,增加了系统MMU。如何保护内存??通过物理地址重新定位。先看处理器。在启动链中,从EL3跳转到EL2时,定义了保护内存,EL2即虚拟机的页表存储在保护内存中,EL1的安全页也存储在保护内存中。

像这样当处理器进入EL1时,即使通过篡改EL1的非安全页表的安全位,最终也会映射到它无法访问的安全内存,从而起到保护作用。同样,在不安全世界的控制器中加入系统MMU,虚拟化设备,也可以控制安全性。。这是TZMP2V2。有了系统MMU,页表可以做到4KB大小,也不用担心CPU经过两次MMU。这时候就不用担心恶意监控缓存了,因为所有通过二级MMU的访问都会被检查。

不过,不说别的,光是给设备增加这些系统MMU就要增加不少面积。另外,光加MMU是不够的,还要在系统中加三级甚至四级缓存,让MMU更高效,否则延迟太大。当然,如果设备不使用许多页表。MMU可以简化,比如提高最小粒度,缩小映射范围,直接使用片内存储器。这需要系统设计者来平衡。对于GPU来说,要支持双向一致性,就要考虑让监控传输通过MMU,否则功能会出问题。

如果使用TZMP2V2,虚拟化就成了真正的需求。然后,我们会发现ARM的中断和设备的虚拟化还远远不够完善。让我从硬件的角度来解释虚拟化。

说到虚拟化首先解释一下系统MMU。

如上图所示,系统MMU其实很简单,只是两层地址转换。第一层是从虚拟地址到真实地址,第二层是从真实地址到物理地址。请注意,如果没有第2层转换,真实地址相当于物理地址。。该模块可在两层或仅一层打开,视情况而定。

上图清晰的展示了一层贴图的过程。其中,设备发出的虚拟地址请求会先经过TLB,其中存储了之前访问过的页表项,如果有,直接返回。如果没有,请进入第二步,走表。

第二步,MMU将根据预置的多级基址寄存器,在第一级访问最终页表。如果MMU位于CPU中。,那么走表过程中每次访问的基址和表项都可以存储在缓存中,大大提高了效率。如果设备上只有内置的TLB入口,后面没有缓存,那么错过TLB的都是访问DDR,效率自然降低。

所以,CPU、GPU等频繁访问内存的设备,都有自己的第一层MMU和缓存。对于不支持';不要有内部MMU,也不要t频繁切换页表,比如DMA控制器,MMU第一层可以挂在下面,此时驱动简单。只需将应用程序看到的虚拟地址直接给DMA寄存器。MMU会根据基址查找对应的页表并进行翻译,将真实地址发送给总线。否则,在写入寄存器之前,驱动程序必须自己找到真实地址。

我们之前说过。在TZMP1和TZMP2v1中,存储器保护由TZC400完成。在TZMP2v2中,TZC400被取消了,此时它依赖于虚拟化的二层地址映射。

二级映射的流程和一级映射的流程基本相同。,不详细,但是性能问题会被放大。假设在第一层,通过四级基址找到最终页面,在第二层,每一级的基址搜索都会引入一个新的四级基址访问。因此,确定物理地址至少需要44^4=20次访问。。没有缓存的帮助,效率会很低。其他可行的方法是减少基地址的数量。比如linux只使用三级页表,但即便如此,也需要33^3=12次搜索。在带缓存的ARMCPU上。虚拟机的效率可以达到80%以上。第二层MMU应用于设备虚拟化时,需要精心设计。

有了系统MMU,我们就有了全芯片虚拟化的基础。那';平衡系统性能和成本。采用合适的MMU设计后,能否实现虚拟化,通过虚拟化实现安全性?它';这并不容易。还有其他问题需要考虑。

虚拟化脱胎于模拟器,即在一个平台上模拟另一个平台。。在指令集相同的情况下,不需要翻译每一条指令,指令可以直接由硬件执行,这样就解决了指令的效率问题。当然,对于一些特殊的指令和寄存器访问,还是需要hypervisor的。然后第二个问题,访问内存。

我们前面解释过,对于CPU来说,高效的虚拟化内存访问意味着指令通过两层高效的翻译,而不是每次都触发虚拟机EL2的异常,切换到Hypervisor,得到最终的物理地址。。这一点在没有缺页异常的时候已经做到了,但是在有缺页异常的时候,还是需要Hypervisor来处理。然后是设备访问内存的虚拟化,这也可以通过系统MMU高效地完成。然后是处理器和设备中断虚拟化。

最后,设备的虚拟化需要管理,设备本身需要支持虚拟设备号和虚拟中断号。敬请期待更多内容。

原理是应用核心可以在两种状态之间切换(通常重命名为worlds,以避免与其他功能域的名称混淆)。在该框架下,可以防止信息从更可信的核心域泄漏到不太安全的域。

ARMTrustZone?技术是一种系统范围的安全方法,旨在高性能计算平台上的大量应用,包括安全支付、数字版权管理(DRM)、企业服务和基于Web的服务。。TrustZone技术和Cortex?-一个处理器被紧密集成并通过了AMBA?系统扩展了AXI总线和特定的TrustZone系统IP块。

这种系统方法意味着可以保护安全存储器、加密块、键盘和屏幕等外围设备,从而确保它们免受软件攻击。。根据TrustZoneReadyProgram'的建议和使用TrustZone技术提供了一个可以支持完全可信执行环境(TEE)、安全感知应用程序和安全服务的平台。

移动设备已经发展成为一个开放的软件平台,可以从互联网上下载各种大型应用。这些应用通常由设备原始设备制造商进行验证,以确保质量,但并非所有功能都可以测试。并且攻击者不断地创建越来越多的针对这种设备的恶意代码。

与此同时,对移动设备处理重要服务的需求也在增加。从能够在特定时间付费、下载、观看最新的好莱坞大片。从能够通过手机远程支付账单和管理银行账户,这一切都表明新的商业模式已经开始出现。

这些发展趋势使得手机有可能成为恶意软件、木马、rootkit的下一个软件攻击目标。但是通过应用基于ARMTrustZone技术的先进安全技术,并集成SecurCore?防篡改元件可用于开发能够提供具有丰富功能和强大安全解决方案的开放操作环境的设备。

Trustzone最早可以追溯到十几年前,ARMv7发布的时候,但是一直没有实际应用。直到最近几年,一些真正的厂商才开始在芯片中大规模使用这种方案。目前主要有四个应用领域:

第一个是无人机芯片,DJI一直走在前列,第二个连影子都没看到。无人机上的几个主要应用,如图像传输、图像处理、识别、飞行控制和存储等,都有安全需求。你可以用Trustzone来做。数据在芯片中流动的每一步都在安全系统的控制之下。就算飞机被抢了,要拿到闪存和内存里的数据也要付出很大的代价。如果以后上了安卓或者其他操作系统,即使软件系统被黑了,数据和控制还是安全的。最后如果国家或行业出台政策实行禁飞区,即使无人机主人自己修改了闪存和软件,也可以强行接管。这些功能在芯片设计阶段就必须考虑,而DJI';s在这方面的眼光确实比别人长。

第二个是DRM,数字版权管理,也就是内容保护。如果国内用户想在手机上观看最新的好莱坞大片,那么播放设备必须经过认证,这可以通过trustzone来实现。中国一直在积极推动此事。估计再过一段时间就能实现了。当然,这是一把双刃剑,肯定会有一些用户不愿意购买支持DRM的设备,去看盗版。使用Trustzone本身并不能限制盗版,但却多了一个观看好莱坞大片的渠道。

第三是支付。使用Trustzone进行支付没有技术难度,对芯片性能的要求也不高。难的是平衡所有利益相关者。银行和运营商都想把支付的控制权掌握在自己手里,所以会大力推广NFC,和苹果合作。。移动支付软件厂商,如支付宝、微信等,都想通过与手机芯片、硬件厂商合作,在自己的平台上实现所有的功能。目前,大多数支付仍然基于软件和远程密钥认证。如果有人破解了手机,仍然可以读取支付层的密码。。trustzone做的就是在硬件上杜绝这种情况。

第四个是物联网。物联网安全有几种方式,安全检测可以放在服务器上,也可以放在终端芯片上。最终通常是一个MCU加上传感器和互连模块。,面积小。如果用硬件trustzone实现,加密、解密、密钥管理等功能都需要额外的内部模块,可能比MCU本身还要大,成本太高。但如果是高附加值的芯片,就没有问题。

让';从技术角度定义Trustzone可以做什么:

1。防止操作系统被攻破后关键数据泄露。密钥数据存储在特定的内存区域,该区域只能由安全的操作系统读取。

2。防止通过调试接口(如JTAG)读取寄存器、缓存、内存或闪存数据。

3。从芯片制造来说,初始密钥可以通过芯片熔丝来实现。未来启动的每一步都需要最高权限级别和密钥验证,建立信任链,防止软件被替换或恶意读取。

4。防止边带攻击,如测量内存粒子的信号猜测数据,使故障停止检查模块和更换外围设备。输入特定数据确定电磁信号特征,打开芯片直接测量内部信号线等。

是典型的ARMSoC内部结构。在这种结构中,Trustzone所做的就是保护芯片内部数据的安全,不允许非授权访问。即使这种访问来自CPU。它';乍一看有点复杂,但我们可以把它拆开来慢慢分析。从硬件的角度来说,比软件更清晰。可能认证通过了还需要回复,从头到尾讲解系统安全设计。

首先,根据Trustzone的说法,芯片分为安全世界和不安全世界。上图中间黑色的部分是总线,上面是主设备,下面是从设备(主设备中的缓存是个例外,后面会说)。。读写请求总是从主设备发送到从设备。

作为从设备,区分是否属于安全世界相对简单。如果从设备没有空间映射块,如I2C或PWM,那么我只需要在总线时访问它。添加一个额外的pin(名为PROT)来告诉它这次访问是否来自安全世界。如果从设备本身属于受保护的安全世界,不接受不安全的访问,那么干脆拒绝,返回错误的或者无意义的数据。相同的如果从属设备本身处于不安全的环境中,则可以为安全和不安全的访问返回正确的数据。还有,从设备所处的世界来说,是可以动态配置的,而动态配置本身需要在安全的世界里,这个后面会讲到。

用于块设备,包括闪存、sram和内存,它们的地址块有的需要在安全世界,有的在不安全世界。为了实现这一点,需要在它们前面插入一个验证模块(比如图中左边DDR上面的TZC400)。确定是否可以访问某个地址。当该地址被发送到该验证模块时,该模块将使用PROTpin查找该表,以查看该访问是否被允许,然后采取相应的措施。与前面的动态配置一样,表本身必须在安全环境中进行配置。

至此,从设备上分析完毕。是不是感觉特别简单?还有一些细节,在主设备也做完之后,我们会从系统的角度去关注。

对于一般的主设备来说,不考虑自身的缓存,实际上和从设备差不多。,也分为安全和非安全,可以在安全世界中动态配置。配置完成后,这些主设备会根据自己的世界驱动PROTpin和地址访问从设备,并得到相应的回报。但是,这里一般的主设备不包括中断控制器和系统MMU。、调试模块和处理器,下面具体分析这些异常模块。

首先是处理器。

在上述情况下,CCI总线连接后,处理器连接到高速缓存一致性端口ACE(如果不知道请参考上一篇文章';我不明白。它的缓存是可以被别人访问的,而且这个访问是从主设备到主设备(当然是处理器内部的从端口),不会通过总线发送到内存,也不会经过检测模块TZC400。然后是一个漏洞,通过在一个不安全的世界里操纵一个模块。比如上图橙色主设备假装读取一个受安全世界保护的内存地址。该地址最初存在于存储器中,受TZC400保护,但由于总线的监控功能,读取请求可能会发送到处理器缓存,从而绕过保护。

为了防止这种情况,处理器专门设计了所有的页表和缓存,并增加了一个标志位来表示这个缓存行是否属于安全世界。如果其他非安全世界主设备监听安全世界高速缓存线,因为安全位不同处理器将认为这是两个不同的地址,即使它们的地址是相同的,并返回高速缓存未命中。这样,数据就不会泄露。

可能有人会问,这个标志位来自页表,所以在页表中改变这个位就可以访问。事实上,没有。因为安全世界页表位于受保护的内存区域或缓存中,所以它可以';即使操作系统被破解也无法访问。

有人会说,它改变了非安全世界页表中的安全位,伪造了安全世界的地址。不是';CPU有没有可能模拟一次传输来访问安全世界,并发送给bus和TZC400?TZC400或者对等缓存看地址和PROTpin都符合要求,应该会返回机密数据吧?那';这是个好主意,但是当CPU处于一个不安全的世界时,它忽略了页表中的安全位,因此不可能发出PROT作为安全传输。所以,这点我们可以放心。

以上是其他主设备访问处理器,所以如果处理器本身处于不安全的世界。,是否可以访问其他主设备的安全缓存?当然有。所以唐';不要将其他主设备连接到ACE端口,以免被监控。一般来说,主设备不会';无法区分安全缓存和不安全缓存。这不';如果你有一个ACE-Lite界面也没关系。无论如何,缓存的数据是不能被读取的。

另外,还有一个例外,就是GPU。在最新的ARMG71图形处理器上,支持双向硬件一致性。换句话说,GPU也可以被监控和缓存。。为了简化设计,图形处理器被设定为永远处于不安全的世界。虽然CPU读取,但它不';我不在乎。它使用另一种机制来保护数据,这将在后面介绍。

熟悉处理器缓存的人可能会想到使用跨缓存线的不安全变量来访问受保护的数据。它';没用的,处理器设计者早就想到了这一点,不然它';一个非对齐访问异常(当包含独占访问时)否则,它就赢了';我不会给你数据,每个处理器的数据都不一样。

还有一个漏洞没有堵上,就是缓存维护、TLB和分支预测操作。ACE端口包含维护它们的DVM操作。安全如何保障?相同的地址中还有安全位和非安全位。不过话说回来,DVM操作无非就是让一些缓存、分支预测和TLB条目失效,并不存在安全数据被读取和TLB被篡改的情况。

这里你可能会觉得有点晕,很多漏洞需要堵上。。我们可以回顾一下,需要记住的是各种缓存操作,这些操作都有安全标志保护,避免出现漏洞。相比处理器设计者要考虑的情况,这个漏洞不值一提。

消除缓存漏洞后,还有其他隐患,比如模拟器。。调试模块可以用来访问各种从设备,也可以访问和影响处理器内部资源。从设备端保护很容易,只需要把调试模块当成通用主设备就可以了。处理器内部的寄存器、缓存等资源需要处理器从设计开始。定义所有资源的安全级别。受保护的资源将被禁止从调试模块进行未授权的访问。只有通过安全启动链,安全世界中的软件才能打开寄存器SDER,从而允许外部仿真器影响受保护的安全世界资源和处理器的运行状态。,以访问受保护的资源。

处理器中的资源是如何划分的?以ARMv8为例,如下图:

相信很多人都看过这张图。ARMv8的处理器分为四个权限级别,通常EL0运行用户态程序。,EL1内核,EL2虚拟机。EL0-1分为安全和不安全。EL3只有安全世界,EL2不区分它们。两个世界的切换必须经过EL3。我们谈到的处理器内部资源,包括寄存器、缓存、异常和MMU,都是以多种方式分组的。,团体之间可以';t看还是低级能';高级访问,从而确保安全性。没有需要软件维护的组,比如通用寄存器,防止非安全世界看到安全世界的数据。

导致安全切换的可能性有几种:中断和SMC指令。。中断可以分为以下几种情况:

在不安全的世界中,在EL1或者EL0中,当不安全的中断来临时,系统不需要切换到安全状态。作为一般中断,切换到EL1就可以了。在不安全的世界里在EL1或EL0中,当一个安全中断来临时,那么系统必须首先切换到EL3,否则它可以';不做安全世界切换。

在安全世界中,在EL1或EL0中,当安全中断来临时,不需要切换安全世界。,作为一般中断处理,直接切到EL1。

在安全世界中,在EL1或EL0中,当一个不安全的中断来临时,那么系统必须先切换到EL3,否则无法进行安全世界切换。

跳转到EL3的安全监控器程序处理上下文切换时,IRQ/FIQ中断屏蔽位没有作用,即使开启,也要等到安全监控器处理完毕才会触发。当跳下到对应的安全世界EL1时,会恢复原来的中断屏蔽,从而触发中断。此时处理中断的是安全世界中的中断程序,它在受保护的内存区,防止非安全世界中的程序篡改。

那么如何触发安全和不安全的中断呢?这是在中断控制器中定义的。在早期的定义中,只有FIQ可以作为安全中断,后来可以配置。此外,相应的安全世界配置寄存器只能在处理器的安全世界中被访问。

SMC命令类似于中断触发,只是软件可以触发并切换到安全监视器。在这里,非安全软件可以发出触发请求,并在通用寄存器中填入参数,但它可以';不能控制安全世界中的处理器做什么。,而且仍然可以';看不到受保护的内存数据。因此,防止数据泄露的任务依赖于安全的操作系统。

至此,安全启动后的基本硬件保护已经完成,但如果你以为这就是Trustzone,那就错了,精彩的在后面。

我们可以将Trustzone投入实际应用,看看是否可行。以DRM为例,如下图:

播放授权视频时,视频流来自网络或闪存,它们不';你不需要生活在安全的世界里。因为数据本身是加密的。然后,它被解密并放入受保护的内存中,等待解码。上图中,密码保护和解密由安全硬件模块Crypto完成。我们稍后将对此进行分析,并首先处理解密的视频流。此时有两种方案:

首先,自然地,所有进程都可以在安全世界中完成,因此图形处理器、视频处理器和显示模块都必须在安全世界中工作,并且可以访问安全世界中的数据,然后才能完成它们的工作。但这带来了一个问题,就是开车。。我们知道,图形处理器的驱动非常复杂,手机上只有Linux和windows下的图形驱动,配合OpenGLES/DirectX。

和安全世界的操作系统(TEE可信执行环境)是一个完全不兼容的安全系统,其中一些不';t甚至不支持SMP,所以完全不可能移植图形驱动,而且也没有';没有任何意义。在这种情况下,,只能把图形处理器从进程中挖出来,只留下相对简单生态的视频和显示模块驱动,工作在安全世界,GPU的输出送到显示模块,鱼龙混杂。这是一个可行的方案。确实有公司这么做。但从长远来看,图形处理器会一直参与这个过程。如果VR和AR普及,如果出了一个虚拟显示屏,在上面播放视频,然后放在一个虚拟的房间里,那么两者之间肯定是有交互的。此时,显示模块需要将视频图层发回GPU进行操作。如果GPU不在安全世界,就会造成泄密。

为了解决上述问题,还有第二种解决方案。,名为TZMP1(信任区媒体保护1),引入了保护世界的概念。

保护世界,在不安全的世界工作,从而兼容显卡驱动。安全呢??它需要添加四个NSAID的引脚,这类似于安全世界中的PROT信号,但划分更细,这样当GPU/视频/显示模块想要访问受保护的内存时,就提前定义了权限。而这个权限的设置也是通过上面提到的TZC400来实现的。,在安全启动链中完成。CPU的权限通常为0,是最低的。而显示控制器权限是只读的。

就这样,我们的老问题,恶意缓存监控,又回来了。。在A73和G71加CCI500/550的新总线系统中,可以支持双向硬件一致性。这意味着GPU也可以被监控。现在每个人都处在一个不安全的世界,缓存中的安全位没有';不工作。怎么解决?这需要公交车的配合。

ARM的总线CCI500/550具有保护模式。开启时不仅支持上面提到的NSAID引脚,还可以在监听时用一个缓存行失效命令代替监听传输,让目标直接失效对应的缓存行。这样仍然需要从内存中读取数据以确保安全性。而且这个过程对软件是透明的,不需要任何改动。

然而此时,辛辛苦苦的硬件一致性可以';根本加速不了,性能受影响。。好在运行OpenGLES的时候,GPU不会发出共享传输,CPU也不会闲着监视GPU的数据。下一代图形接口Vulkan将开始使用GPU双向一致性,届时会有影响。另一个缺点是如果OpenCL和DRM同时运行,OpenCL不需要双向硬件一致性,所以你必须重启系统,切换到无保护模式。

另外,在实际使用中,现有的TZC400作为内存保护模块有几个致命的缺陷。。

首先,它的配置只能在启动时完成,不能动态更改。也就是说,一旦某个内存给了安全世界,它就不能再被非安全世界的操作系统使用,哪怕是闲置的。当播放4K视频时,你需要分配数百兆的内存。不止一块。

如果一直被占用,对于一部4GB内存的手机来说,将是一个沉重的负担。怎么解决?只能更改为动态配置。此时,如果内存不足,非安全操作系统会向安全系统发出请求。让它将暂时未使用的物理内存设置为未受保护的内存区域,并设置一个时间来恢复它。但是内存分配机制会比较复杂,换内核可能会很危险。

如果忽略这一点,继续往下走,就会遇到第二个问题。。TZC400及其改进版本最多只能支持最小粒度为2MB的内存块管理。为什么不做薄一点?很简单,如果设置为4KB,与系统页面大小一致,那么4GB的物理内存需要100万个条目来管理。如果你做片上内存,大于二级缓存,不现实。

还有内存映射,就像MMU一样,CPU的MMU之后,数据访问又要经过MMU,延迟明显较大。此外,这层MMU可以';t使用二级缓存放页表,效率极低。。如果继续保持2MB的粒子,在分配内存的时候,很快就会因为块太大而用光。即使采用上一节的方法,也不能很好地解决问题。这是TZMP2V1。在这种情况下,第三种基于虚拟机的方案出现了。但是这个方案基本上颠覆了Trustzone的设计初衷。让';s看下图:

这里彻底去掉了TZC400作为内存保护,增加了系统MMU。如何保护内存??通过物理地址重新定位。先看处理器。在启动链中,从EL3跳转到EL2时,定义了保护内存,EL2即虚拟机的页表存储在保护内存中,EL1的安全页也存储在保护内存中。

像这样当处理器进入EL1时,即使通过篡改EL1的非安全页表的安全位,最终也会映射到它无法访问的安全内存,从而起到保护作用。同样,在不安全世界的控制器中加入系统MMU,虚拟化设备,也可以控制安全性。。这是TZMP2V2。有了系统MMU,页表可以做到4KB大小,也不用担心CPU经过两次MMU。这时候就不用担心恶意监控缓存了,因为所有通过二级MMU的访问都会被检查。

不过,不说别的,光是给设备增加这些系统MMU就要增加不少面积。另外,光加MMU是不够的,还要在系统中加三级甚至四级缓存,让MMU更高效,否则延迟太大。当然,如果设备不使用许多页表。MMU可以简化,比如提高最小粒度,缩小映射范围,直接使用片内存储器。这需要系统设计者来平衡。对于GPU来说,要支持双向一致性,就要考虑让监控传输通过MMU,否则功能会出问题。

如果使用TZMP2V2,虚拟化就成了真正的需求。然后,我们会发现ARM的中断和设备的虚拟化还远远不够完善。让我从硬件的角度来解释虚拟化。

说到虚拟化首先解释一下系统MMU。

如上图所示,系统MMU其实很简单,只是两层地址转换。第一层是从虚拟地址到真实地址,第二层是从真实地址到物理地址。请注意,如果没有第2层转换,真实地址相当于物理地址。。该模块可在两层或仅一层打开,视情况而定。

上图清晰的展示了一层贴图的过程。其中,设备发出的虚拟地址请求会先经过TLB,其中存储了之前访问过的页表项,如果有,直接返回。如果没有,请进入第二步,走表。

第二步,MMU将根据预置的多级基址寄存器,在第一级访问最终页表。如果MMU位于CPU中。,那么走表过程中每次访问的基址和表项都可以存储在缓存中,大大提高了效率。如果设备上只有内置的TLB入口,后面没有缓存,那么错过TLB的都是访问DDR,效率自然降低。

所以,CPU、GPU等频繁访问内存的设备,都有自己的第一层MMU和缓存。对于不支持';不要有内部MMU,也不要t频繁切换页表,比如DMA控制器,MMU第一层可以挂在下面,此时驱动简单。只需将应用程序看到的虚拟地址直接给DMA寄存器。MMU会根据基址查找对应的页表并进行翻译,将真实地址发送给总线。否则,在写入寄存器之前,驱动程序必须自己找到真实地址。

我们之前说过。在TZMP1和TZMP2v1中,存储器保护由TZC400完成。在TZMP2v2中,TZC400被取消了,此时它依赖于虚拟化的二层地址映射。

二级映射的流程和一级映射的流程基本相同。,不详细,但是性能问题会被放大。假设在第一层,通过四级基址找到最终页面,在第二层,每一级的基址搜索都会引入一个新的四级基址访问。因此,确定物理地址至少需要44^4=20次访问。。没有缓存的帮助,效率会很低。其他可行的方法是减少基地址的数量。比如linux只使用三级页表,但即便如此,也需要33^3=12次搜索。在带缓存的ARMCPU上。虚拟机的效率可以达到80%以上。第二层MMU应用于设备虚拟化时,需要精心设计。

有了系统MMU,我们就有了全芯片虚拟化的基础。那';平衡系统性能和成本。采用合适的MMU设计后,能否实现虚拟化,通过虚拟化实现安全性?它';这并不容易。还有其他问题需要考虑。

虚拟化脱胎于模拟器,即在一个平台上模拟另一个平台。。在指令集相同的情况下,不需要翻译每一条指令,指令可以直接由硬件执行,这样就解决了指令的效率问题。当然,对于一些特殊的指令和寄存器访问,还是需要hypervisor的。然后第二个问题,访问内存。

我们前面解释过,对于CPU来说,高效的虚拟化内存访问意味着指令通过两层高效翻译,而不是每次都触发虚拟机EL2的异常,切换到Hypervisor,得到最终的物理地址。。这一点在没有缺页异常的时候已经做到了,但是在有缺页异常的时候,还是需要Hypervisor来处理。然后是设备访问内存的虚拟化,这也可以通过系统MMU高效地完成。然后是处理器和设备中断虚拟化。

最后,设备的虚拟化需要管理,设备本身需要支持虚拟设备号和虚拟中断号。敬请期待更多内容。

trustzone的硬件架构旨在提供一个安全框架,使设备能够抵御将会遇到的许多特殊威胁。。TrustZone技术可以提供一种基础设施,允许SoC设计人员从大量可以在安全环境中实现特定功能的组件中进行选择,而无需提供固定不变的安全解决方案。该架构的主要安全目标是支持可编程环境的构建。防止资产的机密性和完整性受到特别的攻击。具有这些特征的平台可以用来构建各种各样的安全解决方案,用传统的方法将是费时费力的。

trustzone的介绍到此为止。感谢您花时间阅读本网站的内容。唐';别忘了在这个网站上查找关于trustzone指纹和trustzone的更多信息。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 931614094@qq.com 举报,一经查实,本站将立刻删除。

本文地址: http://www.lyw520.com/baikezhishi/15678.html
文章来源: 小美
Trust zone fingerprint]文档下载: PDF DOC TXT