IP Security 簡介

IP Security简称IPsec,主要提供两种功能:
u  Authentication(认证功能)  是指封包接收端确认发送端的身份,以确保双方传送的数据未受他人破坏或窜改。
u  Confidentiality(保密功能)  将通讯内容予以加密,防止网络上的第三者读取通讯内容。
IPsec的运作必须经过以下步骤:
(1)  双方建立Security Association(安全连结,简称SA  透过协商机制来决定IPsec的使用方式。例如:选择何种安全功能(AH or ESP),加密的算法,使用密钥的原则等。
(2)  密钥交换   利用非对称性加密法,让双方拥有共同的秘钥。
(3)  以安全的管道传送讯息   透过建立好的SA以及共有的秘钥,双方以安全的管道传送数据。
IPsec提供以下2种安全传送模式:

-       Transport mode (传输模式)  建立联机的Host-AHost-B皆具有IPsec能力时,可使用Transport mode来建立联机。






-       Tunnel mode (隧道模式)  建立联机的Host-A以及Host-B不需要具有IPsec能力,透过两端的routers来建立IPsec安全联机。









IPsec使用的安全功能有2种如下:
u  Authentication Header(简称AH  AH除了提供IP承载的数据数据的认证以外,也尽可能保护IP表头内容。然而,有些IP表头的域值在经过router转送封包时会被改变(例如 Hop Limit字段),这些会改变的字段是不可保护的。因此,AHIP表头的保护是零碎非完整的。
u  Encapsulating Security Payload(简称ESP  ESP除了提供与AH类似的功能以外,还提供加密的服务。
AH可单独使用,或者同时与ESP一起保护IP封包。 ESPAH提供完整性保护的主要区别在于覆盖的程度: 具体的差异是ESP不保护IP表头内容。

如何防止重送攻击

所谓重送攻击是指第三者在网络上截取到封包,并原封不动地将封包重复送出。AHESP皆提供防止重送攻击的功能,其运作的方式与原理完全相同: 封包发送端利用Sequence Number字段,将每个封包依序编号。封包接收端则检查Sequence number域值,可防止重送攻击。

接收端必须设置可接收范围窗口,利用滑动窗口(sliding window)机制,可防止重送攻击。封包接收范围是一个常数,默认值为64。变量N代表目前所接收到封包的最大编号, 滑动窗口可表示成 N-63N),且记录接收范围内的所有封包编号的接收状态:“已接收”或者“未接收”。






当收到的封包通过认证无误之后,会经过抗重复攻击的检测如下:
²  如果封包编号小于 N-63,则丢弃封包。
²  如果封包编号在接收范围内而且该编号标记为“已接收”,则丢弃封包。
²  如果封包编号在接收范围内而且该编号标记为“未接收”,则将其标记为“已接收”且对封包做进一步处理。
²  如果封包编号大于N,则将N设定为接收到封包的编号值,并将其标记为“已接收”且对封包做进一步处理。

Authentication HeaderAH

IP Authentication Header (认证表头),简称AH,用来提供IP数据封包的保护如下:
n   完整性(integrity  防止IP封包内容被篡改。
n   数据来源的认证(data origin authentication  用来确认对方的身份。
n   防止重送攻击  利用发送端递增封包的序列号,接收端可检查序列号值来防止重送攻击。在SA的建立过程中,可由封包接收端协商决定是否开启此功能。

AH表头格式

IP Authentication Header(简称AH)用于提供IP封包的完整性及数据源的认证,并保护封包重送攻击。由于一些IP表头字段在封包送达目的地前,可能已经被router改变(例如 Hop Limit),这些会改变的字段不在AH的保护范围。








Next Header  用来识别下一个表头的类型。此域值取自于internet编号分配机构(IANA)定义的IP协议编号。例如:
Decimal
Protocol
References
4
IPv4
RFC 2003
6
TCP
RFC 793
17
UDP
RFC 768
41
IPv6
RFC 2473

Payload Length  用来记载Integrity Check Value字段的长度, 单位为4 bytes,再减2。例如:如果ICV字段长度为96 bits3 32-bits word),则Payload Length值将等于4 3 32-bits word固定长度加上 3 32-bits word ICV长度,再减2)。
Reserved  设为0
Security Parameter Index  简称SPI。封包接收端用来识别SA
Sequence Number  IP封包序号,目的是用来防止重送攻击。封包发送端的第一个封包的Sequence Number域值设为1,紧接着每发送一个封包就会对这个域值加1,封包接收端可利用它来防止重送攻击。Sequence Number域值不可循环使用,在发送第232封包前,必须重新建立SA
此外,IPsec为了支持64-bitssequence number字段长度,有个选项字段称为Extended Sequence Number (简称ESN)可作为sequence number的高序32 bits。在建立SA时可协商是否使用ESNESN字段并不在封包里传送,而是由发送端以及接受端自行计数,且包含在ICV值的计算。
Authentication Data  此变动长度字段包含Integrity Check Value(完整性校验值),简称ICV,长度必须是32-bit的整倍数。发送端计算封包数据的ICV值,然后填入此字段。接收端计算封包数据的ICV值,再与此字段做比对。如果不符,则代表封包有问题。
此外,如果需要确保AH表头为32 bitsIPv4)或者64 bitsIPV6)的整倍数,ICV字段可以包括padding。所有AH的实现必须支持padding,填补足够的padding来满足IPv4/IPv6的对齐要求。

