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