<?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.7.29 (Ruby 3.3.7) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-tiloca-t2trg-sw-update-groupcomm-00" category="exp" submissionType="IRTF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="SW Update with CoAP Group communication">Distribution of Software Updates with End-to-End Secure Group Communication and Block-Wise Transfer for CoAP</title>
    <seriesInfo name="Internet-Draft" value="draft-tiloca-t2trg-sw-update-groupcomm-00"/>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <date year="2025" month="July" day="07"/>
    <workgroup>Thing-to-Thing Research Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 67?>

<t>This document defines a method for efficiently distributing a software update to multiple target devices, by using end-to-end secure group communication over UDP and IP multicast. To this end, the defined method relies on a number of building blocks developed in the Constrained RESTful Environments (CoRE) Working Group of the IETF. Those especially include the Constrained Application Protocol (CoAP), Block-wise transfers for CoAP, and the end-to-end security protocol Group Object Security for Constrained RESTful Environments (Group OSCORE). The method defined in this document is compatible with (but not dependent on) the architecture for software and firmware update developed in the Software Updates for Internet of Things (SUIT) Working Group of the IETF.</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/browse/t2trg/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://gitlab.com/crimson84/draft-tiloca-t2trg-sw-update-groupcomm"/>.</t>
    </note>
  </front>
  <middle>
    <?line 72?>

<section anchor="intro">
      <name>Introduction</name>
      <t>Throughout the operational phase of their lifecycle, it is vital that devices can effectively receive and install required software (SW) updates. This is important not only in order to add and extend features or to improve performance, but also and especially in order to address and prevent security vulnerabilities. In turn, the distribution of SW updates in itself has to be a secure and efficient process that scales well with the size of the software update and with the number of target devices.</t>
      <t>This document defines a method for efficiently distributing a SW update to multiple target devices, by using end-to-end secure group communication over UDP and IP multicast. To this end, the defined method relies on a number of building blocks developed in the Constrained RESTful Environments (CoRE) Working Group of the IETF. Those especially include the Constrained Application Protocol (CoAP) <xref target="RFC7252"/>, Block-wise transfers for CoAP <xref target="RFC7959"/>, and the end-to-end security protocol Group Object Security for Constrained RESTful Environments (Group OSCORE) <xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
      <t>The defined method leverages a CoAP-to-CoAP proxy deployed between the CoAP target devices to update and a CoAP server acting as Distributor of the SW update. The proxy communicates with the Distributor using CoAP over TCP <xref target="RFC8323"/> and retrieves the next-in-line "inner chunk" of the SW update from the Distributor, by using Block-wise Extension for Reliable Transport (BERT) <xref target="RFC8323"/>. A CoAP response originated by the Distributor and conveying an inner chunk is protected end-to-end between the Distributor and the target devices, by using Group OSCORE.</t>
      <t>When a target device contacts the proxy for obtaining the latest SW update, the proxy relies on the use of Group OSCORE defined in <xref target="I-D.amsuess-core-cachable-oscore"/>. That is, it retrieves the next-in-line inner chunk from the Distributor if not already available in its cache, and then caches the response that conveys the inner chunk. After that, building on concepts from <xref target="I-D.ietf-core-observe-multicast-notifications"/>, the proxy replies to the target device with an error response, informing about the time when it is going to distribute the inner chunk and providing transport-specific information for receiving that inner chunk.</t>
      <t>When that time comes, the proxy transmits the inner chunk to all the target devices by further splitting it into smaller "outer chunks", each of which is conveyed by a CoAP response over UDP and IP multicast using Block-wise transfer <xref target="RFC7959"/>. At the end of such transfer, the target devices are allowed to selectively request outer chunks that they have missed for the current inner chunk.</t>
      <t>After the proxy declares the transfer of the current inner chunk completed, the process is repeated for the next inner chunk, which the proxy retrieves from the Distributor and transmits to the target devices as above. Eventually, the proxy completes the transfer of the last inner chunk. After that, as a new request comes from a target device to retrieve the latest SW update, the proxy restarts the process by retrieving the first inner chunk and providing it to the target devices.</t>
      <t>This document also defines how to counteract an attack against availability that an active adversary can easily perform by manipulating the CoAP responses sent by the proxy to the target devices and conveying the small outer chunks. The attack is neutralized by having a short checksum value computed by the proxy and included in such responses. By recomputing and verifying the checksum, target devices can thus promptly detect a possible manipulation of an outer chunk and discard the response conveying it as invalid.</t>
      <t>The method defined in this document is compatible with (but not dependent on) the architecture for SW and firmware update specified in <xref target="RFC9019"/> and developed in the Software Updates for Internet of Things (SUIT) Working Group of the IETF.</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>
        <?line -18?>

