<?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-amsuess-t2trg-onion-coap-02" category="exp" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.4 -->
  <front>
    <title abbrev="Onion CoAP">Using onion routing with CoAP</title>
    <seriesInfo name="Internet-Draft" value="draft-amsuess-t2trg-onion-coap-02"/>
    <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="May" day="17"/>
    <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 client 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>[ See also abstract. ]</t>
      <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 for authenticated key establishment and OSCORE 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>A client can use EDHOC to establish a unilaterally authenticated OSCORE context with proxies (see <xref target="client-chain"/>).</li>
          <li>A server can use EDHOC to establish a unilaterally authenticated OSCORE context to establish a reverse proxy address (see <xref target="server-chain"/>).</li>
          <li>A discovery mechanism for proxies (see <xref target="proxy-discovery"/>).</li>
          <li>A naming and discovery mechanism for hidden services (see <xref target="naming"/>).</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--&gt;P2 is present in both chains, and can be pooled into one TLS connection</name>
          <artset>
            <artwork type="svg"><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">
                <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"><![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 --&gt; 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"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="144" width="792" viewBox="0 0 792 144" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 152,48 L 168,48" fill="none" stroke="black"/>
                <path d="M 200,48 L 216,48" fill="none" stroke="black"/>
                <path d="M 248,48 L 264,48" fill="none" stroke="black"/>
                <path d="M 288,48 L 304,48" fill="none" stroke="black"/>
                <path d="M 336,48 L 352,48" fill="none" stroke="black"/>
                <path d="M 384,48 L 400,48" fill="none" stroke="black"/>
                <path d="M 56,64 L 480,64" fill="none" stroke="black"/>
                <path d="M 56,80 L 264,80" fill="none" stroke="black"/>
                <path d="M 288,80 L 472,80" fill="none" stroke="black"/>
                <path d="M 56,96 L 216,96" fill="none" stroke="black"/>
                <path d="M 336,96 L 472,96" fill="none" stroke="black"/>
                <path d="M 56,112 L 168,112" fill="none" stroke="black"/>
                <path d="M 384,112 L 472,112" fill="none" stroke="black"/>
                <path d="M 56,128 L 120,128" fill="none" stroke="black"/>
                <path d="M 432,128 L 472,128" fill="none" stroke="black"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="64" y="36">1</text>
                  <text x="132" y="36">P3</text>
                  <text x="180" y="36">P6</text>
                  <text x="228" y="36">P1</text>
                  <text x="276" y="36">P4</text>
                  <text x="324" y="36">P2</text>
                  <text x="372" y="36">P7</text>
                  <text x="420" y="36">P5</text>
                  <text x="508" y="36">Server</text>
                  <text x="544" y="36">1</text>
                  <text x="140" y="52">11</text>
                  <text x="188" y="52">13</text>
                  <text x="236" y="52">16</text>
                  <text x="312" y="52">6</text>
                  <text x="360" y="52">4</text>
                  <text x="408" y="52">2</text>
                  <text x="664" y="52">TLS</text>
                  <text x="728" y="52">connections</text>
                  <text x="44" y="68">18</text>
                  <text x="692" y="68">End-to-end</text>
                  <text x="764" y="68">OSCORE</text>
                  <text x="44" y="84">17</text>
                  <text x="480" y="84">7</text>
                  <text x="44" y="100">14</text>
                  <text x="480" y="100">5</text>
                  <text x="44" y="116">12</text>
                  <text x="480" y="116">3</text>
                  <text x="44" y="132">10</text>
                  <text x="480" y="132">1</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
Client 1       P3    P6    P1    P4    P2    P7    P5       Server 1
                11--- 13--- 16---  ---6  ---4  ---2                              TLS connections
    18------------------------------------------------------                     End-to-end OSCORE
    17---------------------------  ------------------------7
    14---------------------              ------------------5
    12---------------                          ------------3
    10---------                                      ------1
]]></artwork>
          </artset>
        </figure>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words “<bcp14>MUST</bcp14>”, “<bcp14>MUST NOT</bcp14>”, “<bcp14>REQUIRED</bcp14>”, “<bcp14>SHALL</bcp14>”, “<bcp14>SHALL
NOT</bcp14>”, “<bcp14>SHOULD</bcp14>”, “<bcp14>SHOULD NOT</bcp14>”, “<bcp14>RECOMMENDED</bcp14>”, “<bcp14>NOT RECOMMENDED</bcp14>”,
“<bcp14>MAY</bcp14>”, and “<bcp14>OPTIONAL</bcp14>” in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
    </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.tiloca-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>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?)</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>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.</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>it profits from TCP's flow control,</li>
          <li>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</li>
          <li>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).</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>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.</li>
          <li>Add chatter between proxies.
