基于3-DES算法的FPGA加密应用
2008-07-28
作者:李 骞, 汪学刚, 李汉钊
摘 要: 阐述了一种针对SRAM工艺FPGA的加密保护方案,并给出了主要模块的实现结构。该方案应用当前流行的3-DES" title="3-DES">3-DES算法对校验数据加密,可靠性高,占用资源少,具有较高的实际应用价值。
关键词: DES; 3-DES; FPGA加密; CPLD
在现代电子设计中,以FPGA为代表的数字系统现场集成技术正得到越来越广泛的应用。由于大规模高密度可编程逻辑器件一般都采用SRAM工艺,因此每次上电" title="上电">上电时,都要对FPGA器件重新进行配置,从而可以通过监视配置位数据流的方法对设计进行复制。因此,对于关键的核心设备有必要采用加密技术" title="加密技术">加密技术,以保护设计者的知识产权。
数据加密标准DES(Data Encryption Standard)是美国国家标准局颁布的由IBM公司研制的一种非机密数据的正式数据加密标准,是一种世界公认的较好的加密算法。而3-DES算法是为了克服DES算法密钥只有56位的缺点提出的,它将密钥扩展为168位,到目前为止还没有人给出攻击3-DES的有效方法。本文给出一种基于3-DES算法的FPGA加密保护的硬件实现方法,具有较强的健壮性,足以满足安全需求。
1 SRAM工艺FPGA存在的保密性问题及加密方法
一般来说,采用SRAM工艺的FPGA芯片的配置方法主要有三种:由计算机通过下载电缆配置,用专用配置芯片配置,采用存储器加微控制器的方法配置,这三种方法在加电时都需要将配置数据写入FPGA。因此,只要对配置引脚进行采样就可以得到配置数据信息,从而可以对另一块FPGA芯片进行配置,完成对内部电路设计的复制。
由于上电时的配置数据可以被复制,因此单独的一块FPGA芯片无法实现有效加密。FPGA芯片供应商对位数据流的定义是不公开的,所以无法通过外部的配置数据流信息推测内部电路。也就是说,即使得到配置信息也无法知道内部电路结构。因此在配置完成后使FPGA处于非工作状态,利用另外一块保密性较强的CPU产生密码验证信息与FPGA进行信息交互,只有在验证成功的情况下才能使FPGA正常工作,这样就能实现对设计的加密。
2 DES及3-DES算法介绍
2.1 DES算法
DES加密技术是一种常用的对称加密技术。该技术算法公开,加密强度大,加解密采用同一个密钥,解密为加密的逆过程,明文长度64位,输出密文64位,64位密钥中包括8位奇偶效验位,因此有效长度为56位。DES算法的总体流程如图1所示,加密过程分成三个阶段:首先,64位的明文经过初始变换(IP)被重新排列;然后,进行l6轮相同函数的作用,每轮的作用都含有置换和代换过程,第16轮迭代的64位输出经过左右32位的互换产生预输出;最后,预输出再被与初始变换(IP)互逆的逆初始变换(IP-1)作用,产生64位的密文。图1的右半部分给出了使用56位密钥的过程。开始时,密钥经过压缩变换(1)得到C、D两部分,然后经过循环左移(1)……(16)和压缩变换(2)分别得到子密钥K1……K16 ,供每一轮的迭代加密使用,每轮置换函数相同,但由于密钥位的重复迭代使得子密钥互不相同。
2.2 3-DES算法
随着计算机的运算能力不断提高,传统的DES已经不能完全满足人们对数据传输的安全性要求,56位密钥在穷举攻击之下比较脆弱,因此,新的更长密钥的对称加密算法逐步取代DES算法。3-DES使用三个不同的密钥对数据块进行三次DES加密,其中第二次DES运行在解密模式,这样密钥的长度就能扩展到l68位,从而充分防范穷举攻击。
3 系统设计方案
本设计使用一块CPLD芯片对FPGA进行加密处理,系统的加密能力主要由CPLD的加密能力决定,这就要求加密算法要足够复杂,使得对验证信息的捕获与识别足够困难。具体加密过程如下:首先产生两个相同的伪随机序列发生器:一个位于SRAM工艺的FPGA内;另一个位于CPLD内。FPGA上电配置完毕后每隔一段时间产生一个新验证数据并且向CPLD发出一个触发信号,CPLD在接收到触发信号后其内部的序列发生器也生成一个相同的伪随机数" title="随机数">随机数并在加密后串行发出,FPGA接收数据并将其解密后与自身产生的数据进行比较,若结果一致则通过验证,若结果不一致或在规定的时间内没接收到数据,则进入锁定状态不能正常工作。之所以采用3-DES算法进行加密是因为使用单纯的伪随机数加密在穷举攻击下极易被破解,而在3-DES算法加密之后通过对引脚采样的方法只能取得当前的数据流信息,无法实时产生正确的验证信息,因而系统的安全性可以得到极大的提高。
4 系统的硬件实现
4.1 整体结构
本系统分为两个大模块:CPLD上的FPGA_security模块以及FPGA上的FPGA_decrypt模块,连接方式如图2所示。其中,FPGA_security模块用来接收触发信号、产生随机数、加密并发送数据,而FPGA_decrypt模块则负责产生随机数、发送触发信号并计时、接收数据、解密、判断比较。两芯片之间通过同步串行接口进行通信,TX_CLK为接口的同步时钟,TX_BI指示数据发送的开始和结束,TXD为数据发送接口,trig_out触发输出,securty指示验证是否成功。伪随机序列发生器采用64级移位寄存器实现。
4.2 DES加密模块
4.2.1 加密变换模块
DES的初始变换和逆变换都是对数据的换位操作,在硬件实现上只需一些连线资源。在经过初始变换之后,明文被分为L和R两部分,之后要经过16层加密变换,如图3所示。每层变换的输出作为下一轮迭代的输入。每层变换的公式为:
为节省硬件成本,16层加密变换过程通过对单层加密变换的反复调用来实现,每个时钟周期" title="时钟周期">时钟周期将输出结果用锁存器锁存,以便下次调用。整个加密变换过程需16个时钟周期。每轮的密钥为48位子密钥,由子密钥生成部分提供,f{R(n),K(n)}是加密函数,它是DES加密的核心。
4.2.2 f函数模块
加密函数f{R(n),K(n)}的运算主要包括扩展运算E,S盒运算和P盒运算。32位的输入经过E表扩展为48位,然后与48位的子密钥进行模2加得到48位的结果。48位的数据通过S盒变换为32位,再通过P盒进行一次置换得到加密函数的输出。E运算和P盒实际上都是一次位的置换,没有很复杂的运算。S盒由8个特殊的6位到4位的变换构成一个复杂的非线性变换[1],是加密函数的关键。考虑到所选用芯片内部的四输入查找表结构,先将S盒的实现逻辑表达式进行化简,化简时先固定2个变量,化简另外4个变量,在实现时使用双重case语句,外层使用2个输入,内层使用4个输入,从而充分利用内部资源。
4.2.3 子密钥生成
64位的输入密钥中第8,16,…,64位包含了8个奇偶效验位,压缩变换除去了奇偶效验位,并对剩下的56位进行位置换,有效的56位密钥经过压缩变换后分成C和D两部分。从第一个周期开始,每个时钟C和D循环左移一位或两位,锁存后作为下一轮输入, 同时C、D两部分也在合并后通过压缩变换产生48位的子密钥K1、K2、K3……K16,作为f函数输入。在解密过程中子密钥的生成顺序与加密过程正好相反,此时从第二个周期开始,每个时钟C和D循环右移一位或两位,即可得到K16、K15、K14……K1。
4.3 3-DES加密/解密过程
3-DES加密/解密实现框图如图4所示,其加密过程分三步:(1)使用密钥KEY1对明文进行DES加密得到A;(2)使用密钥KEY2对A进行DES解密运算得到B;(3)使用KEY3对B再进行一次DES加密得到密文。该算法最快速的实现方法是采用流水线实现,但由于运算速度对加密保护的影响不大,在设计时应优先考虑电路资源的节省。DES加密过程和解密过程的区别仅在于子密钥给出的顺序不同,因此选用循环迭代的设计,即对同一DES模块调用三次。子密钥的生成在三次DES运算中也使用同一模块,其输入信号包括时钟clk、count[1:0]、密钥key_in[64:1]、触发信号trig,输出信号为子密钥keysub[48:1],其中count[1:0]指示DES运算的次数,用来控制C、D循环左/右移位。3-DES的解密过程为加密过程的反变换,即第一、三次变换为DES解密,第二次为DES加密,使用密钥的顺序与加密时相反。
4.4 实现结果
本设计中选用的两块芯片都是ALTERA公司的,CPLD为MAXⅡ系列的EPM1270T144C5,FPGA为cycloneⅡ系列的EP2C50F484C6。FPGA部分共使用868个LE单元, CPLD部分使用629个LE单元,只占LE单元总量的49%。为充分利用硬件资源,将加密算法做了进一步增强,在两芯片中各增加三个64位的随机序列产生器作为密钥的输入。这样一来,在通信时不但每次发送的数据不同,而且每次加密/解密的密钥也在不断变化,从而在原有基础上又增加了算法的健壮性。最终结果如下:对于CPLD,总LE为1 039/1 270(81%),对于FPGA,总LE为1 212/50 528(2%)。可见加密模块只占用被加密芯片较少的硬件资源,对整个系统没有造成大的负担。图5为仿真结果,图中TX_CLKx为同步时钟,trig_x为触发信号(启动验证过程),TX_BI_x为数据发送起始标志位,TXD_x为串行数据发送端,code_add为加密前的信息,word_send_add为发送的加密后的信息,code_rec_x为接收信息,code_dec_x为解密后的信息,key_x为密钥信息。由图可见,当code_add与code_dec一致时验证通过,此时验证标志位security保持高电平。
本文提出了一种FPGA加密保护的硬件方案,使用一块CPLD与FPGA芯片进行实时信息交互,使用3-DES算法采用循环迭代方法对验证信息加密,每次加密/解密运算需花费48个时钟周期,使用三个56位的密钥,且通信双方的密钥在每次信息验证时都会不断更新,每个密钥序列的最大长度可达264-1,若对其密钥空间中密钥进行穷举搜索,由于空间太大,这实际上是不可行的。实验证明,该方案电路简单、可靠性高,可以在FPGA芯片上正常工作。
参考文献
[1] National institute of standards and technology.Data Encryptlon Standard(DES).FIPS PUB 46-3,1999.
[2] SCHAFFER T, GLASER A, FRANZON P D. Chip-package co-implementation of a triple DES processor, advanced Packaging. IEEE Transaction 2004,27(1):194-202.
[3] KITSOS P, GOUDEVENOS S, KOUFOPAVLOU O. VLSI implementations of the triple-DES block cipher Electronics, Circuits and Systems. Proceedings of the 2003 10th IEEE International Conference, 2003,1(14-17):76-79.
[4] 郭栋,孙峰,唐值明.加密与解密实战攻略.北京:清华大学出版社,2003:225-229.