Re: [TLS] Using both External PSK and (EC)DH in TLS 1.3

Jim Schaad <ietf@augustcellars.com> Sat, 25 March 2017 12:49 UTC

Return-Path: <ietf@augustcellars.com>
X-Original-To: tls@ietfa.amsl.com
Delivered-To: tls@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id C32BA126FB3 for <tls@ietfa.amsl.com>; Sat, 25 Mar 2017 05:49:26 -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, HTML_MESSAGE=0.001, RP_MATCHES_RCVD=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=augustcellars.com
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 Du8xHKw9-3Pn for <tls@ietfa.amsl.com>; Sat, 25 Mar 2017 05:49:24 -0700 (PDT)
Received: from mail4.augustcellars.com (augustcellars.com [50.45.239.150]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id A1D33126D74 for <tls@ietf.org>; Sat, 25 Mar 2017 05:49:24 -0700 (PDT)
Content-Type: multipart/alternative; boundary="----=_NextPart_000_02D6_01D2A53C.4D95F620"
Content-Language: en-us
DKIM-Signature: v=1; a=rsa-sha256; d=augustcellars.com; s=winery; c=simple/simple; t=1490446161; h=from:subject:to:date:message-id; bh=onjVFTK73HnUpLoNyAat5NRjW6fiyoyp8Z7ha6MBJQ0=; b=fTuvohrgGk6UDanGCl3tCIdI9Yr+XEvKPmSmNz1j20qipZOte9mRB0XQFdGVRF2LZKrAqOGaAJE 39NZoq91/6D4i2KrwUJ20YgBF5vYjaZE1qttn4HQKnm7sLWllSoRevrRmBY9ySQKfCHLhepPkQPyB 2OmCI1Jt22bAtiZFgznpQO5RYY7vSBLlAxEY3guXALDl6euQhiOedUiIdYBMghbbOxDMK5ZdttjJt GdS77QC4bw83bsn6tDW/2UBFEZX1aR/1OeAIDeHV7NWo9Gw412jPQOXOTk+43nCAmtV63kdAeFlNJ J0gpole6QZl5UQAeUcB46OS5L4n0JmVR3oBA==
Received: from mail2.augustcellars.com (192.168.1.201) by mail4.augustcellars.com (192.168.1.153) with Microsoft SMTP Server (TLS) id 15.0.1263.5; Sat, 25 Mar 2017 05:49:20 -0700
Received: from hebrews (31.133.135.244) by mail2.augustcellars.com (192.168.0.56) with Microsoft SMTP Server (TLS) id 15.0.1263.5; Sat, 25 Mar 2017 05:49:15 -0700
From: Jim Schaad <ietf@augustcellars.com>
To: 'Eric Rescorla' <ekr@rtfm.com>
CC: 'Russ Housley' <housley@vigilsec.com>, 'IETF TLS' <tls@ietf.org>
References: <0DA64421-5975-4B7E-BC08-7428AFA9D1A1@vigilsec.com> <CAF8qwaB8+o20QP71=zuCJ2EXt9EGFuLcn4s6es=gjnOccZE9fQ@mail.gmail.com> <9D8BEE12-49F9-4DE3-81C7-909CB114805F@vigilsec.com> <1b678d65-b146-b25f-c1ad-6dfc044f7ce0@akamai.com> <CABkgnnXfw45-R-Tvf2cZQGb4a5mas2yZRXT4q3ArRyTMSF9x2Q@mail.gmail.com> <733EE968-69EF-43A5-A39B-F016993A3CCD@vigilsec.com> <949EBD4E-613B-4B36-BD93-FDE3E4D4926F@vigilsec.com> <CAF8qwaA5ntF8iN99=tQyFt7dqucvcKNw9avgVRGJRmGu-3UswA@mail.gmail.com> <CABcZeBNXu==kGd63OdF07WEqcFiD0qd0aL=KQqKY23Y75XfewA@mail.gmail.com> <141723AB-B4E4-4233-8C35-C720E4A7FE0C@vigilsec.com> <CABcZeBNU23_ZM2JRz9aDyzuhcQ-ubzw5LU8Dkd=jPg1svhvukw@mail.gmail.com> <02c701d2a515$f9f8bcd0$edea3670$@augustcellars.com> <CABcZeBPLHvSgr9DteHwJz_zdCMy6A2U2U+=q6MfmSWTaSYZGbg@mail.gmail.com>
In-Reply-To: <CABcZeBPLHvSgr9DteHwJz_zdCMy6A2U2U+=q6MfmSWTaSYZGbg@mail.gmail.com>
Date: Sat, 25 Mar 2017 07:49:12 -0500
Message-ID: <02d501d2a566$36652050$a32f60f0$@augustcellars.com>
MIME-Version: 1.0
X-Mailer: Microsoft Outlook 16.0
Thread-Index: AQIMlBberIjSb54gXmQ46wMOF7ui8wHJiQ+GAeMnNZECTTT6AAPLO09VAhSep+gBtUNlHQH4+aZ0AnEfSc0BdR+rkQJIfwiNAdSPeVcCRi9TyaBjGBbg
X-Originating-IP: [31.133.135.244]
Archived-At: <https://mailarchive.ietf.org/arch/msg/tls/HlgDXW3CmcgOwBUBO9gtUtqhmEU>
Subject: Re: [TLS] Using both External PSK and (EC)DH in TLS 1.3
X-BeenThere: tls@ietf.org
X-Mailman-Version: 2.1.22
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: Sat, 25 Mar 2017 12:49:27 -0000

 

 

From: Eric Rescorla [mailto:ekr@rtfm.com] 
Sent: Saturday, March 25, 2017 6:40 AM
To: Jim Schaad <ietf@augustcellars.com>
Cc: Russ Housley <housley@vigilsec.com>; IETF TLS <tls@ietf.org>
Subject: Re: [TLS] Using both External PSK and (EC)DH in TLS 1.3

 

 

 

On Fri, Mar 24, 2017 at 8:14 PM, Jim Schaad <ietf@augustcellars.com <mailto:ietf@augustcellars.com> > wrote:

EKR – I think that is the wrong answer because of the resume case.

 

Why? It seems like for Russ'a application, you would inject the static PSK initially

and then it would be implicitly part of any resumption so no need to reinject it

to obtain PQ safety.

 

It seems odd to me that you would want to use a different key agree algorithm when you are doing the initial negotiation as opposed to the resumption.   Depending on how the static PSK is specified, it might need to be restated for the resumption as well.

 

Jim

 

 

-Ekr

 

However, I would expect that the external PSK would be appended or otherwise munge into the computed secret (assuming DH) and would be consumed as part of that processing.  No additional slot needed.

 

jim

 

From: TLS [mailto:tls-bounces@ietf.org <mailto:tls-bounces@ietf.org> ] On Behalf Of Eric Rescorla
Sent: Friday, March 24, 2017 12:19 PM
To: Russ Housley <housley@vigilsec.com <mailto:housley@vigilsec.com> >
Cc: IETF TLS <tls@ietf.org <mailto:tls@ietf.org> >
Subject: Re: [TLS] Using both External PSK and (EC)DH in TLS 1.3

 

Why would the external PSK not just go into he PSK slot.

 

-Ekr

 

 

On Fri, Mar 24, 2017 at 9:16 AM, Russ Housley <housley@vigilsec.com <mailto:housley@vigilsec.com> > wrote:


> I agree with David here. Specifically, I think.
>
> - The base specification should continue to forbid certificates in combination with PSK
> - We should at some point contemplate an extension that allows the use of certificates in combination with PSK
> - The base spec should be factored in such a way as to make that extension easy.


While I agree that we do not want to delay the TLS 1.3 specification to sort this out; however, I do not think we have provided the hook to make this future extension easy.   Looking at the key schedule in -19, I think we can provide the hook without being disruptive.  My goal is to minimize the pain to implementing the extension in the future by putting a straightforward hook in today:

                 0
                 |
                 v
   PSK ->  HKDF-Extract = Early Secret
                 |
                 +-----> Derive-Secret(.,
                 |                     "external psk binder key" |
                 |                     "resumption psk binder key",
                 |                     "")
                 |                     = binder_key
                 |
                 +-----> Derive-Secret(., "client early traffic secret",
                 |                     ClientHello)
                 |                     = client_early_traffic_secret
                 |
                 +-----> Derive-Secret(., "early exporter master secret",
                 |                     ClientHello)
                 |                     = early_exporter_secret
                 v
           Derive-Secret(., "derived secret", "")
                 |
                 v
(EC)DHE -> HKDF-Extract = Handshake Secret
                 |
                 +-----> Derive-Secret(., "client handshake traffic secret",
                 |                     ClientHello...ServerHello)
                 |                     = client_handshake_traffic_secret
                 |
                 +-----> Derive-Secret(., "server handshake traffic secret",
                 |                     ClientHello...ServerHello)
                 |                     = server_handshake_traffic_secret
                 v
           Derive-Secret(., "derived secret", "")
                 |
                 v
ExtPSK OR 0 -> HKDF-Extract = Master Secret
                 |
                 +-----> Derive-Secret(., "client application traffic secret",
                 |                     ClientHello...Server Finished)
                 |                     = client_traffic_secret_0
                 |
                 +-----> Derive-Secret(., "server application traffic secret",
                 |                     ClientHello...Server Finished)
                 |                     = server_traffic_secret_0
                 |
                 +-----> Derive-Secret(., "exporter master secret",
                 |                     ClientHello...Server Finished)
                 |                     = exporter_secret
                 |
                 +-----> Derive-Secret(., "resumption master secret",
                                       ClientHello...Client Finished)
                                       = resumption_master_secret


The only change is "ExtPSK OR 0” in the HKDF-Extract for the Master Secret computation.

The Section 4.1.1 can call out this place for the future specification:

OLD:

   -  When authenticating via a certificate, the server will send the
      Certificate (Section 4.4.2) and CertificateVerify (Section 4.4.3)
      messages.  In TLS 1.3 as defined by this document, either a PSK or
      a certificate is always used, but not both.  Future documents may
      define how to use them together.

NEW:

   -  When authenticating via a certificate, the server will send the
      Certificate (Section 4.4.2) and CertificateVerify (Section 4.4.3)
      messages.  In TLS 1.3 as defined by this document, either a PSK or
      a certificate is always used, but not both.  So, the ExtPSK is not
      used in the key schedule (Section 7.1).  Future documents may
      define how to use them together and tell how the ExtPSK is
      handled in the key schedule.

Russ