[TLS] Analysis of Interop scenarios TLS extension RI w/MCSV

Martin Rex <mrex@sap.com> Wed, 09 December 2009 20:21 UTC

Return-Path: <mrex@sap.com>
X-Original-To: tls@core3.amsl.com
Delivered-To: tls@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 596873A6846 for <tls@core3.amsl.com>; Wed, 9 Dec 2009 12:21:14 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.192
X-Spam-Level:
X-Spam-Status: No, score=-6.192 tagged_above=-999 required=5 tests=[AWL=0.057, BAYES_00=-2.599, HELO_EQ_DE=0.35, RCVD_IN_DNSWL_MED=-4]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ttxkMMEM+zPB for <tls@core3.amsl.com>; Wed, 9 Dec 2009 12:21:10 -0800 (PST)
Received: from smtpde03.sap-ag.de (smtpde03.sap-ag.de [155.56.68.140]) by core3.amsl.com (Postfix) with ESMTP id EEA913A68DF for <tls@ietf.org>; Wed, 9 Dec 2009 12:21:09 -0800 (PST)
Received: from mail.sap.corp by smtpde03.sap-ag.de (26) with ESMTP id nB9KKvlk013248 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for <tls@ietf.org>; Wed, 9 Dec 2009 21:20:57 +0100 (MET)
From: Martin Rex <mrex@sap.com>
Message-Id: <200912092020.nB9KKu39003981@fs4113.wdf.sap.corp>
To: tls@ietf.org
Date: Wed, 09 Dec 2009 21:20:56 +0100
MIME-Version: 1.0
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: 8bit
X-Scanner: Virus Scanner virwal05
X-SAP: out
Subject: [TLS] Analysis of Interop scenarios TLS extension RI w/MCSV
X-BeenThere: tls@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
Reply-To: mrex@sap.com
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/listinfo/tls>, <mailto:tls-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/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: Wed, 09 Dec 2009 20:21:14 -0000

Here is my analysis of the requirements and implementation efforts
for TLS extension RI with magic cipher suites value (MCSV), based on my
recent experiences from implementing draft-mrex-tls-secure-renegotiation-03
in OpenSSL-0.9.8l and looking at the early implementation of draft-rescorla
in the OpenSSL-0.9.8-snapshot.

The purpose of the MCSV is:

  - provide interop with installed base of old, extensions-intolerant
    servers (original&correct SSLv3 and "defective" TLSv1.0)

  - provide protection from downgrade attacks
    (extension-less ClientHello or SSLv2 ClientHello)

  - provide protection in backwards interop scenarios
    (renegotiation requested by old servers).


in order to reliably provide this,

  - MCSV is defined to represent an empty TLS extension RI

  - MSCV MUST be included in *ALL* initial ClientHello handshakes
    messages _plus_ all renegotiation ClientHellos in backwards
    interop scenarios (independent of full handshake or session resume).

  - empty TLS extension RI MUST NOT be sent, ever!

  - TLS extension RI with Client.Finished.verify_data in ClientHello
     - MUST NOT be sent on renegotiation handshakes in backward
       interop scenarios with old servers which could otherwise break
     - MUST be sent in all other renegotiations


If the spec would require that an empty TLS extension RI in a
ClientHello MUST be completely ignored, then _everyone_ can save 5-10 LoC.

There is a significant difference between extensions-tolerant and
extensions-support.  Extensions tolerant means, that a server
will not choke on a ClientHello handshake message, but instead
simply ignore all data following compression methods compliant
to the provision in the updated-but-never-published SSLv3,
TLSv1.0 and TLSv1.1 specs.

In order to implement secure renegotiation with TLS extension RI
a "generic" TLS extensions parser (~150 LoC) is necessary to
find the TLS extension RI among other extensions, process it
and create and process the TLS extension RI reply.  Support
for other TLS extensions and API-level access to TLS extensions
is completely out-of-scope for the following.


Adding MCSV to ClientHello on the client and parsing MCSV from
the ClientHello on the server will typically be <10 LoC each.

Creating an processing an empty TLS extension RI on the ServerHello
is also typically <10 LoC each for extension-less implementations.


Types of TLS peers in the current installed base:

1.)  old TLS client, no extensions, no renegotiation

2.)  old TLS client, no extensions,    renegotiation

3.)  old TLS client,    extensions, no renegotiation

4.)  old TLS client,    extensions,    renegotiation


5.)  old TLS server, extensions-intolerant, no renegotiation 

6.)  old TLS server, extensions-intolerant,    renegotiation 

7.)  old TLS server, no extensions,         no renegotiation 

8.)  old TLS server, no extensions,            renegotiation 

9.)  old TLS server, extensions,            no renegotiation

10.) old TLS server, extensions,               renegotiation


The server patches that are currently applied in the field are
(6)  -> (5)
(8)  -> (7)
(10) -> (9)
    

Additional types of TLS peers when TLS extension RI is implemented:

11.) updated TLS client, RI-minimal,    no renegotiation

12.) updated TLS client, RI-only,          renegotiation 

13.) updated TLS client,    extensions, no renegotiation

14.) updated TLS client,    extensions,    renegotiation 


15.) updated TLS server, RI-minimal,    no renegotiation

16.) updated TLS server, RI-only,          renegotiation

17.) updated TLS server,    extensions, no renegotiation

18.) updated TLS server,    extensions,    renegotiation



Effect of requiring MCSV on implementation effort
-- for non-renegotiating servers:

If we require MSCV on _every_ ClientHello
then the update (5),(6),(7),(8) -> (15) amounts to ~20 LoC
     the update        (9),(10) -> (17) amounts to ~40 LoC 

If we do not require MCSV on _every_ ClientHello
then the update (5),(6),(7),(8) -> (15) amounts to ~80 LoC
     the update        (9),(10) -> (17) amounts to ~60 LoC


Effect of requiring MCSV on implementation effort
-- for non-renegotiating clients:

If we require MCSV on _every_ ClientHello,
then the update (1),(2) -> (11) amounts to ~20 LoC
                (3)     -> (13) amounts to ~40 LoC

If we do not require MCSV on _every_ ClientHello,
then the update (1),(2) -> (11) amounts to ~80 LoC
                (3)     -> (13) amounts to ~60 LoC


  
guestimates about secure rengotiation efforts:

Servers: these are independent of whether MCSV is required
(10)     -> (18)  maybe ~180 LoC
(6),(8)  -> (16)  maybe ~200 LoC
(6),(8)  -> (18)  maybe ~250 LoC

Clients: these are independend of whether MCSV is required.
(4)  -> (14)  maybe ~180 LoC
(2)  -> (12)  maybe ~200 LoC
(2)  -> (14)  maybe ~250 LoC




-Martin