特南鲍姆编著经典教材《COMPUTER NERWORKS》翻译

来源:互联网 发布:linux使用排行榜 编辑:程序博客网 时间:2024/04/30 11:04

 

备注:

一:原文为特南鲍姆编著的经典教材《COMPUTER NERWORKS》,翻译潘爱民,清华大学出版社

二:此文只作为学习交流,严禁利用其进行商业用途

三:请购买正版图书

 

8.8电子邮件安全

 

当电子邮件消息在两个远程站点之间传递时,一般情况下该消息沿途要经过几十台机器。当这些机器中的任何一台都可以阅读和记录下该消息,以备将来可能使用。在实践中,不管人们怎么想,隐私是不存在的。然而,许多人希望自己发送的电子邮件只有目标接受者才能阅读,其他人也都无法阅读,即使他们的老板或者他们的政府也不可以阅读。这种愿望刺激了一些人和组织将前面学习过的密码学原理引用到电子邮件上,从而形成安全的电子邮件。在本书中,我们将首先学习一个已经得到广泛应用的安全电子邮件系统:PGP,然后再简短地介绍另外两个安全电子邮件系统:PEMS/MIME。有关电子邮件更多的信息,请参考Kaufman et al.2002;and Schneier,1995

 

8.8.1 PGP——Pretty Good Privacy

 

我们的第一个例子PGPPretty Good Privacy,相当好的隐私)本质上是Phil Zimmermann一个人的作品(Zimmermann1995a1995b)。Zimmermann是一个及其崇尚隐私的人,他的人生格言是:如果隐私是非法的,那么只有违法的人才会才会有隐私。PGP1991年发布,它是一个完整的安全电子邮件软件包,提供了私密性,认证,数字签名和压缩功能,而且所有这些功能都非常易于使用。此外,完整的软件包中也包含了所有的源代码,并通过Internet自由分发。由于PGP的质量,价格(为0),以及在UNIXlinuxWindowMac OS平台上的易用性,今天PGP已经得到了广泛的应用。

 

PGP使用一个被称为IDEAInternational Data Encryption Algorithm)的块密码算法来加密数据。该算法使用128位密钥,它是在瑞士被设计出来的,当时DES已经被认为不够安全,而AES尚未发明。从概念上讲,IDEA非常类似于DESAES:它也运行许多轮,在每一轮中将数据位尽可能地混合起来,但是它的混合函数与DESAES中的不同。PGP的密钥管理使用RSA,数据完整性使用MD5,这些话题我们前面都已经讨论过了。

 

PGP自从第一天诞生以来,就被卷入到一场持久的争论之中(Levy1993)。因为Zimmermann并没有阻止其他人把PGP放到Internet上,所以全世界的任何人都可以得到PGP,因此,美国政府认为Zimmermann违反了美国的军用武器出口法。美国政府对Zimmermann进行了长达五年的调查,但是最终放弃了,这里的原因可能有两个。第一,Zimmermann自己并没有把PGP放到Internet上,所以它的律师声称他没有出口任何东西(至于是否创建了一个包含出口物品的Web站点,这是一个小问题了)。第二,政府最终意识到,要想赢得这个案子,意味着要是陪审团相信:一个可下载隐私程序的Web站点也被覆盖在军火交易法的使用范围内,因而对Web站点的限制就如同禁止出口战争武器(比如坦克,潜艇,军用飞机和武器)一样。许多年来的反面宣传也没有起到作用。

 

顺便提一下,将出口法应用在PGP上也是非常不合适的。政府认为把代码放在一个Web站点上是一种非法的出口,并为此侵扰了Zimmermann长达五年之久。另一方面,如果某个人以一本书的形式来发表PGP完整的C代码(采用比较大的字体,并且每一页带一个校验和,因此扫描识别时非常容易的),然后出口这本书,那么,政府认为这没有什么关系,因为图书并不是军用品。宝剑的威力比笔要大得多,至少对于山姆大叔(也就是美国政府)来说是这样的。

 

PGP的另一个问题是,他牵连到了专利侵犯案。拥有RSA专利的公司是RSA Security公司,它宣传使用RSA算法侵犯了它的专利,但是从2.6版本以后这个问题已经解决了。此外,PGP还使用了另外一个受专利保护的加密算法,即IDEA,由此曾经还引起了一些问题。

由于PGP是源码开放的,所以所有人和组织都可以对其进行修改,并且再产生各种版本。其中有些版本的设计目的是为了回避军品出口法的问题,而其他有些版本则是为了避免使用专利算法,另外还有一些是为了将它变成一个源码封闭的商业产品。虽然军品出口法现在有些放宽了(否则的话,使用AES的产品将不可能从美国出口),而且RSA算法已经于20009月到期,但是,所有这些问题遗留下来的结果是,有许多不兼容的PGP版本流传在各处,而且名字也不尽相同。下面的讨论将集中在经典的PGP上,这是最老的,也是最简单的版本。另一个流行的版本为Open PGPRFC2440描述了这个版本。还有一个版本是GNU Privacy Guard

 

