IPsec是基于IP层提出的网络安全协议,它是一个协议族,不是一个单一的协议,其国际工程任务组草案协议定义号码是4301。草案链接:
https://tools.ietf.org/html/rfc4301
该协议经历了3个版本的变迁
rfc1825—————–>rfc2401——————–>rfc4301
其主要目的就是保证TCP/IP模型中定义的IP层的网络安全,分为:
- 数据源原始性
- 包的完整性
- 保密性
其实现这个目的方法是对IP层的数据进行加密来保证保密性,使用hash算法保证数据的完整性,使用源认证保证数据的原始性。
名词解释:
AH: Authentication Header – 头认证
ESP: Encapsulating Security Payload – 封装安全负载
SA: Security Association – 安全管理
AH: 主要是提供无连接的完整性和保证数据源的一致性,以及防止网络重放攻击
ESP: 主要提供数据的保密性,无连接的完整性和保证数据源的一致性,抗网络重放攻击
SA: 提供AH(或)和ESP中协议中的参数,这些参数一般指的是认证和加密时所使用的密钥。这里涉及到另外一个协议Internet Security Association and Key Management Protocol (ISAKMP) ,负责网络认证和密钥交换。
AH和ESP在使用的时候只能二选一,即要么使用AH,要么采用ESP来保护数据。但是在实现的时候,根据rfc4301,ESP是必须被实现的,AH则是可选的。
加密部分使用对称加密,对称加密就是加密和解密都使用同样的密码。这样就涉及到密码的传递,一端使用某个密钥加密,需要告诉另外一端这个密钥是什么,那么这个密钥又是怎么传递的,关于这部分IPsec定义了一个子协议,IKE就是密码交换协议。通常密码交换使用RSA或者DSA不对称加密或者预共享密码(pre-shared key),不对称加密策略是一端使用公钥加密,另外一端使用私钥加密,而私钥不会,也不需要在网络中传输,因此不存在被截获的问题。
密钥不会被传输的,传输的只是生成密钥的种子(IETF草案中,定义为material,直译为材料,其实它的作用就像是一个种子,有了种子和算法,我们就可以生成密钥)
也许有人会说,那直接使用不对称对IP层负载数据进行不就可以,这样省的再使用另外一套加密,并且也不要传递密钥了。问题就是不对称加密比起对称加密很慢,速度跟不上网络的传输速度。
通常IPsec中所使用的对称加密协议有:
- DES-CRC
- TDES-CRC(或者说3DES-CRC)
- AES-CRC
- Blowfish-CRC
除了上述的加密算法,IPsec还规定另外一种, NULL,NULL是什么都没有做,经过NULL加密的数据,前后是没有变化的。
在通信的时候,一个会话中并不是所有的包都是使用同一个密钥,而是不同密钥对不同时间段的数据包加密,这样就避免了,即使一部分数据包被截获,仍然无法正确的解析出一个完整有效信息。
IPsec有2中实现模式
- 点对点的传输模式(Transport Mode)
- 网络隧道模式(Network Tunnel Mode)
点对点传输模式
IP头完全不会被动到,就是说不会被修改,也不会被加密,只有IP的负载数据部分会被加密,即使用AH或ESP保护起来;
网络隧道模式
在这种模式下,整个IP包会被AH或ESP保护起来,这种模式一般用于VPN。
SA是IPsec中非常重要的一个子协议,因为IPsec服务最开始的阶段开始于SA,并且SA存活于整个会话过程中。SA主要做
- 认证方法
- diffie-Helman组的选择
- 加密算法 ( 用于保密 )
- DH交换 ( 密钥生成种子 )
- hash算法 ( 用于数据完整性 )
- 策略协商( 使用AH还是ESP )
参考:
http://en.wikipedia.org/wiki/IPsec
https://tools.ietf.org/html/rfc4301
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.