⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc2409.txt

📁 很多RFC的中文文档
💻 TXT
📖 第 1 页 / 共 5 页
字号:
报头的负载长度用于执行加密操作。
   
	对称加密密钥是从解密的当前时间(nonce)中衍生出来的,如下所示。先计算值Ne_i和Ne_r:
  Ne_i = prf(Ni_b, CKY-I)
      Ne_r = prf(Nr_b, CKY-R)

  	接着,通过附录B中描述的方式分别从Ne_i 和Ne_r中得到密钥Ke_i和Ke_r,并用于为协商
的加密算法衍生出对称密钥。如果协商的prf产生的输出的长度大于或等于密码的密钥长度要求,则
Ke_i和Ke_r分别从Ne_i和Ne_r的最高位衍生。如果Ke_i和Ke_r需要的长度超过了prf的输出的
长度,则还需要的比特位通过下列方式得到:不断的将prf输出的结果作为prf的输入,并连接产生
的结果,直到得到需要的长度。例如:如果协商的加密算法需要320比特的密钥,而prf的输出只有
128比特时,Ke_i就是K的最高320比特,其中:
      K = K1 | K2 | K3 and
      K1 = prf(Ne_i, 0)
      K2 = prf(Ne_i, K1)
      K3 = prf(Ne_i, K2)

  	为简洁起见,只显示了Ke_i的衍生过程;Ke_r是相同的。在计算K1时值0的长度是单个字节。
注意Ne_i,Ne_r,Ke_i,以及Ke_r都是暂时性的,必须在使用后废弃。
   
	将请求存放在可选的HASH负载和强制的当前时间(nonce)负载的位置中,就没有其它的负载
请求了。跟在加密的当前时间(nonce)之后的所有的负载——无论任何顺序——都必须使用Ke_i
或Ke_r来加密,具体使用哪一个取决于方向。
   
	如果CBC模式用于对称加密,则初始向量(IV)如下所设:当前时间(nonce)后的第一个负
载的IV设为0;后继的使用临时对称加密密钥——Ke_i来加密的负载的IV是先前的负载经加密过
后的密文块。加密过后的负载填充到最接近的块大小。所有的填充字节都是0x00,除了最后一个字
节。最后一个填充字节的内容为使用的填充字节数,包括它自己。注意,这就表示总是有填充的。
5.4	使用共享密钥的第一阶段协商
  
	通过其它带外(out-of-band)机制而衍生出来的密钥也可用于验证交换。这种密钥实际的建立
过程已经超出了本文档的范围。
   
	当进行共享密钥验证时,主模式定义如下:
              发起者                       响应者
             ----------                       -----------
              HDR, SA             -->
                                  <--    HDR, SA
              HDR, KE, Ni         -->
                                  <--    HDR, KE, Nr
              HDR*, IDii, HASH_I  -->
                                  <--    HDR*, IDir, HASH_R
	使用共享密钥的积极模式描述如下:
			发起者						 响应者
           -----------                      -----------
            HDR, SA, KE, Ni, IDii -->
                                  <--    HDR, SA, KE, Nr, IDir, HASH_R
            HDR, HASH_I           -->

  
	当使用共享密钥的主模式时,密钥只能通过双方的IP地址来进行识别,因为HASH_I必须在发
起者处理IDir之前计算出来。积极模式允许使用大量的共享秘密的标识符。另外,积极模式还允许
双方维持多个不同的共享密钥,并能对一次特定的交换标识出正确的密钥。
5.5	第二阶段——快速模式
   
	快速模式本身并不是一次完整的交换(因为它和第一阶段交换相关联),但又作为SA协商过程
(第二阶段)的一部分用来衍生密钥材料和协商非ISAKMP SA的共享策略。快速模式交换的信息
必须由ISAKMP SA来保护——即除了ISAKMP报头外,所有的负载都要加密。在快速模式中, 
HASH负载必须立即跟随在ISAKMP报头后,SA负载必须紧跟在HASH负载之后。HASH用于验
证消息,同时也提供了参与的证据。
	在一个特定的ISAKMP SA中,在ISAKMP报头中的消息ID标识了快速模式正在进行中,而
ISAKMP SA本身由ISAKMP报头中的cookie来标识。因为每个快速模式的实例使用唯一的初始向
量(参看附录B),这就有可能在一个ISAKMP SA中的任一时间内同时有多个快速模式在进行中。
   
	快速模式基本上是一次SA协商和提供重放(replay)保护的当前时间(nonce)交换。当前时间
(nonce)用于产生新的密钥材料并阻止通过重放攻击产生虚假的安全联盟。可选的密钥交换(KE)
负载可以经交换来实现通过快速模式产生附加的Diffie-Hellman交换以及求幂运算。但是必须支持使
用快速模式的密钥交换负载成为可选的。
  
	基本的快速模式(没有KE负载)更新第一阶段的求幂运算所衍生出来的密钥材料。这并不提
