FPGA开发技能(7)Vivado设置bit文件加密

news2024/11/16 15:40:33

在这里插入图片描述

文章目录

  • 前言
  • 1. AES加密原理
  • 2.xilinx的AES方案
  • 3.加密流程
    • 3.1生成加密的bit流
    • 3.2将密钥写入eFUSE寄存器
  • 4.验证结论
  • 5.传送门

前言

在FPGA的项目发布的时候需要考虑项目工程加密的问题,一方面防止自己的心血被盗,另一方面也保护公司资产,保护知识产权。Xilinx的器件大概有两种加密方案,一种是本文介绍的AES加密算法,另一种则是利用multiboot配置和Device DNA,其大概是流程是,xilinx提供了读取Device DNA的原语,用户逻辑通过原语读取Device DNA然后与用户逻辑的加密模块做运算得到一个数字串,将该数字串与存放在Flash特定区域的密文做对比,如果一致证明该FPGA通过授权可以启动用户逻辑,如果失败则可设置不启动。存放在Flash特定区域的密文也是通过Device DNA与用户逻辑中的加密算法提前计算得到的。因为Flash不仅要存储密文还要存储bit流,因此需要用到multiboot配置。Xilinx7系列支持AES256加密算法,可以防止程序回读和逆向,杜绝用抄板的方式窃取劳动成果。 本文介绍AES加密算法的原理,加密操作的流程以及加密的作用。

1. AES加密原理

AES加密算法是一种对称加密算法,用于保证私密信息不被泄露,对称是指加密法和解密方使用的密钥是一致的。AES的Key支持三种长度:AES128,AES192,AES256 。xilinx采用AES256,使用密码块链接模式(Cipher Block Chaining mode,CBC mode)(AES有五种模式CBC是其中的一种)。 AES256的加密原理是把明文按照256bit拆分成若干个明文块,如果最后有数据不足256bit按照一定的方式来填充最后一个明文块。每一个明文块利用AES加密器和密钥,加密成密文块。拼接所有的密文块,成为最终的密文结果。从图中可以看出,CBC模式在每一个明文块加密前会让明文块和一个值先做异或操作。IV作为初始化变量,参与第一个明文块的异或,后续的每一个明文块和它前一个明文块所加密出的密文块相异或。由下图可以看到,实现AES256加密算法需要提供密钥、初始向量IV以及256bit-HMAC。HMAC是为了避免bit被篡改,HMAC(Hash-based Message Authentication Code,基于散列函数的消息认证码)是一种用于验证数据完整性和真实性的认证方法。它通过将数据与密钥进行散列处理,生成固定长度的认证码,然后将认证码与数据一起发送给接收方。接收方在接收到数据后使用相同的密钥和散列函数进行计算,然后比较生成的认证码是否一致,从而可以判断数据是否被篡改或伪造。HMAC认证可以有效防止数据在传输过程中被篡改或伪造,以确保数据的完整性和真实性。
在这里插入图片描述

2.xilinx的AES方案

以上介绍的是AES加密算法本身的原理,xilinx是如何利用这个加密算法的呢?
Xilinx可通过JTAG接口将用户指定的密钥(或者软件生成的,这里包括上一节提到的三个密钥)写入eFUSE寄存器(采用熔断丝技术一生只能写一次,且写且珍惜~),同时Vivado工具负责根据用户指定的密钥对bit流进行 AES加密。FPGA在加载加密后的bit流时,会根据用户设置的密钥通过片上的 AES解密逻辑电路进行 AES解密,从而还原得到器件可以识别的未加密bit流,从而被正确加载。具体的操作流程见下一节。
此外,Xilinx提供了几个寄存器配置选项,提供灵活的加密配置。如下图所示,7系列查看UG470,KU系列查看UG570,操作时按照下文推荐配置即可。需要注意eFUSE Control Register的CFG_AES_Only,如果该位被设置为1,则FPGA上电之后将强制进行解密操作,一旦bit流没有设置密钥或者密钥不正确,将不会被加载,因此一定慎用该寄存器,否则一旦密钥丢失,FPGA将变成废铁。
在这里插入图片描述

3.加密流程

3.1生成加密的bit流

①打开“Open Elaborated Design”,此时在“Generate Bitstream”右键才会出现下图中蓝色字体“Configure additional bitstream settings”,单击它
在这里插入图片描述
②设置使能bit流加密,设置选择密钥存储位置为EFUSE。这里可以手动指定三个密钥的值,这个选择不指定即不填写任何东西,软件工具将会自动生成。
在这里插入图片描述
③设置回读配置为LEVEL1即禁止回读。此处要注意,并不是禁止从Flash里面回读,也就是说通过JTAG接口在hardware manager中选择flash器件点击右键选择readback configuration memory device依然可以回读,这里是告诉配置工具在 FPGA 配置完成后不要自动读取配置数据进行校验。
在这里插入图片描述
④上述配置完成之后一定在Elaborated Design界面点击保存或者ctrl+s配置才能生效,保存后会发现xdc文件中多了两句话,然后重新生成bit流,在与bit文件同级的文件夹中将会出现与bit流同名但后缀是nky的文件,这就是软件自动生成的密钥文件。现在生成mcs文件并烧写进FPGA发现FPGA不会启动,这是因为FPGA内部还没有密钥,需要进行下一节的操作。
在这里插入图片描述