下表列出AH计算IP封包的ICV值的覆盖面:包括AH本身。
字段项目
长度(bytes)
需求
计算的覆盖面
传送内容?
IP header
变动长度
必要
1
传送
Next Header字段
1
必要
整个字段
传送
Payload Len字段
1
必要
整个字段
传送
Reserved字段
2
必要
整个字段
传送
SPI字段
4
必要
整个字段
传送
Seq#(低序32 bits
4
必要
整个字段
传送
ICV
变动长度
必要
2
传送
IP datagram3
变动长度
必要
整个部分
传送
Seq#(高序32 bits
4
如果存在
整个字段
不传送
ICV Padding
变动长度
如果需要
整个部分
不传送
【1】      请参考RFC 4302 Section 3.3.3Integrity Check Value Calculation
【2】      计算ICV值前先设为零,计算完后再填入此字段。
【3】      如果是tunnel mode -> IP Datagram
    如果是transport mode -> next header and data

AH封包的处理

AH表头的位置

Transport mode下的AH表头位置
Transport mode下, AH表头插入IP表头之后和下一层协议之前 (例如: TCPUDPICMP等),或已插入的任何其它的IPsec表头之前(AHESP可以以各种方式组合在一起)。

IPv4的情况下,AH插入IP表头(包含所有选项)之后,下一层协议之前。






IPv6的情况下,AH插入IP表头、 hop-by-hop扩充表头、 routing扩充表头、fragmentation扩充表头之后。





Tunnel mode下的AH表头位置
Tunnel mode下,内部的IP表头携带的时原始IP封包,而外部的IP表头包含AH。内部以及外部的IP版本可混合使用,即IPv6 over IPv4以及IPv4 over IPv6皆是允许的。在Tunnel mode下,AH保护整个内部的IP封包,其中包括整个内部的IP表头。 AH对外部IP表头的保护方式跟Transport mode是相同的。










Sequence Number相关的应用

u  发送端在SA建立之后即设置内部的sequence number计数器初始值为0 (长度可为32 bits64 bits,取决于建立SA时是否决定使用选项Extended Sequence Number)。发送封包前先将sequence number计数器加1并将低序32 bits值填入AHSequence Number字段。所以,第一个发送出去的封包的AH Sequence Number域值固定为1
u  如果防止重送攻击功能被开启,封包发送端必须确保Sequence Number域值不被循环使用。 Sequence Number达到最高值之前, 必须重新建立SA,才可继续发送封包。 如果防止重送攻击功能被关闭,封包发送端除了将Sequence Number域值递增以外,不需要做任何检查和重新建立SA的动作。

u  SA建立完成且开启防止重送攻击功能, 接收端必须设置sequence number计数器初始值为0。接收端必须检查接收到的封包的Sequence Number域值跟其它已经接收到的封包的Sequence Number域值是否重复。

Encapsulating Security PayloadESP
ESP除了提供加密功能以外,可选择性地加上认证功能。发送端会先加密封包,如果启动认证功能会再计算封包的ICV,然后在封包最后面加上认证字段,用来存放ICV值。接收端收到封包后,会先检查ICV值,确认无误后再将封包解密。

ESP表头格式

Encapsulation Security Payload HeaderESP)用于提供IP封包的机密性、完整性及数据源认证,并保护封包重送攻击,和流量的机密性。












Security Parameter Index  简称SPI。封包接收端用来识别安全连结。
Sequence Number  IP封包序号,此字段的应用与AH相同。
Payload Data  变动长度字段。指封包所承载的资料。
Padding  目的是为了将Payload Data补足一定的长度,以符合加密法对区块的要求。
Padding Length  用来记载Padding字段的长度。
Next Header  用来识别下一个表头的类型。
Integrity Check Value  完整性校验值,简称ICV,长度是变动的。发送端计算封包数据的ICV值,然后填入此字段。接收端计算封包数据的ICV值,再与此字段做比对。如果不符,则代表封包有问题。

ESP封包的处理

ESP表头的位置

Transport mode下的ESP表头位置
Transport mode下, ESP表头插入IP表头之后和下一层协议之前(例如:TCPUDPICMP等)。请注意,ESP不涵盖IP表头的加密以及认证保护。

IPv4的情况下,ESP插入IP表头(包含所有选项)之后,下一层协议之前。






IPv6的情况下, ESP插入IP表头、hop-by-hop扩充表头、routing扩充表头、fragmentation扩充表头之后。





Tunnel mode下的ESP表头位置
Tunnel mode下,内部的IP表头携带的时原始IP封包,而外部的IP表头包含ESP。内部以及外部的IP版本可混合使用,即IPv6 over IPv4以及IPv4 over IPv6皆是允许的。在Tunnel mode下,ESP加密整个内部的IP封包,包括整个内部的IP表头。











AHESP混合使用

AHESP可以混合使用,通常是先加密再做认证保护。















參考文獻

RFC 4302  IP Authentication Header
RFC 4303  IP Encapsulating Security Payload (ESP)






评论

此博客中的热门博文

IPv6 簡介以及地址介紹

DHCPv6 简介

Neighbor Discovery 简介

Multicast Listener Discovery (MLD) 简介

MLDv2 简介

Mobile IPv6 简介

ICMPv6