<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="info" consensus="true" docName="draft-ietf-tls-external-psk-guidance-06" indexInclude="true" ipr="trust200902" number="9257" prepTime="2022-07-25T12:24:01" scripts="Common,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="3" tocInclude="true" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-tls-external-psk-guidance-06" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9257" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="Guidance for External PSK  Usage in TLS">Guidance for External Pre-Shared Key (PSK) Usage in TLS</title>
    <seriesInfo name="RFC" value="9257" stream="IETF"/>
    <author initials="R." surname="Housley" fullname="Russ Housley">
      <organization abbrev="Vigil Security" showOnFrontPage="true">Vigil Security, LLC</organization>
      <address>
        <email>housley@vigilsec.com</email>
      </address>
    </author>
    <author initials="J." surname="Hoyland" fullname="Jonathan Hoyland">
      <organization showOnFrontPage="true">Cloudflare Ltd.</organization>
      <address>
        <email>jonathan.hoyland@gmail.com</email>
      </address>
    </author>
    <author initials="M." surname="Sethi" fullname="Mohit Sethi">
      <organization showOnFrontPage="true">Aalto University</organization>
      <address>
        <email>mohit@iki.fi</email>
      </address>
    </author>
    <author initials="C. A." surname="Wood" fullname="Christopher A. Wood">
      <organization showOnFrontPage="true">Cloudflare</organization>
      <address>
        <email>caw@heapingbits.net</email>
      </address>
    </author>
    <date month="07" year="2022"/>
    <area>security</area>
    <workgroup>tls</workgroup>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">This document provides usage guidance for external Pre-Shared Keys (PSKs)
in Transport Layer Security (TLS) 1.3 as defined in RFC 8446.
It lists TLS security properties provided by PSKs under certain
assumptions, then it demonstrates how violations of these assumptions lead
to attacks. Advice for applications to help meet these assumptions is
provided. This document also discusses PSK use cases and provisioning processes.
Finally, it lists the privacy and security properties that are not
provided by TLS 1.3 when external PSKs are used.</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This document is not an Internet Standards Track specification; it is
            published for informational purposes.  
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by the
            Internet Engineering Steering Group (IESG).  Not all documents
            approved by the IESG are candidates for any level of Internet
            Standard; see Section 2 of RFC 7841. 
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9257" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2022 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Revised BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Revised BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-conventions-and-definitions">Conventions and Definitions</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-notation">Notation</xref></t>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-psk-security-properties">PSK Security Properties</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2">
              <li pn="section-toc.1-1.4.2.1">
                <t indent="0" pn="section-toc.1-1.4.2.1.1"><xref derivedContent="4.1" format="counter" sectionFormat="of" target="section-4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-shared-psks">Shared PSKs</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.2">
                <t indent="0" pn="section-toc.1-1.4.2.2.1"><xref derivedContent="4.2" format="counter" sectionFormat="of" target="section-4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-psk-entropy">PSK Entropy</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-external-psks-in-practice">External PSKs in Practice</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2">
              <li pn="section-toc.1-1.5.2.1">
                <t indent="0" pn="section-toc.1-1.5.2.1.1"><xref derivedContent="5.1" format="counter" sectionFormat="of" target="section-5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-use-cases">Use Cases</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.2">
                <t indent="0" pn="section-toc.1-1.5.2.2.1"><xref derivedContent="5.2" format="counter" sectionFormat="of" target="section-5.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-provisioning-examples">Provisioning Examples</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.3">
                <t indent="0" pn="section-toc.1-1.5.2.3.1"><xref derivedContent="5.3" format="counter" sectionFormat="of" target="section-5.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-provisioning-constraints">Provisioning Constraints</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-recommendations-for-externa">Recommendations for External PSK Usage</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2">
              <li pn="section-toc.1-1.6.2.1">
                <t indent="0" pn="section-toc.1-1.6.2.1.1"><xref derivedContent="6.1" format="counter" sectionFormat="of" target="section-6.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-stack-interfaces">Stack Interfaces</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2.1.2">
                  <li pn="section-toc.1-1.6.2.1.2.1">
                    <t indent="0" pn="section-toc.1-1.6.2.1.2.1.1"><xref derivedContent="6.1.1" format="counter" sectionFormat="of" target="section-6.1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-psk-identity-encoding-and-c">PSK Identity Encoding and Comparison</xref></t>
                  </li>
                  <li pn="section-toc.1-1.6.2.1.2.2">
                    <t indent="0" pn="section-toc.1-1.6.2.1.2.2.1"><xref derivedContent="6.1.2" format="counter" sectionFormat="of" target="section-6.1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-psk-identity-collisions">PSK Identity Collisions</xref></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-privacy-considerations">Privacy Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="9" format="counter" sectionFormat="of" target="section-9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="10" format="counter" sectionFormat="of" target="section-10"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.10.2">
              <li pn="section-toc.1-1.10.2.1">
                <t indent="0" pn="section-toc.1-1.10.2.1.1"><xref derivedContent="10.1" format="counter" sectionFormat="of" target="section-10.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.10.2.2">
                <t indent="0" pn="section-toc.1-1.10.2.2.1"><xref derivedContent="10.2" format="counter" sectionFormat="of" target="section-10.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.11">
            <t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.12">
            <t indent="0" pn="section-toc.1-1.12.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">This document provides guidance on the use of external Pre-Shared Keys (PSKs)
in Transport Layer Security (TLS) 1.3 <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/>. This guidance also
applies to Datagram TLS (DTLS) 1.3 <xref target="RFC9147" format="default" sectionFormat="of" derivedContent="RFC9147"/> and
Compact TLS 1.3 <xref target="I-D.ietf-tls-ctls" format="default" sectionFormat="of" derivedContent="CTLS"/>. For readability, this document uses
the term "TLS" to refer to all such versions.</t>
      <t indent="0" pn="section-1-2">External PSKs are symmetric
secret keys provided to the TLS protocol implementation as external inputs.
External PSKs are provisioned out of band.</t>
      <t indent="0" pn="section-1-3">This document lists
TLS security properties provided by PSKs under certain assumptions and
demonstrates how violations of these assumptions lead to attacks. This
document discusses PSK use cases, provisioning processes, and TLS stack
implementation support in the context of these assumptions.
This document
also provides advice for applications in various use cases to help meet
these assumptions.</t>
      <t indent="0" pn="section-1-4">There are many resources that provide guidance for password generation and
