zynq7000程序加密(一)

本文详细介绍了Xilinx Zynq平台上的三种加密方案:AES对称加密、RSA非对称认证结合AES对称加密及数据证书。探讨了在Windows和Ubuntu环境下使用Vivado和SDx进行开发,以及利用JTAG仿真器烧写密码到EFUSE或BBRAM的具体步骤。文章还分享了使用openssl生成秘钥的过程,以及在Zynq中实现RSA身份验证的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转至:https://blog.youkuaiyun.com/luo_xian_neng/article/details/83150657

 

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

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

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

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

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

使用 openssl 生成证书(含openssl详解);   来自 <https://blog.youkuaiyun.com/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]
 

<think>好的,用户想了解Zynq7000系列FPGA的启动模式。我需要结合用户提供的引用内容,特别是引用[1],来详细回答这个问题。 首先,用户提到的引用[1]已经指出Zynq在无JTAG模式下是通过PS端的ARM核来配置PS和PL部分的,且不支持从PL端直接启动。这点是核心,必须在回答中强调。 接下来,我需要整理Zynq7000启动模式的基本流程。启动过程通常分为几个阶段:上电复位、BootROM执行、FSBL加载、PL配置(可选)、应用程序执行。要分步骤解释每个阶段的作用,特别是PS和PL的关系。 然后,启动模式的分类。根据文档,常见的启动模式包括JTAG、Quad-SPI、NAND、SD卡等。需要详细说明每种模式的特点和应用场景,比如JTAG用于调试,SD卡用于量产等。同时要指出Zynq必须通过PS启动,PL配置由PS处理,这与传统FPGA不同,这点用户可能容易混淆,需要明确区分。 此外,启动模式的选择是通过MIO引脚配置的,可能需要解释如何通过硬件设置这些引脚的状态来选择不同的启动源。这部分需要简明扼要,避免过于技术化,但要让用户明白配置方法。 用户提供的引用中还提到了DDR内存控制器和GPIO,虽然问题不直接相关,但可能在启动过程中涉及到DDR初始化或GPIO配置,不过暂时不需要深入,除非用户后续提问。 最后,生成相关问题需要考虑用户可能的后续需求,比如启动失败的原因、如何配置FSBL、不同启动模式的优缺点比较等,这样能帮助用户进步学习。 需要确保回答结构清晰,分点说明启动模式和流程,同时引用[1]的内容要自然地融入解释中,比如在说明PL配置时引用。注意使用中文,LaTeX格式正确,行内公式用$...$,独立公式用$$...$$,但这个问题可能涉及较少公式,更多是流程描述,所以可能不需要太多数学表达式,但如果有时间相关的计算或配置地址,可能需要使用,例如寄存器地址用$0x12345678$表示。 检查是否有遗漏点,比如安全启动、多阶段启动流程中的细节,但根据引用内容,可能信息有限,需基于现有引用作答,不添加未提及的推测内容。 现在组织语言,确保符合用户要求的结构,先回答启动模式详解,再相关问题。</think>### Zynq7000系列FPGA启动模式详解 Zynq7000系列芯片的启动模式与传统FPGA有本质区别,其核心特点是**必须通过处理系统(PS)完成芯片配置**,不支持直接从可编程逻辑(PL)端启动[^1]。以下是启动模式的关键解析: #### 1. 启动流程框架 Zynq7000的启动过程分为四个主要阶段: 1. **上电复位(POR)** 硬件自动初始化PS端处理器,检测启动模式引脚(MIO[5:0])的状态。 2. **BootROM执行** - 片上BootROM代码加载至OCM(On-Chip Memory) - 根据MIO引脚配置选择启动源(如QSPI、SD卡等) - 验证并加载第阶段引导程序(FSBL) 3. **FSBL(First Stage Bootloader)加载** ```c // FSBL示例代码片段(初始化DDR控制器) Xil_Out32(DDR_CTRL_BASEADDR + 0x014, 0x00000001); // 使能DDR时钟[^4] ``` - 配置PS端外设(如DDR控制器、GPIO[^2]) - 可选加载PL端比特流文件(.bit) 4. **应用程序执行** 跳转到用户程序(如裸机程序或操作系统) #### 2. 启动模式分类 | 模式 | 配置引脚(MIO[5:0]) | 典型应用场景 | |---------------|---------------------|--------------------| | JTAG模式 | 000000 | 调试阶段 | | Quad-SPI Flash | 001010 | 固化程序存储 | | SD卡启动 | 001110 | 快速量产部署 | | NAND Flash | 010010 | 大容量存储需求 | **关键差异点**:与传统7系列FPGA相比,Zynq7000的PL配置完全依赖PS端处理器完成,PL比特流文件需通过FSBL或用户程序加载。 #### 3. 特殊模式解析 - **安全启动模式** 通过RSA或AES加密验证引导程序,防止未授权代码执行。 - **多阶段启动** 支持从不同存储介质分阶段加载程序(如先加载PL配置,再加载应用程序)。 $$ T_{boot} = T_{BootROM} + T_{FSBL} + T_{PL\ config} $$ 其中$T_{PL\ config}$的耗时与比特流大小成正比,典型值为100ms量级。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值