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-A与Host-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字段),这些会改变的字段是不可保护的。因此,AH对IP表头的保护是零碎非完整的。
u Encapsulating
Security Payload(简称ESP) ESP除了提供与AH类似的功能以外,还提供加密的服务。
AH可单独使用,或者同时与ESP一起保护IP封包。
ESP和AH提供完整性保护的主要区别在于覆盖的程度: 具体的差异是ESP不保护IP表头内容。
如何防止重送攻击
所谓重送攻击是指第三者在网络上截取到封包,并原封不动地将封包重复送出。AH和ESP皆提供防止重送攻击的功能,其运作的方式与原理完全相同:
封包发送端利用Sequence Number字段,将每个封包依序编号。封包接收端则检查Sequence
number域值,可防止重送攻击。
接收端必须设置可接收范围窗口,利用滑动窗口(sliding window)机制,可防止重送攻击。封包接收范围是一个常数,默认值为64。变量N代表目前所接收到封包的最大编号,
滑动窗口可表示成 (N-63,N),且记录接收范围内的所有封包编号的接收状态:“已接收”或者“未接收”。
当收到的封包通过认证无误之后,会经过抗重复攻击的检测如下:
² 如果封包编号小于
N-63,则丢弃封包。
² 如果封包编号在接收范围内而且该编号标记为“已接收”,则丢弃封包。
² 如果封包编号在接收范围内而且该编号标记为“未接收”,则将其标记为“已接收”且对封包做进一步处理。
² 如果封包编号大于N,则将N设定为接收到封包的编号值,并将其标记为“已接收”且对封包做进一步处理。
Authentication Header(AH)
IP Authentication Header (认证表头),简称AH,用来提供IP数据封包的保护如下:
n 完整性(integrity) 防止IP封包内容被篡改。
n 数据来源的认证(data origin
authentication) 用来确认对方的身份。
n 防止重送攻击 利用发送端递增封包的序列号,接收端可检查序列号值来防止重送攻击。在SA的建立过程中,可由封包接收端协商决定是否开启此功能。
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
bits(3 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-bits的sequence
number字段长度,有个选项字段称为Extended Sequence Number (简称ESN)可作为sequence
number的高序32 bits。在建立SA时可协商是否使用ESN。ESN字段并不在封包里传送,而是由发送端以及接受端自行计数,且包含在ICV值的计算。
Authentication
Data 此变动长度字段包含Integrity
Check Value(完整性校验值),简称ICV,长度必须是32-bit的整倍数。发送端计算封包数据的ICV值,然后填入此字段。接收端计算封包数据的ICV值,再与此字段做比对。如果不符,则代表封包有问题。
此外,如果需要确保AH表头为32 bits(IPv4)或者64
bits(IPV6)的整倍数,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 datagram【3】
|
变动长度
|
必要
|
整个部分
|
传送
|
Seq#(高序32 bits)
|
4
|
如果存在
|
整个字段
|
不传送
|
ICV Padding
|
变动长度
|
如果需要
|
整个部分
|
不传送
|
【1】
请参考RFC 4302 Section 3.3.3“Integrity Check Value Calculation”。
【2】 计算ICV值前先设为零,计算完后再填入此字段。
【3】 如果是tunnel mode -> IP Datagram
如果是transport mode -> next header and data
如果是transport mode -> next header and data
AH封包的处理
AH表头的位置
Transport
mode下的AH表头位置
在Transport mode下,
AH表头插入IP表头之后和下一层协议之前 (例如:
TCP,UDP,ICMP等),或已插入的任何其它的IPsec表头之前(AH与ESP可以以各种方式组合在一起)。
在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 bits或64
bits,取决于建立SA时是否决定使用选项Extended
Sequence Number)。发送封包前先将sequence number计数器加1并将低序32
bits值填入AH的Sequence 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 Payload(ESP)
ESP除了提供加密功能以外,可选择性地加上认证功能。发送端会先加密封包,如果启动认证功能会再计算封包的ICV,然后在封包最后面加上认证字段,用来存放ICV值。接收端收到封包后,会先检查ICV值,确认无误后再将封包解密。
ESP表头格式
Encapsulation Security Payload
Header(ESP)用于提供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表头之后和下一层协议之前(例如:TCP,UDP,ICMP等)。请注意,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表头。
AH与ESP混合使用
AH与ESP可以混合使用,通常是先加密再做认证保护。
參考文獻
RFC 4302 IP Authentication Header
RFC 4303 IP Encapsulating Security Payload (ESP)
评论
发表评论