[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Retransmitting a command with different tickets



At Thu, 28 Jul 2005 11:43:20 -0400,
Sam Hartman <hartmans-ietf@xxxxxxx> wrote:
> 
> Presumably the correct behavior is to start a new transaction with the
> new ticket?

Yes, I also thought that is the most straight forward.  But, to do so,
the initiator needs to tell the responder that the old transaction was
canceled.
Consider the case that the ticket is not expired at the first
transmission of a command, and the reply was dropped.  In such case,
the responder think the transaction was successful, but the initiator
starts a new transaction.  As a result, the responder will have two
pairs of SAs.

To inform the responder the cancel, we have some candidate way.

1) The initiator makes the responder notice the expire, by sending the
   old ticket.  If it is failed with KRB_AP_ERR_TKT_EXPIRED, the
   initiators start a new transaction.  (This is the second proposal
   of my original mail).
   I pretty like this because this doesn't require the implementation
   to do any extra thing.  This just requires the initiator *not* to
   check the expiration.  But I have a concern that we can't do this
   with the MIT library because of krb5_validate_times() in
   krb5_mk_req_extended().

2) The initiator sends a DELETE command.  (This is precisely not a
   cancel, but trying to delete the discarded SPIs just in case).
   I don't like this because this introduces a new race condition and
   needs some description to avoid it.

3) Prepare a message to cancel a transaction in the KINK spec.  (a new
   message, an ACK message with an error payload, or something).
   (I know the kink-00 had an "unexpected ACK" indicating errors).
   I don't like this because this increases the variation of KINK
   message flows.

-- 
KAMADA Ken'ichi <kamada@xxxxxxxxxx>