Cryptocell-712 安全引擎概述
一、基于 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
评论