<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version  (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-oscore-capable-proxies-00" category="std" consensus="true" submissionType="IETF" updates="8613" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <front>
    <title abbrev="OSCORE-capable Proxies">OSCORE-capable Proxies</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-capable-proxies-00"/>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <author initials="R." surname="Höglund" fullname="Rikard Höglund">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440</code>
          <country>Sweden</country>
        </postal>
        <email>rikard.hoglund@ri.se</email>
      </address>
    </author>
    <date year="2023" month="October" day="18"/>
    <area>Internet</area>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>Object Security for Constrained RESTful Environments (OSCORE) can be used to protect CoAP messages end-to-end between two endpoints at the application layer, also in the presence of intermediaries such as proxies. This document defines how to use OSCORE for protecting CoAP messages also between an origin application endpoint and an intermediary, or between two intermediaries. Also, it defines how to secure a CoAP message by applying multiple, nested OSCORE protections, e.g., both end-to-end between origin application endpoints, as well as between an application endpoint and an intermediary or between two intermediaries. Thus, this document updates RFC 8613. The same approach can be seamlessly used with Group OSCORE, for protecting CoAP messages when group communication with intermediaries is used.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Constrained RESTful Environments Working Group mailing list (core@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/core/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/core-wg/oscore-capable-proxies"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>The Constrained Application Protocol (CoAP) <xref target="RFC7252"/> supports the presence of intermediaries, such as forward-proxies and reverse-proxies, which assist origin clients by performing requests to origin servers on their behalf, and forwarding back the related responses.</t>
      <t>CoAP supports also group communication scenarios <xref target="I-D.ietf-core-groupcomm-bis"/>, where clients can send a one-to-many request targeting all the servers in the group, e.g., by using IP multicast. Like for one-to-one communication, group settings can also rely on intermediaries <xref target="I-D.tiloca-core-groupcomm-proxy"/>.</t>
      <t>The protocol Object Security for Constrained RESTful Environments (OSCORE) <xref target="RFC8613"/> can be used to protect CoAP messages between two endpoints at the application layer, especially achieving end-to-end security in the presence of (non-trusted) intermediaries. When CoAP group communication is used, the same can be achieved by means of the protocol Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
      <t>For a number of use cases (see <xref target="sec-use-cases"/>), it is required and/or beneficial that communications are secured also between an application endpoint (i.e., a CoAP origin client/server) and an intermediary, as well as between two adjacent intermediaries in a chain. This especially applies to the communication leg between the CoAP origin client and the adjacent intermediary acting as next hop towards the CoAP origin server.</t>
      <t>In such cases, and especially if the origin client already uses OSCORE to achieve end-to-end security with the origin server, it would be convenient that OSCORE is used also to secure communications between the origin client and its next hop. However, the original specification <xref target="RFC8613"/> does not define how OSCORE can be used to protect CoAP messages in such communication leg, which would require to consider also the intermediary as an "OSCORE endpoint".</t>
      <t>This document fills this gap, and updates <xref target="RFC8613"/> as follows.</t>
      <ul spacing="normal">
        <li>
          <t>It defines how to use OSCORE for protecting a CoAP message in the communication leg between: i) an origin client/server and an intermediary; or ii) two adjacent intermediaries in an intermediary chain. That is, besides origin clients/servers, it allows also intermediaries to be possible "OSCORE endpoints".</t>
        </li>
        <li>
          <t>It admits a CoAP message to be secured by multiple, nested OSCORE protections applied in sequence, as an "OSCORE-in-OSCORE" process. For instance, this is the case when the message is OSCORE-protected end-to-end between the origin client and origin server, and the result is further OSCORE-protected over the leg between the current and next hop (e.g., the origin client and the adjacent intermediary acting as next hop towards the origin server).</t>
        </li>
      </ul>
      <t>This document does not specify any new signaling method to guide the message processing on the different endpoints. In particular, every endpoint is always able to understand what steps to take on an incoming message depending on the presence of the OSCORE Option, as exclusively included or instead combined together with CoAP options intended for an intermediary.</t>
      <t>The approach defined in this document can be seamlessly adopted also when Group OSCORE is used, for protecting CoAP messages in group communication scenarios that rely on intermediaries.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>
        <t>Readers are expected to be familiar with the terms and concepts related to CoAP <xref target="RFC7252"/>; OSCORE <xref target="RFC8613"/> and Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>. This document especially builds on concepts and mechanics related to intermediaries such as CoAP forward-proxies.</t>
        <t>In addition, this document uses the following terms.</t>
        <ul spacing="normal">
          <li>
            <t>Source application endpoint: an origin client producing a request, or an origin server producing a response.</t>
          </li>
          <li>
            <t>Destination application endpoint: an origin server intended to consume a request, or an origin client intended to consume a response.</t>
          </li>
          <li>
            <t>Application endpoint: a source or destination application endpoint.</t>
          </li>
          <li>
            <t>Source OSCORE endpoint: an endpoint protecting a message with OSCORE or Group OSCORE.</t>
          </li>
          <li>
            <t>Destination OSCORE endpoint: an endpoint unprotecting a message with OSCORE or Group OSCORE.</t>
          </li>
          <li>
            <t>OSCORE endpoint: a source/destination OSCORE endpoint. An OSCORE endpoint is not necessarily also an application endpoint with respect to a certain message.</t>
          </li>
          <li>
            <t>Proxy-related options: either of the following (set of) CoAP options used for proxying a CoAP request.  </t>
            <ul spacing="normal">
              <li>
                <t>The Proxy-Uri Option. This is relevant when using a forward-proxy.</t>
              </li>
              <li>
                <t>The set of CoAP options comprising the Proxy-Scheme Option together with any of the Uri-* Options. This is relevant when using a forward-proxy.</t>
              </li>
              <li>
                <t>One or more Uri-Path Options, when used not together with the Proxy-Scheme Option. This is relevant when using a reverse-proxy.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>OSCORE-in-OSCORE: the process by which a message protected with (Group) OSCORE is further protected with (Group) OSCORE. This means that, if such a process is used, a successful decryption/verification of an OSCORE-protected message might yield an OSCORE-protected message.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="sec-use-cases">
      <name>Use Cases</name>
      <t>The approach defined in this document has been motivated by a number of use cases, which are summarized below.</t>
      <section anchor="ssec-uc1">
        <name>CoAP Group Communication with Proxies</name>
        <t>CoAP supports also one-to-many group communication, e.g., over IP multicast <xref target="I-D.ietf-core-groupcomm-bis"/>, which can be protected end-to-end between origin client and origin servers by using Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
        <t>This communication model can be assisted by intermediaries such as a CoAP forward-proxy or reverse-proxy, which relays a group request to the origin servers. If Group OSCORE is used, the proxy is intentionally not a member of the OSCORE group. Furthermore, <xref target="I-D.tiloca-core-groupcomm-proxy"/> defines a signaling protocol between origin client and proxy, to ensure that responses from the different origin servers are forwarded back to the origin client within a time interval set by the client, and that they can be distinguished from one another.</t>
        <t>In particular, it is required that the proxy identifies the origin client as allowed-listed, before forwarding a group request to the servers (see <xref section="4" sectionFormat="of" target="I-D.tiloca-core-groupcomm-proxy"/>). This requires a security association between the origin client and the proxy, which would be convenient to provide with a dedicated OSCORE Security Context between the two, since the client is possibly using also Group OSCORE with the origin servers.</t>
      </section>
      <section anchor="ssec-uc2">
        <name>CoAP Observe Notifications over Multicast</name>
        <t>The Observe extension for CoAP <xref target="RFC7641"/> allows a client to register its interest in "observing" a resource at a server. The server can then send back notification responses upon changes to the resource representation, all matching with the original observation request.</t>
        <t>In some applications, such as pub-sub <xref target="I-D.ietf-core-coap-pubsub"/>, multiple clients are interested to observe the same resource at the same server. Hence, <xref target="I-D.ietf-core-observe-multicast-notifications"/> defines a method that allows the server to send a multicast notification to all the observer clients at once, e.g., over IP multicast. To this end, the server synchronizes the clients by providing them with a common "phantom observation request", against which the following multicast notifications will match.</t>
        <t>In case the clients and the server use Group OSCORE for end-to-end security and a proxy is also involved, an additional step is required (see <xref section="12" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>). That is, clients are in turn required to provide the proxy with the obtained "phantom observation request", thus enabling the proxy to receive the multicast notifications from the server.</t>
        <t>Therefore, it is preferable to have a security association also between each client and the proxy, to especially ensure the integrity of that information provided to the proxy (see <xref section="15.3" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>). Like for the use case in <xref target="ssec-uc1"/>, this would be conveniently achieved with a dedicated OSCORE Security Context between a client and the proxy, since the client is also using Group OSCORE with the origin server.</t>
      </section>
      <section anchor="ssec-uc3">
        <name>LwM2M Client and External Application Server</name>
        <t>The Lightweight Machine-to-Machine (LwM2M) protocol <xref target="LwM2M-Core"/> enables a LwM2M Client device to securely bootstrap and then register at a LwM2M Server, with which it will perform most of its following communication exchanges. As per the transport bindings specification of LwM2M <xref target="LwM2M-Transport"/>, the LwM2M Client and LwM2M Server can use CoAP and OSCORE to secure their communications at the application layer, including during the device registration process.</t>
        <t>Furthermore, Section 5.5.1 of <xref target="LwM2M-Transport"/> specifies that: "OSCORE MAY also be used between LwM2M endpoint and non-LwM2M endpoint, e.g., between an Application Server and a LwM2M Client via a LwM2M server. Both the LwM2M endpoint and non-LwM2M endpoint MUST implement OSCORE and be provisioned with an OSCORE Security Context."</t>
        <t>In such a case, the LwM2M Server can practically act as forward-proxy between the LwM2M Client and the external Application Server. At the same time, the LwM2M Client and LwM2M Server must continue protecting communications on their leg using their Security Context. Like for the use case in <xref target="ssec-uc1"/>, this also allows the LwM2M Server to identify the LwM2M Client, before forwarding its request outside the LwM2M domain and towards the external Application Server.</t>
      </section>
      <section anchor="ssec-uc4">
        <name>LwM2M Gateway</name>
        <t>The specification <xref target="LwM2M-Gateway"/> extends the LwM2M architecture by defining the LwM2M Gateway functionality. That is, a LwM2M Server can manage end IoT devices "behind" the LwM2M Gateway. While it is outside the scope of such specification, it is possible for the LwM2M Gateway to use any suitable protocol with its connected end IoT devices, as well as to carry out any required protocol translation.</t>
        <t>Practically, the LwM2M Server can send a request to the LwM2M Gateway, asking to forward it to an end IoT device. With particular reference to the CoAP protocol and the related transport binding specified in <xref target="LwM2M-Transport"/>, the LwM2M Server acting as CoAP client sends its request to the LwM2M Gateway acting as CoAP server.</t>
        <t>If CoAP is used in the communication leg between the LwM2M Gateway and the end IoT devices, then the LwM2M Gateway fundamentally acts as a reverse-proxy (see <xref section="5.7.3" sectionFormat="of" target="RFC7252"/>). That is, in addition to its own resources, the LwM2M Gateway serves the resources of each end IoT device behind itself, as exposed under a dedicated URI-Path. As per <xref target="LwM2M-Gateway"/>, the first URI-Path segment is used as "prefix" to identify the specific IoT device, while the remaining URI-Path segments specify the target resource at the IoT device.</t>
        <t>As per Section 7 of <xref target="LwM2M-Gateway"/>, message exchanges between the LwM2M Server and the L2M2M Gateway are secured using the LwM2M-defined technologies, while the LwM2M protocol does not provide end-to-end security between the LwM2M Server and the end IoT devices. However, the approach defined in this document makes it possible to achieve both goals, by allowing the LwM2M Server to use OSCORE for protecting a message both end-to-end for the targeted end IoT device as well as for the LwM2M Gateway acting as reverse-proxy.</t>
      </section>
      <section anchor="further-use-cases">
        <name>Further Use Cases</name>
        <t>The approach defined in this document can be useful also in the following use cases relying on a proxy.</t>
        <ul spacing="normal">
          <li>
            <t>A server aware of a suitable cross proxy can rely on it as a third-party service, in order to indicate transports for CoAP available to that server (see <xref section="4" sectionFormat="of" target="I-D.ietf-core-transport-indication"/>).  </t>
            <t>
