<?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  (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-tiloca-lake-edhoc-implem-cons-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.0 -->
  <front>
    <title abbrev="Implementation Considerations for EDHOC">Implementation Considerations for EDHOC</title>
    <seriesInfo name="Internet-Draft" value="draft-tiloca-lake-edhoc-implem-cons-00"/>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <date year="2023" month="October" day="23"/>
    <area>Security</area>
    <workgroup>LAKE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document provides considerations for guiding the implementation of the authenticated key exchange protocol Ephemeral Diffie-Hellman Over COSE (EDHOC).</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
  Lightweight Authenticated Key Exchange Working Group mailing list (lake@ietf.org),
  which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/lake/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://gitlab.com/crimson84/draft-tiloca-lake-edhoc-implem-cons"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>Ephemeral Diffie-Hellman Over COSE (EDHOC) <xref target="I-D.ietf-lake-edhoc"/> is a lightweight authenticated key exchange protocol, especially intended for use in constrained scenarios.</t>
      <t>During the development of EDHOC, a number of side topics were raised and discussed, as emerging from reviews of the protocol latest design and from implementation activities. These topics were identified as strongly pertaining to the implementation of EDHOC rather than to the protocol in itself. Hence, they are not discussed in <xref target="I-D.ietf-lake-edhoc"/>, which rightly focuses on specifying the actual protocol.</t>
      <t>At the same time, implementors of an application using the EDHOC protocol or of an "EDHOC library" enabling its use cannot simply ignore such topics, and will have to take them into account throughout their implementation work.</t>
      <t>In order to prevent multiple, independent re-discoveries and assessments of those topics, as well as to facilitate and guide implementation activities, this document collects such topics and discusses them through considerations about the implementation of EDHOC. At a high-level, the topics in question are summarized below.</t>
      <ul spacing="normal">
        <li>Handling of completed EDHOC sessions when they become invalid, and of application keys derived from an EDHOC session when those become invalid. This topic is discussed in <xref target="sec-session-handling"/>.</li>
        <li>Enforcing of different trust models, with respect to learning new authentication credentials when exchanged by value during an execution of EDHOC. This topic is discussed in <xref target="sec-trust-models"/>.</li>
        <li>Branched-off, side processing of incoming EDHOC messages, with particular reference to: i) fetching and validation of authentication credentials; and ii) processing of External Authorization Data (EAD) items, which in turn might play a role in the validation of authentication credentials. This topic is discussed in <xref target="sec-message-side-processing"/>.</li>
      </ul>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <t>The reader is expected to be familiar with terms and concepts related to the EDHOC protocol and defined in <xref target="I-D.ietf-lake-edhoc"/>.</t>
      </section>
    </section>
    <section anchor="sec-session-handling">
      <name>Handling of Invalid EDHOC Sessions and Application Keys</name>
      <t>This section considers the most common situation where, given a certain peer, only the application at that peer has visibility and control of both:</t>
      <ul spacing="normal">
        <li>The EDHOC sessions at that peer; and</li>
        <li>The application keys for that application at that peer, including the knowledge of whether they have been established through EDHOC, i.e., by means of the EDHOC_Exporter interface after the successful completion of an execution of EDHOC (see <xref section="4.1" sectionFormat="of" target="I-D.ietf-lake-edhoc"/>).</li>
      </ul>
      <t>Building on the above, the following expands on three relevant cases concerning the handling of EDHOC sessions and application keys, in the event that any of those become invalid.</t>
      <t>As a case in point to provide more concrete guidance, the following also considers the specific case where "applications keys" stands for the keying material and parameters that compose an OSCORE Security Context <xref target="RFC8613"/> and that are derived from an EDHOC session (see <xref section="A.1" sectionFormat="of" target="I-D.ietf-lake-edhoc"/>).</t>
      <t>Nevertheless, the same considerations are applicable in case EDHOC is used to derive other application keys, e.g., to key different security protocols than OSCORE or to provide the application with secure values bound to an EDHOC session.</t>
      <section anchor="sec-session-invalid">
        <name>EDHOC Sessions Become Invalid</name>
        <t>The application at a peer P may have learned that a completed EDHOC session S has to be invalidated. When S is marked as invalid, the application at P purges S and deletes each set of application keys (e.g., each OSCORE Security Context) that was generated from S.</t>
        <t>As a possible reason, an authentication credential CRED_X may have expired, or P may have learned from a trusted source that CRED_X has been revoked. This effectively invalidates CRED_X, and therefore also invalidates any EDHOC session where CRED_X was used as authentication credential of either peer in the session (i.e., P itself or the other peer). In such a case, the application at P has to additionally delete CRED_X and any stored, corresponding identifier.</t>
      </section>
      <section anchor="sec-keys-invalid">
        <name>Application Keys Become Invalid</name>
        <t>The application at a peer P may have learned that a set of application keys is not safe to use anymore. When such a set is specifically an OSCORE Security Context, the application may have learned that from the used OSCORE library or from an OSCORE layer that takes part to the communication stack.</t>
        <t>A current set SET of application keys shared with another peer can become unsafe to use, for example, due to the following reasons.</t>
        <ul spacing="normal">
          <li>SET has reached its pre-determined expiration time; or</li>
          <li>SET has been established for a pre-defined, now elapsed amount of time, according to enforced application policies; or</li>
          <li>Some elements of SET have been used enough times to approach cryptographic limits that should not be passed, e.g., according to the properties of the specifically used security algorithms. With particular reference to an OSCORE Security Context, such limits are discussed in <xref target="I-D.ietf-core-oscore-key-limits"/>.</li>
        </ul>
        <t>When this happens, the application at the peer P proceeds as follows.</t>
        <ol spacing="normal" type="1"><li>
            <t>If the following conditions both hold, then the application moves to step 2. Otherwise, it moves to step 3.  </t>
            <ul spacing="normal">
              <li>The peer P supports a key update protocol, as an alternative to performing a new execution of EDHOC with the other peer. When SET is specifically an OSCORE Security Context, this condition consists in the peer P supporting the key update protocol KUDOS defined in <xref target="I-D.ietf-core-oscore-key-update"/>.</li>
              <li>Let us define S as the EDHOC session from which the peer P has derived SET or the eldest SET's ancestor set of application keys. Then, since the completion of S with the other peer, the application at P has received from the other peer at least one message protected with any set of application keys derived from S. That is, P has persisted S (see <xref section="5.4.2" sectionFormat="of" target="I-D.ietf-lake-edhoc"/>).</li>
            </ul>
          </li>
          <li>
            <t>The application at P runs the key update protocol mentioned at step 1 with the other peer, in order to update SET. When SET is specifically an OSCORE Security Context, this means that the application at P runs KUDOS with the other peer.  </t>
            <t>
