<?xml version="1.0" encoding="utf-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.3.11 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC2119 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC5116 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5116.xml">
<!ENTITY RFC5869 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5869.xml">
<!ENTITY RFC6090 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6090.xml">
<!ENTITY RFC6979 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6979.xml">
<!ENTITY RFC7252 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7252.xml">
<!ENTITY RFC7748 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7748.xml">
<!ENTITY RFC8949 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8949.xml">
<!ENTITY RFC7959 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7959.xml">
<!ENTITY RFC8174 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8376 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8376.xml">
<!ENTITY RFC8392 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8392.xml">
<!ENTITY RFC8610 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8610.xml">
<!ENTITY RFC8613 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8613.xml">
<!ENTITY RFC8724 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8724.xml">
<!ENTITY RFC8742 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8742.xml">
<!ENTITY I-D.ietf-cose-rfc8152bis-struct SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-cose-rfc8152bis-struct.xml">
<!ENTITY I-D.ietf-cose-rfc8152bis-algs SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-cose-rfc8152bis-algs.xml">
<!ENTITY I-D.ietf-cose-x509 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-cose-x509.xml">
<!ENTITY I-D.ietf-core-echo-request-tag SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-core-echo-request-tag.xml">
<!ENTITY I-D.ietf-lake-reqs SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-lake-reqs.xml">
<!ENTITY I-D.ietf-rats-uccs SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-rats-uccs.xml">
<!ENTITY RFC7228 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7228.xml">
<!ENTITY RFC7258 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7258.xml">
<!ENTITY RFC7296 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7296.xml">
<!ENTITY RFC8446 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8446.xml">
<!ENTITY RFC8937 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8937.xml">
<!ENTITY I-D.ietf-core-resource-directory SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-core-resource-directory.xml">
<!ENTITY I-D.ietf-lwig-security-protocol-comparison SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-lwig-security-protocol-comparison.xml">
<!ENTITY I-D.ietf-tls-dtls13 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-tls-dtls13.xml">
<!ENTITY I-D.selander-ace-ake-authz SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.selander-ace-ake-authz.xml">
<!ENTITY I-D.ietf-core-oscore-edhoc SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-core-oscore-edhoc.xml">
<!ENTITY I-D.ietf-cose-cbor-encoded-cert SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-cose-cbor-encoded-cert.xml">
<!ENTITY I-D.mattsson-cfrg-det-sigs-with-noise SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.mattsson-cfrg-det-sigs-with-noise.xml">
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc tocdepth="2"?>

<rfc ipr="trust200902" docName="draft-ietf-lake-edhoc-08" category="std">

  <front>
    <title>Ephemeral Diffie-Hellman Over COSE (EDHOC)</title>

    <author initials="G." surname="Selander" fullname="Göran Selander">
      <organization>Ericsson AB</organization>
      <address>
        <email>goran.selander@ericsson.com</email>
      </address>
    </author>
    <author initials="J." surname="Mattsson" fullname="John Preuß Mattsson">
      <organization>Ericsson AB</organization>
      <address>
        <email>john.mattsson@ericsson.com</email>
      </address>
    </author>
    <author initials="F." surname="Palombini" fullname="Francesca Palombini">
      <organization>Ericsson AB</organization>
      <address>
        <email>francesca.palombini@ericsson.com</email>
      </address>
    </author>

    <date year="2021" month="July" day="12"/>

    
    
    

    <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, perfect 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>

  <middle>


<section anchor="introduction" title="Introduction">

<section anchor="motivation" title="Motivation">

<t>Many Internet of Things (IoT) deployments require technologies which are highly performant in constrained environments <xref target="RFC7228"/>. IoT devices may be constrained in various ways, including memory, storage, processing capacity, and power. The connectivity for these settings may also exhibit constraints such as unreliable and lossy channels, highly restricted bandwidth, and dynamic topology. The IETF has acknowledged this problem by standardizing a range of lightweight protocols and enablers designed for the IoT, including the Constrained Application Protocol (CoAP, <xref target="RFC7252"/>), Concise Binary Object Representation (CBOR, <xref target="RFC8949"/>), and Static Context Header Compression (SCHC, <xref target="RFC8724"/>).</t>

<t>The need for special protocols targeting constrained IoT deployments extends also to the security domain <xref target="I-D.ietf-lake-reqs"/>. Important characteristics in constrained environments are the number of round trips and protocol message sizes, which if kept low can contribute to good performance by enabling transport over a small number of radio frames, reducing latency due to fragmentation or duty cycles, etc. Another important criteria is code size, which may be prohibitive for certain deployments due to device capabilities or network load during firmware update. Some IoT deployments also need to support a variety of underlying transport technologies, potentially even with a single connection.</t>

<t>Some security solutions for such settings exist already. CBOR Object Signing and Encryption (COSE, <xref target="I-D.ietf-cose-rfc8152bis-struct"/>) specifies basic application-layer security services efficiently encoded in CBOR. Another example is Object Security for Constrained RESTful Environments (OSCORE, <xref target="RFC8613"/>) which is a lightweight communication security extension to CoAP using CBOR and COSE. In order to establish good quality cryptographic keys for security protocols such as COSE and OSCORE, the two endpoints may run an authenticated Diffie-Hellman key exchange protocol, from which shared secret key material can be derived. Such a key exchange protocol should also be lightweight; to prevent bad performance in case of repeated use, e.g., due to device rebooting or frequent rekeying for security reasons; or to avoid latencies in a network formation setting with many devices authenticating at the same time.</t>

<t>This document specifies Ephemeral Diffie-Hellman Over COSE (EDHOC), a lightweight authenticated key exchange protocol providing good security properties including perfect forward secrecy, identity protection, and cipher suite negotiation. Authentication can be based on raw public keys (RPK) or public key certificates, and requires the application to provide input on how to verify that endpoints are trusted. This specification focuses on referencing instead of transporting credentials to reduce message overhead.</t>

<t>EDHOC makes use of known protocol constructions, such as SIGMA <xref target="SIGMA"/> and Extract-and-Expand <xref target="RFC5869"/>. COSE also provides crypto agility and enables the use of future algorithms targeting IoT.</t>

</section>
<section anchor="use-of-edhoc" title="Use of EDHOC">

<t>EDHOC is designed for highly constrained settings making it especially suitable for low-power wide area networks <xref target="RFC8376"/> such as Cellular IoT, 6TiSCH, and LoRaWAN. A main objective for EDHOC is to be a lightweight authenticated key exchange for OSCORE, i.e. to provide authentication and session key establishment for IoT use cases such as those built on CoAP <xref target="RFC7252"/>. CoAP is a specialized web transfer protocol for use with constrained nodes and networks, providing a request/response interaction model between application endpoints. As such, EDHOC is targeting a large variety of use cases involving ‘things’ with embedded microcontrollers, sensors, and actuators.</t>

<t>A typical setting is when one of the endpoints is constrained or in a constrained network, and the other endpoint is a node on the Internet (such as a mobile phone) or at the edge of the constrained network (such as a gateway). Thing-to-thing interactions over constrained networks are also relevant since both endpoints would then benefit from the lightweight properties of the protocol. EDHOC could e.g. be run when a device connects for the first time, or to establish fresh keys which are not revealed by a later compromise of the long-term keys. Further security properties are described in <xref target="sec-prop"/>.</t>

<t>EDHOC enables the reuse of the same lightweight primitives as OSCORE: CBOR for encoding, COSE for cryptography, and CoAP for transport. By reusing existing libraries the additional code size can be kept very low. Note that, while CBOR and COSE primitives are built into the protocol messages, EDHOC is not bound to a particular transport. However, it is recommended to transfer EDHOC messages in CoAP payloads as is detailed in <xref target="coap"/>.</t>

</section>
<section anchor="message-size-examples" title="Message Size Examples">

<t>Compared to the DTLS 1.3 handshake <xref target="I-D.ietf-tls-dtls13"/> with ECDHE and connection ID, the number of bytes in EDHOC + CoAP can be less than 1/6 when RPK authentication is used, see <xref target="I-D.ietf-lwig-security-protocol-comparison"/>. <xref target="fig-sizes"/> shows two examples of message sizes for EDHOC with different kinds of authentication keys and different COSE header parameters for identification: static Diffie-Hellman keys identified by ‘kid’ <xref target="I-D.ietf-cose-rfc8152bis-struct"/>, and X.509 signature certificates identified by a hash value using ‘x5t’ <xref target="I-D.ietf-cose-x509"/>.</t>

<figure title="Example of message sizes in bytes." anchor="fig-sizes"><artwork align="center"><![CDATA[
=================================
                    kid       x5t                     
---------------------------------
message_1            37        37                     
message_2            45       116       
message_3            20        91        
---------------------------------
Total               103       245      
=================================
]]></artwork></figure>

</section>
<section anchor="document-structure" title="Document Structure">

<t>The remainder of the document is organized as follows: <xref target="background"/> outlines EDHOC authenticated with digital signatures, <xref target="overview"/> describes the protocol elements of EDHOC, including message flow, and formatting of the ephemeral public keys, <xref target="key-der"/> describes the key derivation, <xref target="asym"/> specifies EDHOC with authentication based on signature keys or static Diffie-Hellman keys, <xref target="error"/> specifies the EDHOC error message, and <xref target="transfer"/> describes how EDHOC can be transferred in CoAP and used to establish an OSCORE security context.</t>

</section>
<section anchor="terminology-and-requirements-language" title="Terminology and Requirements Language">

<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>Readers are expected to be familiar with the terms and concepts described in CBOR <xref target="RFC8949"/>, CBOR Sequences <xref target="RFC8742"/>, COSE structures and process <xref target="I-D.ietf-cose-rfc8152bis-struct"/>, COSE algorithms <xref target="I-D.ietf-cose-rfc8152bis-algs"/>, and CDDL <xref target="RFC8610"/>. The Concise Data Definition Language (CDDL) is used to express CBOR data structures <xref target="RFC8949"/>. Examples of CBOR and CDDL are provided in <xref target="CBOR"/>. When referring to CBOR, this specification always refer to Deterministically Encoded CBOR as specified in Sections 4.2.1 and 4.2.2 of <xref target="RFC8949"/>.</t>

<t>The single output from authenticated encryption (including the authentication tag) is called ‘ciphertext’, following <xref target="RFC5116"/>.</t>

</section>
</section>
<section anchor="background" title="EDHOC Outline">

<t>EDHOC specifies different authentication methods of the Diffie-Hellman key exchange: digital signatures and static Diffie-Hellman keys. This section outlines the digital signature based method. Further details of protocol elements and other authentication methods are provided in the remainder of this document.</t>

<t>SIGMA (SIGn-and-MAc) is a family of theoretical protocols with a large number of variants <xref target="SIGMA"/>. Like IKEv2 <xref target="RFC7296"/> and (D)TLS 1.3 <xref target="RFC8446"/>, EDHOC authenticated with digital signatures is built on a variant of the SIGMA protocol which provides identity protection of the initiator (SIGMA-I), and like IKEv2 <xref target="RFC7296"/>, EDHOC implements the SIGMA-I variant as MAC-then-Sign. The SIGMA-I protocol using an authenticated encryption algorithm is shown in <xref target="fig-sigma"/>.</t>

<figure title="Authenticated encryption variant of the SIGMA-I protocol." anchor="fig-sigma"><artwork align="center"><![CDATA[
Initiator                                               Responder
   |                          G_X                            |
   +-------------------------------------------------------->|
   |                                                         |
   |  G_Y, AEAD( K_2; ID_CRED_R, Sig(R; CRED_R, G_X, G_Y) )  |
   |<--------------------------------------------------------+
   |                                                         |
   |     AEAD( K_3; ID_CRED_I, Sig(I; CRED_I, G_Y, G_X) )    |
   +-------------------------------------------------------->|
   |                                                         |
]]></artwork></figure>

<t>The parties exchanging messages are called Initiator (I) and Responder (R). They exchange ephemeral public keys, compute a shared secret, and derive symmetric application keys used to protect application data.</t>

<t><list style="symbols">
  <t>G_X and G_Y are the ECDH ephemeral public keys of I and R, respectively.</t>
  <t>CRED_I and CRED_R are the credentials containing the public authentication keys of I and R, respectively.</t>
  <t>ID_CRED_I and ID_CRED_R are credential identifiers enabling the recipient party to retrieve the credential of I and R, respectively.</t>
  <t>Sig(I; . ) and Sig(R; . ) denote signatures made with the private authentication key of I and R, respectively.</t>
  <t>AEAD(K; . ) denotes authenticated encryption with additional data using a key K derived from the shared secret.</t>
</list></t>

<t>In order to create a “full-fledged” protocol some additional protocol elements are needed. EDHOC adds:</t>

<t><list style="symbols">
  <t>Transcript hashes (hashes of message data) TH_2, TH_3, TH_4 used for key derivation and as additional authenticated data.</t>
  <t>Computationally independent keys derived from the ECDH shared secret and used for authenticated encryption of different messages.</t>
  <t>An optional fourth message giving explicit key confirmation to I in deployments where no protected application data is sent from R to I.</t>
  <t>A key material exporter and a key update function enabling frequent forward secrecy.</t>
  <t>Verification of a common preferred cipher suite:  <list style="symbols">
      <t>The Initiator lists supported cipher suites in order of preference</t>
      <t>The Responder verifies that the selected cipher suite is the first supported cipher suite (or else rejects and states supported cipher suites).</t>
    </list></t>
  <t>Method types and error handling.</t>
  <t>Selection of connection identifiers C_I and C_R which may be used to identify established keys or protocol state.</t>
  <t>Transport of external authorization data.</t>
</list></t>

<t>EDHOC is designed to encrypt and integrity protect as much information as possible, and all symmetric keys are derived using as much previous information as possible. EDHOC is furthermore designed to be as compact and lightweight as possible, in terms of message sizes, processing, and the ability to reuse already existing CBOR, COSE, and CoAP libraries.</t>

<t>To simplify for implementors, the use of CBOR and COSE in EDHOC is summarized in <xref target="CBORandCOSE"/> and test vectors including CBOR diagnostic notation are given in <xref target="vectors"/>.</t>

</section>
<section anchor="overview" title="Protocol Elements">

<section anchor="general" title="General">

<t>An EDHOC message flow consists of three mandatory messages (message_1, message_2, message_3) between Initiator and Responder, an optional fourth message (message_4), plus an EDHOC error message. EDHOC messages are CBOR Sequences <xref target="RFC8742"/>, see <xref target="fig-flow"/>. The protocol elements in the figure are introduced in the following sections. Message formatting and processing is specified in <xref target="asym"/> and <xref target="error"/>. An implementation may support only Initiator or only Responder.</t>

<t>Application data is protected using the agreed application algorithms (AEAD, hash) in the selected cipher suite (see <xref target="cs"/>) and the application can make use of the established connection identifiers C_I and C_R (see <xref target="ci"/>). EDHOC may be used with the media type application/edhoc defined in <xref target="iana"/>.</t>

<t>The Initiator can derive symmetric application keys after creating EDHOC message_3, see <xref target="exporter"/>. Application protected data can therefore be sent in parallel or together with EDHOC message_3.</t>

<figure title="EDHOC Message Flow" anchor="fig-flow"><artwork align="center"><![CDATA[
Initiator                                                   Responder
|                   METHOD, SUITES_I, G_X, C_I, EAD_1               |
+------------------------------------------------------------------>|
|                             message_1                             |
|                                                                   |
|          G_Y, C_R, Enc(ID_CRED_R, Signature_or_MAC_2, EAD_2)      |
|<------------------------------------------------------------------+
|                             message_2                             |
|                                                                   |
|           AEAD(K_3ae; ID_CRED_I, Signature_or_MAC_3, EAD_3)       |
+------------------------------------------------------------------>|
|                             message_3                             |
]]></artwork></figure>

</section>
<section anchor="method" title="Method">

<t>The data item METHOD in message_1 (see <xref target="asym-msg1-form"/>), is an integer specifying the authentication method. EDHOC supports authentication with signature or static Diffie-Hellman keys, as defined in the four authentication methods: 0, 1, 2, and 3, see <xref target="fig-method-types"/>. (Method 0 corresponds to the case outlined in <xref target="background"/> where both Initiator and Responder authenticate with signature keys.)</t>

<t>An implementation may support only a single method. The Initiator and the Responder need to have agreed on a single method to be used for EDHOC, see <xref target="applicability"/>.</t>

<figure title="Method Types" anchor="fig-method-types"><artwork align="center"><![CDATA[
+-------+-------------------+-------------------+-------------------+
| Value | Initiator         | Responder         | Reference         |
+-------+-------------------+-------------------+-------------------+
|     0 | Signature Key     | Signature Key     | [[this document]] |
|     1 | Signature Key     | Static DH Key     | [[this document]] |
|     2 | Static DH Key     | Signature Key     | [[this document]] |
|     3 | Static DH Key     | Static DH Key     | [[this document]] |
+-------+-------------------+-------------------+-------------------+
]]></artwork></figure>

</section>
<section anchor="ci" title="Connection Identifiers">

<t>EDHOC includes the selection of connection identifiers (C_I, C_R) identifying a connection for which keys are agreed. Connection identifiers may be used in the ongoing EDHOC protocol (see <xref target="ci-edhoc"/>) or in a subsequent application protocol, e.g., OSCORE (see <xref target="ci-oscore"/>). The connection identifiers do not have any cryptographic purpose in EDHOC.</t>

<t>Connection identifiers in EDHOC are byte strings or integers, encoded in CBOR. One byte connection identifiers (the integers -24 to 23 and the empty bytestring h’’) are realistic in many scenarios as most constrained devices only have a few connections.</t>

<section anchor="selection-of-connection-identifiers" title="Selection of Connection Identifiers">

<t>C_I and C_R are chosen by I and R, respectively. The Initiator selects C_I and sends it in message_1 for the Responder to use as a reference to the connection in communications with the Initiator. The Responder selects C_R and sends in message_2 for the Initiator to use as a reference to the connection in communications with the Responder.</t>

<t>If connection identifiers are used by an application protocol for which EDHOC establishes keys then the selected connection identifiers SHALL adhere to the requirements for that protocol, see <xref target="ci-oscore"/> for an example.</t>

</section>
<section anchor="ci-edhoc" title="Use of Connection Identifiers in EDHOC">

<t>Connection identifiers may be used to correlate EDHOC messages and facilitate the retrieval of protocol state during EDHOC protocol execution. EDHOC transports that do not inherently provide correlation across all messages of an exchange can send connection identifiers along with EDHOC messages to gain that required capability, see <xref target="transport"/>. For an example when CoAP is used as transport, see <xref target="coap"/>.</t>

</section>
<section anchor="ci-oscore" title="Use of Connection Identifiers in OSCORE">

<t>For OSCORE, the choice of a connection identifier results in the endpoint selecting its Recipient ID, see Section 3.1 of <xref target="RFC8613"/>), for which certain uniqueness requirements apply, see Section 3.3 of <xref target="RFC8613"/>). Therefore the Initiator and the Responder MUST NOT select connection identifiers such that it results in same OSCORE Recipient ID. Since the Recipient ID is a byte string and a EDHOC connection identifier is either a CBOR byte string or a CBOR integer, care must be taken when selecting the connection identifiers and converting them to Recipient IDs. A mapping from EDHOC connection identifier to OSCORE Recipient ID is specified in <xref target="edhoc-to-oscore"/>.</t>

</section>
</section>
<section anchor="transport" title="Transport">

<t>Cryptographically, EDHOC does not put requirements on the lower layers. EDHOC is not bound to a particular transport layer, and can even be used in environments without IP. The transport is responsible, where necessary, to handle:</t>

<t><list style="symbols">
  <t>message loss,</t>
  <t>message reordering,</t>
  <t>message duplication,</t>
  <t>fragmentation,</t>
  <t>demultiplex EDHOC messages from other types of messages, and</t>
  <t>denial of service protection.</t>
</list></t>

<t>Besides these common transport oriented properties, EDHOC transport additionally needs to support the correlation between EDHOC messages, including an indication of a message being message_1. The correlation may reuse existing mechanisms in the transport protocol. For example, the CoAP Token may be used to correlate EDHOC messages in a CoAP response and an associated CoAP request. In the absense of correlation between a message received and a message previously sent inherent to the transport, the EDHOC connection identifiers may be added, e.g. by prepending the appropriate connection identifier (when available from the EDHOC protocol) to the EDHOC message. Transport of EDHOC in CoAP payloads is described in <xref target="coap"/>, which also 
shows how to use connection identifiers and message_1 indication with CoAP.</t>

<t>The Initiator and the Responder need to have agreed on a transport to be used for EDHOC, see <xref target="applicability"/>.</t>

</section>
<section anchor="auth-key-id" title="Authentication Parameters">

<section anchor="auth-keys" title="Authentication Keys">

<t>The authentication key MUST be a signature key or static Diffie-Hellman key. The Initiator and the Responder
 MAY use different types of authentication keys, e.g. one uses a signature key and the other uses a static Diffie-Hellman key. When using a signature key, the authentication is provided by a signature. When using a static Diffie-Hellman key the authentication is provided by a Message Authentication Code (MAC) computed from an ephemeral-static ECDH shared secret which enables significant reductions in message sizes. The MAC is implemented with an AEAD algorithm. When using static Diffie-Hellman keys the Initiator’s and Responder’s private authentication keys are called I and R, respectively, and the public authentication keys are called G_I and G_R, respectively. The authentication key algorithm needs to specified with enough parameters to make it completely determined. Note that for most signature algorithms, the signature is determined by the signature algorithm and the authentication key algorithm together. For example, the curve used in the signature is typically determined by the authentication key parameters.</t>

<t><list style="symbols">
  <t>Only the Responder SHALL have access to the Responder’s private authentication key.</t>
  <t>Only the Initiator SHALL have access to the Initiator’s private authentication key.</t>
</list></t>

</section>
<section anchor="identities" title="Identities">

<t>EDHOC assumes the existence of mechanisms (certification authority, trusted third party, manual distribution, etc.) for specifying and distributing authentication keys and identities. Policies are set based on the identity of the other party, and parties typically only allow connections from a specific identity or a small restricted set of identities. For example, in the case of a device connecting to a network, the network may only allow connections from devices which authenticate with certificates having a particular range of serial numbers in the subject field and signed by a particular CA. On the other side, the device may only be allowed to connect to a network which authenticates with a particular public key (information of which may be provisioned, e.g., out of band or in the external authorization data, see <xref target="AD"/>).</t>

<t>The EDHOC implementation must be able to receive and enforce information from the application about what is the intended endpoint, and in particular whether it is a specific identity or a set of identities.</t>

<t><list style="symbols">
  <t>When a Public Key Infrastructure (PKI) is used, the trust anchor is a Certification Authority (CA) certificate, and the identity is the subject whose unique name (e.g. a domain name, NAI, or EUI) is included in the endpoint’s certificate. Before running EDHOC each party needs at least one CA public key certificate, or just the public key, and a specific identity or set of identities it is allowed to communicate with. Only validated public-key certificates with an allowed subject name, as specified by the application, are to be accepted. EDHOC provides proof that the other party possesses the private authentication key corresponding to the public authentication key in its certificate. The certification path provides proof that the subject of the certificate owns the public key in the certificate.</t>
  <t>When public keys are used but not with a PKI (RPK, self-signed certificate), the trust anchor is the public authentication key of the other party. In this case, the identity is typically directly associated to the public authentication key of the other party. For example, the name of the subject may be a canonical representation of the public key. Alternatively, if identities can be expressed in the form of unique subject names assigned to public keys, then a binding to identity can be achieved by including both public key and associated subject name in the protocol message computation: CRED_I or CRED_R may be a self-signed certificate or COSE_Key containing the public authentication key and the subject name, see <xref target="auth-cred"/>. Before running EDHOC, each endpoint needs a specific public authentication key/unique associated subject name, or a set of public authentication keys/unique associated subject names, which it is allowed to communicate with. EDHOC provides proof that the other party possesses the private authentication key corresponding to the public authentication key.</t>
</list></t>

</section>
<section anchor="auth-cred" title="Authentication Credentials">

<t>The authentication credentials, CRED_I and CRED_R, contain the public authentication key of the Initiator and the Responder, respectively.
The Initiator and the Responder MAY use different types of credentials, e.g. one uses an RPK and the other uses a public key certificate.</t>

<t>The credentials CRED_I and CRED_R are signed or MAC:ed (depending on method) by the Initiator and the Responder, respectively, see <xref target="m3"/> and <xref target="m2"/>.</t>

<t>When the credential is a certificate, CRED_x is an end-entity certificate (i.e. not the certificate chain) encoded as a CBOR bstr.
In X.509 certificates, signature keys typically have key usage “digitalSignature” and Diffie-Hellman keys typically have key usage “keyAgreement”.</t>

<t>To prevent misbinding attacks in systems where an attacker can register public keys without proving knowledge of the private key, SIGMA <xref target="SIGMA"/> enforces a MAC to be calculated over the “Identity”, which in case of a X.509 certificate would be the ‘subject’ and ‘subjectAltName’ fields. EDHOC follows SIGMA by calculating a MAC over the whole certificate. While the SIGMA paper only focuses on the identity, the same principle is true for any information such as policies connected to the public key.</t>

<t>When the credential is a COSE_Key, CRED_x is a CBOR map only containing specific fields from the COSE_Key identifying the public key, and optionally the “Identity”. CRED_x needs to be defined such that it is identical when generated by Initiator or Responder. The parameters SHALL be encoded in bytewise lexicographic order of their deterministic encodings as specified in Section 4.2.1 of <xref target="RFC8949"/>.</t>

<t>If the parties have agreed on an identity besides the public key, the identity is included in the CBOR map with the label “subject name”, otherwise the subject name is the empty text string. The public key parameters depend on key type.</t>

<t><list style="symbols">
  <t>For COSE_Keys of type OKP the CBOR map SHALL, except for subject name, only include the parameters 1 (kty), -1 (crv), and -2 (x-coordinate).</t>
  <t>For COSE_Keys of type EC2 the CBOR map SHALL, except for subject name, only include the parameters 1 (kty), -1 (crv), -2 (x-coordinate), and -3 (y-coordinate).</t>
</list></t>

<t>An example of CRED_x when the RPK contains an X25519 static Diffie-Hellman key and the parties have agreed on an EUI-64 identity is shown below:</t>

<figure><artwork><![CDATA[
CRED_x = {
  1:  1,
 -1:  4,
 -2:  h'b1a3e89460e88d3a8d54211dc95f0b90
        3ff205eb71912d6db8f4af980d2db83a',
 "subject name" : "42-50-31-FF-EF-37-32-39"
}
]]></artwork></figure>

</section>
<section anchor="id_cred" title="Identification of Credentials">

<t>ID_CRED_I and ID_CRED_R are used to identify and optionally transport the public authentication keys of the Initiator and the Responder, respectively. 
ID_CRED_I and ID_CRED_R do not have any cryptographic purpose in EDHOC.</t>

<t><list style="symbols">
  <t>ID_CRED_R is intended to facilitate for the Initiator to retrieve the Responder’s public authentication key.</t>
  <t>ID_CRED_I is intended to facilitate for the Responder to retrieve the Initiator’s public authentication key.</t>
</list></t>

<t>The identifiers ID_CRED_I and ID_CRED_R are COSE header_maps, i.e. CBOR maps containing Common COSE Header Parameters, see Section 3.1 of <xref target="I-D.ietf-cose-rfc8152bis-struct"/>). In the following we give some examples of COSE header_maps.</t>

<t>Raw public keys are most optimally stored as COSE_Key objects and identified with a ‘kid2’ parameter (see <xref target="kid2-header-param"/> and <xref target="kid2-key-common-param"/>):</t>

<t><list style="symbols">
  <t>ID_CRED_x = { 4 : kid_x }, where kid_x : bstr / int, for x = I or R.</t>
