IPsec 协议族
VPN中传送的信息是加密的,提供这种加密服务的是IPsec
IPsec(IP security)是能够在IP层提供互联网通信安全的协议族。
它允许通信双方选择合适的算法和参数,为保证互操作性,IPsec还包含了一套加密算法,所有IPsec的实现都必须使用。
IPsec协议族中的协议可划分为:
- IP安全数据包格式的两个协议
- 鉴别首部AH协议:提供源点鉴别和数据完整性,但不能保密
- 封装安全有效载荷ESP协议:提供源点鉴别、数据完整性和保密
- 有关加密算法的三个协议
- 互联网密钥交换IKE协议
(AH协议的功能都已包含在ESP协议中)
所谓“安全数据报”是指数据报的数据部分是经过加密的,并能够被鉴别的。
使用ESP或者AH协议的IP数据报称为IP安全数据报(或IPsec数据报),工作方式有两种:
- 运输方式(transport mode)。运输方式实在整个运输层报文前后分别添加若干控制信息,再加上IP首部,构成IP安全数据报。
- 隧道方式(tunnel mode)。隧道方式实在原始的IP数据报前后分别添加若干控制信息,再加上新的IP首部,构成IP安全数据报。
目前使用最多的就是隧道方式。
通常把数据报的数据部分称为数据报的有效载荷(payload)。
安全关联
安全关联SA(Security Association):在发送IP安全数据报之前,在源实体和目的实体之间建立的一条网络层的逻辑链接
建立安全关联后,传统的无连接的网络层就变成了一个具有逻辑链接的一个层。
安全关联是源点到终点的单向连接。
建立安全关联SA的路由器或者主机,必须维护这条SA的状态信息:
- 一个32位的连接标识符,称为安全参数索引SPI(Decurity Parameter Index)
- 安全关联SA的源点和终点的IP地址
- 所使用的加密类型(例如,DES或者AES)
- 加密的密钥
- 完整性检查的类型(例如:使用MD5或者SHA-1的报文鉴别码MAC)
- 鉴别使用的密钥
IP安全数据包的格式
- ESP尾部。用0填充,填充原因:数据加密时一般要求数据块长度是若干字节的整数倍。“下一个首部”字段的值表明在接收端,ESP的有效载荷应该交给什么样的协议来处理。
- 加密的部分。按照SA声明的加密算法和密钥,对ESP的有效载荷和ESP尾部进行加密。
- ESP首部。ESP首部有两个32位字段:
- 第一个字段存放安全参数索引SPI,通过同一个SA的所有IP安全数据报都使用同样的SPI值。
- 第二个字段是序号,鉴别要用到这个序号,它用来防止重放攻击。
- 鉴别的部分。按照SA声明的算法和密钥,对ESP首部和加密的部分生成报文鉴别码MAC。
- 报文鉴别码MAC。所生成的报文鉴别码MAC添加在ESP尾部的后面,和ESP首部、ESP的有效载荷、ESP尾部一起,构成IP安全数据报的有效载荷。
- 新的IP首部。通常为20字节长,和普通的IP数据报的首部的格式是一样的。需要注意的是,首部中的协议字段的值是50,表明在接收端,首部后面的有效载荷应交给ESP协议来处理。
收到IP安全数据报后,先检查首部中的目的地址。发现目的地址正确,继续处理这个IP安全数据报:
- 找到IP首部的协议字段值(现在是50),把IP首部后面的所有字段(即IP安全数据报的有效载荷)都用ESP协议进行处理。先检查ESP首部中的安全参数索引SPI,以确定收到的数据报属于哪一个安全关联SA (因为可能有多个安全关联)。
- 接着计算报文鉴别码MAC,看是否和ESP尾部后面添加的报文鉴别码MAC相符。
- 再检验ESP首部中的序号,以证实有无被入侵者重放。
- 接着用这个安全关联SA对应的加密算法和密钥,对已加密的部分进行解密。
- 再根据ESP尾部中的填充长度,去除发送端填充的所有0,还原出加密前的ESP有效载荷,也就是发送的原始IP数据报。
IPsec的其他构件
安全关联数据库SAD(Security Association Database)
- 存放安全关联SA
安全策略数据库SPD(Security Policy Database)
- 指明什么样的数据报需要进行IPsec处理
互联网密钥交换IKE (Internet Key Exchange)协议
- 用于大型的、地理位置分散的系统
- 是为IP安全数据报创建安全关联SA
- IKEv2以另外三个协议为基础
- Oakley— 是个密钥生成协议[RFC 2412]。
- 安全密钥交换机制SKEME (Secure Key Exchange Mechanism)是用于密钥交换的协议。它利用公钥加密来实现密钥交换协议中的实体鉴别。
- 互联网安全关联和密钥管理协议ISAKMP (Internet Secure Association and KeyManagement Protocol) — 用于实现IK E中定义的密钥交换,使IKE的交换能够以标准化、格式化的报文创建安全关联SA。