<?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.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-tiloca-t2trg-sw-update-groupcomm-01" category="exp" submissionType="IRTF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <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-01"/>
    <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="2026" month="January" day="07"/>
    <workgroup>Thing-to-Thing Research Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 68?>

<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 73?>

<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.ietf-core-cacheable-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 could 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.ietf-core-cacheable-oscore"/>.</t>
          </li>
          <li>
            <t>The 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 it 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 when 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 keeping the proxies 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 that are sent to the whole group, i.e., that are intended to all CoAP servers in the group.</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 that is 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 Group OSCORE <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. The same holds also when considering the same client that wishes to send the same plain CoAP request at different points in time.</t>
        <t>In order to overcome this limitation, the approach defined in <xref target="I-D.ietf-core-cacheable-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 that are 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.ietf-core-cacheable-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.ietf-core-cacheable-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.ietf-core-cacheable-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.ietf-core-cacheable-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 use as a possible optimization the approach defined in <xref target="I-D.ietf-core-observe-multicast-notifications"/>, whose use in network setups that leverage proxies is described in <xref target="I-D.ietf-core-multicast-notifications-proxy"/>. 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.ietf-core-cacheable-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 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="14.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 Claim" 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="14.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 could 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 symmetric 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 key 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 with the structure defined below, following the notation of <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.ietf-core-cacheable-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 NOT</bcp14> occur more than 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 an odd value taken from the 'Value' column of the "Pre-OSCORE Data Semantics" IANA registry defined in <xref target="iana-pre-oscore-data-semantics"/>.</t>
        <t>Both values 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., the data is a plaintext recovered after a decryption process.</t>
          </li>
        </ul>
        <t>Note that, although even values cannot be registered in the "Pre-OSCORE Data Semantics" IANA registry (see <xref target="iana-pre-oscore-data-semantics"/>), those values are meaningful semantics identifiers that can be used as option value. That is, the even value Y identifies the same semantics identified by its companion odd value X = (Y - 1).</t>
        <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 Integrated 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.ietf-core-cacheable-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 field contains the value used to identify the semantics of the data that is 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 semantics, if one exists.</t>
          </li>
        </ul>
        <t>This registry has been initially populated by the values in <xref target="pre-oscore-data-semantics"/>.</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="21" month="November" 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 by adding a column on the "URI Schemes"
   registry.


   // (This "cref" paragraph will be removed by the RFC editor:) After
   // approval of -28 and nit fixes in -29, the present revision -30
   // contains two more small fixes for nits that were uncovered in the
   // RPC intake process.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-30"/>
        </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>Tradeverifyd</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>
            <author fullname="Michael B. Jones" initials="M. B." surname="Jones">
              <organization>Self-Issued Consulting</organization>
            </author>
            <date day="15" month="December" 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 is a general encryption framework utilizing an asymmetric key
   encapsulation mechanism (KEM), a key derivation function (KDF), and
   an Authenticated Encryption with Associated Data (AEAD) algorithm.

   This document defines the use of HPKE with COSE.  Authentication for
   HPKE in COSE is provided by COSE-native security mechanisms or by the
   pre-shared key authenticated variant of HPKE.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cose-hpke-19"/>
        </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="23" month="December" 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 messages exchanged with the Constrained Application
   Protocol (CoAP) 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-28"/>
        </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="25" month="September" 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-15"/>
        </reference>
        <reference anchor="I-D.ietf-core-cacheable-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="22" month="September" 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-ietf-core-cacheable-oscore-00"/>
        </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="20" month="October" year="2025"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP) allows clients to
   "observe" resources at a server and to 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 the 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
   the same resource on the same shared Token value.  Besides, this
   document defines how the security protocol Group Object Security for
   Constrained RESTful Environments (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-13"/>
        </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="28" month="August" 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-18"/>
        </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="September" 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-05"/>
        </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>
        <reference anchor="I-D.ietf-core-multicast-notifications-proxy">
          <front>
            <title>Using Proxies for 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="20" month="October" year="2025"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP) allows clients to
   "observe" resources at a server and to receive notifications as
   unicast responses upon changes of the resource state.  Instead of
   sending a distinct unicast notification to each different client, a
   server can alternatively send a single notification as a response
   message over multicast, to all the clients observing the same target
   resource.  When doing so, the security protocol Group Object Security
   for Constrained RESTful Environments (Group OSCORE) can be used to
   protect multicast notifications end-to-end between the server and the
   observer clients.  This document describes how multicast
   notifications can be used in network setups that leverage a proxy,
   e.g., in order to accommodate clients that are not able to directly
   listen to multicast traffic.



   The present version -00 refers to version -12 of draft-ietf-core-
   observe-multicast-notifications, which includes content about proxies
   that is also included in the present document.  Such content will be
   removed from draft-ietf-core-observe-multicast-notifications in its
   next revision.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-multicast-notifications-proxy-00"/>
        </reference>
      </references>
    </references>
    <?line 930?>