If the key update protocol terminates successfully, no further actions are taken. Otherwise, the application at P moves to step 3.</t>
          </li>
          <li>
            <t>The application at the peer P performs the following actions.  </t>
            <ul spacing="normal">
              <li>It deletes SET.</li>
              <li>It deletes the EDHOC session from which SET was generated, or from which the eldest SET's ancestor set of application keys was generated before any key update occurred (e.g., by means of the EDHOC_KeyUpdate interface defined in <xref section="H" sectionFormat="of" target="I-D.ietf-lake-edhoc"/> or other key update methods).</li>
              <li>It runs a new execution of the EDHOC protocol with the other peer. Upon successfully completing the EDHOC execution, the two peers derive and install a new set of application keys from this latest EDHOC session.</li>
            </ul>
          </li>
        </ol>
      </section>
      <section anchor="sec-keys-token-invalid">
        <name>Application Keys or Bound Access Rights Become Invalid</name>
        <t>The following considers two peers that use the ACE framework for authentication and authorization in constrained environments (ACE) <xref target="RFC9200"/>, and specifically the EDHOC and OSCORE profile of ACE defined in <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>.</t>
        <t>When doing so, one of the two peers acts as ACE Resource Server (RS) hosting protected resources. The other peer acts as ACE Client, requests from an ACE Authorization Server (AS) an Access Token that specifies access rights for accessing protected resources at the RS, and uploads the Access Token to the RS as part of the ACE workflow.</t>
        <t>Consistent with the used EDHOC and OSCORE profile of ACE, the two peers run EDHOC in order to specifically derive an OSCORE Security Context as their shared set of application keys (see <xref section="A.1" sectionFormat="of" target="I-D.ietf-lake-edhoc"/>). In particular, the peer acting as ACE Client acts as EDHOC Initiator, while the peer acting as ACE RS acts as EDHOC Responder (see <xref section="2" sectionFormat="of" target="I-D.ietf-lake-edhoc"/>).</t>
        <t>Then, the peer acting as ACE Client can access the protected resources hosted at the other peer, according to the access rights specified in the Access Token. The communications between the two peers are protected by means of the established OSCORE Security Context, which in turn is bound to the used Access Token.</t>
        <t>Later on, the application at one of the two peers P may have learned that the established OSCORE Security Context CTX is not safe to use anymore, e.g., from the used OSCORE library or from an OSCORE layer that takes part to the communication stack. The reasons that make CTX not safe to use anymore are the same ones discussed in <xref target="sec-keys-invalid"/> when considering a set of application keys in general, plus the event where the Access Token bound to CTX becomes invalid (e.g., it has expired or it has been revoked).</t>
        <t>When this happens, the application at the peer P proceeds as follows.</t>
        <ol spacing="normal" type="1"><li>
            <t>If the following conditions both hold, then the application moves to step 2. Otherwise, it moves to step 3.  </t>
            <ul spacing="normal">
              <li>The Access Token is still valid. That is, it has not expired yet and the peer P is not aware that it has been revoked.</li>
              <li>Let us define S as the EDHOC session from which the peer P has derived CTX or the eldest CTX's ancestor OSCORE Security Context. Then, since the completion of S with the other peer, the application at P has received from the other peer at least one message protected with any set of application keys derived from S. That is, P has persisted S (see <xref section="5.4.2" sectionFormat="of" target="I-D.ietf-lake-edhoc"/>).</li>
            </ul>
          </li>
          <li>
            <t>If the peer P supports the key update protocol KUDOS <xref target="I-D.ietf-core-oscore-key-update"/>, then P runs KUDOS with the other peer, in order to update CTX. If the execution of KUDOS terminates successfully, no further actions are taken. Otherwise, if the execution of KUDOS does not terminate successfully, the application at P moves to step 3.  </t>
            <t>
If the peer P does not support KUDOS altogether, then the application at P moves to step 3.</t>
          </li>
          <li>
            <t>The application at the peer P performs the following actions.  </t>
            <ul spacing="normal">
              <li>It deletes CTX.</li>
              <li>It deletes the EDHOC session from which CTX was generated, or from which the eldest CTX's ancestor OSCORE Security Context was generated before any key update occurred (e.g., by means of KUDOS or other key update methods).</li>
              <li>If the Access Token is not valid anymore and the peer P acted as ACE Client, then P obtains a new one from the ACE AS, and uploads it to the other peer acting as ACE RS.</li>
              <li>It runs a new execution of the EDHOC protocol with the other peer. Upon successfully completing the EDHOC execution, the two peers derive and install a new OSCORE Security Context from this latest EDHOC session.</li>
            </ul>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="sec-trust-models">
      <name>Trust Models for Learning New Authentication Credentials</name>
      <t>A peer P relies on authentication credentials of other peers, in order to authenticate those peers when running EDHOC with them.</t>
      <t>There are different ways for P to acquire an authentication credential CRED of another peer. For example, CRED can be supplied to P out-of-band by a trusted provider.</t>
      <t>Alternatively, CRED can be specified by the other peer during the EDHOC execution with P. This relies on EDHOC message_2 or message_3, whose respective ID_CRED_R and ID_CRED_I can specify CRED by value, or instead a URI or other external reference where CRED can be retrieved from (see <xref section="3.5.3" sectionFormat="of" target="I-D.ietf-lake-edhoc"/>).</t>
      <t>When obtaining a new credential CRED, P has to validate it before storing it. The validation steps to perform depend on the specific type of CRED (e.g., a public key certificate <xref target="RFC5280"/><xref target="I-D.ietf-cose-cbor-encoded-cert"/>), and can rely on (the authentication credential of) a trusted third party acting as a trust anchor.</t>
      <t>Upon retrieving a new CRED through ID_CRED_R/ID_CRED_I in a received EDHOC message and following the successful validation of CRED, the peer P stores CRED only if it assesses CRED to be also trusted, and must not store CRED otherwise.</t>
      <t>An exception applies for the two unauthenticated operations described in <xref section="D.5" sectionFormat="of" target="I-D.ietf-lake-edhoc"/>, where a trust relationship with an unknown or not-yet-trusted endpoint is established later. That is, CRED is verified out-of-band at a later stage, or an EDHOC session key is bound to an identity out-of-band at a later stage.</t>
      <t>If P stores CRED, then P will consider CRED as valid and trusted until it possibly becomes invalid, e.g., because it expires or because P gains knowledge that it has been revoked.</t>
      <t>When storing CRED, P should generate the authentication credential identifier(s) corresponding to CRED and store them as associated with CRED. For example, if CRED is a public key certificate, an identifier of CRED can be the hash of the certificate. In general, P should generate and associate with CRED one corresponding identifier for each type of authentication credential identifier that P supports and that is compatible with CRED.</t>
      <t>In future executions of EDHOC with the other peer associated with CRED, this allows such other peer to specify CRED by reference, by indicating its credential identifier as ID_CRED_R/ID_CRED_I in the EDHOC message_2 or message_3 addressed to the peer P. In turn, this allows P to retrieve CRED from its local storage.</t>
      <t>In order to determine whether to trust a valid authentication credential CRED retrieved through ID_CRED_R/ID_CRED_I of a received EDHOC message, the peer P can rely on and enforce one of the following trust policies.</t>
      <ul spacing="normal">
        <li>
          <t>PRE-KNOWLEDGE-ONLY (PKO): according to this policy, the peer P trusts CRED if and only if P is already storing CRED.  </t>
          <t>
When P receives an EDHOC message with ID_CRED_R/ID_CRED_I, then P can continue the execution of EDHOC only if ID_CRED_R/ID_CRED_I specifies (by reference or by value) an authentication credential CRED such that P currently stores CRED and this is still valid (i.e., P believes CRED to not be expired or revoked).</t>
        </li>
        <li>
          <t>LEARN-ON-FIRST-USE (LOFU): according to this policy, the peer P trusts CRED if and only if P is already storing CRED and/or a valid identifier of CRED.  </t>
          <t>
The valid identifier may have been previously provisioned to P by a trusted entity. As an example, if CRED is a public key certificate, such an identifier can be the hash of the certificate. During an EDHOC execution, the identifier can be specified as ID_CRED_R/ID_CRED_I in the EDHOC message_2 or message_3 addressed to P.  </t>
          <t>
The peer P performs the following steps, upon receiving an EDHOC message_2 or message_3 where ID_CRED_R/ID_CRED_I specifies CRED by value, or instead a URI or other external reference where CRED can be retrieved from.  </t>
          <ol spacing="normal" type="1"><li>P retrieves CRED, and checks whether CRED is already being stored and if it is still valid. In such a case, P trusts CRED. Otherwise, P moves to step 2.</li>
            <li>
              <t>P determines the possible identifiers associated with CRED, and checks whether any of those matches with an already stored identifier that is compatible with CRED.      </t>
              <t>
For example, if CRED is a public key certificate, P can compute its associated hash. Instead, if CRED is a CWT <xref target="RFC8392"/>, this can be as simple as retrieving the 'kid' field of the CWT.      </t>
              <t>
In case P is not already storing any of those identifiers, P aborts the EDHOC session with the other peer, otherwise P moves to step 3.</t>
            </li>
            <li>P attempts to validate CRED. If the validation process is not successful, P aborts the EDHOC session with the other peer. Otherwise, P trusts and stores CRED.</li>
          </ol>
        </li>
        <li>
          <t>TRUST-ON-FIRST-USE (TOFU): according to this policy, P trusts CRED even if P is not already storing CRED and/or a valid identifier of CRED.  </t>
          <t>
