迭
代
型
分
组
算
法
分
组
长
度
/
密
钥
长
度
:
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组迭代圈函数。
右上角的
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
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靠它实现非线性变换
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圈并没有进行这一步骤】