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

Reply via email to