The peer P performs the following steps, upon receiving an EDHOC message_2 or message_3 where ID_CRED_R/ID_CRED_I specifies CRED by value, or instead a URI or other external reference where CRED can be retrieved from.  </t>
          <ol spacing="normal" type="1"><li>P retrieves CRED, and checks whether CRED is already being stored and if it is still valid. In such a case, P trusts CRED. Otherwise, P moves to step 2.</li>
            <li>P attempts to validate CRED. If the validation process is not successful, P aborts the EDHOC session with the other peer. Otherwise, P trusts and stores CRED.</li>
          </ol>
        </li>
      </ul>
      <t>Irrespective of the adopted trust policy, P actually uses CRED only if it is determined to be fine to use in the context of the ongoing EDHOC session, also depending on the specific identity of the other peer (see Sections <xref target="I-D.ietf-lake-edhoc" section="3.5" sectionFormat="bare"/> and <xref target="I-D.ietf-lake-edhoc" section="D.2" sectionFormat="bare"/> of <xref target="I-D.ietf-lake-edhoc"/>). If this is not the case, P aborts the EDHOC session with the other peer.</t>
    </section>
    <section anchor="sec-message-side-processing">
      <name>Side Processing of Incoming EDHOC Messages</name>
      <t>This section describes an approach that EDHOC peers can use upon receiving EDHOC messages, in order to fetch/validate authentication credentials and to process External Authorization Data (EAD) items.</t>
      <t>Per <xref section="9.1" sectionFormat="of" target="I-D.ietf-lake-edhoc"/>, the EDHOC protocol provides a transport mechanism for conveying EAD items, but specifications defining those items have to set the ground for "agreeing on the surrounding context and the meaning of the information passed to and from the application".</t>
      <t>The approach described in this section aims to help implementors navigate the surrounding context mentioned above, irrespective of the specific EAD items conveyed in the EDHOC messages. In particular, the described approach takes into account the following points.</t>
      <ul spacing="normal">
        <li>
          <t>The fetching and validation of the other peer's authentication credential occur upon receiving EDHOC message_2 or message_3, once completed the message decryption. However, the validation of the other peer's authentication credential might depend on using the value of an EAD item, which in turn has to be validated first.  </t>
          <t>
For instance, an EAD item within the EAD_2 field may contain a voucher to be used for validating the other peer's authentication credential (see <xref target="I-D.selander-lake-authz"/>).</t>
        </li>
        <li>
          <t>Some EAD items may be processed only after having successfully verified the EDHOC message (i.e., after a successful verification of the Signature_or_MAC field).  </t>
          <t>
For instance, an EAD item within the EAD_3 field may contain a Certificate Signing Request (CSR) <xref target="RFC2986"/>. Hence, such an EAD item can be processed only once the recipient peer has attained proof of the other peer possessing its private key.</t>
        </li>
      </ul>
      <t>In order to conveniently handle such processing, the application can prepare in advance one "side-processor object" (SPO), which takes care of the operations above during the EDHOC execution.</t>
      <t>In particular, the application provides EDHOC with the SPO before starting an EDHOC execution, during which EDHOC will temporarily transfer control to the SPO at the right point in time, in order to perform the required side-processing of an incoming EDHOC message.</t>
      <t>Furthermore, the application has to instruct the SPO about how to prepare any EAD item such that: it has to be included in the next outgoing EDHOC message; and it is independent of the processing of other EAD items included in the incoming EDHOC message. This includes, for instance, the preparation of padding EAD items.</t>
      <t>At the right point in time during the processing of an incoming EDHOC message M at the peer P, EDHOC invokes the SPO and provides it with the following input:</t>
      <ul spacing="normal">
        <li>When M is EDHOC message_2 or message_3, an indication of whether this invocation is happening before or after the message verification (i.e., before or after having verified the Signature_or_MAC field).</li>
        <li>The full set of information related to the current EDHOC session. This especially includes the selected cipher suite and the ephemeral Diffie-Hellman public keys G_X and G_Y that the two peers have exchanged in the EDHOC session.</li>
        <li>The other peers' authentication credentials that the peer P stores.</li>
        <li>All the decrypted information elements retrieved from M.</li>
        <li>
          <t>The EAD items included in M.  </t>
          <ul spacing="normal">
            <li>
              <t>Note that EDHOC might do some preliminary work on M before invoking the SPO, in order to provide the SPO only with actually relevant EAD items. This requires the application to additionally provide EDHOC with the ead_labels of the EAD items that the peer P recognizes (see <xref section="3.8" sectionFormat="of" target="I-D.ietf-lake-edhoc"/>).      </t>
              <t>
With such information available, EDHOC can early abort the current session in case M includes any EAD item which is both critical and not recognized by the peer P.      </t>
              <t>
If no such EAD items are found, EDHOC can remove any padding EAD item (see <xref section="3.8.1" sectionFormat="of" target="I-D.ietf-lake-edhoc"/>), as well as any EAD item which is neither critical nor recognized (since the SPO is going to ignore it anyway). As a result, EDHOC is able to provide the SPO only with EAD items that will be recognized and that require actual processing.</t>
            </li>
            <li>Note that, after having processed the EAD items, the SPO might actually need to store them throughout the whole EDHOC execution, e.g., in order to refer to them also when processing later EDHOC messages in the current EDHOC session.</li>
          </ul>
        </li>
      </ul>
      <t>The SPO performs the following tasks on an incoming EDHOC message M.</t>
      <ul spacing="normal">
        <li>In case M is EDHOC message_2 or message_3, the SPO fetches and/or validates the other peer's authentication credential CRED, based on the ID_CRED field of M.</li>
        <li>The SPO processes the EAD items conveyed in the EAD field of M.</li>
        <li>The SPO stores the results of the performed operations, and makes such results available to the application.</li>
        <li>
          <t>When the SPO has completed its side processing and transfers control back to EDHOC, the SPO provides EDHOC with the produced EAD items to include in the EAD field of the next outgoing EDHOC message. The production of such EAD items can be triggered, e.g., by:  </t>
          <ul spacing="normal">
            <li>The consumption of EAD items included in M; and</li>
            <li>The execution of instructions that the SPO has received from the application, concerning EAD items to produce irrespective of other EAD items included in M (see <xref target="sec-message-side-processing"/>).</li>
          </ul>
        </li>
      </ul>
      <t>The following describes more in detail the actions performed by the SPO on the different, incoming EDHOC messages.</t>
      <section anchor="edhoc-message1">
        <name>EDHOC message_1</name>
        <t>During the processing of an incoming EDHOC message_1, EDHOC invokes the SPO only once, after the Responder peer has successfully decoded the message and accepted the selected cipher suite.</t>
        <t>If the EAD_1 field is present, the SPO processes the EAD items included therein.</t>
        <t>Once all such EAD items have been processed the SPO transfers control back to EDHOC. When doing so, the SPO also provides EDHOC with any produced EAD items to include in the EAD field of the next outgoing EDHOC message.</t>
        <t>Then, EDHOC resumes its execution and advances its protocol state.</t>
      </section>
      <section anchor="edhoc-message4">
        <name>EDHOC message_4</name>
        <t>During the processing of an incoming EDHOC message_4, EDHOC invokes the SPO only once, after the Initiator peer has successfully decrypted the message.</t>
        <t>If the EAD_4 field is present, the SPO processes the EAD items included therein.</t>
        <t>Once all such EAD items have been processed, the SPO transfers control back to EDHOC, which resumes its execution and advances its protocol state.</t>
      </section>
      <section anchor="edhoc-message2-and-message3">
        <name>EDHOC message_2 and message_3</name>
        <t>The following refers to message_X as an incoming EDHOC message_2 or message_3, and to "message verification" as the verification of Signature_or_MAC_X in message_X.</t>
        <t>During the processing of a message_X, EDHOC invokes the SPO two times:</t>
        <ul spacing="normal">
          <li>Right after message_X has been decrypted and before its verification starts. Following this invocation, the SPO performs the actions described in <xref target="sec-pre-verif"/>.</li>
          <li>Right after message_X has been successfully verified. Following this invocation, the SPO performs the actions described in <xref target="sec-post-verif"/>.</li>
        </ul>
        <section anchor="sec-pre-verif">
          <name>Pre-Verification Side-Processing</name>
          <t>The pre-verification side processing occurs in two sequential phases, namely PHASE_1 and PHASE_2.</t>
          <t>PHASE_1 - During PHASE_1, the SPO at the recipient peer P determines CRED, i.e., the other peer's authentication credential to use in the ongoing EDHOC session. In particular, the SPO performs the following steps.</t>
          <ol spacing="normal" type="1"><li>
              <t>The SPO determines CRED based on ID_CRED in message_X.  </t>
              <t>
