Re: [TLS] TLS renegotiation issue

Nicolas Williams <> Thu, 05 November 2009 17:24 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id EA58C3A6AEA for <>; Thu, 5 Nov 2009 09:24:41 -0800 (PST)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -5.245
X-Spam-Status: No, score=-5.245 tagged_above=-999 required=5 tests=[AWL=-0.799, BAYES_00=-2.599, HELO_MISMATCH_COM=0.553, J_BACKHAIR_46=1, J_CHICKENPOX_66=0.6, RCVD_IN_DNSWL_MED=-4]
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id jhN9cNfCp0BD for <>; Thu, 5 Nov 2009 09:24:41 -0800 (PST)
Received: from (sca-ea-mail-4.Sun.COM []) by (Postfix) with ESMTP id CB1253A67D9 for <>; Thu, 5 Nov 2009 09:24:16 -0800 (PST)
Received: from ([]) by (8.13.6+Sun/8.12.9) with ESMTP id nA5HOdP2028895 for <>; Thu, 5 Nov 2009 17:24:39 GMT
Received: from binky.Central.Sun.COM (binky.Central.Sun.COM []) by (8.13.8+Sun/8.13.8/ENSMAIL, v2.2) with ESMTP id nA5HOdPW051900 for <>; Thu, 5 Nov 2009 10:24:39 -0700 (MST)
Received: from binky.Central.Sun.COM (localhost []) by binky.Central.Sun.COM (8.14.3+Sun/8.14.3) with ESMTP id nA5HD8Rl009208; Thu, 5 Nov 2009 11:13:08 -0600 (CST)
Received: (from nw141292@localhost) by binky.Central.Sun.COM (8.14.3+Sun/8.14.3/Submit) id nA5HD8nP009207; Thu, 5 Nov 2009 11:13:08 -0600 (CST)
X-Authentication-Warning: binky.Central.Sun.COM: nw141292 set sender to using -f
Date: Thu, 5 Nov 2009 11:13:08 -0600
From: Nicolas Williams <>
To: Martin Rex <>
Message-ID: <20091105171308.GY1105@Sun.COM>
References: <> <>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <>
User-Agent: Mutt/1.5.7i
Cc: Eric Rescorla <>,
Subject: Re: [TLS] TLS renegotiation issue
X-Mailman-Version: 2.1.9
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: Thu, 05 Nov 2009 17:24:42 -0000

On Thu, Nov 05, 2009 at 06:11:41PM +0100, Martin Rex wrote:
> One conceivable approach would be a TLS extension for secure renegotiation
> with roughly the following semantics:
>  - on initial TLS handshakes (aka Re-nego of a TLS_NULL_WITH_NULL_NULL)
>    the client that supports secure renegotiation should send the
>    TLS extension in the client hello with an empty extension data
>    to signal to the server that it support secure renegotation.
>  - on TLS session renegotiations, the client should sent the TLS extension
>    with the extension data containing the client.random and server.random
>    from the existing session.

The MITM can make sure they match.

Why not just send an extension with the tls-unique channel binding for
the first/outer connection, and then make sure that that gets fed as an
input for the PRF in the second/inner connection?  I.e., proper channel
binding.  The MITM _cannot_ make sure that the tls-unique CB of the
client<->MITM and MITM<->server outer connections match.

>  - A server that receives a ClientHello without the TLS extension for
>    secure renegotiation should NOT perform old-style renegotiation
>    for that session (and get apps with flawed assumptions into trouble),
>    i.e. NOT support delayed authentication for those TLS clients.


>  - A server that receives a ClientHello on an initial TLS handshake
>    with a TLS extension (empty data) for secure renegotiation may decide to
>    delay client-cert authentication to a securely renegotiated session


>  - A server that receives a ClientHello with a TLS extension for secure
>    negotiation and a reference to a previous session MUST compare the
>    client.random and server.random from the extension data to that of
>    the current session (and abort if they do not match).  And the
>    server should probably insist on doing a ChangeCipherSpec on both
>    directions in the renegotiation handshake.

See above.

> Since Larry is looking for a means to uniquely identify a single
> TLS "connection" independent of whether its a single TLS handshake
> or renegotiated, we should check whether we can carry-over some
> information form the initial handshake on a connection along
> with the client.random&server.random.  Technically there is no
> limit on the number of renegotiations, so a simple pointer
> only one TLS session into the past does not seem sufficient
> for that purpose.

See above.  Use tls-unique.