Re: [kitten] Kerberos preauth negotiation techniques

Nico Williams <nico@cryptonector.com> Mon, 23 February 2015 21:12 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 C179D1A6F03 for <kitten@ietfa.amsl.com>; Mon, 23 Feb 2015 13:12:13 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.044
X-Spam-Level:
X-Spam-Status: No, score=-1.044 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FM_FORGED_GMAIL=0.622, 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 Q6YNuoSyKg65 for <kitten@ietfa.amsl.com>; Mon, 23 Feb 2015 13:12:12 -0800 (PST)
Received: from homiemail-a107.g.dreamhost.com (sub4.mail.dreamhost.com [69.163.253.135]) by ietfa.amsl.com (Postfix) with ESMTP id B8C921A6F01 for <kitten@ietf.org>; Mon, 23 Feb 2015 13:12:12 -0800 (PST)
Received: from homiemail-a107.g.dreamhost.com (localhost [127.0.0.1]) by homiemail-a107.g.dreamhost.com (Postfix) with ESMTP id 888102004F4DE for <kitten@ietf.org>; Mon, 23 Feb 2015 13:12:12 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=cryptonector.com; h= mime-version:in-reply-to:references:date:message-id:subject:from :to:cc:content-type; s=cryptonector.com; bh=ZJfcZwqr3EvXHDdE5HpP kBH/gsI=; b=r7jMhrbFkQMPiu5iGo2MZgEXFGpmxNGSEM7BB64yjMXCb8WsLTYA XW9OCKjYP9YmTraveNMm52Se2LcjuFj+/CZZTiJxR3HBislK/Uc+SHqxndT+sPMs PYcC6BW7fvjweHmLCgyspYCvvrhtHntm9oyAyBl6+qS4ZYmD7iSNOM0=
Received: from mail-ig0-f181.google.com (mail-ig0-f181.google.com [209.85.213.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: nico@cryptonector.com) by homiemail-a107.g.dreamhost.com (Postfix) with ESMTPSA id 7BD872004F4DC for <kitten@ietf.org>; Mon, 23 Feb 2015 13:12:12 -0800 (PST)
Received: by mail-ig0-f181.google.com with SMTP id hn18so21787724igb.2 for <kitten@ietf.org>; Mon, 23 Feb 2015 13:12:12 -0800 (PST)
MIME-Version: 1.0
X-Received: by 10.50.43.168 with SMTP id x8mr7735729igl.28.1424725932042; Mon, 23 Feb 2015 13:12:12 -0800 (PST)
Received: by 10.64.130.66 with HTTP; Mon, 23 Feb 2015 13:12:11 -0800 (PST)
In-Reply-To: <1424722422.2604.77.camel@redhat.com>
References: <x7da90k47ox.fsf@equal-rites.mit.edu> <1424189675.2645.23.camel@redhat.com> <54E4F31D.5080103@mit.edu> <20150218204339.GR5246@localhost> <1424722422.2604.77.camel@redhat.com>
Date: Mon, 23 Feb 2015 15:12:11 -0600
Message-ID: <CAK3OfOjMWrCgS7aSN4-dVv-cBdo2YS+NL-Vs66utBX+KMKoZhg@mail.gmail.com>
From: Nico Williams <nico@cryptonector.com>
To: Nathaniel McCallum <npmccallum@redhat.com>
Content-Type: text/plain; charset="UTF-8"
Archived-At: <http://mailarchive.ietf.org/arch/msg/kitten/y8OxYgys2mJRaUQlWGMa2hTKWtw>
Cc: "kitten@ietf.org" <kitten@ietf.org>
Subject: Re: [kitten] Kerberos preauth negotiation techniques
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: Mon, 23 Feb 2015 21:12:13 -0000

On Mon, Feb 23, 2015 at 2:13 PM, Nathaniel McCallum
<npmccallum@redhat.com> wrote:
> On the call last week there was a general consensus to move forward
> with SPAKE2 and not make PAKEs negotiable. SPAKE2 has all the
> properties we care about. It:

Sure, a PAKE per-pre-auth.  If we want new PAKEs, we clone this
pre-auth, change the PAKE, give it a new number.

> We also had a general consensus that there is no need to negotiate
> hashes. There are three hash uses:
> 1. Transcript for message integrity
> 2. Key derivation
> 3. Key validation
>
> For #1, we can just use the checksum method implicit in the enctype.
>
> For #2, we can just use a KDF.
>
> For #3, Greg had an idea, but I've since forgotten it and can't find
> it in my email. Greg, perhaps you can remind me?

Just use the enctype's authenticated encryption, natch.

> Enctype negotiation is implicit from the existing exchange. This
> leaves only groups and second factors.

Making second factors negotiable is going to make the UI very fun :/
But it probably has to get done anyways.

> We also discussed making group negotiation have a note in the RFC
> about being careful regarding the number of groups exposed. I suspect
> sensible defaults will be:
> * P-256
> * P-384
> * P-521
> * Curve25519

Sure.

> OpenSSL does not support Curve25519 (yet) so it won't be offered in my
> implementation.

OpenSSL needs to add Curve25519 support ASAP (particularly now that
there is consensus in CFRG for Curve25519 as an RTI at the 128-bit
security level), but is a subject for a different list.

> One reason I don't think it will be a problem is that no other data is

What won't be a problem?

> sent in the group negotiation packet from the client to the server.
> The response from the server will contain just one group OID along
> with the public key and the 2FA negotiation parameters.
>
> I suggest an empirical approach here. I'll be developing the RFC in
> parallel with the application itself. If we see this becoming a
> problem, we can address it at that time. I am open even to bit set
> negotiation if space becomes a serious concern. I would simply like to
> avoid a registry if it is not needed.

Eh, if I understood correctly you're saying that the client shouldn't
send a list/set of groups.

Either the client does send a set/list of groups or the server must
return a PAKE message for each group.  The latter is not going to work
well for every PAKE.  Having the server choose one without any idea of
what the client supports just won't do.

Just have the client send a set (SEQUENCE) of OIDs.  If you really
hate the wire bloat, then send both, an enum bit string and a sequence
of OIDs, with the latter absent when only registered groups are
proposed and the former absent when no registered groups are proposed.

Nico
--