<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.0.31 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc compact="yes"?>

<rfc ipr="trust200902" docName="draft-nharper-tokbind-tls13-00" category="std" updates="TBNEGO">

  <front>
    <title abbrev="TLS 1.3 Token Binding">Token Binding for Transport Layer Security (TLS) Version 1.3 Connections</title>

    <author initials="N." surname="Harper" fullname="Nick Harper">
      <organization>Google Inc.</organization>
      <address>
        <email>nharper@google.com</email>
      </address>
    </author>

    <date year="2017" month="July" day="27"/>

    <area>General</area>
    
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>Negotiation of the Token Binding protocol is only defined for Transport Layer
Security (TLS) versions 1.2 and earlier. Token Binding users may wish to use it
with TLS 1.3; this document defines a backwards compatible way to negotiate
Token Binding on TLS 1.3 connections.</t>



    </abstract>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>Negotiating Token Binding using a TLS <xref target="I-D.ietf-tls-tls13"/> extension as
described in <xref target="I-D.ietf-tokbind-negotiation"/> is fairly straightforward, but is
restricted to TLS 1.2 and earlier. Only one minor change is needed to use this
extension to negotiate Token Binding on connections using TLS 1.3 and later.
Instead of the server putting the “token_binding” extension in the ServerHello
like in TLS 1.2, in TLS 1.3 the server puts it in EncryptedExtensions instead.</t>

<t>This document also non-normatively provides a clarification for the definition
of the TokenBinding.signature field from <xref target="I-D.ietf-tokbind-protocol"/>, since
TLS 1.3 defines an alternate (but API-compatible) exporter mechanism to the one
in <xref target="RFC5705"/> used in <xref target="I-D.ietf-tokbind-protocol"/>.</t>

<section anchor="requirements-language" title="Requirements Language">

<t>The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL
NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”,  “MAY”, and
“OPTIONAL” in this document are to be interpreted as described in
<xref target="RFC2119"/>.</t>

</section>
</section>
<section anchor="token-binding-tls-extension" title="Token Binding TLS Extension">

<t>In TLS 1.3, the “token_binding” TLS extension may be present only in ClientHello
and EncryptedExtensions handshake messages. The format of the “token_binding”
TLS extension remains the same as defined in <xref target="I-D.ietf-tokbind-negotiation"/>.</t>

<t>A client puts the “token_binding” TLS extension in its ClientHello to indicate
its support for the Token Binding protocol. The client should follow the same
rules for when to send this extension and the contents of its data as in section
2 of <xref target="I-D.ietf-tokbind-negotiation"/>. Since the “token_binding” extension
remains unchanged from TLS 1.2 to TLS 1.3 in the ClientHello, a client sending
the “token_binding” extension in a TLS 1.3 ClientHello is backwards compatible
with a server that only supports TLS 1.2.</t>

<t>A server puts the “token_binding” TLS extension in the EncryptedExtensions
message following its ServerHello to indicate support for the Token Binding
protocol and to select protocol version and key parameters. The server includes
the extension following the same rules as section 3 of
<xref target="I-D.ietf-tokbind-negotiation"/>, with the following changes:</t>

<t><list style="symbols">
  <t>The “token_binding” TLS extension is in EncryptedExtensions instead of
ServerHello.</t>
  <t>The server MUST NOT include both the “token_binding” extension and the
“early_data” extension on the same connection.</t>
</list></t>

</section>
<section anchor="interaction-with-0-rtt-data" title="Interaction with 0-RTT Data">

<t><xref target="I-D.ietf-tls-tls13"/> requires that extensions define their interaction with
0-RTT. The “token_binding” extension MUST NOT be used with 0-RTT unless
otherwise specified in another draft. A client MAY include both “early_data” and
“token_binding” extensions in its ClientHello - this indicates that the client
is willing to resume a connection and send early data (without Token Binding),
or negotiate Token Binding on the connection and have early data rejected.</t>

</section>
<section anchor="clarification-of-tokenbindingsignature" title="Clarification of TokenBinding.signature">

<t>This non-normative section provides a clarification on the definition of the
TokenBinding.signature field when used on a TLS 1.3 connection.</t>

