加密密钥等于脱密密钥,或者由一个可以轻易的计算出另一个的密码体制,称为单密钥密码体制,亦或称为对称密码体制或传统密码体制。其最具代表意义的当然属于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)) 迭代型分组算法分组长度/密钥长度:64bit有效密钥长度:56bit(8bit奇偶校验位)迭代圈数:16圈圈密钥长度:48bit(即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)=IP−1∘T(16)∘T(15)∘...∘T(1)∘IP(m)(由后向前运算)
IP是初始置换,IP-1是初始逆置换,T表示16组迭代圈函数。
图形化表达:
前 15 圈 的 算 法 结 构 相 同 , 16 圈 中 每 一 圈 都 有 不 同 的 密 钥 值 \color{gray}前15圈的算法结构相同,16圈中每一圈都有不同的密钥值 前15圈的算法结构相同,16圈中每一圈都有不同的密钥值
由 上 图 可 知 , 前 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) 由上图可知,前15圈模2加(亦或)后,左右进行了互换,而在第16圈则没有。初始置换后,将64bit数据等分为2份32bit分别给予了L0(Left)和R0(Right)
2.1 初 始 置 换 I P 与 逆 初 始 置 换 I P − 1 2.1\;初始置换IP与逆初始置换IP^{-1} 2.1初始置换IP与逆初始置换IP−1
若某一位经过初始置换又经过了逆初始置换,则其位置并没有发生改变。即,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} Li−1应该是 R i − 1 R_{i-1} Ri−1
- 本一圈的右部 R i − 1 R_{i-1} Ri−1 直接作为下一圈的左部 L i L_{i} Li 进行后续的运算
- 本一圈的(左部 L i − 1 L_{i-1} Li−1) 要与(经过 f 函 数 f函数 f函数 的 R i − 1 R_{i-1} Ri−1 和本圈密钥 k i k_{i} ki 所得到的结果, f ( R i − 1 , k i ) f(R_{i-1},k_{i}) f(Ri−1,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,Li−1⨁f(Ri−1,ki))⨁模2加:0+0=0;0+1=1+0=1;1+1=0f(Ri−1,ki):表示在密钥ki的影响下Ri−1的值。
第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)=(L15−1⨁f(k16,R15−1),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 这里的ki是由64bit密钥产生的子密钥,ki是48bit。DES的核心在于f(Ri−1,ki)函数的功能。f函数是将32bit的输入转化为32bit的输出。其中涉及到了扩展和压缩。扩展是为了能和ki进行模2加,压缩是为了最后要输出32bit
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函数的内部构造:E盒扩展;E盒扩展后的值与圈密钥k进行模2加;(亦或运算)S盒转换;(分为8个部分)P盒变换;
图
形
化
表
示
:
图形化表示:
图形化表示:
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......303711153148121632⟹324812...281591329261014......303711153148121632591317...1
如 , 在 下 标 为 1 的 字 符 前 插 入 上 一 个 字 符 。 即 , 下 标 为 32 的 字 符 ; 在 下 标 为 4 的 字 符 后 插 入 下 一 个 字 符 。 即 , 下 标 为 5 的 字 符 ; 在 下 标 为 32 的 字 符 后 插 入 下 一 个 字 符 。 即 , 下 标 为 1 的 字 符 ; 按 照 此 规 律 扩 展 16 b i t 。 如,\\\color{blue}在下标为1的字符前插入上一个字符。即,下标为32的字符;\\在下标为4的字符后插入下一个字符。即,下标为5的字符;\\在下标为32的字符后插入下一个字符。即,下标为1的字符;\\按照此规律扩展16bit。 如,在下标为1的字符前插入上一个字符。即,下标为32的字符;在下标为4的字符后插入下一个字符。即,下标为5的字符;在下标为32的字符后插入下一个字符。即,下标为1的字符;按照此规律扩展16bit。
模 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盒是唯一的非线性变换(非数学变换),其是DES中f函数的核心,S盒的好坏决定了该算法。
该 S 盒 分 为 了 8 个 子 盒 , 对 应 着 8 张 表 ( S i ) , 每 个 表 是 4 行 16 列 , 每 个 子 盒 的 输 入 为 6 b i t , 输 出 为 4 b i t 该S盒分为了8个子盒,对应着8张表(S_i),每个表是4行16列,每个子盒的输入为6bit,输出为4bit 该S盒分为了8个子盒,对应着8张表(Si),每个表是4行16列,每个子盒的输入为6bit,输出为4bit
先将输入的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}下面有栗子:} 假定输入Si盒的6个bit为b1b2b3b4b5b6(这里每一个b都是一个二进制位)另b1b6为十进制的n,令b2b3b4b5为十进制的m,在设计的表中找出对应的n行m列对应的数字,并转换为2进制作为本si盒的输出下面有栗子:
栗 子 : 如 , 向 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的数据} 栗子:如,向s1盒中输入的6bit数为:101101b1b6为11,即十进制的3b2b3b4b5为0110,即十进制的6在s1中,第3行6列对应着数字1所以最后的输出为00018组中每一个都会得到4bit的数据,最终会得到32bit的数据
S 盒 作 为 D E S 的 心 脏 , D E S 靠 它 实 现 非 线 性 变 换 \color{red}S盒作为DES的心脏,DES靠它实现非线性变换 S盒作为DES的心脏,DES靠它实现非线性变换
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位); PC−1为,置换选择算法1(由64位筛选出56位);
C 和 D 是 两 个 寄 存 器 ; \color{blue}{\color{red}C和D}是两个寄存器; C和D是两个寄存器;
L S 为 移 位 运 算 ( 循 环 左 移 ) \color{blue}{\color{red}LS}为移位运算(循环左移) LS为移位运算(循环左移)
P C − 2 为 , 置 换 选 择 算 法 2 ( 由 58 位 选 出 48 位 的 圈 密 钥 ) \color{blue}{\color{red}PC-2}为,置换选择算法2(由58位选出48位的圈密钥) PC−2为,置换选择算法2(由58位选出48位的圈密钥)
置 换 选 择 1 ( P C − 1 ) \color{blue}置换选择1(PC-1) 置换选择1(PC−1)
- 抛去每个字节的最高位,即,第8,16,24,32,40,48,56,64位,只选择剩余的56位,被抛去的字节本来就是奇偶校验位。(用于验证完整性)
- 将剩余的比特数,按照一定的规则,进行相应的置换。
- 置换后,分别放在两个寄存器C和D中
置换规则:
如,将原来的第57bit换到第1位。置换后的前28bit放在C寄存器中,其余的放在D寄存器中。
移 位 ( L S ) 【 两 个 28 位 密 钥 的 寄 存 器 循 环 左 移 】 \color{blue}移位(LS)【两个28位密钥的寄存器循环左移】 移位(LS)【两个28位密钥的寄存器循环左移】
规 则 : 第 1 , 2 , 9 , 16 圈 左 移 1 位 ; 其 余 都 左 移 2 位 。 {\color{red}规则:}\\第1,2,9,16圈左移1位;\\其余都左移2位。 规则:第1,2,9,16圈左移1位;其余都左移2位。
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位 LS1、LS2、LS9、LS16左移1位,其余LSi左移2位
最 后 16 圈 左 移 结 束 后 , 移 位 数 正 好 等 于 28 \color{gray}最后16圈左移结束后,移位数正好等于28 最后16圈左移结束后,移位数正好等于28
置 换 选 择 ( P C − 2 ) 【 由 56 位 得 到 48 位 】 \color{blue}置换选择(PC-2)【由56位得到48位】 置换选择(PC−2)【由56位得到48位】
按照此规则进行置换,同时去除了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) (由后向前运算) 形式化表达为:DES−1=IP−1∘T(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,x⨁f(y,k)),第16圈显然不能用这个表示。
可将其看作两部分,
- ( x , y ) → ( x ⨁ f ( y , k ) , y ) (x,y)\to(x\bigoplus f(y,k),y) (x,y)→(x⨁f(y,k),y),称为对合交换1。(Fesihel函数)
- ( x ⨁ f ( y , k ) , y ) → ( y , x ⨁ f ( y , k ) ) (x\bigoplus f(y,k),y)\to(y,x\bigoplus f(y,k)) (x⨁f(y,k),y)→(y,x⨁f(y,k)),称为对合变换2。(左右块交换)【显然,第16圈并没有进行这一步骤】
步 骤 一 样 , 为 了 方 便 表 示 , 我 们 将 圈 迭 代 看 成 3 圈 , 最 后 一 圈 同 第 16 圈 一 样 , 仅 有 对 合 变 换 1 \color{gray}步骤一样,为了方便表示,我们将圈迭代看成3圈,最后一圈同第16圈一样,仅有对合变换1 步骤一样,为了方便表示,我们将圈迭代看成3圈,最后一圈同第16圈一样,仅有对合变换1
可 知 , 将 C 解 密 为 M 的 过 程 为 M 加 密 为 C 的 逆 过 程 \color{gray}可知,将C解密为M的过程为M加密为C的逆过程 可知,将C解密为M的过程为M加密为C的逆过程
将 此 3 圈 扩 展 为 16 圈 即 为 D E S 的 脱 密 过 程 \color{blue}将此3圈扩展为16圈即为DES的脱密过程 将此3圈扩展为16圈即为DES的脱密过程
总结
最
后
附
带
一
张
手
绘
总
结
图
\color{red}最后附带一张手绘总结图
最后附带一张手绘总结图