<t>Readers are expected to be familiar with the terms and concepts related to:</t>
        <ul spacing="normal">
          <li>
            <t>CoAP <xref target="RFC7252"/>, also used for group communication <xref target="I-D.ietf-core-groupcomm-bis"/> and over TCP <xref target="RFC8323"/>.</t>
          </li>
          <li>
            <t>The CoAP extensions Observe <xref target="RFC7641"/> and Block-wise <xref target="RFC7959"/>.</t>
          </li>
          <li>
            <t>The security protocols OSCORE <xref target="RFC8613"/> and Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>, and the use of the latter to enable cacheability of protected CoAP responses <xref target="I-D.amsuess-core-cachable-oscore"/>.</t>
          </li>
          <li>
            <t>Concise Data Definition Language (CDDL) <xref target="RFC8610"/>, Concise Binary Object Representation (CBOR) <xref target="RFC8949"/>, and CBOR Object Signing and Encryption (COSE) <xref target="RFC9052"/><xref target="RFC9053"/>.</t>
          </li>
        </ul>
        <t>This document also relies on the following terminology:</t>
        <ul spacing="normal">
          <li>
            <t>Image: a binary that can contain the complete SW of a device, or part of it. The image might be in turn structured in multiple images, and the corresponding SW might specifically be a firmware. Also, it might consist of a differential update in the interest of performance.</t>
          </li>
          <li>
            <t>Manifest: a collection of metadata about the image and author. The manifest is generated by the author and protected against modifications.</t>
          </li>
          <li>
            <t>Author: the entity that generates the image and the associated manifest.</t>
          </li>
          <li>
            <t>Device: target of a SW update as intended to obtain and consume an image.</t>
          </li>
          <li>
            <t>Distributor: the entity that distributes the image and the associated manifest on behalf of the author.</t>
          </li>
          <li>
            <t>Manifest resource: a resource hosted at the Distributor, with a manifest as its representation. This resource is observable <xref target="RFC7641"/>.</t>
          </li>
          <li>
            <t>Image resource: a resource hosted at the Distributor, with an image as its representation.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="sec-building-blocks">
      <name>Building Blocks</name>
      <t>The distribution method defined in this document largely relies on a number of building blocks that are summarized in the following subsections.</t>
      <section anchor="sec-building-blocks-coap">
        <name>CoAP</name>
        <t>CoAP is a web-transfer protocol specified in <xref target="RFC7252"/>. It relies on the client-server message exchange model and builds on the Representational State Transfer (REST) paradigm for accessing and manipulating resource representations hosted at a server. CoAP messages can be very compact and, besides a payload and a mandatory header, can include CoAP options that indicate the additional use of protocol extensions and optional features. The mandatory header includes a variable-length Token field whose value is used to associate a response with a corresponding request. CoAP is typically transported over UDP, but can also be used over reliable transports such as TCP and WebSockets <xref target="RFC8323"/>.</t>
        <t>CoAP natively supports proxies deployed between origin client endpoints and origin server endpoints. Main reasons to deploy proxies include: relaying messages between origin endpoints that cannot directly interact with one another; caching response messages to serve requests from origin clients more efficiently and avoiding repeatedly interacting with origin servers; and performing protocol translation across different communication legs. Proxy operations for CoAP are detailed in <xref section="5.7" sectionFormat="of" target="RFC7252"/>.</t>
        <t>CoAP also natively supports group communication <xref target="I-D.ietf-core-groupcomm-bis"/>. That is, an origin client can send a single group request targeting multiple recipient servers at once, e.g., over UDP and IP multicast. The servers can individually reply to that group request by sending their unicast responses, each of which is associated by Token value with the same group request.</t>
      </section>
      <section anchor="sec-building-blocks-observe">
        <name>CoAP Observe</name>
        <t>Observe is an extension for CoAP specified in <xref target="RFC7641"/>. When using Observe, a client accesses a resource at a server by additionally requesting to be registered as an observer for that resource. A successful response from the server can confirm the client to have become a registered observer. In such a case, following updates in the resource representation will result in the server sending notification responses to the client. Each of such notification responses conveys the current resource representation and is associated by Token value with the request originally sent by the client to start the observation. This extension relies on the CoAP Observe option included in the original observation request and in each notification response.</t>
      </section>
      <section anchor="sec-building-blocks-block-wise">
        <name>CoAP Block-wise Transfer</name>
        <t>Block-wise is an extension for CoAP specified in <xref target="RFC7959"/>. With the intent to avoid message fragmentation at lower layers, Block-wise enables message senders to split their large-size application data to transmit (body) into multiple, smaller data units referred to as blocks. This process occurs at the CoAP layer and results in sequentially sending each block of the same body as the payload of a different CoAP message. The message recipient can re-assemble the original body once all the corresponding blocks are received. This extension relies on the CoAP Block1 and Block2 options. Those are appropriately included in request and response messages to either describe the block conveyed in the present message or to control the Block-wise transfer process.</t>
        <t>For the case where CoAP is transported over reliable transports such as TCP, <xref target="RFC8323"/> also specifies Block-wise Extension for Reliable Transport (BERT). This still relies on the same CoAP Block1 and Block2 options as also explicitly indicating the use of BERT. In practice, a BERT message conveys in its payload one or more blocks of size 1024 bytes, with the possible exception of the BERT message conveying the last block that can have a smaller size.</t>
      </section>
      <section anchor="sec-building-blocks-oscore">
        <name>OSCORE</name>
        <t>Object Security for Constrained RESTful Environments (OSCORE) is a security protocol specified in <xref target="RFC8613"/>. OSCORE protects CoAP messages end-to-end between the origin endpoint producing application data and the other origin endpoint consuming that data.</t>
        <t>To this end, it takes as input an outgoing CoAP message and produces as output an OSCORE-protected CoAP message that includes the CoAP OSCORE option. When receiving the OSCORE-protected message, the recipient endpoint relies on the information in the OSCORE option to attempt decrypting and verifying the message. By using CBOR <xref target="RFC8949"/> for data encoding and COSE <xref target="RFC9052"/> for security operations, OSCORE has a lightweight impact on message sizes and performance.</t>
        <t>OSCORE ensures end-to-end confidentiality, integrity, and source authentication of messages, as well as replay protection. Each OSCORE-protected response is cryptographically bound to the corresponding request, also in case Observe <xref target="RFC7641"/> is used and thus multiple notification responses are bound to the same observation request.</t>
        <t>These security properties hold also in the presence of (untrusted) proxies deployed between the two OSCORE endpoints. Since OSCORE selectively protects different parts of a CoAP message, it hides as much as possible from possibly deployed proxies, while still leaving those able to perform their intended tasks. Furthermore, since the OSCORE processing of a CoAP message results in another CoAP message, OSCORE is independent of the specific transport underlying CoAP and used to transport CoAP messages (e.g., UDP or TCP). Therefore, OSCORE works wherever CoAP works.</t>
        <t>In order to use OSCORE, two CoAP endpoints have to first establish an OSCORE Security Context including the necessary parameters and keying material. OSCORE is agnostic of how exactly the Security Context is established. A possible way is the lightweight authenticated key exchange protocol Ephemeral Diffie-Hellman Over COSE (EDHOC) <xref target="RFC9528"/>.</t>
      </section>
      <section anchor="sec-building-blocks-group-oscore">
        <name>Group OSCORE</name>
        <t>Group OSCORE is a security protocol specified in <xref target="I-D.ietf-core-oscore-groupcomm"/>. By building on OSCORE <xref target="RFC8613"/> and extending its construct, Group OSCORE protects CoAP messages end-to-end between endpoints that use CoAP in a group communication setup <xref target="I-D.ietf-core-groupcomm-bis"/>.</t>
        <t>Also by relying on CBOR <xref target="RFC8949"/> and COSE <xref target="RFC9052"/>, Group OSCORE ensures end-to-end confidentiality, integrity, and source authentication of messages, as well as replay protection. All the protected responses originated by different servers and corresponding to the same group request are cryptographically bound to such request.</t>
        <t>Messages protected with Group OSCORE also include a CoAP OSCORE option that indicates the recipient endpoint how to attempt decrypting and verifying an incoming message. Like OSCORE, Group OSCORE works wherever CoAP works, also in the presence of proxies.</t>
        <t>Group OSCORE provides two modes for protecting messages, allowing to choose the mode to use on a per-message basis. The main difference between the two modes is about the way used to ensure source authentication of the protected message:</t>
        <ul spacing="normal">
          <li>
            <t>When using the group mode (see <xref section="7" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>), the message is first encrypted with keying material that every group member can derive, and then is signed by using the private key of the sender endpoint. The resulting signature is placed at the end of the CoAP payload of the protected message and then separately encrypted in order to contrast tracking of endpoints across different groups. As a result, all group members are able to decrypt the message and to verify that the message sender is the alleged group member. The group mode is typically used to protect requests sent to the whole group, i.e., intended to all its CoAP servers.</t>
          </li>
          <li>
            <t>When using the pairwise mode (see <xref section="8" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>), the message is protected by using an authenticated encryption algorithm. The encryption key to use is derived from the asymmetric authentication credentials of the sender endpoint and the single recipient endpoint, by means of a static-static Diffie-Hellman key derivation performed locally. As a result, only the intended recipient is able to decrypt the message and to verify that the message sender is the alleged group member. The pairwise mode is typically used to protect a response individually sent by a server in the group.</t>
          </li>
        </ul>
        <t>In order to use Group OSCORE, a CoAP endpoint has to join an OSCORE group and effectively become a member. The join process is typically assisted by a Group Manager entity that is responsible for the OSCORE group and that might enforce access control when deciding whether to admit new endpoints requesting to join the group. As a result of a successful join process, a CoAP endpoint obtains the necessary parameters and keying material to set up a Group OSCORE Security Context and consequently use Group OSCORE with the other group members. A possible realization of Group Manager is specified in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/>, where the join process is based on the ACE framework for authentication and authorization in constrained environments <xref target="RFC9200"/>.</t>
      </section>
      <section anchor="sec-building-blocks-mult-notif">
        <name>Observe multicast notifications</name>
        <t>According to the original use of CoAP Observe <xref target="RFC7641"/>, two CoAP clients interested in registering a resource observation at a server will yield two distinct observations.</t>
        <t>However, some applications involve multiple clients that are all interested in observing the same resource at the same server. While the original approach remains usable, an alternative and more scalable approach is specified in <xref target="I-D.ietf-core-observe-multicast-notifications"/>.</t>
        <t>This second approach takes advantage of group communication for CoAP and relies on the CoAP server to initiate a group observation at itself, e.g., upon receiving a first traditional observation request from a client. To this end, the server composes a cosmetic phantom observation request and sends it to itself without hitting the wire, in order to start the corresponding group observation.</t>
        <t>When a client sends a traditional observation request targeting that resource, the server replies with an informative error response conveying: i) the phantom observation request associated with the group observation; and ii) transport-specific information that is needed for receiving the notification responses in the group observation. That information includes the CoAP Token value used for the phantom observation request and the multicast address where observe notifications will be sent to. This effectively aligns all the interested clients to the same common knowledge required for participating in the group observation and receiving the multicast notification responses.</t>
        <t>Consequently, when the representation of the observed resource at the server changes, the server sends a single observe notification response over UDP and IP multicast, thus targeting all the clients that are taking part in the group observation. All such observe multicast notifications include the same CoAP Token value used in the phantom observation request. The recipient clients have been instructed on how to receive such observe multicast notifications when obtaining the individual informative error response from the server.</t>
        <t>The observe multicast notifications can be protected end-to-end between the server and the clients, by using Group OSCORE in group mode <xref target="I-D.ietf-core-oscore-groupcomm"/>. Since the server uses Group OSCORE also to protect the phantom observation request that started the group observation, all the observe notifications in the group observation are cryptographically bound to such phantom observation request, and thereby verifiable to pertain to the group observation in question.</t>
      </section>
      <section anchor="sec-building-blocks-cacheable-oscore">
        <name>Cacheable OSCORE</name>
        <t>It is typically possible to rely on a deployed proxy to store in its cache some classes of CoAP responses received from origin servers. That allows the proxy to quicker serve later requests from CoAP clients that produce a cache hit, by replying with the cached response instead of obtaining a new response from the origin server.</t>
        <t>If CoAP messages are protected with OSCORE <xref target="RFC8613"/> or <xref target="I-D.ietf-core-oscore-groupcomm"/>, effective caching of responses is not achievable anymore. That is, even if two clients wish to send the same plain CoAP request, the two resulting protected requests will be different and thus will not result in a cache hit at the proxy. Therefore, separately for each of the two clients, the proxy has to retrieve a new response from the origin server.</t>
        <t>In order to overcome this limitation, the approach defined in <xref target="I-D.amsuess-core-cachable-oscore"/> builds on Group OSCORE and restores the effective cacheability of protected responses.</t>
        <t>According to this approach, any client in the OSCORE group can also act as a specific "Deterministic Client" and use the corresponding keying material known to all the group members. When acting as Deterministic Client, any two clients in the group that protect the same plain CoAP request will produce the same protected "Deterministic Request", which is thereby usable to produce a cache hit at a caching proxy.</t>
        <t>The construct that makes this possible relies on the following design points: i) Deterministic Requests are computed by using a variation of the pairwise mode of Group OSCORE; ii) responses to a Deterministic Request are protected by using the group mode of Group OSCORE.</t>
        <t>This approach restores cacheability of protected responses while sacrificing some security properties of the protected Deterministic Requests, which in fact are replays and have no source authentication. However, this is deemed acceptable and harmless for the particular, narrow scope targeted by this approach, whose applicability is limited to content retrieval through read-only requests that are safe in the REST sense. Servers that want to be even more conservative can additionally limit themselves to accept only Deterministic Requests that target specific resources, or even that match byte-by-byte with Deterministic Requests known in advance.</t>
      </section>
    </section>
    <section anchor="sec-arch">
      <name>Architecture</name>
      <t>This section describes the architecture considered in the rest of this document when defining the method for distributing SW updates.</t>
      <figure anchor="fig-architecture">
        <name>Architecture Overview</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="768" width="576" viewBox="0 0 576 768" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,48 L 8,144" fill="none" stroke="black"/>
              <path d="M 32,128 L 32,584" fill="none" stroke="black"/>
              <path d="M 104,128 L 104,312" fill="none" stroke="black"/>
              <path d="M 104,328 L 104,440" fill="none" stroke="black"/>
              <path d="M 104,456 L 104,584" fill="none" stroke="black"/>
              <path d="M 136,80 L 136,144" fill="none" stroke="black"/>
              <path d="M 168,448 L 168,512" fill="none" stroke="black"/>
              <path d="M 256,128 L 256,528" fill="none" stroke="black"/>
              <path d="M 328,80 L 328,144" fill="none" stroke="black"/>
              <path d="M 352,128 L 352,584" fill="none" stroke="black"/>
              <path d="M 376,304 L 376,528" fill="none" stroke="black"/>
              <path d="M 392,464 L 392,496" fill="none" stroke="black"/>
              <path d="M 408,256 L 408,456" fill="none" stroke="black"/>
              <path d="M 440,48 L 440,144" fill="none" stroke="black"/>
              <path d="M 448,352 L 448,416" fill="none" stroke="black"/>
              <path d="M 472,176 L 472,344" fill="none" stroke="black"/>
              <path d="M 512,536 L 512,624" fill="none" stroke="black"/>
              <path d="M 512,672 L 512,704" fill="none" stroke="black"/>
              <path d="M 552,352 L 552,416" fill="none" stroke="black"/>
              <path d="M 552,464 L 552,496" fill="none" stroke="black"/>
              <path d="M 568,304 L 568,528" fill="none" stroke="black"/>
              <path d="M 8,48 L 440,48" fill="none" stroke="black"/>
              <path d="M 136,80 L 328,80" fill="none" stroke="black"/>
              <path d="M 8,144 L 24,144" fill="none" stroke="black"/>
              <path d="M 40,144 L 96,144" fill="none" stroke="black"/>
              <path d="M 112,144 L 136,144" fill="none" stroke="black"/>
              <path d="M 328,144 L 344,144" fill="none" stroke="black"/>
              <path d="M 360,144 L 440,144" fill="none" stroke="black"/>
              <path d="M 448,176 L 472,176" fill="none" stroke="black"/>
              <path d="M 264,256 L 280,256" fill="none" stroke="black"/>
              <path d="M 328,256 L 344,256" fill="none" stroke="black"/>
              <path d="M 376,304 L 400,304" fill="none" stroke="black"/>
              <path d="M 416,304 L 464,304" fill="none" stroke="black"/>
              <path d="M 480,304 L 568,304" fill="none" stroke="black"/>
              <path d="M 40,320 L 184,320" fill="none" stroke="black"/>
              <path d="M 232,320 L 248,320" fill="none" stroke="black"/>
              <path d="M 448,352 L 552,352" fill="none" stroke="black"/>
              <path d="M 112,384 L 184,384" fill="none" stroke="black"/>
              <path d="M 232,384 L 248,384" fill="none" stroke="black"/>
              <path d="M 448,416 L 552,416" fill="none" stroke="black"/>
              <path d="M 40,448 L 160,448" fill="none" stroke="black"/>
              <path d="M 176,448 L 184,448" fill="none" stroke="black"/>
              <path d="M 232,448 L 256,448" fill="none" stroke="black"/>
              <path d="M 392,464 L 552,464" fill="none" stroke="black"/>
              <path d="M 392,496 L 552,496" fill="none" stroke="black"/>
              <path d="M 112,512 L 168,512" fill="none" stroke="black"/>
              <path d="M 376,528 L 568,528" fill="none" stroke="black"/>
              <path d="M 512,704 L 520,720" fill="none" stroke="black"/>
              <path d="M 520,672 L 528,688" fill="none" stroke="black"/>
              <path d="M 496,688 L 504,672" fill="none" stroke="black"/>
              <path d="M 504,720 L 512,704" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="520,536 508,530.4 508,541.6" fill="black" transform="rotate(270,512,536)"/>
              <polygon class="arrowhead" points="456,176 444,170.4 444,181.6" fill="black" transform="rotate(180,448,176)"/>
              <polygon class="arrowhead" points="416,256 404,250.4 404,261.6" fill="black" transform="rotate(270,408,256)"/>
              <polygon class="arrowhead" points="352,256 340,250.4 340,261.6" fill="black" transform="rotate(0,344,256)"/>
              <polygon class="arrowhead" points="272,256 260,250.4 260,261.6" fill="black" transform="rotate(180,264,256)"/>
              <polygon class="arrowhead" points="256,384 244,378.4 244,389.6" fill="black" transform="rotate(0,248,384)"/>
              <polygon class="arrowhead" points="256,320 244,314.4 244,325.6" fill="black" transform="rotate(0,248,320)"/>
              <polygon class="arrowhead" points="120,512 108,506.4 108,517.6" fill="black" transform="rotate(180,112,512)"/>
              <polygon class="arrowhead" points="120,384 108,378.4 108,389.6" fill="black" transform="rotate(180,112,384)"/>
              <polygon class="arrowhead" points="48,448 36,442.4 36,453.6" fill="black" transform="rotate(180,40,448)"/>
              <polygon class="arrowhead" points="48,320 36,314.4 36,325.6" fill="black" transform="rotate(180,40,320)"/>
              <circle cx="168" cy="448" r="6" class="opendot" fill="white" stroke="black"/>
              <circle cx="464" cy="368" r="6" class="closeddot" fill="black"/>
              <circle cx="464" cy="384" r="6" class="closeddot" fill="black"/>
              <circle cx="464" cy="400" r="6" class="closeddot" fill="black"/>
              <g class="text">
                <text x="204" y="36">OSCORE</text>
                <text x="256" y="36">group</text>
                <text x="36" y="116">Dev1</text>
                <text x="72" y="116">...</text>
                <text x="108" y="116">DevN</text>
                <text x="256" y="116">Proxy</text>
                <text x="384" y="116">Distributor</text>
                <text x="400" y="180">/manifest</text>
                <text x="412" y="196">(observable)</text>
                <text x="404" y="228">/image/foo</text>
                <text x="304" y="260">(a)</text>
                <text x="208" y="324">(b)</text>
                <text x="524" y="340">Manifest</text>
                <text x="208" y="356">...</text>
                <text x="492" y="372">Size</text>
                <text x="208" y="388">(b)</text>
                <text x="508" y="388">Location</text>
                <text x="488" y="404">...</text>
                <text x="208" y="452">(c)</text>
                <text x="536" y="452">Image</text>
                <text x="136" y="484">...</text>
                <text x="440" y="484">0x01ab...</text>
                <text x="16" y="564">...</text>
                <text x="68" y="564">........</text>
                <text x="228" y="564">..............................</text>
                <text x="368" y="564">...</text>
                <text x="8" y="580">:</text>
                <text x="376" y="580">:</text>
                <text x="192" y="596">:.............................................:</text>
                <text x="84" y="612">End-to-end</text>
                <text x="164" y="612">security</text>
                <text x="220" y="612">with</text>
                <text x="264" y="612">Group</text>
                <text x="316" y="612">OSCORE</text>
                <text x="16" y="660">(a)</text>
                <text x="52" y="660">CoAP</text>
                <text x="92" y="660">over</text>
                <text x="132" y="660">TCP,</text>
                <text x="176" y="660">using</text>
                <text x="220" y="660">BERT</text>
                <text x="252" y="660">to</text>
                <text x="300" y="660">transfer</text>
                <text x="512" y="660">O</text>
                <text x="56" y="676">large</text>
                <text x="104" y="676">inner</text>
                <text x="156" y="676">chunks</text>
                <text x="196" y="676">of</text>
                <text x="224" y="676">the</text>
                <text x="264" y="676">image</text>
                <text x="16" y="708">(b)</text>
                <text x="52" y="708">CoAP</text>
                <text x="92" y="708">over</text>
                <text x="128" y="708">UDP</text>
                <text x="16" y="740">(c)</text>
                <text x="52" y="740">CoAP</text>
                <text x="92" y="740">over</text>
                <text x="128" y="740">UDP</text>
                <text x="160" y="740">and</text>
                <text x="188" y="740">IP</text>
                <text x="244" y="740">multicast,</text>
                <text x="312" y="740">using</text>
                <text x="380" y="740">Block-wise</text>
                <text x="44" y="756">to</text>
                <text x="92" y="756">transfer</text>
                <text x="152" y="756">small</text>
                <text x="200" y="756">outer</text>
                <text x="252" y="756">chunks</text>
                <text x="292" y="756">of</text>
                <text x="320" y="756">the</text>
                <text x="360" y="756">image</text>
                <text x="516" y="756">Author</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
                      OSCORE group
+-----------------------------------------------------+
|                                                     |
|               +-----------------------+             |
|               |                       |             |
| Dev1 ... DevN |            Proxy      | Distributor |
|  |        |   |              |        |  |          |
+--|--------|---+              |        +--|----------+
   |        |                  |           |
   |        |                  |           | /manifest <--+
   |        |                  |           | (observable) |
   |        |                  |           |              |
   |        |                  |           | /image/foo   |
   |        |                  |           |              |
   |        |                  |<-- (a) -->|      ^       |
   |        |                  |           |      |       |
   |        |                  |           |      |       |
   |        |                  |           |  +---|-------|-----------+
   |<------------------ (b) -->|           |  |   |       |           |
   |        |                  |           |  |   |       |  Manifest |
   |        |           ...    |           |  |   |    +------------+ |
   |        |                  |           |  |   |    | * Size     | |
   |        |<--------- (b) -->|           |  |   |    | * Location | |
   |        |                  |           |  |   |    | * ...      | |
   |        |                  |           |  |   |    +------------+ |
   |        |                  |           |  |   |                   |
   |<---------------o-- (c) ---+           |  |   |             Image |
   |        |       |          |           |  | +-------------------+ |
   |        |  ...  |          |           |  | | 0x01ab...         | |
   |        |       |          |           |  | +-------------------+ |
   |        |<------+          |           |  |                       |
   |        |                  |           |  +-----------------------+
   |        |                              |                   ^
