首页 > 编程知识 正文

des算法密钥,des加密

时间:2023-05-03 18:12:43 阅读:163779 作者:2328

本博客为了读《深入浅出密码学——常用加密技术原理与应用》这本书,内容有参考和引用。 有些图片和表格采用了原文。 版权归原书和原作者所有。 如果有侵害的话请通知我删除。 在此感谢。

DES算法是典型的对称加密算法,有关对称加密算法的介绍,请参考我的另一个博客。 DES算法已经不安全了。 因为密钥空间太小了。 但DES算法的设计理念很好,是研究密码学的基础。

1. 序列加密和分组加密对称加密分为分组加密和序列加密。 简单区分两者的话,序列加密对明文的每个位单独进行加密,而组加密对明文的各组进行加密(需要先将明文按一定长度分成几组)。 DES算法是典型的分组加密。

2. 混淆(Confusion)与扩散(Diffusion)混淆和扩散是强加密算法中的两个原子操作。 根据原着,混淆是一种尽量使密钥和密文关系模糊的加密操作,目前实现混淆的常用手段是置换(置换字符本身); 扩展是为了隐藏明文的统计属性,将明文符号的影响扩展到多个密码符号的加密操作,最简单的扩展方式是改变位置(改变字符位置)。

只是执行混淆和扩散的密码是不安全的。 进行模糊化的典型例子是密码移位。 这意味着,通过蛮力攻击或字母频率分析,明文中的每个字符在字母中移动固定长度位置的加密算法很容易被打破。 通常,如图1所示,将模糊化和扩散连接几个阶段以创建更强大的密码。 这样的密码叫做乘积密码

图1积密码3. DES算法内部结构

DES算法使用56位密钥对分组为64位的明文进行分组和加密。 这是一种迭代算法,明文中每个组的加密过程包含16个循环,每个循环的行为都完全相同。 图2显示了DES的倒圆角结构,其中每个倒圆角使用不同的子密钥,并且所有子密钥ki都是从主密钥k导出的。

图2 DES的车轮结构

3.1 Feistel结构

在DES算法内部,使用了Feistel结构。 Feistel结构是用于分组加密的对称结构,信息的加密和解密过程非常相似或完全相同,因此实现时对代码量和线路传输的要求几乎减半。 下图显示了DES的Feistel结构

图3 Feistel的结构

将64位的明文x最初进行IP置换后,分为L0和R0两部分,然后输入到Feistel结构中,进行16次操作,在各个操作中将右半部分的Ri和此循环的子密钥ki发送到函数f中,然后对得到的结果进行左半部分的Li和XOR操作整个过程可以表示为:

Li=Ri1,

ri=Li1f(ri1,ki ) ) ) ) ) ) ) ) ) ri ) ) ) ) ) )。

其中I=1、2、3…、16。 16次计算结束后,左半部分和右半部分再次被更换。 最后进行逆初始变换IP-1。 每个循环的循环密钥ki来自56位主密钥k,生成循环密钥的过程称为密钥数组(Key schedule )。

Feistel结构在各回合中只加密输入比特的一半,也就是输入的左半部分,右半部分直接复制到下一个回合。 因此,f函数可以视为输入参数为Ri-1和ki的随机数生成器。 此随机数生成器使用XOR操作加密输入左半部分的Li-1。 如果攻击者无法预测f函数的输出,则表示此加密方法功能强大。 在此前提下,Feistel密码的安全性也随着密钥位数和操作循环数的增加而加强。

3.2 初始置换IP(x)和逆初始置换IP-1

在进入Feistel结构之前,必须先进行初始置换; Feistel结构完成后,需要进行反向初始置换,两者互为反向操作。 初始置换和逆初始置换都按位置进行交换,如图4和图5所示,可以形象地视为交叉连接

图4初始置换

图5逆初始置换

详细的置换表如图6和图7所示

图6初始置换表

图7初始置换表

3.3 f函数