供PFS。使用可选的KE负载,执行额外的求幂运算,从而为密钥材料提供了PFS。
   
	在快速模式中SA协商中的身份隐含假定为ISAKMP双方的IP地址,且没有对协议或端口号隐
含施加限制,除非在快速模式中客户标识符是指定的。如果ISAKMP代表另一方作为客户协商代表,
则双方的身份必须传递为IDci和IDcr。本地策略将决定是否接受身份指定的提议(proposal)。如果
客户身份没有被快速模式的响应者所接受(由于策略或其它原因),一个通知消息类型为
INVALID-ID-INFORMATION (18)的通知负载将发出。
   
	在双方之间有多个隧道存在的情况下,客户身份用于标识并指导流量进入对应的隧道,同时也
用于支持不同粒度的唯一和共享SA。
  
	快速模式期间所发出的所有消息逻辑上是相关的并且必须一致。例如,如果KE负载被发出,
描述Diffie-Hellman组的属性(参看6.1节和[Pip97])必须被包括在协商的 SA中的每个提议
(proposal)中的每个转换(transform)之中。同样的,如果使用了客户身份,则它们必须应用到协
商的每个SA中。
   
	快速模式定义如下:
		发起者						 响应者
       -----------                      -----------
        HDR*, HASH(1), SA, Ni
          [, KE ] [, IDci, IDcr ] -->
                                  <--    HDR*, HASH(2), SA, Nr
                                               [, KE ] [, IDci, IDcr ]
        HDR*, HASH(3)             -->

   	其中:
	HASH(1)是从ISAKMP报头中的消息id(M-ID)开始,连接跟在hash后的整个消息的prf
