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。
参考文献:
- XILINX ug1283《Bootgen User Guid》