思科IPSec协议解析

时间:2024-04-11 09:06:22

IPSec是IETF定义的一个协议组。通信双方在IP层通过加密、完整性校验、数据源认证等方式,保证了IP数据报文在网络上传输的机密性、完整性和防重放。

  1. 机密性(Confidentiality)指对用户数据进行加密保护,用密文的形式传送数据。
  2. 完整性(Data integrity)指对接收的数据进行认证,以判定报文是否被篡改。
  3. 防重放(Anti-replay)指防止恶意用户通过重复发送捕获到的数据包所进行的攻击,即接收方会拒绝旧的或重复的数据包。
  4. 其他安全要求:源认证(确认信息真实的发送者和接收者)、不可否认性(防止通信双方中的某一方事后否认其行为)

加密算法主要分为两大类
相同的**进行加解密,就叫做对称**算法
知名算法:DES ,3DES ,AES ,RC4
不同的**进行加解密,就叫做非对称**算法
知名算法:RSA ,DH ,ECC

非对称**特点
• 特点:
• 用一个**加密的东西只能用另一个**来解密。
• 仅仅只用于:**交换(加***)和数字签名(加密散列)。
• 优点:
• 安全。
• 因为不必发送**给接受者,所以非对称加密不必担心**被中途截获的问题。
• **数目和参与者的数目一样。
• 不需要事先在各参与者之间建立关系以交换**。
• 技术支持数字签名和不可否认性。
• 缺点:
• 非常非常慢。
• 密文会变长。

对称**算法特点
• 特点:
• 同一个**用于加解密。
• 优点:
• 速度快
• 安全
• 紧凑
• 缺点:
• 明文传输共享**,容易出现中途劫持和窃听的问题。
• **数量是以参与者数量平方的速度增长(指数增长)。
• 因为数量过多,所以管理和存储会有很大问题。
• 不支持数字签名和不可否认性。

散列函数
散列函数也叫做HASH函数,主流的散列算法有MD5 与SHA-1 。散列函数的主要任务是验证数据的完整性。通过散列函数计算得到的结果叫做散列值,这个散列值也常常被称为也常常被称为数据的指纹

散列算法的四大特点
• 固定大小
散列函数可以接收任意大小的数据,并输出固定大小的散列值。以MD5这个散列算法为例,不管原始数据有多大,通过MD5计算得到的散列值总是128比特,而SHA-1的输出长度则为160比特。
• 雪崩效应
原始数据就算修改哪怕一个比特,计算得到的散列值也会发生巨大的变化 。
• 单向
只可能从原始数据计算得到散列值,不可能从散列值恢复哪怕一个比特的原始数据。
• 冲突避免
几乎不能够找到另外一个数据和当前数据计算的散列值相同,因此散列函数能够确保数据的唯一性。

散列算法的主要用途
1.认证
2.使用数字签名保障数据与文档的完整性
3. IPSec 和路由协议的验证

IPSEC 架构 和实施
IPSec v*n体系结构主要由AH(Authentication Header)、ESP(Encapsulating Security Payload)和IKE(Internet Key Exchange)协议套件组成。
1.AH协议:主要提供的功能有数据源验证、数据完整性校验和防报文重放功能。然而,AH并不加密所保护的数据报。(所以现网中几乎不使用AH)
2.ESP协议:提供AH协议的所有功能外(但其数据完整性校验不包括IP头),还可提供对IP报文的加密功能。
3.IKE协议:用于自动协商AH和ESP所使用的密码算法。

IPSec 传输模式
• 隧道模式中,AH 或ESP 头封装在原始IP 报文头之前,并另外生成一个新的IP头封装到AH 或ESP 之前。隧道模式可以完全地对原始IP数据报进行认证和加密,而且,可以使用IPSec 对等体的IP 地址来隐藏客户机的IP
•传输模式下, AH或ESP报头位于IP报头和传输层报头之间。

ESP
•ESP封装安全负载,IP协议号50,能够为数据提供私密性、完整性和源认证,同时可抵御防重放攻击(反复发送相同的报文,接收方解密消耗系统资源而导致的DOS攻击),不对原始IP头部进行安全防护

IPSec的两个数据库
为了实现IPSec 的互操作性,IPSec 模型描述了两个数据库
SPD(安全策略数据库)
SPD 决定了什么流量将接受IPSec处理
SADB (安全关联数据库)
SADB 维护每一个SA (安全关联)包含的参数

