RFC 9257 INFORMATIONAL TLS · PRE-SHARED KEYS · SECURITY

External PSKs in TLS: Guidance for External Pre-Shared Key (PSK) Usage in TLS

When a secret agreed in advance can safely secure TLS 1.3, and the rules that keep it safe.

On rfc-editor.org ↗
PUBLISHED
July 2022
AUTHORS
R. Housley, J. Hoyland, M. Sethi, C. A. Wood
STREAM
IETF
MINIMUM PSK LENGTH
128 bits
MINIMUM PSK ENTROPY
At least 128 bits
NODES PER PSK
At most two logical nodes, one client and one server
RECOMMENDED KEY EXCHANGE MODE
psk_dhe_ke
TLS 1.3 PSK IDENTITY LENGTH
1 to 65535 bytes
PAIRWISE KEYS FOR N IOT DEVICES
n squared keys
DOI
10.17487/RFC9257
ERRATA
Reported errata

RFC text

Contents
Original text · RFC Editor View on rfc-editor.org ↗
Internet Engineering Task Force (IETF)                        R. Housley
Request for Comments: 9257                                Vigil Security
Category: Informational                                       J. Hoyland
ISSN: 2070-1721                                          Cloudflare Ltd.
                                                                M. Sethi
                                                        Aalto University
                                                              C. A. Wood
                                                              Cloudflare
                                                               July 2022


        Guidance for External Pre-Shared Key (PSK) Usage in TLS

Abstract

   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.

Status of This Memo

   This document is not an Internet Standards Track specification; it is
   published for informational purposes.

   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.

   Information about the current status of this document, any errata,
   and how to provide feedback on it may be obtained at
   https://www.rfc-editor.org/info/rfc9257.