3.2将密钥写入eFUSE寄存器

①打开vivado软件,连接JTAG并上电,打开Open Hardware Manager,进入Hardware界面,点击Auto Connect。在芯片名字上右键,选择Program eFUSE Registers。
在这里插入图片描述
②勾选Enable AES key programming,选择上一节生成的后缀为nky的文件,然后选择next。
在这里插入图片描述
③勾选Enable control register programming,接着按照如图所示勾选,此处千万不能勾选出错,否则造成严重后果!然后点击next。
在这里插入图片描述
④最后一页无需勾选,按照默认next即可,最后单击finish。导出的后缀nkz的文件将记录eFUSE的密钥信息和相关寄存器的配置信息。
在这里插入图片描述

4.验证结论

准备两块一摸一样的板卡A和B,制作一个简单的测试程序。
①在A板卡上配置了eFUSE寄存器,并将密钥写入eFUSE寄存器,此时烧写不加密的bit文件或者mcs文件,都是可以正常工作,并且回读A中的MCS文件烧写到B,B可以正常工作。
②在A板卡按照上述第三节配置,配置了eFUSE寄存器,写入密钥,并设置禁止回读,发现仍然可以回读,证明xdc中设置的禁止回读并不是禁止从flash读回mcs文件。
③给A板卡写入密钥1,并将工程用密钥1生成bit流,此时回读工程写入B板卡,B板卡无法完成FPGA代码加载。这里可以看出加密的最重要的作用就是禁止回读后逆向。同样如果给B写入的密钥不是密钥1,那么显然B还是无法加载。
④给A板卡在不写入密钥的情况下烧写加密的bit文件,FPGA无法完成加载。

5.传送门

  • 我的主页
  • FPGA开发必备技能专栏汇总导航
  • 上一篇:FPGA开发技能(6)Qt生成ROM IP核使用的COE文件
END

💎文章原创,首发于CSDN论坛。
💎欢迎点赞💖收藏✨打赏💷!
💎欢迎评论区🎤或私信指出错误🎤,🗣️提出宝贵意见或疑问。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1864830.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

yolo-world使用自己数据集训练

YOLO-World下载: https://github.com/AILab-CVC/YOLO-World/tree/master 1.数据准备 数据格式COCO格式即可 2.配置文件修改 configs/finetune_coco/yolo_world_v2_l_vlpan_bn_sgd_1e-3_40e_8gpus_finetune_coco.py (1) 模型下载路径&#xf…

六载深耕结硕果 重任千钧再出发——福建又一物联网项目交付

在福建这片充满活力的土地上,唯众以其深厚的技术积淀和专业实力,在物联网教育领域深耕多年,为培养新时代的技术人才贡献着自己的力量。近日,漳州技师学院物联网应用技术专业实训室建设项目的成功交付,再次证明了唯众在…

Java25年还有更多的工作岗位适合二本学生就业吗?

Java作为一种广泛使用的编程语言。尽管技术领域不断发展和变化,Java依然在许多行业中占据重要地位。以下是一些原因,刚好我有一些资料,是我根据网友给的问题精心整理了一份「JAVA的资料从专业入门到高级教程」, 点个关注在评论区…

权限传递,提取明文密码

一、cs与msf权限传递 创建foreign监听器-->msf监听模块设置端口-->cs执行新建会话选择创建的监听器 1.创建监听器: 2.msf监听设置端口: use exploit/multi/hander set payload windows/meterpreter/reverse_http set lport 4444 exploit 二、mi…

数据质量管理-一致性管理

前情提要 根据GB/T 36344-2018《信息技术 数据质量评价指标》的标准文档,当前数据质量评价指标框架中包含6评价指标,在实际的数据治理过程中,存在一个关联性指标。7个指标中存在4个定性指标,3个定量指标; 定性指标&am…

运维入门技术——监控的三个维度(非常详细)零基础收藏这一篇就够了_监控维度怎么区分

一个好的监控系统最后要做到的形态:实现Metrics、Tracing、Logging的融合。监控的三个维度也就是Metrics、Tracing、Logging。 Metrics Metrics也就是我们常说的指标。 首先它的典型特征就是可聚合(aggregatable).什么是可聚合的呢,简单讲可聚合就是一种基本单位可以在一种维…

Rust详解日志

详解日志 相比起监控,日志好理解的多:在某个时间点向指定的地方输出一条信息,里面记录着重要性、时间、地点和发生的事件,这就是日志。 注意,本文和 Rust 无关,我们争取从一个中立的角度去介绍何为日志 日…