</list></t>

<t>Note that the integers -24 to 23 and the empty bytestring h’’ are encoded as one byte.</t>

<t>Public key certificates can be identified in different ways. Header parameters for identifying C509 certificates and X.509 certificates are defined in <xref target="I-D.ietf-cose-cbor-encoded-cert"/> and <xref target="I-D.ietf-cose-x509"/>, for example:</t>

<t><list style="symbols">
  <t>by a hash value with the ‘c5t’ or ‘x5t’ parameters;  <list style="symbols">
      <t>ID_CRED_x = { 34 : COSE_CertHash }, for x = I or R,</t>
      <t>ID_CRED_x = { TDB3 : COSE_CertHash }, for x = I or R,</t>
    </list></t>
  <t>by a URI with the ‘c5u’ or ‘x5u’ parameters;  <list style="symbols">
      <t>ID_CRED_x = { 35 : uri }, for x = I or R,</t>
      <t>ID_CRED_x = { TBD4 : uri }, for x = I or R,</t>
    </list></t>
  <t>ID_CRED_x MAY contain the actual credential used for authentication, CRED_x. For example, a certificate chain can be transported in ID_CRED_x with COSE header parameter c5c or x5chain, defined in <xref target="I-D.ietf-cose-cbor-encoded-cert"/> and <xref target="I-D.ietf-cose-x509"/>.</t>
</list></t>

<t>It is RECOMMENDED that ID_CRED_x uniquely identify the public authentication key as the recipient may otherwise have to try several keys. ID_CRED_I and ID_CRED_R are transported in the ‘ciphertext’, see <xref target="m3"/> and <xref target="m2"/>.</t>

<t>When ID_CRED_x does not contain the actual credential it may be very short.
One byte credential identifiers are realistic in many scenarios as most constrained devices only have a few keys. In cases where a node only has one key, the identifier may even be the empty byte string.</t>

</section>
</section>
<section anchor="cs" title="Cipher Suites">

<t>An EDHOC cipher suite consists of an ordered set of algorithms from the “COSE Algorithms” and “COSE Elliptic Curves” registries. Algorithms need to be specified with enough parameters to make them completely determined. Currently, none of the algorithms require parameters. EDHOC is only specified for use with key exchange algorithms of type ECDH curves. Use with other types of key exchange algorithms would likely require a specification updating EDHOC. Note that for most signature algorithms, the signature is determined by the signature algorithm and the authentication key algorithm together, see <xref target="auth-keys"/>.</t>

<t><list style="symbols">
  <t>EDHOC AEAD algorithm</t>
  <t>EDHOC hash algorithm</t>
  <t>EDHOC key exchange algorithm (ECDH curve)</t>
  <t>EDHOC signature algorithm</t>
  <t>Application AEAD algorithm</t>
  <t>Application hash algorithm</t>
</list></t>

<t>Each cipher suite is identified with a pre-defined int label.</t>

<t>EDHOC can be used with all algorithms and curves defined for COSE. Implementation can either use one of the pre-defined cipher suites (<xref target="suites-registry"/>) or use any combination of COSE algorithms and parameters to define their own private cipher suite. Private cipher suites can be identified with any of the four values -24, -23, -22, -21.</t>

<t>The following CCM cipher suites are for constrained IoT where message overhead is a very important factor. Cipher suites 1 and 3 use a larger tag length (128-bit) in the EDHOC AEAD algorithm than the Application AEAD algorithm (64-bit):</t>

<figure><artwork><![CDATA[
   0. ( 10, -16, 4, -8, 10, -16 )
      (AES-CCM-16-64-128, SHA-256, X25519, EdDSA,
       AES-CCM-16-64-128, SHA-256)

   1. ( 30, -16, 4, -8, 10, -16 )
      (AES-CCM-16-128-128, SHA-256, X25519, EdDSA,
       AES-CCM-16-64-128, SHA-256)

   2. ( 10, -16, 1, -7, 10, -16 )
      (AES-CCM-16-64-128, SHA-256, P-256, ES256,
       AES-CCM-16-64-128, SHA-256)

   3. ( 30, -16, 1, -7, 10, -16 )
      (AES-CCM-16-128-128, SHA-256, P-256, ES256,
       AES-CCM-16-64-128, SHA-256)
]]></artwork></figure>

<t>The following ChaCha20 cipher suites are for less constrained applications and only use 128-bit tag lengths.</t>

<figure><artwork><![CDATA[
   4. ( 24, -16, 4, -8, 24, -16 )
      (ChaCha20/Poly1305, SHA-256, X25519, EdDSA,
       ChaCha20/Poly1305, SHA-256)

   5. ( 24, -16, 1, -7, 24, -16 )
      (ChaCha20/Poly1305, SHA-256, P-256, ES256,
       ChaCha20/Poly1305, SHA-256)
]]></artwork></figure>

<t>The following GCM cipher suite is for general non-constrained applications. It uses high performance algorithms that are widely supported:</t>

<figure><artwork><![CDATA[
   6. ( 1, -16, 4, -7, 1, -16 )
      (A128GCM, SHA-256, X25519, ES256,
       A128GCM, SHA-256)
]]></artwork></figure>

<t>The following two cipher suites are for high security application such as government use and financial applications. The two cipher suites do not share any algorithms. The first of the two cipher suites is compatible with the CNSA suite <xref target="CNSA"/>.</t>

<figure><artwork><![CDATA[
  24. ( 3, -43, 2, -35, 3, -43 )
      (A256GCM, SHA-384, P-384, ES384,
       A256GCM, SHA-384)

  25. ( 24, -45, 5, -8, 24, -45 )
      (ChaCha20/Poly1305, SHAKE256, X448, EdDSA,
       ChaCha20/Poly1305, SHAKE256)
]]></artwork></figure>

<t>The different methods use the same cipher suites, but some algorithms are not used in some methods. The EDHOC signature algorithm is not used in methods without signature authentication.</t>

<t>The Initiator needs to have a list of cipher suites it supports in order of preference. The Responder needs to have a list of cipher suites it supports. SUITES_I is a CBOR array containing cipher suites that the Initiator supports. SUITES_I is formatted and processed as detailed in <xref target="asym-msg1-form"/> to secure the cipher suite negotiation. Examples of cipher suite negotiation are given in <xref target="ex-neg"/>.</t>

</section>
<section anchor="cose_key" title="Ephemeral Public Keys">

<t>EDHOC always uses compact representation of elliptic curve points, see <xref target="comrep"/>. In COSE compact representation is achieved by formatting the ECDH ephemeral public keys as COSE_Keys of type EC2 or OKP according to Sections 7.1 and 7.2 of <xref target="I-D.ietf-cose-rfc8152bis-algs"></xref>, but only including the ‘x’ parameter in G_X and G_Y. For Elliptic Curve Keys of type EC2, compact representation MAY be used also in the COSE_Key.  If the COSE implementation requires an ‘y’ parameter, the value y = false SHALL be used. COSE always use compact output for Elliptic Curve Keys of type EC2.</t>

</section>
<section anchor="AD" title="External Authorization Data">

<t>In order to reduce round trips and number of messages or to simplify processing, external security applications may be integrated into EDHOC by transporting authorization related data together with the messages. One example is the transport third-party identity and authorization information protected out of scope of EDHOC <xref target="I-D.selander-ace-ake-authz"/>. Another example is the embedding of a certificate enrolment request or a newly issued certificate.</t>

<t>EDHOC allows opaque external authorization data (EAD) to be sent in the EDHOC messages. External authorization data sent in message_1 (EAD_1) or message_2 (EAD_2) must be considered unprotected by EDHOC, see <xref target="unprot-data"/>. External authorization data sent in message_3 (EAD_3) or message_4 (EAD_4) is protected between Initiator and Responder.</t>

<t>External authorization data is a CBOR sequence (see <xref target="CBOR"/>) as defined below:</t>

<figure><artwork type="CDDL"><![CDATA[
EAD = (
  type : int,
  1* ext_authz_data : any,
)
]]></artwork></figure>

<t>where type is an int and is followed by one or more ext_authz_data depending on type as defined in a separate specification.</t>

<t>The EAD fields of EDHOC are not intended for generic application data. Since data carried in EAD_1 and EAD_2 fields may not be protected, special considerations need to be made such that a) it does not violate security, privacy etc. requirements of the service which uses this data, and b) it does not violate the security properties of EDHOC. Security applications making use of the EAD fields must perform the necessary security analysis.</t>

</section>
<section anchor="applicability" title="Applicability Statement">

<t>EDHOC requires certain parameters to be agreed upon between Initiator and Responder. Some parameters can be agreed through the protocol execution (specifically cipher suite negotiation, see <xref target="cs"/>) but other parameters may need to be known out-of-band (e.g., which authentication method is used, see <xref target="method"/>).</t>

<t>The purpose of the applicability statement is describe the intended use of EDHOC to allow for the relevant processing and verifications to be made, including things like:</t>

<t><list style="numbers">
  <t>How the endpoint detects that an EDHOC message is received. This includes how EDHOC messages are transported, for example in the payload of a CoAP message with a certain Uri-Path or Content-Format; see <xref target="coap"/>.
 * The method of transporting EDHOC messages may also describe data carried along with the messages that are needed for the transport to satisfy the requirements of <xref target="transport"/>, e.g., connection identifiers used with certain messages, see <xref target="coap"/>.</t>
  <t>Authentication method (METHOD; see <xref target="method"/>).</t>
  <t>Profile for authentication credentials (CRED_I, CRED_R; see <xref target="auth-cred"/>), e.g., profile for certificate or COSE_key, including supported authentication key algorithms (subject public key algorithm in X.509 certificate).</t>
  <t>Type used to identify authentication credentials (ID_CRED_I, ID_CRED_R; see <xref target="id_cred"/>).</t>
  <t>Use and type of external authorization data (EAD_1, EAD_2, EAD_3, EAD_4; see <xref target="AD"/>).</t>
  <t>Identifier used as identity of endpoint; see <xref target="identities"/>.</t>
  <t>If message_4 shall be sent/expected, and if not, how to ensure a protected application message is sent from the Responder to the Initiator; see <xref target="m4"/>.</t>
</list></t>

<t>The applicability statement may also contain information about supported cipher suites. The procedure for selecting and verifying cipher suite is still performed as specified by the protocol, but it may become simplified by this knowledge.</t>

<t>An example of an applicability statement is shown in <xref target="appl-temp"/>.</t>

<t>For some parameters, like METHOD, ID_CRED_x, type of EAD, the receiver is able to verify compliance with applicability statement, and if it needs to fail because of incompliance, to infer the reason why the protocol failed.</t>

<t>For other parameters, like CRED_x in the case that it is not transported, it may not be possible to verify that incompliance with applicability statement was the reason for failure: Integrity verification in message_2 or message_3 may fail not only because of wrong authentication credential. For example, in case the Initiator uses public key certificate by reference (i.e. not transported within the protocol) then both endpoints need to use an identical data structure as CRED_I or else the integrity verification will fail.</t>

<t>Note that it is not necessary for the endpoints to specify a single transport for the EDHOC messages. For example, a mix of CoAP and HTTP may be used along the path, and this may still allow correlation between messages.</t>

<t>The applicability statement may be dependent on the identity of the other endpoint, but this applies only to the later phases of the protocol when identities are known. (Initiator does not know identity of Responder before having verified message_2, and Responder does not know identity of Initiator before having verified message_3.)</t>

<t>Other conditions may be part of the applicability statement, such as target application or use (if there is more than one application/use) to the extent that EDHOC can distinguish between them. In case multiple applicability statements are used, the receiver needs to be able to determine which is applicable for a given session, for example based on URI or external authorization data type.</t>

</section>
</section>
<section anchor="key-der" title="Key Derivation">

<t>EDHOC uses Extract-and-Expand <xref target="RFC5869"/> with the EDHOC hash algorithm in the selected cipher suite to derive keys used in EDHOC and in the application. Extract is used to derive fixed-length uniformly pseudorandom keys (PRK) from ECDH shared secrets. Expand is used to derive additional output keying material (OKM) from the PRKs. The PRKs are derived using Extract.</t>

<figure><artwork><![CDATA[
   PRK = Extract( salt, IKM )
]]></artwork></figure>

<t>If the EDHOC hash algorithm is SHA-2, then Extract( salt, IKM ) = HKDF-Extract( salt, IKM ) <xref target="RFC5869"/>. If the EDHOC hash algorithm is SHAKE128, then Extract( salt, IKM ) = KMAC128( salt, IKM, 256, “” ). If the EDHOC hash algorithm is SHAKE256, then Extract( salt, IKM ) = KMAC256( salt, IKM, 512, “” ).</t>

<t>PRK_2e is used to derive a keystream to encrypt message_2. PRK_3e2m is used to derive keys and IVs to produce a MAC in message_2 and to encrypt message_3. PRK_4x3m is used to derive keys and IVs to produce a MAC in message_3 and to derive application specific data.</t>

<t>PRK_2e is derived with the following input:</t>

<t><list style="symbols">
  <t>The salt SHALL be the empty byte string. Note that <xref target="RFC5869"/> specifies that if the salt is not provided, it is set to a string of zeros (see Section 2.2 of <xref target="RFC5869"/>). For implementation purposes, not providing the salt is the same as setting the salt to the empty byte string.</t>
  <t>The input keying material (IKM) SHALL be the ECDH shared secret G_XY (calculated from G_X and Y or G_Y and X) as defined in Section 6.3.1 of <xref target="I-D.ietf-cose-rfc8152bis-algs"/>.</t>
</list></t>

<t>Example: Assuming the use of SHA-256 the extract phase of HKDF produces PRK_2e as follows:</t>

<figure><artwork><![CDATA[
   PRK_2e = HMAC-SHA-256( salt, G_XY )
]]></artwork></figure>

<t>where salt = 0x (the empty byte string).</t>

<t>The pseudorandom keys PRK_3e2m and PRK_4x3m are defined as follow:</t>

<t><list style="symbols">
  <t>If the Responder authenticates with a static Diffie-Hellman key, then PRK_3e2m = Extract( PRK_2e, G_RX ), where G_RX is the ECDH shared secret calculated from G_R and X, or G_X and R, else PRK_3e2m = PRK_2e.</t>
  <t>If the Initiator authenticates with a static Diffie-Hellman key, then PRK_4x3m = Extract( PRK_3e2m, G_IY ), where G_IY is the ECDH shared secret calculated from G_I and Y, or G_Y and I, else PRK_4x3m = PRK_3e2m.</t>
</list></t>

<t>Example: Assuming the use of curve25519, the ECDH shared secrets G_XY, G_RX, and G_IY are the outputs of the X25519 function <xref target="RFC7748"/>:</t>

<figure><artwork><![CDATA[
   G_XY = X25519( Y, G_X ) = X25519( X, G_Y )
]]></artwork></figure>

<t>The keys and IVs used in EDHOC are derived from PRKs using Expand <xref target="RFC5869"/> where the EDHOC-KDF is instantiated with the EDHOC AEAD algorithm in the selected cipher suite.</t>

<figure><artwork><![CDATA[
   OKM = EDHOC-KDF( PRK, transcript_hash, label, length )
       = Expand( PRK, info, length )
]]></artwork></figure>

<t>where info is the CBOR encoding of</t>

<figure><artwork type="CDDL"><![CDATA[
info = [
   edhoc_aead_id : int / tstr,
   transcript_hash : bstr,
   label : tstr,
   length : uint
]
]]></artwork></figure>

<t>where</t>

<t><list style="symbols">
  <t>edhoc_aead_id is an int or tstr containing the algorithm identifier of the EDHOC AEAD algorithm in the selected cipher suite encoded as defined in <xref target="I-D.ietf-cose-rfc8152bis-algs"/>. Note that a single fixed edhoc_aead_id is used in all invocations of EDHOC-KDF, including the derivation of KEYSTREAM_2 and invocations of the EDHOC-Exporter.</t>
  <t>transcript_hash is a bstr set to one of the transcript hashes TH_2, TH_3, or TH_4 as defined in Sections <xref target="asym-msg2-form" format="counter"/>, <xref target="asym-msg3-form" format="counter"/>, and <xref target="exporter" format="counter"/>.</t>
  <t>label is a tstr set to the name of the derived key or IV, i.e. “K_2m”, “IV_2m”, “KEYSTREAM_2”, “K_3m”, “IV_3m”, “K_3ae”, or “IV_3ae”.</t>
  <t>length is the length of output keying material (OKM) in bytes</t>
</list></t>

<t>If the EDHOC hash algorithm is SHA-2, then Expand( PRK, info, length ) = HKDF-Expand( PRK, info, length ) <xref target="RFC5869"/>. If the EDHOC hash algorithm is SHAKE128, then Expand( PRK, info, length ) = KMAC128( PRK, info, L, “” ). If the EDHOC hash algorithm is SHAKE256, then Expand( PRK, info, length ) = KMAC256( PRK, info, L, “” ).</t>

<t>KEYSTREAM_2 are derived using the transcript hash TH_2 and the pseudorandom key PRK_2e. K_2m and IV_2m are derived using the transcript hash TH_2 and the pseudorandom key PRK_3e2m. K_3ae and IV_3ae are derived using the transcript hash TH_3 and the pseudorandom key PRK_3e2m. K_3m and IV_3m are derived using the transcript hash TH_3 and the pseudorandom key PRK_4x3m. IVs are only used if the EDHOC AEAD algorithm uses IVs.</t>

<section anchor="exporter" title="EDHOC-Exporter Interface">

<t>Application keys and other application specific data can be derived using the EDHOC-Exporter interface defined as:</t>

<figure><artwork><![CDATA[
   EDHOC-Exporter(label, context, length)
     = EDHOC-KDF(PRK_4x3m, TH_4, label_context, length) 
]]></artwork></figure>

<t>label_context is a CBOR sequence:</t>

<figure><artwork type="CDDL"><![CDATA[
label_context = (
  label : tstr,
  context : bstr,
)
]]></artwork></figure>

<t>where label is a registered tstr from the EDHOC Exporter Label registry (<xref target="exporter-label"/>), context is a bstr defined by the application, and length is a uint defined by the application. The (label, context) pair must be unique, i.e. a (label, context) MUST NOT be used for two different purposes. However an application can re-derive the same key several times as long as it is done in a secure way. For example, in most encryption algorithms the same (key, nonce) pair must not be reused.</t>

<t>The transcript hash TH_4 is a CBOR encoded bstr and the input to the hash function is a CBOR Sequence.</t>

<figure><artwork><![CDATA[
   TH_4 = H( TH_3, CIPHERTEXT_3 )
]]></artwork></figure>
<t>where H() is the hash function in the selected cipher suite. Examples of use of the EDHOC-Exporter are given in <xref target="asym-msg4-proc"/> and <xref target="transfer"/>.</t>

<t>To provide forward secrecy in an even more efficient way than re-running EDHOC, EDHOC provides the function EDHOC-KeyUpdate. When EDHOC-KeyUpdate is called the old PRK_4x3m is deleted and the new PRK_4x3m is calculated as a “hash” of the old key using the Extract function as illustrated by the following pseudocode:</t>

<figure><artwork><![CDATA[
   EDHOC-KeyUpdate( nonce ):
      PRK_4x3m = Extract( nonce, PRK_4x3m )
]]></artwork></figure>

</section>
</section>
<section anchor="asym" title="Message Formatting and Processing">

<t>This section specifies formatting of the messages and processing steps. Error messages are specified in <xref target="error"/>.</t>

<t>An EDHOC message is encoded as a sequence of CBOR data (CBOR Sequence, <xref target="RFC8742"/>).
Additional optimizations are made to reduce message overhead.</t>

<t>While EDHOC uses the COSE_Key, COSE_Sign1, and COSE_Encrypt0 structures, only a subset of the parameters is included in the EDHOC messages. The unprotected COSE header in COSE_Sign1, and COSE_Encrypt0 (not included in the EDHOC message) MAY contain parameters (e.g. ‘alg’).</t>

<section anchor="proc-outline" title="Message Processing Outline">

<t>This section outlines the message processing of EDHOC.</t>

<t>For each session, the endpoints are assumed to keep an associated protocol state containing identifiers, keys, etc. used for subsequent processing of protocol related data. The protocol state is assumed to be associated to an applicability statement (<xref target="applicability"/>) which provides the context for how messages are transported, identified and processed.</t>

<t>EDHOC messages SHALL be processed according to the current protocol state. The following steps are expected to be performed at reception of an EDHOC message:</t>

<t><list style="numbers">
  <t>Detect that an EDHOC message has been received, for example by means of port number, URI, or media type (<xref target="applicability"/>).</t>
  <t>Retrieve the protocol state according to the message correlation provided by the transport, see <xref target="transport"/>. If there is no protocol state, in the case of message_1, a new protocol state is created. The Responder endpoint needs to make use of available Denial-of-Service mitigation (<xref target="dos"/>).</t>
  <t>If the message received is an error message then process according to <xref target="error"/>, else process as the expected next message according to the protocol state.</t>
</list></t>

<t>If the processing fails, then the protocol is discontinued, an error message sent, and the protocol state erased. Further details are provided in the following subsections.</t>

<t>Different instances of the same message MUST NOT be processed in one session.  Note that processing will fail if the same message appears a second time for EDHOC processing because the state of the protocol has moved on and now expects something else. This assumes that message duplication due to re-transmissions is handled by the transport protocol, see <xref target="transport"/>. The case when the transport does not support message deduplication is addressed in <xref target="duplication"/>.</t>

</section>
<section anchor="m1" title="EDHOC Message 1">

<section anchor="asym-msg1-form" title="Formatting of Message 1">

<t>message_1 SHALL be a CBOR Sequence (see <xref target="CBOR"/>) as defined below</t>

<figure><artwork type="CDDL"><![CDATA[
message_1 = (
  METHOD : int,
  SUITES_I : [ selected : suite, supported : 2* suite ] / suite,
  G_X : bstr,
  C_I : bstr / int,  
  ? EAD ; EAD_1 
)

suite = int
]]></artwork></figure>

<t>where:</t>

<t><list style="symbols">
  <t>METHOD = 0, 1, 2, or 3 (see <xref target="fig-method-types"/>).</t>
  <t>SUITES_I - cipher suites which the Initiator supports in order of (decreasing) preference. The list of supported cipher suites can be truncated at the end, as is detailed in the processing steps below and <xref target="wrong-selected"/>. One of the supported cipher suites is selected. The selected suite is the first suite in the SUITES_I CBOR array. If a single supported cipher suite is conveyed then that cipher suite is selected and SUITES_I is encoded as an int instead of an array.</t>
  <t>G_X - the ephemeral public key of the Initiator</t>
  <t>C_I - variable length connection identifier</t>
  <t>EAD_1 - unprotected external authorization data, see <xref target="AD"/>.</t>
</list></t>

</section>
<section anchor="init-proc-msg1" title="Initiator Processing of Message 1">

<t>The Initiator SHALL compose message_1 as follows:</t>

<t><list style="symbols">
  <t>The supported cipher suites and the order of preference MUST NOT be changed based on previous error messages. However, the list SUITES_I sent to the Responder MAY be truncated such that cipher suites which are the least preferred are omitted. The amount of truncation MAY be changed between sessions, e.g. based on previous error messages (see next bullet), but all cipher suites which are more preferred than the least preferred cipher suite in the list MUST be included in the list.</t>
  <t>The Initiator MUST select its most preferred cipher suite, conditioned on what it can assume to be supported by the Responder. If the Initiator previously received from the Responder an error message with error code 2 (see <xref target="wrong-selected"/>) indicating cipher suites supported by the Responder which also are supported by the Initiator, then the Initiator SHOULD select the most preferred cipher suite of those (note that error messages are not authenticated and may be forged).</t>
  <t>Generate an ephemeral ECDH key pair using the curve in the selected cipher suite and format it as a COSE_Key. Let G_X be the ‘x’ parameter of the COSE_Key.</t>
  <t>Choose a connection identifier C_I and store it for the length of the protocol.</t>
  <t>Encode message_1 as a sequence of CBOR encoded data items as specified in <xref target="asym-msg1-form"/></t>
</list></t>

</section>
<section anchor="resp-proc-msg1" title="Responder Processing of Message 1">

<t>The Responder SHALL process message_1 as follows:</t>

<t><list style="symbols">
  <t>Decode message_1 (see <xref target="CBOR"/>).</t>
  <t>Verify that the selected cipher suite is supported and that no prior cipher suite in SUITES_I is supported.</t>
  <t>Pass EAD_1 to the security application.</t>
</list></t>

<t>If any processing step fails, the Responder SHOULD send an EDHOC error message back, formatted as defined in <xref target="error"/>, and the session MUST be discontinued. Sending error messages is essential for debugging but MAY e.g. be skipped due to denial of service reasons, see <xref target="security"/>.</t>

</section>
</section>
<section anchor="m2" title="EDHOC Message 2">

<section anchor="asym-msg2-form" title="Formatting of Message 2">

<t>message_2 and data_2 SHALL be CBOR Sequences (see <xref target="CBOR"/>) as defined below</t>

<figure><artwork type="CDDL"><![CDATA[
message_2 = (
  data_2,
  CIPHERTEXT_2 : bstr,
)
]]></artwork></figure>

<figure><artwork type="CDDL"><![CDATA[
data_2 = (
  G_Y : bstr,
  C_R : bstr / int,
)
]]></artwork></figure>

<t>where:</t>

<t><list style="symbols">
  <t>G_Y - the ephemeral public key of the Responder</t>
  <t>C_R - variable length connection identifier</t>
</list></t>

</section>
<section anchor="asym-msg2-proc" title="Responder Processing of Message 2">

<t>The Responder SHALL compose message_2 as follows:</t>

<t><list style="symbols">
  <t>Generate an ephemeral ECDH key pair using the curve in the selected cipher suite and format it as a COSE_Key. Let G_Y be the ‘x’ parameter of the COSE_Key.</t>
  <t>Choose a connection identifier C_R and store it for the length of the protocol.</t>
  <t>Compute the transcript hash TH_2 = H( H(message_1), data_2 ) where H() is the hash function in the selected cipher suite. The transcript hash TH_2 is a CBOR encoded bstr and the input to the hash function is a CBOR Sequence. Note that H(message_1) can be computed and cached already in the processing of message_1.</t>
  <t>Compute an inner COSE_Encrypt0 as defined in Section 5.3 of <xref target="I-D.ietf-cose-rfc8152bis-struct"/>, with the EDHOC AEAD algorithm in the selected cipher suite, K_2m, IV_2m, and the following parameters:  <list style="symbols">
      <t>protected =  « ID_CRED_R »      <list style="symbols">
          <t>ID_CRED_R - identifier to facilitate retrieval of CRED_R, see <xref target="id_cred"/></t>
        </list></t>
      <t>external_aad = « TH_2, CRED_R, ? EAD_2 »      <list style="symbols">
          <t>CRED_R - bstr containing the credential of the Responder, see <xref target="id_cred"/></t>
          <t>EAD_2 = unprotected external authorization data, see <xref target="AD"/></t>
        </list></t>
      <t>plaintext = h’’</t>
    </list>
COSE constructs the input to the AEAD <xref target="RFC5116"/> as follows:  <list style="symbols">
      <t>Key K = EDHOC-KDF( PRK_3e2m, TH_2, “K_2m”, length )</t>
      <t>Nonce N = EDHOC-KDF( PRK_3e2m, TH_2, “IV_2m”, length )</t>
      <t>Plaintext P = 0x (the empty string)</t>
      <t>Associated data A =      <vspace blankLines='1'/>
[ “Encrypt0”, « ID_CRED_R », « TH_2, CRED_R, ? EAD_2 » ]</t>
    </list>
