应用笔记6391:不是加密专家也可实现安全认证; 来自
对称加密和非对称加密的详细说明; 来自
Xilinx Zynq-7000如何保护客户的知识产权; 来自
ZYNQ U-BOOT 鉴权和解密方法(authentication和decryption); 来自
Xilinx Zynq-7000系列安全配置策略; 来自
使用 openssl 生成证书(含openssl详解); 来自
参考数据手册: 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)
制作boot.bin文件时,指定的key file不存在时,工具会自动生成该密码文件,并用该密码文件加密boot.bin文件。
BOOT.BIN 文件 偏移地址0x028的信息内容如下
• 0xA5C3C5A3 : 用EFUSE保存密码;
• 0x3A5C3C5A :用BBRAM保存密码;
• other. :非加密文件;
注意:1. 器件名part name : xc7z020 和芯片一致(第1次时指定)。
2. 测试时可以指定用BBRAM存放密码,可以重复烧写; 生产时需要指定EFUSE(OTP的只能烧写一次);
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
在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]