verification aimed towards improving security. However, there is no such
equivalent for external PSKs in TLS. This document aims
to reduce that gap.</t>
    </section>
    <section anchor="conventions-and-definitions" numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-conventions-and-definitions">Conventions and Definitions</name>
      <t indent="0" pn="section-2-1">
    The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
    "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
    described in BCP 14 <xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> 
    when, and only when, they appear in all capitals, as shown here.
      </t>
    </section>
    <section anchor="notation" numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-notation">Notation</name>
      <t indent="0" pn="section-3-1">For purposes of this document, a "logical node" is a computing presence that
other parties can interact with via the TLS protocol. A logical node could
potentially be realized with multiple physical instances operating under common
administrative control, e.g., a server farm. An "endpoint" is a client or server
participating in a connection.</t>
    </section>
    <section anchor="sec-properties" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-psk-security-properties">PSK Security Properties</name>
      <t indent="0" pn="section-4-1">The use of a previously established PSK allows TLS nodes to authenticate
the endpoint identities. It also offers other benefits, including
resistance to attacks in the presence of quantum computers;
see <xref target="entropy" format="default" sectionFormat="of" derivedContent="Section 4.2"/> for related discussion. However, these keys do not provide
privacy protection of endpoint identities, nor do they provide non-repudiation
(one endpoint in a connection can deny the conversation); see <xref target="endpoint-privacy" format="default" sectionFormat="of" derivedContent="Section 7"/>
for related discussion.</t>
      <t indent="0" pn="section-4-2">PSK authentication security implicitly assumes one fundamental property: each
PSK is known to exactly one client and one server and they never switch
roles. If this assumption is violated, then the security properties of TLS are
severely weakened as discussed below.</t>
      <section anchor="shared-psks" numbered="true" toc="include" removeInRFC="false" pn="section-4.1">
        <name slugifiedName="name-shared-psks">Shared PSKs</name>
        <t indent="0" pn="section-4.1-1">As discussed in <xref target="use-cases" format="default" sectionFormat="of" derivedContent="Section 5.1"/>, to demonstrate their attack, <xref target="AASS19" format="default" sectionFormat="of" derivedContent="AASS19"/> describes
scenarios where multiple clients or multiple servers share a PSK. If
this is done naively by having all members share a common key, then
TLS authenticates only group membership, and the security of the
overall system is inherently rather brittle. There are a number of
obvious weaknesses here:</t>
        <ol spacing="normal" type="1" indent="adaptive" start="1" pn="section-4.1-2">
          <li pn="section-4.1-2.1" derivedCounter="1.">Any group member can impersonate any other group member.</li>
          <li pn="section-4.1-2.2" derivedCounter="2.">If a PSK is combined with the result of a fresh ephemeral key exchange, then compromise of a group member that knows
the resulting shared secret will enable the attacker to passively read traffic (and actively modify it).</li>
          <li pn="section-4.1-2.3" derivedCounter="3.">If a PSK is not combined with the result of a fresh ephemeral key exchange, then compromise of any group member allows the
attacker to passively read all traffic (and actively modify it), including past traffic.</li>
        </ol>
        <t indent="0" pn="section-4.1-3">Additionally, a malicious non-member can reroute handshakes between honest group members
to connect them in unintended ways, as described below. Note that a partial mitigation for
this class of attack is available: each group member includes the Server Name Indication (SNI) extension <xref target="RFC6066" format="default" sectionFormat="of" derivedContent="RFC6066"/>
and terminates the connection on mismatch between the presented SNI value and the
	receiving member's known identity. See <xref target="Selfie" format="default" sectionFormat="of" derivedContent="Selfie"/> for details.</t>
        <t indent="0" pn="section-4.1-4">To illustrate the rerouting attack, consider three peers, <tt>A</tt>, <tt>B</tt>, and <tt>C</tt>,
who all know the PSK. The attack proceeds as follows:</t>
        <ol spacing="normal" type="1" indent="adaptive" start="1" pn="section-4.1-5">
          <li pn="section-4.1-5.1" derivedCounter="1.">
            <tt>A</tt> sends a <tt>ClientHello</tt> to <tt>B</tt>.</li>
          <li pn="section-4.1-5.2" derivedCounter="2.">The attacker intercepts the message and redirects it to <tt>C</tt>.</li>
          <li pn="section-4.1-5.3" derivedCounter="3.">
            <tt>C</tt> responds with a second flight (<tt>ServerHello</tt>, ...) to <tt>A</tt>.</li>
          <li pn="section-4.1-5.4" derivedCounter="4.">
            <tt>A</tt> sends a <tt>Finished</tt> message to <tt>B</tt>.
<tt>A</tt> has completed the handshake, ostensibly with <tt>B</tt>.</li>
          <li pn="section-4.1-5.5" derivedCounter="5.">The attacker redirects the <tt>Finished</tt> message to <tt>C</tt>.
<tt>C</tt> has completed the handshake with <tt>A</tt>.</li>
        </ol>
        <t indent="0" pn="section-4.1-6">In this attack, peer authentication is not provided. Also, if <tt>C</tt> supports a
weaker set of ciphersuites than <tt>B</tt>, cryptographic algorithm downgrade attacks
might be possible. This rerouting is a type of identity misbinding attack
<xref target="Krawczyk" format="default" sectionFormat="of" derivedContent="Krawczyk"/> <xref target="Sethi" format="default" sectionFormat="of" derivedContent="Sethi"/>. Selfie attack <xref target="Selfie" format="default" sectionFormat="of" derivedContent="Selfie"/> is a special case of the rerouting
attack against a group member that can act as both a TLS server and a client. In the
Selfie attack, a malicious non-member reroutes a connection from the client to
the server on the same endpoint.</t>
        <t indent="0" pn="section-4.1-7">Finally, in addition to these weaknesses, sharing a PSK across nodes may negatively
affect deployments. For example, revocation of individual group members is not
possible without establishing a new PSK for all of the members that have not been revoked.</t>
      </section>
      <section anchor="entropy" numbered="true" toc="include" removeInRFC="false" pn="section-4.2">
        <name slugifiedName="name-psk-entropy">PSK Entropy</name>
        <t indent="0" pn="section-4.2-1">Entropy properties of external PSKs may also affect TLS security properties. For example,
if a high-entropy PSK is used, then PSK-only key establishment modes provide expected
security properties for TLS, including establishment of the same
session keys between peers, secrecy of session keys, peer authentication, and downgrade
protection. See <xref section="E.1" sectionFormat="of" target="RFC8446" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8446#appendix-E.1" derivedContent="RFC8446"/> for an explanation of these properties.
However, these modes lack forward security. Forward security may be achieved by using a
PSK-DH mode or by using PSKs with short lifetimes.</t>
        <t indent="0" pn="section-4.2-2">In contrast, if a low-entropy PSK is used, then PSK-only key establishment modes
