<?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.24 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-emu-eap-fido-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.0 -->
  <front>
    <title abbrev="EAP-FIDO">EAP-FIDO</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-emu-eap-fido-01"/>
    <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="2025" month="March" day="03"/>
    <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-ietf-emu-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>Operational practice has shown that this is a common problem and possible 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.
Instead it assumes the client has knowledge of the expected server name.
This assumption is reasonable, if all devices are managed centrally and the administrators can easily know and configure all security-relevant parameters in advance.
Devices in BYOD-environments like eduroam are not managed, so administrators cannot push the desired configuration on the devices, but instead have to rely on the users to configure their devices accordingly.
This implies that the administrators are aware of all needed configuration items, provide the users with all this information, and the users must follow these guides.
Failure to configure the parameters correctly will result in connection failure, and frustration, first on the user's end, then on the side of the help desk, that has to deal with the users' problems.
If the user tries to omit these parameters and the implementation allows a fallback to just omitting the validation, the device will simply work, but now be dangerously susceptible to attacks, e.g. by rogue access points with the same SSID, to which the client will send their password to, regardless of the presented server certificate.
The second outcome is especially dangerous, because the operator cannot easily check whether the device correctly performed the certificate check, and since the connection just works, the user will not suspect that their local configuration is faulty.</t>
      <t>There are two major issues 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, the attacker cannot impersonate the user based on the observed data.
Since the private key is never revealed, phishing attacks are impossible too.</t>
      <t>The second major issue is the missing implicit derivation of the expected server name that is used to validate the server's certificate.
With EAP-FIDO, the supplicants now have a clear specification on how to decide whether 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?>

<t>This document uses terminology from EAP, as well as terminology from CTAP and WebAuthn.
The FIDO specific terminology is defined in <xref target="FIDO-Glossary"/>.
There is some terminology that is ambiguous in the different contexts, to disambiguate it, the following terminology will be used in this document.
These terms will always be capitalized as shown here.</t>
      <dl>
        <dt>FIDO Authenticator:</dt>
        <dd>
          <t>Authenticator as specified by <xref target="WebAuthn"/>, Section 4: a cryptographic entity, existing in hardware or software, that can register and later assert possession of the registered key credential.</t>
        </dd>
        <dt/>
        <dd>
          <t>This is not the same as the EAP authenticator, which is the entity that initiates the EAP conversation, i.e. the Access Point in the case of Enterprise-WiFi.</t>
        </dd>
        <dt>Discoverable Credential:</dt>
        <dd>
          <t>a public key credential source that is discoverable and usable in authentication ceremonies where the Relying Party does not provide any Credential IDs. See <xref target="WebAuthn"/>, Section 4</t>
        </dd>
        <dt>Server-Side Credential:</dt>
        <dd>
          <t>a public key credential source that is only usable in an authentication ceremony where the Relying Party supplies the Credential ID. This means that the Relying Party must manage the credential's storage and discovery, as well as be able to first identify the user in order to discover the Credential IDs to supply this to the EAP Supplicant.</t>
        </dd>
      </dl>
      <t><cref anchor="todo_terminology" source="Janfred">We need a good term to define a "single authentication", meaning the single process of asking the FIDO Authenticator to sign the client data, with the option of previous discovery, in contrast to the overall authentication process. A complete EAP-FIDO flow may consist of multiple of these "single authentications", and we should have a clear terminology to say "this is just the single instance" and "this is the overall authentication"</cref></t>
    </section>
    <section anchor="overview-over-the-eap-fido-protocol">
      <name>Overview over the EAP-FIDO protocol</name>
      <t>This section will cover both a rough overview of the protocol design, as well as the needed configuration parameters for the EAP-FIDO server and EAP-FIDO client.</t>
      <section anchor="overall-protocol-design">
        <name>Overall protocol design</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 securely 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 Authenticator supports Discoverable Credentials 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 Discoverable Credentials, the client first needs to send its username to the server.
The server will answer with a list of FIDO Credential IDs and the client will attempt to use one of these keys to authenticate.</t>
          <t>Depending on the details of the first single FIDO authentication, the server <bcp14>MAY</bcp14> trigger a second authentication, to enforce token-specific policies.</t>
        </section>
      </section>
      <section anchor="client-and-server-configuration-and-preconditions">
        <name>Client and server configuration and preconditions</name>
        <t>As the EAP-FIDO protocol aims to provide a means of authentication that is easy to setup and maintain for both users and server operators, there are only few configuration items required.
However, if several setups require a different setup than the one that is outlined as the default here, additional configuration parameters can be set to modify the default behavior.</t>
        <t>To better distinguish the server and client configuration items throughout this document, all server configuration options are prefixed with <tt>S_</tt>, all client options with <tt>C_</tt>.</t>
        <section anchor="server-configuration-items-and-preconditions">
          <name>Server configuration items and preconditions</name>
          <t>The EAP-FIDO server configuration comprises of the following configuration items.</t>
          <dl>
            <dt><tt>S_FIDO_RPID</tt>:</dt>
            <dd>
              <t>The FIDO Relying Party ID to use for checking the FIDO assertion.</t>
            </dd>
            <dt/>
            <dd>
              <t>This value must be a valid domain string as specified in <xref target="WebAuthn"/>. The value of <tt>S_FIDO_RPID</tt> <bcp14>MAY</bcp14> be derived dynamically for each authentication flow from the realm part of the NAI.
However, administrators <bcp14>SHOULD</bcp14> set this configuration option to an explicit value, because client and server <bcp14>MUST</bcp14> agree on the same RPID, otherwise the signature check will fail.</t>
            </dd>
            <dt><tt>S_TLS_SERVER_CERT</tt>:</dt>
            <dd>
              <t>The certificate used for the EAP-TLS layer.</t>
            </dd>
            <dt/>
            <dd>
              <t>The certificate <bcp14>SHOULD</bcp14> include a SubjectAltName:dnsName for the domain <tt>eap-fido-authentication.&lt;S_FIDO_RPID&gt;</tt> (See <xref target="tls_server_cert_verify"/>)</t>
            </dd>
          </dl>
          <t>Additionally, the server needs access to a database of FIDO credentials.
Depending on the usecase and other requirements, different fields are needed in the database.</t>
          <table anchor="authdbfields">
            <name>Database fields in the server's authentication database</name>
            <thead>
              <tr>
                <th align="left">DB Field</th>
                <th align="left">Description</th>
                <th align="left">Mandatory</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">username</td>
                <td align="left">A reference to the user</td>
                <td align="left">only for Server-Side Credentials (see remark 1)</td>
              </tr>
              <tr>
                <td align="left">PKID</td>
                <td align="left">The public key identifier of the stored public key</td>
                <td align="left">yes</td>
              </tr>
              <tr>
                <td align="left">PubKey</td>
                <td align="left">The public key used to verify the FIDO assertion</td>
                <td align="left">yes</td>
              </tr>
              <tr>
                <td align="left">signCount</td>
                <td align="left">The last observed signCount sent by the FIDO Authenticator</td>
                <td align="left">no (see remark 2)</td>
              </tr>
            </tbody>
          </table>
          <t>Depending on the use case, the database may have additional fields that save the last successful authentication with User Verification or User Presence, in order to implement time-dependent policies ( see <xref target="usecase_mandatory_verification_after_time"/> for an example)</t>
          <t>Remarks:</t>
          <t>1: The username may not be needed in cases where an identification of the individual user is not necessary and Discoverable Credentials are used.
Server-Side Credentials need a hint to the user, since the server must send a list of possible PKIDs to the client.
For Discoverable Credentials, this is not needed.
If a server operator does not care about the identity of the user or has other means to identify a user based on the used PKID, i.e. because the mapping is stored in a separate database, the EAP-FIDO server does not need access to this information.</t>
          <t>2: If present, the signCount field <bcp14>SHOULD</bcp14> be writable to the EAP-FIDO server. The signCount functionality is intended to have a means for the server to detect when a credential was cloned and two instances are used in parallel.
The value is strictly monotonically increasing for each FIDO Authenticator, so if at some point a signCount is transmitted that is smaller than or equal to the saved signCount, a second FIDO Authenticator is potentially using the same credential.
How servers deal with such case is outside of the scope of this specification.</t>
        </section>
        <section anchor="client-configuration-items-and-preconditions">
          <name>Client configuration items and preconditions</name>
          <t>The client configuration of EAP-FIDO is intended to be as simple as typing in one string and being connected.
However, the precondition is that the FIDO credential is already registered with the server.
Details on this rationale can be found in <xref target="registration-out-of-scope"/>.</t>
          <t><cref anchor="future" source="Janfred">A future version of this draft may include some means for the server to signal a URL where to register the FIDO key. The flow could be the following: The user enters their realm, the server recognizes that there is no FIDO credential available, send a URL where the user can register their credential, the UI shows this URL, the user can click their, log in with their credentials (i.e. via SSO), register the FIDO token and then it just works. \o/ Of course we need to make sure that no one can hijack that process, so the EAP-TLS handshake must be performed, so the client knows it talks with the correct server.</cref></t>
          <t>The client has several configuration options. However, there is only one mandatory configuration option and user interfaces <bcp14>SHOULD</bcp14> present this option prominently.
If the server relies on Server-Side Credentials, it needs an identity, this option <bcp14>SHOULD</bcp14> be presented in the initial configuration interface as well, marked as optional.
The other configuration options <bcp14>SHOULD</bcp14> still be made available, i.e. behind an "Advanced" button, but <bcp14>SHOULD</bcp14> indicate the derived value based on the input in <tt>C_FIDO_RPID</tt>, to help the user understand what this value usually looks like and whether or not it is necessary to change the derived value.</t>
          <dl>
            <dt><tt>C_FIDO_RPID</tt>:</dt>
            <dd>
              <t>(Mandatory) The FIDO Relying Party ID to use. This is the basis for all derived configuration items.</t>
            </dd>
            <dt/>
            <dd>
              <t>The value must be a valid domain string as specified in <xref target="WebAuthn"/>.</t>
            </dd>
            <dt/>
            <dd>
              <t>Implementations <bcp14>MAY</bcp14> offer the user a set of known RPIDs, if Discoverable Credentials are used and there are already Credentials registered.</t>
            </dd>
            <dt><tt>C_IDENTITY</tt>:</dt>
            <dd>
              <t>(Optional) The identity (username) of the user.</t>
            </dd>
            <dt/>
            <dd>
              <t>This configuration item is only needed if Server-Side Credentials are used. It is <bcp14>RECOMMENDED</bcp14> that the identity is just the username and does not contain a realm.</t>
            </dd>
            <dt><tt>C_NAI</tt>:</dt>
            <dd>
              <t>(Optional, Derived) The NAI to use in the EAP layer.</t>
            </dd>
            <dt/>
            <dd>
              <t>This option <bcp14>MUST</bcp14> be set to <tt>anonymous@&lt;C_FIDO_RPID&gt;</tt>, unless explicitly configured differently.</t>
            </dd>
            <dt><tt>C_EXPECTED_SERVERNAME</tt>:</dt>
            <dd>
              <t>(Optional, Derived) The expected server name to use to verify the server's identity.</t>
            </dd>
            <dt/>
            <dd>
              <t>This option <bcp14>MUST</bcp14> be set to <tt>eap-fido-authentication.&lt;C_FIDO_RPID&gt;</tt> unless explicitly configured differently.<cref anchor="refrfc9525" source="Janfred">The prefix value is not final yet. Might still change, depending on the result of the name discussion. Maybe we could also reference RFC9525 here, especially Section 6.3 on how to match the DNS Domain Name Portion against a certificate. In this case, the <tt>C_EXPECTED_SERVERNAME</tt> would be a <tt>DNS-ID</tt> according to RFC9525 terminology.</cref>
If manually configured, implementations <bcp14>MUST</bcp14> check that <tt>C_EXPECTED_SERVERNAME</tt> is either equal to or a subdomain (in any depth) of <tt>C_FIDO_RPID</tt> and <bcp14>MUST</bcp14> reject configurations that do not match this condition.</t>
            </dd>
            <dt><tt>C_TLS_TRUST_ANCHORS</tt>:</dt>
            <dd>
              <t>(Optional, with default) A set of trust anchors to use for checking the server certificate.</t>
            </dd>
            <dt/>
            <dd>
              <t>This option <bcp14>MUST</bcp14> default to the set of trust anchors already present on the device, i.e. the set of trust anchors used to verify server certificates for HTTPS, unless the device has no such set available.
