DES加密算法是最为广泛使用的一种分组密码算法,对推动密码理论的发展和应用起了重大作用。目前,基于DES加密算法的加密/解密硬件仍在广泛应用于国内卫星通信、网关服务器、机顶盒、视频传输以及其他大量的数据传输业务中。那么接下来,我就给大家介绍一下DES加密算法是如何通过VLSI实现的。

一、DES加密算法描述

DES是一种分组密码加密算法,分组密码是在定长的块上进行替代操作、换位操作或是他们的合成(乘积加密)。所谓替代是将明文中的一个字母用密文字母表中其他字母替代。而换位是一块中的字母简单的置换。

DES加密算法中数据以64位分组进行加密,有效密钥长度为56位。它的加密算法与解密算法相同,只是解密使用子密钥与加密子密钥的使用顺序刚 好相反。DES在对明文进行初始置换(IP)之后,执行16轮的迭代密码,最后经初始置换的逆变化(IP-1)。所谓迭代密码是在密钥控制下多次利用轮函数,进行加密变换,以实现扩散和混淆的效果。这里明文块为M0=L0R0,其中L0是M0的左32位,其中R0是M0的右32位。给定一个密钥K,由它生成16个子密钥K1,K2…K16。通过迭代过程得到密文尺R16L16。其流程如图所示:

DES加密算法的VLSI实现方法

 

其中初始置换IP及其逆置换IP-1的规则如下表所示:

DES加密算法的VLSI实现方法

 

假设输入明文为m=m1m2...m64,则IP(m)=n58m50…m15m7。在DES流程中的,函数的具体过程见图:

DES加密算法的VLSI实现方法

首先将R(32bits)进行位扩展使其成为48bits,再与子密钥(k)进行异或操作,结果分成8组,每组6位。从左到右分别作为 s1,s2 … s8的输入。令s-box的输入为b1b2b3b4b5b6,b1b6和b2b3b4b5分别表示为i,j(0≤i≤3,0≤j≤5),取下表中相应s-box的i行j列位置元素作为s-box的输出(4bits)。最后通过p置换得到输出。

DES加密算法的VLSI实现方法

在DES加密算法中s-box是核心。其设计准则是:

(1)没有一个s-box的输出位是输入位的线性函数。

(2)如果将输入的两端固定,中间4位变化,产生的输出只能得到一次。

(3)如果s-box的两个输入之间有一位的差异,则输出中至少两位不同。

(4)s-box的两个输入前两位不同而最后两位已知,则输出必须不同。

(5)对于输入之间的任何6位差分,32对中至多有8对显示出的差分导致了相同的输出差分。

二、DES加密算法的VLSI实现方法

从上面DES加密算法描述中知道DES加密算法加,解密过程主要是16轮的迭代密码过程,因此DES模块非常适合采用流水线结构。对于DES加密算法模块,采用高速流水线来实现,DES加密算法的流水线实现具有几个特点:数据通路简单,都是针对位的线性变换:编码过程的核心为16个轮次的完全相同的迭代,而且每次迭代均为线性变换,因此可以将循环用一个16级的流水线来实现。

DES是分组密码算法,因为每次只对一个数据块进行编码,前后数据块间在加密或解密时没有相关性,所以在解开循环后各模块间没有数据相关性,不会产生冲突。DES每轮加密或解密过程需要一个子密钥,而子密钥可以提前生成,随数据流在流水线的前进提供给各级。所以算法编码过程完全可以流水实现:将16轮次循环迭代解开为一个深度为16的流水线,用一个MUX部件提前生成子密钥,随流水的进程发送给各节拍,16个数据块同时进行加密或者解密。这样,从第一个数据块开始加密(解密)起,经16个轮次延时后,每一个轮次延时都会有一个数据块编码完成输出一个密文(明文)块。每个轮次内部均为组合逻辑,因而一个轮次延时就是一个时钟周期,即每个时钟周期得到一个密文块或明文块。

1、DES模块说明

