manifest 中 `sha256` 与 `signValue` 的作用

1、整套链路:PC 打包工具 (ec_private.pem 私钥) → bin 固件 + manifest → gw (RK3562J,内置 ec_public.pem 公钥) 验签后才允许升级 PCS 固件。

复制代码
{
  "fileName":"xxxxx_V_1_0_2‑xxxxx.bin",
  "fileSize": 524288,
  "sha256":"64位十六进制字符串",
  "signValue":"128位十六进制字符串(R||S)",
  "version":"V_1_0_2"
}

2、sha256

用途:固件文件的哈希摘要,用来校验【固件完整性】

  • 打包工具:读取完整输出 bin 固件全部字节,做 SHA‑256 运算,得到 32 字节哈希,转成 64 位小写 hex 字符串存入sha256。
  • gw 设备端流程:
    1. gw把网页上传过来的 bin 完整接收保存到本地;
    2. gw 对收到的 bin 文件重新计算一遍 SHA‑256;
    3. 和 manifest 里面sha256做字节比对。

✅ 相等:文件完整,传输过程没有丢字节、没有被篡改; ❌ 不相等:文件损坏、传输出错,直接拒绝升级。

重点:sha256 只能证明文件有没有损坏,不能证明是不是官方发布固件 。攻击者可以随便修改 bin,重新计算 sha256,伪造一份 manifest,此时 sha256 是匹配的,但固件是恶意固件。 👉 所以只靠 sha256 不足以保证安全,必须搭配 signValue 数字签名。

2、signValue

用途:ECDSA‑secp256r1 (P‑256) 数字签名,用来校验【固件的真实性(身份)】

  • 打包工具逻辑:
    1. 拿 bin 固件算出来的SHA256 哈希摘要 ,用ec_private.pem私钥做 ECDSA 签名;
    2. 输出 64 字节原始签名:前 32 字节 R,后 32 字节 S,拼接 R||S;
    3. 转为 128 位小写 hex 字符串存入signValue。

ECDSA 特性:相同私钥 + 相同固件,每次签名都会生成不同 signValue(内部随机 nonce),但全部合法可验签通过。

  • gw设备端验签逻辑(gw 只持有ec_public.pem公钥,永远没有私钥):
  1. PTU 读取本地 bin,计算得到本地 sha256 摘要;
  2. 解析 manifest 的signValue,还原出 64 字节二进制 (R||S);
  3. 使用设备内置烧录的ec_public.pem 公钥,执行 mbedtls ECDSA 验签:输入【固件 sha256 摘要 + R、S 签名】;
  4. ✅验签通过:证明这个固件是持有合法私钥的官方打包工具签名发布,允许执行升级;
  5. ❌验签失败:判定为非法 / 篡改固件,直接拒绝升级,不写入 PCS。

两者分工对比

字段 保护目标 依赖 攻击者能否伪造
sha256 完整性:确认文件没有损坏 / 字节被修改 仅固件本身 可以伪造:篡改 bin,重新计算 sha256 写入 manifest
signValue 真实性:确认固件来自官方打包者 ec_private.pem 私钥;PTU 内置 ec_public.pem 公钥 不能伪造,没有私钥无法生成合法 signValue

gw 完整校验流程(两个校验缺一不可)

  1. 网页上传 bin + manifest 到 gw本地存储;
  2. gw读取 bin,计算本地 sha256;
  3. 第一步校验:本地 sha256 和 manifest.sha256 是否完全一致,不一致直接拒绝;
  4. 第二步校验:使用内置公钥对(sha256摘要, signValue(R,S))执行 ECDSA 验签;
  5. 两个全部通过,才允许执行 PCS 升级;任意一项失败拒绝升级,写日志上报错误给前端网页。

重要:

  • 只有 sha256 匹配,但 signValue 验签失败 → 固件被篡改,拒绝升级;
  • signValue 验签通过,但 sha256 不匹配 → 传输损坏,拒绝升级。

常见误区

  1. 误区:signValue 是对 manifest 整个 JSON 签名 ❌ 不是!我们的实现:signValue 签名对象是固件 bin 的 sha256 哈希,不是 manifest 文本。
  2. 误区:signValue 固定不变 ❌ ECDSA‑P256 每次签名产生随机 nonce,同一个固件、同一套私钥,多次打包得到 signValue 都不一样,全部合法。
  3. 误区:只要 sha256 一样固件就是官方固件 ❌ sha256 只保证文件字节,不能保证来源;攻击者篡改固件后可以重新生成 sha256,必须依赖 signValue 数字签名做身份认证。

简单通俗比喻

  • sha256:相当于文件的指纹,只看文件长什么样;别人可以造一个别的东西,造一个新指纹。
  • signValue:相当于官方盖章,只有手里有私钥的人才能盖章;gw手里拿着公章的复印件(公钥)查验这个章是不是真的,没有私钥仿造不出真章。
相关推荐
譕痕2 小时前
stripe 实例
java·开发语言·stripe·checksession
Nil2082 小时前
LeetCode 283移动零
数据结构·算法·leetcode
墨子夕2 小时前
设计模式——Java × Python 双语言精讲 · 23 个经典模式 + 现代演进(前言篇)
java·开发语言·设计模式
骇客野人2 小时前
Linux 全套实操方案(含目录详解、文件传输、日志、文件规范、环境变量、Java 应用部署运维)
java·linux·运维
_菜鸟果果2 小时前
高德地图 JS API 2.0 在国产 Linux/ARM 电脑上渲染失败 的排查与解决
linux·开发语言·javascript
.Bryce.2 小时前
MCP+A2A+ANP,Agent通信协议的完整知识地图
java·人工智能·后端·agent·通信协议
SL_staff2 小时前
规则引擎选型陷阱:为什么QPS不是JVS-Rules对比Drools的核心指标
java·开源·全栈
LMT流氓兔2 小时前
第五单元——第4课:给工具参数加校验
java·前端·算法·ai·langchain
昂好的day2 小时前
VisionMaster(VM) 标定工具详解(上):为什么必须标定 + 九点标定手眼标定
开发语言·数码相机·c#