Re: [TLS] WGLC for draft-ietf-tls-cached-info-19

Martin Thomson <martin.thomson@gmail.com> Mon, 24 August 2015 18:35 UTC

Return-Path: <martin.thomson@gmail.com>
X-Original-To: tls@ietfa.amsl.com
Delivered-To: tls@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 5F10E1AD357 for <tls@ietfa.amsl.com>; Mon, 24 Aug 2015 11:35:50 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2
X-Spam-Level:
X-Spam-Status: No, score=-2 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, SPF_PASS=-0.001] autolearn=ham
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 1riJIZRoPxp7 for <tls@ietfa.amsl.com>; Mon, 24 Aug 2015 11:35:48 -0700 (PDT)
Received: from mail-qk0-x235.google.com (mail-qk0-x235.google.com [IPv6:2607:f8b0:400d:c09::235]) (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 171DC1AD355 for <tls@ietf.org>; Mon, 24 Aug 2015 11:35:48 -0700 (PDT)
Received: by qkbm65 with SMTP id m65so80928654qkb.2 for <tls@ietf.org>; Mon, 24 Aug 2015 11:35:46 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=4DDvp+7+qEp4ZtayWip4017tFypV5kZQzxLCBgA/Ufc=; b=vmc8320omolt8vZ4xiVG4UBntscuXpltvR4eOh7vX2F+pyvwSCnuuuOJTnSrUYdTHr eTCLq23ilUG4lGZ25q5Aqvc8mB7UlJZgWp2BuC8zZAiOKOzn7nL7OpHf9mDf+6S5kAD4 an+YoSFJSrr+DS3MKwSLK+U0H3+StapBNEgDGEsrer6IKMdJCdeLsSISX+dNOSX6O9Cj XrKTAfQNMdGtGafasw3hjZtU63AbG6aTRl8H4zqnzXLDYWgZMjTUku6eZjHpZqgvuILy Ty+eB0TcMQuILkVZK0RIjyFw1enlr5q8PaxVbaahTd53M6/Rs1Hpictz1a9G7OBLcTuS hEFw==
MIME-Version: 1.0
X-Received: by 10.13.206.67 with SMTP id q64mr20113064ywd.154.1440441346501; Mon, 24 Aug 2015 11:35:46 -0700 (PDT)
Received: by 10.129.133.130 with HTTP; Mon, 24 Aug 2015 11:35:46 -0700 (PDT)
In-Reply-To: <55DB489C.80505@gmx.net>
References: <CAOgPGoBivgXGKpZH=4mSkrVaKyg9YPi05rphs3VOcvuiFfPzrg@mail.gmail.com> <CABkgnnU++z-r3m2p-+k-6i8BwE5o9wXULS0RVJfCG1+nmkY13Q@mail.gmail.com> <55DB489C.80505@gmx.net>
Date: Mon, 24 Aug 2015 11:35:46 -0700
Message-ID: <CABkgnnWXsieUibqFwa_ugm==Vw+5zYpkH6nersxJVvURqf475A@mail.gmail.com>
From: Martin Thomson <martin.thomson@gmail.com>
To: Hannes Tschofenig <hannes.tschofenig@gmx.net>
Content-Type: text/plain; charset="UTF-8"
Archived-At: <http://mailarchive.ietf.org/arch/msg/tls/lR5pbZvNaLKgL9wg-tZp3CwhA-g>
Cc: "tls@ietf.org" <tls@ietf.org>
Subject: Re: [TLS] WGLC for draft-ietf-tls-cached-info-19
X-BeenThere: tls@ietf.org
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." <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: Mon, 24 Aug 2015 18:35:50 -0000

Hi Hannes,

On 24 August 2015 at 09:38, Hannes Tschofenig <hannes.tschofenig@gmx.net> wrote:
>> I'd like to see the document explicitly note that msg_type and length
>> from the handshake message are not covered by the hash.  The
>> description of what is covered is a little too terse (and badly
>> formatted).
>
> There are multiple message type / message length fields included in the
> message and I am not sure which of those you rare referring to.
>
> The msg_type and msg_length from the record layer is not part of the
> fingerprint calculation. The spec only focuses on the certificate
> message in Section 4.1 and the CertificateRequest message in Section
> 4.2. These message do, however, also contain length information.

I refer to the msg_type and length from the handshake message, which
are the only things with that name in the TLS spec.

You use the name `CertificateRequest`, which leads me to conclude that
you mean the struct identified as such, which is *inside* the
handshake message.  (I'm fine with hashing that part, I just want to
have it be very clear.)

> I included an example into the document. See Appendix A:
> https://github.com/hannestschofenig/tschofenig-ids/blob/master/tls-cached-info/draft-ietf-tls-cached-info-20.txt

This includes the msg_type and length.  Which means that you should
talk about hashing `Handshake` instead.

>> I'm not sure that I like the lack of both negotiation and signaling
>> for the hashes that are used here.
>
> We had a negotiation capability in earlier versions of the document but
> it appeared to be an overkill.

Yeah, that's why I'm thinking that this can use the PRF hash.

> What is there now is essentially an indication of the hash algorithm
> based on what the client presents with the CachedInformationType
> structure.

I don't see that anywhere.  The algorithm seems to be fixed to SHA-256
in the current draft (and your copy).

>>  Though I think the chances of a
>> collision being found, or that a collision would lead to an attack,
>> are slim, I would rather see this use the PRF hash so we have at least
>> that much flexibility.
>
> While there is indeed a possibility for hash collisions those will still
> lead to a failed exchange since the TLS server will not possess the
> correct private key that corresponds to the cached certificate.

Right, this might be all that the analysis requires.

>>  If the current design is retained, I would
>> like to see a little discussion of this in the document.  A little
>> analysis of the properties we expect the hash to provide would also be
>> good.
>>
>> I think that truncated hashes might be advantageous from the server
>> side.  Given that the server only uses hashes to identify which of the
>> offered (available, known?) cached information is in use, is there any
>> reason you can't save additional space by arbitrarily truncating the
>> hash?  In many cases I would imagine that the client would be offering
>> only one option and even if there were a small number of options
>> presented, a single byte would suffice to disambiguate.
>>
>> I'm trying to think why you might want the full-length hash on the
>> client side, but I believe that the only problem there is that there
>> might be a collision between the certificates that a server might
>> offer if you truncate too aggressively.  The connection still relies
>> on the server presenting proof of knowledge of a key that the client
>> extracts from a certificate bound to the server identity, so I believe
>> that it would be equally secure if you removed all mention of
>> certificates from the protocol.  And that makes me nervous, because
>> I'm fairly sure that Karthik will tell me that I'm wrong very shortly;
>> since we've put in a lot of work to cover key fields in the handshake
>> hash, and I'm concerned that this could be exploited somehow.
>>
>> The more I think about this, the more I think that we need a little
>> more analysis on this point (i.e., what properties the hash function
>> needs to provide and why).  If it has already happened, mention of
>> that in the security considerations is needed.
>>
>> (I think that truncation on the server side is safe if the client uses
>> a strong hash function to identify the certificate, but I'm frequently
>> wrong about these things.)
>>
> There are three designs possible for referencing the cached state, namely
>
> 1) The client creates the reference.
> 2) The server creates the reference.
> 3) There is no reference at all.

I'm not suggesting that you change the design, just provide a
description of the properties that it provides - and those that it
relies on.

On the surface at least, it seems OK to rely on a weak guarantee of
collision resistance from the hash.  Failure only results in handshake
failure, after which the client can fall back.  That suggests that a
truncated hash output could be used, potentially saving quite a few
bytes in the client's first flight.  I'd like to do that if it is
possible.

However, I'm concerned that eliding identity will lead to a weakness
somewhere.  For instance, if the client uses a shorter hash, then the
server might pick up different certificates.  Or, it means that
identity is not bound to the session hash as directly.  If, as you
say, we can rely on this being a direct selector for a private key
where the security is bound to that private key, then maybe it's OK.