are subject to passive exhaustive search attacks, which will reveal the
traffic keys. PSK-DH modes are subject to active attacks in which the attacker
impersonates one side. The exhaustive search phase of these attacks can be mounted
offline if the attacker captures a single handshake using the PSK, but those
attacks will not lead to compromise of the traffic keys for that connection because
those also depend on the Diffie-Hellman (DH) exchange. Low-entropy keys are only
secure against active attack if a Password-Authenticated Key Exchange (PAKE) is used
with TLS. At the time of writing, the Crypto Forum Research Group (CFRG) is working on specifying
recommended PAKEs (see <xref target="I-D.irtf-cfrg-cpace" format="default" sectionFormat="of" derivedContent="CPACE"/> and <xref target="I-D.irtf-cfrg-opaque" format="default" sectionFormat="of" derivedContent="OPAQUE"/> for
the symmetric and asymmetric cases, respectively).</t>
      </section>
    </section>
    <section anchor="external-psks-in-practice" numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-external-psks-in-practice">External PSKs in Practice</name>
      <t indent="0" pn="section-5-1">PSK ciphersuites were first specified for TLS in 2005. PSKs are now an integral
part of the TLS 1.3 specification <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/>. TLS 1.3 also uses PSKs for session resumption.
It distinguishes these resumption PSKs from external PSKs that have been provisioned out of band.
This section describes known use cases and provisioning processes for external PSKs with TLS.</t>
      <section anchor="use-cases" numbered="true" toc="include" removeInRFC="false" pn="section-5.1">
        <name slugifiedName="name-use-cases">Use Cases</name>
        <t indent="0" pn="section-5.1-1">This section lists some example use cases where pairwise external PSKs (i.e., external
PSKs that are shared between only one server and one client) have been used for authentication
in TLS.  There was no attempt to prioritize the examples in any particular order.</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.1-2">
          <li pn="section-5.1-2.1">Device-to-device communication with out-of-band synchronized keys. PSKs provisioned out of band
for communicating with known identities, wherein the identity to use is discovered via a different
online protocol.</li>
          <li pn="section-5.1-2.2">Intra-data-center communication. Machine-to-machine communication within a single data center
or Point of Presence (PoP) may use externally provisioned PSKs; this is primarily for the purpose of supporting TLS
connections with early data. See <xref target="security-con" format="default" sectionFormat="of" derivedContent="Section 8"/> for considerations when using early data
with external PSKs.</li>
          <li pn="section-5.1-2.3">Certificateless server-to-server communication. Machine-to-machine communication
may use externally provisioned PSKs; this is primarily for the purposes of establishing TLS
connections without requiring the overhead of provisioning and managing PKI certificates.</li>
          <li pn="section-5.1-2.4">Internet of Things (IoT) and devices with limited computational capabilities.
<xref target="RFC7925" format="default" sectionFormat="of" derivedContent="RFC7925"/> defines TLS and DTLS profiles for resource-constrained devices and suggests
the use of PSK ciphersuites for compliant devices. The Open Mobile Alliance Lightweight Machine-to-Machine (LwM2M) Technical Specification <xref target="LwM2M" format="default" sectionFormat="of" derivedContent="LwM2M"/>  states that LwM2M servers <bcp14>MUST</bcp14> support the
PSK mode of DTLS.</li>
          <li pn="section-5.1-2.5">Securing RADIUS <xref target="RFC2865" format="default" sectionFormat="of" derivedContent="RFC2865"/> with TLS. PSK ciphersuites are optional for this use case, as specified
	  in <xref target="RFC6614" format="default" sectionFormat="of" derivedContent="RFC6614"/>.</li>
          <li pn="section-5.1-2.6">3GPP server-to-user equipment authentication. The Generic Authentication Architecture (GAA) defined by
	  3GPP mentions that TLS PSK ciphersuites can be used between server and user equipment for authentication <xref target="GAA" format="default" sectionFormat="of" derivedContent="GAA"/>.</li>
          <li pn="section-5.1-2.7">Smart Cards. The German electronic Identity (eID) card supports authentication of a card holder to
online services with TLS PSK <xref target="SmartCard" format="default" sectionFormat="of" derivedContent="SmartCard"/>.</li>
          <li pn="section-5.1-2.8">Quantum resistance. Some deployments may use PSKs (or combine them with certificate-based
authentication as described in <xref target="RFC8773" format="default" sectionFormat="of" derivedContent="RFC8773"/>) because of the protection they provide against
quantum computers.</li>
        </ul>
        <t indent="0" pn="section-5.1-3">There are also use cases where PSKs are shared between more than two entities. Some examples below
(as noted by Akhmetzyanova, et al. <xref target="AASS19" format="default" sectionFormat="of" derivedContent="AASS19"/>):</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.1-4">
          <li pn="section-5.1-4.1">Group chats. In this use case, group participants may be provisioned an external PSK out of band for establishing
authenticated connections with other members of the group.</li>
          <li pn="section-5.1-4.2">IoT and devices with limited computational capabilities. Many PSK provisioning examples are
possible in this use case. For example, in a given setting, IoT devices may all share the same PSK and use it to
communicate with a central server (one key for n devices), have their own key for communicating with a central server (n
keys for n devices), or have pairwise keys for communicating with each other (n<sup>2</sup> keys for n devices).</li>
        </ul>
      </section>
      <section anchor="provisioning-examples" numbered="true" toc="include" removeInRFC="false" pn="section-5.2">
        <name slugifiedName="name-provisioning-examples">Provisioning Examples</name>
        <t indent="0" pn="section-5.2-1">The exact provisioning process depends on the system requirements and threat
model. Whenever possible, avoid sharing a PSK between nodes; however, sharing
a PSK among several nodes is sometimes unavoidable. When PSK sharing happens,
other accommodations <bcp14>SHOULD</bcp14> be used as discussed in <xref target="recommendations" format="default" sectionFormat="of" derivedContent="Section 6"/>.</t>
        <t indent="0" pn="section-5.2-2">Examples of PSK provisioning processes are included below.</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.2-3">
          <li pn="section-5.2-3.1">Many industrial protocols assume that PSKs are distributed and assigned manually via one of the following
approaches: (1) typing the PSK into the devices or (2) using a trust-on-first-use (TOFU) approach with a device
completely unprotected before the first login took place. Many devices have a very limited UI. For example,
they may only have a numeric keypad or even fewer buttons. When the TOFU approach is not suitable,
entering the key would require typing it on a constrained UI.</li>
          <li pn="section-5.2-3.2">Some devices provision PSKs via an out-of-band, cloud-based syncing protocol.</li>
          <li pn="section-5.2-3.3">Some secrets may be baked into hardware or software device components. Moreover, when this is done
