针对通信安全性问题,我们设计了一种3DES加密算法的电话加密方案,该方案将算法模块移植到现场可编程门阵列中,其加密功能模块可用于点对点的语音通信和其他低速率数据通信模型,并在公用电话网上试验成功。

一、3DES加密算法

1、DES总体流程

DES( Data Encryption Standard)是早期比较实用的一种分组加密标准,明文分组长度为64位,密文分组长度也是64位,由非线性盒(S盒)、置换运算盒(P盒)、轮函数和密钥发生器,经过16轮迭代实现在密钥作用下明文到密文的映射。

算法由三个阶段构成:首先,64位的明文Di在一个初始置换IP(Initial Placement)后生成Do:

明文组分成左半部分Lo和右半部分Ro;接下来明文在16轮子密钥的作用下经过16轮同样的变换(每轮变换包括替代函数,非线性查表及和异或运算)将数据和密钥结合起来,最后一轮输出64位,其左边和右边两部分交换得到预输出D0;最后阶段,预输出经过一个逆置换运算IP'1算法生成了 64位密文结果DE。

其中初始置换IP的作用是把比特序列的次序打乱其函数功能:

其中IP是一个初等64阶方阵经过初等变换得到的,每行每列中只有一个1元素,起到对原序列抽样重排作用,同理,初始逆置换可用(5)式表达:

2、轮变换形

每轮运算的详细运算每个64位中间结果的左右两部分当成两个独立的32位数据完成如下的逻辑关系:

在这个轮运算中输入的32位Ri-1,先被扩展到48位,这种扩展运算是把原序列中的一些位上的码元复制后加在序列后增加了序列长度,再整体重排顺序得到48位数据4,其函数功能可以数学表达为:

E是一个32×48阶扩展矩阵,保证其每列只有一个1完成对原比特流的采样扩展运算。

扩展后的Ri-1与48位密钥K。进行逐位异或运算,得到48位结果:

而后得到的结果再压缩成32位,其数学表述为乘以扩展矩阵E的广义逆矩阵:

再以8位为单位进行非线性查表映射(S盒变换),这里的非线性映射是指有限集(2的8次方=256个元素)自身到自身的非线性一一映射,在编程中可记录下所产生的无重复随机数,再以输入为地址查表得到。

最后进行置换运算打乱比特序列顺序:

置换矩阵P同样是一个初等单位阵经过初等变换得到的。生成32位数据D与Li-l异或生成Ri:

3、轮密钥生成

64位初始密钥先经过筛选得到56位数据,56位数据经过置换选择重新排列后分成左右各28位,分别经过循环移位运算后合并,重新排序并筛选出48位作为第一轮密钥,而后进行相同的运算产生出每轮的密钥,分别参与每轮的加密运算。其中的置换运算和循环运算与轮变换类似,都可以用矩阵乘法表示;筛选运算可以用筛选抽样矩阵完成,即每行每列中至多有一个0元素的矩阵;移位运算可以表示成为左乘一个经过初等行变换的单位矩阵。

4、3DES加密算法

经过实践证明,DES算法密钥太短,抗攻击能力不强,在它基础上的3DES算法,密码钥匙足够长(64 x3),有很好的抵抗攻击的能力,本设计采用了DES-EDE3模式,使用3个不同的密钥依次执行:Ki密钥作用下的加密运算;K密钥作用下的解密运算;匠密钥作用下的加密运算,生成密文。

其中,表示明文,E为加密运算处理,D为解密运算处理。

5、加密算法的改进优化

现场可编程门阵列(Field Programmable Gate Array,FPGA)是一种可以实现数字逻辑运算的可配置芯片。多数FPGA芯片的基本逻辑单元( LES)以查找表算法实现数字信号处理,在实现加密算法的非线性映射单元上具有很强的可移植性,算法的关键数据存放在配置FPGA的EPROMEsJ中,系统上电后自动加载。

(1)利用ROM实现组合逻辑

加密算法主要由三种基本运算构成:一种是置换运算和逆置换运算,其实现方法是乘以初等变换的矩阵或广义矩阵,逆置换乘以广义逆矩阵;第二种就是有限集自身到自身元素间的非线性映射;还有一些异或运算。上述三种运算都是可逆的,所以解密运算也就是上述运算过程的逆过程。

针对算法的硬件开发平台FPGA,对算法进行改进:鉴于FPGA内部的查找表逻辑结构,还有部分可配置的ROM,如果把这些可以初始化的ROM与算法中组合逻辑的真值表建立起映射关系就可以用ROM实现组合逻辑,最典型的就是非线性S盒替代运算。这样就节省了FPGA内部宝贵的逻辑单元,降低了使用芯片的容量和系统的成本。其配置方法可以用如下的硬件描述语言结合芯片公司开发软件的使用方法来设置。

COMPONENT lpm_rom

GENERIC(

intended_device_family:STRING;

lpm_type: STRING);

PORT(

address: IN STD_LOGIC_VECTOR(7DOYVNT0 0);

q:OUT STD_LOGIC_VECTOR(7 DOWNTO O));

END COMPONENT;

case n is

when 00000000=>result:= 00010101;

when 00000001=>result:= 10010010;

when others=>result:= 10010011;

其中先指定配置对象lpm_rom,而后用语言对其配置,不占用逻辑单元实现了组合逻辑。

(2)双向信号处理单元复用

