加密密钥等于脱密密钥,或者由一个可以轻易的计算出另一个的密码体制,称为单密钥密码体制,亦或称为对称密码体制或传统密码体制。其最具代表意义的当然属于DES密码体制了。

1、DES的设计背景

  • 1973年5月 NBS(美国国家标准局)发布通告,征集一种加密算法
  • 1974年8月 收到了IBM公司提交的算法
  • 1976年11月 被推荐为联邦标准
  • 1977年1月 发布
  • 服役了20年

2、DES加密算法

迭 代 型 分 组 算 法    分 组 长 度 / 密 钥 长 度 : 64 b i t 有 效 密 钥 长 度 : 56 b i t ( 8 b i t 奇 偶 校 验 位 ) 迭 代 圈 数 : 16 圈 圈 密 钥 长 度 : 48 b i t ( 即 16 圈 中 每 一 圈 所 要 用 到 的 密 钥 位 数 ( b i t ) ) \color{red}迭代型分组算法\\\;\\\color{brown}分组长度/密钥长度:\color{red}64bit\\ \color{brown}有效密钥长度:\color{red}56bit(8bit奇偶校验位)\\ \color{brown}迭代圈数:\color{red}16圈\\ \color{brown}圈密钥长度:\color{red}48bit(即16圈中每一圈所要用到的密钥位数(bit)) /64bit56bit(8bit)1648bit(16(bit))

形式化表达为: D E S ( M ) = I P − 1 ∘ T ( 16 ) ∘ T ( 15 ) ∘ . . . ∘ T ( 1 ) ∘ I P ( m ) ( 由 后 向 前 运 算 ) DES(M)=IP^{-1}\circ T(16)\circ T(15)\circ...\circ T(1)\circ IP(m)(由后向前运算) DES(M)=IP1T(16)T(15)...T(1)IP(m)
IP是初始置换,IP-1是初始逆置换,T表示16组迭代圈函数。

图形化表达:

64bit
64bit
64bit
64bit
明文m
初始置换<IP>
圈1
圈2
圈3
....
圈16
初始逆置换
密文c

前 15 圈 的 算 法 结 构 相 同 , 16 圈 中 每 一 圈 都 有 不 同 的 密 钥 值 \color{gray}前15圈的算法结构相同,16圈中每一圈都有不同的密钥值 1516

在这里插入图片描述
由 上 图 可 知 , 前 15 圈 模 2 加 ( 亦 或 ) 后 , 左 右 进 行 了 互 换 , 而 在 第 16 圈 则 没 有 。 初 始 置 换 后 , 将 64 b i t 数 据 等 分 为 2 份 32 b i t 分 别 给 予 了 L 0 ( L e f t ) 和 R 0 ( R i g h t ) 由上图可知,前15圈模2加(亦或)后,左右进行了互换,而在第16圈则没有。\\ 初始置换后,将64bit数据等分为2份32bit 分别给予了L_0(Left) 和 R_0(Right) 1521664bit232bitL0LeftR0Right

2.1    初 始 置 换 I P 与 逆 初 始 置 换 I P − 1 2.1\;初始置换IP与逆初始置换IP^{-1} 2.1IPIP1

若某一位经过初始置换又经过了逆初始置换,则其位置并没有发生改变。即,IP和IP-1互逆
在这里插入图片描述
如IP转换表中,第8位对应了数字2,即表示对应着第2位;
而在IP-1转换表中,第二位对应了数字8,即表示对应着第8位;
此时正好又将位置转换了回去。 之 前 有 提 到 过 置 换 是 一 种 古 典 密 码 \color{gray}之前有提到过置换是一种古典密码 置换密码.
所以在设计置换表时可以参照此原则。

2.2    圈 函 数 2.2\;圈函数 2.2

前15圈

在这里插入图片描述
右上角的 L i − 1 L_{i-1} Li1应该是 R i − 1 R_{i-1} Ri1

  • 本一圈的右部 R i − 1 R_{i-1} Ri1 直接作为下一圈的左部 L i L_{i} Li 进行后续的运算
  • 本一圈的(左部 L i − 1 L_{i-1} Li1) 要与(经过 f 函 数 f函数 f R i − 1 R_{i-1} Ri1 和本圈密钥 k i k_{i} ki 所得到的结果, f ( R i − 1 , k i ) f(R_{i-1},k_{i}) f(Ri1,ki))进行模二加(亦或)运算之后作为下一圈的右部 R i R_{i} Ri 进行后续的运算

  表 达 式 为 : ( 左 部 , 右 部 ) = ( L i , R i ) = ( R i , L i − 1 ⨁ f ( R i − 1 , k i ) )    ⨁ 模 2 加 : 0 + 0 = 0 ; 0 + 1 = 1 + 0 = 1 ; 1 + 1 = 0 f ( R i − 1 , k i ) : 表 示 在 密 钥 k i 的 影 响 下 R i − 1 的 值 。 \:\\\color {red}表达式为:(左部,右部)=(L_{i},R_{i})=(R_{i},L_{i-1} \bigoplus f(R_{i-1},k_{i}))\\\;\\\color{blue}\bigoplus 模2加:0+0=0;0+1=1+0=1;1+1=0\\f(R_{i-1},k_{i}):表示在密钥k_i的影响下R_{i-1}的值。 ()=(Li,Ri)=(Ri,Li1f(Ri1,ki))20+0=00+1=1+0=11+1=0f(Ri1,ki):kiRi1

