2009-4-2 追风 转载请注明出处。
本文主要参考英文版IPsec HOWTO
IPsec安全技术全接触
本篇为IPsec HOWTO的第一部分,包括为什么使用IPsec,并简单介绍了IPsec原理。
原理
为什么需要IPsec?
IPv4
的包本身没有提供任何安全保护,黑客可以通过信息包探测、IP电子欺骗、连接截获、replay攻击(是一种不断发相同序列号的包使系统崩溃的攻击方法)
等方法来攻击。因此,我们收到的数据包存在着以下危险:并非来自合法的发送者; 数据在传输过程中被人修改;
数据内容已被人窃取(例如军事机密等重要信息的对话)。IPsec的目的就是为了实现数据传输的完整性(源地址验证和保证数据没有被修改)和机密性(没有
被人看过)以及提供一定程度的对replay攻击的保护。IPsec可用它为IP及其上层协议(TCP和UDP等)提供安全保护。
什么是IPsec?
IPsec是IP协议的扩展,他为IP协议及其上层协议提供安全保护。最初是为IPv6标准开发的,后来又针对IPv4开发。IPsec的结构在RFC2401中有详细描述。下面小节将简单介绍IPsec的安全体系结构。
Ipsec
使用两种不同的协议-AH(认证头标)和ESP(封装化安全净荷)-来保证通信的有效性,完整性和机密性,并能起到抵御replay攻击的作用。它既可以
保护数据包内部的IP数据,也可以只保护上层协议。IPsec有两种模式,分别是传输模式和通道模式。在通道模式中,IP数据包被另外一个IP数据包完全
封装。传输模式中,通过在IP头和上层协议头之间加入一个IPsec头来保护IP数据包中的载荷。(见图1)
图1 传输模式和通道模式
IPsec
使用HMAC(hash message authentication
codes)来来保证IP数据包的完整性。HMAC是IPsec协议(AH或ESP)使用例如MD5或SHA等加密算法计算出来的一个哈西值。计算过程基
于secret key和IP数据包的内容,以及IP包头中固定不变的地方,如IP地址。计算出的HMAC会放在AH头和ESP头中。
IPsec使用标准的对称加密算法来保证IP数据包中数据的机密性。IPsec标准要求IPsec实现中必须包含有NULL和DES算法.现在一般都使用安全性更好的算法如: 3DES, AES, Blowfish.
The
IPsec standard requires the implementation of NULL and DES. Today
usually stronger algorithms are used like 3DES, AES and Blowfish.
IPsec
使用sliding window来抵御service attack。每个数据包都被指定一个序列号,只有数据包中的序列号包含在sliding
window中,并且接收段是第一次收到该序列号的包时,数据包才能传送成功。之后再接受到的相同序列号的包将会被丢掉。这样就避免了攻击者记录下原始数
据包并不断向接收端发送这个数据包的replay攻击。
为了能够封装和解除封装IPsec数据包,我们需要一种方法能够存储secret
keys,加密的算法和IP地址。所有这些保护IP数据包所需要的参数都存放在security
association(SA,安全联盟)中,而每一个SA(安全联盟)都存放在security association
database(SAD,安全联盟数据库)中。
每一个SA中都定义了如下参数:
通过IPsec头封装之后,新数据包的源IP地址和目的地IP地址。传输模式中,源IP地址与封装之前的IP地址相同。通道模式中,由于是用一个新的IP头封装的整个IP数据包,所以源IP地址与封装之前的IP地址可能不同。
用来保护数据包安全的IPsec协议,AH或ESP,或者两者一块使用。
IPsec所用的转码方式(即算法,MD5或SHA等)和密钥(secret key)。
安全参数索引(SPI-Security Parameter Index),一个32位的号码,用于识别和索引SAD中的SA。
有时,SAD中的SA也可以存放更多的参数,例如:
IPsec模式(通道模式或传输模式)。
sliding window 的大小,抵御replay攻击时用到。
安全联盟的有效时间。
注意:如果以一个主机A作为发送端,主机B作为接收端,那么他们之间建立的IPsec通道只是单向的,只有A->B时数据包加密,B->A时数据包不加密。所以,要想实现双向加密,就需要再以B为发送端,A为接收端,建立另一个IPsec通道。
SA中只规定了IPsec如何对通信进行保护,其他更多需要定义的信息存放在SP(Security Policy安全策略)中,而SP都存放在SPD(Security Policy Databace安全策略数据库)中。
SP中通常定义如下参数:
被保护的原始IP数据包(未经过IPsec封装的)的源IP地址和目的地IP地址。在传输模式中,这两个地址于SA中存储的相同。通道模式中,这两个地址于SA中存储的就可能不同了。
所保护的协议和端口。在某些IPsec的应用中,不允许指定要保护的协议,所以,所有在两个IP地址之间的通信都将会得到保护。
保护数据包所用到的SA。
SAD
和SPD两个数据库联合使用。对于发送方,每个SPD的元组(即SP)都有指针指向相关的SAD的元组(即SA)。如果一
个SPD的元组没有指向适合发送包的SA,那么将会创建新的SA或SA束,并将SPD的元组和新的SA元组链接起来。对于接收方,通过包头信息包含的IP
目的地址、IP安全协议类型(AH或ESP)和SPI(安全参数索引)在SAD中查找对应的SA。
注意:手动设置安全联盟(SA)并不安
全,也是不提倡的。因为密钥和加密用的算法需要在虚拟专用网中的所有成员间共享,而在各成员交换密钥的时候,交换过程并没有被加密(此时SA和没有建
立)。为了解决这个问题,人们开发了IKE(internet key exchange protocol 网络密钥交换协议)。
IKE
用于动态建立SA。IKE代表IPsec对SA进行协商,并对SAD数据库进行填充。
IKE是一个混合型的协议,它建立在由Internet安全联盟和密钥管理协议(ISAKMP)定义的一个框架上。IKE使用了两个阶段的ISAKMP。
第一阶段建立IKE安全联盟,第二阶段利用这个既定的安全联盟,为IPsec协商具体的安全联盟。
阅读(2440) | 评论(0) | 转发(0) |