新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 用单片机实现SRAM工艺FPGA的加密应用

用单片机实现SRAM工艺FPGA的加密应用

——
作者:刘晓明 谢明钦等 时间:2007-01-26 来源:《单片机及嵌入式系统应用》 收藏

  在现代电子系统设计中,由于可编程逻辑器件的卓越性能、灵活方便的可升级特性,而得到了广泛的应用。由于大规模高密度可编程逻辑器件多采用sram工艺,要求每次上电,对fpga器件进行重配置,这就使得可以通过监视配置的位数据流,进行克隆设计。因此,在关键、核心设备中,必须采用加密技术保护设计者的知识产权。

本文引用地址:https://www.eepw.com.cn/article/21585.htm

1 基于sram工艺fpga的保密性问题

  通常,采用sram工艺的fpga芯片的的配置方法主要有三种:由计算机通过下载电缆配置、用专用配置芯片(如altera公司的epcx系列芯片)配置、采用加微控制器的方法配置。第一种方法适合调试设计时要用,第二种和第三种在实际产品中使用较多。第二种方法的优点在于外围电路非常简单,体积较小,适用于不需要频繁升级的产品;第三种方法的优点在于成本较低,升级性能好。

  以上几种方法在系统加电时,都需要将配置的比特流数据按照确定的时序写入sram工艺的fpga。因此,采用一定的电路对配置fpga的数据引脚进行采样,即可得到配置数据流信息。利用记录下来的配置数据可对另一块fpga芯片进行配置,就实现了对fpga内部设计电路的克隆。典型
的克隆方法见图1。

2 对sram工艺fpga进行有效加密的方法

  由于sram工艺的fpga上电时的配置数据是可以被复制的,因此单独的一块fpga芯片是无法实现有效加密的。fpga芯片供应商对位数据流的定义是不公开的,因此无法通过外部的配置数据流信息推测内部电路。也就是说,通过对fpga配置引脚的数据进行采样可得到配置信息。但也不能知道内部电路结构。如果在配置完成后使fpga处于非工作状态,利用另外一块保密性较强的cpu产生密码验证信息与fpga进行通信,仅在验证成功的情况下使能fpga正常工作,则能有效地对设计进行加密。具体电路结构见图2。


  系统加电时,由单片机对sram工艺的fpga进行配置。配置完成时,fpga内部功能块的使能端为低,不能正常工作。此时,单片机判断到配置完成后,将aset信号置为高电平,使能fpga内的伪码发生电路工作;同时,单片机产生一个伪码验证信息,在fpga中将两路伪码进行比较,两者完全匹配时,fpga内部电路正常工作,否则不能正常工作。加密电路主要利用了配置完成后处于空闲状态的单片机和fpga内部分逻辑单元,没有增加硬件成本。

  由上述讨论可知,系统的加密能力主要由cpu的加密能力决定。这就要求cpu的加密算法要足够复杂,使得对验证信息的捕获与识别足够困难。最常见的加密算法就是产生两个伪随机序列发生器:一个位于sram工艺的fpga内;另一个位于cpu内。当两者匹配时,通过验斑点。对pn码有两点要求:一方面,要求伪随机序列的长度足够长,使得要捕获整个序列不太可能;另一方面,伪随机序列的线性复杂度要足够高,使推测伪随机序列的结构不易实现。

  通常采用的伪随机码发生器的反馈电路如图3所示。实际中,可采用级数较高的线性反馈移位寄存器来产生伪随机码。如采用40级线性移位寄存器产生的最大序列的周期为2?40=10?12。若将所有伪随机码截获并存储,就需要1000gb的存储空间;若码速率为50kbps,捕获时间将长达5555小时;当增加移位寄存器的级数时,所需的存储空间和捕获时间都会呈指数增长,以至于难以实现。采用较为简单的线性反馈电路被推测出反馈结构的可能性较大,因此实际的系统中,除了级数要较多之外,往往通过对多个线性移位寄存器产生的伪码进行特定运算产生长码,以增加所产生伪码的线性复杂度。

 3 fpga内的校验工作电路

  在此采用40级线性反馈移位寄存器来产生伪随机码,特征多项式为20000012000005(八进制表示)。其移位寄存器表示形式为:bin=b23?xor?b21xorb2xorb0,fpga内工作电路见图4。


在上电之后,单片机将图4中的电路配置在fpga中。配置完成后,单片机发送的aset信号由低电平跳变为高电平,使得fpga内的pn码产生电路开始工作,并于cpu发送过来的pn码进行比较。比较结果一致就使能user_design模块正常工作。其中pll_bitsys模块用来发生verify_pn的位同步时钟,采用微分锁相原理实现。各种参考资料都有较多介绍,在此不再详述。

  compare_pn模块完成对单片机发送的伪随机码和pnma_producer模块产生的伪随机码的比较:当两路相同,输出1,不同时输出0;若两路伪码完全匹配,则恒定输出1,使user_design电路正常工作,否则,输出为类似于伪码的信号,使user_design电路不能正常工作。

  4 fpga内的伪随机码产生电路

  pnma_producer模块和来产生伪随机码,采用移位寄存器实现,具体电路见图5。