...............................................                |
:  |        |                              |  :                |
:.............................................:                |
     End-to-end security with Group OSCORE                     |
                                                               |

(a) CoAP over TCP, using BERT to transfer                      O
    large inner chunks of the image                           .+.
                                                             / | \
(b) CoAP over UDP                                              +
                                                              / \
(c) CoAP over UDP and IP multicast, using Block-wise
    to transfer small outer chunks of the image              Author
]]></artwork>
        </artset>
      </figure>
      <t>As shown in <xref target="fig-architecture"/>, the architecture consists of the following actors:</t>
      <ul spacing="normal">
        <li>
          <t>The Author is responsible for building and issuing the new version of the image, together with the corresponding manifest.  </t>
          <t>
The manifest <bcp14>MUST</bcp14> be signed by the author and <bcp14>MUST</bcp14> include at least the following information:  </t>
          <ul spacing="normal">
            <li>
              <t>The total size of the image.</t>
            </li>
            <li>
              <t>A location URI, i.e., the URI of the image resource at the Distributor from where it is possible to retrieve the image.</t>
            </li>
            <li>
              <t>The Author's digital signature computed over (a digest of) the image.</t>
            </li>
          </ul>
          <t>
A possible manifest format that can be used is specified in <xref target="RFC9124"/>, with its corresponding CBOR-based serialization format specified in <xref target="I-D.ietf-suit-manifest"/>.</t>
        </li>
        <li>
          <t>The Distributor acts as a CoAP server, hosts the manifest and the image issued by the Author, and distributes those to the target Devices via the Proxy, as described in <xref target="sec-process"/>.  </t>
          <t>
At the Distributor, the following applies separately for each SW component X that can be updated.  </t>
          <ul spacing="normal">
            <li>
              <t>The Distributor hosts one observable manifest resource. At any point in time, the representation of the manifest resource is the latest manifest issued for X.</t>
            </li>
            <li>
              <t>For each different image released for X, the Distributor hosts one different image resource, whose representation is that image of X.      </t>
              <t>
More generally, the Distributor stores any two released images of any SW component as representations of two different image resources, hence identified by different URIs. For example, the URIs can differ as to their path components or query components.      </t>
              <t>
With reference to the manifest available as current representation of the manifest resource for X, the location URI specified within that manifest identifies the image resource whose representation is the image of X that has been released latest and is associated with that manifest.      </t>
              <t>
For simplicity, the architecture in <xref target="fig-architecture"/> refers to a Distributor that is responsible for a single SW component, whose latest manifest is stored as the representation of the manifest resource at /manifest. Within that manifest, the location URI for the image associated with the manifest identifies the resource at /image/foo, whose representation is the latest released image in question.      </t>
              <t>
The criteria for retaining and eventually deleting image resources for old images are to be defined by application policies.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>The Proxy is responsible for retrieving the manifest and the image from the Distributor and for practically sending those to the target Devices, as described in <xref target="sec-process"/>.  </t>
          <t>
The Proxy communicates with the Distributor using CoAP over TCP <xref target="RFC8323"/>. In particular, the Proxy retrieves the image from the Distributor by using BERT <xref target="RFC8323"/>. Each of such BERT responses from the Distributor includes exactly one block and conveys an "inner chunk" of the image.  </t>
          <t>
The Proxy communicates with the target Devices using CoAP over UDP. Specifically when providing the Devices with the image, the Proxy sends CoAP responses over UDP and IP multicast, as described in <xref target="sec-distribution"/>. Each of such responses uses Block-wise transfer for CoAP <xref target="RFC7959"/> and conveys an "outer chunk" of the currently transferred inner chunk of the image.</t>
        </li>
        <li>
          <t>The Devices obtain SW updates of interest from the Distributor, by directly interacting with the Proxy, as described in <xref target="sec-process"/>.  </t>
          <t>
At a high-level, a Device first learns about the availability of a new image for a SW component of interest, by receiving the corresponding manifest in an Observe notification response pertaining to the manifest resource at the Distributor.  </t>
          <t>
After that, each interested Device independently enrolls in a distribution process driven by the Proxy. During that process, the Device receives the image as a set of inner chunks that the Distributor provides to the Proxy.  </t>
          <t>
In particular, the Proxy provides the Devices with the inner chunks by further splitting each of those into smaller outer chunks, which constitute the actual unit of distribution. Each outer chunk is conveyed by a Block-wise response sent by the Proxy to all the enrolled target Devices over UDP and IP multicast.  </t>
          <t>
Once received all the inner chunks, the Devices rebuild the actual image and perform further checks against the corresponding manifest before consuming the image.</t>
        </li>
      </ul>
      <t>Secure communication is ensured end-to-end between the Distributor and the Devices. To this end, the Distributor and the Devices have to be members of the same OSCORE group, and therefore able to protect their exchanged message using the security protocol Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>. In particular, the following applies:</t>
      <ul spacing="normal">
        <li>
          <t>Every response originated by the Distributor is protected by using the group mode of Group OSCORE (see Section 7 of <xref target="I-D.ietf-core-oscore-groupcomm"/>).</t>
        </li>
        <li>
          <t>Every request originated by the Devices and targeting a resource at the Distributor are Deterministic Requests protected with Group OSCORE, according to the construct defined in <xref target="I-D.amsuess-core-cachable-oscore"/>.</t>
        </li>
      </ul>
      <t>The process of joining the OSCORE group is driven by a responsible Group Manager. For example, it can rely on the realization of the Group Manager specified in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/>, where the join process is based on the ACE framework for authentication and authorization in constrained environments <xref target="RFC9200"/>.</t>
      <t>The method defined in this document is agnostic of such a join process and related provisioning of keying material for Group OSCORE. At the same time, it does benefit from the Group Manager entity taking care of the provisioning of keying material. In particular, the Distributor does not need to know the exact Devices that are members of the OSCORE group, or any keying material or authentication credential related to those. This allows the Distributor to seamlessly distribute SW updates over time, without needing to be aware of possible membership changes within the OSCORE group.</t>
      <t>As ultimately in charge with the membership of the OSCORE Group, the responsible Group Manager has to appropriately admit/refuse new members and evict current members as needed, thus ensuring that only Devices that are supposed to obtain a SW update can effectively do so.</t>
    </section>
    <section anchor="sec-process">
      <name>Distribution Process</name>
      <t>This section describes the distribution process in detail, building on the architecture presented in <xref target="sec-arch"/>. After an overview of its design goals in <xref target="sec-design-goals"/>, the process is presented as composed of two main parts.</t>
      <t>The first part is described in <xref target="sec-release-notif"/> and concerns the advertisement of a newly available SW update, by providing target Devices with the corresponding manifest through Observe notification responses.</t>
      <t>The second part is described in <xref target="sec-distribution"/> and concerns the actual distribution of the image to the target Devices. This is based on the Distributor providing large inner chunks of the image to the Proxy, which further splits each of those into smaller outer chunks that are sent to the target Devices.</t>
      <t>For simplicity, but with no loss of generality, the following considers a Distributor as responsible for a single SW component and only two Devices as target of updates for that SW component.</t>
      <section anchor="sec-design-goals">
        <name>Design Goals</name>
        <t>The distribution method builds on the following design goals.</t>
        <ul spacing="normal">
          <li>
            <t>Ensure end-to-end secure communication between the Devices and the Distributor.  </t>
            <t>
This goal is addressed by using Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/> to protect the messages exchanged by the Devices and the Distributor through the Proxy.  </t>
            <t>
The use of Group OSCORE is facilitated by a Group Manager that provides the necessary parameters and keying material to the intended group members, which is therefore not a concern for the Distributor.</t>
          </li>
          <li>
            <t>Limit interactions and exchanges with the Distributor.  </t>
            <t>
This goal is achieved by means of the Proxy deployed between the Devices and the Distributor and specifically relying on:  </t>
            <ul spacing="normal">
              <li>
                <t>Large-size inner chunks that the Distributor provides to the Proxy, by using BERT <xref target="RFC8323"/>.</t>
              </li>
              <li>
                <t>Cacheable protected responses that are cached at the Proxy as per the construct defined in <xref target="I-D.amsuess-core-cachable-oscore"/>, thereby sparing the retrieval of a cached inner chunk from the Distributor.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Limit interactions and exchanges with the Devices.  </t>
            <t>
This goal is achieved by means of the Proxy deployed between the Devices and the Distributor and specifically relying on:  </t>
            <ul spacing="normal">
              <li>
                <t>Cacheable protected responses that are cached at the Proxy as per the construct defined in <xref target="I-D.amsuess-core-cachable-oscore"/>, thereby enabling the Proxy to quicker serve Devices' requests from its cache.</t>
              </li>
              <li>
                <t>Responses sent by the Proxy to the Devices over UDP and IP multicast, building on concepts defined for observe multicast notifications in <xref target="I-D.ietf-core-observe-multicast-notifications"/>.</t>
              </li>
              <li>
                <t>Transferring outer chunks from the Proxy to the Devices in an uninterrupted, back-to-back fashion, thus avoiding the downsides of a synchronous, lock-step process based on the original Block-wise transfer <xref target="RFC7959"/>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Accommodate Devices over constrained network links.  </t>
            <t>
This goal is achieved by means of the Proxy using small outer chunks (e.g., 64 bytes each in size) as the actual unit of distribution, when providing a SW update to the Devices.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-release-notif">
        <name>Release and Notification of SW Update</name>
        <t>This part of the process is devoted to inform the Devices about a newly released SW update as available at the Distributor.</t>
        <t>A Device interested in obtaining SW updates for that SW component has to know the URI of the corresponding manifest resource at the Distributor and be able to access that resource through the Proxy.</t>
        <t>In order to be informed of a newly available SW update, the Device performs the following actions.</t>
        <ol spacing="normal" type="1"><li>
            <t>The Device composes an observation request <xref target="RFC7641"/> targeting the manifest resource at the Distributor.</t>
          </li>
          <li>
            <t>The Device protects the observation request from Step 1 with Group OSCORE, specifically using the construct defined in <xref target="I-D.amsuess-core-cachable-oscore"/> and therefore producing a Deterministic Request.</t>
          </li>
          <li>
            <t>The Device sends the Deterministic Request from Step 2 to the Proxy.  </t>
            <t>
If the Deterministic Request does not produce a cache hit at the Proxy (e.g., as the first of this kind sent by any Device), the Proxy forwards the Deterministic Request to the Distributor, thereby registering itself as the actual observer at the Distributor. The Proxy caches the corresponding successful response from the Distributor and forwards it back to the Device.  </t>
            <t>