ID_CRED may specify CRED by value, or instead a URI or other external reference where CRED can be retrieved from. In such a case, if the retrieval of CRED fails, the SPO moves to step 9.  </t>
              <t>
If ID_CRED ultimately points to an already installed authentication credential CRED, the SPO moves to step 2. Otherwise, the SPO moves to step 3.</t>
            </li>
            <li>
              <t>The SPO determines if the stored CRED is currently valid, e.g., by asserting that CRED has not expired and has not been revoked.  </t>
              <t>
Performing such a validation may require the SPO to first process an EAD item included in message_X. For example, it can be an EAD item in EDHOC message_2, which confirms or revokes the validity of CRED_R specified by ID_CRED_R, as the result of an OCSP process <xref target="RFC6960"/>.  </t>
              <t>
In case CRED is determined to be valid, the SPO moves to step 8. Otherwise, the SPO moves to step 9.</t>
            </li>
            <li>In case the peer P uses the trust policy PKO (see <xref target="sec-trust-models"/>), the SPO moves to step 9. Otherwise, the SPO moves to step 4.</li>
            <li>In case the peer P uses the trust policy TOFU (see <xref target="sec-trust-models"/>), the SPO moves to step 6. Otherwise, the SPO moves to step 5.</li>
            <li>
              <t>If this step has been reached, the peer P uses the trust policy LOFU (see <xref target="sec-trust-models"/>). Consistently, the SPO checks if P is already storing a valid identifier of CRED.  </t>
              <t>
If such an identifier is found, the SPO moves to step 6. Otherwise, the SPO moves to step 9.</t>
            </li>
            <li>
              <t>The SPO determines if CRED is currently valid, e.g., by asserting that CRED has not expired and has not been revoked.  </t>
              <t>
Performing such a validation may require the SPO to first process an EAD item included in message_X. For example, it can be an EAD item in EDHOC message_2 that: i) specifies a voucher for validating CRED_R as a CWT Claims Set (CCS) <xref target="RFC8392"/> transported by value in ID_CRED_R (see <xref target="I-D.selander-lake-authz"/>); or instead ii) an OSCP response <xref target="RFC6960"/> for validating CRED_R as a certificate transported by value or reference in ID_CRED_R.  </t>
              <t>
In case CRED is determined to be valid, the SPO moves to step 7. Otherwise, the SPO moves to step 9.</t>
            </li>
            <li>The SPO stores CRED as a valid and trusted authentication credential associated with the other peer, together with corresponding authentication credential identifiers (see <xref target="sec-trust-models"/>). Then, the SPO moves to step 8.</li>
            <li>
              <t>The SPO checks if CRED is fine to use in the context of the ongoing EDHOC session, also depending on the specific identity of the other peer (see Sections <xref target="I-D.ietf-lake-edhoc" section="3.5" sectionFormat="bare"/> and <xref target="I-D.ietf-lake-edhoc" section="D.2" sectionFormat="bare"/> of <xref target="I-D.ietf-lake-edhoc"/>).  </t>
              <t>