at manufacturing time, secrets may be printed on labels or included in a Bill of Materials for ease of
scanning or import.</li>
        </ul>
      </section>
      <section anchor="provisioning-constraints" numbered="true" toc="include" removeInRFC="false" pn="section-5.3">
        <name slugifiedName="name-provisioning-constraints">Provisioning Constraints</name>
        <t indent="0" pn="section-5.3-1">PSK provisioning systems are often constrained in application-specific ways. For example, although one goal of
provisioning is to ensure that each pair of nodes has a unique key pair, some systems do not want to distribute
pairwise shared keys to achieve this. As another example, some systems require the provisioning process to embed
application-specific information in either PSKs or their identities. Identities may sometimes need to be routable,
as is currently under discussion for <xref target="I-D.mattsson-emu-eap-tls-psk" format="default" sectionFormat="of" derivedContent="EAP-TLS-PSK"/>.</t>
      </section>
    </section>
    <section anchor="recommendations" numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-recommendations-for-externa">Recommendations for External PSK Usage</name>
      <t indent="0" pn="section-6-1">Recommended requirements for applications using external PSKs are as follows:</t>
      <ol spacing="normal" type="1" indent="adaptive" start="1" pn="section-6-2">
        <li pn="section-6-2.1" derivedCounter="1.">Each PSK <bcp14>SHOULD</bcp14> be derived from at least 128 bits of entropy, <bcp14>MUST</bcp14> be at least
128 bits long, and <bcp14>SHOULD</bcp14> be combined with an ephemeral key exchange, e.g., by using the
"psk_dhe_ke" Pre-Shared Key Exchange Mode in TLS 1.3 for forward secrecy. As
discussed in <xref target="sec-properties" format="default" sectionFormat="of" derivedContent="Section 4"/>, low-entropy PSKs (i.e., those derived from less
than 128 bits of entropy) are subject to attack and <bcp14>SHOULD</bcp14> be avoided. If only
low-entropy keys are available, then key establishment mechanisms such as PAKE that mitigate the risk of offline dictionary attacks
<bcp14>SHOULD</bcp14> be employed. Note that no such mechanisms have yet been standardized, and further
that these mechanisms will not necessarily follow the same architecture as the
process for incorporating external PSKs described in <xref target="RFC9258" format="default" sectionFormat="of" derivedContent="RFC9258"/>.</li>
        <li pn="section-6-2.2" derivedCounter="2.">Unless other accommodations are made to mitigate the risks of PSKs known to a group, each PSK <bcp14>MUST</bcp14> be restricted in
its use to at most two logical nodes: one logical node in a TLS client
role and one logical node in a TLS server role. (The two logical nodes
<bcp14>MAY</bcp14> be the same, in different roles.) Two acceptable accommodations
are described in <xref target="RFC9258" format="default" sectionFormat="of" derivedContent="RFC9258"/>: (1) exchanging
client and server identifiers over the TLS connection after the
handshake and (2) incorporating identifiers for both the client and the
server into the context string for an external PSK importer.</li>
        <li pn="section-6-2.3" derivedCounter="3.">Nodes <bcp14>SHOULD</bcp14> use external PSK importers <xref target="RFC9258" format="default" sectionFormat="of" derivedContent="RFC9258"/>
when configuring PSKs for a client-server pair when applicable. Importers make provisioning
external PSKs easier and less error-prone by deriving a unique, imported PSK from the
external PSK for each key derivation function a node supports. See the Security Considerations of
<xref target="RFC9258" format="default" sectionFormat="of" derivedContent="RFC9258"/> for more information.</li>
        <li pn="section-6-2.4" derivedCounter="4.">Where possible, the main PSK (that which is fed into the importer) <bcp14>SHOULD</bcp14> be
deleted after the imported keys have been generated. This prevents an attacker
from bootstrapping a compromise of one node into the ability to attack connections
between any node; otherwise, the attacker can recover the main key and then
re-run the importer itself.</li>
      </ol>
      <section anchor="stack-interfaces" numbered="true" toc="include" removeInRFC="false" pn="section-6.1">
        <name slugifiedName="name-stack-interfaces">Stack Interfaces</name>
        <t indent="0" pn="section-6.1-1">Most major TLS implementations support external PSKs. Stacks supporting external PSKs
provide interfaces that applications may use when configuring PSKs for individual
connections. Details about some existing stacks at the time of writing are below.</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-6.1-2">
          <li pn="section-6.1-2.1">OpenSSL and BoringSSL: Applications can specify support for external PSKs via
distinct ciphersuites in TLS 1.2 and below. Also, they can then configure callbacks that are invoked for
PSK selection during the handshake. These callbacks must provide a PSK identity and key. The
exact format of the callback depends on the negotiated TLS protocol version, with new callback
functions added specifically to OpenSSL for TLS 1.3 <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/> PSK support. The PSK length is validated to be between 1-256 bytes (inclusive). The PSK identity may be up to 128 bytes long.</li>
          <li pn="section-6.1-2.2">mbedTLS: Client applications configure PSKs before creating a connection by providing the PSK
identity and value inline. Servers must implement callbacks similar to that of OpenSSL. Both PSK
identity and key lengths may be between 1-16 bytes long (inclusive).</li>
          <li pn="section-6.1-2.3">gnuTLS: Applications configure PSK values as either raw byte strings or
hexadecimal strings. The PSK identity and key size are not validated.</li>
          <li pn="section-6.1-2.4">wolfSSL: Applications configure PSKs with callbacks similar to OpenSSL.</li>
        </ul>
        <section anchor="psk-identity-encoding-and-comparison" numbered="true" toc="include" removeInRFC="false" pn="section-6.1.1">
          <name slugifiedName="name-psk-identity-encoding-and-c">PSK Identity Encoding and Comparison</name>
          <t indent="0" pn="section-6.1.1-1"><xref target="RFC4279" sectionFormat="of" section="5.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4279#section-5.1" derivedContent="RFC4279"/> mandates that the PSK identity should be first converted to a character string and then
encoded to octets using UTF-8. This was done to avoid interoperability problems (especially when the identity is
configured by human users).  On the other hand, <xref target="RFC7925" format="default" sectionFormat="of" derivedContent="RFC7925"/> advises  implementations against assuming any structured
format for PSK identities and recommends byte-by-byte comparison for any operation. When PSK identities are configured
manually, it is important to be aware that visually identical strings may, in fact, differ due to encoding issues.</t>
          <t indent="0" pn="section-6.1.1-2">TLS 1.3 <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/> follows the same practice of specifying