Copyright Notice

   Copyright (c) 2022 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (https://trustee.ietf.org/license-info) 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.

Table of Contents

   1.  Introduction
   2.  Conventions and Definitions
   3.  Notation
   4.  PSK Security Properties
     4.1.  Shared PSKs
     4.2.  PSK Entropy
   5.  External PSKs in Practice
     5.1.  Use Cases
     5.2.  Provisioning Examples
     5.3.  Provisioning Constraints
   6.  Recommendations for External PSK Usage
     6.1.  Stack Interfaces
       6.1.1.  PSK Identity Encoding and Comparison
       6.1.2.  PSK Identity Collisions
   7.  Privacy Considerations
   8.  Security Considerations
   9.  IANA Considerations
   10. References
     10.1.  Normative References
     10.2.  Informative References
   Acknowledgements
   Authors' Addresses

1.  Introduction

   This document provides guidance on the use of external Pre-Shared
   Keys (PSKs) in Transport Layer Security (TLS) 1.3 [RFC8446].  This
   guidance also applies to Datagram TLS (DTLS) 1.3 [RFC9147] and
   Compact TLS 1.3 [CTLS].  For readability, this document uses the term
   "TLS" to refer to all such versions.

   External PSKs are symmetric secret keys provided to the TLS protocol
   implementation as external inputs.  External PSKs are provisioned out
   of band.

   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.

   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.

2.  Conventions and Definitions

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in
   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
   capitals, as shown here.

3.  Notation

   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.

4.  PSK Security Properties

   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 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 Section 7 for related discussion.

   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.

4.1.  Shared PSKs

   As discussed in Section 5.1, to demonstrate their attack, [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:

   1.  Any group member can impersonate any other group member.

   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).

   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.

   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 [RFC6066] and terminates the connection on mismatch
   between the presented SNI value and the receiving member's known
   identity.  See [Selfie] for details.

   To illustrate the rerouting attack, consider three peers, A, B, and
   C, who all know the PSK.  The attack proceeds as follows:

   1.  A sends a ClientHello to B.

   2.  The attacker intercepts the message and redirects it to C.

   3.  C responds with a second flight (ServerHello, ...) to A.

   4.  A sends a Finished message to B.  A has completed the handshake,
       ostensibly with B.

   5.  The attacker redirects the Finished message to C.  C has
       completed the handshake with A.

   In this attack, peer authentication is not provided.  Also, if C
   supports a weaker set of ciphersuites than B, cryptographic algorithm
   downgrade attacks might be possible.  This rerouting is a type of
   identity misbinding attack [Krawczyk] [Sethi].  Selfie attack
   [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.

   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.

4.2.  PSK Entropy

   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 Appendix E.1 of [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.

   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 [CPACE] and [OPAQUE] for
   the symmetric and asymmetric cases, respectively).

5.  External PSKs in Practice

   PSK ciphersuites were first specified for TLS in 2005.  PSKs are now
   an integral part of the TLS 1.3 specification [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.

5.1.  Use Cases

   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.

   *  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.

   *  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 Section 8 for
      considerations when using early data with external PSKs.

   *  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.

   *  Internet of Things (IoT) and devices with limited computational
      capabilities.  [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
      [LwM2M] states that LwM2M servers MUST support the PSK mode of
      DTLS.

   *  Securing RADIUS [RFC2865] with TLS.  PSK ciphersuites are optional
      for this use case, as specified in [RFC6614].

   *  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 [GAA].

   *  Smart Cards.  The German electronic Identity (eID) card supports
      authentication of a card holder to online services with TLS PSK
      [SmartCard].

   *  Quantum resistance.  Some deployments may use PSKs (or combine
      them with certificate-based authentication as described in
      [RFC8773]) because of the protection they provide against quantum
      computers.

   There are also use cases where PSKs are shared between more than two
   entities.  Some examples below (as noted by Akhmetzyanova, et al.
   [AASS19]):

   *  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.

   *  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^2 keys for n devices).

5.2.  Provisioning Examples

   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 SHOULD be used as
   discussed in Section 6.

   Examples of PSK provisioning processes are included below.

   *  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.

   *  Some devices provision PSKs via an out-of-band, cloud-based
      syncing protocol.

   *  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.

5.3.  Provisioning Constraints

   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 [EAP-TLS-PSK].

6.  Recommendations for External PSK Usage

   Recommended requirements for applications using external PSKs are as
   follows:

   1.  Each PSK SHOULD be derived from at least 128 bits of entropy,
       MUST be at least 128 bits long, and SHOULD 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 Section 4, low-entropy PSKs (i.e., those derived
       from less than 128 bits of entropy) are subject to attack and
       SHOULD be avoided.  If only low-entropy keys are available, then
       key establishment mechanisms such as PAKE that mitigate the risk
       of offline dictionary attacks SHOULD 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 [RFC9258].

   2.  Unless other accommodations are made to mitigate the risks of
       PSKs known to a group, each PSK MUST 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 MAY be the same, in different roles.)  Two acceptable
       accommodations are described in [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.

   3.  Nodes SHOULD use external PSK importers [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 [RFC9258] for more information.

   4.  Where possible, the main PSK (that which is fed into the
       importer) SHOULD 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.

6.1.  Stack Interfaces

   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.

   *  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 [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.

   *  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).

   *  gnuTLS: Applications configure PSK values as either raw byte
      strings or hexadecimal strings.  The PSK identity and key size are
      not validated.

   *  wolfSSL: Applications configure PSKs with callbacks similar to
      OpenSSL.

6.1.1.  PSK Identity Encoding and Comparison

   Section 5.1 of [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, [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.

   TLS 1.3 [RFC8446] follows the same practice of specifying the PSK
   identity as a sequence of opaque bytes (shown as opaque
   identity<1..2^16-1> in the specification) that thus is compared on a
   byte-by-byte basis.  [RFC8446] also requires that the PSK identities
   are at least 1 byte and at the most 65535 bytes in length.  Although
   [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:

   *  The PSK identity MAY be a user-configured string when used in
      protocols like Extensible Authentication Protocol (EAP) [RFC3748].
      For example, gnuTLS treats PSK identities as usernames.

   *  PSK identities MAY have a domain name suffix for roaming and
      federation.  In applications and settings where the domain name
      suffix is privacy sensitive, this practice is NOT RECOMMENDED.

   *  Deployments should take care that the length of the PSK identity
      is sufficient to avoid collisions.

6.1.2.  PSK Identity Collisions

   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.

   Because resumption PSK identities are assigned by the TLS stack
   implementation, it is RECOMMENDED that these identifiers be assigned
   in a manner that lets resumption PSKs be distinguished from external
   PSKs to avoid concerns with collisions altogether.

7.  Privacy Considerations

   PSK privacy properties are orthogonal to security properties
   described in 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.

   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.

8.  Security Considerations

   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.

   It is NOT RECOMMENDED to share the same PSK between more than one
   client and server.  However, as discussed in Section 5.1, there are
   application scenarios that may rely on sharing the same PSK among
   multiple nodes.  [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 [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)
   [RFC4122].  Note that such persistent, global identifiers have
   privacy implications; see Section 7.

   Each endpoint SHOULD know the identifier of the other endpoint with
   which it wants to connect and SHOULD 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.

   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.

9.  IANA Considerations

   This document has no IANA actions.

10.  References

10.1.  Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/info/rfc2119>.

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/info/rfc8174>.

   [RFC8446]  Rescorla, E., "The Transport Layer Security (TLS) Protocol
              Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
              <https://www.rfc-editor.org/info/rfc8446>.

   [RFC9258]  Benjamin, D. and C. A. Wood, "Importing External Pre-
              Shared Keys (PSKs) for TLS 1.3", RFC 9258,
              DOI 10.17487/RFC9258, July 2022,
              <https://www.rfc-editor.org/info/rfc9258>.

10.2.  Informative References

   [AASS19]   Akhmetzyanova, L., Alekseev, E., Smyshlyaeva, E., and A.
              Sokolov, "Continuing to reflect on TLS 1.3 with external
              PSK", April 2019, <https://eprint.iacr.org/2019/421.pdf>.

   [CPACE]    Abdalla, M., Haase, B., and J. Hesse, "CPace, a balanced
              composable PAKE", Work in Progress, Internet-Draft, draft-
              irtf-cfrg-cpace-06, 24 July 2022,
              <https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-
              cpace-06>.

   [CTLS]     Rescorla, E., Barnes, R., Tschofenig, H., and B. M.
              Schwartz, "Compact TLS 1.3", Work in Progress, Internet-
              Draft, draft-ietf-tls-ctls-06, 9 July 2022,
              <https://datatracker.ietf.org/doc/html/draft-ietf-tls-
              ctls-06>.

   [EAP-TLS-PSK]
              Mattsson, J. P., Sethi, M., Aura, T., and O. Friel, "EAP-
              TLS with PSK Authentication (EAP-TLS-PSK)", Work in
              Progress, Internet-Draft, draft-mattsson-emu-eap-tls-psk-
              00, 9 March 2020, <https://datatracker.ietf.org/doc/html/
              draft-mattsson-emu-eap-tls-psk-00>.

   [GAA]      ETSI, "Digital cellular telecommunications system (Phase
              2+); Universal Mobile Telecommunications System (UMTS);
              LTE; 3G Security; Generic Authentication Architecture
              (GAA); System description", version 12.0.0, ETSI TR 133
              919, October 2014, <https://www.etsi.org/deliver/
              etsi_tr/133900_133999/133919/12.00.00_60/
              tr_133919v120000p.pdf>.

   [Krawczyk] Krawczyk, H., "SIGMA: The 'SIGn-and-MAc' Approach to
              Authenticated Diffie-Hellman and Its Use in the IKE
              Protocols", DOI 10.1007/978-3-540-45146-4_24, 2003,
              <https://link.springer.com/content/
              pdf/10.1007/978-3-540-45146-4_24.pdf>.

   [LwM2M]    Open Mobile Alliance, "Lightweight Machine to Machine
              Technical Specification", version 1.0, February 2017,
              <http://www.openmobilealliance.org/release/LightweightM2M/
              V1_0-20170208-A/OMA-TS-LightweightM2M-
              V1_0-20170208-A.pdf>.

   [OPAQUE]   Bourdrez, D., Krawczyk, H., Lewi, K., and C. A. Wood, "The
              OPAQUE Asymmetric PAKE Protocol", Work in Progress,
              Internet-Draft, draft-irtf-cfrg-opaque-09, 6 July 2022,
              <https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-
              opaque-09>.

   [RFC2865]  Rigney, C., Willens, S., Rubens, A., and W. Simpson,
              "Remote Authentication Dial In User Service (RADIUS)",
              RFC 2865, DOI 10.17487/RFC2865, June 2000,
              <https://www.rfc-editor.org/info/rfc2865>.

   [RFC3748]  Aboba, B., Blunk, L., Vollbrecht, J., Carlson, J., and H.
              Levkowetz, Ed., "Extensible Authentication Protocol
              (EAP)", RFC 3748, DOI 10.17487/RFC3748, June 2004,
              <https://www.rfc-editor.org/info/rfc3748>.

   [RFC4122]  Leach, P., Mealling, M., and R. Salz, "A Universally
              Unique IDentifier (UUID) URN Namespace", RFC 4122,
              DOI 10.17487/RFC4122, July 2005,
              <https://www.rfc-editor.org/info/rfc4122>.

   [RFC4279]  Eronen, P., Ed. and H. Tschofenig, Ed., "Pre-Shared Key
              Ciphersuites for Transport Layer Security (TLS)",
              RFC 4279, DOI 10.17487/RFC4279, December 2005,
              <https://www.rfc-editor.org/info/rfc4279>.

   [RFC6066]  Eastlake 3rd, D., "Transport Layer Security (TLS)
              Extensions: Extension Definitions", RFC 6066,
              DOI 10.17487/RFC6066, January 2011,
              <https://www.rfc-editor.org/info/rfc6066>.

   [RFC6614]  Winter, S., McCauley, M., Venaas, S., and K. Wierenga,
              "Transport Layer Security (TLS) Encryption for RADIUS",
              RFC 6614, DOI 10.17487/RFC6614, May 2012,
              <https://www.rfc-editor.org/info/rfc6614>.

   [RFC7925]  Tschofenig, H., Ed. and T. Fossati, "Transport Layer
              Security (TLS) / Datagram Transport Layer Security (DTLS)
              Profiles for the Internet of Things", RFC 7925,
              DOI 10.17487/RFC7925, July 2016,
              <https://www.rfc-editor.org/info/rfc7925>.

   [RFC8773]  Housley, R., "TLS 1.3 Extension for Certificate-Based
              Authentication with an External Pre-Shared Key", RFC 8773,
              DOI 10.17487/RFC8773, March 2020,
              <https://www.rfc-editor.org/info/rfc8773>.

   [RFC9147]  Rescorla, E., Tschofenig, H., and N. Modadugu, "The
              Datagram Transport Layer Security (DTLS) Protocol Version
              1.3", RFC 9147, DOI 10.17487/RFC9147, April 2022,
              <https://www.rfc-editor.org/info/rfc9147>.

   [Selfie]   Drucker, N. and S. Gueron, "Selfie: reflections on TLS 1.3
              with PSK", DOI 10.1007/s00145-021-09387-y, May 2021,
              <https://eprint.iacr.org/2019/347.pdf>.

   [Sethi]    Sethi, M., Peltonen, A., and T. Aura, "Misbinding Attacks
              on Secure Device Pairing and Bootstrapping",
              DOI 10.1145/3321705.3329813, May 2019,
              <https://arxiv.org/pdf/1902.07550>.

   [SmartCard]
              Bundesamt für Sicherheit in der Informationstechnik,
              "Technical Guideline TR-03112-7 eCard-API-Framework -
              Protocols", version 1.1.5, April 2015, <https://www.bsi.bu
              nd.de/SharedDocs/Downloads/DE/BSI/Publikationen/
              TechnischeRichtlinien/TR03112/TR-
              03112-api_teil7.pdf?__blob=publicationFile&v=1>.

Acknowledgements

   This document is the output of the TLS External PSK Design Team,
   comprised of the following members: Benjamin Beurdouche, Björn Haase,
   Christopher Wood, Colm MacCarthaigh, Eric Rescorla, Jonathan Hoyland,
   Martin Thomson, Mohamad Badra, Mohit Sethi, Oleg Pekar, Owen Friel,
   and Russ Housley.

   This document was improved by high-quality reviews by Ben Kaduk and
   John Preuß Mattsson.

Authors' Addresses

   Russ Housley
   Vigil Security, LLC
   Email: housley@vigilsec.com


   Jonathan Hoyland
   Cloudflare Ltd.
   Email: jonathan.hoyland@gmail.com


   Mohit Sethi
   Aalto University
   Email: mohit@iki.fi


   Christopher A. Wood
   Cloudflare
   Email: caw@heapingbits.net

ISO Plain Language

On this page
PROBLEMTLS 1.3 can authenticate with keys that were provisioned out of band, but nothing told applications how to choose and manage those keys without weakening the protocol.
MECHANISMRFC 9257 explains that PSK security assumes each key is known to exactly one client and one server, shows the attacks that follow when a key is shared or has low entropy, and gives four recommendations for applications.
WHY IT MATTERSUse keys of at least 128 bits with at least 128 bits of entropy, combine them with an ephemeral key exchange, restrict each key to two logical nodes, and use external PSK importers so the main key can be deleted afterwards.

§1What an External PSK Is

This document gives guidance on the use of external Pre-Shared Keys in Transport Layer Security (TLS) 1.3. The guidance also applies to Datagram TLS (DTLS) 1.3 and Compact TLS 1.3; for readability the document uses the term TLS for all of them.

External PSKs are symmetric secret keys provided to the TLS implementation as external inputs. They are provisioned out of band, which means they are put in place by some other means than the TLS handshake itself, for example typed into two devices or copied onto them from another system.

The document lists the TLS security properties provided by PSKs under certain assumptions, and demonstrates how violating those assumptions leads to attacks. It also discusses PSK use cases, provisioning processes and the support needed in the TLS stack, and it gives advice for applications in various use cases so they can meet the assumptions. The gap it sets out to close is that there is plenty of guidance on generating and verifying passwords, but no equivalent for external PSKs in TLS.

Two definitions matter for the rest of the document. A logical node is a computing presence that other parties can interact with via TLS; one logical node can be realized as several physical instances under common administrative control, such as a server farm. An endpoint is a client or server participating in a connection.

A pre-shared key is a secret both sides already know. In TLS 1.3 it can replace certificates as a way of proving identity. The catch is that a secret is only as safe as the assumptions about who holds it, and this RFC spells those assumptions out.

§4.1What Happens When a Key Is Shared

Using an established PSK lets TLS nodes authenticate each other's identities. It also brings other benefits, including resistance to attacks in the presence of quantum computers. It does not provide privacy of the endpoint identities, and it does not provide non-repudiation, since one endpoint in a connection can deny the conversation.

PSK authentication implicitly assumes one fundamental property: each PSK is known to exactly one client and one server, and they never swap roles. When several clients or several servers share a PSK naively, with all members holding a common key, TLS authenticates only group membership and the security of the system is brittle in several ways. Any group member can impersonate any other group member. If the PSK is combined with the result of a fresh ephemeral key exchange, then compromising one group member lets the attacker passively read traffic and actively modify it. If the PSK is not combined with a fresh ephemeral key exchange, compromising any group member lets the attacker passively read all traffic, including past traffic, and modify it.

A malicious non-member can also reroute handshakes between honest group members. With three peers A, B and C that all know the PSK, the attack runs as follows: A sends a ClientHello to B; the attacker intercepts it and redirects it to C; C responds with its second flight to A; A sends a Finished message to B, having completed the handshake, ostensibly with B; the attacker redirects that Finished message to C, and C has completed the handshake with A. Peer authentication is not provided. If C supports a weaker set of cipher suites than B, cryptographic algorithm downgrade attacks might also be possible.

This rerouting is a type of identity misbinding attack. The Selfie attack is a special case of it against a group member that can act as both a TLS server and a client: a malicious non-member reroutes a connection from the client to the server on the same endpoint. A partial mitigation for this class of attack is that each group member includes the Server Name Indication extension and terminates the connection when the presented name does not match its own identity.

Sharing also has operational costs. Revoking one group member is not possible without establishing a new PSK for every member that has not been revoked.

If three machines share one key, TLS can no longer tell them apart, so any one of them can pretend to be another. An attacker who can move messages around can also make two honest machines talk to each other by mistake, and the machines will believe they are talking to the person they intended. Sharing also means you cannot revoke one machine's access without replacing the key everywhere.

THE REROUTING ATTACK BETWEEN THREE PEERS THAT SHARE A PSK
Peer APeer BPeer CAttacker
  1. ClientHelloA starts a handshake with B.
  2. Redirect ClientHelloThe attacker sends the message to C instead.
  3. ServerHello, ...C answers A directly.
  4. FinishedA believes the handshake with B is complete.
  5. Redirect FinishedThe attacker sends the Finished message to C.
  6. Session keysC believes the handshake with A is complete.

§4.2How Much Randomness the Key Needs

The entropy properties of an external PSK affect the security properties TLS can provide. With a high-entropy PSK, PSK-only key establishment modes give the expected security properties for TLS: the same session keys at both peers, secrecy of the session keys, peer authentication and downgrade protection. Those modes lack forward security, which can be achieved by using a PSK-DH mode or by using PSKs with short lifetimes.

With a low-entropy PSK the picture is worse. PSK-only key establishment modes are subject to passive exhaustive search attacks, which reveal the traffic keys. PSK-DH modes are subject to active attacks in which the attacker impersonates one side. The exhaustive search phase of those attacks can be mounted offline if the attacker captures a single handshake using the PSK, but they will not compromise the traffic keys for that connection, because those keys also depend on the Diffie-Hellman exchange. Low-entropy keys are only secure against active attack if a Password-Authenticated Key Exchange is used with TLS. At the time of writing the Crypto Forum Research Group was working on specifying recommended PAKEs for the symmetric and asymmetric cases.

A key made of random bits behaves differently from a short guessable one. With a random key, TLS can establish a session on its own, though it cannot protect old traffic if the key later leaks. With a guessable key, an attacker can try every possibility offline and read the session, unless the session also depends on a fresh Diffie-Hellman exchange.

HIGH-ENTROPY AND LOW-ENTROPY PSKS COMPARED
AspectHigh-entropy PSKLow-entropy PSK
PSK-only key establishmentGives the expected TLS properties: the same session keys at both peers, secrecy of the session keys, peer authentication and downgrade protectionSubject to passive exhaustive search attacks, which reveal the traffic keys
PSK-DH key establishmentForward secrecy is achieved; the traffic keys also depend on the Diffie-Hellman exchangeSubject to active attacks that impersonate one side; the search phase can be mounted offline from one captured handshake, but the traffic keys still depend on the exchange
Forward secrecyNot provided by PSK-only modes; achieved with a PSK-DH mode or short-lived PSKsSame: a PSK-DH mode or short-lived PSKs

§5How External PSKs Are Used and Provisioned

PSK cipher suites were first specified for TLS in 2005, and PSKs are now an integral part of the TLS 1.3 specification, which also uses them for session resumption and distinguishes those resumption PSKs from external PSKs provisioned out of band.

The use cases listed for pairwise external PSKs, shared between one server and one client, include device-to-device communication with out-of-band synchronized keys, where the identity to use is discovered through a different online protocol; intra-data-center communication within a single data center or Point of Presence, mainly to support TLS connections with early data; certificateless server-to-server communication, mainly to avoid the overhead of provisioning and managing PKI certificates; Internet of Things devices with limited computational capability, where the TLS and DTLS profiles for resource-constrained devices suggest PSK cipher suites and the LwM2M specification says servers must support the PSK mode of DTLS; securing RADIUS with TLS, where PSK cipher suites are optional; 3GPP server-to-user equipment authentication; smart cards, where the German electronic identity card supports card-holder authentication to online services with TLS PSK; and quantum resistance, where some deployments use PSKs, or combine them with certificate-based authentication, for the protection they give against quantum computers.

Some use cases do share a PSK between more than two entities. Group chats are one example, where participants may be provisioned a PSK out of band for establishing authenticated connections with other members. IoT devices are another, where the same setting can use one key for n devices, n keys for n devices, or pairwise keys for n^2 combinations.

Provisioning depends on the system and its threat model. Whenever possible, sharing a PSK between nodes should be avoided, though it is sometimes unavoidable, and when it happens the accommodations of Section 6 should be used. Many industrial protocols distribute PSKs by hand, either by typing the key into the devices or by a trust-on-first-use approach in which a device is unprotected until the first login, which matters because many devices have a very limited interface, sometimes only a numeric keypad. Some devices provision PSKs through an out-of-band cloud-based syncing protocol, and some secrets are baked into hardware or software at manufacturing time, printed on labels or included in a Bill of Materials for easy scanning or import.

Provisioning systems are often constrained in application-specific ways. Although one goal is to ensure that each pair of nodes has a unique key, some systems do not want to distribute pairwise shared keys, and some require the provisioning process to embed application-specific information in the PSKs or their identities. Identities may sometimes need to be routable.

External keys are used wherever running a certificate system is too heavy: small devices, machines talking inside one data center, card readers and mobile networks. How the key gets onto the devices varies, from typing it in to a keypad to syncing it through a cloud service or printing it on a label at the factory. The document's advice is to give each pair of devices its own key whenever the system allows it.

§6Four Recommendations for Applications

The recommended requirements for applications using external PSKs are stated as four numbered rules.

  1. Each PSK SHOULD be derived from at least 128 bits of entropy, MUST be at least 128 bits long, and SHOULD be combined with an ephemeral key exchange, for example by using the psk_dhe_ke Pre-Shared Key Exchange Mode in TLS 1.3 for forward secrecy. Low-entropy PSKs, those derived from less than 128 bits of entropy, are subject to attack and SHOULD be avoided. If only low-entropy keys are available, key establishment mechanisms such as PAKE that mitigate the risk of offline dictionary attacks SHOULD be employed; no such mechanism has yet been standardized, and they will not necessarily follow the same architecture as the external PSK import process.
  2. Unless other accommodations are made to mitigate the risks of PSKs known to a group, each PSK MUST be restricted in its use to at most two logical nodes: one in a TLS client role and one in a TLS server role. The two logical nodes MAY be the same, in different roles. Two acceptable accommodations are described in RFC 9258: exchanging client and server identifiers over the TLS connection after the handshake, and incorporating identifiers for both the client and the server into the context string for an external PSK importer.
  3. Nodes SHOULD use external PSK importers when configuring PSKs for a client-server pair, where applicable. Importers make provisioning easier and less error-prone by deriving a unique imported PSK from the external PSK for each key derivation function a node supports.
  4. Where possible, the main PSK, the one fed into the importer, SHOULD 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, since otherwise the attacker can recover the main key and re-run the importer.

The document then describes the stack interfaces that applications use to configure external PSKs, and the details differ between implementations. OpenSSL and BoringSSL let applications specify support for external PSKs through distinct cipher suites in TLS 1.2 and below and configure callbacks invoked for PSK selection during the handshake, which must provide a PSK identity and key; the PSK length is validated to be between 1 and 256 bytes and the identity may be up to 128 bytes long. mbedTLS client applications configure PSKs before creating a connection by giving the identity and value inline, servers implement callbacks like OpenSSL's, and both the identity and the key may be between 1 and 16 bytes long. gnuTLS takes raw byte strings or hexadecimal strings and does not validate the identity or key size, and wolfSSL uses callbacks similar to OpenSSL's.

PSK identities have their own rules. RFC 4279 requires the identity to be converted to a character string and then encoded to octets with UTF-8, to avoid interoperability problems when a human typed it in, while the profile for constrained devices advises against assuming any structured format and recommends byte-by-byte comparison. TLS 1.3 treats the identity as a sequence of opaque bytes, shown in its specification as opaque identity<1..2^16-1>, compared byte by byte and required to be at least 1 byte and at most 65535 bytes long. An identity MAY be a user-configured string, as in Extensible Authentication Protocol deployments where gnuTLS treats identities as usernames, and MAY have a domain name suffix for roaming and federation, which is NOT RECOMMENDED where that suffix is privacy sensitive. Deployments should take care that the identity is long enough to avoid collisions.

Collisions with resumption PSK identities are possible, though unlikely. When a server receives a PSK identity in a TLS 1.3 ClientHello, some stacks run the application's callback before checking the internal session resumption cache, so an external PSK usually takes precedence. Because resumption PSK identities are assigned by the stack, it is RECOMMENDED that they be assigned in a way that lets them be distinguished from external PSKs.

The rules are short: a long random key, combined with a fresh key exchange, used by only two machines, imported through the standard mechanism and then thrown away. The rest of the section is about the practical detail of how each TLS library takes the key, and about the name attached to it, which travels in the clear and must therefore not be something secret.

THE FOUR RECOMMENDATIONS FOR EXTERNAL PSK USE
  • 1Length and entropy — At least 128 bits long, derived from at least 128 bits of entropy, and combined with an ephemeral key exchange for forward secrecy.
  • 2One client and one server — Each PSK restricted to at most two logical nodes, unless other accommodations are made for a group of PSK holders.
  • 3Use an importer — Nodes should use external PSK importers, which derive a unique imported PSK for each key derivation function the node supports.
  • 4Delete the main PSK — Where possible, delete the main PSK once the imported keys have been generated.

§7Privacy, Identities and Early Data

PSK privacy properties are orthogonal to the security properties described earlier. TLS does little to keep PSK identity information private: the identifier appears in cleartext in a ClientHello, so an adversary learns information about the external PSK or its identifier, and a passive adversary can link two or more connections that use the same external PSK on the wire. Depending on the identity, a passive attacker may also be able to identify the device, person or enterprise running the client or the server. An active attacker can use the PSK identity to suppress handshakes or application data from a specific device by blocking, delaying or rate-limiting its traffic. Techniques for mitigating these risks need further analysis and are out of scope. External PSKs are also intrinsically linkable by PSK receivers, since servers can link successive connections that use the same external PSK.

The security considerations repeat the concerns about proper identification of TLS 1.3 endpoints and the extra risks when external PSKs are known to a group. It is NOT RECOMMENDED to share the same PSK between more than one client and server, although application scenarios may rely on doing so. RFC 9258 helps mitigate rerouting and Selfie-style reflection attacks when a PSK is shared among multiple nodes, by using node identifiers correctly in the ImportedIdentity.context construct. One solution would be for each endpoint to select one globally unique identifier for use in all its PSK handshakes, for example one of its MAC addresses, a 32-byte random number or its UUID; such persistent global identifiers carry privacy implications.

Each endpoint SHOULD know the identifier of the other endpoint it wants to connect to and SHOULD compare it with the identifier that endpoint used. Endpoints sharing the same group PSK can, however, always impersonate each other.

One last point concerns early data. When early data is used with an external PSK, the random value in the ClientHello is the only source of entropy contributing to key diversity between sessions, so when an external PSK is used more than once the client's random number source has a significant role in the protection of the early data.

The name attached to the key is sent in the open, so it identifies the device and lets an observer tell that two connections used the same key. That is why the document warns against putting anything sensitive in the identity, and why a shared key is only safe if each side also checks the other's name, and even then any member of the group can still impersonate any other.

§7References