In this case, the implementation <bcp14>MUST</bcp14> enforce that this option is set.
Implementations <bcp14>MUST NOT</bcp14> allow this option to be set to trust certificates from unknown trust anchors.
Implementations <bcp14>SHOULD</bcp14> allow to select multiple trust anchors.</t>
            </dd>
          </dl>
        </section>
      </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 EAP-FIDO protocol flow and the message format.</t>
      <t>The protocol starts with the TLS handshake phase, and, after the TLS tunnel is established, continues with the FIDO exchange.</t>
      <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 <tt>&lt;insert EAP code here, Proof of Concept uses the method type 255 "Experimental", once we have a stable message format we'll ask for IANA early allocation&gt;</tt> (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 major 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.
The S-bit <bcp14>MUST NOT</bcp14> be set in any subsequent packet.
This packet contains only the EAP header (Code, Identifier, Length, Type) and the EAP-TLS flags.</t>
          <t>Future versions of EAP-FIDO may send additional data outside the TLS tunnel with the first EAP message, supplicants <bcp14>SHOULD</bcp14> ignore any additional data sent with this packet.</t>
        </section>
        <section anchor="version-negotiation">
          <name>Version negotiation</name>
          <t>The major 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 sent by the client in its response 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-TLS 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 protocol flow within the TLS tunnel <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 necessary to fragment an EAP-FIDO message across multiple EAP messages.</t>
          <t>This is done through the fragmentation mechanism within EAP-TLS. This 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 according to the verification steps described in the next section.</t>
            </li>
          </ul>
        </section>
        <section anchor="tls_server_cert_verify">
          <name>TLS Server Certificate Verification</name>
          <t>Clients <bcp14>MUST</bcp14> validate the certificate sent by the server.
For this the client must first check that <tt>C_EXPECTED_SERVERNAME</tt> is set to the exact domain or a subdomain of <tt>C_FIDO_RPID</tt>.
This ensures that a misconfiguration cannot be used for cross-domain or even cross-protocol attacks.
The client then <bcp14>MUST</bcp14> validate that the server certificate is valid for the domain saved in the configuration item <tt>C_EXPECTED_SERVERNAME</tt> and the certificate chain leads back to a trust anchor listed in <tt>C_TLS_TRUST_ANCHORS</tt>.<cref anchor="rfc9525again" source="Janfred">Again, here we could look if we can reference RFC9525?</cref></t>
          <ul spacing="normal">
            <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 one or two elements.
Each message of the inner authentication <bcp14>MUST</bcp14> be sent in a single TLS record.
The length of the TLS record <bcp14>MUST</bcp14> match the length of the CBOR sequence.</t>
          <t>The elements are:</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"/>.
This element is omitted in the Success indicator message.</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">human-readable Label</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0</td>
                <td align="left">Text 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">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">2</td>
                <td align="left">Array of Byte Strings</td>
                <td align="left">PKIDs</td>
                <td align="left">List of acceptable Credential IDs</td>
              </tr>
              <tr>
                <td align="left">3</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">4</td>
                <td align="left">Byte String</td>
                <td align="left">FIDO Signature</td>
                <td align="left"> </td>
              </tr>
              <tr>
                <td align="left">5</td>
                <td align="left">Array of Integers or Text Strings</td>
                <td align="left">Authentication requirements</td>
                <td align="left">Sent by the server to indicate the current authentication requirements, i.e. if user presence or user verification is required</td>
              </tr>
              <tr>
                <td align="left">6</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">7</td>
                <td align="left">Integer</td>
                <td align="left">Error Code</td>
                <td align="left">A code describing the error, see <xref target="error_conditions"/> for a list of error codes</td>
              </tr>
              <tr>
                <td align="left">8</td>
                <td align="left">Text String</td>
                <td align="left">Error Description</td>
                <td align="left">An optional human-readable error description</td>
              </tr>
            </tbody>
          </table>
          <t>We will now describe the meaning, format and required attributes for each message type.</t>
          <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 successful authentication.
Since EAP is a strict request-response based protocol, the client needs to reply to a success indicator sent by the server, 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 with an error code describing the error and <bcp14>MAY</bcp14> contain the Error Description attribute with a human-readable error description.</t>
          </section>
          <section anchor="error">
            <name>Error</name>
            <t>The Error message signals an error condition and can be sent both from client to server and vice versa.
This error condition does not necessarily 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> contain at least the Error Code attribute 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 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>PKIDs:</dt>
              <dd>
                <t>(Optional) A list of acceptable Credential IDs. This can be used to trigger a re-authentication of a specific credential or to provide a list of the Credential IDs for a specific user, if Server-Side Credentials are used.</t>
              </dd>
              <dt>Authentication Requirements:</dt>
              <dd>
                <t>(Optional) A list of requirements for the FIDO authentication. See {:auth_requirements} for details.</t>
              </dd>
              <dt>Additional Client Data:</dt>
              <dd>
                <t>(Optional) Additional data to be signed by the FIDO Authenticator.</t>
              </dd>
            </dl>
            <t>If no attributes are transmitted, the attributes field <bcp14>MUST</bcp14> be set to an empty map, instead of omitting it completely.</t>
            <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 Credential ID of the FIDO Credential 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 Server-Side Credentials are used, since the FIDO Authenticator needs the list of acceptable Credential IDs to access the actual credentials on the FIDO Authenticator.</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, configured in <tt>C_IDENTITY</tt>)</t>
              </dd>
            </dl>
            <t>A client <bcp14>MUST NOT</bcp14> send an Information Request packet twice for one authentication.
If a client does not get sufficient information to perform the FIDO authentication after the first Information Request and the subsequent Information Response, the client will not get more information by asking the server a second time.
In this case, a client <bcp14>MUST</bcp14> respond with an Error message, indicating Insufficient Information.</t>
            <t>A server <bcp14>MUST</bcp14> respond with a Failure Indicator message if it receives an Information Request packet when it does not expect one.</t>
          </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>
            <t>A server <bcp14>MUST NOT</bcp14> send an Information Response packet twice for one authentication. A client <bcp14>MUST</bcp14> respond with a Failure Indicator message if it receives an Information Response packet when it does not expect one.</t>
          </section>
        </section>
        <section anchor="protocol-sequence">
          <name>Protocol 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 Credential IDs.</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 Discoverable Credential registered for the given Relying Party ID.</t>
          <t>If the client needs additional information, i.e. because it uses Server-Side Credentials and therefore needs a list of Credential IDs, the client sends an information request to the server, which includes additional information from client to help the server to fulfill 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 Credential IDs for the given identity.
Depending on the lookup, the requirements for user presence or user verification may change from the previous assumption.
The found Credential IDs, 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 additional 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 Credential ID 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>(currently mainly a sub, more text is TODO)</t>
        <t>The client will use CTAP version 2.0 or above <xref target="FIDO-CTAP2"/> to communicate with the FIDO Authenticator.</t>
        <t>The Relying Party ID (RPID) is explicitly configured in <tt>C_FIDO_RPID</tt></t>
        <t>The client data is a concatenation of three items.</t>
        <t>The first item are 8 bytes with the values 0x45, 0x41, 0x50, 0x2d, 0x46, 0x49, 0x44, 0x4F (ASCII: "EAP-FIDO")</t>
        <t>The second item is derived from the TLS keying material:</t>
        <artwork><![CDATA[
FIDO_CHALLENGE_TLS = TLS-Exporter("fido challenge", NULL, 32)
]]></artwork>
        <t>The third item is the optional additional client data sent by the server.
If the server did not send additional client data, this is omitted.</t>
        <t>All three items are concatenated and hashed using SHA-256.<cref anchor="cryptoagility" source="Janfred">This has no crypto agility, as was correctly pointed out. This part comes from the WebAuthn spec, where SHA-256 is fixed. For EAP-FIDO we could opt for crypto agility, since the hashing algorithm is not neccesarily fixed.</cref>
The result is the clientDataHash for the FIDO authentication.</t>
        <t>TODO: format of Authentication Requirements and how to send them using CTAP</t>
        <t>Completely TODO: Server side. How to validate. If up/uv was provided, even if not required, the server should update the "last up/uv seen" field for example.</t>
        <section anchor="auth_requirements">
          <name>Authentication requirements</name>
          <t>CTAP allows different authentication requirements to be requested.
The server can request those by sending values in the <tt>authentication requirements</tt> attribute with either the Authentication Request or the Information Response message.</t>
          <t>For standardized options, numerical values are used. For experimental use cases, implementations can use text strings. Implementations <bcp14>MUST</bcp14> ignore text strings they do not recognize.</t>
          <t>At the time of writing, the CTAP protocol has two authentication options relevant to this specification: User Presence and User Verification.</t>
          <t>If the server includes a value of 1 in the Authentication Requirements attribute array, the supplicant <bcp14>MUST</bcp14> require user presence from the FIDO authenticator.
If the server includes a value of 2, the supplicant <bcp14>MUST</bcp14> require user verification from the FIDO authenticator.</t>
        </section>
      </section>
      <section anchor="error_conditions">
        <name>Error conditions</name>
        <t>TODO, only a stub, not yet finished.</t>
        <t>Errors can be non-recoverable, or recoverable.
If an error is non-recoverable, then it <bcp14>MUST</bcp14> only appear in a Failure Indication message.
If an error is recoverable, the peer may decide whether or not the current error condition is non-recoverable or not.
These errors can be included in both the Failure Indication message and the Error message.</t>
        <t>An example of a non-recoverable error is the Unexpected Message error.
In this case either the other peer is misbehaving or they have a different state, in both cases, a successful authentication is not possible.</t>
        <t>An example of a recoverable error, that may be sent with a Failure Indication message is the No Username configured error.
If the client receives the authentication request and there is no FIDO authenticator available with a Discoverable Credential, and there is no username configured, then it is unlikely that the server has more information.
In this case the client <bcp14>MAY</bcp14> send a Failure Indication message, signaling its unwillingness to try again.
A client <bcp14>MAY</bcp14> also choose to send this error within the Error message, in which case the decision on trying again lies with the server.</t>
        <t>In this table are some error conditions, the list is not yet complete and not ordered.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Error code</th>
              <th align="left">non-recoverable</th>
              <th align="left">human-readable Label</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">?</td>
              <td align="left">no</td>
              <td align="left">No username configured</td>
              <td align="left">The client configuration had no username configured and no Discoverable Credential was available.</td>
            </tr>
            <tr>
              <td align="left">?</td>
              <td align="left">yes</td>
              <td align="left">Unexpected Message</td>
              <td align="left">The client or server received an unexpected message. Either one of the peers is misbehaving or they use incompatible versions. Either way, a successful authentication is not possible under these circumstances.</td>
            </tr>
            <tr>
              <td align="left">?</td>
              <td align="left">no</td>
              <td align="left">Insufficient Information</td>
              <td align="left">The client did not have sufficient information to perform a FIDO authentication.</td>
            </tr>
          </tbody>
        </table>
      </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-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 registration 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 recognizes 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-server-side-credentials">
          <name>Discoverable Credentials vs. Server-Side Credentials</name>
          <t>FIDO2 tokens contain a master key which never leaves the security perimeter of the token.
