找回密码
 注册
关于网站域名变更的通知
查看: 626|回复: 1
打印 上一主题 下一主题

基于SRAM工艺FPGA的保密性问题

[复制链接]
  • TA的每日心情
    开心
    2019-11-19 15:19
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2019-3-21 13:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    基于SRAM工艺FPGA的保密性问题

    8 O3 X9 O  B7 z+ m7 [; {
    在现代电子系统设计中,由于可编程逻辑器件的卓越性能、灵活方便的可升级特性,而得到了广泛的应用。

    . _* V$ u- Q9 C, r$ _* K7 `
    由于大规模高密度可编程逻辑器件多采用SRAM工艺,要求每次上电,对FPGA器件进行重配置,这就使得可以通过监视配置的位数据流,进行克隆设计。因此,在关键、核心设备中,必须采用加密技术保护设计者的知识产权。
    0 i2 @% z9 Z3 @; r5 o7 y# L
    1 基于SRAM工艺FPGA的保密性问题
    通常,采用 SRAM工艺的 FPGA芯片的的配置方法主要有三种:由计算机通过下载电缆配置、用专用配置芯片(如Altera公司的EPCX系列芯片)配置、采用存储器加微控制器的方法配置。第一种方法适合调试设计时要用,第二种和第三种在实际产品中使用较多。第二种方法的优点在于外围电路非常简单,体积较小,适用于不需要频繁升级的产品;第三种方法的优点在于成本较低,升级性能好。

    : W7 w- [3 g8 y* e4 Y
    以上几种方法在系统加电时,都需要将配置的比特流数据按照确定的时序写入SRAM工艺的FPGA。因此,采用一定的电路对配置FPGA的数据引脚进行采样,即可得到配置数据流信息。利用记录下来的配置数据可对另一块FPGA芯片进行配置,就实现了对FPGA内部设计电路的克隆。典型的克隆方法见图1。
    2 r9 ]" S( r6 B) o
    / h1 z4 x6 j5 D0 T) E- X1 B
    2 对SRAM工艺FPGA进行有效加密的方法
    由于SRAM工艺的FPGA上电时的配置数据是可以被复制的,因此单独的一块FPGA芯片是无法实现有效加密的。FPGA芯片供应商对位数据流的定义是不公开的,因此无法通过外部的配置数据流信息推测内部电路。也就是说,通过对FPGA配置引脚的数据进行采样可得到配置信息。但也不能知道内部电路结构。如果在配置完成后使FPGA处于非工作状态,利用另外一块保密性较强的 CPU产生密码验证信息与FPGA进行通信,仅在验证成功的情况下使能FPGA正常工作,则能有效地对设计进行加密。具体电路结构见图2。
    ; m' D3 q0 f* q
    1 R9 i% d1 h5 P, {) i
    系统加电时,由单片机对SRAM工艺的FPGA进行配置。配置完成时,FPGA内部功能块的使能端为低,不能正常工作。此时,单片机判断到配置完成后,将ASET信号置为高电平,使能FPGA内的伪码发生电路工作;同时,单片机产生一个伪码验证信息,在FPGA中将两路伪码进行比较,两者完全匹配时,FPGA内部电路正常工作,否则不能正常工作。加密电路主要利用了配置完成后处于空闲状态的单片机和FPGA内部分逻辑单元,没有增加硬件成本。

    " q) L7 u+ U/ o
    由上述讨论可知,系统的加密能力主要由CPU的加密能力决定。这就要求CPU的加密算法要足够复杂,使得对验证信息的捕获与识别足够困难。最常见的加密算法就是产生两个伪随机序列发生器:一个位于SRAM工艺的FPGA内;另一个位于CPU内。当两者匹配时,通过验斑点。对PN码有两点要求:一方面,要求伪随机序列的长度足够长,使得要捕获整个序列不太可能;另一方面,伪随机序列的线性复杂度要足够高,使推测伪随机序列的结构不易实现。
    & p2 R2 B4 g9 d! F. s5 D! ?
    通常采用的伪随机码发生器的反馈电路如图3所示。实际中,可采用级数较高的线性反馈移位寄存器来产生伪随机码。如采用40级线性移位寄存器产生的最大序列的周期为2?40=10?12。若将所有伪随机码截获并存储,就需要1000Gb的存储空间;若码速率为50Kbps,捕获时间将长达5555小时;当增加移位寄存器的级数时,所需的存储空间和捕获时间都会呈指数增长,以至于难以实现。采用较为简单的线性反馈电路被推测出反馈结构的可能性较大,因此实际的系统中,除了级数要较多之外,往往通过对多个线性移位寄存器产生的伪码进行特定运算产生长码,以增加所产生伪码的线性复杂度。
    $ }; O; ]0 e3 a' ]+ O* v; w" f

    0 u, K$ A& [$ H. ]
    3 FPGA内的校验工作电路
    在此采用40级线性反馈移位寄存器来产生伪随机码,特征多项式为20000012000005(八进制表示)。其移位寄存器表示形式为:Bin=B23?XOR?B21XORB2XORB0,FPGA内工作电路见图4。

    ' `+ b* C+ m% Q. s; L/ k
    - Y. I/ f9 `/ y+ ]+ U" d
    在上电之后,单片机将图4中的电路配置在FPGA中。配置完成后,单片机发送的ASET信号由低电平跳变为高电平,使得FPGA内的PN码产生电路开始工作,并于CPU发送过来的PN码进行比较。比较结果一致就使能USER_DESIGN模块正常工作。其中PLL_BITSYS模块用来发生VERIFY_PN的位同步时钟,采用微分锁相原理实现。各种参考资料都有较多介绍,在此不再详述。

    ! C- B& d& S( ~2 E+ ?1 C! M
    COMPARE_PN模块完成对单片机发送的伪随机码和PNMA_PRODUCER模块产生的伪随机码的比较:当两路相同,输出1,不同时输出0;若两路伪码完全匹配,则恒定输出1,使USER_DESIGN电路正常工作,否则,输出为类似于伪码的信号,使USER_DESIGN电路不能正常工作。
    2 g; Y( K# X, o( g
    4 FPGA内的伪随机码产生电路
    PNMA_PRODUCER模块和来产生伪随机码 ,采用移位寄存器实现,具体电路见图5。
    LPM_SHIFTREG为移位寄存器模块。移位寄存器ASET端为异步置位端,高电平有效,即ASET为高时,将初值85置入移位寄存器内,LPMSHIFTREG模块的“DIRECTION”设置为“RIGHT”即移位方向为右移。Q[39..0]表示40位移位寄存器的各个状态,SHIFTIN为串行输入,SHIFTIN为Q0、Q2、Q21、Q23四个状态异或运算的结果。

    , P( t0 V5 m4 n  ~5 \
    - O% o( D4 I% M5 P' X
    系统加电时,单片机将ASET置为低电平,经过一个非门,变成高电平使移位寄存器处于置位状态。在配置完成后,单片机将ASET信号置为高电平,经非门使移位寄存器正常工作。利用移位寄存器电路产生伪随机码的电路非常简单,反馈逻辑也便于修改。
    ) r  `8 [( d. E/ U. e1 R9 W1 w* A/ I$ @
    5 单片机验证伪码的程序
    在位寻址区(20H~2FH)定义了字节变量WORD1、WORD2、WORD3、WORD4、WORD5,用来存储移位寄存器的40个状态。其中Q0对应WORD1.0,Q1对应WORD1.1……Q39对应WORD5.7。同时,在位寻址区定义了WORD6、WORD7、WORD8、WORD9,用来进行后面的反馈逻辑计算。
    & B$ n7 [. P) c. I6 [' Y3 N6 E  A
    单片机一上电,首先将ASET脚清零,同时,也将PNMA脚清零,将初值55H作为移位寄存器的初始状态,接着完成FPGA的上电配置工作。配置完成后,单片机检测来自FPGA的外部中断CONFDONE。如果配置完成,CONFDONE为高电;否则,为低电平。在检测到CONFDONE为高电平,即配置完成后,单片机将ASET脚置为1,使能FPGA内的伪码发生电路工作,单片机产生伪随机码的流程。配置完成后,首先将Q0输出到PNMA引脚,接着计算反馈逻辑输入,将参与反馈运算的几个状态运算结果存在中间变量MID_VARY中。然后,对各个状态进行右移,为了提高运算效率,使用了带进位C的字节循环右移指令。移位完成后,将MID_VARY存入Q39,再将新的Q0输出到PNMA引脚,程序循环执行产生伪随机码。
    4 a' }) s3 |$ q( o7 ^9 j
    单片机核心源程序如下:
    CLR ASET;单片机上电后将ASET位清0: D* e+ T2 L% O: F4 d3 ^/ e! c) e
    CLR PNMA7 Q; k, u. x" `5 E9 @- L
    MOV WORD1,#55h! A/ }2 d' E$ m; c
    MOV WORD2,#0; p4 R4 x2 y7 d1 n0 m0 L" y
    MOV WORD3,#00 ?" A/ c7 H( {8 s3 O* y/ J
    MOV WORD4,#04 l0 o, k# y5 t6 x" E
    MOV WORD5,#0;将55H作为移位寄存器的初值PEIZHI:
    9 N2 A1 ~$ f8 V  w; ~5 |+ @……;进行FPGA的配置工作
    1 }+ {7 J2 I- ]JB CONFDONE,PNPRODUCE;根据CONFDONE判断配置是否完成) z' w& Y+ t4 X, N  X3 Z8 D; Z5 h
    LJMP PEIZHI;否则继续配置
    2 I9 F! e0 B3 G+ G: D7 y& bPNPRODUCE:SETB ASET;配置完成后,将ASET脚置1
    ( A0 c6 ^2 j1 M) Y( U: HXMQLOOP:MOV C,Q0; u& E5 j) z1 Z4 b6 g" O0 J! c4 A
    MOV PNMA,C;将Q0输出到PNMA引脚,作为PN码; F' I7 E- a0 U; g( z7 H. k3 H
    MOV C,Q0
    + w, m: m4 h$ B* J# k! k+ H3 o9 TMOV WORD6.0,C;用WORD6单元的0位来存Q0的状态
    8 V; o3 C  T5 ?MOV C,Q2
    3 o- o+ I& e$ yMOV WORD7.0,C;用WORD7单元的0位来存Q2的状态
    ; MOV C,Q21
    , e! U& N$ P9 Q- b2 UMOV WORD8.0,C;用WORD8单元的0位来存Q21的状态
    ' _8 X! E' R  oMOV C,Q23
    / H, ]$ F, ]" T  B& D$ XMOV WORD9.0,C;用WORD9单元的0位来存Q23的状态
    4 {5 @* C2 O- Q0 E8 c- KMOV ACC,WORD61 P! M* @2 r6 j. h) T- f' r
    XRL A,WORD75 @. b& r. O! ^* l. {
    XRL A,WORD8' R. v0 @0 D" ~8 M
    XRL A,WORD9;通过异或指令,计算反馈逻辑% Q( P) v; J0 N+ }
    MOV C,ACC.0;反馈逻辑为Qin=Q0;
    & P/ x3 J: x! C1 a' t( L- x9 A9 pXOR Q2 XOR Q21 XOR Q236 k5 z. M, |4 P, n( Z* N/ y
    MOV MID_VARY,C;将运算后的状态存到MID_VARY中右移运算" g& m& |' a/ @6 a+ l/ h8 n& o
    MOV ACC,WORD1
    4 f& `3 U* U7 _, `RRC A;移位Q7~Q0/ z1 b1 Y) W$ T+ M4 d9 y
    MOV WORD1,A;移位后,保存到WORD1单元中
    ; N  a* Y: m7 [8 B  A8 c3 g/ S0 mMOV ACC,WORD2! N2 i+ S1 Z/ M# b
    RRC A;移位Q15~Q8  S; A. C3 Y; l' D) Q/ u
    MOV WORD2,A;移位后,保存到WORD2单元中3 o2 J% Y1 M* V: R6 q
    MOV Q7,C;将Q8的值赋到Q7
    0 V  [8 i3 U% a8 p5 H- OMOV ACC,WORD3
    * p# y2 m* q1 SRRC A;移位Q23~Q166 B& p; y  H* g' p# N+ ^1 U9 H
    MOV WORD3,A;移位后,保存到WORD3单元中
    5 q8 U* F8 ^4 G8 A# v$ pMOV Q15,C;将Q16的值赋到Q15
    % B; q0 i( |3 K2 a! J4 ]MOV ACC,WORD4
    / s8 y3 ]0 J( `5 y/ z1 JRRC A;移位Q31~Q24
    & Y. f1 n: L1 `! L( _MOV WORD4,A;移位后,保存到WORD4单元中% ^" j; H+ m1 `' ^9 l5 H; t
    MOV Q23,C;将Q24的值赋到Q23
      t- P* A) k% x0 ~, @MOV ACC,WORD5
    4 M5 j6 _! S* c1 N0 aRRC A;移位Q39~Q32  i, s0 ]$ V$ v$ k1 K
    MOV WORD5,A;移位后,保存到WORD5单元中' Y! O; f2 N  t
    MOV Q31,C;将Q32的值赋到Q31
    3 @4 o/ S9 R, J, N9 E! D: Y8 wMOV C,MID_VARY;将前面反, Y( k6 W( U& h# y7 H* y/ B
    馈计算的值赋给Q39, s3 N1 @* v& C* x
    MOV Q39,C
    5 ^6 B4 f4 E! Y0 q! ]/ w7 W/ W1 ~LJMP XMALOOP ;继续产生下一代PN码元

    " y4 K$ [8 K( J: Y6 其它加密方法介绍及比较
    对SRAM工艺的FPGA进行加密,除了可以利用单片机实现外,还可以用E2PROM工艺的cpld实现。与用单片机实现相比,利用CPLD的优点在于可实现高速伪码,但要在硬件电路中增加一块CPLD芯片,使整个硬件电路复杂化,增加了成本。本文提供的加密方法考虑到配置完成后单片机处于空闲状态,此时利用单片机进行加密,不需要增加任何电路成本,使得整个系统硬件结构十分简洁。
    3 x' k2 d$ N$ v- k  S

    该用户从未签到

    2#
    发表于 2019-3-21 17:50 | 只看该作者
    一定要做好保密
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-7-29 10:35 , Processed in 0.125000 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表