一个好的分组密码在确保足够安全强度的前提下,还应有运行效率、存储空间、不同运行平台可实现性及灵活性等相关因素考虑,分组密码设计的基本原则基本如下。
1.安全设计原则
为确保分组密码的安全强度,其在设计时应按照以下基本原则:
(1)分组长度够长,避免明文穷举攻击。
(2)密钥量够大,也要尽可能不使用弱密钥,避免密钥穷举攻击,但因分组密码体制有密钥管理问题,密钥量也不可太大。
(3)密钥变换充分繁杂,可抵御各种已经知道的攻击,即攻击者除穷举攻击外再找不到有效的攻击方法。
(4)数据扩展够小,通常无数据扩展。
(5)当加密或解密明文或密文包错误,对后面密文解密的影响尽最大程度的小。
2.实现设计原则
从分组密码算法实现角度来看,分组密码加密和解密的操作很简单,有助于软硬件高速实现。
1)硬件实现原则
分组密码在硬件实现中,一般把密码算法设计为一个密码协处理器,加密和解密可以用加密协处理器快速完成。根据硬件实现特点,分组密码设计应尽量满足下述原则:
(1)应尽量使加密与解密算法结构一样,仅密钥使用方式不同,保证加密与解密用同一密码协处理器,否则加密与解密算法必须用不同的协处理器。
(2)规则的编码结构,使密码有一个标准的组件,适应大规模集成电路实现,降低了成本。
(3)设计成迭代型。迭代型密码可减少大规模集成电路实现时必需的硬件资源,降低成本。
(4)易于硬件实现的编码结构。如比特置换,不复杂的非线性函数易于实现,但多变元的非线性函数一般很难实现。
2)软件实现原则
分组密码在软件实现中,一般要求成本低,编程灵活,速度比硬件设计要求低,从软件实现角度考虑,分组密码设计应尽量符合下述原则:
(1)加密与解密结构相似,便于加密与解密过程软件实现可方便调用子函数。
(2)尽量用既简单也便于软件实现的运算,如加法、乘法、移位运算。
(3)设计成迭代型。迭代型分组密码有助于软件实现中使用循环,代码简单。
(4)密码算法中尽量用子块运算,运算长度尽可能和软件编程相适应,如8bit、16bit、32bit或64bit的单位长度。