From a security point of view, it would be convenient if the proxy could provide suitable credentials to the client, as a general trusted proxy for the system. At the same time, it can be desirable to limit the use of such a proxy to a set of clients which have permission to use it, and that the proxy can identify through a secure communication association.  </t>
            <t>
However, in order for OSCORE to be an applicable security mechanism for this scenario, OSCORE has to be terminated at the proxy. That is, it would be required for a client and the proxy to share a dedicated OSCORE Security Context and to use it for protecting their communication leg.</t>
          </li>
          <li>
            <t>The method specified in <xref target="I-D.ietf-core-coap-pm"/> relies on the Performance Measurement Option to enable network telemetry for CoAP communications. This makes it possible to efficiently measure Round-Trip Time and message losses, both end-to-end and hop-by-hop. In particular, on-path probes such as intermediary proxies can be deployed to perform measurements hop-by-hop.  </t>
            <t>
When OSCORE is used in deployments including on-path probes, an inner Performance Measurement Option is protected end-to-end between the two application endpoints and enables end-to-end measurements between those. At the same time, an outer Performance Measurement Option allows also hop-by-hop measurements to be performed by reying on an on-path probe.  </t>
            <t>
Therefore, it is preferable to have a secure association with an on-path probe, in order to also ensure the integrity of the hop-by-hop measurements exchanged with the probe.</t>
          </li>
          <li>
            <t>The method specified in <xref target="I-D.ietf-ace-coap-est-oscore"/> enables public-key certificate enrollment for Internet of Things deployments. This leverages payload formats defined in Enrollment over Secure Transport (EST) <xref target="RFC7030"/>, while relying on CoAP for message transfer and on OSCORE for message protection.  </t>
            <t>
In real-world deployments, an EST server issuing public-key certificates may reside outside a constrained network that includes devices acting as EST clients. In particular, the EST clients are expected to support only CoAP, while the EST server in a non-constrained network is expected to support only HTTP. This requires a CoAP-to-HTTP proxy to be deployed between the EST clients and the EST server, in order to map CoAP messages with HTTP messages across the two networks.  </t>
            <t>
Even in such a scenario, the EST server and every EST client can still effectively use OSCORE to protect their communications end-to-end. At the same time, it is desirable to have an additional secure association between the EST client and the CoAP-to-HTTP proxy, especially in order for the proxy to identify the EST client before forwarding EST messages out of the CoAP boundary of the constrained network and towards the EST server.</t>
          </li>
          <li>
            <t>A proxy may be deployed to act as an entry point to a firewalled network, which only authenticated clients can join. In particular, authentication can rely on the used secure communication association between a client and the proxy. If the proxy could share a dedicated OSCORE Security Context with each client, the proxy can rely on it to identify the client, before forwarding its messages to any other member of the firewalled network.</t>
          </li>
          <li>
            <t>The approach defined in this document does not pose a limit to the number of OSCORE protections applied to the same CoAP message. This enables more privacy-oriented scenarios based on proxy chains, where the origin client protects a CoAP request using first the OSCORE Security Context shared with the origin server, and then the dedicated OSCORE Security Context shared with each of the different hops in the chain. Once received at a chain hop, the request would be stripped of the OSCORE protection associated with that hop before being forwarded to the next one.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="sec-message-processing">
      <name>Message Processing</name>
      <t>As mentioned in <xref target="intro"/>, this document introduces the following two main deviations from the original OSCORE specification <xref target="RFC8613"/>.</t>
      <ol spacing="normal" type="1"><li>
          <t>An "OSCORE endpoint", i.e., a producer/consumer of an OSCORE Option can be not only an application endpoint (i.e., an origin client or server), but also an intermediary such as a proxy.  </t>
          <t>
Hence, OSCORE can be used between an origin client/server and a proxy, as well as between two proxies in an intermediary chain.</t>
        </li>
        <li>
          <t>A CoAP message can be secured by multiple OSCORE protections applied in sequence. Therefore, the final result is a message with nested OSCORE protections, as the output of an "OSCORE-in-OSCORE" process. Hence, following a decryption, the resulting message might legitimately include an OSCORE Option, and thus have in turn to be decrypted.  </t>
          <t>
The most common case is expected to consider a message protected with up to two OSCORE layers, i.e.: i) an inner layer, protecting the message end-to-end between the origin client and the origin server acting as application endpoints; and ii) an outer layer, protecting the message between a certain OSCORE endpoint and the other OSCORE endpoint adjacent in the intermediary chain.  </t>
          <t>
However, a message can also be protected with a higher arbitrary number of nested OSCORE layers, e.g., in scenarios relying on a longer chain of intermediaries. For instance, the origin client can sequentially apply multiple OSCORE layers to a request, each of which to be consumed and removed by one of the intermediaries in the chain, until the origin server is reached and it consumes the innermost OSCORE layer.</t>
        </li>
      </ol>
      <t><xref target="sec-examples"/> provides a number of examples where the approach defined in this document is used to protect message exchanges.</t>
      <section anchor="general-rules">
        <name>General Rules on Protecting Options</name>
        <t>Let us consider a sender endpoint that, when protecting an outgoing message, applies the i-th OSCORE layer in sequence, by using the OSCORE Security Context shared with another OSCORE endpoint X.</t>
        <t>In addition to the CoAP options specified as class E in <xref target="RFC8613"/> or in the document defining them, the sender endpoint MUST encrypt and integrity-protect the following CoAP options. That is, even if they are originally specified as class U or class I for OSCORE, such options are processed like if they were specified as class E.</t>
        <ul spacing="normal">
          <li>
            <t>Any CoAP option such that both the following conditions hold.  </t>
            <ol spacing="normal" type="1"><li>
                <t>The sender endpoint has added the option to the message either:      </t>
                <ul spacing="normal">
                  <li>
                    <t>Following a message protection previously performed for an OSCORE endpoint different than X; or</t>
                  </li>
                  <li>
                    <t>Before a message protection previously performed for an OSCORE endpoint different than X, where the option was treated as Class U or I.</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>The option is not intended to be consumed by the other OSCORE endpoint X.</t>
              </li>
            </ol>
            <t>
Examples of such CoAP options are:  </t>
            <ul spacing="normal">
              <li>
                <t>The OSCORE Option present as the result of the OSCORE layer immediately previously applied for an OSCORE endpoint different than X, when the sender endpoint is an origin endpoint.</t>
              </li>
              <li>
                <t>The EDHOC Option defined in <xref target="I-D.ietf-core-oscore-edhoc"/>, when the sender endpoint is the origin client.</t>
              </li>
              <li>
                <t>The Request-Hash Option defined in <xref target="I-D.amsuess-core-cachable-oscore"/>, when X is not an origin endpoint).</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Any CoAP option such that all the following conditions hold.  </t>
            <ol spacing="normal" type="1"><li>
                <t>The sender endpoint has added the option to the message.</t>
              </li>
              <li>
                <t>The option is intended to be consumed by the other OSCORE endpoint X.</t>
              </li>
              <li>
                <t>At the other OSCORE endpoint X, the option does not play a role in processing the message before having removed the i-th OSCORE layer or in removing the i-th OSCORE layer altogether.</t>
              </li>
            </ol>
            <t>
Examples of such CoAP options are:  </t>
            <ul spacing="normal">
              <li>
                <t>The Proxy-Uri, Proxy-Scheme, Uri-Host and Uri-Port Options defined in <xref target="RFC7252"/>.</t>
              </li>
              <li>
                <t>The Listen-To-Multicast-Notifications Option defined in <xref target="I-D.ietf-core-observe-multicast-notifications"/>.</t>
              </li>
              <li>
                <t>The Multicast-Timeout, Response-Forwarding and Group-ETag Options defined in <xref target="I-D.tiloca-core-groupcomm-proxy"/>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Any CoAP option such that the sender endpoint has not added the option to the message.  </t>
            <t>
Examples of such CoAP options are:  </t>
            <ul spacing="normal">
              <li>
                <t>The OSCORE Option present as the result of the OSCORE layer immediately previously applied for an OSCORE endpoint different than X, when the sender endpoint is not an origin endpoint.</t>
              </li>
              <li>
                <t>The EDHOC Option defined in <xref target="I-D.ietf-core-oscore-edhoc"/>, when the sender endpoint is not the origin client.</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="outgoing-requests">
        <name>Processing an Outgoing Request</name>
        <t>The rules from <xref target="general-rules"/> apply when processing an outgoing request message, with the following addition.</t>
        <t>When an application endpoint applies multiple OSCORE layers in sequence to protect an outgoing request, and it uses an OSCORE Security Context shared with the other application endpoint, then the first OSCORE layer MUST be applied by using that Security Context.</t>
      </section>
      <section anchor="incoming-requests">
        <name>Processing an Incoming Request</name>
        <t>Upon receiving a request REQ, the recipient endpoint performs the actions described in the following steps.</t>
        <ol spacing="normal" type="1"><li>
            <t>If REQ includes proxy-related options, the endpoint moves to step 2. Otherwise, the endpoint moves to step 3.</t>
          </li>
          <li>
            <t>The endpoint proceeds as defined below, depending on which of the two following conditions holds.  </t>
            <ul spacing="normal">
              <li>
                <t>REQ includes either the Proxy-Uri Option, or the Proxy-Scheme Option together with any of the Uri-* Options.      </t>
                <t>