DES模块是由初始置换模块IP、多路选择器 MUX(64bits)、两个32bits的锁存电路L_Larch和R_Latch、位扩展模块E—Box、数据代替电路模块S—Box、异或运算模块、置换电路模块P—Box及末置换模块IP-1组成,其工作状态与子密钥产生电路和控制电路紧密关联。初始置换电路IP是一个64bits输入,64bits输出的数据置换电路,该电路只是完成信号在不同输入输出之间的切换,只占用布线资源,不占用任何触发器、门阵列资源。同样的道理,位扩展模块E—Box、置换电路模块P—Box、末置换模块IP-1也不占用任何触发器、门阵列资源,也是只占用布线资源。两个多路选择器MUX都是多位二选一的数据选择器,数据位宽为32bits,选择输出结果受来自控制模块的SEL信号控制:L_Latch,R_Larch是两个32位位宽的寄存器,时钟为外部CLK信号。

DES加密算法的VLSI实现方法

在面积作为优先考虑的设计中可以在硬件仅 采用一级数据通道,然后经过16A循环后得到密文。外部明文/密文经过初始变换后,64bits数据被分离成左右两个部分各32位,送入左右两个多路选择器。当为第一轮迭代时多路选择器选择来自外部输入明文,密文,否则多路选择器选择Latch反馈回来的数据。当系统时钟CLK第一个有效沿到来时,多路选择器选择外部数据分别锁存入左、右锁存器并由锁存器将其送入运算模块内部,开始第一步迭代,经选择扩展电路模块E—Box,形成48bits的数据与子密钥产生电路已送来Key异或运算,然后送入S-Box;S-Box电路经过复杂的运算输出32bits的数据,该数据经P-Box置换后在与左部的32bits数据在时钟信号控制下送入右部寄存器,作为下次迭代的Ri。这样就完成了第一个周期的运算,也是DES加密算法的第一次迭代运算。当CLK的下一个有效沿到来后,左、右锁存器将上一轮产生的数据送入运算模块内部,开始第二轮迭代;如此下去,当16轮迭代运算完成后,左右数据合并,输出一个DES模块的密文/明文。

在速度作为优先考虑的设计中DES模块的实现是用一个轮函数实现的16份拷贝通过深度细化的流水线处理来完成的,由此可以获得较高的性能。采用循环全部打开和流水线结构来设计,循环全部打开后,实现全部16轮结构并串在一起,只要一个时钟周期就可以完成一个数据块的加密或解密;通过空间占用来换得速度上的大幅度提高,然后再在每轮的中间加上寄存器来实现流水线。在第一时钟周期,第一块数据经过第一轮处理存入寄存器1中。

在下一个时钟周期,寄存器1中的结果经过第二轮处理存入寄存器2中;同时,第二块数据可以经过第一轮处理存入寄存器1。这样,多块数据实现了同时处理。设计中使用16组寄存器,使得加/解密速 度可以提高近16倍。

2、S-Box模块的实现

S-Box是DES加密算法的关键步骤,所有其他的运算都是线性的,而S-Box是一个复杂的非线性函数,正是经过S-Box的非线性变换才使明文实现了较好的混乱,从而具有较强的安全保密 性。从整个模块来看S-Box是占用面积最多的部分,而且S-Box处于时钟的关键路径上面,其设计实现的好坏是影响算法整体加密和解密速度的主要因素。 对S-Box的设计一般有两种方案,一种是采用ROM的形式,而另一种是采用逻辑运算的形式。从综合工具Design Compiler综合出的结果来看,采用ROM的形式其工作速度要快一些,但相应的面积也要大一些。可以根据具体的情况来做选择。

小知识之VLSI

VLSI是超大规模集成电路(Very Large Scale Integration)的简称,指几毫米见方的硅片上集成上万至百万晶体管、线宽在1微米以下的集成电路。由于晶体管与连线一次完成,故制作几个至上百万晶体管的工时和费用是等同的。大量生产时,硬件费用几乎可不计,而取决于设计费用。