<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.13 (Ruby 2.7.0) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-amsuess-t2trg-onion-coap-03" category="exp" submissionType="IRTF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.24.0 -->
  <front>
    <title abbrev="Onion CoAP">Using onion routing with CoAP</title>
    <seriesInfo name="Internet-Draft" value="draft-amsuess-t2trg-onion-coap-03"/>
    <author initials="C." surname="Amsüss" fullname="Christian Amsüss">
      <organization/>
      <address>
        <postal>
          <country>Austria</country>
        </postal>
        <email>christian@amsuess.com</email>
      </address>
    </author>
    <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="2024" month="November" day="18"/>
    <workgroup>t2trg</workgroup>
    <keyword>tor</keyword>
    <keyword>onion</keyword>
    <keyword>coap</keyword>
    <keyword>oscore</keyword>
    <keyword>edhoc</keyword>
    <keyword>hidden</keyword>
    <abstract>
      <t>The CoAP protocol was designed with direct connections and proxies in mind.
This document defines mechanisms by which chains of proxies can be set up.
In combination, they enable the operation of hidden services
and of clients similar to how Tor (The Onion Router) enables it for TCP-based protocols.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Thing-to-Thing Research Group mailing list (t2trg@irtf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/search/?email_list=t2trg"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://gitlab.com/chrysn/onion-coap"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>The Constrained Application Protocol (CoAP) protocol <xref target="RFC7252"/> was designed with direct connections and proxies in mind. This document defines mechanisms by which chains of proxies can be set up. In combination, they enable the operation of hidden services and of clients similar to how Tor (The Onion Router) enables it for TCP-based protocols.</t>
      <t>Onion CoAP is a framework for building a multi-party anonymization network with the goal of enhancing endpoints’ privacy through anonymous communication, while providing protection against traffic analysis. Key goals of its design is to provide confidential and anonymous communication.</t>
      <t>Achieving these goals critically depends on multiple non-colluding parties providing particular network services. Specifically, Onion CoAP takes advantage of layered encryption of messages and relaying of traffic through a chain of proxies. Each layer of encryption is removed at successive proxies in the chain, ensuring that no single proxy or network monitor can determine both the source and destination of a given communication flow.</t>
      <t>Onion CoAP uses Object Security for Constrained RESTful Environments (OSCORE) <xref target="RFC8613"/> to protect communications, and Ephemeral Diffie-Hellman Over COSE (EDHOC) <xref target="RFC9528"/> for establishing the required OSCORE associations.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words “<bcp14>MUST</bcp14>”, “<bcp14>MUST NOT</bcp14>”, “<bcp14>REQUIRED</bcp14>”, “<bcp14>SHALL</bcp14>”, “<bcp14>SHALL
NOT</bcp14>”, “<bcp14>SHOULD</bcp14>”, “<bcp14>SHOULD NOT</bcp14>”, “<bcp14>RECOMMENDED</bcp14>”, “<bcp14>NOT RECOMMENDED</bcp14>”,
“<bcp14>MAY</bcp14>”, and “<bcp14>OPTIONAL</bcp14>” in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      </section>
    </section>
    <section anchor="uses-cases">
      <name>Uses cases</name>
      <t>Using Onion CoAP allows for minimizing information disclosure, by hiding the network location of the communicating endpoints as well as their traffic pattern. This also prevents from linking the physical position of individuals that use communication endpoints to their organizational or personal affiliations, or from inferring their activities. For example, Onion CoAP is relevant in the following use cases.</t>
      <section anchor="transport-applications">
        <name>Transport Applications</name>
        <t>Some industrial applications can have particularly high privacy and confidentiality requirements, by deeming physical positions and communication patterns of the different parties to be sensitive information and a critical asset to protect.</t>
        <t>For instance, this can be the case for businesses operating in logistics and for their customers, as interested in a highly discrete tracking of transported goods that exposes as little information as possible.</t>
        <t>The use of Onion CoAP ensures that the physical location of goods remains undisclosed to unintended and unauthorized parties, thus reducing risks such as tampering, theft, or industrial espionage, e.g., by competitors or saboteurs. Furthermore, anonymizing the communication endpoints and their traffic patterns protects cargo details and logistics chains from being linked to specific operators, routes, or customers.</t>
        <t>A concrete example is a transport container that includes tracking sensors belonging to a manufacturer company. The container contains products made by such manufacturer and is physically anonymized (i.e., the container does not provide any visual hint pointing to the manufacturer).</t>
        <t>As the container is moved from one harbor to another, the sensor therein is intended to send a status update to the manufacturer server. When this happens, the manufacturer does not want to reveal itself and its position as something understandable by observing the communication started by the sensor.</t>
        <t>For instance, the manufacturer wants to keep the details of its logistics strategy confidential, including the routes and schedule of its delivery and distribution process. The reliability and commercial success of the manufacturer may well rely on such an optimized combination or routes and schedule, which is a key asset to not expose to competitors.</t>
      </section>
      <section anchor="hidden-deployments">
        <name>Hidden Deployments</name>
        <t>In some scenarios, not only is the physical location of communicating endpoints a critical asset to protect, but even their deployment and topology should be hidden and impractical to infer. That is, the fact that communication devices are deployed and the details of their deployment should themselves be hidden.</t>
        <t>For example, one may want to build a network of (mobile) sensors and actuators that are confidentially and secretly deployed in locations which must not be revealed, and from where they act as clients, servers, or both.</t>
        <t>Concrete use cases can include the supporting of military actions such as intelligence collection and assistance for in-the-field operations, or circumventing repressive actions such as censorship and (pervasive) traffic monitoring.</t>
      </section>
    </section>
    <section anchor="high-level-overview">
      <name>High-level Overview</name>
      <section anchor="design-considerations">
        <name>Design considerations</name>
        <t>The network described in this document
is designed to allow participation of Class 1 devices as defined in <xref target="RFC7228"/> as servers and clients.
It should reuse building blocks these devices will already implement if they use EDHOC <xref target="RFC9528"/> for authenticated key establishment and OSCORE <xref target="RFC8613"/> for encryption.
Operations that are costly for constrained devices,
such as creating and verifying signatures,
should not be part of regular operation.</t>
      </section>
      <section anchor="components-overview">
        <name>Components overview</name>
        <t>This document introduces separate mechanisms that in combination enable setups similar to how Tor is used for anonymous web access and anonymous hosting of web sites.
Some of the mechanisms need no new protocol components, but merely describe which existing steps are used to obtain the desired results.</t>
        <ul spacing="normal">
          <li>
            <t>A client can use EDHOC to establish a unilaterally authenticated OSCORE context with proxies (see <xref target="client-chain"/>).</t>
          </li>
          <li>
            <t>A server can use EDHOC to establish a unilaterally authenticated OSCORE context to establish a reverse proxy address (see <xref target="server-chain"/>).</t>
          </li>
          <li>
            <t>A discovery mechanism for proxies (see <xref target="proxy-discovery"/>).</t>
          </li>
          <li>
            <t>A naming and discovery mechanism for hidden services (see <xref target="naming"/>).</t>
          </li>
        </ul>
        <t>Note that these mechanisms should be largely independent:
A server that does not intend to hide its position can still advertise a cryptographic name at its real network coordinates,
and thus be available both to clients that do hide their location (even if their proxies do not work as “exit nodes” in Tor terminology)
and to clients on a local network.</t>
        <t><xref target="fig-topo"/> illustrates an example topology,
and <xref target="fig-layers"/> illustrates a cross-section of the OSCORE layers along one path.</t>
        <figure anchor="fig-topo">
          <name>Example topology of an onion style CoAP network showing two routes in separate graphs. Note that the hop P4→P2 is present in both chains, and can be pooled into one TLS connection</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="400" width="560" viewBox="0 0 560 400" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 176,48 L 176,128" fill="none" stroke="black"/>
                <path d="M 272,256 L 272,288" fill="none" stroke="black"/>
                <path d="M 352,320 L 352,352" fill="none" stroke="black"/>
                <path d="M 360,48 L 360,144" fill="none" stroke="black"/>
                <path d="M 416,256 L 416,288" fill="none" stroke="black"/>
                <path d="M 456,80 L 480,80" fill="none" stroke="black"/>
                <path d="M 272,256 L 328,256" fill="none" stroke="black"/>
                <path d="M 376,256 L 416,256" fill="none" stroke="black"/>
                <path d="M 456,304 L 480,304" fill="none" stroke="black"/>
                <path d="M 280,320 L 352,320" fill="none" stroke="black"/>
                <path d="M 192,368 L 344,368" fill="none" stroke="black"/>
                <path d="M 136,320 L 152,352" fill="none" stroke="black"/>
                <path d="M 136,96 L 152,128" fill="none" stroke="black"/>
                <path d="M 192,48 L 212,88" fill="none" stroke="black"/>
                <path d="M 144,288 L 152,272" fill="none" stroke="black"/>
                <path d="M 200,240 L 208,224" fill="none" stroke="black"/>
                <path d="M 328,80 L 344,48" fill="none" stroke="black"/>
                <path d="M 392,144 L 416,96" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="488,304 476,298.4 476,309.6" fill="black" transform="rotate(0,480,304)"/>
                <polygon class="arrowhead" points="488,80 476,74.4 476,85.6" fill="black" transform="rotate(0,480,80)"/>
                <polygon class="arrowhead" points="424,288 412,282.4 412,293.6" fill="black" transform="rotate(90,416,288)"/>
                <polygon class="arrowhead" points="424,96 412,90.4 412,101.6" fill="black" transform="rotate(296.565051177078,416,96)"/>
                <polygon class="arrowhead" points="368,144 356,138.4 356,149.6" fill="black" transform="rotate(90,360,144)"/>
                <polygon class="arrowhead" points="352,368 340,362.4 340,373.6" fill="black" transform="rotate(0,344,368)"/>
                <polygon class="arrowhead" points="352,48 340,42.4 340,53.6" fill="black" transform="rotate(296.565051177078,344,48)"/>
                <polygon class="arrowhead" points="336,256 324,250.4 324,261.6" fill="black" transform="rotate(0,328,256)"/>
                <polygon class="arrowhead" points="288,320 276,314.4 276,325.6" fill="black" transform="rotate(180,280,320)"/>
                <polygon class="arrowhead" points="220,88 208,82.4 208,93.6" fill="black" transform="rotate(63.43494882292201,212,88)"/>
                <polygon class="arrowhead" points="208,240 196,234.4 196,245.6" fill="black" transform="rotate(116.56505117707799,200,240)"/>
                <polygon class="arrowhead" points="184,48 172,42.4 172,53.6" fill="black" transform="rotate(270,176,48)"/>
                <polygon class="arrowhead" points="160,352 148,346.4 148,357.6" fill="black" transform="rotate(63.43494882292201,152,352)"/>
                <polygon class="arrowhead" points="160,128 148,122.4 148,133.6" fill="black" transform="rotate(63.43494882292201,152,128)"/>
                <polygon class="arrowhead" points="152,288 140,282.4 140,293.6" fill="black" transform="rotate(116.56505117707799,144,288)"/>
                <g class="text">
                  <text x="180" y="36">P1</text>
                  <text x="356" y="36">P2</text>
                  <text x="28" y="84">Client</text>
                  <text x="64" y="84">1</text>
                  <text x="84" y="84">-&gt;</text>
                  <text x="108" y="84">P3</text>
                  <text x="268" y="84">P4</text>
                  <text x="428" y="84">P5</text>
                  <text x="516" y="84">Server</text>
                  <text x="552" y="84">1</text>
                  <text x="252" y="100">(published</text>
                  <text x="308" y="100">as</text>
                  <text x="244" y="116">server</text>
                  <text x="300" y="116">addr.)</text>
                  <text x="172" y="148">P6</text>
                  <text x="364" y="164">P7</text>
                  <text x="252" y="228">Client</text>
                  <text x="288" y="228">2</text>
                  <text x="180" y="260">P1</text>
                  <text x="356" y="260">P2</text>
                  <text x="132" y="308">P3</text>
                  <text x="268" y="308">P4</text>
                  <text x="428" y="308">P5</text>
                  <text x="516" y="308">Server</text>
                  <text x="172" y="372">P6</text>
                  <text x="364" y="372">P7</text>
                  <text x="380" y="388">(published</text>
                  <text x="436" y="388">as</text>
                  <text x="476" y="388">server</text>
                  <text x="532" y="388">addr.)</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
                     P1                    P2
                     ^ \                  ^ |
                     |  \                /  |
Client 1 -> P3       |   v      P4      /   |       P5  ---> Server 1
                \    |    (published as     |      ^
                 \   |     server addr.)    |     /
                  v  |                      |    /
                    P6                      v   /
                                            P7



                         /  Client 2
                        v
                     P1          +------>  P2 -----+
                  /              |                 |
                 v               |                 v
               P3               P4                  P5  ---> Server
                \                 <--------+
                 \                         |
                  v                        |
                    P6 -------------------> P7
                                          (published as server addr.)
]]></artwork>
          </artset>
        </figure>
        <figure anchor="fig-layers">
          <name>Cross section of the Client 1 → Server 1 connection of [ TBD reference from label ]. Numbers indicate the sequence in which EDHOC is performed (precisely: message 1 is transmitted over the wire through whichever encapsulation), and are placed on the side of the initiator. Not depicted at step 8: Server 1 and/or P4 (TBD) publishes P4 as the public address of the hidden service; 9: client obtains the list of available proxies. 15: Client 1 looks up the introduction point of Server 1 through the proxy chain up to P1 to discover P4 (may also be implicit).</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="160" width="576" viewBox="0 0 576 160" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 528,80 L 528,112" fill="none" stroke="black"/>
                <path d="M 120,64 L 136,64" fill="none" stroke="black"/>
                <path d="M 168,64 L 184,64" fill="none" stroke="black"/>
                <path d="M 216,64 L 232,64" fill="none" stroke="black"/>
                <path d="M 256,64 L 272,64" fill="none" stroke="black"/>
                <path d="M 304,64 L 320,64" fill="none" stroke="black"/>
                <path d="M 352,64 L 368,64" fill="none" stroke="black"/>
                <path d="M 408,64 L 440,64" fill="none" stroke="black"/>
                <path d="M 24,80 L 448,80" fill="none" stroke="black"/>
                <path d="M 472,80 L 528,80" fill="none" stroke="black"/>
                <path d="M 24,96 L 232,96" fill="none" stroke="black"/>
                <path d="M 256,96 L 440,96" fill="none" stroke="black"/>
                <path d="M 24,112 L 184,112" fill="none" stroke="black"/>
                <path d="M 304,112 L 440,112" fill="none" stroke="black"/>
                <path d="M 24,128 L 136,128" fill="none" stroke="black"/>
                <path d="M 352,128 L 440,128" fill="none" stroke="black"/>
                <path d="M 24,144 L 88,144" fill="none" stroke="black"/>
                <path d="M 400,144 L 440,144" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="480,80 468,74.4 468,85.6" fill="black" transform="rotate(180,472,80)"/>
                <polygon class="arrowhead" points="416,64 404,58.4 404,69.6" fill="black" transform="rotate(180,408,64)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="64" y="36">1</text>
                  <text x="100" y="36">P3</text>
                  <text x="148" y="36">P6</text>
                  <text x="196" y="36">P1</text>
                  <text x="244" y="36">P4</text>
                  <text x="292" y="36">P2</text>
                  <text x="340" y="36">P7</text>
                  <text x="388" y="36">P5</text>
                  <text x="444" y="36">Server</text>
                  <text x="480" y="36">1</text>
                  <text x="108" y="68">11</text>
                  <text x="156" y="68">13</text>
                  <text x="204" y="68">16</text>
                  <text x="280" y="68">6</text>
                  <text x="328" y="68">4</text>
                  <text x="376" y="68">2</text>
                  <text x="464" y="68">TLS</text>
                  <text x="528" y="68">connections</text>
                  <text x="12" y="84">18</text>
                  <text x="12" y="100">17</text>
                  <text x="448" y="100">7</text>
                  <text x="12" y="116">14</text>
                  <text x="448" y="116">5</text>
                  <text x="12" y="132">12</text>
                  <text x="448" y="132">3</text>
                  <text x="532" y="132">End-to-end</text>
                  <text x="12" y="148">10</text>
                  <text x="448" y="148">1</text>
                  <text x="532" y="148">OSCORE</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Client 1   P3    P6    P1    P4    P2    P7    P5   Server 1

            11--- 13--- 16---  ---6  ---4  ---2   <---- TLS connections
