升级失败有两种形态:一种是包本身不可信,另一种是包可信但没写完。前者靠密码学解决,后者靠事务与双槽解决。EdgeForge 把这两件事做成同一条发布链上的不同检查点,任何一环不过就拒绝加载。
签名验的是什么?
EFP v2 同时包含 EFB(EdgeVM 字节码包)与 EFIR(中间表示)两个产物,Ed25519 签名覆盖包头、ESEC 安全索引、审计 JSON 以及这两个产物。ESEC 是给 MCU 用的二进制安全索引,不依赖 JSON 解析,携带目标平台、应用版本、发布序列、密钥 ID、最低 Host API、能力清单与两个 SHA-256 摘要。
| 检查层 | 检查内容 | 验证方式 |
|---|---|---|
| 包结构 | 包长、段边界、ESEC 记录与签名长度 | C99 安装层逐项核对 |
| 兼容策略 | 目标平台、Host API、序列下限、能力策略 | 与平台配置比对 |
| 完整性 | EFB 与 EFIR 的 SHA-256 | 与 ESEC 摘要比对 |
| 来源 | Ed25519 验签 | 强制平台回调完成 |
加密库的选择按平台分开:ESP32-S3 Host 接入固定版本的 Espressif 官方 libsodium 组件,RP2040 与 STM32F4 Host 接入 Monocypher 4.0.2。三个 MCU 平台的实板验签与密钥生命周期验证目前仍待完成,这是量产前必须补上的一环。
断电之后,设备怎么知道该用哪个版本?
靠 96 字节的事务状态记录。功能包采用 A/B 双槽与 active / candidate / last-known-good 三态:候选包先在暂存区落地,试运行通过后才原子激活;激活后有 5 秒的健康窗口等待 ACK 确认;未确认或连续启动超过限制就自动回退到已知可用版本。
完整的安装流程是:能力查询 → 用户批准 → 分片传输与重传 → 完整摘要与签名校验 → 资源与依赖校验 → 暂存 → 试运行 → 原子激活 → ACK 健康确认。包状态与用户配置分别版本化,升级过程中断电,重启后按事务记录恢复。
规则是:首次安装候选被拒绝且没有旧稳定版本时,公共层会清空运行态;已有稳定版本时立即回载旧槽;连续启动超过限制时由包管理器自动回退。回退受最低安全版本限制,不能恢复已撤销的漏洞版本;没有可用旧版时进入受限模式,保留基础采集与恢复通道。
端侧编译完成后还要再核对一次吗?
要,而且是逐字节核对。通用 MCU 自编译 Host 的启动链固定为:读取活动 A/B 槽中的 EFP → 校验目标、Host API、能力、摘要与签名 → 验证 EFB/EIDX → 解析 EFIR → 在设备内把 EFIR 编译到 RAM → 逐字节核对生成代码与管线描述是否与签名 EFB 一致 → 直接执行 RAM 中的端侧编译结果。任何不一致都拒绝加载,EFB 保留为签名参考与信号、事件、UI 描述的来源。
权限不是签名给的
签名只证明来源与完整性,不代表插件自动获得清单里请求的全部权限。实际权限是五者的交集:包声明、发布者权限、用户授权、设备能力与平台策略。这条设计直接影响车载场景——一个页面包不能携带新增的车辆请求权限,普通插件也无法拿到原始射频、任意 BLE 写入或 CAN 发送能力。
这与我们在 SR-ECU 赛车 ECU 标定工具 上坚持的「写入前全量逻辑校验 + 原始固件一键回滚」是同一条思路:能力可以给,但必须可审计、可回滚。对 Nissan GT-R (R35) 这类四驱高性能车尤其重要——四驱会掩盖走线问题,任何错误的写入都会让后续数据失去参考价值。采集端的 SR-RaceBox 车载数据采集器 同样依赖掉电保护,异常断电不丢已记录段。
FAQ
签名成功就等于可以发布了吗?
不等于。AI 生成、开发者编译与维护方签名是三个不同角色,编译成功不代表已获发布许可,发布链还包含仿真回放、资源分析与发布审核。
断电时正好写到一半会变砖吗?
不会。96 字节事务状态记录配合 A/B 双槽,重启后按事务恢复;已有稳定版本会立即回载旧槽,无旧版则进入受限模式并保留恢复通道。
回退能退回到任意旧版本吗?
不能。回退受最低安全版本限制,不能恢复已撤销的漏洞版本。
验签用的库在三个平台上一样吗?
不一样。ESP32-S3 用 Espressif 官方 libsodium 组件,RP2040 与 STM32F4 用 Monocypher 4.0.2,均通过平台回调接入。
参考资料
- 项目 05 ——
D:/Backup/Documents/开发板侧端模型/EdgeForge自编译软件框架方案.md(V1.4,第 10 节安装、签名和回退) - 项目 05 ——
OBD_AI插件化平台方案书.md(V1.0,治理与分发层)
更新记录
首次发布 2026-10-11 最近核对:2026-10-11
发表回复