| rfc9427.original | rfc9427.txt | |||
|---|---|---|---|---|
| Network Working Group DeKok, Alan | Internet Engineering Task Force (IETF) A. DeKok | |||
| INTERNET-DRAFT FreeRADIUS | Request for Comments: 9427 FreeRADIUS | |||
| Updates: 4851, 5281, 7170 16 February 2023 | Updates: 4851, 5281, 7170 June 2023 | |||
| Category: Standards Track | Category: Standards Track | |||
| Expires: August 16, 2023 | ISSN: 2070-1721 | |||
| TLS-based EAP types and TLS 1.3 | TLS-Based Extensible Authentication Protocol (EAP) Types for Use with | |||
| draft-ietf-emu-tls-eap-types-13.txt | TLS 1.3 | |||
| Abstract | Abstract | |||
| EAP-TLS (RFC 5216) has been updated for TLS 1.3 in RFC 9190. Many | The Extensible Authentication Protocol-TLS (EAP-TLS) (RFC 5216) has | |||
| other EAP types also depend on TLS, such as EAP-FAST (RFC 4851), EAP- | been updated for TLS 1.3 in RFC 9190. Many other EAP Types also | |||
| TTLS (RFC 5281), TEAP (RFC 7170), and possibly many vendor specific | depend on TLS, such as EAP-Flexible Authentication via Secure | |||
| EAP methods. This document updates those methods in order to use the | Tunneling (EAP-FAST) (RFC 4851), EAP-Tunneled TLS (EAP-TTLS) (RFC | |||
| 5281), the Tunnel Extensible Authentication Protocol (TEAP) (RFC | ||||
| 7170). It is possible that many vendor-specific EAP methods, such as | ||||
| the Protected Extensible Authentication Protocol (PEAP), depend on | ||||
| TLS as well. This document updates those methods in order to use the | ||||
| new key derivation methods available in TLS 1.3. Additional changes | new key derivation methods available in TLS 1.3. Additional changes | |||
| necessitated by TLS 1.3 are also discussed. | necessitated by TLS 1.3 are also discussed. | |||
| Status of this Memo | Status of This Memo | |||
| This Internet-Draft is submitted to IETF in full conformance with the | ||||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF), its areas, and its working groups. Note that | ||||
| other groups may also distribute working documents as Internet- | ||||
| Drafts. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | ||||
| and may be updated, replaced, or obsoleted by other documents at any | ||||
| time. It is inappropriate to use Internet-Drafts as reference | ||||
| material or to cite them other than as "work in progress." | ||||
| The list of current Internet-Drafts can be accessed at | This is an Internet Standards Track document. | |||
| http://www.ietf.org/ietf/1id-abstracts.txt. | ||||
| The list of Internet-Draft Shadow Directories can be accessed at | This document is a product of the Internet Engineering Task Force | |||
| http://www.ietf.org/shadow.html. | (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). Further information on | ||||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on January 29, 2021. | 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/rfc9427. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2023 IETF Trust and the persons identified as the | Copyright (c) 2023 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info/) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Revised BSD License text as described in Section 4.e of the | include Revised BSD License text as described in Section 4.e of the | |||
| Trust Legal Provisions and are provided without warranty as described | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | in the Revised BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction ............................................. 4 | 1. Introduction | |||
| 1.1. Requirements Language ............................... 4 | 1.1. Requirements Language | |||
| 2. Using TLS-based EAP methods with TLS 1.3 ................. 5 | 2. Using TLS-Based EAP Methods with TLS 1.3 | |||
| 2.1. Key Derivation ...................................... 5 | 2.1. Key Derivation | |||
| 2.2. TEAP ................................................ 6 | 2.2. TEAP | |||
| 2.2.1. Client Certificates ............................ 8 | 2.2.1. Client Certificates | |||
| 2.3. EAP-FAST ............................................ 8 | 2.3. EAP-FAST | |||
| 2.3.1. Client Certificates ............................ 9 | 2.3.1. Client Certificates | |||
| 2.4. EAP-TTLS ............................................ 9 | 2.4. EAP-TTLS | |||
| 2.4.1. Client Certificates ............................ 10 | 2.4.1. Client Certificates | |||
| 2.5. PEAP ................................................ 10 | 2.5. PEAP | |||
| 2.5.1. Client Certificates ............................ 11 | 2.5.1. Client Certificates | |||
| 3. Application Data ......................................... 11 | 3. Application Data | |||
| 3.1. Identities .......................................... 13 | 3.1. Identities | |||
| 4. Resumption ............................................... 16 | 4. Resumption | |||
| 5. Implementation Status .................................... 17 | 5. Security Considerations | |||
| 6. Security Considerations .................................. 17 | 5.1. Handling of TLS NewSessionTicket Messages | |||
| 6.1. Handling of TLS NewSessionTicket Messages ........... 17 | 5.2. Protected Success and Failure Indications | |||
| 6.2. Protected Success and Failure indications ........... 19 | 6. IANA Considerations | |||
| 7. IANA Considerations ...................................... 20 | 7. References | |||
| 8. References ............................................... 21 | 7.1. Normative References | |||
| 8.1. Normative References ................................ 21 | 7.2. Informative References | |||
| 8.2. Informative References .............................. 22 | Acknowledgments | |||
| Author's Address | ||||
| 1. Introduction | 1. Introduction | |||
| EAP-TLS has been updated for TLS 1.3 in [RFC9190]. Many other EAP | EAP-TLS has been updated for TLS 1.3 in [RFC9190]. Many other EAP | |||
| types also depend on TLS, such as EAP-FAST [RFC4851], EAP-TTLS | Types also depend on TLS, such as EAP-FAST [RFC4851], EAP-TTLS | |||
| [RFC5281], TEAP [RFC7170], and possibly many vendor specific EAP | [RFC5281], and TEAP [RFC7170]. It is possible that many vendor- | |||
| methods such as PEAP [PEAP]. All of these methods use key derivation | specific EAP methods, such as PEAP [PEAP], depend on TLS as well. | |||
| functions which are no longer applicable to TLS 1.3. As such, all of | All of these methods use key derivation functions that are no longer | |||
| those methods are incompatible with TLS 1.3. | applicable to TLS 1.3; thus, these methods are incompatible with TLS | |||
| 1.3. | ||||
| This document updates those methods in order to be used with TLS 1.3. | This document updates these methods in order to be used with TLS 1.3. | |||
| These changes involve defining new key derivation functions. We also | These changes involve defining new key derivation functions. We also | |||
| discuss implementation issues in order to highlight differences | discuss implementation issues in order to highlight differences | |||
| between TLS 1.3 and earlier versions of TLS. | between TLS 1.3 and earlier versions of TLS. | |||
| 1.1. Requirements Language | 1.1. Requirements Language | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| 2. Using TLS-based EAP methods with TLS 1.3 | 2. Using TLS-Based EAP Methods with TLS 1.3 | |||
| In general, all of the requirements of [RFC9190] apply to other EAP | In general, all of the requirements in [RFC9190] apply to other EAP | |||
| methods that wish to use TLS 1.3. Unless otherwise required herein, | methods that wish to use TLS 1.3. Unless otherwise required herein, | |||
| implementations of EAP methods that wish to use TLS 1.3 MUST follow | implementations of EAP methods that wish to use TLS 1.3 MUST follow | |||
| the guidelines in [RFC9190]. | the guidelines in [RFC9190]. | |||
| There remain some differences between EAP-TLS and other TLS-based EAP | There remain some differences between EAP-TLS and other TLS-based EAP | |||
| methods which are addressed by this document. The main difference is | methods that are addressed by this document. The main difference is | |||
| that [RFC9190] uses the EAP-TLS Type (value 0x0D) in a number of | that [RFC9190] uses the EAP-TLS Type (value 0x0D) in a number of | |||
| calculations, whereas other method types will use their own Type | calculations, whereas other method types will use their own Type | |||
| value instead of the EAP-TLS Type value. This topic is discussed | value instead of the EAP-TLS Type value. This topic is discussed | |||
| further below in Section 2.1. | further in Section 2.1. | |||
| An additional difference is that [RFC9190] Section 2.5 requires that | An additional difference is that [RFC9190], Section 2.5 requires the | |||
| once the EAP-TLS handshake has completed, the EAP server sends a | EAP server to send a protected success result indication once the | |||
| protected success result indication. This indication is composed of | EAP-TLS handshake has completed. This indication is composed of one | |||
| one octet (0x00) of application data. Other TLS-based EAP methods | octet (0x00) of application data. Other TLS-based EAP methods also | |||
| also use this result indication, but only during resumption. When | use this result indication, but only during resumption. When other | |||
| other TLS-based EAP methods use full authentication, the result | TLS-based EAP methods use full authentication, the result indication | |||
| indication is not needed, and is not used. This topic is explained | is not needed or used. This topic is explained in more detail in | |||
| in more detail below, in Section 3 and Section 4. | Sections 3 and 4. | |||
| Finally, the document includes clarifications on how various TLS- | Finally, this document includes clarifications on how various TLS- | |||
| based parameters are calculated when using TLS 1.3. These parameters | based parameters are calculated when using TLS 1.3. These parameters | |||
| are different for each EAP method, so they are discussed separately. | are different for each EAP method, so they are discussed separately. | |||
| 2.1. Key Derivation | 2.1. Key Derivation | |||
| The key derivation for TLS-based EAP methods depends on the value of | The key derivation for TLS-based EAP methods depends on the value of | |||
| the EAP Type as defined by [IANA] in the Extensible Authentication | the EAP Type as defined by [IANA] in the "Extensible Authentication | |||
| Protocol (EAP) Registry. The most important definition is of the | Protocol (EAP) Registry". The most important definition is of the | |||
| Type field, as first defined in [RFC3748] Section 2: | Type field, as first defined in [RFC3748], Section 2: | |||
| Type = value of the EAP Method type | Type = value of the EAP Method type | |||
| For the purposes of this specification, when we refer to logical | For the purposes of this specification, when we refer to logical | |||
| Type, we mean that the logical Type is defined to be 1 octet for | Type, we mean that the logical Type is defined as one octet for | |||
| values smaller than 254 (the value for the Expanded Type), and when | values smaller than 254 (the value for the Expanded Type). When | |||
| Expanded EAP Types are used, the logical Type is defined to be the | Expanded EAP Types are used, the logical Type is defined as the | |||
| concatenation of the fields required to define the Expanded Type, | concatenation of the fields required to define the Expanded Type, | |||
| including the Type with value 0xfe, Vendor-Id (in network byte order) | including the Type with value 0xfe, Vendor-Id (in network byte | |||
| and Vendor-Type fields (in network byte order) defined in [RFC3748] | order), and Vendor-Type fields (in network byte order) defined in | |||
| Section 5.7, as given below: | [RFC3748], Section 5.7, as given below: | |||
| Type = 0xFE || Vendor-Id || Vendor-Type | Type = 0xFE || Vendor-Id || Vendor-Type | |||
| This definition does not alter the meaning of Type in [RFC3748], or | This definition does not alter the meaning of Type in [RFC3748] or | |||
| change the structure of EAP packets. Instead, this definition allows | change the structure of EAP packets. Instead, this definition allows | |||
| us to simplify references to EAP Types, by using a logical "Type" | us to simplify references to EAP Types by using a logical "Type" | |||
| instead of referring to "the Type field or the Type field with value | instead of referring to "the Type field or the Type field with value | |||
| 0xfe, plus the Vendor-ID and Vendor-Type". For example, the value of | 0xfe, plus the Vendor-ID and Vendor-Type". For example, the value of | |||
| Type for PEAP is simply 0x19. | Type for PEAP is simply 0x19. | |||
| Note that unlike TLS 1.2 and earlier, the calculation of TLS-Exporter | Note that unlike TLS 1.2 and earlier, the calculation of the TLS- | |||
| depends on the length passed to it. Implementations therefore MUST | Exporter function depends on the length passed to it. Therefore, | |||
| pass the correct length instead of passing a large length and | implementations MUST pass the correct length instead of passing a | |||
| truncating the output. Any output calculated using a larger length | large length and truncating the output. Any output calculated using | |||
| value, and which is then truncated, will be different from the output | a larger length value, which is then truncated, will be different | |||
| which was calculated using the correct length. | from the output that was calculated using the correct length. | |||
| Unless otherwise discussed below, the key derivation functions for | Unless otherwise discussed below, the key derivation functions for | |||
| all TLS-based EAP Types are defined in [RFC9190] Section 2.3, and | all TLS-based EAP Types are defined in [RFC9190], Section 2.3 and | |||
| reproduced here for clarity. These definitions include ones for the | reproduced here for clarity. These definitions include ones for the | |||
| Master Session Key (MSK) and the Extended Master Session Key (EMSK): | Master Session Key (MSK) and the Extended Master Session Key (EMSK): | |||
| Key_Material = TLS-Exporter("EXPORTER_EAP_TLS_Key_Material", | Key_Material = TLS-Exporter("EXPORTER_EAP_TLS_Key_Material", | |||
| Type, 128) | Type, 128) | |||
| Method-Id = TLS-Exporter("EXPORTER_EAP_TLS_Method-Id", | Method-Id = TLS-Exporter("EXPORTER_EAP_TLS_Method-Id", | |||
| Type, 64) | Type, 64) | |||
| Session-Id = Type || Method-Id | Session-Id = Type || Method-Id | |||
| MSK = Key_Material(0, 63) | MSK = Key_Material(0, 63) | |||
| EMSK = Key_Material(64, 127) | EMSK = Key_Material(64, 127) | |||
| We note that these definitions re-use the EAP-TLS exporter labels, | We note that these definitions reuse the EAP-TLS exporter labels and | |||
| and change the derivation only by adding a dependency on the logical | change the derivation only by adding a dependency on the logical | |||
| Type. The reason for this change is simplicity. The inclusion of | Type. The reason for this change is simplicity. The inclusion of | |||
| the EAP type makes the derivation method-specific. There is no need | the EAP Type makes the derivation method specific. There is no need | |||
| to use different labels for different EAP types, as was done earlier. | to use different labels for different EAP Types as was done earlier. | |||
| These definitions apply in their entirety to EAP-TTLS [RFC5281] and | These definitions apply in their entirety to EAP-TTLS [RFC5281] and | |||
| PEAP as defined in [PEAP] and [MSPEAP]. Some definitions apply to | PEAP as defined in [PEAP] and [MSPEAP]. Some definitions apply to | |||
| EAP-FAST and TEAP, with exceptions as noted below. | EAP-FAST and TEAP with exceptions as noted below. | |||
| It is RECOMMENDED that vendor-defined TLS-based EAP methods use the | It is RECOMMENDED that vendor-defined and TLS-based EAP methods use | |||
| above definitions for TLS 1.3. There is no compelling reason to use | the above definitions for TLS 1.3. There is no compelling reason to | |||
| different definitions. | use different definitions. | |||
| 2.2. TEAP | 2.2. TEAP | |||
| TEAP previously used a Protected Access Credential (PAC), which is | TEAP previously used a Protected Access Credential (PAC), which is | |||
| functionally equivalent to session tickets provided by TLS 1.3 which | functionally equivalent to session tickets provided by TLS 1.3 that | |||
| contain a pre-shared key (PSK) along with other data. As such, the | contain a pre-shared key (PSK) along with other data. As such, the | |||
| use of a PAC is deprecated for TEAP in TLS 1.3. PAC provisioning as | use of a PAC is deprecated for TEAP in TLS 1.3. PAC provisioning, as | |||
| defined in [RFC7170] Section 3.8.1 is also no longer part of TEAP | defined in [RFC7170], Section 3.8.1, is also no longer part of TEAP | |||
| when TLS 1.3 is used. | when TLS 1.3 is used. | |||
| [RFC7170] Section 5.2 gives a definition for the Inner Method Session | [RFC7170], Section 5.2 gives a definition for the Inner Method | |||
| Key (IMSK), which depends on the TLS-PRF. When the j'th inner method | Session Key (IMSK), which depends on the TLS Pseudorandom Function | |||
| generates an EMSK, we update that definition for TLS 1.3 as: | (PRF) (also known as TLS-PRF). When the j'th inner method generates | |||
| an EMSK, we update that definition for TLS 1.3 as: | ||||
| IMSK[j] = TLS-Exporter("TEAPbindkey@ietf.org", secret, 32) | IMSK[j] = TLS-Exporter("TEAPbindkey@ietf.org", secret, 32) | |||
| The secret is the EMSK or MSK from the j'th inner method. When an | The secret is the EMSK or MSK from the j'th inner method. When an | |||
| inner method does not provide an EMSK or MSK, IMSK[j] is 32 octets of | inner method does not provide an EMSK or MSK, IMSK[j] is 32 octets of | |||
| zero. | zero. | |||
| The other key derivations for TEAP are given here. All derivations | The other key derivations for TEAP are given here. All derivations | |||
| not given here are the same as given above in the previous section. | not given here are the same as given above in the previous section. | |||
| These derivations are also used for EAP-FAST, but using the EAP-FAST | These derivations are also used for EAP-FAST, but using the EAP-FAST | |||
| Type. | Type. | |||
| The derivation of the Inner Method Session Keys (IMSK), Inner Method | The derivation of the IMSKs, Inner Method Compound Keys (IMCKs), and | |||
| Compound Keys (IMCK), and Compound Session Keys (CMK) is given below. | Compound Session Keys (CMKs) is given below. | |||
| session_key_seed = TLS-Exporter("EXPORTER: teap session key seed", | session_key_seed = TLS-Exporter("EXPORTER: teap session key seed", | |||
| Type, 40) | Type, 40) | |||
| S-IMCK[0] = session_key_seed | S-IMCK[0] = session_key_seed | |||
| For j = 1 to n-1 do | For j = 1 to n-1 do | |||
| IMCK[j] = TLS-Exporter("EXPORTER: Inner Methods Compound Keys", | IMCK[j] = TLS-Exporter("EXPORTER: Inner Methods Compound Keys", | |||
| S-IMCK[j-1] || IMSK[j], 60) | S-IMCK[j-1] || IMSK[j], 60) | |||
| S-IMCK[j] = first 40 octets of IMCK[j] | S-IMCK[j] = first 40 octets of IMCK[j] | |||
| CMK[j] = last 20 octets of IMCK[j] | CMK[j] = last 20 octets of IMCK[j] | |||
| In these definitions, || denotes concatenation. | Note: In these definitions, || denotes concatenation. | |||
| In TLS 1.3, the derivation of IMCK[j] uses both a different label, | In TLS 1.3, the derivation of IMCK[j] uses both a different label and | |||
| and a different order of concatenating fields, than was used by TEAP | a different order of concatenating fields than what was used by TEAP | |||
| with TLS 1.2. Similarly, the session_key_seed in TLS 1.3 uses the | with TLS 1.2. Similarly, the session_key_seed in TLS 1.3 uses the | |||
| Type as the context, where in TLS 1.2 the context was a zero-length | Type as the context. In TLS 1.2, the context was a zero-length | |||
| field. | field. | |||
| The outer MSK and EMSK are then derived from the final ("n"th) inner | The outer MSK and EMSK are then derived from the final ("n"th) inner | |||
| method, as follows: | method, as follows: | |||
| MSK = TLS-Exporter("EXPORTER: Session Key Generating Function", | MSK = TLS-Exporter( | |||
| S-IMCK[n], 64) | "EXPORTER: Session Key Generating Function", | |||
| S-IMCK[n], 64) | ||||
| EMSK = TLS-Exporter("EXPORTER: Extended Session Key Generating Function", | EMSK = TLS-Exporter( | |||
| S-IMCK[n], 64) | "EXPORTER: Extended Session Key Generating Function", | |||
| S-IMCK[n], 64) | ||||
| The TEAP Compound MAC defined in [RFC7170] Section 5.3 remains the | The TEAP Compound Message Authentication Code (MAC) defined in | |||
| same, but the message authentication code (MAC) for TLS 1.3 is | [RFC7170], Section 5.3 remains the same, but the MAC for TLS 1.3 is | |||
| computed with the HMAC algorithm negotiated for HKDF in the key | computed with the Hashed Message Authentication Code (HMAC) algorithm | |||
| schedule, as per section 7.1 of RFC 8446. That is, the MAC used is | negotiated for the HMAC-based Key Derivation Function (HKDF) in the | |||
| the MAC derived from the TLS handshake. | key schedule, as per [RFC8446], Section 7.1. That is, the MAC used | |||
| is the MAC derived from the TLS handshake: | ||||
| Compound-MAC = MAC( CMK[n], BUFFER ) | Compound-MAC = MAC( CMK[n], BUFFER ) | |||
| Where we define CMK[n] as the CMK taken from the final ("n"th) inner | where we define CMK[n] as the CMK taken from the final ("n"th) inner | |||
| method. | method. | |||
| For TLS 1.3, the message authentication code (MAC) is computed with | For TLS 1.3, the MAC is computed with the HMAC algorithm negotiated | |||
| the HMAC algorithm negotiated for HKDF in the key schedule, as per | for HKDF in the key schedule, as per [RFC8446], Section 7.1. That | |||
| section 7.1 of RFC 8446. That is, the MAC used is the MAC derived | is, the MAC used is the MAC derived from the TLS handshake. | |||
| from the TLS handshake. | ||||
| The definition of BUFFER is unchanged from [RFC7170] Section 5.3. | The definition of BUFFER is unchanged from [RFC7170], Section 5.3. | |||
| 2.2.1. Client Certificates | 2.2.1. Client Certificates | |||
| The use of client certificates is still permitted when using TEAP | The use of client certificates is still permitted when using TEAP | |||
| with TLS 1.3. However, if the client certificate is accepted, then | with TLS 1.3. However, if the client certificate is accepted, then | |||
| the EAP peer MUST proceed with additional authentication of Phase 2, | the EAP peer MUST proceed with additional authentication of Phase 2, | |||
| as per [RFC7170] Section 7.6. If there is no Phase 2 data, then the | as per [RFC7170], Section 7.6. If there is no Phase 2 data, then the | |||
| EAP server MUST reject the session. | EAP server MUST reject the session. | |||
| That is, while [RFC7170] Section 7.6 permits "Authentication of the | While [RFC5281], Section 7.6 permits "authentication of the client | |||
| client via client certificate during phase 1, with no additional | via client certificate during phase 1, with no additional | |||
| authentication or information exchange required.", this practice is | authentication or information exchange required," this practice is | |||
| forbidden when TEAP is used with TLS 1.3. If there is a requirement | forbidden when TEAP is used with TLS 1.3. If there is a requirement | |||
| to use client certificates with no inner tunnel methods, then EAP-TLS | to use client certificates with no inner tunnel methods, then EAP-TLS | |||
| should be used instead of TEAP. | should be used instead of TEAP. | |||
| [RFC7170] Section 7.4.1 suggest that client certificates should be | [RFC7170], Section 7.4.1 suggests that client certificates should be | |||
| sent in Phase 2 of the TEAP exchange, "since TLS client certificates | sent in Phase 2 of the TEAP exchange "since TLS client certificates | |||
| are sent in the clear". While TLS 1.3 no longer sends client | are sent in the clear". While TLS 1.3 no longer sends client | |||
| certificates in the clear, TEAP implementations need to distinguish | certificates in the clear, TEAP implementations need to distinguish | |||
| identities for both User and Machine using the Identity-Type TLV | identities for both User and Machine using the Identity-Type TLV | |||
| (with values 1 and 2, respectively). When a client certificate is | (with values 1 and 2, respectively). When a client certificate is | |||
| sent outside of the TLS tunnel, it MUST include Identity-Type as an | sent outside of the TLS tunnel, it MUST include Identity-Type as an | |||
| outer TLV, in order to signal the type of identity which that client | outer TLV in order to signal the type of identity which that client | |||
| certificate is for. | certificate is for. | |||
| 2.3. EAP-FAST | 2.3. EAP-FAST | |||
| For EAP-FAST, the session_key_seed is also part of the key_block, as | For EAP-FAST, the session_key_seed is also part of the key_block as | |||
| defined in [RFC4851] Section 5.1. | defined in [RFC4851], Section 5.1. | |||
| The definition of S-IMCK[n], MSK, and EMSK are the same as given | The definitions of S-IMCK[n], MSK, and EMSK are the same as given | |||
| above for TEAP. We reiterate that the EAP-FAST Type must be used | above for TEAP. We reiterate that the EAP-FAST Type must be used | |||
| when deriving the session_key_seed, and not the TEAP Type. | when deriving the session_key_seed and not the TEAP Type. | |||
| Unlike [RFC4851] Section 5.2, the definition of IMCK[j] places the | Unlike [RFC4851], Section 5.2, the definition of IMCK[j] places the | |||
| reference to S-IMCK after the textual label, and the concatenates the | reference to S-IMCK after the textual label and then concatenates the | |||
| IMSK instead of MSK. | IMSK instead of the MSK. | |||
| EAP-FAST previously used a PAC, which is functionally equivalent to | EAP-FAST previously used a PAC that is functionally equivalent to | |||
| session tickets provided by TLS 1.3 which contain a pre-shared key | session tickets provided by TLS 1.3, which contain a PSK along with | |||
| (PSK) along with other data. As such, the use of a PAC is deprecated | other data. As such, the use of a PAC is deprecated for EAP-FAST in | |||
| for EAP-FAST in TLS 1.3. PAC provisioning [RFC5422] is also no longer | TLS 1.3. PAC provisioning [RFC5422] is also no longer part of EAP- | |||
| part of EAP-FAST when TLS 1.3 is used. | FAST when TLS 1.3 is used. | |||
| The T-PRF given in [RFC4851] Section 5.5 is not used for TLS 1.3. | The T-PRF given in [RFC4851], Section 5.5 is not used for TLS 1.3. | |||
| Instead, it is replaced with the TLS 1.3 TLS-Exporter function. | Instead, it is replaced with the TLS 1.3 TLS-Exporter function. | |||
| 2.3.1. Client Certificates | 2.3.1. Client Certificates | |||
| The use of client certificates is still permitted when using EAP-FAST | The use of client certificates is still permitted when using EAP-FAST | |||
| with TLS 1.3. However, if the client certificate is accepted, then | with TLS 1.3. However, if the client certificate is accepted, then | |||
| the EAP peer MUST proceed with additional authentication of Phase 2, | the EAP peer MUST proceed with additional authentication of Phase 2, | |||
| as per [RFC4851] Section 7.4.1. If there is no Phase 2 data, then | as per [RFC4851], Section 7.4.1. If there is no Phase 2 data, then | |||
| the EAP server MUST reject the session. | the EAP server MUST reject the session. | |||
| That is, while [RFC4851] implicitly permits the use of client | While [RFC4851] implicitly permits the use of client certificates | |||
| certificates without proceeding to Phase 2, this practice is | without proceeding to Phase 2, this practice is forbidden when EAP- | |||
| forbidden when EAP-FAST is used with TLS 1.3. If there is a | FAST is used with TLS 1.3. If there is a requirement to use client | |||
| requirement to use client certificates with no inner tunnel methods, | certificates with no inner tunnel methods, then EAP-TLS should be | |||
| then EAP-TLS should be used instead of EAP-FAST. | used instead of EAP-FAST. | |||
| 2.4. EAP-TTLS | 2.4. EAP-TTLS | |||
| [RFC5281] Section 11.1 defines an implicit challenge when the inner | [RFC5281], Section 11.1 defines an implicit challenge when the inner | |||
| methods of CHAP [RFC1994], MS-CHAP [RFC2433], or MS-CHAPv2 [RFC2759] | methods of the Challenge Handshake Authentication Protocol (CHAP) | |||
| are used. The derivation for TLS 1.3 is instead given as | [RFC1994], Microsoft CHAP (MS-CHAP) [RFC2433], or MS-CHAPv2 [RFC2759] | |||
| are used. The derivation for TLS 1.3 is instead given as: | ||||
| EAP-TTLS_challenge = TLS-Exporter("ttls challenge",, n) | EAP-TTLS_challenge = TLS-Exporter("ttls challenge",, n) | |||
| There is no "context_value" ([RFC8446] Section 7.5) passed to the | There is no "context_value" ([RFC8446], Section 7.5) passed to the | |||
| TLS-Exporter function. The value "n" given here is the length of the | TLS-Exporter function. The value "n" given here is the length of the | |||
| data required, which [RFC5281] requires it to be 17 octets for CHAP | data required; [RFC5281] requires it to be 17 octets for CHAP | |||
| (Section 11.2.2) and MS-CHAPv2 (Section 11.2.4), and to be 9 octets | ([RFC5281], Section 11.2.2) and MS-CHAPv2 ([RFC5281], | |||
| for MS-CHAP (Section 11.2.3). | Section 11.2.4), and 9 octets for MS-CHAP ([RFC5281], | |||
| Section 11.2.3). | ||||
| When PAP, CHAP, or MS-CHAPv1 are used as inner authentication | When the Password Authentication Protocol (PAP), CHAP, or MS-CHAPv1 | |||
| methods, there is no opportunity for the EAP server to send a | are used as inner authentication methods, there is no opportunity for | |||
| protected success indication, as is done in [RFC9190] Section 2.5. | the EAP server to send a protected success indication, as is done in | |||
| Instead, when TLS session tickets are disabled, the response from the | [RFC9190], Section 2.5. Instead, when TLS session tickets are | |||
| EAP server MUST be either EAP-Success or EAP-Failure. These | disabled, the response from the EAP server MUST be either EAP-Success | |||
| responses are unprotected, and can be forged by a skilled attacker. | or EAP-Failure. These responses are unprotected and can be forged by | |||
| a skilled attacker. | ||||
| Where TLS session tickets are enabled, the response from the EAP | Where TLS session tickets are enabled, the response from the EAP | |||
| server may also continue TLS negotiation with a TLS NewSessionTicket | server may also continue TLS negotiation with a TLS NewSessionTicket | |||
| message. Since this message is protected by TLS, it can serve as the | message. Since this message is protected by TLS, it can serve as the | |||
| protected success indication. | protected success indication. | |||
| It is therefore RECOMMENDED that EAP servers always send a TLS | Therefore, it is RECOMMENDED that EAP servers always send a TLS | |||
| NewSessionTicket message, even if resumption is not configured. When | NewSessionTicket message, even if resumption is not configured. When | |||
| the EAP peer attempts to use the ticket, the EAP server can instead | the EAP peer attempts to use the ticket, the EAP server can instead | |||
| request a full authentication. As noted earlier, implementations | request a full authentication. As noted earlier, implementations | |||
| SHOULD NOT send TLS NewSessionTicket messages until the "inner | SHOULD NOT send TLS NewSessionTicket messages until the "inner | |||
| tunnel" authentication has completed, in order to take full advantage | tunnel" authentication has completed in order to take full advantage | |||
| of the message as a protected success indication. | of the message as a protected success indication. | |||
| When resumption is not used, the TLS NewSessionTicket message is not | When resumption is not used, the TLS NewSessionTicket message is not | |||
| available, and some authentication methods will not have a protected | available and some authentication methods will not have a protected | |||
| success indication. While we would like to always have a protected | success indication. While we would like to always have a protected | |||
| success indication, limitations of the underlying protocols, | success indication, limitations of the underlying protocols, | |||
| implementations, and deployment requirements make that impossible. | implementations, and deployment requirements make that impossible. | |||
| EAP peers MUST continue running their EAP state machine until they | EAP peers MUST continue running their EAP state machine until they | |||
| receive either an EAP-Success, or an EAP-Failure. Receiving a TLS | receive either an EAP-Success or an EAP-Failure. Receiving a TLS | |||
| NewSessionTicket message in response to inner method PAP, CHAP, or | NewSessionTicket message in response to inner method PAP, CHAP, or | |||
| MS-CHAP authentication is normal, and MUST NOT be treated as a | MS-CHAP authentication is normal and MUST NOT be treated as a | |||
| failure. | failure. | |||
| 2.4.1. Client Certificates | 2.4.1. Client Certificates | |||
| [RFC5281] Section 7.6 permits "Authentication of the client via | [RFC5281], Section 7.6 permits "authentication of the client via | |||
| client certificate during phase 1, with no additional authentication | client certificate during phase 1, with no additional authentication | |||
| or information exchange required.". This practice is forbidden when | or information exchange required." This practice is forbidden when | |||
| EAP-TTLS is used with TLS 1.3. If there is a requirement to use | EAP-TTLS is used with TLS 1.3. If there is a requirement to use | |||
| client certificates with no inner tunnel methods, then EAP-TLS should | client certificates with no inner tunnel methods, then EAP-TLS should | |||
| be used instead of EAP-TTLS. | be used instead of EAP-TTLS. | |||
| The use of client certificates is still permitted when using EAP-TTLS | The use of client certificates is still permitted when using EAP-TTLS | |||
| with TLS 1.3. However, if the client certificate is accepted, then | with TLS 1.3. However, if the client certificate is accepted, then | |||
| the EAP peer MUST proceed with additional authentication of Phase 2, | the EAP peer MUST proceed with additional authentication of Phase 2, | |||
| as per [RFC5281] Section 7.2 and following. If there is no Phase 2 | as per [RFC5281], Section 7.2. If there is no Phase 2 data, then the | |||
| data, then the EAP server MUST reject the session. | EAP server MUST reject the session. | |||
| 2.5. PEAP | 2.5. PEAP | |||
| When PEAP uses crypto binding, it uses a different key calculation | When PEAP uses crypto binding, it uses a different key calculation | |||
| defined in [PEAP-MPPE] which consumes inner EAP method keying | defined in [PEAP-MPPE] that consumes inner EAP method keying | |||
| material. The pseudo-random function (PRF+) used in [PEAP-MPPE] is | material. The PRF+ function used in [PEAP-MPPE] is not taken from | |||
| not taken from the TLS exporter, but is instead calculated via a | the TLS exporter but is instead calculated via a different method | |||
| different method which is given in [PEAP-PRF]. That derivation | that is given in [PEAP-PRF]. That derivation remains unchanged in | |||
| remains unchanged in this specification. | this specification. | |||
| Note that the above derivation uses SHA-1, which may be formally | Note that the above derivation uses SHA-1, which may be formally | |||
| deprecated in the near future. | deprecated in the near future. | |||
| However, the pseudo-random function (PRF+) calculation uses a PEAP | However, the PRF+ calculation uses a PEAP Tunnel Key (TK), which is | |||
| Tunnel Key which is defined in [PEAP-PRF] as: | defined in [PEAP-TK] as: | |||
| ... the TK is the first 60 octets of the Key_Material, as | | ... the TK is the first 60 octets of the Key_Material, as | |||
| specified in [RFC5216]: TLS-PRF-128 (master secret, "client EAP | | specified in [RFC5216]: TLS-PRF-128 (master secret, "client EAP | |||
| encryption", client.random || server.random). | | encryption", client.random || server.random). | |||
| We note that the text in [PEAP-PRF] does not define Key_Material. | We note that the text in [PEAP-PRF] does not define Key_Material. | |||
| Instead, it defines TK as the first octets of Key_Material, and gives | Instead, it defines TK as the first octets of Key_Material and gives | |||
| a definition of Key_Material which is appropriate for TLS versions | a definition of Key_Material that is appropriate for TLS versions | |||
| before TLS 1.3. | before TLS 1.3. | |||
| For TLS 1.3, the TK should be derived from the Key_Material defined | For TLS 1.3, the TK should be derived from the Key_Material defined | |||
| here in Section 2.1, instead of using the TLS-PRF-128 derivation | here in Section 2.1 instead of using the TLS-PRF-128 derivation given | |||
| given in [PEAP-PRF]. The method defined in [PEAP-TK] MUST NOT be | in [PEAP-PRF]. The method defined in [PEAP-TK] MUST NOT be used. | |||
| used. | ||||
| 2.5.1. Client Certificates | 2.5.1. Client Certificates | |||
| As with EAP-TTLS, [PEAP] permits the use of client certificates in | As with EAP-TTLS, [PEAP] permits the use of client certificates in | |||
| addition to inner tunnel methods. The practice of using client | addition to inner tunnel methods. The practice of using client | |||
| certificates with no "inner method" is forbidden when PEAP is used | certificates with no "inner method" is forbidden when PEAP is used | |||
| with TLS 1.3. If there is a requirement to use client certificates | with TLS 1.3. If there is a requirement to use client certificates | |||
| with no inner tunnel methods, then EAP-TLS should be used instead of | with no inner tunnel methods, then EAP-TLS should be used instead of | |||
| PEAP. | PEAP. | |||
| The use of client certificates is still permitted when using PEAP | The use of client certificates is still permitted when using PEAP | |||
| with TLS 1.3. However, if the client certificate is accepted, then | with TLS 1.3. However, if the client certificate is accepted, then | |||
| the EAP peer MUST proceed with additional authentication of the inner | the EAP peer MUST proceed with additional authentication of the inner | |||
| tunnel. If there is no inner tunnel authentication data, then the | tunnel. If there is no inner tunnel authentication data, then the | |||
| EAP server MUST reject the session. | EAP server MUST reject the session. | |||
| 3. Application Data | 3. Application Data | |||
| Unlike previous TLS versions, TLS 1.3 can continue negotiation after | Unlike previous TLS versions, TLS 1.3 can continue negotiation after | |||
| the initial TLS handshake has been completed, which TLS 1.3 calls the | the initial TLS handshake has been completed; TLS 1.3 calls this the | |||
| "CONNECTED" state. Some implementations use receipt of a Finished | "CONNECTED" state. Some implementations use receipt of a Finished | |||
| message as an indication that TLS negotiation has completed, and that | message as an indication that TLS negotiation has completed and that | |||
| an "inner tunnel" session can now be negotiated. This assumption is | an "inner tunnel" session can now be negotiated. This assumption is | |||
| not always correct with TLS 1.3. | not always correct with TLS 1.3. | |||
| Earlier TLS versions did not send application data along with the | Earlier TLS versions did not send application data along with the | |||
| Finished message. It was then possible for implementations to assume | Finished message. It was then possible for implementations to assume | |||
| that a receipt of a Finished message also meant that there was no | that a receipt of a Finished message also meant that there was no | |||
| application data available, and that another round trip was required. | application data available and that another round trip was required. | |||
| This assumption is not true with TLS 1.3, and applications relying on | This assumption is not true with TLS 1.3, and applications relying on | |||
| that behavior will not operate correctly with TLS 1.3. | that behavior will not operate correctly with TLS 1.3. | |||
| As a result, implementations MUST check for application data once the | As a result, implementations MUST check for application data once the | |||
| TLS session has been established. This check MUST be performed | TLS session has been established. This check MUST be performed | |||
| before proceeding with another round trip of TLS negotiation. TLS- | before proceeding with another round trip of TLS negotiation. TLS- | |||
| based EAP methods such as EAP-TTLS, PEAP, and EAP-FAST each have | based EAP methods, such as EAP-TTLS, PEAP, and EAP-FAST, each have | |||
| method-specific application data which MUST be processed according to | method-specific application data that MUST be processed according to | |||
| the EAP type. | the EAP Type. | |||
| TLS 1.3 in [RFC8446] Section 4.6.1 also permits NewSessionTicket | TLS 1.3 in [RFC8446], Section 4.6.1 also permits NewSessionTicket | |||
| messages to be sent after the server has received the client Finished | messages to be sent after the server has received the client Finished | |||
| message, which is a change from earlier TLS versions. This change | message, which is a change from earlier TLS versions. This change | |||
| can cause implementations to fail in a number of different ways, due | can cause implementations to fail in a number of different ways due | |||
| to a reliance on implicit behavior seen in earlier TLS versions. | to a reliance on implicit behavior seen in earlier TLS versions. | |||
| In order to correct this failure, we require that if the underlying | In order to correct this failure, we require that implementations | |||
| TLS connection is still performing negotiation, then implementations | MUST NOT send or expect to receive application data in the TLS | |||
| MUST NOT send, or expect to receive application data in the TLS | session if the underlying TLS connection is still performing | |||
| session. Implementations MUST delay processing of application data | negotiation. Implementations MUST delay processing of application | |||
| until such time as the TLS negotiation has finished. If the TLS | data until such time as the TLS negotiation has finished. If the TLS | |||
| negotiation is successful, then the application data can be examined. | negotiation is successful, then the application data can be examined. | |||
| If the TLS negotiation is unsuccessful, then the application data is | If the TLS negotiation is unsuccessful, then the application data is | |||
| untrusted, and therefore MUST be discarded without being examined. | untrusted; therefore, it MUST be discarded without being examined. | |||
| The default for many TLS library implementations is to send a | The default for many TLS library implementations is to send a | |||
| NewSessionTicket message immediately after, or along with, the | NewSessionTicket message immediately after or along with the Finished | |||
| Finished message. This ticket could be used for resumption, even if | message. This ticket could be used for resumption, even if the | |||
| the "inner tunnel" authentication has not been completed. If the | "inner tunnel" authentication has not been completed. If the ticket | |||
| ticket could be used, then it could allow a malicious EAP peer to | could be used, then it could allow a malicious EAP peer to completely | |||
| completely bypass the "inner tunnel" authentication. | bypass the "inner tunnel" authentication. | |||
| Therefore, the EAP server MUST NOT permit any session ticket to | Therefore, the EAP server MUST NOT permit any session ticket to | |||
| successfully resume authentication, unless the inner tunnel | successfully resume authentication unless the inner tunnel | |||
| authentication has completed successfully. The alternative would | authentication has completed successfully. The alternative would | |||
| allow an attacker to bypass authentication by obtaining a session | allow an attacker to bypass authentication by obtaining a session | |||
| ticket, and then immediately closing the current session, and | ticket, immediately closing the current session, and "resuming" using | |||
| "resuming" using the session ticket. | the session ticket. | |||
| To protect against that attack, implementations SHOULD NOT send | To protect against that attack, implementations SHOULD NOT send | |||
| NewSessionTicket messages until the "inner tunnel" authentication has | NewSessionTicket messages until the "inner tunnel" authentication has | |||
| completed. There is no reason to send session tickets which will | completed. There is no reason to send session tickets that will | |||
| later be invalidated or ignored. However, we recognize that this | later be invalidated or ignored. However, we recognize that this | |||
| suggestion may not always be possible to implement with some | suggestion may not always be possible to implement with some | |||
| available TLS libraries. As such, EAP servers MUST take care to | available TLS libraries. As such, EAP servers MUST take care to | |||
| either invalidate or discard session tickets which are associated | either invalidate or discard session tickets that are associated with | |||
| with sessions that terminate in EAP Failure. | sessions that terminate in EAP Failure. | |||
| The NewSessionTicket message SHOULD also be sent along with other | The NewSessionTicket message SHOULD also be sent along with other | |||
| application data, if possible. Sending that message alone prolongs | application data, if possible. Sending that message alone prolongs | |||
| the packet exchange to no benefit. In addition to prolonging the | the packet exchange to no benefit. In addition to prolonging the | |||
| packet exchange, using a separate NewSessionTicket message can lead | packet exchange, using a separate NewSessionTicket message can lead | |||
| to non-interoperable implementations. | to non-interoperable implementations. | |||
| [RFC9190] Section 2.5 requires a protected result indication which | [RFC9190], Section 2.5 requires a protected result indication, which | |||
| indicates that TLS negotiation has finished. Methods which use | indicates that TLS negotiation has finished. Methods that use "inner | |||
| "inner tunnel" methods MUST instead begin their "inner tunnel" | tunnel" methods MUST instead begin their "inner tunnel" negotiation | |||
| negotiation by sending Type-specific application data. | by sending Type-specific application data. | |||
| 3.1. Identities | 3.1. Identities | |||
| For EAP-TLS, [RFC9190] Sections 2.1.3 and 2.1.7 recommend the use of | For EAP-TLS, Sections 2.1.3 and 2.1.7 of [RFC9190] recommend the use | |||
| anonymous Network Access Identifiers (NAIs) [RFC7542] in the EAP | of anonymous Network Access Identifiers (NAIs) [RFC7542] in the EAP | |||
| Response/Identity packet. However, as EAP-TLS does not send | Response/Identity packet. However, as EAP-TLS does not send | |||
| application data inside of the TLS tunnel, that specification does | application data inside of the TLS tunnel, that specification does | |||
| not address the subject of "inner" identities in tunneled EAP | not address the subject of "inner" identities in tunneled EAP | |||
| methods. This subject must, however, be addressed for the tunneled | methods. However, this subject must be addressed for the tunneled | |||
| methods. | methods. | |||
| Using an anonymous NAI for the outer identity as per [RFC7542] | Using an anonymous NAI for the outer identity as per [RFC7542], | |||
| Section 2.4 has a few benefits. An NAI allows the EAP session to be | Section 2.4 has a few benefits. An NAI allows the EAP session to be | |||
| routed in an AAA framework as described in [RFC7542] Section 3. | routed in a AAA framework as described in [RFC7542], Section 3. | |||
| Using an anonymous realm also ensures that user identifiers are kept | Using an anonymous realm also ensures that user identifiers are kept | |||
| private. | private. | |||
| As for the inner identity, we define it generically as the | As for the inner identity, we define it generically as the | |||
| identification information carried inside of the TLS tunnel. For | identification information carried inside of the TLS tunnel. For | |||
| PEAP, that identity may be an EAP Response/Identity. For EAP-TTLS, | PEAP, that identity may be an EAP Response/Identity. For EAP-TTLS, | |||
| it may be the User-Name attribute. Vendor-specific EAP methods which | it may be the User-Name attribute. Vendor-specific EAP methods that | |||
| use TLS will generally also have an inner identity. This identity is | use TLS will generally also have an inner identity. This identity is | |||
| carried inside of the TLS tunnel, and is therefore both routed to the | carried inside of the TLS tunnel and is therefore both routed to the | |||
| correct destination by the outer identity, and kept private by the | correct destination by the outer identity and kept private by the use | |||
| use of TLS. | of TLS. | |||
| In other words, we can view the outer TLS layer of tunneled EAP | In other words, we can view the outer TLS layer of tunneled EAP | |||
| methods as a secure transport layer which is responsible for getting | methods as a secure transport layer that is responsible for getting | |||
| the actual (inner) authentication credentials securely from the EAP | the actual (inner) authentication credentials securely from the EAP | |||
| peer to the EAP server. The EAP server then uses the inner identity | peer to the EAP server. The EAP server then uses the inner identity | |||
| and inner authentication data to identify and authenticate a | and inner authentication data to identify and authenticate a | |||
| particular user. | particular user. | |||
| As the authentication data is routed to the correct destination, | As the authentication data is routed to the correct destination, | |||
| there is little reason for the inner identity to also contain a | there is little reason for the inner identity to also contain a | |||
| realm. We therefore have a few recommendations on the inner and | realm. Therefore, we have a few recommendations on the inner and | |||
| outer identities, along with their relationship to each other. | outer identities, along with their relationship to each other. | |||
| The outer identity SHOULD use an anonymous NAI realm, which allows | The outer identity SHOULD use an anonymous NAI realm that allows for | |||
| for both user privacy, and for the EAP session to be routed in an AAA | both user privacy and for the EAP session to be routed in a AAA | |||
| framework as described in [RFC7542] Section 3. Where NAI realms are | framework as described in [RFC7542], Section 3. Where NAI realms are | |||
| not used, packets will not be routable outside of the local | not used, packets will not be routable outside of the local | |||
| organization. | organization. | |||
| The inner identity MUST NOT use an anonymous NAI realm. If anonymous | The inner identity MUST NOT use an anonymous NAI realm. If anonymous | |||
| network access is desired, EAP peers MUST use EAP-TLS without peer | network access is desired, EAP peers MUST use EAP-TLS without peer | |||
| authentication, as per [RFC9190] section 2.1.5. EAP servers MUST | authentication, as per [RFC9190], Section 2.1.5. EAP servers MUST | |||
| cause authentication to fail if an EAP peer uses an anonymous "inner" | cause authentication to fail if an EAP peer uses an anonymous "inner" | |||
| identity for any TLS-based EAP method. | identity for any TLS-based EAP method. | |||
| Implementations SHOULD NOT use inner identities which contain an NAI | Implementations SHOULD NOT use inner identities that contain an NAI | |||
| realm. Many organizations typically use only one realm for all user | realm. Many organizations typically use only one realm for all user | |||
| accounts. | accounts. | |||
| However, there are situations where it is useful for an inner | However, there are situations where it is useful for an inner | |||
| identity to contain a realm. For example, an organization may have | identity to contain a realm. For example, an organization may have | |||
| multiple independent sub-organizations, each with a different and | multiple independent sub-organizations, each with a different and | |||
| unique realm. These realms may be independent of one another, or the | unique realm. These realms may be independent of one another, or the | |||
| realms may be a subdomain (or subdomains) of the public outer realm. | realms may be a subdomain (or subdomains) of the public outer realm. | |||
| In that case, an organization can configure one public "routing" | In that case, an organization can configure one public "routing" | |||
| realm, and multiple separate "inner" realms. This separation of | realm and multiple separate "inner" realms. This separation of | |||
| realms also allows an organization to split users into logical groups | realms also allows an organization to split users into logical groups | |||
| by realm, where the "user" portion of the NAI may otherwise conflict. | by realm, where the "user" portion of the NAI may otherwise conflict. | |||
| For example, "user@example.com" and "user@example.org" are different | For example, "user@example.com" and "user@example.org" are different | |||
| NAIs which can both be used as inner identities. | NAIs that can both be used as inner identities. | |||
| Using only one public realm both keeps internal information private, | Using only one public realm both keeps internal information private | |||
| and also simplifies realm management for external entities by | and simplifies realm management for external entities by minimizing | |||
| minimizing the number of realms which have to be tracked by them. | the number of realms that have to be tracked by them. | |||
| In most situations, routing identifiers should be associated with the | In most situations, routing identifiers should be associated with the | |||
| authentication data that they are routing. For example, if a user | authentication data that they are routing. For example, if a user | |||
| has an inner identity of "user@example.com", then it generally makes | has an inner identity of "user@example.com", then it generally makes | |||
| little sense to have an outer identity of "@example.org". The | little sense to have an outer identity of "@example.org". The | |||
| authentication request would then be routed to the "example.org" | authentication request would then be routed to the "example.org" | |||
| domain, which may have no idea what to do with the credentials for | domain, which may have no idea what to do with the credentials for | |||
| "user@example.com". At best, the authentication request would be | "user@example.com". At best, the authentication request would be | |||
| discarded. At worst, the "example.org" domain could harvest user | discarded. At worst, the "example.org" domain could harvest user | |||
| credentials for later use in attacks on "example.com". | credentials for later use in attacks on "example.com". | |||
| Where an EAP server receives an inner identity for a realm which it | When an EAP server receives an inner identity for a realm which it is | |||
| is not authoritative, it MUST reject the authentication. There is no | not authoritative, it MUST reject the authentication. There is no | |||
| reason for one organization to authentication users from a different | reason for one organization to authenticate users from a different | |||
| (and independent) organization. | (and independent) organization. | |||
| In addition, associating inner/outer identities from different | In addition, associating inner/outer identities from different | |||
| organizations in the same EAP authentication session means that | organizations in the same EAP authentication session means that | |||
| otherwise unrelated realms are tied together, which can make networks | otherwise unrelated realms are tied together, which can make networks | |||
| more fragile. | more fragile. | |||
| For example, an organization which uses a "hosted" AAA provider may | For example, an organization that uses a "hosted" AAA provider may | |||
| choose to use the realm of the AAA provider as the outer identity for | choose to use the realm of the AAA provider as the outer identity for | |||
| user authentication. The inner identity can then be fully-qualified: | user authentication. The inner identity can then be fully qualified: | |||
| user name plus realm of the organization. This practice may result | username plus realm of the organization. This practice may result in | |||
| in successful authentications, but it has practical difficulties. | successful authentications, but it has practical difficulties. | |||
| For example, an organization may host their own AAA servers, but use | Additionally, an organization may host their own AAA servers but use | |||
| a "cloud" identity provider to hold user accounts. In that | a "cloud" identity provider to hold user accounts. In that | |||
| situation, the organizations could see try to use their own realm as | situation, the organizations could try to use their own realm as the | |||
| the outer (routing) identity, then use an identity from the "cloud" | outer (routing) identity and then use an identity from the "cloud" | |||
| provider as the inner identity. | provider as the inner identity. | |||
| This practice is NOT RECOMMENDED. User accounts for an organization | This practice is NOT RECOMMENDED. User accounts for an organization | |||
| should be qualified as belonging to that organization, and not to an | should be qualified as belonging to that organization and not to an | |||
| unrelated third party. There is no reason to tie the configuration | unrelated third party. There is no reason to tie the configuration | |||
| of user systems to public realm routing, that configuration more | of user systems to public realm routing; that configuration more | |||
| properly belongs in the network. | properly belongs in the network. | |||
| Both of these practices mean that changing "cloud" providers is | Both of these practices mean that changing "cloud" providers is | |||
| difficult. When such a change happens, each individual EAP peer must | difficult. When such a change happens, each individual EAP peer must | |||
| be updated with a different outer identity which points to the new | be updated with a different outer identity that points to the new | |||
| "cloud" provider. This process can be expensive, and some EAP peers | "cloud" provider. This process can be expensive, and some EAP peers | |||
| may not be online when this changeover happens. The result could be | may not be online when this changeover happens. The result could be | |||
| devices or users who are unable to obtain network access, even if all | devices or users who are unable to obtain network access, even if all | |||
| relevant network systems are online and functional. | relevant network systems are online and functional. | |||
| Further, standards such as [RFC7585] allow for dynamic discovery of | Further, standards such as [RFC7585] allow for dynamic discovery of | |||
| home servers for authentication. That specification has been widely | home servers for authentication. This specification has been widely | |||
| deployed, and means that there is minimal cost to routing | deployed and means that there is minimal cost to routing | |||
| authentication to a particular domain. The authentication can also | authentication to a particular domain. The authentication can also | |||
| be routed to a particular identity provider, and changed at will, | be routed to a particular identity provider and changed at will with | |||
| with no loss of functionality. That specification is also scalable, | no loss of functionality. That specification is also scalable since | |||
| in that it does not require changes to many systems when a domain | it does not require changes to many systems when a domain updates its | |||
| updates its configuration. Instead, only one thing has to change: | configuration. Instead, only one thing has to change: the | |||
| the configuration of that domain. Everything else is discovered | configuration of that domain. Everything else is discovered | |||
| dynamically. | dynamically. | |||
| That is, changing the configuration for one domain is significantly | That is, changing the configuration for one domain is significantly | |||
| simpler and more scalable than changing the configuration for | simpler and more scalable than changing the configuration for | |||
| potentially millions of end-user devices. | potentially millions of end-user devices. | |||
| We recognize that there may be existing use-cases where the inner and | We recognize that there may be existing use cases where the inner and | |||
| outer identities use different realms. As such, we cannot forbid | outer identities use different realms. As such, we cannot forbid | |||
| that practice. We hope that the discussion above shows not only why | that practice. We hope that the discussion above shows not only why | |||
| such practices are problematic, but also that it shows how | such practices are problematic, but how alternative methods are more | |||
| alternative methods are more flexible, more scalable, and are easier | flexible, more scalable, and are easier to manage. | |||
| to manage. | ||||
| 4. Resumption | 4. Resumption | |||
| [RFC9190] Section 2.1.3 defines the process for resumption. This | [RFC9190], Section 2.1.3 defines the process for resumption. This | |||
| process is the same for all TLS-based EAP types. The only practical | process is the same for all TLS-based EAP Types. The only practical | |||
| difference is that the value of the Type field is different. The | difference is that the value of the Type field is different. The | |||
| requirements on identities, etc. remain unchanged from that document. | requirements on identities, use of TLS cipher suites, resumption, | |||
| etc. remain unchanged from that document. | ||||
| Note that if resumption is performed, then the EAP server MUST send | Note that if resumption is performed, then the EAP server MUST send | |||
| the protected success result indication (one octet of 0x00) inside | the protected success result indication (one octet of 0x00) inside | |||
| the TLS tunnel as per [RFC9190]. The EAP peer MUST in turn check for | the TLS tunnel, as per [RFC9190]. The EAP peer MUST in turn check | |||
| the existence the protected success result indication (one octet of | for the existence of the protected success result indication (one | |||
| 0x00), and cause authentication to fail if that octet is not | octet of 0x00) and cause authentication to fail if that octet is not | |||
| received. If either peer or server instead initiates an inner tunnel | received. If either the peer or the server initiates an inner tunnel | |||
| method, then that method MUST be followed, and inner authentication | method instead, then that method MUST be followed, and inner | |||
| MUST NOT be skipped. | authentication MUST NOT be skipped. | |||
| All TLS-based EAP methods support resumption, as it is a property of | All TLS-based EAP methods support resumption, as it is a property of | |||
| the underlying TLS protocol. All EAP servers and peers MUST support | the underlying TLS protocol. All EAP servers and peers MUST support | |||
| resumption for all TLS-based EAP methods. We note that EAP servers | resumption for all TLS-based EAP methods. We note that EAP servers | |||
| and peers can still choose to not resume any particular session. For | and peers can still choose to not resume any particular session. For | |||
| example, EAP servers may forbid resumption for administrative, or | example, EAP servers may forbid resumption for administrative or | |||
| other policy reasons. | other policy reasons. | |||
| It is RECOMMENDED that EAP servers and peers enable resumption, and | It is RECOMMENDED that EAP servers and peers enable resumption and | |||
| use it where possible. The use of resumption decreases the number of | use it where possible. The use of resumption decreases the number of | |||
| round trips used for authentication. This decrease leads to lower | round trips used for authentication. This decrease leads to lower | |||
| latency for authentications, and less load on the EAP server. | latency for authentications and less load on the EAP server. | |||
| Resumption can also lower load on external systems, such as databases | Resumption can also lower load on external systems, such as databases | |||
| which contain user credentials. | that contain user credentials. | |||
| As the packet flows for resumption are essentially identical across | As the packet flows for resumption are essentially identical across | |||
| all TLS-based EAP types, it is technically possible to authenticate | all TLS-based EAP Types, it is technically possible to authenticate | |||
| using EAP-TLS (Type 13), and then perform resumption using another | using EAP-TLS (Type 13) and then perform resumption using another EAP | |||
| EAP type, such as with EAP-TTLS (Type 21). However, there is no | Type, such as with EAP-TTLS (Type 21). However, there is no | |||
| practical benefit to doing so. It is also not clear what this | practical benefit to doing so. It is also not clear what this | |||
| behavior would mean, or what (if any) security issues there may be | behavior would mean or what (if any) security issues there may be | |||
| with it. As a result, this behavior is forbidden. | with it. As a result, this behavior is forbidden. | |||
| EAP servers therefore MUST NOT resume sessions across different EAP | EAP servers therefore MUST NOT resume sessions across different EAP | |||
| Types, and EAP servers MUST reject resumptions in which the EAP Type | Types, and EAP servers MUST reject resumptions in which the EAP Type | |||
| value is different from the original authentication. | value is different from the original authentication. | |||
| 5. Implementation Status | 5. Security Considerations | |||
| RFC Editor: Please remove this section before publication. | ||||
| EAP-TTLS and PEAP are implemented and tested to be interoperable with | ||||
| wpa_supplicant 2.10 and Windows 11 as EAP peers, and FreeRADIUS | ||||
| 3.0.26 and Radiator as RADIUS / EAP servers. | ||||
| The wpa_supplicant implementation requires that a configuration flag | ||||
| be set "tls_disable_tlsv1_3=0", and describes the flag as "enable | ||||
| TLSv1.3 (experimental - disabled by default)". However, | ||||
| interoperability testing shows that PEAP and EAP-TTLS both work with | ||||
| Radiator and FreeRADIUS. | ||||
| Implementors have demonstrated significant interest in getting PEAP | ||||
| and EAP-TTLS working for TLS 1.3, but less interest in EAP-FAST and | ||||
| TEAP. As such, there is no implementation experience with EAP-FAST | ||||
| or TEAP. However, we believe that the definitions described above | ||||
| are correct, and are workable. | ||||
| 6. Security Considerations | ||||
| [RFC9190] Section 5 is included here by reference. | [RFC9190], Section 5 is included here by reference. | |||
| Updating the above EAP methods to use TLS 1.3 is of high importance | Updating the above EAP methods to use TLS 1.3 is of high importance | |||
| for the Internet Community. Using the most recent security protocols | for the Internet community. Using the most recent security protocols | |||
| can significantly improve security and privacy of a network. | can significantly improve security and privacy of a network. | |||
| For PEAP, some derivations use HMAC-SHA1 [PEAP-MPPE]. In the | For PEAP, some derivations use HMAC-SHA1 [PEAP-MPPE]. In the | |||
| interests of interoperability and minimal changes, we do not change | interests of interoperability and minimal changes, we do not change | |||
| that derivation, as there are no known security issues with HMAC- | that derivation, as there are no known security issues with HMAC- | |||
| SHA1. Further, the data derived from the HMAC-SHA1 calculations is | SHA1. Further, the data derived from the HMAC-SHA1 calculations is | |||
| exchanged inside of the TLS tunnel, and is visible only to users who | exchanged inside of the TLS tunnel and is visible only to users who | |||
| have already successfully authenticated. As such, the security risks | have already successfully authenticated. As such, the security risks | |||
| are minimal. | are minimal. | |||
| 6.1. Handling of TLS NewSessionTicket Messages | 5.1. Handling of TLS NewSessionTicket Messages | |||
| In some cases, client certificates are not used for TLS-based EAP | In some cases, client certificates are not used for TLS-based EAP | |||
| methods. In those cases, the user is authenticated only after | methods. In those cases, the user is authenticated only after | |||
| successful completion of the inner tunnel authentication. However, | successful completion of the inner tunnel authentication. However, | |||
| [RFC84346] Section 4.6.1 allows that "At any time after the server | [RFC8446], Section 4.6.1 states that "at any time after the server | |||
| has received the client Finished message, it MAY send a | has received the client Finished message, it MAY send a | |||
| NewSessionTicket message." This message is sent by the server before | NewSessionTicket message." This message is sent by the server before | |||
| the inner authentication method has been run, and therefore before | the inner authentication method has been run and therefore before the | |||
| the user has been authenticated. | user has been authenticated. | |||
| This separation of data allows for a "time of use, time of check" | This separation of data allows for a "time of use, time of check" | |||
| security issue. Malicious clients can begin a session and receive a | security issue. Malicious clients can begin a session and receive a | |||
| NewSessionTicket message. The malicious client can then abort the | NewSessionTicket message. The malicious client can then abort the | |||
| authentication session, and use the obtained NewSessionTicket to | authentication session and use the obtained NewSessionTicket to | |||
| "resume" the previous session. If the server allows the session to | "resume" the previous session. If the server allows the session to | |||
| resume without verifying that the user had first been authenticated, | resume without verifying that the user had first been authenticated, | |||
| the malicious client can then obtain network access without ever | the malicious client can then obtain network access without ever | |||
| being authenticated network access without ever being authenticated. | being authenticated. | |||
| As a result, EAP servers MUST NOT assume that a user has been | As a result, EAP servers MUST NOT assume that a user has been | |||
| authenticated simply because a TLS session is being resumed. Even if | authenticated simply because a TLS session is being resumed. Even if | |||
| a session is being resumed, an EAP server MAY have policies which | a session is being resumed, an EAP server MAY have policies that | |||
| still force the inner authentication methods to be run. For example, | still force the inner authentication methods to be run. For example, | |||
| the users password may have expired in the time interval between | the user's password may have expired in the time interval between | |||
| first authenticaction, and session resumption. | first authentication and session resumption. | |||
| The guidelines given here therefore describe situations where an EAP | Therefore, the guidelines given here describe situations where an EAP | |||
| server is permitted to allow session resumption, not where it is | server is permitted to allow session resumption rather than where an | |||
| required to allow session resumption. An EAP server could simply | EAP server is required to allow session resumption. An EAP server | |||
| refuse to issue session tickets, or could run the full inner | could simply refuse to issue session tickets or could run the full | |||
| authentication even if a session was resumed. | inner authentication, even if a session was resumed. | |||
| Where session tickets are used, the EAP server SHOULD track the | Where session tickets are used, the EAP server SHOULD track the | |||
| successful completion of an inner authentication, and associate that | successful completion of an inner authentication and associate that | |||
| status with any session tickets issued for that session. This | status with any session tickets issued for that session. This | |||
| requirement can be met in a number of different ways. | requirement can be met in a number of different ways. | |||
| One way is for the EAP server to simply not send any TLS | One way is for the EAP server to simply not send any TLS | |||
| NewSessionTicket messages until the inner authentication has | NewSessionTicket messages until the inner authentication has | |||
| completed successfully. The EAP server then knows that the existence | completed successfully. The EAP server then knows that the existence | |||
| of a session ticket is proof that a user was authenticated, and the | of a session ticket is proof that a user was authenticated, and the | |||
| session can be resumed. | session can be resumed. | |||
| Another way is for the EAP server to simple discard or invalidate any | Another way is for the EAP server to simply discard or invalidate any | |||
| session tickets until after the inner authentication has completed | session tickets until after the inner authentication has completed | |||
| successfully. When the user is authenticated, a new TLS | successfully. When the user is authenticated, a new TLS | |||
| NewSessionTicket message can be sent to the client, and the new | NewSessionTicket message can be sent to the client, and the new | |||
| ticket cached and/or validated. | ticket can be cached and/or validated. | |||
| Another way is for the EAP server to associate the inner | Another way is for the EAP server to associate the inner | |||
| authentication status with each session ticket. When a session | authentication status with each session ticket. When a session | |||
| ticket is used, the authentication status is checked. When a session | ticket is used, the authentication status is checked. When a session | |||
| ticket shows that the inner authentication did not succeed, the EAP | ticket shows that the inner authentication did not succeed, the EAP | |||
| server MUST run the inner authentication method(s) in the resumed | server MUST run the inner authentication method(s) in the resumed | |||
| tunnel, and grant only access based on the success or failure of | tunnel and only grant access based on the success or failure of those | |||
| those inner methods/ | inner methods. | |||
| However, the interaction between EAP implementations and any | However, the interaction between EAP implementations and any | |||
| underlying TLS library may be complex, and the EAP server may not be | underlying TLS library may be complex, and the EAP server may not be | |||
| able to make the above guarantees. Where the EAP server is unable to | able to make the above guarantees. Where the EAP server is unable to | |||
| determine the users authentication status from the session ticket, it | determine the user's authentication status from the session ticket, | |||
| MUST assume that inner authentication has not completed, and it MUST | it MUST assume that inner authentication has not completed, and it | |||
| run the inner authentication method(s) successfully in the resumed | MUST run the inner authentication method(s) successfully in the | |||
| tunnel before granting access. | resumed tunnel before granting access. | |||
| This issue is not relevant for EAP-TLS, which only uses client | This issue is not relevant for EAP-TLS, which only uses client | |||
| certificates for authentication in the TLS handshake. It is only | certificates for authentication in the TLS handshake. It is only | |||
| relevant for TLS-based EAP methods which do not use the TLS layer to | relevant for TLS-based EAP methods that do not use the TLS layer to | |||
| authenticate | authenticate. | |||
| 6.2. Protected Success and Failure indications | 5.2. Protected Success and Failure Indications | |||
| [RFC9190] provides for protected success and failure indications as | [RFC9190] provides for protected success and failure indications as | |||
| discussed in Section 4.1.1 of [RFC4137]. These result indications | discussed in [RFC4137], Section 4.1.1. These result indications are | |||
| are provided for both full authentication, and for resumption. | provided for both full authentication and resumption. | |||
| Other TLS-based EAP methods provide these result indications only for | Other TLS-based EAP methods provide these result indications only for | |||
| resumption. | resumption. | |||
| For full authentication, the other TLS-based EAP methods do not | For full authentication, the other TLS-based EAP methods do not | |||
| provide for protected success and failure indications as part of the | provide for protected success and failure indications as part of the | |||
| outer TLS exchange. That is, the protected result indication is not | outer TLS exchange. That is, the protected result indication is not | |||
| used, and there is no TLS-layer alert sent when the inner | used, and there is no TLS-layer alert sent when the inner | |||
| authentication fails. Instead, there is simply either an EAP-Success | authentication fails. Instead, there is simply either an EAP-Success | |||
| or EAP-Failure sent. This behavior is the same as for previous TLS | or an EAP-Failure sent. This behavior is the same as for previous | |||
| versions, and therefore introduces no new security issues. | TLS versions; therefore, it introduces no new security issues. | |||
| We note that most TLS-based EAP methods provide for success and | We note that most TLS-based EAP methods provide for success and | |||
| failure indications as part of the authentication exchange performed | failure indications as part of the authentication exchange performed | |||
| inside of the TLS tunnel. These result indications are therefore | inside of the TLS tunnel. These result indications are therefore | |||
| protected, as they cannot be modified or forged. | protected, as they cannot be modified or forged. | |||
| However, some inner methods do not provide for success or failure | However, some inner methods do not provide for success or failure | |||
| indications. For example, the use of EAP-TTLS with inner PAP, CHAP, | indications. For example, the use of EAP-TTLS with inner PAP, CHAP, | |||
| or MS-CHAP. Those methods send authentication credentials to the EAP | or MS-CHAP. Those methods send authentication credentials to the EAP | |||
| server via the inner tunnel, with no method to signal success or | server via the inner tunnel with no method to signal success or | |||
| failure inside of the tunnel. | failure inside of the tunnel. | |||
| There are functionally equivalent authentication methods which can be | There are functionally equivalent authentication methods that can be | |||
| used to provide protected result indications. PAP can often be | used to provide protected result indications. PAP can often be | |||
| replaced with EAP-GTC, CHAP with EAP-MD5, and MS-CHAPv1 with MS- | replaced with EAP-Generic Token Card (EAP-GTC), CHAP with EAP-MD5, | |||
| CHAPv2 or EAP-MSCHAPv2. All of the replacement methods provide for | and MS-CHAPv1 with MS-CHAPv2 or EAP-MSCHAPv2. All of the replacement | |||
| similar functionality, and have protected success and failure | methods provide for similar functionality and have protected success | |||
| indication. The main cost to this change is additional round trips. | and failure indication. The main cost to this change is additional | |||
| round trips. | ||||
| It is RECOMMENDED that implementations deprecate inner tunnel methods | It is RECOMMENDED that implementations deprecate inner tunnel methods | |||
| which do not provide protected success and failure indications when | that do not provide protected success and failure indications when | |||
| TLS session tickets cannot be used. Implementations SHOULD use EAP- | TLS session tickets cannot be used. Implementations SHOULD use EAP- | |||
| GTC instead of PAP, and EAP-MD5 instead of CHAP. Implementations | GTC instead of PAP and EAP-MD5 instead of CHAP. Implementations | |||
| SHOULD use MS-CHAPv2 or EAP-MSCHAPv2 instead of MS-CHAPv1. New TLS- | SHOULD use MS-CHAPv2 or EAP-MSCHAPv2 instead of MS-CHAPv1. New TLS- | |||
| based EAP methods MUST provide protected success and failure | based EAP methods MUST provide protected success and failure | |||
| indications inside of the TLS tunnel. | indications inside of the TLS tunnel. | |||
| When the inner authentication protocol indicates that authentication | When the inner authentication protocol indicates that authentication | |||
| has failed, then implementations MUST fail authentication for the | has failed, then implementations MUST fail authentication for the | |||
| entire session. There may be additional protocol exchanges in order | entire session. There may be additional protocol exchanges in order | |||
| to exchange more detailed failure indications, but the final result | to exchange more detailed failure indications, but the final result | |||
| MUST be a failed authentication. As noted earlier, any session | MUST be a failed authentication. As noted earlier, any session | |||
| tickets for this failed authentication MUST be either invalidated or | tickets for this failed authentication MUST be either invalidated or | |||
| discarded. | discarded. | |||
| Similarly, when the inner authentication protocol indicates that | Similarly, when the inner authentication protocol indicates that | |||
| authentication has succeeded, then implementations SHOULD cause | authentication has succeeded, implementations SHOULD cause | |||
| authentication to succeed for the entire session. There MAY be | authentication to succeed for the entire session. There MAY be | |||
| additional protocol exchanges which could still cause failure, so we | additional protocol exchanges that could still cause failure, so we | |||
| cannot mandate sending success on successful authentication. | cannot mandate sending success on successful authentication. | |||
| In both of these cases, the EAP server MUST send an EAP-Failure or | In both of these cases, the EAP server MUST send an EAP-Failure or | |||
| EAP-Success message, as indicated by Section 2, item 4 of [RFC3748]. | EAP-Success message, as indicated by Step 4 in Section 2 of | |||
| Even though both parties have already determined the final | [RFC3748]. Even though both parties have already determined the | |||
| authentication status, the full EAP state machine must still be | final authentication status, the full EAP state machine must still be | |||
| followed. | followed. | |||
| 7. IANA Considerations | 6. IANA Considerations | |||
| This section provides guidance to the Internet Assigned Numbers | This section provides guidance to the Internet Assigned Numbers | |||
| Authority (IANA) regarding registration of values related to the TLS- | Authority (IANA) regarding the registration of values related to the | |||
| based EAP methods for TLS 1.3 protocol in accordance with [RFC8126]. | TLS-based EAP methods for the TLS 1.3 protocol in accordance with | |||
| [RFC8126]. | ||||
| This memo requires IANA to add the following labels to the TLS | ||||
| Exporter Label Registry defined by [RFC5705]. These labels are used | ||||
| in the derivation of Key_Material and Method-Id as defined above in | ||||
| Section 2. | ||||
| The labels below need to be added to the "TLS Exporter Labels" | IANA has added the following labels to the "TLS Exporter Label" | |||
| registry as "Value", with this specification as "Reference". For all | registry defined by [RFC5705]. These labels are used in the | |||
| of these labels the "DTLS-OK" field should be "N", and the | derivation of Key_Material and Method-Id as defined above in | |||
| "Recommended" field should be "Y". | Section 2, and they are used only for TEAP. | |||
| These labels are used only for TEAP. | +============================+=========+=============+===========+ | |||
| | Value | DTLS-OK | Recommended | Reference | | ||||
| +============================+=========+=============+===========+ | ||||
| | EXPORTER: teap session key | N | Y | RFC 9427 | | ||||
| | seed | | | | | ||||
| +----------------------------+---------+-------------+-----------+ | ||||
| | EXPORTER: Inner Methods | N | Y | RFC 9427 | | ||||
| | Compound Keys | | | | | ||||
| +----------------------------+---------+-------------+-----------+ | ||||
| | EXPORTER: Session Key | N | Y | RFC 9427 | | ||||
| | Generating Function | | | | | ||||
| +----------------------------+---------+-------------+-----------+ | ||||
| | EXPORTER: Extended Session | N | Y | RFC 9427 | | ||||
| | Key Generating Function | | | | | ||||
| +----------------------------+---------+-------------+-----------+ | ||||
| | TEAPbindkey@ietf.org | N | Y | RFC 9427 | | ||||
| +----------------------------+---------+-------------+-----------+ | ||||
| * EXPORTER: teap session key seed | Table 1: TLS Exporter Labels Registry | |||
| * EXPORTER: Inner Methods Compound Keys | ||||
| * EXPORTER: Session Key Generating Function | ||||
| * EXPORTER: Extended Session Key Generating Function | ||||
| * TEAPbindkey@ietf.org | ||||
| 8. References | 7. References | |||
| 8.1. Normative References | 7.1. Normative References | |||
| [RFC2119] | [IANA] IANA, "Method Types", | |||
| Bradner, S., "Key words for use in RFCs to Indicate Requirement | <https://www.iana.org/assignments/eap-numbers/>. | |||
| Levels", RFC 2119, March 1997, <http://www.rfc- | ||||
| editor.org/info/rfc2119>. | ||||
| [RFC3748] | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Aboba, B., Blunk, L., Vollbrecht, J., Carlson, J., and H. | Requirement Levels", BCP 14, RFC 2119, | |||
| Levkowetz, "Extensible Authentication Protocol (EAP)", RFC 3748, | DOI 10.17487/RFC2119, March 1997, | |||
| June 2004. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC5216] | [RFC3748] Aboba, B., Blunk, L., Vollbrecht, J., Carlson, J., and H. | |||
| Simon, D., Aboba, B., and R. Hurst, "The EAP-TLS Authentication | Levkowetz, Ed., "Extensible Authentication Protocol | |||
| Protocol", RFC 5216, March 2008 | (EAP)", RFC 3748, DOI 10.17487/RFC3748, June 2004, | |||
| <https://www.rfc-editor.org/info/rfc3748>. | ||||
| [RFC5705] | [RFC5216] Simon, D., Aboba, B., and R. Hurst, "The EAP-TLS | |||
| Rescorla, E., "Keying Material Exporters for Transport Layer | Authentication Protocol", RFC 5216, DOI 10.17487/RFC5216, | |||
| Security (TLS)", RFC 5705, March 2010 | March 2008, <https://www.rfc-editor.org/info/rfc5216>. | |||
| [RFC7170] | [RFC5705] Rescorla, E., "Keying Material Exporters for Transport | |||
| Zhou, H., et al., "Tunnel Extensible Authentication Protocol (TEAP) | Layer Security (TLS)", RFC 5705, DOI 10.17487/RFC5705, | |||
| Version 1", RFC 7170, May 2014. | March 2010, <https://www.rfc-editor.org/info/rfc5705>. | |||
| [RFC8126] | [RFC7170] Zhou, H., Cam-Winget, N., Salowey, J., and S. Hanna, | |||
| Cotton, M., et al., "Guidelines for Writing an IANA Considerations | "Tunnel Extensible Authentication Protocol (TEAP) Version | |||
| Section in RFCs", RC 8126, June 2017. | 1", RFC 7170, DOI 10.17487/RFC7170, May 2014, | |||
| <https://www.rfc-editor.org/info/rfc7170>. | ||||
| [RFC8174] | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
| Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
| Words", RFC 8174, May 2017, <http://www.rfc- | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
| editor.org/info/rfc8174>. | <https://www.rfc-editor.org/info/rfc8126>. | |||
| [RFC8446] | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| Rescorla, E., "The Transport Layer Security (TLS) Protocol Version | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| 1.3", RFC 8446, August 2018. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [RFC9190] | [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
| Mattsson, J., and Sethi, M., "Using EAP-TLS with TLS 1.3", RFC | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
| 9190, July 2021. | <https://www.rfc-editor.org/info/rfc8446>. | |||
| [IANA] | [RFC9190] Preuß Mattsson, J. and M. Sethi, "EAP-TLS 1.3: Using the | |||
| https://www.iana.org/assignments/eap-numbers/eap-numbers.xhtml#eap- | Extensible Authentication Protocol with TLS 1.3", | |||
| numbers-4 | RFC 9190, DOI 10.17487/RFC9190, February 2022, | |||
| <https://www.rfc-editor.org/info/rfc9190>. | ||||
| 8.2. Informative References | 7.2. Informative References | |||
| [MSPEAP] | [MSPEAP] Microsoft Corporation, "[MS-PEAP]: Protected Extensible | |||
| https://msdn.microsoft.com/en-us/library/cc238354.aspx | Authentication Protocol (PEAP)", Protocol Revision 31.0, | |||
| June 2021, | ||||
| <https://msdn.microsoft.com/en-us/library/cc238354.aspx>. | ||||
| [PEAP] | [PEAP] Palekar, A., Josefsson, S., Simon, D., Zorn, G., Salowey, | |||
| Palekar, A. et al., "Protected EAP Protocol (PEAP)", draft- | J., and H. Zhou, "Protected EAP Protocol (PEAP) Version | |||
| josefsson-pppext-eap-tls-eap-10.txt, October 2004. | 2", Work in Progress, Internet-Draft, draft-josefsson- | |||
| pppext-eap-tls-eap-10, 15 October 2004, | ||||
| <https://datatracker.ietf.org/doc/html/draft-josefsson- | ||||
| pppext-eap-tls-eap-10>. | ||||
| [PEAP-MPPE] | [PEAP-MPPE] | |||
| "PEAP Key Management", https ://docs.microsoft.com/en- | Microsoft Corporation, "Key Management", Section 3.1.5.7, | |||
| us/openspecs/windows_protocols/MS- | October 2020, <https://learn.microsoft.com/en- | |||
| PEAP/e75b0385-915a-4fc3-a549-fd3d06b995b0 | us/openspecs/windows_protocols/ms-peap/e75b0385-915a- | |||
| 4fc3-a549-fd3d06b995b0>. | ||||
| [PEAP-PRF] | [PEAP-PRF] Microsoft Corporation, "Intermediate PEAP MAC Key (IPMK) | |||
| "PEAP Intermediate PEAP MAC Key (IPMK) and Compound MAC Key (CMK)" | and Compound MAC Key (CMK)", Section 3.1.5.5.2.2, February | |||
| https://docs.microsoft.com/en-us/openspecs/windows_protocols/MS- | 2019, <https://docs.microsoft.com/en- | |||
| PEAP/0de54161-0bd3-424a-9b1a-854b4040a6df | us/openspecs/windows_protocols/MS-PEAP/0de54161-0bd3-424a- | |||
| 9b1a-854b4040a6df>. | ||||
| [PEAP-TK] | [PEAP-TK] Microsoft Corporation, "PEAP Tunnel Key (TK)", | |||
| "PEAP Tunnel Key (TK)" https://docs.microsoft.com/en- | Section 3.1.5.5.2.1, April 2021, | |||
| us/openspecs/windows_protocols/MS-PEAP/41288c09-3d7d-482f-a57f- | <https://docs.microsoft.com/en- | |||
| e83691d4d246 | us/openspecs/windows_protocols/MS-PEAP/41288c09-3d7d-482f- | |||
| a57f-e83691d4d246>. | ||||
| [RFC1994] | [RFC1994] Simpson, W., "PPP Challenge Handshake Authentication | |||
| Simpson, W., "PPP Challenge Handshake Authentication Protocol | Protocol (CHAP)", RFC 1994, DOI 10.17487/RFC1994, August | |||
| (CHAP)", RFC 1994, August 1996. | 1996, <https://www.rfc-editor.org/info/rfc1994>. | |||
| [RFC2433] | [RFC2433] Zorn, G. and S. Cobb, "Microsoft PPP CHAP Extensions", | |||
| Zorn, G. and Cobb, S., "Microsoft PPP CHAP Extensions", RFC 2433, | RFC 2433, DOI 10.17487/RFC2433, October 1998, | |||
| October 1998. | <https://www.rfc-editor.org/info/rfc2433>. | |||
| [RFC2759] | [RFC2759] Zorn, G., "Microsoft PPP CHAP Extensions, Version 2", | |||
| Zorn, G., "Microsoft PPP CHAP Extensions, Version 2", RFC 2759, | RFC 2759, DOI 10.17487/RFC2759, January 2000, | |||
| January 2000. | <https://www.rfc-editor.org/info/rfc2759>. | |||
| [RFC4137] | [RFC4137] Vollbrecht, J., Eronen, P., Petroni, N., and Y. Ohba, | |||
| Vollbrecht, J., et al., "State Machines for Extensible | "State Machines for Extensible Authentication Protocol | |||
| Authentication Protocol (EAP) Peer and Authenticator ", RFC 4137, | (EAP) Peer and Authenticator", RFC 4137, | |||
| August 2005. | DOI 10.17487/RFC4137, August 2005, | |||
| <https://www.rfc-editor.org/info/rfc4137>. | ||||
| [RFC4851] | [RFC4851] Cam-Winget, N., McGrew, D., Salowey, J., and H. Zhou, "The | |||
| Cam-Winget, N., et al., "The Flexible Authentication via Secure | Flexible Authentication via Secure Tunneling Extensible | |||
| Tunneling Extensible Authentication Protocol Method (EAP-FAST)", | Authentication Protocol Method (EAP-FAST)", RFC 4851, | |||
| RFC 4851, May 2007. | DOI 10.17487/RFC4851, May 2007, | |||
| <https://www.rfc-editor.org/info/rfc4851>. | ||||
| [RFC5281] | [RFC5281] Funk, P. and S. Blake-Wilson, "Extensible Authentication | |||
| Funk, P., and Blake-Wilson, S., "Extensible Authentication Protocol | Protocol Tunneled Transport Layer Security Authenticated | |||
| Tunneled Transport Layer Security Authenticated Protocol Version 0 | Protocol Version 0 (EAP-TTLSv0)", RFC 5281, | |||
| (EAP-TTLS,v0)", RFC 5281, August 2008. | DOI 10.17487/RFC5281, August 2008, | |||
| <https://www.rfc-editor.org/info/rfc5281>. | ||||
| [RFC5422] | [RFC5422] Cam-Winget, N., McGrew, D., Salowey, J., and H. Zhou, | |||
| Cam-Winget, N., et al., "Dynamic Provisioning Using Flexible | "Dynamic Provisioning Using Flexible Authentication via | |||
| Authentication via Secure Tunneling Extensible Authentication | Secure Tunneling Extensible Authentication Protocol (EAP- | |||
| Protocol (EAP-FAST)", RFC 5422, March 2009. | FAST)", RFC 5422, DOI 10.17487/RFC5422, March 2009, | |||
| <https://www.rfc-editor.org/info/rfc5422>. | ||||
| [RFC7542] | [RFC7542] DeKok, A., "The Network Access Identifier", RFC 7542, | |||
| DeKoK, A, "The Network Access Identifier", RFC 7542, May 2015. | DOI 10.17487/RFC7542, May 2015, | |||
| <https://www.rfc-editor.org/info/rfc7542>. | ||||
| [RFC7585] | [RFC7585] Winter, S. and M. McCauley, "Dynamic Peer Discovery for | |||
| Winter, S, and McCauley, M., "Dynamic Peer Discovery for RADIUS/TLS | RADIUS/TLS and RADIUS/DTLS Based on the Network Access | |||
| and RADIUS/DTLS Based on the Network Access Identifier (NAI)", RFC | Identifier (NAI)", RFC 7585, DOI 10.17487/RFC7585, October | |||
| 7585, October 2015. | 2015, <https://www.rfc-editor.org/info/rfc7585>. | |||
| Acknowledgments | Acknowledgments | |||
| Thanks to Jorge Vergara for a detailed review of the requirements for | Thanks to Jorge Vergara for a detailed review of the requirements for | |||
| various EAP types. | various EAP Types. | |||
| Thanks to Jorge Vergara, Bruno Periera Vidal, Alexander Clouter, | Thanks to Jorge Vergara, Bruno Periera Vidal, Alexander Clouter, | |||
| Karri Huhtanen, and Heikki Vatiainen for reviews of this document, | Karri Huhtanen, and Heikki Vatiainen for reviews of this document and | |||
| and for assistance with interoperability testing. | for assistance with interoperability testing. | |||
| Authors' Addresses | ||||
| Alan DeKok | Author's Address | |||
| The FreeRADIUS Server Project | ||||
| Email: aland@freeradius.org | Alan DeKok | |||
| The FreeRADIUS Server Project | ||||
| Email: aland@freeradius.org | ||||
| End of changes. 193 change blocks. | ||||
| 479 lines changed or deleted | 481 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||