第16圈

在这里插入图片描述
( 左 部 , 右 部 ) = ( L 16 , R 16 ) = ( L 15 − 1 ⨁ f ( k 16 , R 15 − 1 ) , R 15 ) \color{red}(左部,右部)=(L_{16},R_{16})=(L_{15-1} \bigoplus f(k_{16},R_{15-1}),R_{15}) ()=(L16,R16)=(L151f(k16,R151),R15)
   \;
同前15圈相比,其左右部,一定意义上讲,没有发生交换。

  • 这 里 的 k i 是 由 64 b i t 密 钥 产 生 的 子 密 钥 , k i 是 48 b i t 。 D E S 的 核 心 在 于 f ( R i − 1 , k i ) 函 数 的 功 能 。 f 函 数 是 将 32 b i t 的 输 入 转 化 为 32 b i t 的 输 出 。 其 中 涉 及 到 了 扩 展 和 压 缩 。 扩 展 是 为 了 能 和 k i 进 行 模 2 加 , 压 缩 是 为 了 最 后 要 输 出 32 b i t \color{gray}这里的k_i是由64bit密钥产生的子密钥,k_i是48bit。\\ {\color{red}DES的核心在于f(R_{i-1},k_{i})函数的功能。}f函数是将32bit的输入转化为32bit的输出。\\ 其中涉及到了扩展和压缩。扩展是为了能和k_i进行模2加,压缩是为了最后要输出32bit ki64bitki48bitDESf(Ri1,ki)f32bit32bitki232bit

2.3   f 函 数 的 构 造 2.3\:f函数的构造 2.3f

f 函 数 的 内 部 构 造 :    E 盒 扩 展 ; E 盒 扩 展 后 的 值 与 圈 密 钥 k 进 行 模 2 加 ; ( 亦 或 运 算 )    S 盒 转 换 ; ( 分 为 8 个 部 分 )    P 盒 变 换 ; \color{gray}f函数的内部构造:\\\color{blue}\;E盒扩展;\\E盒扩展后的值与圈密钥k进行模2加;(亦或运算)\\\;S盒转换;(分为8个部分)\\\;P盒变换; f:EEk2S8P
图 形 化 表 示 : 图形化表示:

32bit
48bit
48bit
6bit
6bit
6bit
6bit
6bit
6bit
6bit
6bit
4bit
4bit
4bit
4bit
4bit
4bit
4bit
4bit
R<32bit>
E
+
圈密钥k
S1
S2
S3
S4
S5
S6
S7
S8
P
最后得到的32bit数据

E 盒 扩 展 : \color{blue}E盒扩展: E

将32bit扩展到48bit,先将32bit的字符分为8组,每一组的前后,分别添加上一个字符和下一个字符:
将 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 . . . . . . 29 30 31 32    ⟹    32 1 2 3 4 5 4 5 6 7 8 9 8 9 10 11 12 13 12 13 14 15 16 17 . . . . . . . . . . . . 28 29 30 31 32 1 将 \begin{matrix} 1 & 2 & 3 & 4 \\ 5 & 6 & 7 & 8 \\ 9 & 10 &11 & 12 \\ 13 & 14 &15 & 16 \\ &...... \\ 29 & 30 &31 & 32 \\ \end{matrix} \implies \begin{matrix} {\color{red}32} & 1 & 2 & 3 & 4 & {\color{red}5}\\ {\color{red}4} & 5 & 6 & 7 & 8 & {\color{red}9} \\ {\color{red}8} & 9 & 10 &11 & 12 & {\color{red}13} \\ {\color{red}12} & 13 & 14 &15 & 16 & {\color{red}17} \\ {\color{red}...} & &...... & &&{\color{red}...}\\ {\color{red}28} & 29 & 30 &31 & 32 & {\color{red}1} \\ \end{matrix} 1591329261014......303711153148121632324812...281591329261014......303711153148121632591317...1
如 , 在 下 标 为 1 的 字 符 前 插 入 上 一 个 字 符 。 即 , 下 标 为 32 的 字 符 ; 在 下 标 为 4 的 字 符 后 插 入 下 一 个 字 符 。 即 , 下 标 为 5 的 字 符 ; 在 下 标 为 32 的 字 符 后 插 入 下 一 个 字 符 。 即 , 下 标 为 1 的 字 符 ; 按 照 此 规 律 扩 展 16 b i t 。 如,\\\color{blue}在下标为1的字符前插入上一个字符。即,下标为32的字符;\\在下标为4的字符后插入下一个字符。即,下标为5的字符;\\在下标为32的字符后插入下一个字符。即,下标为1的字符;\\按照此规律扩展16bit。 1324532116bit