18------------------------------------------------------  <------+
17---------------------------  ------------------------7         |
14---------------------              ------------------5         |
12---------------                          ------------3     End-to-end
10---------                                      ------1       OSCORE
]]></artwork>
          </artset>
        </figure>
      </section>
    </section>
    <section anchor="mechanisms">
      <name>Mechanisms</name>
      <section anchor="client-chain">
        <name>Client proxy chain</name>
        <t>A client can pick one or more proxies to hide its position in the network.</t>
        <t>Without OSCORE proxies, only one proxy hop can be chosen, because the CoAP requests contains at most two addresses:
The address in the IP header, and the address in the Uri-Host option.
With the mechanisms introduced in <xref target="I-D.ietf-core-oscore-capable-proxies"/>,
CoAP request can contain a Uri-Host option in each layer of OSCORE,
effectively building a source routing chain.</t>
        <t>To build the chain,
the client first chooses its first proxy hop,
and runs EDHOC to establish an OSCORE context.
In this process, the proxy authenticates with its long-term credentials,
whereas the client uses an ephemeral key (a plain CWT Cliams Set, <xref target="RFC8392"/>).
The process can take as little as one round-trip per proxy;
when message 3 of EDHOC is sent along with the OSCORE message (see <xref target="I-D.ietf-core-oscore-edhoc"/>) that contains the next hop’s message 1,</t>
        <t>Once one proxy context is established,
