3.2 对称分组密码的设计原理与方法
3.2.1 对称分组密码的三个安全设计原则
分组密码将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为 n 的组(可看成长度为n的矢量),每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列。
图3.1 分组密码模型
首先,分组加密算法本质上实现了n位明文组和n位密文组的一一映射,当n较小时,等价于代替变换。例如n = 3,表3.1给出了一个3位分组密码。这是分组密码的最一般形式,能用来定义明密文之间的任意可逆变换。但这种方法有着实际上的困难,对于n = 3这样较小的分组,类似于古典密码,因为明密文的空间有限,用统计分析方法攻击它是轻而易举的,它的脆弱性来源于分组太少。如果 n 充分大,并且有一个明密文之间的任意可逆变换,那么明文的统计特征将被掩盖。但从实际运行的角度来看,使用大规模分组的任意可逆代替密码是不可行的,一般地,对于n位的一般代替分组密码,不同变换的总数为(2n)!,也就是密钥个数为(2n)!,表示任一特定代替所需的二进制数字的位数为:
即所需密钥长度达n2n位。
n=4时,4×24=64,需要64位的密钥来表示一个任意代替。
n=64时,表示一个任意代替的密钥的大小将是64×264=270 ≈1021位。
通过以上分析,可以看出,设计分组密码时,分组长度 n 要足够大,不是为了满足密钥的空间,主要是为了防止明文的穷举攻击,对抗明文的统计分析。此外,任意代替的密钥表的传递和使用也是一个实际的困难。我们将要介绍的数据加密标准DES的密钥长度仅为56位,高级数据加密标准AES的密钥长度为128/196/256位。所以,分组密码的设计问题在于找到一种算法,能在密钥的控制之下,从一个足够大而且足够好的代替子集中,简单而迅速地选取出一个代替。
表3.1 n = 3时的一个3位分组密码
综上所述,我们给出分组密码的三个安全设计原则:
(1)分组长度足够大。
(2)密钥量足够大,能抵抗密钥穷举攻击,但又不能过长,以利于密钥管理。
(3)由密钥确定代替的算法要足够复杂,能抵抗各种已知攻击。
3.2.2 对称分组密码的两个基本设计方法
在Shannon称为理想密码的密码系统中,密文的所有统计特性都与所使用的密钥独立,他关注的是如何挫败基于统计方法的密码分析,前面所讲的任意代替密码就是这样的,但它是不可能获得实际应用的。抛开求助于理想密码系统,Shannon建议了两种抗统计分析的方法:扩散(Diffusion)和混淆(Confusion)。扩散就是让密文没有统计特征,也就是让明文的统计特征扩散消失到密文的长程统计特性中,以挫败推测出密钥的尝试。做到这一点的方法是让小扰动的影响波及全局,明文的一位影响密文的多位,反过来说,也就是让每个密文比特被多位明文比特影响。扩散增加密文与明文之间关系的复杂性,混淆则增加密钥与密文之间关系的复杂性,同样是为了挫败推测出密钥的尝试。这可以使用一些复杂的代替算法来实现,简单的线性代替函数几乎增加不了混淆。在二进制密码中,对明文进行置换后,再用某个函数作用,重复多次,就可以取得好的扩散效果。
1949年Shannon提出了代替置换网络[Substitution-Permutation(S-P)Networks]的思想,这是构成现代分组密码的基础。S-P网络基于密码学的两个基本操作,代替被称为S盒(S-box),置换被称为P盒(P-box),它们分别提供了消息的混淆与扩散。