现在做网站一般做多宽,巴中微小网站建设案例,国内网站域名吗,论坛网页模板文章目录 前言1. AES加密原理2.xilinx的AES方案3.加密流程3.1生成加密的bit流3.2将密钥写入eFUSE寄存器 4.验证结论5.传送门 前言 在FPGA的项目发布的时候需要考虑项目工程加密的问题#xff0c;一方面防止自己的心血被盗#xff0c;另一方面也保护公司资产#xff0c;保护知… 文章目录 前言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支持三种长度AES128AES192AES256 。xilinx采用AES256使用密码块链接模式Cipher Block Chaining modeCBC modeAES有五种模式CBC是其中的一种。 AES256的加密原理是把明文按照256bit拆分成若干个明文块如果最后有数据不足256bit按照一定的方式来填充最后一个明文块。每一个明文块利用AES加密器和密钥加密成密文块。拼接所有的密文块成为最终的密文结果。从图中可以看出CBC模式在每一个明文块加密前会让明文块和一个值先做异或操作。IV作为初始化变量参与第一个明文块的异或后续的每一个明文块和它前一个明文块所加密出的密文块相异或。由下图可以看到实现AES256加密算法需要提供密钥、初始向量IV以及256bit-HMAC。HMAC是为了避免bit被篡改HMACHash-based Message Authentication Code基于散列函数的消息认证码是一种用于验证数据完整性和真实性的认证方法。它通过将数据与密钥进行散列处理生成固定长度的认证码然后将认证码与数据一起发送给接收方。接收方在接收到数据后使用相同的密钥和散列函数进行计算然后比较生成的认证码是否一致从而可以判断数据是否被篡改或伪造。HMAC认证可以有效防止数据在传输过程中被篡改或伪造以确保数据的完整性和真实性。
2.xilinx的AES方案
以上介绍的是AES加密算法本身的原理xilinx是如何利用这个加密算法的呢 Xilinx可通过JTAG接口将用户指定的密钥或者软件生成的这里包括上一节提到的三个密钥写入eFUSE寄存器采用熔断丝技术一生只能写一次且写且珍惜~同时Vivado工具负责根据用户指定的密钥对bit流进行 AES加密。FPGA在加载加密后的bit流时会根据用户设置的密钥通过片上的 AES解密逻辑电路进行 AES解密从而还原得到器件可以识别的未加密bit流从而被正确加载。具体的操作流程见下一节。 此外Xilinx提供了几个寄存器配置选项提供灵活的加密配置。如下图所示7系列查看UG470KU系列查看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界面点击保存或者ctrls配置才能生效保存后会发现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文件烧写到BB可以正常工作。 ②在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论坛。 欢迎点赞收藏✨打赏 欢迎评论区或私信指出错误️提出宝贵意见或疑问。