结果,其中包括所有的负载头,但不包括为加密而加入的填充。HASH(2)和HASH(1)一样,除
了发起者的不包含负载头的当前时间(nonce)——Ni被增加在M-ID后,完整的消息之前。HASH
(2)中添加当前时间是为了增加参与证据。用于参与的HASH(3)是用单个字节代表的值0,后
跟串联着的消息id和除去负载头的两个当前时间(nonce)——先是发起者的,后跟响应者的nonce
的prf结果。换句话说,以上的交换的hash是:

   HASH(1) = prf(SKEYID_a, M-ID | SA | Ni [ | KE ] [ | IDci | IDcr )
   HASH(2) = prf(SKEYID_a, M-ID | Ni_b | SA | Nr [ | KE ] [ | IDci | IDcr )
   HASH(3) = prf(SKEYID_a, 0 | M-ID | Ni_b | Nr_b)
	除了HASH,SA,和可选的ID负载以外,快速模式没有对负载顺序的限制。当消息中的负载
顺序不同于示例时,或当有可选的负载,如通知负载被链入到了消息中时,HASH(1)和HASH(2)
可以和上面的示例不同。
   
	如果不需要PFS,并且没有KE负载交换,则新的密钥材料定义为:
   KEYMAT = prf(SKEYID_d, protocol | SPI | Ni_b | Nr_b)。
如果需要PFS且有KE负载交换,则新密钥材料定义为:
       KEYMAT = prf(SKEYID_d, g(qm)^xy | protocol | SPI | Ni_b | Nr_b)
	其中快速模式中的g(qm)^xy是临时Diffie-Hellman交换的共享秘密。
	在任一种情况下,“协议”和“SPI”是从包含协商的转换(transform)负载的ISAKMP提议负
载中得到的。
   
	单个SA协商导致两个安全联盟—— 一个入,一个出。每个SA(一个由发起者选择,另一个
有响应者选择)的不同的SPI保证了每个方向有不同的密钥。SA的目的地选择的SPI用于衍生SA
的KEYMAT。
  
	当需要的密钥材料的长度大于prf所提供的长度时,KEYMAT就不断的通过将prf的结果回填
给自己,并将结果串联起来,直到满足需要的长度。即:
	  KEYMAT = K1 | K2 | K3 | ...
      其中
        K1 = prf(SKEYID_d, [ g(qm)^xy | ] protocol | SPI | Ni_b | Nr_b)
        K2 = prf(SKEYID_d, K1 | [ g(qm)^xy | ] protocol | SPI | Ni_b | Nr_b)
        K3 = prf(SKEYID_d, K2 | [ g(qm)^xy | ] protocol | SPI | Ni_b | Nr_b)
        等等。
   
	这个密钥材料(不论是否满足PFS,和是直接衍生出,还是串联而成)必须在协商的SA中使
用。而由服务来定义怎样从密钥材料中衍生密钥。
   
	在快速模式中使用临时Diffie-Hellman交换的情况下,指数(g(qm)^xy)从当前状态中不可
恢复的删除掉,并且SKEYID_e和SKEYID_a(从第一阶段协商中衍生)继续用于保护和验证ISAKMP 
SA,同时SKEYID_d继续用于衍生密钥。
   
	使用快速模式,多个SA和密钥可以使用一个交换来协商,如下所示:
		发起者						 响应者
       -----------                      -----------
        HDR*, HASH(1), SA0, SA1, Ni,
          [, KE ] [, IDci, IDcr ] -->
                                  <--    HDR*, HASH(2), SA0, SA1, Nr,
                                            [, KE ] [, IDci, IDcr ]
        HDR*, HASH(3)             -->
	密钥材料和在单个SA的情况中一样的衍生出来。在这种情况下(两个SA负载的协商),结果
将是四个安全联盟——每个方向两个。
5.6	新组模式
   
	新组模式不能在ISAKMP SA建立之前使用。新组的描述只能跟在第一阶段协商之后。(虽然它
也不是第二阶段的交换)。
       发起者                        响应者
       -----------                      -----------
        HDR*, HASH(1), SA        -->
                                 <--     HDR*, HASH(2), SA

 
其中HASH(1)是prf的输出,它使用SKEYID_a作为密钥,从ISAKMP报头中的消息ID开
始,串接整个SA的提议(包括头和数据部分)作为数据;HASH(2)也是prf的输出,它使用SKEYID_a
作为密钥,同时从ISAKMP报头中的消息ID开始,串接应答作为数据。换种方式表达,上面交换
的hash为:
      HASH(1) = prf(SKEYID_a, M-ID | SA)
      HASH(2) = prf(SKEYID_a, M-ID | SA)

  
	提议将指定组的特性(参看附录A,“属性分配编号”)。私有组的组描述必须大于或等于2^15。
如果组不能被接受,响应者必须使用消息类型设为ATTRIBUTES-NOT-SUPPORTED (13)的通知负载
来应答。
   
	ISAKMP的实现可以要求私有组在建立的它的SA中设置超时。
   
	组可以在主模式的SA提议中直接协商。对于MODP组来说,要达到这目的,必须将下列值作
为SA的属性来传递(参看附录A):类型、素数和产生器;对于EC2N组来说,需要类型、不可约
分多项式、组产生器1、组产生器2、组曲线A、组曲线B和组顺序。另一方面,使用新组模式,组
的种类(nature)可以隐藏,同时在第一阶段的协商中只有组标识符以明文方式传递。
5.7	ISAKMP信息交换
   
	本协议在可能时保护ISAKMP信息交换。当使用本协议时,一旦ISAKMP安全联盟已经建立(同
时SKEYID_e 和 SKEYID_a也已产生),则ISAKMP信息交换就如下所示:
		发起者						响应者
       -----------                      -----------
        HDR*, HASH(1), N/D      -->

   	
其中N/D要么是ISAKMP通知(notify)负载,要么是ISAKMP删除(delete)负载,同时HASH
(1)是prf的输出,它使用SKEYID_a作为密钥,而本交换唯一的M-ID和串接的整个信息负载(通
知负载或者删除负载)作为数据。换种方式表达,上面交换的hash为:
	HASH(1) = prf(SKEYID_a, M-ID | N/D)

   	和提到过的一样,ISAKMP报头中的消息ID——也用在prf的计算中——是这个交换中唯一的,
不能和产生这次信息交换的第二阶段交换中的另一个消息ID相同。使用SKEYID_e来加密这个消息
时,初始向量的导出在附录B中描述。
   
	如果ISAKMP安全联盟在信息交换时还没有建立,则交换就以明文发送,同时没有HASH负载。
6	Oakley组
  
	使用IKE,进行Diffie-Hellman交换的组是协商而得的。下面定义了四个组,从1到4。这些组
起源于Oakley协议,因此被称为“Oakley组”。组的属性类在附录A中定义。所有大于等于2^15
的值都作为私有组的标识符。对于缺省Oakley组强度的讨论,请参考下面的安全考虑一节。
   
	这些组都是由Richard Schroeppel在Arizona大学中创造出来的。它们的属性在[Orm96]中描述。
6.1	第一个Oakley缺省组
   
Oaklay的实现必须支持有下列素数和产生器的MODP组。这个组分配的id号为1。
素数为: 2^768 - 2 ^704 - 1 + 2^64 * { [2^638 pi] + 149686 }
它的16进制值为:
		 FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1
         29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD
         EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245
     E485B576 625E7EC6 F44C42E9 A63A3620 FFFFFFFF FFFFFFFF
产生器为:2
6.2	第二个Oakley组
	IKE的实现必须支持有下列素数和产生器的MODP组。这个组分配的id号为2。
	素数为2^1024 - 2^960 - 1 + 2^64 * { [2^894 pi] + 129093 }。
	它的16进制值为:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -