加密是一种强有力的手段,能为数据提供保密性、真实性、完整性和限制性访问。由于网络常常面临着更大的威胁,因此人们常常使用加密方式来保证数据的安全,有时可能还会结合其他控制手段。
在研究加密应用于网络安全威胁前,先考虑如下几点:
1)加密不是“灵丹妙药”。一个加密的有缺陷的系统设计仍然是一个有缺陷的系统设计。
2)加密只保护被加密的内容(这似乎是显然的,其实并不尽然)。在数据被发送前,在用户的“指尖”到加密处理过程之间已经被泄露了,这些数据在远程被收到并解码后,它们再次被泄露。最好的加密不能避免特洛伊木马攻击,特洛伊木马在加密前拦截数据。
3)加密带来的安全性不会超过密钥管理的安全性。如果攻击者能猜测或推导出一个弱加密密钥,消息可能就泄露了。
在网络应用软件中,加密可以应用于两台主机之间(称为链路加密),也可以应用于两个应用软件之间(称为端到端加密),下面将分别介绍这两种形式。但不管采用哪一种加密形式,密钥的分发都是一个问题。由于考虑到用于加密的密钥必须以一种安全的方式传递给发送者和接收者,因此,在本节中,也要研究用于实现网络中安全的密钥分发技术。最后,还要研究一种用于网络计算环境的密码工具。
1.链路加密
在链路加密技术中,系统在将数据放入物理通信链路之前对其加密。在这种情况下,加密发生在OSI参考模型中的第1层或第2层(在TCP/IP中是这样)。同样,解密发生在到达并进入接收计算机的时候。链路加密模型如图6-5所示。
图6-5 链路加密模型
加密保护了在两台计算机之间传输的消息,但存在于主机上的消息是明文(明文意味着“未经加密”)。请注意,因为加密是在底层协议中进行的,因而消息在发送者和接收者的其他所有层上都是暴露的。如果有很好的物理安全隔离措施,则可能不会太在意这种暴露(例如,这种暴露发生在发送者或者接收者的主机或工作站上,可以使用安装了警报器或者加了重锁的门保护起来)。然而,应该注意到,在消息经过的路径上的所有中间主机中,消息在协议的上面两层是暴露的。暴露之所以发生,是由于路由和寻址信息不是由底层读取的,而是在更高层上进行。消息在所有中间主机上都是未经加密的,而且不能保证这些主机都值得信赖。
链路加密对用户是透明的。加密实际上变成了由低级网络协议层完成的传输服务,就像消息寻址或者传输错误检测一样。图6-6表示的是一条典型的经过链路加密的消息,其中,用阴影表示的部分是被加密过的。因为数据链路的头部和尾部的一些部分是在数据块被加密之前添加上去的,所以每一个块都有一部分是用阴影来表示的。由于消息M在每一层都要进行处理,因而头部和控制信息在发送端被加上去,在接收端被删除。硬件加密设备运行起来快速而且可靠。在这种情况下,链路加密对操作系统和操作者都是透明的。
图6-6 链路加密后的消息
当传输线路是整个网络中最大的薄弱点时,链路加密就特别适用。如果网络上的所有主机都相当安全而通信介质是与其他用户共享或者不够安全的,那么链路加密就是一种简便易用的方法。
2.端到端加密
正如名称所暗示的,端到端加密从传输的一端到另一端都提供了安全保障。加密可以由用户和主机之间的硬件设备来执行,也可以由运行在主机上的软件来进行。在这两种情况下,加密都是在OSI参考模型的最高层(第7层,应用层;也可能是第6层,表示层)上完成的。端到端加密模型如图6-7所示。
由于加密先于所有的寻址和传输处理,所以消息以加密的数据形式通过整个网络。这种加密方式可以克服在传输模型的较低层上存在的潜在弱点,即使一个较低层不能保持安全,将它收到的消息泄密了,数据的机密性也不会遇到危险。图6-8表示一条典型的经过端到端加密的消息,其中也对加密的部分用阴影标注出来了。
使用端到端加密,消息即使经过了多台主机也能够保证机密性。消息的数据内容仍然是加密的,而且消息在传输的时候也是加密的(可以防范在传输过程中泄密)。因此,即使消息必须经过A和B之间的路径上潜在的不安全结点的传递,也能够防范在传输中消息泄密。
图6-7 端到端加密模型
图6-8 端到端加密的消息
3.链路加密与端到端加密的比较
对消息进行简单加密不能绝对保证在传输过程中或者在传输之后不会被泄密。然而,在很多情况下,考虑到窃听者破译密码的可能性和消息的时效性,加密的力量已经足够强大了。因为安全包含很多方面的内容,所以必须在攻击的可能性与保护措施上求得均衡,而不必强调绝对安全保证。(www.xing528.com)
在链路加密方式中,经过一条特定链路的所有传输都要调用加密过程。通常,一台特定的主机与网络只有一条链路相连,这就意味着该主机发出的所有通信都会被它加密。这种加密方案要求接收这些通信的其他每台主机也必须用相应的密码设备来对这些消息解密,而且所有主机必须共享密钥。一条消息可能经过一台或者多台中间主机的传递,最终到达接收端。如果该消息在网络中的某些链路上经过了加密处理,而在其他链路上没有经过加密处理,那么,加密就失去了部分优势。因此,如果一个网络最终决定采用链路加密,通常是该网络中的所有链路都进行加密处理。
与此相反,端到端加密应用于“逻辑链路”,是两个进程之间的通道,是位于物理路径以上的一层。由于在传输路径上的中间主机不需要对信息进行加密或解密,所以它们不需要任何密码设备。因此,加密仅仅用于需要进行加密处理的消息和应用软件。此外,可以使用软件来进行加密。这样,可以有选择地进行加密,有时对一个应用进行加密,有时甚至可以对一个特定应用中的某一条消息进行加密。
当考虑加密密钥时,端到端加密的可选择性优点却变成了一个缺点。在端到端加密中,每一对用户之间有一条虚拟的加密信道。为了提供适当的安全性,每一对用户应该共享一个唯一的密码密钥,密钥的数量要求与用户对的数量相等,即n个用户需要n(n-1)/2个密钥。随着用户数量的增加,需要的密钥数量会迅速上升。然而,这是假设使用单密钥加密的情况下计算出来的数量,在使用公钥的系统中,每名接收者仅需要一对密钥。
链路加密与端到端的比较见表6-1。链路加密对用户而言速度更快、更容易实施,而且使用的密钥更少。端到端加密更灵活,可以有选择地使用,它是在用户层次上完成的,并且可以集成到应用软件之中。没有一种加密形式能够适用于所有情况。
表6-1 链路加密与端到端加密的比较
在某些情况下,两种加密方式都可以使用。如果用户不信任系统提供的链路加密质量,则可以使用端到端加密。同样,如果系统管理员担心某个应用程序中使用的端到端加密方案的安全性,那么也可以安装一台链路加密设备。如果两种加密方式都相当快,重复使用两种安全措施几乎没有负面影响。
4.SSH加密
安全外壳协议(Secure Shell Protocol,SSH)是一对协议(版本1和2),最初是为UNIX操作系统定义的,但也可用于Windows 2000操作系统,为Shell或者操作系统命令行解释器提供了一个鉴别和加密方法。为实现远程访问,SSH的两个版本都取代了UNIX的系统工具(如Telnet、rlogin和rsh等)。SSH能有效防止欺骗攻击和修改通信数据。
SSH还包括在本地与远程站点之间协商加密算法(如DES、IDEA和AES算法)以及鉴别(包含公钥和Kerberos)。
5.SSL加密
安全套接层(Secure Sockets Layer,SSL)协议最初是由Netscape公司设计来保护浏览器与服务器之间的通信的。SSL也可称为传输层安全(Transport Layer Security,TLS)。SSL协议实现了应用软件(如浏览器)与TCP/IP之间的接口,在客户端与服务器之间提供服务器鉴别、可选客户鉴别和加密通信通道。客户端与服务器为会话加密协商一组相互支持的加密方式,可能使用三重DES和SHAI,或者128位密钥的RC4以及MD5。
要使用SSL协议,客户端首先要请求一个SSL会话。服务器用它的公钥证书响应,以便客户端可以确认服务器的真实性。客户端返回用服务器公钥加密的对称会话密钥部分。服务器与客户端都要计算会话密钥,然后使用共享的会话密钥进行加密通信。
SSL协议虽然简单,但是很有效,而且是Internet上使用最广泛的安全通信协议。但是,SSL协议只保护从客户端浏览器到服务器解密点这一段(服务器解密点通常是指服务器的防火墙,或者稍微强一点,是到运行Web应用的计算机)。从用户键盘到浏览器,以及穿过接收者公司网络,数据都可能被泄露。Blue Gem Security公司已开发了一种被称为LocalSSL的产品,该产品可以在键入数据时进行加密,直到操作系统将它传递给浏览器,这样,可以避免键盘记录的特洛伊木马攻击,这类木马一旦植入用户计算机,它就可以泄露用户键入的任何数据。
6.IPSec
32位Internet地址结构正在逐步被用尽。一种被称为IPv6(IP协议组的第6个版本)的新结构解决了寻址问题。作为IPv6协议组的一个组成部分,IETF采用了IP安全协议组(IP Security Protocol Suite,IPSec)。设计中针对一些基本的缺陷(如容易遭受欺骗、窃听和会话劫持等攻击),IPSec定义了一种标准方法来处理加密的数据。由于IPSec是在IP层上实现的,所以它会影响到上面各层,特别是TCP和UDP。因此,IPSec要求不改变已经存在的大量TCP和UDP。
IPSec在某些方面与SSL协议有些相似,它们都在某种程度上支持鉴别和机密性,也不会对其上的层(在应用层)或者其下的层做必需的重大改变。与SSL协议一样,IPSec被设计成与具体的加密协议无关,并允许通信双方就一套互相支持的协议达成一致。
7.签名代码
前面曾提到一些人可以将活动代码放置在网站上,等着毫无戒心的用户下载。活动代码将使用下载它的用户的权限运行,这样会造成很严重的破坏,从删除文件、发送电子邮件消息,到使用特洛伊木马造成轻微而难以察觉的破坏等。目前,网站的发展趋势是允许从中心站点下载应用软件和进行软件升级,因此,下载到一些怀有恶意的东西的危险性越来越大。签名代码(Signed Code)是减少这种危险的一种方法。一个值得信赖的第三方对一段代码追加一个数字签名,言外之意就是使代码更值得信赖。PKI中有一个签名结构有助于实现签名。谁可以担当可信赖的第三方呢?一个众所周知的软件生产商可能是公认的代码签名者。但是,对于生产设备驱动程序或者代码插件的不出名的小公司是不是也值得信赖呢?如果代码的销售商不知名,那么其签名是没有用处的。
然而,2001年3月,Verisign宣布它以微软公司的名义错误地发布了两个代码签名证书给一名声称是(但实际上不是)微软的职员。在错误被检查出来之前,这些证书已经流通了将近两个月的时间。虽然后来Verisign检查出了这个错误并取消了这些证书,而且只需要检查Verisign的列表就可以知道该证书已被撤销,但绝大多数人都不会对下载有微软签名的代码表示产生怀疑。
8.加密的E-mail
一个电子邮件消息很像一张明信片的背面。邮件投递员(以及在邮政系统中经手明信片传递的任何人)都可以阅读其中的地址和消息部分的任何内容。为了保护消息和寻址信息的私有权,可以使用加密来保护消息的机密性及其完整性。
正如在其他几种应用中看到的一样,加密是一个相对比较容易的部分,密钥管理才是一个更困难的问题。密钥管理通常有两种主要的方法,分别是使用分层的、基于证书的PKI方案来交换密钥以及使用单一的、个人对个人的交换方式。分层方法称为S/MIME,已经广泛用于商业邮件处理程序,如Microsoft Exchange或者Eudora。个人方法称为PGP,是一种商业附加软件。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。