根据3DES算法的处理流程来看,不论加密运算还是解密运算都要用到DES加密运算盒D和DES解密运算盒E,由此可以想到,在硬件电路中可以只做加密硬件单元D和解密硬件单元E,由控制单元完成控制加密和解密数据流的入口顺序,也就是说,在加密过程中进入顺序是EDE,相应的密钥是K1,K2,K3,解密数据流进入的顺序DED,相应的密钥是K3,k2,k1。而控制时钟主频一定要选择的足够高,以免发生同一功能模块入口处的数据拥塞。本设计采用的处理时钟为2.048Mhz,由外接16. 384Mhz晶振8分频得到,消耗14个时钟周期完成一个分组的加密/解密处理功能,用掉时间不足0.4ms,而16K的数据流(64K语音信号经过压缩芯片以后的速率)经过64分组后帧速率为4ms,以帧速度10倍以上的速度进行处理足够能使在加密解密两路双向信号复用硬件电路时,上级缓存收集满下一帧数据前完成对这帧数据的处理,而不发生数据拥塞覆盖现象。

需要说明经过双向数据处理复用,电路中虽然少了一路信号的处理单元,但是多出了一个接受处理完成中断的协调控制单元,这个控制单元需要接收双向信号缓存的写满中断,处理单元的闲/忙信号,并发出相应的操作使能信号,逻辑比较复杂,但因为输入输出信号都是串行一路信号,占用的逻辑单元并不多。

通过把算法中的S盒映射,异或等组合逻辑放入可初始化的ROM单元;并通过增加控制模块的方法把加密解密处理单元复用,减少了逻辑单元的消耗,降低了生产制造成本。经过编译仿真后,改进前后算法消耗资源对比表明,改进后的算法为以后批量生产ASIC带来了可观的经济效益。

二、电话加密系统设计

3DES加密算法提高安全性的代价是3倍的运算量和大量用于存储运算中间结果的存储空间,这使得将其移植到电话平台上存在一定困难。一方面,语音通信的全双工模式要求加密解密运算保证实时性,系统必须有较高处理速度和数据存储能力;另一方面,电话加密从拨号到握手建立链路必须经历电话协议规定的双向信令交换过程,系统还应具备把用户自定义的密钥写入加密解密运算模块等控制功能。

系统部分原理针对加密电话的功能需要,本设计采用FPGA作为数据处理单元,单片机完成系统控制功能。FPGA用硬件逻辑电路实现了以往程序指令处理完成的运算模块,保证了足够的运算速度,能达到运算实时性的要求。单片机完成从PC接收密钥写入FPGA,使能FPGA工作,传输交换信令等控制功能。

工作前,先将用户在PC上输入的密钥通过串口写入单片机,再在芯片的软件开发环境中,把仿真通过的FPGA配置数据通过程序下载口(JTAG)下载到配置芯片中去。系统上电后,配置芯片与FPGA之间在接口时序的控制下自动对FPGA进行配置,在FPGA内生成实现加密/解密算法的硬件逻辑电路,同时单片机禁用FPGA的处理功能,使FPGA工作于被写入的状态,在单片机采样时钟控制下从单片机读入初始密码钥匙,而后单片机控制信令交换、拨号和建立链路。待加密的语音信号8K采样,8bit量化后生成64K数据流,经过数据压缩芯片后数据速度降为16K,FPGA对其加密由单片机将其调制发送出去,反向数据流经过上面的逆过程完成解密。加密解密在两个数据通道中传输,同时进行完成全双工通信。

系统采用了一块异步专用PCM数据压缩芯片(Dallas公司生产),目的在于减轻加密算法的压力。从另一个角度说,压缩也增加了加密算法的复杂性。这是一款双通道的芯片,可以同时提供两个信道完成压缩和解压缩。需要异步1OMhz的处理时钟,在给定信号满足接口时序时进行加密/解密双向处理。本设计采用Altera公司Acexlk系列的FPGA芯片和Epc2配置芯片组成处理平台,在外接16. 384Mhz的晶振时钟下完成数据处理。

三、系统软件设计

FPGA内的逻辑电路是选用硬件描述语言VHDLE7J在Altera公司提供Qutuars软件开发环境下编写、调试和仿真的。

串并转换数据缓存模块

将数据压缩芯片串行输入的数据流缓存后,按64比特进行分组生成待加密的明文,在控制信号的控制下进入加密处理模块。它接收64K语音信号经过数据压缩处理后产生的16K串行数据流,缓存成64位一组的帧格式发出中断,等待处理部分采样。

加密,解密处理模块

接收密钥存储生成模块送入的密钥数据,对来回两路的明文和密文,按DES-EDE3算法进行加密运算和解密运算并送往下一级的处理单元,其中加密解密是在控制模块作用下复用D单元和E单元处理完成的。

加密后数据缓存模块

将加密后的分组密文暂存,发出写满中断,等待单片机的采样时钟采集密文数据。

待解密数据模块

将待解密的分组数据模块暂存,发出写满信号,等待处理模块闲时将数据采出解密。

并串转换数据采集模块

将解密后的64位明文数据进行并串转换,并在解压缩的接口时序要求下串行送出数据进行解压缩。

密钥存储生成模块

将单片机写入的初始密钥保存,并生成轮密钥供处理模块进行运算。

控制模块和时钟模块

提供处理时钟和语音压缩/解压缩的接口时序,以及从压缩芯片采集明文和从单片机采集密文的采样时钟;协调各模块之间的完成中断请求,并发出控制信号进行流程操作。

小知识之FPGA

FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。