|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
随着FPGA的容量、性能以及可靠性的提高及其在消费电子、汽车电子等领域的大规模应用,FPGA设计的安全性问题越来越引起人们的关注。
+ [- P) i3 P1 b* V相比其他工艺FPGA而言,处于主流地位的SRAM工艺FPGA有一些优势,但是由于SRAM的易失性,掉电以后芯片中的配置信息将丢失,所以每次系统上电时都需要重新配置。这就使得剽窃者可以通过对FPGA的配置数据引脚进行采样,得到该FPGA的配置数据流,实现对FPGA内部设计电路的克隆。为了保护设计者的知识产权以及推动SRAM工艺FPGA更大规模的应用,产业界和学术界从加密算法的角度对SRAM工艺FPGA的设计安全性提出了多种解决方案 [1~2]。$ f0 S/ e$ x |; D, [ j2 A
异步电路的竞争和险象问题所导致的不确定性,是数字电路设计中令人头疼的问题。但是,如果把这种不确定性应用在本安全方案中,同样可以困扰剽窃者,从而更有效地保护设计。为此,本文提出了利用异步采样电路的不确定性提高SRAM工艺FPGA设计安全性的方法,以提高系统的安全性。
5 ]$ A/ W: V8 f# x3 c1 方案简介
2 u, Q0 N3 p) y) b; u; @) H1.1 设计方案的指导思想" n, L1 O* q) N2 u3 K' e
(1) cpld是难以用反向工程等物理手段进行破解的,而且用这些方法破解CPLD的成本和设计的开发成本相近。Xilinx公司声称其CoolRunner- II系列CPLD的安全性完全可以达到ASIC相当的等级[3]。并且,CPLD也可以用抗攻击性强的小规模反熔丝FPGA来代替[4]。2 X* X1 S* I. U3 I) S8 h
(2) CPLD中触发器资源较少,因此应尽量降低CPLD中的电路复杂度。- j( `/ e+ v: G0 s8 M7 r; U
本方案借助了跳频的理念,在FPGA和CPLD中分别保存两个密钥表,在一开始同步之后,FPGA中的密钥选择状态机根据异步采样电路输出的状态跳转指示信号进行跳转。同时CPLD接收FPGA送来的状态跳转信号,其中的密钥状态机也进行相应的跳转,并将密钥传回给FPGA。在没有差错的情况下,这两个状态机将一致地跳转。FPGA通过对CPLD送来的密钥进行确认来验证CPLD的合法性:检验是否和自己的密钥状态机所选择的密钥一致,如果一致,则说明所连接的CPLD为合法的CPLD,FPGA电路正常工作;否则认为所连接的CPLD为非法,停止FPGA电路工作。由以上指导思想设计的系统框图如图1所示。* ?; V" c% F6 C4 D8 O; s+ z
; m6 B( m$ {5 a3 ?( Z/ }& ~$ h, M7 G5 p* D
2 t8 s6 n- r4 F! }2 m3 F7 h
此外,CPLD向FPGA传递的密钥先利用M序列进行加密,这样使得对系统的破解首先需要对M序列加密算法进行破解,从而进一步提高了系统的抗攻击能力。
9 X3 L0 O9 a0 v% n" R1.2 异步采样电路0 u8 o& w$ D3 }
温度的变化、电压的波动等因素都会使晶振所输出的时钟发生抖动。因此,用一个时钟去采样另一个时钟驱动的信号,其采样值是不可预测的。异步采样电路的机理就是利用两个时钟之间相位和频率的不确定性,产生一个不可预测的序列。单比特异步采样电路的示意图如图2所示。图中有4个触发器(FF1、FF2、FF3、 FF4)和两个时钟(clk、clks)。FF1、FF2由clks信号驱动,其中FF1是用于防止亚稳态出现的触发器,它的输入信号同步于clk的信号,FF2的输出信号则同步于clks的信号。FF3、FF4由clk信号驱动,其中FF3的作用和FF1类似,用于防止亚稳态的出现,它的输入信号同步于clks的信号;FF4的输出信号则同步于clk的信号。通过上述处理后,FF4的输出产生了一个随机序列,这个随机序列不同于同步电路产生的伪随机序列,其状态的转移同温度、电压等外界因素有关,是一个完全不可预测的随机序列。此外,异步采样电路对两个时钟之间的相位敏感,所以在电路板每次上电时所生成的序列也是不同的。0 O, m+ r" c* ~' C( s
1 v2 Y0 r5 P& O+ H7 ^! q3 e8 z
8 u# C B3 B+ v" c& S7 I; v# n
异步采样模块的VHDL实现如下:
! d- l! x# O! Z2 x--this process is triggered by clks- d" _- N3 T. |" {' c- x
process(rst, clks)0 ]. b! e* V% j9 |- P; v s
begin8 K# d5 N: v1 N( Y
if rst=‘0’ then
" s0 b3 [4 u6 [1 H8 }8 G% i% mff1 <= (others=>‘0’);
" f% j& z9 V( V7 k! P4 @. Z1 Y7 uff2 <= (others=>‘0’);7 @7 Q; U2 k X+ [& O" `
elsif clks‘event and clks=‘1’ then
9 P* i$ e$ T+ ]' G$ E0 M' fff1 <= din; --din is the signal triggered by clk" t' z- g$ r0 L
ff2 <= ff1;
L0 r% y4 h4 e v! j* b# wend if;
4 w# B- ]& f( O' o/ Send process;
- f2 t$ B- h1 p6 X% `+ G-- this process is triggered by clk
& v4 f1 D5 A$ {3 y6 Pprocess(rst, clk)
) _- A: w' C2 M$ Lbegin
z& X! G# n a8 e+ M( h/ t! \" K8 Uif rst=‘0’ then
' F+ a. ^ t* Off3 <= (others=>‘0’);
, K1 q0 J3 h/ i8 ^" W- }* U4 gff4 <= (others=>‘0’);) G2 C1 W7 c, R% V7 t* t* h9 P
elsif clk′event and clk=‘1’ then
1 }1 {, M0 U+ C9 b. Wff3 <= ff2;; t4 f# N; N( Y0 L
ff4 <= ff3;! _: z" _: p, Q" {$ O" }! B# N
end if;
5 Q/ D z+ p: W7 Yend process;! Q( E& x5 j: w9 {$ Z/ }
dout <= ff4; -- dout is output random signal
( h. A7 z* h8 [+ i' @4 X7 q+ t其中:din为同步于clk的输入序列,dout为输出的随机序列。3 T) w/ f/ i. M8 T0 v5 O
将本文所设计的方法应用到Altera公司的Cyclone[5]系列FPGA中,利用Quartus II中的SignalTapII Logical Analyzer工具,两次采样复位后FPGA内异步采样电路的输入输出信号,得到如图3所示的波形,其中两个时钟:clk为2.000MHz,clks 为2.048MHz。观察系统复位后异步采样电路输出序列的随机性可以发现,每次将系统复位后,采用同步电路设计的伪随机序列发生器产生相同的伪随机序列 (din);但是,将这个伪随机序列(din)输入异步采样电路后,在输出(dout)却得到不同的随机序列。这说明同一块电路板每次上电时都将生成不同的随机序列。, ^" a6 n$ ]2 _7 M0 h( D- D
" h$ D! M+ h( x( T D# O
6 G- n6 M9 i: z0 ^( { h
' F' @: G, d( X8 |0 w9 S. M7 V1.3 密钥选择状态机
' g1 I; G" p, z% ]& f0 K" ZFPGA 和CPLD中各有一个完全相同的密钥选择状态机,该状态机根据异步采样电路输出的随机序列进行跳转,其跳转规则可以自定义。在本文设计的系统中,密钥表中存放有8个32位长的密钥,密钥状态机共有8个状态,记为状态0~状态7,每个状态分别对应一个密钥,记为密钥0~密钥7。
& U# d- G5 |# t9 ]. H9 u假设当前状态为状态i,异步采样电路的输出为j,其中i、j∈N,且0≤i, j≤7。那么可以采用如下简单的跳转规则:当采样电路的输出为0时,跳转到状态0;否则,跳转到状态(i+j)mod8。为了提高系统的安全性,也可以采用各种无序的跳转规则,通过改变跳转规则和密钥表,可以得到不同的系统。 S6 @, M1 u" K- j% m" t
1.4 M序列加密解密电路
8 {6 g0 I; [5 P由于CPLD向 FPGA传递密钥之前,先利用M序列进行加密,使得对系统的破解首先需要对M序列加密算法进行破解,这样既防止了密钥的明文传输,又提高了系统的安全性。之所以采用M序列作为加密算法,主要考虑的是解密的自同步特性。此外根据本设计的假设即CPLD的破解是不可行的,考虑到CPLD触发器资源紧张,对 FPGA向CPLD之间的跳转指示信号的传输没有进行加密,为此而节省了CPLD中的电路。& t) e" }" x# D: p& D: |
M序列的级数越大,生成的随机序列的周期越长,破解的难度也越大。这里采用20阶的M序列,其本原多项式为x20+x3+1。( {+ S& a5 X! {4 Q u6 _
1.5 密钥校验
: Q; D- L7 i% @# G0 Q5 aCPLD 将其密钥状态机所对应的密钥回送给FPGA,FPGA则通过对CPLD送来的密钥进行确认来验证CPLD的合法性。为了不至于多占用引脚,32位密钥是串行传输的。串行传输给剽窃者的破解也增加了难度,但同时带来的问题是:FPGA需要先进行同步和串并转换之后才能进行密钥校验。2 ~. H* p$ i1 T1 W
! p8 v# R) E9 z1 n' o8 x. g0 Q
# U* d( b- e4 s1 e- F
) K/ A8 V, ]$ O, D( N密钥校验的状态机如图4所示。状态机共有失步、预同步、同步和保护四种状态。预同步状态的设置是为了防止假同步,只有连续三次校验正确才认为找到了同步。保护状态的设置是为了防止误码引起不必要的失步,使得偶尔的误码并不会导致校验状态机失步。下面分别介绍密钥校验电路在这四种状态的具体工作方式:
! e" s- O- Q$ J+ P8 J- n(1)失步状态:系统刚启动时,FPGA的密钥校验状态机处于失步状态,此时异步采样电路不工作,输出为0,CPLD一直发送密钥0。密钥校验电路在M序列解密电路输出的串行密钥流里搜索密钥0的码型,在搜索到密钥0的码型后,密钥校验状态机跳转到预同步状态。
( W- y5 W) n- \4 o! I9 w(2)预同步状态:当密钥校验状态机处于预同步状态时,异步采样电路仍然不工作,输出跳转指示为0,CPLD仍发送密钥0。密钥校验电路进行密钥0校验,如果连续三次密钥校验正确,则进入同步态;否则返回失步态重新进行密钥搜索。
! w* |0 y" u, I3 N6 a6 O(3)同步状态:此时异步采样电路开始工作,输出随机序列指示FPGA和CPLD中两个密钥状态机进行跳转。此时密钥校验电路将CPLD送来的密钥和FPGA内部选择的密钥进行对比,如果发生校验错误则跳转至保护状态;否则继续进行密钥校验工作。
+ o! p. S' t: T- U& _(4)保护状态:异步采样电路依然工作,密钥校验电路继续进行密钥校验,如果连续三次密钥校验错误则跳转到失步状态重新进行密钥搜索;否则返回同步状态。
& \$ |% c6 c* ~6 O' z7 e- b; |1 q在密钥校验电路中设有错误计数器,该计数器在失步状态下计数。一旦错误计数器的计数超过设定的阈值,则认为密钥检验失败,停止FPGA电路的工作使能。
$ P" J- {) s9 k3 j |
|