<t><xref target="I-D.ietf-tokbind-protocol"/> defines the TokenBinding.signature field in terms
of an exported keying material (EKM) value as defined in <xref target="RFC5705"/>.
<xref target="I-D.ietf-tls-tls13"/> provides an equivalent interface in section 7.5. For
clarity, using the terminology from <xref target="I-D.ietf-tls-tls13"/>, the EKM used in
section 3.3 of <xref target="I-D.ietf-tokbind-protocol"/> in TLS 1.3 is the exporter value
(section 7.5 of <xref target="I-D.ietf-tls-tls13"/>) computed with the following parameters:</t>

<t><list style="symbols">
  <t>Secret: exporter_master_secret.</t>
  <t>label: The ASCII string “EXPORTER-Token-Binding” with no terminating NUL.</t>
  <t>context_value: No context value is supplied.</t>
  <t>key_length: 32 bytes.</t>
</list></t>

<t>These are the same input values as specified in section 3.3 of
<xref target="I-D.ietf-tokbind-protocol"/>.</t>

</section>
<section anchor="security-considerations" title="Security Considerations">

<t>The consideration regarding downgrade attacks in
<xref target="I-D.ietf-tokbind-negotiation"/> still apply here: The parameters negotiated in
the “token_binding” extension are protected by the TLS handshake. An active
network attacker cannot modify or remove the “token_binding” extension without
also breaking the TLS connection.</t>

<t>This extension cannot be used with 0-RTT data, so the concerns in
<xref target="I-D.ietf-tls-tls13"/> about replay do not apply here.</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor='RFC2119' target='http://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<abstract><t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='2119'/>
<seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>



<reference anchor='I-D.ietf-tokbind-negotiation'>
<front>
<title>Transport Layer Security (TLS) Extension for Token Binding Protocol Negotiation</title>

<author initials='A' surname='Popov' fullname='Andrey Popov'>
    <organization />
</author>

<author initials='M' surname='Nystrom' fullname='Magnus Nystrom'>
    <organization />
</author>

<author initials='D' surname='Balfanz' fullname='Dirk Balfanz'>
    <organization />
</author>

<author initials='A' surname='Langley' fullname='Adam Langley'>
    <organization />
</author>

<date month='July' day='20' year='2017' />

<abstract><t>This document specifies a Transport Layer Security (TLS) extension for the negotiation of Token Binding protocol version and key parameters.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-tokbind-negotiation-09' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-tokbind-negotiation-09.txt' />
</reference>



<reference anchor='I-D.ietf-tls-tls13'>
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.3</title>

<author initials='E' surname='Rescorla' fullname='Eric Rescorla'>
    <organization />
</author>

<date month='July' day='3' year='2017' />

<abstract><t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-tls-tls13-21' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-tls-tls13-21.txt' />
</reference>




    </references>

    <references title='Informative References'>





<reference  anchor='RFC5705' target='http://www.rfc-editor.org/info/rfc5705'>
<front>
<title>Keying Material Exporters for Transport Layer Security (TLS)</title>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'><organization /></author>
<date year='2010' month='March' />
<abstract><t>A number of protocols wish to leverage Transport Layer Security (TLS) to perform key establishment but then use some of the keying material for their own purposes.  This document describes a general mechanism for allowing that.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5705'/>
<seriesInfo name='DOI' value='10.17487/RFC5705'/>
</reference>



<reference anchor='I-D.ietf-tokbind-protocol'>
<front>
<title>The Token Binding Protocol Version 1.0</title>

<author initials='A' surname='Popov' fullname='Andrey Popov'>
    <organization />
</author>

<author initials='M' surname='Nystrom' fullname='Magnus Nystrom'>
    <organization />
</author>

<author initials='D' surname='Balfanz' fullname='Dirk Balfanz'>
    <organization />
</author>

<author initials='A' surname='Langley' fullname='Adam Langley'>
    <organization />
</author>

<author initials='J' surname='Hodges' fullname='Jeff Hodges'>
    <organization />
</author>

<date month='July' day='20' year='2017' />

<abstract><t>This document specifies Version 1.0 of the Token Binding protocol. The Token Binding protocol allows client/server applications to create long-lived, uniquely identifiable TLS bindings spanning multiple TLS sessions and connections.  Applications are then enabled to cryptographically bind security tokens to the TLS layer, preventing token export and replay attacks.  To protect privacy, the Token Binding identifiers are only conveyed over TLS and can be reset by the user at any time.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-tokbind-protocol-15' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-tokbind-protocol-15.txt' />
</reference>




    </references>



  </back>
</rfc>