EDHOC can be run through that proxy with the next proxy,
until a chain of sufficient length has been established.
Care has to be taken to never use one of the later proxies
with any chain other than the chain through which the connection was established,
for otherwise the client can be deanonymized mor easily.</t>
        <t>When forwarding messages, every forward proxy strips off a layer of OSCORE from the request,
and adds one to the response.</t>
        <t>Possible optimizations:</t>
        <ul spacing="normal">
          <li>
            <t>Can EDHOC be run without transmitting two public keys (<tt>G_X</tt> and <tt>G_I</tt>) for the client?
(I.e., Can <tt>G_X</tt> be re-used as <tt>G_I</tt> without harm to EDHOC (likely not), and how would that be communicated?)</t>
          </li>
          <li>
            <t>For hops that are only ever used with a single next-hop,
as is typical with all but the first proxy (see guidance below):
Can default values for Proxy-Scheme and Uri-Host be communicated during EDHOC,
values that would later be elided?
Otherwise, every request would contain explicit addresses of the full chain.
If taken to the extreme, this might be setting up a SCHC context that also compresses parts of the OSCORE option,
where the client tells each proxy what the KID used with the next proxy is,
and uses the same sender sequence number for the hops.
(This has own security considerations; might be necessary to apply offsets, at which point it gets overly complex).  </t>
            <t>
