分组密码设计就是找到一种算法,可在密钥的控制下在一个够大又好的置换子集中快捷地选取一个置换,用来加密变换当前输入的明文。通常,分组密码的设计原则有安全性与实现两种原则。前者主要研究如何设计安全强度高的分组密码算法,后者主要讨论怎样提升分组密码算法的执行速度与实现效益。
混乱原则:设计的密码应该使明文、密文和密钥依赖性非常复杂。
扩散原则:为了防止逐段破译密钥和掩盖明文数字的统计特性,设计的密码密钥应符合扩散原则。
混沌可以很好地隐藏明文和密文之间的关系,并且可以通过研究密文来攻击获得明文冗余和统计模式的想法。非线性变换可以给出更好的混沌,分组密码设计中的非线性变换通常叫做S盒。扩散性可以有很多种理解,“雪崩性”是指改变明文的任意一个比特时,对应密文比特改变至少一半线性变换可提供较好的扩散,分组密码设计中的线性变换通常称为P置换。需注意的是,S盒除了提供混乱作用外,同时也有一定的扩散作用,同理,P置换除了提供扩散作用外,也具有一定的混乱作用。只不过在分组密码设计时,认为S盒主要起混乱作用,而P置换起扩散作用。有意思的是,大多数分组密码算法,这些密码组件的作用也非常明确。但有些分组密码算法,如Lai- Massey型的密码通常混合用源于不同群中的运算,密码组件的混沌效应和扩散效果难以区分。
安全性原则除了混乱与扩散外,还需注意一点,是人们设计密码应该抵抗所有已知的攻击。
根据不同的应用环境,分组密码不仅可用软件实现,还能用硬件实现。软件实现的好处为灵活性强、代价低。硬件实现的好处是可得到很大的实现速率。因此,分组密码的实现原则包括软件和硬件两方面。
软件实现的设计原则:密码算法应尽力用字块与简单的运算,字块的长度可符合软件编程。如用8,16或32位的字进行模加运算、移位运算或异或运算等。
密码算法一般用标准处理器的基本指令,比如加法、乘法、移位和基本的逻辑运算。
硬件实现的设计原则:为降低成本,减少硬件逻辑门的数量,通常把算法设计为加解密相似的,即同样的器件不仅可用于加密,也能进行解密。
一个简单的轮函数可以很快实现,且一个合适选取的轮函数经多次迭代后可给出必要的混乱与扩散。目前已知的分组密码算法大都用迭代分组密码的方式。