【Vivado那些事儿】AMD-XILINX 7系列比特流加密

前提:加密有风险,操作需谨慎

前言

在许多项目中,经过漫长的等待,我们的 FPGA 设计终于可以投入现场部署了。前期的资金的投入及知识产权的保护,我们需要对现场部署的 FPGA 进行比特流保护以防止逆向工程和未经授权的重复使用。

为了保护我们的 FPGA 设计,AMD FPGA 支持高级加密标准 (AES)。这提供了高级别的安全性,因为比特流使用 256 位 AES 密钥加密,并在器件编程时在 FPGA 内部解码。用于解密的 AES 密钥存储在 FPGA 内部的一次性可编程电子熔丝 (eFuse) 或电池供电的 RAM (BBRAM) 中。在本篇博文中,我们将使用 Arty S7-50(便宜) 演示如何将 AES 密钥编程到 BBRAM 中。

  • BBRAM区域,是一个片内RAM区域。当VCCBATT_0掉电,BBRAM数据将会丢失,AES密钥也将随之丢失。VCCBATT_0该引脚可接一个1.0~1.89V范围电压的电池。

  • eFuse区域,是一个一次性写入区域,可永久存储密钥,该方法无需电池

在深入介绍具体步骤之前,我想重申一下,开发安全可靠的系统是一个复杂的课题。例如,最好的安全性来自于使用真正随机的密钥,因此我建议除了阅读本博客外,还请阅读XAPP1239(https://docs.xilinx.com/v/u/en-US/xapp1239-fpga-bitstream-encryption)和XAPP1084(https://docs.xilinx.com/v/u/en-US/xapp1084_tamp_resist_dsgns) 。

首先创建一个简单的 MicroBlaze 设计,它每秒通过串口无限输出一个递增计数。该 ELF 文件已与bit合并,一旦 FPGA 配置完成,就会开始输出计数。

要加密比特流,我们需要打开已实现的设计,并在比特流生成选项中设置我们希望加密的比特流。此时,可以根据需要输入加密密钥信息(我强烈建议这样做)。如果此项留空,Vivado 将生成必要的信息,但安全性较低。如果 Vivado 生成了密钥,它将在实现目录中生成一个 *.nky 文件。可以添加此文件,以便在将来运行设计时使用。当然,也可以使用相同的格式来定义生成的密钥。

Device xc7s50;
Key 0 25e2e0380c53f3a3f068baa326733a1e6f5e589a7185339fd73a922e218de87f;
Key StartCBC 9af2391ad0118907e5ba7d4b16a6c3d0;
Key HMAC 37fe8c2b9ab49da759b7cad0687d05b20c2b1a5f09f74441c2201ebfdecb0db3;

保存这些选项后将会向目标 XDC 文件中添加如下约束。

set_property BITSTREAM.ENCRYPTION.ENCRYPT YES [current_design]
set_property BITSTREAM.ENCRYPTION.KEYFILE {C:\hdl_clients\s7_enc\s7_enc.runs\impl_1\design_1_wrapper.nky} [current_design]

将 FPGA 连接到硬件管理器后,就可以对 BBRAM 或 eFuse 密钥进行编程。

在此示例中,我们将选择程序 BBR,这将打开一个对话框,使我们能够对 NKY 文件进行编程。

选择 NKY 文件后,AES 密钥将显示,以便确认是否加载了正确的密钥。关闭对话框后,密钥将被编程,TCL 控制台将显示此操作的成功或失败。

我们现在可以使用已用相同密钥加密的 JTAG 比特流对设计进行编程。

随着新配置的加载,这、将重新启动从 0 开始运行的 MicroBlaze 中的程序。

如果我们关闭电源或重置 BBR 密钥,然后尝试对加密位流进行编程,我们将发现编程未完成,因为 FPGA 中没有存储解密密钥。

使用此流程,可以开始保护已部署的系统。如果使用 eFuse 编程加密密钥,请务必遵守 XAPP1239 中规定的规则,因为 AES 密钥和相关寄存器必须同时进行编程。

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

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

相关文章

RK3588 安卓adb操作

adb(Android Debug Bridge)是一个用于与安卓设备进行通信和控制的工具。adb可以通过USB或无线网络连接安卓设备,执行各种命令,如安装和卸载应用,传输文件,查看日志,运行shell命令等。adb是安卓开…

【华为机试】70. 爬楼梯

文章目录70. 爬楼梯描述示例 1示例 2提示解题思路核心分析问题建模算法实现方法1:动态规划(标准解法)方法2:空间优化动态规划(最优解)方法3:递归 记忆化方法4:数学公式(…

山东大学软件学院面向对象期末复习

面向对象 文章目录面向对象04 类封装接口 抽象类05 消息,实例化,静态变量方法消息动/静态类型语言对象创建类及实例具有下面特征对象数组的创建静态数据成员构造函数06_0 继承继承是向下传递的JAVA为什么不支持多重继承继承的形式特殊化继承替换原则规范…

让 Windows 用上 macOS 的系统下载与保姆级使用教程

模拟苹果桌面软件下载:https://xpan.com.cn/s/8NFAGT 还记得 Windows 11刚发布时,很多人就说“果里果气"的,但界面确实做的漂亮。 不知道现在有多少小伙伴正用着macOS,不过我敢确定,喜欢macOS的人绝对不少&#…

嵌入式硬件篇---继电器

继电器是一种通过小电流控制大电流的电磁开关,广泛应用于自动化控制、电力系统和电子设备中。以下从工作原理、应用场景和电路特点三个方面详细介绍:一、工作原理继电器本质是电磁控制的机械式开关,核心部件包括:线圈(…

鸿蒙网络编程系列58-仓颉版TLS数字证书查看及验签示例

1. TLS数字证书验签简介 数字证书的签名验证是网络编程中一个重要的功能,它保证了数字证书是由可信任的签发方签署的,在此基础上,我们才可以信任该证书,进而信任基于该证书建立的安全通道,所以说,数字证书…

【React Native】安装配置 Expo Router

过去开发React Native,所使用的路由都是React Navigation。但是这个东西使用起来非常困难,配置无比繁琐。Expo,为了简化操作,就基于React Navigation开发了Expo Router。 Expo Router用起来就要简单的多了,配置也相对…

美国VPS服务器Linux内核参数调优的实践与验证

美国vps服务器Linux内核参数调优的实践与验证在云计算和虚拟化技术日益普及的今天,美国VPS服务器因其稳定的网络环境和优越的性价比,成为众多企业和开发者的首选。Linux内核参数的默认配置往往无法充分发挥VPS的性能潜力。本文将深入探讨美国VPS服务器上…

在Vscode中使用Kimi K2模型:实践指南,三分钟生成个小游戏

Kimi K2是一款基于多专家(MoE)架构的强大代码与代理能力基础模型。本文将通过在VS Code及其扩展Cline和RooCode中的实际应用,详细说明如何使用Kimi K2-0711-preview模型。不得不说kimi这次的K2模型就是强大,在vscode中配置使用体验…

基于SpringBoot+Uniapp球场预约小程序(腾讯地图API、Echarts图形化分析、二维码识别)

“ 🎈系统亮点:腾讯地图API、Echarts图形化分析、二维码识别”01系统开发工具与环境搭建前后端分离架构 项目架构:B/S架构 运行环境:win10/win11、jdk17前端: 技术:框架Vue.js;UI库:…

windows + phpstorm 2024 + phpstudy 8 + php7.3 + thinkphp6 配置xdebug调试

windows phpstorm 2024 phpstudy 8 php7.3 thinkphp6 配置xdebug调试 下载配置phpstudyPhp.ini配置phpstorm配置xdebug运行一会就停了配置虚拟机 0localhost_90.conf 配置php.ini配置下载 在下面地址下载合适的xdebug 放到对应的php https://xdebug.org/wizard 配置phpst…

python的pywebview库结合Flask和waitress开发桌面应用程序简介

pywebview的用途与特点 用途 pywebview是一个轻量级Python库,用于创建桌面应用程序(GUI)。它通过嵌入Web浏览器组件(如Windows的Edge/IE、macOS的WebKit、Linux的GTK WebKit),允许开发者使用HTML/CSS/Java…

C#通过HslCommunication连接西门子PLC1200,并防止数据跳动的通用方法

textEdit30.Text ReadValue<int>(() > plc.ReadInt32("DB57.DBD16"), ref _last_num).ToString();// 通用读取方法&#xff08;支持所有值类型&#xff09;private T ReadValue<T>(Func<OperateResult<T>> readFunc, ref T lastValue) w…

Linux切换到Jenkins用户解决Jenkins Host key verification failed

以root或sudo user身份, 切换到jenkins用户 su -s /bin/bash jenkins前往jenkins的home目录 cd /var/lib/jenkins/查看.ssh下是否已经有known_hosts, 有的话, 是什么内容, 正常情况下, 这时候是没有对应IP记录的 cd .ssh/ more known_hosts访问一下对应IP, 记录公钥 ssh 192.16…

7.17 Java基础 | 集合框架(下)

接上文&#xff1a; 7.16 Java基础 | 集合框架&#xff08;上&#xff09;-CSDN博客 【1】Map集合 Map 集合是一种能存储键值对的数据结构。它的主要功能是依据键&#xff08;Key&#xff09;来快速查找对应的值&#xff08;Value&#xff09; 1、声明 Map<Integer,Integer…

【LeetCode刷题指南】--反转链表,链表的中间结点,合并两个有序链表

&#x1f525;个人主页&#xff1a;草莓熊Lotso &#x1f3ac;作者简介&#xff1a;C研发方向学习者 &#x1f4d6;个人专栏&#xff1a; 《C语言》 《数据结构与算法》《C语言刷题集》《Leetcode刷题指南》 ⭐️人生格言&#xff1a;生活是默默的坚持&#xff0c;毅力是永久的…

ubuntu上面的wps2019格式很乱在复制粘贴的时候

问题&#xff1a;在复制内容到 Ubuntu 上的 WPS 2019 出现如下问题&#xff1a;列表符号、换行和缩进错乱&#xff0c;表现为每行前的点符号&#xff08;•&#xff09;变成不规则对齐或空格间距不统一。原因分析✅ 主要原因是&#xff1a;WPS 2019 在 Ubuntu 上的兼容性较差&a…

bws-rs:Rust 编写的 S3 协议网关框架,支持灵活后端接入

bws-rs&#xff1a;Rust 编写的 S3 协议网关框架&#xff0c;支持灵活后端接入 bws-rs介绍 bws-rs 是一个用 Rust 编写的轻量级 S3 协议服务端网关框架&#xff0c;旨在帮助开发者快速构建兼容 AWS S3 协议 的对象存储服务。该框架支持 S3 V4 签名校验&#xff0c;集成 Axum 作…

黑马点评系列问题之p70postman报错“服务器异常”

问题描述&#xff1a;在做这个位置的时候报错报错如下控制台报错如下解决根据控制台的报错来看&#xff0c;是​Redis模板未注入导致的空指针异常经过排查&#xff0c;原因是这里少了个Resource

Docker搭建Elasticsearch和Kibana

1.安装docker&#xff0c;确保正常启动 2.按步骤操作&#xff0c;这里的es是单节点的&#xff0c;如需多节点&#xff0c;需安装docker-compose进行yml文件的编写对容器进行编排 #docker拉镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.11.2 docker pul…