Re: [TLS] 0RTT?

Watson Ladd <> Mon, 04 August 2014 02:43 UTC

Return-Path: <>
Received: from localhost ( []) by (Postfix) with ESMTP id 201401B2816 for <>; Sun, 3 Aug 2014 19:43:22 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -1.4
X-Spam-Status: No, score=-1.4 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, J_CHICKENPOX_46=0.6, SPF_PASS=-0.001] autolearn=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id OJUconVrI1QU for <>; Sun, 3 Aug 2014 19:43:20 -0700 (PDT)
Received: from ( [IPv6:2607:f8b0:4002:c07::22a]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 20C5D1B2815 for <>; Sun, 3 Aug 2014 19:43:20 -0700 (PDT)
Received: by with SMTP id 9so3851875ykp.29 for <>; Sun, 03 Aug 2014 19:43:19 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=iepItd4wwIuirDzpDGq+58dURBdv7YVVjo47z9UaqR4=; b=ZlD9KUhClBR9JlRqI9k3EPAP8Sbia5VSSYiCLQphlxDfYgaR8evkyHpXbOKm5UrGN6 m4Y4efCNDaCOAzjfo4UzpwxQW25LKcy5KSR+NVYvcL5AlHYqrRhQogrpo6NaEqYR4ttQ D/p3r+Ua7Z2ctATVUeve9gsvFUGEpFFVy3D2jk9hzwMYRJcz0OUZae3IyIcq70r5WjvK UF8WndHLeWqQ1pJ8vuJxUGhO/rVOIOYAzORAsYI5JuspVycmxzIDmAORY34Hpu4bhtQq AHM08q8p8YI7xcS6el2kA95gFT3CPM0fU/xcDrKYB+7oD466tWGVa69ouYwRDGA/EWzA WGcw==
MIME-Version: 1.0
X-Received: by with SMTP id 42mr34174107yhu.68.1407120199309; Sun, 03 Aug 2014 19:43:19 -0700 (PDT)
Received: by with HTTP; Sun, 3 Aug 2014 19:43:19 -0700 (PDT)
In-Reply-To: <>
References: <> <>
Date: Sun, 3 Aug 2014 19:43:19 -0700
Message-ID: <>
From: Watson Ladd <>
To: Martin Thomson <>
Content-Type: text/plain; charset=UTF-8
Cc: "" <>
Subject: Re: [TLS] 0RTT?
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: "This is the mailing list for the Transport Layer Security working group of the IETF." <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Mon, 04 Aug 2014 02:43:22 -0000

On Sun, Aug 3, 2014 at 1:22 PM, Martin Thomson <> wrote:
> This reads a like a halfway between the proposed 0RTT handshake and
> resumption.  The advantage here I'm guessing being that this is
> resumption, which means that you bind to a specific previous session.
> However, I keep hearing that the main benefit of resumption is that it
> doesn't require a new DH operation.  And yes, this is still important
> even with the higher performance EC provides.

So I was going to make rekey optional. This wasn't very clear in my
original email.

> This relies on an old session, whereas the proposed 0RTT uses a DH
> share that is essentially public, so that it can be cached and shared
> (DNS, signaling).

That has costs with key rotation and administrative version. Maybe
those aren't so bad. But I would like to see resumption be 0RTT also:
right now it is 2RTT in TLS 1.2.

> As far as security goes, I don't see any major issues with this.  The
> initial round of application data is going to be as well protected as
> the previous session was.  As long as you aren't able to choose a
> different cipher suite to what was previously used, and I can't see
> why you would want to even contemplate allowing that.

I don't think you are qualified to say that, and the reasoning is
fallacious. You need to mutter something about PRF distinguishing and
collisions, and ideal functionality and simulation. (In particular if
I didn't mix in the old PMS, there would be an attack)

> Why do you need a new message?  Since you are using DH, you could just
> use the remainder of the 1RTT handshake structure with
> ServerKeyExchange.  You could, I suppose eliminate the authentication
> messages in order to rely on the previous session.
> If the fallback story when the ticket/nonce/share is bad is the
> existing regular handshake, then this is quite close to the proposed
> 0RTT mode.  With a few differences in terms of the first flight keys
> are derived and their lifecycle.

It probably is, but I think I missed the email where that was
discussed. The design space is constrained enough I think we are
converging on a very similar solution.

> On Aug 3, 2014 10:09 AM, "Watson Ladd" <> wrote:
>> Dear all,
>> I think I came up with a decent idea for handling 0RTT handshakes,
>> namely making resumption 0RTT, and doing a side rekeying.
>> To see this work we assume that the usual resumption ticket gets set
>> in the handshake, and determines the PMS. A resumption looks as
>> follows:
>> -The ticket
>> -An anti-replay nonce: BLAH bytes
>> -A refresh key: since we know what the server wants, we can provide a
>> group it supports
>> The PMS that gets used is PMS_interim= HMAC(old_PMS, nonce || refresh
>> key): data encrypted as usual under the old ciphersuite follows. (Note
>> that we may have to include the entire Client Hello hashed: this is
>> probably easier, except that the data goes in the Client Hello when
>> using the current inclusion mechanism)
>> On receiving this a server looks up the anti-replay nonce and checks
>> it is fresh. To make this easier we include UTC time since the epoch (
>> midnight of 1 January 1970) and mandate some degree of synchronization
>> and a window. To avoid tagging with clock drift we truncate some low
>> order bits after adding a random small offset.
>> If the nonce is not previously seem the server can send Application
>> Data as normal.
>> We now introduce a new handshake type: Rekey Finish, containing a new
>> ticket and server key. CCS follows afterwards. These are sent
>> encrypted.
>> The new PMS will be HMAC(PMS_interim, ECDH(server, client keys)).
>> The big limitation is ticket keys are going to need rotation. This
>> also doesn't address the desire to put extra data in DNS to give some
>> degree of forward secrecy, but I don't think you can change DNS that
>> quickly without some problems.
>> Furthermore, if we want rekeys without renegotiation, we can reuse
>> Rekey Finish and add a Rekey Initiate handshake type that will send
>> the client key.
>> Open questions: how secure is this? We certainly need to hash the
>> anti-replay nonce into the keys: is that all we need? (Not if we want
>> to avoid attackers manipulating which method we use) Does noisy
>> truncation work to prevent fingerprinting while reducing storage
>> requirements?
>> Sincerely,
>> Watson Ladd
>> _______________________________________________
>> TLS mailing list

"Those who would give up Essential Liberty to purchase a little
Temporary Safety deserve neither  Liberty nor Safety."
-- Benjamin Franklin