跳到主要内容

安全启动配置

本页面介绍树莓派的 安全启动配置工具 (Secure Boot Provisioner) (rpi-sb-provisioner)。该工具自动化了安全(验证)启动和磁盘加密的设置过程,并支持多台树莓派设备的批量配置。作为其工作流程的一部分,安全启动配置工具自动化了原本需要手动、多步骤设置的任务,包括固件刷写、操作系统镜像写入、密钥生成以及激活硬件级保护机制。

important

该工具正在积极开发中,这意味着它目前正在不断改进和更新。如果您发现任何 Bug 或想建议新功能,请在 GitHub 上告诉我们:https://github.com/raspberrypi/rpi-sb-provisioner。

安全启动配置概述

配置 (Provisioning) 是指通过安装操作系统 (OS)、配置安全设置并确保设备准备好使用来为设备做部署准备的过程。手动为多台设备执行此操作既耗时又容易出错。

树莓派的安全启动配置工具自动化了这些配置步骤,使您无需手动操作,并且允许您同时配置多台树莓派设备。它确保每台设备都配置了受信任的操作系统镜像、已配置的安全设置和加密密钥。

核心功能

使用树莓派的安全启动配置工具,您可以为每台客户端设备准备以下内容:

  • 安全启动保护。 安全启动确保只有使用可信加密密钥签名的固件和操作系统镜像才能在每台设备的启动序列期间运行。安全启动链在运行每个组件之前对其进行验证,从启动加载器一直到操作系统。这可以防止未经授权的软件在设备上运行。安全启动配置工具编程并配置初始化设备的低级固件,构成安全(验证)启动过程的基础。更多信息请参阅本页面的 安全(验证)启动 章节。
  • 加密存储。 为保护数据,您可以配置安全启动配置工具使用全盘加密对每台设备的存储进行加密。建议这样做,因为加密可以确保即使有人绕过启动介质或移除存储,数据仍然不可访问。加密密钥是唯一的并与硬件绑定,因此数据在其他系统上仍然受保护且不可读。更多信息请参阅本页面的 磁盘加密 章节。
  • 安全的操作系统部署。 安全启动配置工具通过将自定义操作系统镜像打包到只有设备固件才能加载的安全加密容器中来安全地安装操作系统。配置工具在设置过程中自动安装此操作系统镜像,确保可信且可重复的部署过程。您创建一个基础("母版")镜像,然后该工具将其复制到所有已配置的设备上,并进行适当的安全修改。
  • 制造记录。 安全启动配置工具维护一个制造数据库,详细记录每台已配置设备的序列号、MAC 地址、配置时间戳和安全配置。这些记录支持库存跟踪、保修验证和客户支持操作。
  • 一致配置。 使用安全启动配置工具准备的每台设备都接收相同的配置,消除了人为错误和配置漂移。这确保了已配置设备之间的一致行为,并简化了持续管理和技术支持操作。

使用场景

安全启动配置工具适用于:

  • 使用树莓派设备构建产品的企业。
  • 大规模生产设备的制造商。
  • 部署安全系统的系统集成商。
  • 任何需要为多台树莓派设备准备安全功能的人。

由于该工具自动处理加密操作和安全配置,安全启动配置工具提供以下优势:

  • 安全性。 可信启动和加密数据存储。
  • 效率。 加速配置过程,无需手动加密或固件知识。
  • 可靠性。 确保一致性,减少手动设置可能出现的错误。
  • 简便性。 无需安全专业知识即可操作。无需了解加密算法或启动链实现。

核心安全概念

安全启动配置工具依赖两种互补机制来保护设备:安全(验证)启动 和使用 LUKSv2 的 磁盘加密,总结如下。有关树莓派安全启动和加密实现的更详细信息,请参阅 安全架构

安全(验证)启动