Otherwise, the Proxy does not interact with the Distributor, but instead promptly replies to the Device, by using the response stored in the identified cache entry.</t>
          </li>
          <li>
            <t>Upon receiving a first successful notification response, the Device obtains the latest manifest and is subscribed for automatically receiving future manifests released for the same SW component.</t>
          </li>
        </ol>
        <t>When releasing a new SW update, the Author uploads the corresponding manifest and image on the Distributor. As discussed in <xref target="sec-arch"/>, those become available at the manifest resource and at a new, dedicated image resource hosted by the Distributor, respectively. After that, the Distributor sends a notification response to the observer Proxy, conveying the newly released manifest.</t>
        <t>The Proxy stores the notification response in the cache entry that it uses to store responses for that observation, by overwriting the current content of the entry. Finally, the Proxy forwards that notification response to the observer Devices. Upon receiving the notification response, the observer Devices obtain the new manifest, thus becoming aware of the new SW update and of the corresponding image resource at the Distributor.</t>
        <t>In setups where multiple Proxies are deployed and each assists a different set of Devices, the Distributor can rely on the approach defined in <xref target="I-D.ietf-core-observe-multicast-notifications"/> as a possible optimization. Consequently, following the release of a new SW update, the Distributor sends a single observe notification response over UDP and IP multicast, thereby providing all the observer Proxies at once with the latest manifest corresponding to the newly released SW update.</t>
        <t><xref target="fig-example-notification"/> shows an example of message exchange where the two Devices obtain the latest manifest from the Distributor through the Proxy.</t>
        <figure anchor="fig-example-notification">
          <name>Example of Notification of SW Update</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="768" width="568" viewBox="0 0 568 768" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,48 L 8,752" fill="none" stroke="black"/>
                <path d="M 192,48 L 192,136" fill="none" stroke="black"/>
                <path d="M 192,152 L 192,424" fill="none" stroke="black"/>
                <path d="M 192,440 L 192,752" fill="none" stroke="black"/>
                <path d="M 376,48 L 376,272" fill="none" stroke="black"/>
                <path d="M 376,336 L 376,576" fill="none" stroke="black"/>
                <path d="M 376,640 L 376,752" fill="none" stroke="black"/>
                <path d="M 560,48 L 560,752" fill="none" stroke="black"/>
                <path d="M 8,144 L 552,144" fill="none" stroke="black"/>
                <path d="M 384,256 L 560,256" fill="none" stroke="black"/>
                <path d="M 16,432 L 376,432" fill="none" stroke="black"/>
                <path d="M 192,560 L 368,560" fill="none" stroke="black"/>
                <path d="M 200,736 L 376,736" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="560,144 548,138.4 548,149.6" fill="black" transform="rotate(0,552,144)"/>
                <polygon class="arrowhead" points="392,256 380,250.4 380,261.6" fill="black" transform="rotate(180,384,256)"/>
                <polygon class="arrowhead" points="376,560 364,554.4 364,565.6" fill="black" transform="rotate(0,368,560)"/>
                <polygon class="arrowhead" points="376,144 364,138.4 364,149.6" fill="black" transform="rotate(0,368,144)"/>
                <polygon class="arrowhead" points="208,736 196,730.4 196,741.6" fill="black" transform="rotate(180,200,736)"/>
                <polygon class="arrowhead" points="24,432 12,426.4 12,437.6" fill="black" transform="rotate(180,16,432)"/>
                <g class="text">
                  <text x="20" y="36">Dev1</text>
                  <text x="196" y="36">Dev2</text>
                  <text x="376" y="36">Proxy</text>
                  <text x="520" y="36">Distributor</text>
                  <text x="56" y="68">Protected</text>
                  <text x="116" y="68">Det.</text>
                  <text x="156" y="68">Req.</text>
                  <text x="424" y="68">Protected</text>
                  <text x="484" y="68">Det.</text>
                  <text x="524" y="68">Req.</text>
                  <text x="40" y="84">FETCH</text>
                  <text x="408" y="84">FETCH</text>
                  <text x="44" y="100">Token:</text>
                  <text x="100" y="100">0xaabb</text>
                  <text x="412" y="100">Token:</text>
                  <text x="468" y="100">0xabcd</text>
                  <text x="52" y="116">Observe:</text>
                  <text x="96" y="116">0</text>
                  <text x="420" y="116">Observe:</text>
                  <text x="464" y="116">0</text>
                  <text x="40" y="132">[Enc:</text>
                  <text x="80" y="132">GET</text>
                  <text x="140" y="132">/manifest]</text>
                  <text x="408" y="132">[Enc:</text>
                  <text x="448" y="132">GET</text>
                  <text x="508" y="132">/manifest]</text>
                  <text x="424" y="180">Protected</text>
                  <text x="488" y="180">Resp.</text>
                  <text x="404" y="196">2.05</text>
                  <text x="412" y="212">Token:</text>
                  <text x="468" y="212">0xabcd</text>
                  <text x="420" y="228">Observe:</text>
                  <text x="468" y="228">42</text>
                  <text x="408" y="244">[Enc:</text>
                  <text x="440" y="244">{</text>
                  <text x="484" y="244">Manifest</text>
                  <text x="532" y="244">}]</text>
                  <text x="380" y="292">Response</text>
                  <text x="372" y="308">stored</text>
                  <text x="412" y="308">in</text>
                  <text x="360" y="324">the</text>
                  <text x="400" y="324">cache</text>
                  <text x="56" y="356">Protected</text>
                  <text x="120" y="356">Resp.</text>
                  <text x="36" y="372">2.05</text>
                  <text x="44" y="388">Token:</text>
                  <text x="100" y="388">0xaabb</text>
                  <text x="52" y="404">Observe:</text>
                  <text x="100" y="404">42</text>
                  <text x="40" y="420">[Enc:</text>
                  <text x="72" y="420">{</text>
                  <text x="116" y="420">Manifest</text>
                  <text x="164" y="420">}]</text>
                  <text x="240" y="484">Protected</text>
                  <text x="300" y="484">Det.</text>
                  <text x="340" y="484">Req.</text>
                  <text x="224" y="500">FETCH</text>
                  <text x="228" y="516">Token:</text>
                  <text x="284" y="516">0xccdd</text>
                  <text x="236" y="532">Observe:</text>
                  <text x="280" y="532">0</text>
                  <text x="224" y="548">[Enc:</text>
                  <text x="264" y="548">GET</text>
                  <text x="324" y="548">/manifest]</text>
                  <text x="380" y="596">Response</text>
                  <text x="368" y="612">found</text>
                  <text x="404" y="612">in</text>
                  <text x="360" y="628">the</text>
                  <text x="400" y="628">cache</text>
                  <text x="240" y="660">Protected</text>
                  <text x="304" y="660">Resp.</text>
                  <text x="220" y="676">2.05</text>
                  <text x="228" y="692">Token:</text>
                  <text x="284" y="692">0xccdd</text>
                  <text x="236" y="708">Observe:</text>
                  <text x="284" y="708">42</text>
                  <text x="224" y="724">[Enc:</text>
                  <text x="256" y="724">{</text>
                  <text x="300" y="724">Manifest</text>
                  <text x="348" y="724">}]</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Dev1                  Dev2                  Proxy          Distributor
|                      |                      |                      |
| Protected Det. Req.  |                      | Protected Det. Req.  |
| FETCH                |                      | FETCH                |
| Token: 0xaabb        |                      | Token: 0xabcd        |
| Observe: 0           |                      | Observe: 0           |
| [Enc: GET /manifest] |                      | [Enc: GET /manifest] |
+-------------------------------------------->+--------------------->|
|                      |                      |                      |
|                      |                      | Protected Resp.      |
|                      |                      | 2.05                 |
|                      |                      | Token: 0xabcd        |
|                      |                      | Observe: 42          |
|                      |                      | [Enc: { Manifest }]  |
|                      |                      |<---------------------+
|                      |                      |                      |
|                      |                   Response                  |
|                      |                   stored in                 |
|                      |                   the cache                 |
|                      |                      |                      |
| Protected Resp.      |                      |                      |
| 2.05                 |                      |                      |
| Token: 0xaabb        |                      |                      |
| Observe: 42          |                      |                      |
| [Enc: { Manifest }]  |                      |                      |
|<--------------------------------------------+                      |
|                      |                      |                      |
|                      |                      |                      |
|                      | Protected Det. Req.  |                      |
|                      | FETCH                |                      |
|                      | Token: 0xccdd        |                      |
|                      | Observe: 0           |                      |
|                      | [Enc: GET /manifest] |                      |
|                      +--------------------->|                      |
|                      |                      |                      |
|                      |                   Response                  |
|                      |                   found in                  |
|                      |                   the cache                 |
|                      |                      |                      |
|                      | Protected Resp.      |                      |
|                      | 2.05                 |                      |
|                      | Token: 0xccdd        |                      |
|                      | Observe: 42          |                      |
|                      | [Enc: { Manifest }]  |                      |
|                      |<---------------------+                      |
|                      |                      |                      |
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="sec-distribution">
        <name>Distribution of SW Update</name>
        <t>The distribution of an image to target Devices is driven by the Proxy and organized into epochs, each of which is in turn composed of different phases, as shown in <xref target="fig-epoch-overview"/>.</t>
        <t>Each epoch is devoted to transferring exactly one inner chunk of the image, by providing the target Devices with all the corresponding outer chunks.</t>
        <t>After completing the epoch during which the last inner chunk of the image has been transferred, the next epoch is devoted to transfer again the first inner chunk of the image, i.e., the transfer of the whole image is repeated.</t>
        <figure anchor="fig-epoch-overview">
          <name>Overview of a Transfer Epoch and its Phases</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="192" width="552" viewBox="0 0 552 192" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,64 L 8,176" fill="none" stroke="black"/>
                <path d="M 16,64 L 16,176" fill="none" stroke="black"/>
                <path d="M 112,128 L 112,176" fill="none" stroke="black"/>
                <path d="M 200,64 L 200,176" fill="none" stroke="black"/>
                <path d="M 288,128 L 288,176" fill="none" stroke="black"/>
                <path d="M 376,64 L 376,176" fill="none" stroke="black"/>
                <path d="M 464,128 L 464,176" fill="none" stroke="black"/>
                <path d="M 472,128 L 472,176" fill="none" stroke="black"/>
                <path d="M 504,64 L 504,176" fill="none" stroke="black"/>
                <path d="M 512,64 L 512,176" fill="none" stroke="black"/>
                <g class="text">
                  <text x="24" y="36">Epoch</text>
                  <text x="456" y="36">Epoch</text>
                  <text x="520" y="36">Epoch</text>
                  <text x="24" y="52">start</text>
                  <text x="464" y="52">end</text>
                  <text x="520" y="52">start</text>
                  <text x="112" y="68">|</text>
                  <text x="288" y="68">|</text>
                  <text x="468" y="68">||</text>
                  <text x="112" y="100">t_A</text>
                  <text x="288" y="100">t_B</text>
                  <text x="464" y="100">t_C</text>
                  <text x="536" y="100">...</text>
                  <text x="64" y="148">Admission</text>
                  <text x="140" y="148">Full</text>
                  <text x="244" y="148">Recovery</text>
                  <text x="332" y="148">Recovery</text>
                  <text x="420" y="148">Epilogue</text>
                  <text x="536" y="148">...</text>
                  <text x="156" y="164">Transfer</text>
                  <text x="232" y="164">Claim</text>
                  <text x="332" y="164">Transfer</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Epoch                                                 Epoch   Epoch
start                                                   end   start
||           |          |          |          |          ||   ||
||                      |                     |               ||
||          t_A         |         t_B         |         t_C   || ...
||                      |                     |               ||
||           |          |          |          |          ||   ||
|| Admission | Full     | Recovery | Recovery | Epilogue ||   || ...
||           | Transfer | Claim    | Transfer |          ||   ||
||           |          |          |          |          ||   ||
]]></artwork>
          </artset>
        </figure>
        <t>The following describes in detail the operations performed by a Device and by the Proxy during the transfer of an image.</t>
        <section anchor="sec-distribution-device">
          <name>Device Operations</name>
          <t>Following the reception of a manifest as described in <xref target="sec-release-notif"/>, a Device can ask the Proxy to distribute the next inner chunk of the image.</t>
          <t>To this end, the Device sends to the Proxy a protected Deterministic Request as defined in <xref target="I-D.amsuess-core-cachable-oscore"/>. The Deterministic Request is computed by using the Group OSCORE Security Context shared between the Device and the Distributor. The original unprotected CoAP request is such that:</t>
          <ul spacing="normal">
            <li>
              <t>The request method is GET.</t>
            </li>
            <li>
              <t>The target is the image resource at the Distributor.</t>
            </li>
          </ul>
          <t>Once produced the protected Deterministic Request, the Device includes the Block2 option as an outer option intended for the Proxy. Its value specifies NUM = 0, M = 0, and SZX = 2 (i.e., a block size of 64 bytes).</t>
          <t>When sending such a request, the Device might not know what the current phase of the current epoch is at the Proxy, or what inner chunk is meant to be transferred in the current epoch. As defined in <xref target="sec-distribution-proxy"/>, the Proxy guides the Devices about the next actions to take, by providing information on the current status of the image transfer. From a high-level point of view, the following applies to each epoch:</t>
          <ul spacing="normal">
            <li>
              <t>A Device can enroll in the reception of the inner chunk for the current epoch, by sending its Deterministic Request during the "Admission" phase. Consequently, the Device obtains instructions for receiving that inner chunk, which the Proxy distributes as split into corresponding outer chunks during the immediately following "Full Transfer" phase.</t>
            </li>
            <li>
              <t>A Device can ask the Proxy to re-send an outer chunk that was not correctly received (e.g., it was lost in transmission or got corrupted), by sending the Deterministic Request during the "Recovery Claim" phase and indicating the required outer chunk by means of the NUM field of the Block2 outer option. Consequently, the Device obtains instructions for receiving the re-sent outer chunk, which the Proxy distributes during the immediately following "Recovery Transfer" phase.</t>
            </li>
            <li>
              <t>If a Device has not enrolled during the "Admission" phase but attempts to enroll on-the-fly later on during the epoch, that Device will be instructed to enroll again at the next epoch.</t>
            </li>
          </ul>
          <t>A Device completes the retrieval of an inner chunk once it has received all the corresponding outer chunks from the Proxy, rebuilt the inner chunk from those, and successfully verified and decrypted the rebuilt CoAP response protected with Group OSCORE and conveying the inner chunk.</t>
          <t>A Device completes the retrieval of the whole image once it has received all the corresponding inner chunks from the Proxy. The Device is able to simply verify whether that holds, by checking the cumulated size of the obtained inner chunks against the total size of the image that is specified within the manifest.</t>
          <t>If required to, the Device is also able to correctly reorder the obtained inner chunks. To this end, the Device relies on the indication provided during each epoch by the Proxy through the parameter "progress_indicator", which is included in responses sent by the Proxy during the "Admission" and "Recovery Claim" phases. As detailed in <xref target="sec-distribution-proxy"/>, the parameter indicates the index of the inner chunk transferred in the current epoch.</t>
        </section>
        <section anchor="sec-distribution-proxy">
          <name>Proxy Operations</name>
          <t>The following describes the operations performed by the Proxy.</t>
          <section anchor="sec-distribution-proxy-kick-off">
            <name>Kick-Off</name>
            <t>If the Proxy receives a Deterministic Request targeting the Distributor and that does not produce a cache hit, the Proxy performs the following steps.</t>
            <t>For the considered Deterministic Requests, this occurs only if the Proxy has not distributed any inner chunk of the image yet, i.e., it has not retrieved any inner chunk of the image from the Distributor.</t>
            <ol spacing="normal" type="1"><li>
                <t>In the Deterministic Request, replace the value of the Block2 option so that NUM = 0, M = 0, and SZX = 7 (i.e., BERT is used).</t>
              </li>
              <li>
                <t>Forward the Deterministic Request to the Distributor over TCP.</t>
              </li>
              <li>
                <t>Once received a corresponding successful 2.05 (Content) response from the Distributor, create a cache ENTRY and store the response in ENTRY as the inner chunk to transfer in the first epoch.  </t>
                <t>
Note that the value of the Block2 option in the response specifies NUM = 0 and SZX = 7 (i.e., BERT is used).  </t>
                <t>