MAC_2 is the ‘ciphertext’ of the inner COSE_Encrypt0.</t>
  <t>If the Responder authenticates with a static Diffie-Hellman key (method equals 1 or 3), then Signature_or_MAC_2 is MAC_2. If the Responder authenticates with a signature key (method equals 0 or 2), then Signature_or_MAC_2 is the ‘signature’ of a COSE_Sign1 object as defined in Section 4.4 of <xref target="I-D.ietf-cose-rfc8152bis-struct"/> using the signature algorithm in the selected cipher suite, the private authentication key of the Responder, and the following parameters:  <list style="symbols">
      <t>protected =  « ID_CRED_R »</t>
      <t>external_aad = « TH_2, CRED_R, ? EAD_2 »</t>
      <t>payload = MAC_2</t>
    </list>
COSE constructs the input to the Signature Algorithm as:  <list style="symbols">
      <t>The key is the private authentication key of the Responder.</t>
      <t>The message M to be signed =      <vspace blankLines='1'/>
[ “Signature1”, « ID_CRED_R », « TH_2, CRED_R, ? EAD_2 », MAC_2 ]</t>
    </list></t>
  <t>CIPHERTEXT_2 is encrypted by using the Expand function as a binary additive stream cipher.  <list style="symbols">
      <t>plaintext = ( ID_CRED_R / bstr / int, Signature_or_MAC_2, ? EAD_2 )      <list style="symbols">
          <t>Note that if ID_CRED_R contains a single ‘kid2’ parameter, i.e., ID_CRED_R = { 4 : kid_R }, only the byte string or integer kid_R is conveyed in the plaintext encoded as a bstr / int.</t>
        </list></t>
      <t>CIPHERTEXT_2 = plaintext XOR KEYSTREAM_2</t>
    </list></t>
  <t>Encode message_2 as a sequence of CBOR encoded data items as specified in <xref target="asym-msg2-form"/>.</t>
</list></t>

</section>
<section anchor="initiator-processing-of-message-2" title="Initiator Processing of Message 2">

<t>The Initiator SHALL process message_2 as follows:</t>

<t><list style="symbols">
  <t>Decode message_2 (see <xref target="CBOR"/>).</t>
  <t>Retrieve the protocol state using the message correlation provided by the transport (e.g., the CoAP Token and the 5-tuple as a client, or the prepended C_I as a server).</t>
  <t>Decrypt CIPHERTEXT_2, see <xref target="asym-msg2-proc"/>.</t>
  <t>Pass EAD_2 to the security application.</t>
  <t>Verify that the identity of the Responder is an allowed identity for this connection, see <xref target="auth-key-id"/>.</t>
  <t>Verify Signature_or_MAC_2 using the algorithm in the selected cipher suite. The verification process depends on the method, see <xref target="asym-msg2-proc"/>.</t>
</list></t>

<t>If any processing step fails, the Initiator SHOULD send an EDHOC error message back, formatted as defined in <xref target="error"/>. Sending error messages is essential for debugging but MAY e.g.be skipped if a session cannot be found or due to denial of service reasons, see <xref target="security"/>. If an error message is sent, the session MUST be discontinued.</t>

</section>
</section>
<section anchor="m3" title="EDHOC Message 3">

<section anchor="asym-msg3-form" title="Formatting of Message 3">

<t>message_3 SHALL be a CBOR Sequence (see <xref target="CBOR"/>) as defined below</t>

<figure><artwork type="CDDL"><![CDATA[
message_3 = (
  CIPHERTEXT_3 : bstr,
)
]]></artwork></figure>

</section>
<section anchor="asym-msg3-proc" title="Initiator Processing of Message 3">

<t>The Initiator SHALL compose message_3 as follows:</t>

<t><list style="symbols">
  <t>Compute the transcript hash TH_3 = H(TH_2, CIPHERTEXT_2) where H() is the hash function in the selected cipher suite. The transcript hash TH_3 is a CBOR encoded bstr and the input to the hash function is a CBOR Sequence.  Note that H(TH_2, CIPHERTEXT_2) can be computed and cached already in the processing of message_2.</t>
  <t>Compute an inner COSE_Encrypt0 as defined in Section 5.3 of <xref target="I-D.ietf-cose-rfc8152bis-struct"/>, with the EDHOC AEAD algorithm in the selected cipher suite, K_3m, IV_3m, and the following parameters:  <list style="symbols">
      <t>protected =  « ID_CRED_I »      <list style="symbols">
          <t>ID_CRED_I - identifier to facilitate retrieval of CRED_I, see <xref target="id_cred"/></t>
        </list></t>
      <t>external_aad = « TH_3, CRED_I, ? EAD_3 »      <list style="symbols">
          <t>CRED_I - bstr containing the credential of the Initiator, see <xref target="id_cred"/>.</t>
          <t>EAD_3 = protected external authorization data, see <xref target="AD"/></t>
        </list></t>
      <t>plaintext = h’’</t>
    </list>
COSE constructs the input to the AEAD <xref target="RFC5116"/> as follows:  <list style="symbols">
      <t>Key K = EDHOC-KDF( PRK_4x3m, TH_3, “K_3m”, length )</t>
      <t>Nonce N = EDHOC-KDF( PRK_4x3m, TH_3, “IV_3m”, length )</t>
      <t>Plaintext P = 0x (the empty string)</t>
      <t>Associated data A =      <vspace blankLines='1'/>
[ “Encrypt0”, « ID_CRED_I », « TH_3, CRED_I, ? EAD_3 » ]</t>
    </list>
MAC_3 is the ‘ciphertext’ of the inner COSE_Encrypt0.</t>
  <t>If the Initiator authenticates with a static Diffie-Hellman key (method equals 2 or 3), then Signature_or_MAC_3 is MAC_3. If the Initiator authenticates with a signature key (method equals 0 or 1), then Signature_or_MAC_3 is the ‘signature’ of a COSE_Sign1 object as defined in Section 4.4 of <xref target="I-D.ietf-cose-rfc8152bis-struct"/> using the signature algorithm in the selected cipher suite, the private authentication key of the Initiator, and the following parameters:  <list style="symbols">
      <t>protected =  « ID_CRED_I »</t>
      <t>external_aad = « TH_3, CRED_I, ? EAD_3 »</t>
      <t>payload = MAC_3</t>
    </list>
COSE constructs the input to the Signature Algorithm as:  <list style="symbols">
      <t>The key is the private authentication key of the Initiator.</t>
      <t>The message M to be signed =      <vspace blankLines='1'/>
[ “Signature1”, « ID_CRED_I », « TH_3, CRED_I, ? EAD_3 », MAC_3 ]</t>
    </list></t>
  <t>Compute an outer COSE_Encrypt0 as defined in Section 5.3 of <xref target="I-D.ietf-cose-rfc8152bis-struct"/>, with the EDHOC AEAD algorithm in the selected cipher suite, K_3ae, IV_3ae, and the following parameters. The protected header SHALL be empty.  <list style="symbols">
      <t>external_aad = TH_3</t>
      <t>plaintext = ( ID_CRED_I / bstr / int, Signature_or_MAC_3, ? EAD_3 )      <list style="symbols">
          <t>Note that if ID_CRED_I contains a single ‘kid2’ parameter, i.e., ID_CRED_I = { 4 : kid_I }, only the byte string or integer kid_I is conveyed in the plaintext encoded as a bstr or int.</t>
        </list></t>
    </list>
COSE constructs the input to the AEAD <xref target="RFC5116"/> as follows:  <list style="symbols">
      <t>Key K = EDHOC-KDF( PRK_3e2m, TH_3, “K_3ae”, length )</t>
      <t>Nonce N = EDHOC-KDF( PRK_3e2m, TH_3, “IV_3ae”, length )</t>
      <t>Plaintext P = ( ID_CRED_I / bstr / int, Signature_or_MAC_3, ? EAD_3 )</t>
      <t>Associated data A = [ “Encrypt0”, h’’, TH_3 ]</t>
    </list>
CIPHERTEXT_3 is the ‘ciphertext’ of the outer COSE_Encrypt0.</t>
  <t>Encode message_3 as a sequence of CBOR encoded data items as specified in <xref target="asym-msg3-form"/>.</t>
</list></t>

<t>Pass the connection identifiers (C_I, C_R) and the application algorithms in the selected cipher suite to the application. The application can now derive application keys using the EDHOC-Exporter interface.</t>

<t>After sending message_3, the Initiator is assured that no other party than the Responder can compute the key PRK_4x3m (implicit key authentication). The Initiator can securely derive application keys and send protected application data. However, the Initiator does not know that the Responder has actually computed the key PRK_4x3m and therefore the Initiator SHOULD NOT permanently store the keying material PRK_4x3m and TH_4, or derived application keys, until the Initiator is assured that the Responder has actually computed the key PRK_4x3m (explicit key confirmation). This is similar to waiting for acknowledgement (ACK) in a transport protocol. Explicit key confirmation is e.g. assured when the Initiator has verified an OSCORE message or message_4 from the Responder.</t>

</section>
<section anchor="responder-processing-of-message-3" title="Responder Processing of Message 3">

<t>The Responder SHALL process message_3 as follows:</t>

<t><list style="symbols">
  <t>Decode message_3 (see <xref target="CBOR"/>).</t>
  <t>Retrieve the protocol state using the message correlation provided by the transport (e.g., the CoAP Token and the 5-tuple as a client, or the prepended C_R as a server).</t>
  <t>Decrypt and verify the outer COSE_Encrypt0 as defined in Section 5.3 of <xref target="I-D.ietf-cose-rfc8152bis-struct"/>, with the EDHOC AEAD algorithm in the selected cipher suite, K_3ae, and IV_3ae.</t>
  <t>Pass EAD_3 to the security application.</t>
  <t>Verify that the identity of the Initiator is an allowed identity for this connection, see <xref target="auth-key-id"/>.</t>
  <t>Verify Signature_or_MAC_3 using the algorithm in the selected cipher suite. The verification process depends on the method, see <xref target="asym-msg3-proc"/>.</t>
  <t>Pass the connection identifiers (C_I, C_R), and the application algorithms in the selected cipher suite to the security application. The application can now derive application keys using the EDHOC-Exporter interface.</t>
</list></t>

<t>If any processing step fails, the Responder SHOULD send an EDHOC error message back, formatted as defined in <xref target="error"/>. Sending error messages is essential for debugging but MAY e.g.be skipped if a session cannot be found or due to denial of service reasons, see <xref target="security"/>. If an error message is sent, the session MUST be discontinued.</t>

<t>After verifying message_3, the Responder is assured that the Initiator has calculated the key PRK_4x3m (explicit key confirmation) and that no other party than the Responder can compute the key. The Responder can securely send protected application data and store the keying material PRK_4x3m and TH_4.</t>

</section>
</section>
<section anchor="m4" title="EDHOC Message 4">

<t>This section specifies message_4 which is OPTIONAL to support. Key confirmation is normally provided by sending an application message from the Responder to the Initiator protected with a key derived with the EDHOC-Exporter, e.g., using OSCORE (see <xref target="transfer"/>). In deployments where no protected application message is sent from the Responder to the Initiator, the Responder MUST send message_4. Two examples of such deployments:</t>

<t><list style="numbers">
  <t>When EDHOC is only used for authentication and no application data is sent.</t>
  <t>When application data is only sent from the Initiator to the Responder.</t>
</list></t>

<t>Further considerations are provided in <xref target="applicability"/>.</t>

<section anchor="asym-msg4-form" title="Formatting of Message 4">

<t>message_4 SHALL be a CBOR Sequence (see <xref target="CBOR"/>) as defined below</t>

<figure><artwork type="CDDL"><![CDATA[
message_4 = (
  CIPHERTEXT_4 : bstr,
)
]]></artwork></figure>

</section>
<section anchor="asym-msg4-proc" title="Responder Processing of Message 4">

<t>The Responder SHALL compose message_4 as follows:</t>

<t><list style="symbols">
  <t>Compute a COSE_Encrypt0 as defined in Section 5.3 of <xref target="I-D.ietf-cose-rfc8152bis-struct"/>, with the EDHOC AEAD algorithm in the selected cipher suite, and the following parameters. The protected header SHALL be empty.  <list style="symbols">
      <t>protected = h’’</t>
      <t>external_aad = TH_4</t>
      <t>plaintext = ( ? EAD_4 )</t>
    </list>
where EAD_4 is protected external authorization data, see <xref target="AD"/>. COSE constructs the input to the AEAD <xref target="RFC5116"/> as follows:  <list style="symbols">
      <t>Key K = EDHOC-Exporter( “EDHOC_message_4_Key”, h’’, length )</t>
      <t>Nonce N = EDHOC-Exporter( “EDHOC_message_4_Nonce”, h’’, length )</t>
      <t>Plaintext P = ( ? EAD_4 )</t>
      <t>Associated data A = [ “Encrypt0”, h’’, TH_4 ]</t>
    </list>
CIPHERTEXT_4 is the ‘ciphertext’ of the COSE_Encrypt0.</t>
  <t>Encode message_4 as a sequence of CBOR encoded data items as specified in <xref target="asym-msg4-form"/>.</t>
</list></t>

</section>
<section anchor="initiator-processing-of-message-4" title="Initiator Processing of Message 4">

<t>The Initiator SHALL process message_4 as follows:</t>

<t><list style="symbols">
  <t>Decode message_4 (see <xref target="CBOR"/>).</t>
  <t>Retrieve the protocol state using the message correlation provided by the transport (e.g., the CoAP Token and the 5-tuple as a client, or the prepended C_I as a server).</t>
  <t>Decrypt and verify the outer COSE_Encrypt0 as defined in Section 5.3 of <xref target="I-D.ietf-cose-rfc8152bis-struct"/>, with the EDHOC AEAD algorithm in the selected cipher suite,  and the parameters defined in <xref target="asym-msg4-proc"/>.</t>
  <t>Pass EAD_4 to the security application.</t>
</list></t>

<t>If any verification step fails the Initiator MUST send an EDHOC error message back, formatted as defined in <xref target="error"/>, and the session MUST be discontinued.</t>

</section>
</section>
</section>
<section anchor="error" title="Error Handling">

<t>This section defines the format for error messages.</t>

<t>An EDHOC error message can be sent by either endpoint as a reply to any non-error EDHOC message. How errors at the EDHOC layer are transported depends on lower layers, which need to enable error messages to be sent and processed as intended.</t>

<t>Errors in EDHOC are fatal. After sending an error message, the sender MUST discontinue the protocol. The receiver SHOULD treat an error message as an indication that the other party likely has discontinued the protocol. But as the error message is not authenticated, a received error message might also have been sent by an attacker and the receiver MAY therefore try to continue the protocol.</t>

<t>error SHALL be a CBOR Sequence (see <xref target="CBOR"/>) as defined below</t>

<figure title="EDHOC Error Message" anchor="fig-error-message"><artwork type="CDDL"><![CDATA[
error = (
  ERR_CODE : int,
  ERR_INFO : any
)
]]></artwork></figure>

<t>where:</t>

<t><list style="symbols">
  <t>ERR_CODE - error code encoded as an integer. The value 0 is used for success, all other values (negative or positive) indicate errors.</t>
  <t>ERR_INFO - error information. Content and encoding depend on error code.</t>
</list></t>

<t>The remainder of this section specifies the currently defined error codes, see <xref target="fig-error-codes"/>. Error codes 1 and 2 MUST be supported. Additional error codes and corresponding error information may be specified.</t>

<figure title="Error Codes and Error Information" anchor="fig-error-codes"><artwork><![CDATA[
+----------+---------------+----------------------------------------+
| ERR_CODE | ERR_INFO Type | Description                            |
+==========+===============+========================================+
|        0 | any           | Success                                |
+----------+---------------+----------------------------------------+
|        1 | tstr          | Unspecified                            |
+----------+---------------+----------------------------------------+
|        2 | SUITES_R      | Wrong selected cipher suite            |
+----------+---------------+----------------------------------------+
]]></artwork></figure>

<section anchor="success" title="Success">

<t>Error code 0 MAY be used internally in an application to indicate success, e.g. in log files. ERR_INFO can contain any type of CBOR item. Error code 0 MUST NOT be used as part of the EDHOC message exchange flow.</t>

</section>
<section anchor="unspecified" title="Unspecified">

<t>Error code 1 is used for errors that do not have a specific error code defined. ERR_INFO MUST be a text string containing a human-readable diagnostic message written in English. The diagnostic text message is mainly intended for software engineers that during debugging need to interpret it in the context of the EDHOC specification. The diagnostic message SHOULD be provided to the calling application where it SHOULD be logged.</t>

</section>
<section anchor="wrong-selected" title="Wrong Selected Cipher Suite">

<t>Error code 2 MUST only be used in a response to message_1 in case the cipher suite selected by the Initiator is not supported by the Responder, or if the Responder supports a cipher suite more preferred by the Initiator than the selected cipher suite, see <xref target="resp-proc-msg1"/>. ERR_INFO is of type SUITES_R:</t>

<figure><artwork type="CDDL"><![CDATA[
SUITES_R : [ supported : 2* suite ] / suite
]]></artwork></figure>

<t>If the Responder does not support the selected cipher suite, then SUITES_R MUST include one or more supported cipher suites. If the Responder does not support the selected cipher suite, but supports another cipher suite in SUITES_I, then SUITES_R MUST include the first supported cipher suite in SUITES_I.</t>

<section anchor="cipher-suite-negotiation" title="Cipher Suite Negotiation">

<t>After receiving SUITES_R, the Initiator can determine which cipher suite to select for the next EDHOC run with the Responder.</t>

<t>If the Initiator intends to contact the Responder in the future, the Initiator SHOULD remember which selected cipher suite to use until the next message_1 has been sent, otherwise the Initiator and Responder will likely run into an infinite loop. After a successful run of EDHOC, the Initiator MAY remember the selected cipher suite to use in future EDHOC runs. Note that if the Initiator or Responder is updated with new cipher suite policies, any cached information may be outdated.</t>

</section>
<section anchor="ex-neg" title="Examples">

<t>Assume that the Initiator supports the five cipher suites 5, 6, 7, 8, and 9 in decreasing order of preference. Figures <xref target="fig-error1" format="counter"/> and <xref target="fig-error2" format="counter"/> show examples of how the Initiator can truncate SUITES_I and how SUITES_R is used by Responders to give the Initiator information about the cipher suites that the Responder supports.</t>

<t>In the first example (<xref target="fig-error1"/>), the Responder supports cipher suite 6 but not the initially selected cipher suite 5.</t>

<figure title="Example of Responder supporting suite 6 but not suite 5." anchor="fig-error1"><artwork align="center"><![CDATA[
Initiator                                                   Responder
|              METHOD, SUITES_I = 5, G_X, C_I, EAD_1                |
+------------------------------------------------------------------>|
|                             message_1                             |
|                                                                   |
|                      DIAG_MSG, SUITES_R = 6                       |
|<------------------------------------------------------------------+
|                               error                               |
|                                                                   |
|           METHOD, SUITES_I = [6, 5, 6], G_X, C_I, EAD_1           |
+------------------------------------------------------------------>|
|                             message_1                             |
]]></artwork></figure>

<t>In the second example (<xref target="fig-error2"/>), the Responder supports cipher suites 8 and 9 but not the more preferred (by the Initiator) cipher suites 5, 6 or 7. To illustrate the negotiation mechanics we let the Initiator first make a guess that the Responder supports suite 6 but not suite 5. Since the Responder supports neither 5 nor 6, it responds with an error and SUITES_R, after which the Initiator selects its most preferred supported suite. The order of cipher suites in SUITES_R does not matter. (If the Responder had supported suite 5, it would include it in SUITES_R of the response, and it would in that case have become the selected suite in the second message_1.)</t>

<figure title="Example of Responder supporting suites 8 and 9 but not 5, 6 or 7." anchor="fig-error2"><artwork align="center"><![CDATA[
Initiator                                                   Responder
|          METHOD, SUITES_I = [6, 5, 6], G_X, C_I, EAD_1            |
+------------------------------------------------------------------>|
|                             message_1                             |
|                                                                   |
|                     DIAG_MSG, SUITES_R = [9, 8]                   |
|<------------------------------------------------------------------+
|                               error                               |
|                                                                   |
|         METHOD, SUITES_I = [8, 5, 6, 7, 8], G_X, C_I, EAD_1       |
+------------------------------------------------------------------>|
|                             message_1                             |
]]></artwork></figure>

<t>Note that the Initiator’s list of supported cipher suites and order of preference is fixed (see <xref target="asym-msg1-form"/> and <xref target="init-proc-msg1"/>). Furthermore, the Responder shall only accept message_1 if the selected cipher suite is the first cipher suite in SUITES_I that the Responder supports (see <xref target="resp-proc-msg1"/>). Following this procedure ensures that the selected cipher suite is the most preferred (by the Initiator) cipher suite supported by both parties.</t>

<t>If the selected cipher suite is not the first cipher suite which the Responder supports in SUITES_I received in message_1, then Responder MUST discontinue the protocol, see <xref target="resp-proc-msg1"/>. If SUITES_I in message_1 is manipulated then the integrity verification of message_2 containing the transcript hash TH_2 will fail and the Initiator will discontinue the protocol.</t>

</section>
</section>
</section>
<section anchor="security" title="Security Considerations">

<section anchor="sec-prop" title="Security Properties">

<t>EDHOC inherits its security properties from the theoretical SIGMA-I protocol <xref target="SIGMA"/>. Using the terminology from <xref target="SIGMA"/>, EDHOC provides perfect forward secrecy, mutual authentication with aliveness, consistency, and peer awareness. As described in <xref target="SIGMA"/>, peer awareness is provided to the Responder, but not to the Initiator.</t>

<t>EDHOC protects the credential identifier of the Initiator against active attacks and the credential identifier of the Responder against passive attacks. The roles should be assigned to protect the most sensitive identity/identifier, typically that which is not possible to infer from routing information in the lower layers.</t>

<t>Compared to <xref target="SIGMA"/>, EDHOC adds an explicit method type and expands the message authentication coverage to additional elements such as algorithms, external authorization data, and previous messages. This protects against an attacker replaying messages or injecting messages from another session.</t>

<t>EDHOC also adds selection of connection identifiers and downgrade protected negotiation of cryptographic parameters, i.e. an attacker cannot affect the negotiated parameters. A single session of EDHOC does not include negotiation of cipher suites, but it enables the Responder to verify that the selected cipher suite is the most preferred cipher suite by the Initiator which is supported by both the Initiator and the Responder.</t>

<t>As required by <xref target="RFC7258"/>, IETF protocols need to mitigate pervasive monitoring when possible. One way to mitigate pervasive monitoring is to use a key exchange that provides perfect forward secrecy. EDHOC therefore only supports methods with perfect forward secrecy. To limit the effect of breaches, it is important to limit the use of symmetrical group keys for bootstrapping. EDHOC therefore strives to make the additional cost of using raw public keys and self-signed certificates as small as possible. Raw public keys and self-signed certificates are not a replacement for a public key infrastructure, but SHOULD be used instead of symmetrical group keys for bootstrapping.</t>

<t>Compromise of the long-term keys (private signature or static DH keys) does not compromise the security of completed EDHOC exchanges. Compromising the private authentication keys of one party lets an active attacker impersonate that compromised party in EDHOC exchanges with other parties, but does not let the attacker impersonate other parties in EDHOC exchanges with the compromised party. Compromise of the long-term keys does not enable a passive attacker to compromise future session keys. Compromise of the HDKF input parameters (ECDH shared secret) leads to compromise of all session keys derived from that compromised shared secret. Compromise of one session key does not compromise other session keys. Compromise of PRK_4x3m leads to compromise of all exported keying material derived after the last invocation of the EDHOC-KeyUpdate function.</t>

<t>EDHOC provides a minimum of 64-bit security against online brute force attacks and a minimum of 128-bit security against offline brute force attacks. This is in line with IPsec, TLS, and COSE. To break 64-bit security against online brute force an attacker would on average have to send 4.3 billion messages per second for 68 years, which is infeasible in constrained IoT radio technologies.</t>

<t>After sending message_3, the Initiator is assured that no other party than the Responder can compute the key PRK_4x3m (implicit key authentication). The Initiator does however not know that the Responder has actually computed the key PRK_4x3m. While the Initiator can securely send protected application data, the Initiator SHOULD NOT permanently store the keying material PRK_4x3m and TH_4 until the Initiator is assured that the Responder has actually computed the key PRK_4x3m (explicit key confirmation). Explicit key confirmation is e.g. assured when the Initiator has verified an OSCORE message or message_4 from the Responder. After verifying message_3, the Responder is assured that the Initiator has calculated the key PRK_4x3m (explicit key confirmation) and that no other party than the Responder can compute the key. The Responder can securely send protected application data and store the keying material PRK_4x3m and TH_4.</t>

<t>Key compromise impersonation (KCI): In EDHOC authenticated with signature keys, EDHOC provides KCI protection against an attacker having access to the long term key or the ephemeral secret key. With static Diffie-Hellman key authentication, KCI protection would be provided against an attacker having access to the long-term Diffie-Hellman key, but not to an attacker having access to the ephemeral secret key. Note that the term KCI has typically been used for compromise of long-term keys, and that an attacker with access to the ephemeral secret key can only attack that specific protocol run.</t>

<t>Repudiation: In EDHOC authenticated with signature keys, the Initiator could theoretically prove that the Responder performed a run of the protocol by presenting the private ephemeral key, and vice versa. Note that storing the private ephemeral keys violates the protocol requirements. With static Diffie-Hellman key authentication, both parties can always deny having participated in the protocol.</t>

<t>Two earlier versions of EDHOC have been formally analyzed <xref target="Norrman20"/> <xref target="Bruni18"/> and the specification has been updated based on the analysis.</t>

</section>
<section anchor="cryptographic-considerations" title="Cryptographic Considerations">
<t>The security of the SIGMA protocol requires the MAC to be bound to the identity of the signer. Hence the message authenticating functionality of the authenticated encryption in EDHOC is critical: authenticated encryption MUST NOT be replaced by plain encryption only, even if authentication is provided at another level or through a different mechanism. EDHOC implements SIGMA-I using a MAC-then-Sign approach.</t>

<t>To reduce message overhead EDHOC does not use explicit nonces and instead rely on the ephemeral public keys to provide randomness to each session. A good amount of randomness is important for the key generation, to provide liveness, and to protect against interleaving attacks. For this reason, the ephemeral keys MUST NOT be reused, and both parties SHALL generate fresh random ephemeral key pairs.</t>

<t>As discussed the <xref target="SIGMA"/>, the encryption of message_2 does only need to protect against passive attacker as active attackers can always get the Responders identity by sending their own message_1. EDHOC uses the Expand function (typically HKDF-Expand) as a binary additive stream cipher. HKDF-Expand provides better confidentiality than AES-CTR but is not often used as it is slow on long messages, and most applications require both IND-CCA confidentiality as well as integrity protection. For the encryption of message_2, any speed difference is negligible, IND-CCA does not increase security, and integrity is provided by the inner MAC (and signature depending on method).</t>

<t>The data rates in many IoT deployments are very limited. Given that the application keys are protected as well as the long-term authentication keys they can often be used for years or even decades before the cryptographic limits are reached. If the application keys established through EDHOC need to be renewed, the communicating parties can derive application keys with other labels or run EDHOC again.</t>

<t>Requirement for how to securely generate, validate, and process the ephermeral public keys depend on the elliptic curve. For X25519 and X448, the requirements are defined in <xref target="RFC7748"/>. For secp256r1, secp384r1, and secp521r1, the requirements are defined in Section 5 of <xref target="SP-800-56A"/>. For secp256r1, secp384r1, and secp521r1, at least partial public-key validation MUST be done.</t>

</section>
<section anchor="cipher-suites-and-cryptographic-algorithms" title="Cipher Suites and Cryptographic Algorithms">

