分组密码是将明文消息编码表示后的数字序列划分成长为n的组,每个组(可称为长度为n的矢量)分别在密钥控制下变换成等长的输出数字序列。
其加密函数E:V_n × K → V_m。 其中V_n和V_m分别为n维和m维的矢量空间,K为密钥空间。它与流密码不同之处在于输出的每一位数字不是只与相应时刻输入的明文数字有关,而是与一组长为n的明文数字有关。这种密码实质上是字长为n的数字序列的代换密码。
混淆和扩散
- 混淆(Confusion) 是一种加密操作,使得密钥与密文之间的关系变得模糊(通过代换器来完成,即S盒)
- 扩散(Diffusion) 是一种加密操作,使得一个明文符号能够分散为多个密文符号,其目的是隐藏明文字符出现次数的统计概率。
Feistel密码结构
Feistel提出利用乘积密码可获得简单的代换密码,乘积密码指顺序地执行两个或多个基本密码系统,使得最后的密码强度高于每个基本密码系统产生的结果。其思想实际上是Shannon提出的利用乘积密码实现混淆和扩散思想的具体应用。
Feistel加密结构
加密算法的输入是分组长为2w的明文和一个密钥k,将每组明文分成左右两半L和R,在进行完n轮迭代后,左右两半再合并到一起产生密文分组。第i轮迭代的前一轮输出的函数:
Li=R