Skip to content

安全 ​

本指南概述了乐鑫解决方案中可用的整体安全功能。从 安全 角度考虑,强烈建议在使用乐鑫平台和 ESP-IDF 软件栈设计产品时参考本指南。

目标 ​

高级安全目标包括:

  1. 防止执行不受信任的代码

  2. 保护存储在外部 flash 中代码的可信度和完整性

  3. 保护设备身份

  4. 安全存储机密数据

  5. 设备身份验证与加密通信

平台安全 ​

安全启动 ​

安全启动功能可以确保设备仅执行通过身份认证的软件。安全启动时,会验证 应用程序的启动流程 中所涉及的所有 可变 软件实体,形成信任链。设备启动以及 OTA 更新过程中都会进行签名认证。

关于安全启动功能的更多详情,请参阅 Secure Boot V2。

关于 ESP32 在发布 ECO3 前的安全启动功能,请参阅 Secure Boot。

重要

强烈建议在所有生产设备上启用安全启动功能。

安全启动最佳实践 ​

  • 在具备高质量熵源的系统上生成签名密钥。

  • 签名密钥始终保密;签名密钥泄露会危及安全启动系统。

  • 禁止第三方使用 espsecure.py 观察密钥生成或签名过程的相关细节,这两个过程都容易受到时序攻击或其他侧信道攻击的影响。

  • 确保正确烧录所有安全性 eFuse,包括禁用调试接口以及非必需的启动介质(例如 UART 下载模式)等。

flash 加密 ​

flash 加密功能可以加密外部 flash 中的内容,从而保护存储在 flash 中软件或数据的 机密性 。

关于该功能的更多详情,请参阅 flash 加密。

flash 加密最佳实践 ​

  • 建议在生产环境中使用 flash 加密的发布模式。

  • 建议为每个设备生成唯一的 flash 加密密钥。

  • 启用 安全启动 作为额外保护层,防止 flash 在启动前遭受恶意攻击。

调试接口 ​

JTAG ​

UART 下载模式 ​

对于 ESP32 ECO3,如果在发布配置中启用了任一安全功能,UART 下载模式将保持禁用。也可以在运行时调用 esp_efuse_disable_rom_download_mode() 禁用该模式。

重要

如果禁用了 UART 下载模式,则无法在设备上使用 esptool.py。

网络安全 ​

Wi-Fi ​

除传统安全协议 WEP/WPA-TKIP/WPA2-CCMP 外,ESP-IDF 的 Wi-Fi 驱动程序还支持其他先进的安全协议。详情请参阅 Wi-Fi 安全性。

TLS(传输层安全性协议) ​

建议在 ESP 设备的所有外部通信中使用 TLS,如云通信、OTA 更新等。mbedTLS 是 ESP-IDF 官方支持的 TLS 协议栈。

TLS 默认集成在 ESP HTTP 客户端、 HTTPS 服务器 和其他几个 ESP-IDF 预置的组件中。

备注

推荐使用 ESP-IDF 协议组件已确认安全的默认配置。请勿禁用 HTTPS 和类似的安全相关配置。

ESP-TLS 抽象层 ​

ESP-IDF 为最常用的 TLS 功能提供了一个抽象层,因此,建议应用程序使用由 ESP-TLS 提供的 API。

TLS 服务器验证 部分着重描述了在设备端建立服务器身份的多种方式。

ESP 证书捆绑包 ​

调用 ESP x509 证书包 API 即可包含一组自定义 x509 根证书,用于验证 TLS 服务器。对于绝大部分的标准 TLS 服务器,都可以使用证书捆绑包轻松验证服务器身份。

重要

强烈建议基于 X.509 证书验证服务器身份,谨防与 伪造 服务器建立通信。

产品安全 ​

安全配网 ​

安全配网是指将 ESP 设备安全接入 Wi-Fi 网络的过程。该机制还支持在初始配网阶段从配网实体(如智能手机等)获取额外的自定义配置数据。

ESP-IDF 提供了多种安全方案,可以在 ESP 设备和配网实体之间建立安全会话,具体方案请参阅 安全方案。

关于该功能的更多详情和代码示例,请参阅 Wi-Fi 配网。

备注

乐鑫提供了 Android 和 iOS 手机应用程序及其源代码,以便进一步根据产品需求定制安全配网方案。

安全 OTA 更新 ​

  • OTA 更新必须通过安全传输进行,如 HTTPS。

  • ESP-IDF 为此提供了一个简化的抽象层,即 ESP HTTPS OTA 升级。

  • 如果启用了 安全启动,则服务器应托管已签名的应用程序镜像。

  • 如果启用了 flash 加密,则服务器端不需要额外操作,在 flash 写入时,设备将自动加密。

  • OTA 更新的 回滚过程 可以在验证完应用程序的功能后,再将应用程序切换为 active 状态。

防回滚保护 ​

防回滚保护功能确保设备仅执行特定版本的应用程序,即应满足设备 eFuse 存储的安全版本条件。因此,即使已由合法密钥信任和签名,应用程序可能包含已撤销的安全功能或凭据,因此设备必须拒绝执行此类应用程序。

ESP-IDF 仅支持在应用程序使用该功能,并通过二级引导加载程序管理。安全版本存储在设备 eFuse 中,并在启动时和 OTA 更新期间与应用程序镜像头进行比较。

关于启用此功能的更多详情,请参阅 防回滚。

加密固件分发 ​

OTA 更新期间,使用加密的固件分发,可以确保在从服务器 传输 到设备的过程中,应用程序保持加密。OTA 更新期间,这可以作为在 TLS 通信之上的额外保护层,保护应用程序身份。

关于加密固件分发的工作示例,请参阅 使用预加密固件进行 OTA 升级。

安全存储 ​

安全存储指在设备上以安全方式存储应用程序的特定数据,即将数据存储在外部 flash 中。外部 flash 通常是可读写的 flash 分区,用于存储设备特定的配置数据,如 Wi-Fi 凭据。

ESP-IDF 提供了 NVS(非易失性存储) 管理组件,允许加密数据分区。该功能与上文提到的 flash 加密 平台功能相关。

关于该功能的工作原理和启用说明,请参阅 NVS 加密。

重要

ESP-IDF 组件会默认将 Wi-Fi 证书等设备特定数据写入 NVS 默认分区,建议使用 NVS 加密 功能来保护这些数据。

安全设备控制 ​

ESP-IDF 提供了 ESP 本地控制组件,可以通过 Wi-Fi + HTTP 或 BLE 安全地控制 ESP 设备。

关于该功能的更多详情,请参阅 ESP 本地控制。

安全策略 ​

ESP-IDF GitHub 代码库内含 安全政策介绍。

公告 ​

  • 乐鑫会发布重要 安全公告 ,包括硬件和软件相关公告。

  • ESP-IDF 软件组件的相关安全公告会发布在 GitHub 仓库 。

软件更新 ​

ESP-IDF 会及时处理针对组件和第三方库的相关报告,并修复关键安全问题。修复内容会逐步同步到 ESP-IDF 的所有适用版本分支中。

ESP-IDF 的发布说明将涵盖各 ESP-IDF 组件和第三方库的相应安全问题和 CVE 编号。

重要

为获取所有关键安全修复,建议定期更新到 ESP-IDF 的最新 Bugfix 版本。