Virtex5 AES加密方法
介绍一下xilinx V5 AES加密的方法;
右键 Processes下面的Generate Programming File,
如下设置,
注意 AES Key需要设置256位长的字符串;
然后直接编译;
生成两个下载文件 xx.nky 和 xx.bit 文件;
nky文件,即 encryption key file,类似数字验证码,保存在FPGA中;
此时生成的bit文件,与普通的bit文件不一样,其中包含了nky的信息;
通过iMPACT,下载到FPGA中;如图
下载nky时,FPGA的所有内存自动清除,下载完成后,nky的信息不能被读出,同时如果要重新下载一个nky文件,那么FPGA必须全部清除;
下载完nky后,再下载含有nky信息的bit文件,配置完成后,将无法通过JTAG或其它方法从FPGA中读取配置信息,从而达到加密保护的作用;
1>.当FPGA内部含有一个encryption key时,仍可以下载其它non-encrypted bitstream文件;
2>.NKY始终不能从FPGA中读出,但不含有NKY的bit文件可以读回,如果在BitGen Security Setting有设置的话;
3>.此加密方法,与下载方式无关,即不论是通过串行,JTAG,还是X8的并行方式,下载到FPGA中或是PROM,或ACE和其它flash中,都不影响加密保护;但这种方法不支持X16,X32总线的并行模式;
4>.NKY的信息是保存在FPGA中,完全掉电会丢失,但只要V(BATT)或者是V(CCAUX)有电时,key的内容就不会丢失,所以加密的硬件,外部需要电池;
5>.当key与含有加密信息的bit文件不匹配时,FPGA配置会失败,pin_INIT_B和pin_DONE会持续为低;
1>.设置AES密码,编译产生led1.nky和led1.bit;
下载led1.nky,再下led1.bit,
程序运行正常;
由led1.bit生成led1.mcs文件固化到XCF中,断电再上电,同时有电池为V(BATT)管脚供电,
程序运行正常;
断电的同时,将电池取出,再上电,
程序不运行;
再将led1.nky下载到FPGA中,
2>.重新设置AES密码,编译产生led2.nky和led2.bit;
下载led2.nky,再下载led2.bit,
程序运行正常;
下载led1.nky,再下载led2.bit,
下载失败;
3>.去掉encryption属性,重新编译,得到文件led.bit;
下载led1.nky,再下载led.bit,
程序运行正常;
由led.bit生成led.mcs文件固化到XCF中,断电再上电,或是断电取出电池再上电,
程序运行正常;
首先引用文档中的一段话:
The encryption key memory cells are volatile and must receive continuous power to retain
their contents.
At less than a 100 nA load, the endurance of the battery should be limited only by its shelf life.
VBATT does not draw any current and can be removed while VCCAUX is applied. VBATT cannot be used for any purpose other than retaining the encryption keys when VCCAUX is removed.
就是说管脚Vbatt在Vccaux上电后,将不再取电,那么电池这条路就断了,不再供电;
V5板卡中设计如下图,
我想本意有两点,
1>.在断电的情况下,由电池来供电;板卡上电后,由VCC3_3来供电;
2>.是为了给电池充电;
但我觉得存在下面的问题,
a. 关于供电切换的问题;
如果要实现切换,那么这个电路少一个二极管,会导致上面3V的电流回灌到电池中.
参考主板上RTC电路,如下图
当主板上3VSB上来时,上面的二极管导通,那么下面的二极管就会截止,电池的通路就会截断,不会再给RTC供电,而3VSB的电流也不会回灌到电池里;
当3VSB断电后,下面的二极管会通,这时由电池供电,同时也上面的二极管也防止电流回灌;
另外,其实去掉D15,R206这些电路,保密电路仍正常工作;
因为上电后就,FPGA就不从Vbatt这个管脚取电了,所以不需要外部来接3.3V给这个脚供电,而断电后,自然由电池来供电;已做实验验证;
b.关于钮扣锂电池充电;
查了一下,一般的钮扣电池都不能充电,起码用在这个板卡上的电池是不能充电的,这样的电池要充电的话, 得根据电池的充放电曲线,设计相关的充放电电路,(引用一下,锂电池的充电一般需要一个充电电路和电池保护电路,充电电路按先恒流后恒压的步骤充电,保护电路防止电池过充过放,都有专门的芯片。常用的有Richteck的,Linear的,理光的,国内中芯微的等等).就算是能充电的电池,也不能这么直接接过去,会损害电池;
本人对该电路也不是很懂…理解有错的话,还望大家不吝赐教.
6.其它
1>.加密以及芯片配置的详细信息,请参考xilinx文档 ug191 p34;
2>.另附ISE下encryption options说明;
文章评论(0条评论)
登录后参与讨论