当前位置: 首页 > news >正文

ESP RainMaker OTA 自动签名功能的安全启动

【如果您之前有关注乐鑫的博客和新闻,那么应该对 ESP RainMaker 及其各项功能有所了解。如果不曾关注,建议先查看相关信息,知晓本文背景。】


在物联网系统的建构中,安全性是一项核心要素。乐鑫科技对系统安全给予了极高的重视。ESP RainMaker 平台能使设备安全接入 Wi-Fi 网络,并支持通过云平台进行有效的控制和监控。此外,硬件自身的安全性亦不容忽视。因此,乐鑫的 MCU 设备集成了多种安全特性,如安全启动、flash 加密等。

其中,安全启动功能尤为重要,该功能确保了只有获得授权的固件能在 MCU 上运行。在 ESP-IDF 中使能安全启动功能十分简便,然而,安全启动密钥的管理责任归开发者所有。对此,乐鑫用户有一系列疑问,例如:

  • 如何生成安全启动密钥?
  • 安全存储密钥的地方:是开发者的设备还是服务器?
  • 如何防止密钥泄露?工程师离职对此有何影响?
  • 如何正确配对设备和密钥,以避免升级时采用错误的密钥造成潜在风险?
  • 如何管理固件相似但安全启动密钥不同的设备?

ESP RainMaker 最新引入的“安全签名”功能解答了上述疑问,扫除了用户的担忧。它具备如下功能:

  • 生成和管理密钥;
  • 在设备制造之前简化 BootLoader 和应用固件的签名过程;
  • 支持在部署固件升级任务之前进行固件自动签名的功能。

OTA 的自动签名功能

使用 OTA 的自动签名功能时,开发者只需将未签名的固件上传到 ESP RainMaker 平台,并部署固件升级任务。ESP RainMaker 后端会在固件升级过程中使用正确的密钥进行签名处理。

使用安全启动自动密钥选择进行 OTA 作业窗体顶端

如果这些设备使用不同密钥进行密钥验证,ESP RainMaker 将确保只有正确签名的固件发送到对应的设备。

开发者现在无需跟踪密钥(甚至在许多情况下,密钥对开发者不可见),从而极大地简化了设备签名密钥管理。

此外,由于密钥管理的过程在云端进行,无需开发者与设备管理人员的参与,使他们的分工变得更为明确。

密钥管理

在 ESP RainMaker 平台中,安全启动签名密钥在 ESP RainMaker 云端 中创建、维护。私钥本身对用户不可见,仅用于执行签名请求。在私有部署中,RainMaker 采用符合 FIPS(联邦信息处理标准)的硬件安全模块 (HSM) 确保安全性。访问控制授权了签名请求,确保只有获得授权的人员可以对固件镜像进行签名,增强了系统的安全性。

首次签名

在 ESP RainMaker 平台中创建签名密钥后,用户需要对启用安全启动功能的BootLoader 和固件进行签名,然后将它们烧录到生产设备上。操作方法是:首先,将未经过签名的 BootLoader 和固件镜像上传到相应的平台或工具中,上传完成后,用户对这些未签名的镜像进行首次签名操作。

ESP RainMaker 提供了详尽的烧录指南和设置说明,指导用户如何正确烧录签名后的BootLoader和固件到 SoC 上,以完成配置并确保设备能够实现安全启动。

安全签名功能适用于公共和私有 RainMaker 部署环境。在操作该功能时,请确保使用后端版本 2.1.0 或更新版本以及前端版本 2.0.1 或更新版本。

获取使用详情,请查看 ESP RainMaker docs。如有任何疑问,请发送邮件至 esp-rainmaker-support@espressif.com 与我们联系。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ssrf漏洞复现
  • 《机器学习》—— 通过下采样方法实现逻辑回归分类问题
  • 基于Java的小区物业管理系统APP的设计与实现(论文+源码)_kaic
  • Lambda 表达式的使用案例
  • openGauss之系统隐藏列
  • Vue路由—进阶篇
  • Spring Boot + MyBatis-Plus 实现 MySQL 主从复制动态数据源切换
  • 鸿蒙HarmonyOS开发:如何使用第三方库,加速应用开发
  • MAML算法详解
  • Oracle RAC 集群启动顺序
  • C语言——位运算
  • linux系统使用 docker 来部署web环境 nginx+php7.4 并配置称 docker-compose-mysql.yml 文件
  • 【第一章概述—计算机中的数制】非十进制数到十进制数的转换,八进制转十进制,16进制转十进制。十进制转8进制,十进制转16进制
  • SSRF漏洞实现
  • Flask返回Json格式字符,中文导致unicode乱码问题
  • __proto__ 和 prototype的关系
  • AngularJS指令开发(1)——参数详解
  • C# 免费离线人脸识别 2.0 Demo
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • in typeof instanceof ===这些运算符有什么作用
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Kibana配置logstash,报表一体化
  • LeetCode29.两数相除 JavaScript
  • opencv python Meanshift 和 Camshift
  • PHP 7 修改了什么呢 -- 2
  • vue:响应原理
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 解析 Webpack中import、require、按需加载的执行过程
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 前端技术周刊 2019-01-14:客户端存储
  • 如何编写一个可升级的智能合约
  • 使用parted解决大于2T的磁盘分区
  • ionic入门之数据绑定显示-1
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​flutter 代码混淆
  • ​linux启动进程的方式
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • ## 基础知识
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • #在 README.md 中生成项目目录结构
  • ${ }的特别功能
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (1)(1.11) SiK Radio v2(一)
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (力扣)循环队列的实现与详解(C语言)
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET 依赖注入和配置系统
  • .Net(C#)自定义WinForm控件之小结篇
  • .Net实现SCrypt Hash加密