Before storing the response in ENTRY, the Proxy <bcp14>MUST</bcp14> remove from the response the Pre-OSCORE-Data option and the associated CBOR data item prepended to the OSCORE ciphertext in the CoAP payload, which were added by the Distributor (see <xref target="sec-checksum-keys-provisioning"/>).</t>
              </li>
              <li>
                <t>Start an epoch with "Admission" as its current phase and associate it with ENTRY.</t>
              </li>
              <li>
                <t>Initialize an unsigned integer INNER_INDEX to 0 and associate it with ENTRY.</t>
              </li>
              <li>
                <t>Determine the time t_A when the immediately following "Full Transfer" phase will start. Start a timer with expiration set at t_A.</t>
              </li>
              <li>
                <t>The Proxy performs Step 2 in <xref target="sec-distribution-proxy-admission"/>, thus enrolling the Device that has sent the Deterministic Request in the upcoming transfer scheduled for the immediately following "Full Transfer" phase.</t>
              </li>
            </ol>
          </section>
          <section anchor="sec-distribution-proxy-admission">
            <name>"Admission" Phase</name>
            <t>If the Proxy receives a Deterministic Request targeting the Distributor and that produces a cache hit for the cache entry ENTRY associated with an epoch with current phase "Admission", the Proxy performs the following steps.</t>
            <ol spacing="normal" type="1"><li>
                <t>If ENTRY is storing the inner chunk to transfer in the current epoch, then move to Step 2. Otherwise, perform the following steps.  </t>
                <ul spacing="normal">
                  <li>
                    <t>In the Deterministic Request, replace the value of the Block2 option so that NUM = INNER_INDEX, M = 0, and SZX = 7 (i.e., BERT is used).</t>
                  </li>
                  <li>
                    <t>Forward the Deterministic Request to the Distributor over TCP.</t>
                  </li>
                  <li>
                    <t>Once received a corresponding successful 2.05 (Content) response from the Distributor, store the response in ENTRY as the inner chunk to transfer in the current epoch, by overwriting the current content of ENTRY.      </t>
                    <t>
Note that the value of the Block2 option in the response specifies NUM = INNER_INDEX and SZX = 7 (i.e., BERT is used).      </t>
                    <t>
Before storing the response in ENTRY, the Proxy <bcp14>MUST</bcp14> remove from the response the Pre-OSCORE-Data option and the associated CBOR data item prepended to the OSCORE ciphertext in the CoAP payload, which were added by the Distributor (see <xref target="sec-checksum-keys-provisioning"/>).</t>
                  </li>
                  <li>
                    <t>Determine the time t_A when the immediately following "Full Transfer" will start. Start a timer with expiration set at t_A.</t>
                  </li>
                  <li>
                    <t>Move to Step 2.</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>Reply by sending a "Hold-on Response", i.e., a 5.03 (Service Unavailable) error response.  </t>
                <t>
This is specifically an informative response defined in <xref section="4.2" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>, with Content-Format set to "application/informative-response+cbor" (see <xref section="16.2" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>).  </t>
                <t>
The payload of this informative response is a CBOR map that <bcp14>MUST</bcp14> include the following parameters.  </t>
                <ul spacing="normal">
                  <li>
                    <t>"tp_info", which is defined in <xref target="I-D.ietf-core-observe-multicast-notifications"/>. This parameter specifies the transport-specific information required to correctly receive CoAP responses over UDP and IP multicast, during the immediately following "Full Transfer" phase in this epoch. Each of those responses will convey one outer chunk of the inner chunk distributed in this epoch.      </t>
                    <t>
Per <xref section="4.2.1" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>, the "tp_info" parameter specifies addressing information as Constrained Resource Identifiers (CRIs) <xref target="I-D.ietf-core-href"/>.      </t>
                    <t>
Furthermore, for each epoch, the "tp_info" parameter <bcp14>MUST</bcp14> specify a different Token value to use for the multicast responses. The same Token value <bcp14>MUST NOT</bcp14> be reused in any other epoch of the current transfer of the image or in any epoch of the two following transfers of the same image.</t>
                  </li>
                  <li>
                    <t>"next_not_before", which is defined in <xref target="I-D.ietf-core-observe-multicast-notifications"/>. This parameter specifies the amount of seconds that will minimally elapse before the "Full Transfer" phase of this epoch starts. Such a value <bcp14>MUST NOT</bcp14> result in indicating that the "Full Transfer" phase starts before t_A.</t>
                  </li>
                  <li>
                    <t>"progress_indicator", with value a numeric indication of progress, encoded as a CBOR unsigned integer. This parameter is defined in this document and registered in <xref target="iana-informative-response-parameters"/>.      </t>
                    <t>
This parameter enables clients to unambiguously interpret, reorder, and process the content that will be sent per the information specified in the "tp_info" parameter, e.g., if that content is split into parts identifiable by an index value.      </t>
                    <t>
When used in this document, the "progress_indicator" parameter <bcp14>MUST</bcp14> encode the current value of INNER_INDEX, thereby identifying the inner chunk that is transferred in this epoch.</t>
                  </li>
                </ul>
                <t>
A Device receiving the "Hold-on Response" can set itself up for receiving the inner chunk during the immediately following "Full Transfer" phase of this epoch. In particular, the Device becomes aware that the "Full Transfer" phase is scheduled to start not before the amount of seconds indicated by the "next_not_before" parameter, that the inner chunk to be transferred is the one with index INNER_INDEX indicated by the "progress_indicator" parameter, and that the responses conveying the corresponding outer chunks will be sent per the information specified in the "tp_info" parameter.</t>
              </li>
            </ol>
            <t>This phase finishes when the time t_A is reached and the related timer expires. After that, the epoch moves to the "Full Transfer" phase (see <xref target="sec-distribution-proxy-full-transfer"/>).</t>
          </section>
          <section anchor="sec-distribution-proxy-full-transfer">
            <name>"Full Transfer" Phase</name>
            <t>When this phase starts, the Proxy considers the response stored in the cache entry ENTRY associated with the current epoch. Such a response is the inner chunk to distribute in this phase, by using Block-wise transfer <xref target="RFC7959"/> to further split the inner chunk into smaller outer chunks.</t>
            <t>In particular, the i-th outer chunk is a CoAP response such that:</t>
            <ul spacing="normal">
              <li>
                <t>It retains the same CoAP header of the inner chunk response, with the following exceptions:  </t>
                <ul spacing="normal">
                  <li>
                    <t>The Message ID has a new value determined by the Proxy;</t>
                  </li>
                  <li>
                    <t>The message type <bcp14>MUST</bcp14> be Non-confirmable; and</t>
                  </li>
                  <li>
                    <t>The Token Length and Token fields <bcp14>MUST</bcp14> specify the length and the value of the Token to use for the multicast responses to send in this epoch, respectively. The Token value was specified within the "tp_info" parameter of the "Hold-on Response" that was sent during the "Admission" phase of this epoch (see <xref target="sec-distribution-proxy-admission"/>).</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>It <bcp14>MUST</bcp14> include a Block2 outer option, whose value specifies NUM = i (i.e., the index of the present outer chunk) and SZX = 2 (i.e., a block size of 64 bytes).</t>
              </li>
              <li>
                <t>It <bcp14>MUST</bcp14> include the Checksum option defined in <xref target="sec-checksum-option"/>, with value a checksum computed by the Proxy on the outer chunk, as defined in <xref target="sec-checksum"/>.</t>
              </li>
            </ul>
            <t>Before distributing the outer chunks, the Proxy determines the time t_C when the current epoch is expected to end. This takes into account the expected duration of the current "Full Transfer" phase and of the immediately following "Recovery Request" and "Recovery Transfer" phases.</t>
            <t>Then, the Proxy sequentially sends the outer chunks to the enrolled Devices, according to their indexes sorted in ascending order. That is, the Proxy first sends the outer chunk with i = 0, then continues with the outer chunk with i = 1, and so on until all the outer chunks have been sent. In the last outer chunk, the value of the Block2 outer option specifies M = 0.</t>
            <t>Each outer chunk is transmitted as a response over UDP and IP multicast, according to the addressing information specified within the "tp_info" parameter of the "Hold-on Response" that was sent during the "Admission" phase of this epoch (see <xref target="sec-distribution-proxy-admission"/>).</t>
            <t>This phase finishes when the Proxy has sent all the outer chunks corresponding to the inner chunk of this epoch. After that, the epoch moves to the "Recovery Claim" phase (see <xref target="sec-distribution-proxy-recovery-claim"/>).</t>
            <t>If the Proxy receives a Deterministic Request targeting the Distributor and that produces a cache hit for the cache entry ENTRY associated with an epoch with current phase "Full Transfer", the Proxy <bcp14>MUST</bcp14> reply with a 5.03 (Service Unavailable) error response that has no payload. The error response <bcp14>MUST</bcp14> include the Max-Age option, with value the amount of seconds that will minimally elapse before the current epoch ends. The value of the Max-Age option <bcp14>MUST NOT</bcp14> result in indicating that the current epoch ends before t_C.</t>
          </section>
          <section anchor="sec-distribution-proxy-recovery-claim">
            <name>"Recovery Claim" Phase</name>
            <t>When this phase starts, the Proxy creates a set of unsigned integers, namely RECOVERY_INDEXES, and initializes it as empty.</t>
            <t>Also, the Proxy determines the time t_B when the immediately following "Recovery Transfer" phase will start. This takes into account the expected duration of the current "Recovery Claim" phase and the already determined time t_C when the current epoch is expected to end. In particular, the time t_B <bcp14>MUST NOT</bcp14> be after the time t_C. Finally, the Proxy starts a timer with expiration set at t_B.</t>
            <t>If the Proxy receives a Deterministic Request targeting the Distributor and that produces a cache hit for the cache entry ENTRY associated with an epoch with current phase "Recovery Claim", the Proxy performs the following steps.</t>
            <ol spacing="normal" type="1"><li>
                <t>The Proxy considers the received Deterministic Request and in particular its Block2 outer option. The value specified by the NUM field of the option value is added to RECOVERY_INDEXES if it is not included there already.</t>
              </li>
              <li>
                <t>The Proxy replies by sending a 5.03 (Service Unavailable) error response.  </t>
                <t>
This is specifically an informative response defined in <xref section="4.2" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>, with Content-Format set to "application/informative-response+cbor" (see <xref section="16.2" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>).  </t>
                <t>
The payload of this informative response is a CBOR map that <bcp14>MUST</bcp14> include the following parameters.  </t>
                <ul spacing="normal">
                  <li>
                    <t>"tp_info", which is defined in <xref target="I-D.ietf-core-observe-multicast-notifications"/>. This parameter provides the same information as in the "Hold-on Response" sent during the "Admission" phase of the current epoch (see Step 2 of <xref target="sec-distribution-proxy-admission"/>), with the difference that it includes only server-side information and it <bcp14>MUST NOT</bcp14> include client-side information.      </t>
                    <t>
That is, the parameter still specifies server-side addressing information related to the Proxy as the sender of multicast responses. However, the parameter <bcp14>MUST NOT</bcp14> specify addressing information as to where the multicast responses are sent or the Token value used for those in this epoch.      </t>
                    <t>
Consequently, only Devices that participated in the immediately previous "Full Transfer" phase and missed some outer chunks will participate in the immediately following "Recovery Transfer" phase. Instead, other Devices will be pointed to the start of the next epoch, according to what is specified by the Max-Age option (see below).</t>
                  </li>
                  <li>
                    <t>"next_not_before", which is defined in <xref target="I-D.ietf-core-observe-multicast-notifications"/>. This parameter specifies the amount of seconds that will minimally elapse before the "Recovery Transfer" phase of this epoch starts. Such a value <bcp14>MUST NOT</bcp14> result in indicating that the "Recovery Transfer" phase starts before t_B.</t>
                  </li>
                  <li>
                    <t>"progress_indicator", with value a numeric indication of progress, encoded as a CBOR unsigned integer. This parameter is defined in this document and registered in <xref target="iana-informative-response-parameters"/>.      </t>
                    <t>
Like in the "Hold-on Response" sent during the "Admission" phase of the current epoch (see Step 2 of <xref target="sec-distribution-proxy-admission"/>), the "progress_indicator" parameter <bcp14>MUST</bcp14> encode the current value of INNER_INDEX, thereby identifying the inner chunk that is transferred in this epoch.</t>
                  </li>
                </ul>
                <t>
Furthermore, the error response <bcp14>MUST</bcp14> include the Max-Age option, with value the amount of seconds that will minimally elapse before the current epoch ends. The value of the Max-Age option <bcp14>MUST NOT</bcp14> result in indicating that the current epoch ends before t_C.  </t>
                <t>
A Device receiving this error response gains knowledge of when the immediately following "Recovery Transfer" phase starts and when the next epoch starts.  </t>
                <t>
The former information is useful for a Device that participated in the immediately previous "Full Transfer" phase and missed some outer chunks. That Device can thus set itself up for receiving such outer chunks, which will be distributed during the immediately following "Recovery Transfer" phase.  </t>
                <t>
