作者:埃文科技
链接:https://zhuanlan.zhihu.com/p/44874772
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

认识IPSec

  IPSec(IP Security)产生于IPv6的制定之中,用于提供IP层的安全性。由于所有支持TCP/IP协议的主机进行通信时,都要经过IP层的处理,所以提供了IP层的安全性就相当于为整个网络提供了安全通信的基础。鉴于IPv4的应用仍然很广泛,所以后来在IPSec的制定中也增添了对IPv4的支持。最初的一组有关IPSec标准由IETF在1995年制定,但由于其中存在一些未解决的问题,从1997年开始IETF又开展了新一轮的IPSec的制定工作,截至1998年11月份主要协议已经基本制定完成。不过这组新的协议仍然存在一些问题,预计在不久的将来IETF又会进行下一轮IPSec的修订工作。

IPSec提供了两种安全机制:认证(采用ipsec的AH)和加密(采用ipsec的ESP)。

  · 认证机制使IP通信的数据接收方能够确认数据发送方的真实身份,以及数据在传输过程中是否遭篡改。

  · 加密机制通过对数据进行编码来保证数据的机密性,以防数据在传输过程中被窃听。

  AH(Authentication Header)和ESP(Encapsulating Security Payload,封装安全负载)都可以提供认证服务,不过,AH提供的认证服务要强于ESP。

  IPSec主要功能为加密和认证,为了进行加密和认证,IPSec还需要有密钥的管理和交换的功能,以便为加密和认证提供所需要的密钥并对密钥的使用进行管理。以上三方面的工作分别由AH,ESP和IKE(Internet Key Exchange,Internet 密钥交换)三个协议规定。为了介绍这三个协议,需要先引人一个非常重要的术语SA(Security Association安全关联)。所谓安全关联是指安全服务与它服务的载体之间的一个“连接”。AH和ESP都需要使用SA,而IKE的主要功能就是SA的建立和维护。要实现AH和ESP,都必须提供对SA的支持。通信双方如果要用IPSec建立一条安全的传输通路,需要事先协商好将要采用的安全策略,包括使用的加密算法、密钥、密钥的生存期等。当双方协商好使用的安全策略后,我们就说双方建立了一个SA。SA就是能向其上的数据传输提供某种IPSec安全保障的一个简单连接,可以由AH或ESP提供。当给定了一个SA,就确定了IPSec要执行的处理,如加密,认证等。SA可以进行两种方式的组合,分别为传输临近和嵌套隧道。

  IPSec的工作原理类似于包过滤防火墙,可以看作是对包过滤防火墙的一种扩展。当接收到一个IP数据包时,包过滤防火墙使用其头部在一个规则表中进行匹配。当找到一个相匹配的规则时,包过滤防火墙就按照该规则制定的方法对接收到的IP数据包进行处理。这里的处理工作只有两种:丢弃或转发。IPSec通过查询SPD(Security Po1icy Database安全策略数据库)决定对接收到的IP数据包的处理。但是IPSec不同于包过滤防火墙的是,对IP数据包的处理方法除了丢弃,直接转发(绕过IPSec)外,还有一种,即进行IPSec处理。正是这新增添的处理方法提供了比包过滤防火墙更进一步的网络安全性。进行IPSec处理意味着对IP数据包进行加密和认证。包过滤防火墙只能控制来自或去往某个站点的IP数据包的通过,可以拒绝来自某个外部站点的IP数据包访问内部某些站点,也可以拒绝某个内部站点对某些外部网站的访问。但是包过滤防火墙不能保证自内部网络出去的数据包不被截取,也不能保证进入内部网络的数据包未经过篡改。只有在对IP数据包实施了加密和认证后,才能保证在外部网络传输的数据包的机密性、真实性、完整性,通过Internet进行安全的通信才成为可能。IPSec既可以只对IP数据包进行加密,或只进行认证,也可以同时实施二者。但无论是进行加密还是进行认证,IPSec都有两种工作模式,一种是隧道模式,另一种是传输模式。

  IPSec协议组

  IPSec协议组包含Authentication Header(AH)协议、Encapsulating Security Payload(ESP)协议和Internet Key Exchange(IKE)协议,如图1所示,他们的功能如下。

  AH协议定义了认证的应用方法,提供数据源认证和完整性保证;AH只涉及认证,不涉及加密。AH虽然在功能上和ESP有些重复,但AH除了可以对IP的有效负载进行认证外,还可以对IP头部实施认证。主要是处理数据时,可以对IP头部进行认证,而ESP的认证功能主要是面对IP的有效负载。为了提供最基本的功能并保证互操作性,AH必须包含对HMAC?/FONT>SHA和HMAC?/FONT>MD5(HMAC是一种SHA和MD5都支持的对称式认证系统)的支持。AH既可以单独使用,也可在隧道模式下,或和ESP联用。

  ESP协议定义了加密和可选认证的应用方法,提供了可靠性保证。ESP协议主要用来处理对IP数据包的加密,此外对认证也提供某种程度的支持。ESP是与具体的加密算法相独立的,几乎可以支持各种对称密钥加密算法,例如DES、TripleDES、RC5等。为了保证各种IPSec实现间的互操作性,目前ESP必须提供对56位DES算法的支持。ESP协议数据单元格式由三个部分组成,除了头部、加密数据部分外,在实施认证时还包含一个可选尾部。头部有两个域:安全策略索引(SPl)和序列号(Sequence Number)。使用ESP进行安全通信之前,通信双方需要先协商好一组将要采用的加密策略,包括使用的算法、密钥以及密钥的有效期等。“安全策略索引”使用来标识发送方是使用哪组加密策略来处理IP数据包的,当接收方看到了这个序号就知道了对收到的IP数据包应该如何处理。“序列号”用来区分使用同一组加密策略的不同数据包。加密数据部分除了包含原IP数据包的有效负载外,填充域(用来保证加密数据部分满足块加密的长度要求)包含其余部分在传输时都是加密过的。其中“下一个头部(Next Header)”用来指出有效负载部分使用的协议,可能是传输层协议(TCP或UDP),也可能是IPSec协议(ESP或AH)。通常,ESP可以作为IP的有效负载进行传输,由于采用了这种封装形式,所以ESP可以使用旧有的网络进行传输。