<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:
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
yKostJ3YvxcyEgGTtJNsYowIa+1J1KLe8CFdE+tzEfnG6J68uMCR/SC8jxrE
h6M2GMExTparq4IzwCwBEo/WitPqWntrX12YSK3Ire260bsUgVdwBpekqj+g
hKbsyCThJ9nrFLVdOmytUhDeMMk6aTdvgaKeVNfnYlmMdfls3rpSIqYrYOuM
BaL05QZUarbDJVorEgBpS8k7GzA5ePH4Eq9wW6D4N56Dap0VTq1dd1A0v1Lb
Dg/jXV+F4r4MkzVo/MubOWcqYltnnHKZ5tTMOqJr9CcvbndpQhlX5TZ0aIBG
zbpLh68ZGwHoKf2mAClhYWqkag0LnN6ptmLGorxFHL4jDTticKdoQSD+2jBc
e6vppkVgB/N5CRgxxe1NQmY/siojpjM3RWN0pnWpt/lBU/ShGKwNa0SsfwOz
/sfLs8ePUALZnGqz1hRtQdmxRgfnNorYl+94uETFbuTSqDqqmWHDsff9L3Lx
KIrNf5MDPODs8lYDUY3fYGDhrR9wrg79OWzHS9SvjDIredt03qRcIrrQ6+F9
LyWaD24wt5s03YGb0fql0rjd9VZXVO67dznP+PuBecFr8tZ5J9YZDjeDYzEM
XED1AQK7k7/ddnwcN8KcjOvdCG8xnbhyZ1Gm7bKMYi9fNNq9MXQIRxWDiN8r
x45gC6Pv7XWq/7qEpAcSCAWs/Y8ZjQH3ApGPY2V7XibqR2bQniuB1tAOoVO3
m11bOubXENY4nDHaVsnFoxPhqUfJ8yJLKcAKhA8UaovCMWkRZ9031GLfChA4
hI1LYA+gJiCYK8H1jfhb9MiDirCca1AoIjFTtqc0TmMTbu/gVsnoS9jIKs2Q
p8OrT9DJKa5Gy9lpITu7f8+FasuBRibetwZntzeU12T67PIFmpLPyuu8rsoF
tcS9e1JdnB1gzLwEkjgDEcKzW5GhFHMjWnruxTobYm0eNCfg+xe7/kT3QSDa
PsFVEi1wFrRymVrPgRCpBqR0YiO0OKKze3t+zgFuqkW+5WFyqrae4YaF7Pc4
wLol7N//eX9Ix3xkqr7boBT8jlRC0E6P6Aw/MR+9uF1mkuYEHxm0OLLnGTjx
Q5nIgF7Avr2EZOQ/kZLWOWd+vWvCyrpFSxDEQUYn9Un8p7AuTArPkpcNVj3c
RwJ0wUrRJPmOSp69xoAD+BDjifZJlN2/9GiSPr9PhZIBIQhWsxUQ2QLFRNSP
9/1hEvst8Tcx+rku1ZqeJMntGKgnyP5w6XjrXmXSjUtmv1U6ySRC2HthP7lK
G6SjtHLbloYKKHQ3IiXowgl8c4MsJRzy0/iQbFIhF+AENQjSU6h6IF1hGLOy
ppB9QKtyktYTKq4/fpVQ1X4K+YLz968lzUQjDe0gyOqVi+boByLfg2jbdhFi
pRjwGqisJBAS9m5meBCk/mQEhrvNAWXDYTyuqOG8fmfpEj/k4iLZTBRyg+Sm
qimaU+TAOShKjBoYsrYCJqdFvkqyqtEsZnqez9HGxKOKToSi60XW0PIeCGmx
M4oOaAwjNrcrpeTID1mdOGKjAqdEotHBdOB1OrCgyd7z9EdDI9Qv8NejNCFq
Wv+vsSmV+U/syM2CoAwJugjDQ6TgCxUmNZUhDrnSf/ra+ezB/S8ffPnZ5/e/
/ER7xN7/qlktf//J/a8+xn+TYfLJwSh5FpnDVHpDGfeQjLOffkoI5CBs2mwm
F1sMj2ICTMCr/RRXG5mnh0ZuMbwZ91M7y+c6yyKtX8kMLukmHunotXG0TJOr
Os+mYurxcg/9WA+HV8bH4YY6tWKoGH98WZXIkbWPyPicQVDi9cWQDC1fb26X
MbVIb0Asw1VRMSpryRRo0aVeH3qDNWfd46VGQWg5JSFN2Lqwmr29LXgJpnT0
sT/1cxnfXch5MbIhLKHkh2ZYuaFb8EqKQ2lI4Ix8ndQjY5aVoM8ULlfF4W80
KIcpJTw8p+pmcFOLqiJyO0Vb8BWHJnMy51VG5Zg8ZNb3udlHDaoNkuym4rfs
qDMKlG9WV8imKOMVa4i1qwkXRXpOocnNT6u0Je+BfREzGYTKjwTWWZT+Y45Z
s5pOEZZk3bXVyLnvhwPyWjVU62MwYUorze/GcJpZJbLEZMV95cR7rZFCkjbl
hNx4nTM44hoexILyxa00zyDCn+MtWBbVLQkuTDL/uSLTGXulwnssdhY3Pg+2
QFr0ql5WjQaZFBUOnzkC4Qh4gZEFqOAnCXh1Ws4yc/ISPMTClD8BnZCH2Qx/
I88owm6+JDQn2Q4IMlZ0G4UTyLKIFNAEvXeL98G4KuKFGVbFizQgQF6UV94Y
iwCjErYFQ3sG+6RVEuoCAGGm8ulARSBDPo3kiukDhGrU47kHR11B4KaDP3z1
tLASHciZf3MxkDHpb1HKWA2AJ3otTUBYMCMU6hwH4uM0VXdYS7ZvcqzyEeKJ
4GkrBWpsATR0ByVaRdF9RmPUCAyCjQbfQB6jRnsaz0HTSN01jvnVtAFJVJCW
E4ZQ3GT5jDqYSN4V+ieA3t+6grAZXYbEQyyyqRQM1G7zE2kR05peLwR4JGxq
0bKWGHd0HEpiWaRpVsV/4sjYun44BKVi/AoNTsdj7djE4EMFPvU/+2Xv5yOe
KJt8vT8F6TzTGGF0NmAkUA6MmLyYGKb+CjNzfj6Z12iGwxp1i+Zf/3cD3I7M
sD8/p0z+h0W1+OkantCPT9Ia81KSh4iKZakfX+SvMIHsm3/9l1mxKif68R/+
9V/gZEBHLVKs7/eLtej+/CQt8v/7v9Lkj6t/+x/Aof/tv/9iDY85BfWIjob2
RrgSCAkRqFHE5+ie0MRG/B5d4OgiWi2X3MlCmP3lTQZX5oMGWHdZSQGzY+B4
oMf+8fzp02d/PDYHdpKhJWL4FCVlQHp0uDbJycX5i/PLsxN66uSH56BNX472
/h/w42N8elIBAA==

-->

</rfc>
