将被加密明文划分成一个一个的分组,输入n比特明文分组,输出n比特密文分组。
若映射可逆,具有
x
n
!
x^n!
xn! 种替换可能性。
如以下示例,每个4比特输入唯一映射为另一个4比特输出。
2 Feistel密码结构
2.1 什么是Feistel密码结构
1973年由IBM的Horst Feistel首次提出,通过将明文分组分成左右两半部分
- 左半部分:采用替换操作,
- 右半部分:采用基于子密钥的轮函数(包括替换和置换组合操作)进行混淆,
如此经过n轮迭代处理后再重新合并组成密文分组
2.2 Feistel密码结构流程图
将Feistel公式化,首先来看加密过程,
- 每一轮的左半部分是上一轮的右半部分
- 每一轮的右半部分是 (上一轮的右半部分进入一个F操作,且要输入这一轮的密钥
K
i
K_i
Ki ),然后产生的解再与上一轮的左半部分进行异或操作
那清楚了加密的过程,能不能反推解密的公式呢?答案是可以的,由于
R
E
i
−
1
RE_ {i-1}
REi−1等于
L
E
i
LE_i
LEi,所以解密公式的各个变量都是已知的。所以分组密码是可逆的。
用流程图画出来就是这样的:
那F操作(F函数)是不是可逆的吗?但其实F操作没有要求,可逆也可以 ,不可逆也可以。因为加密的时候用的是F操作,解密的时候也是用的F操作,所以在加密解密的F操作都是正操作,也就都没有用到F操作的逆操作。这里面很大的原因还是Feistel的巧妙结构,分为左右两个部分才能使得F操作可以不可逆,如果只有一个部分那就要