zynq7000程序加密(一)

转至:https://blog.csdn.net/luo_xian_neng/article/details/83150657

参考资料:
应用笔记6391:不是加密专家也可实现安全认证; 来自 <https://www.maximintegrated.com/cn/app-notes/index.mvp/id/6391>

对称加密和非对称加密的详细说明;   来自 <https://blog.csdn.net/poison_biti/article/details/75897005>

Xilinx Zynq-7000如何保护客户的知识产权;  来自 <http://xilinx.eetop.cn/viewnews-1393>

ZYNQ U-BOOT 鉴权和解密方法(authentication和decryption); 来自 <https://blog.csdn.net/cph77777/article/details/79708982>

Xilinx Zynq-7000系列安全配置策略;               来自 <http://xilinx.eetrend.com/d6-xilinx/article/2015-07/8834.html>

使用 openssl 生成证书(含openssl详解);   来自 <https://blog.csdn.net/gengxiaoming7/article/details/78505107>

 参考数据手册:  ug585.pdf   ug821.pdf    xapp1175.pdf   ug1025.pdf

 
主要内容:
xilinx的加密方案有3种:

1.  AES对称加密;

2.  RSA非对称认证 + AES对称加密;

3.  数据证书;

开发环境:
 windows 7 x64   +  vivado2017.4  +  SDX2017.4

vmware12中(ubuntu16.04.3    +  vivado2017.4   +  SDX2017.4)

1.  AES对称加密;
制作boot.bin文件时,指定的key file不存在时,工具会自动生成该密码文件,并用该密码文件加密boot.bin文件。

BOOT.BIN 文件 偏移地址0x028的信息内容如下

• 0xA5C3C5A3 : 用EFUSE保存密码;

• 0x3A5C3C5A :用BBRAM保存密码;

• other.                 :非加密文件;

注意:1. 器件名part name : xc7z020 和芯片一致(第1次时指定)。

            2.  测试时可以指定用BBRAM存放密码,可以重复烧写; 生产时需要指定EFUSE(OTP的只能烧写一次);

2.  RSA非对称认证 + AES对称加密:
Zynq中的RSA身份验证使用的是初级秘钥和次级秘钥。初级秘钥对次级秘钥进行身份验证。次级秘钥验证分区。在Bootgen

调试模式下,用户只在BIF中提供私钥。在ubuntu中运行openssl命令产生秘钥(可以用apt命令安装openssl秘钥工具)。

产生初级秘钥:

openssl产生私钥:                       openssl    genrsa         -out   psk.pem    2048

从私钥生成对应的公钥:             openssl  rsa   -pubout   -in   psk.pem     -out   ppk.pub

产生次级秘钥:

openssl产生私钥:                       openssl   genrsa          -out   ssk.pem     2048

从私钥生成对应的公钥:             openssl   rsa   -pubout   -in   ssk.pem    -out   spk.pub

采用AES + RES私钥生成加密的boot.bin文件:

鼠标点击“edit”按钮,  设置encryption,  autherntication

3.  烧写密码:
在vivado中用JTAG仿真器烧写密码到EFUSE(或BBRAM)。 上电前需要修改板子的跳线,设置为JTAG启动模式,只有在jtag启动模式才能烧写密码。

vivado中可以查看器件名 "xc7z020", boot.bin加密文件制作时需要指定该器件名

步骤1:  鼠标右击,      选择“program eFUSE...”  烧写efuse,  或者 “program  BBR  key ...”烧写BBRAM.

步骤2:   选择密码文件

步骤3:   设置控制参数   

         选择不能读取aes, 则上图不能显示密码;   选择不加密/加密都能启动, 则不加密的boot.BIN也可以启动。

步骤4:   烧写并保存配置文件, 下次烧写可以用保存的配置文件。

步骤5:  显示信息,点击“finish”开始烧写密码

坑爹的问题:
烧写密码到efuse时出现如下错误:   

INFO: [Labtools 27-3384] Exported eFUSE settings to file: E:/04.Share/sdk2017/encrypt/export_3A1206B4032A3867.nkz

ERROR: [Labtools 27-3277] jsn-DLC9LP-00000000000000 cable is not supported for EFUSE programming. Please use a Xilinx PCUSB2 DLC10 or approved Digilent cable

要用正版的jtag仿真器吗? ?? 我用的是盗版的。正版好贵呀!!!!

正版JTAG仿真器能够正确烧写eFUSE,烧写信息如下:

reate_hw_bitstream -hw_device [get_hw_devices xc7z020_1] -nky {E:/04.Share/sdk2017/encrypt/aes.nky}

program_hw_devices -key {efuse} -disable_program_rsa -efuse_export_file {E:/04.Share/sdk2017/encrypt/export_2A1206B4032A3A2F.nkz} -force -user_efuse {0} -control_efuse {408} [get_hw_devices xc7z020_1]

INFO: [Labtools 27-3384] Exported eFUSE settings to file: E:/04.Share/sdk2017/encrypt/export_2A1206B4032A3A2F.nkz

INFO: [Labtools 27-3395] Device eFUSE successfully programmed.

CRITICAL WARNING: [Labtoolstcl 44-657] Encrypted bitstreams must be programmed through a non-JTAG secure boot flow.

Resolution: For more information, see app note XAPP1175.

refresh_hw_device [lindex [get_hw_devices xc7z020_1] 0]
 

猜你喜欢

转载自blog.csdn.net/neufeifatonju/article/details/84096801
今日推荐