19808034 吴琼
【摘要】基于E-mail在Internet上的广泛应用,其安全性摆在一个重要的议题上。目前E-mail标准,包括官方的标准和事实上的标准,有MOSS、PEM、PGP、PGP/MIME和S/MIME等等,本文试从算法、信息格式、认证格式、信任管理四个角度对它们进行比较与分析,得出其特点,并给出了使用的建议。
【关键词】安全E-mail、MOSS、PEM、PGP、PGP/MIME、S/MIME
一、简介
E-mail可以说是Internet是最早的也是使用得最多的一种应用。为了保证E-mail在Internet上安全的运行,在理想的状态下,应该共有一个Internet E-mail的安全标准。所有的E-mail作者和厂商都要执行它,那么我们在Internet上将具有安全的电子邮件。本文将介绍现在常用的一些E-mail标准,包括官方的标准和事实上的标准,其中比较详细的介绍了MOSS、PEM、PGP、PGP/MIME和S/MIME,并对其进行比较与分析。其中MIME对象安全服务(MOSS)和保密增强邮件(PEM)是没有被广泛实现的标准。现在许多软件厂商都使用S/MIME作为安全E-mail的标准。S/MIME是在PEM的基础上建立起来的,但是它发展的方向与MOSS不同。它选择使用RSA的PKCS#7标准同MIME一起使用来保密所有的Internet E-mail信息。S/MIME的标准化工作是由一个由RSA数据安全组织协调的工业联合会进行的。PGP既是一个特定的安全E-mail应用,又是一个安全E-mail标准。尽管标准委员会并没有规定它是安全E-mail的标准,但PGP在全球的广泛应用已经使它成为一个事实上的标准。PGP对非商业的用户是免费的,它已经有了许多平台和操作系统的实现。
我们将安全的E-mail分为四个角度分析:(1)算法,(2)信息格式,(3)认证格式, (4)信任管理。本文详细比较了以上各种E-mail安全标准在这四个方面的不同表现,并对与这四个方面相关的标准进行了讨论。之所以选择这个方面进行介绍是因为这四个方面能够准确的反映出这些E-mail安全标准的本质特点,因此最能比较出它们的异同。
在讨论在这四个部分之前,简要描述一下安全的E-mail软件通常提供的服务是很有帮助的:
.保密/加密──保证只有希望的接收方能够阅读信息。
.信息完整性──保证发出的信息与接收到的完全一样,一个字符一个比特都不差。要说明的是发送一条信息并保证其完整性并不一定需要加密。
.验证──保证信息的发起者不是冒名顶替的。它同信息完整性一起可防止伪造。
.抗否认──证实发送者确实发送了信息而不管他是否承认。
二、安全E-mail的四个方面
1.算法
算法是任何一种密码系统的核心。使用什么样的算法直接关系到一个加密系统的强弱。所有的E-mail安全标准都使用两类加密算法,即秘密密钥算法和公开密钥算法。使用公钥算法是非常必要的因为秘密密钥的密钥分发几乎不可跟踪。要同100个使用秘密密钥算法的人进行通信,你将需要秘密的分发100个秘密密钥。然而与秘密密钥算法相比,公开密钥算法是很慢的。因此,对E-mail数据的加密大多使用秘密密钥。
公开密钥密码也可以用于对信息进行数字签名,但是这也会带来速度慢的问题。一个弥补办法是引进第三种算法,消息文摘算法。这个算法将待签名的数据的长度减少到一个非常短的长度,通常是128比特。
.算法安全
没有一种算法能够保证绝对的安全和不可破译。但是并不意味着密码算法的作用无足轻重。越来越多的事实促使密码人员相信我们现在使用的最安全的算法实际上是非常安全的。然而,公开一个算法(尤其是一个新的算法)的全部细节并被人们广泛理解是非常重要的,只有这样它的可靠性才能得到广泛验证。发明新的算法并且将其推广使用是可能的,但通常要在这种算法的安全性得到广泛证明后的若干年后才能被广泛接受。
.交互操作性
为了邮件能够安全的在Internet上进行传输,收发邮件的双方最好都使用同一种算法。如果双方使用不同的算法会带来交互操作性的问题,这会大大限制E-mail的的应用。
比如说甲使用RSA算法而乙使用椭园曲线算法。甲具有一个RSA密钥,乙具有一个椭园曲线密钥。那么很显然甲乙两人都必须要拥有两个密钥并且要具有能够实现这两种算法的软件,这样就不能充分享受网络给人们带来的好处。
要解决交互操作性的问题,必须为Internet E-mail安全标准选择一种通用的算法并使之标准化,但这是一件很困难的事情,因为许多算法都是专利的,它们的使用会受到非常严格的限制。
PEM确定使用的算法包括RSA、DES和MD-5。MOSS对算法没有特别的要求,它可以使用许多不同的算法,该标准没有推荐特定的算法。
S/MIME的信息格式(主要是PKCS#7)并不限制S/MIME只能使用某些特定的算法,但是S/MIME 96b实现指南给出了有关的推荐和限制。这种作法是比较好的,因为它既提供了现在实现交互操作性的指南又提供了将来的选择方案。该指南允许使用RSA算法、DES、RC-2、RC-3、RC-5、MD-5和SHA-1并且给出了建议的密钥长度。不过由于RSA、RC-2、RC-5算法都是RSA取得的专利,因此这可能会限制它的可用性。
S/MIME还提供了一种方法在发送每条信息时指示用户有哪些算法是可用的。这样收发安全E-mail的双方就可以协调使用最强的算法。
PGP使用RSA公开密钥算法来进行签名和加密。此外它还使用IDEA秘密密钥算法和MD-5消息文摘算法。因为PGP使用的都是著名的算法并且使用了较长的密钥,因此它是非常安全的,并不逊于任何通用的商业加密系统。
同绝大多数标准一样,认证和信息格式并不仅局限于某些特定的算法,但是对算法进行修改将会产生一些交互操作性问题。PGP公司正考虑放弃RSA算法转而使用Diffie Hellman和El Gamal算法来用于加密和签名,主要是因为这两种算法不久将不再受到美国专利的限制。
【建议】你的E-mail安全系统使用的算法使用那些已经被人们所熟知并且被认为是安全的。一种算法的设计上是非常复杂的,因此不能贸然使用那些未经检验的新算法。不仅选择一种合适的密码算法是一件比较困难的事情,而且还要选择这种算法的高质量的实现。在使用一个E-mail安全软件前,要确信它已经被一个可信的组织或个人很好的实现过。
选用那些标准化的算法,以增强交互性。毕竟在向小组外的人员发送E-mail时,E-mail安全算法的标准化将成为一个主要的问题,因为不同的算法之间往往是不能交互操作的。
2.信息格式
本文我们不对安全E-mail的信息格式进行详细的描述,而是把重点放在信息格式可能带来的几个问题上。各个加密标准之间最大的不同就在于信息格式。不同的安全E-mail标准都使用不同的信息格式,而它们又是互不兼容的。将来出现能够处理多种标准的信息格式的软件是可能的,但从定义上讲,它们是不兼容的。
.明文与MIME
最初的Internet E-mail的内容只包括明文。有了MIME标准后,就允许E-mail信息被分成多个部分和结构,并在E-mail中携带各个部分的类型信息,也开始可以携带非明文数据。最经常使用的就是携带各种附加文档,MIME允许携带国际字符集、HTML、音频、语音邮件、图象、多媒体等。
老一些的E-mail安全标准,如PEM和传统的PGP等,主要是设计用来处理明文的,因此不能携带MIME形式的邮件信息。为了满足E-mail发展的需要,人们又开出了一些新的标准如MOSS、S/MIME和PGP/MIME等来传送MIME形式的E-mail邮件信息。一些老一些的加密标准如PGP也能够保护磁盘上的单个文件。这些需要保密的文件可以作为附加文档进行传送,这样就将E-mail保密的范围扩大到不仅仅包括明文信息。然而它并不能保密信息的总体结构或附加文档,也不大可能无缝的同E-mail软件集成。
.E-mail软件集成
不同的标准在E-mail软件和安全软件的集成度上有很大的差别。在最糟糕的情况下,用户需要通过手工的裁减和沾帖或通过文件控制来提供两者的集成。在最理想的情况下,集成对用户来讲实际上是无缝的。它们能够发文件、回信并且就象处理其它的明文信息一样处理保密的信息。如果E-mail软件为这种集成提供了一个专门的接口,那么就很容易实现E-mail软件与安全软件的集成,当然也可以在E-mail软件中直接内置安全特性。
.清洁签名
清洁签名不需对信息进行加密就可保证其完整性和真实性。如,对政府官员发出的公开声明进行清洁签名将是非常吸引人的。对信息进行清洁签名的另一个非常吸引人的地方就是它可以被不具有安全E-mail软件和与安全E-mail软件使用的信息格式不符的用户读取。这可以使用户在即使无法验证的情况下也可以查看信息。当然这里不包括加密的情况,因为接收方没有办法在不具有相应的解密软件的情况下阅读加密的信息。
现在很难找到一种能够与同老一些的邮件程序、现有的MIME邮件程序和跨网关非MIME邮件程序都兼容的信息格式。对于明文信息来讲问题很简单,因为明文在所有的E-mail系统中都有很好的交互操作性。而对于MIME来讲,问题就要困难一些。
RFC 1847描述了专门为清洁签名MIME而设计的多部分/签名信息格式。尽管这种格式用在一些标准会产生其它的一些问题,但MOSS、PGP/MIME和S/MIME都使用这种格式。使用标准的MIME邮件程序接收一个RFC 1847格式的签名信息的用户将能够查看信息的全部MIME内容。如果具有很好集成的安全E-mail特性,他们将能够验证签名。
这似乎是很理想的,但是当安全特性集成得不好时问题就发生了。绝大部分E-mail软件并不具有内置的安全机制,也没有提供良好的安全集成所需的设备。从网关转到非MIME环境时也会产生其它的问题。在这两种情况下,接收方可以象通常一样查看信息,但是他们不可能去验证签名。即使具有能够对只包括文本的信息进行清洁签名的E-mail软件,也不可能去验证MIME信息。
S/MIME使用一种可以部分解决这个问题的信息格式,即signedData。业界提出的另一个方案涉及到围绕RFC 1847结构的叫“应用/mime”的MIME包裹。它通常可通过网关发将邮件送到特定的安全实现那里。这样的清洁签名后的信息可以被非MIME邮件程序和一些MIME邮件程序查看。
PEM选择了一个只能够保密文本信息的非常简单的信息格式,部分原因是因为MIME标准在当时还并不完善。MOSS是专门设计用来保密一条信息的全部MIME结构的。尽管MOSS并没有被广泛的使用,但我们前面在信息格式部分描述的安全多部分框架特别是清洁签名MIME E-mail却被广泛的采用。
S/MIME能很好的保密全部的MIME信息。被发送的保密信息也使用MIME进行标记和打包,使它们易于被绝大部分MIME E-mail软件识别和处理。在前面信息格式部分提到的E-mail软件的集成问题都适用于S/MIME。用户应该确保S/MIME实现能够同E-mail软件很好的集成起来。
除了使用多部分/签名的清洁签名格式外,S/MIME还提供了一个称为signedData的清洁签名格式。然而如果用户没有相应的S/MIME软件,那么它们几乎不可能解读安全E-mail信息。这些安全E-mail并没有加密,只是仅仅以一种不能被绝大部分现在的E-mail软件所理解的方式进行了格式化处理。现在要求S/MIME实现支持signedData格式,鼓励它支持多部分/签名格式。
PGP是设计用来保密文本和存储在磁盘上的文件的,它并不能用来保密MIME。它用于E-mail主要有两种工作方式。一种是文件在用户的硬盘上进行加密然后被作为保密的附加文档发送。另一种是信息的文本内容被加密。在同一条信息中使用这两种加密方式是可能的,但这样并不能保护附加文档的顺序或信息的总体结构。
就象S/MIME将PKCS#7与MIME结合起来一样,PGP/MIME将PGP和MIME标准的功能结合起来。这样PGP/MIME就能够保密带附加文档、国际字符集和多媒体的E-mail。PGP/MIME使用与传统的PGP完全一样的算法、认证格式和信任管理。它们的不同之处只体现在信息格式上。
PGP/MIME的信息格式与S/MIME类似,只有一个显著的不同是后向兼容性。PGP被广泛用来保密文本内容尤其是用于文本内容的清洁签名。用于清洁签名的PGP/MIME格式与传统的PGP不能后向兼容。传统的PGP通常是在在签名后的文本末尾增加签名,而PGP/MIME是在文本和签名之间插入MIME结构。PGP/MIME现在尚未被广泛采用。
【建议】如果E-mail的内容只包括明文,那么老一些的信息格式是可以接受的,问题是现在Internet E-mail携带的内容已经远远超过了明文的范畴,因此E-mail用户应该具有能够处理MIME的E-mail软件。
当选择安全的E-mail软件来保护MIME E-mail时,要确信它真正遵从它实现的特定标准,并且要检查它的集成程度。这可以通过测试它保护附加文档和其它的结构化媒体如HTML和图象的能力来进行判别。集成的程度可通过观察对信息进行加密和签名、接收保密的E-mail和使用它来完成基本的任务的难易程度来测试,这些基本的任务可能包括打开附加文档、回信、发送文件或检索等。
如果公共邮件的清洁签名对你很重要,那么就应该确保你的安全E-mail软件支持用于清洁签名的RFC 1847多部分/签名格式。如果你想对发送的每一条信息都进行签名或者你同一个部分成员使用的安全E-mail信息格式与你不同的小组定期通信时清洁签名都是很重要的。如果要求清洁签名过的信息可以让所有的接收方进行验证,就应该考虑另外的格式如S/MIME signedData或应用/mime包裹等。
3.认证
数字认证的功能类似于一个ID卡,它可以用来保护E-mail用户的文件和数据结构。它作为信任的传输者,将用户的公钥和身份联系起来。一个认包括三个部分:用户的公钥;身份信息如用户的姓名、地址等;一个安全地将认证的所有部分联系起来的签名。签名使用密码算法进行计算,这可以防止非法窜改。当向某人发送E-mail时,发送者使用来自认证的密钥去对其加密。当接收E-mail时,接收者使用验证的密钥来验证签名者的身份。
通常情况下认证是公开出版的,这可以容易将保密E-mail发给它们的接收者。认证通常不包括需要保持为秘密的信息。一些保密E-mail软件允许用户为他们邮件的每个接收者收集一个大的认证集合。其它的软件在每次发送信息时恢复接收方的密钥是可能的。
认证通常也携带代表发送者的其它信息,包括发送者的姓名、一个描述发送者已经认证了什么的说明和一个序列号。它们也可能携带有效日期和网络地址,发送者可能要同这个地址进行联系以验证认证是否被取消。
.PGP密钥
PGP密钥就是指PGP使用的认证格式。一个PGP密钥总是由端用户创建而并不需要发放机构。拥有者请求朋友使用他们的签名来证明自己是密钥的真正拥有者。
PGP的一个最大特点就是它能够被不止一个人签名,每个签名者可以表明附加到他/她的签名中的信任程度。这使得信任可以从对一个密钥的多个签名中计算出来。一个PGP密钥总共可以附加数十个签名。
一个PGP密钥还拥有一串独特的数字和字符,它们的作用类似于指纹。这些数字和字符串长度很短,因此可以记录下来或通过电话告诉对方。如果你想验证一个朋友的密钥,你可以给他们打电话并且请求他们去确认密钥的指纹。使用认证而不是PGP的实现有时也使用这种指纹方法。
.X.509认证
X.509是由ISO/CCITT标准机构创建的认证标准。这些认证比PGP密钥丰富得多,它能携带更多的信息。X.509最新的版本是X.509 v3,它具有一个能够添加发送者希望的任何信息的扩展机制。X.509认证只能够被签名者签名一次,这是与PGP密钥不一样的。X.509认证现在被政府机构、公共认证机构、组织和个人广泛使用。
.认证交互操作性
目前流行的PGP实现只有一种,因此所有的PGP密钥都是可交互操作的。然而如果将来有了设计用来扩展PGP功能的各种实现,这个情况可能就会发生变化。
X.509认证大部分是可交互操作的,因此几乎所有的实现都能够识别另一个X.509认证。当一个认证使用某个特定的实现无法理解的扩展时问题就产生了。比如当一个具有有效期的认证被一个不能理解有效期的实现接收时就会产生这样的问题。
为了解决这个问题,人们就定义了一个交互操作性模型,这个模型清楚地确定了一个认证中使用了哪些域。交互操作性模型通常是一个特定标准的一部分。
PEM采用一种简单的认证方法并使用X.509 v1标准。由于我们前面讲述的原因,它有时会出现一些问题。MOSS为认证选择了一种更通用的方法,它既支持自己的非常简单的格式也支持X.509。
S/MIME使用X.509 v1认证格式。实现指南中指出了如何在Internet E-mail地址和X.509需要的识别名之间进行映射,但是没有作出具体要求,因为不可能这样的一个映射方案可以在任何环境中都适用。
对PGP的认证被称为一个“PGP密钥”并且它是一个只被PGP使用的信息格式。PGP密钥很简单,它通常包括拥有者的姓名和公开密钥。它的最大特点是它们能够被多次签名。PGP公司已经表示在未来的版本中将使用X.509认证。
【建议】既然签名格式和实现各不相同,考虑它能够携带的信任信息的类型和它是否能足以保证所需的安全是很重要的。如,一些认证格式不能携带有效日期,一些格式不能携带认证说明,还有的可能不包括足够的能清楚的确认拥有者身份的信息。
发送保密E-mail时用户必须要选择与E-mail接收方相同的认证格式。因为用户必须要能够同接收方交换认证才能接收到对方的保密E-mail。这样用户要想同使用各种安全E-mail标准的用户进行通信可能就需要拥有多种不同格式的认证。
即使人们都使用同样的认证,交互操作性的问题也会照样存在,因为这些认证使用数据的方式总会有差别的。认证交互操作性也会受到算法交互操作性带来的影响,因为每个认证都包括一个特定算法的公开密钥。一个真正安全的E-mail交互操作性只有在认证所使用的特定算法或算法集标准化后才可能获得。
4.信任管理
信任管理要更多的依靠系统使用的组织环境。一个信任系统常常也称为“信任模型”。现在许多企业或公司将公司的标志发放给它的员工就是信任模型的一种例子,这个标志可以表明持有者与该公司或企业是有关系的。这种标志只对企业中和对那些同该企业有关的个人或组织有意义。
信任模型的另一个例子是护照。护照是用来表明一个人是某个国家的公民的一种证据。与普通的公司发放的标志不同的是,一个国家发放的护照一般在世界上任何地方都可以被识别和信任。
信任模型的另外一类例子就是在一圈朋友中产生的信任。如果一个人将另一个人介绍到一圈朋友中,这个行动就表达了该人可以被信任这样一种信息。信任传递的范围是非常有限的,而且信任能够以一种相关的方式进行推移。如,如果甲相信乙,并且乙相信丙,那么甲就可以相信丙。而发放企业标志和护照就不会出现这样的情况。
有了一个护照或标志,信息的安全就包含在一个很难伪造的物理物体中,并且用来签名的数字算法使认证也很难伪造。
.认证机构
一个认证机构(CA)就是一个发放认证的组织。在CA发放认证前,它可能要对申请者的背景或其它的情况进行调查以保证人员或组织的身份。一旦身份被验证后,CA就发放一个认证并对其签名。该认证此时就可被它的拥有者广泛分发。
CA可以是秘密的也可以是公开的。一个秘密的CA可以为一个企业或组织发放认证。CA将认证发放给它的成员,此时它的成员有了这些由CA签名后的认证后就被纳入一个组织的信任系统内。
一个公共CA为一般的公众发放认证,它可以由政府机构建立也可以由私人企业建立。有一些国家如丹表、澳大利亚等国正准备建立一个全国性的公共CA,美国的VeriSign现在拥有一个公共的商业CA机构。
在一圈朋友或两个商业伙伴之间的信任关系中并不存在一个中央的CA。这里个人之间相互验证。这样的信任系统建立起来非常容易,因为不需要一个中央认证机构,当然它是不能伸缩也不可能运行到Internet上的。
.信任链
为了通过认证在大规模的范围内有效的传递信任,需要一些信任分级或信任链。没有一个认证机构可以为全世界提供所有的认证。信任或认证链的基本思想是通信双方决定它们可以在双方都信任的第三方的基础上彼此信任。比如说你可能会具有由不同的CA签名的认证,但是这些CA都信任第三个CA,那么信任链就通过第三个CA连接起来。
.直接信任
人们有可能通过交换认证并通过指纹确认来建立小范围的信任。即使没有指纹确认也有可能建议信任。如果一个用户使用认证成功的同某人交换了安全的E-mail,他就已经建立了一个安全的信道。在用户发送秘密信息前,他可以通过人工方式彼此验证双方的身份。比如说可以彼此讨论过去的一些经历或说一些只有双方才能听懂的话等。一旦已经确认了双方的身份,认证和密码技术将保证在以后双方继续进行通信时有一个安全的信道。认证不必被任何人签名。这种方法的不足是不能用在用户不了解的人身上,而且它将认证管理的责任放在终端用户那里。
PEM标准确定了一个简单而又严格的全球认证分级。所有的CA──不管是公共的、私人的、商业的还是其它的──都是这个分级中的一部分。这种做法会产生许多问题,由于根认证是由单一的机构进行的,但并不是所有的组织都信任这个认证机构。这个结构太严格了,它试图在认证结构分级而不是认证本身中实施认证,因而缺乏足够的灵活性。
S/MIME还从PEM确定的严格分级中吸取了教训。使用X.509认证意味着认证只能够带有一个签名,因此一对一的直接信任可以通过S/MIME来建立。
PGP简单的信任模型和广泛的可用性使它大受欢迎。它的信任模型不需任何服务器、认证机构或集成的设施就可以建立一个小组范围的信任。它将信任的管理完全放到端用户手里。这对许多用户来讲具有很大的吸引力,因为它大大简化了部署操作。
PGP信任模型的作用实际上就相当于把你的一个朋友介绍给你的另一个朋友。PGP密钥可以被几个人分别签名,这与每个认证只允许一个签名的其它的信任系统是不同的。这个多签名会产生一个信任网而不是一个严格的分级。PGP还允许你在对某人的密钥签名时注明你对此人的信任程度。一个想验证PGP密钥的人可能查看所有的签名。具有边界信任的三个人将会象具有完全信任的一个人一样。
这种作法既有有利的一面也有不利的一面。有利的一面是它与人们日常生活中的习惯很相似因此易于被人们理解和使用。不足的地方是它的可伸缩性差。它很适用于较小的组织或团体中的保密E-mail。用户可以在电话中验证彼此的身份然后对各自的PGP密钥进行签名。但如果用户想与一个自己从未遇到过的零售商建立信任的话,这个信任模型就有些无能为力了。PGP还具有几个用于认证有效日期或取消认证的功能,这是对大范围的安全信任是必要的。
三、结论
尽管现在各种安全E-mail标准都还不成熟,但将来各种保密E-mail的标准实现交互操作是有很大希望的。现在使用的算法、认证格式和信任管理系统将来可能会逐步趋于统一。在上面讨论的安全E-mail标准的四个部分中,信息格式是各种不同的标准唯一真正不可能相同的地方,但即使如此,这几种标准都支持多种格式和标准也是有可能的。因此,虽然短期内用户可能会遇到交互操作性的问题,但从长远的观点看,随着用户对交互操作性要求的增加解决这个问题是有可能的。
参考文献
《E-mail加密标准初探》余志华 中国计算机报9801
RFC 1847 - Security Multiparts for MIME: Multipart/Signed and Multipart/Encrypted
RFC 2311 - S/MIME Version …