IPsec是什么

https://en.wikipedia.org/wiki/IPsec
https://www.cisco.com/c/en/us/td/docs/net_mgmt/vpn_solutions_center/2-0/ip_security/provisioning/guide/IPsecPG1.html
https://www.juniper.net/documentation/en_US/junos/topics/topic-map/security-ipsec-vpn-overview.html
http://www.h3c.com/cn/d_200812/624140_30003_0.htm
https://www.cnblogs.com/lolau/p/8746601.html

IPsec(IP Security)是一系列为IP通信提供安全性的协议和服务的集合,工作在IP层,可以为上层协议和应用提供透明的安全服务。IPsec提供两种安全机制:认证和加密。

认证机制使IP通信的数据接收方能够确认数据发送方的真实身份以及数据在传输过程中是否遭篡改。
加密机制通过对数据进行加密运算来保证数据的机密性,以防数据在传输过程中被窃听。

IPsec提供的安全保护包括:

用户数据加密,通过加密算法提供好数据私密性。
消息完整性验证,通过摘要认证确保数据在传输路径上未经修改。
防御特定类型攻击,通过序列号防数据重放、通过认证防中间人攻击。
提供设备之间安全算法和秘钥的协商能力,提供安全的在线秘钥生成机制。
提供隧道和传输两种模式,满足不同的网络结构需求。

IPsec出现的原因
网络安全问题日益严重,需要保证数据在网络上的传输是安全的。
大多数保证数据安全的协议或技术都是在应用层,如SSL协议可以为WEB或FTP提供安全连接,但对于ping、Telnet、SNMP等无效。需要在IP层提供安全性的方法,可以使在传输层上层的所有协议受益。

IPsec相关概念

IPsec协议不是一个单独的协议,它给出了应用于IP层上网络数据安全的一整套体系结构,包括网络认证协议AH(Authentication Header,认证头)、ESP(Encapsulating Security Payload,封装安全载荷)、IKE(Internet Key Exchange,因特网密钥交换)和用于网络认证及加密的一些算法等。其中,AH协议和ESP协议用于提供安全服务,IKE协议用于密钥交换。

SA(Security Association,安全关联):为安全目的创建的一个单向逻辑连接,所有经过同一个SA的数据流会使用相同的安全处理协议(AH或ESP)。对同一个数据流同时使用AH和ESP时需要两个嵌套的SA。双向的数据流需要通信实体之间维护一对出入彼此呼应的SA。

SPD(Security Association Database,安全关联数据库):用于存放与SA关联的所有状态数据的存储结构。

SPI(Security Parameters Index,安全参数索引):一个被携带在AH或ESP报文头中的32bit数值,用于在接收端识别数据流到SA的绑定关系。

SPD(Security Policy Database,安全策略数据库):指明所有IP数据报文应该使用何种安全服务,以及如何获得这些服务的数据结构。SPD是一个有序的结构,用访问控制列表来描述数据流特性。

AH(Authentication Headers,认证头协议):提供数据来源认证,数据完整性校验,保护通信免受篡改,但不能防止窃听,适合于传输非机密数据。AH协议使用事先协商好的算法和密钥计算报文数据部分的摘要值,然后作为报文完整性的证据保存在AH的头结构中。

ESP(Encapsulating Security Payloads,封装安全载荷协议):提供加密,数据源校验,数据完整性校验。ESP协议将原始报文加密后作为负载携带在报文中。

IKE(Internet Key Exchange,因特网密钥交换协议):用于动态建立SA,SA有生命周期,如果安全策略要求建立安全、保密的连接,但又不存在与该连接相应的SA,IPSec会立刻启动IKE来协商SA。

ISAKMP(Internet Security Association Key Management Protocol,安全联盟密钥管理协议):定义了协商、建立、修改和删除SA的过程和包格式,只是提供了一个通用框架,并没有定义具体的SA格式,与IKE独立,可以被不同的密钥交换协议使用。IKE使用ISAKMP消息来协商并建立SA。

注:由于AH提供数据来源确认,一旦源IP地址改变,AH校验失败,无法穿越NAT(NAT穿越在大陆的网络环境中显得尤为重要)。

认证算法与加密算法

认证算法

认证算法的实现主要是通过杂凑函数。杂凑函数是一种能够接受任意长的消息输入,并产生固定长度输出的算法,该输出称为消息摘要。IPsec对等体计算摘要,如果两个摘要是相同的,则表示报文是完整未经篡改的。IPsec使用两种认证算法:

MD5:MD5通过输入任意长度的消息,产生128bit的消息摘要。

SHA-1:SHA-1通过输入长度小于2的64次方bit的消息,产生160bit的消息摘要。

MD5算法的计算速度比SHA-1算法快,而SHA-1算法的安全强度比MD5算法高。

加密算法

加密算法实现主要通过对称密钥系统,它使用相同的密钥对数据进行加密和解密。目前大多数IPsec设备实现三种加密算法:

DES(Data Encryption Standard):使用56bit的密钥对一个64bit的明文块进行加密。

3DES(Triple DES):使用三个56bit的DES密钥(共168bit密钥)对明文进行加密。

AES(Advanced Encryption Standard):使用128bit、192bit或256bit密钥长度的AES算法对明文进行加密。

这三个加密算法的安全性由高到低依次是:AES、3DES、DES,安全性高的加密算法实现机制复杂,运算速度慢。对于普通的安全要求,DES算法就可以满足需要。

IKE简介

在实施IPsec的过程中,可以使用IKE(Internet Key Exchange,因特网密钥交换)协议来建立SA,该协议建立在由ISAKMP(Internet Security Association and Key Management Protocol,互联网安全联盟和密钥管理协议)定义的框架上。IKE为IPsec提供了自动协商交换密钥、建立SA的服务,能够简化IPsec的使用和管理,大大简化IPsec的配置和维护工作。

