加密和身份验证算法
由于对安全性的攻击方法多种多样,设计者很难预计到所有的攻击方法,因此设计安全性算法和协议非常困难。普遍为人接受的关于安全性方法的观点是,一个好的加密算法或身份验证算法即使被攻击者了解,该算法也是安全的。这一点对于Internet安全性尤其重要。在Internet中,使用嗅探器的攻击者通过侦听系统与其连接协商,经常能够确切了解系统使用的是哪一种算法。
与Internet安全性相关的重要的密码功能大致有5类,包括对称加密、公共密钥加密、密钥交换、安全散列和数字签名。
1. 对称加密
大多数人都熟知对称加密这一加密方法。在这种方法中,每一方都使用相同的密钥来加密或解密。只要把握了密钥,就可以破解使用此法加密的所有数据。这种方法有时也称作秘密密钥加密。通常对称加密效率很高,它是网络传送大量数据中最常用的一类加密方法。
常用的对称加密算法包括:
• 数据加密标准( DES )。DES首先由IBM公司在7 0年代提出,已成为国际标准。它有5 6位密钥。三重DES算法对DES略作变化,它使用DES算法三次加密数据,从而改进了安全性。
• RC2 、RC4和RC5。这些密码算法提供了可变长度密钥加密方法,由一家安全性动态公司,RSA数据安全公司授权使用。目前网景公司的Navigator浏览器及其他很多Internet客户端和服务器端产品使用了这些密码。
• 其他算法。包括在加拿大开发的用于Nortel公司Entrust产品的CAST、国际数据加密算法( IDEA )、传闻由前苏联安全局开发的GOST算法、由BrUCe Schneier开发并在公共域发表的Blowfish算法及由美国国家安全局开发并用于Clipper芯片的契约密钥系统的Skipjack 算法。
安全加密方法要求使用足够长的密钥。短密钥很轻易为穷举攻击所破解。在穷举攻击中,攻击者使用计算机来对所有可能的密钥组合进行测试,很轻易找到密钥。例如,长度为4 0位的密钥就不够安全,因为使用相对而言并不算昂贵的计算机来进行穷举攻击,在很短的时间内就可以破获密钥。同样,单DES算法已经被破解。一般而言,对于穷举攻击,在可猜测的将来,1 2 8位还可能是安全的。
对于其他类型的攻击,对称加密算法也比较脆弱。大多数使用对称加密算法的应用往往使用会话密钥,即一个密钥只用于一个会话的数据传送,或在一次会话中使用几个密钥。这样,假如会话密钥丢失,则只有在此会话中传送的数据受损,不会影响到较长时期内交换的大量数据。
2. 公共密钥加密
公共密钥加密算法使用一对密钥。公共密钥与秘密密钥相关联,公共密钥是公开的。以公共密钥加密的数据只能以秘密密钥来解密,同样可以用公共密钥来解密以秘密密钥加密的数据。这样只要实体的秘密密钥不泄露,其他实体就可以确信以公共密钥加密的数据只能由相应秘密密钥的持有者来解密。尽管公共密钥加密算法的效率不高,但它和数字签名均是最常用的对网络传送的会话密钥进行加密的算法。
最常用的一类公共密钥加密算法是RSA算法,该算法由Ron Rivest 、Adi Shamir 和LenAdleman开发,由RSA数据安全公司授权使用。RSA定义了用于选择和生成公共/秘密密钥对的机制,以及目前用于加密的数学函数。
3. 密钥交换
开放信道这种通信媒体上传送的数据可能被第三者窃听。在Internet这样的开放信道上要实现秘密共享难度很大。但是很有必要实现对共享秘密的处理,因为两个实体之间需要共享用于加密的密钥。关于如何在公共信道上安全地处理共享密钥这一问题,有一些重要的加密算法,是以对除预定接受者之外的任何人都保密的方式来实现的。
Diffie-Hellman密钥交换算法答应实体间交换足够的信息以产生会话加密密钥。按照惯例,假设一个密码协议的两个参与者实体分别是Alice和Bob,Alice使用Bob的公开值和自己的秘密值来计算出一个值;Bob也计算出自己的值并发给Alice,然后双方使用自己的秘密值来计算他们的共享密钥。其中的数学计算相对比较简单,而且不属于本书讨论的范围。算法的概要是Bob和Alice能够互相发送足够的信息给对方以计算出他们的共享密钥,但是这些信息却不足以让攻击者计算出密钥。
Diffie-Hellman算法通常称为公共密钥算法,但它并不是一种公共密钥加密算法。该算法可用于计算密钥,但密钥必须和某种其他加密算法一起使用。但是,Diffie-Hellman算法可用于身份验证。Network Associates公司的P G P公共密钥软件中就使用了此算法。
密钥交换是构成任何完整的Internet安全性体系都必备的。此外,IPsec安全性体系结构还包括Internet密钥交换( I K E )及Internet安全性关联和密钥治理协议( ISAKMP )。
4. 安全散列
散列是一定量数据的数据摘要的一种排序。检查数字是简单的散列类型,而安全散列则产生较长的结果,经常是1 2 8位。对于良好的安全散列,攻击者很难颠倒设计或以其他方式毁灭。安全散列可以与密钥一起使用,也可以单独使用。其目的是提供报文的数字摘要,用来验证已经收到的数据是否与发送者所发送的相同。发送者计算散列并将其值包含在数据中,接收者对收到的数据进行散列计算,假如结果值与数据中所携带的散列值匹配,接收者就可以确认数据的完整性。
常用的散列方法由RSA数据安全公司提出,包括MD2、MD4和md5报文摘要函数。安全散列算法( SHA )是由美国国家标准和技术协会( NIST )所开发的标准摘要函数。散列可以单独使用,也可以和数字签名一起使用。
5. 数字签名
前面提到的公共密钥加密依靠于密钥对,而数字签名则依靠公共密钥加密的特性,即答应数据以实体密钥对中的秘密密钥来加密,以公共密钥来解密。发送者首先对于要签名的数据进行安全散列计算,然后对结果使用秘密密钥加密。而接收者首先进行相同的散列计算,然后对发送者所附加的加密值进行解密。假如两次计算的值能够匹配,接收者就可以确信公共密钥的主人就是对报文签名的实体,且报文在传送中并没有被修改。
RSA公共密钥加密算法可以用于数字签名。签名实体为待签名的数据建立散列,然后以自己的密钥对散列加密;证实实体则对接收到的数据进行相同的散列计算,使用签名实体的公共密钥对签名解密,并且比较所得的两个值。假如散列与解密的签名相同,则数据就得到证实。
数字签名有如下几种含义:
• 假如签名得到证实,说明所接收到的报文在从签名到接收的一段时间内未经任何改动。
• 假如不能证实签名,则说明或者是报文在传送过程中受到了破坏或篡改,或者是签名计算错误,又或者是签名在传送过程中被破坏或篡改。在上述任何情况下,未得到证实的签名并不一定是坏事,但是要求对报文重新签名并重传,以便最终能为接收者所接受。
• 假如签名得到证实,意味着与公共密钥相关联的实体是对报文签名的唯一实体。换言之,与公共密钥关联的实体不能否认自己的签名,这是数据签名的重要特性,称为不可抵赖。
还有其他机制可以实现数据签名,而RSA是其中应用最广泛的,并且已在大多数Internet产品中实现。
安全性关联
安全性关联是( SA ) IPsec的基本概念。安全性关联包含能够唯一标识一个安全性连接的数据组合。连接是单方向的,每个S A由目的地址和安全性参数索引( SPI )来定义。其中SPI是对RFC1825修改后的Internet草案中所要求的标识符,它说明使用SA的IP头类型,如AH或ESP。SPI为32位,用于对S A进行标识及区分同一个目的地址所链接的多个SA。进行安全通信的两个系统有两个不同的SA,每个目的地址对应一个。
每个S A还包括与连接协商的安全性类型相关的多个信息。这意味着系统必须了解其S A、与S A目的主机所协商的加密或身份验证算法的类型、密钥长度和密钥生存期。
密钥治理
如何治理密钥是Internet安全性专业人士面临的最复杂的问题之一。密钥治理不仅包括使用密钥协议来分发密钥,还包括在通信系统之间对密钥的长度、生存期和密钥算法进行协商。Internet工作组和研究团体对此已进行了大量工作,但是由于尚未达成一致,目前还没有发表任何R F C。
Internet安全性关联密钥治理协议( ISAKMP ) 为密钥的安全交换定义了整个基本构架。ISAKMP实际上是一个应用协议,协议中定义了用于系统之间协商密钥交换的不同类型报文,它在传输层使用UDP。
但是ISAKMP只是特定机制所使用的框架,而没有定义实际完成交换的机制和算法。这些年来在不同的建议中定义了大量的交换机制,通常以Diffie-Hellman密钥交换为基础。主要的提案包括:
• Photuris 。此提案基于Diffie-Hellman 算法,但增加了要求,即要求节点首先发送一个cookie (一个随机数),然后服务器给予应答,这样减少了否认服务攻击的威胁(否认服务攻击是由攻击者伪造源地址而导致的)。Photuris也要求通信各方都必须对协商好的密钥签名,以减少中间者攻击的危害(所谓中间者攻击,是指某个攻击者对系统的Alice冒充自己是Bob,又对另一个系统的Bob冒充自己是Alice )。
• Sun 公司的Internet协议的简单密钥治理( SKIP )。SKIP也是以Diffie-Hellman密钥交换为基础,但是它并不要求通信各方使用随机数来计算其密钥,而是要求使用静态的密码表。各方查找密码表中的秘密值,然后基于查到的秘密值来计算,并传送所算出的值。
• OAKLEY 。此机制与Photuris有某些相似特性,但在不考虑否认服务攻击的情形下,它提供不同的密钥交换模式。1998年秋,基于OAKLEY和SKEME ( Internet的安全密钥交换机制),Internet密钥交换最终在Internet密钥交换规范中得以定义。
读者应该注重到,人工密钥治理也是一个重要选项,而且在很多情况下是唯一的选项。人工方法要求个人单独交付密钥,并使用密钥来配置网络设备。即使在开放标准已经充分确定并且实现之后,人工
密钥治理仍将继续是一个重要选择,对于商业产品尤其如此。
实现IPsec
IP层安全性用于保护IP数据报。它不一定要涉及用户或应用。这意味着用户可以愉快地使用应用程序,而无需注重所有的数据报在发送到Internet之前,需要进行加密或身份验证,当然在这种情形下所有的加密数据报都要由另一端的主机正确地解密。
这样就引入了如何实现IPsec的问题,有如下三种可能方法:
• 将IPsec作为IPV4栈或IPV6栈的一部分来实现。这种方法将IP安全性支持引入IP网络栈,并且作为任何IP实现的一个必备部分。但是,这种方法也要求对整个实体栈进行更新以反映上述改变。
• 将IPsec作为“栈中的一块”( BITS )来实现。这种方法将非凡的IPsec代码插入到网络栈中,在现有IP网络软件之下、本地链路软件之上。换言之,这种方法通过一段软件来实现安全性,该软件截获从现有IP栈向本地链路层接口传送的数据报,对这些数据报进行必要的安全性处理,然后再交给链路层。这种方法可用于将现有系统升级为支持IPsec 的系统,且不要求重写原有的IP栈软件。
• 将IPsec作为“线路的一块”( BITW )来实现。这种方法使用外部加密硬件来执行安全性处理功能。该硬件设备通常是作为一种路由器使用的IP设备,或者更确切一些,是安全性网关,此网关为位于它后面的所有系统发送的IP数据报服务。假如这样的设备只用于一个主机,其工作情况与BITS方法类似,但假如一个BITW设备为多个系统服务,实现相对要复杂得多。
上述各种方法的差别不在于字面上,而在于它们的适用情况不同。要求高级别安全性的应用最好使用硬件方法实现;而假如系统不具备与新的IPsec兼容的网络栈,应用最好选择BITS方法。
隧道模式与透明模式
下图两个系统建立了S A,以便在Internet上安全地通信。其中一个系统产生网络业务流,经过加密或者签名,然后发送给目的系统。而在接收方,首先对收到的数据报进行解密或者身份验证,把净荷向上传送给接收系统的网络栈,由使用数据的应用进行最后的处理。两个主机之间的通信如同没有安全性头一样简单,而且数据报实际的IP头必须要暴露出来以便在Internet选路,因此这种方法称为使用S A的透明模式。
一对主机使用IPsec进行透明通信
S A也可以用来将安全IP以隧道方式通过互联网络。见下图,来自系统A的所有IP包首先转发到安全性网关X,由X建立一条跨越Internet、目的地为安全性网关Y的隧道,由Y对经隧道方式传来的数据拆包并转发。安全性网关Y可能将包转发给本地互联网络内的任一主机B、C或D,也可能转发给外部主机,如M。这取决于源主机如何为这些包定向。假如S A目的节点是安全性网关,则称为隧道关联。即,隧道传送既可以在两个安全性网关之间进行(下图), 也可以在正规节点和安全性网关之间进行。因此,图中的主机M可以与安全性网关X或Y建立隧道连接,M所发送的数据报首先传送给安全性网关,然后经过网关解密或身份验证之后,再进行正确地转发,由此可见这是一种隧道方式。
IP安全性隧道