In particular, the Device becomes aware that the "Recovery Transfer" phase is scheduled to start not before the amount of seconds indicated by the "next_not_before" parameter and that the outer chunks to be transferred pertain to the inner chunk with index INNER_INDEX indicated by the "progress_indicator" parameter. Having participated in the immediately previous "Full Transfer" phase, the Device is aware that the responses representing the outer chunks will be sent per the information specified in the "tp_info" parameter of the "Hold-on Response" that the Device received during the "Admission" phase of the current epoch.</t>
              </li>
            </ol>
            <t>This phase finishes when the time t_B is reached and the related timer expires. After that, the epoch moves to the "Recovery Transfer" phase (see <xref target="sec-distribution-proxy-recovery-transfer"/>).</t>
          </section>
          <section anchor="sec-distribution-proxy-recovery-transfer">
            <name>"Recovery Transfer" Phase</name>
            <t>When this phase starts, the Proxy prepares a set of outer chunks, namely RECOVERY_CHUNKS. The set includes a selection of the outer chunks that were sent during the "Full Transfer" phase of the current epoch (see <xref target="sec-distribution-proxy-full-transfer"/>). In particular, each of such outer chunks is added to RECOVERY_CHUNKS if and only if the value specified by the NUM field in the value of its Block2 outer option is an element of the RECOVERY_INDEXES set.</t>
            <t>After that, the Proxy distributes only the outer chunks included in RECOVERY_CHUNKS, just like it distributed the outer chunks during the "Full Transfer" phase of the current epoch (see <xref target="sec-distribution-proxy-full-transfer"/>). In particular, the outer chunks are sent according to their indexes sorted in ascending order. Their transmission occurs over UDP and IP multicast, according to the same information specified in the "tp_info" parameter of the "Hold-on Responses" that were sent during the "Admission" phase of the current epoch.</t>
            <t>The Proxy <bcp14>MUST NOT</bcp14> alter the time t_C that was determined during the "Full Transfer" phase, as the time when the current epoch is expected to end.</t>
            <t>After the Proxy has sent all the outer chunks that are an element of RECOVERY_CHUNKS, the Proxy deletes the RECOVERY_INDEXES and RECOVERY_CHUNKS sets, and the epoch moves to the final "Epilogue" (see <xref target="sec-distribution-proxy-epilogue"/>).</t>
            <t>If the Proxy receives a Deterministic Request targeting the Distributor and that produces a cache hit for the cache entry ENTRY associated with an epoch with current phase "Recovery Transfer" or in its "Epilogue", the Proxy <bcp14>MUST</bcp14> reply with a 5.03 (Service Unavailable) error response that has no payload. The error response <bcp14>MUST</bcp14> include the Max-Age option, with value the amount of seconds that will minimally elapse before the current epoch ends. The value of the Max-Age option <bcp14>MUST NOT</bcp14> result in indicating that the current epoch ends before t_C.</t>
          </section>
          <section anchor="sec-distribution-proxy-epilogue">
            <name>Epilogue</name>
            <t>To conclude the current epoch, the Proxy performs the following steps.</t>
            <ol spacing="normal" type="1"><li>
                <t>The Proxy considers the response stored in the cache entry ENTRY associated with the current epoch, and particularly the field M in the value of the Block2 option.</t>
              </li>
              <li>
                <t>The Proxy updates the value of INNER_INDEX associated with ENTRY as follows:  </t>
                <ul spacing="normal">
                  <li>
                    <t>If M is 1, then INNER_INDEX is incremented by 1.</t>
                  </li>
                  <li>
                    <t>If M is 0, then INNER_INDEX takes 0 as its new value.</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>When the time t_C is reached, the Proxy concludes the current epoch, starts a new epoch with "Admission" as its current phase, deletes the association between the old epoch end ENTRY, and associates the new epoch with ENTRY.</t>
              </li>
            </ol>
          </section>
        </section>
      </section>
    </section>
    <section anchor="sec-checksum">
      <name>Checksum on Outer Chunks</name>
      <t>This section defines how the Proxy computes a checksum value over each outer chunk that it sends to the target Devices during the "Full Transfer" phase (see <xref target="sec-distribution-proxy-full-transfer"/>) and the "Recovery Transfer" phase (see <xref target="sec-distribution-proxy-recovery-transfer"/>).</t>
      <t>As described in <xref target="sec-mac"/>, the computed checksum value is specified as the value of the CoAP Checksum option defined in <xref target="sec-checksum-option"/>, which the Proxy includes in the response sent as outer chunk to the Devices.</t>
      <t>Upon receiving an outer chunk, a Device recomputes the checksum and compares it against the value conveyed in the Checksum option, in order to check whether the outer chunk was altered in transit.</t>
      <t>The checksum value of an outer chunk is computed by using a checksum key, whose derivation is defined in <xref target="sec-checksum-keys"/>. The same checksum key is used to compute the checksum values for all the outer chunks of the same inner chunk, i.e., during a whole epoch (see <xref target="sec-distribution"/>).</t>
      <t>While a checksum key is <em>used</em> by the Proxy and the Devices, the checksum key is <em>derived</em> by the Distributor and the Devices, by using keying material in their shared Group OSCORE Security Context.</t>
      <t>The Distributor provides the Proxy with the checksum key to use during the current epoch (see <xref target="sec-checksum-keys-provisioning"/>), when sending to the Proxy a CoAP response over TCP as the inner chunk to distribute in that epoch (see <xref target="sec-distribution-proxy-kick-off"/> and <xref target="sec-distribution-proxy-admission"/>). In particular, the Distributor wraps the checksum key in a CBOR data item and prepends that data item to the OSCORE ciphertext in the CoAP payload of the response sent to the Proxy. The Distributor indicates the presence of the prepended CBOR data item by including in the response the CoAP Pre-OSCORE-Data option defined in <xref target="sec-pre-oscore-data-option"/>.</t>
      <t>The use of checksums counteracts an attack against availability that an active adversary can easily perform by manipulating the CoAP responses sent by the proxy to the Devices as outer chunks. By recomputing a checksum and verifying it against the one included in the response received from the Proxy, target Devices can promptly detect a possible manipulation of the outer chunk and discard the response as invalid.</t>
      <section anchor="sec-root-checksum-key">
        <name>Root Checksum Key</name>
        <t>When using the method defined in this document, the Group OSCORE Security Context shared by the Distributor and the Devices is extended with one additional parameter in the Common Context.</t>
        <t>The new parameter Root Checksum Key specifies a secret key. This is used for deriving checksum keys that are in turn used for computing checksums of outer chunks (see <xref target="sec-mac"/>).</t>
        <t>The Root Checksum Key is derived as defined for the Sender/Recipient Keys in <xref section="3.2.1" sectionFormat="of" target="RFC8613"/>, with the following differences.</t>
        <ul spacing="normal">
          <li>
            <t>The 'id' element of the 'info' array is the empty byte string.</t>
          </li>
          <li>
            <t>The 'type' element of the 'info' array is "RCKey". The label is an ASCII string and does not include a trailing NUL byte.</t>
          </li>
          <li>
            <t>The 'alg_aead' element of the 'info' array specifies the Group Encryption Algorithm from the Common Context (see <xref section="2.1.7" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>) encoded as a CBOR integer or text string, consistently with the "Value" field in the entry of the "COSE Algorithms" Registry for this algorithm <xref target="COSE.Algorithms"/>.</t>
          </li>
          <li>
            <t>The L parameter of the HKDF and the 'L' element of the 'info' array are the length in bytes of the key for the Group Encryption Algorithm specified in the Common Context. While the obtained Root Checksum Key is never used with the Group Encryption Algorithm, its length was chosen to obtain a matching level of security.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-checksum-keys">
        <name>Derivation of Checksum Keys</name>
        <t>The same checksum key K is used for computing the checksum value on all the outer chunks of the same inner chunk.</t>
        <t>In particular, K is derived:</t>
        <ul spacing="normal">
          <li>
            <t>By the Distributor, upon sending to the Proxy a CoAP response over TCP as the inner chunk to distribute in the current epoch (see <xref target="sec-distribution-proxy-kick-off"/> and <xref target="sec-distribution-proxy-admission"/>).  </t>
            <t>
Note that the Distributor provides the Proxy with the checksum K as embedded in that response (see <xref target="sec-checksum-keys-provisioning"/>).</t>
          </li>
          <li>
            <t>By each target Device, when receiving an outer chunk of the inner chunk distributed in the current epoch (see <xref target="sec-distribution-proxy-full-transfer"/> and <xref target="sec-distribution-proxy-recovery-transfer"/>).</t>
          </li>
        </ul>
        <t>A checksum key K <bcp14>SHALL</bcp14> be derived as follows, by using the HKDF Algorithm from the Common Context of the Group OSCORE Security Context (see Section 2.1.2 of <xref target="I-D.ietf-core-oscore-groupcomm"/>), which consists of composing the HKDF-Extract and HKDF-Expand steps <xref target="RFC5869"/>.</t>
        <t>K = HKDF(salt, IKM, info, L)</t>
        <t>The input parameters of HKDF are as follows.</t>
        <ul spacing="normal">
          <li>
            <t>salt takes as value the index of the inner chunk to distribute in the current epoch, i.e., INNER_INDEX, represented in the smallest number of bytes needed.  </t>
            <t>
From the Distributor point of view, this value is specified by the NUM field of the value of the Block2 outer option, which is included in the response sent to the Proxy as the inner chunk.  </t>
            <t>
From the Device point of view, this value is encoded as a CBOR unsigned integer by the "progress_indicator" parameter, which is conveyed in the payload of the error informative responses that the Proxy sends during the "Admission" phase (see <xref target="sec-distribution-proxy-admission"/>) and the "Recovery Claim" phase (see <xref target="sec-distribution-proxy-recovery-claim"/>).</t>
          </li>
          <li>
            <t>IKM is the Root Checksum Key from the Common Context (see <xref target="sec-root-checksum-key"/>).</t>
          </li>
          <li>
            <t>info is the serialization of a CBOR array consisting of (the notation follows <xref target="RFC8610"/>):</t>
          </li>
        </ul>
        <sourcecode type="CDDL"><![CDATA[
   info = [
     piv : bstr,
     L : uint
   ]
]]></sourcecode>
        <t>where:</t>
        <ul spacing="normal">
          <li>
            <t>piv is the Partial IV field in the OSCORE option of the following messages:  </t>
            <ul spacing="normal">
              <li>
                <t>From the Distributor point of view, the response that the Distributor sends to the Proxy as the inner chunk to distribute in the current epoch.      </t>
                <t>
Note that, such a message is specifically a response to a Deterministic Request. Therefore, it always includes a Partial IV in the OSCORE option (see <xref target="I-D.amsuess-core-cachable-oscore"/>).</t>
              </li>
              <li>
                <t>From the Device point of view, the responses received from the Proxy during the "Full Transfer" phase (see <xref target="sec-distribution-proxy-full-transfer"/>) and "Recovery Transfer" phase (see <xref target="sec-distribution-proxy-recovery-transfer"/>) as the outer chunks of the inner chunk distributed in the current epoch.      </t>
                <t>
Note that all such responses include a Partial IV in the OSCORE option. The value of the Partial IV is the same one of the Partial IV in the OSCORE option of the response that the Proxy received from the Distributor as the inner chunk to distribute in the current epoch.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>The L parameter of the HKDF and the 'L' element of the 'info' array are the length in bytes of the Root Checksum Key from the Common Context.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-checksum-option">
        <name>Checksum Option</name>
        <t>The Checksum option defined in this section has the properties summarized in <xref target="_table-checksum-option"/>, which extends Table 4 of <xref target="RFC7252"/>. The option is Elective, Safe-to-Forward, and part of the Cache-Key. The option <bcp14>MUST</bcp14> occur at most once.</t>
        <table align="center" anchor="_table-checksum-option">
          <name>Checksum Option. C=Critical, U=Unsafe, N=NoCacheKey, R=Repeatable</name>
          <thead>
            <tr>
              <th align="left">No.</th>
              <th align="left">C</th>
              <th align="left">U</th>
              <th align="left">N</th>
              <th align="left">R</th>
              <th align="left">Name</th>
              <th align="left">Format</th>
              <th align="left">Length</th>
              <th align="left">Default</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD256</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left">Checksum</td>
              <td align="left">opaque</td>
              <td align="left">1-8</td>
              <td align="left">(none)</td>
            </tr>
          </tbody>
        </table>
        <t>The option value is a checksum computed over (part of) the message by the endpoint that added the option, thereby enabling the message recipient to perform an integrity check on the message.</t>
        <t>The Checksum option is of class U for OSCORE <xref target="RFC8613"/><xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
      </section>
      <section anchor="sec-mac">
        <name>Computation and Embodiment of Checksums</name>
        <t>The Proxy computes the checksum on an outer chunk before sending that outer chunk to the target Devices, during the "Full Transfer" phase (see <xref target="sec-distribution-proxy-full-transfer"/>) and "Recovery Transfer" phase (see <xref target="sec-distribution-proxy-recovery-transfer"/>).</t>
        <t>After having computed the checksum as defined below, the Proxy specifies it as value of the Checksum option (see <xref target="sec-checksum-option"/>) and includes the option in the response sent as outer chunk to the Devices. If outer CoAP options were already included in the response and their option number is greater than that of the Checksum option, then the Proxy appropriately updates their Option Delta (see <xref section="3.1" sectionFormat="of" target="RFC7252"/>).</t>
        <t>A Device computes the checksum on an outer chunk upon receiving that outer chunk from the Proxy, during the "Full Transfer" phase (see <xref target="sec-distribution-proxy-full-transfer"/>) and "Recovery Transfer" phase (see <xref target="sec-distribution-proxy-recovery-transfer"/>).</t>
        <t>In particular, the Device first removes the Checksum option from the response received as outer chunk from the Proxy. After that, if outer CoAP options are included in the response and their option number is greater than that of the Checksum option, then the Device appropriately updates their Option Delta. Finally, the Device computes the checksum on the resulting response and compares the result against the checksum specified as value of the removed Checksum option.</t>
        <t>If the two checksums are not equal, the Device <bcp14>MUST</bcp14> discard the response without further processing it. If this happens during the "Full Transfer" phase, the Device can send a request to the Proxy during the immediately following "Recovery Claim" phase (see <xref target="sec-distribution-proxy-recovery-claim"/>), thus asking the Proxy to re-send the outer chunk during the immediately following "Recovery Transfer" phase.</t>
        <t>Given a response that the Proxy sends as outer chunk, the checksum on that outer chunk is a 2-byte MAC that <bcp14>SHALL</bcp14> be computed as follows by using the HKDF algorithm HKDF SHA-256, which consists of composing the HKDF-Extract and HKDF-Expand steps <xref target="RFC5869"/>.</t>
        <t>MAC = HKDF(salt, IKM, info, L)</t>
        <t>The input parameters of HKDF are as follows.</t>
        <ul spacing="normal">
          <li>
            <t>salt takes as value the index of the inner chunk to distribute in the current epoch, i.e., INNER_INDEX, represented in the smallest number of bytes needed.  </t>
            <t>
From the Proxy point of view, INNER_INDEX is stored and consistently updated throughout the different epochs of the image distribution (see <xref target="sec-distribution-proxy"/>).  </t>
            <t>
From the Device point of view, this value is encoded as a CBOR unsigned integer by the "progress_indicator" parameter, which is conveyed in the payload of the error informative responses that the Proxy sends during the "Admission" phase (see <xref target="sec-distribution-proxy-admission"/>) and the "Recovery Claim" phase (see <xref target="sec-distribution-proxy-recovery-claim"/>).</t>
          </li>
          <li>
            <t>IKM is the Checksum Key to use for this inner chunk, which is derived as defined in <xref target="sec-checksum-keys"/>.</t>
          </li>
          <li>
            <t>info is the serialization of the CoAP response that the Proxy has to send as outer chunk.  </t>
            <t>
The Proxy <bcp14>MUST</bcp14> use the CoAP response available before the addition of the Checksum option.  </t>
            <t>
