以前关注过trustzone一段时间,也做了一些尝试,分享一下我知道的trustzone吧,有什么不对的地方欢迎拍砖:
目前已知的解决方案
OpenVirtualization
http://www.openvirtualization.org
SafeG
http://www.toppers.jp/en/safeg.html
Genode
http://genode.org/documentation/articles/trustzone
sysgo
http://www.sysgo.com/
ARM官方关于TrustZone的文档
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.prd29-genc-009492c/CACCICDE.html
Open vritualization for ARM TrustZone
http://openvirtualization.org/open-source-arm-trustzone.html
TEE
http://www.globalplatform.org/specificationsdevice.asp
http://www.globalplatform.org/mediaguidetee.asp
http://www.trustonic.com/
mobicore
http://mobidough.com/solution/mobicore/
TrustZone介绍
http://www.arm.com/zh/products/processors/technologies/trustzone.php
http://www.360doc.com/content/13/0902/14/7324690_311596832.shtml
http://news.mydrivers.com/1/237/237700.htm
http://blog.csdn.net/forestcell/article/category/1733559
http://www.doc88.com/p-29237291235.html
http://www.arm.com/zh/products/system-ip/controllers/trustzone-controllers.php
arm fast models
http://www.arm.com/zh/products/tools/models/fast-models/
android系统关于bootloader的分析,有关TZ部分的验证
http://security.tencent.com/index.php/blog/msg/38
TrustZone组成和原理
TrustZone有两种工作模式,一种是正常工作模式,可以执行富指令集,称为REE环境(richexecution environment)
一种是安全模式,只能执行受信任指令,称为TEE环境(Trusted executionenviroment)
这两种模式都是集成在一个内核中的,很容易让人联想起类似IntelHT超线程技术,而实际上TrustZone并不是双线程并行或者同步运行,它只有一个线程,只是根据不同的需要在两种模式中简单切换而已,情况跟单核同时运行多任务相似,上网的同时也可以看视频,就是这个样子。
TEE执行环境
Secure Boot requires the device boot loader, kernel, and systemsoftware to be cryptographically signed
by a key verified by the hardware
众所周知ARM具有七种模式,其实这是昨日黄花了,ARM在armV6中引入了的SecurityExternsions 带来Monitor模式在armV7中引入的Virtualization Externsions 带来了Hyp模式
实现trustzone的要素,硬件上支持trustzone外,软件主要有3点
1. secure boot from the device
2. platform software to manage the secure andnormal world
3. security application to provide service to theuser
关于TZ的IP理解
TZASC地址空间控制器,用于动态内存的分配。
两个salve接口:
APB接口:用于TZASC寄存器的读写,只能在安全模式下进行
AXI接口:用于配置region,区分是否是安全区域,NS不能访问S,可配置多达16个region
一个master接口:
用于接DMC
TZMA内存适配器,用于非动态内存的分配
一个slave一个master接口:接总线,接需要的存储设备
主要用于分配存储空间为安全和非安全模式,如SRAM,EEPROM等非动态存储设备
最多可以分配2MB空间,其中低部分为secure,搞部分为non-secure。
关于到底分配多大的空间为安全区域和非安全区域由R0SIZE决定,这个信号可以通过TZPC配置输出TZPCR0SIZE来动态控制。
图上TZPC就是用于动态控制分配存储空间大小用的。
TZMA不能用于动态内存的分区,而且它最多只能分配出一个安全区域。
TZPC
TZPCDECPROT{2:0}三组寄存器,每组8个,用来配置24个地址作为安全或者非安全区域,用软件的方式来控制安全标志位
TZPCR0SIZE用来为TZMA提供分区大小信息
关于MMU和cache在secure和non-secure模式下的如何区分:
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0333h/Chdfjdgi.html