安全架构
本页面提供树莓派设备如何在启动和存储访问期间进行自我保护的高层概念架构概述。内容总结如下:
- 树莓派 安全(验证)启动 过程中使用的信任链。
- 启用时,磁盘加密 如何集成到启动过程中。
- Raspberry Pi OS 中提供安全功能的 软件组件。
要实现安全启动和加密,我们建议使用我们的安全启动配置工具 (Secure Boot Provisioner),它可以配置并在多台设备上部署安全启动和磁盘加密。更多信息和操作指南请参阅 安全启动配置。
安全启动信任链
像所有计算机一样,当树莓派启动时,它会经历一个启动过程:首先运行低级固件,然后加载操作系统 (OS)。
安全启动通过建立信任链,确保在此过程中只有经过认证的软件运行。链中的每个阶段(环节)会在下一阶段运行之前对其进行加密验证。这确保了只有由可信来源签名的代码才能在启动期间运行。
我们建议使用树莓派的安全启动配置工具来配置设备的安全启动,并可选择启用磁盘加密。有关信息和说明,请参阅 安全启动配置。
加密组件
安全启动链从不可变的硬件开始,一直延伸到客户的软件。它由以下加密组件组成:
- 启动 ROM 公钥。 启动 ROM 是不可变的硬件信任根,其中包含烧录在硅片中的树莓派公钥。该密钥用于认证树莓派签名的固件。
- 客户生成的 RSA 密钥对。 在配置您的树莓派设备之前,您(客户)需要生成自己的 RSA 公钥-私钥对。私钥用于签名您的 OS 启动镜像。使用树莓派的安全启动配置工具,您可以通过在设备 OTP 中存储公钥的身份(哈希值)来定义哪个密钥被信任用于启动。
- 设备唯一磁盘密钥。 安全启动配置工具生成一个设备 唯一的密钥,用于在启动时解锁加密的根文件系统。该密钥存储在 OTP 中,并受软件机制保护。
启动流程时间线
树莓派的安全启动配置工具建立了一条从不可变硬件开始并延伸到操作系统的信任链。如果所有验证步骤都成功,内核将开始运行,然后挂载根文件系统,如果使用安全启动配置工具启用了磁盘加密,则先解密再挂载。
如果任何验证步骤失败,信任链将被破坏,EEPROM 启动加载器将继续执行您配置的下一个启动方法,例如另一个分区、镜像或恢复模式。
第一阶段:启动 ROM 信任根
第一阶段是嵌入在每个树莓派 SoC 中的 启动 ROM。由于它被永久烧录在硅片中,制造后无法修改,因此按设计是可信的;它因此构成了安全启动过程的硬件信任根。
启动 ROM 读取存储在一次性可编程 (OTP) 内存中的 RSA 2048 位公钥 的哈希值。在使用 BCM2712 SoC 的树莓派设备上,该密钥对还用于签名 EEPROM 启动加载器(参见 第二阶段)。这通过额外要求客户密钥签名来认证 EEPROM 启动加载器,从而扩展了 BCM2711 SoC 的检查。
第二阶段:EEPROM 启动加载器验证
第二阶段是 EEPROM 启动加载器,它存储在树莓派设备的 SPI flash EEPROM 中,并由树莓派的安全启动配置工具更新。该启动加载器的数字签名使用嵌入在启动 ROM 中的树莓派公钥进行验证。EEPROM 启动加载器随后根据存储在 OTP 中的哈希值检查客户的公钥,确保只有授权的客户密钥被信任用于后续阶段。
第三阶段:内核和操作系统
第三阶段是 内核和操作系统 的验证和加载。EEPROM 启动加载器从本地存储或通过网络加载启动镜像 (boot.img),并使用客户公钥验证其签名 (boot.sig)。经过验证的启动镜像通常包含内核、initramfs、设备树,以及在 BCM2711 SoC 设备上的 GPU 固件 (start.elf)。如果验证成功,启动加载器将运行内核。
然后,内核初始化硬件并挂载根文件系统。如果启用了磁盘加密,initramfs 将检索存储在 OTP 中的设备唯一密钥,并使用它在挂载之前解密根文件系统,之后正常的操作系统启动过程继续进行。更多信息请参见 磁盘加密启动流程。