DES加密算法|密码学|网络空间安全

DES简介

数据加密标准(Data Encryption Standard,缩写为 DES)是一种对称密钥加密块密码算法,它基于使用56位密钥的对称算法。

然而DES现在已经不是一种安全的加密方法,主要因为它使用的56位密钥过短。

算法原理与流程

DES是一种分组加密算法,每次都处理固定的64位大小的明文,返回64位的密文,对于长度为n的,可以分成若干个64位的,剩余的小于64位的可以按照某种具体的规则来填充位。

流程大概这样是

image-20230309105316920

这个过程中有三个重要的框架:

  • 左边的Feistel加密结构
  • 右上角的密钥生成过程
  • 右下角的F(X, Y)的工作过程

置换表

这个过程中用到了许多的置换表,主要作用有两个:(不是所有的置换表都有这两个作用)

  • 消位。比如密钥生成过程的第一步:K通过PC-1盒置换来去掉奇偶校验位,使得从64位变成56位;还有类似的PC-2盒;以及轮函数中的S盒可以理解为一个特殊的置换表
  • 混淆。扩散和混淆是Shannon提出的设计密码系统的两个基本方法,混淆的目的是使的明文和密文之间的关系尽可能复杂

根据下面的表我们来理解一下置换表的工作方法

img

现在有一个64位的串s,那从表a[65]的第一个a[1]开始,a[1]=57表示将s[57]放到t串的第一位,a[2] = 49表示将s[49]放到 t串的第2位…….知道放完最后一个,就会得到一个t串,这个t串就是 s 串经过置换表后的结果

Feistel加密结构

介绍:

很多分组密码的结构本质上来说是基于Feistel网络的结构,通过交换、异或等操作得到密文,大体结构如下所示:

img

就是进行16轮的代换-置换

轮函数:

这是Feistel最基本的函数,下一个的L是上一个的R,下一个的R是上一个的L⨁F(上一个的R, K)

这里我们分析一下DES的Feistel框架:

  • 首先对于输入的64bit的明文,先通过一个IP置换表,进行一次置换
  • 然后将产生的64bit的东西从中间劈开,分成,作为初始的值进行第一次的轮函数,,,这个函数和密钥的产生我们一会再讲
  • 如此下去进行16轮,最后得到
  • 交换一下,得到64bit
  • 再进行一次逆IP置换,得到64bit的密文

密钥生成

DES只需要一个初始的56bit的密钥,那怎么产生16个轮函数所需的

首先,提一个小的点,DES使用一个56位的初始密钥,但提供的其实是一个64位的值,这是因为在硬件实现中每8位可以用于奇偶校验,在软件实现中多出的位只是简单的忽略掉。

所以第8位、16位、32位、40位、48位、56位、64位都是奇偶校验位,

而忽略掉他们的方法就是我上次讲的置换函数的第一个作用:去位

64bit的初始密钥,经过置换盒子——PC-1盒,去掉奇偶校验位,得到56bit,分成左右两部分,各28bit,经过密钥位移表,得到,一方面合成56bit的一个串经过置换盒子——PC-2盒压缩得到48bit,另一方面作为去产生下一个C和D….

PC-1盒是56位的置换盒,PC-2盒是一个48位的置换盒,密钥移位表是一个2行16列的表,表示第 i的左移的次数,如下:

img

假如一个串是100010101,左移2位就是:001010110

F(R,K)函数

首先是对于32bit进入一个E盒,进行位数的扩展,扩展成48bit再与进行异或后进入S盒进行压缩,得到32bit的串,再进入P盒进行置换

E盒

该置换盒的主要目的是在加密数据的过程中制造一些雪崩效应,使用数据块中的1位将在下一步操作中影响更多位,从而产生扩散效果

这是一个扩展盒,扩展的方法是:将32位的数分成8个4位的,对于第 i个的组成是,根据E盒找到前一个对应的数和后一个对应的数插进去就行

比如

其实就是把原来的前一个拿过来,后一个拿过来

image-20230309105347235

S盒

进行压缩的盒子,可以将48bit压缩成32bit

方法是:将48bit分成8份,每份6个数,用第一个和最后一个组成二进制转换成十进制对应行i,中间的四个数构成的二进制转换成十进制,作为列j,查表得到一个十进制,再转换成二进制即可

image-20230309105401376

最后

根据框架图硬算就行了,这里就不放代码了

最后就是能得到64位的密文

博客内容均系原创,未经允许严禁转载!
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