The Device <bcp14>MUST</bcp14> use the CoAP response available after:  </t>
            <ul spacing="normal">
              <li>
                <t>Removing the Checksum option; and</t>
              </li>
              <li>
                <t>Updating the Option Delta of each outer option whose option number is greater than that of the Checksum option.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>L has value 2.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-pre-oscore-data-option">
        <name>Pre-OSCORE-Data Option</name>
        <t>The Pre-OSCORE-Data option defined in this section has the properties summarized in <xref target="_table-pre-oscore-data-option"/>, which extends Table 4 of <xref target="RFC7252"/>. The option is Critical, Safe-to-Forward, part of the Cache-Key, and repeatable.</t>
        <table align="center" anchor="_table-pre-oscore-data-option">
          <name>Pre-OSCORE-Data Option. C=Critical, U=Unsafe, N=NoCacheKey, R=Repeatable</name>
          <thead>
            <tr>
              <th align="left">No.</th>
              <th align="left">C</th>
              <th align="left">U</th>
              <th align="left">N</th>
              <th align="left">R</th>
              <th align="left">Name</th>
              <th align="left">Format</th>
              <th align="left">Length</th>
              <th align="left">Default</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD257</td>
              <td align="left">x</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left">x</td>
              <td align="left">Pre-OSCORE-Data</td>
              <td align="left">uint</td>
              <td align="left">0-4</td>
              <td align="left">(none)</td>
            </tr>
          </tbody>
        </table>
        <t>The presence of this option means that, within the CoAP payload, the OSCORE ciphertext is prepended by a CBOR data item that is intended for the consumer of the option.</t>
        <t>The option value is an unsigned integer that identifies the semantics of the data conveyed by the CBOR data item. In particular, the option value <bcp14>MUST</bcp14> be either X or (X + 1), where X is taken from the 'Value' column of the "Pre-OSCORE Data Semantics" IANA registry defined in <xref target="iana-pre-oscore-data-semantics"/>. Both X and (X + 1) identify the same data semantics. However:</t>
        <ul spacing="normal">
          <li>
            <t>The odd value X means that the CBOR data item is a CBOR byte string, whose value is the data with the indicated semantics.</t>
          </li>
          <li>
            <t>The even value (X + 1) means that the CBOR data item is a COSE object, i.e., a possibly tagged COSE message as defined in <xref section="2" sectionFormat="of" target="RFC9052"/>.  </t>
            <t>
The data with the indicated semantics consists of what is available at the recipient once successfully completed all the COSE processing, e.g., a plaintext recovered after a decryption process.</t>
          </li>
        </ul>
        <t>The recipient of a CoAP message including the Pre-OSCORE-Data option <bcp14>MUST</bcp14> consume the option, i.e., it removes and consumes the prepended CBOR data item from the CoAP payload, after which it removes the option from the message.</t>
        <t>The Pre-OSCORE-Data option <bcp14>MAY</bcp14> occur multiple times. In such a case, each occurrence of the option refers to one CBOR data item prepended to the OSCORE ciphertext within the CoAP payload. In particular, the i-th occurrence of the option refers to the i-th prepended CBOR data item.</t>
        <t>The Pre-OSCORE-Data option is of class U for OSCORE <xref target="RFC8613"/><xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
      </section>
      <section anchor="sec-checksum-keys-provisioning">
        <name>Provisioning of Checksum Keys to the Proxy</name>
        <t>When the Distributor sends to the Proxy a CoAP response over TCP as the inner chunk to distribute during an epoch (see <xref target="sec-distribution"/>), the Distributor also provides the Proxy with a Checksum Key, i.e., the one to use during that epoch for computing the checksums on the outer chunks of that inner chunk.</t>
        <t>The Distributor derives the Checksum Key as defined in <xref target="sec-checksum-keys"/> and includes it in the response sent to the Proxy, as a CBOR data item prepended to the OSCORE ciphertext that is conveyed by the CoAP payload of the response. In order to indicate the presence of such CBOR data item, the response <bcp14>MUST</bcp14> include the Pre-OSCORE Data option <xref target="sec-pre-oscore-data-option"/>, whose value is set as defined below.</t>
        <t>There are two possible ways for the Distributor to provide the Checksum Key in the response to the Proxy as a prepended CBOR data item:</t>
        <ul spacing="normal">
          <li>
            <t>The CBOR data item is a CBOR byte string, whose value is the Checksum Key. In such a case, the value of the Pre-OSCORE Data option <bcp14>MUST</bcp14> be set to 1.  </t>
            <t>
This alternative <bcp14>SHOULD</bcp14> be used by the Distributor, if the response to the Proxy is protected by means of a mutually authenticated, secure communication association between the Distributor and the Proxy, in such a way that only the Proxy is able to retrieve the protected content in plain.</t>
          </li>
          <li>
            <t>The CBOR data item is a COSE object <xref target="RFC9052"/>, which can be tagged or untagged. In such a case, the value of the Pre-OSCORE Data option <bcp14>MUST</bcp14> be set to 2.  </t>
            <t>
The COSE Object is the result of using HPKE <xref target="RFC9180"/> with COSE. In particular, the HPKE Direct Encryption Mode specified in <xref section="3.1.1" sectionFormat="of" target="I-D.ietf-cose-hpke"/> <bcp14>MUST</bcp14> be used. The input pt for the HPKE Seal operation is the Checksum Key. The resulting COSE object uses a COSE_Encrypt0 structure <xref target="RFC9052"/>.  </t>
            <t>
In order to ensure source authentication of the prepended CBOR data item, the Distributor can additionally rely on a COSE object that uses a COSE_Sign, COSE_Sign1, COSE_MAC, or COSE_MAC0 structure <xref target="RFC9052"/>. In such a case, the COSE_Encrypt0 object is used as payload of the COSE_Sign, COSE_Sign1, COSE_MAC, or COSE_MAC0 structure.  </t>
            <t>
This alternative <bcp14>MUST</bcp14> be used by the Distributor, unless the response to the Proxy is protected by means of a mutually authenticated, secure communication association between the Distributor and the Proxy, in such a way that only the Proxy is able to retrieve the protected content in plain.  </t>
            <t>
This alternative requires the Distributor to know:  </t>
            <ul spacing="normal">
              <li>
                <t>The COSE-HPKE algorithm to use with the Proxy (see <xref section="4" sectionFormat="of" target="I-D.ietf-cose-hpke"/>).</t>
              </li>
              <li>
                <t>The static public key of the Proxy to use as the input pkR of the HPKE Seal operation (see <xref section="3.1.1" sectionFormat="of" target="I-D.ietf-cose-hpke"/>).</t>
              </li>
            </ul>
            <t>
