<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.1 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-janfred-eap-fido-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <front>
    <title abbrev="EAP-FIDO">EAP-FIDO</title>
    <seriesInfo name="Internet-Draft" value="draft-janfred-eap-fido-00"/>
    <author initials="J.-F." surname="Rieckers" fullname="Jan-Frederik Rieckers">
      <organization abbrev="DFN">Deutsches Forschungsnetz | German National Research and Education Network</organization>
      <address>
        <postal>
          <street>Alexanderplatz 1</street>
          <city>Berlin</city>
          <code>10178</code>
          <country>Germany</country>
        </postal>
        <email>rieckers@dfn.de</email>
        <uri>www.dfn.de</uri>
      </address>
    </author>
    <author initials="S." surname="Winter" fullname="Stefan Winter">
      <organization abbrev="RESTENA">Fondation Restena | Restena Foundation</organization>
      <address>
        <postal>
          <street>2, avenue de l'Université</street>
          <city>Esch-sur-Alzette</city>
          <code>4365</code>
          <country>Luxembourg</country>
        </postal>
        <email>stefan.winter@restena.lu</email>
        <uri>www.restena.lu</uri>
      </address>
    </author>
    <date year="2023" month="October" day="23"/>
    <area>Security</area>
    <workgroup>EAP Method Update</workgroup>
    <keyword>EAP</keyword>
    <keyword>FIDO</keyword>
    <keyword>TLS</keyword>
    <abstract>
      <?line 75?>

