Zynq FPGA 固件加密,安全启动

本文详细介绍了Zynq FPGA固件加密和安全启动的流程,包括公钥私钥的概念,Zynq相关的密钥,以及BootRom和FSBL的安全启动流程。重点阐述了AES和RSA在加密及认证中的应用,以及如何生成和烧录加密后的固件,确保系统安全启动。

Zynq FPGA固件加密,安全启动

安全启动主要为了防止以下事件发生

  1. 防止外人读取NVM 固件进行逆向。
  2. 防止固件内容进行篡改。

1.Zynq 加密简介

1.1 公钥和私钥

  • 加密的密钥与解密的密钥不相同
  • 使用私钥加密的内容,只能通过公钥来解密
  • 使用公钥加密的内容,只能通过私钥来解密
  • 公钥,可以对外给任何人的加密和解密密码,公开的,可以任何人访问
  • 私钥,私钥是一定要严格保护的,通过私钥可以生成公钥,但是从公钥可以认为是永远无法推导出私钥的。

1.2 Zynq 相关密钥

  • AES 256-bit key

    AES(Advanced Encryption Standard) Key 用于 bbram,efuse 的硬件加密,在启动阶段判断固件与硬件是否匹配(AES key 存放在FPGA, 与固件当中)。

  • HMAC key

    HMAC(Hashed Message Authentication Code )key 用于加密固件(bit/bin),并存放bit文件中,用于校验当前分区文件的正确性(HMAC key 存放在固件当中)

  • PSK

    PSK RSA Primary Secret Key,主私钥, 产生 主公钥PPK,开发者保留

  • PPK

    RSA Primary Public Key 主公钥, 认证次公钥SPK,存放在BootHeader

  • SSK

    RSA Secondary Secret Key, 次私钥,用于产生 次公钥SPK,开发者保留

  • SPK

    RSA Secondary Public Key (SPK) 次公钥, 用于认证分区数据(bin,elf等), 存放在BootHeader

小结:

  • AES / HMAC 成对使用。Bootgen 会自动生成.nky文件(如果不存在*.nky)
  • RSA 用于校验整套固件的正确性(多个文件之中的一个可能会被更改)
  • 主钥(PPK, PSK)验证次钥,次钥(SPK, SSK)验证分区固件。
  • Debug 模式用户只需要提供私钥(PSK, SSK)

1.3 Zynq 安全启动相关模块

在这里插入图片描述

模块名 描述
eFUSE SHA256(PPK) PS eFuse,hash PPK存放位置用于RSA加密, 一次性编程
BootRom 启动代码存放rom,arm启动首先从Bootrom 启动
NVM Controllers 非易失性存储控制器
AES Decryptor
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值