Re: [TLS] Wrapping up cached info

Michael D'Errico <mike-list@pobox.com> Wed, 19 May 2010 17:26 UTC

Return-Path: <mike-list@pobox.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 42FC53A69B2 for <tls@core3.amsl.com>; Wed, 19 May 2010 10:26:26 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.977
X-Spam-Level:
X-Spam-Status: No, score=-1.977 tagged_above=-999 required=5 tests=[AWL=0.622, BAYES_00=-2.599]
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 nCaN+vpfz4TR for <tls@core3.amsl.com>; Wed, 19 May 2010 10:26:24 -0700 (PDT)
Received: from sasl.smtp.pobox.com (a-pb-sasl-quonix.pobox.com [208.72.237.25]) by core3.amsl.com (Postfix) with ESMTP id 575A33A67AE for <tls@ietf.org>; Wed, 19 May 2010 10:26:17 -0700 (PDT)
Received: from sasl.smtp.pobox.com (unknown [127.0.0.1]) by a-pb-sasl-quonix.pobox.com (Postfix) with ESMTP id A7266B4089; Wed, 19 May 2010 13:26:09 -0400 (EDT)
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=pobox.com; h=message-id :date:from:mime-version:to:cc:subject:references:in-reply-to :content-type:content-transfer-encoding; s=sasl; bh=loBYM/bLpVA+ FcctSrzcIh7hr5k=; b=mSxJ1gaGRLoSrbGOjgJaCoaT/tlNcvPTaxx22rzhiAHH jPQv2f6dv5PZKNQ4aoS21XtQK3EoZDAT1yQ01WRCZdNtkv/v8dhK7JSjV1hJ3J6U Sts5CCJ4yYX2Ajws7RIjgNDJIZ512Zd68V4I7vgaPQyvM9X3tUlXMGuU+UbzzVQ=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=pobox.com; h=message-id:date :from:mime-version:to:cc:subject:references:in-reply-to :content-type:content-transfer-encoding; q=dns; s=sasl; b=sDsaRf sen0Jd78rhL8lcEUtKo1KtA5loLzfAs8Axy4Ur4z90sw4Ur867reXQVXiGdYEGaK /tcC2oMvf/05Ik0WrBBbDA0w9kYoZ+C1ZHbxaH6/UA0RK4CuQpD38GhdUzWpJ9KY CeZGmCsSoyfU0LgjSDhxZlcq4GiBPECJGCRvU=
Received: from a-pb-sasl-quonix. (unknown [127.0.0.1]) by a-pb-sasl-quonix.pobox.com (Postfix) with ESMTP id 7E9E3B4084; Wed, 19 May 2010 13:26:06 -0400 (EDT)
Received: from administrators-macbook-pro.local (unknown [24.234.114.35]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by a-pb-sasl-quonix.pobox.com (Postfix) with ESMTPSA id 35BB9B407B; Wed, 19 May 2010 13:26:02 -0400 (EDT)
Message-ID: <4BF41F29.6080409@pobox.com>
Date: Wed, 19 May 2010 10:26:01 -0700
From: Michael D'Errico <mike-list@pobox.com>
User-Agent: Thunderbird 2.0.0.23 (Macintosh/20090812)
MIME-Version: 1.0
To: "Joseph Salowey (jsalowey)" <jsalowey@cisco.com>
References: <C819B76D.AF2B%stefan@aaa-sec.com> <4BF3FD9C.3040206@pobox.com> <AC1CFD94F59A264488DC2BEC3E890DE50A67CC6B@xmb-sjc-225.amer.cisco.com>
In-Reply-To: <AC1CFD94F59A264488DC2BEC3E890DE50A67CC6B@xmb-sjc-225.amer.cisco.com>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-Pobox-Relay-ID: 9B67037C-636B-11DF-A8E7-D033EE7EF46B-38729857!a-pb-sasl-quonix.pobox.com
Cc: tls@ietf.org
Subject: Re: [TLS] Wrapping up cached info
X-BeenThere: tls@ietf.org
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." <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, 19 May 2010 17:26:26 -0000

It is better than server-assigns-name because a server doesn't
need to keep track of names in stable storage if that's not
convenient for it.  It can instead create a convenient name (which
doesn't even need to be a hash of the object) and use the time at
which the server was launched as the timestamp.

The combination of name and timestamp provides a lot of flexibility
for the server since it could use a unique name for something, e.g.
MODP-1536 for the 1536-bit IKE DH parameters, or a combination of a
name and a timestamp.  The timestamp could be based off of the file
modification time of a certificate for instance.  Or the server can
just use the time it last loaded its configuration as the timestamp
to avoid any possible clashes with previous names.

Also there is no need for hashing at all and thus no hash agility.
I think that alone makes this worth considering.

Mike



Joseph Salowey (jsalowey) wrote:
> This approach seems equivalent to the server assigns name approach that
> has been brought up several times previously and not received enough
> support to replace the current mechanism.  In addition, it doesn't seem
> to solve the issue of how to hash the objects that the working group is
> currently struggling with.  
> 
> Joe
> 
>> -----Original Message-----
>> From: tls-bounces@ietf.org [mailto:tls-bounces@ietf.org] On Behalf Of
>> Michael D'Errico
>> Sent: Wednesday, May 19, 2010 8:03 AM
>> To: Stefan Santesson
>> Cc: tls@ietf.org
>> Subject: Re: [TLS] Wrapping up cached info
>>
>> Stefan Santesson wrote:
>>> Not sure how I should interpret the silence?
>>>
>>> I guess it means that everyone agrees with me :)
>> Then by that logic everyone also agrees with me to use http caching
>> as the model!
>>
>> Seriously, I think that the current draft might be too simple.  For
>> example, consider caching the list of certificate_authorities in a
>> CertificateRequest message.  A web application might have several
>> different lists of certificate_authorities based on what the resource
>> is and who is trying to access it.  If cached-info can only cache one
>> object of any particular type, then it will not be very helpful for
>> such an application.
>>
>> Also, exactly how would you hash the Diffie-Hellman parameters in a
>> ServerKeyExchange message?  You can't just hash the message since it
>> also contains a unique Ys which changes frequently if not every
>> handshake.
>>
>> Allowing the server to instead name the objects, and keep track of
>> timestamps for each object, allows you to handle these two cases.  In
>> the multiple-CA-list example above, the server might have USER and
>> ADMIN lists.  If it can't be sure when exactly those lists were
>> created, the timestamp can simply be when the server was started or
>> when it last read its configuration.
>>
>> When the server forces the client to renegotiate when accessing a
>> protected resource as an ADMIN for example, the server's cached info
>> extension would contain:
>>
>>      type=cert_req_ca_list,name=ADMIN,timestamp=20100519123456789
>>
>> When requesting a less-sensitive, but not public resource, the server
>> would send:
>>
>>      type=cert_req_ca_list,name=USER,timestamp=20100519123456789
>>
>> If the client's cached-info extension contained an exact match, then
>> the server would omit that data from the handshake.
>>
>> This is sort of like cipher suite selection.  The client sends a list
>> of possible matches and the server selects one from the list.  It
>> differs in that there might be no match, in which case the server just
>> sends the info for the object it decided to send in the handshake.
>>
>> I'm sure there are more details to be worked out, but I think it would
>> be a good idea to entertain this approach.
>>
>> Mike
>>
>>
>>
>>> To repeat in short. Here is what I suggest based on the latest
> traffic:
>>> 1) A client, caching information also caches what hash algorithm was
>> used to
>>> calculate the finished message at the time of caching.
>>>
>>> 2) On repeated connections, the client indicate cached info by
> sending a
>>> hash of the cached object using the cached hash algorithm. (No use
> of
>> FNV
>>> hash)
>>>
>>> 3) The server accepts by returning the received hash instead of the
>> cached
>>> data.
>>>
>>> 4) The only hash agility provided is that the client will send a
> hash
>>> algorithm identifier with the hash.
>>>
>>> 5) The client MUST NOT send more than one hash per cached object,
> and
>> MUST
>>> used the cached hash algorithm.
>>>
>>>
>>> This solves all issues raised (securely binds the cached data to the
>>> finished calculation) and removes the need for hash agility
>>> Syntactically it just requires adding a hash identifier and
> adjusting
>> the
>>> vector length for hash data.
>>>
>>> So I basically wander:
>>> - Would this be acceptable?
>>> - Who could NOT live with this solution?
>>> - Who think it is worth the effort to agree on a better solution,
> and
>> why?
>>> Regards
>>>
>>>
>>>
>>>
>>> On 10-05-18 12:24 AM, "Stefan Santesson" <stefan@aaa-sec.com> wrote:
>>>
>>>> As Martin pointed out to me privately, the hash used in the
> finished
>>>> calculation becomes known to the client only after receiving the
> serer
>>>> hello.
>>>>
>>>> It would therefore be natural for the client to use the hash
> function
>> used
>>>> to calculate the finished message at the time when the data was
> cached.
>>>> The client would then indicate which hash algorithm it used and
> upon
>>>> acceptance, the server will honor the request.
>>>>
>>>> /Stefan
>>>>
>>>>
>>>> On 10-05-17 10:34 PM, "Stefan Santesson" <stefan@aaa-sec.com>
> wrote:
>>>>> Guys,
>>>>>
>>>>> Where I come from we have a say "don't cross the river to get to
> the
>> water".
>>>>> And to me this proposal to change the finished calculation is just
>> that.
>>>>> Look at it.
>>>>>
>>>>> The proposal is to bind the cached data by adding a hash of the
> cached
>> data
>>>>> to the finished calculation.
>>>>>
>>>>> The proposal is further to avoid hash agility by picking the hash
>> algorithm
>>>>> used by TLS's Finished message computation.
>>>>>
>>>>>
>>>>> Now there are two ways to achieve this goal.
>>>>>
>>>>> 1) The crossing the river to get water approach:  Exchange FNV
> hashes
>> of the
>>>>> cached data in the handshake protocol exchange and then inject
> hashes
>> of the
>>>>> same data into the finished calculation through an alteration of
> the
>> TLS
>>>>> protocol.
>>>>>
>>>>>
>>>>> 2) The simple approach: Use the hash algorithm of the finished
>> calculation
>>>>> to hash the cached data (according to the current draft).
>>>>>
>>>>>
>>>>> Alternative 2 securely bind the hashed data into the finished
> message
>>>>> calculation without altering the algorithm.
>>>>>
>>>>> Alternative 2 requires at most a hash algorithm identifier added
> to
>> the
>>>>> protocol, if at all. We don't need to add negotiation since we
> always
>> use
>>>>> the hash of the finished message calculation. Adding this
> identifier
>> would
>>>>> be the only change made to the current draft.
>>>>>
>>>>> Alternative 2 don't require additional security analysis. If the
> hash
>> used
>>>>> to calculate the finished message is broken, then we are screwed
>> anyway.
>>>>> /Stefan
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On 10-05-17 9:16 PM, "Martin Rex" <mrex@sap.com> wrote:
>>>>>
>>>>>> Joseph Salowey wrote:
>>>>>>> I agree with Uri, that if you determine you need SHA-256 then
> you
>> should
>>>>>>> plan for hash agility.  TLS 1.2 plans for hash agility.
>>>>>>>
>>>>>>> What about Nico's proposal where a checksum is used to identify
> the
>>>>>>> cached data and the actual handshake contains the actual data
> hashed
>>>>>>> with the algorithm used in the PRF negotiated with the cipher
> suite?
>>>>>>> This way we don't have to introduce hash agility into the
> extension,
>> but
>>>>>>> we have cryptographic hash agility where it matters in the
> Finished
>>>>>>> computation.  Does it solve the problem?
>>>>>> Yes, I think so.
>>>>>> This approach should solve the issue at the technical level.
>>>>>>
>>>>>> Going more into detail, one would hash/mac only the data that got
>>>>>> actually replaced in the handshake, each prefixed by a (locally
>> computed)
>>>>>> length field.
>>>>>>
>>>>>> -Martin
>>>>>> _______________________________________________
>>>>>> TLS mailing list
>>>>>> TLS@ietf.org
>>>>>> https://www.ietf.org/mailman/listinfo/tls
>>>>> _______________________________________________
>>>>> TLS mailing list
>>>>> TLS@ietf.org
>>>>> https://www.ietf.org/mailman/listinfo/tls
>>>
>>> _______________________________________________
>>> TLS mailing list
>>> TLS@ietf.org
>>> https://www.ietf.org/mailman/listinfo/tls
>>>
>> _______________________________________________
>> TLS mailing list
>> TLS@ietf.org
>> https://www.ietf.org/mailman/listinfo/tls
>