2.8 密钥更新(rekeying)
IKE、ESP和AH安全联盟(SA)使用的共享密钥应该只在有限的时间里保护优先的数据。这限制了整个SA的生存周期。生存周期超时的SA决不能再使用。如果有需要,可以建立新的SA。重建SA以取代过期的SA被称为密钥更新(rekeying)。
可以在不重新生成IKE SA的前提下更新SA的密钥,这一实现是可选的。一个实现可以拒绝IKE SA中的所有CREATE_CHILD_SA请求。如果是SA已过期或即将到期并使用此处描述的机制更新密钥失败,实现时,必须关闭IKESA和任何相关的子SA,然后可以启动新的SAs。实现时,可能希望支持SA的无缝(in-place)重新加密,这样可以提供更好的性能,并可能减少过渡期间的丢包数量。
要在现有IKE SA中重新生成Child SA,先创建一个新的、等效的SA(参见下面的第2.17节),等新的SA建立之后,删除旧的。注意,在重新生成的Child SA应该与待删除SA有相同的流量选择器和算法。
要重新生成IKE SA,请建立新的等效IKE SA(请参阅下面的2.18节)。新建的IKE SA继承了所有原始的IKE SA的Child SAs。新的IKE SA用来处理维护这些Child SAs所需的所有控制消息。创建新的等效IKE SA后,发起方删除旧的IKE SA,并且必须通过旧IKE SA发送最后一个带有删除载荷的请求报文。
SA应该主动重新加密,即新的SA应该在旧的SA因到期变得无法使用之前建立。新SA建立和旧SA变得不可用之间应该经过足够的时间,以便流量可以切换到新的SA。
IKEv1和IKEv2有这明显的区别。IKEv1 SA的生成周期是协商出来的。在IKEv2中,SA的每一端都负责在SA上执行自己的生命周期策略并在必要时重新生成SA。如果两端的生命周期策略不同,则生命周期较短的一方总是先发起密钥更新。如果SA长时间处于非活动状态,且在没有流量的情况下,端点不会启动SA 端点可以选择在SA超时后关闭SA(而不是重新生成)。如果自上次重新生成SA以来没有流量,也可以关闭SA。
请注意,IKEv2故意允许公共端点之间的不同SA使用相同的流量选择器。其中一个目的是为了支持业务流在不同SAs之间的QoS差异(参见[DIFFSERVFIELD],[DIFFSERVARCH]和4.1节[DIFFTUNNEL])。因此,不同于IKEv1,端点的组合与流量选择器可能无法唯一地标识端点之间的SA,因此IKEv1基于检查重复流量选择器而删除并重新生成SA的方式不应在IKEv2中使用。
在两个端点见存在时间窗口,双发可能无法就SA的状态达成一致,特别是在有丢包的情况下。CREATE_CHILD_SA的响应方必须准备好在某个SA上接收消息,然后将其回应发送给创建请求。这样对发起方而言才不会产生歧义。发起方可能处理响应后在SA立即发送。然而,发起方只有在收到并处理响应方对CREATE_CHILD_SA请求的回应后才能接受新的已创建SA。那么,响应者怎么知道什么时候可以发送新创建的SA?
2.8.3 重新加密IKE SA(rekeying)与重新认证(reauthentication)
重新加密IKE SA和重新认证是IKEv2中的不同概念。 重新加密IKE SA会为IKE SA建立新密钥并重置消息ID计数器,但它不会再次对各方进行身份验证(不涉及AUTH或EAP有效载荷)。
虽然在某些环境中重新加密IKE SA可能很重要,但重新认证(各方仍然可以访问长期凭证的验证)通常更为重要。
IKEv2对重新认证没有任何特殊支持。 重新认证是通过从头开始创建新的IKE SA(使用IKE_SA_INIT / IKE_AUTH交换,没有任何REKEY_SA Notify有效载荷),在新的IKE SA中创建新的子SA(没有REKEY_SA Notify有效负载),最后删除旧的IKE SA( 同时删除旧的子SA)。
这意味着重新认证还为IKE SA和子SA建立了新密钥。 因此,虽然密钥更新可以比重新认证更执行频繁,但是“认证生存期”比“密钥生存期”短是没有意义的。
虽然任何一方(原始IKE SA中的发起者或响应者)都可以创建新的IKE SA,但是在实际应用中使用EAP和/或配置有效载荷意味着重新认证必须由与原始IKE SA发起方相同的一方发起。 在这种情况下,IKEv2当前不允许响应者请求重新认证; 但是,有一些扩展可以添加此功能,如[REAUTH](注:RFC4478)。