rfc9140xml2.original.xml | rfc9140.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="us-ascii"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | ||||
<!ENTITY RFC2104 SYSTEM "reference.RFC.2104.xml"> | <!DOCTYPE rfc [ | |||
<!ENTITY RFC2119 SYSTEM "reference.RFC.2119.xml"> | <!ENTITY nbsp " "> | |||
<!ENTITY RFC3748 SYSTEM "reference.RFC.3748.xml"> | <!ENTITY zwsp "​"> | |||
<!ENTITY RFC4137 SYSTEM "reference.RFC.4137.xml"> | <!ENTITY nbhy "‑"> | |||
<!ENTITY RFC3986 SYSTEM "reference.RFC.3986.xml"> | <!ENTITY wj "⁠"> | |||
<!ENTITY RFC4648 SYSTEM "reference.RFC.4648.xml"> | ||||
<!ENTITY RFC5216 SYSTEM "reference.RFC.5216.xml"> | ||||
<!ENTITY RFC5247 SYSTEM "reference.RFC.5247.xml"> | ||||
<!ENTITY RFC6234 SYSTEM "reference.RFC.6234.xml"> | ||||
<!ENTITY RFC7517 SYSTEM "reference.RFC.7517.xml"> | ||||
<!ENTITY RFC7542 SYSTEM "reference.RFC.7542.xml"> | ||||
<!ENTITY RFC7748 SYSTEM "reference.RFC.7748.xml"> | ||||
<!ENTITY RFC7942 SYSTEM "reference.RFC.7942.xml"> | ||||
<!ENTITY RFC8126 SYSTEM "reference.RFC.8126.xml"> | ||||
<!ENTITY RFC8174 SYSTEM "reference.RFC.2119.xml"> | ||||
<!ENTITY RFC8259 SYSTEM "reference.RFC.8259.xml"> | ||||
<!ENTITY newline " "> | ||||
]> | ]> | |||
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt"?> | ||||
<?rfc strict="yes"?> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" docName="draft-ietf-emu-eap-noob | |||
<?rfc toc="yes"?> | -06" number="9140" ipr="trust200902" obsoletes="" updates="" submissionType="IET | |||
<?rfc tocdepth="4"?> | F" category="std" consensus="true" xml:lang="en" tocInclude="true" tocDepth="4" | |||
<?rfc symrefs="yes"?> | symRefs="true" sortRefs="true" version="3"> | |||
<?rfc sortrefs="yes"?> | ||||
<?rfc compact="yes"?> | <!-- xml2rfc v2v3 conversion 3.9.1 --> | |||
<?rfc subcompact="no"?> | ||||
<?rfc rfcedstyle="yes"?> | ||||
<rfc category="std" docName="draft-ietf-emu-eap-noob-06" ipr="trust200902"> | ||||
<front> | <front> | |||
<title abbrev="EAP-NOOB">Nimble out-of-band authentication for EAP (EAP-NOOB | <title abbrev="EAP-NOOB">Nimble Out-of-Band Authentication for EAP (EAP&nbhy | |||
)</title> | ;NOOB)</title> | |||
<seriesInfo name="RFC" value="9140"/> | ||||
<author initials="T" surname="Aura" fullname="Tuomas Aura"> | <author initials="T" surname="Aura" fullname="Tuomas Aura"> | |||
<organization>Aalto University</organization> | <organization>Aalto University</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street></street> | <street/> | |||
<city>Aalto</city> | <city>Aalto</city> | |||
<code>00076</code> | <code>00076</code> | |||
<country>Finland</country> | <country>Finland</country> | |||
</postal> | </postal> | |||
<email>tuomas.aura@aalto.fi</email> | <email>tuomas.aura@aalto.fi</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author initials="M" surname="Sethi" fullname="Mohit Sethi"> | <author initials="M" surname="Sethi" fullname="Mohit Sethi"> | |||
<organization>Ericsson</organization> | <organization>Ericsson</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street></street> | <street/> | |||
<city>Jorvas</city> | <city>Jorvas</city> | |||
<code>02420</code> | <code>02420</code> | |||
<country>Finland</country> | <country>Finland</country> | |||
</postal> | </postal> | |||
<email>mohit@piuha.net</email> | <email>mohit@iki.fi</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author initials="A" surname="Peltonen" fullname="Aleksi Peltonen"> | <author initials="A" surname="Peltonen" fullname="Aleksi Peltonen"> | |||
<organization>Aalto University</organization> | <organization>Aalto University</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street></street> | <street/> | |||
<city>Aalto</city> | <city>Aalto</city> | |||
<code>00076</code> | <code>00076</code> | |||
<country>Finland</country> | <country>Finland</country> | |||
</postal> | </postal> | |||
<email>aleksi.peltonen@aalto.fi</email> | <email>aleksi.peltonen@aalto.fi</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date /> | <date year="2021" month="December"/> | |||
<area>Security</area> | <area>Security</area> | |||
<workgroup>Network Working Group</workgroup> | <workgroup>EAP Method Update</workgroup> | |||
<keyword>IoT security</keyword> | ||||
<keyword>cybersecurity</keyword> | ||||
<keyword>network access authorization</keyword> | ||||
<keyword>Extensible Authentication Protocol</keyword> | ||||
<keyword>key exchange</keyword> | ||||
<abstract> | <abstract> | |||
<t> | <t>The Extensible Authentication Protocol (EAP) provides support for multi | |||
The Extensible Authentication Protocol (EAP) provides support for multip | ple | |||
le authentication methods. This document defines the EAP-NOOB authentication met | authentication methods. | |||
hod for nimble out-of-band (OOB) authentication, and key derivation. The EAP met | This document defines the EAP-NOOB authentication method for | |||
hod is intended for bootstrapping all kinds of Internet-of-Things (IoT) devices | nimble out-of-band (OOB) authentication and key derivation. The EAP method | |||
that have no pre-configured authentication credentials. The method makes use of | is intended | |||
a user-assisted one-directional OOB message between the peer device and authenti | for bootstrapping all kinds of Internet-of-Things (IoT) devices that have | |||
cation server to authenticate the in-band key exchange. The device must have a n | no | |||
on-network input or output interface, such as a display, microphone, speaker, or | preconfigured authentication credentials. The method makes use of a user-a | |||
blinking light, which can send or receive dynamically generated messages of ten | ssisted, | |||
s of bytes in length. | one-directional, out-of-band (OOB) message between the peer device and aut | |||
</t> | hentication | |||
server to | ||||
authenticate the in-band key exchange. The device must have a nonnetwork i | ||||
nput or | ||||
output interface, such as a display, microphone, speaker, or blinking ligh | ||||
t, that can | ||||
send or receive dynamically generated messages of tens of bytes in length. | ||||
</t> | ||||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | <middle> | |||
<section anchor="introduction" numbered="true" toc="default"> | ||||
<section title="Introduction" anchor="introduction"> | <name>Introduction</name> | |||
<t> | <t>This document describes a method for registration, authentication, and | |||
This document describes a method for registration, authentication and ke | key derivation | |||
y derivation for network-connected smart devices, such as consumer and enterpris | for network-connected smart devices, such as consumer and enterprise appli | |||
e appliances that are part of the Internet of Things (IoT). These devices may be | ances that are | |||
off-the-shelf hardware that is sold and distributed without any prior registrat | part of the Internet of Things (IoT). These devices may be off-the-shelf h | |||
ion or credential-provisioning process, or they may be recycled devices after a | ardware that | |||
hard reset. Thus, the device registration in a server database, ownership of the | is sold and distributed without any prior registration or credential-provi | |||
device, and the authentication credentials for both network access and applicat | sioning | |||
ion-level security must all be established at the time of the device deployment. | process, or they may be recycled devices after a hard reset. Thus, the dev | |||
Furthermore, many such devices have only limited user interfaces that could be | ice | |||
used for their configuration. Often, the user interfaces are limited to either o | registration in a server database, ownership of the device, and the authen | |||
nly input (e.g., camera) or output (e.g., display screen). The device configurat | tication | |||
ion is made more challenging by the fact that the devices may exist in large num | credentials for both network access and application-level security must al | |||
bers and may have to be deployed or re-configured nimbly based on user needs. | l be | |||
</t> | established at the time of the device deployment. Furthermore, many such d | |||
<t>To summarize, devices may have the following characteristics: | evices have | |||
<list style="symbols"> | only limited user interfaces that could be used for their configuration. O | |||
<t>no pre-established relation with the intended server or user, | ften, the user | |||
</t> | interfaces are limited to either only input (e.g., a camera) or output (e. | |||
<t>no pre-provisioned device identifier or authentication credentials, | g., a display | |||
</t> | screen). The device configuration is made more challenging by the fact tha | |||
<t>input or output interface that may be capable of only one-direction | t the devices | |||
al out-of-band communication. | may exist in large numbers and may have to be deployed or reconfigured nim | |||
</t> | bly based on | |||
</list> | user needs.</t> | |||
</t> | <t>To summarize, devices may have the following characteristics:</t> | |||
<t> | <ul spacing="normal"> | |||
Many proprietary out-of-band (OOB) configuration methods exist for speci | <li>no preestablished relation with the intended server or user,</li> | |||
fic IoT devices. The goal of this specification is to provide an open standard a | <li>no preprovisioned device identifier or authentication credentials, o | |||
nd a generic protocol for bootstrapping the security of network-connected applia | r</li> | |||
nces, such as displays, printers, speakers, and cameras. The security bootstrapp | <li>an input or output interface that may be capable of only one-directi | |||
ing in this specification makes use of a user-assisted OOB channel. The device a | onal | |||
uthentication relies on a user having physical access to the device, and the key | out-of-band communication.</li> | |||
exchange security is based on the assumption that attackers are not able to obs | </ul> | |||
erve or modify the messages conveyed through the OOB channel. We follow the comm | <t>Many proprietary out-of-band (OOB) configuration methods exist for spec | |||
on approach taken in pairing protocols: performing a Diffie-Hellman key exchange | ific IoT | |||
over the insecure network and authenticating the established key with the help | devices. The goal of this specification is to provide an open standard and | |||
of the OOB channel in order to prevent impersonation attacks. | a generic | |||
</t> | protocol for bootstrapping the security of network-connected appliances, s | |||
<t> | uch as | |||
The solution presented here is intended for devices that have either a n | displays, printers, speakers, and cameras. The security bootstrapping in t | |||
on-network input or output interface, such as a camera, microphone, display scre | his | |||
en, speakers or blinking LED light, which is able to send or receive dynamically | specification makes use of a user-assisted OOB channel. The device authent | |||
generated messages of tens of bytes in length. Naturally, this solution may not | ication relies | |||
be appropriate for very small sensors or actuators that have no user interface | on a user having physical access to the device, and the key exchange secur | |||
at all or for devices that are inaccessible to the user. We also assume that the | ity is based | |||
OOB channel is at least partly automated (e.g., camera scanning a bar code) and | on the assumption that attackers are not able to observe or modify the mes | |||
, thus, there is no need to absolutely minimize the length of the data transferr | sages conveyed | |||
ed through the OOB channel. This differs, for example, from Bluetooth pairing <x | through the OOB channel. We follow the common approach taken in pairing pr | |||
ref target="BluetoothPairing"/>, where it is essential to minimize the length of | otocols: | |||
the manually transferred or compared codes. The OOB messages in this specificat | performing a Diffie-Hellman key exchange over the insecure network and aut | |||
ion are dynamically generated. We thus do not support static printed registratio | henticating | |||
n codes. One reason for requiring dynamic OOB messages is that the receipt of th | the established key with the help of the OOB channel in order to prevent i | |||
e OOB message authorizes the server to take ownership of the device. Dynamic OOB | mpersonation | |||
messages are more secure than static printed codes, which could be leaked and l | attacks.</t> | |||
ater misused. | <t>The solution presented here is intended for devices that have either a | |||
</t> | nonnetwork | |||
input or output interface, such as a camera, microphone, display screen, s | ||||
peaker, 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 f | ||||
or very small | ||||
sensors or actuators that have no user interface at all or for devices tha | ||||
t 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 <xref target="Bluetooth" format="default"/ | ||||
>, | ||||
where it is essential to minimize the length of the manually transferred o | ||||
r compared | ||||
codes. The OOB messages in this specification are dynamically generated. T | ||||
hus, we do not | ||||
support static printed registration codes. One reason for requiring dynami | ||||
c OOB messages | ||||
is that the receipt of the OOB message authorizes the server to take owner | ||||
ship of the | ||||
device. Dynamic OOB messages are more secure than static printed codes, wh | ||||
ich could be | ||||
leaked and later misused.</t> | ||||
</section> | </section> | |||
<section anchor="terminology" numbered="true" toc="default"> | ||||
<section title="Terminology" anchor="terminology"> | <name>Terminology</name> | |||
<t> | <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHO | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
ULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | |||
be interpreted as described in BCP 14 <xref target='RFC2119'/> <xref target='RF | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
C8174'/> when, and only when, they appear in all capitals, as shown here. | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are t | |||
</t> | o be | |||
<t> | interpreted as | |||
In addition, this document frequently uses the following terms as they h | described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | |||
ave been defined in <xref target="RFC5216"/>: | when, and only when, they appear in all capitals, as shown here.</t> | |||
<t>In addition, this document frequently uses the following terms as they | ||||
<list style="hanging" hangIndent="6"> | have been | |||
<t hangText="authenticator"> | defined in <xref target="RFC5216" format="default"/>:</t> | |||
The entity initiating EAP authentication. | <dl newline="true" spacing="normal" indent="6"> | |||
</t> | <dt>authenticator</dt> | |||
<t hangText="peer"> | <dd>The entity initiating EAP authentication.</dd> | |||
The entity that responds to the authenticator. In <xref target="IEEE | <dt>peer</dt> | |||
-802.1X"/>, this entity is known as the supplicant. (We use the terms peer, devi | <dd>The entity that responds to the authenticator. In <xref target="IEEE | |||
ce, and peer device interchangeably.) | -802.1X" | |||
</t> | format="default"/>, this entity is known as the supplicant. (We use the t | |||
<t hangText="server"> | erms peer, | |||
The entity that terminates the EAP authentication method with the pe | device, and peer device interchangeably.)</dd> | |||
er. In the case where no backend authentication server is used, the EAP server i | <dt>server</dt> | |||
s part of the authenticator. In the case where the authenticator operates in pas | <dd>The entity that terminates the EAP authentication method with the pe | |||
s-through mode, the EAP server is located on the backend authentication server. | er. In the | |||
</t> | case where no backend authentication server is used, the EAP server is pa | |||
</list> | rt of the | |||
</t> | authenticator. In the case where the authenticator operates in pass-throu | |||
gh mode, the | ||||
EAP server is located on the backend authentication server.</dd> | ||||
</dl> | ||||
</section> | </section> | |||
<section anchor="eap-noob" numbered="true" toc="default"> | ||||
<section title="EAP-NOOB protocol" anchor="eap-noob"> | <name>EAP-NOOB Method</name> | |||
<t> | <t>This section defines the EAP-NOOB method. The protocol is a generalized | |||
This section defines the EAP-NOOB protocol. The protocol is a generalize | version of | |||
d version of the original idea presented by <xref target="Sethi14">Sethi et al.< | the original idea presented by <xref target="Sethi14" format="default">Set | |||
/xref>. | hi et | |||
</t> | al.</xref>.</t> | |||
<section anchor="overview" numbered="true" toc="default"> | ||||
<name>Protocol Overview</name> | ||||
<t>One EAP-NOOB method execution spans two or more EAP conversations, ca | ||||
lled | ||||
Exchanges in this specification. Each Exchange consists of several EAP | ||||
request-response pairs. At least two separate EAP conversations are neede | ||||
d to give the | ||||
human user time to deliver the OOB message between them.</t> | ||||
<section title="Protocol overview" anchor="overview"> | <t>The overall protocol starts with the Initial Exchange, which comprise | |||
<t> | s four EAP | |||
One EAP-NOOB protocol execution spans two or more EAP conversations, c | request-response pairs. In the Initial Exchange, the server allocates an | |||
alled Exchanges in this specification. Each Exchange consists of several EAP req | identifier to | |||
uest-response pairs. At least two separate EAP conversations are needed to give | the peer, and the server and peer negotiate the protocol version and cryp | |||
the human user time to deliver the OOB message between them. | tosuite | |||
</t> | (i.e., cryptographic algorithm suite), exchange nonces, and perform an Ep | |||
<t> | hemeral | |||
The overall protocol starts with the Initial Exchange, which comprises | Elliptic Curve Diffie-Hellman (ECDHE) key exchange. The user-assisted OOB | |||
four EAP request-response pairs. In the Initial Exchange, the server allocates | Step then | |||
an identifier to the peer, and the server and peer negotiate the protocol versio | takes place. This step requires only one out-of-band message, either from | |||
n and cryptosuite (i.e., cryptographic algorithm suite), exchange nonces and per | the peer to | |||
form an Ephemeral Elliptic Curve Diffie-Hellman (ECDHE) key exchange. The user-a | the server or from the server to the peer. While waiting for the OOB Step | |||
ssisted OOB Step then takes place. This step requires only one out-of-band messa | action, the | |||
ge either from the peer to the server or from the server to the peer. While wait | peer <bcp14>MAY</bcp14> probe the server by reconnecting to it with EAP-N | |||
ing for the OOB Step action, the peer MAY probe the server by reconnecting to it | OOB. If the | |||
with EAP-NOOB. If the OOB Step has already taken place, the probe leads to the | OOB Step has already taken place, the probe leads to the Completion Excha | |||
Completion Exchange, which completes the mutual authentication and key confirmat | nge, which | |||
ion. On the other hand, if the OOB Step has not yet taken place, the probe leads | completes the mutual authentication and key confirmation. On the other ha | |||
to the Waiting Exchange, and the peer will perform another probe after a server | nd, if the | |||
-defined minimum waiting time. The Initial Exchange and Waiting Exchange always | OOB Step has not yet taken place, the probe leads to the Waiting Exchange | |||
end in EAP-Failure, while the Completion Exchange may result in EAP-Success. Onc | , and the | |||
e the peer and server have performed a successful Completion Exchange, both endp | peer will perform another probe after a server-defined minimum waiting ti | |||
oints store the created association in persistent storage, and the OOB Step is n | me. The | |||
ot repeated. Thereafter, creation of new temporal keys, ECDHE rekeying, and upda | Initial Exchange and Waiting Exchange always end in EAP-Failure, while th | |||
tes of cryptographic algorithms can be achieved with the Reconnect Exchange. | e Completion | |||
</t> | Exchange may result in EAP-Success. Once the peer and server have perform | |||
<t> | ed a | |||
<figure anchor="fig-statemachine" title="EAP-NOOB server-peer associat | successful Completion Exchange, both endpoints store the created associat | |||
ion state machine" align="center"> | ion in | |||
<artwork> | persistent storage, and the OOB Step is not repeated. Thereafter, creatio | |||
<![CDATA[ | n of new | |||
temporal keys, ECDHE rekeying, and updates of cryptographic algorithms ca | ||||
n be achieved | ||||
with the Reconnect Exchange.</t> | ||||
<figure anchor="fig-statemachine"> | ||||
<name>EAP-NOOB Server-Peer Association State Machine</name> | ||||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
OOB Output/Initial Exchange/ | OOB Output/Initial Exchange/ | |||
Waiting Exchange | Waiting Exchange | |||
.-----. | .-----. | |||
| v | | v | |||
.------------------. Initial .------------------. | .------------------. Initial .------------------. | |||
| | Exchange | | | | | Exchange | | | |||
.->| Unregistered (0) |---------------->|Waiting for OOB(1)| | .->| Unregistered (0) |---------------->|Waiting for OOB(1)| | |||
| | (ephemeral) | | (ephemeral) | | | | (ephemeral) | | (ephemeral) | | |||
| | | | | | | | | | | | |||
| '------------------' '------------------' | | '------------------' '------------------' | |||
skipping to change at line 174 ¶ | skipping to change at line 222 ¶ | |||
| Timeout/ Reconnect | | Timeout/ Reconnect | |||
| Failure Exchange | | Failure Exchange | |||
| | | | | | | | |||
| v | | | v | | |||
| .------------------. | | .------------------. | |||
| | | | | | | | |||
'--| Reconnecting (3) | | '--| Reconnecting (3) | | |||
| (persistent) | | | (persistent) | | |||
| | | | | | |||
'------------------' | '------------------' | |||
]]> | ]]></artwork> | |||
</artwork> | </figure> | |||
</figure> | <t><xref target="fig-statemachine" format="default"/> shows the associat | |||
</t> | ion state | |||
<t> | machine, which is the same for the server and for the peer. (For readabil | |||
<xref target="fig-statemachine"/> shows the association state machine, | ity, only the | |||
which is the same for the server and for the peer. (For readability, only the m | main state transitions are shown. The complete table of transitions can b | |||
ain state transitions are shown. The complete table of transitions can be found | e found in | |||
in <xref target="exchangeappendix"/>.) When the peer initiates the EAP-NOOB meth | <xref target="exchangeappendix" format="default"/>.) When the peer initia | |||
od, the server chooses the ensuing message exchange based on the combination of | tes the | |||
the server and peer states. The EAP server and peer are initially in the Unregis | EAP-NOOB method, the server chooses the ensuing message exchange based on | |||
tered state, in which no state information needs to be stored. Before a successf | the | |||
ul Completion Exchange, the server-peer association state is ephemeral in both t | combination of the server and peer states. The EAP server and peer are in | |||
he server and peer (ephemeral states 0..2), and a timeout or error may cause one | itially in | |||
or both endpoints to go back to the Unregistered state so that the Initial Exch | the Unregistered (0) state, in which no state information needs to be sto | |||
ange is repeated. After the Completion Exchange has resulted in EAP-Success, the | red. Before a | |||
association state becomes persistent (persistent states 3..4). Only user reset | successful Completion Exchange, the server-peer association state is ephe | |||
or memory failure can cause the return of the server or the peer from the persis | meral in both | |||
tent states to the ephemeral states and to the Initial Exchange. | the server and peer (ephemeral states 0..2), and a timeout or error may c | |||
</t> | ause one or | |||
<t> | both endpoints to go back to the Unregistered (0) state so that the Initi | |||
The server MUST NOT repeat a successful OOB Step with the same peer ex | al Exchange | |||
cept if the association with the peer is explicitly reset by the user or lost du | is | |||
e to failure of the persistent storage in the server. More specifically, once th | repeated. After the Completion Exchange has resulted in EAP-Success, the | |||
e association has entered the Registered state, the server MUST NOT delete the a | association | |||
ssociation or go back to the ephemeral states 0..2 without explicit user approva | state becomes persistent (persistent states 3..4). Only user reset or mem | |||
l. Similarly, the peer MUST NOT repeat the OOB Step unless the user explicitly d | ory failure | |||
eletes from the peer the association with the server or resets the peer to the U | can cause the return of the server or the peer from the persistent states | |||
nregistered state. The server and peer MAY implement user reset of the associati | to the | |||
on by deleting the state data from that endpoint. If an endpoint continues to st | ephemeral states and to the Initial Exchange.</t> | |||
ore data about the association after the user reset, its behavior MUST be equiva | <t>The server <bcp14>MUST NOT</bcp14> repeat a successful OOB Step with | |||
lent to having deleted the association data. | the same peer | |||
</t> | except if the association with the peer is explicitly reset by the user o | |||
<t> | r lost due to | |||
It can happen that the peer accidentally or through user reset loses i | failure of the persistent storage in the server. More specifically, once | |||
ts persistent state and reconnects to the server without a previously allocated | the | |||
peer identifier. In that case, the server MUST treat the peer as a new peer. The | association has entered the Registered (4) state, the server <bcp14>MUST | |||
server MAY use auxiliary information, such as the PeerInfo field received in th | NOT</bcp14> | |||
e Initial Exchange, to detect multiple associations with the same peer. However, | delete the association or go back to the ephemeral states 0..2 without ex | |||
it MUST NOT delete or merge redundant associations without user or application | plicit user | |||
approval because EAP-NOOB internally has no secure way of verifying that the two | approval. Similarly, the peer <bcp14>MUST NOT</bcp14> repeat the OOB Step | |||
peers are the same physical device. Similarly, the server might lose the associ | unless the | |||
ation state because of a memory failure or user reset. In that case, the only wa | user explicitly deletes the association with the server from the peer or | |||
y to recover is that the user also resets the peer. | resets the | |||
</t> | peer to the Unregistered (0) state. The server and peer <bcp14>MAY</bcp14 | |||
<t> | > implement | |||
A special feature of the EAP-NOOB method is that the server is not ass | user | |||
umed to have any a-priori knowledge of the peer. Therefore, the peer initially u | reset of the association by deleting the state data from that endpoint. I | |||
ses the generic identity string "noob@eap-noob.arpa" as its network access ident | f an endpoint | |||
ifier (NAI). The server then allocates a server-specific identifier to the peer. | continues to store data about the association after the user reset, its b | |||
The generic NAI serves two purposes: firstly, it tells the server that the peer | ehavior | |||
supports and expects the EAP-NOOB method and, secondly, it allows routing of th | <bcp14>MUST</bcp14> be equivalent to having deleted the association data. | |||
e EAP-NOOB sessions to a specific authentication server in an Authentication, Au | </t> | |||
thorization and Accounting (AAA) architecture. | <t>It can happen that the peer accidentally (or through user reset) lose | |||
</t> | s its | |||
<t> | persistent | |||
EAP-NOOB is an unusual EAP method in that the peer has to have multipl | state and reconnects to the server without a previously allocated peer id | |||
e EAP conversations with the server before it can receive EAP-Success. The reaso | entifier. In | |||
n is that, while EAP allows delays between the request-response pairs, e.g., for | that case, the server <bcp14>MUST</bcp14> treat the peer as a new peer. T | |||
repeated password entry, the user delays in OOB authentication can be much long | he server | |||
er than in password trials. Moreover, EAP-NOOB supports peers with no input capa | <bcp14>MAY</bcp14> use auxiliary information, such as the PeerInfo field | |||
bility in the user interface (e.g., LED light bulbs). Since users cannot initiat | received in | |||
e the protocol in these devices, the devices have to perform the Initial Exchang | the Initial Exchange, to detect multiple associations with the same peer. | |||
e opportunistically and hope for the OOB Step to take place within a timeout per | However, it | |||
iod (NoobTimeout), which is why the timeout needs to be several minutes rather t | <bcp14>MUST NOT</bcp14> delete or merge redundant associations without us | |||
han seconds. To support such high-latency OOB channels, the peer and server perf | er or | |||
orm the Initial Exchange in one EAP conversation, then allow time for the OOB me | application approval because EAP-NOOB internally has no secure way of ver | |||
ssage to be delivered, and later perform the Waiting and Completion Exchanges in | ifying that | |||
different EAP conversations. | the two peers are the same physical device. Similarly, the server might l | |||
</t> | ose 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.</t> | ||||
<t>A special feature of the EAP-NOOB method is that the server is not as | ||||
sumed to have | ||||
any a priori knowledge of the peer. Therefore, the peer initially uses th | ||||
e generic | ||||
identity string "noob@eap-noob.arpa" as its Network Access Identifier (NA | ||||
I). The | ||||
server then allocates a server-specific identifier to the peer. The gener | ||||
ic NAI serves | ||||
two purposes: firstly, it tells the server that the peer supports and exp | ||||
ects the | ||||
EAP-NOOB method; secondly, it allows routing of the EAP-NOOB sessions to | ||||
a | ||||
specific authentication server in an Authentication, Authorization, and A | ||||
ccounting | ||||
(AAA) architecture.</t> | ||||
<t>EAP-NOOB is an unusual EAP method in that the peer has to have multip | ||||
le EAP | ||||
conversations with the server before it can receive EAP-Success. The reas | ||||
on is that, | ||||
while EAP allows delays between the request-response pairs, e.g., for rep | ||||
eated | ||||
password entry, the user delays in OOB authentication can be much longer | ||||
than in | ||||
password trials. Moreover, EAP-NOOB supports peers with no input capabili | ||||
ty in the | ||||
user interface (e.g., LED light bulbs). Since users cannot initiate the p | ||||
rotocol in | ||||
these devices, the devices have to perform the Initial Exchange opportuni | ||||
stically 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 suppo | ||||
rt such | ||||
high-latency OOB channels, the peer and server perform the Initial Exchan | ||||
ge in one EAP | ||||
conversation, then allow time for the OOB message to be delivered, and la | ||||
ter perform | ||||
the Waiting Exchange and Completion Exchange in different EAP conversatio | ||||
ns.</t> | ||||
</section> | </section> | |||
<section anchor="protocol" numbered="true" toc="default"> | ||||
<section title="Protocol messages and sequences" anchor="protocol"> | <name>Protocol Messages and Sequences</name> | |||
<t> | <t>This section defines the EAP-NOOB exchanges, which correspond to EAP | |||
This section defines the EAP-NOOB exchanges, which correspond to EAP c | conversations. | |||
onversations. The exchanges start with a common handshake, which determines the | The exchanges start with a common handshake, which determines the type of | |||
type of the following exchange. The common handshake messages and the subsequent | the | |||
messages for each exchange type are listed in the diagrams below. The diagrams | following exchange. The common handshake messages and the subsequent mess | |||
also specify the data fields present in each message. Each exchange comprises mu | ages for each | |||
ltiple EAP request-response pairs and ends in either EAP-Failure, indicating tha | exchange type are listed in the diagrams below. The diagrams also specify | |||
t authentication is not (yet) successful, or in EAP-Success. | the data | |||
</t> | fields present in each message. Each exchange comprises multiple EAP requ | |||
est-response | ||||
<section title="Common handshake in all EAP-NOOB exchanges" anchor="comm | pairs and ends in either EAP-Failure, indicating that authentication is n | |||
onhandshake"> | ot (yet) | |||
<t> | successful, or in EAP-Success.</t> | |||
All EAP-NOOB exchanges start with common handshake messages. The han | <section anchor="commonhandshake" numbered="true" toc="default"> | |||
dshake begins with the identity request and response that are common to all EAP | <name>Common Handshake in All EAP-NOOB Exchanges</name> | |||
methods. Their purpose is to enable the AAA architecture to route the EAP conver | <t>All EAP-NOOB exchanges start with common handshake messages. The ha | |||
sation to the EAP server and to enable the EAP server to select the EAP method. | ndshake begins | |||
The handshake then continues with one EAP-NOOB request-response pair in which th | with the identity request and response that are common to all EAP metho | |||
e server discovers the peer identifier used in EAP-NOOB and the peer state. | ds. Their | |||
</t> | purpose is to enable the AAA architecture to route the EAP conversation | |||
<t> | to the EAP | |||
In more detail, each EAP-NOOB exchange begins with the authenticator | server and to enable the EAP server to select the EAP method. The hands | |||
sending an EAP-Request/Identity packet to the peer. From this point on, the EAP | hake then | |||
conversation occurs between the server and the peer, and the authenticator acts | continues with one EAP-NOOB request-response pair in which the server d | |||
as a pass-through device. The peer responds to the authenticator with an EAP-Re | iscovers the | |||
sponse/Identity packet, which contains the network access identifier (NAI). The | peer identifier used in EAP-NOOB and the peer state.</t> | |||
authenticator, acting as a pass-through device, forwards this response and the f | <t>In more detail, each EAP-NOOB exchange begins with the authenticato | |||
ollowing EAP conversation between the peer and the AAA architecture. The AAA arc | r sending an | |||
hitecture routes the conversation to a specific AAA server (called "EAP server" | EAP-Request/Identity packet to the peer. From this point on, the EAP co | |||
or simply "server" in this specification) based on the realm part of the NAI. Th | nversation | |||
e server selects the EAP-NOOB method based on the user part of the NAI, as defin | occurs between the server and the peer, and the authenticator acts as a | |||
ed in <xref target="nai"/>. | pass-through | |||
</t> | device. The peer responds to the authenticator with an EAP-Response/Ide | |||
<t> | ntity packet, | |||
After receiving the EAP-Response/Identity message, the server sends | which contains the Network Access Identifier (NAI). The authenticator, | |||
the first EAP-NOOB request (Type=1) to the peer, which responds with the peer id | acting as a | |||
entifier (PeerId) and state (PeerState) in the range 0..3. However, the peer SHO | pass-through device, forwards this response and the following EAP conve | |||
ULD omit the PeerId from the response (Type=1) when PeerState=0. The server then | rsation | |||
chooses the EAP-NOOB exchange, i.e., the ensuing message sequence, as explained | between the peer and the AAA architecture. The AAA architecture routes | |||
below. The peer recognizes the exchange based on the message type field (Type) | the | |||
of the next EAP-NOOB request received from the server. | conversation to a specific AAA server (called "EAP server" or simply "s | |||
</t> | erver" in | |||
<t> | this specification) based on the realm part of the NAI. The server sele | |||
The server MUST determine the exchange type based on the combination | cts the | |||
of the peer and server states as follows (also summarized in <xref target="tabl | EAP-NOOB method based on the user part of the NAI, as defined in <xref | |||
e-exchanges"/>). If either the peer or server is in the Unregistered (0) state a | target="nai" | |||
nd the other is in one of the ephemeral states (0..2), the server chooses the In | format="default"/>.</t> | |||
itial Exchange. If one of the peer or server is in the OOB Received (2) state an | <t>After receiving the EAP-Response/Identity message, the server sends | |||
d the other is either in the Waiting for OOB (1) or OOB Received (2) state, the | the first | |||
OOB Step has taken place and the server chooses the Completion Exchange. If both | EAP-NOOB request (Type=1) to the peer, which responds with the peer ide | |||
the server and peer are in the Waiting for OOB (1) state, the server chooses th | ntifier | |||
e Waiting Exchange. If the peer is in the Reconnecting (3) state and the server | (PeerId) and state (PeerState) in the range 0..3. However, the peer | |||
is in the Registered (4) or Reconnecting (3) state, the server chooses the Recon | <bcp14>SHOULD</bcp14> omit the PeerId from the response (Type=1) when P | |||
nect Exchange. All other state combinations are error situations where user acti | eerState=0. | |||
on is required, and the server SHOULD indicate such errors to the peer with the | The server then chooses the EAP-NOOB exchange, i.e., the ensuing messag | |||
error code 2002 (see <xref target="statemismatch"/>). Note also that the peer MU | e sequence, | |||
ST NOT initiate EAP-NOOB when the peer is in the Registered (4) state. | as explained below. The peer recognizes the exchange based on the messa | |||
</t> | ge type field | |||
<t> | (Type) of the next EAP-NOOB request received from the server.</t> | |||
<figure anchor="fig-commonhandshake" title="Common handshake in all | <t>The server <bcp14>MUST</bcp14> determine the exchange type based on | |||
EAP-NOOB exchanges"> | the | |||
<artwork align="center"> | combination of the peer and server states as follows (also summarized i | |||
<![CDATA[ | n <xref | |||
target="tab-exchanges" format="default"/>). If either the peer or serve | ||||
r 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) o | ||||
r 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 R | ||||
econnecting | ||||
(3) state and the server is in the Registered (4) or Reconnecting (3) s | ||||
tate, the | ||||
server chooses the Reconnect Exchange. All other state combinations are | ||||
error | ||||
situations where user action is required, and the server <bcp14>SHOULD< | ||||
/bcp14> | ||||
indicate such errors to the peer with the error code 2002 (see <xref | ||||
target="statemismatch" format="default"/>). Note also that the peer <bc | ||||
p14>MUST | ||||
NOT</bcp14> initiate EAP-NOOB when the peer is in the Registered (4) st | ||||
ate.</t> | ||||
<figure anchor="fig-commonhandshake"> | ||||
<name>Common Handshake in All EAP-NOOB Exchanges</name> | ||||
<artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
EAP Peer Authenticator EAP Server | EAP Peer Authenticator EAP Server | |||
| | | | | | | | |||
|<----------- EAP-Request/Identity -| | | |<----------- EAP-Request/Identity -| | | |||
| | | | | | |||
| | | | | | |||
|------------ EAP-Response/Identity -------------->| | |------------ EAP-Response/Identity -------------->| | |||
| (NAI=noob@eap-noob.arpa) | | | (NAI=noob@eap-noob.arpa) | | |||
| | | | | | |||
| | | | | | |||
|<----------- EAP-Request/EAP-NOOB ----------------| | |<----------- EAP-Request/EAP-NOOB ----------------| | |||
| (Type=1) | | | (Type=1) | | |||
| | | | | | |||
| | | | | | |||
|------------ EAP-Response/EAP-NOOB -------------->| | |------------ EAP-Response/EAP-NOOB -------------->| | |||
| (Type=1,[PeerId],PeerState=1) | | | (Type=1,[PeerId],PeerState=1) | | |||
| | | | | | |||
| continuing with exchange-specific messages... | | | continuing with exchange-specific messages... | | |||
]]> | ]]></artwork> | |||
</artwork> | </figure> | |||
</figure> | ||||
</t> | ||||
</section> | </section> | |||
<section anchor="initialexchange" numbered="true" toc="default"> | ||||
<section title="Initial Exchange" anchor="initialexchange"> | <name>Initial Exchange</name> | |||
<t> | <t>The Initial Exchange comprises the common handshake and two further | |||
The Initial Exchange comprises the common handshake and two further | EAP-NOOB | |||
EAP-NOOB request-response pairs, one for version, cryptosuite and parameter nego | request-response pairs: one for version, cryptosuite, and parameter neg | |||
tiation and the other for the ECDHE key exchange. The first EAP-NOOB request (Ty | otiation and | |||
pe=2) from the server contains a newly allocated PeerId for the peer and an opti | the other for the ECDHE key exchange. The first EAP-NOOB request (Type= | |||
onal NewNAI for assigning a new NAI to the peer. The server allocates a new Peer | 2) from the | |||
Id in the Initial Exchange regardless of any old PeerId received in the previous | server contains a newly allocated PeerId for the peer and an optional N | |||
response (Type=1). The server also sends in the request a list of the protocol | ewNAI for | |||
versions (Vers) and cryptosuites (Cryptosuites) it supports, an indicator of the | assigning a new NAI to the peer. The server allocates a new PeerId in t | |||
OOB channel directions it supports (Dirs), and a ServerInfo object. The peer ch | he Initial | |||
ooses one of the versions and cryptosuites. The peer sends a response (Type=2) w | Exchange regardless of any old PeerId received in the previous response | |||
ith the selected protocol version (Verp), the received PeerId, the selected cryp | (Type=1). | |||
tosuite (Cryptosuitep), an indicator of the OOB channel direction(s) selected by | The server also sends in the request a list of the protocol versions (V | |||
the peer (Dirp), and a PeerInfo object. In the second EAP-NOOB request and resp | ers) and | |||
onse (Type=3), the server and peer exchange the public components of their ECDHE | cryptosuites (Cryptosuites) it supports, an indicator of the OOB channe | |||
keys and nonces (PKs,Ns,PKp,Np). The ECDHE keys MUST be based on the negotiated | l directions | |||
cryptosuite, i.e., Cryptosuitep. The Initial Exchange always ends with EAP-Fail | it supports (Dirs), and a ServerInfo object. The peer chooses one of th | |||
ure from the server because the authentication cannot yet be completed. | e versions | |||
</t> | and cryptosuites. The peer sends a response (Type=2) with the selected | |||
<t> | protocol | |||
<figure anchor="fig-initial" title="Initial Exchange"> | version (Verp), the received PeerId, the selected cryptosuite (Cryptosu | |||
<artwork align="center"> | itep), an | |||
<![CDATA[ | 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 <bcp14>MUST</bcp14> 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.</t> | ||||
<figure anchor="fig-initial"> | ||||
<name>Initial Exchange</name> | ||||
<artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
EAP Peer EAP Server | EAP Peer EAP Server | |||
| ...continuing from common handshake | | | ...continuing from common handshake | | |||
| | | | | | |||
|<----------- EAP-Request/EAP-NOOB ----------------| | |<----------- EAP-Request/EAP-NOOB ----------------| | |||
| (Type=2,Vers,PeerId,[NewNAI], | | | (Type=2,Vers,PeerId,[NewNAI], | | |||
| Cryptosuites,Dirs,ServerInfo) | | | Cryptosuites,Dirs,ServerInfo) | | |||
| | | | | | |||
| | | | | | |||
|------------ EAP-Response/EAP-NOOB -------------->| | |------------ EAP-Response/EAP-NOOB -------------->| | |||
| (Type=2,Verp,PeerId,Cryptosuitep, | | | (Type=2,Verp,PeerId,Cryptosuitep, | | |||
skipping to change at line 271 ¶ | skipping to change at line 402 ¶ | |||
|<----------- EAP-Request/EAP-NOOB ----------------| | |<----------- EAP-Request/EAP-NOOB ----------------| | |||
| (Type=3,PeerId,PKs,Ns,[SleepTime]) | | | (Type=3,PeerId,PKs,Ns,[SleepTime]) | | |||
| | | | | | |||
| | | | | | |||
|------------ EAP-Response/EAP-NOOB -------------->| | |------------ EAP-Response/EAP-NOOB -------------->| | |||
| (Type=3,PeerId,PKp,Np) | | | (Type=3,PeerId,PKp,Np) | | |||
| | | | | | |||
| | | | | | |||
|<----------- EAP-Failure -------------------------| | |<----------- EAP-Failure -------------------------| | |||
| | | | | | |||
]]> | ]]></artwork> | |||
</artwork> | </figure> | |||
</figure> | <t>At the conclusion of the Initial Exchange, both the server and the | |||
</t> | peer move to | |||
<t> | the Waiting for OOB (1) state.</t> | |||
At the conclusion of the Initial Exchange, both the server and the p | ||||
eer move to the Waiting for OOB (1) state. | ||||
</t> | ||||
</section> | </section> | |||
<section anchor="oobstep" numbered="true" toc="default"> | ||||
<section title="OOB Step" anchor="oobstep"> | <name>OOB Step</name> | |||
<t> | <t>The OOB Step, labeled as OOB Output and OOB Input in <xref | |||
The OOB Step, labeled as OOB Output and OOB Input in <xref target="f | target="fig-statemachine" format="default"/>, takes place after the Ini | |||
ig-statemachine"/>, takes place after the Initial Exchange. Depending on the neg | tial | |||
otiated OOB channel direction, the peer or the server outputs the OOB message as | Exchange. Depending on the negotiated OOB channel direction, the peer o | |||
shown in <xref target="fig-oob1"/> or <xref target="fig-oob2"/>, respectively. | r the server | |||
The data fields are the PeerId, the secret nonce Noob, and the cryptographic fin | outputs the OOB message as shown in Figures <xref target="fig-oob1" | |||
gerprint Hoob. The contents of the data fields are defined in <xref target="mess | format="counter"/> or | |||
agedatafields"/>. The OOB message is delivered to the other endpoint via a user- | <xref target="fig-oob2" format="counter"/>, respectively. The data fiel | |||
assisted OOB channel. | ds are the | |||
</t> | PeerId, the secret nonce Noob, and the cryptographic fingerprint Hoob. | |||
<t> | The contents | |||
For brevity, we will use the terms OOB sender and OOB receiver in ad | of the data fields are defined in <xref target="messagedatafields" | |||
dition to the already familiar EAP server and EAP peer. If the OOB message is se | format="default"/>. The OOB message is delivered to the other endpoint | |||
nt in the server-to-peer direction, the OOB sender is the server and the OOB rec | via a | |||
eiver is the peer. On the other hand, if the OOB message is sent in the peer-to- | user-assisted OOB channel.</t> | |||
server direction, the OOB sender is the peer and the OOB receiver is the server. | <t>For brevity, we will use the terms OOB sender and OOB receiver in a | |||
</t> | ddition to the | |||
<t> | already familiar EAP server and EAP peer. If the OOB message is sent in | |||
<figure anchor="fig-oob1" title="OOB Step, from peer to EAP server"> | the | |||
<artwork align="center"> | server-to-peer direction, the OOB sender is the server and the OOB rece | |||
<![CDATA[ | iver is the | |||
peer. On the other hand, if the OOB message is sent in the peer-to-serv | ||||
er direction, | ||||
the OOB sender is the peer and the OOB receiver is the server.</t> | ||||
<figure anchor="fig-oob1"> | ||||
<name>OOB Step, from Peer to EAP Server</name> | ||||
<artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
EAP Peer EAP Server | EAP Peer EAP Server | |||
| | | | | | |||
|=================OOB=============================>| | |=================OOB=============================>| | |||
| (PeerId,Noob,Hoob) | | | (PeerId,Noob,Hoob) | | |||
| | | | | | |||
]]> | ]]></artwork> | |||
</artwork> | </figure> | |||
</figure> | ||||
<figure anchor="fig-oob2" title="OOB Step, from EAP server to peer"> | <figure anchor="fig-oob2"> | |||
<artwork align="center"> | <name>OOB Step, from EAP Server to Peer</name> | |||
<![CDATA[ | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
EAP Peer EAP Server | EAP Peer EAP Server | |||
| | | | | | |||
|<================OOB==============================| | |<================OOB==============================| | |||
| (PeerId,Noob,Hoob) | | | (PeerId,Noob,Hoob) | | |||
| | | | | | |||
]]> | ]]></artwork> | |||
</artwork> | </figure> | |||
</figure> | <t>The OOB receiver <bcp14>MUST</bcp14> compare the received value of | |||
</t> | the | |||
<t> | fingerprint Hoob (see <xref target="messagedatafields" format="default" | |||
The OOB receiver MUST compare the received value of the fingerprint | />) with a | |||
Hoob (see <xref target="messagedatafields"/>) with a value that it computed loca | value that it computed locally for the PeerID received. This integrity | |||
lly for the PeerID received. This integrity check ensures that the endpoints agr | check ensures | |||
ee on contents of the Initial Exchange. If the values are equal, the receiver mo | that the endpoints agree on contents of the Initial Exchange. If the va | |||
ves to the OOB Received (2) state. Otherwise, the receiver MUST reject the OOB m | lues are | |||
essage. For usability reasons, the OOB receiver SHOULD indicate the acceptance o | equal, the receiver moves to the OOB Received (2) state. Otherwise, the | |||
r rejection of the OOB message to the user. The receiver SHOULD reject invalid O | receiver | |||
OB messages without changing its state in the association state machine, until a | <bcp14>MUST</bcp14> reject the OOB message. For usability reasons, the | |||
n application-specific number of invalid messages (OobRetries) has been reached, | OOB receiver | |||
after which the receiver SHOULD consider it an error and go back to the Unregis | <bcp14>SHOULD</bcp14> indicate the acceptance or rejection of the OOB m | |||
tered (0) state. | essage to the | |||
</t> | user. The receiver <bcp14>SHOULD</bcp14> reject invalid OOB messages wi | |||
<t> | thout | |||
The server or peer MAY send multiple OOB messages with different Noo | changing its state in the association state machine until an applicatio | |||
b values while in the Waiting for OOB (1) state. The OOB sender SHOULD remember | n-specific | |||
the Noob values until they expire and accept any one of them in the following Co | number of invalid messages (OobRetries) has been reached; after which, | |||
mpletion Exchange. The Noob values sent by the server expire after an applicatio | the receiver | |||
n-dependent timeout (NoobTimeout), and the server MUST NOT accept Noob values ol | <bcp14>SHOULD</bcp14> consider it an error and go back to the Unregiste | |||
der than that in the Completion Exchange. The RECOMMENDED value for NoobTimeout | red (0) | |||
is 3600 seconds if there are no application-specific reasons for making it short | state.</t> | |||
er or longer. The Noob values sent by the peer expire as defined in <xref target | <t>The server or peer <bcp14>MAY</bcp14> send multiple OOB messages wi | |||
="waitingexchange"/>. | th different | |||
</t> | Noob values while in the Waiting for OOB (1) state. The OOB sender | |||
<t> | <bcp14>SHOULD</bcp14> remember the Noob values until they expire and ac | |||
The OOB receiver does not accept further OOB messages after it has a | cept any one | |||
ccepted one and moved to the OOB Received (2) state. However, the receiver MAY b | of them in the following Completion Exchange. The Noob values sent by t | |||
uffer redundant OOB messages in case an OOB message expiry or similar error dete | he server | |||
cted in the Completion Exchange causes it to return to the Waiting for OOB (1) s | expire after an application-dependent timeout (NoobTimeout), and the se | |||
tate. It is RECOMMENDED that the OOB receiver notifies the user about redundant | rver | |||
OOB messages, but it MAY instead discard them silently. | <bcp14>MUST NOT</bcp14> accept Noob values older than that in the Compl | |||
</t> | etion | |||
<t> | Exchange. The <bcp14>RECOMMENDED</bcp14> value for NoobTimeout is 3600 | |||
The sender will typically generate a new Noob, and therefore a new O | seconds if | |||
OB message, at constant time intervals (NoobInterval). The RECOMMENDED interval | there are no application-specific reasons for making it shorter or long | |||
is NoobInterval = NoobTimeout / 2, in which case the receiver of the OOB will at | er. The Noob | |||
any given time accept either of the two latest Noob values. However, the timing | values sent by the peer expire, as defined in <xref target="waitingexch | |||
of the Noob generation may also be based on user interaction or on implementati | ange" | |||
on considerations. | format="default"/>.</t> | |||
</t> | <t>The OOB receiver does not accept further OOB messages after it has | |||
<t> | accepted one | |||
Even though not recommended (see <xref target="datafields"/>), this | and moved to the OOB Received (2) state. However, the receiver <bcp14>M | |||
specification allows both directions to be negotiated (Dirp=3) for the OOB chann | AY</bcp14> | |||
el. In that case, both sides SHOULD output the OOB message, and it is up to the | buffer redundant OOB messages in case an OOB message expiry or similar | |||
user to deliver at least one of them. | error | |||
</t> | detected in the Completion Exchange causes it to return to the Waiting | |||
<t> | for OOB (1) | |||
The details of the OOB channel implementation including the message | state. It is <bcp14>RECOMMENDED</bcp14> that the OOB receiver notifies | |||
encoding are defined by the application. <xref target="urloob"/> gives an exampl | the user | |||
e of how the OOB message can be encoded as a URL that may be embedded in a dynam | about redundant OOB messages, but it <bcp14>MAY</bcp14> instead discard | |||
ic QR code or NFC tag. | them | |||
</t> | silently.</t> | |||
<t>The sender will typically generate a new Noob, and therefore a new | ||||
OOB message, | ||||
at constant time intervals (NoobInterval). The <bcp14>RECOMMENDED</bcp1 | ||||
4> interval | ||||
is</t> | ||||
<t indent="3">NoobInterval = NoobTimeout / 2</t> | ||||
<t>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.</t> | ||||
<t>Even though not recommended (see <xref target="datafields" format=" | ||||
default"/>), | ||||
this specification allows both directions to be negotiated (Dirp=3) for | ||||
the OOB | ||||
channel. In that case, both sides <bcp14>SHOULD</bcp14> output the OOB | ||||
message, and | ||||
it is up to the user to deliver at least one of them.</t> | ||||
<t>The details of the OOB channel implementation including the message | ||||
encoding are | ||||
defined by the application. <xref target="urloob" format="default"/> gi | ||||
ves an | ||||
example of how the OOB message can be encoded as a URL that may be embe | ||||
dded in a | ||||
dynamic QR code or NFC (Near Field Communication) tag.</t> | ||||
</section> | </section> | |||
<section anchor="completionexchange" numbered="true" toc="default"> | ||||
<section title="Completion Exchange" anchor="completionexchange"> | <name>Completion Exchange</name> | |||
<t> | <t>After the Initial Exchange, if the OOB channel directions selected | |||
After the Initial Exchange, if the OOB channel directions selected b | by the peer | |||
y the peer include the peer-to-server direction, the peer SHOULD initiate the EA | include the peer-to-server direction, the peer <bcp14>SHOULD</bcp14> in | |||
P-NOOB method again after an applications-specific waiting time in order to prob | itiate the | |||
e for completion of the OOB Step. If the OOB channel directions selected by the | EAP-NOOB method again after an applications-specific waiting time in or | |||
peer include the server-to-peer direction and the peer receives the OOB message, | der to probe | |||
it SHOULD initiate the EAP-NOOB method immediately. Depending on the combinatio | for completion of the OOB Step. If the OOB channel directions selected | |||
n of the peer and server states, the server continues with the Completion Exchan | by the peer | |||
ge or Waiting Exchange (see <xref target="commonhandshake"/> on how the server m | include the server-to-peer direction and the peer receives the OOB mess | |||
akes this decision). | age, it | |||
</t> | <bcp14>SHOULD</bcp14> initiate the EAP-NOOB method immediately. Dependi | |||
<t> | ng on the | |||
The Completion Exchange comprises the common handshake and one or tw | combination of the peer and server states, the server continues with th | |||
o further EAP-NOOB request-response pairs. If the peer is in the Waiting for OOB | e Completion | |||
(1) state, the OOB message has been sent in the peer-to-server direction. In th | Exchange or Waiting Exchange (see <xref target="commonhandshake" format | |||
at case, only one request-response pair (Type=6) takes place. In the request, th | ="default"/> | |||
e server sends the NoobId value (see <xref target="messagedatafields"/>), which | on how the server makes this decision).</t> | |||
the peer uses to identify the exact OOB message received by the server. On the o | <t>The Completion Exchange comprises the common handshake and one or t | |||
ther hand, if the peer is in the OOB Received (2) state, the direction of the OO | wo further | |||
B message is from server to peer. In this case, two request-response pairs (Type | EAP-NOOB request-response pairs. If the peer is in the Waiting for OOB | |||
=5 and Type=6) are needed. The purpose of the first request-response pair (Type= | (1) state, | |||
5) is that it enables the server to discover NoobId, which identifies the exact | the OOB message has been sent in the peer-to-server direction. In that | |||
OOB message received by the peer. The server returns the same NoobId to the peer | case, only | |||
in the latter request. | one request-response pair (Type=6) takes place. In the request, the ser | |||
</t> | ver sends the | |||
<t> | NoobId value (see <xref target="messagedatafields" format="default"/>), | |||
In the last request-response pair (Type=6) of the Completion Exchang | which the | |||
e, the server and peer exchange message authentication codes. Both sides MUST co | peer uses to identify the exact OOB message received by the server. On | |||
mpute the keys Kms and Kmp as defined in <xref target="keyderivation"/> and the | the other | |||
message authentication codes MACs and MACp as defined in <xref target="messageda | hand, if the peer is in the OOB Received (2) state, the direction of th | |||
tafields"/>. Both sides MUST compare the received message authentication code wi | e OOB message | |||
th a locally computed value. If the peer finds that it has received the correct | is from server to peer. In this case, two request-response pairs (Type= | |||
value of MACs and the server finds that it has received the correct value of MAC | 5 and Type=6) | |||
p, the Completion Exchange ends in EAP-Success. Otherwise, the endpoint where th | are needed. The purpose of the first request-response pair (Type=5) is | |||
e comparison fails indicates this with an error message (error code 4001, see <x | that it | |||
ref target="invalidmessages"/>) and the Completion Exchange ends in EAP-Failure. | enables the server to discover NoobId, which identifies the exact OOB m | |||
</t> | essage | |||
<t> | received by the peer. The server returns the same NoobId to the peer in | |||
After successful Completion Exchange, both the server and the peer m | the latter | |||
ove to the Registered (4) state. They also derive the output keying material and | request.</t> | |||
store the persistent EAP-NOOB association state as defined in <xref target="fas | <t>In the last request-response pair (Type=6) of the Completion Exchan | |||
treconnect"/> and <xref target="keyderivation"/>. | ge, the server | |||
</t> | and peer exchange message authentication codes. Both sides <bcp14>MUST< | |||
<t> | /bcp14> | |||
It is possible that the OOB message expires before it is received. I | compute the keys Kms and Kmp, as defined in <xref target="keyderivation | |||
n 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 | format="default"/>, and the message authentication codes MACs and MACp, | |||
not recognize the NoobId is if the received OOB message was spoofed and containe | as defined | |||
d an attacker-generated Noob value. The recipient of an unrecognized NoobId indi | in <xref target="messagedatafields" format="default"/>. Both sides | |||
cates this with an error message (error code 2003, see <xref target="invalidmess | <bcp14>MUST</bcp14> | |||
ages"/>), and the Completion Exchange ends in EAP-Failure. The recipient of the | compare the received message authentication code with a locally compute | |||
error message 2003 moves back to the Waiting for OOB (1) state. This state trans | d value. If | |||
ition is called OOB Reject in <xref target="fig-statemachine"/> (even though it | the peer finds that it has received the correct value of MACs and the s | |||
really is a specific type of failed Completion Exchange). The sender of the erro | erver finds | |||
r message, on the other hand, stays in its previous state. | that it has received the correct value of MACp, the Completion Exchange | |||
</t> | ends in | |||
<t> | EAP-Success. | |||
Although it is not expected to occur in practice, poor user interfac | Otherwise, the endpoint where the comparison fails indicates this with | |||
e design could lead to two OOB messages delivered simultaneously, one from the p | an error message (error code 4001, see <xref target="cryptofailure" | |||
eer to the server and the other from the server to the peer. The server detects | format="default"/>), and the Completion Exchange ends in EAP-Failure.</ | |||
this event in the beginning of the Completion Exchange by observing that both th | t> | |||
e server and peer are in the OOB Received state (2). In that case, as a tiebreak | <t>After the successful Completion Exchange, both the server and the p | |||
er, the server MUST behave as if only the server-to-peer message had been delive | eer move to | |||
red. | the | |||
</t> | Registered (4) state. They also derive the output keying material and s | |||
<t> | tore the | |||
<figure anchor="fig-completion" title="Completion Exchange"> | persistent EAP-NOOB association state, as defined in Sections <xref | |||
<artwork align="center"> | target="fastreconnect" | |||
<![CDATA[ | format="counter"/> and <xref target="keyderivation" format="counter"/>. | |||
</t> | ||||
<t>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 r | ||||
eceives in | ||||
the Completion Exchange. Another reason why the OOB sender might not re | ||||
cognize 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 <xref target="invalidm | ||||
essages" | ||||
format="default"/>), and the Completion Exchange ends in EAP-Failure. T | ||||
he recipient | ||||
of the error message 2003 moves back to the Waiting for OOB (1) state. | ||||
This state | ||||
transition is called OOB Reject in <xref target="fig-statemachine" | ||||
format="default"/> (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.</t> | ||||
<t>Although it is not expected to occur in practice, poor user interfa | ||||
ce design | ||||
could lead to two OOB messages delivered simultaneously, one from the p | ||||
eer to the | ||||
server and the other from the server to the peer. The server detects th | ||||
is event in | ||||
the beginning of the Completion Exchange by observing that both the ser | ||||
ver and peer | ||||
are in the OOB Received (2) state. In that case, as a tiebreaker, the s | ||||
erver | ||||
<bcp14>MUST</bcp14> behave as if only the server-to-peer message had be | ||||
en | ||||
delivered.</t> | ||||
<figure anchor="fig-completion"> | ||||
<name>Completion Exchange</name> | ||||
<artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
EAP Peer EAP Server | EAP Peer EAP Server | |||
| ...continuing from common handshake | | | ...continuing from common handshake | | |||
| | | | | | |||
|<----------- [ EAP-Request/EAP-NOOB ] ------------| | |<----------- [ EAP-Request/EAP-NOOB ] ------------| | |||
| (Type=5,PeerId) | | | (Type=5,PeerId) | | |||
| | | | | | |||
| | | | | | |||
|------------ [ EAP-Response/EAP-NOOB ] ---------->| | |------------ [ EAP-Response/EAP-NOOB ] ---------->| | |||
| (Type=5,PeerId,NoobId) | | | (Type=5,PeerId,NoobId) | | |||
| | | | | | |||
skipping to change at line 375 ¶ | skipping to change at line 576 ¶ | |||
|<----------- EAP-Request/EAP-NOOB ----------------| | |<----------- EAP-Request/EAP-NOOB ----------------| | |||
| (Type=6,PeerId,NoobId,MACs) | | | (Type=6,PeerId,NoobId,MACs) | | |||
| | | | | | |||
| | | | | | |||
|------------ EAP-Response/EAP-NOOB -------------->| | |------------ EAP-Response/EAP-NOOB -------------->| | |||
| (Type=6,PeerId,MACp) | | | (Type=6,PeerId,MACp) | | |||
| | | | | | |||
| | | | | | |||
|<----------- EAP-Success -------------------------| | |<----------- EAP-Success -------------------------| | |||
| | | | | | |||
]]> | ]]></artwork> | |||
</artwork> | </figure> | |||
</figure> | ||||
</t> | ||||
</section> | </section> | |||
<section anchor="waitingexchange" numbered="true" toc="default"> | ||||
<section title="Waiting Exchange" anchor="waitingexchange"> | <name>Waiting Exchange</name> | |||
<t> | <t>As explained in <xref target="completionexchange" format="default"/ | |||
As explained in <xref target="completionexchange"/>, the peer SHOULD | >, the peer | |||
probe the server for completion of the OOB Step. When the combination of the pe | <bcp14>SHOULD</bcp14> probe the server for completion of the OOB Step. | |||
er and server states indicates that the OOB message has not yet been delivered, | When the | |||
the server chooses the Waiting Exchange (see <xref target="commonhandshake"/> on | combination of the peer and server states indicates that the OOB messag | |||
how the server makes this decision). The Waiting Exchange comprises the common | e has not yet | |||
handshake and one further request-response pair, and it always ends in EAP-Failu | been delivered, the server chooses the Waiting Exchange (see <xref | |||
re. | target="commonhandshake" format="default"/> on how the server makes thi | |||
</t> | s decision). | |||
<t> | The Waiting Exchange comprises the common handshake and one further req | |||
In order to limit the rate at which peers probe the server, the serv | uest-response | |||
er MAY send to the peer either in the Initial Exchange or in the Waiting Exchang | pair, and it always ends in EAP-Failure.</t> | |||
e a minimum time to wait before probing the server again. A peer that has not re | <t>In order to limit the rate at which peers probe the server, the ser | |||
ceived an OOB message SHOULD wait at least the server-specified minimum waiting | ver | |||
time in seconds (SleepTime) before initiating EAP again with the same server. Th | <bcp14>MAY</bcp14> send to the peer either in the Initial Exchange or i | |||
e peer uses the latest SleepTime value that it has received in or after the Init | n the Waiting | |||
ial Exchange. If the server has not sent any SleepTime value, the peer MUST wait | Exchange a minimum time to wait before probing the server again. A peer | |||
for an application-specified minimum time (SleepTimeDefault). | that has not | |||
</t> | received an OOB message <bcp14>SHOULD</bcp14> wait at least the server- | |||
<t> | specified | |||
After the Waiting Exchange, the peer MUST discard (from its local ep | minimum waiting time in seconds (SleepTime) before initiating EAP again | |||
hemeral storage) Noob values that it has sent to the server in OOB messages that | with the | |||
are older than the application-defined timeout NoobTimeout (see <xref target="o | same server. The peer uses the latest SleepTime value that it has recei | |||
obstep"/>). The peer SHOULD discard such expired Noob values even if the probing | ved in or | |||
failed, e.g., because of failure to connect to the EAP server or incorrect mess | after the Initial Exchange. If the server has not sent any SleepTime va | |||
age authentication code. The timeout of peer-generated Noob values is defined li | lue, the peer | |||
ke this in order to allow the peer to probe the server once after it has waited | <bcp14>MUST</bcp14> wait for an application-specified minimum time | |||
for the server-specified SleepTime. | (SleepTimeDefault).</t> | |||
</t> | <t>After the Waiting Exchange, the peer <bcp14>MUST</bcp14> discard (f | |||
<t> | rom its local | |||
If the server and peer have negotiated to use only the server-to-pee | ephemeral storage) Noob values that it has sent to the server in OOB me | |||
r direction for the OOB channel (Dirp=2), the peer SHOULD nevertheless probe the | ssages that | |||
server. The purpose of this is to keep the server informed about the peers that | are older than the application-defined timeout NoobTimeout (see <xref | |||
are still waiting for OOB messages. The server MAY set SleepTime to a high numb | target="oobstep" format="default"/>). The peer <bcp14>SHOULD</bcp14> di | |||
er (3600) to prevent the peer from probing the server frequently. | scard such | |||
</t> | expired Noob values even if the probing failed because of, e.g., failur | |||
<t> | e to connect | |||
<figure anchor="fig-waiting" title="Waiting Exchange"> | to the EAP server or an incorrect message authentication code. The time | |||
<artwork align="center"> | out of | |||
<![CDATA[ | peer-generated Noob values is defined like this in order to allow the p | |||
eer to probe | ||||
the server once after it has waited for the server-specified SleepTime. | ||||
</t> | ||||
<t>If the server and peer have negotiated to use only the server-to-pe | ||||
er direction | ||||
for the OOB channel (Dirp=2), the peer <bcp14>SHOULD</bcp14> neverthele | ||||
ss probe the | ||||
server. The purpose of this is to keep the server informed about the pe | ||||
ers that are | ||||
still waiting for OOB messages. The server <bcp14>MAY</bcp14> set Sleep | ||||
Time to a | ||||
high number (e.g., 3600) to prevent the peer from probing the server fr | ||||
equently.</t> | ||||
<figure anchor="fig-waiting"> | ||||
<name>Waiting Exchange</name> | ||||
<artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
EAP Peer EAP Server | EAP Peer EAP Server | |||
| ...continuing from common handshake | | | ...continuing from common handshake | | |||
| | | | | | |||
|<----------- EAP-Request/EAP-NOOB ----------------| | |<----------- EAP-Request/EAP-NOOB ----------------| | |||
| (Type=4,PeerId,[SleepTime]) | | | (Type=4,PeerId,[SleepTime]) | | |||
| | | | | | |||
| | | | | | |||
|------------ EAP-Response/EAP-NOOB -------------->| | |------------ EAP-Response/EAP-NOOB -------------->| | |||
| (Type=4,PeerId) | | | (Type=4,PeerId) | | |||
| | | | | | |||
| | | | | | |||
|<----------- EAP-Failure -------------------------| | |<----------- EAP-Failure -------------------------| | |||
| | | | | | |||
]]> | ]]></artwork> | |||
</artwork> | </figure> | |||
</figure> | ||||
</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="datafields" numbered="true" toc="default"> | ||||
<name>Protocol Data Fields</name> | ||||
<t>This section defines the various identifiers and data fields used in | ||||
the EAP-NOOB | ||||
method.</t> | ||||
<section anchor="nai" numbered="true" toc="default"> | ||||
<name>Peer Identifier and NAI</name> | ||||
<t>The server allocates a new peer identifier (PeerId) for the peer in | ||||
the Initial | ||||
Exchange. The peer identifier <bcp14>MUST</bcp14> follow the syntax of | ||||
the | ||||
utf8-username specified in <xref target="RFC7542" format="default"/>. T | ||||
he server | ||||
<bcp14>MUST</bcp14> 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 se | ||||
nds them to | ||||
the peer in the Initial Exchange. One way to generate the identifiers i | ||||
s to choose a | ||||
random 16-byte identifier and to base64url encode it without padding <x | ||||
ref | ||||
target="RFC4648" format="default"/> into a 22-character ASCII string. A | ||||
nother way to | ||||
generate the identifiers is to choose a random 22-character alphanumeri | ||||
c ASCII | ||||
string. It is <bcp14>RECOMMENDED</bcp14> to not use identifiers longer | ||||
than this | ||||
because they result in longer OOB messages.</t> | ||||
<t>The peer uses the allocated PeerId to identify itself to the server | ||||
in the | ||||
subsequent exchanges. The peer <bcp14>MUST</bcp14> copy the PeerId byte | ||||
by byte from | ||||
the message where it was allocated, and the server <bcp14>MUST</bcp14> | ||||
perform a | ||||
byte-by-byte comparison between the received and the previously allocat | ||||
ed PeerID. | ||||
The peer sets the PeerId value in response type 1 as follows. As stated | ||||
in <xref | ||||
target="commonhandshake" format="default"/>, when the peer is in the Un | ||||
registered | ||||
(0) state, it <bcp14>SHOULD</bcp14> omit the PeerId from response type | ||||
1. When the | ||||
peer is in one of the states 1..2, it <bcp14>MUST</bcp14> use the PeerI | ||||
d that the | ||||
server assigned to it in the latest Initial Exchange. When the peer is | ||||
in one of the | ||||
persistent states 3..4, it <bcp14>MUST</bcp14> use the PeerId from its | ||||
persistent | ||||
EAP-NOOB association. (The PeerId is written to the association when th | ||||
e peer moves | ||||
to the Registered (4) state after a Completion Exchange.)</t> | ||||
<t>The default NAI for the peer is "noob@eap-noob.arpa". The peer impl | ||||
ementation | ||||
<bcp14>MAY</bcp14> allow the user or application to configure a differe | ||||
nt NAI, which | ||||
overrides the default NAI. Furthermore, the server <bcp14>MAY</bcp14> a | ||||
ssign a new | ||||
NAI to the peer in the Initial Exchange or Reconnect Exchange in the Ne | ||||
wNAI field | ||||
of request types 2 and 7 to override any previous NAI value. When the p | ||||
eer 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 | ||||
<bcp14>MUST</bcp14> use the configured NAI or, if it does not exist, th | ||||
e default | ||||
NAI. When the peer is in one of the states 1..2 and the server sent a N | ||||
ewNAI in the | ||||
latest Initial Exchange, the peer <bcp14>MUST</bcp14> use this server-a | ||||
ssigned NAI. | ||||
When the peer moves to the Registered (4) state after the Completion Ex | ||||
change, it | ||||
writes to the persistent EAP-NOOB association the same NAI value that i | ||||
t used in the | ||||
Completion Exchange. When the peer is in the Reconnecting (3) or Regist | ||||
ered (4) | ||||
state, it <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> follow | ||||
the syntax | ||||
specified in <xref target="RFC7542" format="default"/>. </t> | ||||
<t>The purpose of the server-assigned NAI is to enable more flexible r | ||||
outing of the | ||||
EAP sessions over the AAA infrastructure, including roaming scenarios ( | ||||
see <xref | ||||
target="roaming" format="default"/>). Moreover, some authenticators or | ||||
AAA servers | ||||
use the realm part of the assigned NAI to determine peer-specific conne | ||||
ction | ||||
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.</t> | ||||
<t>The peer's PeerId and server-assigned NAI are ephemeral until a suc | ||||
cessful | ||||
Completion Exchange takes place. Thereafter, the values become parts of | ||||
the | ||||
persistent EAP-NOOB association until the user resets the peer and serv | ||||
er or | ||||
until a new NAI is assigned in the Reconnect Exchange.</t> | ||||
</section> | ||||
<section anchor="messagedatafields" numbered="true" toc="default"> | ||||
<name>Message Data Fields</name> | ||||
<t><xref target="tab-datafields" format="default"/> defines the data f | ||||
ields in the | ||||
protocol messages. The in-band messages are formatted as JSON objects < | ||||
xref | ||||
target="RFC8259" format="default"/> in UTF-8 encoding. The JSON member | ||||
names are in | ||||
the left-hand column of the table.</t> | ||||
<table anchor="tab-datafields" align="center"> | ||||
<name>Message Data Fields</name> | ||||
<thead> | ||||
<tr> | ||||
<th align="left">Data Field</th> | ||||
<th align="left">Description</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td align="left">Vers, Verp</td> | ||||
<td align="left">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.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">PeerId</td> | ||||
<td align="left">Peer identifier, as defined in <xref target="na | ||||
i" | ||||
format="default"/>.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">NAI, NewNAI</td> | ||||
<td align="left">Peer NAI and server-assigned new peer NAI, as d | ||||
efined in | ||||
<xref target="nai" format="default"/>.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Type</td> | ||||
<td align="left">EAP-NOOB message type. The type is an integer i | ||||
n the range | ||||
0..9. EAP-NOOB requests and the corresponding responses share the | ||||
same type | ||||
value.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">PeerState</td> | ||||
<td align="left">Peer state is an integer in the range 0..4 (see | ||||
<xref | ||||
target="fig-statemachine" format="default"/>). However, only valu | ||||
es 0..3 are | ||||
ever sent in the protocol messages.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">PKs, PKp</td> | ||||
<td align="left">The public components of the ECDHE keys of the | ||||
server and | ||||
peer. PKs and PKp are sent in the JSON Web Key (JWK) format <xref | ||||
target="RFC7517" format="default"/>. The detailed format of the J | ||||
WK object is | ||||
defined by the cryptosuite.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Cryptosuites, Cryptosuitep</td> | ||||
<td align="left">The identifiers of cryptosuites supported by th | ||||
e server and | ||||
of the cryptosuite selected by the peer. The server-supported cry | ||||
ptosuites in | ||||
Cryptosuites are formatted as a JSON array of the identifier inte | ||||
gers. The | ||||
server <bcp14>MUST</bcp14> send a nonempty array with no repeatin | ||||
g elements, | ||||
ordered by decreasing priority. The peer <bcp14>MUST</bcp14> resp | ||||
ond with | ||||
exactly one suite in the Cryptosuitep value, formatted as an iden | ||||
tifier | ||||
integer. Mandatory-to-implement cryptosuites and the registration | ||||
procedure | ||||
for new cryptosuites are specified in <xref target="cryptosuites" | ||||
format="default"/>. Example values are "[1]" and "1", respectivel | ||||
y.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Dirs, Dirp</td> | ||||
<td align="left">An integer indicating the OOB channel direction | ||||
s 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.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Dir</td> | ||||
<td align="left">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 fingerprin | ||||
t Hoob.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Ns, Np</td> | ||||
<td align="left">32-byte nonces for the Initial Exchange.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">ServerInfo</td> | ||||
<td align="left">This field contains information about the serve | ||||
r to be passed | ||||
from the EAP method to the application layer in the peer. The inf | ||||
ormation is | ||||
specific to the application or to the OOB channel, and it is enco | ||||
ded as a JSON | ||||
object of at most 500 bytes. It could include, for example, the a | ||||
ccess-network | ||||
name and server name, a Uniform Resource Locator (URL) <xref | ||||
target="RFC3986" format="default"/>, or some other information th | ||||
at helps the | ||||
user deliver the OOB message to the server through the out-of-ban | ||||
d | ||||
channel.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">PeerInfo</td> | ||||
<td align="left">This field contains information about the peer | ||||
to be passed | ||||
from the EAP method to the application layer in the server. The i | ||||
nformation is | ||||
specific to the application or to the OOB channel, and it is enco | ||||
ded as a JSON | ||||
object of at most 500 bytes. It could include, for example, the p | ||||
eer brand, | ||||
model, and serial number, which help the user distinguish between | ||||
devices | ||||
and deliver the OOB message to the correct peer through the out-o | ||||
f-band | ||||
channel.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">SleepTime</td> | ||||
<td align="left">The number of seconds for which the peer <bcp14 | ||||
>MUST | ||||
NOT</bcp14> start a new execution of the EAP-NOOB method with the | ||||
authenticator, unless the peer receives the OOB message or the se | ||||
nding 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.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Noob</td> | ||||
<td align="left">16-byte secret nonce sent through the OOB chann | ||||
el and used | ||||
for the session key derivation. The endpoint that received the OO | ||||
B message | ||||
uses this secret in the Completion Exchange to authenticate the e | ||||
xchanged key | ||||
to the endpoint that sent the OOB message.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Hoob</td> | ||||
<td align="left">16-byte cryptographic fingerprint (i.e., hash v | ||||
alue) computed | ||||
from all the parameters exchanged in the Initial Exchange and in | ||||
the OOB | ||||
message. Receiving this fingerprint over the OOB channel guarante | ||||
es the | ||||
integrity of the key exchange and parameter negotiation. Hence, i | ||||
t | ||||
authenticates the exchanged key to the endpoint that receives the | ||||
OOB | ||||
message.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">NoobId</td> | ||||
<td align="left">16-byte identifier for the OOB message, compute | ||||
d with a | ||||
one-way function from the nonce Noob in the message.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">MACs, MACp</td> | ||||
<td align="left">Message authentication codes (HMAC) for mutual | ||||
authentication, key confirmation, and integrity check on the exch | ||||
anged | ||||
information. The input to the HMAC is defined below, and the key | ||||
for the HMAC | ||||
is defined in <xref target="keyderivation" format="default"/>.</t | ||||
d> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Ns2, Np2</td> | ||||
<td align="left">32-byte nonces for the Reconnect Exchange.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">KeyingMode</td> | ||||
<td align="left">Integer indicating the key derivation method. 0 | ||||
in the | ||||
Completion Exchange, and 1..3 in the Reconnect Exchange.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">PKs2, PKp2</td> | ||||
<td align="left">The public components of the ECDHE keys of the | ||||
server and | ||||
peer for the Reconnect Exchange. PKp2 and PKs2 are sent in the JS | ||||
ON Web Key | ||||
(JWK) format <xref target="RFC7517" format="default"/>. The detai | ||||
led format of | ||||
the JWK object is defined by the cryptosuite.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">MACs2, MACp2</td> | ||||
<td align="left">Message authentication codes (HMAC) for mutual | ||||
authentication, key confirmation, and integrity check on the Reco | ||||
nnect | ||||
Exchange. The input to the HMAC is defined below, and the key for | ||||
the HMAC is | ||||
defined in <xref target="keyderivation" format="default"/>.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">ErrorCode</td> | ||||
<td align="left">Integer indicating an error condition. Defined | ||||
in <xref | ||||
target="errorcodes" format="default"/>.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">ErrorInfo</td> | ||||
<td align="left">Textual error message for logging and debugging | ||||
purposes. A | ||||
UTF-8 string of at most 500 bytes.</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>It is <bcp14>RECOMMENDED</bcp14> for servers to support both OOB ch | ||||
annel | ||||
directions (Dirs=3) unless the type of the OOB channel limits them to o | ||||
ne direction | ||||
(Dirs=1 or Dirs=2). On the other hand, it is <bcp14>RECOMMENDED</bcp14> | ||||
that the | ||||
peer selects only one direction (Dirp=1 or Dirp=2) even when both direc | ||||
tions | ||||
(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 ea | ||||
ch direction, | ||||
even though only one of them needs to be delivered. This can be confusi | ||||
ng 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 ser | ||||
ver-to-peer | ||||
direction.</t> | ||||
<t>The nonces in the in-band messages (Ns, Np, Ns2, Np2) are 32-byte f | ||||
resh 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.</t> | ||||
<t>The fingerprint Hoob and the identifier NoobId are computed with th | ||||
e | ||||
cryptographic hash function H, which is specified in the negotiated cry | ||||
ptosuite and | ||||
truncated to the 16 leftmost bytes of the output. The message authentic | ||||
ation codes | ||||
(MACs, MACp, MACs2, MACp2) are computed with the function HMAC, which i | ||||
s the hashed | ||||
message authentication code <xref target="RFC2104" format="default"/> b | ||||
ased on the | ||||
cryptographic hash function H and truncated to the 32 leftmost bytes of | ||||
the | ||||
output.</t> | ||||
<t>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 contain | ||||
ing a fixed | ||||
number (17) of elements. The array elements <bcp14>MUST</bcp14> be copi | ||||
ed to | ||||
the | ||||
array verbatim from the sent and received in-band messages. When the el | ||||
ement is a | ||||
JSON object, its members <bcp14>MUST NOT</bcp14> be reordered or reenco | ||||
ded. | ||||
White space <bcp14>MUST NOT</bcp14> be added anywhere in the JSON struc | ||||
ture. | ||||
Implementers should check that their JSON library copies the elements a | ||||
s UTF-8 | ||||
strings, does not modify them in any way, and does not add white space | ||||
to | ||||
the HMAC input.</t> | ||||
<t>The inputs for computing the fingerprint and message authentication | ||||
codes are the | ||||
following:</t> | ||||
<sourcecode type="pseudocode"> | ||||
Hoob = H(Dir,Vers,Verp,PeerId,Cryptosuites,Dirs,ServerInfo, | ||||
Cryptosuitep,Dirp,NAI,PeerInfo,0,PKs,Ns,PKp,Np,Noob). | ||||
<section title="Protocol data fields" anchor="datafields"> | NoobId = H("NoobId",Noob). | |||
<t> | ||||
This section defines the various identifiers and data fields used in t | ||||
he EAP-NOOB protocol. | ||||
</t> | ||||
<section title="Peer identifier and NAI" anchor="nai"> | MACs = HMAC(Kms; 2,Vers,Verp,PeerId,Cryptosuites,Dirs,ServerInfo, | |||
<t> | Cryptosuitep,Dirp,NAI,PeerInfo,0,PKs,Ns,PKp,Np,Noob). | |||
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-use | ||||
rname specified in <xref target="RFC7542"/>. The server MUST generate the identi | ||||
fiers 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 an | ||||
d to base64url encode it without padding <xref target="RFC4648"/> into a 22-char | ||||
acter ASCII string. Another way to generate the identifiers is to choose a rando | ||||
m 22-character alphanumeric ASCII string. It is RECOMMENDED to not use identifie | ||||
rs longer than this because they result in longer OOB messages. | ||||
</t> | ||||
<t> | ||||
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 comp | ||||
arison between the received and the previously allocated PeerID. The peer sets t | ||||
he PeerId value in response type 1 as follows. As stated in <xref target="common | ||||
handshake"/>, 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 MUS | ||||
T 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 fr | ||||
om its persistent EAP-NOOB association. (The PeerId is written to the associatio | ||||
n when the peer moves to the Registered (4) state after a Completion Exchange.) | ||||
</t> | ||||
<t> | ||||
The default NAI for the peer is "noob@eap-noob.arpa". The peer imple | ||||
mentation 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 p | ||||
eer in the Initial Exchange or Reconnect Exchange, in the NewNAI field of reques | ||||
t types 2 and 7, to override any previous NAI value. When the peer is in the Unr | ||||
egistered (0) state, or when the peer is in one of the states 1..2 and the serve | ||||
r did not send a NewNAI in the latest Initial Exchange, the peer MUST use the co | ||||
nfigured 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 Registere | ||||
d (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 fr | ||||
om its persistent EAP-NOOB association. When the server sends NewNAI in the Reco | ||||
nnect 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 <xref target="RFC7542"/>. | ||||
</t> | ||||
<t> | ||||
The purpose of the server-assigned NAI is to enable more flexible ro | ||||
uting of the EAP sessions over the AAA infrastructure, including roaming scenari | ||||
os (see <xref target="roaming"/>). Moreover, some Authenticators or AAA servers | ||||
use the realm part of the assigned NAI to determine peer-specific connection par | ||||
ameters, such as isolating the peer to a specific VLAN. The user or application | ||||
configured NAI, on the other hand, enables registration of new devices while roa | ||||
ming. It also enables manufacturers to set up their own AAA servers for bootstra | ||||
pping of new peer devices. | ||||
</t> | ||||
<t> | ||||
The peer's PeerId and server-assigned NAI are ephemeral until a succ | ||||
essful Completion Exchange takes place. Thereafter, the values become parts of t | ||||
he persistent EAP-NOOB association, until the user resets the peer and the serve | ||||
r or until a new NAI is assigned in the Reconnect Exchange. | ||||
</t> | ||||
</section> | ||||
<section title="Message data fields" anchor="messagedatafields"> | MACp = HMAC(Kmp; 1,Vers,Verp,PeerId,Cryptosuites,Dirs,ServerInfo, | |||
<t> | Cryptosuitep,Dirp,NAI,PeerInfo,0,PKs,Ns,PKp,Np,Noob). | |||
<xref target="table-datafields"/> defines the data fields in the pro | ||||
tocol messages. The in-band messages are formatted as JSON objects <xref target= | ||||
"RFC8259"/> in UTF-8 encoding. The JSON member names are in the left-hand column | ||||
of the table. | ||||
</t> | ||||
<texttable title="Message data fields" anchor="table-datafields"> | ||||
<ttcol align="left" width="25%">Data field</ttcol> | ||||
<ttcol align="left">Description</ttcol> | ||||
<c>Vers, Verp</c> | ||||
<c>EAP-NOOB protocol versions supported by the EAP server, and the p | ||||
rotocol version chosen by the peer. Vers is a JSON array of unsigned integers, a | ||||
nd Verp is an unsigned integer. Example values are "[1]" and "1", respectively.< | ||||
/c> | ||||
<c></c><c></c> | ||||
<c>PeerId</c> | ||||
<c>Peer identifier as defined in <xref target="nai"/>.</c> | ||||
<c></c><c></c> | ||||
<c>NAI, NewNAI</c> | ||||
<c>Peer NAI and server-assigned new peer NAI as defined in <xref tar | ||||
get="nai"/>.</c> | ||||
<c></c><c></c> | ||||
<c>Type</c> | ||||
<c>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.</c> | ||||
<c></c><c></c> | ||||
<c>PeerState</c> | ||||
<c>Peer state is an integer in the range 0..4 (see <xref target="fig | ||||
-statemachine"/>). However, only values 0..3 are ever sent in the protocol messa | ||||
ges.</c> | ||||
<c></c><c></c> | ||||
<c>PKs, PKp</c> | ||||
<c>The public components of the ECDHE keys of the server and peer. P | ||||
Ks and PKp are sent in the JSON Web Key (JWK) format <xref target="RFC7517"/>. T | ||||
he detailed format of the JWK object is defined by the cryptosuite.</c> | ||||
<c></c><c></c> | ||||
<c>Cryptosuites, Cryptosuitep</c> | ||||
<c>The identifiers of cryptosuites supported by the server and of th | ||||
e cryptosuite selected by the peer. The server-supported cryptosuites in Cryptos | ||||
uites 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, format | ||||
ted as an identifier integer. Mandatory to implement cryptosuites and the regist | ||||
ration procedure for new cryptosuites is specified in <xref target="cryptosuites | ||||
"/>. Example values are "[1]" and "1", respectively.</c> | ||||
<c></c><c></c> | ||||
<c>Dirs, Dirp</c> | ||||
<c>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, 3=both directions.</c> | ||||
<c></c><c></c> | ||||
<c>Dir</c> | ||||
<c>The actual direction of the OOB message (1=peer-to-server, 2=serv | ||||
er-to-peer). This value is not sent over any communication channel, but it is in | ||||
cluded in the computation of the cryptographic fingerprint Hoob.</c> | ||||
<c></c><c></c> | ||||
<c>Ns, Np</c> | ||||
<c>32-byte nonces for the Initial Exchange.</c> | ||||
<c></c><c></c> | ||||
<c>ServerInfo</c> | ||||
<c>This field contains information about the server to be passed fro | ||||
m the EAP method to the application layer in the peer. The information is specif | ||||
ic 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 or a Uniform Resource Locator (URL) <xref target="RFC3986"/> or som | ||||
e other information that helps the user to deliver the OOB message to the server | ||||
through the out-of-band channel.</c> | ||||
<c></c><c></c> | ||||
<c>PeerInfo</c> | ||||
<c>This field contains information about the peer to be passed from | ||||
the EAP method to the application layer in the server. The information is specif | ||||
ic 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 to distinguish between devices and to deliver | ||||
the OOB message to the correct peer through the out-of-band channel.</c> | ||||
<c></c><c></c> | ||||
<c>SleepTime</c> | ||||
<c>The number of seconds for which the peer MUST NOT start a new exe | ||||
cution of the EAP-NOOB method with the authenticator, unless the peer receives t | ||||
he OOB message or the sending is triggered by an application-specific user actio | ||||
n. The server can use this field to limit the rate at which peers probe it. Slee | ||||
pTime is an unsigned integer in the range 0..3600.</c> | ||||
<c></c><c></c> | ||||
<c>Noob</c> | ||||
<c>16-byte secret nonce sent through the OOB channel and used for th | ||||
e session key derivation. The endpoint that received the OOB message uses this s | ||||
ecret in the Completion Exchange to authenticate the exchanged key to the endpoi | ||||
nt that sent the OOB message.</c> | ||||
<c></c><c></c> | ||||
<c>Hoob</c> | ||||
<c>16-byte cryptographic fingerprint (i.e., hash value) computed fro | ||||
m all the parameters exchanged in the Initial Exchange and in the OOB message. R | ||||
eceiving this fingerprint over the OOB channel guarantees the integrity of the k | ||||
ey exchange and parameter negotiation. Hence, it authenticates the exchanged key | ||||
to the endpoint that receives the OOB message.</c> | ||||
<c></c><c></c> | ||||
<c>NoobId</c> | ||||
<c>16-byte identifier for the OOB message, computed with a one-way f | ||||
unction from the nonce Noob in the message.</c> | ||||
<c></c><c></c> | ||||
<c>MACs, MACp</c> | ||||
<c>Message authentication codes (HMAC) for mutual authentication, ke | ||||
y confirmation, and integrity check on the exchanged information. The input to t | ||||
he HMAC is defined below, and the key for the HMAC is defined in <xref target="k | ||||
eyderivation"/>.</c> | ||||
<c></c><c></c> | ||||
<c>Ns2, Np2</c> | ||||
<c>32-byte nonces for the Reconnect Exchange.</c> | ||||
<c></c><c></c> | ||||
<c>KeyingMode</c> | ||||
<c>Integer indicating the key derivation method. 0 in the Completion | ||||
Exchange, and 1..3 in the Reconnect Exchange.</c> | ||||
<c></c><c></c> | ||||
<c>PKs2, PKp2</c> | ||||
<c>The public components of the ECDHE keys of the server and peer fo | ||||
r the Reconnect Exchange. PKp2 and PKs2 are sent in the JSON Web Key (JWK) forma | ||||
t <xref target="RFC7517"/>. The detailed format of the JWK object is defined by | ||||
the cryptosuite.</c> | ||||
<c></c><c></c> | ||||
<c>MACs2, MACp2</c> | ||||
<c>Message authentication codes (HMAC) for mutual authentication, ke | ||||
y 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 <xref target="keyd | ||||
erivation"/>.</c> | ||||
<c></c><c></c> | ||||
<c>ErrorCode</c> | ||||
<c>Integer indicating an error condition. Defined in <xref target="e | ||||
rrorcodes"/>.</c> | ||||
<c></c><c></c> | ||||
<c>ErrorInfo</c> | ||||
<c>Textual error message for logging and debugging purposes. A UTF-8 | ||||
string of at most 500 bytes.</c> | ||||
<c></c><c></c> | ||||
</texttable> | ||||
<t> | ||||
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 on | ||||
e direction (Dirp=1 or Dirp=2) even when both directions (Dirp=3) would be techn | ||||
ically possible. The reason is that, if value 3 is negotiated, the user may be p | ||||
resented 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 cope also with the value 3, in which case it u | ||||
ses the first delivered OOB message. In the unlikely case of simultaneously deli | ||||
vered OOB messages, the protocol prioritizes the server-to-peer direction. | ||||
</t> | ||||
<t> | ||||
The nonces in the in-band messages (Ns, Np, Ns2, Np2) are 32-byte fr | ||||
esh random byte strings, and the secret nonce Noob is a 16-byte fresh random byt | ||||
e string. All the nonces are generated by the endpoint that sends the message. | ||||
</t> | ||||
<t> | ||||
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 authenticatio | ||||
n codes (MACs, MACp, MACs2, MACp2) are computed with the function HMAC, which is | ||||
the HMAC message authentication code <xref target="RFC2104"/> based on the cryp | ||||
tographic hash function H and truncated to the 32 leftmost bytes of the output. | ||||
</t> | ||||
<t> | ||||
The inputs to the hash function for computing the fingerprint Hoob a | ||||
nd to the HMAC for computing MACs, MACp, MACs2 and MACp2 are JSON arrays contain | ||||
ing a fixed number (17) of elements. The array elements MUST be copied to the ar | ||||
ray verbatim from the sent and received in-band messages. When the element is a | ||||
JSON object, its members MUST NOT be reordered or re-encoded. Whitespace MUST NO | ||||
T be added anywhere in the JSON structure. Implementers should check that their | ||||
JSON library copies the elements as UTF-8 strings and does not modify them in an | ||||
y way, and that it does not add whitespace to the HMAC input. | ||||
</t> | ||||
<t> | ||||
The inputs for computing the fingerprint and message authentication | ||||
codes are the following: | ||||
<list style="empty"> | ||||
<t>Hoob = H(Dir,Vers,Verp,PeerId,Cryptosuites,Dirs,ServerInfo,Cryp | ||||
tosuitep,Dirp,NAI,PeerInfo,0,PKs,Ns,PKp,Np,Noob). </t> | ||||
<t>NoobId = H("NoobId",Noob). </t> | ||||
<t>MACs = HMAC(Kms; 2,Vers,Verp,PeerId,Cryptosuites,Dirs,ServerInf | ||||
o,Cryptosuitep,Dirp,NAI,PeerInfo,0,PKs,Ns,PKp,Np,Noob). </t> | ||||
<t>MACp = HMAC(Kmp; 1,Vers,Verp,PeerId,Cryptosuites,Dirs,ServerInf | ||||
o,Cryptosuitep,Dirp,NAI,PeerInfo,0,PKs,Ns,PKp,Np,Noob). </t> | ||||
<t>MACs2 = HMAC(Kms2; 2,Vers,Verp,PeerId,Cryptosuites,"",[ServerIn | ||||
fo],Cryptosuitep,"",NAI,[PeerInfo],KeyingMode,[PKs2],Ns2,[PKp2],Np2,"") </t> | ||||
<t>MACp2 = HMAC(Kmp2; 1,Vers,Verp,PeerId,Cryptosuites,"",[ServerIn | ||||
fo],Cryptosuitep,"",NAI,[PeerInfo],KeyingMode,[PKs2],Ns2,[PKp2],Np2,"") </t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
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 Comp | ||||
letion 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 t | ||||
he persistent EAP-NOOB association. Each of the values in brackets for the compu | ||||
tation of Macs2 and Macp2 MUST be included if it was sent or received in the sam | ||||
e Reconnect Exchange; otherwise, the value is replaced by an empty string "". | ||||
</t> | ||||
<t> | ||||
The parameter Dir indicates the direction in which the OOB message c | ||||
ontaining the Noob value is being sent (1=peer-to-server, 2=server-to-peer). Thi | ||||
s field is included in the Hoob input to prevent the user from accidentally deli | ||||
vering the OOB message back to its originator in the rare cases where both OOB d | ||||
irections have been negotiated. The keys (Kms, Kmp, Kms2, Kmp2) for the HMACs ar | ||||
e defined in <xref target="keyderivation"/>. | ||||
</t> | ||||
<t> | ||||
The nonces (Ns, Np, Ns2, Np2, Noob) and the hash value (NoobId) MUST | ||||
be base64url encoded <xref target="RFC4648"/> when they are used as input to th | ||||
e cryptographic functions H or HMAC. These values and the message authentication | ||||
codes (MACs, MACp, MACs2, MACp2) MUST also be base64url encoded when they are s | ||||
ent 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 specif | ||||
ied above (22-character string for a 16-byte nonce and 43-character string for a | ||||
32-byte nonce or message authentication code). In the key derivation in <xref t | ||||
arget="keyderivation"/>, on the other hand, the unencoded nonces (raw bytes) are | ||||
used as input to the key derivation function. | ||||
</t> | ||||
<t> | ||||
The ServerInfo and PeerInfo are JSON objects with UTF-8 encoding. Th | ||||
e 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 u | ||||
ses the EAP-NOOB method. | ||||
</t> | ||||
</section> | ||||
</section> | ||||
<section title="Fast reconnect and rekeying" anchor="fastreconnect"> | MACs2 = HMAC(Kms2; 2,Vers,Verp,PeerId,Cryptosuites,"",[ServerInfo], | |||
<t> | Cryptosuitep,"",NAI,[PeerInfo],KeyingMode,[PKs2],Ns2,[PKp2],Np2,"") | |||
EAP-NOOB implements Fast Reconnect (<xref target="RFC3748"/>, section | ||||
7.2.1) that avoids repeated use of the user-assisted OOB channel. | ||||
</t> | ||||
<t> | ||||
The rekeying and the Reconnect Exchange may be needed for several reas | ||||
ons. 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 non-persistent state data. The failure would typically be dete | ||||
cted by the peer or authenticator when session keys are no longer accepted by th | ||||
e other endpoint. Changes in the supported cryptosuites in the EAP server or pee | ||||
r may also cause the need for a new key exchange. When the EAP server or peer de | ||||
tects any one of these events, it MUST change from the Registered to Reconnectin | ||||
g state. These state transitions are labeled Mobility/Timeout/Failure in <xref t | ||||
arget="fig-statemachine"/>. The EAP-NOOB method will then perform the Reconnect | ||||
Exchange the next time when EAP is triggered. | ||||
</t> | ||||
<section title="Persistent EAP-NOOB association" anchor="persistentassoc | MACp2 = HMAC(Kmp2; 1,Vers,Verp,PeerId,Cryptosuites,"",[ServerInfo], | |||
iation"> | Cryptosuitep,"",NAI,[PeerInfo],KeyingMode,[PKs2],Ns2,[PKp2],Np2,"") | |||
<t> | </sourcecode> | |||
To enable rekeying, the EAP server and peer store the session state | <t>The inputs denoted with "" above are not present, and the values in | |||
in persistent memory after a successful Completion Exchange. This state data, ca | brackets | |||
lled "persistent EAP-NOOB association", MUST include at least the data fields sh | [] are optional. Both kinds of missing input values are represented by | |||
own in <xref target="table-persistent"/>. They are used for identifying and auth | empty strings | |||
enticating the peer in the Reconnect Exchange. When a persistent EAP-NOOB associ | "" in the HMAC input (JSON array). The NAI included in the inputs is th | |||
ation exists, the EAP server and peer are in the Registered state (4) or Reconne | e NAI value | |||
cting state (3), as shown in <xref target="fig-statemachine"/>. | that will be in the persistent EAP-NOOB association if the Completion E | |||
</t> | xchange or | |||
<texttable title="Persistent EAP-NOOB association" anchor="table-persi | Reconnect Exchange succeeds. | |||
stent"> | In the Completion Exchange, the NAI is the NewNAI value | |||
<ttcol>Data Field</ttcol> | assigned by the server in the preceding Initial Exchange or, if no NewN | |||
<ttcol>Value</ttcol> | AI was sent, | |||
<ttcol>Type</ttcol> | the NAI used by the client in the Initial Exchange. In the Reconnect Ex | |||
<c>PeerId</c><c>Peer identifier allocated by server</c><c>UTF-8 stri | change, | |||
ng (typically 22 ASCII characters)</c> | the NAI is the NewNAI value assigned by the server in the same Reconnec | |||
<c></c><c></c><c></c> | t Exchange | |||
<c>Verp</c><c>Negotiated protocol version</c><c>integer</c> | or, if | |||
<c></c><c></c><c></c> | no NewNAI was sent, the unchanged NAI from the persistent EAP-NOOB asso | |||
<c>Cryptosuitep</c><c>Negotiated cryptosuite</c><c>integer</c> | ciation. Each | |||
<c></c><c></c><c></c> | of the values in brackets for the computation of Macs2 and Macp2 <bcp14 | |||
<c>CryptosuitepPrev (at peer only)</c><c>Previous cryptosuite</c><c> | >MUST</bcp14> | |||
integer</c> | be included if it was sent or received in the same Reconnect Exchange; | |||
<c></c><c></c><c></c> | otherwise, | |||
<c>NAI</c><c>NAI assigned by server, configured by user, or the defa | the value is replaced by an empty string "".</t> | |||
ult NAI "noob@eap-noob.arpa"</c><c>UTF-8 string</c> | <t>The parameter Dir indicates the direction in which the OOB message | |||
<c>Kz</c><c>Persistent key material</c><c>32 bytes</c> | containing the | |||
<c></c><c></c><c></c> | Noob value is being sent (1=peer-to-server, 2=server-to-peer). This fie | |||
<c>KzPrev (at peer only)</c><c>Previous Kz value</c><c>32 bytes</c> | ld is | |||
</texttable> | included in the Hoob input to prevent the user from accidentally delive | |||
ring the OOB | ||||
message back to its originator in the rare cases where both OOB directi | ||||
ons have been | ||||
negotiated. The keys (Kms, Kmp, Kms2, and Kmp2) for the HMACs are defin | ||||
ed in <xref | ||||
target="keyderivation" format="default"/>.</t> | ||||
<t>The nonces (Ns, Np, Ns2, Np2, and Noob) and the hash value (NoobId) | ||||
<bcp14>MUST</bcp14> be base64url encoded <xref target="RFC4648" format= | ||||
"default"/> | ||||
when they are used as input to the cryptographic functions H or HMAC. T | ||||
hese values | ||||
and the message authentication codes (MACs, MACp, MACs2, and MACp2) | ||||
<bcp14>MUST</bcp14> | ||||
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 <bcp14>MAY</bcp14 | ||||
> be | ||||
base64url encoded if that is appropriate for the application and the OO | ||||
B channel. | ||||
All base64url encoding is done without padding. The base64url-encoded v | ||||
alues 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 nonc | ||||
e or message | ||||
authentication code). In the key derivation in <xref target="keyderivat | ||||
ion" | ||||
format="default"/>, on the other hand, the unencoded nonces (raw bytes) | ||||
are used as | ||||
input to the key derivation function.</t> | ||||
<t>The ServerInfo and PeerInfo are JSON objects with UTF-8 encoding. T | ||||
he length of | ||||
either encoded object as a byte array <bcp14>MUST NOT</bcp14> exceed 50 | ||||
0 bytes. The | ||||
format and semantics of these objects <bcp14>MUST</bcp14> be defined by | ||||
the | ||||
application that uses the EAP-NOOB method.</t> | ||||
</section> | </section> | |||
</section> | ||||
<section title="Reconnect Exchange" anchor="reconnectexchange"> | <section anchor="fastreconnect" numbered="true" toc="default"> | |||
<t> | <name>Fast Reconnect and Rekeying</name> | |||
The server chooses the Reconnect Exchange when both the peer and the | <t>EAP-NOOB implements fast reconnect (<xref target="RFC3748" sectionFor | |||
server are in a persistent state and fast reconnection is needed (see <xref tar | mat="comma" | |||
get="commonhandshake"/> for details). | section="7.2.1"/>), which avoids repeated use of the user-assisted OOB ch | |||
</t> | annel.</t> | |||
<t> | <t>The rekeying and the Reconnect Exchange may be needed for several rea | |||
The Reconnect Exchange comprises the common handshake and three furt | sons. New EAP | |||
her EAP-NOOB request-response pairs, one for cryptosuite and parameter negotiati | output values Main Session Key (MSK) and Extended Main Session Key (EMSK) | |||
on, another for the nonce and ECDHE key exchange, and the last one for exchangin | may be | |||
g message authentication codes. In the first request and response (Type=7) the s | needed because of mobility or timeout of session keys. Software or hardwa | |||
erver and peer negotiate a protocol version and cryptosuite in the same way as i | re failure or | |||
n the Initial Exchange. The server SHOULD NOT offer and the peer MUST NOT accept | user action may also cause the authenticator, EAP server, or peer to lose | |||
protocol versions or cryptosuites that it knows to be weaker than the one curre | its | |||
ntly in the Cryptosuitep field of the persistent EAP-NOOB association. The serve | nonpersistent state data. The failure would typically be detected by the | |||
r SHOULD NOT needlessly change the cryptosuites it offers to the same peer becau | peer or | |||
se peer devices may have limited ability to update their persistent storage. How | authenticator when session keys are no longer accepted by the other endpo | |||
ever, if the peer has different values in the Cryptosuitep and CryptosuitepPrev | int. Changes | |||
fields, it SHOULD also accept offers that are not weaker than CryptosuitepPrev. | in the supported cryptosuites in the EAP server or peer may also cause th | |||
Note that Cryptosuitep and CryptosuitePrev from the persistent EAP-NOOB associat | e need for a | |||
ion are only used to support the negotiation as described above; all actual cryp | new key exchange. When the EAP server or peer detects any one of these ev | |||
tographic operations use the newly negotiated cryptosuite. The request and respo | ents, it | |||
nse (Type=7) MAY additionally contain PeerInfo and ServerInfo objects. | <bcp14>MUST</bcp14> change from the Registered (4) state to the Reconnect | |||
</t> | ing (3) | |||
<t> | state. These state | |||
The server then determines the KeyingMode (defined in <xref target=" | transitions are labeled Mobility/Timeout/Failure in <xref target="fig-sta | |||
keyderivation"/>) based on changes in the negotiated cryptosuite and whether it | temachine" | |||
desires to achieve forward secrecy or not. The server SHOULD only select KeyingM | format="default"/>. The EAP-NOOB method will then perform the Reconnect E | |||
ode 3 when the negotiated cryptosuite differs from the Cryptosuitep in the serve | xchange the | |||
r's persistent EAP-NOOB association, although it is technically possible to sele | next time when EAP is triggered.</t> | |||
ct this value without changing the cryptosuite. In the second request and respon | <section anchor="persistentassociation" numbered="true" toc="default"> | |||
se (Type=8), the server informs the peer about the KeyingMode, and the server an | <name>Persistent EAP-NOOB Association</name> | |||
d peer exchange nonces (Ns2, Np2). When KeyingMode is 2 or 3 (rekeying with ECDH | <t>To enable rekeying, the EAP server and peer store the session state | |||
E), they also exchange public components of ECDHE keys (PKs2, PKp2). The server | in persistent | |||
ECDHE key MUST be fresh, i.e., not previously used with the same peer, and the p | memory after a successful Completion Exchange. This state data, called | |||
eer ECDHE key SHOULD be fresh, i.e., not previously used. | "persistent | |||
</t> | EAP-NOOB association", <bcp14>MUST</bcp14> include at least the data fi | |||
<t> | elds shown in | |||
In the third and final request and response (Type=9), the server and | <xref target="tab-persistent" format="default"/>. They are used for ide | |||
peer exchange message authentication codes. Both sides MUST compute the keys Km | ntifying and | |||
s2 and Kmp2 as defined in <xref target="keyderivation"/> and the message authent | authenticating the peer in the Reconnect Exchange. When a persistent EA | |||
ication codes MACs2 and MACp2 as defined in <xref target="messagedatafields"/>. | P-NOOB | |||
Both sides MUST compare the received message authentication code with a locally | association exists, the EAP server and peer are in the Registered (4) s | |||
computed value. | tate or | |||
</t> | Reconnecting (3) state, as shown in <xref target="fig-statemachine" | |||
<t> | format="default"/>.</t> | |||
The rules by which the peer compares the received MACs2 are non-triv | <table anchor="tab-persistent" align="center"> | |||
ial because, in addition to authenticating the current exchange, MACs2 may confi | <name>Persistent EAP-NOOB Association</name> | |||
rm the success or failure of a recent cryptosuite upgrade. The peer processes th | <thead> | |||
e final request (Type=9) as follows: | <tr> | |||
</t> | <th align="left">Data Field</th> | |||
<t> | <th align="left">Value</th> | |||
<list style="numbers"> | <th align="left">Type</th> | |||
<t> | </tr> | |||
The peer first compares the received MACs2 value with one it com | </thead> | |||
puted using the Kz stored in the persistent EAP-NOOB association. If the receive | <tbody> | |||
d and computed values match, the peer deletes any data stored in the Cryptosuite | <tr> | |||
pPrev and KzPrev fields of the persistent EAP-NOOB association. It does this bec | <td align="left">PeerId</td> | |||
ause the received MACs2 confirms that the peer and server share the same Cryptos | <td align="left">Peer identifier allocated by server</td> | |||
uitep and Kz, and any previous values must no longer be accepted. | <td align="left">UTF-8 string (typically 22 ASCII characters)</t | |||
</t> | d> | |||
<t> | </tr> | |||
If, on the other hand, the peer finds that the received MACs2 va | <tr> | |||
lue does not match the one it computed locally with Kz, the peer checks whether | <td align="left">Verp</td> | |||
the KzPrev field in the persistent EAP-NOOB association stores a key. If it does | <td align="left">Negotiated protocol version</td> | |||
, the peer repeats the key derivation (<xref target="keyderivation"/>) and local | <td align="left">integer</td> | |||
MACs2 computation (<xref target="messagedatafields"/>) using KzPrev in place of | </tr> | |||
Kz. If this second computed MACs2 matches the received value, the match indicat | <tr> | |||
es synchronization failure caused by the loss of the last response (Type=9) in a | <td align="left">Cryptosuitep</td> | |||
previously attempted cryptosuite upgrade. In this case, the peer rolls back tha | <td align="left">Negotiated cryptosuite</td> | |||
t upgrade by overwriting Cryptosuitep with CryptosuitepPrev and Kz with KzPrev i | <td align="left">integer</td> | |||
n the persistent EAP-NOOB association. It also clears the CryptosuitepPrev and K | </tr> | |||
zPrev fields. | <tr> | |||
</t> | <td align="left">CryptosuitepPrev (at peer only)</td> | |||
<t> | <td align="left">Previous cryptosuite</td> | |||
If the received MACs2 matched one of the locally computed values | <td align="left">integer</td> | |||
, the peer proceeds to send the final response (Type=9). The peer also moves to | </tr> | |||
the Registered (4) state. When KeyingMode is 1 or 2, the peer stops here. When K | <tr> | |||
eyingMode is 3, the peer also updates the persistent EAP-NOOB association with t | <td align="left">NAI</td> | |||
he negotiated Cryptosuitep and the newly-derived Kz value. To prepare for possib | <td align="left">NAI assigned by the server or configured by the | |||
le synchronization failure caused by the loss of the final response (Type=9) dur | user or the | |||
ing cryptosuite upgrade, the peer copies the old Cryptosuitep and Kz values in t | default NAI "noob@eap-noob.arpa"</td> | |||
he persistent EAP-NOOB association to the CryptosuitepPrev and KzPrev fields. | <td align="left">UTF-8 string</td> | |||
</t> | </tr> | |||
<t> | <tr> | |||
Finally, if the peer finds that the received MACs2 does not matc | <td align="left">Kz</td> | |||
h either of the two values that it computed locally (or one value if no KzPrev w | <td align="left">Persistent key material</td> | |||
as stored), the peer sends an error message (error code 4001, see <xref target=" | <td align="left">32 bytes</td> | |||
invalidmessages"/>), which causes the Reconnect Exchange to end in EAP-Failure. | </tr> | |||
</t> | <tr> | |||
</list> | <td align="left">KzPrev (at peer only)</td> | |||
</t> | <td align="left">Previous Kz value</td> | |||
<t> | <td align="left">32 bytes</td> | |||
The server rules for processing the final message are simpler than t | </tr> | |||
he peer rules because the server does not store previous keys, and it never roll | </tbody> | |||
s back a cryptosuite upgrade. Upon receiving the final response (Type=9), the se | </table> | |||
rver compares the received value of MACp2 with one it computes locally. If the v | </section> | |||
alues match, the Reconnect Exchange ends in EAP-Success. When KeyingMode is 3, t | <section anchor="reconnectexchange" numbered="true" toc="default"> | |||
he server also updates Cryptosuitep and Kz in the persistent EAP-NOOB associatio | <name>Reconnect Exchange</name> | |||
n. On the other hand, if the server finds that the values do not match, it sends | <t>The server chooses the Reconnect Exchange when both the peer and th | |||
an error message (error code 4001), and the Reconnect Exchange ends in EAP-Fail | e server are | |||
ure. | in a persistent state and fast reconnection is needed (see <xref | |||
</t> | target="commonhandshake" format="default"/> for details).</t> | |||
<t> | <t>The Reconnect Exchange comprises the common handshake and three fur | |||
The endpoints MAY send updated NewNAI, ServerInfo and PeerInfo objec | ther EAP-NOOB | |||
ts in the Reconnect Exchange. When there is no update to the values, they SHOULD | request-response pairs: one for cryptosuite and parameter negotiation, | |||
omit this information from the messages. If the NewNAI was sent, each side upda | another for | |||
tes NAI in the persistent EAP-NOOB association when moving to the Registered (4) | the nonce and ECDHE key exchange, and the last one for exchanging messa | |||
state. | ge | |||
</t> | authentication codes. In the first request and response (Type=7), the s | |||
<t> | erver and peer | |||
<figure anchor="fig-reconnect" title="Reconnect Exchange"> | negotiate a protocol version and cryptosuite in the same way as in the | |||
<artwork align="center"> | Initial | |||
<![CDATA[ | Exchange. The server <bcp14>SHOULD NOT</bcp14> offer and the peer <bcp1 | |||
4>MUST | ||||
NOT</bcp14> accept protocol versions or cryptosuites that it knows to b | ||||
e weaker than | ||||
the one currently in the Cryptosuitep field of the persistent EAP-NOOB | ||||
association. | ||||
The server <bcp14>SHOULD NOT</bcp14> needlessly change the cryptosuites | ||||
it offers to | ||||
the same peer because peer devices may have limited ability to update t | ||||
heir | ||||
persistent storage. However, if the peer has different values in the Cr | ||||
yptosuitep | ||||
and CryptosuitepPrev fields, it <bcp14>SHOULD</bcp14> also accept offer | ||||
s that are | ||||
not weaker than CryptosuitepPrev. Note that Cryptosuitep and Cryptosuit | ||||
ePrev from | ||||
the persistent EAP-NOOB association are only used to support the negoti | ||||
ation as | ||||
described above; all actual cryptographic operations use the newly nego | ||||
tiated | ||||
cryptosuite. The request and response (Type=7) <bcp14>MAY</bcp14> addit | ||||
ionally | ||||
contain PeerInfo and ServerInfo objects.</t> | ||||
<t>The server then determines the KeyingMode (defined in <xref | ||||
target="keyderivation" format="default"/>) based on changes in the nego | ||||
tiated | ||||
cryptosuite and whether it desires to achieve forward secrecy or not. T | ||||
he server | ||||
<bcp14>SHOULD</bcp14> only select KeyingMode 3 when the negotiated cryp | ||||
tosuite | ||||
differs from the Cryptosuitep in the server's persistent EAP-NOOB assoc | ||||
iation, | ||||
although it is technically possible to select this value without changi | ||||
ng the | ||||
cryptosuite. In the second request and response (Type=8), the server in | ||||
forms 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 c | ||||
omponents of | ||||
ECDHE keys (PKs2, PKp2). The server ECDHE key <bcp14>MUST</bcp14> be fr | ||||
esh, i.e., | ||||
not previously used with the same peer, and the peer ECDHE key <bcp14>S | ||||
HOULD</bcp14> | ||||
be fresh, i.e., not previously used.</t> | ||||
<t>In the third and final request and response (Type=9), the server an | ||||
d peer | ||||
exchange message authentication codes. Both sides <bcp14>MUST</bcp14> c | ||||
ompute the | ||||
keys Kms2 and Kmp2, as defined in <xref target="keyderivation" format=" | ||||
default"/>, | ||||
and the message authentication codes MACs2 and MACp2, as defined in <xr | ||||
ef | ||||
target="messagedatafields" format="default"/>. Both sides <bcp14>MUST</ | ||||
bcp14> | ||||
compare the received message authentication code with a locally compute | ||||
d value.</t> | ||||
<t>The rules by which the peer compares the received MACs2 are nontriv | ||||
ial because, | ||||
in addition to authenticating the current exchange, MACs2 may confirm t | ||||
he success or | ||||
failure of a recent cryptosuite upgrade. The peer processes the final r | ||||
equest | ||||
(Type=9) as follows:</t> | ||||
<ol spacing="normal" type="1"> | ||||
<li>The peer first compares the received MACs2 value with one it comp | ||||
uted 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 CryptosuitepPre | ||||
v and KzPrev | ||||
fields of the persistent EAP-NOOB association. It does this because t | ||||
he received | ||||
MACs2 confirms that the peer and server share the same Cryptosuitep a | ||||
nd Kz, and | ||||
any previous values must no longer be accepted.</li> | ||||
<li>On the other hand, if the peer finds that the received MACs2 val | ||||
ue does not | ||||
match the one it computed locally with Kz, the peer checks whether th | ||||
e KzPrev | ||||
field in the persistent EAP-NOOB association stores a key. If it does | ||||
, the peer | ||||
repeats the key derivation (<xref target="keyderivation" format="defa | ||||
ult"/>) and | ||||
local MACs2 computation (<xref target="messagedatafields" format="def | ||||
ault"/>) | ||||
using KzPrev in place of Kz. If this second computed MACs2 matches th | ||||
e received | ||||
value, the match indicates synchronization failure caused by the loss | ||||
of the last | ||||
response (Type=9) in a previously attempted cryptosuite upgrade. In t | ||||
his case, the | ||||
peer rolls back that upgrade by overwriting Cryptosuitep with Cryptos | ||||
uitepPrev and | ||||
Kz with KzPrev in the persistent EAP-NOOB association. It also clears | ||||
the | ||||
CryptosuitepPrev and KzPrev fields.</li> | ||||
<li>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 associ | ||||
ation with | ||||
the negotiated Cryptosuitep and the newly derived Kz value. To prepar | ||||
e for | ||||
possible synchronization failure caused by the loss of the final resp | ||||
onse (Type=9) | ||||
during cryptosuite upgrade, the peer copies the old Cryptosuitep and | ||||
Kz values in | ||||
the persistent EAP-NOOB association to the CryptosuitepPrev and KzPre | ||||
v fields.</li> | ||||
<li>Finally, if the peer finds that the received MACs2 does not matc | ||||
h either of | ||||
the two values that it computed locally (or one value if no KzPrev wa | ||||
s stored), | ||||
the peer sends an error message (error code 4001, see <xref | ||||
target="cryptofailure" format="default"/>), which causes the Reconnec | ||||
t Exchange | ||||
to end in EAP-Failure.</li> | ||||
</ol> | ||||
<t>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 se | ||||
rver 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 serve | ||||
r 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 err | ||||
or message | ||||
(error code 4001), and the Reconnect Exchange ends in EAP-Failure.</t> | ||||
<t>The endpoints <bcp14>MAY</bcp14> send updated NewNAI, ServerInfo, a | ||||
nd PeerInfo | ||||
objects in the Reconnect Exchange. When there is no update to the value | ||||
s, they | ||||
<bcp14>SHOULD</bcp14> omit this information from the messages. If the N | ||||
ewNAI was | ||||
sent, each side updates NAI in the persistent EAP-NOOB association when | ||||
moving to | ||||
the Registered (4) state.</t> | ||||
<figure anchor="fig-reconnect"> | ||||
<name>Reconnect Exchange</name> | ||||
<artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
EAP Peer EAP Server | EAP Peer EAP Server | |||
| ...continuing from common handshake | | | ...continuing from common handshake | | |||
| | | | | | |||
|<----------- EAP-Request/EAP-NOOB ----------------| | |<----------- EAP-Request/EAP-NOOB ----------------| | |||
| (Type=7,Vers,PeerId,Cryptosuites, | | | (Type=7,Vers,PeerId,Cryptosuites, | | |||
| [NewNAI],[ServerInfo]) | | | [NewNAI],[ServerInfo]) | | |||
| | | | | | |||
| | | | | | |||
|------------ EAP-Response/EAP-NOOB -------------->| | |------------ EAP-Response/EAP-NOOB -------------->| | |||
| (Type=7,Verp,PeerId,Cryptosuitep,[PeerInfo])| | | (Type=7,Verp,PeerId,Cryptosuitep,[PeerInfo])| | |||
skipping to change at line 659 ¶ | skipping to change at line 1152 ¶ | |||
|<----------- EAP-Request/EAP-NOOB ----------------| | |<----------- EAP-Request/EAP-NOOB ----------------| | |||
| (Type=9,PeerId,MACs2) | | | (Type=9,PeerId,MACs2) | | |||
| | | | | | |||
| | | | | | |||
|------------ EAP-Response/EAP-NOOB -------------->| | |------------ EAP-Response/EAP-NOOB -------------->| | |||
| (Type=9,PeerId,MACp2) | | | (Type=9,PeerId,MACp2) | | |||
| | | | | | |||
| | | | | | |||
|<----------- EAP-Success -------------------------| | |<----------- EAP-Success -------------------------| | |||
| | | | | | |||
]]> | ]]></artwork> | |||
</artwork> | </figure> | |||
</figure> | ||||
</t> | ||||
</section> | </section> | |||
<section anchor="userreset" numbered="true" toc="default"> | ||||
<section title="User reset" anchor="userreset"> | <name>User Reset</name> | |||
<t> | <t>As shown in the association state machine in <xref target="fig-stat | |||
As shown in the association state machine in <xref target="fig-state | emachine" | |||
machine"/>, the only specified way for the association to return from the Regist | format="default"/>, the only specified way for the association to retur | |||
ered state (4) to the Unregistered state (0) is through user-initiated reset. Af | n from the | |||
ter the reset, a new OOB message will be needed to establish a new association b | Registered (4) state to the Unregistered (0) state is through user-init | |||
etween the EAP server and peer. Typical situations in which the user reset is re | iated reset. | |||
quired are when the other side has accidentally lost the persistent EAP-NOOB ass | After the reset, a new OOB message will be needed to establish a new as | |||
ociation data, or when the peer device is decommissioned. | sociation | |||
</t> | between the EAP server and peer. Typical situations in which the user r | |||
<t> | eset is | |||
The server could detect that the peer is in the Registered or Reconn | required are when the other side has accidentally lost the persistent E | |||
ecting state but the server itself is in one of the ephemeral states 0..2 (inclu | AP-NOOB | |||
ding situations where the server does not recognize the PeerId). In this case, e | association data or when the peer device is decommissioned.</t> | |||
ffort should be made to recover the persistent server state, for example, from a | <t>The server could detect that the peer is in the Registered or Recon | |||
backup storage - especially if many peer devices are similarly affected. If tha | necting state, | |||
t is not possible, the EAP server SHOULD log the error or notify an administrato | but the server itself is in one of the ephemeral states 0..2 (including | |||
r. The only way to continue from such a situation is by having the user reset th | situations | |||
e peer device. | where the server does not recognize the PeerId). In this case, effort s | |||
</t> | hould be made | |||
<t> | to recover the persistent server state, for example, from a backup stor | |||
On the other hand, if the peer is in any of the ephemeral states 0.. | age -- | |||
2, including the Unregistered state, the server will treat the peer as a new pee | especially if many peer devices are similarly affected. If that is not | |||
r device and allocate a new PeerId to it. The PeerInfo can be used by the user a | possible, the | |||
s a clue to which physical device has lost its state. However, there is no secur | EAP server <bcp14>SHOULD</bcp14> log the error or notify an administrat | |||
e way of matching the "new" peer with the old PeerId without repeating the OOB S | or. The only | |||
tep. This situation will be resolved when the user performs the OOB Step and, th | way to continue from such a situation is by having the user reset the p | |||
us, identifies the physical peer device. The server user interface MAY support s | eer | |||
ituations where the "new" peer is actually a previously registered peer that has | device.</t> | |||
been reset by a user or otherwise lost its persistent data. In those cases, the | <t>On the other hand, if the peer is in any of the ephemeral states 0. | |||
user could choose to merge the new peer identity with the old one in the server | .2, including | |||
. The alternative is to treat the device just like a new peer. | the Unregistered state, the server will treat the peer as a new peer de | |||
</t> | vice 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 sit | ||||
uation will | ||||
be resolved when the user performs the OOB Step and thus identifies the | ||||
physical | ||||
peer device. The server user interface <bcp14>MAY</bcp14> support situa | ||||
tions where | ||||
the "new" peer is actually a previously registered peer that has been r | ||||
eset by a | ||||
user or otherwise lost its persistent data. In those cases, the user co | ||||
uld choose to | ||||
merge the new peer identity with the old one in the server. The alterna | ||||
tive is to | ||||
treat the device just like a new peer.</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="keyderivation" numbered="true" toc="default"> | ||||
<section title="Key derivation" anchor="keyderivation"> | <name>Key Derivation</name> | |||
<t> | <t>EAP-NOOB derives the EAP output values MSK and EMSK and other secret | |||
EAP-NOOB derives the EAP output values MSK and EMSK and other secret k | keying | |||
eying material from the output of an Ephemeral Elliptic Curve Diffie-Hellman (EC | material from the output of an Ephemeral Elliptic Curve Diffie-Hellman (E | |||
DHE) algorithm following the NIST specification <xref target="NIST-DH"/>. In NIS | CDHE) | |||
T terminology, we use a C(2e, 0s, ECC CDH) scheme, i.e., two ephemeral keys and | algorithm following the NIST specification <xref target="NIST-DH" format= | |||
no static keys. In the Initial and Reconnect Exchanges, the server and peer comp | "default"/>. | |||
ute the ECDHE shared secret Z as defined in <xref target="NIST-DH">section 6.1.2 | In NIST terminology, we use a C(2e, 0s, ECC CDH) scheme, i.e., two epheme | |||
of the NIST specification</xref>. In the Completion and Reconnect Exchanges, th | ral keys and | |||
e server and peer compute the secret keying material from Z with the one-step ke | no static keys. In the Initial Exchange and Reconnect Exchange, the serve | |||
y derivation function (KDF) defined in section 5.8.2.1 of the NIST specification | r and peer | |||
. The auxiliary function H is a hash function, and it is taken from the negotiat | compute the ECDHE shared secret Z, as defined in Section 6.1.2 of the NIS | |||
ed cryptosuite. | T specification <xref target="NIST-DH" />. In the Completion | |||
</t> | Exchange and | |||
<texttable title="Keying modes" anchor="keyingmodes"> | Reconnect Exchange, the server and peer compute the secret keying materia | |||
<ttcol>KeyingMode</ttcol> | l from Z | |||
<ttcol>Description</ttcol> | with the one-step key derivation function (KDF) defined in Section 5.8.2. | |||
<c>0</c><c>Completion Exchange (always with ECDHE)</c> | 1 of the NIST | |||
<c></c><c></c> | specification. The auxiliary function H is a hash function, and it is tak | |||
<c>1</c><c>Reconnect Exchange, rekeying without ECDHE</c> | en from the | |||
<c></c><c></c> | negotiated cryptosuite.</t> | |||
<c>2</c><c>Reconnect Exchange, rekeying with ECHDE, no change in crypt | <table anchor="keyingmodes" align="center"> | |||
osuite</c> | <name>Keying Modes</name> | |||
<c></c><c></c> | <thead> | |||
<c>3</c><c>Reconnect Exchange, rekeying with ECDHE, new cryptosuite ne | <tr> | |||
gotiated</c> | <th align="left">KeyingMode</th> | |||
</texttable> | <th align="left">Description</th> | |||
<t> | </tr> | |||
The key derivation has four different modes (KeyingMode), which are sp | </thead> | |||
ecified in <xref target="keyingmodes"/>. <xref target="table-keyderivationinput" | <tbody> | |||
/> defines the inputs to KDF in each KeyingMode. | <tr> | |||
</t> | <td align="left">0</td> | |||
<t> | <td align="left">Completion Exchange (always with ECDHE)</td> | |||
In the Completion Exchange (KeyingMode=0), the input Z comes from the | </tr> | |||
preceding Initial exchange. KDF takes some additional inputs (FixedInfo), for wh | <tr> | |||
ich we use the concatenation format defined in <xref target="NIST-DH">section 5. | <td align="left">1</td> | |||
8.2.1.1 of the NIST specification</xref>. FixedInfo consists of the AlgorithmId, | <td align="left">Reconnect Exchange, rekeying without ECDHE</td> | |||
PartyUInfo, PartyVInfo, and SuppPrivInfo fields. The first three fields are fix | </tr> | |||
ed-length bit strings, and SuppPrivInfo is a variable-length string with a one-b | <tr> | |||
yte Datalength counter. AlgorithmId is the fixed-length 8-byte ASCII string "EAP | <td align="left">2</td> | |||
-NOOB". The other input values are the server and peer nonces. In the Completion | <td align="left">Reconnect Exchange, rekeying with ECHDE, no chang | |||
Exchange, the inputs also include the secret nonce Noob from the OOB message. | e in | |||
</t> | cryptosuite</td> | |||
<t> | </tr> | |||
In the simplest form of the Reconnect Exchange (KeyingMode=1), fresh n | <tr> | |||
onces are exchanged but no ECDHE keys are sent. In this case, input Z to the KDF | <td align="left">3</td> | |||
is replaced with the shared key Kz from the persistent EAP-NOOB association. Th | <td align="left">Reconnect Exchange, rekeying with ECDHE, new cryp | |||
e result is rekeying without the computational cost of the ECDHE exchange, but a | tosuite | |||
lso without forward secrecy. | negotiated</td> | |||
</t> | </tr> | |||
<t> | </tbody> | |||
When forward secrecy is desired in the Reconnect Exchange (KeyingMode= | </table> | |||
2 or KeyingMode=3), both nonces and ECDHE keys are exchanged. Input Z is the fre | <t>The key derivation has four different modes (KeyingMode), which are s | |||
sh shared secret from the ECDHE exchange with PKs2 and PKp2. The inputs also inc | pecified in | |||
lude the shared secret Kz from the persistent EAP-NOOB association. This binds t | <xref target="keyingmodes" format="default"/>. <xref target="tab-keyderiv | |||
he rekeying output to the previously authenticated keys. | ationinput" | |||
</t> | format="default"/> defines the inputs to KDF in each KeyingMode.</t> | |||
<texttable title="Key derivation input" anchor="table-keyderivationinput | <t>In the Completion Exchange (KeyingMode=0), the input Z comes from the | |||
"> | preceding | |||
<ttcol>KeyingMode</ttcol> | Initial exchange. The KDF takes some additional inputs (FixedInfo), for w | |||
<ttcol>KDF input field</ttcol> | hich we use | |||
<ttcol>Value</ttcol> | the | |||
<ttcol>Length (bytes)</ttcol> | concatenation format defined in Section | |||
<c>0 Completion</c><c>Z</c><c>ECDHE shared secret from PKs and PKp</ | 5.8.2.1.1 of the NIST specification <xref target="NIST-DH" />. FixedInfo | |||
c><c>variable</c> | consists of the AlgorithmId, | |||
<c></c><c>AlgorithmId</c><c>"EAP-NOOB"</c><c>8</c> | PartyUInfo, PartyVInfo, and SuppPrivInfo fields. The first three fields a | |||
<c></c><c>PartyUInfo</c><c>Np</c><c>32</c> | re | |||
<c></c><c>PartyVInfo</c><c>Ns</c><c>32</c> | fixed-length bit strings, and SuppPrivInfo is a variable-length string wi | |||
<c></c><c>SuppPubInfo</c><c>(not allowed)</c><c></c> | th a one-byte | |||
<c></c><c>SuppPrivInfo</c><c>Noob</c><c>16</c> | Datalength counter. AlgorithmId is the fixed-length, 8-byte ASCII string | |||
<c></c><c></c><c></c><c></c> | "EAP-NOOB". | |||
<c>1</c><c>Z</c><c>Kz</c><c>32</c> | The other input values are the server and peer nonces. In the Completion | |||
<c>Reconnect,</c><c>AlgorithmId</c><c>"EAP-NOOB"</c><c>8</c> | Exchange, the | |||
<c>rekeying</c><c>PartyUInfo</c><c>Np2</c><c>32</c> | inputs also include the secret nonce Noob from the OOB message.</t> | |||
<c>without</c><c>PartyVInfo</c><c>Ns2</c><c>32</c> | <t>In the simplest form of the Reconnect Exchange (KeyingMode=1), fresh | |||
<c>ECDHE</c><c>SuppPubInfo</c><c>(not allowed)</c><c></c> | nonces are | |||
<c></c><c>SuppPrivInfo</c><c>(null)</c><c>0</c> | exchanged, but no ECDHE keys are sent. In this case, input Z to the KDF i | |||
<c></c><c></c><c></c><c></c> | s replaced | |||
<c>2 or 3 Reconnect,</c><c>Z</c><c>ECDHE shared secret from PKs2 and P | with the shared key Kz from the persistent EAP-NOOB association. The resu | |||
Kp2</c><c>variable</c> | lt is | |||
<c>rekeying,</c><c>AlgorithmId</c><c>"EAP-NOOB"</c><c>8</c> | rekeying without the computational cost of the ECDHE exchange but also wi | |||
<c>with ECDHE,</c><c>PartyUInfo</c><c>Np2</c><c>32</c> | thout | |||
<c>same or new</c><c>PartyVInfo</c><c>Ns2</c><c>32</c> | forward secrecy.</t> | |||
<c>cryptosuite</c><c>SuppPubInfo</c><c>(not allowed)</c><c></c> | <t>When forward secrecy is desired in the Reconnect Exchange (KeyingMode | |||
<c></c><c>SuppPrivInfo</c><c>Kz</c><c>32</c> | =2 or | |||
</texttable> | KeyingMode=3), both nonces and ECDHE keys are exchanged. Input Z is the f | |||
<t> | resh shared | |||
<xref target="table-keyderivationoutput"/> defines how the output byte | secret from the ECDHE exchange with PKs2 and PKp2. The inputs also includ | |||
s of KDF are used. In addition to the EAP output values MSK and EMSK, the server | e the shared | |||
and peer derive another shared secret key AMSK, which MAY be used for applicati | secret Kz from the persistent EAP-NOOB association. This binds the rekeyi | |||
on-layer security. Further output bytes are used internally by EAP-NOOB for the | ng output to | |||
message authentication keys (Kms, Kmp, Kms2, Kmp2). | the previously authenticated keys.</t> | |||
</t> | <table anchor="tab-keyderivationinput" align="center"> | |||
<t> | <name>Key Derivation Input</name> | |||
The Completion Exchange (KeyingMode=0) produces the shared secret Kz, | <thead> | |||
which the server and peer store in the persistent EAP-NOOB association. When a n | <tr> | |||
ew cryptosuite is negotiated in the Reconnect Exchange (KeyingMode=3), it simila | <th align="left">KeyingMode</th> | |||
rly produces a new Kz. In that case, the server and peer update both the cryptos | <th align="left">KDF input field</th> | |||
uite and Kz in the persistent EAP-NOOB association. Additionally, the peer store | <th align="left">Value</th> | |||
s the previous Cryptosuitep and Kz values in the CryptosuitepPrev and KzPrev fie | <th align="left">Length (bytes)</th> | |||
lds of the persistent EAP-NOOB association. | </tr> | |||
</t> | </thead> | |||
<texttable title="Key derivation output" anchor="table-keyderivationoutp | <tbody> | |||
ut"> | <tr> | |||
<ttcol>KeyingMode</ttcol> | <td align="left" rowspan="6">0 Completion</td> | |||
<ttcol>KDF output bytes</ttcol> | <td align="left">Z</td> | |||
<ttcol>Used as</ttcol> | <td align="left">ECDHE shared secret from PKs and PKp</td> | |||
<ttcol>Length (bytes)</ttcol> | <td align="left">variable</td> | |||
<c>0</c><c>0..63</c><c>MSK</c><c>64</c> | </tr> | |||
<c>Completion</c><c>64..127</c><c>EMSK</c><c>64</c> | <tr> | |||
<c></c><c>128..191</c><c>AMSK</c><c>64</c> | <td align="left">AlgorithmId</td> | |||
<c></c><c>192..223</c><c>MethodId</c><c>32</c> | <td align="left">"EAP-NOOB"</td> | |||
<c></c><c>224..255</c><c>Kms</c><c>32</c> | <td align="left">8</td> | |||
<c></c><c>256..287</c><c>Kmp</c><c>32</c> | </tr> | |||
<c></c><c>288..319</c><c>Kz</c><c>32</c> | <tr> | |||
<c></c><c></c><c></c><c></c> | <td align="left">PartyUInfo</td> | |||
<c>1 or 2</c><c>0..63</c><c>MSK</c><c>64</c> | <td align="left">Np</td> | |||
<c>Reconnect,</c><c>64..127</c><c>EMSK</c><c>64</c> | <td align="left">32</td> | |||
<c>rekeying</c><c>128..191</c><c>AMSK</c><c>64</c> | </tr> | |||
<c>without ECDHE,</c><c>192..223</c><c>MethodId</c><c>32</c> | <tr> | |||
<c>or with ECDHE</c><c>224..255</c><c>Kms2</c><c>32</c> | <td align="left">PartyVInfo</td> | |||
<c>and unchanged</c><c>256..287</c><c>Kmp2</c><c>32</c> | <td align="left">Ns</td> | |||
<c>cryptosuite</c><c></c><c></c><c></c> | <td align="left">32</td> | |||
<c></c><c></c><c></c><c></c> | </tr> | |||
<c></c><c></c><c></c><c></c> | <tr> | |||
<c>3 Reconnect,</c><c>0..63</c><c>MSK</c><c>64</c> | <td align="left">SuppPubInfo</td> | |||
<c>rekeying</c><c>64..127</c><c>EMSK</c><c>64</c> | <td align="left">(not allowed)</td> | |||
<c>with ECDHE,</c><c>128..191</c><c>AMSK</c><c>64</c> | <td align="left"/> | |||
<c>new cryptosuite</c><c>192..223</c><c>MethodId</c><c>32</c> | </tr> | |||
<c></c><c>224..255</c><c>Kms2</c><c>32</c> | <tr> | |||
<c></c><c>256..287</c><c>Kmp2</c><c>32</c> | <td align="left">SuppPrivInfo</td> | |||
<c></c><c>288..319</c><c>Kz</c><c>32</c> | <td align="left">Noob</td> | |||
</texttable> | <td align="left">16</td> | |||
<t> | </tr> | |||
Finally, every EAP method must export a Server-Id, Peer-Id, and Sessio | <tr> | |||
n-Id <xref target="RFC5247"/>. In EAP-NOOB, the exported Peer-Id is the PeerId w | <td align="left" rowspan="6">1 Reconnect, rekeying without ECDHE</ | |||
hich the server has assigned to the peer. The exported Server-Id is a zero-lengt | td> | |||
h string (i.e., null string) because EAP-NOOB neither knows nor assigns any serv | <td align="left">Z</td> | |||
er identifier. The exported Session-Id is created by concatenating the Type-Code | <td align="left">Kz</td> | |||
xxx (TBA) with the MethodId, which is obtained from the KDF output as shown in | <td align="left">32</td> | |||
<xref target="table-keyderivationoutput"/>. | </tr> | |||
</t> | <tr> | |||
<td align="left">AlgorithmId</td> | ||||
<td align="left">"EAP-NOOB"</td> | ||||
<td align="left">8</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">PartyUInfo</td> | ||||
<td align="left">Np2</td> | ||||
<td align="left">32</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">PartyVInfo</td> | ||||
<td align="left">Ns2</td> | ||||
<td align="left">32</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">SuppPubInfo</td> | ||||
<td align="left">(not allowed)</td> | ||||
<td align="left"/> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">SuppPrivInfo</td> | ||||
<td align="left">(null)</td> | ||||
<td align="left">0</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left" rowspan="6">2 or 3 Reconnect, rekeying, with ECDH | ||||
E, same or new cryptosuite</td> | ||||
<td align="left">Z</td> | ||||
<td align="left">ECDHE shared secret from PKs2 and PKp2</td> | ||||
<td align="left">variable</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">AlgorithmId</td> | ||||
<td align="left">"EAP-NOOB"</td> | ||||
<td align="left">8</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">PartyUInfo</td> | ||||
<td align="left">Np2</td> | ||||
<td align="left">32</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">PartyVInfo</td> | ||||
<td align="left">Ns2</td> | ||||
<td align="left">32</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">SuppPubInfo</td> | ||||
<td align="left">(not allowed)</td> | ||||
<td align="left"/> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">SuppPrivInfo</td> | ||||
<td align="left">Kz</td> | ||||
<td align="left">32</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t><xref target="tab-keyderivationoutput" format="default"/> defines how | ||||
the output | ||||
bytes of the KDF are used. In addition to the EAP output values MSK and E | ||||
MSK, the | ||||
server and peer derive another shared secret key AMSK (Application Main S | ||||
ession Key), | ||||
which <bcp14>MAY</bcp14> be used for | ||||
application-layer security. Further output bytes are used internally by E | ||||
AP-NOOB for | ||||
the message authentication keys (Kms, Kmp, Kms2, and Kmp2).</t> | ||||
<t>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 prod | ||||
uces 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 previo | ||||
us | ||||
Cryptosuitep and Kz values in the CryptosuitepPrev and KzPrev fields of t | ||||
he persistent | ||||
EAP-NOOB association.</t> | ||||
<table anchor="tab-keyderivationoutput" align="center"> | ||||
<name>Key Derivation Output</name> | ||||
<thead> | ||||
<tr> | ||||
<th align="left">KeyingMode</th> | ||||
<th align="left">KDF output bytes</th> | ||||
<th align="left">Used as</th> | ||||
<th align="left">Length (bytes)</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td align="left" rowspan="7">0 Completion</td> | ||||
<td align="left">0..63</td> | ||||
<td align="left">MSK</td> | ||||
<td align="left">64</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">64..127</td> | ||||
<td align="left">EMSK</td> | ||||
<td align="left">64</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">128..191</td> | ||||
<td align="left">AMSK</td> | ||||
<td align="left">64</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">192..223</td> | ||||
<td align="left">MethodId</td> | ||||
<td align="left">32</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">224..255</td> | ||||
<td align="left">Kms</td> | ||||
<td align="left">32</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">256..287</td> | ||||
<td align="left">Kmp</td> | ||||
<td align="left">32</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">288..319</td> | ||||
<td align="left">Kz</td> | ||||
<td align="left">32</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left" rowspan="6">1 or 2 Reconnect, rekeying without EC | ||||
DHE, or with ECDHE and unchanged cryptosuite</td> | ||||
<td align="left">0..63</td> | ||||
<td align="left">MSK</td> | ||||
<td align="left">64</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">64..127</td> | ||||
<td align="left">EMSK</td> | ||||
<td align="left">64</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">128..191</td> | ||||
<td align="left">AMSK</td> | ||||
<td align="left">64</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">192..223</td> | ||||
<td align="left">MethodId</td> | ||||
<td align="left">32</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">224..255</td> | ||||
<td align="left">Kms2</td> | ||||
<td align="left">32</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">256..287</td> | ||||
<td align="left">Kmp2</td> | ||||
<td align="left">32</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left" rowspan="7">3 Reconnect, rekeying with ECDHE, new | ||||
cryptosuite</td> | ||||
<td align="left">0..63</td> | ||||
<td align="left">MSK</td> | ||||
<td align="left">64</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">64..127</td> | ||||
<td align="left">EMSK</td> | ||||
<td align="left">64</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">128..191</td> | ||||
<td align="left">AMSK</td> | ||||
<td align="left">64</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">192..223</td> | ||||
<td align="left">MethodId</td> | ||||
<td align="left">32</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">224..255</td> | ||||
<td align="left">Kms2</td> | ||||
<td align="left">32</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">256..287</td> | ||||
<td align="left">Kmp2</td> | ||||
<td align="left">32</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">288..319</td> | ||||
<td align="left">Kz</td> | ||||
<td align="left">32</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>Finally, every EAP method must export a Server-Id, Peer-Id, and Sessi | ||||
on-Id <xref | ||||
target="RFC5247" format="default"/>. In EAP-NOOB, the exported Peer-Id is | ||||
the PeerId | ||||
that the server has assigned to the peer. The exported Server-Id is a zer | ||||
o-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 <xref | ||||
target="tab-keyderivationoutput" format="default"/>.</t> | ||||
</section> | </section> | |||
<section anchor="failure" numbered="true" toc="default"> | ||||
<section title="Error handling" anchor="failure"> | <name>Error Handling</name> | |||
<t> | <t>Various error conditions in EAP-NOOB are handled by sending an error | |||
Various error conditions in EAP-NOOB are handled by sending an error n | notification | |||
otification message (Type=0) instead of a next EAP request or response message. | message (Type=0) instead of a next EAP request or response message. Both | |||
Both the EAP server and the peer may send the error notification, as shown in <x | the EAP | |||
ref target="fig-servererror"/> and <xref target="fig-peererror"/>. After sending | server and the peer may send the error notification, as shown in Figures | |||
or receiving an error notification, the server MUST send an EAP-Failure (as req | <xref | |||
uired by <xref target="RFC3748"/> section 4.2). The notification MAY contain an | target="fig-servererror" format="counter"/> and <xref target="fig-peererr | |||
ErrorInfo field, which is a UTF-8 encoded text string with a maximum length of 5 | or" | |||
00 bytes. It is used for sending descriptive information about the error for log | format="counter"/>. After sending or receiving an error notification, the | |||
ging and debugging purposes. | server | |||
</t> | <bcp14>MUST</bcp14> send an EAP-Failure (as required by <xref target="RFC | |||
<t> | 3748" | |||
<figure anchor="fig-servererror" title="Error notification from server | sectionFormat="comma" section="4.2"/>). The notification <bcp14>MAY</bcp1 | |||
to peer"> | 4> contain an | |||
<artwork align="center"> | ErrorInfo field, which is a UTF-8-encoded text string with a maximum leng | |||
<![CDATA[ | th of 500 | |||
bytes. It is used for sending descriptive information about the error for | ||||
logging and | ||||
debugging purposes.</t> | ||||
<figure anchor="fig-servererror"> | ||||
<name>Error Notification from Server to Peer</name> | ||||
<artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
EAP Peer EAP Server | EAP Peer EAP Server | |||
... ... | ... ... | |||
| | | | | | |||
|<----------- EAP-Request/EAP-NOOB ----------------| | |<----------- EAP-Request/EAP-NOOB ----------------| | |||
| (Type=0,[PeerId],ErrorCode,[ErrorInfo]) | | | (Type=0,[PeerId],ErrorCode,[ErrorInfo]) | | |||
| | | | | | |||
| | | | | | |||
|<----------- EAP-Failure -------------------------| | |<----------- EAP-Failure -------------------------| | |||
| | | | | | |||
]]> | ]]></artwork> | |||
</artwork> | </figure> | |||
</figure> | <figure anchor="fig-peererror"> | |||
</t> | <name>Error Notification from Peer to Server</name> | |||
<t> | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
<figure anchor="fig-peererror" title="Error notification from peer to | ||||
server"> | ||||
<artwork align="center"> | ||||
<![CDATA[ | ||||
EAP Peer EAP Server | EAP Peer EAP Server | |||
... ... | ... ... | |||
| | | | | | |||
|------------ EAP-Response/EAP-NOOB -------------->| | |------------ EAP-Response/EAP-NOOB -------------->| | |||
| (Type=0,[PeerId],ErrorCode,[ErrorInfo]) | | | (Type=0,[PeerId],ErrorCode,[ErrorInfo]) | | |||
| | | | | | |||
| | | | | | |||
|<----------- EAP-Failure -------------------------| | |<----------- EAP-Failure -------------------------| | |||
| | | | | | |||
]]> | ]]></artwork> | |||
</artwork> | </figure> | |||
</figure> | <t>After the exchange fails due to an error notification, the server and | |||
</t> | peer set the | |||
<t> | association state as follows. In the Initial Exchange, both the sender an | |||
After the exchange fails due to an error notification, the server and | d recipient | |||
peer set the association state as follows. In the Initial Exchange, both the sen | of the error notification <bcp14>MUST</bcp14> set the association state t | |||
der and recipient of the error notification MUST set the association state to th | o the | |||
e Unregistered (0) state. In the Waiting and Completion Exchanges, each side MUS | Unregistered (0) state. In the Waiting Exchange and Completion Exchange, | |||
T remain in its old state as if the failed exchange had not taken place, with th | each side | |||
e exception that the recipient of error code 2003 processes it as specified in < | <bcp14>MUST</bcp14> remain in its old state as if the failed exchange had | |||
xref target="completionexchange"/>. In the Reconnect Exchange, both sides MUST s | not taken | |||
et the association state to the Reconnecting (3) state. | place, with the exception that the recipient of error code 2003 processes | |||
</t> | it as | |||
<t> | specified in <xref target="completionexchange" format="default"/>. In the | |||
Errors that occur in the OOB channel are not explicitly notified in-ba | Reconnect | |||
nd. | Exchange, both sides <bcp14>MUST</bcp14> set the association state to the | |||
</t> | Reconnecting | |||
(3) state.</t> | ||||
<section title="Invalid messages" anchor="invalidmessages"> | <t>Errors that occur in the OOB channel are not explicitly notified in-b | |||
<t> | and.</t> | |||
If the NAI structure is invalid, the server SHOULD send the error co | <section anchor="invalidmessages" numbered="true" toc="default"> | |||
de 1001 to the peer. The recipient of an EAP-NOOB request or response SHOULD sen | <name>Invalid Messages</name> | |||
d the following error codes back to the sender: 1002 if it cannot parse the mess | <t>If the NAI structure is invalid, the server <bcp14>SHOULD</bcp14> s | |||
age as a JSON object or the top-level JSON object has missing or unrecognized me | end the error | |||
mbers; 1003 if a data field has an invalid value, such as an integer out of rang | code 1001 to the peer. The recipient of an EAP-NOOB request or response | |||
e, and there is no more specific error code available; 1004 if the received mess | <bcp14>SHOULD</bcp14> send the following error codes back to the sender | |||
age type was unexpected in the current state; 2004 if the PeerId has an unexpect | : 1002 if it | |||
ed value; 2003 if the NoobId is not recognized; and 1005 if the ECDHE key is inv | cannot parse the message as a JSON object or the top-level JSON object | |||
alid. | has missing | |||
</t> | or unrecognized members; 1003 if a data field has an invalid value, suc | |||
h as an | ||||
integer out of range, and there is no more specific error code availabl | ||||
e; 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.</t> | ||||
</section> | </section> | |||
<section anchor="unwantedpeer" numbered="true" toc="default"> | ||||
<section title="Unwanted peer" anchor="unwantedpeer"> | <name>Unwanted Peer</name> | |||
<t> | <t>The preferred way for the EAP server to rate limit EAP-NOOB connect | |||
The preferred way for the EAP server to rate limit EAP-NOOB connecti | ions from a | |||
ons from a peer is to use the SleepTime parameter in the Waiting Exchange. Howev | peer is to use the SleepTime parameter in the Waiting Exchange. However | |||
er, if the EAP server receives repeated EAP-NOOB connections from a peer which a | , if the EAP | |||
pparently should not connect to this server, the server MAY indicate that the co | server receives repeated EAP-NOOB connections from a peer that apparent | |||
nnections are unwanted by sending the error code 2001. After receiving this erro | ly should | |||
r message, the peer MAY refrain from reconnecting to the same EAP server and, if | not connect to this server, the server <bcp14>MAY</bcp14> indicate that | |||
possible, both the EAP server and peer SHOULD indicate this error condition to | the | |||
the user or server administrator. However, in order to avoid persistent denial o | connections are unwanted by sending the error code 2001. After receivin | |||
f service, peer devices that are unable to alert a user SHOULD continue to try t | g this error | |||
o reconnect infrequently (e.g., approximately every 3600 seconds). | message, the peer <bcp14>MAY</bcp14> refrain from reconnecting to the s | |||
</t> | ame EAP | |||
server, and, if possible, both the EAP server and peer <bcp14>SHOULD</b | ||||
cp14> | ||||
indicate | ||||
this error condition to the user or server administrator. However, in o | ||||
rder to avoid | ||||
persistent denial of service, peer devices that are unable to alert a u | ||||
ser | ||||
<bcp14>SHOULD</bcp14> continue to try to reconnect infrequently (e.g., | ||||
approximately | ||||
every 3600 seconds). </t> | ||||
</section> | </section> | |||
<section anchor="statemismatch" numbered="true" toc="default"> | ||||
<section title="State mismatch" anchor="statemismatch"> | <name>State Mismatch</name> | |||
<t> | <t>In the states indicated by "-" in <xref target="tab-exchanges" form | |||
In the states indicated by "-" in <xref target="table-exchanges"/> i | at="default"/> | |||
n <xref target="exchangeappendix"/>, user action is required to reset the associ | in <xref target="exchangeappendix" format="default"/>, user action is r | |||
ation state or to recover it, for example, from backup storage. In those cases, | equired to | |||
the server sends the error code 2002 to the peer. If possible, both the EAP serv | reset the association state or to recover it, for example, from backup | |||
er and peer SHOULD indicate this error condition to the user or server administr | storage. In | |||
ator. | those cases, the server sends the error code 2002 to the peer. If possi | |||
</t> | ble, both the | |||
EAP server and peer <bcp14>SHOULD</bcp14> indicate this error condition | ||||
to the user | ||||
or server administrator.</t> | ||||
</section> | </section> | |||
<section anchor="negotiationfailure" numbered="true" toc="default"> | ||||
<section title="Negotiation failure" anchor="negotiationfailure"> | <name>Negotiation Failure</name> | |||
<t> | <t>If there is no matching protocol version, the peer sends the error | |||
If there is no matching protocol version, the peer sends the error c | code 3001 to | |||
ode 3001 to the server. If there is no matching cryptosuite, the peer sends the | the server. If there is no matching cryptosuite, the peer sends the err | |||
error code 3002 to the server. If there is no matching OOB direction, the peer s | or code 3002 | |||
ends the error code 3003 to the server. | to the server. If there is no matching OOB direction, the peer sends th | |||
</t> | e error code | |||
<t> | 3003 to the server.</t> | |||
In practice, there is no way of recovering from these errors without | <t>In practice, there is no way of recovering from these errors withou | |||
software or hardware changes. If possible, both the EAP server and peer SHOULD | t software or | |||
indicate these error conditions to the user. | hardware changes. If possible, both the EAP server and peer <bcp14>SHOU | |||
</t> | LD</bcp14> | |||
indicate these error conditions to the user.</t> | ||||
</section> | </section> | |||
<section anchor="cryptofailure" numbered="true" toc="default"> | ||||
<section title="Cryptographic verification failure" anchor="cryptofailur | <name>Cryptographic Verification Failure</name> | |||
e"> | <t>If the receiver of the OOB message detects an unrecognized PeerId o | |||
<t> | r incorrect | |||
If the receiver of the OOB message detects an unrecognized PeerId or | fingerprint (Hoob) in the OOB message, the receiver <bcp14>MUST</bcp14> | |||
incorrect fingerprint (Hoob) in the OOB message, the receiver MUST remain in th | remain in | |||
e Waiting for OOB state (1) as if no OOB message was received. The receiver SHOU | the Waiting for OOB (1) state as if no OOB message was received. The re | |||
LD indicate the failure to accept the OOB message to the user. No in-band error | ceiver | |||
message is sent. | <bcp14>SHOULD</bcp14> indicate the failure to accept the OOB message to | |||
</t> | the user. No | |||
<t> | in-band error message is sent.</t> | |||
Note that if the OOB message was delivered from the server to the pe | <t>Note that if the OOB message was delivered from the server to the p | |||
er and the peer does not recognize the PeerId, the likely cause is that the user | eer and the | |||
has unintentionally delivered the OOB message to the wrong peer device. If poss | peer does not recognize the PeerId, the likely cause is that the user h | |||
ible, the peer SHOULD indicate this to the user; however, the peer device may no | as | |||
t have the capability for many different error indications to the user, and it M | unintentionally delivered the OOB message to the wrong peer device. If | |||
AY use the same indication as in the case of an incorrect fingerprint. | possible, the | |||
</t> | peer <bcp14>SHOULD</bcp14> indicate this to the user; however, the peer | |||
<t> | device may | |||
The rationale for the above is that the invalid OOB message could ha | not have the capability for many different error indications to the use | |||
ve been presented to the receiver by mistake or intentionally by a malicious par | r, and it | |||
ty and, thus, it should be ignored in the hope that the honest user will soon de | <bcp14>MAY</bcp14> use the same indication as in the case of an incorre | |||
liver a correct OOB message. | ct | |||
</t> | fingerprint.</t> | |||
<t> | <t>The rationale for the above is that the invalid OOB message could h | |||
If the EAP server or peer detects an incorrect message authenticatio | ave been | |||
n code (MACs, MACp, MACs2, MACp2), it sends the error code 4001 to the other sid | presented to the receiver by mistake or intentionally by a malicious pa | |||
e. As specified in the beginning of <xref target="failure"/>, the failed Complet | rty; | |||
ion Exchange will not result in server or peer state changes while an error in t | thus, it should be ignored in the hope that the honest user will soon d | |||
he Reconnect Exchange will put both sides to the Reconnecting (3) state and thus | eliver a | |||
lead to another reconnect attempt. | correct OOB message.</t> | |||
</t> | <t>If the EAP server or peer detects an incorrect message authenticati | |||
<t> | on code (MACs, | |||
The rationale for this is that the invalid cryptographic message may | MACp, MACs2, or MACp2), it sends the error code 4001 to the other side. | |||
have been spoofed by a malicious party and, thus, it should be ignored. In part | As | |||
icular, a spoofed message on the in-band channel should not force the honest use | specified in | |||
r to perform the OOB Step again. In practice, however, the error may be caused b | the beginning of <xref target="failure" format="default"/>, the failed | |||
y other failures, such as a software bug. For this reason, the EAP server MAY li | Completion | |||
mit the rate of peer connections with SleepTime after the above error. Also, the | Exchange will not result in server or peer state changes, while an erro | |||
re SHOULD be a way for the user to reset the peer to the Unregistered state (0), | r in the | |||
so that the OOB Step can be repeated as the last resort. | Reconnect Exchange will put both sides to the Reconnecting (3) state an | |||
</t> | d thus lead | |||
to another reconnect attempt.</t> | ||||
<t>The rationale for this is that the invalid cryptographic message ma | ||||
y 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 ot | ||||
her failures, | ||||
such as a software bug. For this reason, the EAP server <bcp14>MAY</bcp | ||||
14> limit the | ||||
rate of peer connections with SleepTime after the above error. Also, th | ||||
ere | ||||
<bcp14>SHOULD</bcp14> be a way for the user to reset the peer to the Un | ||||
registered | ||||
(0) state so that the OOB Step can be repeated as the last resort.</t> | ||||
</section> | </section> | |||
<section anchor="appfailure" numbered="true" toc="default"> | ||||
<section title="Application-specific failure" anchor="appfailure"> | <name>Application-Specific Failure</name> | |||
<t> | <t>Applications <bcp14>MAY</bcp14> define new error messages for failu | |||
Applications MAY define new error messages for failures that are spe | res that are | |||
cific to the application or to one type of OOB channel. They MAY also use the ge | specific to the application or to one type of OOB channel. They <bcp14> | |||
neric application-specific error code 5001, or the error codes 5002 and 5004, wh | MAY</bcp14> | |||
ich have been reserved for indicating invalid data in the ServerInfo and PeerInf | also use the generic application-specific error code 5001 or the error | |||
o fields, respectively. Additionally, anticipating OOB channels that make use of | codes 5002 | |||
a URL, the error code 5003 has been reserved for indicating an invalid server U | and 5004, which have been reserved for indicating invalid data in the S | |||
RL. | erverInfo and | |||
</t> | PeerInfo fields, respectively. Additionally, anticipating OOB channels | |||
that make use | ||||
of a URL, the error code 5003 has been reserved for indicating an inval | ||||
id server | ||||
URL.</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="serverinfo-peerinfo-meaning" numbered="true" toc="default"> | ||||
<section title="ServerInfo and PeerInfo contents" anchor="serverinfo-peerinf | <name>ServerInfo and PeerInfo Contents</name> | |||
o-meaning"> | <t>The ServerInfo and PeerInfo fields in the Initial Exchange and Reconnec | |||
<t> | t Exchange | |||
The ServerInfo and PeerInfo fields in the Initial Exchange and Reconnect | enable the server and peer, respectively, to send information about themse | |||
Exchange enable the server and peer, respectively, to send information about th | lves to the | |||
emselves to the other endpoint. They contain JSON objects whose structure may be | other endpoint. They contain JSON objects whose structure may be specified | |||
specified separately for each application and each type of OOB channel. ServerI | separately | |||
nfo and PeerInfo MAY contain auxiliary data needed for the OOB channel messaging | for each application and each type of OOB channel. ServerInfo and PeerInfo | |||
and for EAP channel binding (see <xref target="channel-binding"/>). This sectio | <bcp14>MAY</bcp14> contain auxiliary data needed for the OOB channel messa | |||
n describes the optional initial data fields for ServerInfo and PeerInfo registe | ging and for | |||
red by this specification. Further specifications may request new application-sp | EAP channel binding (see <xref target="channel-binding" format="default"/> | |||
ecific ServerInfo and PeerInfo data fields from IANA (see <xref target="serverin | ). This | |||
fo-data-fields"/> and <xref target="peerinfo-data-fields"/>). | section describes the optional initial data fields for ServerInfo and Peer | |||
Info | ||||
registered by this specification. Further specifications may request new | ||||
application-specific ServerInfo and PeerInfo data fields from IANA (see Se | ||||
ctions <xref | ||||
target="serverinfo-data-fields" format="counter"/> and <xref | ||||
target="peerinfo-data-fields" format="counter"/>). | ||||
</t> | </t> | |||
<texttable title="ServerInfo data fields" anchor="table-serverinfo-meaning | <table anchor="tab-serverinfo-meaning" align="center"> | |||
"> | <name>ServerInfo Data Fields</name> | |||
<ttcol>Data Field</ttcol> | <thead> | |||
<ttcol>Description</ttcol> | <tr> | |||
<c>Type</c><c>Type-tag string that can be used by the peer as a hint for | <th align="left">Data Field</th> | |||
how to interpret the ServerInfo contents.</c> | <th align="left">Description</th> | |||
<c></c><c></c> | </tr> | |||
<c>ServerName</c><c>String that may be used to aid human identification | </thead> | |||
of the server.</c> | <tbody> | |||
<c></c><c></c> | <tr> | |||
<c>ServerURL</c><c>Prefix string when the OOB message is formatted as a | <td align="left">Type</td> | |||
URL, as suggested in <xref target="urloob"/>.</c> | <td align="left">Type-tag string that can be used by the peer as a h | |||
<c></c><c></c> | int for how to | |||
<c>SSIDList</c><c>List of IEEE 802.11 wireless network identifier (SSID) | interpret the ServerInfo contents.</td> | |||
strings used for roaming support, as suggested in <xref target="roaming"/>. JSO | </tr> | |||
N array of ASCII encoded SSID strings.</c> | <tr> | |||
<c></c><c></c> | <td align="left">ServerName</td> | |||
<c>Base64SSIDList</c><c>List of IEEE 802.11 wireless network identifier | <td align="left">String that may be used to aid human identification | |||
(SSID) strings used for roaming support, as suggested in <xref target="roaming"/ | of the | |||
>. JSON array of SSIDs, each of which is base64url encoded without padding. Peer | server.</td> | |||
s SHOULD send at most one of the fields SSIDList and Base64SSIDList in PeerInfo, | </tr> | |||
and the server SHOULD ignore SSIDList if Base64SSIDList is included.</c> | <tr> | |||
</texttable> | <td align="left">ServerURL</td> | |||
<texttable title="PeerInfo data fields" anchor="table-peerinfo-meaning"> | <td align="left">Prefix string when the OOB message is formatted as | |||
<ttcol>Data Field</ttcol> | a URL, as | |||
<ttcol>Description</ttcol> | suggested in <xref target="urloob" format="default"/>.</td> | |||
<c>Type</c><c>Type-tag string that can be used by the server as a hint f | </tr> | |||
or how to interpret the PeerInfo contents.</c> | <tr> | |||
<c></c><c></c> | <td align="left">SSIDList</td> | |||
<c>PeerName</c><c>String that may be used to aid human identification of | <td align="left">List of IEEE 802.11 wireless network service set id | |||
the peer.</c> | entifier | |||
<c></c><c></c> | (SSID) strings | |||
<c>Manufacturer</c><c>Manufacturer or brand string.</c> | used for roaming support, as suggested in <xref target="roaming" | |||
<c></c><c></c> | format="default"/>. JSON array of ASCII-encoded SSID strings.</td> | |||
<c>Model</c><c>Manufacturer-specified model string.</c> | </tr> | |||
<c></c><c></c> | <tr> | |||
<c>SerialNumber</c><c>Manufacturer-assigned serial number.</c> | <td align="left">Base64SSIDList</td> | |||
<c></c><c></c> | <td align="left">List of IEEE 802.11 wireless network identifier (SS | |||
<c>MACAddress</c><c>Peer link-layer identifier (EUI-48) in the 12-digit | ID) strings | |||
base-16 form <xref target="EUI-48"/>. The string MAY be in upper or lower case a | used for roaming support, as suggested in <xref target="roaming" | |||
nd MAY include additional colon ':' or dash '-' characters that MUST be ignored | format="default"/>. JSON array of SSIDs, each of which is base64url-e | |||
by the server.</c> | ncoded | |||
<c></c><c></c> | without padding. Peers <bcp14>SHOULD</bcp14> send at most one of the | |||
<c>SSID</c><c>IEEE 802.11 network SSID for channel binding. The SSID is | fields | |||
an ASCII string.</c> | SSIDList and Base64SSIDList in PeerInfo, and the server <bcp14>SHOULD | |||
<c></c><c></c> | </bcp14> | |||
<c>Base64SSID</c><c>IEEE 802.11 network SSID for channel binding. The SS | ignore SSIDList if Base64SSIDList is included.</td> | |||
ID is base64url encoded. Peer SHOULD send at most one of the fields SSID and Bas | </tr> | |||
e64SSID in PeerInfo, and the server SHOULD ignore SSID if Base64SSID is included | </tbody> | |||
.</c> | </table> | |||
<c></c><c></c> | <table anchor="tab-peerinfo-meaning" align="center"> | |||
<c>BSSID</c><c>Wireless network BSSID (EUI-48) in the 12-digit base-16 f | <name>PeerInfo Data Fields</name> | |||
orm <xref target="EUI-48"/> for channel binding. The string MAY be in upper or l | <thead> | |||
ower case and MAY include additional colon ':' or dash '-' characters that MUST | <tr> | |||
be ignored by the server.</c> | <th align="left">Data Field</th> | |||
<c></c><c></c> | <th align="left">Description</th> | |||
</texttable> | </tr> | |||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td align="left">Type</td> | ||||
<td align="left">Type-tag string that can be used by the server as a | ||||
hint for how | ||||
to interpret the PeerInfo contents.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">PeerName</td> | ||||
<td align="left">String that may be used to aid human identification | ||||
of the | ||||
peer.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Manufacturer</td> | ||||
<td align="left">Manufacturer or brand string.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Model</td> | ||||
<td align="left">Manufacturer-specified model string.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">SerialNumber</td> | ||||
<td align="left">Manufacturer-assigned serial number.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">MACAddress</td> | ||||
<td align="left">Peer link-layer 48-bit extended unique identifier ( | ||||
EUI-48) in | ||||
the 12-digit base-16 form | ||||
<xref target="EUI-48" format="default"/>. The string <bcp14>MAY</bcp1 | ||||
4> be in | ||||
upper or lower case and <bcp14>MAY</bcp14> include additional colon ' | ||||
:' or dash | ||||
'-' characters that <bcp14>MUST</bcp14> be ignored by the server.</td | ||||
> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">SSID</td> | ||||
<td align="left">IEEE 802.11 network SSID for channel binding. The S | ||||
SID is an | ||||
ASCII string.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Base64SSID</td> | ||||
<td align="left">IEEE 802.11 network SSID for channel binding. The S | ||||
SID is | ||||
base64url encoded. Peer <bcp14>SHOULD</bcp14> send at most one of the | ||||
fields SSID | ||||
and Base64SSID in PeerInfo, and the server <bcp14>SHOULD</bcp14> igno | ||||
re SSID if | ||||
Base64SSID is included.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">BSSID</td> | ||||
<td align="left">Wireless network basic service set identifier (BSSI | ||||
D) (EUI-48) | ||||
in the 12-digit base-16 form | ||||
<xref target="EUI-48" format="default"/> for channel binding. The str | ||||
ing | ||||
<bcp14>MAY</bcp14> be in upper or lower case and <bcp14>MAY</bcp14> i | ||||
nclude | ||||
additional colon ':' or dash '-' characters that <bcp14>MUST</bcp14> | ||||
be ignored by | ||||
the server.</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | </section> | |||
<section anchor="iana" numbered="true" toc="default"> | ||||
<section title="IANA Considerations" anchor="iana"> | <name>IANA Considerations</name> | |||
<t> | <t>This section provides information | |||
This section provides guidance to the Internet Assigned Numbers Authorit | regarding registration of values related to the EAP-NOOB method, in accord | |||
y (IANA) regarding registration of values related to the EAP-NOOB protocol, in a | ance with | |||
ccordance with <xref target="RFC8126"/>. | <xref target="RFC8126" format="default"/>.</t> | |||
</t> | <t>The EAP Method Type for EAP-NOOB (value 56) has been assigned in the "M | |||
<t> | ethod Types" | |||
The EAP Method Type number for EAP-NOOB needs to be assigned in the Meth | subregistry of the "Extensible Authentication Protocol (EAP) Registry".</t | |||
od Types sub-registry of the Extensible Authentication Protocol (EAP) registry ( | > | |||
requested value = 56). | <t>Per this memo, IANA has created and will maintain a new registry entitl | |||
</t> | ed "Nimble | |||
<t> | Out-of-Band Authentication for EAP Parameters (EAP-NOOB)" in the Extensibl | |||
This memo also requires IANA to create and maintain a new registry entit | e Authentication Protocol | |||
led "Nimble out-of-band authentication for EAP Parameters" in the Extensible Aut | (EAP) category. Also, IANA has created and will maintain the subregistries | |||
hentication Protocol (EAP) registry. IANA is also requested to create and mainta | defined in | |||
in sub-registries defined in the following subsections. | the following subsections. </t> | |||
</t> | <section anchor="cryptosuites" numbered="true" toc="default"> | |||
<section title="Cryptosuites" anchor="cryptosuites"> | <name>Cryptosuites</name> | |||
<t> | <t>IANA has created and will maintain a new subregistry entitled "EAP-NO | |||
IANA is requested to create and maintain a new sub-registry entitled | OB | |||
"EAP-NOOB Cryptosuites" in the "Nimble out-of-band authentication for EAP Parame | Cryptosuites" in the "Nimble Out-of-Band Authentication for EAP Parameter | |||
ters" registry. Cryptosuites are identified by an integer. Each cryptosuite MUST | s (EAP-NOOB)" registry. | |||
specify an ECDHE curve for the key exchange, encoding of the ECDHE public key a | Cryptosuites are identified by an integer. Each cryptosuite <bcp14>MUST</ | |||
s a JWK object, and a cryptographic hash function for the fingerprint and HMAC c | bcp14> | |||
omputation and key derivation. The hash value output by the cryptographic hash f | specify an ECDHE curve for the key exchange, encoding of the ECDHE public | |||
unction MUST be at least 32 bytes in length. The initial values for this registr | key as a JWK | |||
y are: | object, and a cryptographic hash function for the fingerprint and HMAC co | |||
</t> | mputation and | |||
<texttable title="EAP-NOOB cryptosuites" anchor="table-cryptosuites"> | key derivation. The hash value output by the cryptographic hash function | |||
<ttcol>Cryptosuite</ttcol> | <bcp14>MUST</bcp14> be at least 32 bytes in length. The initial values fo | |||
<ttcol>Algorithms</ttcol> | r this | |||
<c>1</c><c>ECDHE curve Curve25519 <xref target="RFC7748"/>, public-key | registry are:</t> | |||
format <xref target="RFC7517"/>, hash function SHA-256 <xref target="RFC6234"/> | <table anchor="tab-cryptosuites" align="center"> | |||
. The JWK encoding of Curve25519 public key is defined in <xref target="RFC8037" | <name>EAP-NOOB Cryptosuites</name> | |||
/>. For clarity: the "crv" parameter is "X25519", the "kty" parameter is "OKP", | <thead> | |||
and the public-key encoding contains only an x-coordinate.</c> | <tr> | |||
<c>2</c><c>ECDHE curve NIST P-256 <xref target="FIPS186-4"/>, public-k | <th align="left">Cryptosuite</th> | |||
ey format <xref target="RFC7517"/>, hash function SHA-256 <xref target="RFC6234" | <th align="left">Algorithms</th> | |||
/>. The JWK encoding of NIST P-256 public key is defined in <xref target="RFC751 | </tr> | |||
8"/>. For clarity: the "crv" parameter is "P-256", the "kty" parameter is "EC", | </thead> | |||
and the public-key encoding has both an x and y coordinates as defined in Sectio | <tbody> | |||
n 6.2.1 of <xref target="RFC7518"/>.</c> | <tr> | |||
</texttable> | <td align="left">0</td> | |||
<t> | <td align="left">Reserved</td> | |||
EAP-NOOB implementations MUST support Cryptosuite 1. Support for Crypt | </tr> | |||
osuite 2 is RECOMMENDED. An example of Cryptosuite 1 public-key encoded as a JWK | <tr> | |||
object is given below (line breaks are for readability only). | <td align="left">1</td> | |||
</t> | <td align="left">ECDHE curve Curve25519 <xref target="RFC7748" | |||
<t> | format="default"/>, public-key format <xref target="RFC7517" format | |||
"jwk":{"kty":"OKP","crv":"X25519","x":"3p7bfXt9wbTTW2HC7OQ1Nz-DQ8hbeGd | ="default"/>, | |||
Nrfx-FG-IK08"} | hash function SHA-256 <xref target="RFC6234" format="default"/>. Th | |||
</t> | e JWK | |||
<t> | encoding of Curve25519 public key is defined in <xref target="RFC80 | |||
Assignment of new values for new cryptosuites MUST be done through IAN | 37" | |||
A with "Specification Required" as defined in <xref target="RFC8126"/>. | format="default"/>. For clarity, the "crv" parameter is "X25519", t | |||
</t> | he "kty" | |||
parameter is "OKP", and the public-key encoding contains only an | ||||
x-coordinate.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">2</td> | ||||
<td align="left">ECDHE curve NIST P-256 <xref target="FIPS186-4" | ||||
format="default"/>, public-key format <xref target="RFC7517" format | ||||
="default"/>, | ||||
hash function SHA-256 <xref target="RFC6234" format="default"/>. Th | ||||
e JWK | ||||
encoding of NIST P-256 public key is defined in <xref target="RFC75 | ||||
18" | ||||
format="default"/>. For clarity, the "crv" parameter is "P-256", th | ||||
e "kty" | ||||
parameter is "EC", and the public-key encoding has both an x and y | ||||
coordinate, | ||||
as defined in <xref target="RFC7518" sectionFormat="of" section="6. | ||||
2.1"/>.</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>EAP-NOOB implementations <bcp14>MUST</bcp14> support Cryptosuite 1. S | ||||
upport for | ||||
Cryptosuite 2 is <bcp14>RECOMMENDED</bcp14>. An example of a Cryptosuite | ||||
1 public-key | ||||
encoded as a JWK object is given below. (Line breaks are for readability | ||||
only.)</t> | ||||
<sourcecode type="json"> | ||||
"jwk":{"kty":"OKP","crv":"X25519","x":"3p7bfXt9wbTTW2HC7OQ1Nz- | ||||
DQ8hbeGdNrfx-FG-IK08"} | ||||
</sourcecode> | ||||
<t>Assignment of new values for new cryptosuites <bcp14>MUST</bcp14> b | ||||
e done through | ||||
IANA with "Specification Required", as defined in <xref target="RFC812 | ||||
6" | ||||
format="default"/>.</t> | ||||
</section> | </section> | |||
<section anchor="messagetypes" numbered="true" toc="default"> | ||||
<section title="Message Types" anchor="messagetypes"> | <name>Message Types</name> | |||
<t> | <t>IANA has created and will maintain a new subregistry entitled "EAP-NO | |||
IANA is requested to create and maintain a new sub-registry entitled " | OB | |||
EAP-NOOB Message Types" in the "Nimble out-of-band authentication for EAP Parame | Message Types" in the "Nimble Out-of-Band Authentication for EAP Paramete | |||
ters" registry. EAP-NOOB request and response pairs are identified by an integer | rs (EAP-NOOB)" registry. | |||
Message Type. The initial values for this registry are: | EAP-NOOB request and response pairs are identified by an integer Message | |||
</t> | Type. The | |||
<texttable title="EAP-NOOB Message Types" anchor="table-messagetypes"> | initial values for this registry are:</t> | |||
<ttcol>Message Type</ttcol> | <table anchor="tab-messagetypes" align="center"> | |||
<ttcol>Used in Exchange</ttcol> | <name>EAP-NOOB Message Types</name> | |||
<ttcol>Purpose</ttcol> | <thead> | |||
<c>1</c><c>All exchanges</c><c>PeerId and PeerState discovery</c> | <tr> | |||
<c></c><c></c><c></c> | <th align="left">Message Type</th> | |||
<c>2</c><c>Initial</c><c>Version, cryptosuite and parameter negotiatio | <th align="left">Used in Exchange</th> | |||
n</c> | <th align="left">Purpose</th> | |||
<c></c><c></c><c></c> | </tr> | |||
<c>3</c><c>Initial</c><c>Exchange of ECDHE keys and nonces</c> | </thead> | |||
<c></c><c></c><c></c> | <tbody> | |||
<c>4</c><c>Waiting</c><c>Indication to peer that the server has not ye | <tr> | |||
t received an OOB message</c> | <td align="left">0</td> | |||
<c></c><c></c><c></c> | <td align="left">Error</td> | |||
<c>5</c><c>Completion</c><c>NoobId discovery</c> | <td align="left">Error notification</td> | |||
<c></c><c></c><c></c> | </tr> | |||
<c>6</c><c>Completion</c><c>Authentication and key confirmation with H | <tr> | |||
MAC</c> | <td align="left">1</td> | |||
<c></c><c></c><c></c> | <td align="left">All exchanges</td> | |||
<c>7</c><c>Reconnect</c><c>Version, cryptosuite, and parameter negotia | <td align="left">PeerId and PeerState discovery</td> | |||
tion</c> | </tr> | |||
<c></c><c></c><c></c> | <tr> | |||
<c>8</c><c>Reconnect</c><c>Exchange of ECDHE keys and nonces</c> | <td align="left">2</td> | |||
<c></c><c></c><c></c> | <td align="left">Initial</td> | |||
<c>9</c><c>Reconnect</c><c>Authentication and key confirmation with HM | <td align="left">Version, cryptosuite, and parameter negotiation</ | |||
AC</c> | td> | |||
<c></c><c></c><c></c> | </tr> | |||
<c>0</c><c>Error</c><c>Error notification</c> | <tr> | |||
<c></c><c></c><c></c> | <td align="left">3</td> | |||
</texttable> | <td align="left">Initial</td> | |||
<t> | <td align="left">Exchange of ECDHE keys and nonces</td> | |||
Assignment of new values for new Message Types MUST be done through IA | </tr> | |||
NA with "Specification Required" as defined in <xref target="RFC8126"/>. | <tr> | |||
</t> | <td align="left">4</td> | |||
<td align="left">Waiting</td> | ||||
<td align="left">Indication to the peer that the server has not ye | ||||
t received an | ||||
OOB message</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">5</td> | ||||
<td align="left">Completion</td> | ||||
<td align="left">NoobId discovery</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">6</td> | ||||
<td align="left">Completion</td> | ||||
<td align="left">Authentication and key confirmation with HMAC</td | ||||
> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">7</td> | ||||
<td align="left">Reconnect</td> | ||||
<td align="left">Version, cryptosuite, and parameter negotiation</ | ||||
td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">8</td> | ||||
<td align="left">Reconnect</td> | ||||
<td align="left">Exchange of ECDHE keys and nonces</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">9</td> | ||||
<td align="left">Reconnect</td> | ||||
<td align="left">Authentication and key confirmation with HMAC</td | ||||
> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>Assignment of new values for new Message Types <bcp14>MUST</bcp14> be | ||||
done through | ||||
IANA with "Specification Required", as defined in <xref target="RFC8126" | ||||
format="default"/>.</t> | ||||
</section> | </section> | |||
<section anchor="errorcodes" numbered="true" toc="default"> | ||||
<section title="Error codes" anchor="errorcodes"> | <name>Error Codes</name> | |||
<t> | <t>IANA has created and will maintain a new subregistry entitled "EAP-NO | |||
IANA is requested to create and maintain a new sub-registry entitled " | OB | |||
EAP-NOOB Error codes" in the "Nimble out-of-band authentication for EAP Paramete | Error codes" in the "Nimble Out-of-Band Authentication for EAP Parameters | |||
rs" registry. Cryptosuites are identified by an integer. The initial values for | (EAP-NOOB)" registry. | |||
this registry are: | Cryptosuites are identified by an integer. The initial values for this re | |||
</t> | gistry | |||
<texttable title="EAP-NOOB error codes" anchor="table-errors"> | are:</t> | |||
<ttcol>Error code</ttcol> | <table anchor="tab-errors" align="center"> | |||
<ttcol>Purpose</ttcol> | <name>EAP-NOOB Error Codes</name> | |||
<c>1001</c> | <thead> | |||
<c>Invalid NAI</c> | <tr> | |||
<c>1002</c> | <th align="left">Error code</th> | |||
<c>Invalid message structure</c> | <th align="left">Purpose</th> | |||
<c>1003</c> | </tr> | |||
<c>Invalid data</c> | </thead> | |||
<c>1004</c> | <tbody> | |||
<c>Unexpected message type</c> | <tr> | |||
<c>1005</c> | <td align="left">1001</td> | |||
<c>Invalid ECDHE key</c> | <td align="left">Invalid NAI</td> | |||
<c>2001</c> | </tr> | |||
<c>Unwanted peer</c> | <tr> | |||
<c>2002</c> | <td align="left">1002</td> | |||
<c>State mismatch, user action required</c> | <td align="left">Invalid message structure</td> | |||
<c>2003</c> | </tr> | |||
<c>Unrecognized OOB message identifier</c> | <tr> | |||
<c>2004</c> | <td align="left">1003</td> | |||
<c>Unexpected peer identifier</c> | <td align="left">Invalid data</td> | |||
<c>3001</c> | </tr> | |||
<c>No mutually supported protocol version</c> | <tr> | |||
<c>3002</c> | <td align="left">1004</td> | |||
<c>No mutually supported cryptosuite</c> | <td align="left">Unexpected message type</td> | |||
<c>3003</c> | </tr> | |||
<c>No mutually supported OOB direction</c> | <tr> | |||
<c>4001</c> | <td align="left">1005</td> | |||
<c>HMAC verification failure</c> | <td align="left">Invalid ECDHE key</td> | |||
<c>5001</c> | </tr> | |||
<c>Application-specific error</c> | <tr> | |||
<c>5002</c> | <td align="left">2001</td> | |||
<c>Invalid server info</c> | <td align="left">Unwanted peer</td> | |||
<c>5003</c> | </tr> | |||
<c>Invalid server URL</c> | <tr> | |||
<c>5004</c> | <td align="left">2002</td> | |||
<c>Invalid peer info</c> | <td align="left">State mismatch, user action required</td> | |||
<c>6001-6999</c> | </tr> | |||
<c>Private and experimental use</c> | <tr> | |||
</texttable> | <td align="left">2003</td> | |||
<t> | <td align="left">Unrecognized OOB message identifier</td> | |||
Assignment of new error codes MUST be done through IANA with "Specific | </tr> | |||
ation Required" as defined in <xref target="RFC8126"/>, except for the range 600 | <tr> | |||
1-6999. This range is reserved for "Private Use" and "Experimental Use", both lo | <td align="left">2004</td> | |||
cally and on the open Internet. | <td align="left">Unexpected peer identifier</td> | |||
</t> | </tr> | |||
<tr> | ||||
<td align="left">3001</td> | ||||
<td align="left">No mutually supported protocol version</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">3002</td> | ||||
<td align="left">No mutually supported cryptosuite</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">3003</td> | ||||
<td align="left">No mutually supported OOB direction</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">4001</td> | ||||
<td align="left">HMAC verification failure</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">5001</td> | ||||
<td align="left">Application-specific error</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">5002</td> | ||||
<td align="left">Invalid server info</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">5003</td> | ||||
<td align="left">Invalid server URL</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">5004</td> | ||||
<td align="left">Invalid peer info</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">6001-6999</td> | ||||
<td align="left">Reserved for Private and Experimental Use</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>Assignment of new error codes <bcp14>MUST</bcp14> be done through IAN | ||||
A with | ||||
"Specification Required", as defined in <xref target="RFC8126" format="de | ||||
fault"/>, | ||||
except for the range 6001-6999. This range is reserved for "Private Use" | ||||
and | ||||
"Experimental Use", both locally and on the open Internet.</t> | ||||
</section> | </section> | |||
<section anchor="serverinfo-data-fields" numbered="true" toc="default"> | ||||
<section title="ServerInfo data fields" anchor="serverinfo-data-fields"> | <name>ServerInfo Data Fields</name> | |||
<t> | <t>IANA has created and will maintain a new subregistry entitled "EAP-NO | |||
IANA is requested to create and maintain a new sub-registry entitled | OB | |||
"EAP-NOOB ServerInfo data fields" in the "Nimble out-of-band authentication for | ServerInfo Data Fields" in the "Nimble Out-of-Band Authentication for EAP | |||
EAP Parameters" registry. The initial values for this registry are: | Parameters (EAP-NOOB)" | |||
</t> | registry. The initial values for this registry are:</t> | |||
<texttable title="ServerInfo data fields" anchor="table-serverinfo-data- | <table anchor="tab-serverinfo-data-fields" align="center"> | |||
fields"> | <name>ServerInfo Data Fields</name> | |||
<ttcol>Data Field</ttcol> | <thead> | |||
<ttcol>Specification</ttcol> | <tr> | |||
<c>Type</c><c>This RFC <xref target="serverinfo-peerinfo-meaning"/></c | <th align="left">Data Field</th> | |||
> | <th align="left">Specification</th> | |||
<c></c><c></c> | </tr> | |||
<c>ServerName</c><c>This RFC <xref target="serverinfo-peerinfo-meaning | </thead> | |||
"/></c> | <tbody> | |||
<c></c><c></c> | <tr> | |||
<c>ServerURL</c><c>This RFC <xref target="serverinfo-peerinfo-meaning" | <td align="left">Type</td> | |||
/></c> | <td align="left">RFC 9140, <xref target="serverinfo-peerinfo-meani | |||
<c></c><c></c> | ng" | |||
<c>SSIDList</c><c>This RFC <xref target="serverinfo-peerinfo-meaning"/ | format="default"/></td> | |||
></c> | </tr> | |||
<c></c><c></c> | <tr> | |||
<c>Base64SSIDList</c><c>This RFC <xref target="serverinfo-peerinfo-mea | <td align="left">ServerName</td> | |||
ning"/></c> | <td align="left">RFC 9140, <xref target="serverinfo-peerinfo-meani | |||
</texttable> | ng" | |||
<t> | format="default"/></td> | |||
Assignment of new values for new ServerInfo data fields MUST be done t | </tr> | |||
hrough IANA with "Specification Required" as defined in <xref target="RFC8126"/> | <tr> | |||
. | <td align="left">ServerURL</td> | |||
</t> | <td align="left">RFC 9140, <xref target="serverinfo-peerinfo-meani | |||
ng" | ||||
format="default"/></td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">SSIDList</td> | ||||
<td align="left">RFC 9140, <xref target="serverinfo-peerinfo-meani | ||||
ng" | ||||
format="default"/></td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Base64SSIDList</td> | ||||
<td align="left">RFC 9140, <xref target="serverinfo-peerinfo-meani | ||||
ng" | ||||
format="default"/></td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>Assignment of new values for new ServerInfo data fields <bcp14>MUST</ | ||||
bcp14> be done | ||||
through IANA with "Specification Required", as defined in <xref target="R | ||||
FC8126" | ||||
format="default"/>. </t> | ||||
</section> | </section> | |||
<section anchor="peerinfo-data-fields" numbered="true" toc="default"> | ||||
<section title="PeerInfo data fields" anchor="peerinfo-data-fields"> | <name>PeerInfo Data Fields</name> | |||
<t> | <t>IANA is requested to create and maintain a new subregistry entitled " | |||
IANA is requested to create and maintain a new sub-registry entitled | EAP-NOOB | |||
"EAP-NOOB PeerInfo data fields" in the "Nimble out-of-band authentication for EA | PeerInfo Data Fields" in the "Nimble Out-of-Band Authentication for EAP P | |||
P Parameters" registry. The initial values for this registry are: | arameters (EAP-NOOB)" | |||
</t> | registry. The initial values for this registry are:</t> | |||
<texttable title="PeerInfo data fields" anchor="peerinfo-data-fields-tab | <table anchor="peerinfo-data-fields-table" align="center"> | |||
le"> | <name>PeerInfo Data Fields</name> | |||
<ttcol>Data Field</ttcol> | <thead> | |||
<ttcol>Specification</ttcol> | <tr> | |||
<c>Type</c><c>This RFC <xref target="serverinfo-peerinfo-meaning"/></c | <th align="left">Data Field</th> | |||
> | <th align="left">Specification</th> | |||
<c></c><c></c> | </tr> | |||
<c>PeerName</c><c>This RFC <xref target="serverinfo-peerinfo-meaning"/ | </thead> | |||
></c> | <tbody> | |||
<c></c><c></c> | <tr> | |||
<c>Manufacturer</c><c>This RFC <xref target="serverinfo-peerinfo-meani | <td align="left">Type</td> | |||
ng"/></c> | <td align="left">RFC 9140, <xref target="serverinfo-peerinfo-meani | |||
<c></c><c></c> | ng" | |||
<c>Model</c><c>This RFC <xref target="serverinfo-peerinfo-meaning"/></ | format="default"/></td> | |||
c> | </tr> | |||
<c></c><c></c> | <tr> | |||
<c>SerialNumber</c><c>This RFC <xref target="serverinfo-peerinfo-meani | <td align="left">PeerName</td> | |||
ng"/></c> | <td align="left">RFC 9140, <xref target="serverinfo-peerinfo-meani | |||
<c></c><c></c> | ng" | |||
<c>MACAddress</c><c>This RFC <xref target="serverinfo-peerinfo-meaning | format="default"/></td> | |||
"/></c> | </tr> | |||
<c></c><c></c> | <tr> | |||
<c>SSID</c><c>This RFC <xref target="serverinfo-peerinfo-meaning"/></c | <td align="left">Manufacturer</td> | |||
> | <td align="left">RFC 9140, <xref target="serverinfo-peerinfo-meani | |||
<c></c><c></c> | ng" | |||
<c>Base64SSID</c><c>This RFC <xref target="serverinfo-peerinfo-meaning | format="default"/></td> | |||
"/></c> | </tr> | |||
<c></c><c></c> | <tr> | |||
<c>BSSID</c><c>This RFC <xref target="serverinfo-peerinfo-meaning"/></ | <td align="left">Model</td> | |||
c> | <td align="left">RFC 9140, <xref target="serverinfo-peerinfo-meani | |||
<c></c><c></c> | ng" | |||
</texttable> | format="default"/></td> | |||
<t> | </tr> | |||
Assignment of new values for new PeerInfo data fields MUST be done thr | <tr> | |||
ough IANA with "Specification Required" as defined in <xref target="RFC8126"/>. | <td align="left">SerialNumber</td> | |||
</t> | <td align="left">RFC 9140, <xref target="serverinfo-peerinfo-meani | |||
ng" | ||||
format="default"/></td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">MACAddress</td> | ||||
<td align="left">RFC 9140, <xref target="serverinfo-peerinfo-meani | ||||
ng" | ||||
format="default"/></td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">SSID</td> | ||||
<td align="left">RFC 9140, <xref target="serverinfo-peerinfo-meani | ||||
ng" | ||||
format="default"/></td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Base64SSID</td> | ||||
<td align="left">RFC 9140, <xref target="serverinfo-peerinfo-meani | ||||
ng" | ||||
format="default"/></td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">BSSID</td> | ||||
<td align="left">RFC 9140, <xref target="serverinfo-peerinfo-meani | ||||
ng" | ||||
format="default"/></td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>Assignment of new values for new PeerInfo data fields <bcp14>MUST</bc | ||||
p14> be done | ||||
through IANA with "Specification Required", as defined in <xref target="R | ||||
FC8126" | ||||
format="default"/>.</t> | ||||
</section> | </section> | |||
<section anchor="specialdomainname" numbered="true" toc="default"> | ||||
<section title="Domain name reservation" anchor="specialdomainname"> | <name>Domain Name Reservation</name> | |||
<t> | <t>The special-use domain "eap-noob.arpa" has been registered in the .ar | |||
The special-use domain "eap-noob.arpa" should be registered in the .arp | pa registry | |||
a registry (<eref target="https://www.iana.org/domains/arpa"/>). No A, AAAA, or | (<eref target="https://www.iana.org/domains/arpa"/>) and the "Special-Use | |||
PTR records are requested. | Domain | |||
</t> | Names" registry (<eref target="https://www.iana.org/assignments/special-u | |||
se-domain-names"/>).</t> | ||||
</section> | </section> | |||
<section anchor="expertguidance" numbered="true" toc="default"> | ||||
<section title="Guidance for Designated Experts" anchor="expertguidance"> | <name>Guidance for Designated Experts</name> | |||
<t>Experts SHOULD be conservative in the allocation of new Cryptosuites. | <t>Experts <bcp14>SHOULD</bcp14> be conservative in the allocation of ne | |||
Experts MUST ascertain that the requested values match the current Crypto Forum | w | |||
Research Group (CFRG) guidance on cryptographic algorithm security. Experts MUST | Cryptosuites. Experts <bcp14>MUST</bcp14> ascertain that the requested va | |||
ensure that any new Cryptosuites fully specify the encoding of the ECDHE public | lues match | |||
key and should include details such as the value of "kty" (key type) parameter | the current Crypto Forum Research Group (CFRG) guidance on cryptographic | |||
when JWK <xref target="RFC7517"/> encoding is used.</t> | algorithm | |||
<t>Experts SHOULD be conservative in the allocation of new Message Types. | security. Experts <bcp14>MUST</bcp14> ensure that any new Cryptosuites fu | |||
Experts SHOULD ascertain that a well-defined specification for the new Message | lly specify | |||
Type is permanently and publicly available.</t> | the encoding of the ECDHE public key and should include details, such as | |||
<t>Experts SHOULD be conservative in the allocation of new Error codes si | the value of | |||
nce the 6001-6999 range is already allocated for private and experimental use.</ | the "kty" (key type) parameter when JWK <xref target="RFC7517" format="de | |||
t> | fault"/> encoding | |||
<t>Experts MAY be liberal in the allocation of new ServerInfo and PeerInf | is used.</t> | |||
o data fields. Experts MUST ensure that the Data Field requested has a unique na | <t>Experts <bcp14>SHOULD</bcp14> be conservative in the allocation of ne | |||
me that is not easily confused with existing registrations. For example, request | w Message | |||
s for a new PeerInfo data field "ssid" should be rejected even though it is uniq | Types. Experts <bcp14>SHOULD</bcp14> ascertain that a well-defined specif | |||
ue because it can be confused with the existing registration of "SSID". Experts | ication for | |||
MUST ensure that a suitable Description for the data field is available.</t> | the new Message Type is permanently and publicly available.</t> | |||
<t>Experts <bcp14>SHOULD</bcp14> be conservative in the allocation of ne | ||||
w Error codes, | ||||
since the 6001-6999 range is already reserved for private and experimenta | ||||
l use.</t> | ||||
<t>Experts <bcp14>MAY</bcp14> be liberal in the allocation of new Server | ||||
Info and | ||||
PeerInfo data fields. Experts <bcp14>MUST</bcp14> ensure that the data fi | ||||
eld 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 <bcp14>MUST</bcp14> ensure that a suitable Description for the da | ||||
ta field is | ||||
available.</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="securityconsiderations" numbered="true" toc="default"> | ||||
<section title="Implementation Status" anchor="implementationstatus"> | <name>Security Considerations</name> | |||
<t>Note to RFC Editor: Please remove this entire section and the refere | <t>EAP-NOOB is an authentication and key derivation protocol; thus, securi | |||
nce to RFC7942 before publication.</t> | ty | |||
<t> | considerations can be found in most sections of this specification. In the | |||
This section records the status of known implementations of the protocol | following, we | |||
defined by this specification at the time of posting of this Internet-Draft and | explain the protocol design and highlight some other special consideration | |||
is based on a proposal described in <xref target="RFC7942"/>. The description o | s.</t> | |||
f implementations in this section is intended to assist the IETF in its decision | <section anchor="authenticationprinciple" numbered="true" toc="default"> | |||
processes in progressing drafts to RFCs. Please note that the listing of any in | <name>Authentication Principle</name> | |||
dividual implementation here does not imply endorsement by the IETF. Furthermore | <t>EAP-NOOB establishes a shared secret with an authenticated ECDHE key | |||
, no effort has been spent to verify the information presented here that was sup | exchange. The | |||
plied by IETF contributors. This is not intended as, and must not be construed t | mutual authentication in EAP-NOOB is based on two separate features, both | |||
o be, a catalog of available implementations or their features. Readers are advi | conveyed in | |||
sed to note that other implementations may exist. | the OOB message. The first authentication feature is the secret nonce Noo | |||
</t> | b. The peer | |||
and server use this secret in the Completion Exchange to mutually authent | ||||
<section title="Implementation with wpa_supplicant and hostapd" anchor="aa | icate the | |||
ltoimplementation"> | session key previously created with ECDHE. The message authentication cod | |||
<t> | es computed | |||
<list style="symbols"> | with the secret nonce Noob are alone sufficient for authenticating the ke | |||
<t>Responsible Organization: Aalto University</t> | y exchange. | |||
<t>Location: <eref target="https://github.com/tuomaura/eap-noob"/></ | The second authentication feature is the integrity-protecting fingerprint | |||
t> | Hoob. Its | |||
<t>Coverage: This implementation includes all the features described | purpose is to prevent impersonation attacks even in situations where the | |||
in the current specification. The implementation supports two-dimensional QR co | attacker is | |||
des and NFC as example out-of-band (OOB) channels.</t> | able to eavesdrop on the OOB channel and the nonce Noob is compromised. I | |||
<t>Level of Maturity: Alpha</t> | n some | |||
<t>Version compatibility: Version 08 of the individual draft impleme | human-assisted OOB channels, such as human-perceptible audio or a user-ty | |||
nted</t> | ped URL, it | |||
<t>Licensing: BSD</t> | may be easier to detect tampering than disclosure of the OOB message, and | |||
<t>Contact Information: Tuomas Aura, tuomas.aura@aalto.fi</t> | such | |||
</list> | applications benefit from the second authentication feature.</t> | |||
</t> | <t>The additional security provided by the cryptographic fingerprint Hoo | |||
b 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 de | ||||
tect | ||||
impersonation attacks that may have happened on the in-band channel. The | ||||
other | ||||
endpoint, however, is not equally protected because the OOB message and f | ||||
ingerprint | ||||
are sent only in one direction. Some protection to the OOB sender is affo | ||||
rded by the | ||||
fact that the user may notice the failure of the association at the OOB r | ||||
eceiver and | ||||
therefore reset the OOB sender. Other device-pairing protocols have solve | ||||
d similar | ||||
situations by requiring the user to confirm to the OOB sender that the as | ||||
sociation was | ||||
accepted by the OOB receiver, e.g., with a button press on the sender sid | ||||
e. | ||||
Applications <bcp14>MAY</bcp14> implement EAP-NOOB in this way. Neverthel | ||||
ess, since | ||||
EAP-NOOB was designed to work with strictly one-directional OOB communica | ||||
tion and the | ||||
fingerprint is only the second authentication feature, the EAP-NOOB speci | ||||
fication does | ||||
not mandate such explicit confirmation to the OOB sender.</t> | ||||
<t>To summarize, EAP-NOOB uses the combined protection of the secret non | ||||
ce 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 ca | ||||
n eavesdrop | ||||
on it from the OOB channel. Even if an attacker is able to eavesdrop on t | ||||
he 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, w | ||||
hich would | ||||
reject the OOB message. The attacker that eavesdropped on the secret nonc | ||||
e can | ||||
impersonate the OOB receiver to the OOB sender. If it does, the associati | ||||
on will | ||||
appear to be complete only on the OOB sender side, and such situations ha | ||||
ve to be | ||||
resolved by the user by resetting the OOB sender to the initial state.</t | ||||
> | ||||
<t>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 E | ||||
AP, the | ||||
user-entered credential is often a passphrase that is shared by all the n | ||||
etwork | ||||
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 t | ||||
he 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 si | ||||
de.</t> | ||||
<t>Forward secrecy during fast reconnect in EAP-NOOB is optional. The Re | ||||
connect | ||||
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 | ||||
<bcp14>MAY</bcp14> adjust the frequency of its attempts at ECDHE rekeying | ||||
based on | ||||
what it knows about the peer's computational capabilities.</t> | ||||
<t>Another way in which some servers may control their computational loa | ||||
d 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. How | ||||
ever, the | ||||
server <bcp14>MUST NOT</bcp14> reuse the same ECDHE key with the same pee | ||||
r when | ||||
rekeying with ECDHE (KeyingMode=2 or KeyingMode=3). Instead, it can simpl | ||||
y not send an | ||||
ECDHE key (KeyingMode=1).</t> | ||||
<t>The users delivering the OOB messages will often authenticate themsel | ||||
ves 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 u | ||||
se of | ||||
EAP-NOOB can use this information for configuring the initial owner of th | ||||
e | ||||
freshly registered device.</t> | ||||
</section> | </section> | |||
<section anchor="deviceidentification" numbered="true" toc="default"> | ||||
<section title="Implementation on Contiki" anchor="murciaimplementation_co | <name>Identifying Correct Endpoints</name> | |||
ntiki"> | <t>Potential weaknesses in EAP-NOOB arise from the fact that the user mu | |||
<t> | st physically | |||
<list style="symbols"> | identify the correct peer device. If the user mistakenly delivers the OOB | |||
<t>Responsible Organization: University of Murcia and Aalto Universi | message | |||
ty</t> | from the wrong peer device to the server, the server may create an associ | |||
<t>Location: <eref target="https://github.com/eduingles/coap-eap-noo | ation with | |||
b"/></t> | the wrong peer. The reliance on the user in identifying the correct endpo | |||
<t>Coverage: This implementation includes all the features described | ints is an | |||
in the current specification. The implementation uses a blinking LED light as t | inherent property of user-assisted, out-of-band authentication. To unders | |||
he out-of-band (OOB) channel.</t> | tand the | |||
<t>Level of Maturity: Alpha</t> | potential consequences of the user mistake, we need to consider a few dif | |||
<t>Version compatibility: Version 06 of the draft implemented</t> | ferent | |||
<t>Licensing: BSD</t> | scenarios. In the first scenario, there is no malicious party, and the us | |||
<t>Contact Information: Eduardo Ingles, eduardo.ingles@um.es</t> | er makes an | |||
</list> | accidental mistake between two out-of-the-box devices that are both ready | |||
</t> | to be | |||
registered to a server. If the user delivers the OOB message from the wro | ||||
ng device to | ||||
the server, confusion may arise but usually no security issues. In the se | ||||
cond | ||||
scenario, an attacker intentionally tricks the user, for example, by subs | ||||
tituting the | ||||
original peer device with a compromised one. This is essentially a supply | ||||
chain attack | ||||
where the user accepts a compromised physical device. </t> | ||||
<t>There is also a third scenario, in which an opportunistic attacker tr | ||||
ies to take | ||||
advantage of the user's accidental mistake. For example, the user could p | ||||
lay 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 devic | ||||
e via the OOB | ||||
channel, the device could misuse or leak the accidentally received primar | ||||
y key. | ||||
EAP-NOOB is not vulnerable to such opportunistic attackers because the OO | ||||
B message has | ||||
no value to anyone who did not take part in the corresponding Initial Exc | ||||
hange.</t> | ||||
<t>One mechanism that can mitigate user mistakes is certification of pee | ||||
r devices. A | ||||
certificate or an attestation token (e.g., <xref target="I-D.tschofenig-t | ||||
ls-cwt" | ||||
format="default"/> and <xref target="I-D.ietf-rats-eat" format="default"/ | ||||
>) can convey | ||||
to the server authentic identifiers and attributes, such as model and ser | ||||
ial 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 t | ||||
he user to | ||||
know any identifier of the peer device; physical access to the device is | ||||
sufficient | ||||
for bootstrapping with EAP-NOOB.</t> | ||||
<t>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 wron | ||||
g server. If | ||||
the EAP server is accessed through a web user interface, the attack is ak | ||||
in to | ||||
phishing attacks where the user is tricked into accessing the wrong URL a | ||||
nd wrong web | ||||
page. OOB implementation with a dedicated app on a mobile device, which c | ||||
ommunicates | ||||
with a server API at a preconfigured URL, can protect against such attack | ||||
s. </t> | ||||
<t>After the device registration, an attacker could clone the device ide | ||||
ntity by | ||||
copying the keys from the persistent EAP-NOOB association into another de | ||||
vice. The | ||||
attacker can be an outsider who gains access to the keys or the device ow | ||||
ner who wants | ||||
to have two devices matching the same registration. The cloning threats c | ||||
an be | ||||
mitigated by creating the cryptographic keys and storing the persistent E | ||||
AP-NOOB | ||||
association on the peer device in a secure hardware component such as a t | ||||
rusted | ||||
execution environment (TEE). Furthermore, remote attestation on the appli | ||||
cation 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 b | ||||
ut the first | ||||
clone that performs the update.</t> | ||||
</section> | </section> | |||
<section anchor="trustedpath" numbered="true" toc="default"> | ||||
<section title="Implementation with wpa_supplicant and hostapd" anchor="mu | <name>Trusted Path Issues and Misbinding Attacks</name> | |||
rciaimplementation_linux"> | <t>Another potential threat is spoofed user input or output on the peer | |||
<t> | device. When | |||
<list style="symbols"> | the user is delivering the OOB message to or from the correct peer device | |||
<t>Responsible Organization: Ericsson</t> | , a trusted | |||
<t>Location: <eref target="https://github.com/Vogeltak/hostap"/></t> | path between the user and the peer device is needed. That is, the user mu | |||
<t>Coverage: This implementation is the most up-to-date one. The imp | st | |||
lementation only provides a minimal API interface for transferring OOB messages. | communicate directly with an authentic operating system and EAP-NOOB impl | |||
</t> | ementation in | |||
<t>Level of Maturity: Alpha</t> | the peer device and not with a spoofed user interface. Otherwise, a regis | |||
<t>Version compatibility: Version 02 of the working group adopted dr | tered device | |||
aft is implemented</t> | that is under the control of the attacker could emulate the behavior of a | |||
<t>Licensing: BSD</t> | n | |||
</list> | unregistered device. The secure path can be implemented, for example, by | |||
</t> | having the | |||
user press a reset button to return the device to the Unregistered (0) st | ||||
ate and to | ||||
invoke | ||||
a trusted UI. The problem with such trusted paths is that they are not st | ||||
andardized | ||||
across devices.</t> | ||||
<t>Another potential consequence of a spoofed UI is the misbinding attac | ||||
k where the | ||||
user tries to register a correct but compromised device, which tricks the | ||||
user into | ||||
registering another (uncompromised) device instead. For example, the comp | ||||
romised | ||||
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 unwittin | ||||
g user scans | ||||
the QR code and delivers the OOB message in it to the server, the wrong d | ||||
evice may | ||||
become registered in the server. Such misbinding vulnerabilities arise be | ||||
cause the | ||||
user does not have any secure way of verifying that the in-band cryptogra | ||||
phic | ||||
handshake and the out-of-band physical access are terminated at the same | ||||
physical | ||||
device. Sethi et al. <xref target="Sethi19" format="default"/> analyze th | ||||
e misbinding | ||||
threat against device-pairing protocols and also EAP-NOOB. Essentially, a | ||||
ll protocols | ||||
where the authentication relies on the user's physical access to the devi | ||||
ce are | ||||
vulnerable to misbinding, including EAP-NOOB.</t> | ||||
<t>A standardized trusted path for communicating directly with the trust | ||||
ed 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 pre | ||||
vent 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. Devic | ||||
e | ||||
certification by the manufacturer can further strengthen the asset tracki | ||||
ng.</t> | ||||
</section> | </section> | |||
<section anchor="peeridentifiers" numbered="true" toc="default"> | ||||
<section title="Protocol modeling " anchor="modeling"> | <name>Peer Identifiers and Attributes</name> | |||
<t> | <t>The PeerId value in the protocol is a server-allocated identifier for | |||
The current EAP-NOOB specification has been modeled with the mCRL2 for | its | |||
mal specification language <xref target="mcrl2"/>. The model <xref target="noob- | association with the peer and <bcp14>SHOULD NOT</bcp14> be shown to the u | |||
mcrl2"/> was used mainly for simulating the protocol behavior and for verifying | ser because | |||
basic safety and liveness properties as part of the specification process. For e | its value is initially ephemeral. Since the PeerId is allocated by the se | |||
xample, we verified the correctness of the tiebreaking mechanism when two OOB me | rver and the | |||
ssages are received simultaneously, one in each direction. We also verified that | scope of the identifier is the single server, the so-called identifier sq | |||
an on-path attacker cannot cause persistent failure by spoofing a finite number | uatting | |||
of messages in the Reconnect Exchange. Additionally, the protocol has been mode | attacks, where a malicious peer could reserve another peer's identifier, | |||
led with the ProVerif <xref target="proverif"/> tool. This model <xref target="n | are not | |||
oob-proverif"/> was used to verify security properties such as mutual authentica | possible in EAP-NOOB. The server <bcp14>SHOULD</bcp14> assign a random or | |||
tion. | pseudorandom PeerId to each new peer. It <bcp14>SHOULD NOT</bcp14> select | |||
</t> | the PeerId | |||
based on any peer characteristics that it may know, such as the peer's li | ||||
nk-layer | ||||
network address.</t> | ||||
<t>User reset or failure in the OOB Step can cause the peer to perform m | ||||
any 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 e | ||||
phemeral | ||||
associations. There is no security reason to delete them early, and the s | ||||
erver 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 <bcp14 | ||||
>SHOULD | ||||
NOT</bcp14> delete the ephemeral state before all the related Noob values | ||||
have | ||||
expired.</t> | ||||
<t>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 import | ||||
ant 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 n | ||||
ot | ||||
authenticated information and should not be relied on. One possible use f | ||||
or the | ||||
PeerInfo field is EAP channel binding (see <xref target="channel-binding" | ||||
format="default"/>).</t> | ||||
</section> | </section> | |||
</section> | <section anchor="downgrading" numbered="true" toc="default"> | |||
<name>Downgrading Threats</name> | ||||
<section title="Security considerations" anchor="securityconsiderations"> | <t>The fingerprint Hoob protects all the information exchanged in the In | |||
<t> | itial | |||
EAP-NOOB is an authentication and key derivation protocol and, thus, sec | Exchange, including the cryptosuite negotiation. The message authenticati | |||
urity considerations can be found in most sections of this specification. In the | on codes MACs | |||
following, we explain the protocol design and highlight some other special cons | and MACp also protect the same information. The message authentication co | |||
iderations. | des MACs2 and | |||
</t> | MACp2 protect information exchanged during key renegotiation in the Recon | |||
nect | ||||
<section title="Authentication principle" anchor="authenticationprinciple" | Exchange. This prevents downgrading attacks to weaker cryptosuites, as lo | |||
> | ng as the | |||
<t> | possible attacks take more time than the maximum time allowed for the EAP | |||
EAP-NOOB establishes a shared secret with an authenticated ECDHE key e | -NOOB | |||
xchange. The mutual authentication in EAP-NOOB is based on two separate features | completion. This is typically the case for recently discovered cryptanaly | |||
, both conveyed in the OOB message. The first authentication feature is the secr | tic | |||
et nonce Noob. The peer and server use this secret in the Completion Exchange to | attacks.</t> | |||
mutually authenticate the session key previously created with ECDHE. The messag | <t>As an additional precaution, the EAP server and peer <bcp14>MUST</bcp | |||
e authentication codes computed with the secret nonce Noob are alone sufficient | 14> check for | |||
for authenticating the key exchange. The second authentication feature is the in | downgrading attacks in the Reconnect Exchange as follows. As long as the | |||
tegrity-protecting fingerprint Hoob. Its purpose is to prevent impersonation att | server or | |||
acks even in situations where the attacker is able to eavesdrop on the OOB chann | peer saves any information about the other endpoint, it <bcp14>MUST</bcp1 | |||
el and the nonce Noob is compromised. In some human-assisted OOB channels, such | 4> also | |||
as human-perceptible audio or a user-typed URL, it may be easier to detect tampe | remember the previously negotiated cryptosuite and <bcp14>MUST NOT</bcp14 | |||
ring than disclosure of the OOB message, and such applications benefit from the | > accept | |||
second authentication feature. | renegotiation of any cryptosuite that is known to be weaker than the prev | |||
</t> | ious one, | |||
<t> | such as a deprecated cryptosuite. Determining the relative strength of th | |||
The additional security provided by the cryptographic fingerprint Hoob | e | |||
is somewhat intricate to understand. The endpoint that receives the OOB message | cryptosuites is out of scope of this specification and may be managed by | |||
uses Hoob to verify the integrity of the ECDHE exchange. Thus, the OOB receiver | implementations or by local policies at the peer and server.</t> | |||
can detect impersonation attacks that may have happened on the in-band channel. | <t>Integrity of the direction negotiation cannot be verified in the same | |||
The other endpoint, however, is not equally protected because the OOB message a | way as the | |||
nd fingerprint are sent only in one direction. Some protection to the OOB sender | integrity of the cryptosuite negotiation. That is, if the OOB channel use | |||
is afforded by the fact that the user may notice the failure of the association | d in an | |||
at the OOB receiver and therefore reset the OOB sender. Other device-pairing pr | application is critically insecure in one direction, an on-path attacker | |||
otocols have solved similar situations by requiring the user to confirm to the O | could modify | |||
OB sender that the association was accepted by the OOB receiver, e.g., with a bu | the negotiation messages and thereby cause that direction to be used. App | |||
tton press on the sender side. Applications MAY implement EAP-NOOB in this way. | lications | |||
Nevertheless, since EAP-NOOB was designed to work with strictly one-directional | that support OOB messages in both directions <bcp14>SHOULD</bcp14>, there | |||
OOB communication and the fingerprint is only the second authentication feature, | fore, ensure | |||
the EAP-NOOB specification does not mandate such explicit confirmation to the O | that the OOB channel has sufficiently strong security in both directions. | |||
OB sender. | While this | |||
</t> | is a theoretical vulnerability, it could arise in practice if EAP-NOOB is | |||
<t> | deployed in | |||
To summarize, EAP-NOOB uses the combined protection of the secret nonc | new applications. Currently, we expect most peer devices to support only | |||
e Noob and the cryptographic fingerprint Hoob, both conveyed in the OOB message. | one OOB | |||
The secret nonce Noob alone is sufficient for mutual authentication unless the | direction; in which case, interfering with the direction negotiation can | |||
attacker can eavesdrop on it from the OOB channel. Even if an attacker is able t | only prevent | |||
o eavesdrop on the secret nonce Noob, it nevertheless cannot perform a full impe | the completion of the protocol.</t> | |||
rsonation attack on the in-band channel because a mismatching fingerprint would | <t>The long-term shared key material Kz in the persistent EAP-NOOB assoc | |||
alert the OOB receiver, which would reject the OOB message. The attacker that ea | iation is | |||
vesdropped on the secret nonce can impersonate the OOB receiver to the OOB sende | established with an ECDHE key exchange when the peer and server are first | |||
r. If it does, the association will appear to be complete only on the OOB sender | associated. | |||
side, and such situations have to be resolved by the user by resetting the OOB | It is a weaker secret than a manually configured random shared key becaus | |||
sender to the initial state. | e advances in | |||
</t> | cryptanalysis against the used ECDHE curve could eventually enable the at | |||
<t> | tacker to | |||
The expected use cases for EAP-NOOB are ones where it replaces a user- | recover Kz. EAP-NOOB protects against such attacks by allowing cryptosuit | |||
entered access credential in IoT appliances. In wireless network access without | e upgrades in | |||
EAP, the user-entered credential is often a passphrase that is shared by all the | the Reconnect Exchange and by updating the shared key material Kz wheneve | |||
network stations. The advantage of an EAP-based solution, including EAP-NOOB, i | r the | |||
s that it establishes a different shared secret for each peer device, which make | cryptosuite is upgraded. We do not expect the cryptosuite upgrades to be | |||
s the system more resilient against device compromise. Another advantage is that | frequent, | |||
it is possible to revoke the security association for an individual device on t | but, | |||
he server side. | if an upgrade becomes necessary, it can be done without manual reset and | |||
</t> | reassociation | |||
<t> | of the peer devices.</t> | |||
Forward secrecy during fast reconnect in EAP-NOOB is optional. The Rec | ||||
onnect 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 the peer to l | ||||
imit the frequency of the costly computation that is required for forward secrec | ||||
y. The server MAY adjust the frequency of its attempts at ECDHE rekeying based o | ||||
n what it knows about the peer's computational capabilities. | ||||
</t> | ||||
<t> | ||||
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 upd | ||||
ates its ECDHE key, which may be a reasonable trade-off between security and per | ||||
formance. However, the server MUST NOT reuse the same ECDHE key with the same pe | ||||
er when rekeying with ECDHE (KeyingMode=2 or KeyingMode=3). Instead, it can simp | ||||
ly not send an ECDHE key (KeyingMode=1). | ||||
</t> | ||||
<t> | ||||
The users delivering the OOB messages will often authenticate themselv | ||||
es to the EAP server, e.g., by logging into a secure web page or API. In this ca | ||||
se, 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. | ||||
</t> | ||||
</section> | </section> | |||
<section anchor="indicators" numbered="true" toc="default"> | ||||
<section title="Identifying correct endpoints" anchor="deviceidentificatio | <name>Protected Success and Failure Indications</name> | |||
n"> | <t><xref target="RFC3748" sectionFormat="of" section="7.16"/> allows EAP | |||
<t> | methods to | |||
Potential weaknesses in EAP-NOOB arise from the fact that the user mus | specify protected result indications because EAP-Success and EAP-Failure | |||
t identify physically the correct peer device. If the user mistakenly delivers t | packets are | |||
he OOB message from the wrong peer device to the server, the server may create a | neither acknowledged nor integrity protected. <xref target="RFC3748" | |||
n association with the wrong peer. The reliance on the user in identifying the c | format="default"/> notes that these indications may be explicit or implic | |||
orrect endpoints is an inherent property of user-assisted out-of-band authentica | it.</t> | |||
tion. To understand the potential consequences of the user mistake, we need to c | <t>EAP-NOOB relies on implicit, protected success indicators in the Comp | |||
onsider a few different scenarios. In the first scenario, there is no malicious | letion | |||
party, and the user makes an accidental mistake between two out-of-the-box devic | Exchange and | |||
es that are both ready to be registered to a server. If the user delivers the OO | Reconnect Exchange. Successful verification of MACs and MACs2 in the EAP- | |||
B message from the wrong device to the server, confusion may arise but usually n | Request | |||
o security issues. In the second scenario, an attacker intentionally tricks the | message from the server (message type 6 and message type 9, respectively) | |||
user, for example, by substituting the original peer device with a compromised o | acts as an | |||
ne. This is essentially a supply chain attack where the user accepts a compromis | implicit, protected success indication to the peer. Similarly, successful | |||
ed physical device. | verification | |||
</t> | of MACp and MACp2 in the EAP-Response message from the peer (message type | |||
<t> | 6 and | |||
There is also a third scenario, in which an opportunistic attacker tri | message type 9, respectively) act as an implicit, protected success indic | |||
es to take advantage of the user's accidental mistake. For example, the user cou | ation to the | |||
ld play an audio or a blinking LED message to a device that is not expecting to | server. </t> | |||
receive it. In simple security bootstrapping solutions that transfer a master ke | <t>EAP-NOOB failure messages are not protected. Protected failure result | |||
y to the device via the OOB channel, the device could misuse or leak the acciden | indications | |||
tally received master key. EAP-NOOB is not vulnerable to such opportunistic atta | would not significantly improve availability since EAP-NOOB reacts to mos | |||
ckers because the OOB message has no value to anyone who did not take part in th | t malformed | |||
e corresponding Initial Exchange. | data by ending the current EAP conversation in EAP-Failure. However, sinc | |||
</t> | e EAP-NOOB | |||
<t> | spans multiple conversations, failure in one conversation usually means n | |||
One mechanism that can mitigate user mistakes is certification of peer | o state | |||
devices. A certificate or an attestation token (e.g.,<xref target="I-D.tschofen | change on the level of the EAP-NOOB state machine.</t> | |||
ig-tls-cwt"/> and <xref target="I-D.ietf-rats-eat"/>) can convey to the server a | ||||
uthentic identifiers and attributes, such as model and serial number, of the pee | ||||
r device. Compared to a fully certificate-based authentication, however, EAP-NOO | ||||
B can be used without trusted third parties and does not require the user to kno | ||||
w any identifier of the peer device; physical access to the device is sufficient | ||||
for bootstrapping with EAP-NOOB. | ||||
</t> | ||||
<t> | ||||
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, t | ||||
he attack is akin to phishing attacks where the user is tricked into accessing t | ||||
he wrong URL and wrong web page. OOB implementation with a dedicated app on a mo | ||||
bile device, which communicates with a server API at a pre-configured URL, can p | ||||
rotect against such attacks. | ||||
</t> | ||||
<t> | ||||
After the device registration, an attacker could clone the device iden | ||||
tity by copying the keys from the persistent EAP-NOOB association into another d | ||||
evice. The attacker can be an outsider who gains access to the keys or the devic | ||||
e owner who wants to have two devices matching the same registration. The clonin | ||||
g threats can be mitigated by creating the cryptographic keys and storing the pe | ||||
rsistent EAP-NOOB association on the peer device in a secure hardware component | ||||
such as a trusted execution environment (TEE). Furthermore, remote attestation o | ||||
n the application level could provide assurance to the server that the device ha | ||||
s not been cloned. Reconnect Exchange with a new cryptosuite (KeyingMode=3) will | ||||
also disconnect all but the first clone that performs the update. | ||||
</t> | ||||
</section> | </section> | |||
<section anchor="channel-binding" numbered="true" toc="default"> | ||||
<section title="Trusted path issues and misbinding attacks" anchor="truste | <name>Channel Binding</name> | |||
dpath"> | <t>EAP channel binding, defined in <xref target="RFC6677" format="defaul | |||
<t> | t"/>, means | |||
Another potential threat is spoofed user input or output on the peer d | that the endpoints compare their perceptions of network properties, such | |||
evice. When the user is delivering the OOB message to or from the correct peer d | as | |||
evice, a trusted path between the user and the peer device is needed. That is, t | lower-layer identifiers, over the secure channel established by EAP authe | |||
he user must communicate directly with an authentic operating system and EAP-NOO | ntication. | |||
B implementation in the peer device and not with a spoofed user interface. Other | <xref target="RFC6677" sectionFormat="of" section="4.1"/> defines two app | |||
wise, a registered device that is under the control of the attacker could emulat | roaches to | |||
e the behavior of an unregistered device. The secure path can be implemented, fo | channel binding. EAP-NOOB follows the first approach, in which the peer a | |||
r example, by having the user press a reset button to return the device to the U | nd server | |||
nregistered state and to invoke a trusted UI. The problem with such trusted path | exchange plaintext information about the network over a channel that is i | |||
s is that they are not standardized across devices. | ntegrity | |||
</t> | protected with keys derived during the EAP execution. More specifically, | |||
<t> | channel | |||
Another potential consequence of a spoofed UI is the misbinding attack | information is exchanged in the plaintext PeerInfo and ServerInfo objects | |||
where the user tries to register a correct but compromised device, which tricks | and is later | |||
the user into registering another (uncompromised) device instead. For example, | verified with message authentication codes (MACp, MACs, MACp2, and MACs2) | |||
the compromised device might have a malicious full-screen app running, which pre | . This allows | |||
sents to the user QR codes copied, in real time, from another device's screen. I | policy-based comparison with locally perceived network properties on eith | |||
f the unwitting user scans the QR code and delivers the OOB message in it to the | er side, as | |||
server, the wrong device may become registered in the server. Such misbinding v | well as logging for debugging purposes. The peer <bcp14>MAY</bcp14> inclu | |||
ulnerabilities arise because the user does not have any secure way of verifying | de in | |||
that the in-band cryptographic handshake and the out-of-band physical access are | PeerInfo any data items that it wants to bind to the EAP-NOOB association | |||
terminated at the same physical device. Sethi et al. <xref target="Sethi19"/> a | and to the | |||
nalyze the misbinding threat against device-pairing protocols and also EAP-NOOB. | exported keys. These can be properties of the authenticator or the access | |||
Essentially, all protocols where the authentication relies on the user's physic | link, such | |||
al access to the device are vulnerable to misbinding, including EAP-NOOB. | as the SSID and BSSID of the wireless network (see <xref | |||
</t> | target="tab-serverinfo-meaning" format="default"/>). As noted in <xref | |||
<t> | target="RFC6677" sectionFormat="of" section="4.3"/>, the scope of the cha | |||
A standardized trusted path for communicating directly with the truste | nnel binding | |||
d computing base in a physical device would mitigate the misbinding threat, but | varies between deployments. For example, the server may have less link-la | |||
such paths rarely exist in practice. Careful asset tracking on the server side c | yer | |||
an also prevent most misbinding attacks if the peer device sends its identifiers | information available from roaming networks than from a local enterprise | |||
or attributes in the PeerInfo field and the server compares them with the expec | network, and | |||
ted values. The wrong but uncompromised device's PeerInfo will not match the exp | it may be unable to verify all the network properties received in PeerInf | |||
ected values. Device certification by the manufacturer can further strengthen th | o. There are | |||
e asset tracking. | also privacy considerations related to exchanging the ServerInfo and Peer | |||
</t> | Info while | |||
roaming (see <xref target="privacyconsiderations" format="default"/>). </ | ||||
t> | ||||
<t>Channel binding to secure channels, defined in <xref target="RFC5056" | ||||
format="default"/>, binds authentication at a higher protocol layer to a | ||||
secure | ||||
channel at a lower layer. Like most EAP methods, EAP-NOOB exports the se | ||||
ssion 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 cr | ||||
eated by | ||||
EAP-NOOB and to the session keys MSK and EMSK.</t> | ||||
</section> | </section> | |||
<section anchor="dos" numbered="true" toc="default"> | ||||
<section title="Peer identifiers and attributes" anchor="peeridentifiers"> | <name>Denial of Service</name> | |||
<t> | <t>While denial-of-service (DoS) attacks by on-link attackers cannot be | |||
The PeerId value in the protocol is a server-allocated identifier for | fully | |||
its association with the peer and SHOULD NOT be shown to the user because its va | prevented, the design goal in EAP-NOOB is to void long-lasting failure ca | |||
lue is initially ephemeral. Since the PeerId is allocated by the server and the | used by an | |||
scope of the identifier is the single server, the so-called identifier squatting | attacker who is present only temporarily or intermittently. The main defe | |||
attacks, where a malicious peer could reserve another peer's identifier, are no | nse mechanism | |||
t possible in EAP-NOOB. The server SHOULD assign a random or pseudo-random PeerI | is the persistent EAP-NOOB association, which is never deleted automatica | |||
d to each new peer. It SHOULD NOT select the PeerId based on any peer characteri | lly due to | |||
stics that it may know, such as the peer's link-layer network address. | in-band messages or error indications. Thus, the endpoints can always use | |||
</t> | the | |||
<t> | persistent association for reconnecting after the DoS attacker leaves the | |||
User reset or failure in the OOB Step can cause the peer to perform ma | network. In | |||
ny Initial Exchanges with the server, which allocates many PeerId values and sto | this sense, the persistent association serves the same function in EAP-NO | |||
res the ephemeral protocol state for them. The peer will typically only remember | OB as a | |||
the latest ones. EAP-NOOB leaves it to the implementation to decide when to del | permanent primary key or certificate in other authentication protocols. W | |||
ete these ephemeral associations. There is no security reason to delete them ear | e discuss | |||
ly, and the server does not have any way to verify that the peers are actually t | logical attacks against the updates of the persistent association in <xre | |||
he same one. Thus, it is safest to store the ephemeral states on the server for | f | |||
at least one day. If the OOB messages are sent only in the server-to-peer direct | target="completion-loss" format="default"/>. </t> | |||
ion, the server SHOULD NOT delete the ephemeral state before all the related Noo | <t>In addition to logical DoS attacks, it is necessary to consider resou | |||
b values have expired. | rce exhaustion | |||
</t> | attacks against the EAP server. The number of persistent EAP-NOOB associa | |||
<t> | tions created | |||
After completion of EAP-NOOB, the server may store the PeerInfo data, | in the server is limited by the need for a user to assist in delivering t | |||
and the user may use it to identify the peer and its attributes, such as the mak | he OOB | |||
e and model or serial number. A compromised peer could lie in the PeerInfo which | message. The users can be authenticated for the input or output of the OO | |||
it sends to the server. If the server stores any information about the peer, it | B message at | |||
is important that this information is approved by the user during or after the | the EAP server, and any users who create excessive numbers of persistent | |||
OOB Step. Without verification by the user or authentication on the application | associations | |||
level, the PeerInfo is not authenticated information and should not be relied on | can be held accountable and their associations can be deleted by the serv | |||
. One possible use for the PeerInfo field is EAP channel binding (see <xref targ | er | |||
et="channel-binding"/>). | administrator. What the attacker can do without user authentication is to | |||
</t> | perform the | |||
Initial Exchange repeatedly and create a large number of ephemeral associ | ||||
ations | ||||
(server in Waiting for OOB (1) state) without ever delivering the OOB mes | ||||
sage. In | ||||
<xref target="peeridentifiers" format="default"/>, it was suggested that | ||||
the server | ||||
should store the ephemeral states for at least a day. This may require of | ||||
f-loading the | ||||
state storage from memory to disk during a DoS attack. However, if the se | ||||
rver | ||||
implementation is unable to keep up with a rate of Initial Exchanges perf | ||||
ormed 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.</t> | ||||
<t>There are some trade-offs in the protocol design between politely bac | ||||
king off and | ||||
giving | ||||
way to DoS attackers. An on-link DoS attacker could spoof the SleepTime v | ||||
alue 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 attac | ||||
ker 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 fu | ||||
nctional. | ||||
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 a | ||||
bout 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 mention | ||||
ed in <xref | ||||
target="unwantedpeer" format="default"/>, 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 reaso | ||||
nable 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 r | ||||
easonable | ||||
limits will increase the acceptance of the protocol. The maximum backoff | ||||
times could | ||||
be updated to be shorter as the protocol implementations mature.</t> | ||||
</section> | </section> | |||
<section anchor="completion-loss" numbered="true" toc="default"> | ||||
<section title="Downgrading threats" anchor="downgrading"> | <name>Recovery from Loss of Last Message</name> | |||
<t> | <t>The EAP-NOOB Completion Exchange, as well as the Reconnect Exchange w | |||
The fingerprint Hoob protects all the information exchanged in the Ini | ith | |||
tial Exchange, including the cryptosuite negotiation. The message authentication | cryptosuite update, results in a persistent state change that should take | |||
codes MACs and MACp also protect the same information. The message authenticati | place either | |||
on codes MACs2 and MACp2 protect information exchanged during key renegotiation | on both endpoints or on neither; otherwise, the result is a state mismatc | |||
in the Reconnect Exchange. This prevents downgrading attacks to weaker cryptosui | h that | |||
tes as long as the possible attacks take more time than the maximum time allowed | requires user action to resolve. The state mismatch can occur if the fina | |||
for the EAP-NOOB completion. This is typically the case for recently discovered | l EAP | |||
cryptanalytic attacks. | response of the exchanges is lost. In the Completion Exchange, the loss o | |||
</t> | f the final | |||
<t> | response (Type=6) results in the peer moving to the Registered (4) state | |||
As an additional precaution, the EAP server and peer MUST check for do | and creating | |||
wngrading attacks in the Reconnect Exchange as follows. As long as the server or | a persistent EAP-NOOB association while the server stays in an ephemeral | |||
peer saves any information about the other endpoint, it MUST also remember the | state (1 or | |||
previously negotiated cryptosuite and MUST NOT accept renegotiation of any crypt | 2). In the Reconnect Exchange, the loss of the final response (Type=9) re | |||
osuite that is known to be weaker than the previous one, such as a deprecated cr | sults in the | |||
yptosuite. Determining the relative strength of the cryptosuites is out of scope | peer moving to the Registered (4) state and updating its persistent key m | |||
of this specification and may be managed by implementations or by local policie | aterial Kz | |||
s at the peer and server. | while the server stays in the Reconnecting (3) state and keeps the old ke | |||
</t> | y | |||
<t> | material.</t> | |||
Integrity of the direction negotiation cannot be verified in the same | <t>The state mismatch is an example of an unavoidable problem in distrib | |||
way as the integrity of the cryptosuite negotiation. That is, if the OOB channel | uted systems: | |||
used in an application is critically insecure in one direction, an on-path atta | it is theoretically impossible to guarantee synchronous state changes in | |||
cker could modify the negotiation messages and thereby cause that direction to b | endpoints | |||
e used. Applications that support OOB messages in both directions SHOULD therefo | that communicate asynchronously. The protocol will always have one critic | |||
re ensure that the OOB channel has sufficiently strong security in both directio | al message | |||
ns. While this is a theoretical vulnerability, it could arise in practice if EAP | that may get lost, so that one side commits to the state change and the o | |||
-NOOB is deployed in new applications. Currently, we expect most peer devices to | ther side | |||
support only one OOB direction, in which case interfering with the direction ne | does not. In EAP, the critical message is the final response from the pee | |||
gotiation can only prevent the completion of the protocol. | r to the | |||
</t> | server. While the final response is normally followed by EAP-Success, <xr | |||
<t> | ef | |||
The long-term shared key material Kz in the persistent EAP-NOOB associ | target="RFC3748" sectionFormat="comma" section="4.2"/> states that the pe | |||
ation is established with an ECDHE key exchange when the peer and server are fir | er | |||
st associated. It is a weaker secret than a manually configured random shared ke | <bcp14>MAY</bcp14> assume that the EAP-Success was lost and the authentic | |||
y because advances in cryptanalysis against the used ECDHE curve could eventuall | ation was | |||
y enable the attacker to recover Kz. EAP-NOOB protects against such attacks by a | successful. Furthermore, EAP method implementations in the peer do not re | |||
llowing cryptosuite upgrades in the Reconnect Exchange and by updating the share | ceive | |||
d key material Kz whenever the cryptosuite is upgraded. We do not expect the cry | notification of the EAP-Success message from the parent EAP state machine | |||
ptosuite upgrades to be frequent, but if an upgrade becomes necessary, it can be | <xref | |||
done without manual reset and reassociation of the peer devices. | target="RFC4137" format="default"/>. For these reasons, EAP-NOOB on the p | |||
</t> | eer side | |||
commits to a state change already when it sends the final response.</t> | ||||
<t>The best available solution to the loss of the critical message is to | ||||
keep trying. | ||||
EAP retransmission behavior defined in <xref target="RFC3748" sectionForm | ||||
at="of" | ||||
section="4.3"/> suggests 3-5 retransmissions. In the absence of an attack | ||||
er, 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 (K | ||||
eyingMode=0) | ||||
and Reconnect Exchange with cryptosuite upgrade (KeyingMode=3), this coul | ||||
d | ||||
result in a state mismatch and persistent denial of service until the use | ||||
r resets the | ||||
peer state.</t> | ||||
<t>EAP-NOOB implements its own recovery mechanism that allows unlimited | ||||
retries of the | ||||
Reconnect Exchange. When the DoS attacker eventually stops dropping packe | ||||
ts on the | ||||
in-band channel, the protocol will recover. The logic for this recovery m | ||||
echanism is | ||||
specified in <xref target="reconnectexchange" format="default"/>.</t> | ||||
<t>EAP-NOOB does not implement the same kind of retry mechanism in the C | ||||
ompletion | ||||
Exchange. The reason is that there is always a user involved in the initi | ||||
al | ||||
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 ne | ||||
eds to work | ||||
without user involvement.</t> | ||||
</section> | </section> | |||
<section anchor="privacyconsiderations" numbered="true" toc="default"> | ||||
<section title="Protected success and failure indications" anchor="indicat | <name>Privacy Considerations</name> | |||
ors"> | <t>There are privacy considerations related to performing the Reconnect | |||
<t> | Exchange while | |||
Section 7.16 of <xref target="RFC3748"/> allows EAP methods to specify | roaming. The peer and server may send updated PeerInfo and ServerInfo fie | |||
protected result indications because EAP-Success and EAP-Failure packets are ne | lds in the | |||
ither acknowledged nor integrity protected. <xref target="RFC3748"/> notes that | Reconnect Exchange. This data is sent unencrypted between the peer and th | |||
these indications may be explicit or implicit. | e EAP | |||
</t> | authenticator, such as a wireless access point. Thus, it can be observed | |||
<t> | by both | |||
EAP-NOOB relies on implicit protected success indicators in the Comple | outsiders and the access network. The PeerInfo field contains identifiers | |||
tion and Reconnect exchange. Successful verification of MACs and MACs2 in the EA | and other | |||
P-Request message from the server (message type 6 and message type 9, respective | information about the peer device (see <xref target="tab-serverinfo-meani | |||
ly) acts as an implicit protected success indication to the peer. Similarly, suc | ng" | |||
cessful verification of MACp and MACp2 in the EAP-Response message from the peer | format="default"/>). While the information refers to the peer device and | |||
(message type 6 and message type 9, respectively) act as an implicit protected | not directly | |||
success indication to the server. | to the user, it can leak information about the user to the access network | |||
</t> | and to | |||
<t> | outside observers. The ServerInfo, on the other hand, can leak informatio | |||
EAP-NOOB failure messages are not protected. Protected failure result | n about the | |||
indications would not significantly improve availability since EAP-NOOB reacts t | peer's affiliation with the home network. For this reason, the optional P | |||
o most malformed data by ending the current EAP conversation in EAP-Failure. How | eerInfo and | |||
ever, since EAP-NOOB spans multiple conversations, failure in one conversation u | ServerInfo in the Reconnect Exchange <bcp14>SHOULD</bcp14> be omitted unl | |||
sually means no state change on the level of the EAP-NOOB state machine. | ess some | |||
</t> | critical data has changed and it cannot be updated on the application lay | |||
er.</t> | ||||
<t>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 upd | ||||
ating the | ||||
PeerId at each Reconnect Exchange. In that case, it is necessary to consi | ||||
der how the | ||||
authenticator and access-network administrators can recognize and add mis | ||||
behaving peer | ||||
devices to a deny list, as well as how to avoid loss of synchronization b | ||||
etween the | ||||
server and the peer if messages are lost during the identifier update.</t | ||||
> | ||||
<t>To enable stronger identity protection in later versions of EAP-NOOB, | ||||
the optional | ||||
server-assigned NAI (NewNAI) <bcp14>SHOULD</bcp14> have a constant userna | ||||
me part. The | ||||
<bcp14>RECOMMENDED</bcp14> username is "noob". The server <bcp14>MAY</bcp | ||||
14>, however, | ||||
send a different username in NewNAI to avoid username collisions within i | ||||
ts realm or | ||||
to conform to a local policy on usernames. </t> | ||||
</section> | ||||
<section anchor="securityclaims" numbered="true" toc="default"> | ||||
<name>EAP Security Claims</name> | ||||
<t>EAP security claims are defined in <xref target="RFC3748" sectionForm | ||||
at="of" | ||||
section="7.2.1"/>. The security claims for EAP-NOOB are listed in <xref | ||||
target="tab-securityclaims" format="default"/>.</t> | ||||
<table anchor="tab-securityclaims" align="center"> | ||||
<name>EAP Security Claims</name> | ||||
<thead> | ||||
<tr> | ||||
<th align="left">Security Property</th> | ||||
<th align="left">EAP-NOOB Claim</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td align="left">Authentication mechanism</td> | ||||
<td align="left">ECDHE key exchange with out-of-band authenticatio | ||||
n</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Protected cryptosuite negotiation</td> | ||||
<td align="left">yes</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Mutual authentication</td> | ||||
<td align="left">yes</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Integrity protection</td> | ||||
<td align="left">yes</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Replay protection</td> | ||||
<td align="left">yes</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Confidentiality</td> | ||||
<td align="left">no</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Key derivation</td> | ||||
<td align="left">yes</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Key strength</td> | ||||
<td align="left">The specified cryptosuites provide key strength o | ||||
f at least 128 | ||||
bits.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Dictionary attack protection</td> | ||||
<td align="left">yes</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Fast reconnect</td> | ||||
<td align="left">yes</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Cryptographic binding</td> | ||||
<td align="left">not applicable</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Session independence</td> | ||||
<td align="left">yes</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Fragmentation</td> | ||||
<td align="left">no</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Channel binding</td> | ||||
<td align="left">yes (The ServerInfo and PeerInfo can be used to c | ||||
onvey | ||||
integrity-protected channel properties, such as network SSID or pee | ||||
r MAC | ||||
address.)</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | </section> | |||
</section> | ||||
</middle> | ||||
<back> | ||||
<section title="Channel Binding" anchor="channel-binding"> | <displayreference target="I-D.tschofenig-tls-cwt" to="TLS-CWT"/> | |||
<t> | <displayreference target="I-D.ietf-rats-eat" to="RATS-EAT"/> | |||
EAP channel binding, defined in <xref target="RFC6677"/>, means that t | ||||
he endpoints compare their perceptions of network properties, such as lower-laye | ||||
r identifiers, over the secure channel established by EAP authentication. Sectio | ||||
n 4.1 of <xref target="RFC6677"/> defines two approaches to channel binding. EAP | ||||
-NOOB follows the first approach, in which the peer and server exchange plaintex | ||||
t 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 verifie | ||||
d with message authentication codes (MACp, MACs, MACp2, MACs2). This allows poli | ||||
cy-based comparison with locally perceived network properties on either side, as | ||||
well as logging for debugging purposes. The peer MAY include in PeerInfo any da | ||||
ta items that it wants to bind to the EAP-NOOB association and to the exported k | ||||
eys. These can be properties of the authenticator or the access link, such as th | ||||
e SSID and BSSID of the wireless network (see <xref target="table-serverinfo-mea | ||||
ning"/>). As noted in Section 4.3 of <xref target="RFC6677"/>, the scope of the | ||||
channel binding varies between deployments. For example, the server may have les | ||||
s link-layer information available from roaming networks than from a local enter | ||||
prise network, and it may be unable to verify all the network properties receive | ||||
d in PeerInfo. There are also privacy considerations related to exchanging the S | ||||
erverInfo and PeerInfo while roaming (see <xref target="privacyconsiderations"/> | ||||
). | ||||
</t> | ||||
<t> | ||||
Channel binding to secure channels, defined in <xref target="RFC5056"/ | ||||
>, binds authentication at a higher protocol layer to a secure channel at a lowe | ||||
r 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 t | ||||
hese keys. Additionally, EAP-NOOB exports the key AMSK, which may be used to bin | ||||
d application-layer authentication to the secure channel created by EAP-NOOB and | ||||
to the session keys MSK and EMSK. | ||||
</t> | ||||
</section> | ||||
<section title="Denial of Service" anchor="dos"> | <references> | |||
<t> | <name>References</name> | |||
While denial-of-service (DoS) attacks by on-link attackers cannot be f | <references> | |||
ully prevented, the design goal in EAP-NOOB is to void long-lasting failure caus | <name>Normative References</name> | |||
ed by an attacker who is present only temporarily or intermittently. The main de | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
fense mechanism is the persistent EAP-NOOB association, which is never deleted a | .2104.xml"/> | |||
utomatically due to in-band messages or error indications. Thus, the endpoints c | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
an always use the persistent association for reconnecting after the DoS attacker | .2119.xml"/> | |||
leaves the network. In this sense, the persistent association serves the same f | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
unction in EAP-NOOB as a permanent master key or certificate in other authentica | .3748.xml"/> | |||
tion protocols. We discuss logical attacks against the updates of the persistent | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
association in <xref target="completion-loss"/>. | .4648.xml"/> | |||
</t> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
<t> | .5247.xml"/> | |||
In addition to logical DoS attacks, it is necessary to consider resour | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
ce exhaustion attacks against the EAP server. The number of persistent EAP-NOOB | .6234.xml"/> | |||
associations created in the server is limited by the need for a user to assist i | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
n delivering the OOB message. The users can be authenticated for the input or ou | .7517.xml"/> | |||
tput of the OOB message at the EAP server, and any users who create excessive nu | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
mbers of persistent associations can be held accountable and their associations | .7518.xml"/> | |||
can be deleted by the server administrator. What the attacker can do without use | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
r authentication is to perform the Initial Exchange repeatedly and create a larg | .7542.xml"/> | |||
e number of ephemeral associations (server in state 1, Waiting for OOB) without | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
ever delivering the OOB message. Above in <xref target="peeridentifiers"/>, it w | .7748.xml"/> | |||
as suggested that the server should store the ephemeral states for at least a da | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
y. This may require off-loading the state storage from memory to disk during a D | .8037.xml"/> | |||
oS attack. However, if the server implementation is unable to keep up with a rat | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
e of Initial Exchanges performed by a DoS attacker and needs to drop some epheme | .8174.xml"/> | |||
ral states, no damage is caused to already created persistent associations, and | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
the honest users can resume registering new peers when the DoS attacker leaves t | .8126.xml"/> | |||
he network. | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
</t> | .8259.xml"/> | |||
<t> | ||||
There are some trade-offs in the protocol design between polite back-o | ||||
ff and giving way to DoS attackers. An on-link DoS attacker could spoof the Slee | ||||
pTime value in the Initial Exchange or Waiting Exchange to cause denial of servi | ||||
ce against a specific peer device. There is an upper limit on the SleepTime (360 | ||||
0 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 a | ||||
fter the delivery of the OOB message before the device performs the Completion E | ||||
xchange and becomes functional. Similarly, the Unwanted peer error (error code 2 | ||||
001) 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 connecti | ||||
ng to the server and wait for the user to trigger a reconnection attempt, e.g., | ||||
by resetting the device. As mentioned in <xref target="unwantedpeer"/>, peer dev | ||||
ices that are unable to alert the user should continue to retry the Initial Exch | ||||
ange infrequently to avoid a permanent DoS condition. We believe a maximum backo | ||||
ff 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 att | ||||
acks, and politely backing off within some reasonable limits will increase the a | ||||
cceptance of the protocol. The maximum backoff times could be updated to be shor | ||||
ter as the protocol implementations mature. | ||||
</t> | ||||
</section> | ||||
<section title="Recovery from loss of last message" anchor="completion-los | <reference anchor="NIST-DH" target="https://nvlpubs.nist.gov/ | |||
s"> | nistpubs/SpecialPublications/NIST.SP.800-56Ar3.pdf"> | |||
<t> | <front> | |||
The EAP-NOOB Completion Exchange, as well as the Reconnect Exchange wi | <title>Recommendation for Pair-Wise Key-Establishment Schemes Using | |||
th cryptosuite update, result in a persistent state change that should take plac | Discrete | |||
e either on both endpoints or on neither; otherwise, the result is a state misma | Logarithm Cryptography</title> | |||
tch that requires user action to resolve. The state mismatch can occur if the fi | <author initials="E." surname="Barker" fullname="Elaine Barker"> | |||
nal EAP response of the exchanges is lost. In the Completion Exchange, the loss | <organization>National Institute of Standards and Technology</orga | |||
of the final response (Type=6) results in the peer moving to Registered (4) stat | nization> | |||
e and creating a persistent EAP-NOOB association while the server stays in an ep | </author> | |||
hemeral state (1 or 2). In the Reconnect Exchange, the loss of the final respons | <author initials="L." surname="Chen" fullname="Lily Chen"> | |||
e (Type=9) results in the peer moving to the Registered (4) state and updating i | <organization>National Institute of Standards and Technology</orga | |||
ts persistent key material Kz while the server stays in the Reconnecting (3) sta | nization> | |||
te and keeps the old key material. | </author> | |||
</t> | <author initials="A." surname="Roginsky" fullname="Allen Roginsky"> | |||
<t> | <organization>National Institute of Standards and Technology</orga | |||
The state mismatch is an example of an unavoidable problem in distribu | nization> | |||
ted systems: it is theoretically impossible to guarantee synchronous state chang | </author> | |||
es in endpoints that communicate asynchronously. The protocol will always have o | <author initials="A." surname="Vassilev" fullname="Apostol Vassilev" | |||
ne critical message that may get lost, so that one side commits to the state cha | > | |||
nge and the other side does not. In EAP, the critical message is the final respo | <organization>National Institute of Standards and Technology</orga | |||
nse from the peer to the server. While the final response is normally followed b | nization> | |||
y EAP-Success, <xref target="RFC3748"/> section 4.2 states that the peer MAY ass | </author> | |||
ume that the EAP-Success was lost and the authentication was successful. Further | <author initials="R." surname="Davis" fullname="Richard Davis"> | |||
more, EAP method implementations in the peer do not receive notification of the | <organization>National Security Agency</organization> | |||
EAP-Success message from the parent EAP state machine <xref target="RFC4137"/>. | </author> | |||
For these reasons, EAP-NOOB on the peer side commits to a state change already w | <date month="April" year="2018"/> | |||
hen it sends the final response. | </front> | |||
</t> | <seriesInfo name="DOI" value="10.6028/NIST.SP.800-56Ar3"/> | |||
<t> | <seriesInfo name="NIST Special Publication" value="800-56A Revision 3" | |||
The best available solution to the loss of the critical message is to | /> | |||
keep trying. EAP retransmission behavior defined in Section 4.3 of <xref target= | </reference> | |||
"RFC3748"/> suggests 3-5 retransmissions. In the absence of an attacker, this wo | ||||
uld be sufficient to reduce the probability of failure to an acceptable level. H | ||||
owever, a determined attacker on the in-band channel can drop the final EAP-Resp | ||||
onse message and all subsequent retransmissions. In the Completion Exchange (Key | ||||
ingMode=0) and in the Reconnect Exchange with cryptosuite upgrade (KeyingMode=3) | ||||
, this could result in a state mismatch and persistent denial of service until t | ||||
he user resets the peer state. | ||||
</t> | ||||
<t> | ||||
EAP-NOOB implements its own recovery mechanism that allows unlimited r | ||||
etries of the Reconnect Exchange. When the DoS attacker eventually stops droppin | ||||
g packets on the in-band channel, the protocol will recover. The logic for this | ||||
recovery mechanism is specified in <xref target="reconnectexchange"/>. | ||||
</t> | ||||
<t> | ||||
EAP-NOOB does not implement the same kind of retry mechanism in the Co | ||||
mpletion Exchange. The reason is that there is always a user involved in the ini | ||||
tial association process, and the user can repeat the OOB Step to complete the a | ||||
ssociation after the DoS attacker has left. On the other hand, Reconnect Exchang | ||||
e needs to work without user involvement. | ||||
</t> | ||||
</section> | ||||
<section title="Privacy considerations" anchor="privacyconsiderations"> | <reference anchor="FIPS186-4"> | |||
<t> | <front> | |||
There are privacy considerations related to performing the Reconnect E | <title>Digital Signature Standard (DSS)</title> | |||
xchange while roaming. The peer and server may send updated PeerInfo and ServerI | <author> | |||
nfo fields in the Reconnect Exchange. This data is sent unencrypted between the | <organization>National Institute of Standards and Technology (NIST | |||
peer and the EAP authenticator, such as a wireless access point. Thus, it can be | )</organization> | |||
observed by both outsiders and the access network. The PeerInfo field contains | </author> | |||
identifiers and other information about the peer device (see <xref target="table | <date month="July" year="2013"/> | |||
-serverinfo-meaning" />). While the information refers to the peer device and no | </front> | |||
t directly to the user, it can leak information about the user to the access net | <seriesInfo name="DOI" value="10.6028/NIST.FIPS.186-4"/> | |||
work and to outside observers. The ServerInfo, on the other hand, can leak infor | <seriesInfo name="FIPS" value="186-4"/> | |||
mation about the peer's affiliation with the home network. For this reason, the | </reference> | |||
optional PeerInfo and ServerInfo in the Reconnect Exchange SHOULD be omitted unl | ||||
ess some critical data has changed and it cannot be updated on the application l | ||||
ayer. | ||||
</t> | ||||
<t> | ||||
Peer devices that randomize their layer-2 address to prevent tracking | ||||
can do this whenever the user resets the EAP-NOOB association. During the lifeti | ||||
me of the association, the PeerId is a unique identifier that can be used to tra | ||||
ck the peer in the access network. Later versions of this specification may cons | ||||
ider updating the PeerId at each Reconnect Exchange. In that case, it is necessa | ||||
ry to consider how the authenticator and access-network administrators can recog | ||||
nize and add misbehaving peer devices to a deny list, as well as, how to avoid l | ||||
oss of synchronization between the server and the peer if messages are lost duri | ||||
ng the identifier update. | ||||
</t> | ||||
<t> | ||||
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 us | ||||
ername in NewNAI to avoid username collisions within its realm or to conform to | ||||
a local policy on usernames. | ||||
</t> | ||||
</section> | ||||
<section title="EAP security claims" anchor="securityclaims"> | <reference anchor="EUI-48"> | |||
<t> | <front> | |||
EAP security claims are defined in section 7.2.1 of <xref target="RFC3 | <title>IEEE Standard for Local and Metropolitan Area Networks: Overv | |||
748"/>. The security claims for EAP-NOOB are listed in <xref target="table-secur | iew and | |||
ityclaims"/>. | Architecture</title> | |||
</t> | <author> | |||
<texttable title="EAP security claims" anchor="table-securityclaims"> | <organization>IEEE</organization> | |||
<ttcol>Security property</ttcol> | </author> | |||
<ttcol>EAP-NOOB claim</ttcol> | <date month="June" year="2014"/> | |||
<c>Authentication mechanism</c> | </front> | |||
<c>ECDHE key exchange with out-of-band authentication</c> | <seriesInfo name="DOI" value="10.1109/IEEESTD.2014.6847097"/> | |||
<c></c><c></c> | <seriesInfo name="IEEE Standard" value="802-2014"/> | |||
<c>Protected cryptosuite negotiation</c> | </reference> | |||
<c>yes</c> | </references> | |||
<c></c><c></c> | <references> | |||
<c>Mutual authentication</c> | <name>Informative References</name> | |||
<c>yes</c> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<c></c><c></c> | FC.2904.xml"/> | |||
<c>Integrity protection</c> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
<c>yes</c> | C.4137.xml"/> | |||
<c></c><c></c> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
<c>Replay protection</c> | C.3986.xml"/> | |||
<c>yes</c> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
<c></c><c></c> | C.5056.xml"/> | |||
<c>Confidentiality</c> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
<c>no</c> | C.6677.xml"/> | |||
<c></c><c></c> | ||||
<c>Key derivation</c> | ||||
<c>yes</c> | ||||
<c></c><c></c> | ||||
<c>Key strength</c> | ||||
<c>The specified cryptosuites provide key strength of at least 128 bit | ||||
s.</c> | ||||
<c></c><c></c> | ||||
<c>Dictionary attack protection</c> | ||||
<c>yes</c> | ||||
<c></c><c></c> | ||||
<c>Fast reconnect</c> | ||||
<c>yes</c> | ||||
<c></c><c></c> | ||||
<c>Cryptographic binding</c> | ||||
<c>not applicable</c> | ||||
<c></c><c></c> | ||||
<c>Session independence</c> | ||||
<c>yes</c> | ||||
<c></c><c></c> | ||||
<c>Fragmentation</c> | ||||
<c>no</c> | ||||
<c></c><c></c> | ||||
<c>Channel binding</c> | ||||
<c>yes (The ServerInfo and PeerInfo can be used to convey integrity-pr | ||||
otected channel properties such as network SSID or peer MAC address.)</c> | ||||
</texttable> | ||||
</section> | ||||
</section> | ||||
</middle> | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D.t | |||
<back> | schofenig-tls-cwt.xml"/> | |||
<xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D.i | ||||
etf-rats-eat.xml"/> | ||||
<references title="Normative references"> | ||||
<?rfc include='reference.RFC.2104.xml'?> <!-- HMAC --> | ||||
<?rfc include='reference.RFC.2119.xml'?> <!-- Terminology --> | ||||
<?rfc include='reference.RFC.3748.xml'?> <!-- EAP --> | ||||
<?rfc include='reference.RFC.4648.xml'?> <!-- Base64 --> | ||||
<?rfc include='reference.RFC.5247.xml'?> <!-- EAP key management --> | ||||
<?rfc include='reference.RFC.6234.xml'?> <!-- SHA-256 --> | ||||
<?rfc include='reference.RFC.7517.xml'?> <!-- JWK --> | ||||
<?rfc include='reference.RFC.7518.xml'?> <!-- JWA --> | ||||
<?rfc include='reference.RFC.7542.xml'?> <!-- NAI --> | ||||
<?rfc include='reference.RFC.7748.xml'?> <!-- Curve25519 --> | ||||
<?rfc include='reference.RFC.8037.xml'?> <!-- JWK for curve25519 --> | ||||
<?rfc include='reference.RFC.8174.xml'?> <!-- Terminology --> | ||||
<?rfc include='reference.RFC.8126.xml'?> <!-- IANA --> | ||||
<?rfc include='reference.RFC.8259.xml'?> <!-- JSON --> | ||||
<reference anchor="NIST-DH" target="https://nvlpubs.nist.gov/nistpubs/Spec | ||||
ialPublications/NIST.SP.800-56Ar3.pdf"> | ||||
<front> | ||||
<title>Recommendation for Pair-Wise Key Establishment Schemes Using Di | ||||
screte Logarithm Cryptography</title> | ||||
<author initials="E." surname="Barker" fullname="Elaine Barker"> | ||||
<organization>National Institute of Standards and Technology</organi | ||||
zation> | ||||
</author> | ||||
<author initials="L." surname="Chen" fullname="Lily Chen"> | ||||
<organization>National Institute of Standards and Technology</organi | ||||
zation> | ||||
</author> | ||||
<author initials="A." surname="Roginsky" fullname="Allen Roginsky"> | ||||
<organization>National Institute of Standards and Technology</organi | ||||
zation> | ||||
</author> | ||||
<author initials="A." surname="Vassilev" fullname="Apostol Vassilev"> | ||||
<organization>National Institute of Standards and Technology</organi | ||||
zation> | ||||
</author> | ||||
<author initials="R." surname="Davis" fullname="Richard Davis"> | ||||
<organization>National Security Agency</organization> | ||||
</author> | ||||
<date month="April" year="2018" /> | ||||
</front> | ||||
<seriesInfo name="NIST Special Publication 800-56A Revision 3" value="" | ||||
/> | ||||
</reference> | ||||
<reference anchor='FIPS186-4'> | ||||
<front> | ||||
<title>Digital Signature Standard (DSS)</title> | ||||
<author> | ||||
<organization>National Institute of Standards and Technology</organiza | ||||
tion> | ||||
</author> | ||||
<date month='July' year='2013'/> | ||||
</front> | ||||
<seriesInfo name='FIPS 186-4' value=''/> | ||||
</reference> | ||||
<reference anchor="EUI-48"> | ||||
<front> | ||||
<title>802-2014 IEEE Standard for Local and Metropolitan Area Networks | ||||
: Overview and Architecture.</title> | ||||
<author> | ||||
<organization>Institute of Electrical and Electronics Engineers</org | ||||
anization> | ||||
</author> | ||||
<date month="June" year="2014" /> | ||||
</front> | ||||
<seriesInfo name=" IEEE Standard 802-2014." value="" /> | ||||
</reference> | ||||
</references> | ||||
<references title="Informative references"> | ||||
<?rfc include='reference.RFC.2904.xml'?> <!-- AAA authorization --> | ||||
<?rfc include='reference.RFC.4137.xml'?> <!-- EAP State Machine --> | ||||
<?rfc include='reference.RFC.3986.xml'?> <!-- URL --> | ||||
<?rfc include='reference.RFC.5056.xml'?> <!-- Secure channel binding --> | ||||
<?rfc include='reference.RFC.6677.xml'?> <!-- EAP channel binding --> | ||||
<?rfc include='reference.I-D.tschofenig-tls-cwt'?> <!-- CWT as certificat | ||||
es --> | ||||
<?rfc include='reference.I-D.ietf-rats-eat'?> <!-- Entity attestation toke | ||||
n --> | ||||
<reference anchor="IEEE-802.1X"> | <reference anchor="IEEE-802.1X"> | |||
<front> | <front> | |||
<title>Local and Metropolitan Area Networks: Port-Based Network Access | <title>IEEE Standard for Local and Metropolitan Area Networks--Port- | |||
Control</title> | Based | |||
<author> | Network Access Control</title> | |||
<organization>Institute of Electrical and Electronics Engineers</org | <author> | |||
anization> | <organization>IEEE</organization> | |||
</author> | </author> | |||
<date month="December" year="2004" /> | <date month="February" year="2020"/> | |||
</front> | </front> | |||
<seriesInfo name=" IEEE Standard 802.1X-2004." value="" /> | <seriesInfo name="IEEE Standard" value="802.1X-2020"/> | |||
</reference> | </reference> | |||
<reference anchor="Sethi14" target="http://dx.doi.org/10.1145/2632048.2632 | ||||
049"> | <reference anchor="Sethi14" target="http://dx.doi.org/10.1145/2632048.26 | |||
<front> | 32049"> | |||
<title>Secure Bootstrapping of Cloud-Managed Ubiquitous Displays</titl | <front> | |||
e> | <title>Secure bootstrapping of cloud-managed ubiquitous displays</ti | |||
<author initials="M." surname="Sethi" fullname="Mohit Sethi"> | tle> | |||
<organization>Ericsson</organization> | <author initials="M." surname="Sethi" fullname="Mohit Sethi"> | |||
</author> | <organization>Ericsson</organization> | |||
<author initials="E." surname="Oat" fullname="Elena Oat"> | </author> | |||
<organization>Aalto University</organization> | <author initials="E." surname="Oat" fullname="Elena Oat"> | |||
</author> | <organization>Aalto University</organization> | |||
<author initials="M." surname="Di Francesco" fullname="Mario Di France | </author> | |||
sco"> | <author initials="M." surname="Di Francesco" fullname="Mario Di Fran | |||
<organization>Aalto University</organization> | cesco"> | |||
</author> | <organization>Aalto University</organization> | |||
<author initials="T." surname="Aura" fullname="Tuomas Aura"> | </author> | |||
<organization>Aalto University</organization> | <author initials="T." surname="Aura" fullname="Tuomas Aura"> | |||
</author> | <organization>Aalto University</organization> | |||
<date month="September" year="2014" /> | </author> | |||
</front> | <date month="September" year="2014"/> | |||
<seriesInfo name="Proceedings of ACM International Joint Conference on P | </front> | |||
ervasive and Ubiquitous Computing (UbiComp 2014), pp. 739-750, Seattle, USA" val | <seriesInfo name="DOI" value="10.1145/2632048.2632049"/> | |||
ue="" /> | <refcontent>Proceedings of ACM International Joint Conference on Perva | |||
</reference> | sive and | |||
<reference anchor="BluetoothPairing"> | Ubiquitous Computing (UbiComp 2014), pp. 739-750, Seattle, USA</refcont | |||
<front> | ent> | |||
<title>Simple pairing whitepaper</title> | </reference> | |||
<author> | ||||
<organization>Bluetooth, SIG</organization> | <reference anchor="Bluetooth" target="https://www.bluetooth.com/specific | |||
</author> | ations/bluetooth-core-specification"> | |||
<date year="2007" /> | <front> | |||
</front> | <title>Bluetooth Core Specification Version 5.3</title> | |||
<seriesInfo name=" Technical report" value="" /> | <author> | |||
</reference> | <organization>Bluetooth Special Interest Group</organization> | |||
<reference anchor="mcrl2" target="https://mitpress.mit.edu/books/modeling- | </author> | |||
and-analysis-communicating-systems"> | <date year="2021" month="July"/> | |||
<front> | </front> | |||
<title>Modeling and analysis of communicating systems</title> | </reference> | |||
<author initials="J.F." surname="Groote" fullname="Jan Friso Groote"> | ||||
<organization>Eindhoven University of Technology</organization> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
</author> | FC.5216.xml"/> | |||
<author initials="M.R." surname="Mousavi" fullname="Mohammad Reza Mous | ||||
avi"> | ||||
<organization>Halmstad University</organization> | ||||
</author> | ||||
<date year="2014" /> | ||||
</front> | ||||
<seriesInfo name="The MIT press" value="" /> | ||||
</reference> | ||||
<reference anchor="noob-mcrl2" target="https://github.com/tuomaura/eap-noo | ||||
b/tree/master/protocolmodel/mcrl2"> | ||||
<front> | ||||
<title>mCRL2 model of EAP-NOOB</title> | ||||
<author initials="A." surname="Peltonen" fullname="Aleksi Peltonen"> | ||||
</author> | ||||
<date year="2021" /> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="noob-proverif" target="https://github.com/tuomaura/eap- | ||||
noob/tree/master/protocolmodel/proverif | ||||
"> | ||||
<front> | ||||
<title>ProVerif model of EAP-NOOB</title> | ||||
<author initials="A." surname="Peltonen" fullname="Aleksi Peltonen"> | ||||
</author> | ||||
<date year="2021" /> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="proverif" target="http://prosecco.gforge.inria.fr/perso | ||||
nal/bblanche/proverif/"> | ||||
<front> | ||||
<title>ProVerif 2.00: Automatic Cryptographic Protocol Verifier, User | ||||
Manual and Tutorial</title> | ||||
<author initials="B." surname="Blanchet" fullname="Bruno Blanchet"> | ||||
</author> | ||||
<author initials="B." surname="Smyth" fullname="Ben Smyth"> | ||||
</author> | ||||
<author initials="V." surname="Cheval" fullname="Vincent Cheval"> | ||||
</author> | ||||
<author initials="M." surname="Sylvestre" fullname="Marc Sylvestre"> | ||||
</author> | ||||
<date year="2018" /> | ||||
</front> | ||||
<seriesInfo name="The MIT press" value="" /> | ||||
</reference> | ||||
<?rfc include='reference.RFC.5216.xml'?> <!-- EAP-TLS --> | ||||
<?rfc include='reference.RFC.7942.xml'?> <!-- Implementation Status --> | ||||
<reference anchor="Sethi19" target="https://arxiv.org/abs/1902.07550"> | <reference anchor="Sethi19" target="https://arxiv.org/abs/1902.07550"> | |||
<front> | <front> | |||
<title>Misbinding Attacks on Secure Device Pairing</title> | <title>Misbinding Attacks on Secure Device Pairing and Bootstrapping | |||
<author initials="M." surname="Sethi" fullname="Mohit Sethi"> | </title> | |||
<author initials="M." surname="Sethi" fullname="Mohit Sethi"> | ||||
</author> | </author> | |||
<author initials="A." surname="Peltonen" fullname="Aleksi Peltonen"> | <author initials="A." surname="Peltonen" fullname="Aleksi Peltonen"> | |||
</author> | </author> | |||
<author initials="T." surname="Aura" fullname="Tuomas"> | <author initials="T." surname="Aura" fullname="Tuomas Aura"> | |||
</author> | </author> | |||
<date year="2019" /> | <date year="2019" month="February"/> | |||
</front> | </front> | |||
</reference> | <seriesInfo name="DOI" value="10.1145/3321705.3329813"/> | |||
</reference> | ||||
</references> | ||||
</references> | </references> | |||
<section anchor="exchangeappendix" numbered="true" toc="default"> | ||||
<name>Exchanges and Events per State</name> | ||||
<t><xref target="tab-exchanges" format="default"/> shows how the EAP serve | ||||
r chooses the | ||||
exchange type depending on the server and peer states. In the state combin | ||||
ations | ||||
marked with hyphen "-", there is no possible exchange and user action is r | ||||
equired to | ||||
make progress. Note that peer state 4 is omitted from the table because th | ||||
e peer never | ||||
connects to the server when the peer is in that state. The table also show | ||||
s the | ||||
handling of errors in each exchange. A notable detail is that the recipien | ||||
t of error | ||||
code 2003 moves to state 1.</t> | ||||
<table anchor="tab-exchanges"> | ||||
<name>How the Server Chooses the Exchange Type</name> | ||||
<thead> | ||||
<tr> | ||||
<th>Peer States</th> | ||||
<th>Exchange Chosen by the Server</th> | ||||
<th>Next Peer and Server States</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td colspan="3" align="center">Server State: Unregistered (0)</td> | ||||
</tr> | ||||
<tr> | ||||
<td>0..2</td> | ||||
<td>Initial Exchange</td> | ||||
<td>both 1 (0 on error)</td> | ||||
</tr> | ||||
<tr> | ||||
<td>3</td> | ||||
<td>-</td> | ||||
<td>no change, notify user</td></tr> | ||||
<tr> | ||||
<td colspan="3" align="center">Server State: Waiting for OOB (1)</td> | ||||
</tr> | ||||
<tr> | ||||
<td>0</td> | ||||
<td>Initial Exchange</td> | ||||
<td>both 1 (0 on error)</td> | ||||
</tr> | ||||
<section title="Exchanges and events per state" anchor="exchangeappendix"> | <tr> | |||
<t> | <td>1</td> | |||
<xref target="table-exchanges"/> shows how the EAP server chooses the ex | <td>Waiting Exchange</td> | |||
change type depending on the server and peer states. In the state combinations m | <td>both 1 (no change on error)</td> | |||
arked with hyphen "-", there is no possible exchange and user action is required | </tr> | |||
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 rec | ||||
ipient of error code 2003 moves to state 1. | ||||
</t> | ||||
<t> | ||||
<figure title="How server chooses the exchange type" anchor="table-excha | ||||
nges"> | ||||
<artwork align="center"> | ||||
<![CDATA[ | ||||
+--------+---------------------------+------------------------------+ | ||||
| peer | exchange chosen by | next peer and | | ||||
| states | server | 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) | | ||||
+--------+---------------------------+------------------------------+ | ||||
(A) peer to 1 on error 2003, no other changes on error | ||||
(B) server to 1 on error 2003, no other changes on error | ||||
]]> | ||||
</artwork> | ||||
</figure> | ||||
</t> | ||||
<t> | ||||
<xref target="table-localevents"/> lists the local events that can take | ||||
place in the server or peer. Both the server and peer output and accept OOB mess | ||||
ages in association state 1, leading the receiver to state 2. Communication erro | ||||
rs and timeouts in states 0..2 lead back to state 0, while similar errors in sta | ||||
tes 3..4 lead to state 3. Application request for rekeying (e.g., to refresh ses | ||||
sion keys or to upgrade cryptosuite) also takes the association from state 3..4 | ||||
to state 3. User can always reset the association state to 0. Recovering associa | ||||
tion data, e.g., from a backup, leads to state 3. | ||||
</t> | ||||
<t> | ||||
<figure anchor="table-localevents" title="Local events on server and pee | ||||
r"> | ||||
<artwork align="center"> | ||||
<![CDATA[ | ||||
+--------+----------------------------------+--------------------+ | ||||
| server/| possible local events | next state | | ||||
| peer | on server and peer | | | ||||
| state | | | | ||||
+========+==================================+====================+ | ||||
| 1 | OOB Output | 1 | | ||||
| 1 | OOB Input | 2 (1 on error) | | ||||
| 0..2 | Mobility/timeout/network failure | 0 | | ||||
| 3..4 | Mobility/timeout/network failure | 3 | | ||||
| 3..4 | Rekeying request | 3 | | ||||
| 0..4 | User resets association | 0 | | ||||
| 0..4 | Association state recovery | 3 | | ||||
+--------+----------------------------------+--------------------+ | ||||
]]> | ||||
</artwork> | ||||
</figure> | ||||
</t> | ||||
</section> | ||||
<section title="Application-specific parameters" anchor="oobchannelappendix" | <tr> | |||
> | <td>2</td> | |||
<t> | <td>Completion Exchange</td> | |||
<xref target="table-oobchannel"/> lists OOB channel parameters that need | <td>both 4 (A)</td> | |||
to be specified in each application that makes use of EAP-NOOB. The list is not | </tr> | |||
exhaustive and is included for the convenience of implementers only. | ||||
</t> | ||||
<texttable title="OOB channel characteristics" anchor="table-oobchannel"> | ||||
<ttcol>Parameter</ttcol> | ||||
<ttcol>Description</ttcol> | ||||
<c>OobDirs</c><c>Allowed directions of the OOB channel</c> | ||||
<c></c><c></c> | ||||
<c>OobMessageEncoding</c><c>How the OOB message data fields are encoded | ||||
for the OOB channel</c> | ||||
<c></c><c></c> | ||||
<c>SleepTimeDefault</c><c>Default minimum time in seconds that the peer | ||||
should sleep before the next Waiting Exchange</c> | ||||
<c></c><c></c> | ||||
<c>OobRetries</c><c>Number of received OOB messages with invalid Hoob af | ||||
ter which the receiver moves to Unregistered (0) state. When the OOB channel has | ||||
error detection or correction, the RECOMMENDED value is 5.</c> | ||||
<c></c><c></c> | ||||
<c>NoobTimeout</c><c>How many seconds the sender of the OOB message reme | ||||
mbers the sent Noob value. The RECOMMENDED value is 3600 seconds.</c> | ||||
<c></c><c></c> | ||||
<c>ServerInfoType</c><c>The value of the Type field and the other requir | ||||
ed fields in ServerInfo</c> | ||||
<c></c><c></c> | ||||
<c>PeerInfoType</c><c>The value of the Type field and the other required | ||||
fields in PeerInfo</c> | ||||
</texttable> | ||||
</section> | ||||
<section title="EAP-NOOB roaming" anchor="roaming"> | <tr> | |||
<t> | <td>3</td> | |||
AAA architectures <xref target="RFC2904"/> allow for roaming of network- | <td>-</td> | |||
connected appliances that are authenticated over EAP. While the peer is roaming | <td>no change, notify user</td> | |||
in a visited network, authentication still takes place between the peer and an a | </tr> | |||
uthentication server at its home network. EAP-NOOB supports such roaming by allo | ||||
wing 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 ser | ||||
ver. | ||||
</t> | ||||
<t> | ||||
A peer device that is new or has gone through a hard reset should be con | ||||
nected 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 Reconn | ||||
ect Exchange from the visited network. | ||||
</t> | ||||
<t> | ||||
Alternatively, the device may provide some method for the user to config | ||||
ure the NAI of the home network. This is the user or application configured NAI | ||||
mentioned in <xref target="nai"/>. 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. | ||||
</t> | ||||
<t> | ||||
While roaming, the device needs to identify the networks where the EAP-N | ||||
OOB 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 <xref target= | ||||
"table-serverinfo-meaning"/>. If present, the peer MAY use this list as a hint t | ||||
o determine the networks where the EAP-NOOB association can be used for access a | ||||
uthorization, in addition to the access network where the Initial Exchange took | ||||
place. | ||||
</t> | ||||
</section> | ||||
<section title="OOB message as URL" anchor="urloob"> | <tr> | |||
<t> | <td colspan="3" align="center">Server State: OOB Received (2)</td> | |||
While EAP-NOOB does not mandate any particular OOB communication channel | </tr> | |||
, 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 UR | ||||
L, which is then encoded as a QR code for displays and printers or as an NDEF re | ||||
cord for dynamic NFC tags. A user can then simply scan the QR code or NFC tag an | ||||
d open the URL, which causes the OOB message to be delivered to the authenticati | ||||
on 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. | ||||
</t> | ||||
<t> | ||||
The ServerInfo in this case includes a field called ServerURL of the fol | ||||
lowing format with RECOMMENDED length of at most 60 characters: | ||||
</t> | ||||
<t> | ||||
https://<host>[:<port>]/[<path>] | ||||
</t> | ||||
<t> | ||||
To this, the peer appends the OOB message fields (PeerId, Noob, 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: | ||||
</t> | ||||
<t> | ||||
https://<host>[:<port>]/[<path>]?P=<PeerId>& | ||||
N=<Noob>&H=<Hoob> | ||||
</t> | ||||
<t> | ||||
The following is an example of a well-formed URL encoding the OOB messag | ||||
e (without line breaks): | ||||
</t> | ||||
<t> | ||||
https://aaa.example.com/eapnoob?P=mcm5BSCDZ45cYPlAr1ghNw&N=rMinS0-F4 | ||||
EfCU8D9ljxX_A&H=QvnMp4UGxuQVFaXPW_14UW | ||||
</t> | ||||
</section> | ||||
<section title="Version history" anchor="vertrack"> | <tr> | |||
<t> | <td>0</td> | |||
<list style="symbols"> | <td>Initial Exchange</td> | |||
<t> | <td>both 1 (0 on error)</td> | |||
Version 01: | </tr> | |||
<list> | ||||
<t>Fixed Reconnection Exchange.</t> | ||||
<t>URL examples.</t> | ||||
<t>Message examples.</t> | ||||
<t>Improved state transition (event) tables.</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
Version 02: | ||||
<list> | ||||
<t>Reworked the rekeying and key derivation.</t> | ||||
<t>Increased internal key lengths and in-band nonce and HMAC lengt | ||||
hs to 32 bytes.</t> | ||||
<t>Less data in the persistent EAP-NOOB association.</t> | ||||
<t>Updated reference <xref target="NIST-DH"/> to Revision 2 (2013) | ||||
.</t> | ||||
<t>Shorter suggested PeerId format.</t> | ||||
<t>Optimized the example of encoding OOB message as URL.</t> | ||||
<t>NoobId in Completion Exchange to differentiate between multiple | ||||
valid Noob values.</t> | ||||
<t>List of application-specific parameters in appendix.</t> | ||||
<t>Clarified the equivalence of Unregistered state and no state.</ | ||||
t> | ||||
<t>Peer SHOULD probe the server regardless of the OOB channel dire | ||||
ction. </t> | ||||
<t>Added new error messages.</t> | ||||
<t>Realm is part of the persistent association and can be updated. | ||||
</t> | ||||
<t>Clarified error handling.</t> | ||||
<t>Updated message examples.</t> | ||||
<t>Explained roaming in appendix. </t> | ||||
<t>More accurate definition of timeout for the Noob nonce. </t> | ||||
<t>Additions to security considerations.</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
Version 03: | ||||
<list> | ||||
<t>Clarified reasons for going to Reconnecting state.</t> | ||||
<t>Included Verp in persistent state.</t> | ||||
<t>Added appendix on suggested ServerInfo and PeerInfo fields.</t> | ||||
<t>Exporting PeerId and SessionId.</t> | ||||
<t>Explicitly specified next state after OOB Step.</t> | ||||
<t>Clarified the processing of an expired OOB message and unrecogn | ||||
ized NoobId.</t> | ||||
<t>Enabled protocol version upgrade in Reconnect Exchange.</t> | ||||
<t>Explained handling of redundant received OOB messages.</t> | ||||
<t>Clarified where raw and base64url encoded values are used.</t> | ||||
<t>Cryptosuite must specify the detailed format of the JWK object. | ||||
</t> | ||||
<t>Base64url encoding in JSON strings is done without padding.</t> | ||||
<t>Simplified explanation of PeerId, Realm and NAI.</t> | ||||
<t>Added error codes for private and experimental use.</t> | ||||
<t>Updated the security considerations.</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
Version 04: | ||||
<list> | ||||
<t>Recovery from synchronization failure due to lost last response | ||||
.</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
Version 05: | ||||
<list> | ||||
<t>Kz identifier added to help recovery from lost last messages.</ | ||||
t> | ||||
<t>Error message codes changed for better structure.</t> | ||||
<t>Improved security considerations section.</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
Version 06: | ||||
<list> | ||||
<t>Kz identifier removed to enable PeerId anonymization in the fut | ||||
ure.</t> | ||||
<t>Clarified text on when to use server-assigned realm.</t> | ||||
<t>Send PeerId and PeerState in a separate request-response pair, | ||||
not in NAI.</t> | ||||
<t>New subsection for the common handshake in all exchanges to avo | ||||
id repetition.</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
Version 07: | ||||
<list> | ||||
<t>Updated example messages.</t> | ||||
<t>Added pointers to new implementation in Contiki.</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
Version 08: | ||||
<list> | ||||
<t>Editorial improvements and corrections.</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
WG Version 00: | ||||
<list> | ||||
<t>Editorial improvements and corrections.</t> | ||||
<t>Updated reference <xref target="NIST-DH"/> to Revision 3 (2018) | ||||
.</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
WG Version 01: | ||||
<list> | ||||
<t>Add NIST P-256 as Cryptosuite 2.</t> | ||||
<t>Renumber message types.</t> | ||||
<t>Very minor editorial fixes.</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
WG Version 02: | ||||
<list> | ||||
<t>Updated message examples with all KeyingModes.</t> | ||||
<t>Many editorial fixes and other updates based on the IoT directo | ||||
rate review of Dave Thaler.</t> | ||||
<t>Text on cloning attacks based on review by Hannes Tschofenig.</ | ||||
t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
WG Version 03: | ||||
<list> | ||||
<t>Changed server-assigned Realm to server-assigned NAI to avoid u | ||||
sername collisions. This issue was identified in a review by Alan Dekok.</t> | ||||
<t>Minor editorial improvements.</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
WG Version 04: | ||||
<list> | ||||
<t>Use of more inclusive language.</t> | ||||
<t>Minor changes to IANA registration policies.</t> | ||||
<t>Explain how relative strength of cryptosuites is determined.</t | ||||
> | ||||
<t>Improvements based on AD review from Roman Danyliw and shepherd | ||||
review from Joseph Salowey.</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
WG Version 05: | ||||
<list> | ||||
<t>Many text clarifications based on IESG evaluation.</t> | ||||
<t>Security considerations subsections on success indications, cha | ||||
nnel binding, and denial of service.</t> | ||||
<t>Privacy considerations gathered to a separate section.</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
WG Version 06: | ||||
<list> | ||||
<t>Remove leftover text in section on identifying correct endpoint | ||||
s.</t> | ||||
<t>Example messages removed.</t> | ||||
</list> | ||||
</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Acknowledgments" anchor="acks"> | <tr> | |||
<t> | <td>1</td> | |||
Max Crone, Shiva Prasad TP, and Raghavendra MS implemented parts of this | <td>Completion Exchange</td> | |||
protocol with wpa_supplicant and hostapd. Eduardo Ingles (RFC editor: please ad | <td>both 4 (B)</td> | |||
d an accented e in Ingles) and Dan Garcia-Carrillo were involved in the implemen | </tr> | |||
tation of this protocol on Contiki. Their inputs helped us in improving the spec | ||||
ification. | <tr> | |||
</t> | <td>2</td> | |||
<t> | <td>Completion Exchange</td> | |||
The authors would like to thank Rhys Smith and Josh Howlett for providin | <td>both 4 (A)</td> | |||
g valuable feedback as well as new use cases and requirements for the protocol. | </tr> | |||
Thanks to Eric Rescorla, Alan Dekok, Darshak Thakore, Stefan Winter, Hannes Tsch | ||||
ofenig, Daniel Migault, Roman Danyliw, Benjamin Kaduk, Francesca Palombini, Stev | <tr> | |||
e Hanna, Lars Eggert, and Eric Vyncke for their comments and reviews. | <td>3</td> | |||
</t> | <td>-</td> | |||
<t> | <td>no change, notify user</td> | |||
We would also like to express our sincere gratitude to Dave Thaler for hi | </tr> | |||
s thorough review of the document. | ||||
</t> | <tr> | |||
<td colspan="3" align="center">Server State: Reconnecting (3) or Regi | ||||
stered | ||||
(4)</td> | ||||
</tr> | ||||
<tr> | ||||
<td>0..2</td> | ||||
<td>-</td> | ||||
<td>no change, notify user</td> | ||||
</tr> | ||||
<tr> | ||||
<td>3</td> | ||||
<td>Reconnect Exchange</td> | ||||
<td>both 4 (3 on error)</td></tr> | ||||
</tbody> | ||||
</table> | ||||
<dl> | ||||
<dt>(A)</dt> | ||||
<dd>peer to 1 on error 2003; no other changes on error</dd> | ||||
<dt>(B)</dt> | ||||
<dd>server to 1 on error 2003; no other changes on error</dd> | ||||
</dl> | ||||
<t><xref target="tab-localevents" format="default"/> lists the local event | ||||
s that can | ||||
take place in the server or peer. Both the server and peer output and acce | ||||
pt OOB | ||||
messages in association state 1, leading the receiver to state 2. Communic | ||||
ation 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 ses | ||||
sion keys or | ||||
to upgrade cryptosuite) also takes the association from state 3..4 to stat | ||||
e 3. The user | ||||
can always reset the association state to 0. Recovering association data, | ||||
e.g., from a | ||||
backup, leads to state 3.</t> | ||||
<table anchor="tab-localevents"> | ||||
<name>Local Events in the Server and Peer</name> | ||||
<thead> | ||||
<tr> | ||||
<th>Server/Peer State</th> | ||||
<th>Possible Local Events in the Server and Peer</th> | ||||
<th>Next State</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td>1</td> | ||||
<td>OOB Output</td> | ||||
<td>1</td> | ||||
</tr> | ||||
<tr> | ||||
<td>1</td> | ||||
<td>OOB Input</td> | ||||
<td>2 (1 on error)</td> | ||||
</tr> | ||||
<tr> | ||||
<td>0..2</td> | ||||
<td>Mobility/timeout/network failure</td> | ||||
<td>0</td> | ||||
</tr> | ||||
<tr> | ||||
<td>3..4</td> | ||||
<td>Mobility/timeout/network failure</td> | ||||
<td>3</td> | ||||
</tr> | ||||
<tr> | ||||
<td>3..4</td> | ||||
<td>Rekeying request</td> | ||||
<td>3</td> | ||||
</tr> | ||||
<tr> | ||||
<td>0..4</td> | ||||
<td>User resets association</td> | ||||
<td>0</td> | ||||
</tr> | ||||
<tr> | ||||
<td>0..4</td> | ||||
<td>Association state recovery</td> | ||||
<td>3</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | </section> | |||
<section anchor="oobchannelappendix" numbered="true" toc="default"> | ||||
<name>Application-Specific Parameters</name> | ||||
<t><xref target="tab-oobchannel" format="default"/> lists OOB channel para | ||||
meters that | ||||
need to be specified in each application that makes use of EAP-NOOB. The l | ||||
ist is not | ||||
exhaustive and is included for the convenience of implementers only.</t> | ||||
<table anchor="tab-oobchannel" align="center"> | ||||
<name>OOB Channel Characteristics</name> | ||||
<thead> | ||||
<tr> | ||||
<th align="left">Parameter</th> | ||||
<th align="left">Description</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td align="left">OobDirs</td> | ||||
<td align="left">Allowed directions of the OOB channel.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">OobMessageEncoding</td> | ||||
<td align="left">How the OOB message data fields are encoded for the | ||||
OOB | ||||
channel.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">SleepTimeDefault</td> | ||||
<td align="left">Default minimum time in seconds that the peer shoul | ||||
d sleep before | ||||
the next Waiting Exchange.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">OobRetries</td> | ||||
<td align="left">Number of received OOB messages with invalid Hoob, | ||||
after which the | ||||
receiver moves to Unregistered (0) state. When the OOB channel has er | ||||
ror detection | ||||
or correction, the <bcp14>RECOMMENDED</bcp14> value is 5.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">NoobTimeout</td> | ||||
<td align="left">How many seconds the sender of the OOB message reme | ||||
mbers the sent | ||||
Noob value. The <bcp14>RECOMMENDED</bcp14> value is 3600 seconds.</td | ||||
> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">ServerInfoType</td> | ||||
<td align="left">The value of the Type field and the other required | ||||
fields in | ||||
ServerInfo.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">PeerInfoType</td> | ||||
<td align="left">The value of the Type field and the other required | ||||
fields in | ||||
PeerInfo.</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
<section anchor="roaming" numbered="true" toc="default"> | ||||
<name>EAP-NOOB Roaming</name> | ||||
<t>AAA architectures <xref target="RFC2904" format="default"/> allow for r | ||||
oaming of | ||||
network-connected appliances that are authenticated over EAP. While the pe | ||||
er is roaming | ||||
in a visited network, authentication still takes place between the peer an | ||||
d 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, i | ||||
t enables the | ||||
visited network to route the EAP session to the peer's home AAA server.</t | ||||
> | ||||
<t>A peer device that is new or has gone through a hard reset should be co | ||||
nnected first | ||||
to the home network and establish an EAP-NOOB association with its home AA | ||||
A server | ||||
before it is able to roam. After that, it can perform the Reconnect Exchan | ||||
ge from the | ||||
visited network.</t> | ||||
<t>Alternatively, the device may provide some method for the user to confi | ||||
gure the NAI | ||||
of the home network. This is the user or application-configured NAI mentio | ||||
ned in <xref | ||||
target="nai" format="default"/>. In that case, the EAP-NOOB association ca | ||||
n be created | ||||
while roaming. The configured NAI enables the EAP messages to be routed co | ||||
rrectly to the | ||||
home AAA server. </t> | ||||
<t>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 | ||||
<bcp14>MAY</bcp14> send a list of SSID strings in the ServerInfo field, ca | ||||
lled either | ||||
SSIDList or Base64SSIDList. The list is formatted as explained in <xref | ||||
target="tab-serverinfo-meaning" format="default"/>. If present, the peer | ||||
<bcp14>MAY</bcp14> 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 acces | ||||
s network | ||||
where the Initial Exchange took place.</t> | ||||
</section> | ||||
<section anchor="urloob" numbered="true" toc="default"> | ||||
<name>OOB Message as a URL</name> | ||||
<t>While EAP-NOOB does not mandate any particular OOB communication channe | ||||
l, 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 | ||||
<bcp14>MUST</bcp14> specify https or another server-authenticated scheme s | ||||
o that there | ||||
is a secure connection to the server and the on-path attacker cannot read | ||||
or modify the | ||||
OOB message.</t> | ||||
<t>The ServerInfo in this case includes a field called ServerURL of the fo | ||||
llowing format | ||||
with a <bcp14>RECOMMENDED</bcp14> length of at most 60 characters:</t> | ||||
<t><tt>https://<host>[:<port>]/[<path>]</tt></t> | ||||
<t>To this, the peer appends the OOB message fields (PeerId, Noob, and Hoo | ||||
b) as a query | ||||
string. PeerId is provided to the peer by the server and might be a 22-cha | ||||
racter ASCII | ||||
string. The peer base64url encodes, without padding, the 16-byte values No | ||||
ob and Hoob | ||||
into 22-character ASCII strings. The query parameters <bcp14>MAY</bcp14> b | ||||
e in any | ||||
order. The resulting URL is of the following format:</t> | ||||
<t><tt>https://<host>[:<port>]/[<path>]?P=<PeerId> | ||||
&N=<Noob>&H=<Hoob></tt> </t> | ||||
<t>The following is an example of a well-formed URL encoding the OOB messa | ||||
ge (without | ||||
line breaks):</t> | ||||
<t><tt>https://aaa.example.com/eapnoob?P=mcm5BSCDZ45cYPlAr1ghNw&N=rMin | ||||
S0-F4EfCU8D9ljxX_A&H=QvnMp4UGxuQVFaXPW_14UW</tt></t> | ||||
</section> | ||||
<section anchor="acks" numbered="false" toc="default"> | ||||
<name>Acknowledgments</name> | ||||
<t><contact fullname="Max Crone"/>, <contact fullname="Shiva Prasad TP"/>, | ||||
and <contact | ||||
fullname="Raghavendra MS"/> implemented parts of this protocol with wpa_su | ||||
pplicant and | ||||
hostapd. <contact fullname="Eduardo Inglés"/> and <contact fullname="Dan | ||||
Garcia-Carrillo"/> were involved in the | ||||
implementation of this protocol on Contiki. Their inputs helped us in impr | ||||
oving the | ||||
specification.</t> | ||||
<t>The authors would like to thank <contact fullname="Rhys Smith"/> and <c | ||||
ontact | ||||
fullname="Josh Howlett"/> for providing valuable feedback, as well as new | ||||
use cases and | ||||
requirements for the protocol. Thanks to <contact fullname="Eric Rescorla" | ||||
/>, <contact | ||||
fullname="Alan Dekok"/>, <contact fullname="Darshak Thakore"/>, <contact | ||||
fullname="Stefan Winter"/>, <contact fullname="Hannes Tschofenig"/>, <cont | ||||
act | ||||
fullname="Daniel Migault"/>, <contact fullname="Roman Danyliw"/>, <contact | ||||
fullname="Benjamin Kaduk"/>, <contact fullname="Francesca Palombini"/>, <c | ||||
ontact | ||||
fullname="Steve Hanna"/>, <contact fullname="Lars Eggert"/>, and <contact | ||||
fullname="Éric | ||||
Vyncke"/> for their comments and reviews.</t> | ||||
<t>We would also like to express our sincere gratitude to <contact fullnam | ||||
e="Dave | ||||
Thaler"/> for his thorough review of the document.</t> | ||||
</section> | ||||
</back> | </back> | |||
</rfc> | </rfc> | |||
End of changes. 87 change blocks. | ||||
2842 lines changed or deleted | 4001 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |