密码技术是一个科学研究领域。在这个领域中,密码员致力于设计和开发加密系统,即能保护敏感数据免于黑客、窃听者和行业间谍侵犯的系统。加密方法还用于用户间和计算机系统间的身份验证。密码员主动尝试破解正是由他们自己创建的系统,以了解系统的局限性。在制造业中破坏已创建的东西这种概念是常见的。它可以证明汽车等产品的可靠性和安全性。今天,实践中一个常用的方法是以钱和“声誉”的方式为破解方案提供奖赏,从而在破解加密方案方面获得公众的帮助。
加密将一些输入转换为没有正确密钥则不能读取的输出。它的执行方法是运行某种算法,将某个称作明文的输入转换为一种称作密文的加密形式。虽然算法总以同样的方式工作,但是密钥的使用确保了输出总是不同(假设输入相同)。同样的明文使用不同的密钥将产生不同的密文。密钥也用于反向使用同一算法解锁加密的数据。因为算法通常是公用的且众所周知,所以好的加密依赖于坚固的算法并避免使用脆弱的密钥。
加密技术主要有三种,两种用于加密文本、图形和其它信息,有正确密钥的人可以使它们恢复。第三种用于身份验证和完整性检查,对输入加密但不打算恢复它。
•秘密密钥密码技术 使用单个密钥加密和解密信息,这种技术称为对称密钥加密。加密的信息可能存储在磁盘上,或者在非安全通道上传送。因为只有一个密钥,所以必须有某种形式的密钥交换(如亲自交换、通信公司交换等)。
•公共密钥密码技术 用公共密钥加密的数据只能由相应的私有密钥进行解密。它使用两个密钥:一个用于加密、一个用于解密。因此,这种方案是不对称的。每个人有一组密钥,一个私人持有,另一个公共可用。若要向某人发送一个秘密信息,则使用收件人的公用密钥将信息加密。然后收件人以其私钥将之解密。这消除了在加密前事先要交换密钥的问题。
•散列函数 散列函数是一个算法,它可以产生信息的惟一“指纹”,借以证明自从创建后没有改变过它,散列函数只能单向工作。该算法的输出称为信息摘要。消息摘要对于给定消息来说是很小的并且实际上是唯一的,它通常用作数字签名和数字时间戳记中的元素。对于信息运行同样算法的收件人应该得到同样的摘要;否则,信息就是可疑的。该技术用以为信息和文档进行数字签名。
加密过程
最著名的加密算法之一是美国政府开发的DES(数据加密标准)。DES是IBM公司于1972年研制成功的,目的在于保护公司的机密产品。美国商业部所属国家标准局NBS也开始了一项计算机数据保护标准的发展规划,这一举措导致了DES的出台,并于1977年正式批准作为美国联邦信息处理标准。该标准在国际上引起极大重视,同时ISO也将DES指定为数据加密标准。
DES是一种分组加密算法,它使用的算法通过将信息进行一个模糊算法的多次迭代或循环来加密并掩盖它。该过程如图C-26所示,在下面的描述中做了很大简化。DES所使用的密钥长度为64位,由占56位长度的实际密钥和每个字节的第8位的奇偶校验码这两部份组成。它以64位为一组,将明文分成若干个分组,每次利用56位密钥对64位的二进制明文分组进行数据加密,产生64位的密文。DES算法的密钥可以是任意的一个56位的数,且可在任意的时候改变。
为了将加密过程形象化,可以设想将正在加密的信息分割开来,然后像线一样再编织在一起。密钥值用以在过程的每次捻转(迭代)期间使用不同的颜色将线“染色”。
1.明文分为64位的块。每一个块通过算法的16次迭代独立进行处理。
2.同时,56位密钥一分为二。在每次迭代中,每一半的位向左移位以更改密钥值(像更改在线要应用的颜色一样)。
3. 64位的块一分为二(现在我们有两条线),然后右半部分和步骤2中创建的两个一半的密钥合并(这像对线之一染色)。
4.使用特定的技术(非常复杂,此处不做讨论)再次转换步骤3的结果;然后,这个结果和64位块的左半部分合并(像在另一条线中编织一样)。
5.前面各步骤的结果变为新的右半部分。现在同一64位块的下一次迭代准备开始。上次迭代的右半部分变为新的左半部分(将要染色的线)。同样,密钥的左半部分和右半部分位向左移位元,然后合并以创建新的密钥(像更改颜色一样)。
6.使用新的左半部分和新的右半部分再为其他15次迭代重复此过程。这样就产生了密文的第一个64位块。
7.下一个64位块使用同样的过程处理。
密码分析
密码分析是分析一个密码系统以验证其完整性或找到其弱点。攻击者可以采用后一种途径侵犯系统或者查看敏感信息。
十分有趣的是,DES和其它算法是公开发布的,且众所周知,因此任何试图破解DES加密密文的人都可以使用该算法进行工作。但实际上,该算法对于“解密者”可能并非如此有用。相反,密码破译者只要尝试找到正确的密钥,但这不是一个简单的任务。在发现正确的密钥前,解密者已经使用了几百或几千台计算机的数组试过了几百万个密钥。
DES的56位密钥大小在对抗攻击时不再被认为是安全的。EFF(电子前沿技术基金会)最近使用一个定制的计算机系统使用三天时间花费25万美元破译了56位DES!在另一次尝试中,EFF组织了100 000台基于因特网的个人计算机在不到一天的时间内破解了DES。从那时候开始,美国商务部已建议不使用56位DES。现在它建议使用三重DES。
世界各国政府在加密的使用上都进行了控制,并限制密钥的大小。但是由于黑客攻击和破解代码的激增,有些政府已经放松了控制。1999年,法国政府宣称试图控制加密技术不落入罪犯之手是没有实效的。
有一种称为强力攻击的方法,它尝试每种可能的密钥以解密密文。一般情况下,经常使用常用密码词典(在因特网上可以免费得到),如果使用了脆弱的密码,则这种攻击经常会成功。这种密码是指普通名称、词典中的单词和普通缩写。如果使用长密钥,以及如果密钥以无意义的模式混合了数字和字符,则强力攻击会很困难。据估计,lOO位的密钥破解起来需要几百万到几十亿年时间。但是,系统中的弱点可能会减小需要尝试的密钥数,并因此使得攻击可行。
另一种可能性是密码破译者知道加密信息中的内容并具有创建密文的算法。在这种情况下,密码破译者能够分析原始明文、算法和产生的密文,以找到系统中的一些型式和弱点。推断出信息内容通常不难,在流行的文字处理器中创建的文檔经常有隐藏的格式代码和头信息。发票和其它业务文檔通常有公司的名称和地址。个人或系统的名称可能在整个文檔中重复。
密码破译者甚至可能找到一种方法,在敏感文檔加密前在它里面插入某个文本,然后使用某种技术在密文中查找该信息。还有一些特殊的技术,称为微分密码分析。在这种方法中,交互且迭代的过程进行多次循环,且使用前面循环的结果破解密文。
图C-26 DES加密算法(简化)
RFC1984IAB和IESG关于密码技术和因特网的报告(1996年8月)概述了IAB(因特网体系结构委员会)和IESG(因特网工程指导组)的一些考虑事项,这些考虑是针对于因特网上的安全和有些政府在加密方法上施加的限制政策。
加密程序类型
如上所述,加密程序有对称的(单密钥)和不对称的(二密钥)之分。对称方案也称为秘密密钥加密方案。单密钥既用于加密和也用于解密信息。DES是对称算法。如果向某人发送一个加密的信息,则为了对方能解密该信息必须给其一个密钥的副本。这在某些环境中会成为一个问题,尤其如果不认识收件人并需要经过不信任的人或方法传输或传送密钥时。怎样确保不会泄露密钥的秘密?不对称公用密钥方案解决了这个问题。
使用不对称公用密钥密码技术方案,用户获得一对密钥,一个是公用的,一个是私有的。密钥是联系在一起的,以便使用一个密钥加密的信息仅可以使用另一个进行解密。公用密钥可以发送给其它用户或放在公用服务器上。私钥由所有者保有,从不泄露。要向某个人发送一个私人信息,应使用收件人的公用密钥加密该信息。一旦收到,收件人就使用其私钥解密该信息。公用密钥方案使计算机安全发生了革命性变化,它提供使电子商务成为可能、验证用户身份、验证和加时间戳于文文件和程序、交换安全电子信息等的方法。
Kerberos是一种普通的秘密密钥系统。传统上它使用DES并依赖于存放在网络上的所有用户(和业务)的秘密密钥的第三方主机系统(通常是内部网环境中的安全服务器)。Kerberos服务器处理的事情包括创建用户登录到网络系统时提交的证书等。 Kerberos提供三种安全等级:
1) 只在网络开始连接时进行认证,认为连接建立起来后的通信是可靠的。认证式网络文件系统(Authenticated network file system) 使用此种安全等级。
2) 安全消息(sage messages)传递:对每次消息都进行认证工作,但是不保证每条消息不被泄露。
3) 私有消息(private messages)传递:不仅对每条消息进行认证,而且对每条消息进行加密。Kerberos在发送密码时就采用私有消息模式.
对称算法具有下列特征:
•块或流密码模式 在块密码模式中,明文分为块,每一块在多个循环(迭代)中单独处理。在流密码模式中,处理的是原始比特流。流模式通常更快。
•密钥大小 密钥大小(位数)决定算法的强度,密钥越长提供的强度就越大。有些算法具有固定的密钥大小,而其它算法允许密钥大小变化。密钥越长,进行加密需要的时间也越多。在存储某些重要文件的时候,长密钥是非常需要的,因为这样在未来的很长时间密钥能够继续有效。短期的事务使用较小的密钥大小也就够了。
•块大小 块大小是指,对于块密码,所处理的块的大小。
•循环 加密过程中块执行过的迭代次数。循环越多越好,但处理过程需要的时间也越长。
下面介绍最常用的加密算法。读者还可以参考Linktionary! Web站点中能获得提供附加信息的因特网RFC Web站点列表。
DES(数据加密标准)和三重DES
DES是由IBM公司于20世纪70年代开发的,被美国国家标准局(现在称为NIST (美)国家标准和技术研究所)所采纳。DES于1977年成为美国政府的官方数据加密标准。该标准在国际上引起极大重视,同时ISO也将DES指定为数据加密标准。1997年,NIST开始寻找一种DES替代算法。
DES是一种私钥密码技术,它使用一种算法以56位的密钥、64位的块加密数据。56位密钥提供的可能密钥组合数目有1015之多。另外,数据流中的每个块使用密钥的不同变化加密,这减小了长传输过程中编码方案泄露的可能性。
与其它方法比较,DES速度很快,它起初旨在运行于硬件中。假定可以安全地处理密钥交换,它用起来也很简单。DES还可供个人使用,用于加密存储的信息。许多路由器供货商使用DES加密公用网络上传输的信息。
因为DES比公用密钥方法速度更快,所以它经常用于加密信息文本本身。其次,用于DES加密的密钥使用公用密钥加密方法自加密,并随着信息发送给接收方。因为公用密钥方法提供了一种在公用网络上发布密钥的安全方式,而DES提供了快速的加密,所以这种策略收到了良好的效果。
因本节前面提到的攻击,DES现在缺乏公众信任。
三重DES是一种安全形式的DES(称为3DES),它具有156位的密钥长度,在每个数据块上执行三次DES操作(加密、解密和加密)。设两个密钥是K1和K2,其算法的如下:
1)用密钥K1进行DES加密。
2)用K2对步骤1的结果进行DES解密。
3)用步骤2的结果使用密钥K1进行DES加密。
CAST-128,CAST-256
CAST-128和CAST-256是对称加密算法。它的名称来源于其设计者(Carlisle Adams和Stafford Tavares)。CAST使用大的密钥大小,旨在即使计算机处理能力不断提高,也能将数据很好地加密并保护到21世纪。对称加密算法使用单个密钥加密及解密数据。密钥由加密数据的人保存,并可以给其它需要解密数据的人。相反,公用密钥密码技术是不对称的,因为它们有两个密钥,一个私钥用于加密,而一个公钥用于解密。
Cast-128加密算法是一种类似于DES的置换组合网(SPN)加密系统,对于微分密码分析、线性密码分析、密码相关分析具有较好的抵抗力。这种加密还有其他的几个理想的特点,包括雪崩、严格的雪崩标准(SAC)、位独立标准(BIC)、没有互补属性也不存在软弱或者半软弱的密钥。因此对于整个Internet社区——要求密码强壮、容易获取的加密算法——而言,这是一种能够满足一般应用的很好的选择。
CAST-256是CAST的最新最安全版本。原始的CAST设计是为了在通用计算机上给出较高的软件性能。CAST-256创始于1997年,其算法现在由Entrust Technologies( http://www.entrust.com )管理并发布。
CAST-256可用于替换DES。它的密钥大小更为灵活,块大小更大,因此提供了更高级别的安全性。CAST-256支持的密钥大小为128、160、192、224和256位,块大小为128位。CAST主要优点是其速度。它设计为在硬件或软件中都能以高性能级别运行,并可以为特殊应用程序(如系统间大容量传输数据的加密)调整以提供更高的性能。
Blowfish和Twofish
Blowfish是一种可以免费得到的公用域数据加密程序,旨在无论破解或破译(使用密码分析)此类加密的能力如何进步,都能在未来许多年内保护数据。Blowfish由Bruce Schneier于1993年使用Niels Fergusen开发的设计标准开发。32位处理器的诞生后,Blowfish算法在加密速度上超越了DES,引起了人们的关注。Blowfish算法没有注册专利,不需要授权,人们可以免费使用。
Blowfish算法是一种取代了DES和IDEA的加密算法。它是一种对称(秘密或个人密钥)的分组密码,使用32位至448位的可变长度密钥,应用于内部加密或加密输出。(美国政府禁止加密输出软件使用40位以上的密钥,除非软件有特殊用途)。
该算法的计算经历两个阶段。在第一阶段,用户提供的多达448位的密钥在总计达4168字节的几个子密钥数组中扩展。在第二阶段,数据使用密钥数组分为用以加密的64位块。技术上,“数据加密经由16循环Feistel网络发生。每个循环由密钥相关的排列和密钥及资料相关的替换组成。所有的运算是32位字上的异或运算和加法运算。唯有附加操作是在每个循环中四次检索数组数据查找。”
后来,Bruce创建了Twofish算法,他将之作为当前DES(数据加密标准)的替代方法提交,Twofish基于Blowfish,但更适合于32位微处理器、8位智能卡微处理器和专用硬件。设计中的一些折衷是为了允许实施者在加密速度、密钥设置时间、代码大小、RAM、ROM和门计数等性能变量间取得平衡。
其它块加密程序
人们可能会遇到许多其它的块加密程序。下面列出了其中最重要的一些。请时刻记住存在其它的加密技术,其中包括在“公用密钥密码技术”中讨论的公用密钥密码系统。
•IDEA(国际数据加密算法)IDEA是一种面向块的秘密密钥(单密钥)加密算法,由Swiss Federal Institute of Technology开发。与DES的56位密钥相比,IDEA是作为迭代的分组密码实现的,它使用128位密钥,并在八个循环中加密64位块。IDEA以软件使用时速度不快,但它已经在处理器芯片上实现而提高了性能。该算法被认为适用于电子商务。
通过支付专利使用费(通常大约是每个副本$6.00),可以在全世界广泛使用IDEA。这些费用是在某些区域中适用,而其它区域并不适用。IDEA被认为是极为安全的。使用128位的密钥,蛮力攻击中需要进行的测试次数与DES相比会明显增大,甚至允许对弱密钥测试。而且,它本身也显示了它尤其能抵抗专业形式的分析性攻击。
•SAFER(安全和快速加密例程) 实现64位块和一个64位密钥大小的面向字节的块加密程是可由用户选择的。该加密程序使用1字节的操作,这使它适于在智能卡和其它处理能力有限的设备中使用。其最新版本SK-64和SK-128在密钥的实现方式上针对一些弱点进行了功能加强。SAFER是非专利的。
•Skipjack 这种加密算法用于由NSA设计的Clipper芯片中,该芯片是一个旨在使通信安全化的设备。该算法从1985年开始设计,于1990年完成,1993年将告知众人,但算法一直保密,没有公开。Skipjack使用80位密钥和64位块。每—个芯片还包含一个分割为两部分的80位密钥,每一部分存储在单独的密钥寄托机构中。密钥片断可以获得并组合(按照法院指令)以恢复使用特定芯片加密的信息。Skipjack最初被归为机密,这意味着它不会受到公众密码分析的攻击,也因此对于该系统几乎没有任何信任。从那时起,NSA已经将该算法解密。
•FEAL(快速数据加密算法)该算法被认为不安全。
NIST高级加密标准(AES)
1997年,美国国家标准研究所(National Institute of Standards)宣布它希望使用新的AES(高级加密标准)替换DES, AES可以很好地在21世纪的前四分之一世纪提供强大的加密手段。密钥长度将超过128且长度可变。NIST评估了由个人和组织开发的算法,收到了十五个提交的方案,NIST在2000年晚些时候选择了Rijndael.
•MARS由IBM开发,发展了原始的DES
•RC6由RSA的发明者之一Ron Rivest开发
•Rijndael由Joan Daemen和Vincent Rijmen于比利时共同开发
•Serpent由英国的Ross Anderson、以色列的Eli Biham和挪威的Lars Knudsen共同开发
•Twofish由BlowFish的开发商Counterpane Systems开发
联系客服