lpm_shiftreg为移位寄存器模块。移位寄存器aset端为异步置位端,高电平有效,即aset为高时,将初值85置入移位寄存器内,lpmshiftreg模块的“direction”设置为“right”即移位方向为右移。q[39..0]表示40位移位寄存器的各个状态,shiftin为串行输入,shiftin为q0、q2、q21、q23四个状态异或运算的结果。

  系统加电时,单片机将aset置为低电平,经过一个非门,变成高电平使移位寄存器处于置位状态。在配置完成后,单片机将aset信号置为高电平,经非门使移位寄存器正常工作。

  利用移位寄存器电路产生伪随机码的电路非常简单,反馈逻辑也便于修改。   5 单片机验证伪码的程序

  在位寻址区(20h~2fh)定义了字节变量word1、word2、word3、word4、word5,用来存储移位寄存器的40个状态。其中q0对应word1.0,q1对应word1.1……q39对应word5.7。同时,在位寻址区定义了word6、word7、word8、word9,用来进行后面的反馈逻辑计算

  单片机一上电,首先将aset脚清零,同时,也将pnma脚清零,将初值55h作为移位寄存器的初始状态,接着完成fpga的上电配置工作。配置完成后,单片机检测来自fpga的外部中断confdone。如果配置完成,confdone为高电;否则,为低电平。在检测到confdone为高电平,即配置完成后,单片机将aset脚置为1,使能fpga内的伪码发生电路工作,单片机产生伪随机码的流程。配置完成后,首先将q0输出到pnma引脚,接着计算反馈逻辑输入,将参与反馈运算的几个状态运算结果存在中间变量mid_vary中。然后,对各个状态进行右移,为了提高运算效率,使用了带进位c的字节循环右移指令。移位完成后,将mid_vary存入q39,再将新的q0输出到pnma引脚,程序循环执行产生伪随机码。

  单片机核心源程序如下:

  clr aset;单片机上电后将aset位清0

  clr pnma

  mov word1,#55h

  mov word2,#0

  mov word3,#0

  mov word4,#0

  mov word5,#0;将55h作为移位寄存器的初值peizhi:

  ……;进行fpga的配置工作

  jb confdone,pnproduce;根据confdone判断配置是否完成

  ljmp peizhi;否则继续配置

  pnproduce:setb aset;配置完成后,将aset脚置1

  xmqloop:mov c,q0

  mov pnma,c;将q0输出到pnma引脚,作为pn码

  mov c,q0

  mov word6.0,c;用word6单元的0位来存q0的状态

  mov c,q2

  mov word7.0,c;用word7单元的0位来存q2的状态

  mov c,q21

  mov word8.0,c;用word8单元的0位来存q21的状态

  mov c,q23

  mov word9.0,c;用word9单元的0位来存q23的状态

  mov acc,word6

  xrl a,word7

  xrl a,word8

  xrl a,word9;通过异或指令,计算反馈逻辑

  mov c,acc.0;反馈逻辑为qin=q0

  ;xor q2 xor q21 xor q23

  mov mid_vary,c;将运算后的状态存到mid_vary中右移运算

  mov acc,word1

  rrc a;移位q7~q0

  mov word1,a;移位后,保存到word1单元中

  mov acc,word2

  rrc a;移位q15~q8

  mov word2,a;移位后,保存到word2单元中

  mov q7,c;将q8的值赋到q7

  mov acc,word3

  rrc a;移位q23~q16

  mov word3,a;移位后,保存到word3单元中

  mov q15,c;将q16的值赋到q15

  mov acc,word4

  rrc a;移位q31~q24

  mov word4,a;移位后,保存到word4单元中

  mov q23,c;将q24的值赋到q23

  mov acc,word5

  rrc a;移位q39~q32

  mov word5,a;移位后,保存到word5单元中

  mov q31,c;将q32的值赋到q31

  mov c,mid_vary;将前面反

  馈计算的值赋给q39

  mov q39,c

  ljmp xmaloop ;继续产生下一代pn码元

  6 其它加密方法介绍及比较

  对sram工艺的fpga进行加密,除了可以利用单片机实现外,还可以用e2prom工艺的cpld实现。与用单片机实现相比,利用cpld的优点在于可实现高速伪码,但要在硬件电路中增加一块cpld芯片,使整个硬件电路复杂化,增加了成本。本文提供的加密方法考虑到配置完成后单片机处于空闲状态,此时利用单片机进行加密,不需要增加任何电路成本,使得整个系统硬件结构十分简洁。本文提出采用长伪随机码来实现加密。如果采用其它的算法产生验证信息,并增加单片机与fpga工作时信息实时交互,使得获取验证信息的难度足够大,也可以达到类似的加密效果。




关键词: 存储器

评论


相关推荐

技术专区

关闭