With the stark contrast between constrained device bandwidths and Internet bandwidths,
this can be tolerable.</li>
          <li>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.</li>
          <li>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).</li>
        </ul>
      </section>
      <section anchor="overhead-and-optimizations">
        <name>Overhead and optimizations</name>
        <t>TBD. Main points:</t>
        <ul spacing="normal">
          <li>Establishing a default Uri-Host likely gives most savings.</li>
          <li>For intermediate hops, using a shorter AEAD tag might be an option.</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>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?</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="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <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="22" month="January" 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
   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-23"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-edhoc">
          <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.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="January" 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-08"/>
        </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="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <date day="4" month="March" year="2024"/>
            <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-21"/>
        </reference>
        <reference anchor="I-D.tiloca-core-oscore-capable-proxies">
          <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="10" month="July" 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-07"/>
        </reference>
        <reference anchor="I-D.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="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="I-D.amsuess-core-resource-directory-extensions">
          <front>
            <title>CoRE Resource Directory Extensions</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <date day="4" month="March" 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-10"/>
        </reference>
        <reference anchor="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="I-D.selander-lake-authz">
          <front>
            <title>Lightweight Authorization using Ephemeral Diffie-Hellman Over COSE</title>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Mališa Vučinić" initials="M." surname="Vučinić">
              <organization>INRIA</organization>
            </author>
            <author fullname="Michael Richardson" initials="M." surname="Richardson">
              <organization>Sandelman Software Works</organization>
            </author>
            <author fullname="Aurelio Schellenbaum" initials="A." surname="Schellenbaum">
              <organization>Institute of Embedded Systems, ZHAW</organization>
            </author>
            <date day="7" month="July" year="2023"/>
            <abstract>
              <t>   This document describes a procedure for authorizing enrollment of new
   devices using the lightweight authenticated key exchange protocol
   Ephemeral Diffie-Hellman Over COSE (EDHOC).  The procedure is
   applicable to zero-touch onboarding of new devices to a constrained
   network leveraging trust anchors installed at manufacture time.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-selander-lake-authz-03"/>
        </reference>
        <reference anchor="I-D.tschofenig-tls-cwt">
          <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="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">
          <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-t2trg-rdlink">
          <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>
        <reference anchor="I-D.ietf-core-transport-indication">
          <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="18" month="March" 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] 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-05"/>
        </reference>
      </references>
    </references>
    <section anchor="change-log">
      <name>Change log</name>
      <t>Since -01:</t>
      <ul spacing="normal">
        <li>Elaborate on bootstrapping: Describe list of proxies.</li>
        <li>Add design considerations section.</li>
        <li>Suggest exported material from TLS to bind EDHOC sessions if TLS-CWT does not fly.</li>
        <li>Various clarifications.</li>
      </ul>
      <t>Since -00:</t>
      <ul spacing="normal">
        <li>Shaped into separate sections on the bits and pieces involved.</li>
        <li>Added illustrations.</li>
        <li>Moved all points from the previous notes in with the new text.</li>
      </ul>
      <t>Since <xref target="I-D.tiloca-core-oscore-capable-proxies-06"/>:</t>
      <ul spacing="normal">
        <li>The main body of the text was moved here and will be absent from the -07 version of that document.</li>
        <li>An abstract was added.</li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TBD.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA71c23Yjx3V976+ocB5EygA05IxulC2FIkceLmsuGVJRvCTb