PGP特意使用现有的密码学算法,而不是发明新的算法。它主要基于那些已经经受广泛的审查并且未受任何政府机构(政府机构总是试图削弱它们)的算法,对于那些不太信任政府的人来说,这个特性是一个很大的吸引点。

 

PGP支持正文压缩,私密性和数字签名,也提供了可扩展的密钥管理工具,但奇怪的是,它没有提供电子邮件工具。它只是一个预处理器:接受明文输入,并产生签过名的密文作为输出,输出格式为base64。当然,这个输出结果然后可以被通过电子邮件发送过去。在有些PGP实现中,最后一步调用一个用户代理以便真正将消息发送出去。

 

为了看清楚PGP是如何工作的,我们来考虑图8.44中的例子。这里,Alice想要通过一种安全的方式给Bob发送一个签名的明文消息。AliceBob都有私有的(DX)和公有的(EXRSA密钥。我们假设每一方都知道对方的公钥;我们还将扼要地介绍一下PGP的密钥管理机制。

 

 

8.44PGP中,发送一个消息的操作过程

 

作为开始,Alice调用她自己机器上的PGP程序。PGP首先使用MD5算法对她的消息P做散列预算,然后用Alice的私有RSA密钥DA加密此结果散列值。当Bob最终得到了该消息时,他可以用Alice的公钥解密此散列值,并且验证散列值是否正确。即使此时其他人(比如Trudy)也能够获得这个散列值,并且也可以用Alice的公钥对它解密,但MD5的强度保证了要产生另一个具有相同MD5散列值的消息在计算上是不可行的。

 

经过加密的散列值和原始的消息现在被串接到一条消息的P1中,并且使用ZIP程序进行压缩。ZIP程序使用了Ziv-Lempel算法(Ziv and Lempel,1977)。我们将这一步的输出结果称为P1.Z

 

接下来,PGP提示Alice输入一些随机的信息。Alice输入的内容和敲键的速度被用来生成一个128位的IDEA消息密钥KM(在PGP的文献中该密钥被称为会话密钥,但是这种用法不太恰当,因为这这里并没有会话)。现在按照密码反馈模式,并利用IDEA算法和KM来加密P1.Z。另外,也使用Bob的公钥EB来加密KM。然后,这两部分内容被串接起来,并转换成base64编码,正如我们在第七单元中讨论MIME时所介绍的那样。然后,结果得到的消息只包含字母,数字和符号+/=,这意味着该消息可以被放到一个RFC822的消息体中,并且期望能未被修改地到达另一方。

 

Bob得到此消息时,他做一个反向的base编码,并且利用他自己的私有RSA密钥解密出IDEA密钥。利用这个密钥,他解密此消息得到P1.Z。结果解压缩之后,Bob将明文与散列值与他自己计算的MD5散列值一致,那么他知道P消息是正确的,而且它来自Alice

 

值得注意的是,在这里只有两个地方用到了RSA;为了加密128位的MD5散列值,以及加密128位的IDEA密钥。虽然RSA非常缓慢,但是它只需要加密256位数据,而不是大量的数据。另外,所有这256位明文数据是高度随机的,所以,Trudy需要做相当大量的工作才可以确定一个猜测的密钥是否正确。在PGP的操作过程中,繁重的加密工作是由IEDA来完成的,而IDEARSA快了几个数量级。因此,PGP不仅提供了安全性,压缩性和数字签名的功能,而且它完成这些功能的效率比图8.19中显示的方案要高得多。

 

PGP支持4RSA密钥长度。它可以由用户来选择一种最为合适的长度。这些长度选项如下:

(1)          临时的(384位):现在很容易被破解。

(2)          商用的(512位):可以被三字母组织破解。

(3)          军用的(1024位):地球上的任何人无法破解。

(4)          星际的(2048位):其他行星上的任何人也无法破解。

 

由于RSA仅仅被用在两个小的计算过程中,所以每个人在任何时候都应该使用星际强度的密钥。

 

经典PGP消息的格式如图8.45所示。在实际运用中还有其他许多格式。图中显示的消息有三个部分,分别包含了IDEA密钥,签名和消息体。密钥部分包含的不仅仅是密钥,还有一个密钥标识符,因为PGP允许每个用户有许多个公钥。

 

签名部分包含一个头部,这里我们并不关心这个头部。头部的后面紧跟一个时间戳,发送方公钥的标识符,某些类型信息以及加密的散列值本身。其中,公钥标识符指定了用来解密签名散列值的公钥,而类型信息则标识了随时用的算法(目的是为了当MD6RSA2发明出来时可以直接支持它们)。

 

8.45 PGP消息

 

消息部分也包含一个头,以及一个默认的文件名,如果接收方要将文件与写到磁盘中的话,则可以使用次默认的文件名。另外,还包含了一个时间戳,最后是消息本身。

 

PGP中,密钥管理部分是最为受到关注的,因为它是所有安全系统的要害所在。PGP的密钥管理模型如下所述。每个用户在本地维护两个数据结构:一个私钥环和一个公钥环。私钥环(private key ring)包含一个或者多个本人的公—私钥对。为每个用户支持多对公—私钥的原因是允许用户定期地改变他们的公钥,或者当用户认为某一个私钥已经泄漏时,他无需将当前已经准备好或者正在传送过程中的消息统统作废就可以告诉接受者自己是使用哪一个公钥来对它加密的。该标识符是由公钥的低64位构成的。避免公钥标识符发生冲突,这是用户的责任。磁盘上的私钥必须使用特殊的口令(任意长)来加密,以免它们被偷袭。

 

公钥环(public key ring)包含了与当前用户进行通信的其他用户的公钥。为了加密与每条消息相关联的消息密钥,这是公钥是必要的。公钥环上的每个条目不仅包含了公钥,而且也包含它的64位标识符,以及一个代表用户信任此密钥的强烈程度的指示值。

 

在这里需要解决的问题如下所述。假设公钥被存放在公告板上。Trudy为了阅读Bob的秘密电子邮件,一种办法是攻击公告板,并且用她自己选择的公钥来代替Bob的公钥。当Alice后来获得了这个自称属于Bob的公钥时,Trudy就可以对Bob实施水桶队列攻击。

 

为了防止这样的攻击,或者至少将攻击的后果减少到最小,Alice需要知道在她的公钥环中,她对这个自称是“Bob的公钥”有多大的信任程度。如果她知道该公钥来自于Bob亲自该给用户控制的公钥管理方法使得她的软盘,那么她就可以将信任值设置到最大。正是这样非中心化的,由用户控制的公钥管理方法使得PGP无需在采用中心化的PKI方案。

 

然而,有时候人们还是要通过查询一个可信的密钥服务器来获得其他用户的公钥。由于这个原因,在X.509被标准化以后,PGP除了支持传统的PGP公钥环机制以外,也支持X.509证书。所有当前的PGP版本都支持X.509

 

8.8.2 PEMPrivacy Enhanced Mail

 

PGP最初是由一个人推动起来的,与此相反,我们的第二个例子,即PEMPrivacy Enhanced Mail,增强隐私的邮件),则是一个正式的Internet标准,它是在上个世界八十年代后期被开发出来的,并且被定义在4RFC文档中:从RFC1421RFC1424。粗略地来说,PEM覆盖的范围与PGP相同:为基于RFC822的电子邮件系统提供私密性个认证功能。然而,在具体方法和技术上,它与PGP有所不同

 

