3. 安全镜像生成

3.1. 秘钥列表

rsa_hash0.pem

用于签署FSBL的RSA私钥

loader_ek.key

用于加密FSBL的AES秘钥

bl_priv.pem

用于签署Monitor/u-boot的RSA私钥

bl_ek.key

用于加密Monitor/u-boot的AES秘钥

3.2. 生成密钥

  1. 生成签名私钥 rsa_hash0.pem和bl_priv.pem.

    * RSA密钥使用2048 bits和第4费马数.

host$ openssl genrsa -out rsa_hash0.pem -F4 2048
host$ openssl genrsa -out bl_priv.pem -F4 2048
  1. 生成加/解密秘钥loader_ek.key和bl_ek.key.

    * 如果只签署不加密可以不用生成该秘钥

    * 以下使用随机数生成秘钥

host$ head -c 16 /dev/random > loader_ek.key
host$ head -c 16 /dev/random > bl_ek.key

3.3. 签署加密镜像

3.3.1. 生成镜像

参考 <U-boot 移植应用开发指南> 产生FIP.bin镜像

3.3.2. 签署FIP.bin镜像

注解

注意事项

为避免量产秘钥被窃,建议量产密钥应单独保管,并使用签名工具单独于安全的环境下进行签名和加密

执行下列命令签名FIP镜像, fip.bin为原始镜像, fip_sign.bin为签名后镜像.

cv_crypt$ ./fipsign.py sign \
         --root-priv= rsa_hash0.pem \
         --bl-priv=bl_priv.pem \
         fip.bin fip_sign.bin

工具参数:

cv_crypt$ ./fipsign.py sign
usage: fipsign.py sign [-h] [--root-priv ROOT_PRIV] [--bl-priv BL_PRIV] SRC_FIP DEST_FIP

3.3.3. 签署并加密FIP.bin镜像

执行下列命令签名并加密FIP镜像, fip.bin为原始镜像, fip_enc.bin为签名并加密后镜像.

cv_crypt$ ./fipsign.py sign-enc \
         --root-priv= rsa_hash0.pem \
         --bl-priv=bl_priv.pem \
         --ldr-ek=loader_ek.key \
         --bl-ek=bl_ek.key \
         fip.bin fip_enc.bin

工具参数:

cv_crypt$ ./fipsign.py sign-enc
usage: fipsign.py sign-enc [-h] [--ldr-ek LDR_EK] [--bl-ek BL_EK] [--root-priv ROOT_PRIV] [--bl-priv BL_PRIV] SRC_FIP DEST_FIP

* 注意:加密是可选的,如果需要加密,编译FIP.bin时需要配置 CONFIG_FSBL_SECURE_BOOT_SUPPORT = y, 配置方法:

host$ source build/envsetup_soc.sh
host$ defconfig xxxxxx
host$ menuconfig --> FIP setting --> 选择 [ ] Add secure boot support to FSBL