ipsec体系结构及协议实现流程

概述

IPsec由四部分内容构成:

负责密钥管理的Internet密钥交换协议IKE(Internet Key Exchange Protocol);

负责将安全服务与使用该服务的通信流相联系的安全关联SA(Security Associations);

直接操作数据包的认证头协议AH(IP Authentication Header)和安全载荷协议ESP(IP Encapsulating Security Payload);

若干用于加密和认证的算法。

 

分别对IKE、AH和ESP的流程和数据格式进行解析。

IKE(RFC2407,RFC2408、RFC2409)

IKE属于一种混合型协议,由Internet安全关联和密钥管理协议(ISAKMP)和两种密钥交换协议OAKLEY与SKEME组成。IKE创建在由ISAKMP定义的框架上,沿用了OAKLEY的密钥交换模式以及SKEME的共享和密钥更新技术,还定义了它自己的两种密钥交换方式。

IKE使用了两个阶段的ISAKMP:

第一阶段,协商创建一个通信信道(IKE SA),并对该信道进行验证,为双方进一步的IKE通信提供机密性、消息完整性以及消息源验证服务;

第二阶段,使用已建立的IKE SA建立IPsec SA(V2中叫Child SA)。

IKE共定义了5种交换

阶段1有两种模式的交换:对身份进行保护的“主模式”交换以及根据基本ISAKMP 文档制订的“野蛮模式”交换。

阶段2 交换使用“快速模式”交换。

IKE 自己定义了两种交换:1、为通信各方间协商一个新的Diffie-Hellman 组类型的“新组模式”交换;2、在IKE 通信双方间传送错误及状态消息的ISAKMP信息交换


ISAKMP报头

ISAKMP 报文一般利用UDP协议传输,端口号500 。ISAKMP报头有固定格式,需要添加在每个IKE报文上进行交换;提供对会话的验证和版本信息、交换类型等说明。


之后跟各类载荷头,载荷头的格式为


载荷头之后,是载荷内容。载荷的类型有:


(注:各类载荷的内容格式在RFC2408中有详细描述)

第一阶段

1.主模式交换

步骤:

1.策略协商,在这一步中,就四个强制性参数值进行协商:

1)加密算法:选择DES或3DES

2)hash算法:选择MD5或SHA  

3)认证方法:选择证书认证、预置共享密钥认证或Kerberosv5认证

4)Diffie-Hellman组的选择

2.DH交换

在彼此交换过密钥生成"材料"后,两端主机可以各自生成出完全一样的共享"主密钥",保护紧接其后的认证过程。

3.认证

DH交换需要得到进一步认证,如果认证不成功,通信将无法继续下去。

"主密钥"结合在第一步中确定的协商算法,对通信实体和通信信道进行认证。在这一步中,整个待认证的实体载荷(包括实体类型、端口号和协议),均由前一步生成的"主密钥"提供机密性和完整性保证。


(详见RFC2409)

2.野蛮模式交换

野蛮模式交换也分为三个步骤,但只交换三条消息:

头条消息协商策略,交换DiffieHellman公开值必需的辅助数据以及身份信息;

第二条消息认证响应方;

第三条消息认证发起方,并为发起方提供在场的证据。

 

第二阶段

第二阶段协商消息受第一阶段SA保护,任何没有第一阶段SA保护的消息将被拒收。

步骤:

1.策略协商,双方交换保护需求:

·使用哪种IPSec协议:AH或ESP

·使用哪种hash算法:MD5或SHA

·是否要求加密,若是,选择加密算法:3DES或DES。

在上述三方面达成一致后,将建立起两个SA,分别用于入站和出站通信。一个子网就需要创建两个IPSec SA,N个子网要创建N * 2个。

2.会话密钥"材料"刷新或交换

  在这一步中,将生成加密IP数据包的"会话密钥"。生成"会话密钥"所使用的"材料"可以和生成第一阶段SA中"主密钥"的相同,也可以不同。如果不做特殊要求,只需要刷新"材料"后,生成新密钥即可。若要求使用不同的"材料",则在密钥生成之前,首先进行第二轮的DH交换。 (新组交换:通信双方通过新组模式交换协商新的Diffie-Hellman组。新组模式交换属于一种请求/响应交换。发送方发送提议的组的标识符及其特征,如果响应方能够接收提议,就用完全一样的消息应答)

