>Tero states: > The basic case is where both ends notice this is simultaneous > rekey, and can delay moving of the CHILD_SAs until they know which > one wins. The more complex case happens where there is dropped > packets and one end does not detect simultaneous rekey until it has > already finished its rekey and moved CHILD_SAs. As the basic case > can be processed in similar way as the more complex case, this > example here only covers the more complex case. > > In this case host A and B has IKE SA up and running and both ends > decide to rekey it: > > Host A Host B > ----------- ----------- > send req1: ... Ni1 ... --> > <-- send req2: ... Ni2 ... > --> recv req1 > > Now if the req2 is dropped for some reason, the Host A does not > know there is simultaneous rekey, but host B will know it when it > receives the req1. It will process the req1, but it cannot yet move > the CHILD_SAs as it does not know the Nr2. It postpones the > CHILD_SA moving until the req2/resp2 rekey finishes. It sends resp1 > back to the Host A to answer req1 IKE SA rekey: > > <-- send resp1: ... Nr1 ... > recv resp1 <-- > > Now the Host A has finished the IKE SA rekey without knowing it was > simultaneous rekey. It will move the CHILD_SAs from the old IKE SA > to new rekeyed IKE SA A. It MUST NOT immediately delete the old IKE > SA, but instead wait for some time to see in case there was > simultaneous rekey ongoing or not. When Host B retransmits its req2 > the Host A will notice that there was simultaneous rekey going on, > and it will send normal reply to that: > I see no reason why Host A MUST NOT immediately delete the old IKE SA. In fact I think is SHOULD immediately delete the old IKE SA. By this I mean it should mark the SA as being deleted, it should send a delete payload, and it should refuse to create any additional SAs. > recv req1 <-- > send resp2: ... Nr2 ... --> Host A should respond with NO_ADDITIONAL SAS in this case because Host A did not detect a simultaneous rekey and should have immediately deleted the original IKE_SA. > --> recv resp2 Host B should receive the NO_ADDITIONAL_SAS notification and it should realize that Host A did not detect the simultaneous rekey. Host B should now move the child SAs from the original IKE SA to the one initiated by Host A. In reality, it's more likely that Host B has already received Host A's delete notification and will ignore the response. > > After sending that reply that also creates the second IKE SA B in > Host A and then Host A can check all the four nonces and see which > of them is lowest, and it will then move all the CHILD_SAs to that > new IKE SA having lowest nonce unless they were already there (i.e. > if the IKE SA A had lowest nonce, Host A has already moved the > CHILD_SAs there, if IKE SA B had lowest nonce, host A needs to move > CHILD_SAs from the IKE SA A to this IKE SA B, and start timer to > delete IKE SA A). Why do you want to mandate all this complication for a case that will occur infrequently? You are impacting every IKE_SA rekey, not just the simultaneous case. I doubt that anybody delays the delete of an IKE_SA on a rekey based on RFC 4306. At the very least I'm sure there are implementations that do not delay the delete. Requiring this delay is a protocol change and one that I do not see the need for.
If Host A deletes the IKE_SA immediately then either Host B will see the delete and be able to infer that there is no simultaneous rekey or Host B may also get a NO_ADDITIONAL SAS notification and be able to infer that there is no simultaneous rekey. > > When Host B receives the resp2 it knows that simultaneous rekey is > finished, and it can check the nonces and move CHILD_SAs from the > original IKE SA to either IKE SA A or B depending which had lowest > nonce. If it was IKE SA A, the host B needs to start timer to > delete IKE SA B. > > Depending who created the winning rekeyed IKE SA decides who is > going to delete the old IKE SA, i.e. the one who created the > winning IKE SA also cleans up the old IKE SA. > > Note, that Host B processing is identical to the basic case where > host notices during processing that there is simultaneous rekey > ongoing. > > In case the Host A didn't wait for long enough before start > deleting old IKE SA there can be case where host B is still trying > to retransmit its req2 in the old IKE SA when it receives the > delete to the old IKE SA. In that case it knows that Host A has NOT > received any of its requests, thus is unaware that there is > simultaneous rekey ongoing, thus it can safely stop retrasnmitting > req2, and allow old IKE SA to be deleted, and move all CHILD_SAs to > the IKE SA A created by Host A. And it can do the same when it immediately gets a delete for the original IKE SA or a NO_ADDITIONAL_SAS notification. If you want to defer the delete of the IKE SA that's fine with me. I just don't want to have to do that. I see no value in doing it, especially given the text above indicate one has to handle the delete case anyway. Dave Wierbowski
_______________________________________________ IPsec mailing list IPsec@ietf.org https://www.ietf.org/mailman/listinfo/ipsec