图1 IP层协议安全结构

  IKE协议主要是对密钥交换进行管理,它主要包括三个功能。

  · 对使用的协议、加密算法和密钥进行协商。

  · 方便的密钥交换机制(这可能需要周期性地进行)。

  · 跟踪对以上这些约定的实施。

  前面已经提到用IPSec进行加密可以有两种工作模式,意味着ESP协议有两种工作模式:传输模式(Transport Mode)和隧道模式(Tunnel Mode)。当ESP工作在传输模式时,采用当前的IP头部。而在隧道模式时,将整个IP数据包进行加密作为ESP的有效负载,并在ESP头部前增添以网关地址为源地址的新的IP头部,此时可以起到NAT的作用。在实际进行IP通信时,可以根据实际安全需求同时使用这两种协议或选择使用其中的一种。

  熟悉IPSec的工作模式

  IPSec有两种工作模式,分别是传输模式和隧道模式。在这两种模式下,分别可以使用AH头(IPSec认证头)或ESP头(IPSec ESP封装安全负荷头)两种方式进行安全封装,各种工作模式下的认证和加密原理如下。

  (1)传输模式的认证

  传输模式只对IP数据包的有效负载进行认证。此时,继续使用以前的IP头部,只对IP头部的部分域进行修改,而IPSec协议头部插入到IP头部和传输层头部之间,如图2所示。

  (2)隧道模式的认证

  隧道模式对整个IP数据色进行认证。此时,需要新产生一个IP头部,IPSec头部被放在新产生的IP头部和以前的IP数据包之间,从而组成一个新的IP头部,如图3所示。

 图2 传输模式认证报文图3 隧道模式认证报文

  (3)传输模式的加密

  传输模式只对IP数据包的有效负载进行加密。此时,继续使用以前的IP头部,只对IP头部的部分域进行修改,而IPSec协议头部插入到IP头部和传输层头部之间,如图4所示。

图4 传输模式加密报文

  (4)隧道模式的加密

  隧道模式对整个IP数据包进行加密。此时,需要新产生一个IP头部,IPSec头部被放在新产生的IP头部和以前的IP数据包之间,从而组成一个新的IP头部,如图5所示。

图5 隧道模式加密报文

AH头结构

  AH协议为IP通信提供数据源认证、数据完整性和反重播保证,它能保护通信免受篡改,但不能防止窃听,适合用于传输非机密数据。AH的工作原理是在每一个数据包上添加一个身份验证报头。此报头包含一个带密钥的Hash散列(可以将其当作数字签名,只是它不使用证书),此Hash散列在整个数据包中计算,因此对数据的任何更改将致使散列无效——这样就提供了完整性保护,如图6、图7所示。

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

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

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

