网际网路安全协定(英语:Internet Protocol Security,缩写:IPsec)是一个协议套件,透过对IP协议分组进行加密认证来保护IP协议的网络传输协议族(一些相互关联的协议的集合)。

位于网络层中的IPsec

IPsec主要由以下协议组成[1][2]

  1. 认证头(AH),为IP数据报提供无连接数据完整性消息认证英语Message_authentication以及防重放攻击保护[3][4]
  2. 封装安全载荷(ESP),提供机密性、数据源认证、无连接完整性、防重放和有限的传输流(traffic-flow)机密性[5]
  3. 网际网路金钥交换(英语: Internet Key Exchange ,简称IKE或IKEv2),为AH、ESP操作所需的安全关联(SA)提供算法、数据包和金钥参数[6]

标准现状

IPsec的源始编码是在IPv4的环境中于1994年开发,第一版IPsec协议在RFC 2401-2409中定义。在2005年第二版标准文档发布,新的文档定义在RFC 4301RFC 4309[7][8]。在IPv4中IPsec的使用是一个可选项,在IPv6 RFC 6434中为必选的内容 [9],这样做的目的,是为了随着 IPv6的进一步流行,IPsec可以得到更为广泛的使用。

历史概要

从1920-70年代初开始,美国高级研究项目局赞助了一系列实验性的ARPANET加密设备,起初用于本地ARPANET数据包加密,随后又用于TCP/IP数据包加密。

从1986年到1991年,美国国家安全局在其安全数据网络系统(SDN)计划下赞助了互联网安全协议的开发,包括摩托罗拉在内的各种供应商聚集在一起,于1988年生产了一种网络加密设备,这项工作于1988年由NIST公开发表,其中第3层的安全协议(SP3)演变为ISO标准的网络层安全协议(NLSP)。[10]

从1992年到1995年,有三个研究小组对IP层加密分别进行了独立研究:

  • 1. 1992年,美国海军研究实验室(NRL)开始了Simple Internet Protocol Plus(SIPP)项目来进行IP加密协议的研究。
  • 2. 1993年,哥伦比亚大学SunOSAT&T贝尔实验室,开始由 JohnIoanndis等人研发实验性软件IP加密协议 (swIPe)。
  • 3. 1993年,在白宫信息高速公路项目的支持下,Trusted Information Systems(TIS)科学家徐崇伟(Wei Xu)[11] 研究和开发了第一代软件 IPSEC 协议,它的编码是在BSD 4.1内核中完成的,支持x86和SUNOS CPU架构,同时开发了硬件安全3DES的加密技术,并为数据加密标准开发了设备驱动程序。到1994年12月,TIS发布了由DARPA赞助的开放源代码的“手铐防火墙”产品,其VPN速度超过T1,首次用 IPSec VPN 实现了美国东西海岸安全链接,也是历史上第一个 IPSec 商用产品。[12]
  • 4. 在美国国防部高级研究计划局(DARPA)资助的研究工作下,1996年,NRL为IPsec开发了IETF标准跟踪规范(rfc1825到rfc1827),它的编码是在BSD 4.4内核中,同时支持x86和SPARC CPU架构[13]

互联网工程任务组(IETF)于1992年成立了IP安全工作组,以规范对 IPsec 的公开协议,1995年工作组成员有 TIS、Cisco、FTP、Checkpoint 等五个企业组成,首次合作协商改进了 NRL 起草的 IPsec 协议标准,以及规范了 Cisco 和 TIS 提供的 IPsec 开放源代码,此后,发布了RFC-1825和RFC-1827,NRL在1996年 USENIX 会议论文集中进行了描述了,由麻省理工学院在线提供,并成为大多数初始商业实现的基础。[14]

设计意图

IPsec被设计用来提供(1)入口对入口通信安全,在此机制下,分组通信的安全性由单个节点提供给多台机器(甚至可以是整个局域网);(2)端到端分组通信安全,由作为端点的计算机完成安全操作。上述的任意一种模式都可以用来构建虚拟专用网(VPN),而这也是IPsec最主要的用途之一。应该注意的是,上述两种操作模式在安全的实现方面有着很大差别。

因特网范围内端到端通信安全的发展比预料的要缓慢[来源请求],其中部分原因,是因为其不够普遍或者说不被普遍信任。公钥基础设施能够得以形成(DNSSEC最初就是为此产生的),一部分是因为许多用户不能充分地认清他们的需求及可用的选项,导致其作为内含物强加到卖主的产品中(这也必将得到广泛采用);另一部分可能归因于网络响应的退化(或说预期退化),就像兜售信息的充斥而带来的带宽损失一样。