If this is the case, then P uses CRED as authentication credential of the other peer in the ongoing EDHOC session, PHASE_1 ends, and the pre-verification side processing moves to PHASE_2. Otherwise, the SPO moves to step 9.</t>
            </li>
            <li>The SPO has not found a valid authentication credential associated with the other peer that can be used in the ongoing EDHOC session. Therefore, the EDHOC session with the other peer is aborted.</li>
          </ol>
          <t>PHASE_2 - During PHASE_2, the SPO processes any EAD item included in message_X such that both the following conditions hold.</t>
          <ul spacing="normal">
            <li>The EAD item has <em>not</em> been already processed during PHASE_1.</li>
            <li>The EAD item can be processed before performing the verification of message_X.</li>
          </ul>
          <t>Once all such EAD items have been processed, the SPO transfers control back to EDHOC, which either aborts the ongoing EDHOC session or continues the processing of message_X with its corresponding message verification.</t>
        </section>
        <section anchor="sec-post-verif">
          <name>Post-Verification Side-Processing</name>
          <t>During the post-verification side processing, the SPO processes any EAD item included in message_X such that the processing of that EAD item had to wait for completing the successful message verification.</t>
          <t>The late processing of such EAD items is typically due the fact that a pre-requirement has to be fulfilled first. That is, the recipient peer P has to have first asserted that the other peer does possess the private key corresponding to the public key of the other peer's authentication credential CRED determined during the pre-verification side processing (see <xref target="sec-pre-verif"/>). This requirement is fulfilled after a successful message verification of message_X.</t>
          <t>Once all such EAD items have been processed, the SPO transfers control back to EDHOC. When doing so, the SPO also provides EDHOC with any produced EAD items to include in the EAD field of the next outgoing EDHOC message.</t>
          <t>Then, EDHOC resumes its execution and advances its protocol state.</t>
        </section>
      </section>
    </section>
    <section anchor="sec-security-considerations">
      <name>Security Considerations</name>
      <t>TBD</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no actions for IANA.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <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="RFC8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE). OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration. Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <reference anchor="I-D.ietf-lake-edhoc">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC)</title>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="25" month="August" year="2023"/>
            <abstract>
              <t>   This document specifies Ephemeral Diffie-Hellman Over COSE (EDHOC), a
   very compact and lightweight authenticated Diffie-Hellman key
   exchange with ephemeral keys.  EDHOC provides mutual authentication,
   forward secrecy, and identity protection.  EDHOC is intended for
   usage in constrained scenarios and a main use case is to establish an
   OSCORE security context.  By reusing COSE for cryptography, CBOR for
   encoding, and CoAP for transport, the additional code size can be
   kept very low.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lake-edhoc-22"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC2986">
          <front>
            <title>PKCS #10: Certification Request Syntax Specification Version 1.7</title>
            <author fullname="M. Nystrom" initials="M." surname="Nystrom"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <date month="November" year="2000"/>
            <abstract>
              <t>This memo represents a republication of PKCS #10 v1.7 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series, and change control is retained within the PKCS process. The body of this document, except for the security considerations section, is taken directly from the PKCS #9 v2.0 or the PKCS #10 v1.7 document. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2986"/>
          <seriesInfo name="DOI" value="10.17487/RFC2986"/>
        </reference>
        <reference anchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="RFC6960">
          <front>
            <title>X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP</title>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="M. Myers" initials="M." surname="Myers"/>
            <author fullname="R. Ankney" initials="R." surname="Ankney"/>
            <author fullname="A. Malpani" initials="A." surname="Malpani"/>
            <author fullname="S. Galperin" initials="S." surname="Galperin"/>
            <author fullname="C. Adams" initials="C." surname="Adams"/>
            <date month="June" year="2013"/>
            <abstract>
              <t>This document specifies a protocol useful in determining the current status of a digital certificate without requiring Certificate Revocation Lists (CRLs). Additional mechanisms addressing PKIX operational requirements are specified in separate documents. This document obsoletes RFCs 2560 and 6277. It also updates RFC 5912.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6960"/>
          <seriesInfo name="DOI" value="10.17487/RFC6960"/>
        </reference>
        <reference anchor="RFC8392">
          <front>
            <title>CBOR Web Token (CWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="May" year="2018"/>
            <abstract>
              <t>CBOR Web Token (CWT) is a compact means of representing claims to be transferred between two parties. The claims in a CWT are encoded in the Concise Binary Object Representation (CBOR), and CBOR Object Signing and Encryption (COSE) is used for added application-layer security protection. A claim is a piece of information asserted about a subject and is represented as a name/value pair consisting of a claim name and a claim value. CWT is derived from JSON Web Token (JWT) but uses CBOR rather than JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8392"/>
          <seriesInfo name="DOI" value="10.17487/RFC8392"/>
        </reference>
        <reference anchor="RFC9200">
          <front>
            <title>Authentication and Authorization for Constrained Environments Using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This specification defines a framework for authentication and authorization in Internet of Things (IoT) environments called ACE-OAuth. The framework is based on a set of building blocks including OAuth 2.0 and the Constrained Application Protocol (CoAP), thus transforming a well-known and widely used authorization solution into a form suitable for IoT devices. Existing specifications are used where possible, but extensions are added and profiles are defined to better serve the IoT use cases.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9200"/>
          <seriesInfo name="DOI" value="10.17487/RFC9200"/>
        </reference>
        <reference anchor="I-D.ietf-ace-edhoc-oscore-profile">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC) and Object Security for Constrained Environments (OSCORE) Profile for Authentication and Authorization for Constrained Environments (ACE)</title>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE</organization>
            </author>
            <date day="23" month="October" year="2023"/>
            <abstract>
              <t>   This document specifies a profile for the Authentication and
   Authorization for Constrained Environments (ACE) framework.  It
   utilizes Ephemeral Diffie-Hellman Over COSE (EDHOC) for achieving
   mutual authentication between an OAuth 2.0 Client and Resource
   Server, and it binds an authentication credential of the Client to an
   OAuth 2.0 access token.  EDHOC also establishes an Object Security
   for Constrained RESTful Environments (OSCORE) Security Context, which
   is used to secure communications when accessing protected resources
   according to the authorization information indicated in the access
   token.  This profile can be used to delegate management of
   authorization information from a resource-constrained server to a
   trusted host with less severe limitations regarding processing power
   and memory.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-edhoc-oscore-profile-03"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-key-update">
          <front>
            <title>Key Update for OSCORE (KUDOS)</title>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="23" month="October" year="2023"/>
            <abstract>
              <t>   This document defines Key Update for OSCORE (KUDOS), a lightweight
   procedure that two CoAP endpoints can use to update their keying
   material by establishing a new OSCORE Security Context.  Accordingly,
   it updates the use of the OSCORE flag bits in the CoAP OSCORE Option
   as well as the protection of CoAP response messages with OSCORE, and
   it deprecates the key update procedure specified in Appendix B.2 of
   RFC 8613.  Thus, this document updates RFC 8613.  Also, this document
   defines a procedure that two endpoints can use to update their OSCORE
   identifiers, run either stand-alone or during a KUDOS execution.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-key-update-06"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-key-limits">
          <front>
            <title>Key Usage Limits for OSCORE</title>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="10" month="July" year="2023"/>
            <abstract>
              <t>   Object Security for Constrained RESTful Environments (OSCORE) uses
   AEAD algorithms to ensure confidentiality and integrity of exchanged
   messages.  Due to known issues allowing forgery attacks against AEAD
   algorithms, limits should be followed on the number of times a
   specific key is used for encryption or decryption.  Among other
   reasons, approaching key usage limits requires updating the OSCORE
   keying material before communications can securely continue.  This
   document defines how two OSCORE peers can follow these key usage
   limits and what steps they should take to preserve the security of
   their communications.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-key-limits-01"/>
        </reference>
        <reference anchor="I-D.ietf-cose-cbor-encoded-cert">
          <front>
            <title>CBOR Encoded X.509 Certificates (C509 Certificates)</title>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Shahid Raza" initials="S." surname="Raza">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Joel Höglund" initials="J." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Martin Furuhed" initials="M." surname="Furuhed">
              <organization>Nexus Group</organization>
            </author>
            <date day="20" month="October" year="2023"/>
            <abstract>
              <t>   This document specifies a CBOR encoding of X.509 certificates.  The
   resulting certificates are called C509 Certificates.  The CBOR
   encoding supports a large subset of RFC 5280 and all certificates
   compatible with the RFC 7925, IEEE 802.1AR (DevID), CNSA, RPKI, GSMA
   eUICC, and CA/Browser Forum Baseline Requirements profiles.  When
   used to re-encode DER encoded X.509 certificates, the CBOR encoding
   can in many cases reduce the size of RFC 7925 profiled certificates
   with over 50%.  The CBOR encoded structure can alternatively be
   signed directly ("natively signed"), which does not require re-
   encoding for the signature to be verified.  The document also
   specifies C509 COSE headers, a C509 TLS certificate type, and a C509
   file format.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cose-cbor-encoded-cert-07"/>
        </reference>
        <reference anchor="I-D.selander-lake-authz">
          <front>
            <title>Lightweight Authorization using Ephemeral Diffie-Hellman Over COSE</title>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Mališa Vučinić" initials="M." surname="Vučinić">
              <organization>INRIA</organization>
            </author>
            <author fullname="Michael Richardson" initials="M." surname="Richardson">
              <organization>Sandelman Software Works</organization>
            </author>
            <author fullname="Aurelio Schellenbaum" initials="A." surname="Schellenbaum">
              <organization>Institute of Embedded Systems, ZHAW</organization>
            </author>
            <date day="7" month="July" year="2023"/>
            <abstract>
              <t>   This document describes a procedure for authorizing enrollment of new
   devices using the lightweight authenticated key exchange protocol
   Ephemeral Diffie-Hellman Over COSE (EDHOC).  The procedure is
   applicable to zero-touch onboarding of new devices to a constrained
   network leveraging trust anchors installed at manufacture time.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-selander-lake-authz-03"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TBD</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1d63LbRpb+z6folX/ESpFMLDseW1NbtbIkxypLllaU15na
