8. DATA 分区(userdata)签名与验签¶
8.1. 概述¶
目的:DATA 分区(JFFS2)在烧录前做 SHA256 + RSA 签名,设备启动挂载前先 验签;通过则挂载 JFFS2,失败或未签名则挂载 tmpfs,避免使用被篡改或未授权数据。
算法:对 payload 做 SHA256,再对 32 字节哈希做 PKCS#1 v1.5 裸 RSA 签名(2048-bit);验签使用公钥的模数 N 与指数 e,与签名私钥成对。
密钥:签名使用
ramdisk/keys/test_reeos.key;验签公钥由gen_data_sig_pubkey_h.py从该私钥(或对应证书)提取并生成 C 头文件;设备端无 OpenSSL,使用 mbedTLS 做 RSA 验签。
8.2. 使用与验证方式¶
menuconfig->Kernel options->Enable kernel secure boot。
执行 build_all,或按需
make data、make rootfs:前者生成并签名 data.spinor,后者将verify_data_sig等装入 rootfs。烧录时将
install/.../data.spinor整文件写入 DATA(userdata)分区起始位置;镜像路径随板型变化,具体分区名与烧录工具以板级为准。设备启动后,对 DATA 分区执行
verify_data_sig,验签通过则挂载 JFFS2,失败或未签名则挂载 tmpfs。在设备上执行
mount | grep /mnt/data,若输出中出现 jffs2,即表示 DATA 验签成功并已挂载 JFFS2;若为 tmpfs,则表示验签未通过或未签名。
8.3. 相关文件一览¶
文件 |
作用 |
|---|---|
|
对 data 镜像做 SHA256 + RSA 签名并追加 trailer |
|
从密钥或证书生成 |
|
设备端与本机验签程序(mbedTLS) |
|
公钥 N/e(由 gen_data_sig_pubkey_h.py 生成) |
|
制作 JFFS2 data.spinor 并预留 trailer 空间 |
|
生成挂载脚本(含 DATA 验签分支) |
|
编译 |