I do not believe the algorithm below is consistent with what was said in
section 5.11.4 of RFC 4718.  Section 5.11.4 of RFC 4718 said:

5.11.4.  Simultaneous IKE_SA Rekeying

   Probably the most complex case occurs when both peers try to rekey
   the IKE_SA at the same time.  Basically, the text in Section 2.8
   applies to this case as well; however, it is important to ensure that
   the CHILD_SAs are inherited by the right IKE_SA.

   The case where both endpoints notice the simultaneous rekeying works
   the same way as with CHILD_SAs.  After the CREATE_CHILD_SA exchanges,
   three IKE_SAs exist between A and B; the one containing the lowest
   nonce inherits the CHILD_SAs.


"After the CREATE_CHILD_SA exchanges" implies the exchanges are expected to
complete before the simultaneous rekey is resolved.  The algorithm below
resolves the simultaneous rekey during the CREATE_CHILD_SA exchange and
only allows one rekey to complete.  My concern is that the algorithm below
will be incompatible with anybody that implemented to RFC 4718.

A slight  tangent to this is that the possibility of a simultaneous
reauthentication exists, however, RFC 4306, RFC 4718, and the current bis
draft does not address that scenario.  Given that the a reauthentication is
done by creating a new IKE_SA from scratch I'm not even sure if it is
possible to detect a simultaneous reauthentication of an IKE_SA, but it
would be nice if we could.




                                                                       
             Yoav Nir                                                  
             <y...@checkpoint.                                         
             com>                                                       To
             Sent by:                  "ipsec@ietf.org" <ipsec@ietf.org>
             ipsec-boun...@iet                                          cc
             f.org                                                     
                                                                   Subject
                                       [IPsec] Issue #22: simultaneous IKE
             02/17/2009 05:03          SA rekeys                       
             AM                                                        
                                                                       
                                                                       
                                                                       
                                                                       
                                                                       





Hi all.

Section 2.8.1 of the draft discusses what to do when Child SAs are rekeyed
simultaneously by both peers. Issue #22 asks to clarify the same thing for
simultaneous rekeying of IKE SAs.

We've written a proposed additional section, that should be labeled 2.8.2.
Since this specifies new behavior that was not specified before, we want
your comments before putting this into the draft.

Thanks

Yoav


2.8.2.  Simultaneous IKE SA rekeying

   If the two ends have the same key lifetime policies for IKE SAs, it
   is possible that both will initiate a rekeying at the same time.
   This is unacceptable for IKE SAs, because the IKE SAs own the child
   SAs, and deleting the IKE SA leeds to deletion of all child SAs.  To
   reduce the probability of this happening, the timing of rekeying
   requests SHOULD be jittered (delayed by a random amount of time after
   the need for rekeying is noticed).

   To avoid the case of two IKE SAs created by simultaneous
   CREATE_CHILD_SA exchanges, the IKE SA with the lowest of the
   initiator nonces is silently discarded, and the dependent child SAs
   are transferred only to the IKE SA with the higher of the two
   initiator nonces.  Here "higher" and "lower" refer to octet-by-octet,
   lexicographical comparison of the nonces as large integers.

   The rules are as follows:
   1.  If a rekey request is received before this host has sent a rekey
       request of its own, this host MUST NOT send a rekey request.
       Instead, it MUST reply to the rekey request it has received.
   2.  If a rekey request is received after this host has sent a rekey
       request, then this host MUST compare the two initiator nonce
       values.  If the received nonce is higher than its own, it MUST
       reply to the received request, and SHOULD stop retransmissions of
       its own request.  If the received nonce is lower, it MUST ignore
       the received request.
   3.  If a rekey request is received after this host has sent a rekey
       request, and the peer has already replied, the new received
       request MUST be ignored.

   Following these rules should prevent any case of multiple successful
   rekeys of an IKE SA.  The only case where the 2nd rule would be
   needed is if both requests were sent before either of them was
   processed.  The implementation whose rekey request was answered
   SHOULD delete the old IKE SA soon after.  The other implementation
   SHOULD wait at least one minute before deleting the IKE SA unless its
   peer requests the deletion earlier.

   The following is an explanation of the impact this has on
   implementations.  Assume that hosts A and B have an existing IKE SA,
   and both start rekeying it at the same time:

      Host A                            Host B
      -----------------------------------------------------------------
      send req1: SK{SA, Ni1, [KEi]}
                                  -->
                                   <--  send req2: SK{SA, Ni2, [KEi]}
      recv req2 <--

   At this point, host A knows there is a simultaneous rekeying going
   on.  Assume that Ni2<Ni1.  A knows that req1 is the one to answer, so
   it ignores req2.

                                   -->  recv req1

   Now host B also knows that simultaneous rekeying is going on.  It has
   also figured out that req1 is the one to respond to, so it does so.

                                  <--  send resp1: SK {SA, Nr,[KEr]}
      recv resp1 <--

   Now let's look at the other case, namely where Ni1<Ni2.

      Host A                            Host B
      -----------------------------------------------------------------
      send req1: SK{SA, Ni1, [KEi]}
                                  -->
                                   <--  send req2: SK{SA, Ni2, [KEi]}
      recv req2 <--

   Host A knows that req1 is the one to ignore, because req2 has a
   higher nonce.  It replies to req2, and will not re-transmit req1.

      send resp2: SK {SA, Nr,[KEr]}
                                   -->  recv req1

   Now host B is in exactly the same position as host A was in the first
   example.  It compares nonces, and ignores req1.

                                   -->  recv resp2

   Host B now knows that the rekey is complete.

   To demonstrate the third rule, let's assume again that Ni1<Ni2, but
   that the sequence of messages is as follows:

      Host A                            Host B
      -----------------------------------------------------------------
      send req1: SK{SA, Ni1, [KEi]}
                                  -->
                                   <--  send req2: SK{SA, Ni2, [KEi]}
      recv req2 <--
                                   -->  recv resp2

   Now host B knows nothing about req1, and assumes that its rekey
   request was the only one.  Host A, however, is aware of the
   simultaneous rekey, and has decided that only req2 is to proceed.

                                   -->  recv req1

   Host B now knows about req1, but since it has already received a
   response, it ignores req1.  There is no need to compare nonces.

Email secured by Check Point
_______________________________________________
IPsec mailing list
IPsec@ietf.org
https://www.ietf.org/mailman/listinfo/ipsec

<<inline: graycol.gif>>

<<inline: pic04356.gif>>

<<inline: ecblank.gif>>

_______________________________________________
IPsec mailing list
IPsec@ietf.org
https://www.ietf.org/mailman/listinfo/ipsec

Reply via email to