SPD (安全策略数据库)
这里的选择器就是Cisco 的感兴趣流
• Destination IP address (源IP )
• Source IP address (目的IP )
• Name (名字)
•Transport Layer protocols (传输层协议)
• Source and destination ports (源目端口号)
满足感兴趣流的行为:旁路,丢弃和IPSec 加密).
每一个条目与SA 关联

安全联盟SA
安全联盟定义了IPSec对等体间将使用的数据封装模式、认证和加密算法、**等参数。
建立SA的方式有以下两种:
手工方式:安全联盟所需的全部信息都必须手工配置。手工方式建立安全联盟比较复杂,但优点是可以不依赖IKE而单独实现IPSec功能。当对等体设备数量较少时,或是在小型静态环境中,手工配置SA是可行的。
IKE动态协商方式:只需要通信对等体间配置好IKE协商参数,由IKE自动协商来创建和维护SA。动态协商方式建立安全联盟相对简单些。对于中、大型的动态网络环境中,推荐使用IKE协商建立SA。

什么是SA (安全关联)
SA 是IPSec 的一个基本组成部分,SA 是SADB的一个条目,它包含双方关于IKE 和IPSec 已经协商完毕的安全信息)
• IKE or ISAKMP SA 1. 双向的 2. 决定了IKE 协议处理相关细节
• IPSec SA 1. 单向的一对SA 2.与封装协议相关 3. 决定了具体加密流量的处理方式
两种类型的SA 都由IKE协议协商产生

安全联盟(Security Association )
• 定义:
• 安全联盟是要建立IPSec隧道的通信双方对隧道参数的约定,包括隧道两端的IP地址、隧道采用的验证方式、验证算法、验证**、加密算法、加***、共享**以及生存周期等一系列参数。
• IPSEC SA在两个对等体之间的双向通信,最少需要两个安全联盟来分别对两个方向的数据流进行安全保护。入站数据流和出站数据流分别由入站SA和出站SA进行处理
• IKE SA在IKE对等体之间构建一个双向的会话
• SA 由三元组来唯一标识 ,包括:
目的IP地址 安全参数索引 安全协议号
SADB (安全关联数据库)
在SADB里边的每一个条目决定了一个特定SA 的参数,当一个IPSec SA 被创建,SADB 更新所有关于这个SA的参数。当一个inbound IPSec 数据包抵达,SADB 基于外层IP 头部的目的IP 地址,SPI 和IPSec封装协议(ESP/AH )检索数据库以获得相应SA ,然后用这个SA 的相关参数处理这个inbound IPSec数据包。对于outbound IPSec 数据包处理的相关参数,是由SPD 相关联的SA

SPD 与 SADB

思科IPSec协议解析

IPSec 组成部分
思科IPSec协议解析

IKEv1 和IKEv2
• IKE 协议分IKEv1 和IKEv2 两个版本。
• IKEv1
• IKEv1使用两个阶段为IPSec进行**协商并建立IPSec SA。
第一阶段,通信双方协商和建立IKE本身使用的安全通道,建立
一个IKE SA。
第二阶段,利用这个已通过了认证和安全保护的安全通道,建立一对IPSec SA 。

• IKEv2
• IKEv2则简化了协商过程。
在一次协商中可直接产生IPSec的**,生成IPSec SA。

IKE 与IPSec的关系
• IKE 协议建立在Internet安全联盟和**管理协议ISAKMP (Internet Security Association and Key ManagementProtocol )定义的框架上,是基于UDP(User Datagram Protocol)的应用层协议。它为IPSec提供了自动协商交换**、建立SA 的服务,能够简化IPSec的使用和管理。

IKE的三个模式和两个阶段
思科IPSec协议解析

野蛮模式与主模式对比
• IKEv1 建立IKE SA 的过程定义了主模式(Main Mode)
和野蛮模式(Aggressive Mode )两种交换模式。
• 主模式包含三次双向交换,用到了六条信息。
• 消息①和②用于策略交换;
• 消息③和④用于**信息交换;
• 消息⑤和⑥用于身份和认证信息交换。
• 野蛮模式只用到三条信息。
• 前两条消息①和②用于协商提议,消息③用于响应方认证发起方。

野蛮模式适用场景
• 与主模式相比,野蛮模式减少了交换信息的数目,提高了协商的速度,但是没有对身份信息进行加密保护。虽然野蛮模式不提供身份保护,但它可以满足某些特定的网络环境需求。
• 当IPSec隧道中存在NAT设备时,需要启用NAT穿越功能,而NAT转换会改变对等体的IP地址,由于野蛮模式不依赖于IP地址标识身份,使得采用预共享**验证方法时,NAT 穿越只能在野蛮模式中实现。
• 如果发起方的IP地址不固定或者无法预先知道,而双方都希望采用预共享**验证方法来创建IKE SA,则只能采用野蛮模式。
• 如果发起方已知响应方的策略,或者对响应者的策略有全面的了解,采用野蛮模式能够更快地创建IKE SA。

