diff options
Diffstat (limited to 'doc/rfc/rfc9140.txt')
-rw-r--r-- | doc/rfc/rfc9140.txt | 2889 |
1 files changed, 2889 insertions, 0 deletions
diff --git a/doc/rfc/rfc9140.txt b/doc/rfc/rfc9140.txt new file mode 100644 index 0000000..382b1bd --- /dev/null +++ b/doc/rfc/rfc9140.txt @@ -0,0 +1,2889 @@ + + + + +Internet Engineering Task Force (IETF) T. Aura +Request for Comments: 9140 Aalto University +Category: Standards Track M. Sethi +ISSN: 2070-1721 Ericsson + A. Peltonen + Aalto University + December 2021 + + + Nimble Out-of-Band Authentication for EAP (EAP-NOOB) + +Abstract + + The Extensible Authentication Protocol (EAP) provides support for + multiple authentication methods. This document defines the EAP-NOOB + authentication method for nimble out-of-band (OOB) authentication and + key derivation. The EAP method is intended for bootstrapping all + kinds of Internet-of-Things (IoT) devices that have no preconfigured + authentication credentials. The method makes use of a user-assisted, + one-directional, out-of-band (OOB) message between the peer device + and authentication server to authenticate the in-band key exchange. + The device must have a nonnetwork input or output interface, such as + a display, microphone, speaker, or blinking light, that can send or + receive dynamically generated messages of tens of bytes in length. + +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/rfc9140. + +Copyright Notice + + Copyright (c) 2021 IETF Trust and the persons identified as the + document authors. All rights reserved. + + This document is subject to BCP 78 and the IETF Trust's Legal + Provisions Relating to IETF Documents + (https://trustee.ietf.org/license-info) in effect on the date of + publication of this document. Please review these documents + carefully, as they describe your rights and restrictions with respect + to this document. Code Components extracted from this document must + include Revised BSD License text as described in Section 4.e of the + Trust Legal Provisions and are provided without warranty as described + in the Revised BSD License. + +Table of Contents + + 1. Introduction + 2. Terminology + 3. EAP-NOOB Method + 3.1. Protocol Overview + 3.2. Protocol Messages and Sequences + 3.2.1. Common Handshake in All EAP-NOOB Exchanges + 3.2.2. Initial Exchange + 3.2.3. OOB Step + 3.2.4. Completion Exchange + 3.2.5. Waiting Exchange + 3.3. Protocol Data Fields + 3.3.1. Peer Identifier and NAI + 3.3.2. Message Data Fields + 3.4. Fast Reconnect and Rekeying + 3.4.1. Persistent EAP-NOOB Association + 3.4.2. Reconnect Exchange + 3.4.3. User Reset + 3.5. Key Derivation + 3.6. Error Handling + 3.6.1. Invalid Messages + 3.6.2. Unwanted Peer + 3.6.3. State Mismatch + 3.6.4. Negotiation Failure + 3.6.5. Cryptographic Verification Failure + 3.6.6. Application-Specific Failure + 4. ServerInfo and PeerInfo Contents + 5. IANA Considerations + 5.1. Cryptosuites + 5.2. Message Types + 5.3. Error Codes + 5.4. ServerInfo Data Fields + 5.5. PeerInfo Data Fields + 5.6. Domain Name Reservation + 5.7. Guidance for Designated Experts + 6. Security Considerations + 6.1. Authentication Principle + 6.2. Identifying Correct Endpoints + 6.3. Trusted Path Issues and Misbinding Attacks + 6.4. Peer Identifiers and Attributes + 6.5. Downgrading Threats + 6.6. Protected Success and Failure Indications + 6.7. Channel Binding + 6.8. Denial of Service + 6.9. Recovery from Loss of Last Message + 6.10. Privacy Considerations + 6.11. EAP Security Claims + 7. References + 7.1. Normative References + 7.2. Informative References + Appendix A. Exchanges and Events per State + Appendix B. Application-Specific Parameters + Appendix C. EAP-NOOB Roaming + Appendix D. OOB Message as a URL + Acknowledgments + Authors' Addresses + +1. Introduction + + This document describes a method for registration, authentication, + and key derivation for network-connected smart devices, such as + consumer and enterprise appliances that are part of the Internet of + Things (IoT). These devices may be off-the-shelf hardware that is + sold and distributed without any prior registration or credential- + provisioning process, or they may be recycled devices after a hard + reset. Thus, the device registration in a server database, ownership + of the device, and the authentication credentials for both network + access and application-level security must all be established at the + time of the device deployment. Furthermore, many such devices have + only limited user interfaces that could be used for their + configuration. Often, the user interfaces are limited to either only + input (e.g., a camera) or output (e.g., a display screen). The + device configuration is made more challenging by the fact that the + devices may exist in large numbers and may have to be deployed or + reconfigured nimbly based on user needs. + + To summarize, devices may have the following characteristics: + + * no preestablished relation with the intended server or user, + + * no preprovisioned device identifier or authentication credentials, + or + + * an input or output interface that may be capable of only one- + directional out-of-band communication. + + Many proprietary out-of-band (OOB) configuration methods exist for + specific IoT devices. The goal of this specification is to provide + an open standard and a generic protocol for bootstrapping the + security of network-connected appliances, such as displays, printers, + speakers, and cameras. The security bootstrapping in this + specification makes use of a user-assisted OOB channel. The device + authentication relies on a user having physical access to the device, + and the key exchange security is based on the assumption that + attackers are not able to observe or modify the messages conveyed + through the OOB channel. We follow the common approach taken in + pairing protocols: performing a Diffie-Hellman key exchange over the + insecure network and authenticating the established key with the help + of the OOB channel in order to prevent impersonation attacks. + + The solution presented here is intended for devices that have either + a nonnetwork input or output interface, such as a camera, microphone, + display screen, speaker, or blinking Light Emitting Diode (LED) + light, that is able to send or receive dynamically generated messages + of tens of bytes in length. Naturally, this solution may not be + appropriate for very small sensors or actuators that have no user + interface at all or for devices that are inaccessible to the user. + We also assume that the OOB channel is at least partly automated + (e.g., a camera scanning a bar code); thus, there is no need to + absolutely minimize the length of the data transferred through the + OOB channel. This differs, for example, from Bluetooth pairing + [Bluetooth], where it is essential to minimize the length of the + manually transferred or compared codes. The OOB messages in this + specification are dynamically generated. Thus, we do not support + static printed registration codes. One reason for requiring dynamic + OOB messages is that the receipt of the OOB message authorizes the + server to take ownership of the device. Dynamic OOB messages are + more secure than static printed codes, which could be leaked and + later misused. + +2. Terminology + + 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. + + In addition, this document frequently uses the following terms as + they have been defined in [RFC5216]: + + authenticator + The entity initiating EAP authentication. + + peer + The entity that responds to the authenticator. In + [IEEE-802.1X], this entity is known as the supplicant. (We use + the terms peer, device, and peer device interchangeably.) + + server + The entity that terminates the EAP authentication method with + the peer. In the case where no backend authentication server + is used, the EAP server is part of the authenticator. In the + case where the authenticator operates in pass-through mode, the + EAP server is located on the backend authentication server. + +3. EAP-NOOB Method + + This section defines the EAP-NOOB method. The protocol is a + generalized version of the original idea presented by Sethi et al. + [Sethi14]. + +3.1. Protocol Overview + + One EAP-NOOB method execution spans two or more EAP conversations, + called Exchanges in this specification. Each Exchange consists of + several EAP request-response pairs. At least two separate EAP + conversations are needed to give the human user time to deliver the + OOB message between them. + + The overall protocol starts with the Initial Exchange, which + comprises four EAP request-response pairs. In the Initial Exchange, + the server allocates an identifier to the peer, and the server and + peer negotiate the protocol version and cryptosuite (i.e., + cryptographic algorithm suite), exchange nonces, and perform an + Ephemeral Elliptic Curve Diffie-Hellman (ECDHE) key exchange. The + user-assisted OOB Step then takes place. This step requires only one + out-of-band message, either from the peer to the server or from the + server to the peer. While waiting for the OOB Step action, the peer + MAY probe the server by reconnecting to it with EAP-NOOB. If the OOB + Step has already taken place, the probe leads to the Completion + Exchange, which completes the mutual authentication and key + confirmation. On the other hand, if the OOB Step has not yet taken + place, the probe leads to the Waiting Exchange, and the peer will + perform another probe after a server-defined minimum waiting time. + The Initial Exchange and Waiting Exchange always end in EAP-Failure, + while the Completion Exchange may result in EAP-Success. Once the + peer and server have performed a successful Completion Exchange, both + endpoints store the created association in persistent storage, and + the OOB Step is not repeated. Thereafter, creation of new temporal + keys, ECDHE rekeying, and updates of cryptographic algorithms can be + achieved with the Reconnect Exchange. + + OOB Output/Initial Exchange/ + Waiting Exchange + .-----. + | v + .------------------. Initial .------------------. + | | Exchange | | + .->| Unregistered (0) |---------------->|Waiting for OOB(1)| + | | (ephemeral) | | (ephemeral) | + | | | | | + | '------------------' '------------------' + | | | ^ + User Reset Completion | | | + | Exchange | OOB OOB + |<-------. .-------------------------' Input Reject/ + | | | | Initial + | | | | Exchange + | | v v | + | .------------------. Completion .------------------. + | | | Exchange | | + | | Registered (4) |<----------------| OOB Received (2) | + | | (persistent) | | (ephemeral) | + | | | | | + | '------------------' '------------------' + | | ^ + | Mobility/ | + | Timeout/ Reconnect + | Failure Exchange + | | | + | v | + | .------------------. + | | | + '--| Reconnecting (3) | + | (persistent) | + | | + '------------------' + + Figure 1: EAP-NOOB Server-Peer Association State Machine + + Figure 1 shows the association state machine, which is the same for + the server and for the peer. (For readability, only the main state + transitions are shown. The complete table of transitions can be + found in Appendix A.) When the peer initiates the EAP-NOOB method, + the server chooses the ensuing message exchange based on the + combination of the server and peer states. The EAP server and peer + are initially in the Unregistered (0) state, in which no state + information needs to be stored. Before a successful Completion + Exchange, the server-peer association state is ephemeral in both the + server and peer (ephemeral states 0..2), and a timeout or error may + cause one or both endpoints to go back to the Unregistered (0) state + so that the Initial Exchange is repeated. After the Completion + Exchange has resulted in EAP-Success, the association state becomes + persistent (persistent states 3..4). Only user reset or memory + failure can cause the return of the server or the peer from the + persistent states to the ephemeral states and to the Initial + Exchange. + + The server MUST NOT repeat a successful OOB Step with the same peer + except if the association with the peer is explicitly reset by the + user or lost due to failure of the persistent storage in the server. + More specifically, once the association has entered the Registered + (4) state, the server MUST NOT delete the association or go back to + the ephemeral states 0..2 without explicit user approval. Similarly, + the peer MUST NOT repeat the OOB Step unless the user explicitly + deletes the association with the server from the peer or resets the + peer to the Unregistered (0) state. The server and peer MAY + implement user reset of the association by deleting the state data + from that endpoint. If an endpoint continues to store data about the + association after the user reset, its behavior MUST be equivalent to + having deleted the association data. + + It can happen that the peer accidentally (or through user reset) + loses its persistent state and reconnects to the server without a + previously allocated peer identifier. In that case, the server MUST + treat the peer as a new peer. The server MAY use auxiliary + information, such as the PeerInfo field received in the Initial + Exchange, to detect multiple associations with the same peer. + However, it MUST NOT delete or merge redundant associations without + user or application approval because EAP-NOOB internally has no + secure way of verifying that the two peers are the same physical + device. Similarly, the server might lose the association state + because of a memory failure or user reset. In that case, the only + way to recover is that the user also resets the peer. + + A special feature of the EAP-NOOB method is that the server is not + assumed to have any a priori knowledge of the peer. Therefore, the + peer initially uses the generic identity string "noob@eap-noob.arpa" + as its Network Access Identifier (NAI). The server then allocates a + server-specific identifier to the peer. The generic NAI serves two + purposes: firstly, it tells the server that the peer supports and + expects the EAP-NOOB method; secondly, it allows routing of the EAP- + NOOB sessions to a specific authentication server in an + Authentication, Authorization, and Accounting (AAA) architecture. + + EAP-NOOB is an unusual EAP method in that the peer has to have + multiple EAP conversations with the server before it can receive EAP- + Success. The reason is that, while EAP allows delays between the + request-response pairs, e.g., for repeated password entry, the user + delays in OOB authentication can be much longer than in password + trials. Moreover, EAP-NOOB supports peers with no input capability + in the user interface (e.g., LED light bulbs). Since users cannot + initiate the protocol in these devices, the devices have to perform + the Initial Exchange opportunistically and hope for the OOB Step to + take place within a timeout period (NoobTimeout), which is why the + timeout needs to be several minutes rather than seconds. To support + such high-latency OOB channels, the peer and server perform the + Initial Exchange in one EAP conversation, then allow time for the OOB + message to be delivered, and later perform the Waiting Exchange and + Completion Exchange in different EAP conversations. + +3.2. Protocol Messages and Sequences + + This section defines the EAP-NOOB exchanges, which correspond to EAP + conversations. The exchanges start with a common handshake, which + determines the type of the following exchange. The common handshake + messages and the subsequent messages for each exchange type are + listed in the diagrams below. The diagrams also specify the data + fields present in each message. Each exchange comprises multiple EAP + request-response pairs and ends in either EAP-Failure, indicating + that authentication is not (yet) successful, or in EAP-Success. + +3.2.1. Common Handshake in All EAP-NOOB Exchanges + + All EAP-NOOB exchanges start with common handshake messages. The + handshake begins with the identity request and response that are + common to all EAP methods. Their purpose is to enable the AAA + architecture to route the EAP conversation to the EAP server and to + enable the EAP server to select the EAP method. The handshake then + continues with one EAP-NOOB request-response pair in which the server + discovers the peer identifier used in EAP-NOOB and the peer state. + + In more detail, each EAP-NOOB exchange begins with the authenticator + sending an EAP-Request/Identity packet to the peer. From this point + on, the EAP conversation occurs between the server and the peer, and + the authenticator acts as a pass-through device. The peer responds + to the authenticator with an EAP-Response/Identity packet, which + contains the Network Access Identifier (NAI). The authenticator, + acting as a pass-through device, forwards this response and the + following EAP conversation between the peer and the AAA architecture. + The AAA architecture routes the conversation to a specific AAA server + (called "EAP server" or simply "server" in this specification) based + on the realm part of the NAI. The server selects the EAP-NOOB method + based on the user part of the NAI, as defined in Section 3.3.1. + + After receiving the EAP-Response/Identity message, the server sends + the first EAP-NOOB request (Type=1) to the peer, which responds with + the peer identifier (PeerId) and state (PeerState) in the range 0..3. + However, the peer SHOULD omit the PeerId from the response (Type=1) + when PeerState=0. The server then chooses the EAP-NOOB exchange, + i.e., the ensuing message sequence, as explained below. The peer + recognizes the exchange based on the message type field (Type) of the + next EAP-NOOB request received from the server. + + The server MUST determine the exchange type based on the combination + of the peer and server states as follows (also summarized in + Table 14). If either the peer or server is in the Unregistered (0) + state and the other is in one of the ephemeral states (0..2), the + server chooses the Initial Exchange. If either the peer or server is + in the OOB Received (2) state and the other is either in the Waiting + for OOB (1) or OOB Received (2) state, the OOB Step has taken place + and the server chooses the Completion Exchange. If both the server + and peer are in the Waiting for OOB (1) state, the server chooses the + Waiting Exchange. If the peer is in the Reconnecting (3) state and + the server is in the Registered (4) or Reconnecting (3) state, the + server chooses the Reconnect Exchange. All other state combinations + are error situations where user action is required, and the server + SHOULD indicate such errors to the peer with the error code 2002 (see + Section 3.6.3). Note also that the peer MUST NOT initiate EAP-NOOB + when the peer is in the Registered (4) state. + + + EAP Peer Authenticator EAP Server + | | | + |<----------- EAP-Request/Identity -| | + | | + | | + |------------ EAP-Response/Identity -------------->| + | (NAI=noob@eap-noob.arpa) | + | | + | | + |<----------- EAP-Request/EAP-NOOB ----------------| + | (Type=1) | + | | + | | + |------------ EAP-Response/EAP-NOOB -------------->| + | (Type=1,[PeerId],PeerState=1) | + | | + | continuing with exchange-specific messages... | + + Figure 2: Common Handshake in All EAP-NOOB Exchanges + +3.2.2. Initial Exchange + + The Initial Exchange comprises the common handshake and two further + EAP-NOOB request-response pairs: one for version, cryptosuite, and + parameter negotiation and the other for the ECDHE key exchange. The + first EAP-NOOB request (Type=2) from the server contains a newly + allocated PeerId for the peer and an optional NewNAI for assigning a + new NAI to the peer. The server allocates a new PeerId in the + Initial Exchange regardless of any old PeerId received in the + previous response (Type=1). The server also sends in the request a + list of the protocol versions (Vers) and cryptosuites (Cryptosuites) + it supports, an indicator of the OOB channel directions it supports + (Dirs), and a ServerInfo object. The peer chooses one of the + versions and cryptosuites. The peer sends a response (Type=2) with + the selected protocol version (Verp), the received PeerId, the + selected cryptosuite (Cryptosuitep), an indicator of the OOB channel + direction(s) selected by the peer (Dirp), and a PeerInfo object. In + the second EAP-NOOB request and response (Type=3), the server and + peer exchange the public components of their ECDHE keys and nonces + (PKs, Ns, PKp, and Np). The ECDHE keys MUST be based on the + negotiated cryptosuite, i.e., Cryptosuitep. The Initial Exchange + always ends with EAP-Failure from the server because the + authentication cannot yet be completed. + + EAP Peer EAP Server + | ...continuing from common handshake | + | | + |<----------- EAP-Request/EAP-NOOB ----------------| + | (Type=2,Vers,PeerId,[NewNAI], | + | Cryptosuites,Dirs,ServerInfo) | + | | + | | + |------------ EAP-Response/EAP-NOOB -------------->| + | (Type=2,Verp,PeerId,Cryptosuitep, | + | Dirp,PeerInfo) | + | | + | | + |<----------- EAP-Request/EAP-NOOB ----------------| + | (Type=3,PeerId,PKs,Ns,[SleepTime]) | + | | + | | + |------------ EAP-Response/EAP-NOOB -------------->| + | (Type=3,PeerId,PKp,Np) | + | | + | | + |<----------- EAP-Failure -------------------------| + | | + + Figure 3: Initial Exchange + + At the conclusion of the Initial Exchange, both the server and the + peer move to the Waiting for OOB (1) state. + +3.2.3. OOB Step + + The OOB Step, labeled as OOB Output and OOB Input in Figure 1, takes + place after the Initial Exchange. Depending on the negotiated OOB + channel direction, the peer or the server outputs the OOB message as + shown in Figures 4 or 5, respectively. The data fields are the + PeerId, the secret nonce Noob, and the cryptographic fingerprint + Hoob. The contents of the data fields are defined in Section 3.3.2. + The OOB message is delivered to the other endpoint via a user- + assisted OOB channel. + + For brevity, we will use the terms OOB sender and OOB receiver in + addition to the already familiar EAP server and EAP peer. If the OOB + message is sent in the server-to-peer direction, the OOB sender is + the server and the OOB receiver is the peer. On the other hand, if + the OOB message is sent in the peer-to-server direction, the OOB + sender is the peer and the OOB receiver is the server. + + EAP Peer EAP Server + | | + |=================OOB=============================>| + | (PeerId,Noob,Hoob) | + | | + + Figure 4: OOB Step, from Peer to EAP Server + + + EAP Peer EAP Server + | | + |<================OOB==============================| + | (PeerId,Noob,Hoob) | + | | + + Figure 5: OOB Step, from EAP Server to Peer + + The OOB receiver MUST compare the received value of the fingerprint + Hoob (see Section 3.3.2) with a value that it computed locally for + the PeerID received. This integrity check ensures that the endpoints + agree on contents of the Initial Exchange. If the values are equal, + the receiver moves to the OOB Received (2) state. Otherwise, the + receiver MUST reject the OOB message. For usability reasons, the OOB + receiver SHOULD indicate the acceptance or rejection of the OOB + message to the user. The receiver SHOULD reject invalid OOB messages + without changing its state in the association state machine until an + application-specific number of invalid messages (OobRetries) has been + reached; after which, the receiver SHOULD consider it an error and go + back to the Unregistered (0) state. + + The server or peer MAY send multiple OOB messages with different Noob + values while in the Waiting for OOB (1) state. The OOB sender SHOULD + remember the Noob values until they expire and accept any one of them + in the following Completion Exchange. The Noob values sent by the + server expire after an application-dependent timeout (NoobTimeout), + and the server MUST NOT accept Noob values older than that in the + Completion Exchange. The RECOMMENDED value for NoobTimeout is 3600 + seconds if there are no application-specific reasons for making it + shorter or longer. The Noob values sent by the peer expire, as + defined in Section 3.2.5. + + The OOB receiver does not accept further OOB messages after it has + accepted one and moved to the OOB Received (2) state. However, the + receiver MAY buffer redundant OOB messages in case an OOB message + expiry or similar error detected in the Completion Exchange causes it + to return to the Waiting for OOB (1) state. It is RECOMMENDED that + the OOB receiver notifies the user about redundant OOB messages, but + it MAY instead discard them silently. + + The sender will typically generate a new Noob, and therefore a new + OOB message, at constant time intervals (NoobInterval). The + RECOMMENDED interval is + + NoobInterval = NoobTimeout / 2 + + in which case, the receiver of the OOB will at any given time accept + either of the two latest Noob values. However, the timing of the + Noob generation may also be based on user interaction or on + implementation considerations. + + Even though not recommended (see Section 3.3), this specification + allows both directions to be negotiated (Dirp=3) for the OOB channel. + In that case, both sides SHOULD output the OOB message, and it is up + to the user to deliver at least one of them. + + The details of the OOB channel implementation including the message + encoding are defined by the application. Appendix D gives an example + of how the OOB message can be encoded as a URL that may be embedded + in a dynamic QR code or NFC (Near Field Communication) tag. + +3.2.4. Completion Exchange + + After the Initial Exchange, if the OOB channel directions selected by + the peer include the peer-to-server direction, the peer SHOULD + initiate the EAP-NOOB method again after an applications-specific + waiting time in order to probe for completion of the OOB Step. If + the OOB channel directions selected by the peer include the server- + to-peer direction and the peer receives the OOB message, it SHOULD + initiate the EAP-NOOB method immediately. Depending on the + combination of the peer and server states, the server continues with + the Completion Exchange or Waiting Exchange (see Section 3.2.1 on how + the server makes this decision). + + The Completion Exchange comprises the common handshake and one or two + further EAP-NOOB request-response pairs. If the peer is in the + Waiting for OOB (1) state, the OOB message has been sent in the peer- + to-server direction. In that case, only one request-response pair + (Type=6) takes place. In the request, the server sends the NoobId + value (see Section 3.3.2), which the peer uses to identify the exact + OOB message received by the server. On the other hand, if the peer + is in the OOB Received (2) state, the direction of the OOB message is + from server to peer. In this case, two request-response pairs + (Type=5 and Type=6) are needed. The purpose of the first request- + response pair (Type=5) is that it enables the server to discover + NoobId, which identifies the exact OOB message received by the peer. + The server returns the same NoobId to the peer in the latter request. + + In the last request-response pair (Type=6) of the Completion + Exchange, the server and peer exchange message authentication codes. + Both sides MUST compute the keys Kms and Kmp, as defined in + Section 3.5, and the message authentication codes MACs and MACp, as + defined in Section 3.3.2. Both sides MUST compare the received + message authentication code with a locally computed value. If the + peer finds that it has received the correct value of MACs and the + server finds that it has received the correct value of MACp, the + Completion Exchange ends in EAP-Success. Otherwise, the endpoint + where the comparison fails indicates this with an error message + (error code 4001, see Section 3.6.5), and the Completion Exchange + ends in EAP-Failure. + + After the successful Completion Exchange, both the server and the + peer move to the Registered (4) state. They also derive the output + keying material and store the persistent EAP-NOOB association state, + as defined in Sections 3.4 and 3.5. + + It is possible that the OOB message expires before it is received. + In that case, the sender of the OOB message no longer recognizes the + NoobId that it receives in the Completion Exchange. Another reason + why the OOB sender might not recognize the NoobId is if the received + OOB message was spoofed and contained an attacker-generated Noob + value. The recipient of an unrecognized NoobId indicates this with + an error message (error code 2003, see Section 3.6.1), and the + Completion Exchange ends in EAP-Failure. The recipient of the error + message 2003 moves back to the Waiting for OOB (1) state. This state + transition is called OOB Reject in Figure 1 (even though it really is + a specific type of failed Completion Exchange). On the other hand, + the sender of the error message stays in its previous state. + + Although it is not expected to occur in practice, poor user interface + design could lead to two OOB messages delivered simultaneously, one + from the peer to the server and the other from the server to the + peer. The server detects this event in the beginning of the + Completion Exchange by observing that both the server and peer are in + the OOB Received (2) state. In that case, as a tiebreaker, the + server MUST behave as if only the server-to-peer message had been + delivered. + + + EAP Peer EAP Server + | ...continuing from common handshake | + | | + |<----------- [ EAP-Request/EAP-NOOB ] ------------| + | (Type=5,PeerId) | + | | + | | + |------------ [ EAP-Response/EAP-NOOB ] ---------->| + | (Type=5,PeerId,NoobId) | + | | + | | + |<----------- EAP-Request/EAP-NOOB ----------------| + | (Type=6,PeerId,NoobId,MACs) | + | | + | | + |------------ EAP-Response/EAP-NOOB -------------->| + | (Type=6,PeerId,MACp) | + | | + | | + |<----------- EAP-Success -------------------------| + | | + + Figure 6: Completion Exchange + +3.2.5. Waiting Exchange + + As explained in Section 3.2.4, the peer SHOULD probe the server for + completion of the OOB Step. When the combination of the peer and + server states indicates that the OOB message has not yet been + delivered, the server chooses the Waiting Exchange (see Section 3.2.1 + on how the server makes this decision). The Waiting Exchange + comprises the common handshake and one further request-response pair, + and it always ends in EAP-Failure. + + In order to limit the rate at which peers probe the server, the + server MAY send to the peer either in the Initial Exchange or in the + Waiting Exchange a minimum time to wait before probing the server + again. A peer that has not received an OOB message SHOULD wait at + least the server-specified minimum waiting time in seconds + (SleepTime) before initiating EAP again with the same server. The + peer uses the latest SleepTime value that it has received in or after + the Initial Exchange. If the server has not sent any SleepTime + value, the peer MUST wait for an application-specified minimum time + (SleepTimeDefault). + + After the Waiting Exchange, the peer MUST discard (from its local + ephemeral storage) Noob values that it has sent to the server in OOB + messages that are older than the application-defined timeout + NoobTimeout (see Section 3.2.3). The peer SHOULD discard such + expired Noob values even if the probing failed because of, e.g., + failure to connect to the EAP server or an incorrect message + authentication code. The timeout of peer-generated Noob values is + defined like this in order to allow the peer to probe the server once + after it has waited for the server-specified SleepTime. + + If the server and peer have negotiated to use only the server-to-peer + direction for the OOB channel (Dirp=2), the peer SHOULD nevertheless + probe the server. The purpose of this is to keep the server informed + about the peers that are still waiting for OOB messages. The server + MAY set SleepTime to a high number (e.g., 3600) to prevent the peer + from probing the server frequently. + + + EAP Peer EAP Server + | ...continuing from common handshake | + | | + |<----------- EAP-Request/EAP-NOOB ----------------| + | (Type=4,PeerId,[SleepTime]) | + | | + | | + |------------ EAP-Response/EAP-NOOB -------------->| + | (Type=4,PeerId) | + | | + | | + |<----------- EAP-Failure -------------------------| + | | + + Figure 7: Waiting Exchange + +3.3. Protocol Data Fields + + This section defines the various identifiers and data fields used in + the EAP-NOOB method. + +3.3.1. Peer Identifier and NAI + + The server allocates a new peer identifier (PeerId) for the peer in + the Initial Exchange. The peer identifier MUST follow the syntax of + the utf8-username specified in [RFC7542]. The server MUST generate + the identifiers in such a way that they do not repeat and cannot be + guessed by the peer or third parties before the server sends them to + the peer in the Initial Exchange. One way to generate the + identifiers is to choose a random 16-byte identifier and to base64url + encode it without padding [RFC4648] into a 22-character ASCII string. + Another way to generate the identifiers is to choose a random + 22-character alphanumeric ASCII string. It is RECOMMENDED to not use + identifiers longer than this because they result in longer OOB + messages. + + The peer uses the allocated PeerId to identify itself to the server + in the subsequent exchanges. The peer MUST copy the PeerId byte by + byte from the message where it was allocated, and the server MUST + perform a byte-by-byte comparison between the received and the + previously allocated PeerID. The peer sets the PeerId value in + response type 1 as follows. As stated in Section 3.2.1, when the + peer is in the Unregistered (0) state, it SHOULD omit the PeerId from + response type 1. When the peer is in one of the states 1..2, it MUST + use the PeerId that the server assigned to it in the latest Initial + Exchange. When the peer is in one of the persistent states 3..4, it + MUST use the PeerId from its persistent EAP-NOOB association. (The + PeerId is written to the association when the peer moves to the + Registered (4) state after a Completion Exchange.) + + The default NAI for the peer is "noob@eap-noob.arpa". The peer + implementation MAY allow the user or application to configure a + different NAI, which overrides the default NAI. Furthermore, the + server MAY assign a new NAI to the peer in the Initial Exchange or + Reconnect Exchange in the NewNAI field of request types 2 and 7 to + override any previous NAI value. When the peer is in the + Unregistered (0) state, or when the peer is in one of the states 1..2 + and the server did not send a NewNAI in the latest Initial Exchange, + the peer MUST use the configured NAI or, if it does not exist, the + default NAI. When the peer is in one of the states 1..2 and the + server sent a NewNAI in the latest Initial Exchange, the peer MUST + use this server-assigned NAI. When the peer moves to the Registered + (4) state after the Completion Exchange, it writes to the persistent + EAP-NOOB association the same NAI value that it used in the + Completion Exchange. When the peer is in the Reconnecting (3) or + Registered (4) state, it MUST use the NAI from its persistent EAP- + NOOB association. When the server sends NewNAI in the Reconnect + Exchange, the peer writes its value to the persistent EAP-NOOB + association when it moves from the Reconnecting (3) state to the + Registered (4) state. All the NAI values MUST follow the syntax + specified in [RFC7542]. + + The purpose of the server-assigned NAI is to enable more flexible + routing of the EAP sessions over the AAA infrastructure, including + roaming scenarios (see Appendix C). Moreover, some authenticators or + AAA servers use the realm part of the assigned NAI to determine peer- + specific connection parameters, such as isolating the peer to a + specific VLAN. On the other hand, the user- or application- + configured NAI enables registration of new devices while roaming. It + also enables manufacturers to set up their own AAA servers for + bootstrapping of new peer devices. + + The peer's PeerId and server-assigned NAI are ephemeral until a + successful Completion Exchange takes place. Thereafter, the values + become parts of the persistent EAP-NOOB association until the user + resets the peer and server or until a new NAI is assigned in the + Reconnect Exchange. + +3.3.2. Message Data Fields + + Table 1 defines the data fields in the protocol messages. The in- + band messages are formatted as JSON objects [RFC8259] in UTF-8 + encoding. The JSON member names are in the left-hand column of the + table. + + +===============+=================================================+ + | Data Field | Description | + +===============+=================================================+ + | Vers, Verp | EAP-NOOB protocol versions supported by the EAP | + | | server and the protocol version chosen by the | + | | peer. Vers is a JSON array of unsigned | + | | integers, and Verp is an unsigned integer. | + | | Example values are "[1]" and "1", respectively. | + +---------------+-------------------------------------------------+ + | PeerId | Peer identifier, as defined in Section 3.3.1. | + +---------------+-------------------------------------------------+ + | NAI, NewNAI | Peer NAI and server-assigned new peer NAI, as | + | | defined in Section 3.3.1. | + +---------------+-------------------------------------------------+ + | Type | EAP-NOOB message type. The type is an integer | + | | in the range 0..9. EAP-NOOB requests and the | + | | corresponding responses share the same type | + | | value. | + +---------------+-------------------------------------------------+ + | PeerState | Peer state is an integer in the range 0..4 (see | + | | Figure 1). However, only values 0..3 are ever | + | | sent in the protocol messages. | + +---------------+-------------------------------------------------+ + | PKs, PKp | The public components of the ECDHE keys of the | + | | server and peer. PKs and PKp are sent in the | + | | JSON Web Key (JWK) format [RFC7517]. The | + | | detailed format of the JWK object is defined by | + | | the cryptosuite. | + +---------------+-------------------------------------------------+ + | Cryptosuites, | The identifiers of cryptosuites supported by | + | Cryptosuitep | the server and of the cryptosuite selected by | + | | the peer. The server-supported cryptosuites in | + | | Cryptosuites are formatted as a JSON array of | + | | the identifier integers. The server MUST send | + | | a nonempty array with no repeating elements, | + | | ordered by decreasing priority. The peer MUST | + | | respond with exactly one suite in the | + | | Cryptosuitep value, formatted as an identifier | + | | integer. Mandatory-to-implement cryptosuites | + | | and the registration procedure for new | + | | cryptosuites are specified in Section 5.1. | + | | Example values are "[1]" and "1", respectively. | + +---------------+-------------------------------------------------+ + | Dirs, Dirp | An integer indicating the OOB channel | + | | directions supported by the server and the | + | | directions selected by the peer. The possible | + | | values are 1=peer-to-server, 2=server-to-peer, | + | | and 3=both directions. | + +---------------+-------------------------------------------------+ + | Dir | The actual direction of the OOB message | + | | (1=peer-to-server, 2=server-to-peer). This | + | | value is not sent over any communication | + | | channel, but it is included in the computation | + | | of the cryptographic fingerprint Hoob. | + +---------------+-------------------------------------------------+ + | Ns, Np | 32-byte nonces for the Initial Exchange. | + +---------------+-------------------------------------------------+ + | ServerInfo | This field contains information about the | + | | server to be passed from the EAP method to the | + | | application layer in the peer. The information | + | | is specific to the application or to the OOB | + | | channel, and it is encoded as a JSON object of | + | | at most 500 bytes. It could include, for | + | | example, the access-network name and server | + | | name, a Uniform Resource Locator (URL) | + | | [RFC3986], or some other information that helps | + | | the user deliver the OOB message to the server | + | | through the out-of-band channel. | + +---------------+-------------------------------------------------+ + | PeerInfo | This field contains information about the peer | + | | to be passed from the EAP method to the | + | | application layer in the server. The | + | | information is specific to the application or | + | | to the OOB channel, and it is encoded as a JSON | + | | object of at most 500 bytes. It could include, | + | | for example, the peer brand, model, and serial | + | | number, which help the user distinguish between | + | | devices and deliver the OOB message to the | + | | correct peer through the out-of-band channel. | + +---------------+-------------------------------------------------+ + | SleepTime | The number of seconds for which the peer MUST | + | | NOT start a new execution of the EAP-NOOB | + | | method with the authenticator, unless the peer | + | | receives the OOB message or the sending is | + | | triggered by an application-specific user | + | | action. The server can use this field to limit | + | | the rate at which peers probe it. SleepTime is | + | | an unsigned integer in the range 0..3600. | + +---------------+-------------------------------------------------+ + | Noob | 16-byte secret nonce sent through the OOB | + | | channel and used for the session key | + | | derivation. The endpoint that received the OOB | + | | message uses this secret in the Completion | + | | Exchange to authenticate the exchanged key to | + | | the endpoint that sent the OOB message. | + +---------------+-------------------------------------------------+ + | Hoob | 16-byte cryptographic fingerprint (i.e., hash | + | | value) computed from all the parameters | + | | exchanged in the Initial Exchange and in the | + | | OOB message. Receiving this fingerprint over | + | | the OOB channel guarantees the integrity of the | + | | key exchange and parameter negotiation. Hence, | + | | it authenticates the exchanged key to the | + | | endpoint that receives the OOB message. | + +---------------+-------------------------------------------------+ + | NoobId | 16-byte identifier for the OOB message, | + | | computed with a one-way function from the nonce | + | | Noob in the message. | + +---------------+-------------------------------------------------+ + | MACs, MACp | Message authentication codes (HMAC) for mutual | + | | authentication, key confirmation, and integrity | + | | check on the exchanged information. The input | + | | to the HMAC is defined below, and the key for | + | | the HMAC is defined in Section 3.5. | + +---------------+-------------------------------------------------+ + | Ns2, Np2 | 32-byte nonces for the Reconnect Exchange. | + +---------------+-------------------------------------------------+ + | KeyingMode | Integer indicating the key derivation method. 0 | + | | in the Completion Exchange, and 1..3 in the | + | | Reconnect Exchange. | + +---------------+-------------------------------------------------+ + | PKs2, PKp2 | The public components of the ECDHE keys of the | + | | server and peer for the Reconnect Exchange. | + | | PKp2 and PKs2 are sent in the JSON Web Key | + | | (JWK) format [RFC7517]. The detailed format of | + | | the JWK object is defined by the cryptosuite. | + +---------------+-------------------------------------------------+ + | MACs2, MACp2 | Message authentication codes (HMAC) for mutual | + | | authentication, key confirmation, and integrity | + | | check on the Reconnect Exchange. The input to | + | | the HMAC is defined below, and the key for the | + | | HMAC is defined in Section 3.5. | + +---------------+-------------------------------------------------+ + | ErrorCode | Integer indicating an error condition. Defined | + | | in Section 5.3. | + +---------------+-------------------------------------------------+ + | ErrorInfo | Textual error message for logging and debugging | + | | purposes. A UTF-8 string of at most 500 bytes. | + +---------------+-------------------------------------------------+ + + Table 1: Message Data Fields + + It is RECOMMENDED for servers to support both OOB channel directions + (Dirs=3) unless the type of the OOB channel limits them to one + direction (Dirs=1 or Dirs=2). On the other hand, it is RECOMMENDED + that the peer selects only one direction (Dirp=1 or Dirp=2) even when + both directions (Dirp=3) would be technically possible. The reason + is that, if value 3 is negotiated, the user may be presented with two + OOB messages, one for each direction, even though only one of them + needs to be delivered. This can be confusing to the user. + Nevertheless, the EAP-NOOB protocol is designed to also cope with the + value 3; in which case, it uses the first delivered OOB message. In + the unlikely case of simultaneously delivered OOB messages, the + protocol prioritizes the server-to-peer direction. + + The nonces in the in-band messages (Ns, Np, Ns2, Np2) are 32-byte + fresh random byte strings, and the secret nonce Noob is a 16-byte + fresh random byte string. All the nonces are generated by the + endpoint that sends the message. + + The fingerprint Hoob and the identifier NoobId are computed with the + cryptographic hash function H, which is specified in the negotiated + cryptosuite and truncated to the 16 leftmost bytes of the output. + The message authentication codes (MACs, MACp, MACs2, MACp2) are + computed with the function HMAC, which is the hashed message + authentication code [RFC2104] based on the cryptographic hash + function H and truncated to the 32 leftmost bytes of the output. + + The inputs to the hash function for computing the fingerprint Hoob + and to the HMAC for computing MACs, MACp, MACs2, and MACp2 are JSON + arrays containing a fixed number (17) of elements. The array + elements MUST be copied to the array verbatim from the sent and + received in-band messages. When the element is a JSON object, its + members MUST NOT be reordered or reencoded. White space MUST NOT be + added anywhere in the JSON structure. Implementers should check that + their JSON library copies the elements as UTF-8 strings, does not + modify them in any way, and does not add white space to the HMAC + input. + + The inputs for computing the fingerprint and message authentication + codes are the following: + + Hoob = H(Dir,Vers,Verp,PeerId,Cryptosuites,Dirs,ServerInfo, + Cryptosuitep,Dirp,NAI,PeerInfo,0,PKs,Ns,PKp,Np,Noob). + + NoobId = H("NoobId",Noob). + + MACs = HMAC(Kms; 2,Vers,Verp,PeerId,Cryptosuites,Dirs,ServerInfo, + Cryptosuitep,Dirp,NAI,PeerInfo,0,PKs,Ns,PKp,Np,Noob). + + MACp = HMAC(Kmp; 1,Vers,Verp,PeerId,Cryptosuites,Dirs,ServerInfo, + Cryptosuitep,Dirp,NAI,PeerInfo,0,PKs,Ns,PKp,Np,Noob). + + MACs2 = HMAC(Kms2; 2,Vers,Verp,PeerId,Cryptosuites,"",[ServerInfo], + Cryptosuitep,"",NAI,[PeerInfo],KeyingMode,[PKs2],Ns2,[PKp2],Np2,"") + + MACp2 = HMAC(Kmp2; 1,Vers,Verp,PeerId,Cryptosuites,"",[ServerInfo], + Cryptosuitep,"",NAI,[PeerInfo],KeyingMode,[PKs2],Ns2,[PKp2],Np2,"") + + The inputs denoted with "" above are not present, and the values in + brackets [] are optional. Both kinds of missing input values are + represented by empty strings "" in the HMAC input (JSON array). The + NAI included in the inputs is the NAI value that will be in the + persistent EAP-NOOB association if the Completion Exchange or + Reconnect Exchange succeeds. In the Completion Exchange, the NAI is + the NewNAI value assigned by the server in the preceding Initial + Exchange or, if no NewNAI was sent, the NAI used by the client in the + Initial Exchange. In the Reconnect Exchange, the NAI is the NewNAI + value assigned by the server in the same Reconnect Exchange or, if no + NewNAI was sent, the unchanged NAI from the persistent EAP-NOOB + association. Each of the values in brackets for the computation of + Macs2 and Macp2 MUST be included if it was sent or received in the + same Reconnect Exchange; otherwise, the value is replaced by an empty + string "". + + The parameter Dir indicates the direction in which the OOB message + containing the Noob value is being sent (1=peer-to-server, 2=server- + to-peer). This field is included in the Hoob input to prevent the + user from accidentally delivering the OOB message back to its + originator in the rare cases where both OOB directions have been + negotiated. The keys (Kms, Kmp, Kms2, and Kmp2) for the HMACs are + defined in Section 3.5. + + The nonces (Ns, Np, Ns2, Np2, and Noob) and the hash value (NoobId) + MUST be base64url encoded [RFC4648] when they are used as input to + the cryptographic functions H or HMAC. These values and the message + authentication codes (MACs, MACp, MACs2, and MACp2) MUST also be + base64url encoded when they are sent as JSON strings in the in-band + messages. The values Noob and Hoob in the OOB channel MAY be + base64url encoded if that is appropriate for the application and the + OOB channel. All base64url encoding is done without padding. The + base64url-encoded values will naturally consume more space than the + number of bytes specified above (e.g., a 22-character string for a + 16-byte nonce and a 43-character string for a 32-byte nonce or + message authentication code). In the key derivation in Section 3.5, + on the other hand, the unencoded nonces (raw bytes) are used as input + to the key derivation function. + + The ServerInfo and PeerInfo are JSON objects with UTF-8 encoding. + The length of either encoded object as a byte array MUST NOT exceed + 500 bytes. The format and semantics of these objects MUST be defined + by the application that uses the EAP-NOOB method. + +3.4. Fast Reconnect and Rekeying + + EAP-NOOB implements fast reconnect ([RFC3748], Section 7.2.1), which + avoids repeated use of the user-assisted OOB channel. + + The rekeying and the Reconnect Exchange may be needed for several + reasons. New EAP output values Main Session Key (MSK) and Extended + Main Session Key (EMSK) may be needed because of mobility or timeout + of session keys. Software or hardware failure or user action may + also cause the authenticator, EAP server, or peer to lose its + nonpersistent state data. The failure would typically be detected by + the peer or authenticator when session keys are no longer accepted by + the other endpoint. Changes in the supported cryptosuites in the EAP + server or peer may also cause the need for a new key exchange. When + the EAP server or peer detects any one of these events, it MUST + change from the Registered (4) state to the Reconnecting (3) state. + These state transitions are labeled Mobility/Timeout/Failure in + Figure 1. The EAP-NOOB method will then perform the Reconnect + Exchange the next time when EAP is triggered. + +3.4.1. Persistent EAP-NOOB Association + + To enable rekeying, the EAP server and peer store the session state + in persistent memory after a successful Completion Exchange. This + state data, called "persistent EAP-NOOB association", MUST include at + least the data fields shown in Table 2. They are used for + identifying and authenticating the peer in the Reconnect Exchange. + When a persistent EAP-NOOB association exists, the EAP server and + peer are in the Registered (4) state or Reconnecting (3) state, as + shown in Figure 1. + + +==================+==========================+===================+ + | Data Field | Value | Type | + +==================+==========================+===================+ + | PeerId | Peer identifier | UTF-8 string | + | | allocated by server | (typically 22 | + | | | ASCII characters) | + +------------------+--------------------------+-------------------+ + | Verp | Negotiated protocol | integer | + | | version | | + +------------------+--------------------------+-------------------+ + | Cryptosuitep | Negotiated cryptosuite | integer | + +------------------+--------------------------+-------------------+ + | CryptosuitepPrev | Previous cryptosuite | integer | + | (at peer only) | | | + +------------------+--------------------------+-------------------+ + | NAI | NAI assigned by the | UTF-8 string | + | | server or configured by | | + | | the user or the default | | + | | NAI "noob@eap-noob.arpa" | | + +------------------+--------------------------+-------------------+ + | Kz | Persistent key material | 32 bytes | + +------------------+--------------------------+-------------------+ + | KzPrev (at peer | Previous Kz value | 32 bytes | + | only) | | | + +------------------+--------------------------+-------------------+ + + Table 2: Persistent EAP-NOOB Association + +3.4.2. Reconnect Exchange + + The server chooses the Reconnect Exchange when both the peer and the + server are in a persistent state and fast reconnection is needed (see + Section 3.2.1 for details). + + The Reconnect Exchange comprises the common handshake and three + further EAP-NOOB request-response pairs: one for cryptosuite and + parameter negotiation, another for the nonce and ECDHE key exchange, + and the last one for exchanging message authentication codes. In the + first request and response (Type=7), the server and peer negotiate a + protocol version and cryptosuite in the same way as in the Initial + Exchange. The server SHOULD NOT offer and the peer MUST NOT accept + protocol versions or cryptosuites that it knows to be weaker than the + one currently in the Cryptosuitep field of the persistent EAP-NOOB + association. The server SHOULD NOT needlessly change the + cryptosuites it offers to the same peer because peer devices may have + limited ability to update their persistent storage. However, if the + peer has different values in the Cryptosuitep and CryptosuitepPrev + fields, it SHOULD also accept offers that are not weaker than + CryptosuitepPrev. Note that Cryptosuitep and CryptosuitePrev from + the persistent EAP-NOOB association are only used to support the + negotiation as described above; all actual cryptographic operations + use the newly negotiated cryptosuite. The request and response + (Type=7) MAY additionally contain PeerInfo and ServerInfo objects. + + The server then determines the KeyingMode (defined in Section 3.5) + based on changes in the negotiated cryptosuite and whether it desires + to achieve forward secrecy or not. The server SHOULD only select + KeyingMode 3 when the negotiated cryptosuite differs from the + Cryptosuitep in the server's persistent EAP-NOOB association, + although it is technically possible to select this value without + changing the cryptosuite. In the second request and response + (Type=8), the server informs the peer about the KeyingMode and the + server and peer exchange nonces (Ns2, Np2). When KeyingMode is 2 or + 3 (rekeying with ECDHE), they also exchange public components of + ECDHE keys (PKs2, PKp2). The server ECDHE key MUST be fresh, i.e., + not previously used with the same peer, and the peer ECDHE key SHOULD + be fresh, i.e., not previously used. + + In the third and final request and response (Type=9), the server and + peer exchange message authentication codes. Both sides MUST compute + the keys Kms2 and Kmp2, as defined in Section 3.5, and the message + authentication codes MACs2 and MACp2, as defined in Section 3.3.2. + Both sides MUST compare the received message authentication code with + a locally computed value. + + The rules by which the peer compares the received MACs2 are + nontrivial because, in addition to authenticating the current + exchange, MACs2 may confirm the success or failure of a recent + cryptosuite upgrade. The peer processes the final request (Type=9) + as follows: + + 1. The peer first compares the received MACs2 value with one it + computed using the Kz stored in the persistent EAP-NOOB + association. If the received and computed values match, the peer + deletes any data stored in the CryptosuitepPrev and KzPrev fields + of the persistent EAP-NOOB association. It does this because the + received MACs2 confirms that the peer and server share the same + Cryptosuitep and Kz, and any previous values must no longer be + accepted. + + 2. On the other hand, if the peer finds that the received MACs2 + value does not match the one it computed locally with Kz, the + peer checks whether the KzPrev field in the persistent EAP-NOOB + association stores a key. If it does, the peer repeats the key + derivation (Section 3.5) and local MACs2 computation + (Section 3.3.2) using KzPrev in place of Kz. If this second + computed MACs2 matches the received value, the match indicates + synchronization failure caused by the loss of the last response + (Type=9) in a previously attempted cryptosuite upgrade. In this + case, the peer rolls back that upgrade by overwriting + Cryptosuitep with CryptosuitepPrev and Kz with KzPrev in the + persistent EAP-NOOB association. It also clears the + CryptosuitepPrev and KzPrev fields. + + 3. If the received MACs2 matched one of the locally computed values, + the peer proceeds to send the final response (Type=9). The peer + also moves to the Registered (4) state. When KeyingMode is 1 or + 2, the peer stops here. When KeyingMode is 3, the peer also + updates the persistent EAP-NOOB association with the negotiated + Cryptosuitep and the newly derived Kz value. To prepare for + possible synchronization failure caused by the loss of the final + response (Type=9) during cryptosuite upgrade, the peer copies the + old Cryptosuitep and Kz values in the persistent EAP-NOOB + association to the CryptosuitepPrev and KzPrev fields. + + 4. Finally, if the peer finds that the received MACs2 does not match + either of the two values that it computed locally (or one value + if no KzPrev was stored), the peer sends an error message (error + code 4001, see Section 3.6.5), which causes the Reconnect + Exchange to end in EAP-Failure. + + The server rules for processing the final message are simpler than + the peer rules because the server does not store previous keys and it + never rolls back a cryptosuite upgrade. Upon receiving the final + response (Type=9), the server compares the received value of MACp2 + with one it computes locally. If the values match, the Reconnect + Exchange ends in EAP-Success. When KeyingMode is 3, the server also + updates Cryptosuitep and Kz in the persistent EAP-NOOB association. + On the other hand, if the server finds that the values do not match, + it sends an error message (error code 4001), and the Reconnect + Exchange ends in EAP-Failure. + + The endpoints MAY send updated NewNAI, ServerInfo, and PeerInfo + objects in the Reconnect Exchange. When there is no update to the + values, they SHOULD omit this information from the messages. If the + NewNAI was sent, each side updates NAI in the persistent EAP-NOOB + association when moving to the Registered (4) state. + + EAP Peer EAP Server + | ...continuing from common handshake | + | | + |<----------- EAP-Request/EAP-NOOB ----------------| + | (Type=7,Vers,PeerId,Cryptosuites, | + | [NewNAI],[ServerInfo]) | + | | + | | + |------------ EAP-Response/EAP-NOOB -------------->| + | (Type=7,Verp,PeerId,Cryptosuitep,[PeerInfo])| + | | + | | + |<----------- EAP-Request/EAP-NOOB ----------------| + | (Type=8,PeerId,KeyingMode,[PKs2],Ns2) | + | | + | | + |------------ EAP-Response/EAP-NOOB -------------->| + | (Type=8,PeerId,[PKp2],Np2) | + | | + | | + |<----------- EAP-Request/EAP-NOOB ----------------| + | (Type=9,PeerId,MACs2) | + | | + | | + |------------ EAP-Response/EAP-NOOB -------------->| + | (Type=9,PeerId,MACp2) | + | | + | | + |<----------- EAP-Success -------------------------| + | | + + Figure 8: Reconnect Exchange + +3.4.3. User Reset + + As shown in the association state machine in Figure 1, the only + specified way for the association to return from the Registered (4) + state to the Unregistered (0) state is through user-initiated reset. + After the reset, a new OOB message will be needed to establish a new + association between the EAP server and peer. Typical situations in + which the user reset is required are when the other side has + accidentally lost the persistent EAP-NOOB association data or when + the peer device is decommissioned. + + The server could detect that the peer is in the Registered or + Reconnecting state, but the server itself is in one of the ephemeral + states 0..2 (including situations where the server does not recognize + the PeerId). In this case, effort should be made to recover the + persistent server state, for example, from a backup storage -- + especially if many peer devices are similarly affected. If that is + not possible, the EAP server SHOULD log the error or notify an + administrator. The only way to continue from such a situation is by + having the user reset the peer device. + + On the other hand, if the peer is in any of the ephemeral states + 0..2, including the Unregistered state, the server will treat the + peer as a new peer device and allocate a new PeerId to it. The + PeerInfo can be used by the user as a clue to which physical device + has lost its state. However, there is no secure way of matching the + "new" peer with the old PeerId without repeating the OOB Step. This + situation will be resolved when the user performs the OOB Step and + thus identifies the physical peer device. The server user interface + MAY support situations where the "new" peer is actually a previously + registered peer that has been reset by a user or otherwise lost its + persistent data. In those cases, the user could choose to merge the + new peer identity with the old one in the server. The alternative is + to treat the device just like a new peer. + +3.5. Key Derivation + + EAP-NOOB derives the EAP output values MSK and EMSK and other secret + keying material from the output of an Ephemeral Elliptic Curve + Diffie-Hellman (ECDHE) algorithm following the NIST specification + [NIST-DH]. In NIST terminology, we use a C(2e, 0s, ECC CDH) scheme, + i.e., two ephemeral keys and no static keys. In the Initial Exchange + and Reconnect Exchange, the server and peer compute the ECDHE shared + secret Z, as defined in Section 6.1.2 of the NIST specification + [NIST-DH]. In the Completion Exchange and Reconnect Exchange, the + server and peer compute the secret keying material from Z with the + one-step key derivation function (KDF) defined in Section 5.8.2.1 of + the NIST specification. The auxiliary function H is a hash function, + and it is taken from the negotiated cryptosuite. + + +============+============================================+ + | KeyingMode | Description | + +============+============================================+ + | 0 | Completion Exchange (always with ECDHE) | + +------------+--------------------------------------------+ + | 1 | Reconnect Exchange, rekeying without ECDHE | + +------------+--------------------------------------------+ + | 2 | Reconnect Exchange, rekeying with ECHDE, | + | | no change in cryptosuite | + +------------+--------------------------------------------+ + | 3 | Reconnect Exchange, rekeying with ECDHE, | + | | new cryptosuite negotiated | + +------------+--------------------------------------------+ + + Table 3: Keying Modes + + The key derivation has four different modes (KeyingMode), which are + specified in Table 3. Table 4 defines the inputs to KDF in each + KeyingMode. + + In the Completion Exchange (KeyingMode=0), the input Z comes from the + preceding Initial exchange. The KDF takes some additional inputs + (FixedInfo), for which we use the concatenation format defined in + Section 5.8.2.1.1 of the NIST specification [NIST-DH]. FixedInfo + consists of the AlgorithmId, PartyUInfo, PartyVInfo, and SuppPrivInfo + fields. The first three fields are fixed-length bit strings, and + SuppPrivInfo is a variable-length string with a one-byte Datalength + counter. AlgorithmId is the fixed-length, 8-byte ASCII string "EAP- + NOOB". The other input values are the server and peer nonces. In + the Completion Exchange, the inputs also include the secret nonce + Noob from the OOB message. + + In the simplest form of the Reconnect Exchange (KeyingMode=1), fresh + nonces are exchanged, but no ECDHE keys are sent. In this case, + input Z to the KDF is replaced with the shared key Kz from the + persistent EAP-NOOB association. The result is rekeying without the + computational cost of the ECDHE exchange but also without forward + secrecy. + + When forward secrecy is desired in the Reconnect Exchange + (KeyingMode=2 or KeyingMode=3), both nonces and ECDHE keys are + exchanged. Input Z is the fresh shared secret from the ECDHE + exchange with PKs2 and PKp2. The inputs also include the shared + secret Kz from the persistent EAP-NOOB association. This binds the + rekeying output to the previously authenticated keys. + + +=========================+==============+===============+==========+ + | KeyingMode | KDF input | Value | Length | + | | field | | (bytes) | + +=========================+==============+===============+==========+ + | 0 Completion | Z | ECDHE shared | variable | + | | | secret from | | + | | | PKs and PKp | | + | +--------------+---------------+----------+ + | | AlgorithmId | "EAP-NOOB" | 8 | + | +--------------+---------------+----------+ + | | PartyUInfo | Np | 32 | + | +--------------+---------------+----------+ + | | PartyVInfo | Ns | 32 | + | +--------------+---------------+----------+ + | | SuppPubInfo | (not | | + | | | allowed) | | + | +--------------+---------------+----------+ + | | SuppPrivInfo | Noob | 16 | + +-------------------------+--------------+---------------+----------+ + | 1 Reconnect, rekeying | Z | Kz | 32 | + | without ECDHE +--------------+---------------+----------+ + | | AlgorithmId | "EAP-NOOB" | 8 | + | +--------------+---------------+----------+ + | | PartyUInfo | Np2 | 32 | + | +--------------+---------------+----------+ + | | PartyVInfo | Ns2 | 32 | + | +--------------+---------------+----------+ + | | SuppPubInfo | (not | | + | | | allowed) | | + | +--------------+---------------+----------+ + | | SuppPrivInfo | (null) | 0 | + +-------------------------+--------------+---------------+----------+ + | 2 or 3 Reconnect, | Z | ECDHE shared | variable | + | rekeying, with ECDHE, | | secret from | | + | same or new cryptosuite | | PKs2 and | | + | | | PKp2 | | + | +--------------+---------------+----------+ + | | AlgorithmId | "EAP-NOOB" | 8 | + | +--------------+---------------+----------+ + | | PartyUInfo | Np2 | 32 | + | +--------------+---------------+----------+ + | | PartyVInfo | Ns2 | 32 | + | +--------------+---------------+----------+ + | | SuppPubInfo | (not | | + | | | allowed) | | + | +--------------+---------------+----------+ + | | SuppPrivInfo | Kz | 32 | + +-------------------------+--------------+---------------+----------+ + + Table 4: Key Derivation Input + + Table 5 defines how the output bytes of the KDF are used. In + addition to the EAP output values MSK and EMSK, the server and peer + derive another shared secret key AMSK (Application Main Session Key), + which MAY be used for application-layer security. Further output + bytes are used internally by EAP-NOOB for the message authentication + keys (Kms, Kmp, Kms2, and Kmp2). + + The Completion Exchange (KeyingMode=0) produces the shared secret Kz, + which the server and peer store in the persistent EAP-NOOB + association. When a new cryptosuite is negotiated in the Reconnect + Exchange (KeyingMode=3), it similarly produces a new Kz. In that + case, the server and peer update both the cryptosuite and Kz in the + persistent EAP-NOOB association. Additionally, the peer stores the + previous Cryptosuitep and Kz values in the CryptosuitepPrev and + KzPrev fields of the persistent EAP-NOOB association. + + +==============================+============+==========+=========+ + | KeyingMode | KDF output | Used as | Length | + | | bytes | | (bytes) | + +==============================+============+==========+=========+ + | 0 Completion | 0..63 | MSK | 64 | + | +------------+----------+---------+ + | | 64..127 | EMSK | 64 | + | +------------+----------+---------+ + | | 128..191 | AMSK | 64 | + | +------------+----------+---------+ + | | 192..223 | MethodId | 32 | + | +------------+----------+---------+ + | | 224..255 | Kms | 32 | + | +------------+----------+---------+ + | | 256..287 | Kmp | 32 | + | +------------+----------+---------+ + | | 288..319 | Kz | 32 | + +------------------------------+------------+----------+---------+ + | 1 or 2 Reconnect, rekeying | 0..63 | MSK | 64 | + | without ECDHE, or with ECDHE +------------+----------+---------+ + | and unchanged cryptosuite | 64..127 | EMSK | 64 | + | +------------+----------+---------+ + | | 128..191 | AMSK | 64 | + | +------------+----------+---------+ + | | 192..223 | MethodId | 32 | + | +------------+----------+---------+ + | | 224..255 | Kms2 | 32 | + | +------------+----------+---------+ + | | 256..287 | Kmp2 | 32 | + +------------------------------+------------+----------+---------+ + | 3 Reconnect, rekeying with | 0..63 | MSK | 64 | + | ECDHE, new cryptosuite +------------+----------+---------+ + | | 64..127 | EMSK | 64 | + | +------------+----------+---------+ + | | 128..191 | AMSK | 64 | + | +------------+----------+---------+ + | | 192..223 | MethodId | 32 | + | +------------+----------+---------+ + | | 224..255 | Kms2 | 32 | + | +------------+----------+---------+ + | | 256..287 | Kmp2 | 32 | + | +------------+----------+---------+ + | | 288..319 | Kz | 32 | + +------------------------------+------------+----------+---------+ + + Table 5: Key Derivation Output + + Finally, every EAP method must export a Server-Id, Peer-Id, and + Session-Id [RFC5247]. In EAP-NOOB, the exported Peer-Id is the + PeerId that the server has assigned to the peer. The exported + Server-Id is a zero-length string (i.e., null string) because EAP- + NOOB neither knows nor assigns any server identifier. The exported + Session-Id is created by concatenating the one-byte Type-Code 0x38 + (decimal value 56) with the MethodId, which is obtained from the KDF + output, as shown in Table 5. + +3.6. Error Handling + + Various error conditions in EAP-NOOB are handled by sending an error + notification message (Type=0) instead of a next EAP request or + response message. Both the EAP server and the peer may send the + error notification, as shown in Figures 9 and 10. After sending or + receiving an error notification, the server MUST send an EAP-Failure + (as required by [RFC3748], Section 4.2). The notification MAY + contain an ErrorInfo field, which is a UTF-8-encoded text string with + a maximum length of 500 bytes. It is used for sending descriptive + information about the error for logging and debugging purposes. + + EAP Peer EAP Server + ... ... + | | + |<----------- EAP-Request/EAP-NOOB ----------------| + | (Type=0,[PeerId],ErrorCode,[ErrorInfo]) | + | | + | | + |<----------- EAP-Failure -------------------------| + | | + + Figure 9: Error Notification from Server to Peer + + EAP Peer EAP Server + ... ... + | | + |------------ EAP-Response/EAP-NOOB -------------->| + | (Type=0,[PeerId],ErrorCode,[ErrorInfo]) | + | | + | | + |<----------- EAP-Failure -------------------------| + | | + + Figure 10: Error Notification from Peer to Server + + After the exchange fails due to an error notification, the server and + peer set the association state as follows. In the Initial Exchange, + both the sender and recipient of the error notification MUST set the + association state to the Unregistered (0) state. In the Waiting + Exchange and Completion Exchange, each side MUST remain in its old + state as if the failed exchange had not taken place, with the + exception that the recipient of error code 2003 processes it as + specified in Section 3.2.4. In the Reconnect Exchange, both sides + MUST set the association state to the Reconnecting (3) state. + + Errors that occur in the OOB channel are not explicitly notified in- + band. + +3.6.1. Invalid Messages + + If the NAI structure is invalid, the server SHOULD send the error + code 1001 to the peer. The recipient of an EAP-NOOB request or + response SHOULD send the following error codes back to the sender: + 1002 if it cannot parse the message as a JSON object or the top-level + JSON object has missing or unrecognized members; 1003 if a data field + has an invalid value, such as an integer out of range, and there is + no more specific error code available; 1004 if the received message + type was unexpected in the current state; 2004 if the PeerId has an + unexpected value; 2003 if the NoobId is not recognized; and 1005 if + the ECDHE key is invalid. + +3.6.2. Unwanted Peer + + The preferred way for the EAP server to rate limit EAP-NOOB + connections from a peer is to use the SleepTime parameter in the + Waiting Exchange. However, if the EAP server receives repeated EAP- + NOOB connections from a peer that apparently should not connect to + this server, the server MAY indicate that the connections are + unwanted by sending the error code 2001. After receiving this error + message, the peer MAY refrain from reconnecting to the same EAP + server, and, if possible, both the EAP server and peer SHOULD + indicate this error condition to the user or server administrator. + However, in order to avoid persistent denial of service, peer devices + that are unable to alert a user SHOULD continue to try to reconnect + infrequently (e.g., approximately every 3600 seconds). + +3.6.3. State Mismatch + + In the states indicated by "-" in Table 14 in Appendix A, user action + is required to reset the association state or to recover it, for + example, from backup storage. In those cases, the server sends the + error code 2002 to the peer. If possible, both the EAP server and + peer SHOULD indicate this error condition to the user or server + administrator. + +3.6.4. Negotiation Failure + + If there is no matching protocol version, the peer sends the error + code 3001 to the server. If there is no matching cryptosuite, the + peer sends the error code 3002 to the server. If there is no + matching OOB direction, the peer sends the error code 3003 to the + server. + + In practice, there is no way of recovering from these errors without + software or hardware changes. If possible, both the EAP server and + peer SHOULD indicate these error conditions to the user. + +3.6.5. Cryptographic Verification Failure + + If the receiver of the OOB message detects an unrecognized PeerId or + incorrect fingerprint (Hoob) in the OOB message, the receiver MUST + remain in the Waiting for OOB (1) state as if no OOB message was + received. The receiver SHOULD indicate the failure to accept the OOB + message to the user. No in-band error message is sent. + + Note that if the OOB message was delivered from the server to the + peer and the peer does not recognize the PeerId, the likely cause is + that the user has unintentionally delivered the OOB message to the + wrong peer device. If possible, the peer SHOULD indicate this to the + user; however, the peer device may not have the capability for many + different error indications to the user, and it MAY use the same + indication as in the case of an incorrect fingerprint. + + The rationale for the above is that the invalid OOB message could + have been presented to the receiver by mistake or intentionally by a + malicious party; thus, it should be ignored in the hope that the + honest user will soon deliver a correct OOB message. + + If the EAP server or peer detects an incorrect message authentication + code (MACs, MACp, MACs2, or MACp2), it sends the error code 4001 to + the other side. As specified in the beginning of Section 3.6, the + failed Completion Exchange will not result in server or peer state + changes, while an error in the Reconnect Exchange will put both sides + to the Reconnecting (3) state and thus lead to another reconnect + attempt. + + The rationale for this is that the invalid cryptographic message may + have been spoofed by a malicious party; thus, it should be ignored. + In particular, a spoofed message on the in-band channel should not + force the honest user to perform the OOB Step again. In practice, + however, the error may be caused by other failures, such as a + software bug. For this reason, the EAP server MAY limit the rate of + peer connections with SleepTime after the above error. Also, there + SHOULD be a way for the user to reset the peer to the Unregistered + (0) state so that the OOB Step can be repeated as the last resort. + +3.6.6. Application-Specific Failure + + Applications MAY define new error messages for failures that are + specific to the application or to one type of OOB channel. They MAY + also use the generic application-specific error code 5001 or the + error codes 5002 and 5004, which have been reserved for indicating + invalid data in the ServerInfo and PeerInfo fields, respectively. + Additionally, anticipating OOB channels that make use of a URL, the + error code 5003 has been reserved for indicating an invalid server + URL. + +4. ServerInfo and PeerInfo Contents + + The ServerInfo and PeerInfo fields in the Initial Exchange and + Reconnect Exchange enable the server and peer, respectively, to send + information about themselves to the other endpoint. They contain + JSON objects whose structure may be specified separately for each + application and each type of OOB channel. ServerInfo and PeerInfo + MAY contain auxiliary data needed for the OOB channel messaging and + for EAP channel binding (see Section 6.7). This section describes + the optional initial data fields for ServerInfo and PeerInfo + registered by this specification. Further specifications may request + new application-specific ServerInfo and PeerInfo data fields from + IANA (see Sections 5.4 and 5.5). + + +================+=================================================+ + | Data Field | Description | + +================+=================================================+ + | Type | Type-tag string that can be used by the peer as | + | | a hint for how to interpret the ServerInfo | + | | contents. | + +----------------+-------------------------------------------------+ + | ServerName | String that may be used to aid human | + | | identification of the server. | + +----------------+-------------------------------------------------+ + | ServerURL | Prefix string when the OOB message is formatted | + | | as a URL, as suggested in Appendix D. | + +----------------+-------------------------------------------------+ + | SSIDList | List of IEEE 802.11 wireless network service | + | | set identifier (SSID) strings used for roaming | + | | support, as suggested in Appendix C. JSON | + | | array of ASCII-encoded SSID strings. | + +----------------+-------------------------------------------------+ + | Base64SSIDList | List of IEEE 802.11 wireless network identifier | + | | (SSID) strings used for roaming support, as | + | | suggested in Appendix C. JSON array of SSIDs, | + | | each of which is base64url-encoded without | + | | padding. Peers SHOULD send at most one of the | + | | fields SSIDList and Base64SSIDList in PeerInfo, | + | | and the server SHOULD ignore SSIDList if | + | | Base64SSIDList is included. | + +----------------+-------------------------------------------------+ + + Table 6: ServerInfo Data Fields + + +==============+===================================================+ + | Data Field | Description | + +==============+===================================================+ + | Type | Type-tag string that can be used by the server as | + | | a hint for how to interpret the PeerInfo | + | | contents. | + +--------------+---------------------------------------------------+ + | PeerName | String that may be used to aid human | + | | identification of the peer. | + +--------------+---------------------------------------------------+ + | Manufacturer | Manufacturer or brand string. | + +--------------+---------------------------------------------------+ + | Model | Manufacturer-specified model string. | + +--------------+---------------------------------------------------+ + | SerialNumber | Manufacturer-assigned serial number. | + +--------------+---------------------------------------------------+ + | MACAddress | Peer link-layer 48-bit extended unique identifier | + | | (EUI-48) in the 12-digit base-16 form [EUI-48]. | + | | The string MAY be in upper or lower case and MAY | + | | include additional colon ':' or dash '-' | + | | characters that MUST be ignored by the server. | + +--------------+---------------------------------------------------+ + | SSID | IEEE 802.11 network SSID for channel binding. | + | | The SSID is an ASCII string. | + +--------------+---------------------------------------------------+ + | Base64SSID | IEEE 802.11 network SSID for channel binding. | + | | The SSID is base64url encoded. Peer SHOULD send | + | | at most one of the fields SSID and Base64SSID in | + | | PeerInfo, and the server SHOULD ignore SSID if | + | | Base64SSID is included. | + +--------------+---------------------------------------------------+ + | BSSID | Wireless network basic service set identifier | + | | (BSSID) (EUI-48) in the 12-digit base-16 form | + | | [EUI-48] for channel binding. The string MAY be | + | | in upper or lower case and MAY include additional | + | | colon ':' or dash '-' characters that MUST be | + | | ignored by the server. | + +--------------+---------------------------------------------------+ + + Table 7: PeerInfo Data Fields + +5. IANA Considerations + + This section provides information regarding registration of values + related to the EAP-NOOB method, in accordance with [RFC8126]. + + The EAP Method Type for EAP-NOOB (value 56) has been assigned in the + "Method Types" subregistry of the "Extensible Authentication Protocol + (EAP) Registry". + + Per this memo, IANA has created and will maintain a new registry + entitled "Nimble Out-of-Band Authentication for EAP Parameters (EAP- + NOOB)" in the Extensible Authentication Protocol (EAP) category. + Also, IANA has created and will maintain the subregistries defined in + the following subsections. + +5.1. Cryptosuites + + IANA has created and will maintain a new subregistry entitled "EAP- + NOOB Cryptosuites" in the "Nimble Out-of-Band Authentication for EAP + Parameters (EAP-NOOB)" registry. Cryptosuites are identified by an + integer. Each cryptosuite MUST specify an ECDHE curve for the key + exchange, encoding of the ECDHE public key as a JWK object, and a + cryptographic hash function for the fingerprint and HMAC computation + and key derivation. The hash value output by the cryptographic hash + function MUST be at least 32 bytes in length. The initial values for + this registry are: + + +=============+===============================================+ + | Cryptosuite | Algorithms | + +=============+===============================================+ + | 0 | Reserved | + +-------------+-----------------------------------------------+ + | 1 | ECDHE curve Curve25519 [RFC7748], public-key | + | | format [RFC7517], hash function SHA-256 | + | | [RFC6234]. The JWK encoding of Curve25519 | + | | public key is defined in [RFC8037]. For | + | | clarity, the "crv" parameter is "X25519", the | + | | "kty" parameter is "OKP", and the public-key | + | | encoding contains only an x-coordinate. | + +-------------+-----------------------------------------------+ + | 2 | ECDHE curve NIST P-256 [FIPS186-4], public- | + | | key format [RFC7517], hash function SHA-256 | + | | [RFC6234]. The JWK encoding of NIST P-256 | + | | public key is defined in [RFC7518]. For | + | | clarity, the "crv" parameter is "P-256", the | + | | "kty" parameter is "EC", and the public-key | + | | encoding has both an x and y coordinate, as | + | | defined in Section 6.2.1 of [RFC7518]. | + +-------------+-----------------------------------------------+ + + Table 8: EAP-NOOB Cryptosuites + + EAP-NOOB implementations MUST support Cryptosuite 1. Support for + Cryptosuite 2 is RECOMMENDED. An example of a Cryptosuite 1 public- + key encoded as a JWK object is given below. (Line breaks are for + readability only.) + + "jwk":{"kty":"OKP","crv":"X25519","x":"3p7bfXt9wbTTW2HC7OQ1Nz- + DQ8hbeGdNrfx-FG-IK08"} + + Assignment of new values for new cryptosuites MUST be done through + IANA with "Specification Required", as defined in [RFC8126]. + +5.2. Message Types + + IANA has created and will maintain a new subregistry entitled "EAP- + NOOB Message Types" in the "Nimble Out-of-Band Authentication for EAP + Parameters (EAP-NOOB)" registry. EAP-NOOB request and response pairs + are identified by an integer Message Type. The initial values for + this registry are: + + +=========+============+========================================+ + | Message | Used in | Purpose | + | Type | Exchange | | + +=========+============+========================================+ + | 0 | Error | Error notification | + +---------+------------+----------------------------------------+ + | 1 | All | PeerId and PeerState discovery | + | | exchanges | | + +---------+------------+----------------------------------------+ + | 2 | Initial | Version, cryptosuite, and parameter | + | | | negotiation | + +---------+------------+----------------------------------------+ + | 3 | Initial | Exchange of ECDHE keys and nonces | + +---------+------------+----------------------------------------+ + | 4 | Waiting | Indication to the peer that the server | + | | | has not yet received an OOB message | + +---------+------------+----------------------------------------+ + | 5 | Completion | NoobId discovery | + +---------+------------+----------------------------------------+ + | 6 | Completion | Authentication and key confirmation | + | | | with HMAC | + +---------+------------+----------------------------------------+ + | 7 | Reconnect | Version, cryptosuite, and parameter | + | | | negotiation | + +---------+------------+----------------------------------------+ + | 8 | Reconnect | Exchange of ECDHE keys and nonces | + +---------+------------+----------------------------------------+ + | 9 | Reconnect | Authentication and key confirmation | + | | | with HMAC | + +---------+------------+----------------------------------------+ + + Table 9: EAP-NOOB Message Types + + Assignment of new values for new Message Types MUST be done through + IANA with "Specification Required", as defined in [RFC8126]. + +5.3. Error Codes + + IANA has created and will maintain a new subregistry entitled "EAP- + NOOB Error codes" in the "Nimble Out-of-Band Authentication for EAP + Parameters (EAP-NOOB)" registry. Cryptosuites are identified by an + integer. The initial values for this registry are: + + +============+===========================================+ + | Error code | Purpose | + +============+===========================================+ + | 1001 | Invalid NAI | + +------------+-------------------------------------------+ + | 1002 | Invalid message structure | + +------------+-------------------------------------------+ + | 1003 | Invalid data | + +------------+-------------------------------------------+ + | 1004 | Unexpected message type | + +------------+-------------------------------------------+ + | 1005 | Invalid ECDHE key | + +------------+-------------------------------------------+ + | 2001 | Unwanted peer | + +------------+-------------------------------------------+ + | 2002 | State mismatch, user action required | + +------------+-------------------------------------------+ + | 2003 | Unrecognized OOB message identifier | + +------------+-------------------------------------------+ + | 2004 | Unexpected peer identifier | + +------------+-------------------------------------------+ + | 3001 | No mutually supported protocol version | + +------------+-------------------------------------------+ + | 3002 | No mutually supported cryptosuite | + +------------+-------------------------------------------+ + | 3003 | No mutually supported OOB direction | + +------------+-------------------------------------------+ + | 4001 | HMAC verification failure | + +------------+-------------------------------------------+ + | 5001 | Application-specific error | + +------------+-------------------------------------------+ + | 5002 | Invalid server info | + +------------+-------------------------------------------+ + | 5003 | Invalid server URL | + +------------+-------------------------------------------+ + | 5004 | Invalid peer info | + +------------+-------------------------------------------+ + | 6001-6999 | Reserved for Private and Experimental Use | + +------------+-------------------------------------------+ + + Table 10: EAP-NOOB Error Codes + + Assignment of new error codes MUST be done through IANA with + "Specification Required", as defined in [RFC8126], except for the + range 6001-6999. This range is reserved for "Private Use" and + "Experimental Use", both locally and on the open Internet. + +5.4. ServerInfo Data Fields + + IANA has created and will maintain a new subregistry entitled "EAP- + NOOB ServerInfo Data Fields" in the "Nimble Out-of-Band + Authentication for EAP Parameters (EAP-NOOB)" registry. The initial + values for this registry are: + + +================+=====================+ + | Data Field | Specification | + +================+=====================+ + | Type | RFC 9140, Section 4 | + +----------------+---------------------+ + | ServerName | RFC 9140, Section 4 | + +----------------+---------------------+ + | ServerURL | RFC 9140, Section 4 | + +----------------+---------------------+ + | SSIDList | RFC 9140, Section 4 | + +----------------+---------------------+ + | Base64SSIDList | RFC 9140, Section 4 | + +----------------+---------------------+ + + Table 11: ServerInfo Data Fields + + Assignment of new values for new ServerInfo data fields MUST be done + through IANA with "Specification Required", as defined in [RFC8126]. + +5.5. PeerInfo Data Fields + + IANA is requested to create and maintain a new subregistry entitled + "EAP-NOOB PeerInfo Data Fields" in the "Nimble Out-of-Band + Authentication for EAP Parameters (EAP-NOOB)" registry. The initial + values for this registry are: + + +==============+=====================+ + | Data Field | Specification | + +==============+=====================+ + | Type | RFC 9140, Section 4 | + +--------------+---------------------+ + | PeerName | RFC 9140, Section 4 | + +--------------+---------------------+ + | Manufacturer | RFC 9140, Section 4 | + +--------------+---------------------+ + | Model | RFC 9140, Section 4 | + +--------------+---------------------+ + | SerialNumber | RFC 9140, Section 4 | + +--------------+---------------------+ + | MACAddress | RFC 9140, Section 4 | + +--------------+---------------------+ + | SSID | RFC 9140, Section 4 | + +--------------+---------------------+ + | Base64SSID | RFC 9140, Section 4 | + +--------------+---------------------+ + | BSSID | RFC 9140, Section 4 | + +--------------+---------------------+ + + Table 12: PeerInfo Data Fields + + Assignment of new values for new PeerInfo data fields MUST be done + through IANA with "Specification Required", as defined in [RFC8126]. + +5.6. Domain Name Reservation + + The special-use domain "eap-noob.arpa" has been registered in the + .arpa registry (https://www.iana.org/domains/arpa) and the "Special- + Use Domain Names" registry (https://www.iana.org/assignments/special- + use-domain-names). + +5.7. Guidance for Designated Experts + + Experts SHOULD be conservative in the allocation of new Cryptosuites. + Experts MUST ascertain that the requested values match the current + Crypto Forum Research Group (CFRG) guidance on cryptographic + algorithm security. Experts MUST ensure that any new Cryptosuites + fully specify the encoding of the ECDHE public key and should include + details, such as the value of the "kty" (key type) parameter when JWK + [RFC7517] encoding is used. + + Experts SHOULD be conservative in the allocation of new Message + Types. Experts SHOULD ascertain that a well-defined specification + for the new Message Type is permanently and publicly available. + + Experts SHOULD be conservative in the allocation of new Error codes, + since the 6001-6999 range is already reserved for private and + experimental use. + + Experts MAY be liberal in the allocation of new ServerInfo and + PeerInfo data fields. Experts MUST ensure that the data field + requested has a unique name that is not easily confused with existing + registrations. For example, requests for a new PeerInfo data field + "ssid" should be rejected even though it is unique because it can be + confused with the existing registration of "SSID". Experts MUST + ensure that a suitable Description for the data field is available. + +6. Security Considerations + + EAP-NOOB is an authentication and key derivation protocol; thus, + security considerations can be found in most sections of this + specification. In the following, we explain the protocol design and + highlight some other special considerations. + +6.1. Authentication Principle + + EAP-NOOB establishes a shared secret with an authenticated ECDHE key + exchange. The mutual authentication in EAP-NOOB is based on two + separate features, both conveyed in the OOB message. The first + authentication feature is the secret nonce Noob. The peer and server + use this secret in the Completion Exchange to mutually authenticate + the session key previously created with ECDHE. The message + authentication codes computed with the secret nonce Noob are alone + sufficient for authenticating the key exchange. The second + authentication feature is the integrity-protecting fingerprint Hoob. + Its purpose is to prevent impersonation attacks even in situations + where the attacker is able to eavesdrop on the OOB channel and the + nonce Noob is compromised. In some human-assisted OOB channels, such + as human-perceptible audio or a user-typed URL, it may be easier to + detect tampering than disclosure of the OOB message, and such + applications benefit from the second authentication feature. + + The additional security provided by the cryptographic fingerprint + Hoob is somewhat intricate to understand. The endpoint that receives + the OOB message uses Hoob to verify the integrity of the ECDHE + exchange. Thus, the OOB receiver can detect impersonation attacks + that may have happened on the in-band channel. The other endpoint, + however, is not equally protected because the OOB message and + fingerprint are sent only in one direction. Some protection to the + OOB sender is afforded by the fact that the user may notice the + failure of the association at the OOB receiver and therefore reset + the OOB sender. Other device-pairing protocols have solved similar + situations by requiring the user to confirm to the OOB sender that + the association was accepted by the OOB receiver, e.g., with a button + press on the sender side. Applications MAY implement EAP-NOOB in + this way. Nevertheless, since EAP-NOOB was designed to work with + strictly one-directional OOB communication and the fingerprint is + only the second authentication feature, the EAP-NOOB specification + does not mandate such explicit confirmation to the OOB sender. + + To summarize, EAP-NOOB uses the combined protection of the secret + nonce Noob and the cryptographic fingerprint Hoob, both conveyed in + the OOB message. The secret nonce Noob alone is sufficient for + mutual authentication unless the attacker can eavesdrop on it from + the OOB channel. Even if an attacker is able to eavesdrop on the + secret nonce Noob, it nevertheless cannot perform a full + impersonation attack on the in-band channel because a mismatching + fingerprint would alert the OOB receiver, which would reject the OOB + message. The attacker that eavesdropped on the secret nonce can + impersonate the OOB receiver to the OOB sender. If it does, the + association will appear to be complete only on the OOB sender side, + and such situations have to be resolved by the user by resetting the + OOB sender to the initial state. + + The expected use cases for EAP-NOOB are ones where it replaces a + user-entered access credential in IoT appliances. In wireless + network access without EAP, the user-entered credential is often a + passphrase that is shared by all the network stations. The advantage + of an EAP-based solution, including EAP-NOOB, is that it establishes + a different shared secret for each peer device, which makes the + system more resilient against device compromise. Another advantage + is that it is possible to revoke the security association for an + individual device on the server side. + + Forward secrecy during fast reconnect in EAP-NOOB is optional. The + Reconnect Exchange in EAP-NOOB provides forward secrecy only if both + the server and peer send their fresh ECDHE keys. This allows both + the server and peer to limit the frequency of the costly computation + that is required for forward secrecy. The server MAY adjust the + frequency of its attempts at ECDHE rekeying based on what it knows + about the peer's computational capabilities. + + Another way in which some servers may control their computational + load is to reuse the same ECDHE key for all peers over a short + server-specific time window. In that case, forward secrecy will be + achieved only after the server updates its ECDHE key, which may be a + reasonable trade-off between security and performance. However, the + server MUST NOT reuse the same ECDHE key with the same peer when + rekeying with ECDHE (KeyingMode=2 or KeyingMode=3). Instead, it can + simply not send an ECDHE key (KeyingMode=1). + + The users delivering the OOB messages will often authenticate + themselves to the EAP server, e.g., by logging into a secure web page + or API. In this case, the server can associate the peer device with + the user account. Applications that make use of EAP-NOOB can use + this information for configuring the initial owner of the freshly + registered device. + +6.2. Identifying Correct Endpoints + + Potential weaknesses in EAP-NOOB arise from the fact that the user + must physically identify the correct peer device. If the user + mistakenly delivers the OOB message from the wrong peer device to the + server, the server may create an association with the wrong peer. + The reliance on the user in identifying the correct endpoints is an + inherent property of user-assisted, out-of-band authentication. To + understand the potential consequences of the user mistake, we need to + consider a few different scenarios. In the first scenario, there is + no malicious party, and the user makes an accidental mistake between + two out-of-the-box devices that are both ready to be registered to a + server. If the user delivers the OOB message from the wrong device + to the server, confusion may arise but usually no security issues. + In the second scenario, an attacker intentionally tricks the user, + for example, by substituting the original peer device with a + compromised one. This is essentially a supply chain attack where the + user accepts a compromised physical device. + + There is also a third scenario, in which an opportunistic attacker + tries to take advantage of the user's accidental mistake. For + example, the user could play an audio or a blinking LED message to a + device that is not expecting to receive it. In simple security + bootstrapping solutions that transfer a primary key to the device via + the OOB channel, the device could misuse or leak the accidentally + received primary key. EAP-NOOB is not vulnerable to such + opportunistic attackers because the OOB message has no value to + anyone who did not take part in the corresponding Initial Exchange. + + One mechanism that can mitigate user mistakes is certification of + peer devices. A certificate or an attestation token (e.g., [TLS-CWT] + and [RATS-EAT]) can convey to the server authentic identifiers and + attributes, such as model and serial number, of the peer device. + Compared to a fully certificate-based authentication, however, EAP- + NOOB can be used without trusted third parties and does not require + the user to know any identifier of the peer device; physical access + to the device is sufficient for bootstrapping with EAP-NOOB. + + Similarly, the attacker can try to trick the user into delivering the + OOB message to the wrong server so that the peer device becomes + associated with the wrong server. If the EAP server is accessed + through a web user interface, the attack is akin to phishing attacks + where the user is tricked into accessing the wrong URL and wrong web + page. OOB implementation with a dedicated app on a mobile device, + which communicates with a server API at a preconfigured URL, can + protect against such attacks. + + After the device registration, an attacker could clone the device + identity by copying the keys from the persistent EAP-NOOB association + into another device. The attacker can be an outsider who gains + access to the keys or the device owner who wants to have two devices + matching the same registration. The cloning threats can be mitigated + by creating the cryptographic keys and storing the persistent EAP- + NOOB association on the peer device in a secure hardware component + such as a trusted execution environment (TEE). Furthermore, remote + attestation on the application level could provide assurance to the + server that the device has not been cloned. Reconnect Exchange with + a new cryptosuite (KeyingMode=3) will also disconnect all but the + first clone that performs the update. + +6.3. Trusted Path Issues and Misbinding Attacks + + Another potential threat is spoofed user input or output on the peer + device. When the user is delivering the OOB message to or from the + correct peer device, a trusted path between the user and the peer + device is needed. That is, the user must communicate directly with + an authentic operating system and EAP-NOOB implementation in the peer + device and not with a spoofed user interface. Otherwise, a + registered device that is under the control of the attacker could + emulate the behavior of an unregistered device. The secure path can + be implemented, for example, by having the user press a reset button + to return the device to the Unregistered (0) state and to invoke a + trusted UI. The problem with such trusted paths is that they are not + standardized across devices. + + Another potential consequence of a spoofed UI is the misbinding + attack where the user tries to register a correct but compromised + device, which tricks the user into registering another + (uncompromised) device instead. For example, the compromised device + might have a malicious, full-screen app running, which presents to + the user QR codes copied, in real time, from another device's screen. + If the unwitting user scans the QR code and delivers the OOB message + in it to the server, the wrong device may become registered in the + server. Such misbinding vulnerabilities arise because the user does + not have any secure way of verifying that the in-band cryptographic + handshake and the out-of-band physical access are terminated at the + same physical device. Sethi et al. [Sethi19] analyze the misbinding + threat against device-pairing protocols and also EAP-NOOB. + Essentially, all protocols where the authentication relies on the + user's physical access to the device are vulnerable to misbinding, + including EAP-NOOB. + + A standardized trusted path for communicating directly with the + trusted computing base in a physical device would mitigate the + misbinding threat, but such paths rarely exist in practice. Careful + asset tracking on the server side can also prevent most misbinding + attacks if the peer device sends its identifiers or attributes in the + PeerInfo field and the server compares them with the expected values. + The wrong but uncompromised device's PeerInfo will not match the + expected values. Device certification by the manufacturer can + further strengthen the asset tracking. + +6.4. Peer Identifiers and Attributes + + The PeerId value in the protocol is a server-allocated identifier for + its association with the peer and SHOULD NOT be shown to the user + because its value is initially ephemeral. Since the PeerId is + allocated by the server and the scope of the identifier is the single + server, the so-called identifier squatting attacks, where a malicious + peer could reserve another peer's identifier, are not possible in + EAP-NOOB. The server SHOULD assign a random or pseudorandom PeerId + to each new peer. It SHOULD NOT select the PeerId based on any peer + characteristics that it may know, such as the peer's link-layer + network address. + + User reset or failure in the OOB Step can cause the peer to perform + many Initial Exchanges with the server, which allocates many PeerId + values and stores the ephemeral protocol state for them. The peer + will typically only remember the latest ones. EAP-NOOB leaves it to + the implementation to decide when to delete these ephemeral + associations. There is no security reason to delete them early, and + the server does not have any way to verify that the peers are + actually the same one. Thus, it is safest to store the ephemeral + states on the server for at least one day. If the OOB messages are + sent only in the server-to-peer direction, the server SHOULD NOT + delete the ephemeral state before all the related Noob values have + expired. + + After completion of EAP-NOOB, the server may store the PeerInfo data, + and the user may use it to identify the peer and its attributes, such + as the make and model or serial number. A compromised peer could lie + in the PeerInfo that it sends to the server. If the server stores + any information about the peer, it is important that this information + is approved by the user during or after the OOB Step. Without + verification by the user or authentication on the application level, + the PeerInfo is not authenticated information and should not be + relied on. One possible use for the PeerInfo field is EAP channel + binding (see Section 6.7). + +6.5. Downgrading Threats + + The fingerprint Hoob protects all the information exchanged in the + Initial Exchange, including the cryptosuite negotiation. The message + authentication codes MACs and MACp also protect the same information. + The message authentication codes MACs2 and MACp2 protect information + exchanged during key renegotiation in the Reconnect Exchange. This + prevents downgrading attacks to weaker cryptosuites, as long as the + possible attacks take more time than the maximum time allowed for the + EAP-NOOB completion. This is typically the case for recently + discovered cryptanalytic attacks. + + As an additional precaution, the EAP server and peer MUST check for + downgrading attacks in the Reconnect Exchange as follows. As long as + the server or peer saves any information about the other endpoint, it + MUST also remember the previously negotiated cryptosuite and MUST NOT + accept renegotiation of any cryptosuite that is known to be weaker + than the previous one, such as a deprecated cryptosuite. Determining + the relative strength of the cryptosuites is out of scope of this + specification and may be managed by implementations or by local + policies at the peer and server. + + Integrity of the direction negotiation cannot be verified in the same + way as the integrity of the cryptosuite negotiation. That is, if the + OOB channel used in an application is critically insecure in one + direction, an on-path attacker could modify the negotiation messages + and thereby cause that direction to be used. Applications that + support OOB messages in both directions SHOULD, therefore, ensure + that the OOB channel has sufficiently strong security in both + directions. While this is a theoretical vulnerability, it could + arise in practice if EAP-NOOB is deployed in new applications. + Currently, we expect most peer devices to support only one OOB + direction; in which case, interfering with the direction negotiation + can only prevent the completion of the protocol. + + The long-term shared key material Kz in the persistent EAP-NOOB + association is established with an ECDHE key exchange when the peer + and server are first associated. It is a weaker secret than a + manually configured random shared key because advances in + cryptanalysis against the used ECDHE curve could eventually enable + the attacker to recover Kz. EAP-NOOB protects against such attacks + by allowing cryptosuite upgrades in the Reconnect Exchange and by + updating the shared key material Kz whenever the cryptosuite is + upgraded. We do not expect the cryptosuite upgrades to be frequent, + but, if an upgrade becomes necessary, it can be done without manual + reset and reassociation of the peer devices. + +6.6. Protected Success and Failure Indications + + Section 7.16 of [RFC3748] allows EAP methods to specify protected + result indications because EAP-Success and EAP-Failure packets are + neither acknowledged nor integrity protected. [RFC3748] notes that + these indications may be explicit or implicit. + + EAP-NOOB relies on implicit, protected success indicators in the + Completion Exchange and Reconnect Exchange. Successful verification + of MACs and MACs2 in the EAP-Request message from the server (message + type 6 and message type 9, respectively) acts as an implicit, + protected success indication to the peer. Similarly, successful + verification of MACp and MACp2 in the EAP-Response message from the + peer (message type 6 and message type 9, respectively) act as an + implicit, protected success indication to the server. + + EAP-NOOB failure messages are not protected. Protected failure + result indications would not significantly improve availability since + EAP-NOOB reacts to most malformed data by ending the current EAP + conversation in EAP-Failure. However, since EAP-NOOB spans multiple + conversations, failure in one conversation usually means no state + change on the level of the EAP-NOOB state machine. + +6.7. Channel Binding + + EAP channel binding, defined in [RFC6677], means that the endpoints + compare their perceptions of network properties, such as lower-layer + identifiers, over the secure channel established by EAP + authentication. Section 4.1 of [RFC6677] defines two approaches to + channel binding. EAP-NOOB follows the first approach, in which the + peer and server exchange plaintext information about the network over + a channel that is integrity protected with keys derived during the + EAP execution. More specifically, channel information is exchanged + in the plaintext PeerInfo and ServerInfo objects and is later + verified with message authentication codes (MACp, MACs, MACp2, and + MACs2). This allows policy-based comparison with locally perceived + network properties on either side, as well as logging for debugging + purposes. The peer MAY include in PeerInfo any data items that it + wants to bind to the EAP-NOOB association and to the exported keys. + These can be properties of the authenticator or the access link, such + as the SSID and BSSID of the wireless network (see Table 6). As + noted in Section 4.3 of [RFC6677], the scope of the channel binding + varies between deployments. For example, the server may have less + link-layer information available from roaming networks than from a + local enterprise network, and it may be unable to verify all the + network properties received in PeerInfo. There are also privacy + considerations related to exchanging the ServerInfo and PeerInfo + while roaming (see Section 6.10). + + Channel binding to secure channels, defined in [RFC5056], binds + authentication at a higher protocol layer to a secure channel at a + lower layer. Like most EAP methods, EAP-NOOB exports the session + keys MSK and EMSK, and an outer tunnel or a higher-layer protocol can + bind its authentication to these keys. Additionally, EAP-NOOB + exports the key AMSK, which may be used to bind application-layer + authentication to the secure channel created by EAP-NOOB and to the + session keys MSK and EMSK. + +6.8. Denial of Service + + While denial-of-service (DoS) attacks by on-link attackers cannot be + fully prevented, the design goal in EAP-NOOB is to void long-lasting + failure caused by an attacker who is present only temporarily or + intermittently. The main defense mechanism is the persistent EAP- + NOOB association, which is never deleted automatically due to in-band + messages or error indications. Thus, the endpoints can always use + the persistent association for reconnecting after the DoS attacker + leaves the network. In this sense, the persistent association serves + the same function in EAP-NOOB as a permanent primary key or + certificate in other authentication protocols. We discuss logical + attacks against the updates of the persistent association in + Section 6.9. + + In addition to logical DoS attacks, it is necessary to consider + resource exhaustion attacks against the EAP server. The number of + persistent EAP-NOOB associations created in the server is limited by + the need for a user to assist in delivering the OOB message. The + users can be authenticated for the input or output of the OOB message + at the EAP server, and any users who create excessive numbers of + persistent associations can be held accountable and their + associations can be deleted by the server administrator. What the + attacker can do without user authentication is to perform the Initial + Exchange repeatedly and create a large number of ephemeral + associations (server in Waiting for OOB (1) state) without ever + delivering the OOB message. In Section 6.4, it was suggested that + the server should store the ephemeral states for at least a day. + This may require off-loading the state storage from memory to disk + during a DoS attack. However, if the server implementation is unable + to keep up with a rate of Initial Exchanges performed by a DoS + attacker and needs to drop some ephemeral states, no damage is caused + to already-created persistent associations, and the honest users can + resume registering new peers when the DoS attacker leaves the + network. + + There are some trade-offs in the protocol design between politely + backing off and giving way to DoS attackers. An on-link DoS attacker + could spoof the SleepTime value in the Initial Exchange or Waiting + Exchange to cause denial of service against a specific peer device. + There is an upper limit on the SleepTime (3600 seconds) to mitigate + the spoofing threat. This means that, in the presence of an on-link + DoS attacker who spoofs the SleepTime, it could take up to one hour + after the delivery of the OOB message before the device performs the + Completion Exchange and becomes functional. Similarly, the Unwanted + peer error (error code 2001) could cause the peer to stop connecting + to the network. If the peer device is able to alert the user about + the error condition, it can safely stop connecting to the server and + wait for the user to trigger a reconnection attempt, e.g., by + resetting the device. As mentioned in Section 3.6.2, peer devices + that are unable to alert the user should continue to retry the + Initial Exchange infrequently to avoid a permanent DoS condition. We + believe a maximum backoff time of 3600 seconds is reasonable for a + new protocol because malfunctioning or misconfigured peer + implementations are at least as great a concern as DoS attacks, and + politely backing off within some reasonable limits will increase the + acceptance of the protocol. The maximum backoff times could be + updated to be shorter as the protocol implementations mature. + +6.9. Recovery from Loss of Last Message + + The EAP-NOOB Completion Exchange, as well as the Reconnect Exchange + with cryptosuite update, results in a persistent state change that + should take place either on both endpoints or on neither; otherwise, + the result is a state mismatch that requires user action to resolve. + The state mismatch can occur if the final EAP response of the + exchanges is lost. In the Completion Exchange, the loss of the final + response (Type=6) results in the peer moving to the Registered (4) + state and creating a persistent EAP-NOOB association while the server + stays in an ephemeral state (1 or 2). In the Reconnect Exchange, the + loss of the final response (Type=9) results in the peer moving to the + Registered (4) state and updating its persistent key material Kz + while the server stays in the Reconnecting (3) state and keeps the + old key material. + + The state mismatch is an example of an unavoidable problem in + distributed systems: it is theoretically impossible to guarantee + synchronous state changes in endpoints that communicate + asynchronously. The protocol will always have one critical message + that may get lost, so that one side commits to the state change and + the other side does not. In EAP, the critical message is the final + response from the peer to the server. While the final response is + normally followed by EAP-Success, [RFC3748], Section 4.2 states that + the peer MAY assume that the EAP-Success was lost and the + authentication was successful. Furthermore, EAP method + implementations in the peer do not receive notification of the EAP- + Success message from the parent EAP state machine [RFC4137]. For + these reasons, EAP-NOOB on the peer side commits to a state change + already when it sends the final response. + + The best available solution to the loss of the critical message is to + keep trying. EAP retransmission behavior defined in Section 4.3 of + [RFC3748] suggests 3-5 retransmissions. In the absence of an + attacker, this would be sufficient to reduce the probability of + failure to an acceptable level. However, a determined attacker on + the in-band channel can drop the final EAP-Response message and all + subsequent retransmissions. In the Completion Exchange + (KeyingMode=0) and Reconnect Exchange with cryptosuite upgrade + (KeyingMode=3), this could result in a state mismatch and persistent + denial of service until the user resets the peer state. + + EAP-NOOB implements its own recovery mechanism that allows unlimited + retries of the Reconnect Exchange. When the DoS attacker eventually + stops dropping packets on the in-band channel, the protocol will + recover. The logic for this recovery mechanism is specified in + Section 3.4.2. + + EAP-NOOB does not implement the same kind of retry mechanism in the + Completion Exchange. The reason is that there is always a user + involved in the initial association process, and the user can repeat + the OOB Step to complete the association after the DoS attacker has + left. On the other hand, Reconnect Exchange needs to work without + user involvement. + +6.10. Privacy Considerations + + There are privacy considerations related to performing the Reconnect + Exchange while roaming. The peer and server may send updated + PeerInfo and ServerInfo fields in the Reconnect Exchange. This data + is sent unencrypted between the peer and the EAP authenticator, such + as a wireless access point. Thus, it can be observed by both + outsiders and the access network. The PeerInfo field contains + identifiers and other information about the peer device (see + Table 6). While the information refers to the peer device and not + directly to the user, it can leak information about the user to the + access network and to outside observers. The ServerInfo, on the + other hand, can leak information about the peer's affiliation with + the home network. For this reason, the optional PeerInfo and + ServerInfo in the Reconnect Exchange SHOULD be omitted unless some + critical data has changed and it cannot be updated on the application + layer. + + Peer devices that randomize their Layer 2 address to prevent tracking + can do this whenever the user resets the EAP-NOOB association. + During the lifetime of the association, the PeerId is a unique + identifier that can be used to track the peer in the access network. + Later versions of this specification may consider updating the PeerId + at each Reconnect Exchange. In that case, it is necessary to + consider how the authenticator and access-network administrators can + recognize and add misbehaving peer devices to a deny list, as well as + how to avoid loss of synchronization between the server and the peer + if messages are lost during the identifier update. + + To enable stronger identity protection in later versions of EAP-NOOB, + the optional server-assigned NAI (NewNAI) SHOULD have a constant + username part. The RECOMMENDED username is "noob". The server MAY, + however, send a different username in NewNAI to avoid username + collisions within its realm or to conform to a local policy on + usernames. + +6.11. EAP Security Claims + + EAP security claims are defined in Section 7.2.1 of [RFC3748]. The + security claims for EAP-NOOB are listed in Table 13. + + +=================+=================================================+ + | Security | EAP-NOOB Claim | + | Property | | + +=================+=================================================+ + | Authentication | ECDHE key exchange with out-of-band | + | mechanism | authentication | + +-----------------+-------------------------------------------------+ + | Protected | yes | + | cryptosuite | | + | negotiation | | + +-----------------+-------------------------------------------------+ + | Mutual | yes | + | authentication | | + +-----------------+-------------------------------------------------+ + | Integrity | yes | + | protection | | + +-----------------+-------------------------------------------------+ + | Replay | yes | + | protection | | + +-----------------+-------------------------------------------------+ + | Confidentiality | no | + +-----------------+-------------------------------------------------+ + | Key derivation | yes | + +-----------------+-------------------------------------------------+ + | Key strength | The specified cryptosuites provide | + | | key strength of at least 128 bits. | + +-----------------+-------------------------------------------------+ + | Dictionary | yes | + | attack | | + | protection | | + +-----------------+-------------------------------------------------+ + | Fast reconnect | yes | + +-----------------+-------------------------------------------------+ + | Cryptographic | not applicable | + | binding | | + +-----------------+-------------------------------------------------+ + | Session | yes | + | independence | | + +-----------------+-------------------------------------------------+ + | Fragmentation | no | + +-----------------+-------------------------------------------------+ + | Channel binding | yes (The ServerInfo and PeerInfo can | + | | be used to convey integrity-protected | + | | channel properties, such as network | + | | SSID or peer MAC address.) | + +-----------------+-------------------------------------------------+ + + Table 13: EAP Security Claims + +7. References + +7.1. Normative References + + [EUI-48] IEEE, "IEEE Standard for Local and Metropolitan Area + Networks: Overview and Architecture", + DOI 10.1109/IEEESTD.2014.6847097, IEEE Standard 802-2014, + June 2014, <https://doi.org/10.1109/IEEESTD.2014.6847097>. + + [FIPS186-4] + National Institute of Standards and Technology (NIST), + "Digital Signature Standard (DSS)", + DOI 10.6028/NIST.FIPS.186-4, FIPS 186-4, July 2013, + <https://doi.org/10.6028/NIST.FIPS.186-4>. + + [NIST-DH] Barker, E., Chen, L., Roginsky, A., Vassilev, A., and R. + Davis, "Recommendation for Pair-Wise Key-Establishment + Schemes Using Discrete Logarithm Cryptography", + DOI 10.6028/NIST.SP.800-56Ar3, NIST Special + Publication 800-56A Revision 3, April 2018, + <https://nvlpubs.nist.gov/nistpubs/SpecialPublications/ + NIST.SP.800-56Ar3.pdf>. + + [RFC2104] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed- + Hashing for Message Authentication", RFC 2104, + DOI 10.17487/RFC2104, February 1997, + <https://www.rfc-editor.org/info/rfc2104>. + + [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>. + + [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data + Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006, + <https://www.rfc-editor.org/info/rfc4648>. + + [RFC5247] Aboba, B., Simon, D., and P. Eronen, "Extensible + Authentication Protocol (EAP) Key Management Framework", + RFC 5247, DOI 10.17487/RFC5247, August 2008, + <https://www.rfc-editor.org/info/rfc5247>. + + [RFC6234] Eastlake 3rd, D. and T. Hansen, "US Secure Hash Algorithms + (SHA and SHA-based HMAC and HKDF)", RFC 6234, + DOI 10.17487/RFC6234, May 2011, + <https://www.rfc-editor.org/info/rfc6234>. + + [RFC7517] Jones, M., "JSON Web Key (JWK)", RFC 7517, + DOI 10.17487/RFC7517, May 2015, + <https://www.rfc-editor.org/info/rfc7517>. + + [RFC7518] Jones, M., "JSON Web Algorithms (JWA)", RFC 7518, + DOI 10.17487/RFC7518, May 2015, + <https://www.rfc-editor.org/info/rfc7518>. + + [RFC7542] DeKok, A., "The Network Access Identifier", RFC 7542, + DOI 10.17487/RFC7542, May 2015, + <https://www.rfc-editor.org/info/rfc7542>. + + [RFC7748] Langley, A., Hamburg, M., and S. Turner, "Elliptic Curves + for Security", RFC 7748, DOI 10.17487/RFC7748, January + 2016, <https://www.rfc-editor.org/info/rfc7748>. + + [RFC8037] Liusvaara, I., "CFRG Elliptic Curve Diffie-Hellman (ECDH) + and Signatures in JSON Object Signing and Encryption + (JOSE)", RFC 8037, DOI 10.17487/RFC8037, January 2017, + <https://www.rfc-editor.org/info/rfc8037>. + + [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>. + + [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data + Interchange Format", STD 90, RFC 8259, + DOI 10.17487/RFC8259, December 2017, + <https://www.rfc-editor.org/info/rfc8259>. + +7.2. Informative References + + [Bluetooth] + Bluetooth Special Interest Group, "Bluetooth Core + Specification Version 5.3", July 2021, + <https://www.bluetooth.com/specifications/bluetooth-core- + specification>. + + [IEEE-802.1X] + IEEE, "IEEE Standard for Local and Metropolitan Area + Networks--Port-Based Network Access Control", IEEE + Standard 802.1X-2020, February 2020. + + [RATS-EAT] Lundblade, L., Mandyam, G., and J. O'Donoghue, "The Entity + Attestation Token (EAT)", Work in Progress, Internet- + Draft, draft-ietf-rats-eat-11, 24 October 2021, + <https://datatracker.ietf.org/doc/html/draft-ietf-rats- + eat-11>. + + [RFC2904] Vollbrecht, J., Calhoun, P., Farrell, S., Gommans, L., + Gross, G., de Bruijn, B., de Laat, C., Holdrege, M., and + D. Spence, "AAA Authorization Framework", RFC 2904, + DOI 10.17487/RFC2904, August 2000, + <https://www.rfc-editor.org/info/rfc2904>. + + [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform + Resource Identifier (URI): Generic Syntax", STD 66, + RFC 3986, DOI 10.17487/RFC3986, January 2005, + <https://www.rfc-editor.org/info/rfc3986>. + + [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>. + + [RFC5056] Williams, N., "On the Use of Channel Bindings to Secure + Channels", RFC 5056, DOI 10.17487/RFC5056, November 2007, + <https://www.rfc-editor.org/info/rfc5056>. + + [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>. + + [RFC6677] Hartman, S., Ed., Clancy, T., and K. Hoeper, "Channel- + Binding Support for Extensible Authentication Protocol + (EAP) Methods", RFC 6677, DOI 10.17487/RFC6677, July 2012, + <https://www.rfc-editor.org/info/rfc6677>. + + [Sethi14] Sethi, M., Oat, E., Di Francesco, M., and T. Aura, "Secure + bootstrapping of cloud-managed ubiquitous displays", + Proceedings of ACM International Joint Conference on + Pervasive and Ubiquitous Computing (UbiComp 2014), pp. + 739-750, Seattle, USA, DOI 10.1145/2632048.2632049, + September 2014, + <http://dx.doi.org/10.1145/2632048.2632049>. + + [Sethi19] Sethi, M., Peltonen, A., and T. Aura, "Misbinding Attacks + on Secure Device Pairing and Bootstrapping", + DOI 10.1145/3321705.3329813, February 2019, + <https://arxiv.org/abs/1902.07550>. + + [TLS-CWT] Tschofenig, H. and M. Brossard, "Using CBOR Web Tokens + (CWTs) in Transport Layer Security (TLS) and Datagram + Transport Layer Security (DTLS)", Work in Progress, + Internet-Draft, draft-tschofenig-tls-cwt-02, 13 July 2020, + <https://datatracker.ietf.org/doc/html/draft-tschofenig- + tls-cwt-02>. + +Appendix A. Exchanges and Events per State + + Table 14 shows how the EAP server chooses the exchange type depending + on the server and peer states. In the state combinations marked with + hyphen "-", there is no possible exchange and user action is required + to make progress. Note that peer state 4 is omitted from the table + because the peer never connects to the server when the peer is in + that state. The table also shows the handling of errors in each + exchange. A notable detail is that the recipient of error code 2003 + moves to state 1. + + +=============+===============================+==================+ + | Peer States | Exchange Chosen by the Server | Next Peer and | + | | | Server States | + +=============+===============================+==================+ + | Server State: Unregistered (0) | + +-------------+-------------------------------+------------------+ + | 0..2 | Initial Exchange | both 1 (0 on | + | | | error) | + +-------------+-------------------------------+------------------+ + | 3 | - | no change, | + | | | notify user | + +-------------+-------------------------------+------------------+ + | Server State: Waiting for OOB (1) | + +-------------+-------------------------------+------------------+ + | 0 | Initial Exchange | both 1 (0 on | + | | | error) | + +-------------+-------------------------------+------------------+ + | 1 | Waiting Exchange | both 1 (no | + | | | change on error) | + +-------------+-------------------------------+------------------+ + | 2 | Completion Exchange | both 4 (A) | + +-------------+-------------------------------+------------------+ + | 3 | - | no change, | + | | | notify user | + +-------------+-------------------------------+------------------+ + | Server State: OOB Received (2) | + +-------------+-------------------------------+------------------+ + | 0 | Initial Exchange | both 1 (0 on | + | | | error) | + +-------------+-------------------------------+------------------+ + | 1 | Completion Exchange | both 4 (B) | + +-------------+-------------------------------+------------------+ + | 2 | Completion Exchange | both 4 (A) | + +-------------+-------------------------------+------------------+ + | 3 | - | no change, | + | | | notify user | + +-------------+-------------------------------+------------------+ + | Server State: Reconnecting (3) or Registered (4) | + +-------------+-------------------------------+------------------+ + | 0..2 | - | no change, | + | | | notify user | + +-------------+-------------------------------+------------------+ + | 3 | Reconnect Exchange | both 4 (3 on | + | | | error) | + +-------------+-------------------------------+------------------+ + + Table 14: How the Server Chooses the Exchange Type + + (A) peer to 1 on error 2003; no other changes on error + + (B) server to 1 on error 2003; no other changes on error + + Table 15 lists the local events that can take place in the server or + peer. Both the server and peer output and accept OOB messages in + association state 1, leading the receiver to state 2. Communication + errors and timeouts in states 0..2 lead back to state 0, while + similar errors in states 3..4 lead to state 3. An application + request for rekeying (e.g., to refresh session keys or to upgrade + cryptosuite) also takes the association from state 3..4 to state 3. + The user can always reset the association state to 0. Recovering + association data, e.g., from a backup, leads to state 3. + + +===================+========================+=========+ + | Server/Peer State | Possible Local Events | Next | + | | in the Server and Peer | State | + +===================+========================+=========+ + | 1 | OOB Output | 1 | + +-------------------+------------------------+---------+ + | 1 | OOB Input | 2 (1 on | + | | | error) | + +-------------------+------------------------+---------+ + | 0..2 | Mobility/timeout/ | 0 | + | | network failure | | + +-------------------+------------------------+---------+ + | 3..4 | Mobility/timeout/ | 3 | + | | network failure | | + +-------------------+------------------------+---------+ + | 3..4 | Rekeying request | 3 | + +-------------------+------------------------+---------+ + | 0..4 | User resets | 0 | + | | association | | + +-------------------+------------------------+---------+ + | 0..4 | Association state | 3 | + | | recovery | | + +-------------------+------------------------+---------+ + + Table 15: Local Events in the Server and Peer + +Appendix B. Application-Specific Parameters + + Table 16 lists OOB channel parameters that need to be specified in + each application that makes use of EAP-NOOB. The list is not + exhaustive and is included for the convenience of implementers only. + + +====================+=========================================+ + | Parameter | Description | + +====================+=========================================+ + | OobDirs | Allowed directions of the OOB channel. | + +--------------------+-----------------------------------------+ + | OobMessageEncoding | How the OOB message data fields are | + | | encoded for the OOB channel. | + +--------------------+-----------------------------------------+ + | SleepTimeDefault | Default minimum time in seconds that | + | | the peer should sleep before the next | + | | Waiting Exchange. | + +--------------------+-----------------------------------------+ + | OobRetries | Number of received OOB messages with | + | | invalid Hoob, after which the receiver | + | | moves to Unregistered (0) state. When | + | | the OOB channel has error detection or | + | | correction, the RECOMMENDED value is 5. | + +--------------------+-----------------------------------------+ + | NoobTimeout | How many seconds the sender of the OOB | + | | message remembers the sent Noob value. | + | | The RECOMMENDED value is 3600 seconds. | + +--------------------+-----------------------------------------+ + | ServerInfoType | The value of the Type field and the | + | | other required fields in ServerInfo. | + +--------------------+-----------------------------------------+ + | PeerInfoType | The value of the Type field and the | + | | other required fields in PeerInfo. | + +--------------------+-----------------------------------------+ + + Table 16: OOB Channel Characteristics + +Appendix C. EAP-NOOB Roaming + + AAA architectures [RFC2904] allow for roaming of network-connected + appliances that are authenticated over EAP. While the peer is + roaming in a visited network, authentication still takes place + between the peer and an authentication server at its home network. + EAP-NOOB supports such roaming by allowing the server to assign a NAI + to the peer. After the NAI has been assigned, it enables the visited + network to route the EAP session to the peer's home AAA server. + + A peer device that is new or has gone through a hard reset should be + connected first to the home network and establish an EAP-NOOB + association with its home AAA server before it is able to roam. + After that, it can perform the Reconnect Exchange from the visited + network. + + Alternatively, the device may provide some method for the user to + configure the NAI of the home network. This is the user or + application-configured NAI mentioned in Section 3.3.1. In that case, + the EAP-NOOB association can be created while roaming. The + configured NAI enables the EAP messages to be routed correctly to the + home AAA server. + + While roaming, the device needs to identify the networks where the + EAP-NOOB association can be used to gain network access. For 802.11 + access networks, the server MAY send a list of SSID strings in the + ServerInfo field, called either SSIDList or Base64SSIDList. The list + is formatted as explained in Table 6. If present, the peer MAY use + this list as a hint to determine the networks where the EAP-NOOB + association can be used for access authorization, in addition to the + access network where the Initial Exchange took place. + +Appendix D. OOB Message as a URL + + While EAP-NOOB does not mandate any particular OOB communication + channel, typical OOB channels include graphical displays and emulated + NFC tags. In the peer-to-server direction, it may be convenient to + encode the OOB message as a URL, which is then encoded as a QR code + for displays and printers or as an NFC Data Exchange Format (NDEF) + record for dynamic NFC tags. A user can then simply scan the QR code + or NFC tag and open the URL, which causes the OOB message to be + delivered to the authentication server. The URL MUST specify https + or another server-authenticated scheme so that there is a secure + connection to the server and the on-path attacker cannot read or + modify the OOB message. + + The ServerInfo in this case includes a field called ServerURL of the + following format with a RECOMMENDED length of at most 60 characters: + + https://<host>[:<port>]/[<path>] + + To this, the peer appends the OOB message fields (PeerId, Noob, and + Hoob) as a query string. PeerId is provided to the peer by the + server and might be a 22-character ASCII string. The peer base64url + encodes, without padding, the 16-byte values Noob and Hoob into + 22-character ASCII strings. The query parameters MAY be in any + order. The resulting URL is of the following format: + + https://<host>[:<port>]/[<path>]?P=<PeerId>&N=<Noob>&H=<Hoob> + + The following is an example of a well-formed URL encoding the OOB + message (without line breaks): + + https://aaa.example.com/eapnoob?P=mcm5BSCDZ45cYPlAr1ghNw&N=rMinS0-F4E + fCU8D9ljxX_A&H=QvnMp4UGxuQVFaXPW_14UW + +Acknowledgments + + Max Crone, Shiva Prasad TP, and Raghavendra MS implemented parts of + this protocol with wpa_supplicant and hostapd. Eduardo Inglés and + Dan Garcia-Carrillo were involved in the implementation of this + protocol on Contiki. Their inputs helped us in improving the + specification. + + The authors would like to thank Rhys Smith and Josh Howlett for + providing valuable feedback, as well as new use cases and + requirements for the protocol. Thanks to Eric Rescorla, Alan Dekok, + Darshak Thakore, Stefan Winter, Hannes Tschofenig, Daniel Migault, + Roman Danyliw, Benjamin Kaduk, Francesca Palombini, Steve Hanna, Lars + Eggert, and Éric Vyncke for their comments and reviews. + + We would also like to express our sincere gratitude to Dave Thaler + for his thorough review of the document. + +Authors' Addresses + + Tuomas Aura + Aalto University + FI-00076 Aalto + Finland + + Email: tuomas.aura@aalto.fi + + + Mohit Sethi + Ericsson + FI-02420 Jorvas + Finland + + Email: mohit@iki.fi + + + Aleksi Peltonen + Aalto University + FI-00076 Aalto + Finland + + Email: aleksi.peltonen@aalto.fi |