<t>For many constrained IoT devices it is problematic to support more than one cipher suite. Existing devices can be expected to support either ECDSA or EdDSA. To enable as much interoperability as we can reasonably achieve, less constrained devices SHOULD implement both cipher suite 0 (AES-CCM-16-64-128, SHA-256, X25519, EdDSA, AES-CCM-16-64-128, SHA-256) and cipher suite 2 (AES-CCM-16-64-128, SHA-256, P-256, ES256, AES-CCM-16-64-128, SHA-256). Constrained endpoints SHOULD implement cipher suite 0 or cipher suite 2. Implementations only need to implement the algorithms needed for their supported methods.</t>

<t>When using private cipher suite or registering new cipher suites, the choice of key length used in the different algorithms needs to be harmonized, so that a sufficient security level is maintained for certificates, EDHOC, and the protection of application data. The Initiator and the Responder should enforce a minimum security level.</t>

<t>The hash algorithms SHA-1 and SHA-256/64 (256-bit Hash truncated to 64-bits) SHALL NOT be supported for use in EDHOC except for certificate identification with x5u and c5u. Note that secp256k1 is only defined for use with ECDSA and not for ECDH.</t>

</section>
<section anchor="unprot-data" title="Unprotected Data">

<t>The Initiator and the Responder must make sure that unprotected data and metadata do not reveal any sensitive information. This also applies for encrypted data sent to an unauthenticated party. In particular, it applies to EAD_1, ID_CRED_R, EAD_2, and error messages. Using the same EAD_1 in several EDHOC sessions allows passive eavesdroppers to correlate the different sessions. Another consideration is that the list of supported cipher suites may potentially be used to identify the application.</t>

<t>The Initiator and the Responder must also make sure that unauthenticated data does not trigger any harmful actions. In particular, this applies to EAD_1 and error messages.</t>

</section>
<section anchor="dos" title="Denial-of-Service">

<t>EDHOC itself does not provide countermeasures against Denial-of-Service attacks. By sending a number of new or replayed message_1 an attacker may cause the Responder to allocate state, perform cryptographic operations, and amplify messages. To mitigate such attacks, an implementation SHOULD rely on lower layer mechanisms such as the Echo option in CoAP <xref target="I-D.ietf-core-echo-request-tag"/> that forces the initiator to demonstrate reachability at its apparent network address.</t>

<t>An attacker can also send faked message_2, message_3, message_4, or error in an attempt to trick the receiving party to send an error message and discontinue the session. EDHOC implementations MAY evaluate if a received message is likely to have be forged by and attacker and ignore it without sending an error message or discontinuing the session.</t>

</section>
<section anchor="implementation-considerations" title="Implementation Considerations">

<t>The availability of a secure random number generator is essential for the security of EDHOC. If no true random number generator is available, a truly random seed MUST be provided from an external source and used with a cryptographically secure pseudorandom number generator. As each pseudorandom number must only be used once, an implementation need to get a new truly random seed after reboot, or continuously store state in nonvolatile memory, see (<xref target="RFC8613"/>, Appendix B.1.1) for issues and solution approaches for writing to nonvolatile memory. Intentionally or unintentionally weak or predictable pseudorandom number generators can be abused or exploited for malicious purposes. <xref target="RFC8937"/> describes a way for security protocol implementations to augment their (pseudo)random number generators using a long-term private keys and a deterministic signature function. This improves randomness from broken or otherwise subverted random number generators. The same idea can be used with other secrets and functions such as a Diffie-Hellman function or a symmetric secret and a PRF like HMAC or KMAC. It is RECOMMENDED to not trust a single source of randomness and to not put unaugmented random numbers on the wire.</t>

<t>If ECDSA is supported, “deterministic ECDSA” as specified in <xref target="RFC6979"/> MAY be used. Pure deterministic elliptic-curve signatures such as deterministic ECDSA and EdDSA have gained popularity over randomized ECDSA as their security do not depend on a source of high-quality randomness. Recent research has however found that implementations of these signature algorithms may be vulnerable to certain side-channel and
fault injection attacks due to their determinism. See e.g. Section 1 of <xref target="I-D.mattsson-cfrg-det-sigs-with-noise"/> for a list of attack papers. As suggested in Section 6.1.2 of <xref target="I-D.ietf-cose-rfc8152bis-algs"/> this can be addressed by combining randomness and determinism.</t>

<t>All private keys, symmetric keys, and IVs MUST be secret. Implementations should provide countermeasures to side-channel attacks such as timing attacks. Intermediate computed values such as ephemeral ECDH keys and ECDH shared secrets MUST be deleted after key derivation is completed.</t>

<t>The Initiator and the Responder are responsible for verifying the integrity of certificates. The selection of trusted CAs should be done very carefully and certificate revocation should be supported. The private authentication keys MUST be kept secret.</t>

<t>The Initiator and the Responder are allowed to select the connection identifiers C_I and C_R, respectively, for the other party to use in the ongoing EDHOC protocol as well as in a subsequent application protocol (e.g. OSCORE <xref target="RFC8613"/>). The choice of connection identifier is not security critical in EDHOC but intended to simplify the retrieval of the right security context in combination with using short identifiers. If the wrong connection identifier of the other party is used in a protocol message it will result in the receiving party not being able to retrieve a security context (which will terminate the protocol) or retrieve the wrong security context (which also terminates the protocol as the message cannot be verified).</t>

<t>If two nodes unintentionally initiate two simultaneous EDHOC message exchanges with each other even if they only want to complete a single EDHOC message exchange, they MAY terminate the exchange with the lexicographically smallest G_X. If the two G_X values are equal, the received message_1 MUST be discarded to mitigate reflection attacks. Note that in the case of two simultaneous EDHOC exchanges where the nodes only complete one and where the nodes have different preferred cipher suites, an attacker can affect which of the two nodes’ preferred cipher suites will be used by blocking the other exchange.</t>

<t>If supported by the device, it is RECOMMENDED that at least the long-term private keys are stored in a Trusted Execution Environment (TEE) and that sensitive operations using these keys are performed inside the TEE. To achieve even higher security it is RECOMMENDED that in additional operations such as ephemeral key generation, all computations of shared secrets, and storage of the pseudorandom keys (PRK) can be done inside the TEE. The use of a TEE enforces that code within that environment cannot be tampered with, and that any data used by such code cannot be read or tampered with by code outside that environment. Note that non-EDHOC code inside the TEE might still be able to read EDHOC data and tamper with EDHOC code, to protect against such attacks EDHOC needs to be in its own zone. To provide better protection against some forms of physical attacks, sensitive EDHOC data should be stored inside the SoC or encrypted and integrity protected when sent on a data bus (e.g. between the CPU and RAM or Flash). Secure boot can be used to increase the security of code and data in the Rich Execution Environment (REE) by validating the REE image.</t>

</section>
</section>
<section anchor="iana" title="IANA Considerations">

<section anchor="exporter-label" title="EDHOC Exporter Label">

<t>IANA has created a new registry titled “EDHOC Exporter Label” under the new heading “EDHOC”. The registration procedure is “Expert Review”. The columns of the registry are Label, Description, and Reference. All columns are text strings. The initial contents of the registry are:</t>

<figure><artwork><![CDATA[
Label: EDHOC_message_4_Key
Description: Key used to protect EDHOC message_4
Reference: [[this document]]
]]></artwork></figure>

<figure><artwork><![CDATA[
Label: EDHOC_message_4_Nonce
Description: Nonce used to protect EDHOC message_4
Reference: [[this document]]
]]></artwork></figure>

<figure><artwork><![CDATA[
Label: OSCORE Master Secret
Description: Derived OSCORE Master Secret
Reference: [[this document]]
]]></artwork></figure>

<figure><artwork><![CDATA[
Label: OSCORE Master Salt
Description: Derived OSCORE Master Salt
Reference: [[this document]]
]]></artwork></figure>

</section>
<section anchor="suites-registry" title="EDHOC Cipher Suites Registry">

<t>IANA has created a new registry titled “EDHOC Cipher Suites” under the new heading “EDHOC”. The registration procedure is “Expert Review”. The columns of the registry are Value, Array, Description, and Reference, where Value is an integer and the other columns are text strings. The initial contents of the registry are:</t>

<figure><artwork><![CDATA[
Value: -24
Algorithms: N/A
Desc: Reserved for Private Use
Reference: [[this document]]
]]></artwork></figure>

<figure><artwork><![CDATA[
Value: -23
Algorithms: N/A
Desc: Reserved for Private Use
Reference: [[this document]]
]]></artwork></figure>

<figure><artwork><![CDATA[
Value: -22
Algorithms: N/A
Desc: Reserved for Private Use
Reference: [[this document]]
]]></artwork></figure>

<figure><artwork><![CDATA[
Value: -21
Algorithms: N/A
Desc: Reserved for Private Use
Reference: [[this document]]
]]></artwork></figure>

<figure><artwork><![CDATA[
Value: 0
Array: 10, -16, 4, -8, 10, -16
Desc: AES-CCM-16-64-128, SHA-256, X25519, EdDSA,
      AES-CCM-16-64-128, SHA-256
Reference: [[this document]]
]]></artwork></figure>

<figure><artwork><![CDATA[
Value: 1
Array: 30, -16, 4, -8, 10, -16
Desc: AES-CCM-16-128-128, SHA-256, X25519, EdDSA,
      AES-CCM-16-64-128, SHA-256
Reference: [[this document]]
]]></artwork></figure>

<figure><artwork><![CDATA[
Value: 2
Array: 10, -16, 1, -7, 10, -16
Desc: AES-CCM-16-64-128, SHA-256, P-256, ES256,
      AES-CCM-16-64-128, SHA-256
Reference: [[this document]]
]]></artwork></figure>

<figure><artwork><![CDATA[
Value: 3
Array: 30, -16, 1, -7, 10, -16
Desc: AES-CCM-16-128-128, SHA-256, P-256, ES256,
      AES-CCM-16-64-128, SHA-256
Reference: [[this document]]
]]></artwork></figure>

<figure><artwork><![CDATA[
Value: 4
Array: 24, -16, 4, -8, 24, -16
Desc: ChaCha20/Poly1305, SHA-256, X25519, EdDSA,
      ChaCha20/Poly1305, SHA-256
Reference: [[this document]]
]]></artwork></figure>

<figure><artwork><![CDATA[
Value: 5
Array: 24, -16, 1, -7, 24, -16
Desc: ChaCha20/Poly1305, SHA-256, P-256, ES256,
      ChaCha20/Poly1305, SHA-256
Reference: [[this document]]
]]></artwork></figure>

<figure><artwork><![CDATA[
Value: 6
Array: 1, -16, 4, -7, 1, -16
Desc: A128GCM, SHA-256, X25519, ES256,
      A128GCM, SHA-256
Reference: [[this document]]
]]></artwork></figure>

<figure><artwork><![CDATA[
Value: 24
Array: 3, -43, 2, -35, 3, -43 
Desc: A256GCM, SHA-384, P-384, ES384,
      A256GCM, SHA-384
Reference: [[this document]]
]]></artwork></figure>

<figure><artwork><![CDATA[
Value: 25
Array: 24, -45, 5, -8, 24, -45
Desc: ChaCha20/Poly1305, SHAKE256, X448, EdDSA,
      ChaCha20/Poly1305, SHAKE256
Reference: [[this document]]
]]></artwork></figure>

</section>
<section anchor="method-types" title="EDHOC Method Type Registry">

<t>IANA has created a new registry entitled “EDHOC Method Type” under the new heading “EDHOC”. The registration procedure is “Expert Review”. The columns of the registry are Value, Description, and Reference, where Value is an integer and the other columns are text strings. The initial contents of the registry is shown in <xref target="fig-method-types"/>.</t>

</section>
<section anchor="edhoc-error-codes-registry" title="EDHOC Error Codes Registry">

<t>IANA has created a new registry entitled “EDHOC Error Codes” under the new heading “EDHOC”. The registration procedure is “Specification Required”. The columns of the registry are ERR_CODE, ERR_INFO Type and Description, where ERR_CODE is an integer, ERR_INFO is a CDDL defined type, and Description is a text string. The initial contents of the registry is shown in <xref target="fig-error-codes"/>.</t>

</section>
<section anchor="cose" title="COSE Header Parameters Registry">

<t>This document registers the following entries in the “COSE Header Parameters” registry under the “CBOR Object Signing and Encryption (COSE)” heading. The value of the ‘cwt’ header parameter is a CWT <xref target="RFC8392"/> or an unprotected CWT Claims Set <xref target="I-D.ietf-rats-uccs"/>.</t>

<figure><artwork><![CDATA[
+-----------+-------+----------------+------------------------------+
| Name      | Label | Value Type     | Description                  |
+===========+=======+================+==============================+
| cwt       |  TBD1 | COSE_Messages  | A CBOR Web Token (CWT) or an |
|           |       | / map          | unprotected CWT Claims Set   |
+-----------+-------+----------------+------------------------------+
]]></artwork></figure>

</section>
<section anchor="kid2-header-param" title="COSE Header Parameters Registry">

<t>IANA has added the COSE header parameter ‘kid2’ to the COSE Header Parameters registry. The kid2 parameter may point to a COSE key common parameter ‘kid’ or ‘kid2’. The kid2 parameter can be used to identify a key stored in a “raw” COSE_Key, in a CWT, or in a certificate. The Value Reference for this item is empty and omitted from the table below.</t>

<figure><artwork><![CDATA[
+------+-------+------------+----------------+-------------------+
| Name | Label | Value Type | Description    | Reference         |
+------+-------+------------+----------------+-------------------+
| kid2 | TBD   | bstr / int | Key identifier | [[This document]] |
+------+-------+------------+----------------+-------------------+
]]></artwork></figure>

</section>
<section anchor="kid2-key-common-param" title="COSE Key Common Parameters Registry">

<t>IANA has added the COSE key common parameter ‘kid2’ to the COSE Key Common Parameters registry. The Value Reference for this item is empty and omitted from the table below.</t>

<figure><artwork><![CDATA[
+------+-------+------------+----------------+-------------------+
| Name | Label | Value Type | Description    | Reference         |
+------+-------+------------+----------------+-------------------+
| kid2 | TBD   | bstr / int | Key identifi-  | [[This document]] |
|      |       |            | cation value - |                   |
|      |       |            | match to kid2  |                   |
|      |       |            | in message     |                   |
+------+-------+------------+----------------+-------------------+
]]></artwork></figure>

</section>
<section anchor="the-well-known-uri-registry" title="The Well-Known URI Registry">

<t>IANA has added the well-known URI ‘edhoc’ to the Well-Known URIs registry.</t>

<t><list style="symbols">
  <t>URI suffix: edhoc</t>
  <t>Change controller: IETF</t>
  <t>Specification document(s): [[this document]]</t>
  <t>Related information: None</t>
</list></t>

</section>
<section anchor="media-types-registry" title="Media Types Registry">

<t>IANA has added the media type ‘application/edhoc’ to the Media Types registry.</t>

<t><list style="symbols">
  <t>Type name: application</t>
  <t>Subtype name: edhoc</t>
  <t>Required parameters: N/A</t>
  <t>Optional parameters: N/A</t>
  <t>Encoding considerations: binary</t>
  <t>Security considerations: See Section 7 of this document.</t>
  <t>Interoperability considerations: N/A</t>
  <t>Published specification: [[this document]] (this document)</t>
  <t>Applications that use this media type: To be identified</t>
  <t>Fragment identifier considerations: N/A</t>
  <t>Additional information:  <list style="symbols">
      <t>Magic number(s): N/A</t>
      <t>File extension(s): N/A</t>
      <t>Macintosh file type code(s): N/A</t>
    </list></t>
  <t>Person &amp; email address to contact for further information: See “Authors’ Addresses” section.</t>
  <t>Intended usage: COMMON</t>
  <t>Restrictions on usage: N/A</t>
  <t>Author: See “Authors’ Addresses” section.</t>
  <t>Change Controller: IESG</t>
</list></t>

</section>
<section anchor="coap-content-formats-registry" title="CoAP Content-Formats Registry">

<t>IANA has added the media type ‘application/edhoc’ to the CoAP Content-Formats registry.</t>

<t><list style="symbols">
  <t>Media Type: application/edhoc</t>
  <t>Encoding:</t>
  <t>ID: TBD42</t>
  <t>Reference: [[this document]]</t>
</list></t>

</section>
<section anchor="iana-ead" title="EDHOC External Authorization Data">

<t>IANA has created a new registry entitled “EDHOC External Authorization Data” 
under the new heading “EDHOC”. The registration procedure is “Expert Review”. 
The columns of the registry are Value, Description, and Reference, where Value is 
an integer and the other columns are text strings.</t>

</section>
<section anchor="expert-review-instructions" title="Expert Review Instructions">

<t>The IANA Registries established in this document is defined as “Expert Review”. This section gives some general guidelines for what the experts should be looking for, but they are being designated as experts for a reason so they should be given substantial latitude.</t>

<t>Expert reviewers should take into consideration the following points:</t>

<t><list style="symbols">
  <t>Clarity and correctness of registrations. Experts are expected to check the clarity of purpose and use of the requested entries. Expert needs to make sure the values of algorithms are taken from the right registry, when that’s required. Expert should consider requesting an opinion on the correctness of registered parameters from relevant IETF working groups. Encodings that do not meet these objective of clarity and completeness should not be registered.</t>
  <t>Experts should take into account the expected usage of fields when approving point assignment. The length of the encoded value should be weighed against how many code points of that length are left, the size of device it will be used on, and the number of code points left that encode to that size.</t>
  <t>Specifications are recommended. When specifications are not provided, the description provided needs to have sufficient information to verify the points above.</t>
</list></t>

</section>
</section>


  </middle>

  <back>

    <references title='Normative References'>

&RFC2119;
&RFC5116;
&RFC5869;
&RFC6090;
&RFC6979;
&RFC7252;
&RFC7748;
&RFC8949;
&RFC7959;
&RFC8174;
&RFC8376;
&RFC8392;
&RFC8610;
&RFC8613;
&RFC8724;
&RFC8742;
&I-D.ietf-cose-rfc8152bis-struct;
&I-D.ietf-cose-rfc8152bis-algs;
&I-D.ietf-cose-x509;
&I-D.ietf-core-echo-request-tag;
&I-D.ietf-lake-reqs;
&I-D.ietf-rats-uccs;


    </references>

    <references title='Informative References'>

&RFC7228;
&RFC7258;
&RFC7296;
&RFC8446;
&RFC8937;
&I-D.ietf-core-resource-directory;
&I-D.ietf-lwig-security-protocol-comparison;
&I-D.ietf-tls-dtls13;
&I-D.selander-ace-ake-authz;
&I-D.ietf-core-oscore-edhoc;
&I-D.ietf-cose-cbor-encoded-cert;
&I-D.mattsson-cfrg-det-sigs-with-noise;
<reference anchor="SP-800-56A" target="https://doi.org/10.6028/NIST.SP.800-56Ar3">
  <front>
    <title>Recommendation for Pair-Wise Key-Establishment Schemes Using Discrete Logarithm Cryptography</title>
    <author initials="E." surname="Barker">
      <organization></organization>
    </author>
    <author initials="L." surname="Chen">
      <organization></organization>
    </author>
    <author initials="A." surname="Roginsky">
      <organization></organization>
    </author>
    <author initials="A." surname="Vassilev">
      <organization></organization>
    </author>
    <author initials="R." surname="Davis">
      <organization></organization>
    </author>
    <date year="2018" month="April"/>
  </front>
  <seriesInfo name="NIST" value="Special Publication 800-56A Revision 3"/>
</reference>
<reference anchor="SECG" target="https://www.secg.org/sec1-v2.pdf">
  <front>
    <title>Standards for Efficient Cryptography 1 (SEC 1)</title>
    <author >
      <organization></organization>
    </author>
    <date year="2009" month="May"/>
  </front>
</reference>
<reference anchor="SIGMA" target="http://webee.technion.ac.il/~hugo/sigma-pdf.pdf">
  <front>
    <title>SIGMA - The 'SIGn-and-MAc' Approach to Authenticated Diffie-Hellman and Its Use in the IKE-Protocols (Long version)</title>
    <author initials="H." surname="Krawczyk">
      <organization></organization>
    </author>
    <date year="2003" month="June"/>
  </front>
</reference>
<reference anchor="CNSA" target="https://apps.nsa.gov/iaarchive/programs/iad-initiatives/cnsa-suite.cfm">
  <front>
    <title>Commercial National Security Algorithm Suite</title>
    <author initials="." surname="(Placeholder)">
      <organization></organization>
    </author>
    <date year="2015" month="August"/>
  </front>
</reference>
<reference anchor="Norrman20" target="https://arxiv.org/abs/2007.11427">
  <front>
    <title>Formal Analysis of EDHOC Key Establishment for Constrained IoT Devices</title>
    <author initials="K." surname="Norrman">
      <organization></organization>
    </author>
    <author initials="V." surname="Sundararajan">
      <organization></organization>
    </author>
    <author initials="A." surname="Bruni">
      <organization></organization>
    </author>
    <date year="2020" month="September"/>
  </front>
</reference>
<reference anchor="Bruni18" target="https://www.springerprofessional.de/en/formal-verification-of-ephemeral-diffie-hellman-over-cose-edhoc/16284348">
  <front>
    <title>Formal Verification of Ephemeral Diffie-Hellman Over COSE (EDHOC)</title>
    <author initials="A." surname="Bruni">
      <organization></organization>
    </author>
    <author initials="T." surname="Sahl Jørgensen">
      <organization></organization>
    </author>
    <author initials="T." surname="Grønbech Petersen">
      <organization></organization>
    </author>
    <author initials="C." surname="Schürmann">
      <organization></organization>
    </author>
    <date year="2018" month="November"/>
  </front>
</reference>
<reference anchor="CborMe" target="http://cbor.me/">
  <front>
    <title>CBOR Playground</title>
    <author initials="C." surname="Bormann">
      <organization></organization>
    </author>
    <date year="2018" month="May"/>
  </front>
</reference>


    </references>


<section anchor="transfer" title="Use with OSCORE and Transfer over CoAP">

<t>This sppendix describes how to select EDHOC connection identifiers and derive an OSCORE security context when OSCORE is used with EDHOC, and how to transfer EDHOC messages over CoAP.</t>

<section anchor="edhoc-to-oscore" title="Selecting EDHOC Connection Identifier">

<t>This section specifies a rule for converting from EDHOC connection identifier to OSCORE Sender/Recipient ID. (An identifier is Sender ID or Recipient ID depending on from which endpoint is the point of view, see Section 3.1 of <xref target="RFC8613"/>.)</t>

<t><list style="symbols">
  <t>If the EDHOC connection identifier is numeric, i.e. encoded as a CBOR integer on the wire, it is converted to a (naturally byte-string shaped) OSCORE Sender/Recipient ID equal to its CBOR encoded form.</t>
</list></t>

<t>For example, a numeric C_R equal to 10 (0x0A in CBOR encoding) is converted to a (typically client) Sender ID equal to 0x0A, while a numeric C_I equal to -12 (0x2B in CBOR encoding) is converted to a (typically client) Sender ID equal to 0x2B.</t>

<t><list style="symbols">
  <t>If the EDHOC connection identifier is byte-valued, hence encoded as a CBOR byte string on the wire, it is converted to an OSCORE Sender/Recipient ID equal to the byte string.</t>
</list></t>

<t>For example, a byte-string valued C_R equal to 0xFF (0x41FF in CBOR encoding) is converted to a (typically client) Sender ID equal to 0xFF.</t>

<t>Two EDHOC connection identifiers are called “equivalent” if and only if, by applying the conversion above, they both result in the same OSCORE Sender/Recipient ID. For example, the two EDHOC connection identifiers with CBOR encoding 0x0A (numeric) and 0x410A (byte-valued) are equivalent since they both result in the same OSCORE Sender/Recipient ID 0x0A.</t>

<t>When EDHOC is used to establish an OSCORE security context, the connection identifiers C_I and C_R MUST NOT be equivalent. Furthermore, in case of multiple OSCORE security contexts with potentially different endpoints, to facilitate retrieval of the correct OSCORE security context, an endpoint SHOULD select an EDHOC connection identifier that when converted to OSCORE Recipient ID does not coincide with its other Recipient IDs.</t>

</section>
<section anchor="oscore-ctx-derivation" title="Deriving the OSCORE Security Context">

<t>This section specifies how to use EDHOC output to derive the OSCORE security context.</t>

<t>After successful processing of EDHOC message_3, Client and Server derive Security Context parameters for OSCORE as follows (see Section 3.2 of <xref target="RFC8613"/>):</t>

<t><list style="symbols">
  <t>The Master Secret and Master Salt are derived by using the EDHOC-Exporter interface, see <xref target="exporter"/>.</t>
</list></t>

<t>The EDHOC Exporter Labels for deriving the OSCORE Master Secret and the OSCORE Master Salt, are “OSCORE Master Secret” and “OSCORE Master Salt”, respectively.</t>

<t>The context parameter is h’’ (0x40), the empty CBOR byte string.</t>

<t>By default, key_length is the key length (in bytes) of the application AEAD Algorithm of the selected cipher suite for the EDHOC session. Also by default, salt_length has value 8. The Initiator and Responder MAY agree out-of-band on a longer key_length than the default and on a different salt_length.</t>

<figure><artwork><![CDATA[
Master Secret = EDHOC-Exporter( "OSCORE Master Secret", h'',  key_length )
Master Salt   = EDHOC-Exporter( "OSCORE Master Salt", h'',  salt_length )
]]></artwork></figure>

<t><list style="symbols">
  <t>The AEAD Algorithm is the application AEAD algorithm of the selected cipher suite for the EDHOC session.</t>
  <t>The HKDF Algorithm is the one based on the application hash algorithm of the selected cipher suite for the EDHOC session. For example, if SHA-256 is the application hash algorithm of the selected ciphersuite, HKDF SHA-256 is used as HKDF Algorithm in the OSCORE Security Context.</t>
  <t>In case the Client is Initiator and the Server is Responder, the Client’s OSCORE Sender ID and the Server’s OSCORE Sender ID are determined from the EDHOC connection identifiers C_R and C_I for the EDHOC session, respectively, by applying the conversion in <xref target="edhoc-to-oscore"/>. The reverse applies in case the Client is the Responder and the Server is the Initiator.</t>
</list></t>

<t>Client and Server use the parameters above to establish an OSCORE Security Context, as per Section 3.2.1 of <xref target="RFC8613"/>.</t>

<t>From then on, Client and Server retrieve the OSCORE protocol state using the Recipient ID, and optionally other transport information such as the 5-tuple.</t>

</section>
<section anchor="coap" title="Transferring EDHOC over CoAP">

<t>This section specifies one instance for how EDHOC can be transferred as an exchange of CoAP <xref target="RFC7252"/> messages. CoAP is a reliable transport that can preserve packet ordering and handle message duplication. CoAP can also perform fragmentation and protect against denial of service attacks. According to this specification, EDHOC messages are carried in Confirmable messages, which is beneficial especially if fragmentation is used.</t>

<t>By default, the CoAP client is the Initiator and the CoAP server is the Responder, but the roles SHOULD be chosen to protect the most sensitive identity, see <xref target="security"/>. According to this specification, EDHOC is transferred in POST requests and 2.04 (Changed) responses to the Uri-Path: “/.well-known/edhoc”. An application may define its own path that can be discovered, e.g., using resource directory <xref target="I-D.ietf-core-resource-directory"/>.</t>

<t>By default, the message flow is as follows: EDHOC message_1 is sent in the payload of a POST request from the client to the server’s resource for EDHOC. EDHOC message_2 or the EDHOC error message is sent from the server to the client in the payload of a 2.04 (Changed) response. EDHOC message_3 or the EDHOC error message is sent from the client to the server’s resource in the payload of a POST request. If needed, an EDHOC error message is sent from the server to the client in the payload of a 2.04 (Changed) response. Alternatively, if EDHOC message_4 is used, it is sent from the server to the client in the payload of a 2.04 (Changed) response analogously to message_2.</t>

<t>In order to correlate a message received from a client to a message previously sent by the server, messages sent by the client are prepended with the CBOR serialization of the connection identifier which the server has chosen. This applies independently of if the CoAP server is Responder or Initiator. For the default case when the server is Responder, the prepended connection identifier is C_R, and C_I if the server is Initiator. If message_1 is sent to the server, the CBOR simple value <spanx style="verb">null</spanx> (0xf6) is sent in its place (given that the server has not selected C_R yet).</t>

<t>These identifiers are encoded in CBOR and thus self-delimiting.
They are sent in front of the actual EDHOC message,
and only the part of the body following the identifier is used for EDHOC processing.</t>

<t>Consequently, the application/edhoc media type does not apply to these messages;
their media type is unnamed.</t>

<t>An example of a successful EDHOC exchange using CoAP is shown in <xref target="fig-coap1"/>. In this case the CoAP Token enables correlation on the Initiator side, and the prepended C_R enables correlation on the Responder (server) side.</t>

<figure title="Transferring EDHOC in CoAP when the Initiator is CoAP Client" anchor="fig-coap1"><artwork align="center"><![CDATA[
Client    Server
  |          |
  +--------->| Header: POST (Code=0.02)
  |   POST   | Uri-Path: "/.well-known/edhoc"
  |          | Payload: null, EDHOC message_1
  |          |
  |<---------+ Header: 2.04 Changed
  |   2.04   | Content-Format: application/edhoc
  |          | Payload: EDHOC message_2
  |          |
  +--------->| Header: POST (Code=0.02)
  |   POST   | Uri-Path: "/.well-known/edhoc"
  |          | Payload: C_R, EDHOC message_3
  |          |
  |<---------+ Header: 2.04 Changed
  |   2.04   |
  |          |
]]></artwork></figure>

<t>The exchange in <xref target="fig-coap1"/> protects the client identity against active attackers and the server identity against passive attackers.</t>

<t>An alternative exchange that protects the server identity against active attackers and the client identity against passive attackers is shown in <xref target="fig-coap2"/>. In this case the CoAP Token enables the Responder to correlate message_2 and message_3, and the prepended C_I enables correlation on the Initiator (server) side. If EDHOC message_4 is used, C_I is prepended, and it is transported with CoAP in the payload of a POST request with a 2.04 (Changed) response.</t>

<figure title="Transferring EDHOC in CoAP when the Initiator is CoAP Server" anchor="fig-coap2"><artwork align="center"><![CDATA[
Client    Server
  |          |
  +--------->| Header: POST (Code=0.02)
  |   POST   | Uri-Path: "/.well-known/edhoc"
  |          |
  |<---------+ Header: 2.04 Changed
  |   2.04   | Content-Format: application/edhoc
  |          | Payload: EDHOC message_1
  |          |
  +--------->| Header: POST (Code=0.02)
  |   POST   | Uri-Path: "/.well-known/edhoc"
  |          | Payload: C_I, EDHOC message_2
  |          |
  |<---------+ Header: 2.04 Changed
  |   2.04   | Content-Format: application/edhoc
  |          | Payload: EDHOC message_3
  |          |
]]></artwork></figure>

<t>To protect against denial-of-service attacks, the CoAP server MAY respond to the first POST request with a 4.01 (Unauthorized) containing an Echo option <xref target="I-D.ietf-core-echo-request-tag"/>. This forces the initiator to demonstrate its reachability at its apparent network address. If message fragmentation is needed, the EDHOC messages may be fragmented using the CoAP Block-Wise Transfer mechanism <xref target="RFC7959"/>. EDHOC does not restrict how error messages are transported with CoAP, as long as the appropriate error message can to be transported in response to a message that failed (see <xref target="error"/>).</t>

<section anchor="transferring-edhoc-and-oscore-over-coap" title="Transferring EDHOC and OSCORE over CoAP">

<t>A method for combining EDHOC and OSCORE protocols in two round-trips is specified in <xref target="I-D.ietf-core-oscore-edhoc"/>.</t>

<t>When using EDHOC over CoAP for establishing an OSCORE Security Context, EDHOC error messages sent as CoAP responses MUST be error responses, i.e., they MUST specify a CoAP error response code. In particular, it is RECOMMENDED that such error responses have response code either 4.00 (Bad Request) in case of client error (e.g., due to a malformed EDHOC message), or 5.00 (Internal Server Error) in case of server error (e.g., due to failure in deriving EDHOC key material).</t>

</section>
</section>
</section>
<section anchor="comrep" title="Compact Representation">

<t>As described in Section 4.2 of <xref target="RFC6090"/> the x-coordinate of an elliptic curve public key is a suitable representative for the entire point whenever scalar multiplication is used as a one-way function. One example is ECDH with compact output, where only the x-coordinate of the computed value is used as the shared secret.</t>

<t>This section defines a format for compact representation based on the Elliptic-Curve-Point-to-Octet-String Conversion defined in Section 2.3.3 of <xref target="SECG"/>. Using the notation from <xref target="SECG"/>, the output is an octet string of length ceil( (log2 q) / 8 ). See <xref target="SECG"/> for a definition of q, M, X, xp, and ~yp. The steps in Section 2.3.3 of <xref target="SECG"/> are replaced by:</t>

<t><list style="numbers">
  <t>Convert the field element xp to an octet string X of length ceil( (log2 q) / 8 ) octets using the conversion routine specified in Section 2.3.5 of <xref target="SECG"/>.</t>
  <t>Output M = X</t>
</list></t>

<t>The encoding of the point at infinity is not supported. Compact representation does not change any requirements on validation. If a y-coordinate is required for validation or compatibily with APIs the value ~yp SHALL be set to zero. For such use, the compact representation can be transformed into the SECG point compressed format by prepending it with the single byte 0x02 (i.e. M = 0x02 || X).</t>

<t>Using compact representation have some security benefits. An implementation does not need to check that the point is not the point at infinity (the identity element). Similarly, as not even the sign of the y-coordinate is encoded, compact representation trivially avoids so called “benign malleability” attacks where an attacker changes the sign, see <xref target="SECG"/>.</t>

</section>
<section anchor="CBORandCOSE" title="Use of CBOR, CDDL and COSE in EDHOC">

<t>This Appendix is intended to simplify for implementors not familiar with CBOR <xref target="RFC8949"/>, CDDL <xref target="RFC8610"/>, COSE <xref target="I-D.ietf-cose-rfc8152bis-struct"/>, and HKDF <xref target="RFC5869"/>.</t>

<section anchor="CBOR" title="CBOR and CDDL">

<t>The Concise Binary Object Representation (CBOR) <xref target="RFC8949"/> is a data format designed for small code size and small message size. CBOR builds on the JSON data model but extends it by e.g. encoding binary data directly without base64 conversion. In addition to the binary CBOR encoding, CBOR also has a diagnostic notation that is readable and editable by humans. The Concise Data Definition Language (CDDL) <xref target="RFC8610"/> provides a way to express structures for protocol messages and APIs that use CBOR. <xref target="RFC8610"/> also extends the diagnostic notation.</t>

<t>CBOR data items are encoded to or decoded from byte strings using a type-length-value encoding scheme, where the three highest order bits of the initial byte contain information about the major type. CBOR supports several different types of data items, in addition to integers (int, uint), simple values (e.g. null), byte strings (bstr), and text strings (tstr), CBOR also supports arrays []  of data items, maps {} of pairs of data items, and sequences <xref target="RFC8742"/> of data items. Some examples are given below. For a complete specification and more examples, see <xref target="RFC8949"/> and <xref target="RFC8610"/>. We recommend implementors to get used to CBOR by using the CBOR playground <xref target="CborMe"/>.</t>

<figure><artwork align="center"><![CDATA[
Diagnostic          Encoded              Type
------------------------------------------------------------------
1                   0x01                 unsigned integer    
24                  0x1818               unsigned integer
-24                 0x37                 negative integer
-25                 0x3818               negative integer 
null                0xf6                 simple value 
h'12cd'             0x4212cd             byte string
'12cd'              0x4431326364         byte string
"12cd"              0x6431326364         text string
{ 4 : h'cd' }       0xa10441cd           map                 
<< 1, 2, null >>    0x430102f6           byte string
[ 1, 2, null ]      0x830102f6           array      
( 1, 2, null )      0x0102f6             sequence
1, 2, null          0x0102f6             sequence
------------------------------------------------------------------
]]></artwork></figure>

</section>
<section anchor="cddl-definitions" title="CDDL Definitions">

<t>This sections compiles the CDDL definitions for ease of reference.</t>

<figure><artwork type="CDDL"><![CDATA[
suite = int

SUITES_R : [ supported : 2* suite ] / suite

message_1 = (
  METHOD : int,
  SUITES_I : [ selected : suite, supported : 2* suite ] / suite,
  G_X : bstr,
  C_I : bstr / int,
  ? EAD ; EAD_1
)

message_2 = (
  data_2,
  CIPHERTEXT_2 : bstr,
)

data_2 = (
  G_Y : bstr,
  C_R : bstr / int,
)

message_3 = (
  CIPHERTEXT_3 : bstr,
)

message_4 = (
  CIPHERTEXT_4 : bstr,
)

error = (
  ERR_CODE : int,
  ERR_INFO : any
)

info = [
   edhoc_aead_id : int / tstr,
   transcript_hash : bstr,
   label : tstr,
   length : uint
]
]]></artwork></figure>

</section>
<section anchor="COSE" title="COSE">

<t>CBOR Object Signing and Encryption (COSE) <xref target="I-D.ietf-cose-rfc8152bis-struct"/> describes how to create and process signatures, message authentication codes, and encryption using CBOR. COSE builds on JOSE, but is adapted to allow more efficient processing in constrained devices. EDHOC makes use of COSE_Key, COSE_Encrypt0, and COSE_Sign1 objects.</t>

</section>
</section>
<section anchor="vectors" title="Test Vectors">

<t>NOTE 0. These test vectors are compatible with versions -05 and -06 of the specification.</t>

<t>This appendix provides detailed test vectors to ease implementation and ensure interoperability. In addition to hexadecimal, all CBOR data items and sequences are given in CBOR diagnostic notation. The test vectors use the default mapping to CoAP where the Initiator acts as CoAP client (this means that corr = 1).</t>

<t>A more extensive test vector suite covering more combinations of authentication method used between Initiator and Responder and related code to generate them can be found at https://github.com/lake-wg/edhoc/tree/master/test-vectors-05.</t>

<t>NOTE 1. In the previous and current test vectors the same name is used for certain byte strings and their CBOR bstr encodings. For example the transcript hash TH_2 is used to denote both the output of the hash function and the input into the key derivation function, whereas the latter is a CBOR bstr encoding of the former. Some attempts are made to clarify that in this Appendix (e.g. using “CBOR encoded”/”CBOR unencoded”).</t>

<t>NOTE 2. If not clear from the context, remember that CBOR sequences and CBOR arrays assume CBOR encoded data items as elements.</t>

<section anchor="test-vectors-for-edhoc-authenticated-with-signature-keys-x5t" title="Test Vectors for EDHOC Authenticated with Signature Keys (x5t)">

<!-- Test vector index (int) 22900 -->

<t>EDHOC with signature authentication and X.509 certificates is used. In this test vector, the hash value ‘x5t’ is used to identify the certificate. The optional C_1 in message_1 is omitted. No external authorization data is sent in the message exchange.</t>

<figure><artwork><![CDATA[
method (Signature Authentication)
0
]]></artwork></figure>

<t>CoAP is used as transport and the Initiator acts as CoAP client:</t>

<figure><artwork><![CDATA[
corr (the Initiator can correlate message_1 and message_2)
1
]]></artwork></figure>

<t>From there, METHOD_CORR has the following value:</t>

<figure><artwork><![CDATA[
METHOD_CORR (4 * method + corr) (int)
1
]]></artwork></figure>

<t>The Initiator indicates only one cipher suite in the (potentially truncated) list of cipher suites.</t>

<figure><artwork><![CDATA[
Supported Cipher Suites (1 byte)
00
]]></artwork></figure>

<t>The Initiator selected the indicated cipher suite.</t>

<figure><artwork><![CDATA[
Selected Cipher Suite (int)
0
]]></artwork></figure>

<t>Cipher suite 0 is supported by both the Initiator and the Responder, see <xref target="cs"/>.</t>

<section anchor="message1" title="Message_1">

<t>The Initiator generates its ephemeral key pair.</t>

<figure><artwork><![CDATA[
X (Initiator's ephemeral private key) (32 bytes)
8f 78 1a 09 53 72 f8 5b 6d 9f 61 09 ae 42 26 11 73 4d 7d bf a0 06 9a 2d 
f2 93 5b b2 e0 53 bf 35
]]></artwork></figure>

<figure><artwork><![CDATA[
G_X (Initiator's ephemeral public key, CBOR unencoded) (32 bytes)
89 8f f7 9a 02 06 7a 16 ea 1e cc b9 0f a5 22 46 f5 aa 4d d6 ec 07 6b ba 
02 59 d9 04 b7 ec 8b 0c
]]></artwork></figure>

<t>The Initiator chooses a connection identifier C_I:</t>

<figure><artwork><![CDATA[
Connection identifier chosen by Initiator (1 byte)
09
]]></artwork></figure>

<t>Note that since C_I is a byte string in the interval h’00’ to h’2f’, it is encoded as the corresponding integer subtracted by 24. Thus 0x09 = 09, 9 - 24 = -15, and -15 in CBOR encoding is equal to 0x2e.</t>

<figure><artwork><![CDATA[
C_I (1 byte)
2e
]]></artwork></figure>

<t>Since no external authorization data is sent:</t>

<figure><artwork><![CDATA[
EAD_1 (0 bytes)
]]></artwork></figure>

<t>The list of supported cipher suites needs to contain the selected cipher suite. The initiator truncates the list of supported cipher suites to one cipher suite only. In this case there is only one supported cipher suite indicated, 00.</t>

<t>Because one single selected cipher suite is conveyed, it is encoded as an int instead of an array:</t>

<figure><artwork><![CDATA[
SUITES_I (int)
0
]]></artwork></figure>

<t>message_1 is constructed as the CBOR Sequence of the data items above encoded as CBOR. In CBOR diagnostic notation:</t>

<figure><artwork><![CDATA[
message_1 =
(
  1,
  0,
  h'898FF79A02067A16EA1ECCB90FA52246F5AA4DD6EC076BBA0259D904B7EC8B0C',
  -15
)
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
message_1 (CBOR Sequence) (37 bytes)
01 00 58 20 89 8f f7 9a 02 06 7a 16 ea 1e cc b9 0f a5 22 46 f5 aa 4d d6 
ec 07 6b ba 02 59 d9 04 b7 ec 8b 0c 2e 
]]></artwork></figure>

</section>
<section anchor="message2" title="Message_2">

<t>Since METHOD_CORR mod 4 equals 1, C_I is omitted from data_2.</t>

<t>The Responder generates the following ephemeral key pair.</t>

<figure><artwork><![CDATA[
Y (Responder's ephemeral private key) (32 bytes)
fd 8c d8 77 c9 ea 38 6e 6a f3 4f f7 e6 06 c4 b6 4c a8 31 c8 ba 33 13 4f 
d4 cd 71 67 ca ba ec da
]]></artwork></figure>

<figure><artwork><![CDATA[
G_Y (Responder's ephemeral public key, CBOR unencoded) (32 bytes)
71 a3 d5 99 c2 1d a1 89 02 a1 ae a8 10 b2 b6 38 2c cd 8d 5f 9b f0 19 52 
81 75 4c 5e bc af 30 1e 
]]></artwork></figure>

<t>From G_X and Y or from G_Y and X the ECDH shared secret is computed:</t>

<figure><artwork><![CDATA[
G_XY (ECDH shared secret) (32 bytes)
2b b7 fa 6e 13 5b c3 35 d0 22 d6 34 cb fb 14 b3 f5 82 f3 e2 e3 af b2 b3 
15 04 91 49 5c 61 78 2b 
]]></artwork></figure>

<t>The key and nonce for calculating the ‘ciphertext’ are calculated as follows, as specified in <xref target="key-der"/>.</t>

<t>HKDF SHA-256 is the HKDF used (as defined by cipher suite 0).</t>

<t>PRK_2e = HMAC-SHA-256(salt, G_XY)</t>

<t>Salt is the empty byte string.</t>

<figure><artwork><![CDATA[
salt (0 bytes)
]]></artwork></figure>

<t>From there, PRK_2e is computed:</t>

<figure><artwork><![CDATA[
PRK_2e (32 bytes)
ec 62 92 a0 67 f1 37 fc 7f 59 62 9d 22 6f bf c4 e0 68 89 49 f6 62 a9 7f 
d8 2f be b7 99 71 39 4a
]]></artwork></figure>

<t>The Responder’s sign/verify key pair is the following:</t>

<figure><artwork><![CDATA[
SK_R (Responder's private authentication key) (32 bytes)
df 69 27 4d 71 32 96 e2 46 30 63 65 37 2b 46 83 ce d5 38 1b fc ad cd 44 
0a 24 c3 91 d2 fe db 94
]]></artwork></figure>

<figure><artwork><![CDATA[
PK_R (Responder's public authentication key) (32 bytes)
db d9 dc 8c d0 3f b7 c3 91 35 11 46 2b b2 38 16 47 7c 6b d8 d6 6e f5 a1 
a0 70 ac 85 4e d7 3f d2
]]></artwork></figure>

<t>Since neither the Initiator nor the Responder authenticates with a static Diffie-Hellman key, PRK_3e2m = PRK_2e</t>

<figure><artwork><![CDATA[
PRK_3e2m (32 bytes)
ec 62 92 a0 67 f1 37 fc 7f 59 62 9d 22 6f bf c4 e0 68 89 49 f6 62 a9 7f 
d8 2f be b7 99 71 39 4a 
]]></artwork></figure>

<t>The Responder chooses a connection identifier C_R.</t>

<figure><artwork><![CDATA[
Connection identifier chosen by Responder (1 byte)
00
]]></artwork></figure>

<t>Note that since C_R is a byte string in the interval h’00’ to h’2f’, it is encoded as the corresponding integer subtracted by 24. Thus 0x00 = 0, 0 - 24 = -24, and -24 in CBOR encoding is equal to 0x37.</t>

<figure><artwork><![CDATA[
C_R (1 byte)
37
]]></artwork></figure>

<t>Data_2 is constructed as the CBOR Sequence of G_Y and C_R, encoded as CBOR byte strings. The CBOR diagnostic notation is:</t>

<figure><artwork><![CDATA[
data_2 =
(
  h'71a3d599c21da18902a1aea810b2b6382ccd8d5f9bf0195281754c5ebcaf301e',
  -24
)
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
data_2 (CBOR Sequence) (35 bytes)
58 20 71 a3 d5 99 c2 1d a1 89 02 a1 ae a8 10 b2 b6 38 2c cd 8d 5f 9b f0 
19 52 81 75 4c 5e bc af 30 1e 37 
]]></artwork></figure>

<t>From data_2 and message_1, compute the input to the transcript hash TH_2 = H( H(message_1), data_2 ), as a CBOR Sequence of these 2 data items.</t>

<figure><artwork><![CDATA[
Input to calculate TH_2 (CBOR Sequence) (72 bytes)
01 00 58 20 89 8f f7 9a 02 06 7a 16 ea 1e cc b9 0f a5 22 46 f5 aa 4d d6 
ec 07 6b ba 02 59 d9 04 b7 ec 8b 0c 2e 58 20 71 a3 d5 99 c2 1d a1 89 02 
a1 ae a8 10 b2 b6 38 2c cd 8d 5f 9b f0 19 52 81 75 4c 5e bc af 30 1e 37 
]]></artwork></figure>

<t>And from there, compute the transcript hash TH_2 = SHA-256( H(message_1), data_2 )</t>

<figure><artwork><![CDATA[
TH_2 (CBOR unencoded) (32 bytes)
86 4e 32 b3 6a 7b 5f 21 f1 9e 99 f0 c6 6d 91 1e 0a ce 99 72 d3 76 d2 c2 
c1 53 c1 7f 8e 96 29 ff 
]]></artwork></figure>

<t>The Responder’s subject name is the empty string:</t>

<figure><artwork><![CDATA[
Responder's subject name (text string)
""
]]></artwork></figure>

<t>In this version of the test vectors CRED_R is not a DER encoded X.509 certificate, but a string of random bytes.</t>

<figure><artwork><![CDATA[
CRED_R (CBOR unencoded) (100 bytes)
c7 88 37 00 16 b8 96 5b db 20 74 bf f8 2e 5a 20 e0 9b ec 21 f8 40 6e 86 
44 2b 87 ec 3f f2 45 b7 0a 47 62 4d c9 cd c6 82 4b 2a 4c 52 e9 5e c9 d6 
b0 53 4b 71 c2 b4 9e 4b f9 03 15 00 ce e6 86 99 79 c2 97 bb 5a 8b 38 1e 
98 db 71 41 08 41 5e 5c 50 db 78 97 4c 27 15 79 b0 16 33 a3 ef 62 71 be 
5c 22 5e b2
]]></artwork></figure>

<t>CRED_R is defined to be the CBOR bstr containing the credential of the Responder.</t>

<figure><artwork><![CDATA[
CRED_R (102 bytes)
58 64 c7 88 37 00 16 b8 96 5b db 20 74 bf f8 2e 5a 20 e0 9b ec 21 f8 40 
6e 86 44 2b 87 ec 3f f2 45 b7 0a 47 62 4d c9 cd c6 82 4b 2a 4c 52 e9 5e 
c9 d6 b0 53 4b 71 c2 b4 9e 4b f9 03 15 00 ce e6 86 99 79 c2 97 bb 5a 8b 
38 1e 98 db 71 41 08 41 5e 5c 50 db 78 97 4c 27 15 79 b0 16 33 a3 ef 62 
71 be 5c 22 5e b2 
]]></artwork></figure>

<t>And because certificates are identified by a hash value with the ‘x5t’ parameter, ID_CRED_R is the following:</t>

<t>ID_CRED_R = { 34 : COSE_CertHash }. In this example, the hash algorithm used is SHA-2 256-bit with hash truncated to 64-bits (value -15). The hash value is calculated over the CBOR unencoded CRED_R. The CBOR diagnostic notation is:</t>

<figure><artwork><![CDATA[
ID_CRED_R =
{
  34: [-15, h'6844078A53F312F5']
}
]]></artwork></figure>

<t>which when encoded as a CBOR map becomes:</t>

<figure><artwork><![CDATA[
ID_CRED_R (14 bytes)
a1 18 22 82 2e 48 68 44 07 8a 53 f3 12 f5 
]]></artwork></figure>

<t>Since no external authorization data is sent:</t>

<figure><artwork><![CDATA[
EAD_2  (0 bytes)
]]></artwork></figure>

<t>The plaintext is defined as the empty string:</t>

<figure><artwork><![CDATA[
P_2m (0 bytes)
]]></artwork></figure>

<t>The Enc_structure is defined as follows: [ “Encrypt0”, « ID_CRED_R », « TH_2, CRED_R » ], indicating that ID_CRED_R is encoded as a CBOR byte string, and that the concatenation of the CBOR byte strings TH_2 and CRED_R is wrapped as a CBOR bstr. The CBOR diagnostic notation is the following:</t>

<figure><artwork><![CDATA[
A_2m =
[
  "Encrypt0", 
  h'A11822822E486844078A53F312F5',
  h'5820864E32B36A7B5F21F19E99F0C66D911E0ACE9972D376D2C2C153C17F8E9629FF
  5864C788370016B8965BDB2074BFF82E5A20E09BEC21F8406E86442B87EC3FF245B70A
  47624DC9CDC6824B2A4C52E95EC9D6B0534B71C2B49E4BF9031500CEE6869979C297BB
  5A8B381E98DB714108415E5C50DB78974C271579B01633A3EF6271BE5C225EB2'
  ]
]]></artwork></figure>

<t>Which encodes to the following byte string to be used as Additional Authenticated Data:</t>

<figure><artwork><![CDATA[
A_2m (CBOR-encoded) (163 bytes)
83 68 45 6e 63 72 79 70 74 30 4e a1 18 22 82 2e 48 68 44 07 8a 53 f3 12 
f5 58 88 58 20 86 4e 32 b3 6a 7b 5f 21 f1 9e 99 f0 c6 6d 91 1e 0a ce 99 
72 d3 76 d2 c2 c1 53 c1 7f 8e 96 29 ff 58 64 c7 88 37 00 16 b8 96 5b db 
20 74 bf f8 2e 5a 20 e0 9b ec 21 f8 40 6e 86 44 2b 87 ec 3f f2 45 b7 0a 
47 62 4d c9 cd c6 82 4b 2a 4c 52 e9 5e c9 d6 b0 53 4b 71 c2 b4 9e 4b f9 
03 15 00 ce e6 86 99 79 c2 97 bb 5a 8b 38 1e 98 db 71 41 08 41 5e 5c 50 
db 78 97 4c 27 15 79 b0 16 33 a3 ef 62 71 be 5c 22 5e b2 
]]></artwork></figure>

<t>info for K_2m is defined as follows in CBOR diagnostic notation:</t>

<figure><artwork><![CDATA[
info for K_2m =
[
  10,
  h'864E32B36A7B5F21F19E99F0C66D911E0ACE9972D376D2C2C153C17F8E9629FF', 
  "K_2m",
  16
]
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
info for K_2m (CBOR-encoded) (42 bytes)
84 0a 58 20 86 4e 32 b3 6a 7b 5f 21 f1 9e 99 f0 c6 6d 91 1e 0a ce 99 72 
d3 76 d2 c2 c1 53 c1 7f 8e 96 29 ff 64 4b 5f 32 6d 10 
]]></artwork></figure>

<t>From these parameters, K_2m is computed. Key K_2m is the output of HKDF-Expand(PRK_3e2m, info, L), where L is the length of K_2m, so 16 bytes.</t>

<figure><artwork><![CDATA[
K_2m (16 bytes)
80 cc a7 49 ab 58 f5 69 ca 35 da ee 05 be d1 94
]]></artwork></figure>

<t>info for IV_2m is defined as follows, in CBOR diagnostic notation (10 is the COSE algorithm no. of the AEAD algorithm in the selected cipher suite 0):</t>

<figure><artwork><![CDATA[
info for IV_2m =
[
  10,
  h'864E32B36A7B5F21F19E99F0C66D911E0ACE9972D376D2C2C153C17F8E9629FF', 
  "IV_2m",
  13
]
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
info for IV_2m (CBOR-encoded) (43 bytes)
84 0a 58 20 86 4e 32 b3 6a 7b 5f 21 f1 9e 99 f0 c6 6d 91 1e 0a ce 99 72 
d3 76 d2 c2 c1 53 c1 7f 8e 96 29 ff 65 49 56 5f 32 6d 0d 
]]></artwork></figure>

<t>From these parameters, IV_2m is computed. IV_2m is the output of HKDF-Expand(PRK_3e2m, info, L), where L is the length of IV_2m, so 13 bytes.</t>

<figure><artwork><![CDATA[
IV_2m (13 bytes)
c8 1e 1a 95 cc 93 b3 36 69 6e d5 02 55 
]]></artwork></figure>

<t>Finally, COSE_Encrypt0 is computed from the parameters above.</t>

<t><list style="symbols">
  <t>protected header = CBOR-encoded ID_CRED_R</t>
  <t>external_aad = A_2m</t>
  <t>empty plaintext = P_2m</t>
</list></t>

<figure><artwork><![CDATA[
MAC_2 (CBOR unencoded) (8 bytes)
fa bb a4 7e 56 71 a1 82 
]]></artwork></figure>

<t>To compute the Signature_or_MAC_2, the key is the private authentication key of the Responder and 
the message M_2 to be signed = [ “Signature1”, « ID_CRED_R », « TH_2, CRED_R, ? EAD_2 », MAC_2 ]. ID_CRED_R is encoded as a CBOR byte string, the concatenation of the CBOR byte strings TH_2 and CRED_R is wrapped as a CBOR bstr, and MAC_2 is encoded as a CBOR bstr.</t>

<figure><artwork><![CDATA[
M_2 = 
[
  "Signature1",
  h'A11822822E486844078A53F312F5',
  h'5820864E32B36A7B5F21F19E99F0C66D911E0ACE9972D376D2C2C153C17F8E9629F
  F5864C788370016B8965BDB2074BFF82E5A20E09BEC21F8406E86442B87EC3FF245B7
  0A47624DC9CDC6824B2A4C52E95EC9D6B0534B71C2B49E4BF9031500CEE6869979C29
  7BB5A8B381E98DB714108415E5C50DB78974C271579B01633A3EF6271BE5C225EB2',
  h'FABBA47E5671A182'
]
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
M_2 (174 bytes)
84 6a 53 69 67 6e 61 74 75 72 65 31 4e a1 18 22 82 2e 48 68 44 07 8a 53 
f3 12 f5 58 88 58 20 86 4e 32 b3 6a 7b 5f 21 f1 9e 99 f0 c6 6d 91 1e 0a 
ce 99 72 d3 76 d2 c2 c1 53 c1 7f 8e 96 29 ff 58 64 c7 88 37 00 16 b8 96 
5b db 20 74 bf f8 2e 5a 20 e0 9b ec 21 f8 40 6e 86 44 2b 87 ec 3f f2 45 
b7 0a 47 62 4d c9 cd c6 82 4b 2a 4c 52 e9 5e c9 d6 b0 53 4b 71 c2 b4 9e 
4b f9 03 15 00 ce e6 86 99 79 c2 97 bb 5a 8b 38 1e 98 db 71 41 08 41 5e 
5c 50 db 78 97 4c 27 15 79 b0 16 33 a3 ef 62 71 be 5c 22 5e b2 48 fa bb 
a4 7e 56 71 a1 82 
]]></artwork></figure>

<t>Since the method = 0, Signature_or_MAC_2 is a signature. The algorithm with selected cipher suite 0 is Ed25519 and the output is 64 bytes.</t>

<figure><artwork><![CDATA[
Signature_or_MAC_2 (CBOR unencoded) (64 bytes)
1f 17 00 6a 98 48 c9 77 cb bd ca a7 57 b6 fd 46 82 c8 17 39 e1 5c 99 37 
c2 1c f5 e9 a0 e6 03 9f 54 fd 2a 6c 3a 11 18 f2 b9 d8 eb cd 48 23 48 b9 
9c 3e d7 ed 1b d9 80 6c 93 c8 90 68 e8 36 b4 0f 
]]></artwork></figure>

<t>CIPHERTEXT_2 is the ciphertext resulting from XOR between plaintext and KEYSTREAM_2 which is derived from TH_2 and the pseudorandom key PRK_2e.</t>

<t><list style="symbols">
  <t>plaintext = CBOR Sequence of the items ID_CRED_R and Signature_or_MAC_2 encoded as CBOR byte strings, in this order (EAD_2 is empty).</t>
</list></t>

<t>The plaintext is the following:</t>

<figure><artwork><![CDATA[
P_2e (CBOR Sequence) (80 bytes)
a1 18 22 82 2e 48 68 44 07 8a 53 f3 12 f5 58 40 1f 17 00 6a 98 48 c9 77 
cb bd ca a7 57 b6 fd 46 82 c8 17 39 e1 5c 99 37 c2 1c f5 e9 a0 e6 03 9f 
54 fd 2a 6c 3a 11 18 f2 b9 d8 eb cd 48 23 48 b9 9c 3e d7 ed 1b d9 80 6c 
93 c8 90 68 e8 36 b4 0f 
]]></artwork></figure>

<t>KEYSTREAM_2 = HKDF-Expand( PRK_2e, info, length ), where length is the length of the plaintext, so 80.</t>

<figure><artwork><![CDATA[
info for KEYSTREAM_2 =
[
  10,
  h'864E32B36A7B5F21F19E99F0C66D911E0ACE9972D376D2C2C153C17F8E9629FF',
  "KEYSTREAM_2",
  80
]
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
info for KEYSTREAM_2 (CBOR-encoded) (50 bytes)
84 0a 58 20 86 4e 32 b3 6a 7b 5f 21 f1 9e 99 f0 c6 6d 91 1e 0a ce 99 72 
d3 76 d2 c2 c1 53 c1 7f 8e 96 29 ff 6b 4b 45 59 53 54 52 45 41 4d 5f 32 
18 50 
]]></artwork></figure>

<t>From there, KEYSTREAM_2 is computed:</t>

<figure><artwork><![CDATA[
KEYSTREAM_2 (80 bytes)
ae ea 8e af 50 cf c6 70 09 da e8 2d 8d 85 b0 e7 60 91 bf 0f 07 0b 79 53 
6c 83 23 dc 3d 9d 61 13 10 35 94 63 f4 4b 12 4b ea b3 a1 9d 09 93 82 d7 
30 80 17 f4 92 62 06 e4 f5 44 9b 9f c9 24 bc b6 bd 78 ec 45 0a 66 83 fb 
8a 2f 5f 92 4f c4 40 4f 
]]></artwork></figure>

<t>Using the parameters above, the ciphertext CIPHERTEXT_2 can be computed:</t>

<figure><artwork><![CDATA[
CIPHERTEXT_2 (CBOR unencoded) (80 bytes)
0f f2 ac 2d 7e 87 ae 34 0e 50 bb de 9f 70 e8 a7 7f 86 bf 65 9f 43 b0 24 
a7 3e e9 7b 6a 2b 9c 55 92 fd 83 5a 15 17 8b 7c 28 af 54 74 a9 75 81 48 
64 7d 3d 98 a8 73 1e 16 4c 9c 70 52 81 07 f4 0f 21 46 3b a8 11 bf 03 97 
19 e7 cf fa a7 f2 f4 40
]]></artwork></figure>

<t>message_2 is the CBOR Sequence of data_2 and CIPHERTEXT_2, in this order:</t>

<figure><artwork><![CDATA[
message_2 =
(
  data_2,
  h'0FF2AC2D7E87AE340E50BBDE9F70E8A77F86BF659F43B024A73EE97B6A2B9C5592FD
  835A15178B7C28AF5474A9758148647D3D98A8731E164C9C70528107F40F21463BA811
  BF039719E7CFFAA7F2F440'
) 
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
message_2 (CBOR Sequence) (117 bytes)
58 20 71 a3 d5 99 c2 1d a1 89 02 a1 ae a8 10 b2 b6 38 2c cd 8d 5f 9b f0 
19 52 81 75 4c 5e bc af 30 1e 37 58 50 0f f2 ac 2d 7e 87 ae 34 0e 50 bb 
de 9f 70 e8 a7 7f 86 bf 65 9f 43 b0 24 a7 3e e9 7b 6a 2b 9c 55 92 fd 83 
5a 15 17 8b 7c 28 af 54 74 a9 75 81 48 64 7d 3d 98 a8 73 1e 16 4c 9c 70 
52 81 07 f4 0f 21 46 3b a8 11 bf 03 97 19 e7 cf fa a7 f2 f4 40 
]]></artwork></figure>

</section>
<section anchor="message3" title="Message_3">

<t>Since corr equals 1, C_R is not omitted from data_3.</t>

<t>The Initiator’s sign/verify key pair is the following:</t>

<figure><artwork><![CDATA[
SK_I (Initiator's private authentication key) (32 bytes)
2f fc e7 a0 b2 b8 25 d3 97 d0 cb 54 f7 46 e3 da 3f 27 59 6e e0 6b 53 71 
48 1d c0 e0 12 bc 34 d7
]]></artwork></figure>

<figure><artwork><![CDATA[
PK_I (Responder's public authentication key) (32 bytes)
38 e5 d5 45 63 c2 b6 a4 ba 26 f3 01 5f 61 bb 70 6e 5c 2e fd b5 56 d2 e1 
69 0b 97 fc 3c 6d e1 49 
]]></artwork></figure>

<t>HKDF SHA-256 is the HKDF used (as defined by cipher suite 0).</t>

<t>PRK_4x3m = HMAC-SHA-256 (PRK_3e2m, G_IY)</t>

<figure><artwork><![CDATA[
PRK_4x3m (32 bytes)
ec 62 92 a0 67 f1 37 fc 7f 59 62 9d 22 6f bf c4 e0 68 89 49 f6 62 a9 7f 
d8 2f be b7 99 71 39 4a 
]]></artwork></figure>

<t>data 3 is equal to C_R.</t>

<figure><artwork><![CDATA[
data_3 (CBOR Sequence) (1 byte)
37
]]></artwork></figure>

<t>From data_3, CIPHERTEXT_2, and TH_2, compute the input to the transcript hash TH_3 = H( H(TH_2 , CIPHERTEXT_2), data_3), as a CBOR Sequence of 2 data items.</t>

<figure><artwork><![CDATA[
Input to calculate TH_3 (CBOR Sequence) (117 bytes)
58 20 86 4e 32 b3 6a 7b 5f 21 f1 9e 99 f0 c6 6d 91 1e 0a ce 99 72 d3 76 
d2 c2 c1 53 c1 7f 8e 96 29 ff 58 50 0f f2 ac 2d 7e 87 ae 34 0e 50 bb de 
9f 70 e8 a7 7f 86 bf 65 9f 43 b0 24 a7 3e e9 7b 6a 2b 9c 55 92 fd 83 5a 
15 17 8b 7c 28 af 54 74 a9 75 81 48 64 7d 3d 98 a8 73 1e 16 4c 9c 70 52 
81 07 f4 0f 21 46 3b a8 11 bf 03 97 19 e7 cf fa a7 f2 f4 40 37 
]]></artwork></figure>

<t>And from there, compute the transcript hash TH_3 = SHA-256( H(TH_2 , CIPHERTEXT_2), data_3)</t>

<figure><artwork><![CDATA[
TH_3 (CBOR unencoded) (32 bytes)
f2 4d 18 ca fc e3 74 d4 e3 73 63 29 c1 52 ab 3a ea 9c 7c 0f 65 0c 30 70 
b6 f5 1e 68 e2 ae bb 60 
]]></artwork></figure>

<t>The Initiator’s subject name is the empty string:</t>

<figure><artwork><![CDATA[
Initiator's subject name (text string)
""
]]></artwork></figure>

<t>In this version of the test vectors CRED_I is not a DER encoded X.509 certificate, but a string of random bytes.</t>

<figure><artwork><![CDATA[
CRED_I (CBOR unencoded) (101 bytes)
54 13 20 4c 3e bc 34 28 a6 cf 57 e2 4c 9d ef 59 65 17 70 44 9b ce 7e c6 
56 1e 52 43 3a a5 5e 71 f1 fa 34 b2 2a 9c a4 a1 e1 29 24 ea e1 d1 76 60 
88 09 84 49 cb 84 8f fc 79 5f 88 af c4 9c be 8a fd d1 ba 00 9f 21 67 5e 
8f 6c 77 a4 a2 c3 01 95 60 1f 6f 0a 08 52 97 8b d4 3d 28 20 7d 44 48 65 
02 ff 7b dd a6
]]></artwork></figure>

<t>CRED_I is defined to be the CBOR bstr containing the credential of the Initiator.</t>

<figure><artwork><![CDATA[
CRED_I (103 bytes)
58 65 54 13 20 4c 3e bc 34 28 a6 cf 57 e2 4c 9d ef 59 65 17 70 44 9b ce 
7e c6 56 1e 52 43 3a a5 5e 71 f1 fa 34 b2 2a 9c a4 a1 e1 29 24 ea e1 d1 
76 60 88 09 84 49 cb 84 8f fc 79 5f 88 af c4 9c be 8a fd d1 ba 00 9f 21 
67 5e 8f 6c 77 a4 a2 c3 01 95 60 1f 6f 0a 08 52 97 8b d4 3d 28 20 7d 44 
48 65 02 ff 7b dd a6 
]]></artwork></figure>

<t>And because certificates are identified by a hash value with the ‘x5t’ parameter, ID_CRED_I is the following:</t>

<t>ID_CRED_I = { 34 : COSE_CertHash }. In this example, the hash algorithm used is SHA-2 256-bit with hash truncated to 64-bits (value -15). The hash value is calculated over the CBOR unencoded CRED_I.</t>

<figure><artwork><![CDATA[
ID_CRED_I =
{
  34: [-15, h'705D5845F36FC6A6']
}
]]></artwork></figure>

<t>which when encoded as a CBOR map becomes:</t>

<figure><artwork><![CDATA[
ID_CRED_I (14 bytes)
a1 18 22 82 2e 48 70 5d 58 45 f3 6f c6 a6 
]]></artwork></figure>

<t>Since no external authorization data is exchanged:</t>

<figure><artwork><![CDATA[
EAD_3 (0 bytes)
]]></artwork></figure>

<t>The plaintext of the COSE_Encrypt is the empty string:</t>

<figure><artwork><![CDATA[
P_3m (0 bytes)
]]></artwork></figure>

<t>The associated data is the following:
[ “Encrypt0”, « ID_CRED_I », « TH_3, CRED_I, ? EAD_3 » ].</t>

<figure><artwork><![CDATA[
A_3m (CBOR-encoded) (164 bytes)
83 68 45 6e 63 72 79 70 74 30 4e a1 18 22 82 2e 48 70 5d 58 45 f3 6f c6 
a6 58 89 58 20 f2 4d 18 ca fc e3 74 d4 e3 73 63 29 c1 52 ab 3a ea 9c 7c 
0f 65 0c 30 70 b6 f5 1e 68 e2 ae bb 60 58 65 54 13 20 4c 3e bc 34 28 a6 
cf 57 e2 4c 9d ef 59 65 17 70 44 9b ce 7e c6 56 1e 52 43 3a a5 5e 71 f1 
fa 34 b2 2a 9c a4 a1 e1 29 24 ea e1 d1 76 60 88 09 84 49 cb 84 8f fc 79 
5f 88 af c4 9c be 8a fd d1 ba 00 9f 21 67 5e 8f 6c 77 a4 a2 c3 01 95 60 
1f 6f 0a 08 52 97 8b d4 3d 28 20 7d 44 48 65 02 ff 7b dd a6 
]]></artwork></figure>

<t>Info for K_3m is computed as follows:</t>

<figure><artwork><![CDATA[
info for K_3m =
[
  10,
  h'F24D18CAFCE374D4E3736329C152AB3AEA9C7C0F650C3070B6F51E68E2AEBB60',
  "K_3m",
  16
]
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
info for K_3m (CBOR-encoded) (42 bytes)
84 0a 58 20 f2 4d 18 ca fc e3 74 d4 e3 73 63 29 c1 52 ab 3a ea 9c 7c 0f 
65 0c 30 70 b6 f5 1e 68 e2 ae bb 60 64 4b 5f 33 6d 10 
]]></artwork></figure>

<t>From these parameters, K_3m is computed. Key K_3m is the output of HKDF-Expand(PRK_4x3m, info, L), where L is the length of K_2m, so 16 bytes.</t>

<figure><artwork><![CDATA[
K_3m (16 bytes)
83 a9 c3 88 02 91 2e 7f 8f 0d 2b 84 14 d1 e5 2c 
]]></artwork></figure>

<t>Nonce IV_3m is the output of HKDF-Expand(PRK_4x3m, info, L), where L = 13 bytes.</t>

<t>Info for IV_3m is defined as follows:</t>

<figure><artwork><![CDATA[
info for IV_3m =
[
  10,
  h'F24D18CAFCE374D4E3736329C152AB3AEA9C7C0F650C3070B6F51E68E2AEBB60',
  "IV_3m",
  13
]
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
info for IV_3m (CBOR-encoded) (43 bytes)
84 0a 58 20 f2 4d 18 ca fc e3 74 d4 e3 73 63 29 c1 52 ab 3a ea 9c 7c 0f 
65 0c 30 70 b6 f5 1e 68 e2 ae bb 60 65 49 56 5f 33 6d 0d 
]]></artwork></figure>

<t>From these parameters, IV_3m is computed:</t>

<figure><artwork><![CDATA[
IV_3m (13 bytes)
9c 83 9c 0e e8 36 42 50 5a 8e 1c 9f b2 
]]></artwork></figure>

<t>MAC_3 is the ‘ciphertext’ of the COSE_Encrypt0:</t>

<figure><artwork><![CDATA[
MAC_3 (CBOR unencoded) (8 bytes)
2f a1 e3 9e ae 7d 5f 8d
]]></artwork></figure>

<t>Since the method = 0, Signature_or_MAC_3 is a signature. The algorithm with selected cipher suite 0 is Ed25519.</t>

<t><list style="symbols">
  <t>The message M_3 to be signed = [ “Signature1”, « ID_CRED_I », « TH_3, CRED_I », MAC_3 ], i.e. ID_CRED_I encoded as CBOR bstr, the concatenation of the CBOR byte strings TH_3 and CRED_I wrapped as a CBOR bstr, and MAC_3 encoded as a CBOR bstr.</t>
  <t>The signing key is the private authentication key of the Initiator.</t>
</list></t>

<figure><artwork><![CDATA[
M_3 =
[
  "Signature1", 
  h'A11822822E48705D5845F36FC6A6', 
  h'5820F24D18CAFCE374D4E3736329C152AB3AEA9C7C0F650C3070B6F51E68E2AEBB6
  058655413204C3EBC3428A6CF57E24C9DEF59651770449BCE7EC6561E52433AA55E71
  F1FA34B22A9CA4A1E12924EAE1D1766088098449CB848FFC795F88AFC49CBE8AFDD1B
  A009F21675E8F6C77A4A2C30195601F6F0A0852978BD43D28207D44486502FF7BDD
  A6',
  h'2FA1E39EAE7D5F8D']
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
M_3 (175 bytes)
84 6a 53 69 67 6e 61 74 75 72 65 31 4e a1 18 22 82 2e 48 70 5d 58 45 f3 
6f c6 a6 58 89 58 20 f2 4d 18 ca fc e3 74 d4 e3 73 63 29 c1 52 ab 3a ea 
9c 7c 0f 65 0c 30 70 b6 f5 1e 68 e2 ae bb 60 58 65 54 13 20 4c 3e bc 34 
28 a6 cf 57 e2 4c 9d ef 59 65 17 70 44 9b ce 7e c6 56 1e 52 43 3a a5 5e 
71 f1 fa 34 b2 2a 9c a4 a1 e1 29 24 ea e1 d1 76 60 88 09 84 49 cb 84 8f 
fc 79 5f 88 af c4 9c be 8a fd d1 ba 00 9f 21 67 5e 8f 6c 77 a4 a2 c3 01 
95 60 1f 6f 0a 08 52 97 8b d4 3d 28 20 7d 44 48 65 02 ff 7b dd a6 48 2f 
a1 e3 9e ae 7d 5f 8d 
]]></artwork></figure>

<t>From there, the 64 byte signature can be computed:</t>

<figure><artwork><![CDATA[
Signature_or_MAC_3 (CBOR unencoded) (64 bytes)
ab 9f 7b bd eb c4 eb f8 a3 d3 04 17 9b cc a3 9d 9c 8a 76 73 65 76 fb 3c 
32 d2 fa c7 e2 59 34 e5 33 dc c7 02 2e 4d 68 61 c8 f5 fe cb e9 2d 17 4e 
b2 be af 0a 59 a4 15 84 37 2f 43 2e 6b f4 7b 04 
]]></artwork></figure>

<t>Finally, the outer COSE_Encrypt0 is computed.</t>

<t>The plaintext is the CBOR Sequence of the items ID_CRED_I and the CBOR encoded Signature_or_MAC_3, in this order (EAD_3 is empty).</t>

<figure><artwork><![CDATA[
P_3ae (CBOR Sequence) (80 bytes)
a1 18 22 82 2e 48 70 5d 58 45 f3 6f c6 a6 58 40 ab 9f 7b bd eb c4 eb f8 
a3 d3 04 17 9b cc a3 9d 9c 8a 76 73 65 76 fb 3c 32 d2 fa c7 e2 59 34 e5 
33 dc c7 02 2e 4d 68 61 c8 f5 fe cb e9 2d 17 4e b2 be af 0a 59 a4 15 84 
37 2f 43 2e 6b f4 7b 04 
]]></artwork></figure>

<t>The Associated data A is the following:
Associated data A = [ “Encrypt0”, h’’, TH_3 ]</t>

<figure><artwork><![CDATA[
A_3ae (CBOR-encoded) (45 bytes)
83 68 45 6e 63 72 79 70 74 30 40 58 20 f2 4d 18 ca fc e3 74 d4 e3 73 63 
29 c1 52 ab 3a ea 9c 7c 0f 65 0c 30 70 b6 f5 1e 68 e2 ae bb 60 
]]></artwork></figure>

<t>Key K_3ae is the output of HKDF-Expand(PRK_3e2m, info, L).</t>

<t>info is defined as follows:</t>

<figure><artwork><![CDATA[
info for K_3ae = 
[
  10,
  h'F24D18CAFCE374D4E3736329C152AB3AEA9C7C0F650C3070B6F51E68E2AEBB60',
  "K_3ae",
  16
]
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
info for K_3ae (CBOR-encoded) (43 bytes)
84 0a 58 20 f2 4d 18 ca fc e3 74 d4 e3 73 63 29 c1 52 ab 3a ea 9c 7c 0f 
65 0c 30 70 b6 f5 1e 68 e2 ae bb 60 65 4b 5f 33 61 65 10 
]]></artwork></figure>

<t>L is the length of K_3ae, so 16 bytes.</t>

<t>From these parameters, K_3ae is computed:</t>

<figure><artwork><![CDATA[
K_3ae (16 bytes)
b8 79 9f e3 d1 50 4f d8 eb 22 c4 72 62 cd bb 05
]]></artwork></figure>

<t>Nonce IV_3ae is the output of HKDF-Expand(PRK_3e2m, info, L).</t>

<t>info is defined as follows:</t>

<figure><artwork><![CDATA[
info for IV_3ae =
[
  10,
  h'F24D18CAFCE374D4E3736329C152AB3AEA9C7C0F650C3070B6F51E68E2AEBB60',
  "IV_3ae", 
  13
]
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
info for IV_3ae (CBOR-encoded) (44 bytes)
84 0a 58 20 f2 4d 18 ca fc e3 74 d4 e3 73 63 29 c1 52 ab 3a ea 9c 7c 0f 
65 0c 30 70 b6 f5 1e 68 e2 ae bb 60 66 49 56 5f 33 61 65 0d  
]]></artwork></figure>

<t>L is the length of IV_3ae, so 13 bytes.</t>

<t>From these parameters, IV_3ae is computed:</t>

<figure><artwork><![CDATA[
IV_3ae (13 bytes)
74 c7 de 41 b8 4a 5b b7 19 0a 85 98 dc 
]]></artwork></figure>

<t>Using the parameters above, the ‘ciphertext’ CIPHERTEXT_3 can be computed:</t>

<figure><artwork><![CDATA[
CIPHERTEXT_3 (CBOR unencoded) (88 bytes)
f5 f6 de bd 82 14 05 1c d5 83 c8 40 96 c4 80 1d eb f3 5b 15 36 3d d1 6e 
bd 85 30 df dc fb 34 fc d2 eb 6c ad 1d ac 66 a4 79 fb 38 de aa f1 d3 0a 
7e 68 17 a2 2a b0 4f 3d 5b 1e 97 2a 0d 13 ea 86 c6 6b 60 51 4c 96 57 ea 
89 c5 7b 04 01 ed c5 aa 8b bc ab 81 3c c5 d6 e7
]]></artwork></figure>

<t>From the parameter above, message_3 is computed, as the CBOR Sequence of the following CBOR encoded data items: (C_R, CIPHERTEXT_3).</t>

<figure><artwork><![CDATA[
message_3 =
(
  -24,
  h'F5F6DEBD8214051CD583C84096C4801DEBF35B15363DD16EBD8530DFDCFB34FCD2EB
  6CAD1DAC66A479FB38DEAAF1D30A7E6817A22AB04F3D5B1E972A0D13EA86C66B60514C
  9657EA89C57B0401EDC5AA8BBCAB813CC5D6E7'
)
]]></artwork></figure>

<t>Which encodes to the following byte string:</t>

<figure><artwork><![CDATA[
message_3 (CBOR Sequence) (91 bytes)
37 58 58 f5 f6 de bd 82 14 05 1c d5 83 c8 40 96 c4 80 1d eb f3 5b 15 36 
3d d1 6e bd 85 30 df dc fb 34 fc d2 eb 6c ad 1d ac 66 a4 79 fb 38 de aa 
f1 d3 0a 7e 68 17 a2 2a b0 4f 3d 5b 1e 97 2a 0d 13 ea 86 c6 6b 60 51 4c 
96 57 ea 89 c5 7b 04 01 ed c5 aa 8b bc ab 81 3c c5 d6 e7 
]]></artwork></figure>

</section>
<section anchor="oscore-security-context-derivation" title="OSCORE Security Context Derivation">

<t>From here, the Initiator and the Responder can derive an OSCORE Security Context, using the EDHOC-Exporter interface.</t>

<t>From TH_3 and CIPHERTEXT_3, compute the input to the transcript hash TH_4 = H( TH_3, CIPHERTEXT_3 ), as a CBOR Sequence of these 2 data items.</t>

<figure><artwork><![CDATA[
Input to calculate TH_4 (CBOR Sequence) (124 bytes)
58 20 f2 4d 18 ca fc e3 74 d4 e3 73 63 29 c1 52 ab 3a ea 9c 7c 0f 65 0c 
30 70 b6 f5 1e 68 e2 ae bb 60 58 58 f5 f6 de bd 82 14 05 1c d5 83 c8 40 
96 c4 80 1d eb f3 5b 15 36 3d d1 6e bd 85 30 df dc fb 34 fc d2 eb 6c ad 
1d ac 66 a4 79 fb 38 de aa f1 d3 0a 7e 68 17 a2 2a b0 4f 3d 5b 1e 97 2a 
0d 13 ea 86 c6 6b 60 51 4c 96 57 ea 89 c5 7b 04 01 ed c5 aa 8b bc ab 81 
3c c5 d6 e7 
]]></artwork></figure>

<t>And from there, compute the transcript hash TH_4 = SHA-256(TH_3 , CIPHERTEXT_4)</t>

<figure><artwork><![CDATA[
TH_4 (CBOR unencoded) (32 bytes)
3b 69 a6 7f ec 7e 73 6c c1 a9 52 6c da 00 02 d4 09 f5 b9 ea 0a 2b e9 60 
51 a6 e3 0d 93 05 fd 51 
]]></artwork></figure>

<t>The Master Secret and Master Salt are derived as follows:</t>

<t>Master Secret = EDHOC-Exporter( “OSCORE Master Secret”, 16 ) = EDHOC-KDF(PRK_4x3m, TH_4, “OSCORE Master Secret”, 16) = HKDF-Expand( PRK_4x3m, info_ms, 16 )</t>

<t>Master Salt   = EDHOC-Exporter( “OSCORE Master Salt”, 8 ) = EDHOC-KDF(PRK_4x3m, TH_4, “OSCORE Master Salt”, 8) = HKDF-Expand( PRK_4x3m, info_salt, 8 )</t>

<t>info_ms for OSCORE Master Secret is defined as follows:</t>

<figure><artwork><![CDATA[
info_ms = [
  10, 
  h'3B69A67FEC7E736CC1A9526CDA0002D409F5B9EA0A2BE96051A6E30D9305FD51', 
  "OSCORE Master Secret", 
  16
]
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
info_ms for OSCORE Master Secret (CBOR-encoded) (58 bytes)
84 0a 58 20 3b 69 a6 7f ec 7e 73 6c c1 a9 52 6c da 00 02 d4 09 f5 b9 ea 
0a 2b e9 60 51 a6 e3 0d 93 05 fd 51 74 4f 53 43 4f 52 45 20 4d 61 73 74 
65 72 20 53 65 63 72 65 74 10 
]]></artwork></figure>

<t>info_salt for OSCORE Master Salt is defined as follows:</t>

<figure><artwork><![CDATA[
info_salt = [
  10, 
  h'3B69A67FEC7E736CC1A9526CDA0002D409F5B9EA0A2BE96051A6E30D9305FD51', 
  "OSCORE Master Salt", 
  8
]
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
info for OSCORE Master Salt (CBOR-encoded) (56 Bytes)
84 0a 58 20 3b 69 a6 7f ec 7e 73 6c c1 a9 52 6c da 00 02 d4 09 f5 b9 ea 
0a 2b e9 60 51 a6 e3 0d 93 05 fd 51 72 4f 53 43 4f 52 45 20 4d 61 73 74 
65 72 20 53 61 6c 74 08 
]]></artwork></figure>

<t>From these parameters, OSCORE Master Secret and OSCORE Master Salt are computed:</t>

<figure><artwork><![CDATA[
OSCORE Master Secret (16 bytes)
96 aa 88 ce 86 5e ba 1f fa f3 89 64 13 2c c4 42
]]></artwork></figure>

<figure><artwork><![CDATA[
OSCORE Master Salt (8 bytes)
5e c3 ee 41 7c fb ba e9 
]]></artwork></figure>

<t>The client’s OSCORE Sender ID is C_R and the server’s OSCORE Sender ID is C_I.</t>

<figure><artwork><![CDATA[
Client's OSCORE Sender ID (1 byte)
00 
]]></artwork></figure>

<figure><artwork><![CDATA[
Server's OSCORE Sender ID (1 byte)
09
]]></artwork></figure>

<t>The AEAD Algorithm and the hash algorithm are the application AEAD and hash algorithms in the selected cipher suite.</t>

<figure><artwork><![CDATA[
OSCORE AEAD Algorithm (int)
10
]]></artwork></figure>

<figure><artwork><![CDATA[
OSCORE Hash Algorithm (int)
-16
]]></artwork></figure>

</section>
</section>
<section anchor="test-vectors-for-edhoc-authenticated-with-static-diffie-hellman-keys" title="Test Vectors for EDHOC Authenticated with Static Diffie-Hellman Keys">

<!-- Test vector index (int) 34900 -->

<t>EDHOC with static Diffie-Hellman keys and raw public keys is used. In this test vector, a key identifier is used to identify the raw public key. The optional C_1 in message_1 is omitted. No external authorization data is sent in the message exchange.</t>

<figure><artwork><![CDATA[
method (Static DH Based Authentication)
3
]]></artwork></figure>

<t>CoAP is used as transport and the Initiator acts as CoAP client:</t>

<figure><artwork><![CDATA[
corr (the Initiator can correlate message_1 and message_2)
1
]]></artwork></figure>

<t>From there, METHOD_CORR has the following value:</t>

<figure><artwork><![CDATA[
METHOD_CORR (4 * method + corr) (int)
13
]]></artwork></figure>

<t>The Initiator indicates only one cipher suite in the (potentially truncated) list of cipher suites.</t>

<figure><artwork><![CDATA[
Supported Cipher Suites (1 byte)
00
]]></artwork></figure>

<t>The Initiator selected the indicated cipher suite.</t>

<figure><artwork><![CDATA[
Selected Cipher Suite (int)
0
]]></artwork></figure>

<t>Cipher suite 0 is supported by both the Initiator and the Responder, see <xref target="cs"/>.</t>

<section anchor="dh-ss-m1" title="Message_1">

<t>The Initiator generates its ephemeral key pair.</t>

<figure><artwork><![CDATA[
X (Initiator's ephemeral private key) (32 bytes)
ae 11 a0 db 86 3c 02 27 e5 39 92 fe b8 f5 92 4c 50 d0 a7 ba 6e ea b4 ad 
1f f2 45 72 f4 f5 7c fa
]]></artwork></figure>

<figure><artwork><![CDATA[
G_X (Initiator's ephemeral public key, CBOR unencoded) (32 bytes)
8d 3e f5 6d 1b 75 0a 43 51 d6 8a c2 50 a0 e8 83 79 0e fc 80 a5 38 a4 44 
ee 9e 2b 57 e2 44 1a 7c
]]></artwork></figure>

<t>The Initiator chooses a connection identifier C_I:</t>

<figure><artwork><![CDATA[
Connection identifier chosen by Initiator (1 byte)
16
]]></artwork></figure>

<t>Note that since C_I is a byte string in the interval h’00’ to h’2f’, it is encoded as the corresponding integer - 24, i.e. 0x16 = 22, 22 - 24 = -2, and -2 in CBOR encoding is equal to 0x21.</t>

<figure><artwork><![CDATA[
C_I (1 byte)
21
]]></artwork></figure>

<t>Since no external authorization data is sent:</t>

<figure><artwork><![CDATA[
EAD_1 (0 bytes)
]]></artwork></figure>

<t>Since the list of supported cipher suites needs to contain the selected cipher suite, the initiator truncates the list of supported cipher suites to one cipher suite only, 00.</t>

<t>Because one single selected cipher suite is conveyed, it is encoded as an int instead of an array:</t>

<figure><artwork><![CDATA[
SUITES_I (int)
0
]]></artwork></figure>

<t>message_1 is constructed as the CBOR Sequence of the data items above encoded as CBOR. In CBOR diagnostic notation:</t>

<figure><artwork><![CDATA[
message_1 =
(
  13,
  0,
  h'8D3EF56D1B750A4351D68AC250A0E883790EFC80A538A444EE9E2B57E2441A7C',
  -2
)
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
message_1 (CBOR Sequence) (37 bytes)
0d 00 58 20 8d 3e f5 6d 1b 75 0a 43 51 d6 8a c2 50 a0 e8 83 79 0e fc 80 
a5 38 a4 44 ee 9e 2b 57 e2 44 1a 7c 21  
]]></artwork></figure>

</section>
<section anchor="dh-ss-m2" title="Message_2">

<t>Since METHOD_CORR mod 4 equals 1, C_I is omitted from data_2.</t>

<t>The Responder generates the following ephemeral key pair.</t>

<figure><artwork><![CDATA[
Y (Responder's ephemeral private key) (32 bytes)
c6 46 cd dc 58 12 6e 18 10 5f 01 ce 35 05 6e 5e bc 35 f4 d4 cc 51 07 49 
a3 a5 e0 69 c1 16 16 9a
]]></artwork></figure>

<figure><artwork><![CDATA[
G_Y (Responder's ephemeral public key, CBOR unencoded) (32 bytes)
52 fb a0 bd c8 d9 53 dd 86 ce 1a b2 fd 7c 05 a4 65 8c 7c 30 af db fc 33 
01 04 70 69 45 1b af 35 
]]></artwork></figure>

<t>From G_X and Y or from G_Y and X the ECDH shared secret is computed:</t>

<figure><artwork><![CDATA[
G_XY (ECDH shared secret) (32 bytes)
de fc 2f 35 69 10 9b 3d 1f a4 a7 3d c5 e2 fe b9 e1 15 0d 90 c2 5e e2 f0 
66 c2 d8 85 f4 f8 ac 4e
]]></artwork></figure>

<t>The key and nonce for calculating the ‘ciphertext’ are calculated as follows, as specified in <xref target="key-der"/>.</t>

<t>HKDF SHA-256 is the HKDF used (as defined by cipher suite 0).</t>

<t>PRK_2e = HMAC-SHA-256(salt, G_XY)</t>

<t>Salt is the empty byte string.</t>

<figure><artwork><![CDATA[
salt (0 bytes)
]]></artwork></figure>

<t>From there, PRK_2e is computed:</t>

<figure><artwork><![CDATA[
PRK_2e (32 bytes)
93 9f cb 05 6d 2e 41 4f 1b ec 61 04 61 99 c2 c7 63 d2 7f 0c 3d 15 fa 16 
71 fa 13 4e 0d c5 a0 4d 
]]></artwork></figure>

<t>The Responder’s static Diffie-Hellman key pair is the following:</t>

<figure><artwork><![CDATA[
R (Responder's private authentication key) (32 bytes)
bb 50 1a ac 67 b9 a9 5f 97 e0 ed ed 6b 82 a6 62 93 4f bb fc 7a d1 b7 4c 
1f ca d6 6a 07 94 22 d0 
]]></artwork></figure>

<figure><artwork><![CDATA[
G_R (Responder's public authentication key) (32 bytes)
a3 ff 26 35 95 be b3 77 d1 a0 ce 1d 04 da d2 d4 09 66 ac 6b cb 62 20 51 
b8 46 59 18 4d 5d 9a 32
]]></artwork></figure>

<t>Since the Responder authenticates with a static Diffie-Hellman key, PRK_3e2m = HKDF-Extract( PRK_2e, G_RX ), where G_RX is the ECDH shared secret calculated from G_R and X, or G_X and R.</t>

<t>From the Responder’s authentication key and the Initiator’s ephemeral key (see <xref target="dh-ss-m1"/>), the ECDH shared secret G_RX is calculated.</t>

<figure><artwork><![CDATA[
G_RX (ECDH shared secret) (32 bytes)
21 c7 ef f4 fb 69 fa 4b 67 97 d0 58 84 31 5d 84 11 a3 fd a5 4f 6d ad a6 
1d 4f cd 85 e7 90 66 68
]]></artwork></figure>

<figure><artwork><![CDATA[
PRK_3e2m (32 bytes)
75 07 7c 69 1e 35 01 2d 48 bc 24 c8 4f 2b ab 89 f5 2f ac 03 fe dd 81 3e 
43 8c 93 b1 0b 39 93 07 
]]></artwork></figure>

<t>The Responder chooses a connection identifier C_R.</t>

<figure><artwork><![CDATA[
Connection identifier chosen by Responder (1 byte)
00
]]></artwork></figure>

<t>Note that since C_R is a byte string in the interval h’00’ to h’2f’, it is encoded as the corresponding integer - 24, i.e. 0x00 = 0, 0 - 24 = -24, and -24 in CBOR encoding is equal to 0x37.</t>

<figure><artwork><![CDATA[
C_R (1 byte)
37
]]></artwork></figure>

<t>Data_2 is constructed as the CBOR Sequence of G_Y and C_R.</t>

<figure><artwork><![CDATA[
data_2 =
(
  h'52FBA0BDC8D953DD86CE1AB2FD7C05A4658C7C30AFDBFC3301047069451BAF35',
  -24
)
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
data_2 (CBOR Sequence) (35 bytes)
58 20 52 fb a0 bd c8 d9 53 dd 86 ce 1a b2 fd 7c 05 a4 65 8c 7c 30 af db 
fc 33 01 04 70 69 45 1b af 35 37 
]]></artwork></figure>

<t>From data_2 and message_1, compute the input to the transcript hash TH_2 = H( H(message_1), data_2 ), as a CBOR Sequence of these 2 data items.</t>

<figure><artwork><![CDATA[
Input to calculate TH_2 (CBOR Sequence) (72 bytes)
0d 00 58 20 8d 3e f5 6d 1b 75 0a 43 51 d6 8a c2 50 a0 e8 83 79 0e fc 80 
a5 38 a4 44 ee 9e 2b 57 e2 44 1a 7c 21 58 20 52 fb a0 bd c8 d9 53 dd 86 
ce 1a b2 fd 7c 05 a4 65 8c 7c 30 af db fc 33 01 04 70 69 45 1b af 35 37  
]]></artwork></figure>

<t>And from there, compute the transcript hash TH_2 = SHA-256( H(message_1), data_2 )</t>

<figure><artwork><![CDATA[
TH_2 (CBOR unencoded) (32 bytes)
de cf d6 4a 36 67 64 0a 02 33 b0 4a a8 aa 91 f6 89 56 b8 a5 36 d0 cf 8c 
73 a6 e8 a7 c3 62 1e 26 
]]></artwork></figure>

<t>The Responder’s subject name is the empty string:</t>

<figure><artwork><![CDATA[
Responder's subject name (text string)
""
]]></artwork></figure>

<t>ID_CRED_R is the following:</t>

<figure><artwork><![CDATA[
ID_CRED_R =
{
  4: h'05'
}
]]></artwork></figure>

<figure><artwork><![CDATA[
ID_CRED_R (4 bytes)
a1 04 41 05 
]]></artwork></figure>

<t>CRED_R is the following COSE_Key:</t>

<figure><artwork><![CDATA[
{
  1: 1,
 -1: 4,
 -2: h'A3FF263595BEB377D1A0CE1D04DAD2D40966AC6BCB622051B84659184D5D9A32,
  "subject name": ""
}
]]></artwork></figure>

<t>Which encodes to the following byte string:</t>

<figure><artwork><![CDATA[
CRED_R (54 bytes)
a4 01 01 20 04 21 58 20 a3 ff 26 35 95 be b3 77 d1 a0 ce 1d 04 da d2 d4 
09 66 ac 6b cb 62 20 51 b8 46 59 18 4d 5d 9a 32 6c 73 75 62 6a 65 63 74 
20 6e 61 6d 65 60 
]]></artwork></figure>

<t>Since no external authorization data is sent:</t>

<figure><artwork><![CDATA[
EAD_2  (0 bytes)
]]></artwork></figure>

<t>The plaintext is defined as the empty string:</t>

<figure><artwork><![CDATA[
P_2m (0 bytes)
]]></artwork></figure>

<t>The Enc_structure is defined as follows: [ “Encrypt0”, « ID_CRED_R », « TH_2, CRED_R » ], so ID_CRED_R is encoded as a CBOR bstr, and the concatenation of the CBOR byte strings TH_2 and CRED_R is wrapped in a CBOR bstr.</t>

<figure><artwork><![CDATA[
A_2m =
[
  "Encrypt0", 
  h'A1044105', 
  h'5820DECFD64A3667640A0233B04AA8AA91F68956B8A536D0CF8C73A6E8A7C3621E2
  6A401012004215820A3FF263595BEB377D1A0CE1D04DAD2D40966AC6BCB622051B846
  59184D5D9A326C7375626A656374206E616D6560'
]
]]></artwork></figure>

<t>Which encodes to the following byte string to be used as Additional Authenticated Data:</t>

<figure><artwork><![CDATA[
A_2m (CBOR-encoded) (105 bytes)
83 68 45 6e 63 72 79 70 74 30 44 a1 04 41 05 58 58 58 20 de cf d6 4a 36 
67 64 0a 02 33 b0 4a a8 aa 91 f6 89 56 b8 a5 36 d0 cf 8c 73 a6 e8 a7 c3 
62 1e 26 a4 01 01 20 04 21 58 20 a3 ff 26 35 95 be b3 77 d1 a0 ce 1d 04 
da d2 d4 09 66 ac 6b cb 62 20 51 b8 46 59 18 4d 5d 9a 32 6c 73 75 62 6a 
65 63 74 20 6e 61 6d 65 60 
]]></artwork></figure>

<t>info for K_2m is defined as follows:</t>

<figure><artwork><![CDATA[
info for K_2m =
[
  10, 
  h'DECFD64A3667640A0233B04AA8AA91F68956B8A536D0CF8C73A6E8A7C3621E26', 
  "K_2m", 
  16
]
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
info for K_2m (CBOR-encoded) (42 bytes)
84 0a 58 20 de cf d6 4a 36 67 64 0a 02 33 b0 4a a8 aa 91 f6 89 56 b8 a5 
36 d0 cf 8c 73 a6 e8 a7 c3 62 1e 26 64 4b 5f 32 6d 10 
]]></artwork></figure>

<t>From these parameters, K_2m is computed. Key K_2m is the output of HKDF-Expand(PRK_3e2m, info, L), where L is the length of K_2m, so 16 bytes.</t>

<figure><artwork><![CDATA[
K_2m (16 bytes)
4e cd ef ba d8 06 81 8b 62 51 b9 d7 86 78 bc 76
]]></artwork></figure>

<t>info for IV_2m is defined as follows:</t>

<figure><artwork><![CDATA[
info for IV_2m =
[
  10, 
  h'A51C76463E8AE58FD3B8DC5EDE1E27143CC92D223EACD9E5FF6E3FAC876658A5', 
  "IV_2m", 
  13
]
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
info for IV_2m (CBOR-encoded) (43 bytes)
84 0a 58 20 de cf d6 4a 36 67 64 0a 02 33 b0 4a a8 aa 91 f6 89 56 b8 a5 
36 d0 cf 8c 73 a6 e8 a7 c3 62 1e 26 65 49 56 5f 32 6d 0d 
]]></artwork></figure>

<t>From these parameters, IV_2m is computed. IV_2m is the output of HKDF-Expand(PRK_3e2m, info, L), where L is the length of IV_2m, so 13 bytes.</t>

<figure><artwork><![CDATA[
IV_2m (13 bytes)
e9 b8 e4 b1 bd 02 f4 9a 82 0d d3 53 4f 
]]></artwork></figure>

<t>Finally, COSE_Encrypt0 is computed from the parameters above.</t>

<t><list style="symbols">
  <t>protected header = CBOR-encoded ID_CRED_R</t>
  <t>external_aad = A_2m</t>
  <t>empty plaintext = P_2m</t>
</list></t>

<t>MAC_2 is the ‘ciphertext’ of the COSE_Encrypt0 with empty plaintext. In case of cipher suite 0 the AEAD is AES-CCM truncated to 8 bytes:</t>

<figure><artwork><![CDATA[
MAC_2 (CBOR unencoded) (8 bytes)
42 e7 99 78 43 1e 6b 8f
]]></artwork></figure>

<t>Since method = 2, Signature_or_MAC_2 is MAC_2:</t>

<figure><artwork><![CDATA[
Signature_or_MAC_2 (CBOR unencoded) (8 bytes)
42 e7 99 78 43 1e 6b 8f 
]]></artwork></figure>

<t>CIPHERTEXT_2 is the ciphertext resulting from XOR between plaintext and KEYSTREAM_2 which is derived from TH_2 and the pseudorandom key PRK_2e.</t>

<t>The plaintext is the CBOR Sequence of the items ID_CRED_R and the CBOR encoded Signature_or_MAC_2, in this order (EAD_2 is empty).</t>

<t>Note that since ID_CRED_R contains a single ‘kid’ parameter, i.e., ID_CRED_R = { 4 : kid_R }, only the byte string kid_R is conveyed in the plaintext encoded as a bstr_identifier. kid_R is encoded as the corresponding integer - 24, i.e. 0x05 = 5, 5 - 24 = -19, and -19 in CBOR encoding is equal to 0x32.</t>

<t>The plaintext is the following:</t>

<figure><artwork><![CDATA[
P_2e (CBOR Sequence) (10 bytes)
32 48 42 e7 99 78 43 1e 6b 8f 
]]></artwork></figure>

<t>KEYSTREAM_2 = HKDF-Expand( PRK_2e, info, length ), where length is the length of the plaintext, so 10.</t>

<figure><artwork><![CDATA[
info for KEYSTREAM_2 =
[
  10, 
  h'DECFD64A3667640A0233B04AA8AA91F68956B8A536D0CF8C73A6E8A7C3621E26', 
  "KEYSTREAM_2", 
  10
]
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
info for KEYSTREAM_2 (CBOR-encoded) (49 bytes)
84 0a 58 20 de cf d6 4a 36 67 64 0a 02 33 b0 4a a8 aa 91 f6 89 56 b8 a5 
36 d0 cf 8c 73 a6 e8 a7 c3 62 1e 26 6b 4b 45 59 53 54 52 45 41 4d 5f 32 
0a 
]]></artwork></figure>

<t>From there, KEYSTREAM_2 is computed:</t>

<figure><artwork><![CDATA[
KEYSTREAM_2 (10 bytes)
91 b9 ff ba 9b f5 5a d1 57 16 
]]></artwork></figure>

<t>Using the parameters above, the ciphertext CIPHERTEXT_2 can be computed:</t>

<figure><artwork><![CDATA[
CIPHERTEXT_2 (CBOR unencoded) (10 bytes)
a3 f1 bd 5d 02 8d 19 cf 3c 99
]]></artwork></figure>

<t>message_2 is the CBOR Sequence of data_2 and CIPHERTEXT_2, in this order:</t>

<figure><artwork><![CDATA[
message_2 =
(
 data_2,
 h'A3F1BD5D028D19CF3C99'
) 
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
message_2 (CBOR Sequence) (46 bytes)
58 20 52 fb a0 bd c8 d9 53 dd 86 ce 1a b2 fd 7c 05 a4 65 8c 7c 30 af db 
fc 33 01 04 70 69 45 1b af 35 37 4a a3 f1 bd 5d 02 8d 19 cf 3c 99 
]]></artwork></figure>

</section>
<section anchor="message3-1" title="Message_3">

<t>Since corr equals 1, C_R is not omitted from data_3.</t>

<t>The Initiator’s static Diffie-Hellman key pair is the following:</t>

<figure><artwork><![CDATA[
I (Initiator's private authentication key) (32 bytes)
2b be a6 55 c2 33 71 c3 29 cf bd 3b 1f 02 c6 c0 62 03 38 37 b8 b5 90 99 
a4 43 6f 66 60 81 b0 8e 
]]></artwork></figure>

<figure><artwork><![CDATA[
G_I (Initiator's public authentication key, CBOR unencoded) (32 bytes)
2c 44 0c c1 21 f8 d7 f2 4c 3b 0e 41 ae da fe 9c aa 4f 4e 7a bb 83 5e c3 
0f 1d e8 8a db 96 ff 71
]]></artwork></figure>

<t>HKDF SHA-256 is the HKDF used (as defined by cipher suite 0).</t>

<t>From the Initiator’s authentication key and the Responder’s ephemeral key (see <xref target="dh-ss-m2"/>), the ECDH shared secret G_IY is calculated.</t>

<figure><artwork><![CDATA[
G_IY (ECDH shared secret) (32 bytes)
cb ff 8c d3 4a 81 df ec 4c b6 5d 9a 57 2e bd 09 64 45 0c 78 56 3d a4 98 
1d 80 d3 6c 8b 1a 75 2a 
]]></artwork></figure>

<t>PRK_4x3m = HMAC-SHA-256 (PRK_3e2m, G_IY).</t>

<figure><artwork><![CDATA[
PRK_4x3m (32 bytes)
02 56 2f 1f 01 78 5c 0a a5 f5 94 64 0c 49 cb f6 9f 72 2e 9e 6c 57 83 7d 
8e 15 79 ec 45 fe 64 7a 
]]></artwork></figure>

<t>data 3 is equal to C_R.</t>

<figure><artwork><![CDATA[
data_3 (CBOR Sequence) (1 byte)
37 
]]></artwork></figure>

<t>From data_3, CIPHERTEXT_2, and TH_2, compute the input to the transcript hash TH_3 = H( H(TH_2 , CIPHERTEXT_2), data_3), as a CBOR Sequence of these 2 data items.</t>

<figure><artwork><![CDATA[
Input to calculate TH_3 (CBOR Sequence) (46 bytes)
58 20 de cf d6 4a 36 67 64 0a 02 33 b0 4a a8 aa 91 f6 89 56 b8 a5 36 d0 
cf 8c 73 a6 e8 a7 c3 62 1e 26 4a a3 f1 bd 5d 02 8d 19 cf 3c 99 37  
]]></artwork></figure>

<t>And from there, compute the transcript hash TH_3 = SHA-256( H(TH_2 , CIPHERTEXT_2), data_3)</t>

<figure><artwork><![CDATA[
TH_3 (CBOR unencoded) (32 bytes)
b6 cd 80 4f c4 b9 d7 ca c5 02 ab d7 7c da 74 e4 1c b0 11 82 d7 cb 8b 84 
db 03 ff a5 83 a3 5f cb 
]]></artwork></figure>

<t>The initiator’s subject name is the empty string:</t>

<figure><artwork><![CDATA[
Initiator's subject name (text string)
""
]]></artwork></figure>

<t>And its credential is:</t>

<figure><artwork><![CDATA[
ID_CRED_I =
{
  4: h'23'
}
]]></artwork></figure>

<figure><artwork><![CDATA[
ID_CRED_I (4 bytes)
a1 04 41 23
]]></artwork></figure>

<t>CRED_I is the following COSE_Key:</t>

<figure><artwork><![CDATA[
{
 1:1, 
 -1:4,
 -2:h'2C440CC121F8D7F24C3B0E41AEDAFE9CAA4F4E7ABB835EC30F1DE88ADB96FF71', 
 "subject name":""
 }
]]></artwork></figure>

<t>Which encodes to the following byte string:</t>

<figure><artwork><![CDATA[
CRED_I (54 bytes)
a4 01 01 20 04 21 58 20 2c 44 0c c1 21 f8 d7 f2 4c 3b 0e 41 ae da fe 9c 
aa 4f 4e 7a bb 83 5e c3 0f 1d e8 8a db 96 ff 71 6c 73 75 62 6a 65 63 74 
20 6e 61 6d 65 60 
]]></artwork></figure>

<t>Since no external authorization data is exchanged:</t>

<figure><artwork><![CDATA[
EAD_3 (0 bytes)
]]></artwork></figure>

<t>The plaintext of the COSE_Encrypt is the empty string:</t>

<figure><artwork><![CDATA[
P_3m (0 bytes)
]]></artwork></figure>

<t>The associated data is the following: 
[ “Encrypt0”, « ID_CRED_I », « TH_3, CRED_I, ? EAD_3 » ].</t>

<figure><artwork><![CDATA[
A_3m (CBOR-encoded) (105 bytes)
83 68 45 6e 63 72 79 70 74 30 44 a1 04 41 23 58 58 58 20 b6 cd 80 4f c4 
b9 d7 ca c5 02 ab d7 7c da 74 e4 1c b0 11 82 d7 cb 8b 84 db 03 ff a5 83 
a3 5f cb a4 01 01 20 04 21 58 20 2c 44 0c c1 21 f8 d7 f2 4c 3b 0e 41 ae 
da fe 9c aa 4f 4e 7a bb 83 5e c3 0f 1d e8 8a db 96 ff 71 6c 73 75 62 6a 
65 63 74 20 6e 61 6d 65 60 
]]></artwork></figure>

<t>Info for K_3m is computed as follows:</t>

<figure><artwork><![CDATA[
info for K_3m =
[
  10, 
  h'B6CD804FC4B9D7CAC502ABD77CDA74E41CB01182D7CB8B84DB03FFA583A35FCB', 
  "K_3m", 
  16
]
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
info for K_3m (CBOR-encoded) (42 bytes)
84 0a 58 20 b6 cd 80 4f c4 b9 d7 ca c5 02 ab d7 7c da 74 e4 1c b0 11 82 
d7 cb 8b 84 db 03 ff a5 83 a3 5f cb 64 4b 5f 33 6d 10    
]]></artwork></figure>

<t>From these parameters, K_3m is computed. Key K_3m is the output of HKDF-Expand(PRK_4x3m, info, L), where L is the length of K_2m, so 16 bytes.</t>

<figure><artwork><![CDATA[
K_3m (16 bytes)
02 c7 e7 93 89 9d 90 d1 28 28 10 26 96 94 c9 58
]]></artwork></figure>

<t>Nonce IV_3m is the output of HKDF-Expand(PRK_4x3m, info, L), where L = 13 bytes.</t>

<t>Info for IV_3m is defined as follows:</t>

<figure><artwork><![CDATA[
info for IV_3m =
[
  10, 
  h'B6CD804FC4B9D7CAC502ABD77CDA74E41CB01182D7CB8B84DB03FFA583A35FCB', 
  "IV_3m", 
  13
]
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
info for IV_3m (CBOR-encoded) (43 bytes)
84 0a 58 20 b6 cd 80 4f c4 b9 d7 ca c5 02 ab d7 7c da 74 e4 1c b0 11 82 
d7 cb 8b 84 db 03 ff a5 83 a3 5f cb 65 49 56 5f 33 6d 0d 
]]></artwork></figure>

<t>From these parameters, IV_3m is computed:</t>

<figure><artwork><![CDATA[
IV_3m (13 bytes)
0d a7 cc 3a 6f 9a b2 48 52 ce 8b 37 a6  
]]></artwork></figure>

<t>MAC_3 is the ‘ciphertext’ of the COSE_Encrypt0 with empty plaintext. In case of cipher suite 0 the AEAD is AES-CCM truncated to 8 bytes:</t>

<figure><artwork><![CDATA[
MAC_3 (CBOR unencoded) (8 bytes)
ee 59 8e a6 61 17 dc c3 
]]></artwork></figure>

<t>Since method = 3, Signature_or_MAC_3 is MAC_3:</t>

<figure><artwork><![CDATA[
Signature_or_MAC_3 (CBOR unencoded) (8 bytes)
ee 59 8e a6 61 17 dc c3 
]]></artwork></figure>

<t>Finally, the outer COSE_Encrypt0 is computed.</t>

<t>The plaintext is the CBOR Sequence of the items ID_CRED_I and the CBOR encoded Signature_or_MAC_3, in this order (EAD_3 is empty).</t>

<t>Note that since ID_CRED_I contains a single ‘kid’ parameter, i.e., ID_CRED_I = { 4 : kid_I }, only the byte string kid_I is conveyed in the plaintext encoded as a bstr_identifier. kid_I is encoded as the corresponding integer - 24, i.e. 0x23 = 35, 35 - 24 = 11, and 11 in CBOR encoding is equal to 0x0b.</t>

<figure><artwork><![CDATA[
P_3ae (CBOR Sequence) (10 bytes)
0b 48 ee 59 8e a6 61 17 dc c3 
]]></artwork></figure>

<t>The Associated data A is the following:
Associated data A = [ “Encrypt0”, h’’, TH_3 ]</t>

<figure><artwork><![CDATA[
A_3ae (CBOR-encoded) (45 bytes)
83 68 45 6e 63 72 79 70 74 30 40 58 20 b6 cd 80 4f c4 b9 d7 ca c5 02 ab 
d7 7c da 74 e4 1c b0 11 82 d7 cb 8b 84 db 03 ff a5 83 a3 5f cb 
]]></artwork></figure>

<t>Key K_3ae is the output of HKDF-Expand(PRK_3e2m, info, L).</t>

<t>info is defined as follows:</t>

<figure><artwork><![CDATA[
info for K_3ae = 
[
  10, 
  h'B6CD804FC4B9D7CAC502ABD77CDA74E41CB01182D7CB8B84DB03FFA583A35FCB', 
  "K_3ae", 
  16
]
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
info for K_3ae (CBOR-encoded) (43 bytes)
84 0a 58 20 b6 cd 80 4f c4 b9 d7 ca c5 02 ab d7 7c da 74 e4 1c b0 11 82 
d7 cb 8b 84 db 03 ff a5 83 a3 5f cb 65 4b 5f 33 61 65 10 
]]></artwork></figure>

<t>L is the length of K_3ae, so 16 bytes.</t>

<t>From these parameters, K_3ae is computed:</t>

<figure><artwork><![CDATA[
K_3ae (16 bytes)
6b a4 c8 83 1d e3 ae 23 e9 8e f7 35 08 d0 95 86  
]]></artwork></figure>

<t>Nonce IV_3ae is the output of HKDF-Expand(PRK_3e2m, info, L).</t>

<t>info is defined as follows:</t>

<figure><artwork><![CDATA[
info for IV_3ae =
[
  10, 
  h'97D8AD42334833EB25B960A5EB0704505F89671A0168AA1115FAF92D9E67EF04', 
  "IV_3ae", 
  13
]
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
info for IV_3ae (CBOR-encoded) (44 bytes)
84 0a 58 20 b6 cd 80 4f c4 b9 d7 ca c5 02 ab d7 7c da 74 e4 1c b0 11 82 
d7 cb 8b 84 db 03 ff a5 83 a3 5f cb 66 49 56 5f 33 61 65 0d  
]]></artwork></figure>

<t>L is the length of IV_3ae, so 13 bytes.</t>

<t>From these parameters, IV_3ae is computed:</t>

<figure><artwork><![CDATA[
IV_3ae (13 bytes)
6c 6d 0f e1 1e 9a 1a f3 7b 87 84 55 10  
]]></artwork></figure>

<t>Using the parameters above, the ‘ciphertext’ CIPHERTEXT_3 can be computed:</t>

<figure><artwork><![CDATA[
CIPHERTEXT_3 (CBOR unencoded) (18 bytes)
d5 53 5f 31 47 e8 5f 1c fa cd 9e 78 ab f9 e0 a8 1b bf 
]]></artwork></figure>

<t>From the parameter above, message_3 is computed, as the CBOR Sequence of the following items: (C_R, CIPHERTEXT_3).</t>

<figure><artwork><![CDATA[
message_3 =
(
  -24,
  h'D5535F3147E85F1CFACD9E78ABF9E0A81BBF'
)
]]></artwork></figure>

<t>Which encodes to the following byte string:</t>

<figure><artwork><![CDATA[
message_3 (CBOR Sequence) (20 bytes)
37 52 d5 53 5f 31 47 e8 5f 1c fa cd 9e 78 ab f9 e0 a8 1b bf
]]></artwork></figure>

</section>
<section anchor="oscore-security-context-derivation-1" title="OSCORE Security Context Derivation">

<t>From here, the Initiator and the Responder can derive an OSCORE Security Context, using the EDHOC-Exporter interface.</t>

<t>From TH_3 and CIPHERTEXT_3, compute the input to the transcript hash TH_4 = H( TH_3, CIPHERTEXT_3 ), as a CBOR Sequence of these 2 data items.</t>

<figure><artwork><![CDATA[
Input to calculate TH_4 (CBOR Sequence) (53 bytes)
58 20 b6 cd 80 4f c4 b9 d7 ca c5 02 ab d7 7c da 74 e4 1c b0 11 82 d7 cb 
8b 84 db 03 ff a5 83 a3 5f cb 52 d5 53 5f 31 47 e8 5f 1c fa cd 9e 78 ab 
f9 e0 a8 1b bf  
]]></artwork></figure>

<t>And from there, compute the transcript hash TH_4 = SHA-256(TH_3 , CIPHERTEXT_4)</t>

<figure><artwork><![CDATA[
TH_4 (CBOR unencoded) (32 bytes)
7c cf de dc 2c 10 ca 03 56 e9 57 b9 f6 a5 92 e0 fa 74 db 2a b5 4f 59 24 
40 96 f9 a2 ac 56 d2 07 
]]></artwork></figure>

<t>The Master Secret and Master Salt are derived as follows:</t>

<t>Master Secret = EDHOC-Exporter( “OSCORE Master Secret”, 16 ) = EDHOC-KDF(PRK_4x3m, TH_4, “OSCORE Master Secret”, 16) = HKDF-Expand( PRK_4x3m, info_ms, 16 )</t>

<t>Master Salt   = EDHOC-Exporter( “OSCORE Master Salt”, 8 ) = EDHOC-KDF(PRK_4x3m, TH_4, “OSCORE Master Salt”, 8) = HKDF-Expand( PRK_4x3m, info_salt, 8 )</t>

<t>info_ms for OSCORE Master Secret is defined as follows:</t>

<figure><artwork><![CDATA[
info_ms = [
  10, 
  h'7CCFDEDC2C10CA0356E957B9F6A592E0FA74DB2AB54F59244096F9A2AC56D207', 
  "OSCORE Master Secret", 
  16
]
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
info_ms for OSCORE Master Secret (CBOR-encoded) (58 bytes)
84 0a 58 20 7c cf de dc 2c 10 ca 03 56 e9 57 b9 f6 a5 92 e0 fa 74 db 2a 
b5 4f 59 24 40 96 f9 a2 ac 56 d2 07 74 4f 53 43 4f 52 45 20 4d 61 73 74 
65 72 20 53 65 63 72 65 74 10 
]]></artwork></figure>

<t>info_salt for OSCORE Master Salt is defined as follows:</t>

<figure><artwork><![CDATA[
info_salt = [
  10, 
  h'7CCFDEDC2C10CA0356E957B9F6A592E0FA74DB2AB54F59244096F9A2AC56D207', 
  "OSCORE Master Salt", 
  8
]
]]></artwork></figure>

<t>Which as a CBOR encoded data item is:</t>

<figure><artwork><![CDATA[
info for OSCORE Master Salt (CBOR-encoded) (56 Bytes)
84 0a 58 20 7c cf de dc 2c 10 ca 03 56 e9 57 b9 f6 a5 92 e0 fa 74 db 2a 
b5 4f 59 24 40 96 f9 a2 ac 56 d2 07 72 4f 53 43 4f 52 45 20 4d 61 73 74 
65 72 20 53 61 6c 74 08 
]]></artwork></figure>

<t>From these parameters, OSCORE Master Secret and OSCORE Master Salt are computed:</t>

<figure><artwork><![CDATA[
OSCORE Master Secret (16 bytes)
c3 4a 50 6d 0e bf bd 17 03 04 86 13 5f 9c b3 50
]]></artwork></figure>

<figure><artwork><![CDATA[
OSCORE Master Salt (8 bytes)
c2 24 34 9d 9b 34 ca 8c 
]]></artwork></figure>

<t>The client’s OSCORE Sender ID is C_R and the server’s OSCORE Sender ID is C_I.</t>

<figure><artwork><![CDATA[
Client's OSCORE Sender ID (1 byte)
00
]]></artwork></figure>

<figure><artwork><![CDATA[
Server's OSCORE Sender ID (1 byte)
16
]]></artwork></figure>

<t>The AEAD Algorithm and the hash algorithm are the application AEAD and hash algorithms in the selected cipher suite.</t>

<figure><artwork><![CDATA[
OSCORE AEAD Algorithm (int)
10
]]></artwork></figure>

<figure><artwork><![CDATA[
OSCORE Hash Algorithm (int)
-16
]]></artwork></figure>

</section>
</section>
</section>
<section anchor="appl-temp" title="Applicability Template">

<t>This appendix contains an example of an applicability statement, see <xref target="applicability"/>.</t>

<t>For use of EDHOC in the XX protocol, the following assumptions are made on the parameters:</t>

<t><list style="symbols">
  <t>METHOD = 1 (I uses signature key, R uses static DH key.)</t>
  <t>EDHOC requests are expected by the server at /app1-edh, no Content-Format needed.</t>
  <t>CRED_I is an 802.1AR IDevID encoded as a C509 Certificate of type 0 <xref target="I-D.ietf-cose-cbor-encoded-cert"/>.
  <list style="symbols">
      <t>R acquires CRED_I out-of-band, indicated in EAD_1</t>
      <t>ID_CRED_I = {4: h’’} is a kid with value empty byte string</t>
    </list></t>
  <t>CRED_R is a COSE_Key of type OKP as specified in <xref target="id_cred"/>.
  <list style="symbols">
      <t>The CBOR map has parameters 1 (kty), -1 (crv), and -2 (x-coordinate).</t>
    </list></t>
  <t>ID_CRED_R = CRED_R</t>
  <t>No use of message_4: the application sends protected messages from R to I.</t>
  <t>External authorization data is defined and processed as specified in <xref target="I-D.selander-ace-ake-authz"/>.</t>
</list></t>

</section>
<section anchor="duplication" title="EDHOC Message Deduplication">

<t>EDHOC by default assumes that message duplication is handled by the transport, in this section exemplified with CoAP.</t>

<t>Deduplication of CoAP messages is described in Section 4.5 of <xref target="RFC7252"/>. This handles the case when the same Confirmable (CON) message is received multiple times due to missing acknowledgement on CoAP messaging layer. The recommended processing in <xref target="RFC7252"/> is that the duplicate message is acknowledged (ACK), but the received message is only processed once by the CoAP stack.</t>

<t>Message deduplication is resource demanding and therefore not supported in all CoAP implementations. Since EDHOC is targeting constrained environments, it is desirable that EDHOC can optionally support transport layers which does not handle message duplication. Special care is needed to avoid issues with duplicate messages, see <xref target="proc-outline"/>.</t>

<t>The guiding principle here is similar to the deduplication processing on CoAP messaging layer: a received duplicate EDHOC message SHALL NOT result in a response consisting of another instance of the next EDHOC message. The result MAY be that a duplicate EDHOC response is sent, provided it is still relevant with respect the current protocol state. In any case, the received message MUST NOT be processed more than once in the same EDHOC session. This is called “EDHOC message deduplication”.</t>

<t>An EDHOC implementation MAY store the previously sent EDHOC message to be able to resend it. An EDHOC implementation MAY keep the protocol state to be able to recreate the previously sent EDHOC message and resend it. The previous message or protocol state MUST NOT be kept longer than what is required for retransmission, for example, in the case of CoAP transport, no longer than the EXCHANGE_LIFETIME (see Section 4.8.2 of <xref target="RFC7252"/>).</t>

<t>Note that the requirements in <xref target="proc-outline"/> still apply because duplicate messages are not processed by the EDHOC state machine:</t>

<t><list style="symbols">
  <t>EDHOC messages SHALL be processed according to the current protocol state.</t>
  <t>Different instances of the same message MUST NOT be processed in one session.</t>
</list></t>

</section>
<section anchor="transports-not-natively-providing-correlation" title="Transports Not Natively Providing Correlation">

<t>Protocols that do not natively provide full correlation between a series of messages can send the C_I and C_R identifiers along as needed.</t>

<t>The transport over CoAP (<xref target="coap"/>) can serve as a blueprint for other server-client protocols:
The client prepends the C_x which the server selected (or, for message 1, a sentinel null value which is not a valid C_x) to any request message it sends.
The server does not send any such indicator, as responses are matched to request by the client-server protocol design.</t>

<t>Protocols that do not provide any correlation at all can prescribe prepending of the peer’s chosen C_x to all messages.</t>

<!--
Protocols that can provide all the necessary correlation but do not have any short-lived component to it
may need ... no, they don't need anything special: after an error, the next thing is a message 1 again.
-->

</section>
<section anchor="change-log" title="Change Log">

<t>Main changes:</t>

<t><list style="symbols">
  <t>From -07 to -08:
  <list style="symbols">
      <t>Prepended C_x moved from the EDHOC protocol itself to the transport mapping</t>
      <t>METHOD_CORR renamed to METHOD, corr removed</t>
      <t>Removed bstr_identifier and use bstr / int instead; C_x can now be int without any implied bstr semantics</t>
      <t>Defined COSE header parameter ‘kid2’ with value type bstr / int for use with ID_CRED_x</t>
      <t>Updated message sizes</t>
      <t>New cipher suites with AES-GCM and ChaCha20 / Poly1305</t>
      <t>Changed from one- to two-byte identifier of CNSA compliant suite</t>
      <t>Separate sections on transport and connection id with further sub-structure</t>
      <t>Moved back key derivation for OSCORE from draft-ietf-core-oscore-edhoc</t>
      <t>OSCORE and CoAP specific processing moved to new appendix</t>
      <t>Message 4 section moved to message processing section</t>
    </list></t>
  <t>From -06 to -07:
  <list style="symbols">
      <t>Changed transcript hash definition for TH_2 and TH_3</t>
      <t>Removed “EDHOC signature algorithm curve” from cipher suite</t>
      <t>New IANA registry “EDHOC Exporter Label”</t>
      <t>New application defined parameter “context” in EDHOC-Exporter</t>
      <t>Changed normative language for failure from MUST to SHOULD send error</t>
      <t>Made error codes non-negative and 0 for success</t>
      <t>Added detail on success error code</t>
      <t>Aligned terminology “protocol instance” -&gt;  “session”</t>
      <t>New appendix on compact EC point representation</t>
      <t>Added detail on use of ephemeral public keys</t>
      <t>Moved key derivation for OSCORE to draft-ietf-core-oscore-edhoc</t>
      <t>Additional security considerations</t>
      <t>Renamed “Auxililary Data” as “External Authorization Data”</t>
      <t>Added encrypted EAD_4 to message_4</t>
    </list></t>
  <t>From -05 to -06:
  <list style="symbols">
      <t>New section 5.2 “Message Processing Outline”</t>
      <t>Optional inital byte C_1 = null in message_1</t>
      <t>New format of error messages, table of error codes, IANA registry</t>
      <t>Change of recommendation transport of error in CoAP</t>
      <t>Merge of content in 3.7 and appendix C into new section 3.7 “Applicability Statement”</t>
      <t>Requiring use of deterministic CBOR</t>
      <t>New section on message deduplication</t>
      <t>New appendix containin all CDDL definitions</t>
      <t>New appendix with change log</t>
      <t>Removed section “Other Documents Referencing EDHOC”</t>
      <t>Clarifications based on review comments</t>
    </list></t>
  <t>From -04 to -05:
  <list style="symbols">
      <t>EDHOC-Rekey-FS -&gt; EDHOC-KeyUpdate</t>
      <t>Clarification of cipher suite negotiation</t>
      <t>Updated security considerations</t>
      <t>Updated test vectors</t>
      <t>Updated applicability statement template</t>
    </list></t>
  <t>From -03 to -04:
  <list style="symbols">
      <t>Restructure of section 1</t>
      <t>Added references to C509 Certificates</t>
      <t>Change in CIPHERTEXT_2 -&gt; plaintext XOR KEYSTREAM_2 (test vector not updated)</t>
      <t>“K_2e”, “IV_2e” -&gt; KEYSTREAM_2</t>
      <t>Specified optional message 4</t>
      <t>EDHOC-Exporter-FS -&gt; EDHOC-Rekey-FS</t>
      <t>Less constrained devices SHOULD implement both suite 0 and 2</t>
      <t>Clarification of error message</t>
      <t>Added exporter interface test vector</t>
    </list></t>
  <t>From -02 to -03:
  <list style="symbols">
      <t>Rearrangements of section 3 and beginning of section 4</t>
      <t>Key derivation new section 4</t>
      <t>Cipher suites 4 and 5 added</t>
      <t>EDHOC-EXPORTER-FS - generate a new PRK_4x3m from an old one</t>
      <t>Change in CIPHERTEXT_2 -&gt; COSE_Encrypt0 without tag (no change to test vector)</t>
      <t>Clarification of error message</t>
      <t>New appendix C applicability statement</t>
    </list></t>
  <t>From -01 to -02:
  <list style="symbols">
      <t>New section 1.2 Use of EDHOC</t>
      <t>Clarification of identities</t>
      <t>New section 4.3 clarifying bstr_identifier</t>
      <t>Updated security considerations</t>
      <t>Updated text on cipher suite negotiation and key confirmation</t>
      <t>Test vector for static DH</t>
    </list></t>
  <t>From -00 to -01:
  <list style="symbols">
      <t>Removed PSK method</t>
      <t>Removed references to certificate by value</t>
    </list></t>
</list></t>

</section>
<section numbered="no" anchor="acknowledgments" title="Acknowledgments">

<t>The authors want to thank Christian Amsüss, Alessandro Bruni, Karthikeyan Bhargavan, Timothy Claeys, Martin Disch, Theis Grønbech Petersen, Dan Harkins, Klaus Hartke, Russ Housley, Stefan Hristozov, Alexandros Krontiris, Ilari Liusvaara, Karl Norrman, Salvador Pérez, Eric Rescorla, Michael Richardson, Thorvald Sahl Jørgensen, Jim Schaad, Carsten Schürmann, Ludwig Seitz, Stanislav Smyshlyaev, Valery Smyslov, Peter van der Stok, Rene Struik, Vaishnavi Sundararajan, Erik Thormarker, Marco Tiloca, Michel Veillette, and Malisa Vucinic for reviewing and commenting on intermediate versions of the draft. We are especially indebted to Jim Schaad for his continuous reviewing and implementation of different versions of the draft.</t>

<t>Work on this document has in part been supported by the H2020 project SIFIS-Home (grant agreement 952652).</t>

</section>


  </back>

<!-- ##markdown-source:
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
Kq+QGlyhMuQB/BkeWKHCxmXaPSsml0f60eXsjan//Vj/Wvf1Y1lGvRxLgdR5
YpMy0vX3nv6sp7/q6e+vpWn6fz9cqxLZN8X1onP6Cmhb9dblozbGiaLCjdpr
CzTwUr3S3l8rqFrrJV5teQ15daNKajM3SPr1BuH2lmJtTtlpURxTNIkbJUWf
6U/1V8oVK5FZZelSiZnmtBjo9aEqQV2X947W800N8JGeFNDSrd6I8kSi6lbI
G3mqf2jy+aRGusva5nVvw5JdbyZkJ3yQIhS+OJWsL+WBllC1MOOy8Ryz+0cx
n6lGi1C2JC9V08t1r9BKx5VFaJX5BEoq8nAzdFn6XomTbAFewmNVBxsplrLa
MqNKxHth6kcMXsUS8K9/+6+//Zf+CqpRCsWGmUkMNs52VHgkmeu64W5by01Y
qrUou7GURxxU2LHC63KPirXrflTH9ug3xcqQrcnVhPQgIngqaFm8K8Oz6Oas
GGl5YVW8srfpBW+wbcgO4e9mkxwHWSrEI70pRubq0spOPKhKvkrF2Sq1rIo7
l1Mqc2mVLEgwOjKrg+dnPVnEgyPDON9cVVb/+Dt8TZ/j4zK7W7WZmSzWl13n
vjPlYqCPCreuS4lmk3TegESqli52AG3HMygT4oI/wVQ6+jHIU0W4EhNnZAXf
7/huUFUHKePCPLx6HxWCIWWVwdQdyO7GqnDH0p58hBuOm1OV+ydXiVWcLw8G
KYHlAuDSaOHjD1wbmT8rjVM+u6CAVrcTHNpQG80fz5//IAe+otsvOYvKxxNz
7jxKAsYFcCt9pdoyyz5tnBZUagF9o7CFuXZDX7JJVlaBrgDBcogWQrWnqIZ8
N5/to8HTN9MZ9zWpNitZV5o9l1x2JUV7t1xZFTTXi9urdKrq8ZSk5jN1cb0N
fU9ceguaHGF9jpvrX3eSlj1+ALZ4zypHlwvPPS7Gs/lKJX0ZhVKaUZ04xRud
tIbn1yupy+mW1ZdEvB6kkCWBb4qrdt6BpsQYP4V952Y+NXKubh+EsHxf7nIS
3Vsv4SJD3e1eo7z6zQWQaVzXe6FgCvpoUlfHKavm8JOUh9oCcKSjmcq+X6X/
CWuOnq7YTW1gi6rpYY1h47pHfFanetdes2y4rJ3MZwsWAPqRuXZL/5L53Ez/
lDWaEe4+7rWpcYQT/scq+tY4NEhaVn5Rc101zxQVuxY4wfmTvjy5q5SMlI+/
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
rtL0pk+vd0VfomwxJ0q+0mv4FJHLF+aJEZ4RExfviJHbdRgcEehRMUeqAFkr
dmw+XCO59fHjaT8+mRQ34342WxT9bDSblwq/n9EtIC0S51/R26XZ328nc3pD
9eTZ7U1/Nu6PiJt7jQrxRHeu16ypG1upEAaaHf4iq4G9nahWEFyVf7XGZPWW
qnpYCQyrXuD5dy/WVMmc5K+Bg1NT/4p7MvDWeJVec0uARpyFFvPtzQfy//r0
UzZ/d1zVxz56TySZzfMJLXFxfKJ91To/Vp+9/GFWsl3pwNM7Lkv9gth90TjT
qS5dSAfqDE7jKS9q0o2YqswVmiONltEwcpWXSIBVJU2SQrH1yYvup2/p/zTk
P1hWIK2SJ9WRAnLz89t6uh9/1/jtl7LNBnEqPT+9xcYHyeFCvcSTZW+K5gg0
1wt6+mXN4FUPiToDt1Al54r30BVy+swP6CVB02xPiijMPSYq2jE94GWO5Guf
q+HsEwcXf/x4Now80zHplXVWO3JGKi+GbO/PF4XSuoBbkqiNJyRlo0vEQ5//
cFy9Gd07L7KCfbgrnL6EnrqZgAI5MS6t3tVkwaGMNHs7nf1Mr/2G1RW0SWPS
uOIy/YB8HZiSxpxdXWH3qVZTFcZrzF2GN4nMmGdJj6I5tcYzc/0ojL4jJh7d
yhvqadfXcwKy5h4OpqtF4rmSAsveEvlL3siLpZUlHTC7nWf45iqViUW1A84L
MiULPoFSF0RHyZbLSzn2BCoelOHBFie6TGQrjU1vms7fFHy6VVbOS5ndi+m7
yXw2xX2LsjAgLf1kzmvF1JEjIOxUtl+hl1RzaPQvYeov1HnYfFbI0zKSMdYx
Mk0QkkUCmaWyeo7UwFjz9N2MFBgt/G1ZD3RleRblfgVy90lhXtL7sAhi/d/c
Tph416TsMuYphtFAMiZXk8t0Xgaz2ivQYJUN7PWElGW18vWkJI3Ktzz/Nvz+
e/2H5y/VkWJZWkcmixdcqmcxWfBS8I48w/Jygfm0EZKdIkbYGrdkbR7yWfgj
ItS8QunKTKpnqQpLPbzauwnIK9eYHk+MMyeT6F1KwsQ0xk2A57IQ387nkLJy
g5d2AqM50ukHlvHeejF49qfzl/zuNLtaFK5mbLGBifCOk4ZykDNegO7gCtYn
8sQKdNxBm7St9To4QaysZPEW/zN9FjczZSdez4t3k9ntApyL12oPKsv0SI6f
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
yivU2qjZ2ZxtojJl2KCGkNQwnrQ18ovz79Sxr/bnba2RNbJ95JezPyPTPmGV
LJCK+OMT2oSvRnRv/vRgOjtQfZFl+olclXSqIJXp9C1x0xzbFDFZeLX45/8s
aNsNL7Hs03w+0wfz2+mkp3+XktswoRenywYX6fxN+i6d9vSXkyuS4w9YNDKa
emQv0hTJKpkssose4ojk334z/+d/T0dFdqG/4PRcQffFNMy36fwtGXk09mV6
u8CvN2+Lnn52SyrkW4QqkX49vynGuBZTnP1j9o7n9p6nttC/m9O+SPsuDAUw
gf795HbxLiVLmSd8qf9A3ukV5nmeXr5Lc1qUF//8f/PiHz09mdPSkOYmY+2S
rn42IdkoLvUz/HeeLxCcfEm0IhrndPPFpf7Hf/43mQ9Tnv0fJ1f6OV2Y5j09
SufkxE7x+z//Bw+j77+/zX+evCEHbXLzD7xCSnbAZfpOP7/6sLi4/JAW9Bp/
Ti8LMvDw0SVei2lDa8oIW7pn9rYHi7CgH+e3k7e4YbK4mKbvJvr5LZk8c/rf
f+LV6E3e8lyviJ44q0ZrkM1oZS5nmXozerE/F5PLy+IGjW8llvFyskj1P9/S
Xk+EkLFZbOZl2kft6SodwQqWbFMcuiIWny+ku6k6wsICPtH/UsgUuIp8XH5A
qKkYqfOUNcn4YRfyUByNf4sYc/vZSxFvmFNVcHP9wzXtL7P5W5nlRxZJWTSc
FyZ2JN+JNhxEGVuNx7mIlinIQyeng6uDnJ8OT8/7385QpuXNHFKSvpkXUqkF
juk6JuLH/X5fH1/ejsfa/wfAcxkKlr4CAA==

-->

</rfc>