图6 AH报文结构图7 AH完整性检查报文

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

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

  ESP头结构

  ESP为IP数据包提供完整性检查、认证和加密,可以看作是“超级 AH”, 因为它提供机密性并可防止篡改。如图8、图9所示。

 图8 ESP头结构

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

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

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

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

  · Next Header(下一个报头):识别下一个使用IP协议号的报头,如TCP或UDP。

  · ESP认证报尾字段:Authentication Data(AD,认证数据),它包含完整性检查和。完整性检查部分包括ESP报头、有效载荷(应用程序数据)和ESP报尾。

 图9 ESP完整性检查报文结构

注:本文转载自比特网媒体平台;文内观点仅供参考​​

[转贴] IPSEC From 知乎的更多相关文章

  1. 每个极客都应该知道的Linux技巧

    每个极客都应该知道的Linux技巧 2014/03/07 | 分类: IT技术 | 0 条评论 | 标签: LINUX 分享到:18 本文由 伯乐在线 - 欣仔 翻译自 TuxRadar Linux. ...

  2. 《数据通信与网络》笔记--IPSec

    1.IP层的安全:IPSec IP层安全(IP security,IPsec)是由因特网工程任务组(IETF)设计用来为IP层的分组提供安全的一组协议.IPsec帮助 生成经过鉴别的与安全的IP层的分 ...

  3. [ipsec] 特别硬核的ike/ipsec NAT穿越机制分析

    〇 前言 这怕是最后一篇关于IKE,IPSEC的文字了,因为不能没完没了. 所以,我一直在想这个标题该叫什么.总的来说可以将其概括为:IKE NAT穿越机制的分析. 但是,同时它也回答了以下问题: ( ...

  4. [dev][ipsec][distributed] strongswan如何做热迁移/高可用/High Availability

    问题描述: 原生的基于kernel 的 strongswan 如何做高可用,HA,High Availability 问题分析: 基于我们已知的,ipsec,strongswan的知识.问题分解如下: ...

  5. IPSec 专题----转自华为文档

    参考链接:https://support.huawei.com/enterprise/zh/doc/EDOC1000122878?section=j004 IPSec 特性全景 1.介绍 由于IP报文 ...

  6. 谈谈一些有趣的CSS题目(十一)-- reset.css 知多少?

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

  7. Python 爬虫模拟登陆知乎

    在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...

  8. 谈谈一些有趣的CSS题目(三)-- 层叠顺序与堆栈上下文知多少

    开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...

  9. scrapy 知乎用户信息爬虫

    zhihu_spider 此项目的功能是爬取知乎用户信息以及人际拓扑关系,爬虫框架使用scrapy,数据存储使用mongo,下载这些数据感觉也没什么用,就当为大家学习scrapy提供一个例子吧.代码地 ...

随机推荐

  1. 6 [面向对象]-property

    1.特性(property) 什么是特性property property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值 例一:BMI指数(bmi是计算而来的,但很明显它听起来像是一个属性 ...

  2. hdu2795 Billboard(线段树单点修改)

    传送门 结点中的l和r表示层数,maxx表示这层最多还剩下多少宽度.根据公告的宽度取找到可以放的那一层 找到后返回层数,并修改maxx #include<bits/stdc++.h> us ...

  3. 如何写一个Xss Bot

    如何写一个Xss Bot 现在的ctf比赛里 xss的出题方式比较特殊,一般使用xss bot,所以借鉴大佬经验尝试弄一个xss题目. xss bot 就是代替管理员去完成点击页面的任务,bot需要能 ...

  4. 记一个小bug的锅

    人生中的第一个线上bug 我参与的第一个项目就出现了.但是自己还觉得这锅也不全是自己的,毕竟那么明显的bug出现在历史模块中(不是我写的新模块),难道测试部就没一点责任?代码走查人员就没一点责任?不过 ...

  5. Python之Django基本命令

    一.新建项目 $django-admin.py startproject project_name # 特别是在 windows 上,如果报错,尝试用 django-admin 代替 django-a ...

  6. jQuery中turn.js(翻页效果)学习笔记

    Turn.js是一个内置的jQuery翻页插件1 html中引入<script type="text/javascript" src="js/turn.js&quo ...

  7. python打印对象的所有可操作内容

    print('\n'.join(['%s:%s' % item for item in 对象.__dict__.items()]))

  8. partprobe命令详解

    基础命令学习目录首页 原文链接:https://www.jb51.net/LINUXjishu/389836.html linux上,在安装系统之后,可否创建分区并且在不重新启动机器的情况下系统能够识 ...

  9. nginx之location(root/alias)

    location配置 1. 语法规则(按优先级) =        表示精确匹配,优先级最高 ^~      表示uri以某个常规字符串开头,用于匹配url路径(而且不对url做编码处理,例如请求/s ...

  10. console.log() 替代函数

    var log = console.log.bind(console); log('d')