Re: [kitten] Kerberos extra round trips I-D revised

Nico Williams <nico@cryptonector.com> Tue, 11 November 2014 18:54 UTC

Return-Path: <nico@cryptonector.com>
X-Original-To: kitten@ietfa.amsl.com
Delivered-To: kitten@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 912121A1AFD for <kitten@ietfa.amsl.com>; Tue, 11 Nov 2014 10:54:36 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.666
X-Spam-Level:
X-Spam-Status: No, score=-1.666 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, IP_NOT_FRIENDLY=0.334, RCVD_IN_DNSWL_NONE=-0.0001] autolearn=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 1aAVslFAIfGL for <kitten@ietfa.amsl.com>; Tue, 11 Nov 2014 10:54:35 -0800 (PST)
Received: from homiemail-a77.g.dreamhost.com (sub4.mail.dreamhost.com [69.163.253.135]) by ietfa.amsl.com (Postfix) with ESMTP id 949621A1AE0 for <kitten@ietf.org>; Tue, 11 Nov 2014 10:54:27 -0800 (PST)
Received: from homiemail-a77.g.dreamhost.com (localhost [127.0.0.1]) by homiemail-a77.g.dreamhost.com (Postfix) with ESMTP id 513A894075; Tue, 11 Nov 2014 10:54:27 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=cryptonector.com; h=date :from:to:cc:subject:message-id:references:mime-version :content-type:in-reply-to; s=cryptonector.com; bh=FCMcXDEQ+SDN8p wfVpPjwzOUF0M=; b=Ke7AjMDg9lkXvptKwyIdvURDS7Ftlir1qf9F11XVD6RsL9 3Cu80UbUieyKOZ6N6nxA3Skt1xRlJvYZBAP24h3FmJnbKw7UqwA3ypZLc4g1wQky srWmsEC7H0b3PLQ8JCcffEfqXb6DLxTX3s6ZKhjMTgw8Nn9vKMKZ1rjxu3q2E=
Received: from localhost (108-207-244-174.lightspeed.austtx.sbcglobal.net [108.207.244.174]) (Authenticated sender: nico@cryptonector.com) by homiemail-a77.g.dreamhost.com (Postfix) with ESMTPA id B65099406B; Tue, 11 Nov 2014 10:54:26 -0800 (PST)
Date: Tue, 11 Nov 2014 12:54:25 -0600
From: Nico Williams <nico@cryptonector.com>
To: Greg Hudson <ghudson@mit.edu>
Message-ID: <20141111185423.GM3412@localhost>
References: <20141027071704.GC14215@localhost> <alpine.GSO.1.10.1411071543280.27826@multics.mit.edu> <54624E87.8010007@mit.edu>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <54624E87.8010007@mit.edu>
User-Agent: Mutt/1.5.21 (2010-09-15)
Archived-At: http://mailarchive.ietf.org/arch/msg/kitten/xFi5-uCIrQZ9FQUqdBoZMGSeTWw
Cc: kitten@ietf.org
Subject: Re: [kitten] Kerberos extra round trips I-D revised
X-BeenThere: kitten@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: Common Authentication Technologies - Next Generation <kitten.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/kitten>, <mailto:kitten-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/kitten/>
List-Post: <mailto:kitten@ietf.org>
List-Help: <mailto:kitten-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/kitten>, <mailto:kitten-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 11 Nov 2014 18:54:36 -0000

On Tue, Nov 11, 2014 at 12:59:35PM -0500, Greg Hudson wrote:
> I support adopting this document.  My comments so far:

Thanks.

> * Encrypting in the null enctype/key isn't a formalized RFC 3961
> concept.  The RFC will need to explicitly say what goes into the
> EncryptedData message when encryption isn't possible.

I thought we ended up saying that the null enctype does have a purpose
after all (was it about KRB-CRED?  I forget).  But yes.

> * In section 2, there are two bullet points about whether the initiator
> should attempt to recover, the first for receiving any KRB-ERROR2 and
> the second for receiving a KRB-ERROR2 with the ke-continue-needed flag
> set.  In the first bullet point, what does "attempt to recover" imply?

That's covered in section 2.1.

> If the acceptor sent a KRB-ERROR2 without ke-continue-needed, it's not
> expecting another message, is it?

Ah, this is an editing error.  Thanks for catching this.

