1.分组密码的设计要求
在一定的数学规则下,分组密码利用简单函数和非线性函数等运算,得到比较复杂的变换。一般情况下对分组密码算法的要求如下:
(1)分组长度n要足够大。由于当明文分组长度为n位时,至多需要2n个明文密文对就可完全破解密码。同理,当密钥长度为n位时,至多只需要试验2n个密钥就可破解该密文。因此从安全角度考虑,明文分组和密钥长度都应足够大。当分组长度n较小时,分组密码类似于某些古典密码,如维吉尼亚密码、希尔密码和置换密码,它仍然有效地保留着明文中的统计信息,会给攻击者有可乘之机,攻击者能够有效地穷举明文空间,得到密码变换本身。
(2)密钥空间足够大。分组密码的密钥所确定的密码变换只是所有置换中极小的一部分。假如这一部分足够小,攻击者能够有效地通过穷举密钥确定所有的置换,到达定时间,攻击者就能够对密文进行解密,从而得到有意义的明文。
3)密码变换必须足够复杂。使攻击者除了穷举外,找不到其他便捷的数学破译方法。
2.分组密码的设计原则和方法
在实际中,采用了香农的建议,分组密码设计的指导原则是混淆和扩散。
(1)混淆:指所设计的密码应使得密钥和明文以及密文之间的依赖关系相当复杂,以至于这种依赖性对密码剖析者来说无法使用,即密码能够对分析者隐藏一些明文的局部特征。例如,单表替代密码就不符合混淆的标准,像双字母e这样的局部特征在密文中依然表现为双字母,并且单字母的呈现频率将依然得到体现。
(2)扩散:指所设计的密码应使得密钥的每一位影响密文的许多位,以避免对密钥进行逐段破译,并且明文的每一位也影响密文的许多位,以隐蔽明文的统计特性,像维吉尼亚这样的多表替代密码在混淆上是有效的,由于它不是在每一时刻都用同样的方法加密同样的字符。但维吉尼亚密码在扩散上是失败的,由于它没有做任何换位,该缺点加上周期性替代将受到 Freidman攻击。通过扩散能够使明文的不同部分都不断能在原来的位置上。
为了便于实现和分析,分组密码经常采用以下两个方法:
(1)为了使分组长度足够大,以确保密码算法的强度。可以将大的明文分组再分成几个小段,分别完成各个小段的加密置换,最终进行并行操作。
(2)采用乘积密码技术。它就是以某种方式连续执行两个或多个密码变换。例如,设有两个子密码变换E1和E2,则先以E1对明文进行加密,然后再以E2对所得结果进行加密,其中E1的密文空间与E2的明文空间相同。如果得当的话,乘积密码能够有效地掩盖密码变换的弱点,构成比其中任意一个密码变换更强的秘密系统。
3.分组密码的工作模式
美国在FIPS中定义了5种运行模式:电子密码本ECB)、密码分组链接(CBC)、计数器模式(CTR)、输出反馈(OFB)和密码反馈(CFB)。任何分组密码算法都能依据不同的应用选择不同的模式。
(1)ECB模式是最简单的分组模式,它直接利用加密算法分别对每个明文分组进行加密。其特点有:
①每个分组用同一个密钥加密,同样的明文分组将产生同样的密文分组,因此安全性有限。
②单个密文分组中有一个或多个比特错误只会影响该分组的解密,就是说错误传播率小。
(2)CBC模式是使用最普遍的分组密码运行模式。它将第一个明文分组与初始向量进行异或运算,而将后面的明文分组分别与前一密文分组做异或运算,再使用相同的密钥对所有异或后的分组进行加密。其特点是:
①安全性大为提高。每个明文分组的加密结果不仅与密钥有关,还与前一密文分组有关,因此,同样的明文分组将产生不同的密文分组。
②由于CBC模式引入了反馈,当某个密文分组出现错误后,会影响该分组与后一密文分组的解密,但其他分组不受影响,因此错误传播率有限。
(3)CTR、OFB、CFB模式均可将分组密码转换为流密码,其特点是利用分组密码算作为一个密钥流产生器。
对于安全的分组密码算法来说,采用适当的工作模式可隐藏明文的统计特性、数据的格式等,从而提高整体的安全性。