IKE不是在网络上直接传输密钥,而是通过一系列数据的交换,最终计算出双方共享的密钥,并且即使第三者截获了双方用于计算密钥的所有交换数据,也不足以计算出真正的密钥。

IKE的安全机制
IKE具有一套自保护机制,可以在不安全的网络上安全地认证身份、分发密钥、建立IPsec SA。

数据认证
数据认证有如下两方面的概念:

身份认证:身份认证确认通信双方的身份。支持两种认证方法:预共享密钥(pre-shared-key)认证和基于PKI的数字签名(rsa-signature)认证。

身份保护:身份数据在密钥产生之后加密传送,实现了对身份数据的保护。

DH
DH(Diffie-Hellman,交换及密钥分发)算法是一种公共密钥算法。通信双方在不传输密钥的情况下通过交换一些数据,计算出共享的密钥。即使第三者(如黑客)截获了双方用于计算密钥的所有交换数据,由于其复杂度很高,不足以计算出真正的密钥。所以,DH交换技术可以保证双方能够安全地获得公有信息。

PFS
PFS(Perfect Forward Secrecy,完善的前向安全性)特性是一种安全特性,指一个密钥被破解,并不影响其他密钥的安全性,因为这些密钥间没有派生关系。对于IPsec,是通过在IKE阶段2协商中增加一次密钥交换来实现的。PFS特性是由DH算法保障的。

IKE的交换过程

IKE使用了两个阶段为IPsec进行密钥协商并建立SA:

第一阶段,通信各方彼此间建立了一个已通过身份认证和安全保护的通道,即建立一个ISAKMP SA。第一阶段有主模式(Main Mode)和野蛮模式(Aggressive Mode)两种IKE交换方法。

Main mode交换方法

第二阶段,用在第一阶段建立的安全隧道为IPsec协商安全服务,即为IPsec协商具体的SA,建立用于最终的IP数据安全传输的IPsec SA。

IKE在IPsec中的作用
因为有了IKE,IPsec很多参数(如:密钥)都可以自动建立,降低了手工配置的复杂度。

IKE协议中的DH交换过程,每次的计算和产生的结果都是不相关的。每次SA的建立都运行DH交换过程,保证了每个SA所使用的密钥互不相关。

IPsec使用AH或ESP报文头中的序列号实现防重放。此序列号是一个32比特的值,此数溢出后,为实现防重放,SA需要重新建立,这个过程需要IKE协议的配合。

对安全通信的各方身份的认证和管理,将影响到IPsec的部署。IPsec的大规模使用,必须有CA(Certificate Authority,认证中心)或其他集中管理身份数据的机构的参与。

IKE提供端与端之间动态认证,IKE是UDP之上的一个应用层协议,是IPsec的信令协议;

IKE为IPsec协商建立SA,并把建立的参数及生成的密钥交给IPsec;

IPsec使用IKE建立的SA对IP报文加密或认证处理。

IPsec的工作原理

封装模式

传输模式(transport):只对IP数据报的数据部分进行加密,在原始IP报文头部与上层协议之间插入AH或ESP协议头。适用于主机到主机方式报文的处理。

隧道模式(tunnel):对整个IP数据报进行加密,增加新IP头部而将原始IP数据包包括头部都作为负载。适用于转发设备上做封装处理的场景。

两者的区别在于 IP 数据报的 ESP 负载部分的内容不同。在隧道模式中,整个 IP 数据报都在 ESP 负载中进行封装和加密。当这完成以后,真正的 IP 源地址和目的地址都可以被隐藏为 Internet 发送的普通数据。这种模式的一种典型用法就是在防火墙-防火墙之间通过虚拟专用网的连接时进行的主机或拓扑隐藏。

安全协议数据封装格式

工作流程

两个IPsec实体之间的IKE协商分为两个阶段:

第一阶段:建立ISAKMP SA

两种模式:

主模式(main mode):6条ISAKMP消息交互
积极模式(aggressive mode):3条ISAKMP消息交互

ISAKMP SA为第二阶段的ISAKMP消息提供安全保护

第二阶段:建立IPsec SA

一种模式:
快速模式(quick mode):3条ISAKMP消息交互
IPSec SA为IP数据提供安全保护
ISAKMP报文头格式

cookie: 用于帮助通信双方确认一个ISAKMP报文是否真的来自对方,对于一个SA,cookie是唯一的,即在协商过程中,cookie不能改变。cookie由各自实体的机密信息生成,该机密信息不能通过cookie推到出来。

交换类型:表示该报文所属的交换类型,通常为主模式或积极模式。

标志 :加密位(encryp):如果是1,表示ISAKMP头部后的所有载荷都被加密了;如果是0,表示是载荷是明文,没有被加密。
提交位(commit):用于确保在发送被保护的数据之前完成协商。

IPsec配置步骤(下面以Cisco为例)

定义协商第一阶段ISAKMP策略
定义ISAKMP消息的保护策略,包括加密算法、验证算法、验证方式等。

定义协商第二阶段IPsec SA策略

定义IP数据的保护策略,协议是使用ESP还是AH、加密算法、验证算法、封装模式是隧道模式还是传输模式等。

定义要被IPsec保护的数据。

定义crypt to map

定义IPsec SA对端通信实体,并配置协商第二阶段IPsec SA策略和保护数据。

在出接口上调用crypt to map

确保路由表中的路由能将被保护的数据从配置了crypt to map的出接口转发出去。

数据包经过IPsec实体时有三种处理方式:IPsec保护、丢弃或旁路(自由穿越,不受保护)。