OptiStick 5(S905X5M)安全启动

2026-10-29 · Wilber Zheng · 来源:Amlogic SDK aml-comp/uboot/fip/s7d/ 和 meta-meson/;SEI 提供的 Amlogic《Yocto SDK Enable Secureboot User Guide》0.1 版(以 T6D 为例)

0. 先打个比方

1. Amlogic 标准流程

1.1 生成密钥(只做一次,离线)

1.2 根证书和根哈希

1.3 eFuse 烧写文件

1.4 签名固件(Yocto scs,每次发版)

  1. 把 device-keys/ 和 fw_arb.cfg 放进 aml-comp/prebuilt/hosttools/aml-linux-scs/<soc>/<chipset>/。目前只有 s4、sc2、t6d、t7,s7d 要自己加,aml-linux-scs-native_1.0.bb 的 SOC_FAMILY 也要加。
  2. 打开 DISTRO_FEATURES += "AVB scs"。
  3. 编译时会:

1.5 烧写

1.6 三种保护的作用

选项作用代价
签名校验(根哈希 + 开关)只有我们签名的固件能启动固件内容不加密;给 SEI 的文件里没有秘密
DVGK / DVUK固件加密,只有带这把密钥的芯片能解开给 SEI 的文件里带秘密密钥
USB / DIF 密码USB 烧写、调试口要按台输入密码返修、重刷要先按芯片 ID 算密码

1.7 流程图:Amlogic 标准流程

流程图保留英文,避免中文字符宽度不一致导致错位。

            OptiSigns (offline, once)                          SEI (mass production)
 ┌─────────────────────────────────────────┐
 │ 1. gen_all_device_key.sh                │
 │    4 root RSA-4096 key pairs (PEM)      │
 │    + lower-level signing keys (PEM)     │
 │    + DVGK / DVUK AES-128 (.bin)         │
 └───────────────┬─────────────────────────┘
                 │
     ┌───────────┴──────────────┐
     ▼                          ▼
 ┌──────────────────────┐  ┌──────────────────────────────────────┐
 │ 2. Root cert         │  │ 4. Sign firmware (every release)     │
 │  4 root public keys  │  │  a. export device-keys (no root key) │
 │  → SHA-256 (32 B)    │  │     + fw_arb.cfg into SDK            │
 └─────────┬────────────┘  │     aml-linux-scs/ (add s7d)         │
           ▼               │  b. DISTRO_FEATURES += "AVB scs"     │
 ┌──────────────────────┐  │  c. build: signed u-boot;            │
 │ 3. efuse-gen.sh      │  │     vbmeta/recovery signed           │
 │  pattern.efuse:      │  │     (SHA256_RSA4096)                 │
 │  root hash + enable  │  │  d. amlogic_scs_sign_whole_pkg.bash  │
 │  bits (no secrets)   │  │     → aml_upgrade_package_enc.img    │
 └─────────┬────────────┘  └──────────────────┬───────────────────┘
           │                                  │
           └──────────────► to SEI ◄──────────┘
                               │
                               ▼
                ┌──────────────────────────────┐
                │ 5. Burn signed firmware      │
                │ 6. Burn pattern.efuse        │
                │    (irreversible)            │
                └──────────────┬───────────────┘
                               ▼
                ┌──────────────────────────────┐
                │ Boot: ROM hashes root cert,  │
                │ compares with eFuse, then    │
                │ verifies each stage's sig.   │
                │ Unsigned firmware won't boot │
                └──────────────────────────────┘

 Key storage: root keys encrypted, offline, 2 copies.
              Signing keys in GCP Secret Manager, pulled only to sign.

2. 我们想实现的方案(Frank)

来自 Frank 给 Amlogic 的邮件草稿。他提到的名字在 SDK 里都有:fip/s7d/build.sh 里有 CONFIG_AML_SIGNED_UBOOT(第 816 行调用 device-vendor-scs-signing.sh);binary-tool/acpu-imagetool 支持 --cmd-signpipe-device-root / -lvl1 / -lvl2 / -bl30..-lvl3。

2.1 关键点对比:我们想要的 vs Amlogic 标准