FIDO2 tokens transact by generating asymmetric keypairs which are bound to a scope (often: a domain name, a RADIUS realm).
The scoped keying material can be accessed using two different methods:</t>
          <ul spacing="normal">
            <li>
              <t>Server-Side Credentials: The keying material is not accessible directly, but only by providing a Credential ID that was generated during registration. Depending on the actual implementation inside the FIDO Authenticator, the Credential ID may be used as a seed to re-generate the specific key pair with the help of the FIDO Authenticator's master key. Other FIDO Authenticator implementations may store the keypair and generate a random Credential ID by which the key can be referenced. To trigger an authentication, the client must provide the correct Credential ID to the FIDO Authenticator. It is fair to assume that the number of Server-Side Credentials that a FIDO Authenticator can generate is not significantly limited, so the number of keys should not weigh in to the consideration whether or not it is worth to register a new Server-Side Credential for a given scope.</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 slots for Discoverable Credentials is limited, and this limit needs to be considered when deciding whether or not a new Discoverable Credential should be registered for a specific use case.</t>
            </li>
          </ul>
          <t>EAP-FIDO supports both Discoverable and Server-Side Credentials.</t>
          <t>Registering a Discoverable Credential has several advantages and one disadvantage:</t>
          <ul spacing="normal">
            <li>
              <t>No username needs to be sent during the authentication transaction</t>
            </li>
            <li>
              <t>The transaction requires less round-trips due to skipping the username transmission process</t>
            </li>
            <li>
              <t>The amount of data sent from EAP server to EAP peer is significantly smaller, reducing the probability of extra roundtrips or packet fragmentation</t>
            </li>
            <li>
              <t>The scopes of the stored credentials can be seen and enumerated by the EAP supplicant, helping the user in finding the right value for configuring the EAP realm</t>
            </li>
            <li>
              <t>The Discoverable Credential consumes space on the FIDO Authenticator, which might be limited</t>
            </li>
          </ul>
        </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-and-certificate-name-considerations">
        <name>FIDO2 key scopes and certificate name considerations</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>Since FIDO keys may be used in other contexts, such as <xref target="WebAuthn"/>, we have to ensure that the security parameters of EAP-FIDO and other FIDO-based protocols align.</t>
        <t>The most important restriction regards the relation between domain name and Relying Party ID.
This relation ensures that a FIDO credential is linked to a specific scope and cannot be used outside of that scope.
Thus, in EAP-FIDO we must a equivalent dependency, that prevents the usage of a FIDO credential outside its intended scope, which could serve as basis for a cross-protocol attack.</t>
        <t>Therefore, we require that the configuration item <tt>C_EXPECTED_SERVERNAME</tt>, which is used to verify the server certificate within the EAP-TLS handshake, is the same as or a subdomain of <tt>C_FIDO_RPID</tt>.
This ensures that only an entity with a valid certificate within the scope the FIDO credential is registered to can also use the FIDO credential for EAP-FIDO.</t>
        <t>This check <bcp14>MUST</bcp14> be done within the supplicant, and the server has to trust the supplicant's implementation to actually check this.</t>
      </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 separately, 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 necessary 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 potentially 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>
      <t>The security properties of FIDO are described in <xref target="FIDO-SecRef"/></t>
    </section>
    <section anchor="deployment-considerations">
      <name>Deployment Considerations</name>
      <t>This section will list considerations for deploying EAP-FIDO.
It is intended to help local administrators to decide which parameters should be used in their deployment and give a brief overview over our suggested best practices.</t>
      <section anchor="token-registration-with-user-presence-vs-user-verification">
        <name>Token Registration with User Presence vs. User Verification</name>
        <t>In many use cases, it is desirable for a deployer to attribute an authentication transaction to a specific individual on an ongoing basis.
If this ongoing attribution is important, tokens need to be registered in User Verification (UV) mode.</t>
        <t>A token which is registered with User Presence (UP) only does not allow to ascertain the binding to a specific individual on an ongoing basis.
The registration process makes sure that the token belongs to an authorized user initially at registration time - but this individual may transfer the token to other individuals post-registration, either by conscious decision or by accident.
The new owner will be trivially able to complete an eventual UP challenge in the future, because UP challenges do not involve a personal authentication factor.
Examples of such transfers include a physical hand-over of a USB Security Token, sharing the credential of a platform authenticator using AirDrop or theft of a device.</t>
        <t>A token which is registered with User Verification (UV) on the contrary can be issued a UV challenge, which will require the personal authentication factor used during registration (e.g. PIN, biometric).
While it may still be possible to transfer the token along with the authentication factor (say, USB Security Token and associated PIN), this behavior is then equivalent to directly sharing the password in password-based EAP types or the private key of a Client Certificate for certificate based login.
This has a higher psychological barrier, is a known problem, and can be sanctioned by the deployer in the same way as traditional password sharing is.
Additionally, this prevents an attacker that came into possession of the FIDO token without consent/knowledge of the original owner from completing UV challenges, since they are missing the required verification credential (i.e. PIN or biometric).</t>
        <t>We want to emphasize that preventing users from transferring ownership is only possible if the used FIDO keys require biometric authentication and this can not be circumvented (i.e. by a backup-PIN or a PIN-based mechanism to add new fingerprints).</t>
      </section>
    </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, should probably be of policy "Specification Required"</t>
            </li>
            <li>
              <t>Attributes, should be split with "Specification Required" and "Private use"</t>
            </li>
            <li>
              <t>Error codes, should be split with "Specification Required" and "Private use"</t>
            </li>
            <li>
              <t>Authentication requirements, with ints as "Specification Required" and text strings as "Private use" or "Experimental"</t>
            </li>
          </ul>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-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 750?>

<section anchor="example-use-cases-and-protocol-flows">
      <name>Example use cases and protocol flows</name>
      <section anchor="usecases_passkey_silent">
        <name>Authentication using Discoverable Credentials 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 Discoverable Credential 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 Credential IDs 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-discoverable-credentials-with-silent-auth-for-wifi-and-uv-auth-for-vpn">
        <name>Authentication using Discoverable Credentials 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 authentication with the Discoverable Credential 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-server-side-credentials">
        <name>Authentication with Server-Side Credentials</name>
        <t>In this use case, the FIDO Authenticator does not have a Discoverable Credential for the Relying Party ID. Instead, the server has a list of Credential IDs 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 Credential IDs 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 Credential ID 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-server-side-credentials-and-user-specific-authentication-policies">
        <name>Authentication with Server-Side Credentials 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 Credential IDs, 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="usecase_mandatory_verification_after_time">
        <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 convenient 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 Credential IDs.
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 bogus 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 convenient 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 divisions under the same domain suffix.</t>
        </section>
        <section anchor="current-decision-option-1">
          <name>CURRENT DECISION: Option 1</name>
          <t>With draft-janfred-eap-fido-02 we introduced wording that the Relying Party ID is the origin of all configuration items.
