Re: [TLS] Consensus call for keys used in handshake and data messages

Dave Garrett <davemgarrett@gmail.com> Tue, 21 June 2016 03:43 UTC

Return-Path: <davemgarrett@gmail.com>
X-Original-To: tls@ietfa.amsl.com
Delivered-To: tls@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id C6DBA12D567 for <tls@ietfa.amsl.com>; Mon, 20 Jun 2016 20:43:46 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.7
X-Spam-Level:
X-Spam-Status: No, score=-2.7 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
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 q2DegU19IwiY for <tls@ietfa.amsl.com>; Mon, 20 Jun 2016 20:43:45 -0700 (PDT)
Received: from mail-yw0-x22e.google.com (mail-yw0-x22e.google.com [IPv6:2607:f8b0:4002:c05::22e]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 53F3912D541 for <tls@ietf.org>; Mon, 20 Jun 2016 20:43:45 -0700 (PDT)
Received: by mail-yw0-x22e.google.com with SMTP id l125so3375580ywb.2 for <tls@ietf.org>; Mon, 20 Jun 2016 20:43:45 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:date:user-agent:cc:references:in-reply-to :mime-version:content-transfer-encoding:message-id; bh=FXErtFttsl/K7KjvGN+kUYSXGk+Sd9xtGXUjtkaPa0w=; b=iBPlaocL8+U8/OW6muyd7ruVg7GSJavW2PlY/s8tRIQI653UmqhDJvvXgqh1351NhP T3Uk0Lk6brV4qV82s0fqSxlqI3ynT1T+kuGuXHUm2F4xR/QgARA3V/oFb2qJp4akle51 wYUlXWbx1/ud01o0gYVSC8/8ZnEbV9yfjIW69Be5MUGvsoqagYvcJVT0q1jBuXPbmgr8 LxnL07ps69ikeXRdOX06um+Me4XcuDmQlT79WOqhkEWEvtWTVawGarfb6zJE6fNTZ+de N5ik/B660o3UGNegsS57+yZN+COddpGgy8D0oc7XzTKi8kTAvkoo61ZsNoqpmLuN491Z FiWg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:user-agent:cc:references :in-reply-to:mime-version:content-transfer-encoding:message-id; bh=FXErtFttsl/K7KjvGN+kUYSXGk+Sd9xtGXUjtkaPa0w=; b=IgeWPZmxCqQ5PtK88xbdzupYwuyF2ZFnvzKPZea6L30fGu43fS9ttUXzK9CdA6QAqc ooMxj6xNADhq9+We5kw9d1X40gfx7leMsNN9DqYgct4IdR0KQJGnwckRuqOH2msVmWaT BuYCziMmHF6Id+jfEC1PzKoc5KoU7//1pDu6mROysq8C7Y8uIIEgXMTfozZPODR6ujxq MI8kVgJfcs2QCpwgQPWTjfGEFP0qUX9ISPeIdyCh1M4y6t1ZmKlIu3GlTDwJj9bxJIFE 4Ljh5a5309CdMM8L+FOBxRloJSaaDHBNmqUzKwPUduEIAYru3EaKqo10I/YmXJQnsMTL 1o6w==
X-Gm-Message-State: ALyK8tIBEK/7p4AI8tZ/vi9V/MqviK1L32rXE/ME9nIs3+AfqSI/V0+p9kwGA82hQKD8sQ==
X-Received: by 10.129.48.147 with SMTP id w141mr10556513yww.266.1466480624419; Mon, 20 Jun 2016 20:43:44 -0700 (PDT)
Received: from dave-laptop.localnet (pool-71-185-27-22.phlapa.fios.verizon.net. [71.185.27.22]) by smtp.gmail.com with ESMTPSA id f66sm16041392ywc.42.2016.06.20.20.43.43 (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 20 Jun 2016 20:43:43 -0700 (PDT)
From: Dave Garrett <davemgarrett@gmail.com>
To: tls@ietf.org
Date: Mon, 20 Jun 2016 23:43:41 -0400
User-Agent: KMail/1.13.5 (Linux/2.6.32-74-generic-pae; KDE/4.4.5; i686; ; )
References: <CAOgPGoDRZdJN7DY10tDoEEidVkxeKabCcW_U3vQqaaH6x162gw@mail.gmail.com> <CADi0yUN=FxZHMUtDke4qdaHuvDM2y0aFVCvVJkkpbzXFS0+LsQ@mail.gmail.com> <CABcZeBOU2a0NER+OQRb4ouhpKkF53ZNyKn5_amAANLrpOBnGWg@mail.gmail.com>
In-Reply-To: <CABcZeBOU2a0NER+OQRb4ouhpKkF53ZNyKn5_amAANLrpOBnGWg@mail.gmail.com>
MIME-Version: 1.0
Content-Type: Text/Plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <201606202343.42464.davemgarrett@gmail.com>
Archived-At: <https://mailarchive.ietf.org/arch/msg/tls/UvjDpKBa1sQbdBsStRt48ijk0x4>
Subject: Re: [TLS] Consensus call for keys used in handshake and data messages
X-BeenThere: tls@ietf.org
X-Mailman-Version: 2.1.17
Precedence: list
List-Id: "This is the mailing list for the Transport Layer Security working group of the IETF." <tls.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/tls>, <mailto:tls-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/tls/>
List-Post: <mailto:tls@ietf.org>
List-Help: <mailto:tls-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/tls>, <mailto:tls-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 21 Jun 2016 03:43:47 -0000

On Monday, June 20, 2016 08:39:11 pm Eric Rescorla wrote:
> Nobody seems super-excited about either Option 1 or Option 2, so it's
> at least worth noting that there's one of the options I claimed was
> rejected earlier, namely separately encrypting the content type in
> roughly the manner suggested by DKG, Ilari, and Kenny. Thanks for
> Doug/Felix for prompting me on this.
> 
> 
> NOTE: I don't promise any of the below is secure, though it probably
> can be made so with enough work. Actually doing so is an exercise
> for the reader.
> 
> 
> The basic idea is as follows:
> 
> 1. In each direction generate a separate "content_type_key"
> 2. Separately encrypt the content type from the rest of the record
>    using the content_type_key.
> 3. On the receiving side, first decrypt the content type and then use
>    that to determine what key to decrypt the record.
> 
> The trivial version of this is just to AEAD encrypt the content type
> separately, but this has unacceptable bandwidth and CPU properties, so
> is probably not viable. However, there are more efficient designs,
> which can get the overhead down to modest levels (<= 1 byte of
> expansion and <=1/16 of a block computation/record).
> 
> The obvious construction is to use the content_type_key to compute a
> per-record masking value (effectively an ad hoc stream cipher) and
> then use that to encrypt the content type (or potentially just a key
> type bit) without integrity (though you might later protect it in the
> additional data block under the main key). This gives you an
> encryption function without expansion. If you have a mask function
> which outputs one block at a time, you can use pieces of the block for
> each record (e.g., for record N you use byte N/16) [1]
> 
> 
> Obvious objections to this:
> 1. This isn't integrity protected. This is probably the most serious
> complaint and has the potential to actually leak information about
> the content type unless you're careful [2], even if you eventually
> integrity protect this information.
> 
> 2. It's odd to just use a piece of the AEAD cipher (the encryption
> function), especially if we ever had a really non-composite cipher.
> This can be alleviated by using HKDF-Expand to produce the stream
> of bits.
> 
> 3. Maybe it doesn't get the whole job done, especially wrt the fact
> that we're not rekeying the app data after client auth.
> 
> 4. It's gross. Yes, yes it is.
> 
> 
> I'm not really in love with this idea, but I did want people to know
> that maybe we don't *have* to choose between option 1 and option 2
> in case that changes people's opinions.

All this complexity for encrypting a single bit seems like way too much of a risk.

An idea for an option 4: Keep typing and keying as it currently is (as of draft 13), but mandate a KeyUpdate immediately following (and/or before) non-application traffic. We already have a mechanism to use different keys in series, which sounds like it might be simpler than trying to figure out a good way to do so in parallel. Is this a viable thought to pursue, or does this still not help enough with our key separation worries? An additional thought might be adding a random to KeyUpdate to make the new key not based entirely on the old entropy.


Dave