使用PEM发送的消息首先被转换成一种标准的形式,所以它们针对空白符(比如制表符,结尾符等)有同样的约定。接下来,使用MD2或者MD5计算出消息的散列值。然后,将散列值和消息串接起来,并且用DES进行加密。众所周知,DES56位密钥是比较弱的,所以PEM得这个选择让人有些怀疑。然后,利用base64编码方法对加密之后的消息进行编码,再发送给收件人。

 

如同在PGP中一样,每条消息都使用每一次密钥进行加密,并且该密钥也被包装到消息中。这个密钥既可以使用RSA来保护,也可以用EDE方式的三重DES来保护。

 

PEM采用了比PGP更加结构化的形式来管理密钥。PGP密钥的真实性可以通过由CA颁发的X.509证书来证明,而且这些CA被安排成一个严格的,只有一个根层次结构。这种方案的优点是,有可能让根CA定期地发行CRL来实现证书的撤销。

 

PEM的唯一的问题是,由于一直没有人使用PEM,所以,它早已被束之高阁。这个问题在很大程度上是政治性的;谁来运行CA,又在什么样的条件下运行呢?在实践中并不缺乏候选者,但是许多人很害怕将整个系统的安全性托付给任何一家公司。最有兴趣的候选者是RSA Security公司,它希望为每个颁发的证书收取一定的费用。然而,有些组织反对这种想法。尤其是,美国政府可以免费使用使用所有的美国专利,而在美国之外的公司已经习惯于免费使用RSA算法(RSA Security公司忘记了在美国以外的其他地方为RSA算法申请专利)。对于他们来说,本来已经习惯于免费使用的东西,现在突然之间要给RSA Security公司支付费用,他们当然没有积极性了。最终,由于找不到可以运行根的机构,所以PEM失败了。

 

8.8.3 S/MIME

 

IETF接下来又冒险进军安全电子邮件的领域,称为S/MIMESecure/MIME,安全的MIME),RFC2632RFC2643描述了S/MIME。如同PEM一样,它也提供了认证,数据的完整性,保密性,和不可否认性。而且它也十分灵活,支持大量的密码学算法。无需惊奇的是,既然它使用了这样的名字,那么它一定与MIME集成得很好,从而可保护各种类型的消息。此外,它定义了许多新的MIME头,比如,用来存放数字签名的MIME头。

 

毫无疑问,IETFPEM的经历中学到了不少经验和教训。S/MIME并没有一个严格的,从单个根开始的证书层次结构。相反,用户可以有多个信任锚。只要一个证书能够被回溯到当前用户所相信的某一个信任锚,则它就被认为有效的。S/MIME使用了标准的算法和协议,关于这些算法和协议,我们前面都已经学习过了,所以这里不再进一步讨论它们。有关S/MIME的细节,请参考相应的RFC文档。

 

原创粉丝点击