<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
    which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
    There has to be one entity for each item to be referenced. 
    An alternate method (rfc include) is described in the references. -->

<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2629 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2629.xml">
<!ENTITY RFC3552 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3552.xml">
<!ENTITY RFC4366 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4366.xml">
<!ENTITY RFC5056 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5056.xml">
<!ENTITY RFC5226 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5226.xml">
<!ENTITY RFC7627 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7627.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
    please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
    (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space 
    (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="std" docName="draft-hoyland-tls-layered-exported-authenticator-00" ipr="trust200902">
 <!-- category values: std, bcp, info, exp, and historic
    ipr values: trust200902, noModificationTrust200902, noDerivativesTrust200902,
       or pre5378Trust200902
    you can add the attributes updates="NNNN" and obsoletes="NNNN" 
    they will automatically be output with "(if approved)" -->

 <!-- ***** FRONT MATTER ***** -->

 <front>
   <!-- The abbreviated title is used in the page header - it is only necessary if the 
        full title is longer than 39 characters -->

   <title abbrev="Layered Exported Authenticators">Layered Exported
Authenticators in TLS</title>

   <!-- add 'role="editor"' below for the editors if appropriate -->

   <!-- Another author who claims to be an editor -->

   <author fullname="Jonathan Hoyland" initials="J. G." role="editor"
           surname="Hoyland">
     <organization>Royal Holloway, University of London</organization>

     <address>
       <postal>
         <street></street>

         <!-- Reorder these if your country does things differently -->

         <city>Egham</city>

         <region></region>

         <code></code>

         <country>UK</country>
       </postal>

       <phone></phone>

       <email>jonathan.hoyland@gmail.com</email>

       <!-- uri and facsimile elements may also be added -->
     </address>
   </author>

   <date year="2018" />

   <!-- If the month and year are both specified and are the current ones, xml2rfc will fill 
        in the current day for you. If only the current year is specified, xml2rfc will fill 
     in the current day and month for you. If the year is not the current one, it is 
     necessary to specify at least a month (xml2rfc assumes day="1" if not specified for the 
     purpose of calculating the expiry date).  With drafts it is normally sufficient to 
     specify just the year. -->

   <!-- Meta-data Declarations -->

   <area>General</area>

   <workgroup>Internet Engineering Task Force</workgroup>

   <!-- WG name at the upperleft corner of the doc,
        IETF is fine for individual submissions.  
     If this element is not present, the default is "Network Working Group",
        which is used by the RFC Editor as a nod to the history of the IETF. -->

   <keyword>template</keyword>

   <!-- Keywords will be incorporated into HTML output
        files in a meta tag but they have no effect on text or nroff
        output. If you submit your draft to the RFC Editor, the
        keywords will be used for the search engine. -->

   <abstract>
     <t>This document describes an extension that allows for Exported
Authenticators (EAs) to authenticate each other. The extension includes a
reference to a previous EA. An EA containing this extension constitues an
attestation of the authenticity of the referenced EA. </t>
   </abstract>
 </front>

 <middle>
   <section title="Introduction">
    <t>Exported Authenticators (EAs)<xref target='EA'/> provide a method for
    authenticating one party of a Transport Layer Security (TLS) communication to
    the other after the session has been established.  EAs are defined for TLS
    1.3<xref target='TLS13'/> and TLS 1.2 with extended master secret, <xref
    target="RFC7627">RFC 7627</xref>. Multiple EAs sent on the same channel do not
    prove joint authentication. They prove that the sender is individually
    authoritative over each certificate, but not jointly authoritative over all
    certificates. By including this extension a sender can prove joint
    authentication. This extension can be included in CertificateRequest messages
    and Certificate messages. </t>

    <t> Joint authentication could be used, for example, to securely update
    pinned certificates. When a client connects to a server for which it has a
    pinned certificate, the server could send the new certificate to be pinned, and
    then bind the previously pinned certificate to it. This proves to the client
    that the server is jointly authoritative over both certificates. To defeat this
    mechanism an attacker is required to both compromise the key of the old
    certificate and improperly obtain a certificate from the PKI.</t>
    
    <t> Another potential use is to provide proof that a certificate has been
    accepted.  Because EAs do not have a response mechanism, the sender of an EA
    does not know the receiver's view of its authentication status. By using this
    extension to reference EAs sent by its peer, a party can prove to its peer that
    it has accepted a particular certificate.</t>

    <t> By constructing a chain of referenced EAs complex joint authentication
    properties can be achieved. </t>


     <section 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">RFC 2119</xref>.</t>
     </section>
   </section>

    <section anchor="extension_format" title="Extension Format">
        <figure>
            <preamble>
                The "extension_data" field of this extension SHALL contain:
            </preamble>
            <artwork><![CDATA[
struct {
     opaque prev_certificate_request_context<0..2^8-1>;
     opaque binding[Hash.length];
} LayeredEA;
            ]]>
        </artwork>
        <postamble>
            where "prev_certificate_request_context" is the certificate
            request context of the EA you are referencing, and "binding" is the Finished
            message of that same EA.
            The hash used is that used in the exported authenticator, which is the hash
            function used by the TLS connection.
        </postamble>
    </figure>
    <t> A party who wishes its peer to prove it is jointly authoritative over
    multiple certificates can request a sequence of certificates, each bound to its
    predecessor. Receipt of a series of EAs binding these certificates into a chain
    proves the sender is jointly authoritative over all those certificates.</t>
    <t> A party who receives a CertificateRequest with this extension MUST
    verify that it previously received or sent an EA with the appropriate
    certificate request context and Finished message. If so then the party MAY
    respond with a Certificate fulfilling the request, or it MAY choose to not
    fulfil the request.</t> 
    <t> A party who receives a request from its peer for which it does not
    recognise the referenced certificate or does not want to link to the referenced
    certificate for some other reason, but still wishes to respond with an EA MAY
    send an EA omitting the extension, or it MAY choose to not fulfil the
    request. If the peer receives an EA with the extension omitted it proves
    the sender is authoritative over the certificate in the EA, but makes no claims
    about the previous EA referenced in the request. </t>
    <t> For spontaneous certificates The server MUST include a unique (within
    the context of the connection) certificate_request_context for any EA it may
    wish to bind to. To be able to verify bindings both parties must keep a list of
    accepted EAs they are willing to bind to, including
    certificate_request_contexts and Finished messages. A client that
    receives a spontaneous EA with a certificate_request_context that it has
    already seen and for which it is willing to receive a binding MUST ignore
    it.</t>
   </section>
   <section anchor="Acknowledgements" title="Acknowledgements">
     <t></t>
   </section>

   <!-- Possibly a 'Contributors' section ... -->

   <section anchor="IANA" title="IANA Considerations">
     <t>This document requests IANA to update the TLS ExtensionsType registry,
    defined in <xref target="TLS13"/>, to include the
    layered_exported_authenticator extension.</t>
   </section>

   <section anchor="Security" title="Security Considerations">
    <t> For the authentication guarantees to apply, requests, and thus
    responses, must unambiguously identify previous EAs. Because EAs do not place a
    restriction on both parties to a connection using the same
    certificate_request_context, the certificate_request_context is not sufficient
    to unambiguously identify previous EAs. Because EAs are unidirectional, and the
    Finished message is dependent on the labels used to enforce this, the Finished
    message is sufficient to identify previous EAS unambiguously. In the case
    of spontaneous EAs a malicious server or an attacker who had compromised the
    TLS channel could send two identical spontaneous EAs. To militate against this
    a client receiving such an EA MUST check that it has not already accepted an EA
    with the same certificate_request_context that it is willing to bind to. If it
    previously accepted such a certificate but did not add it to the list of
    certificates which it was willing to bind to, adding it to the list is still
    secure. The certificate_request_context is included in the request to ease
    identification of the previous EA, but is not sufficient alone. </t>

    <t>Both parties can be sure the Finished messages that are used to
    reference previous EAs are unique. For requested EAs the inclusion of the
    certificate_request_context, which is generated by the requestor, guarantees
    this is the case. For spontaneous certificates the client may only accept EAs
    after checking it does not have any EAs it is willing to bind to with the same
    certificate_request_context.</t>

    <t>The Finished messages amount to channel bindings as defined in <xref
    target="RFC5056">RFC5056</xref>, and thus publication of them should not weaken
    the security of either the referenced EA or the TLS channel. </t>

    <t> This extension only authenticates prior EAs. Thus, an attacker who
    is able to compromise a TLS connection could append authentications to the
    connection. Any attempt to bind to these certificates by an honest agent would
    not be accepted by the peer.</t> 
   </section>
 </middle>

 <!--  *****BACK MATTER ***** -->

 <back>
   <!-- References split into informative and normative -->

   <!-- There are 2 ways to insert reference entries from the citation libraries:
    1. define an ENTITY at the top, and use "ampersand character"RFC2629; here (as shown)
    2. simply use a PI "less than character"?rfc include="reference.RFC.2119.xml"?> here
       (for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")

    Both are cited textually in the same manner: by using xref elements.
    If you use the PI option, xml2rfc will, by default, try to find included files in the same
    directory as the including file. You can also define the XML_LIBRARY environment variable
    with a value containing a set of directories to search.  These can be either in the local
    filing system or remote ones accessed by http (http://domain/dir/... ).-->

   <references title="Normative References">
     <!--?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml"?-->
     &RFC2119;
     &RFC7627;
    <reference anchor="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="March" day="20" year="2018"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-tls-tls13-28"/>
        <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-ietf-tls-tls13-28.txt"/>
    </reference>
    <reference anchor="EA">
        <front>
            <title>Exported Authenticators in TLS</title>
            <author initials="N" surname="Sullivan" fullname="Nick Sullivan">
                <organization/>
            </author>
            <date month="June" day="5" year="2018"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-tls-exported-authenticator-07"/>
        <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-ietf-tls-exported-authenticator-07.txt"/>
    </reference>
   </references>

   <references title="Informative References">
     &RFC5056;
   </references >

 </back>
</rfc>