f函数的结构如图8所示

图8 f的函数结构

其流程如下。

引入扩展(电子盒操作)扩展。 通过将输入分成8个4位组,并将每组扩展为6位,将输入扩展为48位。 这个过程通过e-box进行,e-box本质上是数学置换。 图9表示置换过程,图10表示相应的置换表

图9扩展函数e

图10扩展置换表

s盒操作:引入混淆。 将在第一步中获得的8组6位发送到不同的s-box,将6位输入映射到4位输出。 每个S-盒包含26=64个项目,可视为4行16列表,每个项目是4位值。 图11示出了s盒的表

的读取方式:每个6位输入中的最高位(MSB)和最低位(LSB)组成的二进制数表示要选择的表行(行号从0开始),其余4位组成的二进制数表示要选择的表列(列号从0开始)。图12-19则给出了所有的S-盒表格。


图11 S-盒表格的读取方式,例子:使用S-盒S 1,
输入为100101 2,选择第3(11 2)行第2(0010 2)列,输出为8(1000 2)

图12 S-盒S 1

图13 S-盒S 2

图14 S-盒S 3

图15 S-盒S 4

图16 S-盒S 5

图17 S-盒S 6

图18 S-盒S 7

图19 S-盒S 8

S-盒是DES算法的核心,也是该算法中唯一的非线性元素(即 S(a)⨁S(b)≠S(a⨁b) ),并提供了混淆,如果一个加密算法中没有非线性元素,攻击者很容易通过一些已知的明文-密文对片段,使用一个线性等式系统来表示输入和输出,通过求解这个线性等式系统,就有可能破译该算法。

作为DES算法中唯一的非线性元素,S-盒的设计至关重要。NIST(美国国家标准与技术局,原美国国家标准局NBS。DES算法的诞生和发展有很多的历史背景,有兴趣可参考维基百科)公布的S-盒的设计准备如图20所示


图20 S-盒设计准则

置换:引入扩散。每个S-盒的4位输出都会进行置换,使得在每一位在下一轮中会影响多个不同的S-盒操作。通过反复迭代的扩散,每个密文位都将是每个明文位和每个密钥位的函数,这也称为雪崩效应。置换P如图21所示


图21 置换P

3.4 密钥编排
密钥编排的目的是从原始的56位密钥中得到16个轮密钥(也称为子密钥),每个轮密钥长度是48位。需要注意的是DES输入密钥的长度是64位,其中每第8位都作为前7位的奇偶检验位,这8个奇偶检验位都不是真正的密钥位,因此实际上DES算法的密钥空间是56位的。密钥编排的流程图如图22所示


图22 密钥编排流程图

过程如下:

初始置换PC-1(置换选择1):去除校验位,将64位密钥缩短为56位,置换表格如图23所示


图23 初始置换PC-1

循环移位:将第一步得到的56位密钥分为C0和D0两个部分,长度均为28位的左右两部分将周期性的左移一位或者两位,移动的具体位数取决于轮数i,规则如下:

在第i=1,2,9,16轮中,左移一位其他轮中,左移两位

循环移位要么发生在左半部分,要么发生在右半部分,移动位置总数是4*1+12*2=28。

置换选择2(PC-2):通过再一次置换从56位密钥(C0和D0)中获取48位轮密钥ki,过程如图24


图24 置换选择2(PC-2)

4. DES算法安全性分析

一般来说,密码攻击手段有两种:蛮力攻击(穷尽密钥搜索)和分析攻击。DES算法遭受批评的原因主要有:

密钥空间太小,易受蛮力攻击S-盒设计准则保密的,有可能已经存在利用S-盒数学属性的分析攻击,但是只有DES设计者知道(详见DES历史)

然而到目前为止,尚未发现能高效破解DES的攻击方式,不过通过蛮力攻击的方式能够比较容易的破解单重DES,因此对大多数程序而言,单重DES已经不再使用,取而代之的是3DES和AES。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。