Editor's note: describe examples of how the Distributor can obtain the static public key of the Proxy and possibly select the right one to use at runtime.</t>
          </li>
        </ul>
        <t>Secure communication associations between the Distributor and the Proxy can rely, for example, on a TLS <xref target="RFC8446"/> channel where the Distributor has been authenticated during the secure channel establishment, or on a pairwise OSCORE <xref target="RFC8613"/> Security Context shared between the Distributor and the Proxy, as defined in <xref target="I-D.ietf-core-oscore-capable-proxies"/>.</t>
      </section>
    </section>
    <section anchor="pre-oscore-data-semantics">
      <name>Pre-OSCORE Data Semantics</name>
      <t>This document defines the following semantics for data prepended to the ciphertext conveyed in the CoAP payload of a message protected with OSCORE <xref target="RFC8613"/> or Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
      <table align="center" anchor="_table-pre-oscore-data-semantics">
        <name>Pre-OSCORE Data Semantics.</name>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Description</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">1</td>
            <td align="left">Checksum key</td>
            <td align="left">[RFC-XXXX], <xref target="sec-checksum-keys-provisioning"/></td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="sec-security-considerations">
      <name>Security Considerations</name>
      <t>Security considerations are inherited from <xref target="RFC7252"/>, <xref target="I-D.ietf-core-groupcomm-bis"/>, and <xref target="RFC8323"/> as to the use of CoAP also for group communication and over reliable transports.</t>
      <t>Security considerations are also inherited from <xref target="RFC7641"/> as to the use of CoAP Observe, from <xref target="RFC7959"/> as to the use of Block-wise transfer for CoAP, and from <xref target="RFC8323"/> as to the use of BERT.</t>
      <t>Security considerations are also inherited from <xref target="I-D.ietf-core-oscore-groupcomm"/> for the use of Group OSCORE, and from <xref target="I-D.amsuess-core-cachable-oscore"/> as to the specific use of protected Deterministic Requests and the caching of corresponding protected responses.</t>
      <t>Furthermore, the following security considerations also apply.</t>
      <t>Editor's note: add more security considerations.</t>
    </section>
    <section anchor="sec-iana">
      <name>IANA Considerations</name>
      <t>This document has the following actions for IANA.</t>
      <t>Note to RFC Editor: Please replace all occurrences of "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph.</t>
      <section anchor="iana-coap-option-numbers">
        <name>CoAP Option Numbers Registry</name>
        <t>IANA is asked to enter the following option numbers to the "CoAP Option Numbers" registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <table align="center">
          <name>Registrations in the CoAP Option Numbers Registry</name>
          <thead>
            <tr>
              <th align="left">Number</th>
              <th align="left">Name</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD256</td>
              <td align="left">Checksum</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
            <tr>
              <td align="left">TBD257</td>
              <td align="left">Pre-OSCORE-Data</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="iana-informative-response-parameters">
        <name>Informative Response Parameters Registry</name>
        <t>IANA is asked to enter the following entry to the "Informative Response Parameters" registry defined in <xref target="I-D.ietf-core-observe-multicast-notifications"/> within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <ul spacing="normal">
          <li>
            <t>Name: progress_indicator</t>
          </li>
          <li>
            <t>CBOR Key: TBD23</t>
          </li>
          <li>
            <t>CBOR Type: uint</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
        </ul>
      </section>
      <section anchor="iana-pre-oscore-data-semantics">
        <name>Pre-OSCORE Data Semantics Registry</name>
        <t>This document establishes the "Pre-OSCORE Data Semantics" registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <t>The registration policy is either "Private Use", "RFC Required With Expert Review", or "Specification Required" per <xref target="RFC8126"/>. "Expert Review" guidelines are provided in <xref target="iana-review"/>.</t>
        <t>All assignments according to "RFC Required With Expert Review" are made on an "RFC Required" basis per <xref section="4.7" sectionFormat="of" target="RFC8126"/> with "Expert Review" additionally required per <xref section="4.5" sectionFormat="of" target="RFC8126"/>. The procedure for early IANA allocation of "standards track code points" defined in <xref target="RFC7120"/> also applies. When such a procedure is used, IANA will ask the designated expert(s) to approve the early allocation before registration. In addition, working group chairs are encouraged to consult the expert(s) early during the process outlined in <xref section="3.1" sectionFormat="of" target="RFC7120"/>.</t>
        <t>The columns of this registry are:</t>
        <ul spacing="normal">
          <li>
            <t>Value: This value identifies the semantics of the data prepended to the ciphertext conveyed in the CoAP payload of a message protected with OSCORE <xref target="RFC8613"/> or Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>. These values <bcp14>MUST</bcp14> be unique. The value <bcp14>MUST</bcp14> be an odd unsigned integer, with minimum value 1 and maximum value 4294967293 (i.e., 2<sup>32</sup>-3). Odd unsigned integer values from 1 to 255 are designated as "RFC Required With Expert Review". Odd unsigned integer values from 257 to 4294965293 are designated as "Specification Required". Odd unsigned integer values from 4294965295 to 4294967293 are marked as "Private Use".</t>
          </li>
          <li>
            <t>Description: This field contains a brief description of the semantics.</t>
          </li>
          <li>
            <t>Reference: This field contains a pointer to the public specification defining the error, if one exists.</t>
          </li>
        </ul>
        <t>This registry has been initially populated by the values in <xref target="pre-oscore-data-semantics"/>.</t>
        <t>Note that, although even values from 2 to 4294967294 cannot not registered, they are meaningful and usable semantics identifiers. That is, the even value X identifies the same semantics identified by its companion odd value (X-1).</t>
      </section>
      <section anchor="iana-review">
        <name>Expert Review Instructions</name>
        <t>"RFC Required With Expert Review" and "Specification Required" are two of the registration policies defined for the IANA registry established in this document. This section gives some general guidelines for what the experts should be looking for, but they are being designated as experts for a reason, so they should be given substantial latitude.</t>
        <ul spacing="normal">
          <li>
            <t>Point squatting should be discouraged. Reviewers are encouraged to get sufficient information for registration requests to ensure that the usage is not going to duplicate one that is already registered and that the point is likely to be used in deployments. The zones tagged as "Private Use" are intended for testing purposes and closed environments. Code points in other ranges should not be assigned for testing.</t>
          </li>
          <li>
            <t>Specifications are required for the "RFC Required With Expert Review" range of point assignment. Specifications should exist for "Specification Required" ranges, but early assignment before a specification is available is considered to be permissible. When specifications are not provided, the description provided needs to have sufficient information to identify what the point is being used for.</t>
          </li>
          <li>
            <t>Experts should take into account the expected usage of fields when approving point assignment. The fact that there is a range for RFC documents does not mean that an RFC document cannot have points assigned outside of that range. The length of the encoded value should be weighed against how many code points of that length are left, the size of device it will be used on, and the number of code points left that encode to that size.</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="RFC7120">
          <front>
            <title>Early IANA Allocation of Standards Track Code Points</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <date month="January" year="2014"/>
            <abstract>
              <t>This memo describes the process for early allocation of code points by IANA from registries for which "Specification Required", "RFC Required", "IETF Review", or "Standards Action" policies apply. This process can be used to alleviate the problem where code point allocation is needed to facilitate desired or required implementation and deployment experience prior to publication of an RFC, which would normally trigger code point allocation. The procedures in this document are intended to apply only to IETF Stream documents.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="100"/>
          <seriesInfo name="RFC" value="7120"/>
          <seriesInfo name="DOI" value="10.17487/RFC7120"/>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC7641">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks. The state of a resource on a CoAP server can change over time. This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time. The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7641"/>
          <seriesInfo name="DOI" value="10.17487/RFC7641"/>
        </reference>
        <reference anchor="RFC7959">
          <front>
            <title>Block-Wise Transfers in the Constrained Application Protocol (CoAP)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="Z. Shelby" initials="Z." role="editor" surname="Shelby"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful transfer protocol for constrained nodes and networks. Basic CoAP messages work well for small payloads from sensors and actuators; however, applications will need to transfer larger payloads occasionally -- for instance, for firmware updates. In contrast to HTTP, where TCP does the grunt work of segmenting and resequencing, CoAP is based on datagram transports such as UDP or Datagram Transport Layer Security (DTLS). These transports only offer fragmentation, which is even more problematic in constrained nodes and networks, limiting the maximum size of resource representations that can practically be transferred.</t>
              <t>Instead of relying on IP fragmentation, this specification extends basic CoAP with a pair of "Block" options for transferring multiple blocks of information from a resource representation in multiple request-response pairs. In many important cases, the Block options enable a server to be truly stateless: the server can handle each block transfer separately, with no need for a connection setup or other server-side memory of previous block transfers. Essentially, the Block options provide a minimal way to transfer larger representations in a block-wise fashion.</t>
              <t>A CoAP implementation that does not support these options generally is limited in the size of the representations that can be exchanged, so there is an expectation that the Block options will be widely used in CoAP implementations. Therefore, this specification updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7959"/>
          <seriesInfo name="DOI" value="10.17487/RFC7959"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </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="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE). OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration. Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <reference anchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC9052">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
              <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="96"/>
          <seriesInfo name="RFC" value="9052"/>
          <seriesInfo name="DOI" value="10.17487/RFC9052"/>
        </reference>
        <reference anchor="RFC9053">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Initial Algorithms</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines a set of algorithms that can be used with the CBOR Object Signing and Encryption (COSE) protocol (RFC 9052).</t>
              <t>This document, along with RFC 9052, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9053"/>
          <seriesInfo name="DOI" value="10.17487/RFC9053"/>
        </reference>
        <reference anchor="RFC9180">
          <front>
            <title>Hybrid Public Key Encryption</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="K. Bhargavan" initials="K." surname="Bhargavan"/>
            <author fullname="B. Lipp" initials="B." surname="Lipp"/>
            <author fullname="C. Wood" initials="C." surname="Wood"/>
            <date month="February" year="2022"/>
            <abstract>
              <t>This document describes a scheme for hybrid public key encryption (HPKE). This scheme provides a variant of public key encryption of arbitrary-sized plaintexts for a recipient public key. It also includes three authenticated variants, including one that authenticates possession of a pre-shared key and two optional ones that authenticate possession of a key encapsulation mechanism (KEM) private key. HPKE works for any combination of an asymmetric KEM, key derivation function (KDF), and authenticated encryption with additional data (AEAD) encryption function. Some authenticated variants may not be supported by all KEMs. We provide instantiations of the scheme using widely used and efficient primitives, such as Elliptic Curve Diffie-Hellman (ECDH) key agreement, HMAC-based key derivation function (HKDF), and SHA2.</t>
              <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9180"/>
          <seriesInfo name="DOI" value="10.17487/RFC9180"/>
        </reference>
        <reference anchor="I-D.ietf-core-href">
          <front>
            <title>Constrained Resource Identifiers</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <date day="20" month="March" year="2025"/>
            <abstract>
              <t>   The Constrained Resource Identifier (CRI) is a complement to the
   Uniform Resource Identifier (URI) that represents the URI components
   in Concise Binary Object Representation (CBOR) rather than as a
   sequence of characters.  This approach simplifies parsing,
   comparison, and reference resolution in environments with severe
   limitations on processing power, code size, and memory size.

   This RFC updates RFC 7595 to add a note on how the "URI Schemes"
   registry of RFC 7595 cooperates with the "CRI Scheme Numbers"
   registry created by the present RFC.


   // (This "cref" paragraph will be removed by the RFC editor:) The
   // present revision –22 addresses a few remaining post-WGLC nits.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-22"/>
        </reference>
        <reference anchor="I-D.ietf-cose-hpke">
          <front>
            <title>Use of Hybrid Public-Key Encryption (HPKE) with CBOR Object Signing and Encryption (COSE)</title>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
              <organization>University of Applied Sciences Bonn-Rhein-Sieg</organization>
            </author>
            <author fullname="Orie Steele" initials="O." surname="Steele">
              <organization>Transmute</organization>
            </author>
            <author fullname="Ajitomi, Daisuke" initials="A." surname="Daisuke">
              <organization>bibital</organization>
            </author>
            <author fullname="Laurence Lundblade" initials="L." surname="Lundblade">
              <organization>Security Theory LLC</organization>
            </author>
            <date day="4" month="June" year="2025"/>
            <abstract>
              <t>   This specification defines hybrid public-key encryption (HPKE) for
   use with CBOR Object Signing and Encryption (COSE).  HPKE offers a
   variant of public-key encryption of arbitrary-sized plaintexts for a
   recipient public key.

   HPKE works for any combination of an asymmetric key encapsulation
   mechanism (KEM), key derivation function (KDF), and authenticated
   encryption with additional data (AEAD) function.  Authentication for
   HPKE in COSE is provided by COSE-native security mechanisms or by the
   pre-shared key authenticated variant of HPKE.

   This document defines the use of the HPKE with COSE.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cose-hpke-13"/>
        </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="5" month="July" year="2025"/>
            <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 each 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-26"/>
        </reference>
        <reference anchor="I-D.ietf-core-groupcomm-bis">
          <front>
            <title>Group Communication for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Esko Dijk" initials="E." surname="Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="2" month="July" year="2025"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP) is a web transfer
   protocol for constrained devices and constrained networks.  In a
   number of use cases, constrained devices often naturally operate in
   groups (e.g., in a building automation scenario, all lights in a
   given room may need to be switched on/off as a group).  This document
   specifies the use of CoAP for group communication, including the use
   of UDP/IP multicast as the default underlying data transport.  Both
   unsecured and secured CoAP group communication are specified.
   Security is achieved by use of the Group Object Security for
   Constrained RESTful Environments (Group OSCORE) protocol.  The target
   application area of this specification is any group communication use
   cases that involve resource-constrained devices or networks that
   support CoAP.  This document replaces and obsoletes RFC 7390, while
   it updates RFC 7252 and RFC 7641.

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-observe-multicast-notifications-11"/>
        </reference>
        <reference anchor="COSE.Algorithms" target="https://www.iana.org/assignments/cose/cose.xhtml#algorithms">
          <front>
            <title>COSE Algorithms</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <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 anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC9019">
          <front>
            <title>A Firmware Update Architecture for Internet of Things</title>
            <author fullname="B. Moran" initials="B." surname="Moran"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="D. Brown" initials="D." surname="Brown"/>
            <author fullname="M. Meriac" initials="M." surname="Meriac"/>
            <date month="April" year="2021"/>
            <abstract>
              <t>Vulnerabilities in Internet of Things (IoT) devices have raised the need for a reliable and secure firmware update mechanism suitable for devices with resource constraints. Incorporating such an update mechanism is a fundamental requirement for fixing vulnerabilities, but it also enables other important capabilities such as updating configuration settings and adding new functionality.</t>
              <t>In addition to the definition of terminology and an architecture, this document provides the motivation for the standardization of a manifest format as a transport-agnostic means for describing and protecting firmware updates.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9019"/>
          <seriesInfo name="DOI" value="10.17487/RFC9019"/>
        </reference>
        <reference anchor="RFC9124">
          <front>
            <title>A Manifest Information Model for Firmware Updates in Internet of Things (IoT) Devices</title>
            <author fullname="B. Moran" initials="B." surname="Moran"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <date month="January" year="2022"/>
            <abstract>
              <t>Vulnerabilities with Internet of Things (IoT) devices have raised the need for a reliable and secure firmware update mechanism that is also suitable for constrained devices. Ensuring that devices function and remain secure over their service lifetime requires such an update mechanism to fix vulnerabilities, update configuration settings, and add new functionality.</t>
              <t>One component of such a firmware update is a concise and machine-processable metadata document, or manifest, that describes the firmware image(s) and offers appropriate protection. This document describes the information that must be present in the manifest.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9124"/>
          <seriesInfo name="DOI" value="10.17487/RFC9124"/>
        </reference>
        <reference anchor="RFC9200">
          <front>
            <title>Authentication and Authorization for Constrained Environments Using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This specification defines a framework for authentication and authorization in Internet of Things (IoT) environments called ACE-OAuth. The framework is based on a set of building blocks including OAuth 2.0 and the Constrained Application Protocol (CoAP), thus transforming a well-known and widely used authorization solution into a form suitable for IoT devices. Existing specifications are used where possible, but extensions are added and profiles are defined to better serve the IoT use cases.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9200"/>
          <seriesInfo name="DOI" value="10.17487/RFC9200"/>
        </reference>
        <reference anchor="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-ace-key-groupcomm-oscore">
          <front>
            <title>Key Management for Group Object Security for Constrained RESTful Environments (Group OSCORE) Using Authentication and Authorization for Constrained Environments (ACE)</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="11" month="April" year="2025"/>
            <abstract>
              <t>   This document defines an application profile of the Authentication
   and Authorization for Constrained Environments (ACE) framework, to
   request and provision keying material in group communication
   scenarios that are based on the Constrained Application Protocol
   (CoAP) and are secured with Group Object Security for Constrained
   RESTful Environments (Group OSCORE).  This application profile
   delegates the authentication and authorization of Clients, which join
   an OSCORE group through a Resource Server acting as Group Manager for
   that group.  This application profile leverages protocol-specific
   transport profiles of ACE to achieve communication security, server
   authentication, and proof-of-possession for a key owned by the Client
   and bound to an OAuth 2.0 access token.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-key-groupcomm-oscore-17"/>
        </reference>
        <reference anchor="I-D.ietf-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="3" month="March" year="2025"/>
            <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-04"/>
        </reference>
        <reference anchor="I-D.ietf-suit-manifest">
          <front>
            <title>A Concise Binary Object Representation (CBOR)-based Serialization Format for the Software Updates for Internet of Things (SUIT) Manifest</title>
            <author fullname="Brendan Moran" initials="B." surname="Moran">
              <organization>Arm Limited</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
              <organization>University of Applied Sciences Bonn-Rhein-Sieg</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Koen Zandberg" initials="K." surname="Zandberg">
              <organization>Inria</organization>
            </author>
            <author fullname="Øyvind Rønningstad" initials="O." surname="Rønningstad">
              <organization>Nordic Semiconductor</organization>
            </author>
            <date day="28" month="May" year="2025"/>
            <abstract>
              <t>   This specification describes the format of a manifest.  A manifest is
   a bundle of metadata about code/data obtained by a recipient (chiefly
   the firmware for an Internet of Things (IoT) device), where to find
   the code/data, the devices to which it applies, and cryptographic
   information protecting the manifest.  Software updates and Trusted
   Invocation both tend to use sequences of common operations, so the
   manifest encodes those sequences of operations, rather than declaring
   the metadata.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-suit-manifest-34"/>
        </reference>
      </references>
    </references>
    <?line 927?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The author sincerely thanks <contact fullname="Christian Amsüss"/>, <contact fullname="Peter Blomqvist"/>, <contact fullname="Carsten Bormann"/>, <contact fullname="Rikard Höglund"/>, <contact fullname="Göran Selander"/>, and <contact fullname="Mališa Vučinić"/> 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 projects CRITISEC and CYPRESS.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+192XbcVrbYO78CodaKRbuqLMryxG73DUVSbS5rCim13bnp
6wVWoarQRAHVAIoUr+W85in/kPzEfcpT7s1/ZY9nwkENktxDbnO1W2QVcIZ9
9tnzMBwO926Oks/29tq8LbKj5DRv2jq/WrV5VSbVNLmspu1tWmfJ6+UkbbMm
uc3beXJWToZtNYR/kstsvIKvf1tXq2VyUi0WqzIfp/R6Cl8/Lqrx9fD7vMmS
V3VaNtOsTqZVDU8ev9xLr67qDKa//F6G59HxOxlw7A64N6nGZbqAVU7qdNoO
2xwGT4ftw7aeDZvb4YrGGM7wTXxxWOCK2729fFkfJW29atqHDx58/eDh3u3s
KHk1z8sZ7oJ+SS6yJkvr8Zwn3ru+PUrOyzary6wdnuJ0e7CIoyR7s9xrVleL
vGlgRe3dElZzfvHqyd7euJrAOEfJqp0Ov9rbS1ftvKqP9hL6Gcq/SZKXzVHy
bJS8osWbj3lfz2AFVfhVVcOoF+eXZ8nxY/MhnFKWwXrOm3T6x6qeNLO0Tcvk
4UPzxDhv746S7+A87VCwRpjl8mx4+MWjRw+cj1dlW8PTl7fZJCvN59kizYuj
ZIGrGjG0/1Odj5psb6+s6gUcyk2GO7x4cvL5V198fZTMrydT/vvLw4cPjpI8
LdMhgLW4G6YFvk7HyA88/PzhEcycLuXvLx4dHiXVVZPVN5l89PXnMOYVYdAt
YBB/+tXhwy9k5Nkqn2RFXmaNfPXZw894zGE7lnG/+uIQFjKeTArzNzxTNeOq
1gG/fgTTjK+qmv/++gGvTCeEvz/jv2ETM5nq68OvYNj58hofOh+ejvIMzh0H
Hc7rbApfwf/7X8H7+LwMFX2Vl2Ux+CihX4dmuf7jFtOv8kafFZDik+miWWVN
ww+P0/E8vSp0ElgGfJA5n3RXw4cxXKyKFq5g0w7Lqs2nchthwuALGODkxeXZ
6LiYVTVc5EXD6O9fBULn8+Pnx/Q33tijZJoWBO0kETKE4yR2HP4qrWeI8vO2
XTZHn356e3s7QjQYwYifpnAfZ+UiK9vmU4Qv/d/ozbxdFPdSO85eXk4DzP3q
0SPAp7bQg31wCNjQrPJ2iORAT/vhI/lwkZb5FKkKfwEE5ShJx4oqnz/8CmjE
ZF6NXWjC98Pr7M45Lz0D/EYPfdGHDuN0Sce0rKs3edYo9urf7mveEoMVDwnF
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
AA==

-->

</rfc>
