You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用外部工具对FIT镜像中的配置进行签名?

无本地私钥时FIT镜像配置段的签名方案

你提出的两个方案可行性分析

方案1:提取数据签名后回写.itb

可行,但需要配合U-Boot的dumpimage和设备树工具dtc操作,步骤如下:

  1. 先创建不含signature节点的ITS,执行mkimage -f its_file its_image.itb生成未签名的FIT镜像。
  2. 用dumpimage -l its_image.itb查看配置段的节点路径,再通过dumpimage提取需要签名的原始哈希数据(或直接从FDT结构导出待签名内容)。
  3. 将哈希数据传给外部签名工具,获取匹配算法格式的签名(比如ecdsa256对应的DER格式)。
  4. 用fdt set命令把签名写入.itb的signature节点的value属性:
    fdt set its_image.itb /configurations/kernel_dtb/signature value "<十六进制编码的签名>"
    
  5. 最后执行fdt resize确保镜像大小足够,完成签名注入。

方案2:构建前预生成签名并直接指定

完全可行,U-Boot的mkimage支持在ITS中直接指定签名值,无需本地私钥。只需修改ITS的signature节点,添加value属性填入外部生成的签名(十六进制格式):

default = "kernel_dtb";

  kernel_dtb {
    description = "Linux kernel and FDT blob";
    kernel = "kernel";
    fdt = "base_fdt";
    signature {
      algo = "sha256,ecdsa256";
      key-name-hint = "sign-key";
      sign-images = "kernel", "fdt";
      value = "<外部生成的十六进制签名>";
    };
  };
};

生成镜像时mkimage会直接使用该签名,不会尝试用私钥重新生成。你可以在Buildroot构建流程中加自定义步骤:先对kernel、dtb等文件计算哈希,传给外部工具拿签名,再把签名动态填入ITS模板,最后调用mkimage生成带签名的FIT镜像。

其他替代方案

自定义Buildroot脚本集成外部签名

在Buildroot的package/boot/uboot目录加自定义补丁,或在项目local.mk中添加钩子,在生成ITS前自动执行:

  1. 导出Buildroot编译出的kernel、dtb文件路径。
  2. 按ITS指定的算法(如sha256sum)计算文件哈希。
  3. 调用外部签名工具,传入哈希值获取签名。
  4. 将签名写入ITS模板对应位置。
  5. 调用mkimage生成最终的签名FIT镜像。

适配U-Boot的fit_sign.sh脚本

U-Boot源码中的tools/fit_sign.sh原本用于本地私钥签名,可修改脚本将本地签名逻辑替换为调用外部签名工具的接口,让脚本自动完成哈希计算、外部签名获取、签名注入的全流程,再在Buildroot中配置使用修改后的脚本生成签名镜像。

内容的提问来源于stack exchange,提问作者Tyrreus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 01:20:05