KnQXgDIb3e2ubmKgMf2YD8gX5CvylKf4T/IlOfucunSDmPFkxStcWiOgL1Wn
Tp3LPpfCdDrNOtuV5lQdfOdstVR1ZetKtXXf4dvGdit1Xp+9PMj0fN6aW3ru
BT8hF4s6r/Sa3i5aveimeu1649y0O+na5ZSHmua1bqYPT7Jcd2ZZt9tTZV43
WWab9lR1be+6k4cPP6f7m7q9WdK8DV3G69mN2dK14jRTaqq6uuX/85j8CePK
JZfXreGPpljVOX9a2aIwVZa5TlfFH3RZV0Tk1rjMrXXb/eFPfd0ZJ1cae6p+
6Op8olzddq1ZOPq0XePD77JM992qbomIKY2rlKz2fNVa11ldqbO1++t/Osf3
8rqvOizwjFbVWs0XzVrb8lTl4Y1/9Dya5fU6DGorIuXZTF3bss71YJ5nus3r
4eW6XZ6qV5dXT9TZ13yBJjKmO1WXTi/+SNxyS00rVicnQpHtiJzf0MzaU1jQ
qFdPpsefPH78cEz01caAYwOa15h91vHs/9jamTMjgl/N1NO//sey7KtiQPIr
e6PbYnzn/5XqlgmYrWqe39OdVXW71p29NacketUifVPqcnoxs6ZbTEt9Y6Ys
QqPLkK6pCNn4bpB2vpPrfKXnZXjyrSOwiNPer8MTwt/RM7lueKimrV9bElN6
8oG6XhmSIl0tjSrrpaqMKRyphWpqW3X4oIkrVd6azihSVOtEUd5viunDTzDL
q2/OP3v0+cneBbbG1X2bm2lhW5OTPm6n5nVnKszj4ssnj8LLzpSkeqYVtkKN
fo5LdvmqXpjKLqddScNvOv/+pycnn4Whjh99tkuHmJW2KG11c5/BXasr15AK
T21VWDI3RBjtdjadTpWek8jpvMsysBG2S9HKSenrUm20U4VxdlmZQgyerBDs
rOj/WJ+ipSjPK5J+taYpZjSWpVfrvF8b2oLCLGxFt9cG22Td2qn5Vm1WNl9h
40hnVL2Ig+Qk73OjnOlU38yyy4qmW89txWRPVLcyW2Uq7BE+q7oxLd/CGGLc
6N321uZkwUBcXloQ4ezalrqFPKzqjbquW3WIJYvRfkVm3bRHfmBaSadIFdT1
+Us1184UkSluJnxb00wlqc8DdUn6Vhc9syPLfvxBXRmjdOnqyNuZ+pHs5YMH
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
GWkPmkqAOHa7UAA6xs0m4R5G3UEPbM98s9iOGr+P4n6RJVq4PSu5XXZpve24
pCAAXnrb2IwJWIxIUqowA7LhSHwUcDGgfv9exuG5xzC7Cl6HN3YsWJaTbQsL
Qkj/y9iHF30gmwezpFBBqj7OeG/FKUuEEMSjHj7olYcpRKGHKURIAOZRUN7p
NqWcyzB3FvBd2gaWId9huYntcKbylJHfDDXglNL1oGZIZ0RRIvPDFHAdmmw4
mwzw0+3itsP9/gNeU7BiXDw93+glJzql/ReYs9Q+b7vQwFglgaZOMIKEEKxZ
HJ15Xe8REpfcD3gxWMRTTQp+zcJ0ePH0GtOf+84eVKa8aCfEEUxEwA7BbSV5
9Y/6BZTbUwoAadN14TnOcYJhTOjT79y6LFyJjINVo8kDeuTc/iD/i5nJYNuf
w+yBWXQDdEueIqQ9Gf7Q1Gh18nR7DqmRno22BKOhDSq2eG60wILQW6Vy25Ak
cRIk0Y2iWuvENQQEiS4sHdNJWNGwj44TD6MUpBe2PRqZ4ryBPxq0elpktoOe
/D2hBDr+sYlijkSOZEdocUifpAUe7RgYH3SXFGt7myUumjd2ZNgy5AoIK5l2
yOdBD9skC21nGg2hwG2puTdsbdpS1GBZGePkMbgbpNnXptOEfnXmm1WLUFVY
GR95mJhvYivL/K2TJOp2bolrmNDT6YK0XsKokDVhTODbSmVp8IiI9B0rPLA5
d5fmIUYFm1qdHMomRjH3G2bl1WUv9WsYBy9lsZWPszA73PaOWKA3/UcsWaKf
dkhIwOZQeXLpa4So0ijOBotg5JaNXytBWqjJE8jN0XAclErO0EhyzbfaxpiG
pxjZxlNgzkGNG106iwUNLw4j5no51rpl21VXsYeZC2MO2M6pQ8v56IvnVwJP
+QWAT7E5y7Ke6xK1PG+4BWDtjBVEbojS9wFWzlKhvbmD0ZZg4Poe/JEAQGAv
jdbeDzQSBk8mIbLEQ3G0SFfjZl2/VlH/WMc6v+JMd+cGFTEPIwd0+UQKxyfQ
qqHo7wdOnAmLlA6kW4JsyUR5RFgaKWuZ0biDlXiSY5koyDyNSiTNsmeo54SL
wQOJSHDShOVCXMU9RxWsdvAh6QVUiTb01HSaWS/puUZaPdqY1oTsTvR1h+zR
iZY57dgWyxSbx0siB5raYiIlnAwMsS1p+zPNHcPJOVsn3SKWsRPXyfK6STdD
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

-->

</rfc>