If the endpoint is not configured to be a forward-proxy, it MUST stop processing the request and MUST respond with a 5.05 (Proxying Not Supported) error response to (the previous hop towards) the origin client, as per <xref section="5.10.2" sectionFormat="of" target="RFC7252"/>. This may result in protecting the error response over that communication leg, as per <xref target="outgoing-responses"/>.      </t>
                <t>
Otherwise, the endpoint MUST check whether forwarding this request to (the next hop towards) the origin server is an authorized operation. This check can be based, for instance, on the specific OSCORE Security Context that the endpoint used to decrypt the incoming message, before performing this step.      </t>
                <t>
In case the authentication check fails, the endpoint MUST stop processing the request and MUST respond with a 4.01 (Unauthorized) error response to (the previous hop towards) the origin client, as per <xref section="5.10.2" sectionFormat="of" target="RFC7252"/>. This may result in protecting the error response over that communication leg, as per <xref target="outgoing-responses"/>.      </t>
                <t>
Otherwise, the endpoint consumes the proxy-related options as per <xref section="5.7.2" sectionFormat="of" target="RFC7252"/> and forwards REQ to (the next hop towards) the origin server, unless differently indicated in REQ, e.g., by means of any of its CoAP options. For instance, a forward-proxy does not forward a request that includes proxy-related options together with the Listen-To-Multicast-Notifications Option (see <xref section="12" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>).      </t>
                <t>
If the endpoint forwards REQ to (the next hop towards) the origin server, this may result in (further) protecting REQ over that communication leg, as per <xref target="outgoing-requests"/>.      </t>
                <t>
After that, the endpoint does not take any further action.</t>
              </li>
              <li>
                <t>REQ includes one or more Uri-Path Options but not the Proxy-Scheme Option.      </t>
                <t>
If the endpoint is not configured to be a reverse-proxy or its resource targeted by the Uri-Path Options is not intended to support reverse-proxy functionalities, then the endpoint proceeds to step 3.      </t>
                <t>
Otherwise, the endpoint MUST check whether forwarding this request to (the next hop towards) the origin server is an authorized operation. This check can be based, for instance, on the specific OSCORE Security Context that the endpoint used to decrypt the incoming message, before performing this step.      </t>
                <t>
In case the authentication check fails, the endpoint MUST stop processing the request and MUST respond with a 4.01 (Unauthorized) error response to (the previous hop towards) the origin client, as per <xref section="5.10.2" sectionFormat="of" target="RFC7252"/>. This may result in protecting the error response over that communication leg, as per <xref target="outgoing-responses"/>.      </t>
                <t>
Otherwise, the endpoint consumes the Uri-Path options as per <xref section="5.7.3" sectionFormat="of" target="RFC7252"/>, and forwards REQ to (the next hop towards) the origin server, unless differently indicated in REQ, e.g., by means of any of its CoAP options.      </t>
                <t>
If the endpoint forwards REQ to (the next hop towards) the origin server, this may result in (further) protecting REQ over that communication leg, as per <xref target="outgoing-requests"/>.      </t>
                <t>
After that, the endpoint does not take any further action.      </t>
                <t>
Note that, when forwarding REQ, the endpoint might not remove all the Uri-Path Options originally present, e.g., in case the next hop towards the origin server is a further reverse-proxy.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>The endpoint proceeds as defined below, depending on which of the two following conditions holds.  </t>
            <ul spacing="normal">
              <li>
                <t>REQ does not include an OSCORE Option.      </t>
                <t>
If the endpoint does not have an application to handle REQ, it MUST stop processing the request and MAY respond with a 4.00 (Bad Request) error response to (the previous hop towards) the origin client. This may result in protecting the error response over that communication leg, as per <xref target="outgoing-responses"/>.      </t>
                <t>
Otherwise, the endpoint delivers REQ to the application.</t>
              </li>
              <li>
                <t>REQ includes an OSCORE Option.      </t>
                <t>
If REQ includes any URI-Path Options, the endpoint MUST stop processing the request and MAY respond with a 4.00 (Bad Request) error response to (the previous hop towards) the origin client. This may result in protecting the error response over that communication leg, as per <xref target="outgoing-responses"/>.      </t>
                <t>
Otherwise, the endpoint decrypts REQ using the OSCORE Security Context indicated by the OSCORE Option, i.e., REQ* = dec(REQ). After that, the possible presence of an OSCORE Option in the decrypted request REQ* is not treated as an error situation.      </t>
                <t>
If the OSCORE processing results in an error, the endpoint MUST stop processing the request and performs error handling as per <xref section="8.2" sectionFormat="of" target="RFC8613"/> or Sections <xref target="I-D.ietf-core-oscore-groupcomm" section="8.2" sectionFormat="bare"/> and <xref target="I-D.ietf-core-oscore-groupcomm" section="9.4" sectionFormat="bare"/> of <xref target="I-D.ietf-core-oscore-groupcomm"/>, in case OSCORE or Group OSCORE is used, respectively. In case the endpoint sends an error response to (the previous hop towards) the origin client, this may result in protecting the error response over that communication leg, as per <xref target="outgoing-responses"/>.      </t>
                <t>
Otherwise, REQ takes REQ*, and the endpoint moves to step 1.</t>
              </li>
            </ul>
          </li>
        </ol>
        <t><xref target="sec-incoming-req-diag"/> provides an overview of the process defined above as a state diagram.</t>
      </section>
      <section anchor="outgoing-responses">
        <name>Processing an Outgoing Response</name>
        <t>The rules from <xref target="general-rules"/> apply when processing an outgoing response message, with the following additions.</t>
        <t>When an application endpoint applies multiple OSCORE layers in sequence to protect an outgoing response, and it uses an OSCORE Security Context shared with the other application endpoint, then the first OSCORE layer MUST be applied by using that Security Context.</t>
        <t>The sender endpoint protects the response by applying the same OSCORE layers that it removed from the corresponding incoming request, but in the reverse order than the one they were removed.</t>
        <t>In case the response is an error response, the sender endpoint protects it by applying the same OSCORE layers that it successfully removed from the corresponding incoming request, but in the reverse order than the one they were removed.</t>
      </section>
      <section anchor="incoming-responses">
        <name>Processing an Incoming Response</name>
        <t>The recipient endpoint removes the same OSCORE layers that it added when protecting the corresponding outgoing request, but in the reverse order than the one they were removed.</t>
        <t>When doing so, the possible presence of an OSCORE Option in the decrypted response following the removal of an OSCORE layer is not treated as an error situation, unless it occurs after having removed as many OSCORE layers as were added in the outgoing request. In such a case, the endpoint MUST stop processing the response.</t>
      </section>
    </section>
    <section anchor="sec-response-caching">
      <name>Caching of OSCORE-Protected Responses</name>
      <t>Although not possible as per the original OSCORE specification <xref target="RFC8613"/>, cacheability of OSCORE-protected responses at proxies can be achieved. To this end, the approach defined in <xref target="I-D.amsuess-core-cachable-oscore"/> can be used, as based on Deterministic Requests protected with the pairwise mode of Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/> used end-to-end between an origin client and an origin server. The applicability of this approach is limited to requests that are safe (in the RESTful sense) to process and do not yield side effects at the origin server.</t>
      <t>In particular, this approach requires both the origin client and the origin server to have already joined the correct OSCORE group. Then, starting from the same plain CoAP request, different clients in the OSCORE group are able to deterministically generate a same request protected with Group OSCORE, which is sent to a proxy for being forwarded to the origin server. The proxy can effectively cache the resulting OSCORE-protected response from the server, since the same plain CoAP request will result again in the same Deterministic Request and thus will produce a cache hit.</t>
      <t>When using this approach, the following also applies in addition to what is defined in <xref target="sec-message-processing"/>, when processing incoming messages at a proxy that implements caching of responses.</t>
      <ul spacing="normal">
        <li>
          <t>Upon receiving a request from (the previous hop towards) the origin client, the proxy checks if specifically the message available during the execution of step 2 in <xref target="incoming-requests"/> produces a cache hit.  </t>
          <t>
That is, such a message: i) is exactly the one to be forwarded to (the next hop towards) the origin server, if no cache hit has occurred; and ii) is the result of an OSCORE decryption at the proxy, if OSCORE is used on the communication leg between the proxy and (the previous hop towards) the origin client.</t>
        </li>
        <li>
          <t>Upon receiving a response from (the next hop towards) the origin server, the proxy first removes the same OSCORE layers that it added when protecting the corresponding outgoing request, as defined in <xref target="incoming-responses"/>.  </t>
          <t>
Then, the proxy stores specifically that resulting response message in its cache. That is, such a message is exactly the one to be forwarded to (the previous hop towards) the origin client.</t>
        </li>
      </ul>
      <t>The specific rules about serving a request with a cached response are defined in <xref section="5.6" sectionFormat="of" target="RFC7252"/>, as well as in <xref section="7" sectionFormat="of" target="I-D.tiloca-core-groupcomm-proxy"/> for group communication scenarios.</t>
    </section>
    <section anchor="establishment-of-oscore-security-contexts">
      <name>Establishment of OSCORE Security Contexts</name>
      <t>Like the original OSCORE specification <xref target="RFC8613"/>, this document is not devoted to any particular approach that two OSCORE endpoints use for establishing an OSCORE Security Context.</t>
      <t>At the same time, the following applies, depending on the two peers using OSCORE or Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/> to protect their communications.</t>
      <ul spacing="normal">
        <li>
          <t>When using OSCORE, the establishment of the OSCORE Security Context can rely on the authenticated key establishment protocol EDHOC <xref target="I-D.ietf-lake-edhoc"/>.  </t>
          <t>
Assuming the use of OSCORE both between the two origin application endpoints as well as between the origin client and the first proxy in the chain, it is expected that the origin client first runs EDHOC with the first proxy in the chain, and then with the origin server through the chain of proxies (see the example in <xref target="sec-example-edhoc"/>).  </t>
          <t>
Furthermore, the additional use of the combined EDHOC + OSCORE request defined in <xref target="I-D.ietf-core-oscore-edhoc"/> is particularly beneficial in this case (see the example in <xref target="sec-example-edhoc-comb-req"/>), and especially when relying on a long chain of proxies.</t>
        </li>
        <li>
          <t>The use of Group OSCORE is expected to be limited between the origin applications endpoints, e.g., between the origin client and multiple origin servers. In order to join the same OSCORE group and obtain the corresponding Group OSCORE Security Context, those endpoints can use the approach defined in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/> and based on the ACE framework for authentication and authorization in constrained environments <xref target="RFC9200"/>.  </t>
          <t>