树莓派安全启动是一种安全机制,使用从不可变硬件开始的顺序验证,检查启动过程的每个阶段是否经过认证。启用安全启动后,您的树莓派设备只会启动您用私钥签名的软件。没有人可以在没有您的签名的情况下修改固件或操作系统镜像 (boot.img)。

当使用安全启动配置工具在树莓派设备上启用安全启动时,设备会在操作系统启动之前验证每个启动阶段二进制文件(如启动加载器和内核)是否使用可信私钥进行了加密签名。您的树莓派设备将对应的公钥存储在其安全存储(OTP 内存)中,并在启动前使用它来验证签名。这确保只有受信任的、已签名的二进制文件才能在启动期间运行,防止篡改或未签名的代码被加载,无论是从本地存储还是通过网络。

有关树莓派安全启动实现的更详细信息,请参阅 安全架构

磁盘加密

我们强烈建议将安全启动与加密结合使用。没有加密,如果存储介质被移除或遭到破坏,树莓派设备上的数据仍然可以被访问。反之,没有安全启动的加密无法保护存储在 OTP 中的私钥免受拥有 root 访问权限的人的侵害。启用安全启动后,启动过程的每个阶段都会经过加密验证,因此在访问私钥之前,只有经过签名的软件才能在您的树莓派设备上运行。

您可以使用安全启动配置工具为树莓派设备准备:

  • LUKSv2 (Linux Unified Key Setup) 加密,这是 Linux 上磁盘加密的标准格式。
  • 存储在树莓派设备 一次性可编程 (OTP) 内存区域的私钥。

设备 OTP 中的私钥在启动过程早期被加载,然后用于解锁 LUKS 加密的文件系统,使您的树莓派设备无需您输入密码即可解密其存储。

有关树莓派磁盘加密实现的更详细信息,请参阅 安全架构

应用层加固

在使用安全启动和磁盘加密配置设备之后,我们强烈建议您考虑使用软件组件来加固您的操作系统。更多信息请参阅 安全架构中的 Raspberry Pi OS 软件组件

安全级别

在安全启动配置工具设置过程中,您可以根据安全需求选择三种操作模式,它们在安全启动和加密的组合方式上有所不同:

安全启动配置工具的三种安全模式:

模式功能使用场景
secure-boot完全安全(安全启动 + 加密 + 设备唯一密钥)。 确保在设备启动期间只有可信软件可以运行。为连接的设备创建唯一的加密密钥,对存储进行分区和格式化,创建 LUKSv2 加密容器,将操作系统镜像放入该加密容器,并将已签名的、自定义的预启动认证固件放入设备的启动分区。用于需要最大安全性的生产设备。
fde-only无安全启动的全盘加密。 完成与 secure-boot 相同的操作,但自定义的预启动认证固件是未签名的。当您需要加密但不需要安全启动限制时使用。我们不建议选择此选项,因为第三方仍然可以读取加密密钥。
naked无加密、无安全启动。 自动对存储进行分区和格式化,并将操作系统镜像直接放置到连接设备的存储上,不进行加密或预启动固件配置。通常用于开发和测试,或用于没有安全要求的最小化设置。

前提条件

在开始配置过程之前,请确保您具备以下条件:

软件资产

  • 要配置的操作系统镜像。 这可以是 Raspberry Pi OS 或包含您自己的软件、设置和配置的自定义操作系统镜像。您可以使用树莓派官方的操作系统镜像构建器 rpi-image-gen 来创建自定义操作系统镜像。有关 rpi-image-gen 的信息,请参阅 https://github.com/raspberrypi/rpi-image-gen 上的 rpi-image-gen 文档
  • RSA 密钥对。 用于签名启动加载器镜像的 RSA 2048 位私钥-公钥对。请确保此私钥的安全。有关说明,请参阅本页面的 准备安全启动密钥对 章节。

配置(主机)服务器