IPsec与其它互联网安全协议的对比

IPsec协议工作在OSI模型的第三层,使其在单独使用时适于保护基于TCPUDP的协议(如安全套接子层SSL)就不能保护UDP层的通信流)。这就意味着,与传输层或更高层的协议相比,IPsec协议必须处理可靠性和分片的问题,这同时也增加了它的复杂性和处理开销。相对而言,SSL/TLS依靠更高层的TCP(OSI的第四层)来管理可靠性和分片。

技术细节

认证头(AH)

认证头(Authentication Header,AH)被用来保证被传输分组的完整性和可靠性。此外,它还保护不受重放攻击。认证头试图保护IP数据报的所有字段,那些在传输IP分组的过程中要发生变化的字段就只能被排除在外。当认证头使用非对称数字签名算法(如RSA)时,可以提供不可否认性(RFC 1826[15]

认证头分组图示:

位偏移 字节 0 1 2 3
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
0 下一个头 载荷长度 保留
32 安全参数索引(SPI)
64 序列号
96+ 认证数据(可变长度)

字段含义:

下一个头:标识被传送数据所属的协议。
载荷长度:认证头包的大小。
保留:为将来的应用保留(目前都置为0)。
安全参数索引:与IP地址一同用来标识安全参数。
序列号:单调递增的数值,用来防止重放攻击。
认证数据:包含了认证当前包所必须的数据。

封装安全载荷(ESP)

封装安全载荷(Encapsulating Security Payload,ESP)协议对分组提供了源可靠性、完整性和保密性的支持。与AH头不同的是,IP分组头部不被包括在内。

ESP分组图示:

位偏移 字节 0 1 2 3
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
0 安全参数序列(SPI)
32 序列号
64+ 载荷*(可变长度)
  填充(0-255字节)
    填充长度 下一个头
认证数据(可变长度)

字段含义:

安全参数索引:与IP地址一同用来标识安全参数
序列号:单调递增的数值,用来防止重放攻击。
载荷数据:如果没使用ESP的加密功能,则载荷数据域的内容是“下一个头”所指示的数据;如果使用了ESP的加密功能,则使用加密载荷数据和ESP尾部数据所得的密文作为payload data.
填充:某些块加密算法用此将数据填充至块的长度。
填充长度:以位为单位的填充数据的长度。
下一个头:标识载荷中封装的数据所属的协议。
认证数据:又叫做完整性校验值(ICV)。包含了认证当前包所必须的数据。

安全关联(SA)

实现

FreeS/WAN项目已经开发了一个开源GNU/Linux作业系统下的IPsec实现。Free S/WAN项目的开发在2004年时被中止。OpenswanstrongSwanlibreswan是Free S/WAN延续。

至今已有许多IPsec协议和ISAKMPIKE协议的实现。它们包括:

参见

参考文献

  1. ^ Thayer, R.; Doraswamy, N.; Glenn, R.. IP Security Document Roadmap. IETF. November 1998. . RFC 2411. 
  2. ^ Hoffman, P.. Cryptographic Suites for IPsec. IETF. December 2005. . RFC 4308. 
  3. ^ Kent, S.; Atkinson, R.. IP Authentication Header. IETF. November 1998. . RFC 2402. 
  4. ^ Kent, S.. IP Authentication Header. IETF. December 2005. . RFC 4302. 
  5. ^ Kent, S.; Atkinson, R.. IP Encapsulating Security Payload (ESP). IETF. November 1998. . RFC 2406. 
  6. ^ The Internet Key Exchange (IKE), RFC 2409, §1 Abstract
  7. ^ RFC 4301
  8. ^ RFC 4309
  9. ^ "IPv6 Node Requirements", E. Jankiewicz, J. Loughney, T. Narten (December 2011)
  10. ^ Network Encryption - history and patents. [2022-01-18]. (原始内容存档于2014-09-03). 
  11. ^ Trusted Information Systems. (原始内容存档于2020-06-21). 
  12. ^ The history of VPN creation. (原始内容存档于2020-09-29). 
  13. ^ "https://www.usenix.org/legacy/publications/library/proceedings/sd96/atkinson.html页面存档备份,存于互联网档案馆)"
  14. ^ IETF IP Security Protocol (ipsec) Working group History. (原始内容存档于2019-09-13). 
  15. ^ RFC 1826

外部链接

IPsec相关RFC文档

RFC 2401
IP协议的安全架构
RFC 2402
认证头
RFC 2406
封装安全载荷
RFC 2407
ISAKMP的IPsec解释域(IPsec DoI)
RFC 2408
网路安全关联与金钥管理协定(ISAKMP)
RFC 2409
因特网密钥交换(IKE)