2nKBYFPEGAQ4aEAMk/K7zLPsk+259Q0EKHly2Z3Z8Y9EInE5fS7fuXZrNBoN
7g7V08GgzupcH6qz5SrXS13USZ2VhTouC5PNdEW/GTUvK3V68ubyeJBMp5W+
e/j1szItkiW8YFYl83pUZ3mZJqM8+aRHerYo01FGDxqlcBt8XGtTD9KkPlRZ
MS8HppkuM2PgmfVmhVSe3rweDLJVdajqqjH1wbffvvz2YJBUOjlUE502VVZv
BuvbQ3V+9PZUfSirT1lxq76vymY1+LSGBxS1rgpdj06QnMEgLWdwwaFq6vno
xWCVHSr490ilSaEao1VSVclGPc7mKslztdFmX8HKFolZqIWu9GCgVF2mh/gN
/GjKqq703BzSM2Z6njR5beAK+/1myV/jr4OkqRdldThQI6WYRRdJlZbqhlg0
QELKCki7PpucqqNX9IGB52tgzplJ5n8uq5m5TWog9eCAvk1h8YfqbWZqvh0W
B0+dnI6ePH/27Fs1AVI/Lcp8KV82RV3B9ZO1numCPtPLJMsP1RLpGLOo/q3K
xgYWWpTVEoR7p4Fgdf36+ODJk5fy44snf3hmf3z+5Cn+eDY6GWcaeOoFfQhy
A5G2nvLyxXP58buDF9/Kj89fPrc/vnj68kB+fAnCjp6dpFaHSpOWlR6tqnKe
5Tq6iL6Q7z/pzahZzUDJdl6SZ8usNq1LjB6l07Ia6QK5OhuluqrtJUbnSQHK
z6tFuf4EqwXbQHnANZPT89eHau8/YRGjH+Dff+0NBqPRSCVTkGeSghreLDKj
wFQatCgF67gDYzIq3baq2yZDjVX1QqsstsFyTp/i+/HdYEV6pmBBSv+YLpLi
VuODQQfKXJ2uFnBjleTqJJvPMz16o/N8CZp0eacrdXwJGveY7Hd/zKQus9ks
BzV4hBZUlbMmpVc+Uj8/yvCDz4PBw5+pfv65Q0E+f1bAhETl2e2iXmv870PW
MlTarHSagYFuADRqDZKYEavQgLOCmAhszgr42KS6SKqsNLCsEwALYeRM3+m8
XBHzgYtE5RBIKZrlFGiHj1AMYMirLDVqDZav4IEGHghyV7PMpI2B3+AWo5AH
t/jgeVUuFWBlptfGysYJgJEOXmyy24KeQpe3JAq6kd1ldabNWN0stIlJAJKA
NcDpGb4X1lgWt8CDFWgmrJbWVvboCa0Q1gDfVnAJCEkudQQC48AIdD4fqzeg
83qIX28AELUqytqvGS/sEedQrRdZulAVihIIm4N+G9BqIIEkNt9Y/sM6G9Ab
+3IQzlFNXxjARVVnS3i9W0RZETuB5mS1ylE1cFGNsQ/jtbmFlJVcvcdf5Nm0
SqrNngJNmOZ4E6yTdAVAH5dm8E2gSrcAeUBBAytgrg9JTusMPMEiudPEMlgu
vnSJmlfCOghV4RNwOLeLsqFVZFVbAmvwS7DIM5BFNUMJlEAv6CDcugSXkcHF
sGBQ5BVqM3wKyIQcL8GSQBmIjgS4bww+U7SrdOpBergG68P/w7PnSZrlGbxb
050IIVtK4VUNJR2iETAx1ym8JWBFpPeGOSCLboNWMhU29KnhWIGwE7UALRnl
aIikavZFoF5/acBUiEaSxxLcU/YTaN4UbHYNbPxavQFySJTwzLTE1yBcsLyR
S0TIGpCElXiq4SLEhrskz2YsVtSRQJ0AaoAFwO07LaYJGhQ90D4P2R4/EG01
M7wAhLSWrRidjuQZo4UQ/vkzreMUHWQqC5kBioKZozphqKOW4HdykM46q8Gm
CPRqlG6uk4qsvdDrEDCRxrTSBBJJLuu38Anc2yigtgHwYxxM8EuIoFqyuXcp
RNyIiZNlvKqSIl2Akyzn8yFDJ5hjimvmpWXgRJf4M3N0Cd8kt9qubZVUsIAm
TypYJrEgRXWAkHBfzXWdLpjcmSJuO2XqX/of6eoMbo/JOP0Rg0EAniMKxbKf
+M4TiKnAVR2d7AM06KWxOAZLrpuqAF+IrmmVQ2SYqKrMycugyj6UngdwVVgy
QuaNPNXE4EeP1I2ugH9lXt5u1CN0wrX/4DOGE5qc5RpDRLV38X5yszfk/6t3
l/Tz9em/vz+7Pj3Bnydvjs7P3Q8DuWLy5vL9+Yn/yd95fHlxcfruhG+GT1X0
0WDv4uhPe2xVe5dXN2eX747O95hHIa6gNYP6TjV57QoAsCZPNgCnmFbZlNnx
6vjqv//65Bmw5V8k6oQ4gX/BuBN+Qb0WGy4At/lXtPMBGDTYBj4Fo/c0WQEG
5oyOZlGuC4rhgaHEL0ghEIqBQv0jmha8nqmbJ0tAT3gOKScymuEPcC7VK8DF
SueJXN7hfwgp9ZzCj35fiWKNYOyMsUSeNrEghk87CnDqLeIUKkAnqkhgCd+x
CgoyE2ADnhgE9+US/XEGDrgWVKvA+dwC8AHbVMrBBAQVuhoyg8lhByQkiO7w
H7wEUyN1l5lsig5nY/kEoUmOi5qW9eIQEeLG8cnBc/gYMlh73RYsY2xHl/ZR
gb4zzRsXJ38qynWuZxA0Ag2wQIl6wEDIj081AiMkTRAOmAUKUjyZxIHZWI+H
iJdLnRQulKMvP57+uIKkD/UGdRgcLdA7r/nx6DDRbudNbr2ShYYurFWPjdag
HxOR1rPxE1KELnXBsPxVk+W0xJLRBxztHYdpwKEcXCN+B7oMrDR8DeSOqKz6
LkG3nhjOMEDEheXUItDAtnww5miJYmiRj2MXFkqx8fFIyzFCXIcRPr4a71yV
WVFz8EMJD6gkYAKShFhAcUpiQ89gTWDDZUuXOZ4ENKVHkw6rvYBaQ+TuQZBM
3GANIozEB0JKCp4+YVsF7wNBZ81PTshCVrgUTGQmx5fXp67OgEWPWv9Yg8wk
9QU0wkcwHyp9TwDRkvfRPfJ+B0yugOocbh/66LgdblXOYqbsmYgl/OaMAl1C
KiZNlWQL23LV41vQebgO3YiPRIxduoU3w9mDcKasQmm2gYLwk56gOfQwAAhN
QeS0mcNurgV+r1ibLDQ+auOeqJk4wBY6JAxQVyBtsXsKnLQVV1/gqCYEatZT
iY/XEOV9wIBqgkyFiPQTZ2EupuxAySu1aioIc+Aedgr4NnA3SYpsqTtD0Mcs
CLqmR/32eQFrePutLlARrMZNrMGBAgMk5+TkTEnesj88UccQFnz8wfMJMCSr
MLstO9nHys1BKqbYZVNhvIY0yZOQfwSykOOUn7QNkDVoFWYdmhJ3y1gjdw3F
lEDx5ggLZPXhZQg0WxE5XCgvRX6QssP/+9cKPNcZ2QBph8CZs1CG/itJhZXA
Rulu2B+DNnJixLDWI3jRoGQ2y/BDqlWw/C25BK+wIgP5LfI6LSuM8cuCIN6l
+hUbxlYI0GcaqES/0C76VBMkSOlyMqc4jsqlxQYhXExD2IL3YxAiEE1r7wfT
bQZ200Vah5eSjOVhktujnCzk2m+SjZaoAXN2Q0mGjdgwCGoK+z7wESlm50cK
KBPUq9Xk9KaTC2YBiDtjbEsKrxlUQhb31xQBk4bkffSPyZKy/FmjLRnew7GZ
Gkqm8MWoPhViAMaQEHGusB6gOeaHj8hAmSaslfwR1h/euRXfIAGJPIQC0yFI
cq0gjF2RwSypiIFOnCovWNWoZlJP0pSi6jgWWJXwY6aNezOuWnOyTwETk2Jj
LRKZLijGwlewbazAbyDMpdVmVZe3VbKCrEtxMZYlB0F7k89I6wCLVwnX3Bgh
IyKlkoWVMCyXSMQWaSDR4NxZkt9C/lcvlpCbfdiRg+5UXNJ3oZe8f0+NrLve
TDnAB64pgLksMHkpTCee0PLYaCk11BDSJEb0B7XmCcDSvKVTKUIJxwgYhqtF
mbObKrYtDgJJkgkA+kodjNUlqvU6Q+XN6tbXT8fYBVEcqwtVpllhWIyuB+MH
rrkHFVuEZEzKKP1GD0BhA8TPZUVlgYRqGR0hMqdgEQRbPwwa9mUokxnPE46i
TG2sB4gX4hKJ7cWot+9PLic9GV5384EkTSw7B2BpjNyMYYEJMkjrhAjJuAIR
UIaGbcNLwiZ2TTqfYV0ZPvkKeQzpB/iTPginonKBFRrSbkbCIE2ZdPF7h4er
dKp9vBvfhlcBgANtJSxVyhvERc61BUA3ve4miqUnSHqCfmUo7wbtQQEiN9qB
9XfjZ+ODnaH1wXgr06RFVYDcvYJHcIMrEQprNoUn3fzKgjKvPATk80v0lhNR
9ma9dLNidlkMaZ8ARNfK2LFQkOVT2HyDXkLNm4pThtTnG+hRiwglOqnaxo2n
nXwP4Y0xwbQzQH65NaOz2gXTyNjtT3caFUogCp6HLn7wVvdFdtWKxacSwIJy
B9wuUwovZjbE764vQHD3nq/3BYYIa6ySv+lVcOqAkMyCt0OGuyhnZj9gFilN
B/J21LQ6Yfj9qiwifXFoEjVm3LOlzL8u6X5r4FyqLSBawfYFUdPHZUEZsAfp
pnVkkFuBMjDjFSWdR0SousZi7j3xcw1JSzu7jByrrUS4tZBpYkSMSzw6PgVa
IVfHtg8HX3E+QrF/VIJutS11cZdVZcHh1GN43j7XHLAljn02fECEIJ7d+JWA
ibTHkZdIUrfL6muq+/BkVuKqTTkkJBcF8UtPsFUE+o+vuNaSDU50hU3gx9eT
fQg8DKmEx/5KLmOHFDmN4GHHeQbrH8LV1BAyLsTHL+MKvn3dEbwOL2BR36AY
JZJkZmEWyd9VrAYknNS2CDootPh0PWGuN6u8TGaMMPFrSrkOyadkQziF1KIi
zLl5dcyBB6YZzqooNr1HfG3rAeu1RZ7A3URK4Qyst5DF8UdW2aymtyrxJZUr
zJB9OD308I4ojmAeitdJnNdyVkB4lgDUUg8m1303I5ujG685d0YliGndHQjc
2ObBDgoxsROtsR3ztpKginNc0I4FttKUWP+sXs5sHBrqFFtHlKxiclevtcTw
gRFWIWFt1xLmgr2BRtzzyoJanVPRiLjB4BzLqMoCe8upd2JFX9HhgUSq45sf
dpQhbGr4W5cKlLSPMGXn+5Y4FoDE9VDGUZOt4AJrOnuAUe2G+1zO2XCW1Fua
KST8gFxrlTcmqNFzjWwLrpxwkWouW7hipo1QIPXDSFvKgcg5+SSs7e3/A2Sx
EWcwOK9x5sP19iXvkMWjiC1LNrq2VUu7NFHPZM0ix3u3mfYr54MowzgfhE/C
uLXHnv6ZD/p8UDSvXdDYXQV4QOovynpfjtaZNYIUHWFRiM6P+eVpW9b77Fmp
WZHdS1rveGDG5xNP4ax7sLBY3pfkdXlLjdoe6/7dMkpk+hdmlGh/D80oH2aZ
vzijZK4+KBOcb3sHATH2Bs6HxUCXpDy+EcXqouvlFIcIbHaJBu8QgYL3VjCd
OXcbpwJRwPf3kLn2SfP+zFXd0MzXBY1VUVpybse83sGDj+IE8jgY87KZazSX
hd0MkVOl84yHMHfMigHzPINMDEbhTK7iNj+zgQIUkEXhJ7ssu5ccW0vk4/vJ
60TmOa7oyelfmow0657uJM9QhCJ8HfZU6BLuvxCs5Bn3vEERm3pUzkdTFNV0
E3QtpWeNtbEjX5ZGYIse5sLz6aatnzM/TtxSF+bClXQ9Pf+j4bePB2id9pen
GH8jZ2XOD9Xr7OQj9QqvSdHsb2dEm8zTMrF2so9QBxVSJ2CY6v31mQcAbUff
fHfDd0/tcitdV5l2TrblRp+Ovxs/3elGKQ5k2/dV/ZYoh747alu7aP+CcIiJ
PKLLuB5M2CHkm6BvoHha1k7DuIkQ3DiCVNLCBBkTtWogt0gJB3HEiXLkWnNV
BXcifP4c+fKu6X9YI8MWcqvCJjZ2jMlP7Wg37wdKBwhQ0cAJdqAcvMn36BMW
JSokwZPIwvOR1mMnlZxufOP1AsfefAgWKRsPnDvnV8ezSvEYIwspjIWwQ23E
DnEgDKKGrJZ5ZPsFj0tQz15Wy7xa4srI3eNT5CE2AEHjoxFVvWLPTabrx3UQ
cZsi3hOATT5JhaO5Qa+nJ+PverV0KFpveU6jfPiwRbayISi8EgfIEAGR8hEE
+SMrQVA4HmLCcYYgYUVYr4KYlNYJ1+D8NuFHCETUZac7MKG8ZbvdmhZCVc3i
iRmeCgDl2fU0nDOfx2Jzfplm2W1KyUTi/J64+ZlT1AZek6OQZZBk004RbaoN
Hye07cLmRFRwtZ9eqVsKA/w83o6EiEcIxP4tUkgH2EZCare1+amJx2a/NVGB
qS6tF0unpIvopsj+jCnTLHFJCF7WcjDZ3Em0D0qGXkBIgEMggdaahu3MwoYp
wZ1UMHPp+/aaZfifafQkUljVNzXCMwfYXbdw+BCusXjCdq4dbqPe6XIF9+JU
kWcT7WmYNzWOeDn/Z3b2bzv5LX2uhEoB3FgP7nCFTe/wnBujsDeD9ePCZHNH
9+JA1D2w6X14t3PGOZ5KG+NnfhkaSXJYLovJp9jG+lKmmDf7AGm4xS4nBRRT
DQItN+HhZ1ZL6xuske4Ok7wD3+UoUBt6HEUE/KGfQ02QUZCwtBf4FKLTDobQ
JMvV9eno7bvLD+enJ9+fji7fnf9JPb56e7l/2K6KAuvoxk30enqiuBfckGkH
vrM5l1mSHEe4NxFmcJLwQTJuXqLx2GrdIeldB2scUOLScY45Kxq9nSLzwywx
XSz2/YbHobISOEq0tv+AsJd34LBRynBSvokcMltoZlplKz/JNsXw8y5w0zJN
E1T1gkre1+r89Oj6HQhr9PrsenIzeo+7+M4vX7//LaWGV31DM0pM/DaMslxd
RBhe4SrK5E9wW1VWNibfcIhvuGNPyUCUALAnHasjw9PZX4L0POgWwf1DYP7E
bbzpzC+3n+bTj18Lu648I3fXRyjaHkKGTqEo2lFEes+7OLjabRC/ZcrCq3sy
JuPnL2wERIH7QqefjENXJ2hRyanmleNAJif3FOi2C8LtAdBI56PyWrtgdcD0
HSB9Duylq2Qndr0WdEcmnSuJZvCXSQ1fGxfOhhanZ1vuvt+1K/r35YGQhc/l
qqHkLloIWgfykETeeuDxhxuZrX/68oBLp0gdSxo38dCOQkWVZpcdIfe++pTN
vlKwpnxmLQ+e5ZZwJkPxvjrfAqGIf4EEcC3J1BWCW9PHXVVcl9v0VUOfovCT
utbLVR1nwaw+Uo4LcjLZDeYaXy5x+1LqWropWusCYmPl/rW6uX4P2B87gZv7
nECM/dh9cqDfxfMvBf5/4tX/Kl7931bZsyoonNlzEWbliqouPjIlLeXN5zwS
vF3WwB2LftJadgRiTC4dXXG5qVR25V1lcVv6KqgsaMj1EK5TBRu3XKnK5/Pz
dpIU194MFt9o2Sc7O1ksiswxnigVoX8R27EiPcE9PVfRBtqzeB/vhezjdTXo
vl2srX2JtnBjZFM/z4GTN5LyPdWX7aEsLaNu7yEOa9W0Xfgbp587Kt4JV1Ws
pj5wazAw5gre5ItNL3eMwgy7GhLurA8MRZPCUA9sqXGXdmaWlLeDbt3xRjV4
sd2SPG1qP91j619zOfaB/RZe6E4qwDYqvv62ogISPncvua20DhURUgr8Vhrt
PBIkXR7sJInUKTi1R7mgdSc2nHTnWLS6dXtjt/WEZRuV6upQF5JsSZiy0Pkq
PvOhSO6yW1v06SI1GMjlrZBZBwo4Y3O8FP76mZtYoTrnlzz9Xl1pVqR1DETo
kqhQyJkw8mLHTvbY+L7auX8Je347LWKrsYA7PoPNbixczoNnmjZfYA9KvSnX
uOFw2MbyL6OP98r70rw/poMPH+DNsFYW7akjv/HObbsD8K1MLaHca/G+vEs0
eBCBmBXn0QnwgINBTA5RXRIqjt+V4AcZKKYyHYR2YRcrhD5wpYLQPecBcUNE
dsZ41UN6pu50BC25Me8gBsslfx72JV39eEtPbYbP9yZRPZ9uSiPxTbLbIsEy
3cey+nhxdMz8kSbwg9n6tJOtx0FDBd+Dq7jmoU31+HhyLcOrePbT58/ueBmb
RLt3SYTU4k1pR1NA3bMVDeS5jecQk/C8LNyDHcwtL4pZlXgv3kaV3SGRkLG0
Sm8ECUXG9RXaFC0nwXgntj3ygASvKr3CFicyYnaXFFIe2ws9IEaI0z8DLO2p
x5Ory32r9YwgKd5uSV+Fx6jc6R1NRl5AG6eiTVrW07RKsUCCb7clvNmlqyYh
72Za7TNy3C2wBKeVVBnOHaMLm+vKbfqX+ii+Q+YwKj49g7smhT3cJzwJR/p5
LGTqCM9UK4IQ3Og+RwRY8ZrHXXgKsM0IQRXU8KpJa08gnVSzKNdyHg8JknaZ
WpV09bdD27Sw24LxuAHvQQoKBZs6DAKFODmLhALL8IQff0BUsERWXQ8X7ff0
rJ8bzXKx4Q2H3p75Nbg6hwgr3Jgaxhf+BKYOcYVa+ECRqIt4DGfoZpWx1Gi8
CIqZ19MsGIn2bjQrVk1Nh0hQWfcCGbnb4RFVswAA/REQxKa7Ur5yA4v4HjEJ
zEbdgQ52NRGiCvC2rxf4jhC7H3UlJgCQtwNvYYTVOmHE7kuNp0ZkU3V4GBor
AMc9OufBOkBNXLtpstrP8Oi+s9t8Tceo72Wb8vcf/6TcmK6fgpG94vZ8oSiY
8pMtX7dG/M1Xu6Jy95qo90yPOULoWbiYhd7oOeY2n7ZmGC4cCd1WdcEecKTe
lbUOUxAJZCCQRg++wikOnIOr6JCdTxjaXFgVIKW2BgJa3YK34HQEVHk+tIZq
czYRdWd0eHu0syMEh2YL0tp7y+1LWlCvk9nHPJnq3O8yclxosxr8awm++ye9
Ne7/dPxi59gHF9loGy0BZiiX5C7JcjyZwiIAOk2dVBj1YEIa6bfNSO0hFhde
pSNYlqBRRoIhMEdd4tM8MOt1K3FjO9Kuc/XAOY5IEq2eHwj+c0wxQkorjRUR
ensbMzu4tGtbRHRGW/dqCjmZwC2ooOaMW8xjP6eLigR3sL9B38aH12V0HMs6
2exzYwPHiZq8duiLYUWud2tlS0PI5VPhytHhusKinsFxfuIbtoxqGIOkj/Ei
nRw6ctj6nIEUmsEwaNzHR+7h9FTeMbcng+yBOVJxToB1yQUammMLHBsPU8RZ
oav7dEIxZ7tIeE95sk7MJ57B6/eYhFRnXvXvc3OWV5RY8iGB3/hsRkDjgckM
1xynCYfddKfUQn1V3UMpLVREaFqwspVcH/U+Qkp4HPcZOjrXRkXMxWjcR+aJ
KGYm07X3OIhxW2w8UI5d3GC5hUGcT4YxK2ifV8eDMBzXGhfYTpP0E75Azoiq
PRs6g+wVnZmK7XVvTqWFs07e3BNH8jzcyh/FioeUxghme5AQwt3qyh+VMN0c
BpsdcPynWa5cL7vbLcqJXO6uqP9tI+msDHclW+5u7wIIBDIMT6CKeCMc2yri
7IqJLywI7zxCTzZ6BeboC5BLduBY8wUtYmplYV4JxYswTnIQYidah31nG4YH
GlmjfRIdQvvAUPrjk77g2eXHwyBk9RvhXJocVRQgfMKJxii8pQmjFKfw5IvO
4JEHy2wp4Ilobkankxg7/b0TG5zoUKQ6Q+u8RI+GA9QtXQ47+qGvwMffY5yy
0d5vW3XJBoJ9l8GSe//VDdbuLpSzdwGtaICuNoExEee5bmCkRCF1YoPHt3Yp
0bO/SYmefZESuW2Y/UokMXigRrF+PPvd9WP4UAVx5xT/WiI5YNdkXXMbbSjk
IHWyl/wgJ6L0CGs7oaXoZ68rHd2zm8baVb927gkvBS12FIx3qZG/rE9tMA2k
o3woM7/mcI30x6/RDXl6daE5fMmaahPTTMUog5OXfk45ytcDBQqjLIvXrXFg
dAl45BG9Qw6qvYfOztLrr0tQaeqAokegSldA43+EfMC+2yjou9nmml8MK5j7
3TGwffAu9go4cl1jQ+gvjUR7qwWeBTmkv0IAK716czQ5BUBH4fDP2Pi1n47s
3JJ8EOBp3VWYjUZbOK7kgskXhKNxr7WzudrZptkRgdOAAG8ytfFni04f/trQ
t2UvmDnKN1gA/z32YGx372XLnlzGJ9pxnA7xS5hBRZ38l24rnl0BHjuO52Bi
8YAaVTJjbocLZGOTvm/mtO+NB1vnw2xf89QfxdOSh6xSZhvs4IMfgYyH0De0
GcEe2yTnEG5t1kX1tp9tb8a98qdRCb+DHhiK2ya7DgFLbk25FnLYywiDVK9C
rVmq2o02RXe2nYF1V+DL4IVL40c2je/VyRSBbBiK9i258ZahdRWcOUnAcHk8
uXJroEYN/jkOe2aVzUetCLZmI4LjL7cF/OIBSvCSd3HaFwUVqcZGCOEEh7p6
exlG/fFx5Pv9b7mfkmdAybMvoAQnov4GUp4/gJTvgJTv/DgHfRbsmaCTAYf3
U3i+m8Kx8qeR2D29SIvMHfWN7N43rXU275qQzYwtr/3tbEFded4HGP+/UcK2
qfbDs25cx7vV5rb7Cu3Q5XFOYxgTjQ3b48l+OIXpx1R08EcEsiLYn3hvK/yP
oVfEc/n59I0rxZtXjA6BZxex4d69TrrK8PzGkMhfA87+8EAV/cO4XeOyW63c
Po5gs1W/f23P/8YRFB7XzFvm+dt4L9BD9vuYndhw487G6QL2weCFX6UHDMvY
v5uROX9EAY/NEaX2YN/CIquT366DhVv07Ipehy7ohnUad/Tx/TG9E4MN1B+m
kS+9rCy4ERg/YGPRbiVkJBWEaoyv+/YE7Tf2fOdwOG7HJCL3LMjIXU5y0M5J
DrpKC1GPpRNpg+011EiKE4bg5Bk8dGarj0iM/Aic/Mh+wnpJX6+aRXnT9gO2
Bl4kMw4ORu1K7MOU5Lcsj0g3Kpgb7ZSp4olF2irlTsgKigme3SRe2p8XIVVX
VcPmxpguPyw59ol1XNhwn/dY1C9Wne0VcxfZqwn5lnWS1TLdGR01Ecxt9TAC
dSaXw2eCt7QkjtC1WdmT32TX2jxJ7V9pIGiR6IT+HIufZoF3zzNK9XjWzm9j
7kzv5UZSMY5tOK4KD/MKz0nAA19kEEuY5aawtvfo0gV+X8mXDR8SSgcuPZpb
uQdYA08YVI3240Y8MQ69m+NYx/hd59DI72C3/2B17+gUlfAvXvi/AsHfj+K/
iIHVsVcn9JcLj94dtW5u/+VFdoauYof2iXeN+Y8gInvxQUep3cHOMyZIQRJ/
9nnw86H8+UA9+9e9otwTOv4H7xyNGXl1AAA=

-->

</rfc>
