📄 rfc2412.txt
字号:
E{x}Ki意味着使用发起者的公开密鈅来加密x,加密使用与验证方法组合在一起
算法,一般为RSA算法.
S{x}Ki意味着使用发起者的签名密鈅来对x签名.签名一般使用与验证组合在一
起的算法.一般为RSA算法,或是DSS算法.
prf(a,b)表示对数据b使用伪随机函数a.可以认为a作为一个键或一个值刻划了函
数prf;在后面的情形中它是一类函数的索引.其中每个函数都计算输入的散列或是单向
混合输出.
Prf(0,b)表示对数据b使用单向函数.
类似早先商讨过的表示一个单独算法的符号,例如,MD5,可以有两种用途.一.一个
键入式的MD5变换将用到一个密鈅"a",二.在单向函数中变换将有一个固定的密鈅
值"0".
术语"变换"是指在相应的RFC中定义的函数,其中会提到"变换"是为了IPSEC中的
AH与ESP定义的(请参阅RFC2401.)
2.3 交换密鈅消息概论
密鈅交换处理是一种确保双方公共密鈅信息状态安全的机制.相关的信息是一个密
鈅名,密鈅素材,双方的身份验证,并且有三种用于验证的算法:加密(用来保护双方的身
份),散列(一个用来保护消息及用来验证的消息域的伪随机函数),与验证(用于相互验证
的基本算法).在附录B中包含关于编码及`这些选项的含义.
主交换模式有五种选择: 无状态cookie交换, 优秀的密鈅素材转寄安全性.身份的
保密, 优秀的保密身份转寄的安全性.使用数字签名(不可否认的),双方可以使用上述性
质的任意组合.
处理的大致过程是这样的:首先交换的发起者在它的第一消息中声明它所想发出的
信息,响应者在应答中提供它所想提供的信息.交换过程一直持续下去直到双方的需求都
得到了满足为止.
选择在每个消息中包含多少信息取决于选择了那个选项.例如: 如果不选无状态
cookie交换,不选身份的保密与优秀的保密身份转寄的安全性,选择了数字签名,这样的话
完成交换只需要三个消息.
附加其它性质会增加决定密鈅素材的回合数.
ISAKMP提供了域来指定使用AH与ESP协议的安全联合的参数.这些安全联合有
效载荷类型将由OAKLEY密鈅素材和算法来加密.但本文档不讨论如何这些内容.
2.3.1 基本的密鈅交换消息域.
在一个OAKLEY密鈅交换消息中由12个域.并不是所有的域都与每个消息相关.
如果一个域是不相关的可以置空值或是不出现(非有效载荷).
CKY-I 发起者 cookie.
CKY-R 响应者 cookie.
MSGTYPE 用于密鈅交换, 可以是 ISA_KE&AUTH_REQ 或
ISA_KE&AUTH_REP; 对于每个新群组定义,
将是 ISA_NEW_GROUP_REQ 或 ISA_NEW_GROUP_REP
GRP 用于交换的 Diffie-Hellman群名.
g^x (or g^y) 表示群生成元幂的可变长度整数.
EHAO or EHAS 加密,散列,验证函数分别被选择和提供.
IDP 发起者是否使用g^xy加密随后信息(优秀的身份转寄安全性)
ID(I) 发起者的身份.
ID(R) 响应者的身份.
Ni 由发起者提供的随机数
Nr 由响应者提供的随机数..
Cookies的这种结构导致执行并不是独立的.Phil Karn建议将它作为一个单向函数
对一个周期性更换的种子数值作用的结果,本地和远程的IP地址,本地与远程的UDP端
口.这样的话,cookies可以保持无状态与周期性的更换.但在OAKLEY中要注意,周期性
的更换种子数值也会导致由其生成的KEYID的也会变化,迫使消除与它有关的任何状态
信息.
为了支持预分配密鈅`,我们建议在cookie中为永久密鈅保留一些空间.上述的编
码依赖于本地实现. .
凡是使用了OAKLEYS的加密函数必须时一种可以保证消息数据安全性与完整性的
加密变换.仅仅在加密块链接模式下使用DES算法是不允许的.可选的与必选的加密变
换将包含任何满足这个标准及在RFC240(ESP)中定义的安全性能.
使用了OAKLEY的单向(散列)函数必须是一种可以用来做密鈅散列或是无密鈅的
加密变换.可选的与必选的加密变换将包含任何满足RFC2406(AH)中定义的安全性能.
在实时环境下,其将是一个关于匹配交换中所用的GRP的强度的平均信息量的可
变精度整数.如果没有指出GRP,那么随机数长度最少为90比特,用于随机素材的伪随机
数生成器应该从长度至少90比特的初始化加密数据开始.参阅RFC 1750
2.3.1.1 关于指数的建议
在理想情况下,用于密鈅交换的熵的指数至少要为180比特.这样可以保证在两次
交换中密鈅素材的绝对独立性(注意如果只有一方选择了随机指数的情况).在实际中,
实现者也许希望多个密鈅交换基于单独的一个关于180比特的熵值 ,与单向散列函数
来保证如果一个密鈅泄漏不会危及到其它密鈅.既然这样,将随机数与cookie的基值与
指数的基值分开,并且用180比特的熵来尽可能快的替换基值将是一个有效的方法.
值0到P-1不能用来当作指数值,实现者要注意检查这些值,并且拒绝接受远程另外
一方发送来的值1到P-1.(P是用来定义一个有限群的素数)
2.3.2 映向ISAKMP消息结构的映射.
所有的OAKLEY消息域都对应于ISAKMP消息有效载荷或有效载荷的组件.ISAKMP中
相关的有效载荷域,是SA有效载荷,AUTH有效载荷,授权有效载荷,密鈅交换有效载荷.
当时,建立ISAKMP协议的框架是一项正在进行的工作,精确的将Oakley消息域映射到
ISAKMP有效载荷也是一项正在进行的工作.(从相关文档中可以获知).
在使用OAKLEY时,OAKMP的一些头部数据块与有效载荷域将为常数值.使用中的精
确值将在解决方案文档中附有的解释文档中发布.
以下将指出每个OAKLEY域将出现在那些ISAKMP消息结构中.解决方案对这种映射
有最终解释权.
CKY-I ISAKMP header
CKY-R ISAKMP header
MSGTYPE Message Type in ISAKMP header
GRP SA payload, Proposal section
g^x (or g^y) Key Exchange Payload, encoded as a variable
precision integer
EHAO and EHAS SA payload, Proposal section
IDP A bit in the RESERVED field in the AUTH header
ID(I) AUTH payload, Identity field
ID(R) AUTH payload, Identity field
Ni AUTH payload, Nonce Field
Nr AUTH payload, Nonce Field
S{...}Kx AUTH payload, Data Field
prf{K,...} AUTH payload, Data Field
2.4 密鈅交换协议.
在OAKLEY密鈅交换中,精确的消息及数字交换取决于发起者与响应者使用了那些
选项.根据这些选项,一次密鈅交换可以用三个或更多的消息来完成.
密鈅决定协议的三个组件是.
1. cookie交换(可选,无状态)
2. Diffe-Hellman 半密鈅交换.(可选,但为转寄安全的基本组成部分)
3. 验证(选项:ID的安全性,使用PFS的ID的安全性,不可否认)
发起者可以提供尽可能少的信息,例如一个空交换,而不附带任何附加信息.另一方
面,发起者也可以在开始时就提供响应者用于验证交换要求及快速完成密鈅决定所需
要的所有信息,前提条件时响应者也同意接受这种方法.如果响应者不接受这种方法,
响应者可以只回复最小数量的信息.(最小限度,比如一个cookie)
验证的方法可以是数字签名,公开密鈅,或一个带外对称密鈅.以上三种不同的方
法导致消息的微小变化,这些微小变化在本节的例子里有详细描述.
如果协议没有按照正常方式中断,发起者有责任重发数据.因此在协议的连续通
信过程中,响应者必须避免抛弃应答信息直到得到发起者的认可.
本节的剩余部分是一些例子,用来讲述怎样使用OAKLEY选项.
2.4.1 一个攻击例子.
以下的例子是描述两方之间怎么样使用三个消息来完成一个密鈅交换.身份在这
里不是保密的,生成密鈅素材使用PFS来保护.
通过使用数字签名,双方将产生一个通信校验,这个校验结果是可以被记录的,稍
后还可以提供给第三方.
由群指数所蕴涵的密鈅素材对完成交换不是必需的.如果有必要推迟计算,执行者
可以保存"x"与"g^y"值并且标注密鈅素材为"不可计算的".稍后可以依据以上信息
继续计算.
Initiator Responder
--------- ---------
-> CKY-I, 0, OK_KEYX, GRP, g^x, EHAO, NIDP, ->
ID(I), ID(R), Ni, 0,
S{ID(I) | ID(R) | Ni | 0 | GRP | g^x | 0 | EHAO}Ki
<- CKY-R, CKY-I, OK_KEYX, GRP, g^y, EHAS, NIDP,
ID(R), ID(I), Nr, Ni,
S{ID(R) | ID(I) | Nr | Ni | GRP | g^y | g^x | EHAS}Kr <-
-> CKY-I, CKY-R, OK_KEYX, GRP, g^x, EHAS, NIDP, ->
ID(I), ID(R), Ni, Nr,
S{ID(I) | ID(R) | Ni | Nr | GRP | g^x | g^y | EHAS}Ki
NB'NIDP"意味着PFS用来隐藏身份的选项是无效的.因此,在使用一个基于g^xy的
密鈅时,身份是是不用加密的.
NB域在本文档中是用逗号分割开的;在真正的协议消息编码过程中是连接在一起
的,该编码过程在ISAKMP/Oakley解决方案中定义及描述.
例子中的交换结果是一个密鈅的 KEYID=CKY-I|CKY-R与 值
sKEYID=prf(NI|NR,g^xy|CKY-I|CKY-R).
这次交换的大致处理过程如下:
发起者
发起者生成一个唯一的cookie,并将它与预期的响应者的IP绑定,并且它将选取
状态信息如下:GRP(群组标识符),一个伪随机选择的指数x,g^x,EHAO表,随机
数,身份.在EHAO表中,首次的验证选择时一个支持数字签名的算法.并且用来验证
身份 随机数,及群的身份.发起者进一步指出该密鈅在无验证的初始化状态中,并
且为可能存在的重发与请求终止设置计时器.
当想响应者收到这个消息.后,他可以选择忽略所有的信息,仅仅将它视为一个对
cookie的请求,创建无状态.如果CKI-I并没有被IP头中的源地址使用,响应者生成一
唯一的cookie,CKY-R.下一步就依赖于响应者的参数选择.最小的请求响应是将第一
个cookie域设置为零,并且CKY-Y填在第二个域.为了举例,我们必须假定响应者具有
攻击性(另一种情况见第六节),并且接受如下设定:
首次验证选择(必须使用数字签名方法来验证初始化消息),
对于发起者与响应者的身份缺乏足够的的转寄安全保护.
在本例中响应者决定接受所有发起者提供的信息.并验证消息中的签名,并将其
与(CKY-I,CKY-R)对及下列状态信息绑定:
消息的网络源地址与目标地址
无验证的密鈅状态.
提供验证的首次算法.
群组身份,本群组中的一个指数值'y',及消息中的g^x值.
随机值Ni与一个伪随机选择值Nr.
为可能的不正常状态设置的计时器.
响应者通过回应消息计算g^y值,并同时使用私有密鈅ID(R)标记身份与随机数.
并将消息发送给发起者.在所有的交换中,每一方将确信不接受1与g^(p-1)做为一个指
数.
本例中,响应者暗中接受的EHAO表验证类中的首次算法,这是因为响应者无法在
没有接收验证签名的算法的情况下确认发起者的数字签名.响应者的EHAS表也会反映
出他接受的信息.
发起者接受到应答信息并且确认CKY-I是一个有效的网络地址与导入信息的联合.
将CKY-R值加入到(CKY-I,网络地址)对的状态中.并且与所有(CKY-I,CKY-R)对的
状态信息绑定.
通过状态信息来确认响应者的数字签名.(如果确认失败,消息被丢弃).
将g^y加入到他的状态信息.
将EHA选择保促到状态信息中.
任意计算(g^y)^x=(g^x)^y(该计算可以延迟到发送应答消息).
发送应答消息,使用公开密鈅ID(I)签名.
标记密鈅身份(CKY-I|CKY-R)作为验证.并且组合应答消息和签名.
当响应者接受发起者的消息,并且同时签名有效,它将标记密鈅为已验证状态.并将
计算g^xy值并且将该值与密鈅身份绑定.
请注意虽然用于身份保护的PFS并未使用,但用于生成密鈅素材的PFS仍然存在,
因为Differ-Hellman的半密鈅g^x与g^y已经交换.
即使响应者只接受部分发起者的信息,发起者仍然认为协议在处理过程中,发起者
将假定没有被响应者接受的域信息也没有被响应者记录.
如果响应者没有接受攻击性的交换,并且为A函数选择其它的一种算法,这时协议
将不再继续使用来自于首次消息的数字签名算法或签名值.
2.4.1.1 空值的域.
如果响应者不接受所有发起者提供的域,它将在响应的消息中对应的域里填入
NULL值.在第六节中有怎么用按从左至右的方式来选择域的指导方针.如果一个域不
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -