YDB 041-2009
基本信息
标准号:
YDB 041-2009
中文名称:IPv6 协议密码生成地址安全扩展技术要求
标准类别:通信行业标准(YD)
标准状态:现行
出版语种:简体中文
下载格式:.zip .pdf
下载大小:959120
相关标签:
协议
密码
生成
地址
安全
扩展
技术
标准分类号
关联标准
出版信息
相关单位信息
标准简介
YDB 041-2009.Cryptographically generated addresses extension in IPv6.
1范围
YDB 041报告规定了密码生成地址在IPv6协议中的安全扩展,对其的处理规则,以及它在源地址验证技术方面的应用。
YDB 041报告适用于采用IPv6地址的网络设备。
2规范性引用文件
下列文件中的条款通过本技术报告的引用而成为本技术报告的条款。凡是注日期的引用文件,其随后所有的修改单(不包括勘误的内容)或修订版均不适用于本技术报告,然而,鼓励根据本技术报告达成协议的各方研究是否可使用这些文件的最新版本。凡是不注日期的引用文件,其最新版本适用于本技术报告。
IETF RFC 2460 IPv6规范.
IETF RFC 3971 安全邻居发现( SEND)
IETF RFC 3972 密码生成地址(CGA)
IETF RFC 4443 适合IPv6规范的ICMP (ICMPv6)
3术语和定义
下列术语和定义适用于本技术报告。
3.1
IPv6 Internet protocol version 6
因特网协议版本6。
3.2
IPv6地址
IPv6地址由128比特组成,包括高64比特的网络前缀和低64比特的接口标识符。
3.3
IPv6基本头
区别于IPv4头,IPv6基本头为固定的40字节,包括4比特的版本号、8比特通信量类、20比特流标号、16比特有效载荷长度、8比特下一一个首部、8比特跳数限制、128比特源地址和128比特目的地址。基本头部后面是有效载荷,它包括可能选用的扩展头和上层数据。
标准内容
通信标准类技
YDB0412009
IPv6协议密码生成地址安全扩展技术要求
Cryptographically generated addresses extension in IPv62010-01-14印发
中国通信标准化协会
2规范性引用文件
3术语和定义..
3.1 IPv6 Internet protocol version 63.2IPv6地址:
3.3IPv6基本头
3.4IPv6地址扩展头
cryptographically generated addresses...3.6CGA参数
3.7节点..
3.8TLV选项.
4CGA原理概述.
5密码生成地址扩展头在IPv6扩展头中的顺序6密码生成地址扩展头格式
6.1密码生成地址请求扩展头格式.6.2密码生成地址参数扩展头格式....6.3密码生成地址签名扩展头格式.7数据包处理规则
7.1数据包发送处理规则
7.2数据包接收处理规则
8ICMP消息.
8.1验证失败.
8.2缺少必要选项,
9密码生成地址扩展头应用举例
10密码生成地址的产生和配置
10.1密码生成地址的参数格式.
10.2参数和地址的生成
10.3配置节点的密码生成地址
......
.......
YDB041—2009
YDB041—2009
密码生成地址扩展作为IPv6的一个新增扩展头,利用密码生成地址和公钥绑定的特点,无需其它任何第三方或安全基础设施,可以提供源地址验证和信息完整性验证等,对IPv6网络安全性能提高有重要意义,为此制定本技术报告。为适应信息通信业发展对通信标准文件的需要,在信息产业部统一安排下,对于技术尚在发展中,文需要有相应的标准性文件引导其发展的领域,由中国通信标准协会组织制定“通信标准类技术报告”,推荐有关方面参考采用。有关对本技术报告的建议和意见,向中国通信标准化协会反映。本技术报告由中国通信标准协会提出并归口。本技术报告起草单位:华为技术有限公司。本技术报告主要起草人:冯鸿雁。II
HiiKAoNiKAca
1范围
IPv6协议密码生成地址安全扩展技术要求
本技术报告规定了密码生成地址在IPv6协议中的安全扩展,对其的处理规则,以及它在源地址验证技术方面的应用。
本技术报告适用于采用IPv6地址的网络设备。2规范性引用文件
下列文件中的条款通过本技术报告的引用而成为本技术报告的条款。凡是注日期的引用文件,其随后所有的修改单(不包括误的内容)或修订版均不适用于本技术报告,然而,鼓励根据本技术报告达成协议的各方研究是否可使用这些文件的最新版本。凡是不注日期的引用文件,其最新版本适用于本技术报告。
IETFRFC2460
IETFRFC3971
IETFRFC3972
IETFRFC4443
3术语和定义
IPv6规范
安全邻居发现(SEND)
密码生成地址(CGA)
适合IPv6规范的ICMP(ICMPv6)下列术语和定义适用于本技术报告。3.1
IPv6 Internet protocol version 6因特网协议版本6。
IPv6地址
IPv6地址由128比特组成,包括高64比特的网络前缀和低64比特的接口标识符。3.3
IPv6基本头
区别于IPv4头,IPv6基本头为固定的40字节,包括4比特的版本号、8比特通信量类、20比特流标号、16比特有效载荷长度、8比特下一个首部、8比特跳数限制、128比特源地址和128比特自的地址。基本头部后面是有效载荷,它包括可能选用的扩展头和上层数据。3.4
IPv6地址扩展头
IPv6基本头后面允许有零个或多个扩展头,IETFRFC2460中定义了6种扩展头,包括逐跳选项头、路由头,分片头、验证头,封装安全有效载荷头和目的站选项头3.5
CGA cryptographically generated addresses密码生成地址,一种将公钥与IPv6地址绑定的方法,在IETFRFC3972中定义。CGA基于CGA参数,生成密码的IPv6地址的接口标识符。其过程是,高64比特的网络前缀由所在子网分配,后64比特1
iiKAoNhikAca
YDB041—2009
的接口标识符,由节点生成公私钥对,对由公钥和其他一些参数组成的CGA参数计算一个单向哈希函数,产生后64位的接口标识符。3.6
CGA参数
一种数据结构,在IETFRFC3972中定义,包括修正符、网络前缀、冲突计数、公钥、扩展字段等。3.7
能够产生和识别CGA头的设备。IPv4节点或IPv6节点仅用在有必要避免混地方。3.8
TLV选项
type-length-value选项。根据选项的类型、长度、值(即选项内容)来编码的选项,见IETFRFC2460。4CGA原理概述
密码生成地址(CGA:CryptographicallyGeneratedAddresses)是IETFRFC3972提出来的一种无状态地址自动配置方法,如图1所示,其主要方法是:IPv6节点首先产生公私钥对,然后用哈希算法对包含有公钥的CGA参数进行计算,得到IPv6地址的接口标识符,结合通过路由广播得到的网络前缀,得到IPv6地址,相应的私钥可以用来对从此地址发出的消息进行签名。
接收方通过重新计算的哈希值与接口标识符的比较,可以验证公钥和地址的联系。这样通过附带个公钥,一些辅助参数及用对应于这一公钥的私钥对消息的签名,可以保护从一个IPv6地址发送来的消息。保护工作不需要认证或是任何的安全基础设施生成
公私钥对
计算得出
接口标识符
IPv6地址
网络前缀
图1密码生成地址过程
本技术报告规定了密码生成地址的扩展格式,即新定义了一个扩展头,其中包括三个可选项:CGA请求,CGA参数和CGA签名。CGA扩展头通过对对方地址和签名的验证,来确定信息来源的真实性和信息完整性。另外,由于CGA扩展头工作于网络层,网络层以上的协议都可以选择使用CGA扩展头来保护通信。
验证者需要知道被验证的地址、公钥和辅助参数值。验证完这一地址和公钥的关联性之后才能验证公钥拥有者(地址拥有者)签名的消息。但是CGA最大的优点就是不需要额外的安全基础,如公钥基础设施(PKI),权限认证或者其它值得信赖的服务器。由于CGA自身不能被验证,虽然攻击者可以用任何子网前缀加上他自已(或其他人)的公钥,生成一个新的CGA。但攻击者不能使用其他人的CGA,也不能发送来自地址拥有者的签名消息。5密码生成地址扩展头在IPv6扩展头中的顺序根据IETFRFC2460的规定,IPv6扩展头的顺序根据其类型,按照处理顺序安排。在所有的扩展2
HiiKAoNiKAca
头中,需要网络设备处理的在数据包头的前部,需要终端处理的在数据包头的尾部。增加了CGA头后排列顺序如表1(其中的数字相当于IPV4的协议字段的值)。如果CGA选项的出现位置违背了上述顺序要求,IPV6节点也必须能够识别并且处理该CGA选项。表1CGA头位置
IPv6基本头
逐跳选项头
路由头
分片头
CGA头
验证头
封装安全载荷头
目的站选项头
上层头(例如TCP头、UDP
头等)
6密码生成地址扩展头格式
CGA头用于携带CGA参数等选项。CGA头的上一个头的“下一个头”字段中的值为TBD1。CGA头具体格式如下所示:
下一个头
下一个头
扩展头长度
扩展头长度
8比特选择符,标识该选项头的下一个头类型。8比特无符号整数,表示CGA头的长度(不包括前8字节),以字节为单位。该字段值为O时,表示CGA头中没有携带任何选项,即空CGA头。当通信一方想要使用CGA保护通信时,可以发出空CGA头;当通信一方收到空CGA头时,则向对方发出包含CGA请求选项的CGA头。16比特字段,留待将来使用。发送时该字段必须置为0,且接收方必须忽略该字段。
该部分长度可变,可以包含零个或多个TLV选项。本技术报告规定了3种选项类型,分别是CGA请求、CGA参数和CGA签名。1)CGA请求用于请求通信对方提供CGA参数和CGA签名:2)CGA参数用于传输CGA参数:
3)CGA签名是使用CGA节点的私钥对数据包负载部分的签名。CGA头中如果包含了CGA参数选项,则必须同时包含CGA签名选项,否则接收方向发送方发送ICMF错误消息至源地址;但是如果在某次通信中CGA参数已经发送过,可以仅发送CGA签名选项,而不必同时发送CGA参数选项。另外,对CGA头的处理方式(验证或者忽略)由接收方决定。6.1密码生成地址请求扩展头格式在通信过程中,通信任意一方均可以通过发送包含了CGA请求选项的CGA头来向对方请求CGA参数;若接受请求,则数据包的接收方需要在响应的数据包中包含CGA参数和CGA签名。CGA请求的数据格式如下:
序列号
HiiKAoNiKAca
YDB041—2009
序列号
8比特无符号整数,值为TBD2,表示该选项为CGA请求。8比特字段,留待将来使用。发送时该字段必须置为0,且接收者必须忽略该字段。
32比特随机数,用于防止重放攻击。6.2密码生成地址参数扩展头格式该选项用于承载CGA参数,接收者根据CGA参数对地址进行验证。CGA参数的数据格式如下:0
选项长度
填充长度
序列号
CGA参数
选项长度
序列号
填充长度
CGA参数
8比特无符号整数,值为TBD3,表示该选项为CGA参数8比特无符号整数,以字节为单位,包括类型、选项长度、填充长度、保留、序列号、CGA参数以及填充部分。8比特无符号整数,表示填充字段的长度,单位为字节。8比特字段,留待将来使用。发送时该字段必须置为0,且接收者必须忽略该字段。
32比特整数,用于防止重放攻击。如果该CGA参数用于响应CGA请求,这个字段的值为CGA请求中的序列号值加1;否则,该字段置为0。该部分长度可变,包含CGA参数,参数格式由IETFRFC3972中第2章定义。
可变长度字段,填充的字节数为“填充长度”字段所表示的长度。用于使CGA头的长度为8字节的整数倍。发送时该字段必须置为0,且接收者必须忽略该字段
6.3密码生成地址签名扩展头格式该选项用于发送使用CGA参数中的公钥所对应的私钥对数据包的签名,格式如下:0
选项长度
填充长度
数字签名
7数据包处理规则
选项长度
填充长度
数字签名
8比特无符号整数,值为TBD4,表示该字段为CGA签名。8比特无符号整数,以字节为单位,包括类型、长度、填充长度、保留、签名以及填充部分。
8比特无符号整数,以字节为单位。8比特字段,留待将来使用。这个字段必须设为0。可变长度字段,是使用与同一个扩展头中的CGA参数选项中的公钥对应私钥对数据包部分内容的签名。
可变长度字段,填充的字节数为:“填充长度”字段所表示的长度。用于使CGA头的长度为8字节的整数倍。发送时该字段必须置为0,且接收者必须忽略该字段。
iiiKAoNiKAca
CGA请求选项的处理比较简单。当主机需要发送包含CGA请求选项的数据包时,只需要产生32比特的随机数作为序列号,按照6.1所示包格式封装参数。当主机收到CGA请求选项时,如果选择响应该请求,则提取序列号,用于生成CGA参数选项使用;如果选择不响应该请求,则忽略收到的CGA请求选项。是否响应CGA请求,由主机或上层策略决定。下面的内容主要对包含CGA参数和CGA签名选项的数据包的进入和外出处理规则进行说明。
7.1数据包发送处理规则
节点发现收到的IPv6数据包的包头中包含了CGA请求选项时,必须在向对方发送的数据包中携带CGA参数和CGA签名选项:节点也可以主动在发出的数据包中加入CGA头,这由上层应用进行选择。如果节点发送CGA头是作为对CGA请求的响应,则CGA参数选项的序列号为CGA请求选项中序列号的值加1:如果节点主动发出CGA参数,那么CGA参数选项中的序列号字段置0。CGA参数的产生过程见IETFRFC3972中第4章。CGA签名选项中的签名使用的私钥必须与同一个扩展头中的CGA参数选项中的公钥对应。首先将下列内容按从左到右的顺序串联起来:1)从IP数据包的报头信息中得到的128位源地址;2)从IP数据包的报头信息中得到的128位目的地址;3)除了CGA签名选项的CGA头:
4)CGA头右侧的IP数据包有效载荷部分。对串联得到的数据用SHA-1哈希后,使用RSASSA-PKCS1-v1_5计算签名,并将签名放入CGA签名选项的数字签名字段。
7.2数据包接收处理规则
节点接收来自发送方的携带CGA扩展头的IPv6数据包时,在网络层对CGA扩展头进行处理。节点从数据包中获得CGA扩展头,包括CGA参数和签名。并且可以根据这些信息对数据包的源地址进行验证。验证通过,则对数据包进行下一步的处理,即向上层传输去除CGA扩展头的报文。或者也可以忽略该选项,由上层协议决定,即根据相关配置信息,确认是否需要对源地址进行验证。如果节点选择验证,验证步骤如下:
1)如果收到的数据包为CGA请求的响应,节点首先将CGA参数选项中的序列号减1,与自已缓存的CGA请求中的序列号比较。如果一致,则进行下一步;否则,丢弃该数据包,并发送ICMP错误报文。
根据CGA参数,对IP头中包含的源地址进行验证。验证过程见IETFRFC3972中第5章。如果验证通过,则进行下一步;否则,丢弃该数据包,发送ICMP错误报文。使用CGA参数中的公钥对CGA签名中的数字签名字段的内容解密,将得到的内容和数据包3)
中部分内容串联(串接方式见7.1)的哈希值比较。如果内容一致,则验证通过;否则,丢弃该数据包,发送ICMP错误报文,通知“验证失败”。除了上文提到的丢弃数据包的情况以外,以下几种错误也可能会导致数据包的丢弃,并返回ICMP错误报文:
1)扩展头中只出现了CGA参数选项而没有CGA签名选项;2)扩展头中只出现了CGA签名选项而没有CGA参数选项:3)节点发出了CGA请求后,收到的回应数据包中CGA头没有包含CGA参数和CGA签名选项。
8ICMP消息
部署和使用CGA头过程中发生某些错误时,需要使用ICMPv6(因为使用的是IPv6协议,所以需用ICMPv6)消息来向源地址报告错误信息。ParameterProblem在ICMPv6中的类型值为4。8.1验证失败
HiiKAoNniKAca
YDB041—2009
验证失败可能由三个方面导致:1)序列号错误
如果收到的序列号错误,那么就以一定的速率发送类型为ParameterProblem的ICMPv6消息给对方。Pointer指向出错的“序列号”字段CGA验证失败
如果CGA验证失败,那么就以一定的速率发送类型为ParameterProblem的ICMPv6消息给对方。Pointer要指向“CGA参数”字段。3)签名验证失败
如果签名验证失败,那么就以一定的速率发送类型为ParameterProblem的ICMPv6消息给对方。Pointer要指向“数字签名”字段。8.2缺少必要选项
缺少必要选项的情况如7.2所述。如果缺少CGA参数选项或CGA签名,则直接向对方发送类型为ParameterProblem的ICMPv6消息,Pointer指向CGA头,指明其为不识别的IPv6选项。收到此ICMP消息的一方首先需要以一定速率发送CGA签名选项,如果继续收到上述ICMP消息,则再同时发送CGA参数选项和CGA签名。
9密码生成地址扩展头应用举例
本章内容是在通信过程中使用CGA扩展的一个举例,也是本技术报告推荐的一种部署方案。基本思路为客户端和服务器通过建立TCP连接之前先使用CGA参数完成对对方地址的验证。通信的完整流程如下所示:
客户端
1空CGA头
2.CGA请求
3.CGA参数、CGA签名、CGA请求4.CGA参数、CGA签名
6.TCPACK、TCPSYN
服务器
图2密码生成地址扩展头应用
图2为一个TCP连接建立的流程,变化在于在建立TCP连接之前先使用CGA扩展头进行验证。第一条消息中客户端发送一个包含空CGA头的数据包表示请求初始化CGA验证过程:第二条消息中的CGA头包含了一个CGA请求选项,请求客户端的CGA参数:客户端在第三条消息中包含其CGA参数以及CGA签名证明地址的真实性,同时发送CGA请求消息向服务器请求CGA参数和签名:第四条消息包含了服务器的CGA参数和CGA签名:客户端在验证了服务器的CGA参数后,通过第五、第六以及第七条消息,按照标准流程和服务器建立TCP连接。客户端处理流程如下:
1)发送内容为空的CGA头:
iiiKANiKAca
监听端口,接收消息2;
根据消息2中的提供CGA请求,发送CGA参数、CGA签名以及CGA请求,处理规则见7.1;
监听端口,接收消息4;
对消息4中服务器提供的CGA参数和CGA签名进行验证,验证规则见7.2。如果验证通过,5)
则转到下一步;否则结束通信;通过TCP三次握手建立TCP连接。6)
服务器处理流程如下:
监听端口,接收消息1;
发送CGA请求:
监听端口,接收消息3
对消息3中客户端提供的CGA参数和CGA签名进行验证,验证规则见7.2。如果验证通过,则转到下一步;否则结束通信:根据消息3中的提供CGA请求,发送CGA参数和CGA签名处理规则见7.1;5)
6)监听端口,通过TCP三次握手建立TCP连接。上述的通信流程描述了通信双方为了使用CGA头而进行的相关处理,除此之外,内容还包括了标准的TCP三次握手过程。
10密码生成地址的产生和配置
10.1密码生成地址的参数格式
每一个CGA都与一个CGA参数相关,格式如图3。0
冲突计数
修正符
网络前缀
修正符(16字节)
网络前缀(8字节)
公钥 (可变长度)
扩展域(可选,可变长度)
图3密码生成地址的参数格式
128比特的无符号整数,可以是任何值。用来在CGA生成的时候执行哈希的扩展和通过给地址增加随机性来增强隐私性。64比特的网络前缀。
YDB041-2009
冲突计数
扩展域
8比特的无符号整数,取值只能为0、1或2。在CGA生成过程中,相同地址检测(见IETFRFC3971)检测出冲突的时候,为了解决这个冲突,冲突计数值会增加。长度可变的字段,包含地址拥有者的公钥。可选且长度可变的字段,在IETFRFC3972中没有使用。在未来的版本中可能会用该字段作为CGA参数数据结构的扩展数据条目。任何不可识别的扩展域数据条目应被忽略。
10.2参数和地址的生成
CGA和相关参数应该由如下方法生成:将修正符的值设置为128比特随机或伪随机数。1
将修正符、9个值为0的字节(网络前缀和冲突计数值都设为0)、公钥、任何可选扩展域从2)
左到右串接起来。对串接起来的值执行SHA-1运算,最左边的112比特作为Hash2的值。将Hash2的前16*Sec(安全参数)比特与0比较,如果全为0(或者Sec=0)继续下一步,3)
否则将修正符增加1,返回第2步。将8比特的冲突计数设为0。
将修正符的终值,网络前缀,冲突计数,公钥和任何可选扩展域从左到右串接,用SHA-1算5)
法计算这一比特串。将结果的前64比特作为Hash1的值。Hash1的值作为接口标识符,并将前3比特设为Sec的值,设置6,7比特为0。6)
64比特的网络前缀和64比特的接口标识符连接成128比特的IPv6地址。如果需要的话,执行相同地址检测。如果检测出地址冲突,则将冲突计数加1返回第5步。8)
当冲突计数为3时,停止检测并报告错误。从左到右将修正符的终值,网络前缀,冲突计数的终值,编码的公钥,任何可选的扩展域串起9
来生成CGA参数数据结构。免费标准bzxz.net
地址生成算法的输出为一个新的CGA和CGA参数数据结构。10.3配置节点的密码生成地址
如10.2所述的CGA和CGA参数生成方法可以与DHCPv6服务器结合,由动态主机配置协议DHCP服务器接收客户端(网络节点)发送的配置信息,DHCP服务器根据接收到的客户端配置,并结合自身的网络配置,为客户端生成CGA地址,再将生成的CGA地址下发给客户端。结合方式有以下三种:
1)网络节点向其发现的有效DHCP服务器发送“请求消息”,该消息中包含公钥和其他由节点指定的CGA相关要求参数:接收到该“请求消息”的DHCP服务器根据请求消息设置相CGA相关设置的CGA相关配置,为节点生成CGA和CGA参数,并在“应答消息”中返回给该网络节点。
2)网络节点向本地链路多播地址发送请求CGA相关配置信息的“要求消息”,收到该消息的DHCP服务器在“应答消息”中包含CGA相关配置信息:网络节点收到后:根据本地的公钥/私钥对,结合DHCP服务器应答的CGA相关配置信息,计算出CGA,再发送DHCP“请求消息”,请求确认该CGA是否符合网络配置的要求:如果不符合,则在“应答消息”中包含CGA相关配置信息,要求网络节点再次计算CGA。网络节点根据本地的公钥/私钥对,产生CGA(子网前缀通过路由广播消息获得),向本地链3
路多播地址发送DHCP“要求消息”,其中包含CGA,并指明请求DHCP服务器确认该CGA是否符合网络配置的要求:如果不符合,则在“应答消息”中包含CGA相关配置信息,要求网络节点再次计算CGA。
采取上述结合方式生成CGA时,DHCPv6协议需要进行一定的扩展,如在“请求消息”的定义中,添加CGA选项的具体规定等。
小提示:此标准内容仅展示完整标准里的部分截取内容,若需要完整标准请到上方自行免费下载完整标准文档。