要确保微控制器的安全性是一项挑战,部分原因是缺乏硬件强制的安全域。创建两个安全域通常需要两个微处理器,每个微处理器都有一个单独的内存保护单元 (MPU)。与 Armv8-M 架构一同推出的 Arm TrustZone ,可在单个 Cortex-M 处理器上启用两个安全处理环境(参见在 Armv8-M 微控制器上使用 FreeRTOS)。拥有单独的安全处理环境和非安全处理环境后,您将如何利用它们?
引入 Trusted Firmware-M
Trusted Firmware-M (TF-M) 为 Armv8-M 架构(如 Cortex-M55、Cortex-M33 和 Cortex-M23 处理器)和双核 Cortex-M 设备实现了安全处理环境 (SPE)。它是符合 PSA 认证指南的 PSA 参考实现,能使芯片、实时操作系统和设备通过 PSA 认证。作为一个根据可信固件开放治理社区项目中托管的 BSD-3 条款许可证分发的开源项目,它支持多个基于 Cortex-M 的微控制器,如 NXP LPC55S69、STM32L5 和 CypressPSoC 64。FreeRTOS 已通过 TF-M 实现了 PSA 功能 API 认证。
TF-M 提供一套安全服务——加密、认证和安全存储。它还通过基于 mcuboot 的 第2阶段引导加载程序提供安全引导,用于验证平台的运行时映像和更新。非安全处理环境 (NSPE) 中的应用程序和库可以通过一套标准化的 PSA 功能 API 来利用这些安全服务。在 Armv8-M 设备上, TF-M 使用 Arm TrustZone 技术来隔离 NSPE 及安全处理环境 (SPE) 代码和数据。在 Cortex-M 设备上运行的应用程序可以利用 TF-M 服务来确保与边缘网关和 IoT 云服务的安全连接。它还保护平台上的敏感数据、密钥和证书等关键安全资产。
TF-M 已完成与 FreeRTOS 的初始集成。这使得在 Cortex-M 设备上运行 FreeRTOS 的应用程序能够利用 TF-M 通过 PSA 功能 API 提供的安全服务。该集成已在 Arm Musca-B1 参考平台上进行了验证,预计将可在带有 TF-M 的多个 Cortex-M 平台上使用。
与 FreeRTOS 内核集成
如下图所示, FreeRTOS 内核在 NSPE 中运行,TF-M 则在 SPE 中运行。FreeRTOS 任务可以通过 PSA 功能 API 利用任何 TF-M 安全服务(例如加密、安全存储和认证)。非安全调度程序将 PSA 功能 API 调用从任务转发到 TF-M。在 Github 上可查看带示例的集成。NSPE 可以使用提供不同安全和隔离级别的 IPC 或函数调用机制与 TF-M 进行通信。FreeRTOS 可以根据应用需求使用上述任一机制与 TF-M 进行通信。
与 PKCS# 11 集成
FreeRTOS 的引用 IoT 集成提供了各种库和 API ,如安全套接字、TLS、OTA 代理和 PKCS#11 (公共密钥加密标准 #11) ,以提高应用程序的安全性。
PKCS#11 API 用于 FreeRTOS 来执行 TLS 客户端身份验证并将 TLS 客户端证书和私钥导入设备。PKCS#11 使用小型 Shim 与 TF-M 完成了集成,并在 Arm Musca-B1 参考平台上进行了验证。在集成中, PKCS#11 API 通过 Shim 调用适当的 PSA 功能安全存储 API 或加密 API。这确保了密钥和证书受到保护,加密操作在 TF-M 的 SPE 内安全执行,并且与非安全处理环境中的内核、库和应用程序隔离开。密钥和证书分别安全地存储在芯片存储和外部闪存上。这是由 TF-M 的内部可信存储 (ITS) 和保护存储 (PS) 服务启用的。TLS 客户端身份验证期间的签名由 TF-M 的加密服务执行。如下图所示, Arm Musca-B1参考平台上的集成示例可在此处查看,同时随附一份自述文件。PSA 功能 API Shim 在 FreeRTOS 项目中的 psa 文件夹下可用,允许支持 TF-M 的平台使用这个中介层。
表 1 展示了在FreeRTOS中使用的PKCS # 11 API以及在密钥和证书以及TLS客户端身份验证设置期间调用的PSA功能API的映射。
PKCS11 API | PSA 功能 API |
---|---|
C_CreateObject | psa_ps_set psa_import_key psa_close_key |
C_GenerateKeyPair | psa_gener_key psa_export_public_key psa_import_key |
C_DestroyObject | psa_ps_remove psa_destroy_key |
C_VerifyInit C_Verify |
psa_verify_hash |
C_SignInit C_Sign |
psa_sign_hash |
C_FindObjectsInit C_FindObjects |
psa_open_key |
C_GetAttributeValue | psa_ps_get psa_export_key |
C_DigestInit C_DigestUpdate C_DigestFinal |
psa_hash_setup, psa_hash_update, psa_hash_finish |
C_GenerateRandom | psa_generate_random |
下一步是什么
下一步是将 FreeRTOS 安全组件与 TF-M 的集成扩展到 PKCS# 11 接口之外。FreeRTOS OTA 代理允许应用程序在平台上接收、验证和部署新图像。将 OTA 代理与TF-M的安全启动集成,使 FreeRTOS 能够利用平台提供的所有安全功能对 SPE 内的新图像进行身份验证,以减少图像更新漏洞。当 Mbed TLS 项目开始使用 PSA 功能加密 API 进行加密操作时, FreeRTOS 发起的所有 TLS 操作都将通过 PSA 功能加密 API 调用 TF-M 加密服务。当前的集成和这些增强功能将在使用 TF-M 启用的各种 Cortex-M 设备上可用,从而简化了基于 FreeRTOS 的应用程序的开发人员的安全性。
访问可信固件项目,了解有关 TF-M 和 Github 的更多信息,以访问 FreeRTOS 集成 Musca-B1。 PSA 文件夹中的 PSA 功能 API Shim 可以通过 FreeRTOS 和启用 TF-M 的平台加以利用