关键点Amlogic 标准做法我们想要的为什么要 Amlogic 确认
1. 在哪签名Yocto 打开 scs,打包时整包签名并加密,输出 aml_upgrade_package_enc.img只在编译 u-boot 时给 bootloader 签名(CONFIG_AML_SIGNED_UBOOT=y),整包不签、不加密改动小,烧写包和现在一样,产线流程不变问题 1
2. 加不加密可选:烧 DVGK/DVUK,固件加密只签名,不加密加密要把密钥交给 SEI;签名已能保证只有我们的固件能启动问题 2
3. eFuse 烧什么根哈希 + 6 个开关全开;示例里还开了 USB、调试口密码只烧必要的:根哈希 + 必须的开关;不开 USB、调试口密码每个开关都不可撤销;密码会让返修、重刷要按台算密码问题 3
4. 私钥放哪openssl 在电脑上生成 PEM 文件,签名时直接读文件全部 RSA-4096 在 Google Cloud KMS 里生成,导不出来,签名时由工具调用 KMS(--cmd-signpipe-*)任何电脑上都不存在私钥文件,不会被拷走问题 4(怎么签)、问题 6(怎么生成根哈希)
5. 系统怎么校验vbmeta、recovery 改用 bootloader 的三级密钥签系统继续用我们现在的 AVB 密钥OS 签名和 OTA 流程不用改问题 5

2.2 流程图:Frank 的方案

            OptiSigns                                          SEI (mass production)
 ┌─────────────────────────────────────────┐
 │ 1. Keys in Google Cloud KMS (RSA-4096)  │
 │    root + lower-level keys              │
 │    not exportable; export public keys   │
 └───────────────┬─────────────────────────┘
                 │
     ┌───────────┴──────────────┐
     ▼                          ▼
 ┌──────────────────────┐  ┌──────────────────────────────────────┐
 │ 2. Root cert from    │  │ 4. Sign bootloader (every release)   │
 │  root public keys    │  │  u-boot build                        │
 │  → SHA-256 (32 B)    │  │  CONFIG_AML_SIGNED_UBOOT=y           │
 │  (tool: open Q6)     │  │  → device-vendor-scs-signing.sh      │
 └─────────┬────────────┘  │  → acpu-imagetool --cmd-signpipe-*   │
           ▼               │  → KMS signs → signed bootloader     │
 ┌──────────────────────┐  ├──────────────────────────────────────┤
 │ 3. efuse-gen.sh      │  │ 5. OS: kernel/system via AVB         │
 │  pattern.efuse:      │  │  with our own AVB key (as today)     │
 │  root hash + minimum │  │  no Yocto scs, no encrypted package  │
 │  bits (open Q3)      │  │                                      │
 └─────────┬────────────┘  └──────────────────┬───────────────────┘
           │                                  │
           └──────────────► to SEI ◄──────────┘
                               │
                               ▼
                ┌──────────────────────────────┐
                │ 6. Burn signed firmware      │
                │ 7. Burn pattern.efuse        │
                │    (irreversible)            │
                └──────────────┬───────────────┘
                               ▼
                ┌──────────────────────────────┐
                │ Boot: ROM checks root hash → │
                │ verifies signed bootloader → │
                │ u-boot verifies vbmeta with  │
                │ our AVB key (open Q5)        │
                └──────────────────────────────┘

2.3 要问 Amlogic 的问题

#问题通俗说明
1通过 u-boot 编译签名,量产是否支持?还是必须用 Yocto scs?文档教的是打包时整包盖章;我们只想在编译 u-boot 时给 bootloader 盖章。问这样量产行不行。
2S905X5M 是否必须做 bootloader 加密(DVGK/DVUK)?只签名不加密是否支持?量产建议哪种?盖章只保证只有我们的固件能启动,别人仍能拷出来看;加密是再加一把锁,但钥匙要交给 SEI。问能不能只盖章。
3工厂该烧哪些 eFuse 项、什么顺序?哪些可选(..._PUBRSA_PROT、USB 认证、调试口锁)?eFuse 有一排开关,烧了回不去,开得越多返修越麻烦。问最少烧哪几个、先后顺序。
4用 --cmd-signpipe-* 时,传的是原文还是 SHA-256 哈希?要 RSA-PSS(SHA-256,32 字节 salt)还是 PKCS#1 v1.5?返回什么格式?章放在云上拿不出来,工具只能把东西递给云盖章再拿回来。要问清楚递什么、用哪种盖法、盖完交回什么格式,否则云那边配不对。
5烧了 eFuse 的机器上,系统能否继续用我们自己的 AVB 密钥,还是 vbmeta 必须用三级密钥签?add-device-keys-bl33.sh 会不会替换 u-boot 信任的 AVB 密钥?bootloader 检查系统时现在用我们的 AVB 章;Amlogic 做法会改成 bootloader 那枚章。问能不能保留现在的。
6能否只用公钥生成根证书、根哈希和 pattern.efuse,再通过 --cmd-signpipe-device-root / -lvl1 / -lvl2 给下级证书签名?用什么工具和参数?Amlogic 工具要先在电脑上造出章(私钥文件)才能做“印章样本”。我们的章在云里造、拿不出来,只有公钥。问只用公钥能不能做出样本和 eFuse 文件,各级章之间的背书能不能都交给云来盖。