如何对xilinx FPGA进行bit文件加密

记录背景:最近在用Vivado评估国外一个公司所提供的ISE所建的工程时,因为我并无安装ISE工程,所以将其提供的全部v文件导入到Vivado中,对其进行编译。添加完以后成功创建顶层文件,但奇怪的是,除了顶层文件的v文件能够正常打开编辑外,其它sub层的v文件都没法正常打开编辑,双击打开后显示的是乱码,继续查找它们与顶层文件有什么不一样时,发现这些文件的属性之一——encrypted 都是“yes”状态。算法

这多少有点震惊我了,我以前只知道为了保护某文件的保密性时,通常都是生成网表(ncg?netlist?)文件以便提供他人使用,别人拿到的网表文件只是个空壳子,尽管调用就好,里面的代码对他来讲就是个空壳子。编程

为了知作别人是怎么作到v文件加密的(感受逼格挺高的),上网搜索一番,最后,最后,最后发现是须要Xilinx提供特定的工具才能够(而这一说法也获得了Xilinx的FAE的认证),而这个特定的工具通常只有Xilinx的高级客户才会拥有。好吧,继续挖掘的冲动忽然就猝死了。工具

--------------------------------------------------------------------------------------------------------------------------------------------开发工具

转自:https://blog.csdn.net/u010161493/article/details/79200527,若有侵犯,请告知删除,抱歉!加密

加密的优势

xilinx的V6和7全系列FPGA支持AES256加密,加密的好处: 
1,能够防止别人回读或者对你的程序进行逆向读取; 
2,防止更改烧写的bit文件。 
若是仅仅是防止回读,能够简单设置BITSTREAM.READBACK.SECURITY,其中LEVEL1是禁止回读,LEVEL2禁止回读和从新烧写FPGA。 
但若是对手的逆向能力很强,好比说在FPGA上电加载bit的时候用逻辑分析仪把用bit文件“读”出来,这个简单的设置确定就不行了。这时候可使用AES256加密。spa

AES算法简介:

AES即高级加密标准,是一种区块加密,固然也是对称加密。区块固定为128bit,秘钥为128,192或256bit。AES有5种加密模式,xliinx采用的是CBC模式。有一个128bit初始向量IV(startCBC),先利用初始向量IV与第一组数据进行异或后再进行加密运算生成C1。将C1做为初始向量与第二组数据进行异或后再进行加密运算生成C2。以此类推,当最后一组数据加密完毕后,将加密结果拼接为最终结果,C = C1C2C3……Cn。 
因此采用CBC模式的256AES须要两个东西,128bit-startCBC和256bit-AES key。.net

到这里还没完,完成了bit加密尚未认证,万一别人把烧进去bit文件篡改了怎么办?(从新烧了新的bit文件)。因此xilinx又提供了HMAC的认证,这个就跟校验差很少了,检查消息的完整性。3d

因此还须要提供256bit-HMAC,加上128bit-startCBC和256bit-AES key,一共是三个。这三个key能够本身生成,也能够指定空的 .nky文件,由软件随机生成好。 
for example 
··· 
Device xc7a35t; 
Key 0 0f2ec1178ae0d04c8c1431afe8266d08e799b01c5c486c2567f3621f47319aaf; 
Key StartCBC a6262d508c338eeab815340a7832436d; 
Key HMAC d82e72733a7bd7904c802d13db37187b8ad20b972ac163470c5a4d239bce6308; 
··· 
加密的AES key能够存到FPGA内部易失性的BBR或只能烧写一次(OTP)的eFUSE中。 
BBR须要电池供电,能够屡次编程。eFUSE不须要电池,但只能烧写一次。这里使用eFUSEblog

eFUSE寄存器

首先来看一下eFUSE寄存器: 
这里写图片描述 
一共有四个寄存器,分别是存放AES秘钥,用户信息,设备DNA和eFUSE控制。下面特别关注一下eFUSE控制寄存器:图片

这里写图片描述 
这里写图片描述 
一共有6个bit有用,各类设置的优缺点表里有详细说明,使用参考设置101100就好了。 
其中bit0很重要,万一置位了,AES的key又搞丢了,FPGA就变砖头了。

具体的操做步骤以下:

1生成key和加密bit

下面三个key能够本身生成填进去,也能够由软件随机生成。 
这里写图片描述
这里写图片描述
要打开edit device properties,先要打开sythesized design 或者implement design,而后在generate bitstream右键设置 
这里写图片描述
这里写图片描述

2下载eFUSE

这里写图片描述 
这里写图片描述 
这里写图片描述 
这里写图片描述

3烧写FPGA程序

这里写图片描述 
这里写图片描述 
program 
这里写图片描述 
这里写图片描述

4验证

很简单,读出mcs而后烧到另外一个FPGA里面去,能够看到不能工做。固然,也能够在前面eFUSE设置时选择只能加载AES加密的bit文件,这样换一个不加密的bit下进去也能验证。 
这里写图片描述 
这里写图片描述

 

**********************************************************************************************************************

Q1:在bitstreams中的edit device property选项中,没有encyption选项,因此没法设置efues。

A1:这应该是开发工具版本太低的缘由,升级到新版本试试。

相关文章
相关标签/搜索