您必须有一台 64 位树莓派设备作为服务器;我们推荐 树莓派 5。此设备具有以下要求:

  • 电源。 一个官方树莓派 27 W USB-C 电源适配器。
  • 操作系统。 安装 Raspberry Pi OS Trixie 或更高版本。
  • 存储。 至少 32 GB 的可用存储空间用于临时工作文件。
  • 连接器。 请参阅下方 客户端设备 中的表格。

配置服务器还必须有一份操作系统的"母版"副本,作为您配置设备的模板。您需要按照本页面 配置您的配置服务器 中的步骤将此操作系统镜像上传到您的配置服务器。

客户端树莓派设备及线缆

您必须至少有一台支持 RPIBOOT 的客户端设备连接到配置服务器。这允许您通过 USB 连接修改设备,这是启用和配置安全启动(带或不带磁盘加密)的机制。

我们强烈建议使用 Compute Module 4 或 5 作为您的客户端设备,但您可以使用安全启动配置工具准备以下任何支持 RPIBOOT 的树莓派设备。您需要的连接器取决于您要准备的设备。

支持的客户端设备(按推荐顺序排列)及安全启动配置工具所需的相关线缆和配件:

客户端设备配置所需物品
Compute Module 5 (CM5)USB-A 转 USB-C 线缆
Compute Module IO Board (CM5IO)跳线
Compute Module 4 (CM4) 和 4S (CM4S)USB-A 转 micro USB-B 线缆
Compute Module IO Board (CM4IO)跳线
树莓派 5、500 和 500+USB-A 转 USB-C 线缆

配置过程

在创建您的操作系统镜像(Raspberry Pi OS 或您自己的自定义镜像,在 前提条件 中总结)之后,使用安全启动配置工具准备树莓派设备的大致过程如下,最后一步为每台要配置的设备重复执行:

准备安全启动密钥对

安全启动需要一个 2048 位的 RSA 私钥-公钥对:

  • 私钥 (private.pem) 由配置服务器用于在配置期间将启动加载器镜像写入每台客户端设备之前对其进行签名。保持私钥安全非常重要,因为当您的客户端设备锁定到此密钥后,只有使用此密钥签名的镜像才能启动树莓派设备。
  • 公钥的哈希值在配置期间被注入到每台客户端设备中,然后在启动期间用于验证启动加载器的签名。此哈希值用于验证使用您私钥签名的镜像,并存储在 OTP 中。

当客户端设备启动时,它会计算与启动加载器镜像签名对应的公钥的哈希值,并将其与存储在 OTP 中的哈希值进行比较。如果哈希值匹配,则签名验证通过,启动继续。

您可以使用已有的密钥对或生成一个新的密钥对。以下说明将引导您使用 OpenSSL 生成一个新的 RSA 2048 位私钥-公钥对。

如果您已经有合适的密钥对,可以跳过这些说明。

  1. 生成 2048 位 RSA 私钥并将其保存在主目录中的 private.pem 文件中:

    $ cd $HOME
    $ openssl genrsa 2048 > private.pem
  2. 从您刚创建的私钥中提取公钥;此密钥的哈希值将存储在客户端设备的 OTP 中,用于验证使用私钥签名的启动加载器镜像:

    $ openssl rsa -in private.pem -pubout -out public.pem
注意

您必须保持私钥安全。如果您失去对私钥的访问权限,您的设备将无法使用可信的启动加载器镜像进行更新或恢复。如果有人获得了私钥的访问权限,您的设备将不再安全。我们建议结合使用加密存储、受限访问和硬件安全模块 (HSM)。

配置您的配置服务器

在配置客户端设备之前,您必须首先将一台主机计算机(如树莓派 5)配置为 配置服务器 设备。然后使用此配置服务器配置一台或多台支持 RPIBOOT 的 客户端设备(如 Compute Module 4 或 5)。有关符合条件的硬件信息,请参阅本页面的 前提条件

客户端设备存储的准备方式以及安全功能的应用方式取决于您在配置服务器设置期间选择的配置模式 (PROVISIONING_STYLE)。有三种操作模式可供选择:secure-bootfde-onlynaked。有关这些配置模式的信息,请参阅 安全级别

