数据加密标准DES硬件实现
- 本文内容摘要
- 理论依据和设计内容
- 仿真结果
- 整体代码
本文内容摘要
本文设计并验证了DES的密钥扩展通路,分别采用Round Based方法和Pipeline方法两种方式设计并验证DES的明文通路
理论依据和设计内容
首先,要了解分组密码算法及DES密码。
密码体制中两种基本方法:扩散和混淆。扩散是使小的扰动影响波及全局,即让明文中的每一位影响密文中的许多位。而混淆是使密文与密钥之间的统计关系尽可能的复杂,使攻击者难以从密文推测出密钥,如使用复杂的非线性变换。
DES对于明文的处理经过三个阶段:
- 一是让64bit明文经过初始置换进行比特重排,此阶段不使用密钥
- 二是进行16次与密钥相关的加密运算,即置换和替代;
- 三是最后一次循环64bit,经过逆初始置换得到,此阶段也不用密钥。
上述流程如下图所示。
DES的密钥为64bit,其中56位为随机生成的二进制码,8位为算法不使用的校验位,如奇偶校验位。DES实现过程中需要一个密钥通路负责产生所需的每一次加密子密钥信息,具体流程图如下图所示。
初始置换IP是对64bit的明文(8×8的矩阵)进行置换移位操作:即将某些位置替换到新的位置上,生成一个重新排列的矩阵表。逆初始置换IP-1即为反向操作。具体操作如下图所示。
之后需要进行16此轮变换:其用到了两个函数,如下图所示。
具体操作如下图所示。
然后需要用到扩展运算操作,将32位扩展到48位。之后需要用到SBox函数,其是非线性变换,不易于数学分析提供了更好的安全性。最后进行P置换则可得到此部分输出。
随后进行密钥通路等操作,经过一系列操作对56位有效密钥位进行变换最终生成48位。整个DES加密的流程图如下图所示:
F变换流程如下图所示。
仿真结果
测试数据为输入明文64bit的0,输入密钥为64bit的0。此时输出为8CA64DE9C1B123A7。如下图所示:当输入均为设定值后,start输入一个脉冲,此时加密模块读入数据开始进行加密,经过16轮迭代变换后输出最终密文,为64bit数据8CA64DE9C1B123A7,与正确值相符,证明模块正确。
此外,我创建了一个新的窗口以观察des执行内部所有信号数据值。如下图所示,其中Fout为每一轮f变换中P盒置换得到的32高位数据;FP为每一轮最终迭代运算后的输出值;Rtmp记录了每一轮f变换内的置换后低32位数据。由此波形图可以更清晰地观察到des加密运行中的计算,也更便于在出错时寻找出错位置。
下面测试流水线型方式的DES加密模块,如下图所示,可以看到,当使能信号脉冲到来后,DES读入有效输入数据并开始进行加密计算,等待一段时间后计算完成并输出密文。
整体代码
代码见资源,包含顶层代码、加密读写代码和激励测试代码