Effectively, setting a default value for Proxy-Scheme and Uri-Host
makes that (originally forward) proxy a reverse proxy.</t>
          </li>
        </ul>
        <section anchor="guidance-for-setting-up-proxy-chains">
          <name>Guidance for setting up proxy chains</name>
          <t>TBD: This section should contain guidance distilled from Tor operations.
In particular, it might recommend that a client pick one proxy hop as a long-term first hop,
while building the remaining chain individually for each new origin server.</t>
          <t>Following common tor practice, it is expected that typical chain lengths are around 3 hops.
Note that the amount of processing on the peer side is independent of the length of the chain chosen by a host.
If a client deems a one-hop setup sufficient and only has resources for maintaining one extra OSCORE context,
it can still use a server that is hidden behind a 3 long proxy chain.</t>
        </section>
      </section>
      <section anchor="server-chain">
        <name>Server proxy chain</name>
        <t>A server can pick one or more proxies to hide its position in the network.</t>
        <t>Unlike forward proxies,
which are configured per request,
this requires a dedicated mechanism.</t>
        <t>TBD:
This document does not yet specify such a mechanism,
but may draw upon the reverse proxy request of <xref section="2" sectionFormat="of" target="I-D.amsuess-core-resource-directory-extensions"/>.</t>
        <t>When forwarding messages, every reverse proxy adds a layer of OSCORE to the request,
and removes one from the response.</t>
        <t>Possible optimizations:</t>
        <ul spacing="normal">
          <li>
            <t>Rather than explicitly advertise the name for which the proxies should be set up,
the advertised name could be derived from the <tt>CRED_x</tt> used in EDHOC.</t>
          </li>
        </ul>
      </section>
      <section anchor="naming">
        <name>Naming and name resolution</name>
        <t>The mechanisms discussed in <xref target="I-D.amsuess-t2trg-rdlink"/> can be used by hidden services to come up with names for their services.