the PSK identity as a sequence of opaque bytes (shown as opaque identity&lt;1..2^16-1&gt;
in the specification) that thus is compared on a byte-by-byte basis.
<xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/> also requires that the PSK identities are at
least 1 byte and at the most 65535 bytes in length. Although <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/> does not
place strict requirements on the format of PSK identities, note that
the format of PSK identities can vary depending on the deployment:</t>
          <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-6.1.1-3">
            <li pn="section-6.1.1-3.1">The PSK identity <bcp14>MAY</bcp14> be a user-configured string when used in protocols like
Extensible Authentication Protocol (EAP) <xref target="RFC3748" format="default" sectionFormat="of" derivedContent="RFC3748"/>. For example, gnuTLS treats
PSK identities as usernames.</li>
            <li pn="section-6.1.1-3.2">PSK identities <bcp14>MAY</bcp14> have a domain name suffix for roaming and federation. In
applications and settings where the domain name suffix is privacy sensitive, this
practice is <bcp14>NOT RECOMMENDED</bcp14>.</li>
            <li pn="section-6.1.1-3.3">Deployments should take care that the length of the PSK identity is sufficient
to avoid collisions.</li>
          </ul>
        </section>
        <section anchor="psk-identity-collisions" numbered="true" toc="include" removeInRFC="false" pn="section-6.1.2">
          <name slugifiedName="name-psk-identity-collisions">PSK Identity Collisions</name>
          <t indent="0" pn="section-6.1.2-1">It is possible, though unlikely, that an external PSK identity may clash with a
resumption PSK identity. The TLS stack implementation and sequencing of PSK callbacks
influences the application's behavior when identity collisions occur. When a server
receives a PSK identity in a TLS 1.3 ClientHello, some TLS stacks
execute the application's registered callback function before checking the stack's
internal session resumption cache. This means that if a PSK identity collision occurs,
the application's external PSK usage will typically take precedence over the internal
session resumption path.</t>
          <t indent="0" pn="section-6.1.2-2">Because resumption PSK identities are assigned by the TLS stack implementation,
it is <bcp14>RECOMMENDED</bcp14> that these identifiers be assigned in a manner that lets
resumption PSKs be distinguished from external PSKs to avoid concerns with
collisions altogether.</t>
        </section>
      </section>
    </section>
    <section anchor="endpoint-privacy" numbered="true" toc="include" removeInRFC="false" pn="section-7">
      <name slugifiedName="name-privacy-considerations">Privacy Considerations</name>
      <t indent="0" pn="section-7-1">PSK privacy properties are orthogonal to security properties described in <xref target="sec-properties" format="default" sectionFormat="of" derivedContent="Section 4"/>.
TLS does little to keep PSK identity information private. For example,
an adversary learns information about the external PSK or its identifier by virtue of the identifier
appearing in cleartext in a ClientHello. As a result, a passive adversary can link two or
more connections together that use the same external PSK on the wire. Depending on the PSK
identity, a passive attacker may also be able to identify the device, person, or enterprise
running the TLS client or TLS server. An active attacker can also use the PSK identity to
suppress handshakes or application data from a specific device by blocking, delaying, or
rate-limiting traffic. Techniques for mitigating these risks require further analysis and are out
of scope for this document.</t>
      <t indent="0" pn="section-7-2">In addition to linkability in the network, external PSKs are intrinsically linkable
by PSK receivers. Specifically, servers can link successive connections that use the
same external PSK together. Preventing this type of linkability is out of scope.</t>
    </section>
    <section anchor="security-con" numbered="true" toc="include" removeInRFC="false" pn="section-8">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-8-1">Security considerations are provided throughout this document.  It bears
repeating that there are concerns related to the use of external PSKs regarding
proper identification of TLS 1.3 endpoints and additional risks when external
PSKs are known to a group.</t>
      <t indent="0" pn="section-8-2">It is <bcp14>NOT RECOMMENDED</bcp14> to share the same PSK between more than one client and server.
However, as discussed in <xref target="use-cases" format="default" sectionFormat="of" derivedContent="Section 5.1"/>, there are application scenarios that may
rely on sharing the same PSK among multiple nodes. <xref target="RFC9258" format="default" sectionFormat="of" derivedContent="RFC9258"/>
helps in mitigating rerouting and Selfie-style reflection attacks when the PSK
is shared among multiple nodes. This is achieved by correctly using the node
identifiers in the ImportedIdentity.context construct specified in
<xref target="RFC9258" format="default" sectionFormat="of" derivedContent="RFC9258"/>. One solution would be for each endpoint
to select one globally unique identifier to use in all PSK handshakes. The
unique identifier can, for example, be one of its Media Access Control (MAC) addresses, a 32-byte
random number, or its Universally Unique IDentifier (UUID) <xref target="RFC4122" format="default" sectionFormat="of" derivedContent="RFC4122"/>.
Note that such persistent, global identifiers have privacy implications;
see <xref target="endpoint-privacy" format="default" sectionFormat="of" derivedContent="Section 7"/>.</t>
      <t indent="0" pn="section-8-3">Each endpoint <bcp14>SHOULD</bcp14> know the identifier of the other endpoint with which it wants
to connect and <bcp14>SHOULD</bcp14> compare it with the other endpoint's identifier used in
ImportedIdentity.context. However, it is important to remember that endpoints
sharing the same group PSK can always impersonate each other.</t>
      <t indent="0" pn="section-8-4">Considerations for external PSK usage extend beyond proper identification.