All other configuration items on the client side are derived from that.
This also means that we have a default DNS name that we check the server certificate against: <tt>eap-fido-authentication.&lt;RPID&gt;</tt>.
The name is not final yet and should not be hardcoded in any code other than proof-of-concept code.
That it is ok to just define a specific subdomain and mandate it was picked from RFC 8461 (MTA-STS), where <tt>mta-sts.&lt;mail domain part&gt;</tt> is mandated as host that will serve the MTA-STS file.</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 occasions.
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 Discoverable Credentials. (Maybe residential Server-Side Credentials too?</t>
          <t>Input on the need and specific way to achieve this is welcome.</t>
        </section>
      </section>
      <section anchor="open-questions-regarding-security">
        <name>Open questions regarding security</name>
        <section anchor="multiple-signatures-with-the-same-parameters-a-problem">
          <name>Multiple signatures with the same parameters a problem?</name>
          <t>The current specification allows the server to send additional data for the FIDO client-data-hash, but if the server omits that, the client-data-hash is only comprised of the exported key material from TLS.
Now the interesting question is: Is this a problem?
Could a malicious server, that came in possession of a certificate that the client trusts, perform multiple authentication runs and observe the client's behavior and analyze the different signatures?
Basically, this could be a chosen-plaintext attack, where the attacker could control at least some portions of the plaintext.
One way around this would be to include a nonce in the TLS-Exporter for the FIDO challenge, so the client selects this nonce and sends it to the server, this way the server can not predict the plaintext used for signing.
The possibility of a double-signature with the same data is prevented by the counter increasing with every signature, but maybe some authenticators do not implement this counter.
The research whether or not this is a problem is still TODO, if FIDO experts have an opinion about this, please contact the authors.</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>draft-janfred-eap-fido-00:</t>
        <ul empty="true">
          <li>
            <ul spacing="normal">
              <li>
                <t>Initial draft version</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>draft-janfred-eap-fido-01:</t>
        <ul empty="true">
          <li>
            <ul spacing="normal">
              <li>
                <t>Updated terminology to align with the FIDO/WebAuthn terminology</t>
              </li>
              <li>
                <t>Reword introduction</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>draft-janfred-eap-fido-02:</t>
        <ul empty="true">
          <li>
            <ul spacing="normal">
              <li>
                <t>Rewording of introduction - better description under which circumstances the current practice is flawed.</t>
              </li>
              <li>
                <t>Add Section describing client and server configuration</t>
              </li>
              <li>
                <t>Add <tt>eap-fido-authentication.&lt;RPID&gt;</tt> as default server identity.</t>
              </li>
              <li>
                <t>Refine wording around server name verification</t>
              </li>
              <li>
                <t>Adjust message formats and attribute mapkeys to not transmit the RPID any more.</t>
              </li>
              <li>
                <t>Add first few paragraphs on error handling</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>draft-ietf-emu-eap-fido-00:</t>
        <ul empty="true">
          <li>
            <ul spacing="normal">
              <li>
                <t>First WG draft</t>
              </li>
              <li>
                <t>Update way FIDO client data is constructed (include protocol binding at the very beginning, before exported key material from TLS)</t>
              </li>
              <li>
                <t>Change auth requirements attribute to array of ints or text string, with text strings used for experimental features</t>
              </li>
              <li>
                <t>Update IANA section for registry of auth requirement ints</t>
              </li>
            </ul>
          </li>
        </ul>
      </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="acknowledgements">
      <name>Acknowledgements</name>
      <t>The document authors want to thank Alexander Clouter for the idea of a default authentication server name.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA8V923Ybx7XgO76ih34wmQVAIi3ZDseJQpOUzYlE6YiUNVmZ
RG4ADaAtoBvpbpBCLP3LvM5vzPzY7GvVrupuSD7JmjkrRwaB7rrs2rXvl9Fo
NGjyZpWdJgeXZy9HT68uXhwM0smkyu6Cr6Zpky3Kanea1M1sMJiV0yJdw1uz
Kp03ozxr5qNsvR1l6WY0z2fl6OHxoN5O1nld52XR7Dbw6NXl7dMBjPrVIK2y
FEa/yabbKm92B4P7snq3qMrthudMnmfNspwlrzczmPZg8C7bwROz00EySuBn
/A+uCv97++xmcJcV2wx+TPYMkSS8iIM3MFVeLJIf8Fn8fp3mK/geVv8n3Ma4
rBYHg0G6hdcrHHSU8E7/W1qMnlbZLKvyd8mrPJu+y6oafk8SeOM0uci2TT1d
ZnXytKzgw7ZY1EXW/DP5kPyQVeu0SK7TBmCRrpJXWZ2l1XSZpMUsuZxtp/RD
cp01CAcasm6qLGtOk7NV9h6eyqrNKoWxjunHaTmD9Rw/PP7mW/4bYHiafJ9V
q7yQB7ZFg2fFM+/oy4w3WsnK/zSbF+NZRj/peV88vaa/4VROk/v7+7F7RoFw
02Rz2MqbvGiyym/+aVnMeBOwtyYrUti1fnoKi+Efg52dDJOUDi6ZZcnqy9dF
fgerypv/87/MHh999fVjs8VLgOuo3lajs9U/s6bJws0+277P1pNyWy3sfmta
8fieVvynihc1Xm2Djb+6vLm9vD4LN2+eHRQlALKBJZ4OBnkx938lyZtscgbI
UpzS23qZ4NsEv86KJufzhcMskrOXVwm8naTTaQZXA/Dw5XayyqfJn7Ndco7Y
Bc+nqzp5lt1lq+TkgJfpkNFBHNB4NYNzAODhVOdlUZdVk2/X9BDiPID44cnx
6OGj0UNGkyatFgj5ZdNs6tMHD3CP918hvj+4ffUAH37w6vJ8dJ9NcL5idDLC
7x4+evjtA3gfL9zo/Pbs5Umw0fNVDktOmtLuFjb4siqbclqukkN856hvGzgq
IPkqT4tpFi79ZPTw69HJcefSkcSk8hZtoN5k05q+Ht2djI9Hm5oX//XxY/52
SuscNeUotescbWSd7rWsqtImxbdPHn59cjxeNuuVbh8I1qtsHuyfNqCEDHB+
nlWZbuU37/fx6OSr37Lfablel8XIbL6WlYyqbG4hcfLw8clXwV5+WJV1ncK9
ae3mNpsuCwDPKtFn/n/tZiHz9+4EWcrx8WNiPeu82DZZHezn8vnr5E/0VAKP
DZPn/EzffohDRds4hiv0Tec24KG0qVKkpmPlHA/WQNzgWj+A6R4AjQBmAbf5
gaxtpGvFkY+PH35z/Pirh6OHDweDwWg0AmpU43jNYHC7zOsEeOx2jZcLIZLP
c2AtQHqRt62Zt62ARlTpAqkInsRJAnyyZvISUJ4kp9fGPMs6n81W2WDw6+kv
cyCPQC+n2R8OgLvNgfwcfBwMvkiugKCWwJeIaMNisuTyPZDCOp+ssoiqmYsO
Uxwlv/765NXT86++efTtx48JbCJN7oFGrXbJts5mQIyBmaXVLGmWaZMADpT3
+EidVbATJCJm4Rn8wLcW3sU9zvI53a4m3h6Dox7jSquMZ11uF1lylwK3g2tZ
zg3Y4Nc74Awp7GXI66DpzfCbbbUpawL3LFmmwW96wZJ8vVnJAmDmwe19mTAC
h1PBelCIeolfEruHP25BaBFAPT759vjjR1nHpGyWCCd+iJ75L/TM8dcATIAO
EKs7pPjTsoD7wawi5/0BQOCYiyw++zHjUtdPCKh1WTeybjijTVrXKGiNJimc
1hB2kRYIeT6tIkmbhtCdvwDJIl0AlBraOawNpL2MFoJrhzUWGWFQMoVXMwBj
PavKTQJf4DPRWhA25YRPAn/WpdChxg/Lfj3a4F+CK/d5s8wLt4wlDFwv03c4
6rZm3LjLGyBu7iTn22JqhmX4e6QavNjALRPRbYP3M59mMG6d1MvyvmBYNARk
HFyQAMABCLamfQEy8dWZr9J73pBcadkPXll/5v7IZyWAtygbOL7pagsHv9jm
M6SaCESYHLc+g4Hgl3yOc2cgAsz58sBi7gA7ZjQ4LU/nbGHIVQGCTjpLcjjk
ugaaU1uA4k7fFeX9KpvBlRLQZ+9hsAZvNJ8BSoeCajTERhEMJP0aIEeXDde4
WsGK7wCCfDcYh2awciA58OOOAEb4MQOimSNBBDZdCw7VOTyBi6HH6BostjAM
DmtYHxDGFO9xWsGygAYj/sOAd8RwBhcyP3z3/V9eXIyy4i6vygJJbZ2sckCV
bLatynRNK0TwyyqHQC071oVPbLb1kpY9y+q8yvzaBGEL+ZFmHiaTLZ4pQ50I
DBxkhVRSHgQiUMnF0i3C13nlYTedwuWAu7na6Q1HekQnR+jYAiDuJb3Hf0s+
hiIDaTNeaN5ka1ifEhq/FrxW9BpjuorAZTF0J8YPrrdAUeYlkna5TYi0GVyk
p0B1aSfRtuw5wa4qQCyAxH0Ok4EIvl0hqCw5mfM4PPG82tIWaSXzvILJDQy/
rJOsmCF5zdwh1LgxQeNlttrgkb0TCoy4TncKrjrt2O3rS73RsJGrufs+aaqc
SSBQv0Y2bPajsMHTyRDDhNop55vDpwnQVBzhF4QcDtMwzc34AsvePP4waGoc
EsAEGiPjE96KCTyTFosMdNsafqy39TSDq4i0B5krkW843my8GCeTXVKVC9C/
WBcBKpXjBXDbrmEPyc3N1cUQ371f5tNlSGfpzvH+ADOVYMPDQzi3BXD5FQ4r
kN7AUcJrnmIYWiUkMYMzBiawbYCEEv3KiGIRVXC7gr1m03QrjKYk0gwETq6h
UAhQwwGk90sg4cSsHOQ8esGLiMIZH48lnPQyIxeIHVOeyKAfHROCvR56NCBo
4AoA5EgZ3TUEyKxKlKWjewZyWgqovRsPRGrBmwn6P9CaX2A/ORBRwCv8ZWg4
TMg27lM8MDzY2QzAi1cML8Bq5xaG0NeDQcrcLTm1aYc7TCQSNMUED4gVPc96
6SpYuUA4eM2rzd5Pl3hutJwdkXCYCa4FMITGE5eEhIsdyOzMQ2DPcDT0VmvL
WxTLSO0IdzIUBIUXSHbBy57WuzVssAKON612m6ZcVOlmCRB/wyiO4g/tHy7E
HdCHPNwLsjK5OHvFGwa2e00wsXOjbmmEuwyrGSob6Xhw43BtU+V3+BpI87iI
AqV8uFF3QJSQB21g4UukEHKdCXNgOhUymrJkpNIbZTAKx8MpyC4HQ7AQC4QL
rVp3gXDVxeEZQWAMEuYBMEKgMoMTQHKDq03AVjsiw6rebkh2RuxFqkUcEIX9
LK2i827JOXqpYUcI5rSDnOACYeNI55ETWykILvK26lIh5kCPlZEid13mGR7N
ZCe6B77aIKsBFJkuiZ+qEoFrJDHa8WaAeapXi1YOrAB4ceZpegBUhxXuNAx7
1eOI1htQEzhuUNrOy+IOn4Cd0xIusjnwf/qb0QHxiQnBwfPXN7cHQ/5vcv2C
Pr+6/I/XV68uL/DzzY9nz565DwN54ubHF6+fXfhP/s3zF8+fX15f8MvwbRJ8
NTh4fvaXAyapBy9e3l69uD57dpCQlG713JSFgwlqMgAyYBmIf2k9AA49rfIJ
/IEy2/nL//0/jx+JcgRq9O9BUuY/vj3+5hH8ATgiYglpNfwnkqBButkgjuXE
geGqblATADruhHkkPgDO3/0VIfO30+S7yXRz/OiP8gVuOPhSYRZ8STBrf9N6
mYHY8VXHNA6awfcRpMP1nv0l+Fvhbr787skKsXJ0/O2TPw5iowNRWkbcclUu
QE0CCogXmaB1nwH80o4H0NpHoFezKDN3ItlOAbFv4ZyIqXy4v/4aGKc+fjRK
fY1igX1VqVG6nsBdKLd1IoqfV9fhnjTZ+6YmGWaW1/woEYmGiRGLqnTHzdDE
zycZE7oYUWlNNa+l5kfT1X26q/ENQar8n4S6IVqxvczaH08Hp5HhNHUsj+nP
r78qJNFOcCNCyKNTJJieqwFQcYgGWH/2HoR+Iu4wL0hhLPMDYS3nDX4WeQK5
MYhp8CxyYDiwVUqfaiBNDamsGflulADps7AqJCRTZ6uGfZ0mSjmRJjvhMWVm
Q6YPu0fDrInT0MLlNJFiwUL8m1Mka1UtXD4fZ2P66YyF1pcotOqxT1OWeC6Z
egC7Hr3Jn+awwIu8npZoLEN67c3sCP0UdDeywIe7EsOYw7GZHQHBta3pI5KS
iDQDjNZlgfLUPaEuLu0VKHdk7U8r2KrT61XPQvHHLyu5uqjHcNRZ3+EPBjfE
P0Y3+PJ/aj9EGc0e+rax690Ec3E5qWDxY0YHtB4ZmTJ8m9RE1qv57NwAIEDU
gCT4A8JZAb8L6A5cNBXOWOljc9h854Ut2BUwO7YP6SDttZJwS1vZ8SUXARdR
78bJKYBCf/17U87Kt4ZI/A0tqB87fzkF8keyMxzHokQxAH5kWQBJHXx7gGLF
KubrB9bmhqoqPQNYMhVVKq3f6Y9tYkJbyReFVdNQuBx6pa7cqFAB3PUuR5pp
AMx6NqjTtRP0CecR5iF2yJLGyRkJxyvg1E7II2EKznbHUhgqtXM471WTb1aZ
N7J1Q6AWOeE+Q9K5Xc1C6TAg/7BbmORAbW+kmBmwoYEFLT4HLHjoY/27OkAx
6gX8dJdn94nDF7cv9RUJq6zlOhIDYPQiC24KevV2saQBeCRVgcVSjjaiRRHy
0WXWbZAxtgQVYd16RIhUszJ9x8cO+PoFbwV3GU0sFv14V6zl5MT2QQ/dLIGa
1qcdhlT6hWYlXq1aHn+PxHZbKY52vDikL40OEZj8u/YX2HfD8TsWIOrYtNnC
/e7QFMmw8D6bbkm2FPOMXBa7FMCVps5W81jjHbxQPY0Gd5OT0sE3AcT7LbGn
+XalyrjOUHgDCNBcUrtIMscdqb+IJak+wKuWgJY/POYvup769Cl0LyqDKwPc
o0YsxteaLai5K68ZzcoiE5Wow2A9FDn898e/f2j+enTyDUrlSoPW5cwpeCj8
Gdn+11+bVf3WrfVtlf1jm1dkOKtRFjyr8UI0eqOijQkiDzuxyNur4FwDdTFd
lbAdNnAmcJo50UfzRJ0A7ZkRNMuWuQiJMquGsIXzMxZ3rY2MjVFEfex7Xq+s
tiu2RvPueb1v8dm38AF4Gu7co50/FraRyYFls74zJVrNd63nzpBviQ1iXcqm
QNuQli+6RhkMrkRQNiiGq60yNFaDgLljs4refLLYo9Vbt2PU3knW3GdZER6l
2Vt0vChcC3nspQnGn4EEjlkhaAazbANogachlpmQAjsakW7SSW79bTR/U77L
UAO/Mt+FXBmli7ICpOuRQutwQ2y9YPM4gUmMnXXW4doNdrbICjSHZjXj8WqV
IQQCYhJTGtpclS8WZKzm1btX/a5kAhHw28vr21mwPBbUnEXR3UWU1ti6FFLa
W+/iYx2rqO/pM13UlQgWtORIpIvIOr/dNNl60+iKkY45UYT85hErQkYTI8Ys
a9J85WzavCGRNjqNkn47CejjCmmyWpFprvV8CdoQnDJedcSrkVOZNyUSfXSj
IGc/b3OTFs5uKppDLUBndXiXHNtP83VtncupCO5I2EI6oLpDltYsfWXNdkNz
rYFoNkg4EUPVjS3uD1mgmuoZJ8TgTVrIHESkDi9UIsR/Nh78WN6jEZQ8iDUF
Pax4cvcQrNr66HFdsFoxtBZG7dk2K7I1iMwF8jia4cXQns4YXC1zvfVQpQUb
wwmViJftgqEmGUiseYkk6RaNWQ2q1TPWybe5uAmN6CZI2gWBZkmSJCw6NEAM
xeHZcfJC1Qi6gAHz/D1slq7Mzzdvf+YXZUZ9lH89f/uzkPabrnF5QR14ddvB
a8NXvVyp98aZXDrmgEXASnG0t69eXl38fErWBblfoQ55daG3GdGO+GygHLEt
gw2kYqK4S1fbjJVPVCHFGjsrEYExNJHs6tYCQ2zZK+FjWguPArsJVkpXHD1w
JNTBqDugahhHhTgOC8xSDPls2509ha6ydLUOJJzrs6vxIEncBYicumIvJGRc
GsZhcYEIW4H2fDYu0+K9G60tL5ClM11UWeZcpkidcY/DpMTLe6+eEFQn0gb9
uOJyQ0qL/lk+ReA4b28uX/10+ert+eWrW3eWoRyUzQLVBtkUiQpyauHjsmMN
iEhBSZ/8AorY2aq5xgjVWVHjf92IcrQ/u8DkKPjhO3OCf/w5OWSrS58cdgR0
1NEIFe3Vlk+MTZypCHPSvSdik2LO6jnjuM1dABJT1awIzIkVf4eGwAFmriS4
SJRGNXzKjAC6D8nF98lTfDCBjyRkMzp8SJ5jEBbgzy75MPgwcv9nPkZ/wWOe
S38Anb/SOEfl2WRx+SD0HEDfbZ+qk8M6QzRfp9W75PgI509e/hnu8Qc6aGO5
EntOjpxDon1gxbBT88yHZAdEhcbYTv5MX0SjOD8VnV8HZTBjIC6fYyyxDLNC
K4hz0vlfyQ06MYOF0t4HEJGCbZ7gNn89Tb5AzJtN5Ow4QvEPBxeKI/K9HKTz
pUX0Qg8Y4/S6EIhsoMMAF8gSw0YUz95kNg5/SyXminbsVdd4buITr/Ggf0Jw
Ou2g4i9fkod/mg0Dy5sLfCD37ohlbQqyE4EmOUxqunOC/m/Xip1862Sat+kc
+OhbHAR0SRKEkaalODzcylcE6/p0MDhmmuHQFXePQuvE3hWcSM2z6JUWZAv1
nRyACxIR2hHYoMjSb5EhfNKKQ5X6ZfqKadu4x1Zbq31wmXu3Os4zNGEHQlqI
X5G87OVe5+/F+1PHRhJUhvYJ5d5az0BhT34sq3lD9ZTChyYsiWQCMK8JEXzg
edStmHSJ8bf0htm0wwdO9xM3IJZ9G9uxTjcbcmPUevXRTg1LRGGs8fjdre67
lTOUHVWOw5eAUp6cJldzDVAZOr7Gt50uinIdwKH7Km/U8twxL8sH5nWJLeQ4
TZq6wQtAVEksmwwqZVje6IV+42lD7kty9jgV5x6gPF2VhRqwQJlVW6fHO4QW
QgpUuRXrUiy1EDirnIJg1iVAqCxERgGsw2g9hLkTV9oEjoLgMFSiYYcchQ3h
ubg9o421gi1hJFM2c6J3vca1VCyX4/j/wJulOl8aENmhV5E6SCxaGMqGgbGy
HnqSU6xnCuQmAWhtgrqAxC3ZWcQagY0IgyuzkT/i4BMRj8/75fUe8bhTwueY
ZKfyW7yYkOuMArzYibbbiD8PVRmVUmGuSSZCdEGhGkZRYnuzXwkbvsUTE8ki
5EJdwdHPdtbL5wPBRB+/UO1XrDwaFJupTjTHTB+WmHkcfmIEIB6V8xGBlmxZ
f/37fItSo/egyN+nIFvwx4SygZQYo+6DiWZEzVX2I/TruzwkmQILS16/eqYu
rNI7PB0YQErgO0uS+JQ8DpMsVFM8R0FfJUVmUmAXieuBDIgQXxT5P00sFfuu
QSaIoW6i0IW0m6XqfIGXlmf1Q/DUr6/IySwxVzDGMHwdsI/sj/DuMFmVhEd6
tsFwwIqJCN/lIFXfvDgadoCLrBJqX0G0N+Fw4+R/lA+SF3OEYgWX615cYKgm
o3225njPFEMVCZNxdcv8Fwp/xK/FqUQUxmoD3sSripuL3nPPyh3D2GC03CdN
unpnghkl8M9bC829pFBusSp0KtPjxN4rPlCSdHETTlzpVr7YVUzuSADkPEUS
LdxEOA6fmzxOYWYFfIvW/at5iFvkbYWHegSKIe5btJDCsehhML5nZD4gU0RO
dr23AhV12eqtGiYoabEFhQdNhb8w4+82R6ii2khcxTpF5c3fAOH+IAshT0sO
zjhYe3aAoa0NmsYwxNUpfzPvLVJtm7lbIF3kxYbirNG44dV0srJR4K+7JlvM
sKTcFLh/GmvJA27rLTGZVVm+k+hwfiwIQ8vZNuokQ4wZZPtza4moGZ9H9o1D
p5EdfdLWMXaxFjg07DeXlB+KrOeJus0qp8Z28S9YQGCcqyCauSbDR4nKqQdp
SkYJIN54IwsyHtRkv/ukwKzURUyEypnso55LMTSvLi6vb69u/8LAfCFYybB0
ouqhqgRHVmr1pqE20Nw9V8Vh3qvXOmk/uSJUMFFZnu+6pVhntVNUKNjBydsl
21NTZjK8zeuzq3CHQ1Ds6cR5q/C7GsRy5zkJbCmeEJCRx9sxf06Lstity239
p+/OrUVkCJeD4rjVfrTaWfu/s0mQNxLWePnfX16e315eiN3n+uz55d41d4eZ
itMjUNydSqxg/OSeem0+wQ4/f4N//XuVzav59PePTx6L6JKg6gAsgImEf28Y
RfzXvDj1BQJC9MCK7Os50RYnIJd0nbYTuaSHFK+zQ79VsyRkDggKIRLNVmVo
GQsRWwSTWSmJLc106UyHLCryOaLp7vYVjPL27Pr8xxevbuJTJNYqNu8jENvk
uodBsn3m2a4cgK7DVJu68wx1zKEEQtlpkGtjIsY6X44MRO11MXH98fb25Y27
Cn54kh2KkjUKnMCxNLTaqjvU22SiNBDao3P4OM5TuuwpGJIG6sIlDP5MJc3G
v6Sh+gwz2mu4G7Q1bwumygEsuiYShivToMdnhRjlgnmiAVCSN1eEGQ57Ibz2
iXg3z1E438Hukuf5YtmIYKDpAi2PrOQBCd0mGoFhS1uKUIQx0t2E5E2W34Eg
l8ZEiSEIsBzx8ZikEo2n+3r8lQk01zuRJRfXN8kF3zmyKb8s2WaYLlLUt8OE
u3HHcffd8XtVM9LkZ5hkRLdWM7pwDbpkE+6E2meH947UFnLBoeixoLsGO4hC
lDTIos8H6EYhw0swksjK7lEQkyqbJtQZXJJi0hVZ7NwzPSELyOjyAnNd3IhB
XA37OzsjXGhZmHTRyFJdHiWNINuoRY+rRaejByPpRgJYfITlVzZexburgsiV
08Hgd4Tgt7uNmG/lyhLz+Q5QBCNpOYZ1lgn6vaxKwGL433lZYG6WxFkT2Dlh
AEc7efw4ObgE1ljldBtXB8MEn0ccF6tRzWao8LDg9y8poOwdweLq7PosydIK
0ypXmIaEC0cvhwLpCLbwxifMPl2li5q3wgj8kyjhE/TTo4yjhIXsc5hWYtR0
HXScPI1TTo07PHwNnnkIz7PK745OfmXBUsxSkj0h7xXb9YSkGrbJuDdvEDsF
KyQeRf30iirqbOuKLuMl3oxgvy7Ig2BiRIuh6h+OmTXGYde6W6wb8ZCObguJ
FkYOrL0GZk9WcVqkxFvJikUWFFlUxbolMD1Y/uE54NYwuXLukmHyLCsWzXJI
eHnkbrUq03PcD4bLBGaWOrBHoZWFbRLeY4DmVmcsiy61vyoEaU6fJrwcBsk+
qr8tirLioOd4gjqTFG7GHwUHHbIiY5EtSgwSz7U4QS8mslLGT3tFlxfpIoQ0
0qjlkg8iUOC4+JougV9lFLtsJ2V8DOZmu2fjw39k+p+EVqgznPArLygUhtFX
YDdW/NW49u4rxcrgQ3oax2idAQ4ODHQDpxxGQrk96ZLkLuzdYmtbat8FMYhe
FAtv+7ayishZDdauGMYYGcpACV5TpJLW4s6vkbEDcVSLYoxMejGzTRNPmkgy
w3jwohH/9TBYoXXqabATg1Mhpxp3F5oRCJREbKl0AplnMRCmHelBD7LLPgJ9
2sQgk0wlQyH0Hit7g8vxQ34nkXKrfJ0jpleE2YJhOsUhiWCAKqNvjoZqZu2g
uUqkAsIbke250dALNXY4LxSQCXIBhXLEc5Bk/BBbKswl6EOULQX0mEr+aSCY
RCUdhOgovCkklUgG24J9Yt6sJwRWlAL2G5xtXB2P5BlFKLqKJtee0CSHZ89e
Xh9p8GOVLpyUPBhcoqckljs82U41RGyVLThcdJmu5qPZFiTo90F+i2aBksyQ
VlXO0Zu0mtpF1DdVKtBYEaWnMYuQ6uZsKienpzFKzWXh7s7YBafTqqxrL9yb
AanCiQ0BlsgkpmAWGvAGIkNer/XYBGFdUghnHLcCf1sy2Mn4ePyY3AUa4/yj
kwBfmcAI8q3vCRsObL02LFYCXtNIujQJYcu4UEfPSkFaxIHpJ4x9Dn/6PEES
1qBX4xj1kUqpqeK5Z2RjeP75lgLc27HtSDRd5Fy35iik22MArhBdu5TY3AqF
z9X8itIYq4KYPEd3KA+ZLdvvEOVPgB5Pm3YpIjl/dnOY+QIlNRUXCLOyuQwk
gkxPTD+zBrRijEUuj6K0jcynINX05VmofQmZ98deN9kmQljSQ7P3japYBk0l
fu7cTG8DJhy+dgQYDQbsXZSDCtKr7XYsu1I26oRuw8O4GAdB8fNMT0a+z94D
3NUwHJmgYpuTCKxZgT4eoekpZplHkYCcGz8xUV9Ec0Z+FsrE5y99hConugeh
9eR+ioEkdtbulPAwD1wN3uR3zrvivskC3AcqF2EcFI7AETFVAIsQcE2PNDCR
UPAGz9dpYkMLI9tOyMTg3aPBt6fJGf53SBqlt3qghwLv430mXsPI/vGEyMyL
ixenyYvzm5coawLnKxZPTDwYuzOekM4dxNEPBmeBNu/Jpc176c1AMLkFYXh+
V/6Pk786VI3xXsNGpAzrIQXShCbNPI/sJWcgZrVtB8431lE+y2S3pcn59y9e
JSyjTUUcoRDzisIzMibCgMIkK+g699TtMhony6JOivAZFXwhvBCgoJJ8CxrB
W7PC54L1io1HV4n0F5gSFUwdnJILcCHRXNbzprvA58bA/Nb1Aj/WwPKM7KPx
SnTpXASjfReFC7jicIxcv+9UwQlLK9Hvsk43EvXvnsLEw+6R/TOEjTmlNIPG
yeNgUKCiBVlakNX4WwmboGco2ShhiUWgQs4gCWkRrLjhUDmFSll5zW3wgc1C
cejljRBuF3i5P+hydJIk8NZlVVFk4feoUND3x/S9qjx+AeaZhwk9016keeaY
n4lK+qF0hfrfB2Vl+OhJz6OiHX3QuBh89it+9srk8/gxzXOPup5zA7rJkWEq
cmnc5HOLQBgNiWGtG44KFcgvt+u0GKFzgLSBZ+kEtIboQHz8a3Qe0bkQPGFk
5Pg37CT9IEaXBqekCMgr42rcSmiSuhwZ2gD6HQYx6wg+mFjBgvGg4Q/0jZj1
GY/3BJ/SQcHrVZVScJ6Zrk4+SKzgh+SZ0i2vXUcpNHyMrfXCbG6JGM6KHwPZ
qTtj/evxsRx4PCJb7VwY+Qd67LHdwhWTnxppqYF/3UZGK/abuxYa+wIS1lMN
Joy7VkGX/NobiXLF1dAXgaCY+6wV2sjXrf1KtPM1e5RtfCStxx8Cvv4NXQ6m
vkoF0N5HMdhkVBb+p9pKho8MJaCW/njrg9E0btYRTnqAxuHz/raF4TxlSMLO
Chf3EV8xHnAWXDC6vExU3d2VP1UW8yQbL/KbTKtp3Tv2LvyGMuOHlr07aPsx
fPBiwKCI63/RJociUDhbWe1EBvFLxy9Q3rablyp0SJKrx/fH4xPkIBwL0BbW
AzxM+0OurT0gJ0MCRW7S7EBMR842xWEvYQKsiFEu367KqMZB6Sc0PKG9RhdZ
ZdKV2SbMKr0C0rE8I5xzwt3UV41kHx7VojMhfWLftrYE89Ka5QS1JnhLgsgC
/u/4JWc1vi21lJPI9+sNwFWSOJ1a3nvWoTkD3TZo9LLVQYcR/oamXcUpFeVE
fBiqyVSstwb1XFTZBImGW6HLN3r4/uFDxeQW8wcZVmsjtkUSCYhEJCpKvLI+
CEfJgIaKfqJUlvHM3X7u5l04S4P6kUS+GHrmBnFn62lTJ43jIIezv7iR/YCW
WsXjfpJgKXBpKEluo2daYCxacCMTr2YHFlLOl9xNqrOW1hpM8QNk+lPtORrP
hLCzCQ9LG6J6KRldcSqZlsX06QNxUDyaBKWOmi/1p3VA2iaVejufY45G0Yw1
MUoyLuq3J8tFlU6zznwMX3JWM1KOenDl/xFyIK349+FGt7QMt691JEKn9zEB
irnM/4lsoMjuewawJQvlqyDsWPwgVMfAJtG7Q455QayQt/hO93HlnaWbdZeR
4TsyeVoNb0ByaBSs5xW6XqlUbMhyyTR2x2dVV1kU6sW6uUuiNuIVV8vxOc9W
mYxEYRaa3CCco/M5sYCAEm1UUbmyd/eBFKu0uOuQuELUKX4bWrzpLclVH9uM
RatkxPNHjtjPUzi4QkBRWlQh463P/+hhkVGsHl7q9QbrQqWboSuNjCxX6+Hm
jbMzUayh1sv0coSS5sb65LuuVSAf0UI+dQ9dSB36xaqMIyz9PSMij+7sPmIq
xQd8odF9lNcZx+5TDQYV+xpJlETYQKyRBAg9Lb3SNUgrjZTAVeWFMZ2yiaSo
jYYwrfOa89UBwpoow1SDHUZwoyxsWhQurBZs0uR9iBhwiLqXdLL8OuDsMxuP
71hPSNBK47bprbjg3NviHW7RK56V8z56fiRs4qYLKjrCEQhJQQmts8y+I4FG
DDDed6rvwMGd8ECP1YVZaZdN5LeSZZn08+kykmXN0Q6IYFDxxPyiJFgrjzAq
qDYvBNCRm9uloyi4VkZdUqbgafzWxeZ0mDYOWan1bWhC+8LJkZRXdLYEOyMb
F/6NU5G5GBSXLDgOJWoaivp5B6OXo8NcFl4MJxBSCNinr0gP4wguiVXr7DAx
U4+rYNkkBE6l+zRDtKJpB9hFOllmnxYEiGVITufSVfuyqUwSONrJst4o0era
cAQb5WQ2UqklYrlsEi/ZIcHIV8KgwnzTfXe4a0XOmL5HoFLToyJ9Z4KuM0um
zjA5tLHu7JZyyRRY7CDgksj8FFe6bLuqz9+jZoMySBed7EToBbLv/yw+m0BT
dnV2rU2N/iaSpovEBnfDFXXH5a3LKjweEIpMNUZV7DRtlYuZhyHBaQBNJgMz
b82wemYQZHhVGNhcBbh0Fri0wyGdheCqZQyAy5o3ZJHJ77it0J7zvJdMP3da
nLOBp9tNupSp3xq4UO2mWkS9rskcQTZ9XPYyQi/4mZJin7yuUS3Bz7+LQrMp
o9KplTujRbpqxBh9TmES3lPUw+rVUOWq6KtCihVO0XoQMZKeYRS3O/0oPEdb
5MX4ee7EZCRRMjQd1kfORBdt7z6rvFTziRVpHr8bU17Zs8oWQvdTnOC9/SQn
Odtz7/6FSxIu4ZO3xMeV3YjbdeBLY0f1+OIge6Pnc+53nw4e4Xds2qajM/UO
idmmhs0HcTJf1qGvX+5Lz5lTewcty7PPn2KrbPkitVI2X1l/pPgPWrEfbMeq
5ZQ+T2foNXdYs8KM7a/U72VPrV3XEMfOtaBIzP13w0t9tmRg2/rm8pq00Iem
B1HFheBCy/7q3uG0gjDHZIha1OfKVVxwGMLZN3UkM8fF4eLifXlLseUUe2O8
yXtrJi4piKwnV9RWKVADCUM+zpltVTCU9OhO5hDVIMklN6NXqtU0VWxWogP3
4G+3XtopfoZBzlIona9V38JjI3OHODrfruY5qSydMqYPNRebf0+UOYqM1KPL
1Gca8vS+QVCrGhw87rV2DFPablzKsjnKuESW/c1VbnHTwtG+3tAOArdSzF9C
LSYSMgIjKmd4bzeC8m7qDmugRzifi9qqxsQbHcpwkU3vM3zJFO7LTMEt25uM
XJM1drxx6Y0Y6aiSmJj4KAdIXHocex2Xn4zJNAdhFkFORg/71nC3lmxlNKmi
vDeFyHsweZ+M4ETjzyDnccpgf9Co7E8WLzEn7DP4BIFs3U4cgIsZ+TgJLZNt
Yhz2klFeNiqpXPbHFxZxUsgnl8VF/nKNr5eJuM3Qfp5jPdE23BbjaiIWy+1T
838ak0LojYhd7exNddaEIA5DH7WnFdcVN+jU4V/22oAvB9TnH/Y+XacVBivv
cXC3r/gnccyUYtl/2V1BOl+8lgqk7WLvQ0QkWyVmp8uyZENjq9hs15mLEBzU
Tu2o/GopQ1QMfLLzYimZzveLPXslVLHFa2lHjlaK/HQuCY4iabQ0dWSSFDLi
yOUemahDtDQFkXFDnxKoVLdVjfUT93McKMZOzfHH5Us3h9b10CKLM+9xL7FK
NHaRvNEGuloYBME2ewrouzI9qvH6XnqfqtrdLe3BKg9F8MCiZKBak42q3k6G
bHbBFj44EUYvHw1alAClNeo7pAkUJ+OHZEafgPAYGXLFNrfeFkx9wqzjeFk4
U6sOyyGGvB9xH4GukhFxwZlgwaTq5NwotsAVFKkXXtCcrNVabp05iwLRkRt/
S2EhdRQXUicP3z96PMR/j/Hfxw/x35MZffM1/ft7+vcR/fs0OTy7Ob+6Ok0O
9IQOjoJ+cVr6RKvJ7Csgfjqg1ti02XPscnV5/cMlRrYnf8DHR5fvMdMkqw4P
sBCHR+2DYXL9+tmzYfLViUwOJLzyc+N0LsqsR2HsSoIISybN8hk3ZYxyWYPe
KCrbSnTO2Nr2paxblZnTkgo1wJSW2Uy4zc2PZ6OTx1+P//p37smULijGSAL4
jTgSpGeggPAjDLPXy4vh/+GgUidDSk/wb4n8yE1FUttIldTFjBpriv+cCgxj
k02j0mnUJnGaoeTnyLaoWyUWkubMbp82pKkHcFKSzBGuxZv7EVrEIlYLEBqa
5dpU0wRiwrEtPAegAyUpSJQfXIx9ZI6OQotTMIVZy6HgjR8Mzp3TWJIfRMTD
5AIq7GX7GI6xnMt282B7R0CU8ADTINJmV4VCDzerYcmafjggwwoPVgNRPBDr
IoUncqCMGIb2hLG6wrGBhz/BRCFqtMaVDXo7owcvsUtfNL5sFqQ3c8aIekBQ
gjB8XciMMNWf98zxc8ytxdu5xxwiqL9P4pfmDto8nlqrue4NxXYNlAg7rMoy
fSmmpwRpX0TBhSPV7fI8CACyWFJOF0cY96TPSfq6fRK3sNOiOq4IIJISdiih
NwAxGauHUggrfkkn6HJTtC1FHMAiBdRcU2vVhAMN/TQswUu3olWp1xtDatVy
1KzgIwyP91iv/KVzh5xilHbc1VPtrFyZP5R+e5WfskW9u5Z38hlzBYL13vlI
OroMw+74ysWx03jjkHwMJVUZDh6lEzzuXUb1bKieCQxJwzljYhRrOUR0N3+r
6Z9jzYgkRs83YlambfLcvodlbLw2KlZr5HhUkNrCiMCopJ21BsWRie2Fylva
GTELgCAHSZIRuTXoPHqX7ktWWI/YmALsNMKQI3s6A1mFxb4uXGkxzRWh30On
nCVQHN1LYEGdxETGMI3SKtpWWwLCwAWvaV9CW/ZEdCvbU6Nux65aOxJBW/K5
vTVm3/ErFK5LogNUMcmIqAqJwDbqbAwk/3f7F3xtPlPUNLhVJv9eVtljxR22
Btu2V+ovADr5Cqy/uJJWkYZSIO2M/bPROZt9oposFVf7ATiUcDIOPcO5UdWA
vwotJI0FwDGKamy85JQgXZdGCxehxIX3mloGLYev2JPcevFicq0J1ElJ7qYZ
EyoE2qrP6zbMERNUrgcjxKLbK8ZoMlQLNu4yH2RGp4JfUgl3ImkfHI2k1JP4
2v2GTKvg/2HcJ1wu/wPiacfpSyX+zvrJy3TWgzOyg17vAUp2vk5bouugPgBd
ZCNYBOVKWJMc+Sa3/i0lV8klUxbfaIhIS91HWzimUFMUVr4yjxvpHjntb6At
XNYUR0exJ6+m27UUCfebJuD3xReEO1dl6jODjzrj83DiwReRWJX8sAX+g215
amay+MgFtSp0V6CO836lE46v3DuLXmi3S/TtG4HrvzIFqrU/xwk3gsqpKDh+
SRWrSR7orWedfDRe3LZEx31/pljbGEuzEHnVhdkxHc/bqhs2lSXZcua3LcFP
JR9T3buKdsYkAlg5Ndml+s1L6qCKTlTCTt7OhIq2Ge3EWFKddug2R+LHpALt
g2v+ojTMVgupCuMCQGcZtpIh2+4cPszIV5T5stZsOeSFEU2LTDnduzZ1toOG
QsuSe7A3IRxQAGeGwx1Ya1UaMyo6Qx2h2151iiZJGeM4xQENPetJbo02dLt4
WtHnekvc3lFb3053IkcvnjAcalP/dZ1SBW5q3k7socjIW5Wlyqrd4bKm0/iW
KdKbLhhZ94QKnoRtcsnf3RrerbhxyibN0aBJ8+FhTsi9xLljhPWH5bzJCszU
lkIKHEyWJq/OLq5e33DV2iNRMfGNWav1nAiHHMbnLCmoAtk0cUqzOh0MRn2A
43i3eHBTPUqI4SxnewiXMiFJmp38oOEzCob2VY53gYuisa0zrSdkEWuctJwC
YjmNSn2aagZdPRVIHwzmF3HPV1SppZZ6lY3CcFt1DSCK4MF5yYAcwWWfk/3L
2iDXOKHKWJ3tFiIlmKrDNaXUaBFsobvl1pViBSq86eGeJjvjJqb+1IwDrlYF
KO23xnMRX8jAjU61TTSBg76XGu/ROZY929dSzXNcPaI2ulRNYpQv6dYXASBl
TjpAhvtywBBclIByVFoxj4srdbksSz8b8SAxJ+F791m+WJJWLp6TklBJCFtn
IfL7skIMMP0O2JPRvRFxMbFDmy7rGK5bHxHrvW/SpKUsujgOpx0M49gjJiY4
f4AXjMX27sE948vXT6HrofcNCZFK60CVwG12ZWIdUasVLBmXKdHTReRqNrNu
JTPpWKHBgdR0KxznC5KcyYXD0KV3/IHXq1KiAnoZR157hElVoaBvfE7XxKNG
NmMWS5o9Qi3CEsaGPvlYcG8SREG0k6BIT0GDhwv30IqApAsHo+Oae27RGJs3
WUmgb1m2TUOK7QEaqtBCMQ4F1QN231JFLatSWCDR+ZvScP0YJXWkrBTgxC0q
BF0hWxwBucLqUFvW997l3LaoWZra7hKWSjUI1X8mo6drapoDeOCdGmS04rKF
GsCDf6lpIqQk0lcHu3XMtlOdGqPXTLtakM6qlNfLy4XjdAVRbTE7XhThqXPH
y822oTkuwUW6gWRkhiUuOfE1Sr2Zbki8yMIFL9M8Z85JYivVgWZD37z0fSSM
M5+lClliH5rgHdiia6PeYNeK3jwAjd5Y07wTVzuRRbjXvMK7cnXHMQMdvB/z
y985QdaXuNL3nOoHIs0KEJcbx4qn30JCjaNjFHNev+ROBWrLPTptS/VTuJLr
EoTRqOAWCIA164EaOCy8TKTrJWYkWLmbrQyUiXyYjRdj1uRBWgZeaG5NU2J9
cxh/uavJ1O6ou4ilq6y9SHttpOF6fYSc5fVPvENrm5ZdRlxDl4riz7bI/7El
vIZdRokN5jZ3wmnIBdq1dGleyylodyrHN7jmGeeyMSz5PGEN+IPjW8LUJJeK
K2kyACe7SLEBHAdZBtQ/Nh7M0ylHMJICQ1t3vdr38jZbsbHDaePMDOi27MK2
NqbdwLHBog51eyYehNEgqiZ4JNjpsKDjRY+BwVs/7XvLHxtxGu215wYYd6VW
W+zi6LLGGym1dCLBIaFytPcpF7frUgz/Kwd+phHWMcOHHa/R7qWTOP0Jf/uJ
futkgqlzItul4uP1MI47ItmBG1ZxyVkpLoK9XtfbtWlXyTtyFU5Mi8J++Pgg
EDJwKHGncgWmfJ1a0bxwKe3LXEu01Awi4Oy7eXbPRrgS+RWNBbU3eOaNjQom
w63Ccxjp9wxROAfSRAiVNqt0RwoiLwI76JZz01alDmQ3HNjVaXIhZocHXLL2
6uLgSEbio9EhfLekWcCSKL7Ml5J2rM/eU7c0iiOhMBJfrjs5rDZXs6NEY2lo
rWYOb1fqLMyptfA5G1pj9epAe8TCis3Sm2lqIYewrb+qYedvQ1dannqQ+15d
oYXBJ/ja+se+Yy2F2oTVaPAqAG5LSMu6RLPzGu9ISj4HLmnDstUirSQDEIAl
WVYSUWTMDDRdO9L7lqsjyHsRZ+xoebfKi3eZGjVUrmVcl0oetlZl0CYQOwiw
nnS73NZDrU2jQRGkmabYvyUHeYakB2l7Ot2JMwcj09gp37b5BWUKZNq8MS0C
aW6VXzgCgzANT9Q0hOouo6lGOoxap0NX36kvFvHZZTBdBGyrkYolbobGWO9H
3Nxt6Kq4yp37T9QcZQcpnn7jSvxoi6uedfCJu6sW4kgYgY5Eitw7mtoUv2H7
T2iOGtddbRWr1tmNhBwxBQoI0B4u4bPYBCk0L1E+bCNdiKTSa872SFrRcym7
iwBRyN/VElKBrURNVaNY46XCm7WvuJCZrlzZ+9wVmydTnaK31tUwBbspVhJD
qdINu4znWOEx3dTbFdsg59uqaRVYIqkKl/wS/hny4nFQAfUtfYvgId5PpnRq
No+4uUvaoRI+QWteTrfwY7nKqOiSP1FHz9nu1gkjU6KiykY8w84HweLSFJpE
gchvh20QuSiOUE+si609DKhOQFqrqdl7/7RWQ2NSrl3/U3o4LrQ7HrzwXqdF
iQqbK8lj91CHNVBcz96g7nDHNWZTLaIgdZTvbpo4eE1PxQeGxygNcKao+bJk
TUvDlWrQGEKrrJugfUSbOLlqvs5iTPzQaa6MeYDHXDGfMVQjl7WTMNqENTGi
pkBeWp0yQ2dB4vmDgr940WzRC20Epo7hoFc8JQUCKHc2fCU15eeRaWtHp4y9
rbpBTgs8SYLCuRpe7/1vvkMzv3DsXhhq7k7PkfpdGKLua8f7BqsiCcTtTnxV
sBt/F7yA0ENqamFfjcujUm5EFdJ3VvmvmXs53yEBXJV3Kq/i7ONKn7EFz5Qq
PxQS84DcsGixONeac4wl44Q3M076djGYkjk0sp20EHL5AohiLPlYUoqXPxIl
PCQo1hRLry9McScyL9n+xtgoQBBOUSK8FanrxhEU7zcrCsvVUeYGegBXUhqP
QvBTbgITEktmBWs+Gax2TDgrBCniQRL0I02Q71zgkMA86oI67nAE38B/t8Bp
rssmkzZYSQZXqKxOQeBbl7pY8QIPtScpNUleGj8CVyKF17/5/SMM+p4wcm22
E71skT+ZSya72kGwCt+7MvZ/MOoPnFzFHkUxfLXYTRpGAG7KmnhdOR/Qw1je
syqyZnSB/Y1ZCMhr38c0JYtHWaeroP784Ndfn7jtjROyiNm6mzBTvOy8CIAH
swxs02mskiyCxtXl7VNtf+K4kFgtKQ4U976o0LMGO6HGzLUcVw1rebmiriFF
aWuyr3LdN3pRB0ZxjbCIxAvHo/FHNHPNALPYEMc61gDXCHM9ZZFhTcJsQe5c
vAbOwQ1nwTGTXi4dWILp9TrpuyxOP75gfKgEDtSdKOaRGt1pBgwtUYGYimJP
4r9ceO7XsdW+3vDAAPAixTbMCAkXKtXCMe32PM8oaQzh+oo6PtUD6oo6u8tF
4vZwZhWsy11HYhpSm7BUr0ehYXJAyMGZVcSDMHcmo8QWanhbVljrYrCoyu2m
VoTBgItt7JLC1vUuPIPro6RcgXMwyQq4LFzmDFgzdy+fOV2G+06JJpOhVEIJ
U3MyCyOcBiac14VNzLNsNnFNpGkuai9MHMBxi9nAK6REz9ZcoygRNyAmfpbC
NRxuyq4T3vVA+5JGNV2E/Oyo7i5s72A8+O4JxrMko5OHT/440LAIKvCZSUM2
Wg2VIN9gSziMwJhKS7joRgQNrQrM7wUakm6SQ/7vzDBnF9kOEN2kb42cIfKt
piDDI0e2WeXtMsZBugac4cXEszG+ZhP+kGtrdnxe42CVjHm+rnXMJLhJcqV2
8q5Gexy2K8QzlFEsRHGTeva5n1aYUkpuFSpfJqIJlz47Ykc/waRmSb4FaAUc
+REA8dFKO80lEpOFXOl67sOagM/NtlWZrrGXei7JpnW5xRaeUzUUTjQjl0Ow
/rpsmk19+uDBIm/GVQ7Lg/2O8+aBfn7AR/lg9KCpsuxBlm7eYr7M2005fdsU
05Ov/nb4Lw9xhAz3RoF0Hhv6XmCOqvzq0oHE6sM295zlahboqixu4EOmHxjh
VTb/+JFDuDarckdEuzVbK/mMwhFD66OUMcRBrDCpZZUt86JAB2xwiK5BtJqS
IVI60Lr4ZiQxRlr3fk5jIMx1yrXmrKFfnGKd8mxOmIJkkT4kcOrAKRYLyqeA
gSggAa2eGguUsIcoCDYj1A/D9TEuqBWuT/Gca7wjNm2hkdZJOTu+VFXEFbOj
0MTm7zWah3YvQ/OIqsK/ixKhTvYkiRQm+sVf6ywSdugMekMNMyoy5XmxPT3e
Z3L4+qcjtaOfeVcVqyDm5Q7AHb5+ecRGHycxuF61aY36jRa8m6ir8Tdt+za2
a2veJ2vyoZWUVw5SdUkZIa5GL2ZJO78GF1NEFbHDEZGMiGYJf3FLQ7ZIR6cd
1nkm7AzNHN89WpN8ObIDDzXEfcLdw6aUEOtDi+kHUCWpkgHvGA0YIPhiyCle
TVSvKpiAly2d+Ey4MCVHUczT65cmeTXwjg1dWQ37TK0pM+oxVQdS25/BTaDG
g0spQEyqCjn1BDC1SRx2viY0Lo74qqJ19fXN954C0tUEvrJMnbHdGl7x+c0q
bZjqB9E90jgury6AMIqoNpdqo+xN/WxMbl8EZdQob6LmrTkU6JHFkPXXP3n4
qdxEx+TtuNknoBg4GQIkZB/my6trOK+85HjAo/HgDXl4pacct2rGKocaZ6x1
t0L0jEJ9uldyWGNQc/tc2FhY1+WUW3fCko4kVZMjp12iR2Ht7EjtJc4vONgN
DHWPPXEAKfXzyCvr3FlETS2A66hso5eLW/uwzGT7eVGAgvmbh3ICgWRnOj/k
pt5Nl9jFmZBywp39hpwGzDomhmuA8DUMioinBZFqH1Ph6Lxaj9FSfp+SNw5O
wOW3uu0qDJCWhcYorpigXgiuPobxIJWaLNYZC5t4ytw8M4gk9PG6aHFCwgID
PfAVGeRZoH0L6vXN9IQL1UgtVViXReba5IvuOIRYJDtW7cUnGmR3mQt7SD5c
wBMiaQZ5qaGEZM5la7SLYSlb64VR97haewSXCXK07nqZb1x5fof2uYtAmBnP
m15Dt4SuWsKN1ptSNZGi8+9YE+WdIFWmuirbzUh2leL2RmrR0RoWyGhmMyLa
JtagPmIDC3aA7pS+VEUjTKXHJNSAgqf0VrBISynEgXeDH2GdRCjIjjLBf+fS
JuhSDVXK4nikFXklyQxCxS0ObgKFQpIMZwcy1Jnp5eSltRr0AInF6HufgHzw
Um4ynJCO6BNZ/m1D7snelXo3OV2xev/QQTopPmynwtMP+4GDUjkajQhBqDG8
C9kXUVHMcKbxWU0CabRaZmW9cYe0/JrjRKICEpgVAbPRZG+R4AD2v+VHPw5M
vXpdUZAtTQxLC/v11ZPjEHiOrBbDdeT1NW1f2vWGNIqYpu3agudNvZGQQUhr
R5wvqbm2/I+rE7mvvjDRVfztN1UKwT1Rjz8pURXVpVJ7XdqkEwK38cSywdoV
IPLht7w/Nosm0httqITNvJBK+8ShJs7t6Y/TrvBiMgyp9KIvlRJX5vmMejz/
BiwmSvYmf5pznco7/+VPL68/D3fZPdF9iIy+zoLLIprkRQggDvHFN0AKkDY3
VYkBnCp/wBrYK4SpWkdSnWrpEvd9FjfvQJ9sPTgMtiwueu9lpmJ8rqIayiWm
IY6UzTFRvjKnq0mM8oHD8WDJGggn8r7+rl430COSq5c3l+fOGX0UgBd4GRC/
7d3Bb0pEV0nYl+6h6CzRdQPj15c1134I6/7oex2i6ifJBD3QUdOJ+lMJxgd1
/XqlYqrRlZhLzwNqoo9eyKGrsdXuWBT24PT3q/6cyzXuul202N60JU06De9K
B9ULq5f3x3mrUa4V4YN5iuhzD9CF5ezuqotK31y4nAaFjW07U1HJ++6xdwBK
SUYD3nBLWUGOPG3IYPlPDA46p7pM8v0VKTtqU7lT21fmkKWOprYbNkgVVDp0
gXIRAzG1Qsm43gtkrb7qYa34UDk6/4nqHhHnxs5vLeh1X0qK46qb8K59ohCX
Fq6yfLsn98vF1Lh+xTRlf8scw6txFzYayrchQBWv1SN3jmoSaybWQ/6bb6TW
Xq5GzsoVhwyi7J1nnXfX299ZISLE7i0voyNJ5VTQrlA9lRosWgJbnCadIhjb
6COTLZkOe1qNxFHMBua2ZnLr8G1h6qJVZCUokyOtrKgbDZU3IefB/np4ho9w
/fGaI/Y00DSk/p1FLqPiwNcSBdJ3ZZWa51V/rVKxJpA7JE4BCquyxE0sXeAH
c362Orsvh+FmtEpLZ1HqjpoxjvkdbDcHkvERGYu48t9nFAMd+6g0n6dOhc3r
qCGPm57LBJEpHa+oq53cmbDegXXDPYy9/7auXY/tUEaYc3YedcnZpIFa9da9
89a+85beeUud19AVIqG+5BPg6wb7wRpAXSJJNN2wK9rX2HcorS+nItcdhiAc
X8xdOmBi4h88323E1CqKAYVNdZSbieY0BES9b6QIditzU7Les4GBBE3fFSJ6
ErnVEqvoFFTd4gfMexwquLQMUxD5SaunyE1UhFgkm1EBCMrAUsGKrfHZ+6k0
d11GF0uB1EG3vEbUWXclaqwe1pvc1+5CQ92DK+uJVO/18pkuAAupw6kt7ztq
jsuR7GHUcNuz9xs2d3gEG4scppXG9ijFwQ4CsbizJQhd0aBIgEwfzB5RWZWq
95QxDUiUXgQdunGma1JgAFn6lZeAbQSEqHdPGHYlllvyFu3RO3gn+2wMrXrt
BiHLSmBGGNuka5dFboqPdHQ/7pUgzaveUPAvE0uN76ZOlFT9oJxx9a6uLpUg
89cdOq48O3TxUa78jqGDHL4rigt95aUrHJyiLqXrRw99Yk8tL5KgiSeoO9oH
1vHgNdU9ahW1dSv3GNFonEkIFKbthqqS6rhnmZzS5ykoDl4pmku0SEERiiwv
cBhS8i4Hwq4RqJrkiZ/X5VqtE3YoFRxTl/Tly8CyW5CJKAiZhQk6lYxFYlf4
D9X24KoOmQTvUuK8GP07VjVP8qAz8rQsCiwdIEm8m1INRHIpU5I2A/2TBuIa
7VTriQq6AidhMZAOw0adYS650OIHTuxyiQAY/GzOSxhEYL6NsyO6UcG5jxUd
tKjr52m3JlSVuYwt/6o1831VTz01qjrEkAoSW0M0DsBn6/e6ttJBp12uH+kL
T1GEymEXYbzlG3jUrYP1l7frvgFe/nDdx8ZOCB5qF3IvLun9p7jczhFRppC7
wyfE8rSTrHAUe/wkm4Zc3lVIv/LUkzpvNh0rCq6+mRwwsuwzw3f0wfFGqg1G
AFXoiTUHwuT75OnZqIuEqzpvnKR4Us9uklW6E/VFItrECoP+wbhItWt/zp4m
6scBY2gcjPVAu6YA9+VInMuxcU09w76OuIkpCjp1BdKWU9F1ivW26ci4FOC7
LfZhoyRD8q672rQ5yzGtwgCQfOKSeGM9AWJ6iVvmeDu2bUVh1qNjaeBES/Pq
JhqB5IImsOLLxsX77OkP51I7GjczWe9Wkc3rSnoJrdfZLKf8jE92gIv72/wW
yWfwRfICdIHkPyR/qJZERLI9+hhvtN+EkemX/ZHpclQrH5HuMgnMQ+2o9LCv
bRhtmXPTcQoenXGweOOqbWFfFTLOlbiVf7itSNcuxwsXXOkPy58D1rnIWU0S
lnLIIZISwGNr7BMStHA2N9nbapPPPkobTu2HI1mvVHN6J/V45ttCEpMRkVze
Vi5FuXDrmOHHkW6yEg4pVd3Lbl1rgmilXM63Wq1YXAPMkFRnyknyuVbNkgMj
KHwQn8SMo7yYDR0dlfE55djV37WJMvSkiXTbbBt27qWJxp5pQiqGEJBnHSFq
i2SJu//LtCiL3RqY+Z9m82I8y7480ocRFPKQhJ6Oo0ekpLWNULlGMcE1fKy3
k18A6c5WDX5/enF9I5LXlxg1sq3H0cBDF73l201OJihtUDROzWH5bIY8uz7S
kulZreAyYZYGPjnnM2QjTZmw0PECdMoTZFJnvZqNmnKEYsFouxlhRBdxzpHk
9kSZb99rgdmo7YDzF3BWV4pF6dg9J4RbUI62TrUv95VlJ1KHLJny1edW8O7c
m22MQBM5bTrOwOeTBqgGRWsoEdYlt+soR1Ie1WzXvWRMzwEPkdwdqnQhpVTH
3GyGvBmNJe3065PkDWkPGp/FaX8SoivvwO8TjFx4YhBB7yOdPxUi5UynRqrk
ce/x5PgUfaD+BE3jAx5BJPoJHdsvmFuh6QQCSWmmEOUsD1E4n7gitHAqKfVq
0c4tBpSc++99JRgpRZmcXYmNHL5EwNTye83W6cfecM+S3hIoJGh1os+A/AXC
w3SJJWPjnE17rq6NJEuqGI+FhcPRScutxv1pUDIZxecwNeV6hlz7w84BZ8DQ
qjItYS0xZ51xTG4FcdRimnCjBqLnXUVrzc+a3FfllJzhjeSUVEkKF9HKSbnY
Ip40mG7hfc203hnTHJOIR0cX9jCWFHi5Uq7CPY8gHRr4+hNZ9NV+Q1Q8OU2e
k+VB5kbb6D9Q0ntlsUXrKQc9MzpQdS1DNRGBkTFFCmFExOjpyLDKqChFDbhI
Qu3uFCoVzKrRtRLUYSCVlDzvmPuq+ZvowsmnmBzIhfwrwHkqRC+Hb3RX+Ukr
LrA3n5fqUEF+kzIDmNZR7I5s0TpTuZCPUapjuRwNzMCoqGZbZfxL+GwrMN+V
sWXdV9dHkAsP8KvTLsEhqPWmImJj01qCOgQm0Z1HwwIj3K/Pl60oV84e40Kp
uwqoG8rbrjvnq8tRkr92lKBJPQzsTnqWHLZyoBdDEY6GDPSKkOZ5wRmFc+wQ
sluVaVA0BSe8IVO19mol3LzX8v9yF9kfP11xiXpXVZtrGcQQCqobtHOSbaNZ
07c57kkKQmsmnnmM0dxg+gFQZGI5nmth/LQKhwBDLHmtQskdCqCLtAk7lBPM
pnoKFPAjCYHkaRhtUiSHEjUb4uGj34KH3soWoaHX3/jaS9l+pdqm5G/M+6fp
dNmbvO/Em0DQz0PuQ9Fe46jZoRlliMXYtf16tV1JWWM7T8smLfScZ+SvpW4C
Yh05T+5zDDbC4gWs2nP9OtyRC5BliFhC61PmO3aL2O19F0rWhaswj3bVDqhu
oa+2sFdKkMIUqX9Ge7pMscAxs8qO9SCUVOY2LwTNsWiVmLxlH5F6IkMk/Izu
FCmFtlokRqj+UVoj5kW0qWxGkCZdIMfyKHd5VRbsmKW1ehIMl1aK1aAr9U6K
aUc0WOg/VQF/L7h//vrVq8vr2+Ti8vzq5urF9amT8ASVSWkd/ZIWc2Ahoyzd
jHCPo4cnqKDmGAY3204zSjWdBfasVgcuMYVycDmJOqtVhwiIQe/wgyt+FP/c
kRQpiW1B46tUaR0JRFIkQ/Rq7Qgh0iUoVizF6+9ai6UTNwXVTpOfHTCioJLv
EBX++LOk5VCUjtQuoaB6JGJERwLGixoTGuhmifQoJ/MpQ4FqobXyINmcd+vL
45XvnLDN6kxQI8mV5GF5g8WcnCNmNiDrKejQSPLto6+Pk8Pnt2ejm9ubI20s
9fO6SUGLq8ffwTgrRScUGv/4MxXI50FJfsC8RoEnmysrkf5lUICFdFJKnkvC
wFNJmrb1yJ2FRDOqRX2nE6Rc8UlF6gnyDmp+xGaFTVZuuPmyMzRMQdjNyZxw
G1VUYXah9jSEmITnV0Ira0fACTnZI07JyOS4phxK71laSm8h4VlkZkcOrIm3
gYFIi49nVNAFFyj59ri+APsHJmwA6Bl6nWzijM+jwtQSlNqkNF1BNeJlPUV7
3EBoweQwdWTAxcI6OnjlnBiPYRpbDieA4SjH/vj4sVQwQYHj4uoy+fVX/AG+
H2Xr7QjYBuYCfPw4Fori06LDMAhNUqMLy+yBc0kx7YTF7L5g4TEgK+mNWO5C
zam9BaDL8glGUW22TrGU4KWZvy4CRGDJvtpGTnUrsAUbI+6L0GrnDZC1y8jF
s32u1T1cMJltA0JVK73dxSl4TyTArqu1s7oDDYVyRlwfkkghjYE1hEnmCH8Y
YW838WsE/ZtKCTFIg/AF/47LqEEFoqJyBt6fXlJ1TtREXY1pQh2qmKRue6om
knFhCWNGPE2uaoazgcE5oSbW08eYNXSa+YBOn/AURbmkAb2O5S0SXuuh8QvI
8cRBHFtp61pOPPVywcgun417iaarnQQBmjZD7rifDL5PKbXR5XA5CRUbh5Zw
ciPQV3Iq9CfSqRJdHNNleU2lAhNFn+MNxKIdDQvNoo26KkpuQBbNKOGs4o4A
sSzmaUdRShknkWxdK8gIkXwuY23zBuB0VmTIoCl4MB9PkLcapTeijAS8VhKs
NnBl82kT7sWHdFI55WLBTNbKnZzQWW4BgUZd2RMkCUk/T0kl82K+FLdCiGBZ
r1zD26QClA/lxovDpioCfpBq6hNktTaDO3Qc3HW6Bm0L00BjBZQpTWp1BnY6
ciuzfK71zjC9X4I9UbnZ5AXRBqkmhVLnhou6UFKOgFLqCJEH5UKzybpK+Oxz
lHT6QFCa5DJXP+bo3ALy1yc8PjwdDP6Y/C65kijuoJ5E/2vH8tpr6YTOSgmm
aDKxxoqVYW/YB64HinmWxniVSWopS7DN3olPZGJ+STi0fRVzwLMGMcfW82H5
W0xttpUP45qQdi0+QG0NVuk9MmCc7GyG5de1GitVbaDSKy0PZygm6KufEk9R
SlMJWC0b4tgcy2ZJhtQdC/GQR0mstcqizEvSZ1gFRPotu1DOdbqhnEsJP9G4
Nmtl35FW5MHAluV5dk+sclGlmyXpAezXRu0bm3zp+eVZMyfRo41wT2mgNz8w
xhlkIipkGx8riZBaQFPO8RRC6WI8tECBsBiiEpMM9JuC7HRyT/ZzxiNahlwd
SvvpCcFFFKfQZkY+zn32CYiStxikJDpyGXTUVGHa7p+SSfV+k74rCaLaWNyu
iqYPhHdMkqwpB9XnatK5X4ZH9Lvkz9hzM6M0SZ2KnCdvXp6dDDA1841kqjuo
KaDYQ68uAievl+ughVyUxGdr7+FpGS4U/P4ECeJZmNmGXSW540M2+8PBHITH
7EA6R7lEXK3Ldu/afKbFu+Rslb1P6fafr9gEofyTpGopOsCXL5I7zAUbD/4v
EmioEur7AAA=

-->

</rfc>