For the purposes of this document, there is no need for a proxy to also be a member of the OSCORE group whose Group OSCORE Security Context is used by the origin application endpoints for protecting communications end-to-end.</t>
        </li>
      </ul>
    </section>
    <section anchor="coap-header-compression-with-schc">
      <name>CoAP Header Compression with SCHC</name>
      <t>The method defined in this document enables and results in the possible protection of the same CoAP message with multiple, nested OSCORE layers. Especially when this happens, it is desirable to compress the header of protected CoAP messages, in order to improve performance and ensure that CoAP is usable also in Low-Power Wide-Area Networks (LPWANs).</t>
      <t>To this end, it is possible to use the Static Context Header Compression and fragmentation (SCHC) framework <xref target="RFC8724"/>. In particular, <xref target="RFC8824"/> specifies how to use SCHC for compressing headers of CoAP messages, also when messages are protected with OSCORE. As further clarified in <xref target="I-D.tiloca-schc-8824-update"/>, the SCHC Compression/Decompression is applicable also in the presence of CoAP proxies, and especially to the two following cases.</t>
      <ul spacing="normal">
        <li>
          <t>In case OSCORE is not used at all, the SCHC processing occurs hop-by-hop, by relying on SCHC Rules that are consistently shared between two adjacent hops.</t>
        </li>
        <li>
          <t>In case OSCORE is used only end-to-end between the application endpoints, then an Inner SCHC Compression/Decompression and an Outer SCHC Compression/Decompression are performed (see <xref section="7.2" sectionFormat="of" target="RFC8824"/>). In particular, the following holds.  </t>
          <t>
The SCHC processing occurs end-to-end as to the Inner SCHC Compression/Decompression. This relies on Inner SCHC Rules that are shared between the two application endpoints, which act as OSCORE endpoints and share the used OSCORE Security Context.  </t>
          <t>
