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》