分组密码体制也具有简捷、快速的特点,并且容易标准化,使其成为软硬件加密的主流算法。目前主流的分组密码有:des、idea…….
1.分组密码的特点。
与序列密码不同,分组密码是将明文序列划分成等长的分组(block),对每一组用同一加密算法和同一密钥进行加密。
分组密码有其自身的优点,首先分组密码容易被标准化,因为在今天的数据网络通信中,信息通常是被成块的处理和传输的。其次,使用分组赌东道密码容易实现同步,因为一个密码组的传输错误不会影响到其它的分组,丢失一个密文组不会对随后组的解密产生影响。这就是说,传输错误不会扩散。
而这些方面恰恰是序列密码的最大缺点。
分组密码与序列密码相比的一个缺点就是算法庞大一些,需要更多的计算资源。分组密码的另一大缺点是其安全性很难被证明。尽管“可证明安全性”的研究发展很快,但目前的分组密码大多是“看来安全的”,还没有一个分组密码被证明是真正安全的,至多证明了局部安全性。
这其中的原因是:因商业化而要求分组密码算法的细节全部暴露,因此对分组密码的攻击类型很多,安全性概念也就很多,有人为了统一这些安全性概念,甚至引入了伪随机性和超伪随机性,它们是用概率图灵机来描述的,在实际设计和分析中很难应用。
2.分组密码的设计准则。
一、安全性准则。
对以下的安全性的描述总是基于以下的假设:加密体制(包括算法的细节)是公开的;安全性完全依赖于密钥;信道是不安全的,即攻击者可以任意的截取密文;攻击者有时也可以截取一些“废弃”的明文。
1)分组长度和密钥长度:当明文分组长度为n比特时,至多需要2n个明文-密文对就可以彻底破解密钥。同理当密钥长度为n比特时,对一个截获的密文,至多需要试验2n个密钥就可以破解了密文。
因此从安全性角度来考虑,明文分组长度的密钥长度因尽可能的大。
2)混淆性:所设计的密码应使得明文、密文、密钥之间的依赖关系相当复杂,以至于这种依赖关系对密码分析者来说是无法利用的。密码分析者利用这种依赖关系的方法非常多,比如差分密码分析、线性密码分析等,因此混淆性也是一个非常重要的原则。
3)扩散性:所设计的密码应使得密钥的每一位数字影响密文的许多位数字,以防止对密钥的逐段破解;明文的每一位数字也影响密文的许多位数字,以便最充分的隐藏明文的统计特征。对扩散性可以有许多种理解,比如“粘连性”指的是明文、密文、密钥每一位都互相依赖;“不连续性”或“雪崩性”指的是当改变明文的任何一个比特时,对应密文改变的比特的个数应是一个随机变量,其平均值是分组长度的一半。
4)非线性度(抗线性密码分析强度):这一项属于混淆性。有一个基本数学原理:
如果明文和密文的关系是n维线性关系,且系数是密钥,则n个明文-密文对(而不是2n个)就可以破解密钥;如果明文与密文的关系是n维r次函数关系,且系数是密钥,则nr个明文-密文对就可以破解密钥;如果虽然次数r较大,但明文与密文的关系“非常逼近”一个n维线性关系,则n个明文-密文对就可以“基本上”破解密钥。这就是线性密码分析的思想,抗线性密码分析的强度就是非线性度。
5)抗差分密码分析强度:这一项也属于混淆性。如果明文差分与密文差分的关系比较简单,则可以进行差分密码分析,这种分析或许能部分的解密密钥。
6)安全强度的稳定性:
还可以给出许多有关安全性的概念。概括地说安全性就是从任何角度都难以攻破。其中两个最重要的角度是:
①对于一个正在使用的加密算法,即使攻击者获得“许多”精心选择的明文-密文对,他仍无法“接近”密钥,即可以抵抗选择明文攻击。 ②即使攻击者获得“许多”精心选择的明文-密文对,他仍无法“接近”任一个新密文所对应的明文。
这里使用的“明文、密文、密码之间的依赖关系”这个术语,传统上的依赖关系是指函数关系和统计关系。从安全性出发,希望函数关系尽可能复杂,其含义是使得精确破译尽可能困难;希望统计关系尽可能复杂,其含义是使得逼近破译尽可能困难。
二、简捷性准则。
简捷性指的是分组密码算法在满足安全性要求的同时尽可能的简单快速。如果分组密码算法用软件来实现,则要求子块长度尽可能自然的适应软件编程,比如8,16,32,64比特等。在软件实现中,按比特置换通常是难以实现的,因此应该尽量避免使用它。
子块上的运算应该是易于软件实现的运算,最好使用一些标准的处理器所具有的一些基本指令,比如加法、乘法、移位等。如果分组密码算法用硬件来实现,则尽量使用规则结构,以便用超大规模集成电路(vlsi)来实现。
三、有效性准则。
四、透明性和灵活性准则。
透明性即要求算法是可证明安全的。如果使用迭代分组密码,其安全强度于迭代次数的关系尽可能明确和容易分析。这就要求算法尽可能使用通用的部件,避免黑盒。
灵活性即要求算法的实现可以适应多种计算环境;明文分组长度可以伸缩;算法可以移植和变形。
五、加解密相似性准则。
加解密相似即加密算法和解密算法相同,仅仅密钥的编排不同。这就是说,如果记e(· k)和d(· k)为使用密钥 k的加密算法和加密算法,则对于任意密钥k,存在密钥k*,使得d(· k)=e(· k*)。加解密相似性的好处是大大节省存储空间和其它计算资源,并大幅降低成本。
这也是分组密码设计所追求的一个方向。
六、关于密钥的长度。
对于密钥长度的各种要求是相互矛盾的。安全性要求长的密钥,特别是多轮迭代分组密码需要很长的密钥;而简捷性和密钥本身的保密性要求密钥尽量的短。在分组密码算法中通常的做法是:
通信双方共享一个短密钥,成为密钥种子,实际加密时用一个公开的扩散算法将种子扩散成足够长的密钥。因此有以下的考虑:
对手未知的只是密钥种子,过短的密钥会使穷举密钥攻击成为可能;
一个密钥扩散算法实际上是一个伪随机序列发生器,改发生器的优劣对分组密码的安全性优一定的影响。
一般认为只要分组密码算法本身足够坚强,密钥扩散算法并不太重要。不过仍有针对密钥扩散算法的弱点进行的攻击,称为“密钥相关攻击”。通常的密钥扩散算法是附属于密钥算法的,利用分组密码算法的某些运算部件简单的搭建而成,当然不能指望所生成的密钥具有序列密码一样的安全性,但为抵抗密钥的相关性攻击,希望所生成的密钥的任一个比特依赖于密钥种子的每一个比特。
总之,以上的各设计准则中,安全性是第一位的。