模 2 加 \color{blue}模2加 2

就令经过E盒扩展后的48个2进制位逐一与密钥的48bit进行亦或运算。

S 盒 代 替 \color{blue}S盒代替 S

将48bit转换为32bit

S 盒 是 唯 一 的 非 线 性 变 换 ( 非 数 学 变 换 ) , 其 是 D E S 中 f 函 数 的 核 心 , S 盒 的 好 坏 决 定 了 该 算 法 。 S盒是唯一的非线性变换(非数学变换),其是DES中f函数的核心,S盒的好坏决定了该算法。 S线DESfS

该 S 盒 分 为 了 8 个 子 盒 , 对 应 着 8 张 表 ( S i ) , 每 个 表 是 4 行 16 列 , 每 个 子 盒 的 输 入 为 6 b i t , 输 出 为 4 b i t 该S盒分为了8个子盒,对应着8张表(S_i),每个表是4行16列,每个子盒的输入为6bit,输出为4bit S88(Si)4166bit4bit

先将输入的48bit分为8组6bit的数据对应于8个子盒,
假 定 输 入 S i 盒 的 6 个 b i t 为 b 1 b 2 b 3 b 4 b 5 b 6 ( 这 里 每 一 个 b 都 是 一 个 二 进 制 位 ) 另 b 1 b 6 为 十 进 制 的 n , 令 b 2 b 3 b 4 b 5 为 十 进 制 的 m , 在 设 计 的 表 中 找 出 对 应 的 n 行 m 列 对 应 的 数 字 , 并 转 换 为 2 进 制 作 为 本 s i 盒 的 输 出 下 面 有 栗 子 : 假定输入S_i盒的6个bit为b_1b_2b_3b_4b_5b_6(这里每一个b都是一个二进制位)\\另b_1b_6为十进制的n,令b_2b_3b_4b_5为十进制的m,\\在设计的表中找出对应的n行m列对应的数字,并转换为2进制作为本s_i盒的输出\\{\color{red}下面有栗子:} Si6bitb1b2b3b4b5b6bb1b6nb2b3b4b5mnm2si
在这里插入图片描述
栗 子 : 如 , 向 s 1 盒 中 输 入 的 6 b i t 数 为 : 101101 b 1 b 6 为 11 , 即 十 进 制 的 3 b 2 b 3 b 4 b 5 为 0110 , 即 十 进 制 的 6 在 s 1 中 , 第 3 行 6 列 对 应 着 数 字 1 所 以 最 后 的 输 出 为 0001 8 组 中 每 一 个 都 会 得 到 4 b i t 的 数 据 , 最 终 会 得 到 32 b i t 的 数 据 {\color{red}栗子:}如,向s_1盒中输入的6bit数为:101101\\b_1b_6为11,即十进制的3\\b_2b_3b_4b_5为0110,即十进制的6\\在s_1中,第3行6列对应着数字1\\所以最后的输出为0001\\{\color{gray}8组中每一个都会得到4bit的数据,最终会得到32bit的数据} s16bit101101b1b6113b2b3b4b501106s1361000184bit32bit
S 盒 作 为 D E S 的 心 脏 , D E S 靠 它 实 现 非 线 性 变 换 \color{red}S盒作为DES的心脏,DES靠它实现非线性变换 SDESDES线

P 盒 转 换 : \color{blue}P盒转换: P:

其本质是一种置换
   \; 在这里插入图片描述
如原来的第1个bit被置换到第16个bit
该表格满足分组扩散与混乱原则。

3、密钥生成算法

加密的基本流程已经介绍完毕,那么如何将64bit的初始密钥生成16组48bit的圈密钥(子密钥)供每一圈使用呢?

图 形 化 表 达 为 : 图形化表达为:

在这里插入图片描述
P C − 1 为 , 置 换 选 择 算 法 1 ( 由 64 位 筛 选 出 56 位 ) ; \color{blue}{\color{red}PC-1}为,置换选择算法1(由64位筛选出56位); PC116456
C 和 D 是 两 个 寄 存 器 ; \color{blue}{\color{red}C和D}是两个寄存器; CD
L S 为 移 位 运 算 ( 循 环 左 移 ) \color{blue}{\color{red}LS}为移位运算(循环左移) LS
P C − 2 为 , 置 换 选 择 算 法 2 ( 由 58 位 选 出 48 位 的 圈 密 钥 ) \color{blue}{\color{red}PC-2}为,置换选择算法2(由58位选出48位的圈密钥) PC225848