以下说明将引导您在配置服务器上安装安全启动配置工具 (rpi-sb-provisioner),导入您的 RSA 密钥对,上传您的操作系统镜像,并配置其他选项,包括启动加载器签名设置。

important

在继续之前,您必须首先为您的配置树莓派创建一个基础 操作系统镜像。您使用配置树莓派配置的所有设备都从此相同的镜像克隆而来。更多信息请参阅本页面的 前提条件

首先,在您用于准备和配置其他树莓派设备的配置服务器上运行以下命令:

  1. 将配置服务器更新到最新软件:

    $ sudo apt update && sudo apt full-upgrade -y
  2. 安装安全启动配置工具:

    $ sudo apt install -y rpi-sb-provisioner
  3. 在浏览器中打开配置界面(http://localhost:3142)。以下命令会在 rpi-sb-provisioner 的 Web 用户界面中打开本地配置页面:

    $ xdg-open http://localhost:3142

接下来,打开 Web 用户界面的 Options 选项卡,完成以下每个部分。

  1. OS Image 下,选择或上传要配置的操作系统 (OS) 文件。有关创建自己的操作系统镜像文件的信息,请参阅本页面的 前提条件
  2. Device & Firmware > Device Family 下,选择您希望配置设备准备的树莓派设备型号(例如,Compute Module 4)。
  3. Device & Firmware > Storage Type 下,选择客户端设备使用的存储类型:SD card(标准 microSD 卡)、eMMC(Compute Module 上的嵌入式闪存存储)或 NVMe(NVMe SSD 存储,需要树莓派 5 或 HAT)。
  4. 可选地,在 Device & Firmware > Device Firmware 下,选择要部署到已配置设备的启动加载器版本。此更改可能会影响已配置设备的性能或安全性。我们建议选择最新的默认版本。
  5. 可选地,在 Device & Firmware > Bootloader Configuration 下,指定自定义启动加载器配置文件的路径。这允许您定义树莓派安全启动配置工具未提供的额外 EEPROM 参数。更多信息请参阅 树莓派启动加载器配置
  6. Security Configuration > Provisioning Style 下,选择三种配置选项之一。有关这些选项的详细信息,请参阅本页面的 安全级别
  7. Security Configuration > Encryption Cypher 下,在以下选项之间进行选择。较新的树莓派设备使用硬件加速器。更多信息请参阅 安全架构 中的 磁盘加密启动流程
    • AES-XTS。 如果您的树莓派 SoC 是 BCM2711 或 BCM2712,请选择此选项。
    • Adiantum。 如果您的树莓派 SoC 是 BCM2710 或更早版本,请选择此选项。
  8. Security Configuration > Bootloader Signing Key (RSA 2048-bit) 下,创建或上传 2048 位 RSA 私钥-公钥对。这仅在您选择 secure-boot 作为配置模式时相关。
    • 如果您还没有 RSA 密钥对,请按照屏幕上的说明创建签名密钥。
    • 如果您已经按照 准备安全启动密钥对 中所述创建了 RSA 密钥对,请将文件上传到此部分。
  9. Storage & Output 下,配置配置数据和日志的存储位置。在此处输入:
    • Work Directory (Recommended)。 配置运行之间操作系统资产的缓存位置。
    • Manufacturing Database。 存储设备信息(序列号、MAC 地址和硬件详情)的 SQLite 数据库。仅使用本地存储。
    • Keypair Storage Directory (Optional)。 存储在配置期间生成的每台已配置设备的唯一加密密钥对的目录。设备密钥对是敏感信息,因此您必须确保适当的访问控制。将此部分留空以将密钥与日志一起存储在工作目录中。
  10. 如果您希望已配置的设备自动注册到 Raspberry Pi Connect for Organisations,请在配置期间启用设备注册。在 Cloud Services 下,输入您组织的管理 API 访问令牌,您可以在 Raspberry Pi Connect 组织的 Settings 选项卡中找到该令牌。更多信息请参阅 批量配置
  11. Hardware Security(可选)下,使用开关永久启用以下选项。这些设置是永久性的;只有在您确定配置无误时才启用它们。
    • Lock JTAG Access。 这会限制对已配置设备的调试访问。默认情况下关闭,因为它会阻止树莓派工程师协助硬件调试。
    • Enable EEPROM Write Protection。 这会阻止修改已配置设备的 EEPROM,从而保护安全启动配置。更多关于 EEPROM 写保护的信息,请参阅 eeprom_write_protect

配置现已完成,您可以开始配置您的第一台设备。

连接并配置您的客户端设备

使用安全启动配置工具配置配置服务器后,您可以配置您的客户端设备。

第一步是将每台客户端设备以 RPIBOOT 模式连接到您的配置服务器。以 RPIBOOT 模式将配置服务器连接到设备会自动启动配置软件 rpi-sb-provisioner,它会安装安全的操作系统镜像、编程固件并应用密钥和加密。

备注

RPIBOOT 模式是 USB 设备模式的工程标签,它使配置服务器能够通过 USB 与客户端设备通信。

连接设备的方式取决于客户端设备型号及其进入启动模式的方式:

  • Compute Module 4、4S 和 5 通过相应的 IO Board 连接到配置服务器,并使用跳线进入启动模式。有关说明,请参阅 连接到 Compute Module
  • 树莓派 5 需要在连接过程中的特定时间按住其电源按钮。有关说明,请参阅 连接到树莓派 5
注意

在配置过程中不要将其他 USB 设备连接到客户端设备。配置树莓派只能向连接的设备提供 900 mA 的电源。

安全启动配置工具使用三个独立的 systemd 服务在后台运行。所有配置操作都是自动的,但您仍然可以从 Web 用户界面的 Devices 选项卡(http://localhost:3142)监控其进度。

完成后,客户端设备上的 activitypower LED 灯会熄灭。(如果您连接了以太网,可能仍会看到以太网端口有活动。)在此状态下,您的设备可以安全地关闭电源,从配置服务器断开连接,并包装到您的产品中。

设备随即准备好部署,您可以将下一台客户端设备连接到您的配置服务器。通常,对于 1.6 GB 的操作系统镜像,每台设备的配置大约需要 3 分钟。

连接到 Compute Module 4、4S 或 5

配置服务器通过连接到相应 IO Board 的 USB 线缆连接到 Compute Module 4、4S 或 5。此外,您必须在 IO Board 的正确引脚上连接跳线,以强制连接的 Compute Module 进入 RPIBOOT 模式。

完成以下步骤后,配置过程将自动启动,如本页面 配置流水线 中所述。

步骤 1. 将 Compute Module 连接到其对应的 IO Board

将 Compute Module 上的安装孔和双 100 针连接器与 IO Board 上的对齐,轻轻但牢固地按压以将它们相互连接。

虽然 Compute Module 4 (CM4) 和 Compute Module 5 (CM5) 的外形尺寸与 CM4IO 和 CM5IO 板在物理上兼容,但我们强烈建议只使用为 Compute Module 型号设计的 IO Board。这是因为连接器之间没有针脚到针脚的对应关系,CM4 和 CM5 之间有几个信号分配不同。使用不匹配的 IO Board 会导致功能缺失。

步骤 2. 启用 RPIBOOT 模式

在 Compute Module IO (CMIO) Board 的顶部,使用跳线连接两个 disable eMMC Boot 引脚(位于 12 针排针的最左侧)。这将 Compute Module 置于 RPIBOOT 模式,允许您从配置服务器将自定义操作系统镜像配置到 eMMC 中。

跳线位置,用于将 Compute Module IO Board 置于 RPIBOOT 模式

步骤 3. 将配置服务器连接到 IO Board

使用 USB 线缆将您的配置服务器连接到 IO Board。当电源供应到 Compute Module 时,RPIBOOT 模式被激活。

  • 对于 CM4,电源直接供应到其对应的 IO Board (CM4IO)。
  • 对于 CM5,电源由配置服务器的 USB 线缆提供。

作为示例,下图显示了一个正确连接的配置设置,其中树莓派 5(左侧)作为配置服务器连接到通过 CM4IO 连接的 CM4(右侧)。图中的红色线将配置服务器连接到 CMIO Board;图中的灰色线提供电源。

树莓派 5 配置服务器(左)连接到 Compute Module 4(右)

步骤 4. 监控配置过程

在配置期间,监控您的 Compute Module IO Board 的 LED 灯。当两个 LED 灯都熄灭时,配置完成。您可以将客户端设备从配置服务器断开连接,然后按预期使用客户端设备。

连接到树莓派 5

树莓派 5 有一个内置的电源按钮。将配置服务器连接到树莓派 5 需要在连接过程中的特定时间按住此电源按钮。

important

在将线缆插入客户端树莓派 5 之前,始终按住电源按钮。在拔下客户端树莓派 5 上的线缆之前,始终等待系统识别。Web 界面(http://localhost:3142)中的 Services 选项卡显示何时断开和重新连接。

我们强烈建议您使用高质量的 USB-A 转 USB-C 线缆。劣质线缆可能导致连接问题并干扰配置过程。

初始连接激活 RPIBOOT 模式,允许客户端树莓派 5 由配置服务器进行配置。

  1. 将连接线缆的 USB-A 端插入您的配置服务器(通常是另一台按照 配置您的配置服务器 中说明配置的树莓派 5)。
  2. 按住客户端树莓派 5(不是您的配置服务器)上的电源按钮;按住按钮的同时,将线缆的 USB-C 端插入客户端树莓派 5。
  3. 继续按住电源按钮,直到配置服务器识别到客户端设备,如 Web 界面或系统日志所示。然后松开按钮。设备随即开始配置过程的引导阶段,总结在 配置流水线 中。
  4. 在配置期间,监控您的客户端树莓派 5 的 LED 灯。当客户端树莓派上的两个 LED 灯都熄灭时,配置完成。您可以将客户端设备从配置服务器断开连接,然后按预期使用客户端设备。

配置流水线

当以 RPIBOOT 模式连接到客户端设备时,配置服务器会自动运行 rpi-sb-provisioner,执行以下操作:

  1. 检测。 配置服务器通过 USB 检测到连接的设备(处于 RPIBOOT 模式)。这使用后台 systemd 服务启动配置工作流程。
  2. 引导。 如果配置模式设置为 secure-boot,特殊的树莓派固件会将公钥签名哈希值(来自 CUSTOMER_KEY_FILE_PEM)写入 OTP 内存。
  3. 更新。 配置服务器将包含启动加载器的 SPI flash EEPROM 更新为指定的固件。
  4. 分类。 一个临时的 Linux 发行版在设备上运行以确定后续步骤。配置服务器上的 rpi-sb-provisioner 根据您配置的 PROVISIONING_STYLE 决定如何继续:secure-bootfde-only(全盘加密)或 naked(未加密、未签名的操作系统)。有关配置模式的更多信息,请参阅 安全级别
  5. 配置。 系统根据您选择的配置模式安装固件、密钥、操作系统镜像等。

配置完成后,已连接设备的 activity 和 power LED 灯会熄灭,表示安全关机和完成。然后您可以连接下一台要配置的设备。

配置完成后,客户端设备:

  • 在启动时使用存储在 OTP 中的公钥验证已签名的启动加载器。
  • 仅启动由您可信私钥签名的镜像。
  • 如果您还配置了全盘加密(推荐),在加载操作系统之前使用设备唯一密钥在启动时解密其存储。