快速模式(Quick Mode )
思科IPSec协议解析

• 快速模式中,双方需要协商生成IPSec SA各项参数(包含可选参数PFS ),并为IPSec SA 生成认证/ 加***。
• 这在快速模式交换的前两条消息①和②中完成,消息②中还包括认证响应方。消息③为确认信息,通过确认发送方收到该阶段的消息②,验证响应者是否可以通信。

IKEv2 **协商和交换
• IKEv2 保留了IKEv1 的大部分特性,IKEv1的一部分扩展特性(如如NAT 穿越)作为IKEv2 协议的组成部分被引入到IKEv2 框架中。
• IKEv2 中所有消息都以“请求-响应”的形式成对出现,响应方都要对发起方发送的消息进行确认,如果在规定的时间内没有收到确认报文,发起方需要对报文进行重传处理,提高了安全性。
IKEv2初始交换过程图
思科IPSec协议解析

IKEv2 通知交换过程图
思科IPSec协议解析

IKE 安全机制
• 身份认证
• 身份保护
• DH (Diffie-Hellman )**交换算法
• 完善的前向安全性PFS (Perfect Forward Secrecy )

身份认证
确认通信双方的身份(对等体的IP 地址或名称),包括:
• 预共享**PSK(pre-shared key)认证(在预共享**认证中,认证字作为一个输入来产生**,通信双方采用共享的**对报文进行Hash计算,判断双方的计算结果是否相同。如果相同,则认证通过;否则认证失败)
• 数字证书RSA(rsa-signature)认证。
• 数字信封认证。

DH (Diffie-Hellman )**交换算法
• Diffie-Hellman算法是一种公开**算法。通信双方在不传送**的情况下通过交换一些数据,计算出共享的**
• 发起方和响应方利用ISAKMP 消息的Key Exchange 和nonce 载荷交换彼此的**材料。
• Key Exchange用于交换DH公开值。
• Nonce(只被使用一次的任意或非重复的随机数值)用于传送临时随机数。

完美的前向安全性PFS
• 短暂的一次性**系统称为“完美向前保密”(Perfect Forward Secrecy ,PFS )
• 如果加密系统中有一个秘钥是所有对称**的衍生者(始祖),便不能认为那是一个“完美向前保密”的系统。在这种情况下,一旦**了根**,便能拿到其它衍生的所有**,受那些**保护的全部数据都会曝光。
• 在IPSec 里,PFS 是通过在IPSec SA协商阶段重新进行一次DH 交换来实现的。

利用互联网通信
2)通信设备需要有远端通信设备的路由
R8(config)# ip route 0.0.0.0 0.0.0.0 Ethernet0/3
R8(config)#ip access-list extended NAT
R8(config-ext-nacl)#deny ip 88.1.1.0 0.0.0.255 10.10.10.0 0.0.0.255
R8(config-ext-nacl)#permit ip any any
R8(config)#ip nat inside source list NAT interface e0/3 overload
R8(config-crypto-map)#int e0/3
R8(config-if)#ip nat outside
一定要在NAT时deny掉要加密的流量

3)实施ipsec v*n
步骤1.
R8(config)#ip access-list extended v*n
R8(config-ext-nacl)#permit ip 88.1.1.0 0.0.0.255 10.10.10.0 0.0.0.255

步骤2.
R8(config)#crypto isakmp policy 1
R8(config-isakmp)#encryption aes
3des Three key triple DES
aes AES - Advanced Encryption Standard.
des DES - Data Encryption Standard (56 bit keys).
R8(config-isakmp)#authentication pre-share
R8(config-isakmp)#group 2
R8(config)#crypto isakmp key MIMA address 10.1.10.10
R8(config)#crypto ipsec transform-set YEWU esp-aes esp-sha-hmac

步骤3.
R8(config)#crypto map CELUE 10 ipsec-isakmp
R8(config-crypto-map)#match address v*n
R8(config-crypto-map)#set peer 10.1.10.10
R8(config-crypto-map)#set transform-set YEWU

R8(config-crypto-map)#int e0/3
R8(config-if)#crypto map CELUE
两边的配置几乎一模一样

验证
R8#show access-lists v*n
R8#show crypto isakmp sa
R8#show crypto engine connections active