3.SA和密钥连同SPI,递交给IPSec驱动程序。

  第二阶段协商过程与第一阶段协商过程类似,不同之处在于:在第二阶段中,如果响应超时,则自动尝试重新进行第一阶段SA协商。

第一阶段SA建立起安全通信信道后保存在高速缓存中,在此基础上可以建立多个第二阶段SA协商,从而提高整个建立SA过程的速度。只要第一阶段SA不超时,就不必重复第一阶段的协商和认证。允许建立的第二阶段SA的个数由IPSec策略属性决定。

 

 

AH(RFC2402)

AH报头位置在IP报头和传输层协议报头之间。 AH由IP协议号" 51"标识,该值包含在AH报头之前的协议报头中,如IP报头。AH可以单独使用,也可以与ESP协议结合使用。

 

AH报头的格式


具体结构如下:

l  Next Header(下一个报头): 识别下一个使用IP协议号的报头,例如,Next Header值等于"6",表示紧接其后的是TCP报头。

l  Length(长度): AH报头长度。

l  Security Parameters Index (SPI,安全参数索引): 这是一个为数据报识别安全关联的 32 位伪随机值。SPI 值 0 被保留来表明"没有安全关联存在"。

l  Sequence Number(序列号):从1开始的32位单增序列号,不允许重复,唯一地标识了每一个发送数据包,为安全关联提供反重播保护。接收端校验序列号为该字段值的数据包是否已经被接收过,若是,则拒收该数据包。

l  Authentication Data(AD,认证数据): 包含完整性检查和。接收端接收数据包后,首先执行hash计算,再与发送端所计算的该字段值比较,若两者相等,表示数据完整,若在传输过程中数据遭修改,两个计算结果不一致,则丢弃该数据包。

 

AH的实现

AH报头插在IP报头之后,TCP,UDP,或者ICMP等上层协议报头之前。一般AH为整个数据包提供完整性检查,但如果IP报头中包含“生存期(Time To Live)”或“服务类型(Type of Service)”等值可变字段,则在进行完整性检查时应将这些值可变字段去除。

AH也为IP头中的一部分提供验证,在某些情况下,这可能是必须的。例如,如果IPv4选项或IPv6扩展头的完整性在发送方和接收方之间的路程中必须被保护,AH可以提供这项服务(除了IP头中不可预知、易变的部分)。

在使用AH协议时,AH协议首先在原数据前生成一个AH报文头,报文头中包括一个递增的序列号(Sequence number)与验证字段(空)、安全参数索引(SPI)等。AH协议将对新的数据包进行离散运算,生成一个验证字段(authentication data),填入AH头的验证字段。

AH协议使用32比特序列号结合防重放窗口(一般为64位)和报文验证来防御重放攻击。当收到了一个经过认证的数据以后,防重放窗口会滑动一次,如果该数据被重放,由于其顺序号码和原来的相同,因此这个数据会落到窗口之外,数据就会被丢弃。

ESP(RFC2406)

IP协议号50。ESP包含报头和报尾两部分

1.       ESP报头(96b)

·Security Parameters Index (SPI,安全参数索引32b):为数据包识别安全关联。

·Sequence Number(序列号,32b):从1开始的32位单增序列号,不允许重复,唯一地标识了每一个发送数据包,为安全关联提供反重播保护。接收端校验序列号为该字段值的数据包是否已经被接收过,若是,则拒收该数据包。

·初始化向量(IV,32b):某些加密算法需要使用IV,这种特殊加密算法必须定义IV的位置,IV是受保护数据的第一个8位组。

2.       ESP报尾字段包括:

·Padding(填充项):0-255个字节。DH算法要求数据长度(以位为单位)模512为448,若应用数据长度不足,则用扩展位填充。

·Padding Length(填充项长度,8b):接收端根据该字段长度去除数据中扩展位。

·Next Header(下一个报头,8b):如果在通道模式下使用E S P,这个值就会是4,表示I P - i n - I P。如果在传送模式下使用E S P,这个值表示的就是它背后的上一级协议的类型,比如T C P对应的就是6。

    ·验证数据:验证数据字段用于容纳数据完整性的检验结果—通常是一个经过密钥处理的散列函数。

 

 