(That document will need to be updated to use mechanisms from <xref section="F" sectionFormat="of" target="I-D.ietf-core-transport-indication"/>).</t>
        <t>Along with the service’s public key (that is announced as part of the name),
the published record may also include the public key of the introduction point,
as that will allow the client to establish an extra layer with the introduction point.
As the published record is not trusted, the client can use the EAD option described in <xref section="D" sectionFormat="of" target="I-D.ietf-core-transport-indication"/>
to verify the proxy’s public key as part of the end-to-end session.
If client and server support this,
they can rule out that an attacker might advertise itself as the introduction address
and could thus monitor large portions of the traffic toward a hidden service
(even though that attacker would still not learn the location of the server,
the location of hidden clients,
or the content of the communication).
As an alternative (TBD: when would which be chosen),
the client’s last chosen proxy,
when seeing the cryptographic address of the hidden service,
may not just establish an EDHOC session with the introduction proxy,
but also with the hidden service, therein performing the same verification.
The server should therefore allow for at least one level of nesting within incoming EDHOC sessions.</t>
      </section>
      <section anchor="proxy-discovery">
        <name>Proxy discovery</name>
        <t>A mechanism for discovering forward proxies is already described in <xref target="I-D.ietf-core-transport-indication"/>;
discovery of reverse proxies suitable for servers will depend on the precise mechanism used.</t>
        <section anchor="discovering-the-introduction-proxy-for-services">
          <name>Discovering the introduction proxy for services</name>
          <t>Services with cryptographic identifiers outlined in {#naming}
can register these names in a distributed Resource Directory following the same <xref target="I-D.amsuess-t2trg-rdlink"/> style setup.
Unlike described there, they would not enter their network address into the distributed directory,
but the address of their most remote reverse proxy (the introduction point).</t>
          <t>This directory propagates changes relatively fast,
limited by the performance of the underlying Distributed Hash Table (DHT).</t>
          <t>Clients looking for services may not need to use the discovery service directly:
Instead, they can send requests to a proxy of their chosing,
and rely on the proxy to utilize the directory to look up a next hop.
(They do need to perform discovery of the introductory node if they want to hide the ciphertext of their conversation from their last proxy and establish a secure connection to the introduction proxy chosen by the server, verifying it using the EAD option described in <xref section="D" sectionFormat="of" target="I-D.ietf-core-transport-indication"/> instead of relying on their own last proxy).</t>
        </section>
        <section anchor="discovery-for-eligible-forward-and-reverse-proxies">
          <name>Discovery for eligible forward and reverse proxies</name>
          <t>In order to hide their location,
clients as well as servers need to discovery lists of eligible proxies,
along with metadata
that indicates whether the proxy is willing to proxy to arbitrary locations on the Internet,
or merely to hidden peers.</t>
          <t>That distinction in forwrad proxies would be similar to how Tor distinguishes relay and exit nodes.
In reverse proxies, there is an analogous distinction that is not so much based on policy
but rather on the structure of the authority component used by that reverse proxy:
If the proxy can offer names that are resolvable on regular CoAP stacks (i.e., DNS can resolve it to a global IP address),
then regular CoAP clients can use the introduction address as an entry point.
The hidden service trusts the user to establish an end-to-end connection:
If the client is unauthenticated (i.e., using a plain CCS as its credential),
the hidden server can not tell whether the incoming EDHOC session is end-to-end
or merely set up by a proxy,
let alone whether the client is using a chain of proxies or not.
Many proxies may not offer such names,
and services may not want to rely on such names anyway --
in that case, clients are required to use (most probably by proxy) the DHT in which services are announced.</t>
          <t>Maintenance of this list is out of scope of this document, but the produced list will have some properties required for the constrained devices:
* For each proxy that is available to form a hiding circuit, the list includes:
  * the proxy’s cryptographic identity (eg. in a CCS): to authenticate the proxy,
  * affiliation information (operator and location): this enables hiding nodes to find paths of probably non-colluding proxies
  * optionally a public IP address: this enables nodes to use the proxy as a first hop
* The list is updated regularly, with an update rate measured in hours or a few days.
* The list needs to be signed by independent entities.
  (This is the only place in the whole setup where signatures are required:
  it appears unrealistic that the maintainers of the network will be online to perform non-signing challenges for the document all the time.
  Devices that can not even perform that verification might have a trusted source,
  possibly their firmware update source,
  that performs the verification for them).
* The list’s size will excede the memory capacity of individual devices, so it needs to be split up,
  possibly in a way similar to a Merkle tree.
  (At a bare minimum, a Tor sized network of 10k nodes with 32 bytes of key material for each node would already exceed the RAM available to Class 2 devices <xref target="RFC7228"/>).
  It may be beneficial for long-term stability if the list is structured
  such that there is always a fragment with long-term stable addresses
  that nodes can store.</t>
          <t>TBD: Describe operations of this service in a separate document.</t>
          <t>The three tasks of proxying, participation in the distributed Resource Directory and participation in the dissemination of the proxy list are conceptually separate.
None the less, it is expected that
proxies eligible for the list will perform all those roles.</t>
          <t>Nodes partipating in this network will always keep at least some verified fragments of the list across restarts,
and should be provisioned with a current state of the list at setup time.
As the proxies also provide the list,
devices can obtain the latest version
through the first EDHOC connection they establish
with a proxy they know from the most recent version the have.
For the unlikely event that all stored proxies have become unavailable,
nodes may accept recent signed versions of the list through other means.</t>
        </section>
      </section>
      <section anchor="establishing-tls-connections-between-proxies">
        <name>Establishing TLS connections between proxies</name>
        <t>Proxy-to-proxy requests,
which are the majority of transmitted request,
are transmitted between unconstrained devices across the Internet.
As such, protecting those connections with an extra layer of TLS (as specified in <xref target="RFC8323"/>) is desirable, because</t>
        <ul spacing="normal">
          <li>
            <t>it profits from TCP’s flow control,</t>
          </li>
          <li>
            <t>it hides more request metadata (even though none of the metadata visible at this point should be linkable to the server or the client, with the exception of message length), and</t>
          </li>
          <li>
            <t>it allows requests to be mixed across MTU and thus to hide their length and number (provided there is sufficient traffic on the link to ensure that multiple messages are processed within one Nagle interval).</t>
          </li>
        </ul>
        <t>[ TBD:
Explore whether coercing traffic through specific pairs of nodes instead of random node pairings would make sense.
If it is dangerous, maybe servers might pair up on their own to ensure that it is hard to monitor their ingress and egress traffic for correlation.
]</t>
        <t>A challenge in establishing TLS connections on that link is that
proxies are advertised with EDHOC credentials in the network’s discovery area.
The tools of <xref target="I-D.tschofenig-tls-cwt"/> may help bridging that gap.
If that work does not progress,
proxies might establish an EDHOC session inside an intially unauthenticated / self-signed TLS session,
tying the sessions together by the use of a data item exported from the TLS key material exporter.</t>
      </section>
      <section anchor="other-tricks">
        <name>Other tricks</name>
        <t>TBD. Current ideas:</t>
        <ul spacing="normal">
          <li>
            <t>For increased privacy, it may make sense to spool requests and responses in proxies for “as long as practical”.
Those setting up the proxy may indicate that in the security context.
While it increases the proxy’s memory requirements a lot to keep several seconds of traffic around,
it is not expected that these proxies will be operating at network capacity limits.</t>
          </li>
          <li>
            <t>Add chatter between proxies.
With the stark contrast between constrained device bandwidths and Internet bandwidths,
this can be tolerable.</t>
          </li>
          <li>
            <t>Access point assistance:
While all of this is aimed at constrained devices as defined in <xref target="RFC7228"/>,
devices of Class 1 may not be capable of using the full proxy discovery service
or setting up security contexts with all the hops in the chain.
Instead, they may only provide end-to-end encryption,
and use a service provided by a local node (e.g. the border router in a 6LoWPAN network <xref target="RFC8138"/>) to set up the hops.
Such a setup can also be used to defer policy decisions to the network,
which may decide to advertise its own address as an introduction point,
or use a suitable length of reverse proxies.</t>
          </li>
          <li>
            <t>The introduction point would be the only suitable location to place a caching proxy when <xref target="I-D.amsuess-core-cachable-oscore"/> is used.
As the server is be aware that cacheable OSCORE is used,
it can select a reverse proxy that was advertised with caching capabilities
(with that metadatum still TBD).</t>
          </li>
        </ul>
      </section>
      <section anchor="overhead-and-optimizations">
        <name>Overhead and optimizations</name>
        <t>TBD. Main points:</t>
        <ul spacing="normal">
          <li>
            <t>Establishing a default Uri-Host likely gives most savings.</t>
          </li>
          <li>
            <t>For intermediate hops, using a shorter AEAD tag might be an option.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <ul spacing="normal">
        <li>
          <t>When using proxy chains, only contact a proxy through the one chain it is set up with,
and only accept messages into a context if they were transported in the hop they are expected to be received from.  </t>
          <t>
It is of utmost importance to not have observably different behavior between messages with an unknown context
and messages whose context is known but not expected at this point.
For example,
if an attacker controls a server’s introduction point and intends to deanonymize clients,
it may attempt to send responses directly to the suspected address of the client.  </t>
          <t>
In implementations, this can be mitigated
by first looking up the list of contexts depending on the outer layer,
and then looking up inside that list whether the security context is known and the message expected.</t>
        </li>
        <li>
          <t>What are the effects of sequence numbers on correlation? Is it good or bad to use the same sequence number for all hops in a chain?</t>
        </li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>TBD.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC7252" target="https://www.rfc-editor.org/info/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="RFC8323" target="https://www.rfc-editor.org/info/rfc8323">
          <front>
            <title>CoAP (Constrained Application Protocol) over TCP, TLS, and WebSockets</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="S. Lemay" initials="S." surname="Lemay"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="B. Silverajan" initials="B." surname="Silverajan"/>
            <author fullname="B. Raymor" initials="B." role="editor" surname="Raymor"/>
            <date month="February" year="2018"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP), although inspired by HTTP, was designed to use UDP instead of TCP. The message layer of CoAP over UDP includes support for reliable delivery, simple congestion control, and flow control.</t>
              <t>Some environments benefit from the availability of CoAP carried over reliable transports such as TCP or Transport Layer Security (TLS). This document outlines the changes required to use CoAP over TCP, TLS, and WebSockets transports. It also formally updates RFC 7641 for use with these transports and RFC 7959 to enable the use of larger messages over a reliable transport.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8323"/>
          <seriesInfo name="DOI" value="10.17487/RFC8323"/>
        </reference>
        <reference anchor="RFC8392" target="https://www.rfc-editor.org/info/rfc8392">
          <front>
            <title>CBOR Web Token (CWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="May" year="2018"/>
            <abstract>
              <t>CBOR Web Token (CWT) is a compact means of representing claims to be transferred between two parties. The claims in a CWT are encoded in the Concise Binary Object Representation (CBOR), and CBOR Object Signing and Encryption (COSE) is used for added application-layer security protection. A claim is a piece of information asserted about a subject and is represented as a name/value pair consisting of a claim name and a claim value. CWT is derived from JSON Web Token (JWT) but uses CBOR rather than JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8392"/>
          <seriesInfo name="DOI" value="10.17487/RFC8392"/>
        </reference>
        <reference anchor="RFC8613" target="https://www.rfc-editor.org/info/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="RFC9528" target="https://www.rfc-editor.org/info/rfc9528">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Preuß Mattsson" initials="J." surname="Preuß Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <date month="March" year="2024"/>
            <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 Object Security for Constrained RESTful Environments (OSCORE) security context. By reusing CBOR Object Signing and Encryption (COSE) for cryptography, Concise Binary Object Representation (CBOR) for encoding, and Constrained Application Protocol (CoAP) for transport, the additional code size can be kept very low.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9528"/>
          <seriesInfo name="DOI" value="10.17487/RFC9528"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-edhoc" target="https://datatracker.ietf.org/doc/html/draft-ietf-core-oscore-edhoc-11">
          <front>
            <title>Using Ephemeral Diffie-Hellman Over COSE (EDHOC) with the Constrained Application Protocol (CoAP) and Object Security for Constrained RESTful Environments (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="9" month="April" year="2024"/>
            <abstract>
              <t>   The lightweight authenticated key exchange protocol Ephemeral Diffie-
   Hellman Over COSE (EDHOC) can be run over the Constrained Application
   Protocol (CoAP) and used by two peers to establish a Security Context
   for the security protocol Object Security for Constrained RESTful
   Environments (OSCORE).  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-11"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-capable-proxies" target="https://datatracker.ietf.org/doc/html/draft-ietf-core-oscore-capable-proxies-03">
          <front>
            <title>OSCORE-capable Proxies</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>
            <date day="21" month="October" year="2024"/>
            <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 rules
   to escalate the protection of a CoAP option, in order to encrypt and
   integrity-protect it whenever possible.  Finally, it defines how to
   secure a CoAP message by applying multiple, nested OSCORE
   protections, e.g., both end-to-end between origin application
   endpoints, and between an application endpoint and an intermediary or
   between two intermediaries.  Therefore, this document updates RFC
   8613.  Furthermore, this document updates RFC 8768, by explicitly
   defining the processing with OSCORE for the CoAP option Hop-Limit.
   The approach defined in this document can be seamlessly used with
   Group OSCORE, for protecting CoAP messages when group communication
   is used in the presence of intermediaries.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-capable-proxies-03"/>
        </reference>
        <reference anchor="I-D.ietf-core-transport-indication" target="https://datatracker.ietf.org/doc/html/draft-ietf-core-transport-indication-07">
          <front>
            <title>CoAP Transport Indication</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Martine Sophie Lenders" initials="M. S." surname="Lenders">
              <organization>TUD Dresden University of Technology</organization>
            </author>
            <date day="21" month="October" year="2024"/>
            <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] and Service
   Bindings (SVCB, [RFC9460]) 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-07"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC7228" target="https://www.rfc-editor.org/info/rfc7228">
          <front>
            <title>Terminology for Constrained-Node Networks</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="M. Ersue" initials="M." surname="Ersue"/>
            <author fullname="A. Keranen" initials="A." surname="Keranen"/>
            <date month="May" year="2014"/>
            <abstract>
              <t>The Internet Protocol Suite is increasingly used on small devices with severe constraints on power, memory, and processing resources, creating constrained-node networks. This document provides a number of basic terms that have been useful in the standardization work for constrained-node networks.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7228"/>
          <seriesInfo name="DOI" value="10.17487/RFC7228"/>
        </reference>
        <reference anchor="RFC8138" target="https://www.rfc-editor.org/info/rfc8138">
          <front>
            <title>IPv6 over Low-Power Wireless Personal Area Network (6LoWPAN) Routing Header</title>
            <author fullname="P. Thubert" initials="P." role="editor" surname="Thubert"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="L. Toutain" initials="L." surname="Toutain"/>
            <author fullname="R. Cragie" initials="R." surname="Cragie"/>
            <date month="April" year="2017"/>
            <abstract>
              <t>This specification introduces a new IPv6 over Low-Power Wireless Personal Area Network (6LoWPAN) dispatch type for use in 6LoWPAN route-over topologies, which initially covers the needs of Routing Protocol for Low-Power and Lossy Networks (RPL) data packet compression (RFC 6550). Using this dispatch type, this specification defines a method to compress the RPL Option (RFC 6553) information and Routing Header type 3 (RFC 6554), an efficient IP-in-IP technique, and is extensible for more applications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8138"/>
          <seriesInfo name="DOI" value="10.17487/RFC8138"/>
        </reference>
        <reference anchor="I-D.amsuess-core-cachable-oscore" target="https://datatracker.ietf.org/doc/html/draft-amsuess-core-cachable-oscore-09">
          <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="8" month="July" year="2024"/>
            <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-09"/>
        </reference>
        <reference anchor="I-D.tiloca-core-oscore-capable-proxies-06" target="https://datatracker.ietf.org/doc/html/draft-tiloca-core-oscore-capable-proxies-06">
          <front>
            <title>OSCORE-capable Proxies</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>
            <date day="5" month="April" year="2023"/>
            <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>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-tiloca-core-oscore-capable-proxies-06"/>
        </reference>
        <reference anchor="I-D.amsuess-core-resource-directory-extensions" target="https://datatracker.ietf.org/doc/html/draft-amsuess-core-resource-directory-extensions-11">
          <front>
            <title>CoRE Resource Directory Extensions</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <date day="6" month="November" year="2024"/>
            <abstract>
              <t>   A collection of extensions to the Resource Directory [rfc9176] that
   can stand on their own, and have no clear future in specification
   yet.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Discussion of this document takes place on the Constrained RESTful
   Environments Working Group mailing list (core@ietf.org), which is
   archived at https://mailarchive.ietf.org/arch/browse/core/.

   Source for this draft and an issue tracker can be found at
   https://gitlab.com/chrysn/resource-directory-extensions.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-amsuess-core-resource-directory-extensions-11"/>
        </reference>
        <reference anchor="I-D.tschofenig-tls-cwt" target="https://datatracker.ietf.org/doc/html/draft-tschofenig-tls-cwt-02">
          <front>
            <title>Using CBOR Web Tokens (CWTs) in Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)</title>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
              <organization>Arm Limited</organization>
            </author>
            <author fullname="Mathias Brossard" initials="M." surname="Brossard">
              <organization>Arm Limited</organization>
            </author>
            <date day="13" month="July" year="2020"/>
            <abstract>
              <t>   The TLS protocol supports different credentials, including pre-shared
   keys, raw public keys, and X.509 certificates.  For use with public
   key cryptography developers have to decide between raw public keys,
   which require out-of-band agreement and full-fletched X.509
   certificates.  For devices where the reduction of code size is
   important it is desirable to minimize the use of X.509-related
   libraries.  With the CBOR Web Token (CWT) a structure has been
   defined that allows CBOR-encoded claims to be protected with CBOR
   Object Signing and Encryption (COSE).

   This document registers a new value to the "TLS Certificate Types"
   sub-registry to allow TLS and DTLS to use CWTs.  Conceptually, CWTs
   can be seen as a certificate format (when with public key
   cryptography) or a Kerberos ticket (when used with symmetric key
   cryptography).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-tschofenig-tls-cwt-02"/>
        </reference>
        <reference anchor="I-D.amsuess-t2trg-rdlink" target="https://datatracker.ietf.org/doc/html/draft-amsuess-t2trg-rdlink-01">
          <front>
            <title>rdlink: Robust distributed links to constrained devices</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <date day="23" month="September" year="2019"/>
            <abstract>
              <t>   Thing to thing communication in Constrained RESTful Environments
   (CoRE) relies on URIs to link to servers.  Next to hierarchical
   configuration and short-lived IP addresses, this document introduces
   a naming scheme for devices based on cryptographic identifiers.  A
   special purpose domain is reserved for expressing those identifiers,
   and mechanisms for constrained devices to announce their names and to
   look them up are described.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-amsuess-t2trg-rdlink-01"/>
        </reference>
      </references>
    </references>
    <section anchor="high-level-comparison-with-tor">
      <name>High-Level Comparison with Tor</name>
      <t>TBD.</t>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>TBD.</t>
    </section>
    <section removeInRFC="true" anchor="change-log">
      <name>Change log</name>
      <t>Since -02:</t>
      <ul spacing="normal">
        <li>
          <t>Fixes in the markdown.</t>
        </li>
        <li>
          <t>Revised table of contents.</t>
        </li>
        <li>
          <t>Updated and fixed references.</t>
        </li>
        <li>
          <t>Editorial fixes.</t>
        </li>
        <li>
          <t>Acknowledgments.</t>
        </li>
        <li>
          <t>Include use cases.</t>
        </li>
        <li>
          <t>Add introduction.</t>
        </li>
      </ul>
      <t>Since -01:</t>
      <ul spacing="normal">
        <li>
          <t>Elaborate on bootstrapping: Describe list of proxies.</t>
        </li>
        <li>
          <t>Add design considerations section.</t>
        </li>
        <li>
          <t>Suggest exported material from TLS to bind EDHOC sessions if TLS-CWT does not fly.</t>
        </li>
        <li>
          <t>Various clarifications.</t>
        </li>
      </ul>
      <t>Since -00:</t>
      <ul spacing="normal">
        <li>
          <t>Shaped into separate sections on the bits and pieces involved.</t>
        </li>
        <li>
          <t>Added illustrations.</t>
        </li>
        <li>
          <t>Moved all points from the previous notes in with the new text.</t>
        </li>
      </ul>
      <t>Since <xref target="I-D.tiloca-core-oscore-capable-proxies-06"/>:</t>
      <ul spacing="normal">
        <li>
          <t>The main body of the text was moved here and will be absent from the -07 version of that document.</t>
        </li>
        <li>
          <t>An abstract was added.</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank <contact fullname="Carsten Bormann"/> and <contact fullname="Simon Bouget"/> for their comments and feedback.</t>
      <t>The work on this document has been partly supported by the Sweden’s Innovation Agency VINNOVA and the Celtic-Next project CYPRESS.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
