国内外分组密码理论与技术的研究现状及发展趋势1 引言 密码(学)技术是信息安全技术的核心,主要由密码编码技术和密码分析技术两个分支组成。
密码编码技术的主要任务是寻求产生安全性高的有效密码算法和协议,以满足对数据和信息进行加密或认证的要求。
密码分析技术的主要任务是破译密码或伪造认证信息,实现窃取机密信息或进行诈骗破坏活动。
这两个分支既相互对立又相互依存,正是由于这种对立统一的关系,才推动了密码学自身的发展[6]。
目前人们将密码(学)理论与技术分成了两大类,一类是基于数学的密码理论与技术,包括分组密码、序列密码、公钥密码、认证码、数字签名、Hash函数、身份识别、密钥管理、PKI技术、VPN技术等等,另一类是非数学的密码理论与技术,包括信息隐藏、量子密码、基于生物特征的识别理论与技术等。
在密码(学)技术中,数据加密技术是核心。
根据数据加密所使用的密钥特点可将数据加密技术分成两种体制,一种是基于单密钥的对称加密体制(传统加密体制),包括分组密码与序列密码,另一类是基于双密钥的公钥加密体制。
本文主要探讨和分析分组密码研究的现状及其发展趋势。
2 国内外分组密码研究的现状2.1 国内外主要的分组密码 美国早在1977年就制定了本国的数据加密标准,即DES。
随着DES的出现,人们对分组密码展开了深入的研究和讨论,已有大量的分组密码[1,6],如DES的各种变形、IDEA算法、SAFER系列算法、RC系列算法、Skipjack算法、FEAL系列算法、REDOC系列算法、CAST系列算法以及Khufu,Khafre,MMB,3-WAY,TEA,MacGuffin,SHARK,BEAR,LION,CA.1.1,CRAB,Blowfish,GOST,SQUA 算法和AES15种候选算法(第一轮),另有NESSIE17种候选算法(第一轮)等。
2.2 分组密码的分析 在分组密码设计技术不断发展的同时,分组密码分析技术也得到了空前的发展。
有很多分组密码分析技术被开发出来,如强力攻击(穷尽密钥搜索攻击、字典攻击、查表攻击、时间存储权衡攻击)、差分密码分析、差分密码分析的推广(截段差分密码分析、高阶差分密码分析、不可能差分密码分析)、线性密码分析、线性密码分析的推广(多重线性密码分析、非线性密码分析、划分密码分析)、差分线性密码分析、插值攻击、密钥相关攻击、能量分析、错误攻击、定时攻击等等。
其中,穷尽密钥搜索攻击是一种与计算技术密不可分的补素密码分析技术,也是最常用的一种密码分析技术。
通过这种技术,可以破译DES的算法。
在DES最初公布的时候,人们就认为这种算法的密钥太短(仅为56bit),抵抗不住穷尽密钥搜索的攻击。
因此,1997年1月28日,美国colorado的程序员Verser从1997年3月13日起,在Internet上数万名志愿者的协同下,用96天的时间,于1997年6月17日用穷尽密钥方法成功地找出了DES的密钥,证明了依靠Internet的分布式计算能力和用穷尽密钥搜索攻击的方法可以破译DES。
一年以后,1998年7月17日,电子边境基金会(EFF)使用一台25万美元的电脑,也用穷尽密钥搜索攻击的方法,仅花费56个小时就破解了DES。
之后,1999年,在RSA会议期间,EFF也在不到24小时的时间内用穷尽密钥攻击的方法找了DES的一个密钥。
可见,DES的加密已失去了效力,寻找DES的替代者已到了刻不容缓的地步。
2.3 AES新的数据加密候选标准 NIST在1997年1月2日正式宣布了NIST计划,该计划公开片集和评估新的数据加密候选标准,即AES(Advanced Encryption Standard),其条件是,为进入AES程序,开发者必须承诺放弃被选中算法的知识产权。
AES的基本要求是:必须(至少)支持128bit分组加密和128/192/256bit密钥(密钥空间分别有3.4×1038/6.2×1057/1.1×1071密钥),要比三重DES快及至少与三重DES一样安全。
NIST计划的评判规则大体分为安全性、代价、算法实现特性三大部分。
其中安全性是评判算法最重要的因素,包括:算法的抗分析能力、稳固的数字基础、算法输出的随机性,以及与其它算法的对比特性。
代价是指授权合法使用的代价,如在多种平台上计算的效率(速度)和占用存储器的数量。
而算法实现特性则是指灵活性、软硬件兼容性和简单性。
根据上述评判规则,NIST对所有的 候选算法进行了综合评判:(1)1998年8月20日NIST召开第一次AES候选会议,公布了15个官方AES候选算法,即:Rijndael、MARS、RC6、Serpent、Twofish、SAFER+、CAST-256、CRYPTON、E2、LOKI 97、DEAL、Magenta、PROG、DFC和HPC。
根据研究和分析的结果,前9种算法都有很好的安全性,而后6种则相对于前9种存在着某些设计上的缺陷。
这15个分组密码的背景、整体结构、设计特点及有效性的简要概括,如表1所示。
(2)1999年8月,NIST从上述15个候选算法中筛选出了5个,它们是:Rijndael、MARS、RC6TM、Serpent和Twofish。
人们为了比较出最终的算法发表了许多论文,公布了在量的统计数据,评判出了每个算法的优点和弱点。
(3)2000年10月2日,NIST宣布获胜者为Rijndael算法,这一算法的开发者是比利时的密码专家Vincent Rijmen和Joan Daemen。
Rijndael的原形是Square密码算法,设计的策略是宽轨迹策略(Wide Trail Strategy),是针对差分密码/线性密码分析提出的,最大的优点是可以给出算法的最佳差分特征的概率及最佳线性逼近偏差的界,由此可以分析出算法抗击差分分析及线性分析的能力。
Rijndael是一个迭代分组密码,数据的分组与密钥长度是可以变化的,但为了满足AES的要求,分组长度设为128bit,密钥长度设为128/192/256bit,相应的轮数为10/12/14。
(4)2001年11月26日,NIST正式公布了新标准AES,其编号为FIPS和PUBS197。
2.4 NESSIE密码计划 在美国征集AES结束之际,欧洲也进行了称为NESSIE(New European Schemes for Signatures,Integrity and Encryption)的密码大计划,其主要的目的是为了推出一系列安全的密码模块及保持欧洲在密码研究领域的领先地位,增强密码在欧洲工业中的作用。
与AES相比,NESIE涉及的范围更广,不仅征集了分组密码,而且还征集了序列密码、公钥密码、数字签名、MAC 以及Hash函数。
整个运作过程也是公开透明的,于2000年3月公布了征集通告,2000年11月13日~14日召开了第一次NESSIE会议,公布了征集到的所有算法。
ESSIE共收到17分组密码,按照分组长度分为四个部分。
这17个分组密码的背景、整体结构、设计特点及其有效性[4,7]的简要概括,如从表2可以看出,日本提交了5个算法,是递交数量最多的国家,说明日本在分组密码领域的研究是非常活跃的。
与AES的15个候选算法相比,NESSIE的17个候选算法的设计是比较单一的,受AES的影响比较大,没有多少新思想。
其整体结构主要采用的是Feistel变换与SP网络,非线性主要靠S-盒来实现。
NESSIE计划于2002年底至2003年初间完成对分组密码标准算法的最终确定。
3 分组密码的理论和技术3.1 分组密码的抽象描述 用抽象的观点来看[6],分组密码就是一种满足下列条件的映射:都是从一个置换。
可见,设计分组密码的问题在于能够找到一种算法,在密钥控制下从一个足够大且足够“好”的置换子集合中,简单而迅速地选出一个置换来。
一个好的分组密码应该是既难破译又容易实现,即计算加密函数E(·,k)和解密函数D(·,k),应该比较容易,而要从方程y=E(x,k)或x=D(y,k)中至少求出一个密钥k,应该比较困难。
3.2 分组密码的设计原理3.2.1 混乱的扩散 Shannon于1945年提出了两种隐藏明文消息中冗余度的基本技术:即:“混乱(Confusion)”和“扩散(Diffusion)”。
该技术的原理至今仍是分组密码算法设计的基石,也是密码工作的设计标准。
“混乱”用于掩盖明文与密文之间的关系,以挫败通过研究密文获取冗余度和统计模式的企图。
要做到这一点,最容易的方法是“代替(Substitution)”法。
利用差分与线性分析的策略,攻击者可以揭示明文、密文和密钥三者之间的关系,而“混乱”则可以隐藏明文、密文和密钥之间的任何关系。
好的“混乱”可使复杂甚至强有力的密码分析工具不得奏效。
“扩散”是一种将明文冗余度分散到密文中的方法,即将单个明文或密钥(位的影响尽可能扩大到更多的密文中去,不仅将统计关系隐藏起来,也使密码分析者寻求明文冗余矿度增加了难度。
最简单的“扩散”方法是“置换(Permutation)”法。
分组懊骊一般既用到“混乱”又用到“扩散”,这当中的技巧是一个密码中以不同的组合方式多次混合使用“混乱”和“扩散”。
因此,由代替和置换层构成的分组密码被称为“代替-置换网络”或SP网络。
3.2.2 Feistel网络 Feistel的思路是可以用乘积密码的概念来近似简单地代替密码。
乘积密码(Product Cipher)就是以某种方式连续执行两个或多个密码,以使所得到的“乘积”从密码编码的角度,比任意一个组成密码都更强,特别是Feistel提出的用“代替”和“置换”交替的方式(Shannon的“混乱”和“扩散”的原理)构造的密码。
值得注意的是,Feistel网络是基于Shannon1945年的设想提出来的,而现在正使用所有重要的分组密码都几乎沿用着这种结构。
(1)Feistel密码结构 Feistel提出的结构如图1所示。
加密算法的输入是一个长度为2w比特的明文分组和一个密钥K。
明文分组分为L0和R0两个部分,这两个部分经过n轮迭代后组合起来产生密文。
每一轮I以从前一轮得到的Li-1和Ri-1为输入,另外的输入还有从总的密钥K生成的子密钥Ki。
每一轮的结构都一样。
对数据右边一半进行SP操作的方法是,应用轮函数F,用它的输出与数据的左边做异或。
轮函数在每一轮中都有相同的结构,但以各轮的子密钥Ki为参数形成区分。
在这个代替之后,算法做一个置换操作,把数据的两个部分进行互换。
这种结构是Shannon提出的SPN的一种特殊形式。
Feistel网络的具体实现依赖于对下列参数的设计特点的选择:a.分组大小:分组越大意味着安全性越高,但加密/解密的速度也越慢。