ESP的实现

ESP为IP数据包提供完整性检查、认证和加密,可以看作是"超级 AH",因为它提供机密性并可防止篡改。ESP服务依据建立的安全关联(SA)是可选的。然而,也有一些限制: 完整性检查和认证一起进行; 仅当与完整性检查和认证一起时,“重播(Replay)”保护才是可选的; 重播保护只能由接收方选择。

ESP加密服务是可选的。

ESP报头插在IP报头之后,TCP或UDP等传输层协议报头之前。

 

l  认证

ESP认证报尾的完整性检查部分包括ESP报头、传输层协议报头,应用数据和ESP报尾,但不包括IP报头,因此ESP不能保证IP报头不被篡改。

l  加密

ESP加密部分包括上层传输协议信息、数据和ESP报尾。

注意:虽然机密性和验证两者都是可选的,但是不能两者都被不选。最少情况,必须选择它们其中之一。

 

在ESP协议下,可以通过散列算法获得验证数据字段,可选的算法是MD5和SHA1。在ESP协议中还可以选择加密算法,一般常见的是DES、3DES等加密算法,加密算法要从SA中获得密钥,对参加ESP加密的整个数据的内容进行加密运算,得到一段新的“数据”。完成之后,ESP将在新的“数据”前面加上SPI字段、序列号字段,在数据后面加上一个验证字段和填充字段等。

如果选择了ESP加密,那么在两个安全网关之间的ESP(隧道模式)SA可以提供部分流量的机密性。隧道模式的使用允许内部IP头被加密,隐藏了(最终)流量的源和目的身份信息。而且,ESP载荷填充物可以用来隐藏报文的大小,更进一步隐藏流量的外部特性。

当一个移动用户在一个拨号环境中分配了一个动态IP地址,并建立一个到公司防火墙(充做安全网关)的(隧道模式)ESP SA时,可以提供类似的流量机密性服务。

 

附:

 

一个ISAKMP报文例子





  • 9
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
内核中的IPsec(xfrm)协议栈是为了保证网络传输过程中数据的安全性而存在的重要模块。它提供了一系列的加密和认证协议,包括AH、ESP、IKE等。本文将从源码实现的角度,简要分析IPsec(xfrm)协议栈的工作原理。 1. 数据结构 IPsec(xfrm)协议栈中最重要的数据结构是安全关联(security association,简称SA)。它描述了一个数据流(流量)的安全属性,包括加密算法、加密密钥、认证算法、认证密钥等。SA通常由用户态程序配置,并在内核中对应一个xfrm_state结构体。 xfrm_state结构体中的一些重要成员包括:crypto_alg(加密算法)、auth_alg(认证算法)、encap(封装方式)、crypto_key(加密密钥)、auth_key(认证密钥)、reqid等。 2. 内核实现 IPsec(xfrm)协议栈是在内核内部实现的,其入口函数是xfrm_rcv(),用于接收IPsec数据包并进行解密、认证等工作,处理完成后再将明文/认证正确的数据交给传输层协议。 在实际工作中,IPsec(xfrm)协议栈会和其他一些内核模块进行交互。例如和路由器交互时,需要通过路由表来确定传输路径,和网络层交互时,需要进行协议解包和封装,和socket层交互时,需要根据socket选项对相关流量进行处理。 3. 主要函数 IPsec(xfrm)协议栈中一些主要函数的作用如下: - xfrm_input():接收数据包并进行解密、认证等处理。 - xfrm_output():封装数据并进行加密、认证等处理。 - xfrm_parse_spi():解析安全参数索引。 - xfrm_lookup():查找匹配的安全关联。 - xfrm_policy_check():安全策略检查。 - xfrm_sk_bound():绑定SA到socket层。 4. 总结 IPsec(xfrm)协议栈是Linux内核中的核心组件之一,它提供了一系列的加密、认证协议,用于保护网络传输过程中的数据安全。本文从数据结构、内核实现、主要函数等方面,简要探讨了IPsec(xfrm)协议栈的工作原理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值