> * Do we really need to address the case where the acceptor can decrypt
> the Ticket but not the Authenticator?  If not, we can get rid of
> KrbErrorEncPartFlags and the receiver can easily deduce the key from
> the EncryptedData and whether it sent an authenticator subkey.

I was wondering about this.  If the acceptor can decrypt the Ticket but
not the Authenticator then there was a transmission error, and the
question is whether it's worth trying to recover from that.  My guess
now is "no".

> * My preference is not to specify KRB-ERROR2 messages going from the
> initiator to the acceptor under any circumstances.  It seems like a fair
> amount of implementation complexity for minimal gain; at best the
> acceptor is going to write something about the error to a log file.

What I'd like to say is that initiator _apps_ shouldn't bother sending
error tokens to acceptors.  Allowing the initiator _mech_ to produce
them (and the acceptor _mech_ to consume them) is an exercise in
completeness that would enable role reversal applications.

Perhaps we shouldn't care about role reversal applications (since we
have none).  But since this has been needed in the past (ISMS or some
such), I'd want a bit more discussion before discounting them
altogether.

> * Section 2 says that an initiator MAY produce a token (softened from a
> MUST in earlier draft versions), but section 2.2 says it MUST produce a
> KRB-ERROR2 if it rejects an additional round trip.  Which is it?  I
> assume there was some concern about early abandonment of the GSSAPI
> exchange by one of the parties.  In my experience, this isn't a serious
> problem.  The MIT krb5 GSS acceptor was doing early abandonment for many
> releases due to a bug, and while it could obscure error conditions by
> failing to send an error packet to the client, it didn't seem to break
> any application protocols.

Yeah, it's about abandonment.  There may well be no value to it because
apps always have to deal with timeouts anyways.  Not forcing a peer to
timeout is a matter of courtesy, but if the peer minimizes state kept
(as it should), it may not matter much.

> * If the initiator is going to send KRB-ERROR2 messages to the acceptor,
> we need to specify what key it uses for encryption.  (The simplest
> answer is to use the same key as the acceptor did.)

Right (or more likely a dk in the same key hierarchy).

> * I don't see any reference to key usages in the draft.  If the
> initiator sends KRB-ERROR2 messages to the acceptor using the same key
> as the acceptor used, it should use a different key usage to prevent
> reflection attacks.

Yep, this is missing.

> * How useful is service name redirection if it can only work when the
> acceptor was able to decrypt the ticket?  (The draft bars service name
> redirection via unencrypted KRB-ERROR2 for fairly obvious security reasons.)

I thought I ripped that out completely in the latest version.  Did I
leave stray text about it?

> * Does it make any sense to put a fast-reauth ticket in a KRB-ERROR2?
> Wouldn't we want it in an AP-REP instead?  (That would render it out of
> scope for this draft.)

Two reasons: a) the server might still want rcache avoidance, b) I
wanted to avoid having to extend AP-REP (though I'd be happy to extend
it anyways).  (b) is lame; (a) is not.

> * In the U2U flow, is there a reason not to use zero-length octet
> strings?

Not sure.

> * Is case 2 of the U2U flow useful?  If not, it presents additional
> attack surface on the initiator implementation for no good reason.

I think it might be.  Think of authz-data in the u2u TGT affecting what
appears in the service ticket in the end.

> * I don't yet have a strong opinion on whether to add a
> GSS_EXTS_FINISHED binding.  There might be a reason for it, but if we
> can't think of one then I would prefer to avoid the extra complexity.

It's that or authz-data.

> * Do we need new redir-srealm/redir-sname fields for redirection or
> could we just use srealm/sname?  Section 5 says that srealm/sname must
> mirror those in the Ticket, but I don't see the point of that
> requirement; an attacker can't replay a KRB-ERROR2 for a different
> ticket because the key won't match.

Again, I thought I'd ripped that out.

> * Is it right to specify new ASN.1 type definitions to be added to the
> RFC 4120 ASN.1 module, or should we create a new module with its own OID
> and import declarations?

Either is fine with me.

> * Defining KrbErrorEncPartFlags as KerberosFlags seems like a bad fit;
> it is conceptually an enumeration, not a bitmask.

Sure.  I was following tradition :)

> I also have several thoughts about replay cache avoidance, but will put
> those in a separate message.

OK.  Thanks!

Nico
--