When early data is used with an external PSK, the random value in the ClientHello
is the only source of entropy that contributes to key diversity between sessions.
As a result, when an external PSK is used more than one time, the random number
source on the client has a significant role in the protection of the early data.</t>
    </section>
    <section anchor="IANA" numbered="true" toc="include" removeInRFC="false" pn="section-9">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-9-1">This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <displayreference target="I-D.ietf-tls-ctls" to="CTLS"/>
    <displayreference target="I-D.irtf-cfrg-cpace" to="CPACE"/>
    <displayreference target="I-D.irtf-cfrg-opaque" to="OPAQUE"/>
    <displayreference target="I-D.mattsson-emu-eap-tls-psk" to="EAP-TLS-PSK"/>
    <references pn="section-10">
      <name slugifiedName="name-references">References</name>
      <references pn="section-10.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t indent="0">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="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t indent="0">RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446" quoteTitle="true" derivedAnchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author initials="E." surname="Rescorla" fullname="E. Rescorla">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2018" month="August"/>
            <abstract>
              <t indent="0">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>
              <t indent="0">This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC9258" target="https://www.rfc-editor.org/info/rfc9258" quoteTitle="true" derivedAnchor="RFC9258">
          <front>
            <title>Importing External Pre-Shared Keys (PSKs) for TLS 1.3</title>
            <author initials="D" surname="Benjamin" fullname="David Benjamin">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="C. A." surname="Wood" fullname="Christopher Wood">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="July" year="2022"/>
          </front>
          <seriesInfo name="RFC" value="9258"/>
          <seriesInfo name="DOI" value="10.17487/RFC9258"/>
        </reference>
      </references>
      <references pn="section-10.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="AASS19" target="https://eprint.iacr.org/2019/421.pdf" quoteTitle="true" derivedAnchor="AASS19">
          <front>
            <title>Continuing to reflect on TLS 1.3 with external PSK</title>
            <author initials="L" surname="Akhmetzyanova" fullname="Liliya Akhmetzyanov">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="E" surname="Alekseev" fullname="Evgeny Alekseev">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="E" surname="Smyshlyaeva" fullname="Ekaterina Smyshlyaeva">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="A" surname="Sokolov" fullname="Alexandr Sokolov">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="April" year="2019"/>
          </front>
        </reference>
        <reference anchor="I-D.irtf-cfrg-cpace" quoteTitle="true" target="https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-cpace-06" derivedAnchor="CPACE">
          <front>
            <title>CPace, a balanced composable PAKE</title>
            <author fullname="Michel Abdalla">
              <organization showOnFrontPage="true">DFINITY - Zurich</organization>
            </author>
            <author fullname="Bjoern Haase">
              <organization showOnFrontPage="true">Endress + Hauser Liquid Analysis - Gerlingen</organization>
            </author>
            <author fullname="Julia Hesse">
              <organization showOnFrontPage="true">IBM Research Europe - Zurich</organization>
            </author>
            <date month="July" day="24" year="2022"/>
            <abstract>
              <t indent="0">   This document describes CPace which is a protocol that allows two
   parties that share a low-entropy secret (password) to derive a strong
   shared key without disclosing the secret to offline dictionary
   attacks.  The CPace protocol was tailored for constrained devices, is
   compatible with any cyclic group of prime- and non-prime order.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-cpace-06"/>
          <format type="TXT" target="https://www.ietf.org/archive/id/draft-irtf-cfrg-cpace-06.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="I-D.ietf-tls-ctls" quoteTitle="true" target="https://datatracker.ietf.org/doc/html/draft-ietf-tls-ctls-06" derivedAnchor="CTLS">
          <front>
            <title>Compact TLS 1.3</title>
            <author fullname="Eric Rescorla">
              <organization showOnFrontPage="true">Mozilla</organization>
            </author>
            <author fullname="Richard Barnes">
              <organization showOnFrontPage="true">Cisco</organization>
            </author>
            <author fullname="Hannes Tschofenig">
              <organization showOnFrontPage="true">Arm Limited</organization>
            </author>
            <author fullname="Benjamin M. Schwartz">
              <organization showOnFrontPage="true">Google</organization>
            </author>
            <date month="July" day="9" year="2022"/>
            <abstract>
              <t indent="0">   This document specifies a "compact" version of TLS and DTLS.  It is
   logically isomorphic to ordinary TLS, but saves space by trimming
   obsolete material, tighter encoding, a template-based specialization
   technique, and alternative cryptographic techniques. cTLS is not
   directly interoperable with TLS or DTLS, but it should eventually be
   possible for a single server port to offer cTLS alongside TLS or
   DTLS.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-ctls-06"/>
          <format type="TXT" target="https://www.ietf.org/archive/id/draft-ietf-tls-ctls-06.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="I-D.mattsson-emu-eap-tls-psk" quoteTitle="true" target="https://datatracker.ietf.org/doc/html/draft-mattsson-emu-eap-tls-psk-00" derivedAnchor="EAP-TLS-PSK">
          <front>
            <title>EAP-TLS with PSK Authentication (EAP-TLS-PSK)</title>
            <author fullname="John Preuß Mattsson">
              <organization showOnFrontPage="true">Ericsson</organization>
            </author>
            <author fullname="Mohit Sethi">
              <organization showOnFrontPage="true">Ericsson</organization>
            </author>
            <author fullname="Tuomas Aura">
              <organization showOnFrontPage="true">Aalto University</organization>
            </author>
            <author fullname="Owen Friel">
              <organization showOnFrontPage="true">Cisco</organization>
            </author>
            <date month="March" day="9" year="2020"/>
            <abstract>
              <t indent="0">   While TLS 1.3 supports authentication with Pre-Shared Key (PSK), EAP-
   TLS with TLS 1.3 explicitly forbids PSK authentication except when
   used for resumption.  This document specifies a separate EAP method
   (EAP-TLS-PSK) for use cases that require authentication based on
   external PSKs.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-mattsson-emu-eap-tls-psk-00"/>
          <format type="TXT" target="https://www.ietf.org/archive/id/draft-mattsson-emu-eap-tls-psk-00.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="GAA" target="https://www.etsi.org/deliver/etsi_tr/133900_133999/133919/12.00.00_60/tr_133919v120000p.pdf" quoteTitle="true" derivedAnchor="GAA">
          <front>
            <title>Digital cellular telecommunications system (Phase 2+); Universal Mobile Telecommunications System (UMTS); LTE; 3G Security; Generic Authentication Architecture (GAA); System description</title>
            <author>
              <organization showOnFrontPage="true">ETSI</organization>
            </author>
            <date month="October" year="2014"/>
          </front>
          <seriesInfo name="ETSI TR" value="133 919"/>
          <refcontent>version 12.0.0</refcontent>
        </reference>
        <reference anchor="Krawczyk" target="https://link.springer.com/content/pdf/10.1007/978-3-540-45146-4_24.pdf" quoteTitle="true" derivedAnchor="Krawczyk">
          <front>
            <title>SIGMA: The 'SIGn-and-MAc' Approach to Authenticated Diffie-Hellman and Its Use in the IKE Protocols</title>
            <author initials="H" surname="Krawczyk" fullname="Hugo Krawczyk">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2003"/>
          </front>
          <seriesInfo name="DOI" value="10.1007/978-3-540-45146-4_24"/>
        </reference>
        <reference anchor="LwM2M" target="http://www.openmobilealliance.org/release/LightweightM2M/V1_0-20170208-A/OMA-TS-LightweightM2M-V1_0-20170208-A.pdf" quoteTitle="true" derivedAnchor="LwM2M">
          <front>
            <title>Lightweight Machine to Machine Technical Specification</title>
            <author>
              <organization showOnFrontPage="true">Open Mobile Alliance</organization>
            </author>
            <date month="February" year="2017"/>
          </front>
          <refcontent>version 1.0</refcontent>
        </reference>
        <reference anchor="I-D.irtf-cfrg-opaque" quoteTitle="true" target="https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-opaque-09" derivedAnchor="OPAQUE">
          <front>
            <title>The OPAQUE Asymmetric PAKE Protocol</title>
            <author fullname="Daniel Bourdrez">
	 </author>
            <author fullname="Hugo Krawczyk">
              <organization showOnFrontPage="true">Algorand Foundation</organization>
            </author>
            <author fullname="Kevin Lewi">
              <organization showOnFrontPage="true">Novi Research</organization>
            </author>
            <author fullname="Christopher A. Wood">
              <organization showOnFrontPage="true">Cloudflare, Inc.</organization>
            </author>
            <date month="July" day="6" year="2022"/>
            <abstract>
              <t indent="0">   This document describes the OPAQUE protocol, a secure asymmetric
   password-authenticated key exchange (aPAKE) that supports mutual
   authentication in a client-server setting without reliance on PKI and
   with security against pre-computation attacks upon server compromise.
   In addition, the protocol provides forward secrecy and the ability to
   hide the password from the server, even during password registration.
   This document specifies the core OPAQUE protocol and one
   instantiation based on 3DH.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-opaque-09"/>
          <format type="TXT" target="https://www.ietf.org/archive/id/draft-irtf-cfrg-opaque-09.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="RFC2865" target="https://www.rfc-editor.org/info/rfc2865" quoteTitle="true" derivedAnchor="RFC2865">
          <front>
            <title>Remote Authentication Dial In User Service (RADIUS)</title>
            <author initials="C." surname="Rigney" fullname="C. Rigney">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Willens" fullname="S. Willens">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="A." surname="Rubens" fullname="A. Rubens">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="W." surname="Simpson" fullname="W. Simpson">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2000" month="June"/>
            <abstract>
              <t indent="0">This document describes a protocol for carrying authentication, authorization, and configuration information between a Network Access Server which desires to authenticate its links and a shared Authentication Server.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2865"/>
          <seriesInfo name="DOI" value="10.17487/RFC2865"/>
        </reference>
        <reference anchor="RFC3748" target="https://www.rfc-editor.org/info/rfc3748" quoteTitle="true" derivedAnchor="RFC3748">
          <front>
            <title>Extensible Authentication Protocol (EAP)</title>
            <author initials="B." surname="Aboba" fullname="B. Aboba">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="L." surname="Blunk" fullname="L. Blunk">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Vollbrecht" fullname="J. Vollbrecht">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Carlson" fullname="J. Carlson">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="H." surname="Levkowetz" fullname="H. Levkowetz" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2004" month="June"/>
            <abstract>
              <t indent="0">This document defines the Extensible Authentication Protocol (EAP), an authentication framework which supports multiple authentication methods.  EAP typically runs directly over data link layers such as Point-to-Point Protocol (PPP) or IEEE 802, without requiring IP.  EAP provides its own support for duplicate elimination and retransmission, but is reliant on lower layer ordering guarantees.  Fragmentation is not supported within EAP itself; however, individual EAP methods may support this.  This document obsoletes RFC 2284.  A summary of the changes between this document and RFC 2284 is available in Appendix A.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3748"/>
          <seriesInfo name="DOI" value="10.17487/RFC3748"/>
        </reference>
        <reference anchor="RFC4122" target="https://www.rfc-editor.org/info/rfc4122" quoteTitle="true" derivedAnchor="RFC4122">
          <front>
            <title>A Universally Unique IDentifier (UUID) URN Namespace</title>
            <author initials="P." surname="Leach" fullname="P. Leach">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Mealling" fullname="M. Mealling">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Salz" fullname="R. Salz">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2005" month="July"/>
            <abstract>
              <t indent="0">This specification defines a Uniform Resource Name namespace for UUIDs (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDentifier).  A UUID is 128 bits long, and can guarantee uniqueness across space and time.  UUIDs were originally used in the Apollo Network Computing System and later in the Open Software Foundation\'s (OSF) Distributed Computing Environment (DCE), and then in Microsoft Windows platforms.</t>
              <t indent="0">This specification is derived from the DCE specification with the kind permission of the OSF (now known as The Open Group).  Information from earlier versions of the DCE specification have been incorporated into this document.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4122"/>
          <seriesInfo name="DOI" value="10.17487/RFC4122"/>
        </reference>
        <reference anchor="RFC4279" target="https://www.rfc-editor.org/info/rfc4279" quoteTitle="true" derivedAnchor="RFC4279">
          <front>
            <title>Pre-Shared Key Ciphersuites for Transport Layer Security (TLS)</title>
            <author initials="P." surname="Eronen" fullname="P. Eronen" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="H." surname="Tschofenig" fullname="H. Tschofenig" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2005" month="December"/>
            <abstract>
              <t indent="0">This document specifies three sets of new ciphersuites for the Transport Layer Security (TLS) protocol to support authentication based on pre-shared keys (PSKs).  These pre-shared keys are symmetric keys, shared in advance among the communicating parties.  The first set of ciphersuites uses only symmetric key operations for authentication. The second set uses a Diffie-Hellman exchange authenticated with a pre-shared key, and the third set combines public key authentication of the server with pre-shared key authentication of the client.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4279"/>
          <seriesInfo name="DOI" value="10.17487/RFC4279"/>
        </reference>
        <reference anchor="RFC6066" target="https://www.rfc-editor.org/info/rfc6066" quoteTitle="true" derivedAnchor="RFC6066">
          <front>
            <title>Transport Layer Security (TLS) Extensions: Extension Definitions</title>
            <author initials="D." surname="Eastlake 3rd" fullname="D. Eastlake 3rd">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2011" month="January"/>
            <abstract>
              <t indent="0">This document provides specifications for existing TLS extensions.  It is a companion document for RFC 5246, "The Transport Layer Security (TLS) Protocol Version 1.2".  The extensions specified are server_name, max_fragment_length, client_certificate_url, trusted_ca_keys, truncated_hmac, and status_request.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6066"/>
          <seriesInfo name="DOI" value="10.17487/RFC6066"/>
        </reference>
        <reference anchor="RFC6614" target="https://www.rfc-editor.org/info/rfc6614" quoteTitle="true" derivedAnchor="RFC6614">
          <front>
            <title>Transport Layer Security (TLS) Encryption for RADIUS</title>
            <author initials="S." surname="Winter" fullname="S. Winter">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="McCauley" fullname="M. McCauley">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Venaas" fullname="S. Venaas">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="K." surname="Wierenga" fullname="K. Wierenga">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2012" month="May"/>
            <abstract>
              <t indent="0">This document specifies a transport profile for RADIUS using Transport Layer Security (TLS) over TCP as the transport protocol. This enables dynamic trust relationships between RADIUS servers.   [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6614"/>
          <seriesInfo name="DOI" value="10.17487/RFC6614"/>
        </reference>
        <reference anchor="RFC7925" target="https://www.rfc-editor.org/info/rfc7925" quoteTitle="true" derivedAnchor="RFC7925">
          <front>
            <title>Transport Layer Security (TLS) / Datagram Transport Layer Security (DTLS) Profiles for the Internet of Things</title>
            <author initials="H." surname="Tschofenig" fullname="H. Tschofenig" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Fossati" fullname="T. Fossati">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2016" month="July"/>
            <abstract>
              <t indent="0">A common design pattern in Internet of Things (IoT) deployments is the use of a constrained device that collects data via sensors or controls actuators for use in home automation, industrial control systems, smart cities, and other IoT deployments.</t>
              <t indent="0">This document defines a Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) 1.2 profile that offers communications security for this data exchange thereby preventing eavesdropping, tampering, and message forgery.  The lack of communication security is a common vulnerability in IoT products that can easily be solved by using these well-researched and widely deployed Internet security protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7925"/>
          <seriesInfo name="DOI" value="10.17487/RFC7925"/>
        </reference>
        <reference anchor="RFC8773" target="https://www.rfc-editor.org/info/rfc8773" quoteTitle="true" derivedAnchor="RFC8773">
          <front>
            <title>TLS 1.3 Extension for Certificate-Based Authentication with an External Pre-Shared Key</title>
            <author initials="R." surname="Housley" fullname="R. Housley">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2020" month="March"/>
            <abstract>
              <t indent="0">This document specifies a TLS 1.3 extension that allows a server to authenticate with a combination of a certificate and an external pre-shared key (PSK).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8773"/>
          <seriesInfo name="DOI" value="10.17487/RFC8773"/>
        </reference>
        <reference anchor="RFC9147" target="https://www.rfc-editor.org/info/rfc9147" quoteTitle="true" derivedAnchor="RFC9147">
          <front>
            <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
            <author initials="E." surname="Rescorla" fullname="E. Rescorla">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="H." surname="Tschofenig" fullname="H. Tschofenig">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="N." surname="Modadugu" fullname="N. Modadugu">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2022" month="April"/>
            <abstract>
              <t indent="0">This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t indent="0">The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability.  Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
              <t indent="0">This document obsoletes RFC 6347.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9147"/>
          <seriesInfo name="DOI" value="10.17487/RFC9147"/>
        </reference>
        <reference anchor="Selfie" target="https://eprint.iacr.org/2019/347.pdf" quoteTitle="true" derivedAnchor="Selfie">
          <front>
            <title>Selfie: reflections on TLS 1.3 with PSK</title>
            <author initials="N" surname="Drucker" fullname="Nir Drucker">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S" surname="Gueron" fullname="Shay Gueron">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="May" year="2021"/>
          </front>
          <seriesInfo name="DOI" value="10.1007/s00145-021-09387-y"/>
        </reference>
        <reference anchor="Sethi" target="https://arxiv.org/pdf/1902.07550" quoteTitle="true" derivedAnchor="Sethi">
          <front>
            <title>Misbinding Attacks on Secure Device Pairing and Bootstrapping</title>
            <author initials="M" surname="Sethi" fullname="Mohit Sethi">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="A" surname="Peltonen" fullname="Aleksi Peltonen">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T" surname="Aura" fullname="Tuomas Aura">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="May" year="2019"/>
          </front>
          <seriesInfo name="DOI" value="10.1145/3321705.3329813"/>
        </reference>
        <reference anchor="SmartCard" target="https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR03112/TR-03112-api_teil7.pdf?__blob=publicationFile&amp;v=1" quoteTitle="true" derivedAnchor="SmartCard">
          <front>
            <title>Technical Guideline TR-03112-7 eCard-API-Framework - Protocols</title>
            <author initials="" surname="" fullname="">
              <organization showOnFrontPage="true">Bundesamt für Sicherheit in der Informationstechnik</organization>
            </author>
            <date month="April" year="2015"/>
          </front>
          <refcontent>version 1.1.5</refcontent>
        </reference>
      </references>
    </references>
    <section anchor="acknowledgements" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.a-1">This document is the output of the TLS External PSK Design Team, comprised of the following members:
Benjamin Beurdouche,
<contact fullname="Björn Haase"/>,
<contact fullname="Christopher Wood"/>,
<contact fullname="Colm MacCarthaigh"/>,
<contact fullname="Eric Rescorla"/>,
<contact fullname="Jonathan Hoyland"/>,
<contact fullname="Martin Thomson"/>,
<contact fullname="Mohamad Badra"/>,
<contact fullname="Mohit Sethi"/>,
<contact fullname="Oleg Pekar"/>,
<contact fullname="Owen Friel"/>, and
<contact fullname="Russ Housley"/>.</t>
      <t indent="0" pn="section-appendix.a-2">This document was improved by high-quality reviews by <contact fullname="Ben Kaduk"/> and <contact fullname="John Preuß Mattsson"/>.</t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author initials="R." surname="Housley" fullname="Russ Housley">
        <organization abbrev="Vigil Security" showOnFrontPage="true">Vigil Security, LLC</organization>
        <address>
          <email>housley@vigilsec.com</email>
        </address>
      </author>
      <author initials="J." surname="Hoyland" fullname="Jonathan Hoyland">
        <organization showOnFrontPage="true">Cloudflare Ltd.</organization>
        <address>
          <email>jonathan.hoyland@gmail.com</email>
        </address>
      </author>
      <author initials="M." surname="Sethi" fullname="Mohit Sethi">
        <organization showOnFrontPage="true">Aalto University</organization>
        <address>
          <email>mohit@iki.fi</email>
        </address>
      </author>
      <author initials="C. A." surname="Wood" fullname="Christopher A. Wood">
        <organization showOnFrontPage="true">Cloudflare</organization>
        <address>
          <email>caw@heapingbits.net</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