防火墙GRE over IPSec配置

一、基础知识 1、GRE隧道 GRE隧道是一种网络通信协议,使用通用路由封装(GRE)技术,能够将一种网络协议下的数据报文封装在另一种网络协议中,从而实现在另一个网络层协议中的传输。 GRE隧道的基本概念和工作方式 基本…

Ubuntu磁盘分区和挂载 虚拟机扩容 逻辑卷的创建和扩容保姆及教程

目录 1、VMware虚拟机Ubuntu20.04系统磁盘扩容 2、Linux的磁盘分区和挂载 3、创建逻辑卷和逻辑卷的扩容 1、VMware虚拟机Ubuntu20.04系统磁盘扩容 通过下图可以看出我们的根磁盘一共有20G的大小,现在我们把它扩容为30G 注:如果你的虚拟机有快照是无…

2024年JCR分区,将发生重大变化

科睿唯安官方微信发布消息,指出今年的期刊排名及相应JCR分区将发生重大变化。 原文比较长,不熟悉相关规则的朋友也不太容易读懂。因此,我们今天做一个详细的解读。 首先明确几个基本概念: (1)2024年发布2…

如何通过IPXProxy动态住宅代理增强网络安全与隐私?

​在当今互联网技术日新月异的背景下,动态住宅代理已成为网络运营和数据收集中不可或缺的关键工具。本文将深入探讨动态住宅代理在提升网络安全性和隐私保护方面的重要性。 动态住宅代理与隐私保护 动态住宅代理通过代理服务器连接至互联网,为用户的原始…

2024年二级建造师机电工程专业考试题库分享。

1.调查表法通常与()结合使用,以便更快地发现问题原因。 A.经验法 B.分层法 C.样本调查法 D.对比分析法 答案:B 解析:题干内容提示调查表法往往会与分层法结合起来应用,故B选项正确。 2.在质量统计分…

RAG | (ACL24规划-检索增强)PlanRAG:一种用于生成大型语言模型作为决策者的规划检索增强生成方法

原文:PlanRAG: A Plan-then-Retrieval Augmented Generation for Generative Large Language Models as Decision Makers 地址:https://arxiv.org/abs/2406.12430 代码:https://github.com/myeon9h/PlanRAG 出版:ACL 24 机构: 韩国…

vue3中通过vditor插件实现自定义上传图片、录入echarts、脑图、markdown语法的编辑器

1、下载Vditor插件 npm i vditor 我的vditor版本是3.10.2,大家可以自行选择下载最新版本 官网:Vditor 一款浏览器端的 Markdown 编辑器,支持所见即所得(富文本)、即时渲染(类似 Typora)和分屏 …

RT-Thread Studio实现静态线程

1创建项目 (STM32F03ZET6) RT-Thread项目与RT-Thread Nano 项目区别 RT-Thread: 完整版:这是RT-Thread的完整形态,适用于资源较丰富的物联网设备。功能:它提供了全面的中间件组件,如文件系统、网络协议栈、…

MS31011低压 5V DC 电机驱动

MS31011 是一款低压 5V 直流电机驱动芯片,为摄像机、消 费类产品、玩具和其他低压或者电池供电的运动控制类应用提 供了集成的电机驱动解决方案。 MS31011 能提供高达 0.8A 的输出电流。可以工作在 2.0~5.5V 的电源电压上。 MS31011 具有 PWM &#x…

比特币生态系统的现状与流动性提升的新路径

自2009年中本聪发布比特币白皮书以来,比特币一直被誉为“数字黄金”,在加密货币领域占据着不可动摇的地位。其去中心化、稀缺性和安全性,增强了其作为长期价值储存工具的吸引力。 相比之下,以太坊自2015年问世以来,凭…

oceanbase数据库安装和连接实战(阿里云服务器操作)

本文主要是安装oceanbase的单机版进行数据库的基础使用,oceanbase的数据库是兼容mysql数据库的,实际的兼容程度需要更深度的测试,本文主要是安装oceanbase并使用SQLynx的mysql驱动连接使用oceanbase数据库。 目录 1. 基础介绍 2. 安装说明 …

CentOS 7.9下安装配置Java环境

1.下载java安装包 下载java安装包 我已经给大家准备好了,下载连接 https://pan.baidu.com/s/1GK_juIc5rch0Kc4-EbxNNQ 提取码: 0124 2.创建目录 mkdir /usr/local/soft 3.解压压缩包到安装目录 tar xf jdk-8u401-linux-x64.tar.gz -C /usr/local/soft/ 4.配置环…

Strava VS Keep竞品分析

Strava VS Keep竞品分析 一、背景: 随着国民对身体健康的重视程度逐步增加,跑步、游泳、骑行在国内逐渐流行,人们都加入运动行列。随之不可缺少的则是对运动数据的记录,市面上针对此需求的app层出不穷,日活最多的5款…