一、基于trustzone的SoC里有什么?
Trustzone是ARM架构的安全扩展,是一个系统级别的安全方案,包括硬件方案和软件方案。在一个支持Trustzone的SoC上,硬件IP包括:
CPU:
目前主要的Cortex-A系列CPU都实现TrustZone安全扩展。
Trustzone system IP:
SoC内部支持TrustZone扩展的MMU、Cache、Bus、GIC、TZASC、TZPC等。
Trustzone Security IP:
常见的Security IP包括CryptoIsland、CryptoCell等。
二、CryptoCell产生背景
累计多次Secure World和Non Secure World之间进行save/switch context,会导致系统性能问题。解决方案是提供额外的硬件,它可以接收Non Secure World指令并在硬件内部执行密码操作,整个过程不需要将安全数据暴露给CPU,且可以将操作结果存放在指定的非安全内存,CPU只需要休眠或轮训结果。
CryptoCell包括CryptoCell 700和CryptoCell 300两个系列:
CryptoCell 700主要针对高性能的安全产品,一般与Cortex-A CPU配合使用。
CryptoCell 300主要针对低功耗的产品,一般与Cortex-M CPU配合使用。
三、high level diagram
从CryptoCell high level diagram可以看出,CryptoCell硬件服务通过firmware,分别向Linux OS和TEE OS提供接口。在TEE侧提供的CRYS Cryptographic Library,在REE侧提供Crypto API Driver来操作硬件IP。
四、CryptoCell内部逻辑
CryptoCell内部功能单元可分为“Shard Hardware”和“TEE Hardware”和。与普通外设一样,CryptoCell提供input and output pins,与主机连接。
五、Shard Hardware
Shard Hardware包括对称加密引擎和硬件密钥槽。
1.对称加密引擎
Symmetric Cryptography Engine。
对称加密引擎支持AES加密、AES消息认证、DES、MD5和HMAC等。
对称加密引擎支持DMA数据传输。
对称加密引擎为用户或平台密钥提供硬件隔离,且可以直接加载这些密钥,确保密钥不会出现在DDR或SRAM中,增强用户密钥的安全性。
2.硬件密钥槽
Hardware key Slots,硬件密钥槽是专用的硬件寄存器,它允许TEE安全的创建对称密钥以提供给REE侧。该模块提供一个TEE Sevice来设置密钥槽,REE侧可以在调用AES服务时通过索引来指定密钥槽。
CryptoCell包含4个硬件密钥槽,支持大小为128、192、256的单个密钥,也支持两个128位或2个256位的双密钥。
六、TEE Hardware
TEE Hardware包括非对称密码加速器、NVM管理器、OTP、真随机数发生器和状态接口。
1.非对称密码加速器
非对称密码加速器通过大整数算数运算单元,支持实现公钥所需的数学和逻辑操作、基于离散对数、整数分解或椭圆曲线离散对数等。
2.NVM管理器
NVM管理器通过点对点AIB接口(遵循Intel异步接口规范)来访问OTP存储器。
3.OTP
依赖于SoC的实现,OTP模块可以为用户提供eFuse等安全特性。
4.真随机数发生器
真随机数发生器直接从硬件电路采集噪声,为用户提供真随机数。
5.状态接口
状态接口包括产品生命周期LCS(Life Cycle State)、DCU寄存器实现Security Debug功能、安全定时器功能等。
七、运行库CRYS
CryptoCell硬件Security IP的运行库称作CRYS(Cryptographic Software Library)。系统运行过程中,
1.获取生命周期LCS
2.生命周期定义
3.Secureboot初始化
4.Secureboot证书校验
5.Secureboot错误码
6.SecureDebug设置
7.密钥派生
8.HASH计算
八、CryptoCell在安全启动的应用
CryptoCell应用于安全启动,这是CryptoCell最重要的应用场景。
1.安全启动
在ARMv8架构下,系统开机启动,会经历软件定义的BL1/BL2/BL31/BL32/BL33等多个阶段,如何保证每个启动阶段镜像的安全性,是构建平台安全和系统安全的基础业务。
2.安全启动业务场景
整个安全启动业务包括镜像签名、镜像加密、镜像验签和镜像解密。
3.安全启动涵盖模块
整个安全启动业务涵盖多个模块,包括BootROM、OTP、Crypto Engine
BootROM
所有支持SecureBoot的CPU都会有BootROM程序,CPU上电后执行的第一条指令就在BootROM的入口。BootROM拥有最高的执行权限EL3,它将初始化SecureBoot安全机制,加载SecureBoot Key等密钥、从EMMC/UFS加载并校验BL1,最后跳转到BL1。
OTP
所有支持SecureBoot的CPU会有N个一次性编程存储模块,称之为OTP设备。eFuse是OTP的一种表现形式,且只有在Secure World才可以访问,主要作用包括:
1.在OTP内部烧写标识设备类型、运行模式等的属性。
2.在OTP内部烧写镜像加解密的对称密钥SecureBoot Key。
3.在OTP内部烧写镜像签名公钥SecureBoot Signing Key。
Crypto Engine
支持SecureBoot的SoC会有专门负责镜像加解密和验签的模块,称之为Security Engine。Security Engine只有在Secure World才可以访问。Secure Engine的选择:
低端SoC支持纯软件算法(如MbedTLS)的SecureBoot。
高端SoC支持硬件Security IP(如CryptoIsland、CryptoCell等)的SecureBoot。
4.安全启动证书链
5.安全启动实现方式
6.实现方式的对比
九、CryptoCell其他应用场景
在ARMv8架构下,CryptoCell应用场景包括但不限于设备生命周期管理、密钥管理、数据的备份恢复和安全调试。
1.设备生命周期
芯片从回片到出厂,一般经过CM(Chip Manufacturing)、DM(Device Manufacturing)和Secure等三个阶段。其中,CM表示芯片回片阶段,未经过任何处理,通常用于单板的前期调试工作。DM阶段会写入部分密钥。Secure是最终出厂阶段,终端产生会烧写完整密钥或数据hash,以及提供完整的镜像刷机包。一般来说,SOC厂商在fastboot(或UEFI)提供设备生命周期的相关命令。
2.密钥管理
CryptoCell提供硬件密钥槽,可以管理或保存用户的密钥,且密钥使用硬件隔离技术,增强了用户密钥的安全性。
3.安全调试
CryptoCell提供DCU寄存器,以控制其他master的调试功能。
4.数据的备份和恢复
CryptoCell提供数据备份和恢复服务,允许在主机睡眠和唤醒过程中,将用户数据加密保存在安全内存中。CryptoCell使用KBKDF密钥派生AES128对数据进行加解密,当主机睡眠时,用户数据加密存在在安全内存中。当主机唤醒时,将用户数据从安全内存中解密。
十、个人小结
综上所述,CryptoCell在基于Trustzone架构的ARM64系统中应用广泛,SOC厂商基于硬件实现差异化特性,特别是在安全启动领域,成为各个SOC厂商的宠儿。
参考文献:
1.https://developer.arm.com/documentation/102897/0119?lang=en
2.https://developer.arm.com/documentation/pjdoc1779577084-15920/1/?lang=en
- 长按关注内核工匠微信
-
-
- Linux 内核黑科技 | 技术文章 | 精选教程