The SCHC processing occurs hop-by-hop as to the Outer SCHC Compression/Decompression. This relies on Outer SCHC Rules that are shared between two adjacent hops.</t>
        </li>
      </ul>
      <t>When using the method defined in this document, and thus enabling also an intermediary proxy to be an OSCORE endpoint, the SCHC processing above is generalized as specified below.</t>
      <t>When processing an outgoing CoAP message, a sender endpoint proceeds as follows.</t>
      <ul spacing="normal">
        <li>
          <t>The sender endpoint performs one Inner SCHC Compression for each OSCORE layer applied to the outgoing message. Each Inner SCHC Compression occurs before protecting the message with that OSCORE layer, and relies on the SCHC Rules that are shared with the other OSCORE endpoint.</t>
        </li>
        <li>
          <t>The sender endpoint performs exactly one Outer SCHC Compression. This occurs after having performed all the intended OSCORE protections of the outgoing message, and relies on the SCHC Rules that are shared with the (next hop towards the) recipient application endpoint.</t>
        </li>
      </ul>
      <t>That is, with respect to the SCHC Compression/Decompression processing, the following holds.</t>
      <ul spacing="normal">
        <li>
          <t>An Inner SCHC Compression is intended to a recipient OSCORE endpoint, which will: first, decrypt an incoming message with the OSCORE Security Context shared with the other OSCORE endpoint; and then, perform the corresponding Inner SCHC Decompression, by relying on the SCHC Rules shared with the other OSCORE endpoint.</t>
        </li>
        <li>
          <t>An Outer SCHC Compression is intended to the (next hop towards the) recipient application endpoint, which will: first, perform a corresponding Outer SCHC Decompression on an incoming message, by relying on the SCHC Rules shared with the (previous hop towards the) recipient application endpoint; then, perform a new Outer SCHC Compression on the result, by relying on the SCHC Rules shared with the (next hop towards the) recipient application endpoint; and, finally, send the result to the (next-hop towards the) recipient application endpoint.</t>
        </li>
      </ul>
      <t>Note that the generalization above does not alter the core approach, design choices, and features of the SCHC Compression/Decompression applied to CoAP headers.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The same security considerations from CoAP <xref target="RFC7252"/> apply to this document. The same security considerations from <xref target="RFC8613"/> and <xref target="I-D.ietf-core-oscore-groupcomm"/> apply to this document, when using OSCORE or Group OSCORE to protect exchanged messages.</t>
      <t>Further security considerations to take into account are inherited from the specifically used CoAP options, extensions, and methods employed when relying on OSCORE or Group OSCORE.</t>
      <t>This document does not change the security properties of OSCORE and Group OSCORE. That is, given any two OSCORE endpoints, the method defined in this document provides them with the same security guarantees that OSCORE and Group OSCORE provide in the case where such endpoints are specifically application endpoints.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no actions for IANA.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8724">
          <front>
            <title>SCHC: Generic Framework for Static Context Header Compression and Fragmentation</title>
            <author fullname="A. Minaburo" initials="A." surname="Minaburo"/>
            <author fullname="L. Toutain" initials="L." surname="Toutain"/>
            <author fullname="C. Gomez" initials="C." surname="Gomez"/>
            <author fullname="D. Barthel" initials="D." surname="Barthel"/>
            <author fullname="JC. Zuniga" initials="JC." surname="Zuniga"/>
            <date month="April" year="2020"/>
            <abstract>
              <t>This document defines the Static Context Header Compression and fragmentation (SCHC) framework, which provides both a header compression mechanism and an optional fragmentation mechanism. SCHC has been designed with Low-Power Wide Area Networks (LPWANs) in mind.</t>
              <t>SCHC compression is based on a common static context stored both in the LPWAN device and in the network infrastructure side. This document defines a generic header compression mechanism and its application to compress IPv6/UDP headers.</t>
              <t>This document also specifies an optional fragmentation and reassembly mechanism. It can be used to support the IPv6 MTU requirement over the LPWAN technologies. Fragmentation is needed for IPv6 datagrams that, after SCHC compression or when such compression was not possible, still exceed the Layer 2 maximum payload size.</t>
              <t>The SCHC header compression and fragmentation mechanisms are independent of the specific LPWAN technology over which they are used. This document defines generic functionalities and offers flexibility with regard to parameter settings and mechanism choices. This document standardizes the exchange over the LPWAN between two SCHC entities. Settings and choices specific to a technology or a product are expected to be grouped into profiles, which are specified in other documents. Data models for the context and profiles are out of scope.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8724"/>
          <seriesInfo name="DOI" value="10.17487/RFC8724"/>
        </reference>
        <reference anchor="RFC8824">
          <front>
            <title>Static Context Header Compression (SCHC) for the Constrained Application Protocol (CoAP)</title>
            <author fullname="A. Minaburo" initials="A." surname="Minaburo"/>
            <author fullname="L. Toutain" initials="L." surname="Toutain"/>
            <author fullname="R. Andreasen" initials="R." surname="Andreasen"/>
            <date month="June" year="2021"/>
            <abstract>
              <t>This document defines how to compress Constrained Application Protocol (CoAP) headers using the Static Context Header Compression and fragmentation (SCHC) framework. SCHC defines a header compression mechanism adapted for Constrained Devices. SCHC uses a static description of the header to reduce the header's redundancy and size. While RFC 8724 describes the SCHC compression and fragmentation framework, and its application for IPv6/UDP headers, this document applies SCHC to CoAP headers. The CoAP header structure differs from IPv6 and UDP, since CoAP uses a flexible header with a variable number of options, themselves of variable length. The CoAP message format is asymmetric: the request messages have a header format different from the format in the response messages. This specification gives guidance on applying SCHC to flexible headers and how to leverage the asymmetry for more efficient compression Rules.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8824"/>
          <seriesInfo name="DOI" value="10.17487/RFC8824"/>
        </reference>
        <reference anchor="RFC8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE). OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration. Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-groupcomm">
          <front>
            <title>Group Object Security for Constrained RESTful Environments (Group OSCORE)</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Jiye Park" initials="J." surname="Park">
              <organization>Universitaet Duisburg-Essen</organization>
            </author>
            <date day="2" month="September" year="2023"/>
            <abstract>
              <t>   This document defines the security protocol Group Object Security for
   Constrained RESTful Environments (Group OSCORE), providing end-to-end
   security of CoAP messages exchanged between members of a group, e.g.,
   sent over IP multicast.  In particular, the described protocol
   defines how OSCORE is used in a group communication setting to
   provide source authentication for CoAP group requests, sent by a
   client to multiple servers, and for protection of the corresponding
   CoAP responses.  Group OSCORE also defines a pairwise mode where each
   member of the group can efficiently derive a symmetric pairwise key
   with any other member of the group for pairwise OSCORE communication.
   Group OSCORE can be used between endpoints communicating with CoAP or
   CoAP-mappable HTTP.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-groupcomm-20"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC7030">
          <front>
            <title>Enrollment over Secure Transport</title>
            <author fullname="M. Pritikin" initials="M." role="editor" surname="Pritikin"/>
            <author fullname="P. Yee" initials="P." role="editor" surname="Yee"/>
            <author fullname="D. Harkins" initials="D." role="editor" surname="Harkins"/>
            <date month="October" year="2013"/>
            <abstract>
              <t>This document profiles certificate enrollment for clients using Certificate Management over CMS (CMC) messages over a secure transport. This profile, called Enrollment over Secure Transport (EST), describes a simple, yet functional, certificate management protocol targeting Public Key Infrastructure (PKI) clients that need to acquire client certificates and associated Certification Authority (CA) certificates. It also supports client-generated public/private key pairs as well as key pairs generated by the CA.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7030"/>
          <seriesInfo name="DOI" value="10.17487/RFC7030"/>
        </reference>
        <reference anchor="RFC7641">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks. The state of a resource on a CoAP server can change over time. This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time. The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7641"/>
          <seriesInfo name="DOI" value="10.17487/RFC7641"/>
        </reference>
        <reference anchor="RFC8742">
          <front>
            <title>Concise Binary Object Representation (CBOR) Sequences</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>This document describes the Concise Binary Object Representation (CBOR) Sequence format and associated media type "application/cbor-seq". A CBOR Sequence consists of any number of encoded CBOR data items, simply concatenated in sequence.</t>
              <t>Structured syntax suffixes for media types allow other media types to build on them and make it explicit that they are built on an existing media type as their foundation. This specification defines and registers "+cbor-seq" as a structured syntax suffix for CBOR Sequences.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8742"/>
          <seriesInfo name="DOI" value="10.17487/RFC8742"/>
        </reference>
        <reference anchor="RFC9200">
          <front>
            <title>Authentication and Authorization for Constrained Environments Using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This specification defines a framework for authentication and authorization in Internet of Things (IoT) environments called ACE-OAuth. The framework is based on a set of building blocks including OAuth 2.0 and the Constrained Application Protocol (CoAP), thus transforming a well-known and widely used authorization solution into a form suitable for IoT devices. Existing specifications are used where possible, but extensions are added and profiles are defined to better serve the IoT use cases.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9200"/>
          <seriesInfo name="DOI" value="10.17487/RFC9200"/>
        </reference>
        <reference anchor="I-D.ietf-core-groupcomm-bis">
          <front>
            <title>Group Communication for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Esko Dijk" initials="E." surname="Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <author fullname="Chonggang Wang" initials="C." surname="Wang">
              <organization>InterDigital</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="10" month="July" year="2023"/>
            <abstract>
              <t>   This document specifies the use of the Constrained Application
   Protocol (CoAP) for group communication, including the use of UDP/IP
   multicast as the default underlying data transport.  Both unsecured
   and secured CoAP group communication are specified.  Security is
   achieved by use of the Group Object Security for Constrained RESTful
   Environments (Group OSCORE) protocol.  The target application area of
   this specification is any group communication use cases that involve
   resource-constrained devices or networks that support CoAP.  This
   document replaces RFC 7390, while it updates RFC 7252 and RFC 7641.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-groupcomm-bis-09"/>
        </reference>
        <reference anchor="I-D.tiloca-core-groupcomm-proxy">
          <front>
            <title>Proxy Operations for CoAP Group Communication</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Esko Dijk" initials="E." surname="Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <date day="31" month="August" year="2023"/>
            <abstract>
              <t>   This document specifies the operations performed by a proxy, when
   using the Constrained Application Protocol (CoAP) in group
   communication scenarios.  Such a proxy processes a single request
   sent by a client over unicast, and distributes the request over IP
   multicast to a group of servers.  Then, the proxy collects the
   individual responses from those servers and relays those responses
   back to the client, in a way that allows the client to distinguish
   the responses and their origin servers through embedded addressing
   information.  This document updates RFC7252 with respect to caching
   of response messages at proxies.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-tiloca-core-groupcomm-proxy-09"/>
        </reference>
        <reference anchor="I-D.ietf-core-observe-multicast-notifications">
          <front>
            <title>Observe Notifications as CoAP Multicast Responses</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="26" month="April" year="2023"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP) allows clients to
   "observe" resources at a server, and receive notifications as unicast
   responses upon changes of the resource state.  In some use cases,
   such as based on publish-subscribe, it would be convenient for the
   server to send a single notification addressed to all the clients
   observing a same target resource.  This document updates RFC7252 and
   RFC7641, and defines how a server sends observe notifications as
   response messages over multicast, synchronizing all the observers of
   a same resource on a same shared Token value.  Besides, this document
   defines how Group OSCORE can be used to protect multicast
   notifications end-to-end between the server and the observer clients.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-observe-multicast-notifications-06"/>
        </reference>
        <reference anchor="I-D.ietf-core-coap-pubsub">
          <front>
            <title>A publish-subscribe architecture for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Michael Koster" initials="M." surname="Koster">
              <organization>Unaffiliated</organization>
            </author>
            <author fullname="Ari Keränen" initials="A." surname="Keränen">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Jaime Jimenez" initials="J." surname="Jimenez">
              <organization>Ericsson</organization>
            </author>
            <date day="13" month="March" year="2023"/>
            <abstract>
              <t>   This document describes a publish-subscribe architecture for CoAP
   that extends the capabilities of CoAP for supporting nodes with long
   breaks in connectivity and/or up-time.  The Constrained Application
   Protocol (CoAP) is used by CoAP clients both to publish and to
   subscribe via a known topic resource.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-coap-pubsub-12"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-edhoc">
          <front>
            <title>Using EDHOC with CoAP and OSCORE</title>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Stefan Hristozov" initials="S." surname="Hristozov">
              <organization>Fraunhofer AISEC</organization>
            </author>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson</organization>
            </author>
            <date day="13" month="October" year="2023"/>
            <abstract>
              <t>   The lightweight authenticated key exchange protocol EDHOC can be run
   over CoAP and used by two peers to establish an OSCORE Security
   Context.  This document details this use of the EDHOC protocol, by
   specifying a number of additional and optional mechanisms.  These
   especially include an optimization approach for combining the
   execution of EDHOC with the first OSCORE transaction.  This
   combination reduces the number of round trips required to set up an
   OSCORE Security Context and to complete an OSCORE transaction using
   that Security Context.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-edhoc-09"/>
        </reference>
        <reference anchor="I-D.ietf-lake-edhoc">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC)</title>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="25" month="August" year="2023"/>
            <abstract>
              <t>   This document specifies Ephemeral Diffie-Hellman Over COSE (EDHOC), a
   very compact and lightweight authenticated Diffie-Hellman key
   exchange with ephemeral keys.  EDHOC provides mutual authentication,
   forward secrecy, and identity protection.  EDHOC is intended for
   usage in constrained scenarios and a main use case is to establish an
   OSCORE security context.  By reusing COSE for cryptography, CBOR for
   encoding, and CoAP for transport, the additional code size can be
   kept very low.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lake-edhoc-22"/>
        </reference>
        <reference anchor="I-D.ietf-core-transport-indication">
          <front>
            <title>CoAP Protocol Indication</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <date day="13" month="March" year="2023"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP, [RFC7252]) is available
   over different transports (UDP, DTLS, TCP, TLS, WebSockets), but
   lacks a way to unify these addresses.  This document provides
   terminology and provisions based on Web Linking [RFC8288] to express
   alternative transports available to a device, and to optimize
   exchanges using these.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-transport-indication-02"/>
        </reference>
        <reference anchor="I-D.ietf-ace-key-groupcomm-oscore">
          <front>
            <title>Key Management for OSCORE Groups in ACE</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Jiye Park" initials="J." surname="Park">
              <organization>Universitaet Duisburg-Essen</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="6" month="March" year="2023"/>
            <abstract>
              <t>   This document defines an application profile of the ACE framework for
   Authentication and Authorization, to request and provision keying
   material in group communication scenarios that are based on CoAP and
   are secured with Group Object Security for Constrained RESTful
   Environments (Group OSCORE).  This application profile delegates the
   authentication and authorization of Clients, that join an OSCORE
   group through a Resource Server acting as Group Manager for that
   group.  This application profile leverages protocol-specific
   transport profiles of ACE to achieve communication security, server
   authentication and proof-of-possession for a key owned by the Client
   and bound to an OAuth 2.0 Access Token.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-key-groupcomm-oscore-16"/>
        </reference>
        <reference anchor="I-D.ietf-core-coap-pm">
          <front>
            <title>Constrained Application Protocol (CoAP) Performance Measurement Option</title>
            <author fullname="Giuseppe Fioccola" initials="G." surname="Fioccola">
              <organization>Huawei</organization>
            </author>
            <author fullname="Tianran Zhou" initials="T." surname="Zhou">
              <organization>Huawei</organization>
            </author>
            <author fullname="Mauro Cociglio" initials="M." surname="Cociglio">
              <organization>Telecom Italia</organization>
            </author>
            <author fullname="Fabio Bulgarella" initials="F." surname="Bulgarella">
              <organization>Telecom Italia</organization>
            </author>
            <author fullname="Massimo Nilo" initials="M." surname="Nilo">
              <organization>Telecom Italia</organization>
            </author>
            <author fullname="Fabrizio Milan" initials="F." surname="Milan">
              <organization>Telecom Italia</organization>
            </author>
            <date day="19" month="April" year="2023"/>
            <abstract>
              <t>   This document specifies a method for the Performance Measurement of
   the Constrained Application Protocol (CoAP).  A new CoAP option is
   defined in order to enable network telemetry both end-to-end and hop-
   by-hop.  The endpoints cooperate by marking and, possibly, mirroring
   information on the round-trip connection.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-coap-pm-00"/>
        </reference>
        <reference anchor="I-D.ietf-ace-coap-est-oscore">
          <front>
            <title>Protecting EST Payloads with OSCORE</title>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Shahid Raza" initials="S." surname="Raza">
              <organization>RISE</organization>
            </author>
            <author fullname="Martin Furuhed" initials="M." surname="Furuhed">
              <organization>Nexus</organization>
            </author>
            <author fullname="Mališa Vučinić" initials="M." surname="Vučinić">
              <organization>Inria</organization>
            </author>
            <author fullname="Timothy Claeys" initials="T." surname="Claeys">
         </author>
            <date day="9" month="July" year="2023"/>
            <abstract>
              <t>   This document specifies public-key certificate enrollment procedures
   protected with lightweight application-layer security protocols
   suitable for Internet of Things (IoT) deployments.  The protocols
   leverage payload formats defined in Enrollment over Secure Transport
   (EST) and existing IoT standards including the Constrained
   Application Protocol (CoAP), Concise Binary Object Representation
   (CBOR) and the CBOR Object Signing and Encryption (COSE) format.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-coap-est-oscore-02"/>
        </reference>
        <reference anchor="I-D.amsuess-core-cachable-oscore">
          <front>
            <title>Cacheable OSCORE</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="10" month="July" year="2023"/>
            <abstract>
              <t>   Group communication with the Constrained Application Protocol (CoAP)
   can be secured end-to-end using Group Object Security for Constrained
   RESTful Environments (Group OSCORE), also across untrusted
   intermediary proxies.  However, this sidesteps the proxies' abilities
   to cache responses from the origin server(s).  This specification
   restores cacheability of protected responses at proxies, by
   introducing consensus requests which any client in a group can send
   to one server or multiple servers in the same group.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-amsuess-core-cachable-oscore-07"/>
        </reference>
        <reference anchor="I-D.tiloca-schc-8824-update">
          <front>
            <title>Clarifications and Updates on using Static Context Header Compression (SCHC) for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Laurent Toutain" initials="L." surname="Toutain">
              <organization>IMT Atlantique</organization>
            </author>
            <author fullname="Ivan Martinez" initials="I." surname="Martinez">
              <organization>Nokia Bell Labs</organization>
            </author>
            <author fullname="Ana Minaburo" initials="A." surname="Minaburo">
              <organization>Consultant</organization>
            </author>
            <date day="10" month="July" year="2023"/>
            <abstract>
              <t>   This document clarifies, updates and extends the method specified in
   RFC 8824 for compressing Constrained Application Protocol (CoAP)
   headers using the Static Context Header Compression and fragmentation
   (SCHC) framework.  In particular, it considers recently defined CoAP
   options and specifies how CoAP headers are compressed in the presence
   of intermediaries.  Therefore, this document updates RFC 8824.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-tiloca-schc-8824-update-01"/>
        </reference>
        <reference anchor="LwM2M-Core" target="http://www.openmobilealliance.org/release/LightweightM2M/V1_2-20201110-A/OMA-TS-LightweightM2M_Core-V1_2-20201110-A.pdf">
          <front>
            <title>Lightweight Machine to Machine Technical Specification - Core, Approved Version 1.2, OMA-TS-LightweightM2M_Core-V1_2-20201110-A</title>
            <author>
              <organization>Open Mobile Alliance</organization>
            </author>
            <date year="2020" month="November"/>
          </front>
        </reference>
        <reference anchor="LwM2M-Transport" target="http://www.openmobilealliance.org/release/LightweightM2M/V1_2-20201110-A/OMA-TS-LightweightM2M_Transport-V1_2-20201110-A.pdf">
          <front>
            <title>Lightweight Machine to Machine Technical Specification - Transport Bindings, Approved Version 1.2, OMA-TS-LightweightM2M_Transport-V1_2-20201110-A</title>
            <author>
              <organization>Open Mobile Alliance</organization>
            </author>
            <date year="2020" month="November"/>
          </front>
        </reference>
        <reference anchor="LwM2M-Gateway" target="https://www.openmobilealliance.org/release/LwM2M_Gateway/V1_1-20210518-A/OMA-TS-LWM2M_Gateway-V1_1-20210518-A.pdf">
          <front>
            <title>Lightweight Machine to Machine Gateway Technical Specification - Approved Version 1.1, OMA-TS-LWM2M_Gateway-V1_1-20210518-A</title>
            <author>
              <organization>Open Mobile Alliance</organization>
            </author>
            <date year="2021" month="May"/>
          </front>
        </reference>
      </references>
    </references>
    <section anchor="sec-examples">
      <name>Examples</name>
      <t>This section provides a number of examples where the approach defined in this document is used to protect message exchanges.</t>
      <t>The presented examples build on the example shown in <xref section="A.1" sectionFormat="of" target="RFC8613"/>, and illustrate an origin client requesting the alarm status from an origin server, through a forward-proxy.</t>
      <t>The abbreviations "REQ" and "RESP" are used to denote a request message and a response message, respectively.</t>
      <section anchor="example-1">
        <name>Example 1</name>
        <t>In the example shown in <xref target="fig-example-client-proxy"/>, message exchanges are protected with OSCORE over the following legs.</t>
        <ul spacing="normal">
          <li>
            <t>End-to-end, between the client and the server, using the OSCORE Security Context CTX_C_S. The client uses the OSCORE Sender ID 0x5f when using OSCORE with the server.</t>
          </li>
          <li>
            <t>Between the client and the proxy, using the OSCORE Security Context CTX_C_P. The client uses the OSCORE Sender ID 0x20 when using OSCORE with the proxy.</t>
          </li>
        </ul>
        <figure anchor="fig-example-client-proxy">
          <name>Use of OSCORE between Client-Server and Client-Proxy</name>
          <artwork><![CDATA[
Client  Proxy  Server
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_S   |       |
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_P   |       |
  |       |       |
  +------>|       |     Code: 0.02 (POST)
  | POST  |       |    Token: 0x8c
  |       |       |   OSCORE: [kid: 0x20, Partial IV: 31]
  |       |       |     0xff
  |       |       |  Payload: {Code: 0.02,
  |       |       |            OSCORE: [kid: 0x5f, Partial IV: 42],
  |       |       |            Uri-Host: example.com,
  |       |       |            Proxy-Scheme: coap,
  |       |       |            0xff,
  |       |       |            {Code: 0.01,
  |       |       |             Uri-Path: "alarm_status"
  |       |       |            } // Encrypted with CTX_C_S
  |       |       |           } // Encrypted with CTX_C_P
  |       |       |
  |     Decrypt   |
  |     REQ with  |
  |     CTX_C_P   |
  |       |       |
  |       +------>|     Code: 0.02 (POST)
  |       | POST  |    Token: 0x7b
  |       |       |   OSCORE: [kid: 0x5f, Partial IV: 42]
  |       |       |     0xff
  |       |       |  Payload: {
  |       |       |            Code: 0.01,
  |       |       |            Uri-Path: "alarm_status"
  |       |       |           } // Encrypted with CTX_C_S
  |       |       |
  |       |     Decrypt
  |       |     REQ with
  |       |     CTX_C_S
  |       |       |
  |       |     Encrypt
  |       |     RESP with
  |       |     CTX_C_S
  |       |       |
  |       |<------+     Code: 2.04 (Changed)
  |       |  2.04 |    Token: 0x7b
  |       |       |   OSCORE: -
  |       |       |     0xff
  |       |       |  Payload: {Code: 2.05,
  |       |       |            0xff,
  |       |       |            "0"
  |       |       |           } // Encrypted with CTX_C_S
  |       |       |
  |     Encrypt   |
  |     RESP with |
  |     CTX_C_P   |
  |       |       |
  |<------+       |     Code: 2.04 (Changed)
  |  2.04 |       |    Token: 0x8c
  |       |       |   OSCORE: -
  |       |       |     0xff
  |       |       |  Payload: {Code: 2.04,
  |       |       |            OSCORE: -,
  |       |       |            0xff,
  |       |       |            {Code: 2.05,
  |       |       |             0xff,
  |       |       |             "0"
  |       |       |            } // Encrypted with CTX_C_S
  |       |       |           } // Encrypted with CTX_C_P
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_P   |       |
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_S   |       |
  |       |       |

Square brackets [ ... ] indicate content of compressed COSE object.
Curly brackets { ... } indicate encrypted data.
]]></artwork>
        </figure>
      </section>
      <section anchor="example-2">
        <name>Example 2</name>
        <t>In the example shown in <xref target="fig-example-proxy-server"/>, message exchanges are protected with OSCORE over the following legs.</t>
        <ul spacing="normal">
          <li>
            <t>End-to-end between the client and the server, using the OSCORE Security Context CTX_C_S. The client uses the OSCORE Sender ID 0x5f when using OSCORE with the server.</t>
          </li>
          <li>
            <t>Between the proxy and the server, using the OSCORE Security Context CTX_P_S. The proxy uses the OSCORE Sender ID 0xd4 when using OSCORE with the server.</t>
          </li>
        </ul>
        <figure anchor="fig-example-proxy-server">
          <name>Use of OSCORE between Client-Server and Proxy-Server</name>
          <artwork><![CDATA[
Client  Proxy  Server
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_S   |       |
  |       |       |
  +------>|       |         Code: 0.02 (POST)
  | POST  |       |        Token: 0x8c
  |       |       |     Uri-Host: example.com
  |       |       | Proxy-Scheme: coap
  |       |       |       OSCORE: [kid: 0x5f, Partial IV: 42]
  |       |       |         0xff
  |       |       |      Payload: {Code: 0.01,
  |       |       |                Uri-Path: "alarm_status"
  |       |       |               } // Encrypted with CTX_C_S
  |       |       |
  |     Encrypt   |
  |     REQ with  |
  |     CTX_P_S   |
  |       |       |
  |       +------>|         Code: 0.02 (POST)
  |       | POST  |        Token: 0x7b
  |       |       |       OSCORE: [kid: 0xd4, Partial IV: 31]
  |       |       |         0xff
  |       |       |      Payload: {Code: 0.02,
  |       |       |                OSCORE: [kid: 0x5f, Partial IV: 42],
  |       |       |                0xff,
  |       |       |                {Code: 0.01,
  |       |       |                 Uri-Path: "alarm_status"
  |       |       |                } // Encrypted with CTX_C_S
  |       |       |               } // Encrypted with CTX_P_S
  |       |       |
  |       |     Decrypt
  |       |     REQ with
  |       |     CTX_P_S
  |       |       |
  |       |     Decrypt
  |       |     REQ with
  |       |     CTX_C_S
  |       |       |
  |       |     Encrypt
  |       |     RESP with
  |       |     CTX_C_S
  |       |       |
  |       |     Encrypt
  |       |     RESP with
  |       |     CTX_P_S
  |       |       |
  |       |<------+         Code: 2.04 (Changed)
  |       |  2.04 |        Token: 0x7b
  |       |       |       OSCORE: -
  |       |       |         0xff
  |       |       |      Payload: {Code: 2.04,
  |       |       |                OSCORE: -,
  |       |       |                0xff,
  |       |       |                {Code: 2.05,
  |       |       |                 0xff,
  |       |       |                 "0"
  |       |       |                } // Encrypted with CTX_C_S
  |       |       |               } // Encrypted with CTX_P_S
  |       |       |
  |     Decrypt   |
  |     RESP with |
  |     CTX_P_S   |
  |       |       |
  |<------+       |         Code: 2.04 (Changed)
  |  2.04 |       |        Token: 0x8c
  |       |       |       OSCORE: -
  |       |       |               0xff
  |       |       |      Payload: {Code: 2.05,
  |       |       |                0xff,
  |       |       |                "0"
  |       |       |               } // Encrypted with CTX_C_S
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_S   |       |
  |       |       |

Square brackets [ ... ] indicate content of compressed COSE object.
Curly brackets { ... } indicate encrypted data.
]]></artwork>
        </figure>
      </section>
      <section anchor="example-3">
        <name>Example 3</name>
        <t>In the example shown in <xref target="fig-example-client-proxy-server"/>, message exchanges are protected with OSCORE over the following legs.</t>
        <ul spacing="normal">
          <li>
            <t>End-to-end between the client and the server, using the OSCORE Security Context CTX_C_S. The client uses the OSCORE Sender ID 0x5f when using OSCORE with the server.</t>
          </li>
          <li>
            <t>Between the client and the proxy, using the OSCORE Security Context CTX_C_P. The client uses the OSCORE Sender ID 0x20 when using OSCORE with the proxy.</t>
          </li>
          <li>
            <t>Between the proxy and the server, using the OSCORE Security Context CTX_P_S. The proxy uses the OSCORE Sender ID 0xd4 when using OSCORE with the server.</t>
          </li>
        </ul>
        <figure anchor="fig-example-client-proxy-server">
          <name>Use of OSCORE between Client-Server, Client-Proxy and Proxy-Server</name>
          <artwork><![CDATA[
Client  Proxy  Server
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_S   |       |
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_P   |       |
  |       |       |
  +------>|       |    Code: 0.02 (POST)
  | POST  |       |   Token: 0x8c
  |       |       |  OSCORE: [kid: 0x20, Partial IV: 31]
  |       |       |    0xff
  |       |       | Payload: {Code: 0.02,
  |       |       |           OSCORE: [kid: 0x5f, Partial IV: 42],
  |       |       |           Uri-Host: example.com,
  |       |       |           Proxy-Scheme: coap,
  |       |       |           0xff,
  |       |       |           {Code: 0.01,
  |       |       |            Uri-Path: "alarm_status"
  |       |       |           } // Encrypted with CTX_C_S
  |       |       |          } // Encrypted with CTX_C_P
  |       |       |
  |     Decrypt   |
  |     REQ with  |
  |     CTX_C_P   |
  |       |       |
  |     Encrypt   |
  |     REQ with  |
  |     CTX_P_S   |
  |       |       |
  |       +------>|    Code: 0.02 (POST)
  |       | POST  |   Token: 0x7b
  |       |       |  OSCORE: [kid: 0xd4, Partial IV: 31]
  |       |       |    0xff
  |       |       | Payload: {Code: 0.02,
  |       |       |           OSCORE: [kid: 0x5f, Partial IV: 42],
  |       |       |           0xff,
  |       |       |           {Code: 0.01,
  |       |       |            Uri-Path: "alarm_status"
  |       |       |           } // Encrypted with CTX_C_S
  |       |       |          } // Encrypted with CTX_P_S
  |       |       |
  |       |     Decrypt
  |       |     REQ with
  |       |     CTX_P_S
  |       |       |
  |       |     Decrypt
  |       |     REQ with
  |       |     CTX_C_S
  |       |       |
  |       |     Encrypt
  |       |     RESP with
  |       |     CTX_C_S
  |       |       |
  |       |     Encrypt
  |       |     RESP with
  |       |     CTX_P_S
  |       |       |
  |       |<------+    Code: 2.04 (Changed)
  |       |  2.04 |   Token: 0x7b
  |       |       |  OSCORE: -
  |       |       |    0xff
  |       |       | Payload: {Code: 2.04,
  |       |       |           OSCORE: -,
  |       |       |           0xff,
  |       |       |           {Code: 2.05,
  |       |       |            0xff,
  |       |       |            "0"
  |       |       |           } // Encrypted with CTX_C_S
  |       |       |          } // Encrypted with CTX_P_S
  |       |       |
  |     Decrypt   |
  |     RESP with |
  |     CTX_P_S   |
  |       |       |
  |     Encrypt   |
  |     ERSP with |
  |     CTX_C_P   |
  |       |       |
  |<------+       |    Code: 2.04 (Changed)
  |  2.04 |       |   Token: 0x8c
  |       |       |  OSCORE: -
  |       |       |    0xff
  |       |       | Payload: {Code: 2.04,
  |       |       |           OSCORE: -,
  |       |       |           0xff,
  |       |       |           {Code: 2.05,
  |       |       |            0xff,
  |       |       |            "0"
  |       |       |           } // Encrypted with CTX_C_S
  |       |       |          } // Encrypted with CTX_C_P
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_P   |       |
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_S   |       |
  |       |       |

Square brackets [ ... ] indicate content of compressed COSE object.
Curly brackets { ... } indicate encrypted data.
]]></artwork>
        </figure>
      </section>
      <section anchor="sec-example-edhoc">
        <name>Example 4</name>
        <t>In the example shown in <xref target="fig-example-edhoc"/>, message exchanges are protected over the following legs.</t>
        <ul spacing="normal">
          <li>
            <t>End-to-end, between the client and the server, using the OSCORE Security Context CTX_C_S. The client uses the OSCORE Sender ID 0x5f when using OSCORE with the server.</t>
          </li>
          <li>
            <t>Between the client and the proxy, using the OSCORE Security Context CTX_C_P. The client uses the OSCORE Sender ID 0x20 when using OSCORE with the proxy.</t>
          </li>
        </ul>
        <t>The example also shows how the client establishes an OSCORE Security Context CTX_C_P with the proxy and CTX_C_S with the server, by using the key establishment protocol EDHOC <xref target="I-D.ietf-lake-edhoc"/>.</t>
        <figure anchor="fig-example-edhoc">
          <name>Use of OSCORE between Client-Server and Proxy-Server, with OSCORE Security Contexts established through EDHOC</name>
          <artwork><![CDATA[
Client  Proxy  Server
  |       |       |
  +------>|       |         Code: 0.02 (POST)
  | POST  |       |        Token: 0xf3
  |       |       |     Uri-Path: ".well-known"
  |       |       |     Uri-Path: "edhoc"
  |       |       |         0xff
  |       |       |      Payload: (true, EDHOC message_1)
  |       |       |
  |<------+       |         Code: 2.04 (Changed)
  |  2.04 |       |        Token: 0xf3
  |       |       |         0xff
  |       |       |      Payload: EDHOC message_2
  |       |       |
Establish |       |
CTX_C_P   |       |
  |       |       |
  +------>|       |         Code: 0.02 (POST)
  | POST  |       |        Token: 0x82
  |       |       |     Uri-Path: ".well-known"
  |       |       |     Uri-Path: edhoc
  |       |       |         0xff
  |       |       |      Payload: (C_R, EDHOC message_3)
  |       |       |
  |     Establish |
  |     CTX_C_P   |
  |       |       |
  |<------+       |
  |  ACK  |       |
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_P   |       |
  |       |       |
  +------>|       |         Code: 0.02 (POST)
  | POST  |       |        Token: 0xbe
  |       |       |       OSCORE: [kid: 0x20, Partial IV: 00]
  |       |       |         0xff
  |       |       |      Payload: {Code: 0.02,
  |       |       |                Uri-Host: "example.com",
  |       |       |                Uri-Path: ".well-known",
  |       |       |                Uri-Path: "edhoc",
  |       |       |                Proxy-Scheme: "coap",
  |       |       |                0xff,
  |       |       |                (true, EDHOC message_1)
  |       |       |               } // Encrypted with CTX_C_P
  |       |       |
  |     Decrypt   |
  |     REQ with  |
  |     CTX_C_P   |
  |       |       |
  |       +------>|         Code: 0.02 (POST)
  |       | POST  |        Token: 0xa5
  |       |       |     Uri-Path: ".well-known"
  |       |       |     Uri-Path: "edhoc"
  |       |       |         0xff
  |       |       |      Payload: (true, EDHOC message_1)
  |       |       |
  |       |<------+         Code: 2.04 (Changed)
  |       |  2.04 |        Token: 0xa5
  |       |       |         0xff
  |       |       |      Payload: EDHOC message_2
  |       |       |
  |     Encrypt   |
  |     RESP with |
  |     CTX_C_P   |
  |       |       |
  |<------+       |         Code: 2.04 (Changed)
  |  2.04 |       |        Token: 0xbe
  |       |       |       OSCORE: -
  |       |       |         0xff
  |       |       |      Payload: {Code: 2.04,
  |       |       |                0xff,
  |       |       |                EDHOC message_2
  |       |       |               } // Encrypted with CTX_C_P
  |       |       |
Establish |       |
CTX_C_S   |       |
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_P   |       |
  |       |       |
  +------>|       |         Code: 0.02 (POST)
  | POST  |       |        Token: 0xb9
  |       |       |       OSCORE: [kid: 0x20, Partial IV: 01]
  |       |       |         0xff
  |       |       |      Payload: {Code: 0.02,
  |       |       |                Uri-Host: "example.com",
  |       |       |                Uri-Path: ".well-known",
  |       |       |                Uri-Path: "edhoc",
  |       |       |                Proxy-Scheme: "coap",
  |       |       |                0xff,
  |       |       |                (C_R, EDHOC message_3)
  |       |       |               } // Encrypted with CTX_C_P
  |       |       |
  |     Decrypt   |
  |     REQ with  |
  |     CTX_C_P   |
  |       |       |
  |       +------>|         Code: 0.02 (POST)
  |       | POST  |        Token: 0xdd
  |       |       |     Uri-Path: ".well-known"
  |       |       |     Uri-Path: "edhoc"
  |       |       |         0xff
  |       |       |      Payload: (C_R, EDHOC message_3)
  |       |       |
  |       |     Establish
  |       |     CTX_C_S
  |       |       |
  |       |<------+
  |       |  ACK  |
  |       |       |
  |<------+       |
  |  ACK  |       |
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_S   |       |
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_P   |       |
  |       |       |
  +------>|       |    Code: 0.02 (POST)
  | POST  |       |   Token: 0x8c
  |       |       |  OSCORE: [kid: 0x20, Partial IV: 02]
  |       |       |    0xff
  |       |       | Payload: {Code: 0.02,
  |       |       |           OSCORE: [kid: 0x5f, Partial IV: 00],
  |       |       |           Uri-Host: "example.com",
  |       |       |           Proxy-Scheme: "coap",
  |       |       |           0xff,
  |       |       |           {Code: 0.01,
  |       |       |            Uri-Path: "alarm_status"
  |       |       |           } // Encrypted with CTX_C_S
  |       |       |          } // Encrypted with CTX_C_P
  |       |       |
  |     Decrypt   |
  |     REQ with  |
  |     CTX_C_P   |
  |       |       |
  |       +------>|    Code: 0.02 (POST)
  |       | POST  |   Token: 0x7b
  |       |       |  OSCORE: [kid: 0x5f, Partial IV: 00]
  |       |       |    0xff
  |       |       | Payload: {Code: 0.01,
  |       |       |           Uri-Path: "alarm_status"
  |       |       |          } // Encrypted with CTX_C_S
  |       |       |
  |       |     Decrypt
  |       |     REQ with
  |       |     CTX_C_S
  |       |       |
  |       |     Encrypt
  |       |     RESP with
  |       |     CTX_C_S
  |       |       |
  |       |<------+    Code: 2.04 (Changed)
  |       |  2.04 |   Token: 0x7b
  |       |       |  OSCORE: -
  |       |       |    0xff
  |       |       | Payload: {Code: 2.05,
  |       |       |           0xff,
  |       |       |           "0"
  |       |       |          } // Encrypted with CTX_C_S
  |       |       |
  |     Encrypt   |
  |     RESP with |
  |     CTX_C_P   |
  |       |       |
  |<------+       |    Code: 2.04 (Changed)
  |  2.04 |       |   Token: 0x8c
  |       |       |  OSCORE: -
  |       |       |    0xff
  |       |       | Payload: {Code: 2.04,
  |       |       |           OSCORE: -,
  |       |       |           0xff,
  |       |       |           {Code: 2.05,
  |       |       |            0xff,
  |       |       |            "0"
  |       |       |           } // Encrypted with CTX_C_S
  |       |       |          } // Encrypted with CTX_C_P
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_P   |       |
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_S   |       |
  |       |       |

Square brackets [ ... ] indicate content of compressed COSE object.
Curly brackets { ... } indicate encrypted data.
Round brackets (...) indicate a CBOR sequence [RFC 8742].
]]></artwork>
        </figure>
      </section>
      <section anchor="sec-example-edhoc-comb-req">
        <name>Example 5</name>
        <t>In the example shown in <xref target="fig-example-edhoc-comb-req"/>, message exchanges are protected over the following legs.</t>
        <ul spacing="normal">
          <li>
            <t>End-to-end, between the client and the server. The client uses the OSCORE Sender ID 0x5f when using OSCORE with the server.</t>
          </li>
          <li>
            <t>Between the client and the proxy. The client uses the OSCORE Sender ID 0x20 when using OSCORE with the proxy.</t>
          </li>
        </ul>
        <t>The example also shows how the client establishes an OSCORE Security Context CTX_C_P with the proxy and CTX_C_S with the server, by using the key establishment protocol EDHOC <xref target="I-D.ietf-lake-edhoc"/>.</t>
        <t>In particular, the client relies on the EDHOC + OSCORE request defined in <xref target="I-D.ietf-core-oscore-edhoc"/> and denoted as COMB_REQ, in order to transport the last EDHOC message_3 and the first OSCORE-protected application CoAP request combined together.</t>
        <figure anchor="fig-example-edhoc-comb-req">
          <name>Use of OSCORE between Client-Server and Proxy-Server, with OSCORE Security Contexts established through EDHOC using the EDHOC + OSCORE request</name>
          <artwork><![CDATA[
Client  Proxy  Server
  |       |       |
  +------>|       |         Code: 0.02 (POST)
  | POST  |       |        Token: 0xf3
  |       |       |     Uri-Path: ".well-known"
  |       |       |     Uri-Path: "edhoc"
  |       |       |         0xff
  |       |       |      Payload: (true, EDHOC message_1)
  |       |       |
  |<------+       |         Code: 2.04 (Changed)
  |  2.04 |       |        Token: 0xf3
  |       |       |         0xff
  |       |       |      Payload: EDHOC message_2
  |       |       |
Establish |       |
CTX_C_P   |       |
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_P   |       |
  |       |       |
Prepare   |       |
COMB_REQ  |       |
for P     |       |
from REQ  |       |
  |       |       |
  +------>|       |         Code: 0.02 (POST)
  | POST  |       |        Token: 0x82
  |       |       |       OSCORE: [kid: 0x20, Partial IV: 00]
  |       |       |        EDHOC: -
  |       |       |         0xff
  |       |       |      Payload: EDHOC message_3, // Intended for P
  |       |       |               {Code: 0.02,
  |       |       |                Uri-Host: "example.com",
  |       |       |                Uri-Path: ".well-known",
  |       |       |                Uri-Path: "edhoc",
  |       |       |                Proxy-Scheme: "coap",
  |       |       |                0xff,
  |       |       |                (true, EDHOC message_1)
  |       |       |               } // Encrypted with CTX_C_P
  |       |       |
  |     Establish |
  |     CTX_C_P   |
  |       |       |
  |     Rebuild   |
  |     REQ from  |
  |     COMB_REQ  |
  |       |       |
  |     Decrypt   |
  |     REQ with  |
  |     CTX_C_P   |
  |       |       |
  |       +------>|         Code: 0.02 (POST)
  |       | POST  |        Token: 0xa5
  |       |       |     Uri-Path: ".well-known"
  |       |       |     Uri-Path: "edhoc"
  |       |       |         0xff
  |       |       |      Payload: (true, EDHOC message_1)
  |       |       |
  |       |<------+         Code: 2.04 (Changed)
  |       |  2.04 |        Token: 0xa5
  |       |       |         0xff
  |       |       |      Payload: EDHOC message_2
  |       |       |
  |     Encrypt   |
  |     RESP with |
  |     CTX_C_P   |
  |       |       |
  |<------+       |    Code: 2.04 (Changed)
  |  2.04 |       |   Token: 0x82
  |       |       |  OSCORE: -
  |       |       |    0xff
  |       |       | Payload: {Code: 2.04,
  |       |       |           0xff,
  |       |       |           EDHOC message_2
  |       |       |          } // Encrypted with CTX_C_P
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_P   |       |
  |       |       |
Establish |       |
CTX_C_S   |       |
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_S   |       |
  |       |       |
Prepare   |       |
COMB_REQ  |       |
for S     |       |
from REQ  |       |
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_P   |       |
  |       |       |
  +------>|       |         Code: 0.02 (POST)
  | POST  |       |        Token: 0x83
  |       |       |       OSCORE: [kid: 0x20, Partial IV: 01]
  |       |       |         0xff
  |       |       |      Payload: {Code: 0.02,
  |       |       |                Uri-Host: "example.com",
  |       |       |                OSCORE: [kid: 0x5f, Partial IV: 00],
  |       |       |                EDHOC: -,
  |       |       |                Proxy-Scheme: "coap",
  |       |       |                0xff,
  |       |       |                EDHOC message_3 // Intended for S
  |       |       |                {
  |       |       |                 Code: 0.01,
  |       |       |                 Uri-Path:"alarm_status"
  |       |       |                } // Encrypted with CTX_C_S
  |       |       |               } // Encrypted with CTX_C_P
  |       |       |
  |     Decrypt   |
  |     REQ with  |
  |     CTX_C_P   |
  |       |       |
  |       +------>|         Code: 0.02 (POST)
  |       | POST  |        Token: 0xa6
  |       |       |       OSCORE: [kid: 0x5f, Partial IV: 00]
  |       |       |        EDHOC: -
  |       |       |         0xff
  |       |       |      Payload: EDHOC message_3 // Intended for S
  |       |       |               {
  |       |       |                Code: 0.01,
  |       |       |                Uri-Path: "alarm_status"
  |       |       |               } // Encrypted with CTX_C_S
  |       |       |
  |       |     Establish
  |       |     CTX_C_S
  |       |       |
  |       |     Rebuild
  |       |     REQ from
  |       |     COMB_REQ
  |       |       |
  |       |     Decrypt
  |       |     REQ with
  |       |     CTX_C_S
  |       |       |
  |       |     Encrypt
  |       |     RESP with
  |       |     CTX_C_S
  |       |       |
  |       |<------+    Code: 2.04 (Changed)
  |       |  2.04 |   Token: 0xa6
  |       |       |  OSCORE: -
  |       |       |    0xff
  |       |       | Payload: {Code: 2.05,
  |       |       |           0xff,
  |       |       |           "0"
  |       |       |          } // Encrypted with CTX_C_S
  |       |       |
  |     Encrypt   |
  |     RESP with |
  |     CTX_C_P   |
  |       |       |
  |<------+       |    Code: 2.04 (Changed)
  |  2.04 |       |   Token: 0x83
  |       |       |  OSCORE: -
  |       |       |    0xff
  |       |       | Payload: {Code: 2.04,
  |       |       |           OSCORE: -,
  |       |       |           0xff,
  |       |       |           {Code: 2.05,
  |       |       |            0xff,
  |       |       |            "0"
  |       |       |           } // Encrypted with CTX_C_S
  |       |       |          } // Encrypted with CTX_C_P
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_P   |       |
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_S   |       |
  |       |       |

Square brackets [ ... ] indicate content of compressed COSE object.
Curly brackets { ... } indicate encrypted data.
Round brackets (...) indicate a CBOR sequence [RFC 8742].
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="sec-incoming-req-diag">
      <name>State Diagram of the Incoming Request Processing</name>
      <t><xref target="fig-incoming-request-diagram"/> overviews the processing of an incoming request, as specified in <xref target="incoming-requests"/>. The dotted boxes indicate ending states where the processing terminates.</t>
      <figure anchor="fig-incoming-request-diagram">
        <name>Processing of an incoming request.</name>
        <artwork align="center"><![CDATA[
Original    +-----------------------------------------------+
incoming -->|        Are there proxy-related options?       |<--------+
request     +-----------------------------------------------+         |
             |                                           |            |
            YES                                          NO           |
             |                                           |            |
             v                                           v            |
+-------------+     +---------+    .......... +------------------+    |
| Is there a  | YES | Am I a  | NO : Return : | Is there an      |    |
| Proxy-Uri   |---->| forward |--->: 5.05   : | OSCORE Option?   |    |
| Option?     |     | proxy?  |    :........: +------------------+    |
+-------------+     +---------+                ^  |        |          |
   |                 ^       |     ..........  |  NO      YES         |
   NO                |      YES    : Return :  |  |        |          |
   |                 |       |     : 4.01   :  |  |        v          |
   |                 |       |     :........:  |  |  +------------+   |
   |                 |       |       ^         |  |  | Are there  |   |
   |                 |       |       |         |  |  | Uri-Path   |   |
   |                YES      |       NO        |  |  | Options?   |   |
   v                 |       v       |         |  |  +------------+   |
 +--------------------+ +---------------+      |  |   |          |    |
 | Is there the       | | Is forwarding |      |  |  YES         NO   |
 | Proxy-Scheme       | | this request  |      |  |   |          |    |
 | option with the    | | an authorized |      |  |   v          |    |
 | Uri-Host/Uri-Port  | | operation?    |      |  | ..........   |    |
 | options?           | +---------------+      |  | : Return :   |    |
 +--------------------+  ^           |         |  | : 4.00   :   |    |
   |                     |          YES        |  | :........:   |    |
   NO                    |           |         |  |              v    |
   |                     |           |         |  |       +---------+ |
   v                     |           v         |  |       | Decrypt | |
 +--------------+        |  .................  |  |       +---------+ |
 | There are    |        |  : Consume the   :  |  |         |         |
 | Uri-Path     |        |  : proxy-related :  |  |         |         |
 | Options      |        |  : options and   :  |  |         v         |
 | without      |        |  : forward the   :  |  | +----------+      |
 | Proxy-Scheme |        |  : request       :  |  | | Success? |-YES -+
 +--------------+        |  :...............:  |  | +----------+
   |                     |                     |  |      |
   |                     |                     |  |      NO
   |                     |                     |  |      |
   |                     |                     |  |      v
   |                     |                     |  | ................
   |                     |                     |  | : OSCORE error :
   |                     |                     |  | : handling     :
   |                     |                     |  | :..............:
   |                     |                     |  |
   |                     |                     |  v
   |                     |                     | +--------------+
   |                     |                     | | Is there an  |
   |                     |                     | | application? |
   |                     |                     | +--------------+
   |                     |                     |     |        |
   |                     |                     |    YES       NO
   |                     |                     |     |        |
   |                     |                     |     |        v
   |                     |                     |     |      ..........
   |                     |                     |     |      : Return :
   |                     |                     |     |      : 4.00   :
   |                    YES                    |     |      :........:
   v                     |                     |     v
 +------------------------+                    |   ...................
 | Am I a reverse proxy   |                    |   : Deliver the     :
 | using the indicated    |--NO----------------+   : request to the  :
 | resource for proxying? |                        : application     :
 +------------------------+                        :.................:
]]></artwork>
      </figure>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank <contact fullname="Christian Amsüss"/>, <contact fullname="Peter Blomqvist"/>, <contact fullname="David Navarro"/> and <contact fullname="Göran Selander"/> for their comments and feedback.</t>
      <t>The work on this document has been partly supported by VINNOVA and the Celtic-Next project CRITISEC; and by the H2020 project SIFIS-Home (Grant agreement 952652).</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
Nv4/FWIF4p8WAQA=

-->

</rfc>
