在过去的十年中,智能卡上的计算能力发展迅速,基于 公钥的智能卡广泛应用于各个领域。2001年Borst总结了智 能卡上应用的各种密码算法以及关于这些算法的攻击。从那以后,关于密码算法的各种攻击也越来越多,其中比较著名 的有对于MD5和SHA一1的攻击以及其他对哈希函数的攻 击。另外不太为人注意的还有,对于像A5/l(应用于GSM 中) 和EO(应用于蓝牙中)这样的流密码分析技术也取得了不小 的进步。在分组密码方面,AES的采用一定程度上保证了安 全性。公钥密码方面,RSA的安全填充技术也成为一个研究 热点。
1 消息认证码
消息认证码实际上是对消息本身产生的一个冗余的信 息,消息认证码是利用密钥对要认证的消息产生新的数据块 并对数据块加密生成的,它对于要保护的信息来说是一一对 应的。因此消息认证码可以有效保证消息的完整性,以及实现发送方消息的不可抵赖和不可伪造。消息认证码的安全性主要取决于两点:首先,采用的加密算法,即所谓的数字签名;其次,是待加密的数据块的生成方法。
消息认证码不支持可逆性,是多对一的函数,其定义域由任意长的消息组成,而值域是由远小于消息长度的比特串构成。从理论上来说,一定存在不同的消息产生相同的认证码,因此必须找到一种足够单向和强碰撞自由性的方法才是安全的。
而对于消息认证码的主要攻击目标也是找到一对或者多对碰撞消息。对于现有的攻击方法,有些可以攻击任意类型的哈希方案,有些只针对特定的哈希方案。自从2004年MD5算法被攻破以后,SHA也面临被攻破的危险。因此,寻找一种足够安全的单向哈希函数已经成为当务之急,消息认证码的实现也会随之改变。
2 分组密码
分组密码在密码领域广泛使用,除了本身的几种工作模式之外,它可以用来构建MAC,也可以用来构建哈希函数、伪随机函数等等。分组密码具有速度快、易于标准化和便于软硬件实现等特点,通常是信息域网络安全中实现数据加密、数字签名、认证及密钥管理的核心体制,它在计算机通信和信息系统安全领域中有着最广泛的应用。
第一个广泛使用的分组密码算法是DES算法。DES自1977年公布后得到了许多组织、部门的使用,各国的密码学工作者也对它进行了深入的分析,它是迄今为止使用最广泛和最成功的分组密码。DES的轮函数采用Feistel网络,8个s盒,扩充、压缩置换、块置换。其算法简洁、快速且加解密相似。但一个明显的缺陷是s盒为黑盒,因此公众长久地抱怨并怀疑它设有陷门。早期的迭代分组密码设计主要围绕DES进行,后来在此基础上有很大的发展,出现了众多的Feistel型密码,DES的设计至今仍闪烁着人类设计思想的精华,其结构和部件仍在被后人效仿。但是它的密钥长度太短,仅为56比特,已经不能抵抗穷尽密钥搜索攻击。
对DES的成功破译迫使人们重新设计密码算法。IDEA是X.Lai和J.L.Massey于1990年发表的,当时称为PES,1992年改名为IDEA。IDEA是第一个不使用Feistel网络的分组密码。IDEA的安全性设计思想是:采用同一明文空间上的三个不同的群运算,使隐蔽、混淆和扩散融为一体。IDEA是分组密码的杰出代表,开创了新的一类设计风格。但是IDEA存在大量的弱密钥,这与其密钥拓展算法只是线性变换有关,这点也表明需要对其密钥拓展算法重新设计。此后出现的NEA也是一种IDEA型的密码。
Rijndael是AES活动的最终胜利者,现已替代DES成为美国新的加密标准。Rijndael轮函数的设计基于宽轨迹策略,这种设计策略是针对差分密码分析和线性密码分析制定的,主要包括两个设计准则:首先,选择差分均匀性比较小和非线性度比较高的s盒;其次,适当选择线性变换,使得固定轮数巾的活动S盒的个数尽可能多。如果差分特征(或线性逼近)中某一轮的活动s盒的个数比较少,那么下一轮中的活动s盒的个数就必须要多一些。宽轨迹策略的最大优点是可以估计算法的最大差分特征概率和最大线性逼近概率,由此可以评估算法抵抗差分密码分析和线性密码分析的能力。继美国征集AES的活动之后,欧洲在2000年3月启动了NESS1E大计划,目的是为了推出一系列的安全的密码模块,保持欧洲在密码研究领域的领先地位并增强密码在欧洲工业中的应用 作为欧洲新一代的加密标准,Camellia算法具有较强的安全性,能够抵抗差分和线性密码分析等已知的攻击。与AES相比,Camellia算法在各种软硬件平台上表现出与之相当的加密速度。除了在各种软件和硬件平台上的高效性这一显著特点外,它的另外一个特点是针对小规模硬件平台的设计。
3 流密码
流密码也称序列密码,它是对称密码算法的一种。“一次一密”的密码方案是流密码的雏形,但由于 一次一密”的密码体制存在密钥产生、分配和管理极为困难的缺点,使其应用范围受到限制。在保密强度要求高的场合,如大量军事密码系统,仍多采用流密码。流密码是指利用少量的密钥(制乱元素)通过某种复杂的运算(密码算法)产生大量的伪随机位流,用于对明文位流的加密。解密是指用同样的密钥和密码算法及与加密相同的伪随机位流,用以还原明文位流。流密码设计的一般原则是采用多重密钥、多重环节、多重安全措施等技术,达到“一次一密”,总体上达到流密码最终靠密钥保密,即“密码保密寄寓于密钥之中”。因此流密码的关键是产生密钥序列的算法,其密码系统的安全性也主要取决于密钥序列。当前流密码的重点研究方向主要包括:①自同步流密码的研究;②有记忆前馈网络密码系统的研究;③多输出密码函数的研究;④高速密码芯片的开发:⑤同步序列密码在失步后如何重新同步的问题;⑥混沌序列密码和新研究方法的探索等。
4 公钥加密算法
Whitfield Di衢e和Martin Hellman在1976年发表的“New Direction in Cryptography”首次提出了公钥密码体制,冲破了长期以来一直沿用的私钥体制。自从公钥密码体制被提出以来,相继出现了许多公钥密码方案,其中以RSA和椭圆曲线密码算法ECC最为典型。
4.1 RSA算法
当前最著名、应用最广泛的公钥系统RSA是在1978年由美国麻省理工学院的Rivest、Shamir和Adleman提出的,它是一个基于数论的非对称密码体制。RSA算法是第一个既能用于数据加密也能用于数字签名的算法,它容易理解和操作。
RSA的安全性基于大整数索因子分解的困难性,而大整数因子分解问题是数学的著名难题,至今没有有效的方法予以解决,因此可以确保RSA算法的安全性。RSA系统是公钥系统的最具有典型意义的方法,大多数使用公钥密码进行加密和数字签名的产品和标准使用的都是RSA算法RSA的缺点主要有:首先,产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密;其次运算速度慢。
4.2椭圆曲线密码算法
椭圆曲线在代数学和几何学上已有一百五十多年的研究历史,有着复杂的数学背景,涉及到数论、群论和射影几何等学科。
1985年,N.Koblitz和V.Miller分别提出了椭圆曲线密码体制ECC,其安全性依赖于椭圆曲线群上离散对数问题码的难解性,即已知椭圆曲线上的点P和kp计算k的困难程度,不过在当时一直没有像RSA等密码系统一样受到重视。但从现在来看,ECC是目前已知的公钥密码体制中,对每一比特所提供加密强度最高的一种体制,它具有安全性上高、计算量小、存储空间占用小、带宽要求低等特点,这些优点使得椭圆曲线公钥密码体制将应用到越来越多的领域。如存储空间小,这对于加密算法在智能卡上的应用具有特别重要的意义。1999年ANSI X9.62标准的发布成为ECC标准化的一个重要里程碑,同年美国政府的国家标准与技术委员会NIST发布了新的规定FIPS186—2,确定了ECC的地位。现已颁布的有关ECC的标准有IEEEP1363及P1363a、ANSIX9.62、ANSI X9.63、ISO/IEC14888—3、IETF、ATM If)RUM 等,这些标准的公布将提高ECC技术在世界范围内的通用性,使ECC技术在全球的广泛应用成为可能。而SET协议的制定者已把它作为下一代SET协议中缺省的公钥密码算法。
5 结束语
在过去的五年中,智能卡上的计算能力发展很快,智能卡和终端计算机上应用的密码算法的区别已经日益显现AES算法很快成为世界范围内的一个标准,对于该算法的攻击手段也渐渐涌现。另外,边信道攻击也成为一 个越来越重要的研究领域,这种攻击的出现将会对硬件和软件的实现产生影响。新的安全证明和安全模型也在不断涌现,这些都使我们对安全的理解越来越深刻。在现在各种攻击手段和安全证明充分发展的情况下,需要尽快地升级智能卡中所使用的密码算法。尽管如此,密码 密算法的完全更替还是需要一些时日。系统设计者们需要在这种情况下,通过更快的生成密钥等手段更新算法。