置 换 选 择 1 ( P C − 1 ) \color{blue}置换选择1(PC-1) 1PC1

  1. 抛去每个字节的最高位,即,第8,16,24,32,40,48,56,64位,只选择剩余的56位,被抛去的字节本来就是奇偶校验位。(用于验证完整性)
  2. 将剩余的比特数,按照一定的规则,进行相应的置换。
  3. 置换后,分别放在两个寄存器C和D中

置换规则:
在这里插入图片描述
如,将原来的第57bit换到第1位。置换后的前28bit放在C寄存器中,其余的放在D寄存器中。

移 位 ( L S ) 【 两 个 28 位 密 钥 的 寄 存 器 循 环 左 移 】 \color{blue}移位(LS)【两个28位密钥的寄存器循环左移】 LS28

规 则 : 第 1 , 2 , 9 , 16 圈 左 移 1 位 ; 其 余 都 左 移 2 位 。 {\color{red}规则:}\\第1,2,9,16圈左移1位;\\其余都左移2位。 1291612

L S 1 、 L S 2 、 L S 9 、 L S 16 左 移 1 位 , 其 余 L S i 左 移 2 位 LS_1、LS_2、LS_9、LS_{16} 左移1位,其余LS_i左移2位 LS1LS2LS9LS161LSi2

最 后 16 圈 左 移 结 束 后 , 移 位 数 正 好 等 于 28 \color{gray}最后16圈左移结束后,移位数正好等于28 1628

置 换 选 择 ( P C − 2 ) 【 由 56 位 得 到 48 位 】 \color{blue}置换选择(PC-2)【由56位得到48位】 PC25648

在这里插入图片描述
按照此规则进行置换,同时去除了8位

在这里插入图片描述

4、脱密算法

DES的解密过程和DES加密完全类似,只不过将16圈的子密钥序列颠倒了一下,即,第一圈用 k 16 k_{16} k16 最后一圈用 k 1 k_{1} k1
形 式 化 表 达 为 : D E S − 1 = I P − 1 ∘ T ( 1 ) ∘ T ( 2 ) ∘ . . . ∘ T ( 16 ) ∘ I P ( c ) ( 由 后 向 前 运 算 ) 形式化表达为:\\\color{red}DES^{-1}=IP^{-1}\circ T(1)\circ T(2)\circ...\circ T(16)\circ IP(c) (由后向前运算) DES1=IP1T(1)T(2)...T(16)IP(c)

所以脱密的算法就在于圈密钥如何进行计算的

圈 函 数 的 分 解 : \color{blue}圈函数的分解:

一般地,圈函数可以表达为: ( 左 , 右 ) = ( x , y ) = ( y , x ⨁ f ( y , k ) ) (左,右)=(x,y)=(y,x\bigoplus f(y,k)) ()=(x,y)=(y,xf(y,k)),第16圈显然不能用这个表示。
可将其看作两部分,

  1. ( x , y ) → ( x ⨁ f ( y , k ) , y ) (x,y)\to(x\bigoplus f(y,k),y) (x,y)(xf(y,k)y),称为对合交换1。(Fesihel函数)
  2. ( x ⨁ f ( y , k ) , y ) → ( y , x ⨁ f ( y , k ) ) (x\bigoplus f(y,k),y)\to(y,x\bigoplus f(y,k)) (xf(y,k)y)(y,xf(y,k)),称为对合变换2。(左右块交换)【显然,第16圈并没有进行这一步骤】

步 骤 一 样 , 为 了 方 便 表 示 , 我 们 将 圈 迭 代 看 成 3 圈 , 最 后 一 圈 同 第 16 圈 一 样 , 仅 有 对 合 变 换 1 \color{gray}步骤一样,为了方便表示,我们将圈迭代看成3圈,最后一圈同第16圈一样,仅有对合变换1 便316,1

明文
对合变换1
对合变换2
对合变换1
对合变换2
对合变换1
密文
密文
对合变换1
对合变换2
对合变换1
对合变换2
对合变换1
明文

可 知 , 将 C 解 密 为 M 的 过 程 为 M 加 密 为 C 的 逆 过 程 \color{gray}可知,将C解密为M的过程为M加密为C的逆过程 CMMC

将 此 3 圈 扩 展 为 16 圈 即 为 D E S 的 脱 密 过 程 \color{blue}将此3圈扩展为16圈即为DES的脱密过程 316DES

总结

最 后 附 带 一 张 手 绘 总 结 图 \color{red}最后附带一张手绘总结图
在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