<t>This document specifies an EAP method leveraging FIDO2 keys for authentication in EAP.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-janfred-eap-fido/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        EAP Method Update Working Group mailing list (<eref target="mailto:emu@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/emu/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/emu/"/>.
      </t>
    </note>
  </front>
  <middle>
    <?line 79?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Extensible Authentication Protocol (EAP) <xref target="RFC3748"/> is a widely used standard that allows a server to authenticate a client using different authentication methods.
There is a huge variety of EAP methods available, that serve different purposes and have different security implications.</t>
      <t>Two common EAP methods are EAP-PEAP and EAP-TTLS <xref target="RFC5281"/>, that both use EAP-TLS <xref target="RFC5216"/> to provide confidentiality of the inner authentication.
This inner authentication is most commonly password-based, meaning that an attacker that manages to compromise the TLS connection can eavesdrop on the authentication and observe the password.
The authentication of the server to the client within the TLS handshake thus is a vital security function of these EAP methods.</t>
      <t>The operational praxis has shown that this is a common problem and security flaw.
The specification for EAP-TLS <xref target="RFC5216"/> does not include guidance on how to decide if a certificate is valid for this specific authentication.
This standardization gap has lead to user interfaces, where the default setting for certificate validation was set to "Do not validate".
Even if the validation is active, the supplicant has no implicit information to determine the expected subject name in the server's certificate, so users need to manually configure the expected domain.
Failure to configure this or not configuring it at all could again lead to an attacker being able to compromise the TLS connection and, as a result, also the password sent in the inner authentication.</t>
      <t>There are two major security problems here, that this specification wants to address.
Firstly, the use of passwords as authentication method implies that the password needs to be sent to the server.
If an attacker observes this exchange, they can impersonate the user at any time.
Therefore, this specification uses FIDO authentication, which is based on asymmetric cryptography.
With this method, even if an attacker is able to compromise the TLS connection, they cannot impersonate the user based on the observed data.</t>
      <t>The second major security problem is the specification gap regarding certificate validation.
With EAP-FIDO, the supplicants now have a clear specification on how to decide wether or not a server certificate is considered valid for the current authentication flow.
This is achieved by using the trust anchors available on most devices and a method to determine the valid server name based on implicit information of the authentication configuration.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="overview-over-the-eap-fido-protocol">
      <name>Overview over the EAP-FIDO protocol</name>
      <t>The EAP-FIDO protocol comprises two phases: the TLS handshake phase and FIDO-exchange phase.</t>
      <t>During the TLS handshake phase, TLS is used to authenticate the EAP-FIDO server to the client.</t>
      <t>During the FIDO-exchange phase, the actual FIDO authentication is executed and the client authenticates itself to the server.</t>
      <t>Once the FIDO exchange is completed successfully, the client and server can derive keying material from the TLS handshake phase implicitly.</t>
      <section anchor="tls-handshake-phase">
        <name>TLS handshake phase</name>
        <t>During the TLS handshake phase, the client and server establish a TLS tunnel.
This is done using EAP-TLS <xref target="RFC5216"/>, <xref target="RFC9190"/>, <xref target="RFC9427"/> with the modifications described in <xref target="tls_handshake_requirements"/>.
As part of the TLS handshake protocol, the EAP-FIDO server will send its certificate along with a chain of certificates leading to the certificate of a trusted CA.
The client will check this certificate using the rules in <xref target="tls_server_cert_verify"/>.</t>
        <t>Once the TLS tunnel is established, the client and server proceed to the FIDO-exchange phase to perform the authentication of the client.</t>
      </section>
      <section anchor="fido-exchange-phase">
        <name>FIDO-exchange phase</name>
        <t>In this phase, the TLS record layer is used to securily tunnel information between the EAP-FIDO client and EAP-FIDO server.</t>
        <t>For the FIDO-exchange phase, the client has two options, depending on the configuration and the capability of the FIDO token.</t>
        <t>If the FIDO token supports residential keys and EAP-FIDO is configured to use these for authentication, the client generates a challenge from the TLS keying material and triggers a FIDO challenge.</t>
        <t>If the client is not configured to use residential keys, the client first needs to send its username to the server.
The server will answer with a list of FIDO key IDs and the client will attempt to use one of these keys to authenticate.</t>
      </section>
    </section>
    <section anchor="eap-fido-protocol-flow-and-message-format">
      <name>EAP-FIDO protocol flow and message format</name>
      <t>This section describes the preconditions and the configuration needed for EAP-FIDO, the protocol flow and the message format</t>
      <section anchor="preconditions-and-configuration">
        <name>Preconditions and Configuration</name>
        <t>In order to successfully perform an EAP-FIDO authentication, the server and the client have to meet some preconditions and need to have a configuration.</t>
        <t>EAP-FIDO assumes that the FIOD authenticator is already registered with the server, that is, the EAP-FIDO server has access to the public key used to verify the authenticator's response as well as the corresponding credential id.</t>
        <t>On the client side, the supplicant must be configured with the Relying Party ID (see <xref target="openquestions_rpid"/>, and, if Passkeys are not used, with a Username.</t>
      </section>
      <section anchor="tls-handshake-phase-1">
        <name>TLS handshake phase</name>
        <t>The packet format for EAP-FIDO messages follows the format specified in <xref section="3" sectionFormat="comma" target="RFC5216"/> with the following modifications:</t>
        <ul spacing="normal">
          <li>
            <t>The Type field is set to TODO [awaiting IANA early allocation] (EAP-FIDO)</t>
          </li>
          <li>
            <t>Within the Flags field, the Version bits are set to the major version of EAP-FIDO. For this specification, the version is 0. Future EAP-FIDO versions <bcp14>MAY</bcp14> increase the version number.</t>
          </li>
        </ul>
        <section anchor="eap-fido-start-packet">
          <name>EAP-FIDO Start packet</name>
          <t>In the first packet from the server to the client, the S-bit of the Flags <bcp14>MUST</bcp14> be set, indicating the start of the EAP-FIDO protocol.
It <bcp14>MUST NOT</bcp14> be set in any subsequent packet.</t>
          <t><cref anchor="RPID_Option1" source="Janfred">Depending on the decision on the way the RPID is determined, some additional spec may be added here, see <xref target="openquestions_rpid"/>.</cref></t>
        </section>
        <section anchor="version-negotiation">
          <name>Version negotiation</name>
          <t>The version of EAP-FIDO is negotiated in the first exchange between server and client.
The server sets the highest major version number of EAP-FIDO that it supports in the V field of the flags in its Start message.
In the case of this specification, this is 0.
In its first EAP message in response, the client sets the V field to the highest major version number that it supports that is no higher than the version number offered by the server.
If the client version is not acceptable to the server, it sends an EAP-Failure to terminate the EAP session.
Otherwise, the version set by the client is the version of EAP-FIDO that <bcp14>MUST</bcp14> be used and both server and client <bcp14>MUST</bcp14> set the V field to that version number in all subsequent EAP messages.</t>
          <t>Given the limited range of the V field (values 0-7), future EAP-FIDO versions <bcp14>MUST NOT</bcp14> increase the major version if there are no changes to the outer message format.
Minor version updates that only affect the inner protocol flow <bcp14>MUST</bcp14> be done with means available during the TLS handshake, i.e. using Application Layer Protocol Negotiation (ALPN).</t>
        </section>
        <section anchor="fragmentation">
          <name>Fragmentation</name>
          <t>Each EAP-FIDO message contains a single leg of a half-duplex conversation.
Since EAP carrier protocols may constrain the length of an EAP message, it may be neccessary to fragment an EAP-FIDO message across multiple EAP messages.</t>
          <t>The fragmentation method is described in <xref section="2.1.5" sectionFormat="comma" target="RFC5216"/>.</t>
        </section>
        <section anchor="tls_handshake_requirements">
          <name>TLS Handshake Requirements</name>
          <t>The client and server perform a TLS handshake following the specification in <xref section="2" sectionFormat="comma" target="RFC5216"/> and <xref section="2" sectionFormat="comma" target="RFC9190"/> with the following modifications:</t>
          <ul spacing="normal">
            <li>
              <t>TLS version 1.3 or higher <bcp14>MUST</bcp14> be negotiated.</t>
            </li>
            <li>
              <t>Mutual authentication is not required. Implementations <bcp14>MUST</bcp14> support EAP-FIDO without TLS client authentication, but <bcp14>MAY</bcp14> allow it, i.e. if EAP-FIDO is used as a 2-Factor authentication method where TLS client certificates are the first factor and the FIDO authentication is the second.</t>
            </li>
            <li>
              <t>The certificate of the server <bcp14>MUST</bcp14> be validated. The different options for validation are listed in <xref target="tls_server_cert_verify"/>.</t>
            </li>
            <li>
              <t>(FIXME, depending on RPID option) The client <bcp14>MUST</bcp14> send the desired Relying Party ID for the FIDO exchange in the Server Name Indication extension.</t>
            </li>
          </ul>
        </section>
        <section anchor="tls_server_cert_verify">
          <name>TLS Server Certificate Verification</name>
          <t>(FIXME: Currently only bulletpoints, will be converted into text)</t>
          <ul spacing="normal">
            <li>
              <t>Clients <bcp14>MUST</bcp14> support validating against a built-in list of Root CAs, ideally WebPKI.</t>
            </li>
            <li>
              <t>Implementations <bcp14>MAY</bcp14> support pinning a trust anchor</t>
            </li>
            <li>
              <t>The RPID <bcp14>MUST</bcp14> be validated against the certificate name (How exactly is still TODO)</t>
            </li>
            <li>
              <t>TODO: OCSP Stapling? Mandatory or not?</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="fido-exchange">
        <name>FIDO-exchange</name>
        <t>After the TLS handshake is completed, the client and server perform the FIDO-exchange to authenticate the client inside the TLS tunnel.</t>
        <t>This section describes the message format and the protocol flow.</t>
        <section anchor="message-format">
          <name>Message format</name>
          <t>All EAP-FIDO messages in the inner authentication consist of a CBOR sequence with two elements:</t>
          <dl>
            <dt>type:</dt>
            <dd>
              <t>integer to indicate the message type. <xref target="msgtypes"/> contains a list of the different message types.</t>
            </dd>
            <dt>attributes:</dt>
            <dd>
              <t>a CBOR encoded map with attributes. A list of the different attributes, their assigned mapkey and the type are listed in <xref target="mapkeys"/>.</t>
            </dd>
          </dl>
          <table anchor="msgtypes">
            <name>Message types</name>
            <thead>
              <tr>
                <th align="left">Type</th>
                <th align="left">Description</th>
                <th align="left">Sent by</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">-2</td>
                <td align="left">Error</td>
                <td align="left">Both</td>
              </tr>
              <tr>
                <td align="left">-1</td>
                <td align="left">Failure indicator</td>
                <td align="left">Both</td>
              </tr>
              <tr>
                <td align="left">0</td>
                <td align="left">Success indicator</td>
                <td align="left">Both</td>
              </tr>
              <tr>
                <td align="left">1</td>
                <td align="left">Authentication Request</td>
                <td align="left">Server</td>
              </tr>
              <tr>
                <td align="left">2</td>
                <td align="left">Authentication Response</td>
                <td align="left">Client</td>
              </tr>
              <tr>
                <td align="left">3</td>
                <td align="left">Information Request</td>
                <td align="left">Client</td>
              </tr>
              <tr>
                <td align="left">4</td>
                <td align="left">Information Response</td>
                <td align="left">Server</td>
              </tr>
            </tbody>
          </table>
          <table anchor="mapkeys">
            <name>Mapkeys for the attributes</name>
            <thead>
              <tr>
                <th align="left">Mapkey</th>
                <th align="left">Type</th>
                <th align="left">Label</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0</td>
                <td align="left">UTF-8 String</td>
                <td align="left">Identity</td>
                <td align="left">User Identity (usually username)</td>
              </tr>
              <tr>
                <td align="left">1</td>
                <td align="left">UTF-8 String</td>
                <td align="left">Relying Party ID</td>
                <td align="left">See <xref target="openquestions_rpid"/></td>
              </tr>
              <tr>
                <td align="left">2</td>
                <td align="left">Byte String</td>
                <td align="left">Additional Client Data</td>
                <td align="left">Additional Data to be signed by the FIDO authenticator</td>
              </tr>
              <tr>
                <td align="left">3</td>
                <td align="left">Array of Byte Strings</td>
                <td align="left">PKIDs</td>
                <td align="left">List of acceptable Public Key Identifiers</td>
              </tr>
              <tr>
                <td align="left">4</td>
                <td align="left">Byte String</td>
                <td align="left">Auth Data</td>
                <td align="left">Authdata according to <xref target="WebAuthn"/>, Section 6.1</td>
              </tr>
              <tr>
                <td align="left">5</td>
                <td align="left">Byte String</td>
                <td align="left">FIDO Signature</td>
                <td align="left"> </td>
              </tr>
              <tr>
                <td align="left">6</td>
                <td align="left">Array of UTF-8 Strings</td>
                <td align="left">Authentication requirements</td>
                <td align="left">Sent by the server to indicate the current authentication requiremens, i.e. if user presence or user verification is required</td>
              </tr>
              <tr>
                <td align="left">7</td>
                <td align="left">Byte String</td>
                <td align="left">PKID</td>
                <td align="left">Needed to identify the credential</td>
              </tr>
              <tr>
                <td align="left">8</td>
                <td align="left">Integer</td>
                <td align="left">Error Code</td>
                <td align="left">A code describing the error</td>
              </tr>
              <tr>
                <td align="left">9</td>
                <td align="left">UTF-8 String</td>
                <td align="left">Error Description</td>
                <td align="left">An optional human-readable error description</td>
              </tr>
            </tbody>
          </table>
          <section anchor="success-indicator">
            <name>Success indicator</name>
            <t>This message is the protected success indicator, as required by <xref section="5.2" sectionFormat="comma" target="RFC9427"/>.
It is sent by the server to indicate a successfull authentication.
Since EAP is a strict request-response based protocol, the client needs to reply to this message, so the server can send an EAP-Success message.
The client will acknowledge the reception of this packet through the acknowledgement mechanism in EAP-TLS with an EAP-TLS acknowledgement packet.</t>
            <t>To achieve the compatibility with the protected success indication mechanism of other EAP methods, the attributes field of the message <bcp14>MUST</bcp14> be omitted, that is, this message is only one byte with the value of 0x00.</t>
          </section>
          <section anchor="failure-indicator">
            <name>Failure indicator</name>
            <t>A failure indicator message signals a non-recoverable error condition for the current authentication exchange.</t>
            <t>The attributes field of the message <bcp14>MUST</bcp14> contain at least the Error Code attribute and <bcp14>MAY</bcp14> contain the Error Description attribute.</t>
          </section>
          <section anchor="authentication-request">
            <name>Authentication Request</name>
            <t>An authentication request is sent by the server to initialize a new authentication request.
With this request, the server sends along information that the client needs to perform the FIDO authentication.</t>
            <t>The attributes field in the authentication request message contain the following attributes:</t>
            <dl>
              <dt>Relying Party ID:</dt>
              <dd>
                <t>The Relying Party ID for the FIDO authentication. See <xref target="openquestions_rpid"/>.</t>
              </dd>
              <dt>Additional Client Data:</dt>
              <dd>
                <t>(Optional) Additional data to be signed by the FIDO authenticator.</t>
              </dd>
              <dt>PKIDs:</dt>
              <dd>
                <t>(Optional) A list of acceptable Public Key Identifiers. This can be used to trigger a re-authentication of a specific credential or a list of the identifiers for a specific user, if Passkeys are not used.</t>
              </dd>
              <dt>Authentication Requirements:</dt>
              <dd>
                <t>(Optional) A list of requirements for the FIDO authentication. The possible options for this version of EAP-FIDO are "up" for requesting user presence and "uv" for requesting user verification. Clients <bcp14>MUST</bcp14> ignore any other value, to ensure forward compatibility.</t>
              </dd>
            </dl>
            <t>Since this packet signals the start of a new authentication, the client <bcp14>MUST</bcp14> initialize a new authentication and <bcp14>MUST NOT</bcp14> reuse information from any previous authentication attempt, even if the previous authentication exchange was not completed.
It <bcp14>MAY</bcp14> cache some data to perform sanity checks, i.e. to protect itself against misbehaving servers that try to re-initialize an authentication with the same parameters multiple times.</t>
          </section>
          <section anchor="authentication-response">
            <name>Authentication Response</name>
            <t>If a client has sufficient information to perform a FIDO authentication, the client sends an authentication response. The authentication response signifies the completion of one authentication.
This message can be sent in response to either an Authentication Request or an Information Response.</t>
            <dl>
              <dt>The attributes field in the authentication response message contain the following attributes:</dt>
              <dd>
                <t/>
              </dd>
              <dt>PKID:</dt>
              <dd>
                <t>The Public Key Identifier of the FIDO key used to generate the signature.</t>
              </dd>
              <dt>Auth Data:</dt>
              <dd>
                <t>The signed auth data as returned from the FIDO authenticator (see <xref target="FIDO-CTAP2"/>, Section 6.2)</t>
              </dd>
              <dt>FIDO Signature:</dt>
              <dd>
                <t>The signature as returned from the FIDO authenticator (see <xref target="FIDO-CTAP2"/>, Section 6.2)</t>
              </dd>
            </dl>
            <t>All three attributes <bcp14>MUST</bcp14> be present in the authentication response message.</t>
          </section>
          <section anchor="information-request">
            <name>Information Request</name>
            <t>If a client does not have sufficient information to perform the FIDO authentication, the client can send an information request message to the server.</t>
            <t>This is the case if Passkeys are not used, since the FIDO authenticator needs the list of acceptable public key identifiers to access the actual credentials on the FIDO token.</t>
            <t>With the information request the client can transmit additional information that help the server to compile this information.</t>
            <t>The attributes field in the information request contains the following attributes:</t>
            <dl>
              <dt>Identity:</dt>
              <dd>
                <t>The identity of the user (usually a username)</t>
              </dd>
            </dl>
          </section>
          <section anchor="information-response">
            <name>Information Response</name>
            <t>The server answers to an Information Request from the client with an Information Response.</t>
            <t>This packet is used to transmit additional information to the client.</t>
            <t>The attributes field in the information response can contain any attribute that is also allowed in the Authentication Request packet.
If an attribute was both present in the Authentication Request and the Information Response packet, the client <bcp14>MUST</bcp14> discard the previous value(s) of this attribute that were sent in the Authentication Request and use the value(s) in the Information Response packet.</t>
          </section>
          <section anchor="error">
            <name>Error</name>
            <t>The Error message signals an error condition on the client side.
This error condition does not neccessarily lead to an authentication failure, since the EAP-FIDO server may decide that the previous authentication is sufficient. (See <xref target="examples_2hgracetime"/> for an example for this use case)</t>
            <t>The attributes field <bcp14>MUST</bcp14> include the attribute Error Code with an error code describing the error and <bcp14>MAY</bcp14> contain an Error Description attribute with a human-readable error description.</t>
          </section>
        </section>
        <section anchor="potocol-sequence">
          <name>Potocol Sequence</name>
          <t>The FIDO exchange phase starts with the server sending an authentication request to the client.
This message is sent along with the last message of the server's TLS handshake.</t>
          <t>The Authentication Request can include authentication requirements, additional client data and a list of Public Key Identifiers.</t>
          <t>The client then decides if it has sufficient information to perform the FIDO authentication.
This can be done by probing the FIDO authenticator with all information given in the Authentication Request message.</t>
          <t>If the FIDO authentication is already possible at this point, the client performs the FIDO authentication process and sends an Authentication Response message with the results from the FIDO authentication to the server.
This authentication flow can be used if the FIDO authenticator has a Passkey registered for the given Relying Party ID.</t>
          <t>If the client needs additional information, i.e. because it does not use Passkeys and therefore needs a list of Key Identifiers, the client sends an information request to the server, which may include additional information from client to help the server to fulfil the information request.
In the current specification, this is namely an identifier, from which the EAP-FIDO server can perform a lookup for all registered FIDO credentials registered to this identifier.</t>
          <t>Upon reception of the Information Request message from the client, the server looks up the registered Public Key Identifiers for the given identity.
Depending on the lookup, the requirements for user presence or user verification may change from the previous assumption.
The found Public Key Identifiers, and optionally also the updated authentication requirements, are then sent with the Information Response back to the client.</t>
          <t>The client can now, with the additonal information in the Information Response message, perform the FIDO authentication.
The result of the FIDO authentication is then sent to the Server in an Authentication Response message, which includes the PKID, Auth Data and FIDO Signature from the FIDO authentication result.</t>
          <t>When a server receives an Authentication Response message, it validates the FIDO data.
If the FIDO authentication is successful and the FIDO key has sufficient authorization, the server sends a Success indication message to indicate the Success of the FIDO exchange phase.
The client will acknowledge this packet using the EAP-TLS acknowledgement mechanism and the server sends an EAP-Success message.</t>
          <t>Depending on the result of the FIDO authentication, the user presence or user verification assertions and the policy for a specific FIDO credential, the server <bcp14>MAY</bcp14> choose to trigger a second FIDO authentication with a different set of authentication requirements.
This is done by sending a new Authentication Request message to the client.
This message <bcp14>MUST</bcp14> include a PKIDs attribute with only the PKID of the credential used in the previous FIDO authentication process.</t>
          <t>The client then triggers a new FIDO authentication process and answers with an Authentication Response message.</t>
          <t>The server <bcp14>MUST NOT</bcp14> trigger a challenge with the same Public Key Identifier and Authentication Requirements twice.</t>
        </section>
      </section>
      <section anchor="fido-authentication">
        <name>FIDO authentication</name>
        <t>This section will describe the actual FIDO authentication process, that is performed between the EAP-FIDO client and the FIDO authenticator.</t>
        <t>The client will use CTAP version 2.0 or above <xref target="FIDO-CTAP2"/> to communicate with the authenticator.</t>
        <t>The Relying Party ID  (RPID) either explicitly configured, derived from the RADIUS routing realm, from the server certificate subjectAltName:DNS or sent by the server.
In analogy to WebAuthn, the client needs to verify that the RPID either matches exactly the subjectAltName:DNS of the certificate or that the subjectAltName is a subdomain of the RPID.
For discussion on the topic regarding the relationship RPID, SAN and RADIUS Realm, see <xref target="openquestions_rpid"/>.</t>
        <t>The client data is a concatenation of two items.</t>
        <t>The first item is derived from the TLS keying material:</t>
        <artwork><![CDATA[
FIDO_CHALLENGE_TLS = TLS-Exporter("fido challenge", NULL, 32)
]]></artwork>
        <t>The second item is the optional additional client data sent by the server.</t>
        <t>Both items are concatenated and hashed using SHA-256.
The result is the clientDataHash for the FIDO authentication.</t>
      </section>
    </section>
    <section anchor="implementation-guidelines">
      <name>Implementation Guidelines</name>
      <t>TODO</t>
    </section>
    <section anchor="design-decisions">
      <name>Design decisions</name>
      <t>This section documents several design decisions for the EAP-FIDO protocol</t>
      <section anchor="registration-of-fido2-keys-is-out-of-scope">
        <name>Registration of FIDO2 keys is out of scope</name>
        <t>The FIDO CTAP protocol has distinct primitives for the registration and the usage of a FIDO2 credential.
This specification requires that the registratrion of the security token has been done out-of-band, for example using the WebAuthn protocol in a browser context.</t>
        <t>There are multiple degrees of freedom when registering a token with CTAP version 2.
This specification recognises the following choices at registration time, and defines how to effectuate an authentication transaction for any combination of these choices.</t>
        <section anchor="discoverable-credentials-vs-non-discoverable-credentials">
          <name>Discoverable credentials vs. Non-Discoverable credentials</name>
          <t>FIDO2 tokens contain a master key which never leaves the security perimeter of the token exists on the device.
FIDO2 tokens transact by generating asymetric keypairs which are bound to a scope (often: a domain name, a RADIUS realm).
The scoped keying material is saved in either of two locations:</t>
          <ul spacing="normal">
            <li>
              <t>Non-Discoverable Credentials: All the keying material is stored on the server-side. The private key is encrypted with the token-specific master key so that the server can store, but not use, the device's private key. During authentication transactions, the keying material is sent to the token for local decryption and usage. The security token itself does not store any data persistently; it is stateless and thus the number of keypairs and scopes it manages is infinite.</t>
            </li>
            <li>
              <t>Discoverable Credentials: The keying material is stored on the security token itself, along with the scope for which the keypair was generated. During authentication transactions, only the scope (as configured, or as sent by the server) determines which keypair is to be used in the transaction. The key can store multiple keys for the same scope. The number of keypairs that can be stored on the key is finite.</t>
            </li>
          </ul>
          <t>EAP-FIDO supports both Discoverable and Non-Discoverable credentials.</t>
        </section>
        <section anchor="user-involvement-during-registration">
          <name>User involvement during registration</name>
          <t>Token registration can involve one of two levels of asserting the user presence.</t>
          <ul spacing="normal">
            <li>
              <t>UP (userPresence): the registration ceremony ensures that a person is present at the token while registering the device (e.g. human tissue needs to touch a physical security key while the registration transaction executes).</t>
            </li>
            <li>
              <t>UV (userVerification): the security token registers a unique property of the user during the registration ceremony, such that it is asserted that only the exact same person can interact with the token in the future (e.g. by registering a fingerprint or facial recognition)</t>
            </li>
          </ul>
          <t>During authentication transactions, an EAP-FIDO server can request one of three levels of asserting user presence.</t>
          <ul spacing="normal">
            <li>
              <t>Silent (interaction with a human is not required)</t>
            </li>
            <li>
              <t>UP (physical interaction with a person is required)</t>
            </li>
            <li>
              <t>UV (physical interaction with the registered user is required).</t>
            </li>
          </ul>
          <t>An authentication transaction can not request a higher level than was set at registration time; i.e. a token registered in UP mode can not transact in UV mode.</t>
          <t>EAP-FIDO supports all three transaction modes, and the server can signal its required minimum assertion level for each individual authentication transaction.</t>
        </section>
      </section>
      <section anchor="fido2-key-scopes">
        <name>FIDO2 key scopes</name>
        <t>The scope of a FIDO2 key as set during the registration transaction determines the contexts in which it can be used.
In EAP-FIDO, the following three notions interplay:</t>
        <ul spacing="normal">
          <li>
            <t>the realm of username as used in the EAP-Identity exchange ("outer ID")</t>
          </li>
          <li>
            <t>the servername as presented during the EAP-TLS exchange by the EAP-FIDO server</t>
          </li>
          <li>
            <t>the relyingPartyIdentifier (rpId) that is used during the FIDO CTAP client authentication phase</t>
          </li>
        </ul>
        <t>EAP-FIDO requires the registered scope to be:</t>
        <ul spacing="normal">
          <li>
            <t>identical to the realm in the outer ID</t>
          </li>
          <li>
            <t>within the same second-level domain as the EAP-TLS server certificate will be</t>
          </li>
          <li>
            <t>within the same second-level domain as the FIDO rpId</t>
          </li>
        </ul>
      </section>
      <section anchor="eap-method-with-eap-tls-vs-standalone-eap-method-to-be-used-in-tunnels">
        <name>EAP-Method with EAP-TLS vs standalone EAP method to be used in tunnels</name>
        <t>Since there already exist EAP methods that provide a TLS tunnel and are capable of encapsulating further EAP methods, e.g. EAP-PEAP, EAP-TTLS or EAP-TEAP, the question arises, why this specification does not focus solely on the FIDO exchange as a standalone EAP method instead of re-specifying a new EAP-method that again makes use of EAP-TLS.</t>
        <t>The main reason for a decision against this is the potential for misconfiguration.
One of the goals for this EAP method is to provide a means to validate the server certificate using implicit configuration options.
Using EAP-TTLS or EAP-PEAP would counteract this goal, since in most supplicants the configuration for the different phases of the tunneled TLS methods is done seperately, so the users would have to configure the certificate check parameters manually again.
Additionally, not every supplicant application may allow the code for the phase 2 exchange to access information about the phase 1 exchange, namely the server certificate parameters, which is neccessary for the security of the EAP-FIDO exchange.
Specifying EAP-FIDO as standalone EAP methods could therefore require modifying the EAP stack.
Implementers might be tempted to re-use the insecure and error-prone configuration interfaces.
To prevent this from the start, EAP-FIDO specifies an EAP-TLS based EAP method that cannot be used standalone.</t>
        <t>Although this requires protentially duplicate code for supplicants that support multiple EAP-TLS based methods, the authors believe this means of specification to be more resistant against implementation errors and prevent error-prone user interfaces.</t>
      </section>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>Note to RFC editor: Remove this section, as well as the reference to <xref target="RFC7942"/> before publication</t>
      <t>This section records the status of known implementations of the
protocol defined by this specification at the time of posting of
this Internet-Draft, and is based on a proposal described in
<xref target="RFC7942"/>.  The description of implementations in this section is
intended to assist the IETF in its decision processes in
progressing drafts to RFCs.  Please note that the listing of any
individual implementation here does not imply endorsement by the
IETF.  Furthermore, no effort has been spent to verify the
information presented here that was supplied by IETF contributors.
This is not intended as, and must not be construed to be, a
catalog of available implementations or their features.  Readers
are advised to note that other implementations may exist.</t>
      <t>According to <xref target="RFC7942"/>, "this will allow reviewers and working
groups to assign due consideration to documents that have the
benefit of running code, which may serve as evidence of valuable
experimentation and feedback that have made the implemented
protocols more mature.  It is up to the individual working groups
to use this information as they see fit".
<?line -20?>
      </t>
      <t>There is one early prototype proof-of-concept implementation of EAP-FIDO into hostap (hostapd for the server side, wpa_supplicant on the client side) available.
The implementation was done before the specification of this draft was finished and is therefore not compatible with any draft version (different message format, simplified message flow, missing security checks), but serves as a proof-of-concept for the overall principle of using FIDO to perform an eduroam login.
The source code can be found under <eref target="https://git.rieckers.it/rieckers/hostap/-/tree/eap_fido_poc_tnc23">https://git.rieckers.it/rieckers/hostap/-/tree/eap_fido_poc_tnc23</eref></t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has IANA actions:</t>
      <ul spacing="normal">
        <li>
          <t>EAP type code point for EAP-FIDO</t>
        </li>
        <li>
          <t>EAP-FIDO registry
          </t>
          <ul spacing="normal">
            <li>
              <t>Message types</t>
            </li>
            <li>
              <t>Attributes</t>
            </li>
          </ul>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC5216">
          <front>
            <title>The EAP-TLS Authentication Protocol</title>
            <author fullname="D. Simon" initials="D." surname="Simon"/>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="R. Hurst" initials="R." surname="Hurst"/>
            <date month="March" year="2008"/>
            <abstract>
              <t>The Extensible Authentication Protocol (EAP), defined in RFC 3748, provides support for multiple authentication methods. Transport Layer Security (TLS) provides for mutual authentication, integrity-protected ciphersuite negotiation, and key exchange between two endpoints. This document defines EAP-TLS, which includes support for certificate-based mutual authentication and key derivation.</t>
              <t>This document obsoletes RFC 2716. A summary of the changes between this document and RFC 2716 is available in Appendix A. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5216"/>
          <seriesInfo name="DOI" value="10.17487/RFC5216"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC9190">
          <front>
            <title>EAP-TLS 1.3: Using the Extensible Authentication Protocol with TLS 1.3</title>
            <author fullname="J. Preuß Mattsson" initials="J." surname="Preuß Mattsson"/>
            <author fullname="M. Sethi" initials="M." surname="Sethi"/>
            <date month="February" year="2022"/>
            <abstract>
              <t>The Extensible Authentication Protocol (EAP), defined in RFC 3748, provides a standard mechanism for support of multiple authentication methods. This document specifies the use of EAP-TLS with TLS 1.3 while remaining backwards compatible with existing implementations of EAP-TLS. TLS 1.3 provides significantly improved security and privacy, and reduced latency when compared to earlier versions of TLS. EAP-TLS with TLS 1.3 (EAP-TLS 1.3) further improves security and privacy by always providing forward secrecy, never disclosing the peer identity, and by mandating use of revocation checking when compared to EAP-TLS with earlier versions of TLS. This document also provides guidance on authentication, authorization, and resumption for EAP-TLS in general (regardless of the underlying TLS version used). This document updates RFC 5216.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9190"/>
          <seriesInfo name="DOI" value="10.17487/RFC9190"/>
        </reference>
        <reference anchor="RFC9427">
          <front>
            <title>TLS-Based Extensible Authentication Protocol (EAP) Types for Use with TLS 1.3</title>
            <author fullname="A. DeKok" initials="A." surname="DeKok"/>
            <date month="June" year="2023"/>
            <abstract>
              <t>The Extensible Authentication Protocol-TLS (EAP-TLS) (RFC 5216) has been updated for TLS 1.3 in RFC 9190. Many other EAP Types also depend on TLS, such as EAP-Flexible Authentication via Secure Tunneling (EAP-FAST) (RFC 4851), EAP-Tunneled TLS (EAP-TTLS) (RFC 5281), the Tunnel Extensible Authentication Protocol (TEAP) (RFC 7170). It is possible that many vendor-specific EAP methods, such as the Protected Extensible Authentication Protocol (PEAP), depend on TLS as well. This document updates those methods in order to use the new key derivation methods available in TLS 1.3. Additional changes necessitated by TLS 1.3 are also discussed.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9427"/>
          <seriesInfo name="DOI" value="10.17487/RFC9427"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="WebAuthn" target="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/">
          <front>
            <title>Web Authentication: An API for accessing Public Key Credentials Level 2</title>
            <author>
              <organization>World Wide Web Consortium</organization>
            </author>
            <date year="2021" month="April" day="08"/>
          </front>
        </reference>
        <reference anchor="FIDO-CTAP2" target="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-errata-20220621.html">
          <front>
            <title>Client to Authenticator Protocol (CTAP)</title>
            <author>
              <organization>FIDO Alliance</organization>
            </author>
            <date year="2022" month="June" day="21"/>
          </front>
        </reference>
        <reference anchor="FIDO-SecRef" target="https://fidoalliance.org/specs/common-specs/fido-security-ref-v2.1-ps-20220523.html">
          <front>
            <title>FIDO Security Reference</title>
            <author>
              <organization>FIDO Alliance</organization>
            </author>
            <date year="2022" month="May" day="23"/>
          </front>
        </reference>
        <reference anchor="FIDO-Glossary" target="https://fidoalliance.org/specs/common-specs/fido-glossary-v2.1-ps-20220523.html">
          <front>
            <title>FIDO Technical Glossary</title>
            <author>
              <organization>FIDO Alliance</organization>
            </author>
            <date year="2022" month="May" day="23"/>
          </front>
        </reference>
        <reference anchor="IETF115-emu-minutes" target="https://datatracker.ietf.org/meeting/115/materials/minutes-115-emu-202211071530-00">
          <front>
            <title>EMU @ IETF 115, Minutes</title>
            <author>
              <organization>IETF</organization>
            </author>
            <date year="2022" month="November" day="07"/>
          </front>
        </reference>
        <reference anchor="RFC3748">
          <front>
            <title>Extensible Authentication Protocol (EAP)</title>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="L. Blunk" initials="L." surname="Blunk"/>
            <author fullname="J. Vollbrecht" initials="J." surname="Vollbrecht"/>
            <author fullname="J. Carlson" initials="J." surname="Carlson"/>
            <author fullname="H. Levkowetz" initials="H." role="editor" surname="Levkowetz"/>
            <date month="June" year="2004"/>
            <abstract>
              <t>This document defines the Extensible Authentication Protocol (EAP), an authentication framework which supports multiple authentication methods. EAP typically runs directly over data link layers such as Point-to-Point Protocol (PPP) or IEEE 802, without requiring IP. EAP provides its own support for duplicate elimination and retransmission, but is reliant on lower layer ordering guarantees. Fragmentation is not supported within EAP itself; however, individual EAP methods may support this. This document obsoletes RFC 2284. A summary of the changes between this document and RFC 2284 is available in Appendix A. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3748"/>
          <seriesInfo name="DOI" value="10.17487/RFC3748"/>
        </reference>
        <reference anchor="RFC5281">
          <front>
            <title>Extensible Authentication Protocol Tunneled Transport Layer Security Authenticated Protocol Version 0 (EAP-TTLSv0)</title>
            <author fullname="P. Funk" initials="P." surname="Funk"/>
            <author fullname="S. Blake-Wilson" initials="S." surname="Blake-Wilson"/>
            <date month="August" year="2008"/>
            <abstract>
              <t>EAP-TTLS is an EAP (Extensible Authentication Protocol) method that encapsulates a TLS (Transport Layer Security) session, consisting of a handshake phase and a data phase. During the handshake phase, the server is authenticated to the client (or client and server are mutually authenticated) using standard TLS procedures, and keying material is generated in order to create a cryptographically secure tunnel for information exchange in the subsequent data phase. During the data phase, the client is authenticated to the server (or client and server are mutually authenticated) using an arbitrary authentication mechanism encapsulated within the secure tunnel. The encapsulated authentication mechanism may itself be EAP, or it may be another authentication protocol such as PAP, CHAP, MS-CHAP, or MS-CHAP-V2. Thus, EAP-TTLS allows legacy password-based authentication protocols to be used against existing authentication databases, while protecting the security of these legacy protocols against eavesdropping, man-in-the-middle, and other attacks. The data phase may also be used for additional, arbitrary data exchange. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5281"/>
          <seriesInfo name="DOI" value="10.17487/RFC5281"/>
        </reference>
        <reference anchor="RFC7942">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
              <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </reference>
      </references>
    </references>
    <?line 531?>

<section anchor="example-use-cases-and-protocol-flows">
      <name>Example use cases and protocol flows</name>
      <section anchor="usecases_passkey_silent">
        <name>Authentication using Passkeys with silent authentication</name>
        <t>With this use case, the server will send an Authentication Request containing only the Relying Party Id attribute.</t>
        <t>The client can trigger the silent authentication with the Passkey stored on the FIDO authenticator and includes the response from the FIDO authenticator into the Authentication Response message.</t>
        <t>The server can look up the Public Key Identifier in its database, verify the FIDO signature with the stored public key and, if the signature was valid, send a protected success indicator to the client.
The client responds with an acknowledgement and the server sends an EAP-Success</t>
      </section>
      <section anchor="authentication-using-passkeys-with-silent-auth-for-wifi-and-uv-auth-for-vpn">
        <name>Authentication using Passkeys with silent auth for WiFi and uv auth for VPN</name>
        <t>With this use case, the server will modify the Authentication Request based on which RADIUS client (the Wifi Controller or the VPN appliance) sent the request.</t>
        <t>If the WiFi appliance sent the request, silent auth is used, and the flow is identical with the previous use case.</t>
        <t>If the request came from the VPN appliance (e.g. because the VPN is done via IPSEC with EAP), the server adds "uv" in the Authentication Requirements attribute, which triggers an UV action on the client's side.</t>
        <t>The client triggers the Passkey authentication with user verification and responds to the server with the authentication data. The server verifies the signature, sends a success indication, the client acknowledges and the server sends an EAP-Success.</t>
      </section>
      <section anchor="authentication-with-non-residential-fido-keys">
        <name>Authentication with non-residential FIDO keys</name>
        <t>In this use case, the FIDO authenticator does not have a Passkey for the Relying Party ID. Instead, the server has a list of Public Key Identifiers stored for each username.</t>
        <t>After the initial Authentication Request from the server, the client does not have enough data to trigger the FIDO authentication, so it needs additional information.</t>
        <t>The client then sends an Information Request message with its username.</t>
        <t>The server looks up the username in its database and sends back a list of Public Key Identifiers it has stored for this user with an Information Response message.</t>
        <t>The client can now trigger the FIDO authentication with this list and responds with an Authentication Response, that includes the Public Key Identifier that was actually used for this FIDO authentication.</t>
        <t>The server can now verify the signature and client and server finalize the EAP method.</t>
      </section>
      <section anchor="authentication-with-non-residential-fido-keys-and-user-specific-authentication-policies">
        <name>Authentication with non-residential FIDO keys and user-specific authentication policies</name>
        <t>In this use case, different users have different authentication policies, i.e. employees are allowed to use silent authentication, but administrators need an authentication with user presence.</t>
        <t>The server starts with an AuthenticationRequest and no authentication requirements or an empty array as authentication requirements.
The client transmits its identity to the server in the Information Request message.
Now the server looks up the user and their registered public key identifiers, and checks whether or not user presence verification is necessary.</t>
        <t>If it is necessary, the server includes an authentication requirements attribute with the "up" value along with the PKIDs in the Information Response message.
Since the client discards any previous attribute values, it now performs a FIDO authentication with user presence, and responds to the server.</t>
      </section>
      <section anchor="authentication-with-mandatory-verification-after-a-timespan">
        <name>Authentication with mandatory verification after a timespan</name>
        <t>It may be desired to force a user verification after a timespan, to ensure that the FIDO token is still in possession of the user.
This timespan is specific for each token, so the check whether or not the token is still allowed to perform only silent authentication can only be done after the authentication has happened.</t>
        <t>Given, a user has two registered token, one was verified recently and the other exceeded the verification timespan.</t>
        <t>The server start with an authentication request, the client answers with an Information Request and the Identity, the server transmits the Information Response with the two PKIDs and the client performs the silent FIDO authentication with the "expired" FIDO token.
After sending the Authentication Response, the server verifies the FIDO authentication and recognizes the expired FIDO token.
Now the server sends a new Authentication Request with the PKID of the expired token and "uv" as Authentication Requirement.
The client now performs the FIDO authentication again, this time with user verification and sends the Authentication Response to the server.
The server stores the timestamp of the successful user verification in its database and sends the success indicator.</t>
      </section>
      <section anchor="examples_2hgracetime">
        <name>Authentication with mandatory verification after a timespan with a grace period</name>
        <t>As with the previous example, in this case the FIDO token again have a token-specific timeout to allow silent authentication for a period of time after a successful user verification.
Unlike in the previous example, this time there is a grace period that still allows a silent authentication for a while after the timer expired.
The intention is to not kick out the user in the moment the timer expires, i.e. a user is currently not in the vicinity of the device at that time, but one would not want to kick out the user if it needs to reconnect due to poor wifi performance.
Instead, the user may choose a convinient time to verify their identity/presence within this grace period.</t>
        <t>The protocol flow is the same as the previous example, but this time the second Authentication Request from the server cannot be answered from the client, since the user is not performing the user verification.
Instead, the client will send an Error message with error code TODO (FIDO authentication Timeout).</t>
        <t>The server can now decide whether or not the silent authentication is still acceptable.
If it is, meaning that the timeout for silent authentication has expired, but it is still in the grace period, it answers with a Success Indicator.
If not, meaning that the grace period has expired too, the server will send a Failure Indicator with the appropriate error code.</t>
      </section>
      <section anchor="fa-authentication-with-client-certificate-on-tls-layer-and-fido-in-the-inner-authentication">
        <name>2FA-AUthentication with client certificate on TLS layer and FIDO in the inner authentication</name>
        <t>Since EAP-FIDO uses TLS, it is possible to perform two-factor authentication directly with only EAP-FIDO.
In this case, the client and server perform mutual authentication at the TLS layer.</t>
        <t>The server can now determine the identity of the user based on the certificate and already look up the stored Public Key Identifiers.
With this lookup, the server can already include the PKIDs in the Authentication Request.
The client doesn't need to send an Information Request, since it already has all information.
It can immediately perform the FIDO authentication process and send the Authentication Response to the server.</t>
      </section>
    </section>
    <section anchor="open-questions-regarding-protocol-design">
      <name>Open Questions regarding Protocol design</name>
      <t>Note to RFC Editor: Remove this section and all references from this section before publication.</t>
      <t>Since this specification is an early draft, there are a lot of open questions that we want to get community feedback on.</t>
      <section anchor="openquestions_rpid">
        <name>How to determine the FIDO Relying Party ID?</name>
        <t>FIDO needs a relying party ID to function.
The question is how this RPID is determined and verified, there are several options that all have pros and cons.</t>
        <t>The main thing is to have in mind, that there are three relevant parameters, that need to be put into a certain relationship:</t>
        <ul spacing="normal">
          <li>
            <t>the RADIUS realm (i.e. 'anonymous@dfn.de')</t>
          </li>
          <li>
            <t>the RPID (i.e. 'eduroam.dfn.de')</t>
          </li>
          <li>
            <t>the Server Certificate Name (usually subjectAltName:DNS, i.e. 'radius.eduroam.dfn.de', in the following abbreviated simply with SAN)</t>
          </li>
        </ul>
        <t>All these three parameters need to be in a pre-defined relationship to allow a simple and hard-to-mess-up-and-still-secure configuration.
Both the client and the server have to agree on what the RPID is, in order for the FIDO authentication to succeed.
If there is a defined relationship between the RPID and the certificate name (i.e. SAN needs to be a subrealm of the RPID), then the client needs to verify the certificate against exactly that.
When does the client do that? What security implications does that bring?
All these options need some thought.</t>
        <section anchor="option-1-configuration">
          <name>Option 1: Configuration</name>
          <t>The first option would be to just have the RPID as a configuration item, maybe with a default on the realm of the outer username.
Adding a configuration option complicates the setup of the EAP method, but hopefully not too much.
A misconfiguration of the RPID is also not that critical from a security standpoint.
The effects of a misconfigured RPID are only a problem if the used FIDO key is also registered with a third party, in which case the third party could trick the client to connect to a bogous network.</t>
          <t>If the RPID deviates from the realm, the client could send the requested RPID using Server Name Indication.</t>
        </section>
        <section anchor="option-2-mandate-rpid-to-equal-realm-of-the-username">
          <name>Option 2: Mandate RPID to equal Realm of the Username</name>
          <t>The second option would be to mandate that the RPID is equal to the realm portion of the username.
This restricts options on how to use EAP-FIDO and may cause unnecessary difficulties in routing, if the convinient routing domain (e.g. the registered domain for a company) should not be used as RPID due to security concerns, or different RPIDs should be used under the same routing realm.</t>
        </section>
        <section anchor="option-3-rpid-is-determined-by-the-server-and-sent-before-the-tls-handshake">
          <name>Option 3: RPID is determined by the server and sent before the TLS handshake</name>
          <t>Since the RPID plays an important role in the decision whether or not the certificate sent by the server is to be trusted, the RPID should be determined before the TLS handshake.
The server could determine the RPID based on the outer username and send it as payload in the EAP-TLS Start packet.
This way, the client has a clear indication as to whether or not to trust the server certificate sent in the subsequent TLS handshake.</t>
          <t>However, this opens up some security issues that are yet to be investigated, since the RPID could be modified by an on-path attacker.</t>
        </section>
        <section anchor="option-4-rpid-is-determined-by-the-server-and-sent-after-the-tls-handshake">
          <name>Option 4: RPID is determined by the server and sent after the TLS handshake</name>
          <t>With this option, the problem is that the client needs to cache the server certificate in order to determine if the RPID is valid. for the given certificate, unless the rules for certificate verification and RPID determination specify it otherwise.
One possibility to circumvent this would be to allow the server certificate names and the RPID to deviate, but validate both against the realm of the outer username, e.g. a realm of example.com with a server certificate for radius.example.com and the FIDO RPID fido.example.com.</t>
          <t>This, however, adds a whole lot more of security concerns, especially in environments with different independent devisions under the same domain suffix.</t>
        </section>
      </section>
      <section anchor="missing-features">
        <name>Missing Features</name>
        <t>There are a lot of features, that have been brought up by several people at several occations.
This EAP method could include spec to address these problems.
Also there may be FIDO-specific things that are not part of this specification.</t>
        <section anchor="deprovisioning-of-eap-configuration">
          <name>Deprovisioning of EAP configuration</name>
          <t>It may be useful to directly include a way to signal in-band that an EAP configuration should be deleted.</t>
          <t>The idea stems from the discussion at IETF 115 about EAP-DIE <xref target="IETF115-emu-minutes"/>.</t>
          <t>With EAP-FIDO it may be desirable to also allow for deletion of persistent credentials/Passkeys.</t>
          <t>Input on the need and specific way to achieve this is welcome.</t>
        </section>
      </section>
    </section>
    <section anchor="document-status">
      <name>Document Status</name>
      <t>Note to RFC Editor: Remove this section before publication.</t>
      <section anchor="change-history">
        <name>Change History</name>
        <t>-00: Initial draft version</t>
      </section>
      <section anchor="missing-specs">
        <name>Missing Specs</name>
        <ul spacing="normal">
          <li>
            <t>Error codes and Error handling</t>
          </li>
          <li>
            <t>Key derivation for i.e. WPA2
            </t>
            <ul spacing="normal">
              <li>
                <t>Will be exported from TLS layer, maybe include some information from the FIDO exchange to bind it to the FIDO exchange?</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA8V92XIbV5bgO74ih34wWQFAJCXZLnZXu1hcbHZLFJukrOmo
qFEkkBdAWolMVC6EUJb+ZV7nN2Z+bM56l1wguXsixg8WAWTe5dyzb3cymYzq
tM7MWXRwdX43ub65fHMwimez0jwFX83j2iyLcncWVXUyGiXFPI/X8FZSxot6
8mucL0qTTEy8mSzSpJgcH4+qZrZOqyot8nq3gSdvrh6vRzDo81FcmhgGfzDz
pkzr3cFoW5QflmXRbHjK6LWpV0USvd0kMOvB6IPZwRPJ2SiaRPAz/oOLwn8f
Xz2MnkzeGPgx2jNEFPEiDt7BVGm+jH7CZ/H7dZxm8L1ZN39OTb2YFuXyYDSK
G3i9xEEnEW/0X+N8cg17NGX6IbpPzfyDKSv4PYrgjbPo0jR1NV+ZKrouSvij
yZdVbup/RJ+in0y5jvPoNq4BFnEW3ZvKxOV8FcV5El0lzZx+iG5NjXCgIau6
NKY+i84z8xGeMuUmi2GsE/pxXiSwnpPjk+9/4M8Aw7PoL6bM0lweaPIaj4pn
3tGXhjdaysr/nCzyaWLoJz3uy+tb+gynchZtt9upfUaB8FCbBWzlXZrXpnSb
vy7yhDcBe6tNHsOu9a9rWAz/GOzsdBzFdHBRYqLs27d5+gSrSuv/87+8Pb54
/t1Lb4tXANdJ1ZST8+wfpq5NuNlXzUeznhVNufT3W9GKp1ta8Z9LXtQ0a4KN
3189PF7dnoeb954d5QUAsoYlno1Gab5wn6LonZmdA7LkZ/S20hJ8G+HXJq9T
Pl84zDw6v7uJ4O0ons8NkAbg4V0zy9J59G9mF10gdsHzcVZFr8yTyaLTA16m
RUYLcUDjLIFzAODhVBdFXhVlnTZreghxHkB8fHoyOX4xOWY0qeNyiZBf1fWm
Onv2DPe4fY74/uzx/hk+/Oz+6mKyNTOcL5+cTvC74xfHPzyD95HgJheP53en
wUYvshSWHNWFv1vY4F1Z1MW8yKJDfOdoaBs4KiB5lsb53IRLP50cfzc5Peld
OrKYWN6iDVQbM6/o68nT6fRksql48d+dvORv57TOSV1MYn+dk42s075myjKu
Y3z79Pi705Ppql5nun1gWPdmEeyfNqCMDHB+YUqjW/nd+305OX3+e/Y7L9br
Ip94m69kJZPSLHxInB6/PH0e7OWnrKiqGOims5tHM1/lAJ4s0mf+f+1mKfMP
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

-->

</rfc>
