当前位置: 代码迷 >> 综合 >> Xilinx Zynq-7000 RSA Authentication过程
  详细解决方案

Xilinx Zynq-7000 RSA Authentication过程

热度:40   发布时间:2023-12-15 21:57:02.0

Intro

简单记录下zynq-7000采用RSA校验时的大概流程。
阅读需要具备RSA,Signature, Certificate等相关概念基础。

Gen Signature

RSA是非对称加密算法。在这里,我们使用Private Key来签名,用Public Key来校验(实际上Public key也可以对content进行加密,然后再用Private Key来解密还原content)。回顾签名的产生过程和签名的校验过程如下。

签名过程:

  • 给出Content
  • 选择SHA算法对给定Content算出摘要
  • 用Private Key对摘要进行加密得到签名
  • 将签名附Content后一起发送给接收者

签名校验:

  • 接收者对Content计算出摘要1
  • 用Public key对Content后的签名进行解密,获得摘要2
  • 对比摘要1摘要2
  • 如果两个摘要完全一致,说明Content未被修改校验通过

Key Pair

Zynq-7000有两对Key,分别叫Primary Key和Second Key。具体名称和缩写关系如下:

  • PPK = Primary Public Key
  • PSK = Primary Secret Key
  • SPK = Secondary Public Key
  • SSK = Secondary Secret Key

Signing

  • PPK和SPK明文存放在Certificate中
  • 用PSK对SPK进行签名,得到的Signature也存放在Certificate中
  • 用SSK对Image进行签名,得到的Signature也存放在Ceritficate中
  • 把证书Append到Image后
  • 把PPK进行hash后写入eFUSE中

证书的大致结构如下:

Certificate Header
PPK
SPK
SPK Signature
Image Signature

最后这张证书会被嵌入到Image中

Image Header
Image
Image Certificate

Verifying

verify PPK

  • 从证书中读取PPK
  • 计算PPK的hash
  • 和eFUSE中的PPK hash进行比较
  • 如果一致,则PPK校验通过,否则失败

verify SPK

  • 从证书中读取SPK
  • 计算SPK的hash1
  • 用PPK来解密SPK的signature,得到SPK的hash2
  • 比较hash1和hash2
  • 一致则SPK校验通过,否则失败

verify Image

  • 读取Image
  • 计算Image的hash1
  • 用SPK来解密Image的signature,得到Image的hash2
  • 比较hash1和hash2
  • 一致则Image校验通过,否则失败

如果上述步骤均能通过校验,则最后跳转去执行Image。

参考文献:

  1. XILINX ug1283《Bootgen User Guid》
  相关解决方案