| rfc9175.original.xml | rfc9175.xml | |||
|---|---|---|---|---|
| <?xml version='1.0' encoding='utf-8'?> | <?xml version='1.0' encoding='utf-8'?> | |||
| <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> | ||||
| <!-- generated by https://github.com/cabo/kramdown-rfc2629 version --> | <!-- generated by https://github.com/cabo/kramdown-rfc2629 version --> | |||
| <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | ||||
| <?rfc toc="yes"?> | <!DOCTYPE rfc [ | |||
| <?rfc sortrefs="yes"?> | <!ENTITY nbsp " "> | |||
| <?rfc symrefs="yes"?> | <!ENTITY zwsp "​"> | |||
| <rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft | <!ENTITY nbhy "‑"> | |||
| -ietf-core-echo-request-tag-14" category="std" updates="7252" obsoletes="" submi | <!ENTITY wj "⁠"> | |||
| ssionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" | ]> | |||
| version="3"> | ||||
| <rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft | ||||
| -ietf-core-echo-request-tag-14" number="9175" category="std" consensus="true" up | ||||
| dates="7252" obsoletes="" submissionType="IETF" xml:lang="en" tocInclude="true" | ||||
| sortRefs="true" symRefs="true" version="3"> | ||||
| <!-- xml2rfc v2v3 conversion 2.47.0 --> | <!-- xml2rfc v2v3 conversion 2.47.0 --> | |||
| <front> | <front> | |||
| <title abbrev="Echo, Request-Tag, and Token Processing">CoAP: Echo, Request- | <title abbrev="Echo, Request-Tag, and Token Processing">Constrained Applicat | |||
| Tag, and Token Processing</title> | ion Protocol (CoAP): Echo, Request-Tag, and Token Processing</title> | |||
| <seriesInfo name="Internet-Draft" value="draft-ietf-core-echo-request-tag-14 | <seriesInfo name="RFC" value="9175"/> | |||
| "/> | <author initials="C." surname="Amsüss" fullname="Christian Amsüss"> | |||
| <author initials="C." surname="Amsuess" fullname="Christian Amsüss"> | ||||
| <organization/> | <organization/> | |||
| <address> | <address> | |||
| <email>christian@amsuess.com</email> | <email>christian@amsuess.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author initials="J." surname="Mattsson" fullname="John Preuß Mattsson"> | <author initials="J." surname="Preuß Mattsson" fullname="John Preuß Mattsson "> | |||
| <organization>Ericsson AB</organization> | <organization>Ericsson AB</organization> | |||
| <address> | <address> | |||
| <email>john.mattsson@ericsson.com</email> | <email>john.mattsson@ericsson.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author initials="G." surname="Selander" fullname="Göran Selander"> | <author initials="G." surname="Selander" fullname="Göran Selander"> | |||
| <organization>Ericsson AB</organization> | <organization>Ericsson AB</organization> | |||
| <address> | <address> | |||
| <email>goran.selander@ericsson.com</email> | <email>goran.selander@ericsson.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date year="2021" month="October" day="04"/> | <date year="2022" month="February"/> | |||
| <area>General</area> | <area>General</area> | |||
| <workgroup>CoRE Working Group</workgroup> | <workgroup>CoRE Working Group</workgroup> | |||
| <keyword>OSCORE</keyword> | ||||
| <keyword>block-wise</keyword> | ||||
| <keyword>DTLS</keyword> | ||||
| <keyword>freshness</keyword> | ||||
| <keyword>delay</keyword> | ||||
| <keyword>denial-of-service</keyword> | ||||
| <keyword>amplification</keyword> | ||||
| <keyword>Message Body Integrity</keyword> | ||||
| <keyword>Concurrent Block-Wise</keyword> | ||||
| <keyword>Request-Response Binding</keyword> | ||||
| <keyword>Token Reuse</keyword> | ||||
| <abstract> | <abstract> | |||
| <t>This document specifies enhancements to the Constrained Application Pro | <t>This document specifies enhancements to the Constrained Application Pro | |||
| tocol (CoAP) that mitigate security issues in particular use cases. The Echo opt | tocol | |||
| ion enables a CoAP server to verify the freshness of a request or to force a cli | (CoAP) that mitigate security issues in particular use cases. The Echo opt | |||
| ent to demonstrate reachability at its claimed network address. The Request-Tag | ion enables | |||
| option allows the CoAP server to match block-wise message fragments belonging to | a CoAP server to verify the freshness of a request or to force a client to | |||
| the same request. This document updates RFC 7252 with respect to the client Tok | demonstrate reachability at its claimed network address. The Request-Tag o | |||
| en processing requirements, forbidding non-secure reuse of Tokens to ensure bind | ption | |||
| ing of response to request when CoAP is used with a security protocol, and with | allows the CoAP server to match block-wise message fragments belonging to | |||
| respect to amplification mitigation, where the use of Echo is now recommended.</ | the same | |||
| t> | request. This document updates RFC 7252 with respect to the following: pro | |||
| cessing | ||||
| requirements for client Tokens, forbidding non-secure reuse of Tokens to e | ||||
| nsure response-to-request binding when CoAP is used with a security protocol, an | ||||
| d | ||||
| amplification mitigation (where the use of the Echo option is now recommen | ||||
| ded).</t> | ||||
| </abstract> | </abstract> | |||
| <note removeInRFC="true"> | ||||
| <name>Discussion Venues</name> | ||||
| <t>Discussion of this document takes place on the | ||||
| CORE Working Group mailing list (core@ietf.org), | ||||
| which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/co | ||||
| re/"/>.</t> | ||||
| <t>Source for this draft and an issue tracker can be found at | ||||
| <eref target="https://github.com/core-wg/echo-request-tag"/>.</t> | ||||
| </note> | ||||
| </front> | </front> | |||
| <middle> | <middle> | |||
| <section anchor="intro" numbered="true" toc="default"> | <section anchor="intro" numbered="true" toc="default"> | |||
| <name>Introduction</name> | <name>Introduction</name> | |||
| <t>The initial Constrained Application Protocol (CoAP) suite of specificat | <t>The initial suite of specifications for the Constrained Application Pro | |||
| ions (<xref target="RFC7252" format="default"/>, <xref target="RFC7641" format=" | tocol (CoAP) | |||
| default"/>, and <xref target="RFC7959" format="default"/>) was designed with the | (<xref target="RFC7252" format="default"/>, <xref target="RFC7641" | |||
| assumption that security could be provided on a separate layer, in particular b | format="default"/>, and | |||
| y using DTLS (<xref target="RFC6347" format="default"/>). However, for some use | <xref target="RFC7959" format="default"/>) was designed with the assumptio | |||
| cases, additional functionality or extra processing is needed to support secure | n that | |||
| CoAP operations. This document specifies security enhancements to the Constraine | security could be provided on a separate layer, in particular, by using DT | |||
| d Application Protocol (CoAP).</t> | LS <xref | |||
| <t>[ Note to RFC editor: If C321 gets published before C280, | target="RFC6347" format="default"/>. However, for some use cases, addition | |||
| then the <xref target="RFC6347" format="default"/> references can be upgraded to | al | |||
| draft-ietf-tls-dtls13-43 without the need for further changes; | functionality or extra processing is needed to support secure CoAP operati | |||
| the reference is to 6347 here because that was the stable DTLS reference when th | ons. This | |||
| e document was last touched by the authors. ]</t> | document specifies security enhancements to CoAP.</t> | |||
| <t>This document specifies two CoAP options, the Echo option and the Reque | <t>This document specifies two CoAP options, the Echo option and the Reque | |||
| st-Tag option: The Echo option enables a CoAP server to verify the freshness of | st-Tag | |||
| a request, which can be used to synchronize state, or to force a client to demon | option. The Echo option enables a CoAP server to verify the freshness of a | |||
| strate reachability at its claimed network address. The Request-Tag option allow | request, | |||
| s the CoAP server to match message fragments belonging to the same request, frag | which can be used to synchronize state, or to force a client to demonstrat | |||
| mented using the CoAP block-wise transfer mechanism, which mitigates attacks and | e | |||
| enables concurrent block-wise operations. These options in themselves do not re | reachability at its claimed network address. The Request-Tag option allows | |||
| place the need for a security protocol; they specify the format and processing o | the CoAP | |||
| f data which, when integrity protected using e.g. DTLS (<xref target="RFC6347" f | server to match message fragments belonging to the same request, fragmente | |||
| ormat="default"/>), TLS (<xref target="RFC8446" format="default"/>), or OSCORE ( | d using the | |||
| <xref target="RFC8613" format="default"/>), provide the additional security feat | CoAP block-wise transfer mechanism, which mitigates attacks and enables co | |||
| ures.</t> | ncurrent | |||
| <t>This document updates <xref target="RFC7252" format="default"/> with a | block-wise operations. These options in themselves do not replace the need | |||
| recommendation that servers use the Echo option to mitigate amplification attack | for a | |||
| s.</t> | security protocol; they specify the format and processing of data that, wh | |||
| <t>The document also updates the Token processing requirements for clients | en | |||
| specified in <xref target="RFC7252" format="default"/>. The updated processing | integrity protected using, e.g., DTLS <xref target="RFC6347" format="defau | |||
| forbids non-secure reuse of Tokens to ensure binding of responses to requests wh | lt"/>, TLS | |||
| en CoAP is used with security, thus mitigating error cases and attacks where the | <xref target="RFC8446" format="default"/>, or Object Security for Constrai | |||
| client may erroneously associate the wrong response to a request.</t> | ned | |||
| <t>Each of the following sections provides a more detailed introduction to | RESTful Environments (OSCORE) <xref target="RFC8613" | |||
| the topic at hand in its first subsection.</t> | format="default"/>, provide the additional security features.</t> | |||
| <t>This document updates <xref target="RFC7252" format="default"/> with a | ||||
| recommendation that servers use the Echo option to mitigate amplification | ||||
| attacks.</t> | ||||
| <t>The document also updates the Token processing requirements for clients | ||||
| specified | ||||
| in <xref target="RFC7252" format="default"/>. The updated processing forbi | ||||
| ds | ||||
| non-secure reuse of Tokens to ensure binding of responses to requests when | ||||
| CoAP is | ||||
| used with security, thus mitigating error cases and attacks where the clie | ||||
| nt may | ||||
| erroneously associate the wrong response to a request.</t> | ||||
| <t>Each of the following sections provides a more-detailed introduction to | ||||
| the topic | ||||
| at hand in its first subsection.</t> | ||||
| <section anchor="terminology" numbered="true" toc="default"> | <section anchor="terminology" numbered="true" toc="default"> | |||
| <name>Terminology</name> | <name>Terminology</name> | |||
| <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", " | <t> | |||
| SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" i | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
| n this document are to be interpreted as described in BCP 14 <xref target="RFC21 | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
| 19" format="default"/> <xref target="RFC8174" format="default"/> when, and only | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | |||
| when, they appear in all capitals, as shown here.</t> | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| <t>Like <xref target="RFC7252" format="default"/>, this document is rely | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document ar | |||
| ing on the Representational State Transfer <xref target="REST" format="default"/ | e | |||
| > architecture of the Web.</t> | to be interpreted as | |||
| <t>Unless otherwise specified, the terms "client" and "server" refer to | described in BCP 14 <xref target="RFC2119"/> <xref | |||
| "CoAP client" and "CoAP server", respectively, as defined in <xref target="RFC72 | target="RFC8174"/> when, and only when, they appear in all capitals, as | |||
| 52" format="default"/>. The term "origin server" is used as in <xref target="RFC | shown | |||
| 7252" format="default"/>. The term "origin client" is used in this document to d | here. | |||
| enote the client from which a request originates; to distinguish from clients in | </t> | |||
| proxies.</t> | <t>Like <xref target="RFC7252" format="default"/>, this document relies | |||
| <t>A message's "freshness" is a measure of when a message was sent on a | on the Representational State Transfer <xref target="REST" format="defaul | |||
| time scale of the recipient. | t"/> | |||
| A server that receives a request can either verify that the request is fresh | architecture of the Web.</t> | |||
| or determine that it cannot be verified that the request is fresh. | <t>Unless otherwise specified, the terms "client" and "server" refer to | |||
| What is considered a fresh message is application dependent; | "CoAP | |||
| exemplary uses are "no more than one hour ago" or "after this server's last rebo | client" and "CoAP server", respectively, as defined in <xref target="RFC7 | |||
| ot".</t> | 252" | |||
| <t>The terms "payload" and "body" of a message are used as in <xref targ | format="default"/>.</t> | |||
| et="RFC7959" format="default"/>. The complete interchange of a request and a re | <t>A message's "freshness" is a measure of when a message was sent on a | |||
| sponse body is called a (REST) "operation". An operation fragmented using <xref | timescale | |||
| target="RFC7959" format="default"/> is called a "block-wise operation". A block- | of the recipient. A server that receives a request can either verify that | |||
| wise operation which is fragmenting the request body is called a "block-wise req | the | |||
| uest operation". A block-wise operation which is fragmenting the response body | request is fresh or determine that it cannot be verified that the request | |||
| is called a "block-wise response operation".</t> | is fresh. | |||
| <t>Two request messages are said to be "matchable" if they occur between | What is considered a fresh message is application dependent; | |||
| the same endpoint pair, have the same code, and have the same set of options, w | exemplary uses are "no more than 42 seconds ago" or "after this server's | |||
| ith the exception that elective NoCacheKey options and options involved in block | last | |||
| -wise transfer (Block1, Block2 and Request-Tag) need not be the same. | reboot".</t> | |||
| <!-- We could also keep the Request-Tag inside the matchable criterion, but then | <t>The terms "payload" and "body" of a message are used as in <xref | |||
| we'd be saying "matchable except for the Request-Tag" all over the document. -- | target="RFC7959" format="default"/>. The complete interchange of a reque | |||
| > | st and a | |||
| Two operations are said to be matchable if any of their messages are.</t> | response body is called a (REST) "operation". An operation fragmented usi | |||
| <t>Two matchable block-wise operations are said to be "concurrent" if a | ng <xref | |||
| block of the second request is exchanged even though the client still intends to | target="RFC7959" format="default"/> is called a "block-wise operation". A | |||
| exchange further blocks in the first operation. (Concurrent block-wise request | block-wise operation that is fragmenting the request body is called a "bl | |||
| operations from a single endpoint are impossible with the options of <xref targe | ock-wise | |||
| t="RFC7959" format="default"/> (see the last paragraphs of Sections 2.4 and 2.5) | request operation". A block-wise operation that is fragmenting the respo | |||
| because the second operation's block overwrites any state of the first exchange | nse body | |||
| .).</t> | is called a "block-wise response operation".</t> | |||
| <t>Two request messages are said to be "matchable" if they occur between | ||||
| the same | ||||
| endpoint pair, have the same code, and have the same set of options, with | ||||
| the | ||||
| exception that elective NoCacheKey options and options involved in block- | ||||
| wise | ||||
| transfer (Block1, Block2, and Request-Tag) need not be the same. | ||||
| Two blockwise request operations are said to be matchable if their reque | ||||
| st | ||||
| messages are matchable.</t> | ||||
| <t>Two matchable block-wise request operations are said to be "concurren | ||||
| t" if a | ||||
| block of | ||||
| the second request is exchanged even though the client still intends to e | ||||
| xchange | ||||
| further blocks in the first operation. (Concurrent block-wise request ope | ||||
| rations | ||||
| from a single endpoint are impossible with the options of <xref target="R | ||||
| FC7959" | ||||
| format="default"/> -- see the last paragraphs of Sections <xref target="R | ||||
| FC7959" | ||||
| section="2.4" sectionFormat="bare"/> and <xref target="RFC7959" section=" | ||||
| 2.5" | ||||
| sectionFormat="bare"/> -- because the second operation's block overwrites | ||||
| any state | ||||
| of the first exchange.)</t> | ||||
| <t>The Echo and Request-Tag options are defined in this document.</t> | <t>The Echo and Request-Tag options are defined in this document.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="echo" numbered="true" toc="default"> | <section anchor="echo" numbered="true" toc="default"> | |||
| <name>Request Freshness and the Echo Option</name> | <name>Request Freshness and the Echo Option</name> | |||
| <section anchor="req-fresh" numbered="true" toc="default"> | <section anchor="req-fresh" numbered="true" toc="default"> | |||
| <name>Request Freshness</name> | <name>Request Freshness</name> | |||
| <t>A CoAP server receiving a request is in general not able to verify wh | <t>A CoAP server receiving a request is, in general, not able to verify | |||
| en the request was sent by the CoAP client. This remains true even if the reques | when the | |||
| t was protected with a security protocol, such as DTLS. This makes CoAP requests | request was sent by the CoAP client. This remains true even if the reques | |||
| vulnerable to certain delay attacks which are particularly perilous in the case | t was | |||
| of actuators (<xref target="I-D.mattsson-core-coap-attacks" format="default"/>) | protected with a security protocol, such as DTLS. This makes CoAP request | |||
| . Some attacks can be mitigated by establishing fresh session keys, e.g. perform | s | |||
| ing a DTLS handshake for each request, but in general this is not a solution sui | vulnerable to certain delay attacks that are particularly perilous in the | |||
| table for constrained environments, for example, due to increased message overhe | case of | |||
| ad and latency. Additionally, if there are proxies, fresh DTLS session keys betw | actuators <xref target="I-D.mattsson-core-coap-attacks" format="default"/ | |||
| een server and proxy does not say anything about when the client made the reques | >. Some | |||
| t. In a general hop-by-hop setting, freshness may need to be verified in each ho | attacks can be mitigated by establishing fresh session keys, e.g., perfor | |||
| p.</t> | ming a DTLS | |||
| <t>A straightforward mitigation of potential delayed requests is that th | handshake for each request, but, in general, this is not a solution suita | |||
| e CoAP server rejects a request the first time it appears and asks the CoAP clie | ble for | |||
| nt to prove that it intended to make the request at this point in time.</t> | constrained environments, for example, due to increased message overhead | |||
| and | ||||
| latency. Additionally, if there are proxies, fresh DTLS session keys betw | ||||
| een the | ||||
| server | ||||
| and the proxy do not say anything about when the client made the request. | ||||
| In a | ||||
| general hop-by-hop setting, freshness may need to be verified in each hop | ||||
| .</t> | ||||
| <t>A straightforward mitigation of potential delayed requests is that th | ||||
| e CoAP | ||||
| server rejects a request the first time it appears and asks the CoAP clie | ||||
| nt to | ||||
| prove that it intended to make the request at this point in time.</t> | ||||
| </section> | </section> | |||
| <section anchor="the-echo-option" numbered="true" toc="default"> | <section anchor="the-echo-option" numbered="true" toc="default"> | |||
| <name>The Echo Option</name> | <name>The Echo Option</name> | |||
| <t>This document defines the Echo option, a lightweight challenge-respon | <t>This document defines the Echo option, a lightweight challenge-respon | |||
| se mechanism for CoAP that enables a CoAP server to verify the freshness of a re | se | |||
| quest. A fresh request is one whose age has not yet exceeded the freshness requi | mechanism for CoAP that enables a CoAP server to verify the freshness of | |||
| rements set by the server. The freshness requirements are application specific a | a request. | |||
| nd may vary based on resource, method, and parameters outside of CoAP such as po | A fresh request is one whose age has not yet exceeded the freshness requi | |||
| licies. The Echo option value is a challenge from the server to the client inclu | rements | |||
| ded in a CoAP response and echoed back to the server in one or more CoAP request | set by the server. The freshness requirements are application specific an | |||
| s.</t> | d may vary | |||
| <t>This mechanism is not only important in the case of actuators, or oth | based on resource, method, and parameters outside of CoAP, such as polici | |||
| er use cases where the CoAP operations require freshness of requests, but also i | es. The | |||
| n general for synchronizing state between CoAP client and server, cryptographica | Echo option value is a challenge from the server to the client included i | |||
| lly verifying the aliveness of the client, or forcing a client to demonstrate re | n a CoAP | |||
| achability at its claimed network address. The same functionality can be provide | response and echoed back to the server in one or more CoAP requests.</t> | |||
| d by echoing freshness indicators in CoAP payloads, but this only works for meth | <t>This mechanism is not only important in the case of actuators, or oth | |||
| ods and response codes defined to have a payload. The Echo option provides a con | er use | |||
| vention to transfer freshness indicators that works for all methods and response | cases where the CoAP operations require freshness of requests, but also i | |||
| codes.</t> | n general | |||
| for synchronizing state between a CoAP client and server, cryptographical | ||||
| ly | ||||
| verifying | ||||
| the aliveness of the client or forcing a client to demonstrate reachabili | ||||
| ty at its | ||||
| claimed network address. The same functionality can be provided by echoin | ||||
| g | ||||
| freshness indicators in CoAP payloads, but this only works for methods an | ||||
| d response | ||||
| codes defined to have a payload. The Echo option provides a convention to | ||||
| transfer | ||||
| freshness indicators that works for all methods and response codes.</t> | ||||
| <section anchor="echo-format" numbered="true" toc="default"> | <section anchor="echo-format" numbered="true" toc="default"> | |||
| <name>Echo Option Format</name> | <name>Echo Option Format</name> | |||
| <t>The Echo Option is elective, safe-to-forward, not part of the cache | <t>The Echo option is elective, safe to forward, not part of the cache | |||
| -key, and not repeatable, see <xref target="echo-table" format="default"/>, whic | -key, and | |||
| h extends Table 4 of <xref target="RFC7252" format="default"/>).</t> | not repeatable (see <xref target="echo-table" format="default"/>, which | |||
| <figure anchor="echo-table"> | extends | |||
| Table 4 of <xref target="RFC7252" format="default"/>).</t> | ||||
| <table anchor="echo-table" align="left"> | ||||
| <name>Echo Option Summary</name> | <name>Echo Option Summary</name> | |||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | <thead> | |||
| +--------+---+---+---+---+-------------+--------+------+---------+ | <tr> | |||
| | No. | C | U | N | R | Name | Format | Len. | Default | | <th>No.</th> | |||
| +--------+---+---+---+---+-------------+--------+------+---------+ | <th>C</th> | |||
| | TBD252 | | | x | | Echo | opaque | 1-40 | (none) | | <th>U</th> | |||
| +--------+---+---+---+---+-------------+--------+------+---------+ | <th>N</th> | |||
| <th>R</th> | ||||
| C = Critical, U = Unsafe, N = NoCacheKey, R = Repeatable | <th>Name</th> | |||
| ]]></artwork> | <th>Format</th> | |||
| </figure> | <th>Length</th> | |||
| <t>The Echo option value is generated by a server, and its content and | <th>Default</th> | |||
| structure are implementation specific. Different methods for generating Echo op | </tr> | |||
| tion values are outlined in <xref target="echo-state" format="default"/>. Client | </thead> | |||
| s and intermediaries MUST treat an Echo option value as opaque and make no assum | <tbody> | |||
| ptions about its content or structure.</t> | <tr> | |||
| <t>When receiving an Echo option in a request, the server MUST be able | <td>252</td> | |||
| to verify that the Echo option value (a) was generated by the server or some ot | <td></td> | |||
| her party that the server trusts, and (b) fulfills the freshness requirements of | <td></td> | |||
| the application. Depending on the freshness requirements the server may verify | <td>x</td> | |||
| exactly when the Echo option value was generated (time-based freshness) or verif | <td></td> | |||
| y that the Echo option was generated after a specific event (event-based freshne | <td>Echo</td> | |||
| ss). As the request is bound to the Echo option value, the server can determine | <td>opaque</td> | |||
| that the request is not older that the Echo option value.</t> | <td>1-40</td> | |||
| <t>When the Echo option is used with OSCORE <xref target="RFC8613" for | <td>(none)</td> | |||
| mat="default"/> it MAY be an Inner or Outer option, and the Inner and Outer valu | </tr> | |||
| es are independent. OSCORE servers MUST only produce Inner Echo options unless t | </tbody> | |||
| hey are merely testing for reachability of the client (the same as proxies may d | </table> | |||
| o). The Inner option is encrypted and integrity protected between the endpoints, | <t>C=Critical, U=Unsafe, N=NoCacheKey, R=Repeatable</t> | |||
| whereas the Outer option is not protected by OSCORE. As always with OSCORE, out | <t>The Echo option value is generated by a server, and its content and | |||
| er options are visible to (and may be acted on by) all proxies, and are visible | structure | |||
| on all links where no additional encryption (like TLS between client and proxy) | are implementation specific. Different methods for generating Echo opti | |||
| is used.</t> | on values | |||
| are outlined in <xref target="echo-state" format="default"/>. Clients a | ||||
| nd | ||||
| intermediaries <bcp14>MUST</bcp14> treat an Echo option value as opaque | ||||
| and make | ||||
| no assumptions about its content or structure.</t> | ||||
| <t>When receiving an Echo option in a request, the server <bcp14>MUST< | ||||
| /bcp14> be | ||||
| able to verify that the Echo option value (a) was generated by the serv | ||||
| er or some | ||||
| other party that the server trusts and (b) fulfills the freshness requi | ||||
| rements | ||||
| of the application. Depending on the freshness requirements, the server | ||||
| may verify | ||||
| exactly when the Echo option value was generated (time-based freshness) | ||||
| or verify | ||||
| that the Echo option was generated after a specific event (event-based | ||||
| freshness). As the request is bound to the Echo option value, the serve | ||||
| r can | ||||
| determine that the request is not older than the Echo option value.</t> | ||||
| <t>When the Echo option is used with OSCORE <xref target="RFC8613" | ||||
| format="default"/>, it <bcp14>MAY</bcp14> be an Inner or Outer option, | ||||
| and the | ||||
| Inner and Outer values are independent. OSCORE servers <bcp14>MUST</bcp | ||||
| 14> only | ||||
| produce Inner Echo options unless they are merely testing for reachabil | ||||
| ity of the | ||||
| client (the same as proxies may do). The Inner option is encrypted and | ||||
| integrity | ||||
| protected between the endpoints, whereas the Outer option is not protec | ||||
| ted by | ||||
| OSCORE. As always with OSCORE, Outer options are visible to (and may be | ||||
| acted on | ||||
| by) all proxies and are visible on all links where no additional encryp | ||||
| tion | ||||
| (like TLS between client and proxy) is used.</t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="echo-proc" numbered="true" toc="default"> | <section anchor="echo-proc" numbered="true" toc="default"> | |||
| <name>Echo Processing</name> | <name>Echo Processing</name> | |||
| <t>The Echo option MAY be included in any request or response (see <xref | <t>The Echo option <bcp14>MAY</bcp14> be included in any request or resp | |||
| target="echo-app" format="default"/> for different applications).</t> | onse (see | |||
| <t>The application decides under what conditions a CoAP request to a res | <xref target="echo-app" format="default"/> for different applications).</ | |||
| ource is required to be fresh. These conditions can for example include what res | t> | |||
| ource is requested, the request method and other data in the request, and condit | <t>The application decides under what conditions a CoAP request to a res | |||
| ions in the environment such as the state of the server or the time of the day.< | ource is | |||
| /t> | required to be fresh. These conditions can, for example, include what res | |||
| <t>If a certain request is required to be fresh, the request does not co | ource is | |||
| ntain a fresh Echo option value, and the server cannot verify the freshness of t | requested, the request method and other data in the request, and conditio | |||
| he request in some other way, the server MUST NOT process the request further an | ns in the | |||
| d SHOULD send a 4.01 Unauthorized response with an Echo option. The server MAY i | environment, such as the state of the server or the time of the day.</t> | |||
| nclude the same Echo option value in several different response messages and to | <t>If a certain request is required to be fresh, the request does not co | |||
| different clients. Examples of this could be time-based freshness when several r | ntain a | |||
| esponses are sent closely after each other or event-based freshness with no even | fresh Echo option value, and the server cannot verify the freshness of th | |||
| t taking place between the responses.</t> | e request | |||
| <t>The server may use request freshness provided by the Echo option to v | in some other way, the server <bcp14>MUST NOT</bcp14> process the request | |||
| erify the aliveness of a client or to synchronize state. The server may also inc | further | |||
| lude the Echo option in a response to force a client to demonstrate reachability | and <bcp14>SHOULD</bcp14> send a 4.01 (Unauthorized) response with an Ech | |||
| at its claimed network address. Note that the Echo option does not bind a reque | o option. | |||
| st to any particular previous response, but provides an indication that the clie | The server <bcp14>MAY</bcp14> include the same Echo option value in sever | |||
| nt had access to the previous response at the time when it created the request.< | al | |||
| /t> | different response messages and to different clients. Examples of this co | |||
| <t>Upon receiving a 4.01 Unauthorized response with the Echo option, the | uld be | |||
| client SHOULD resend the original request with the addition of an Echo option w | time-based freshness (when several responses are sent closely after each | |||
| ith the received Echo option value. The client MAY send a different request comp | other) or | |||
| ared to the original request. Upon receiving any other response with the Echo op | event-based freshness (with no event taking place between the responses). | |||
| tion, the client SHOULD echo the Echo option value in the next request to the se | </t> | |||
| rver. The client MAY include the same Echo option value in several different req | <t>The server may use request freshness provided by the Echo option to v | |||
| uests to the server, or discard it at any time (especially to avoid tracking, se | erify the | |||
| e <xref target="priv-cons" format="default"/>).</t> | aliveness of a client or to synchronize state. The server may also includ | |||
| <t>A client MUST only send Echo values to endpoints it received them fro | e the Echo | |||
| m (where as defined in <xref target="RFC7252" format="default"/> Section 1.2, th | option in a response to force a client to demonstrate reachability at its | |||
| e security association is part of the endpoint). In OSCORE processing, that mean | claimed | |||
| s sending Echo values from Outer options (or from non-OSCORE responses) back in | network address. Note that the Echo option does not bind a request to any | |||
| Outer options, and those from Inner options in Inner options in the same securit | particular previous response but provides an indication that the client h | |||
| y context.</t> | ad access | |||
| <t>Upon receiving a request with the Echo option, the server determines | to the previous response at the time when it created the request.</t> | |||
| if the request is required to be fresh. If not, the Echo option MAY be ignored. | <t>Upon receiving a 4.01 (Unauthorized) response with the Echo option, t | |||
| If the request is required to be fresh and the server cannot verify the freshnes | he client | |||
| s of the request in some other way, the server MUST use the Echo option to verif | <bcp14>SHOULD</bcp14> resend the original request with the addition of an | |||
| y that the request is fresh. If the server cannot verify that the request is fre | Echo | |||
| sh, the request is not processed further, and an error message MAY be sent. The | option with the received Echo option value. The client <bcp14>MAY</bcp14> | |||
| error message SHOULD include a new Echo option.</t> | send a | |||
| <t>One way for the server to verify freshness is to bind the Echo value | different request compared to the original request. Upon receiving any ot | |||
| to a specific point in time and verify that the request is not older than a cert | her | |||
| ain threshold T. The server can verify this by checking that (t1 - t0) < T, w | response with the Echo option, the client <bcp14>SHOULD</bcp14> echo the | |||
| here t1 is the request receive time and t0 is the time when the Echo option valu | Echo | |||
| e was generated. An example message flow over DTLS is shown <xref target="echo-f | option value in the next request to the server. The client <bcp14>MAY</bc | |||
| igure-time" format="default"/>.</t> | p14> | |||
| include the same Echo option value in several different requests to the s | ||||
| erver or | ||||
| discard it at any time (especially to avoid tracking; see <xref target="p | ||||
| riv-cons" | ||||
| format="default"/>).</t> | ||||
| <t>A client <bcp14>MUST</bcp14> only send Echo option values to endpoint | ||||
| s it | ||||
| received them | ||||
| from (where, as defined in <xref target="RFC7252" section="1.2" | ||||
| sectionFormat="of"/>, the security association is part of the endpoint). | ||||
| In | ||||
| OSCORE processing, that means sending Echo option values from Outer optio | ||||
| ns (or | ||||
| from non-OSCORE responses) back in Outer options and sending those from I | ||||
| nner | ||||
| options in Inner options in the same security context.</t> | ||||
| <t>Upon receiving a request with the Echo option, the server determines | ||||
| if the | ||||
| request is required to be fresh. If not, the Echo option <bcp14>MAY</bcp1 | ||||
| 4> be | ||||
| ignored. If the request is required to be fresh and the server cannot ver | ||||
| ify the | ||||
| freshness of the request in some other way, the server <bcp14>MUST</bcp14 | ||||
| > use the | ||||
| Echo option to verify that the request is fresh. If the server cannot ver | ||||
| ify that | ||||
| the request is fresh, the request is not processed further, and an error | ||||
| message | ||||
| <bcp14>MAY</bcp14> be sent. The error message <bcp14>SHOULD</bcp14> inclu | ||||
| de a new | ||||
| Echo option.</t> | ||||
| <t>One way for the server to verify freshness is to bind the Echo option | ||||
| value to a | ||||
| specific point in time and verify that the request is not older than a ce | ||||
| rtain | ||||
| threshold T. The server can verify this by checking that (t1 - t0) < T | ||||
| , where t1 | ||||
| is the request receive time and t0 is the time when the Echo option value | ||||
| was | ||||
| generated. An example message flow over DTLS is shown <xref | ||||
| target="echo-figure-time" format="default"/>.</t> | ||||
| <figure anchor="echo-figure-time"> | <figure anchor="echo-figure-time"> | |||
| <name>Example Message Flow for Time-Based Freshness using the 'Integri | <name>Example Message Flow for Time-Based Freshness Using the | |||
| ty Protected Timestamp' construction of Appendix A</name> | 'Integrity&nbhy;Protected Timestamp' Construction of Appendix A</name> | |||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
| Client Server | Client Server | |||
| | | | | | | |||
| +------>| Code: 0.03 (PUT) | +------>| Code: 0.03 (PUT) | |||
| | PUT | Token: 0x41 | | PUT | Token: 0x41 | |||
| | | Uri-Path: lock | | | Uri-Path: lock | |||
| | | Payload: 0 (Unlock) | | | Payload: 0 (Unlock) | |||
| | | | | | | |||
| |<------+ Code: 4.01 (Unauthorized) | |<------+ Code: 4.01 (Unauthorized) | |||
| | 4.01 | Token: 0x41 | | 4.01 | Token: 0x41 | |||
| skipping to change at line 145 ¶ | skipping to change at line 323 ¶ | |||
| | | Echo: 0x00000009437468756c687521 (t0 = 9, +MAC) | | | Echo: 0x00000009437468756c687521 (t0 = 9, +MAC) | |||
| | | Payload: 0 (Unlock) | | | Payload: 0 (Unlock) | |||
| | | | | | | |||
| | | Verify MAC, compare t1 - t0 = 1 < T => permitted. | | | Verify MAC, compare t1 - t0 = 1 < T => permitted. | |||
| | | | | | | |||
| |<------+ Code: 2.04 (Changed) | |<------+ Code: 2.04 (Changed) | |||
| | 2.04 | Token: 0x42 | | 2.04 | Token: 0x42 | |||
| | | | | | | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure> | </figure> | |||
| <t>Another way for the server to verify freshness is to maintain a cache | ||||
| of values associated to events. The size of the cache is defined by the applica | <t>Another way for the server to verify freshness is to maintain a cache | |||
| tion. In the following we assume the cache size is 1, in which case freshness is | of values | |||
| defined as no new event has taken place. At each event a new value is written i | associated to events. The size of the cache is defined by the application | |||
| nto the cache. The cache values MUST be different except with negligible probabi | . In the | |||
| lity. The server verifies freshness by checking that e0 equals e1, where e0 is t | following, we assume the cache size is 1, in which case, freshness is def | |||
| he cached value when the Echo option value was generated, and e1 is the cached v | ined as | |||
| alue at the reception of the request. An example message flow over DTLS is shown | "no new event has taken place". At each event, a new value is written int | |||
| in <xref target="echo-figure-event" format="default"/>.</t> | o the | |||
| cache. The cache values <bcp14>MUST</bcp14> be different or chosen in a w | ||||
| ay so the | ||||
| probability for collisions is negligible. | ||||
| The server verifies freshness by checking that e0 equals e1, where e0 is | ||||
| the cached | ||||
| value when the Echo option value was generated, and e1 is the cached valu | ||||
| e at the | ||||
| reception of the request. An example message flow over DTLS is shown in < | ||||
| xref | ||||
| target="echo-figure-event" format="default"/>.</t> | ||||
| <figure anchor="echo-figure-event"> | <figure anchor="echo-figure-event"> | |||
| <name>Example Message Flow for Event-Based Freshness using the 'Persis | <name>Example Message Flow for Event-Based Freshness Using the 'Persis | |||
| tent Counter' construction of Appendix A</name> | tent | |||
| Counter' Construction of Appendix A</name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
| Client Server | Client Server | |||
| | | | | | | |||
| +------>| Code: 0.03 (PUT) | +------>| Code: 0.03 (PUT) | |||
| | PUT | Token: 0x41 | | PUT | Token: 0x41 | |||
| | | Uri-Path: lock | | | Uri-Path: lock | |||
| | | Payload: 0 (Unlock) | | | Payload: 0 (Unlock) | |||
| | | | | | | |||
| |<------+ Code: 4.01 (Unauthorized) | |<------+ Code: 4.01 (Unauthorized) | |||
| | 4.01 | Token: 0x41 | | 4.01 | Token: 0x41 | |||
| skipping to change at line 175 ¶ | skipping to change at line 364 ¶ | |||
| | PUT | Token: 0x42 | | PUT | Token: 0x42 | |||
| | | Uri-Path: lock | | | Uri-Path: lock | |||
| | | Echo: 0x05 | | | Echo: 0x05 | |||
| | | Payload: 0 (Unlock) | | | Payload: 0 (Unlock) | |||
| | | | | | | |||
| | | Compare e1 = e0 => permitted. | | | Compare e1 = e0 => permitted. | |||
| | | | | | | |||
| |<------+ Code: 2.04 (Changed) | |<------+ Code: 2.04 (Changed) | |||
| | 2.04 | Token: 0x42 | | 2.04 | Token: 0x42 | |||
| | | Echo: 0x06 (e2 = 6, to allow later locking | | | Echo: 0x06 (e2 = 6, to allow later locking | |||
| | | without more round-trips) | | | without more round trips) | |||
| | | | | | | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure> | </figure> | |||
| <t>When used to serve freshness requirements (including client aliveness | <t>When used to serve freshness requirements (including client aliveness | |||
| and state synchronizing), the Echo option value MUST be integrity protected bet | and state | |||
| ween the intended endpoints, e.g. using DTLS, TLS, or an OSCORE Inner option (<x | synchronizing), the Echo option value <bcp14>MUST</bcp14> be integrity pr | |||
| ref target="RFC8613" format="default"/>). When used to demonstrate reachability | otected | |||
| at a claimed network address, the Echo option SHOULD be a MAC of the claimed add | between the intended endpoints, e.g., using DTLS, TLS, or an OSCORE Inner | |||
| ress, but MAY be unprotected. Combining different Echo applications can necessit | option | |||
| ate different choices, see <xref target="echo-state" format="default"/> item 2 f | <xref target="RFC8613" format="default"/>. | |||
| or an example.</t> | When used to demonstrate reachability | |||
| <t>An Echo option MAY be sent with a successful response, | at a claimed network address, the Echo option <bcp14>SHOULD</bcp14> be a | |||
| i.e., even though the request satisfied any freshness requirements on the operat | Message | |||
| ion. | Authentication Code (MAC) of the | |||
| This is called a "preemptive" Echo value, | claimed address but <bcp14>MAY</bcp14> be unprotected. Combining differen | |||
| and useful when the server anticipates that the client will need to demonstrate | t Echo | |||
| freshness relative to the current response the near future.</t> | applications can necessitate different choices; see <xref target="echo-st | |||
| <t>A CoAP-to-CoAP proxy MAY set an Echo option on responses, both on for | ate" | |||
| warded ones that had no Echo option or ones generated by the proxy (from cache o | format="default"/>, item 2 for an example.</t> | |||
| r as an error). If it does so, it MUST remove the Echo option it recognizes as o | <t>An Echo option <bcp14>MAY</bcp14> be sent with a successful response, | |||
| ne generated by itself on follow-up requests. When it receives an Echo option in | i.e., even though | |||
| a response, it MAY forward it to the client (and, not recognizing it as an own | the request satisfied any freshness requirements on the operation. This i | |||
| in future requests, relay it in the other direction as well) or process it on it | s called a | |||
| s own. | "preemptive" Echo option value and is useful when the server anticipates | |||
| If it does so, it MUST ensure that the client's request was generated (or is re- | that the client | |||
| generated) after the Echo value used to send to the server was first seen. | will need to demonstrate freshness relative to the current response in th | |||
| (In most cases, this means that the proxy needs to ask the client to repeat the | e near future.</t> | |||
| request with a new Echo value.)</t> | <t>A CoAP-to-CoAP proxy <bcp14>MAY</bcp14> set an Echo option on response | |||
| <t>The CoAP server side of CoAP-to-HTTP proxies MAY request freshness, e | s, both on | |||
| specially if they have reason to assume that access may require it (e.g. because | forwarded ones that had no Echo option or ones generated by the proxy (fr | |||
| it is a PUT or POST); how this is determined is out of scope for this document. | om cache | |||
| The CoAP client side of HTTP-to-CoAP proxies MUST respond to Echo challenges it | or as an error). If it does so, it <bcp14>MUST</bcp14> remove the Echo op | |||
| self if the proxy knows from the recent establishing of the connection that the | tion it | |||
| HTTP request is fresh. Otherwise, it MUST NOT repeat an unsafe request and SHOUL | recognizes as one generated by itself on follow-up requests. When it rece | |||
| D respond with 503 Service Unavailable, Retry-After: 0 and terminate any underly | ives an | |||
| ing Keep-Alive connection. If the HTTP request arrived in Early Data, the proxy | Echo option in a response, it <bcp14>MAY</bcp14> forward it to the client | |||
| SHOULD use a 425 Too Early response instead (see <xref target="RFC8470" format=" | (and, not | |||
| default"/>). They MAY also use other mechanisms to establish freshness of the HT | recognizing it as its own in future requests, relay it in the other direc | |||
| TP request that are not specified here.</t> | tion as | |||
| well) or process it on its own. If it does so, it <bcp14>MUST</bcp14> ens | ||||
| ure that | ||||
| the client's request was generated (or is regenerated) after the Echo opt | ||||
| ion value | ||||
| used | ||||
| to send to the server was first seen. (In most cases, this means that the | ||||
| proxy | ||||
| needs to ask the client to repeat the request with a new Echo option valu | ||||
| e.)</t> | ||||
| <t>The CoAP server side of CoAP-to-HTTP proxies <bcp14>MAY</bcp14> reques | ||||
| t | ||||
| freshness, especially if they have reason to assume that access may requi | ||||
| re it | ||||
| (e.g., because it is a PUT or POST); how this is determined is out of sco | ||||
| pe for this | ||||
| document. The CoAP client side of HTTP-to-CoAP proxies <bcp14>MUST</bcp14 | ||||
| > respond | ||||
| to Echo challenges itself if the proxy knows from the recent establishing | ||||
| of the | ||||
| connection that the HTTP request is fresh. Otherwise, it <bcp14>MUST NOT< | ||||
| /bcp14> | ||||
| repeat an unsafe request and <bcp14>SHOULD</bcp14> respond with a 503 (Se | ||||
| rvice | ||||
| Unavailable) with a Retry-After value of 0 seconds and terminate any unde | ||||
| rlying | ||||
| Keep-Alive connection. If | ||||
| the HTTP request arrived in early data, the proxy <bcp14>SHOULD</bcp14> u | ||||
| se a 425 | ||||
| (Too Early) response instead (see <xref target="RFC8470" format="default" | ||||
| />). The | ||||
| proxy <bcp14>MAY</bcp14> also use other mechanisms to establish freshness | ||||
| of the | ||||
| HTTP request that are not specified here.</t> | ||||
| </section> | </section> | |||
| <section anchor="echo-app" numbered="true" toc="default"> | <section anchor="echo-app" numbered="true" toc="default"> | |||
| <name>Applications of the Echo Option</name> | <name>Applications of the Echo Option</name> | |||
| <t>Unless otherwise noted, | <t>Unless otherwise noted, all these applications require a security pro | |||
| all these applications require a security protocol to be used, | tocol to be | |||
| and the Echo option to be protected by it.</t> | used and the Echo option to be protected by it.</t> | |||
| <ol spacing="normal" type="1"> | <ol spacing="normal" type="1"> | |||
| <li> | <li> | |||
| <t>Actuation requests often require freshness guarantees to avoid ac | <t>Actuation requests often require freshness guarantees to avoid ac | |||
| cidental or malicious delayed actuator actions. In general, all non-safe methods | cidental or | |||
| (e.g. POST, PUT, DELETE) may require freshness guarantees for secure operation. | malicious delayed actuator actions. In general, all unsafe methods (e | |||
| </t> | .g., | |||
| POST, PUT, and DELETE) may require freshness guarantees for secure op | ||||
| eration. | ||||
| </t> | ||||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li>The same Echo value may be used for multiple actuation request | <li>The same Echo option value may be used for multiple actuation | |||
| s to the same server, as long as the total time since the Echo option value was | requests | |||
| generated is below the freshness threshold.</li> | to the | |||
| <li>For actuator applications with low delay tolerance, to avoid a | same server, as long as the total time since the Echo option value | |||
| dditional round-trips for multiple requests in rapid sequence, the server may se | was | |||
| nd preemptive Echo values in successful requests, irrespectively of whether the | generated is below the freshness threshold.</li> | |||
| request contained an Echo option or not. The client then uses the Echo option wi | <li>For actuator applications with low delay tolerance, to avoid a | |||
| th the new value in the next actuation request, and the server compares the rece | dditional | |||
| ive time accordingly.</li> | round trips for multiple requests in rapid sequence, the server may | |||
| send | ||||
| preemptive Echo option values in successful requests, irrespectivel | ||||
| y of | ||||
| whether or not the | ||||
| request contained an Echo option. The client then uses the Echo opt | ||||
| ion | ||||
| with the new value in the next actuation request, and the server co | ||||
| mpares the | ||||
| receive time accordingly.</li> | ||||
| </ul> | </ul> | |||
| </li> | </li> | |||
| <li> | <li> | |||
| <t>A server may use the Echo option to synchronize properties (such | <t>A server may use the Echo option to synchronize properties (such | |||
| as state or time) with a requesting client. A server MUST NOT synchronize a prop | as state or | |||
| erty with a client which is not the authority of the property being synchronized | time) with a requesting client. A server <bcp14>MUST NOT</bcp14> sync | |||
| . E.g. if access to a server resource is dependent on time, then server MUST NOT | hronize a | |||
| synchronize time with a client requesting access unless the client is time auth | property with a client that is not the authority of the property bein | |||
| ority for the server. </t> | g | |||
| <t> | synchronized. For example, if access to a server resource is dependen | |||
| Note that the state to be synchronized is not carried inside the Echo option. | t on time, | |||
| Any explicit state information needs to be carried along in the messages the Ec | then the server <bcp14>MUST NOT</bcp14> synchronize time with a clien | |||
| ho value is sent in; | t | |||
| the Echo mechanism only provides a partial order on the messages' processing. | requesting access unless the client is a time authority for the serve | |||
| </t> | r. </t> | |||
| <t>Note that the state to be synchronized is not carried inside the | ||||
| Echo option. | ||||
| Any explicit state information needs to be carried along in the messa | ||||
| ges the | ||||
| Echo option value is sent in; the Echo mechanism only provides a part | ||||
| ial order | ||||
| on the messages' processing. </t> | ||||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li>If a server reboots during operation it may need to synchroniz | <li>If a server reboots during operation, it may need to synchroni | |||
| e state or time before continuing the interaction. For example, with OSCORE it i | ze | |||
| s possible to reuse a partly persistently stored security context by synchronizi | state or | |||
| ng the Partial IV (sequence number) using the Echo option as specified in Sectio | time before continuing the interaction. For example, with OSCORE, i | |||
| n 7.5 of <xref target="RFC8613" format="default"/>.</li> | t is | |||
| <li>A device joining a CoAP group communication <xref target="I-D. | possible to reuse a partly persistently stored security context by | |||
| ietf-core-groupcomm-bis" format="default"/> protected with OSCORE <xref target=" | synchronizing the Partial IV (sequence number) using the Echo optio | |||
| I-D.ietf-core-oscore-groupcomm" format="default"/> may be required to initially | n, as | |||
| synchronize its replay window state with a client by using the Echo option in a | specified in <xref target="RFC8613" sectionFormat="of" section="7.5 | |||
| unicast response to a multicast request. The client receiving the response with | "/>.</li> | |||
| the Echo option includes the Echo value in a subsequent unicast request to the r | <li>A device joining a CoAP group communication <xref | |||
| esponding server.</li> | target="I-D.ietf-core-groupcomm-bis" format="default"/> protected w | |||
| ith OSCORE | ||||
| <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/> ma | ||||
| y be | ||||
| required to initially synchronize its replay window state with a cl | ||||
| ient by | ||||
| using the Echo option in a unicast response to a multicast request. | ||||
| The | ||||
| client receiving the response with the Echo option includes the Ech | ||||
| o option | ||||
| value in a subsequent unicast request to the responding server.</li | ||||
| > | ||||
| </ul> | </ul> | |||
| </li> | </li> | |||
| <li> | <li> | |||
| <t>An attacker can perform a denial-of-service attack by putting a v | <t>An attacker can perform a denial-of-service attack by putting a v | |||
| ictim's address in the source address of a CoAP request and sending the request | ictim's | |||
| to a resource with a large amplification factor. The amplification factor is the | address in the source address of a CoAP request and sending the reque | |||
| ratio between the size of the request and the total size of the response(s) to | st to a | |||
| that request. A server that provides a large amplification factor to an unauthen | resource with a large amplification factor. The amplification factor | |||
| ticated peer SHOULD mitigate amplification attacks as described in Section 11.3 | is the | |||
| of <xref target="RFC7252" format="default"/>. One way to mitigate such attacks i | ratio between the size of the request and the total size of the respo | |||
| s that the server responds to the alleged source address of the request with an | nse(s) to | |||
| Echo option in short response message (e.g. 4.01 Unauthorized), thereby requesti | that request. A server that provides a large amplification factor to | |||
| ng the client to verify its source address. This needs to be done only once per | an | |||
| endpoint and limits the range of potential victims from the general Internet to | unauthenticated peer <bcp14>SHOULD</bcp14> mitigate amplification att | |||
| endpoints that have been previously in contact with the server. For this applica | acks, as | |||
| tion, the Echo option can be used in messages that are not integrity protected, | described in <xref target="RFC7252" sectionFormat="of" section="11.3" | |||
| for example during discovery. (This is formally recommended in <xref target="amp | />. One way | |||
| l-mit" format="default"/>). </t> | to mitigate such attacks is for the server to respond to the alleged | |||
| source | ||||
| address of the request with an Echo option in a short response messag | ||||
| e (e.g., | ||||
| 4.01 (Unauthorized)), thereby requesting the client to verify its sou | ||||
| rce | ||||
| address. This | ||||
| needs to be done only once per endpoint and limits the range of poten | ||||
| tial | ||||
| victims from the general Internet to endpoints that have been previou | ||||
| sly in | ||||
| contact with the server. For this application, the Echo option can be | ||||
| used in | ||||
| messages that are not integrity protected, for example, during discov | ||||
| ery. (This | ||||
| is formally recommended in <xref target="ampl-mit" format="default"/> | ||||
| .)</t> | ||||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li>In the presence of a proxy, a server will not be able to disti | <li>In the presence of a proxy, a server will not be able to disti | |||
| nguish different origin client endpoints. Following from the recommendation abov | nguish | |||
| e, a proxy that provides a large amplification factor to unauthenticated peers S | different origin client endpoints, i.e., the client from which a re | |||
| HOULD mitigate amplification attacks. The proxy SHOULD use Echo to verify origin | quest | |||
| reachability as described in <xref target="echo-proc" format="default"/>. The p | originates. Following from the recommendation above, a | |||
| roxy MAY forward safe requests immediately to have a cached result available whe | proxy that provides a large amplification factor to unauthenticated | |||
| n the client's repeated request arrives.</li> | peers | |||
| <bcp14>SHOULD</bcp14> mitigate amplification attacks. The proxy | ||||
| <bcp14>SHOULD</bcp14> use the Echo option to verify origin reachabi | ||||
| lity, as | ||||
| described in | ||||
| <xref target="echo-proc" format="default"/>. The proxy <bcp14>MAY</ | ||||
| bcp14> | ||||
| forward safe requests immediately to have a cached result available | ||||
| when the | ||||
| client's repeated request arrives.</li> | ||||
| <li> | <li> | |||
| <t>Amplification mitigation is a trade-off between giving levera | <t>Amplification mitigation is a trade-off between giving levera | |||
| ge to an attacker and causing overhead. | ge to an | |||
| An amplification factor of 3 (i.e., don't send more than three times the number | attacker and causing overhead. An amplification factor of 3 (i.e. | |||
| of bytes received until the peer's address is confirmed) | , don't | |||
| is considered acceptable for unconstrained applications in <xref target="RFC9000 | send more than three times the number of bytes received until the | |||
| " format="default"/> Section 8. </t> | peer's | |||
| <t> | address is confirmed) is considered acceptable for unconstrained | |||
| When that limit is applied and no further context is available, | applications in <xref target="RFC9000" sectionFormat="comma" | |||
| a safe default is sending initial responses no larger than 136 Bytes in CoAP ser | section="8"/>.</t> | |||
| ialization. | <t>When that limit is applied and no further context is available | |||
| (The number is assuming a 14 + 40 + 8 Bytes Ethernet, IP and UDP header | , a safe | |||
| with 4 Bytes added for the CoAP header. Triple that minus the non-CoAP headers g | default is sending initial responses no larger than 136 bytes in | |||
| ives the 136 Bytes). | CoAP | |||
| Given the token also takes up space in the request, responding with 132 Bytes af | serialization. (The number is assuming Ethernet, IP, and UDP head | |||
| ter the token is safe as well.</t> | ers of | |||
| 14, 40, and 8 bytes, respectively, with 4 bytes added for the CoA | ||||
| P header. | ||||
| Triple that minus the | ||||
| non-CoAP headers gives the 136 bytes.) Given the token also takes | ||||
| up space | ||||
| in the request, responding with 132 bytes after the token is safe | ||||
| as | ||||
| well.</t> | ||||
| </li> | </li> | |||
| <li>When an Echo response is sent to mitigate amplification, | <li>When an Echo response is sent to mitigate amplification, it | |||
| it MUST be sent as a piggybacked or Non-confirmable response, | <bcp14>MUST</bcp14> be sent as a piggybacked or Non-confirmable res | |||
| never as a separate one (which would cause amplification due to retransmission). | ponse, | |||
| </li> | never as a separate one (which would cause amplification due to | |||
| retransmission).</li> | ||||
| </ul> | </ul> | |||
| </li> | </li> | |||
| <li>A server may want to use the request freshness provided by the Ech | <li>A server may want to use the request freshness provided by the Ech | |||
| o to verify the aliveness of a client. Note that in a deployment with hop-by-hop | o option | |||
| security and proxies, the server can only verify aliveness of the closest proxy | to verify the aliveness of a client. Note that, in a deployment with ho | |||
| .</li> | p-by-hop | |||
| security and proxies, the server can only verify aliveness of the close | ||||
| st | ||||
| proxy.</li> | ||||
| </ol> | </ol> | |||
| </section> | </section> | |||
| <section anchor="characterization-of-echo-applications" numbered="true" to c="default"> | <section anchor="characterization-of-echo-applications" numbered="true" to c="default"> | |||
| <name>Characterization of Echo Applications</name> | <name>Characterization of Echo Applications</name> | |||
| <t>Use cases for the Echo option | <t>Use cases for the Echo option can be characterized by several criteri | |||
| can be characterized by several criteria that help determine the required proper | a that help | |||
| ties of the Echo value. | determine the required properties of the Echo option value. These criteri | |||
| These criteria apply both to those listed in <xref target="echo-app" format="def | a apply | |||
| ault"/> and any novel applications. | both to those listed in <xref target="echo-app" format="default"/> and an | |||
| They provide rationale for the statements in the former, and guidance for the la | y novel | |||
| tter.</t> | applications. They provide rationale for the statements in the former and | |||
| guidance | ||||
| for the latter.</t> | ||||
| <section anchor="time-versus-event-based-freshness" numbered="true" toc= "default"> | <section anchor="time-versus-event-based-freshness" numbered="true" toc= "default"> | |||
| <name>Time versus Event Based Freshness</name> | <name>Time-Based versus Event-Based Freshness</name> | |||
| <t>The property a client demonstrates by sending an Echo value is that | <t>The property a client demonstrates by sending an Echo option value | |||
| the request was sent | is that the | |||
| after a certain point in time, | request was sent after a certain point in time or after some event happ | |||
| or after some event happened on the server.</t> | ened on | |||
| <t>When events are counted, | the server.</t> | |||
| they form something that can be used as a monotonic but very non-uniform time li | <t>When events are counted, they form something that can be used as a | |||
| ne. | monotonic | |||
| With highly regular events and low-resolution time, | but very non-uniform time line. With highly regular events and low-reso | |||
| the distinction between time and event based freshness can be blurred: | lution | |||
| "No longer than a month ago" is similar to "since the last full moon".</t> | time, the distinction between time-based and event-based freshness can | |||
| <t>In an extreme form of event based freshness, | be blurred: | |||
| the server can place an event whenever an Echo value is used. | "no longer than a month ago" is similar to "since the last full moon".< | |||
| This makes the Echo value effectively single-use.</t> | /t> | |||
| <t>Event and time based freshness can be combined in a single Echo val | <t>In an extreme form of event-based freshness, | |||
| ue, | the server can place an event whenever an Echo option value is used. | |||
| e.g. by encrypting a timestamp with a key that changes with every event | This makes the Echo option value effectively single use.</t> | |||
| to obtain "usable once but only for 5 minutes"-style semantics.</t> | <t>Event-based and time-based freshness can be combined in a single Ec | |||
| ho option | ||||
| value, | ||||
| e.g., by encrypting a timestamp with a key that changes with every even | ||||
| t | ||||
| to obtain semantics in the style of "usable once but only for 5 minutes | ||||
| ".</t> | ||||
| </section> | </section> | |||
| <section anchor="source-of-truth" numbered="true" toc="default"> | <section anchor="source-of-truth" numbered="true" toc="default"> | |||
| <name>Authority over Used Information</name> | <name>Authority over Used Information</name> | |||
| <t>Information conveyed to the server in the request Echo value | <t>Information conveyed to the server in the request Echo option value | |||
| has different authority depending on the application. | has | |||
| Understanding who or what is the authoritative source of that information helps | different | |||
| the server implementer decide the necessary protection of the Echo value.</t> | authority depending on the application. Understanding who or what is th | |||
| <t>If all that is conveyed to the server is information which the clie | e | |||
| nt is authorized to provide arbitrarily, | authoritative source of that information helps the server implementor d | |||
| (which is another way of saying that the server has to trust the client on whate | ecide the | |||
| ver Echo is being used for), | necessary protection of the Echo option value.</t> | |||
| then the server can issue Echo values that do not need to be protected on their | <t>If all that is conveyed to the server is information that the clien | |||
| own. | t is | |||
| They still need to be covered by the security protocol that covers the rest of t | authorized to provide arbitrarily (which is another way of saying that | |||
| he message, | the | |||
| but the Echo value can be just short enough to be unique between this server and | server has to trust the client on whatever the Echo option is being use | |||
| client.</t> | d for), | |||
| <t>For example, | then the server can issue Echo option values that do not need to be pro | |||
| the client's OSCORE sender sequence number (as used in <xref target="RFC8613" fo | tected on | |||
| rmat="default"/> Appendix B.1.2) is such information.</t> | their own. They still need to be covered by the security protocol that | |||
| <t>In most other cases, | covers | |||
| there is information conveyed for which the server is the authority | the rest of the message, but the Echo option value can be just short en | |||
| ("The request must not be older than five minutes" is counted on the server's cl | ough to | |||
| ock, not the client's) | be unique between this server and client.</t> | |||
| or which even involve the network | <t>For example, the client's OSCORE Sender Sequence Number (as used in | |||
| (as when performing amplification mitigation). | <xref | |||
| In these cases, the Echo value itself needs to be protected against forgery by t | target="RFC8613" sectionFormat="comma" section="B.1.2"/>) is such infor | |||
| he client, | mation.</t> | |||
| e.g. by using a sufficiently large random value or a MAC as described in <xref t | <t>In most other cases, there is information conveyed for which the se | |||
| arget="echo-state" format="default"/> items 1 and 2.</t> | rver is the | |||
| <t>For some applications, | authority ("the request must not be older than five minutes" is counted | |||
| the server may be able to trust the client to also act as the authority | on the | |||
| (e.g. when using time based freshness purely to mitigate request delay attacks); | server's clock, not the client's) or which even involve the network (as | |||
| these need careful case-by-case evaluation. | when | |||
| <!-- RD's registration state is an example; RD may need to provide that evaluati | performing amplification mitigation). In these cases, the Echo option v | |||
| on now. --> | alue | |||
| itself needs | ||||
| to be protected against forgery by the client, e.g., by using a suffici | ||||
| ently | ||||
| large, random value or a MAC, as described in <xref target="echo-state" | ||||
| format="default"/>, items 1 and 2.</t> | ||||
| <t>For some applications, the server may be able to trust the client t | ||||
| o also act | ||||
| as the authority (e.g., when using time-based freshness purely to mitig | ||||
| ate request | ||||
| delay attacks); these need careful case-by-case evaluation. | ||||
| </t> | </t> | |||
| <t>To issue Echo values without own protection, | ||||
| the server needs to trust the client to never produce requests with attacker con | <t>To issue Echo option values without integrity protection of its own, | |||
| trolled Echo values. | the server needs to trust the | |||
| The provisions of <xref target="echo-proc" format="default"/> (saying that an Ec | client to never produce requests with attacker-controlled Echo option v | |||
| ho value may only be sent as received from the same server) | alues. | |||
| allow that. | The provisions of <xref target="echo-proc" format="default"/> (saying t | |||
| The requirement stated there for the client to treat the Echo value as opaque ho | hat an | |||
| lds for these application like for all others.</t> | Echo option value may only be sent as received from the same server) al | |||
| low that. | ||||
| The requirement stated there for the client to treat the Echo option va | ||||
| lue as | ||||
| opaque | ||||
| holds for these applications like for all others.</t> | ||||
| <t>When the client is the sole authority over the synchronized propert y, | <t>When the client is the sole authority over the synchronized propert y, | |||
| the server can still use time or events to issue new Echo values. | the server can still use time or events to issue new Echo option values | |||
| Then, the request's Echo value not so much proves the indicated freshness to the | . | |||
| server, | Then, the request's Echo option value not so much proves the indicated | |||
| but reflects the client's intention to indicate reception of responses containin | freshness | |||
| g that value when sending the later ones.</t> | to the | |||
| <t>Note that a single Echo value can be used for multiple purposes | server but reflects the client's intention to indicate reception of res | |||
| (e.g. to get both the sequence number information and perform amplification miti | ponses | |||
| gation). | containing that value when sending the later ones.</t> | |||
| In this case the stricter protection requirements apply.</t> | <t>Note that a single Echo option value can be used for multiple purpo | |||
| ses (e.g., | ||||
| to both get | ||||
| the sequence number information and perform amplification mitigation). | ||||
| In | ||||
| this case, the stricter protection requirements apply.</t> | ||||
| </section> | </section> | |||
| <section anchor="protection-by-a-security-protocol" numbered="true" toc= "default"> | <section anchor="protection-by-a-security-protocol" numbered="true" toc= "default"> | |||
| <name>Protection by a Security Protocol</name> | <name>Protection by a Security Protocol</name> | |||
| <t>For meaningful results, the Echo option needs to be used in combina | <t>For meaningful results, the Echo option needs to be used in combina | |||
| tion with a security protocol in almost all applications.</t> | tion with a | |||
| <t>When the information extracted by the server | security protocol in almost all applications.</t> | |||
| is only about a part of the system outside of any security protocol, | <t>When the information extracted by the server is only about a part o | |||
| then the Echo option can also be used without a security protocol | f the | |||
| (in case of OSCORE, as an outer option).</t> | system outside of any security protocol, then the Echo option can also | |||
| <t>The only known application satisfying this requirement is network a | be used | |||
| ddress reachability, | without a security protocol (in case of OSCORE, as an Outer option).</t | |||
| where unprotected Echo values are used both by servers (e.g. during setup of a s | > | |||
| ecurity context) | <t>The only known application satisfying this requirement is network a | |||
| and proxies (which do not necessarily have a security association with their cli | ddress | |||
| ents) | reachability, where unprotected Echo option values are used both by ser | |||
| for amplification mitigation.</t> | vers | |||
| (e.g., during | ||||
| setup of a security context) and proxies (which do not necessarily have | ||||
| a | ||||
| security association with their clients) for amplification mitigation.< | ||||
| /t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="ampl-mit" numbered="true" toc="default"> | <section anchor="ampl-mit" numbered="true" toc="default"> | |||
| <name>Updated Amplification Mitigation Requirements for Servers</name> | <name>Updated Amplification Mitigation Requirements for Servers</name> | |||
| <t>This section updates the amplification mitigation requirements for se | <t>This section updates the amplification mitigation requirements for se | |||
| rvers in <xref target="RFC7252" format="default"/> to recommend use of the Echo | rvers in | |||
| option to mitigate amplification attacks. The requirements for clients are not u | <xref target="RFC7252" format="default"/> to recommend the use of the Ech | |||
| pdated. Section 11.3 of <xref target="RFC7252" format="default"/> is updated by | o option to | |||
| adding the following text:</t> | mitigate amplification attacks. The requirements for clients are not upda | |||
| <t>A CoAP server SHOULD mitigate potential amplification attacks by resp | ted. <xref | |||
| onding to unauthenticated clients with 4.01 Unauthorized including an Echo optio | target="RFC7252" sectionFormat="of" section="11.3"/> is updated by adding | |||
| n, as described in <xref target="echo-app" format="default"/> item 3 of [[this d | the | |||
| ocument]].</t> | following text:</t> | |||
| <blockquote>A CoAP server <bcp14>SHOULD</bcp14> mitigate potential ampli | ||||
| fication | ||||
| attacks by responding to unauthenticated clients with 4.01 (Unauthorized) | ||||
| including | ||||
| an Echo option, as described in item 3 in <xref target="echo-app" | ||||
| format="default"/> of RFC 9175.</blockquote> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="request-tag" numbered="true" toc="default"> | <section anchor="request-tag" numbered="true" toc="default"> | |||
| <name>Protecting Message Bodies using Request Tags</name> | <name>Protecting Message Bodies Using Request Tags</name> | |||
| <section anchor="body-int" numbered="true" toc="default"> | <section anchor="body-int" numbered="true" toc="default"> | |||
| <name>Fragmented Message Body Integrity</name> | <name>Fragmented Message Body Integrity</name> | |||
| <t>CoAP was designed to work over unreliable transports, such as UDP, an | <t>CoAP was designed to work over unreliable transports, such as UDP, an | |||
| d includes a lightweight reliability feature to handle messages which are lost o | d includes | |||
| r arrive out of order. In order for a security protocol to support CoAP operatio | a lightweight reliability feature to handle messages that are lost or arr | |||
| ns over unreliable transports, it must allow out-of-order delivery of messages.< | ive out | |||
| /t> | of order. In order for a security protocol to support CoAP operations ove | |||
| <t>The block-wise transfer mechanism <xref target="RFC7959" format="defa | r | |||
| ult"/> extends CoAP by defining the transfer of a large resource representation | unreliable transports, it must allow out-of-order delivery of messages.</ | |||
| (CoAP message body) as a sequence of blocks (CoAP message payloads). The mechani | t> | |||
| sm uses a pair of CoAP options, Block1 and Block2, pertaining to the request and | ||||
| response payload, respectively. The block-wise functionality does not support t | <t>The block-wise transfer mechanism <xref target="RFC7959" format="defau | |||
| he detection of interchanged blocks between different message bodies to the same | lt"/> | |||
| resource having the same block number. This remains true even when CoAP is used | extends CoAP by defining the transfer of a large resource representation | |||
| together with a security protocol such as DTLS or OSCORE, within the replay win | (CoAP | |||
| dow (<xref target="I-D.mattsson-core-coap-attacks" format="default"/>), which is | message body) as a sequence of blocks (CoAP message payloads). The mechan | |||
| a vulnerability of CoAP when using RFC7959.</t> | ism uses a | |||
| <t>A straightforward mitigation of mixing up blocks from different messa | pair of CoAP options, Block1 and Block2, pertaining to the request and re | |||
| ges is to use unique identifiers for different message bodies, which would provi | sponse | |||
| de equivalent protection to the case where the complete body fits into a single | payload, respectively. The block-wise functionality does not support the | |||
| payload. The ETag option <xref target="RFC7252" format="default"/>, set by the C | detection | |||
| oAP server, identifies a response body fragmented using the Block2 option.</t> | of interchanged blocks between different message bodies to the same resou | |||
| rce having | ||||
| the same block number. This remains true even when CoAP is used together | ||||
| with a | ||||
| security protocol (such as DTLS or OSCORE) within the replay window <xref | ||||
| target="I-D.mattsson-core-coap-attacks" format="default"/>, which is a | ||||
| vulnerability of the block-wise functionality of CoAP <xref target="RFC79 | ||||
| 59" format="default"/>.</t> | ||||
| <t>A straightforward mitigation of mixing up blocks from different messa | ||||
| ges is to | ||||
| use unique identifiers for different message bodies, which would provide | ||||
| equivalent | ||||
| protection to the case where the complete body fits into a single payload | ||||
| . The ETag | ||||
| option <xref target="RFC7252" format="default"/>, set by the CoAP server, | ||||
| identifies a response body fragmented using the Block2 option.</t> | ||||
| </section> | </section> | |||
| <section anchor="the-request-tag-option" numbered="true" toc="default"> | <section anchor="the-request-tag-option" numbered="true" toc="default"> | |||
| <name>The Request-Tag Option</name> | <name>The Request-Tag Option</name> | |||
| <t>This document defines the Request-Tag option for identifying request | <t>This document defines the Request-Tag option for identifying request | |||
| bodies, similar to ETag, but ephemeral and set by the CoAP client. The Request-T | bodies, | |||
| ag is intended for use as a short-lived identifier for keeping apart distinct bl | similar to ETag, but ephemeral and set by the CoAP client. The Request-Ta | |||
| ock-wise request operations on one resource from one client, addressing the issu | g is | |||
| e described in <xref target="body-int" format="default"/>. It enables the receiv | intended for use as a short-lived identifier for keeping apart distinct b | |||
| ing server to reliably assemble request payloads (blocks) to their message bodie | lock-wise | |||
| s, and, if it chooses to support it, to reliably process simultaneous block-wise | request operations on one resource from one client, addressing the issue | |||
| request operations on a single resource. The requests must be integrity protect | described | |||
| ed if they should protect against interchange of blocks between different messag | in <xref target="body-int" format="default"/>. It enables the receiving s | |||
| e bodies. The Request-Tag option is only used in requests that carry the Block1 | erver to | |||
| option, and in Block2 requests following these.</t> | reliably assemble request payloads (blocks) to their message bodies and, | |||
| <t>In essence, it is an implementation of the "proxy-safe elective optio | if it | |||
| n" used just to "vary the cache key" as suggested in <xref target="RFC7959" form | chooses to support it, to reliably process simultaneous block-wise reques | |||
| at="default"/> Section 2.4.</t> | t | |||
| operations on a single resource. The requests must be integrity protected | ||||
| if they | ||||
| should protect against interchange of blocks between different message bo | ||||
| dies. The | ||||
| Request-Tag option is mainly used in requests that carry the Block1 optio | ||||
| n and in | ||||
| Block2 requests following these.</t> | ||||
| <t>In essence, it is an implementation of the "proxy-safe elective optio | ||||
| n" used | ||||
| just to "vary the cache key", as suggested in <xref target="RFC7959" | ||||
| sectionFormat="comma" section="2.4"/>.</t> | ||||
| <section anchor="req-tag-format" numbered="true" toc="default"> | <section anchor="req-tag-format" numbered="true" toc="default"> | |||
| <name>Request-Tag Option Format</name> | <name>Request-Tag Option Format</name> | |||
| <t>The Request-Tag option is not critical, is safe to forward, repeata | <t>The Request-Tag option is elective, safe to forward, repeatable, an | |||
| ble, and part of the cache key, see <xref target="req-tag-table" format="default | d | |||
| "/>, which extends Table 4 of <xref target="RFC7252" format="default"/>).</t> | part of the cache key (see <xref target="req-tag-table" format="default | |||
| <figure anchor="req-tag-table"> | "/>, which | |||
| extends Table 4 of <xref target="RFC7252" format="default"/>).</t> | ||||
| <table anchor="req-tag-table" align="left"> | ||||
| <name>Request-Tag Option Summary</name> | <name>Request-Tag Option Summary</name> | |||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | <thead> | |||
| +--------+---+---+---+---+-------------+--------+------+---------+ | <tr> | |||
| | No. | C | U | N | R | Name | Format | Len. | Default | | <th>No.</th> | |||
| +--------+---+---+---+---+-------------+--------+------+---------+ | <th>C</th> | |||
| | TBD292 | | | | x | Request-Tag | opaque | 0-8 | (none) | | <th>U</th> | |||
| +--------+---+---+---+---+-------------+--------+------+---------+ | <th>N</th> | |||
| <th>R</th> | ||||
| <th>Name</th> | ||||
| <th>Format</th> | ||||
| <th>Length</th> | ||||
| <th>Default</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td>292</td> | ||||
| <td></td> | ||||
| <td></td> | ||||
| <td></td> | ||||
| <td>x</td> | ||||
| <td>Request-Tag</td> | ||||
| <td>opaque</td> | ||||
| <td>0-8</td> | ||||
| <td>(none)</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| <t>C=Critical, U=Unsafe, N=NoCacheKey, R=Repeatable</t> | ||||
| <t>Request-Tag, like the Block options, is both a class E and a class | ||||
| U option in | ||||
| terms of OSCORE processing (see <xref target="RFC8613" sectionFormat="o | ||||
| f" | ||||
| section="4.1"/>). The Request-Tag <bcp14>MAY</bcp14> be an Inner or Out | ||||
| er option. | ||||
| It influences the Inner or Outer block operations, respectively. The In | ||||
| ner and | ||||
| Outer values are therefore independent of each other. The Inner option | ||||
| is | ||||
| encrypted and integrity protected between the client and server, and it | ||||
| provides | ||||
| message | ||||
| body identification in case of end-to-end fragmentation of requests. Th | ||||
| e Outer | ||||
| option is visible to proxies and labels message bodies in case of hop-b | ||||
| y-hop | ||||
| fragmentation of requests.</t> | ||||
| <t>The Request-Tag option is only used in the request messages of bloc | ||||
| k-wise | ||||
| operations.</t> | ||||
| C = Critical, U = Unsafe, N = NoCacheKey, R = Repeatable | <t>The Request-Tag mechanism can be applied independently on the server | |||
| ]]></artwork> | and | |||
| </figure> | client sides of CoAP-to-CoAP proxies, as are the Block options. However | |||
| <t>Request-Tag, like the block options, is both a class E and a class | , given it | |||
| U option in terms of OSCORE processing (see Section 4.1 of <xref target="RFC8613 | is safe to forward, a proxy is free to just forward it when processing | |||
| " format="default"/>): The Request-Tag MAY be an Inner or Outer option. It influ | an | |||
| ences the Inner or Outer block operation, respectively. The Inner and Outer valu | operation. | |||
| es are therefore independent of each other. The Inner option is encrypted and in | CoAP-to-HTTP proxies and HTTP-to-CoAP proxies can use Request-Tag on th | |||
| tegrity protected between client and server, and provides message body identific | eir CoAP | |||
| ation in case of end-to-end fragmentation of requests. The Outer option is visib | sides; it is not applicable to HTTP requests.</t> | |||
| le to proxies and labels message bodies in case of hop-by-hop fragmentation of r | ||||
| equests.</t> | ||||
| <t>The Request-Tag option is only used in the request messages of bloc | ||||
| k-wise operations.</t> | ||||
| <t>The Request-Tag mechanism can be applied independently on the serve | ||||
| r and client sides of CoAP-to-CoAP proxies as are the block options, | ||||
| though given it is safe to forward, a proxy is free to just forward it when proc | ||||
| essing an operation. | ||||
| CoAP-to-HTTP proxies and HTTP-to-CoAP proxies can use Request-Tag on their CoAP | ||||
| sides; | ||||
| it is not applicable to HTTP requests.</t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="request-tag-processing" numbered="true" toc="default"> | <section anchor="request-tag-processing" numbered="true" toc="default"> | |||
| <name>Request-Tag Processing by Servers</name> | <name>Request-Tag Processing by Servers</name> | |||
| <t>The Request-Tag option does not require any particular processing on | <t>The Request-Tag option does not require any particular processing on t | |||
| the server side | he server | |||
| outside of the processing already necessary for any unknown elective proxy-safe | side outside of the processing already necessary for any unknown elective | |||
| cache-key option: | proxy-safe cache-key option. The option varies the properties that distin | |||
| The option varies the properties that distinguish block-wise operations | guish | |||
| (which includes all options except elective NoCacheKey and except Block1/2), | block-wise operations (which includes all options except Block1, Block2, | |||
| and thus the server cannot treat messages with a different list of Request-Tag o | and all | |||
| ptions as belonging to the same operation. | operations that are elective NoCacheKey). Thus, the server cannot treat m | |||
| <!-- not speaking of "matchable" here as that working definition explicitly excl | essages | |||
| udes Request-Tag to make the rest of the document easier to read --> | with a different list of Request-Tag options as belonging to the same ope | |||
| ration. | ||||
| </t> | </t> | |||
| <t>To keep utilizing the cache, | <t>To keep utilizing the cache, a server (including proxies) <bcp14>MAY< | |||
| a server (including proxies) MAY discard the Request-Tag option | /bcp14> | |||
| from an assembled block-wise request when consulting its cache, | discard the Request-Tag option from an assembled block-wise request when | |||
| as the option relates to the operation-on-the-wire and not its semantics. | consulting | |||
| For example, a FETCH request with the same body as an older one can be served fr | its cache, as the option relates to the operation on the wire and not its | |||
| om the cache if the older's Max-Age has not expired yet, | semantics. | |||
| even if the second operation uses a Request-Tag and the first did not. | For example, a FETCH request with the same body as an older one can be se | |||
| (This is similar to the situation about ETag in that it is formally part of the | rved from | |||
| cache key, | the cache if the older's Max-Age has not expired yet, even if the second | |||
| but implementations that are aware of its meaning can cache more efficiently, | operation | |||
| see <xref target="RFC7252" format="default"/> Section 5.4.2).</t> | uses a Request-Tag and the first did not. (This is similar to the situati | |||
| <t>A server receiving a Request-Tag MUST treat it as opaque and make no | on about | |||
| assumptions about its content or structure.</t> | ETag in that it is formally part of the cache key, but implementations th | |||
| <t>Two messages carrying the same Request-Tag is a necessary but not suf | at are | |||
| ficient condition for being part of the same operation. | aware of its meaning can cache more efficiently (see <xref target="RFC725 | |||
| For one, a server may still treat them as independent messages when it sends 2.0 | 2" | |||
| 1/2.04 responses for every block. | sectionFormat="comma" section="5.4.2"/>).</t> | |||
| Also, a client that lost interest in an old operation but wants to start over ca | <t>A server receiving a Request-Tag <bcp14>MUST</bcp14> treat it as opaq | |||
| n overwrite the server's old state with a new initial (num=0) Block1 request and | ue and make | |||
| the same Request-Tag under some circumstances. Likewise, that results in the ne | no assumptions about its content or structure.</t> | |||
| w message not being part of the old operation.</t> | ||||
| <t>As it has always been, | <t>Two messages carrying the same Request-Tag is a necessary but not suff | |||
| a server that can only serve a limited number of block-wise operations at the sa | icient | |||
| me time | condition for being part of the same operation. For one, a server may sti | |||
| can delay the start of the operation by replying with 5.03 (Service unavailable) | ll treat | |||
| and a Max-Age indicating how long it expects the existing operation to go on, | them as independent messages when it sends 2.01 (Created) and 2.04 (Chang | |||
| or it can forget about the state established with the older operation and respon | ed) | |||
| d with 4.08 (Request Entity Incomplete) to later blocks on the first operation.< | responses for every block. | |||
| /t> | Also, a client that lost interest in an old operation but wants to start | |||
| over can | ||||
| overwrite the server's old state with a new initial (num=0) Block1 reques | ||||
| t and the | ||||
| same Request-Tag under some circumstances. Likewise, that results in the | ||||
| new | ||||
| message not being part of the old operation.</t> | ||||
| <t>As it has always been, a server that can only serve a limited number | ||||
| of | ||||
| block-wise operations at the same time can delay the start of the operati | ||||
| on by | ||||
| replying with 5.03 (Service Unavailable) and a Max-Age indicating how lon | ||||
| g it | ||||
| expects the existing operation to go on, or it can forget about the state | ||||
| established with the older operation and respond with 4.08 (Request Entit | ||||
| y | ||||
| Incomplete) to later blocks on the first operation.</t> | ||||
| </section> | </section> | |||
| <section anchor="setting-the-request-tag" numbered="true" toc="default"> | <section anchor="setting-the-request-tag" numbered="true" toc="default"> | |||
| <name>Setting the Request-Tag</name> | <name>Setting the Request-Tag</name> | |||
| <t>For each separate block-wise request operation, the client can choose | <t>For each separate block-wise request operation, the client can choose | |||
| a Request-Tag value, or choose not to set a Request-Tag. | a | |||
| It needs to be set to the same value (or unset) in all messages belonging to the | Request-Tag value or choose not to set a Request-Tag. It needs to be set | |||
| same operation, | to the | |||
| as otherwise they are treated as separate operations by the server.</t> | same value (or unset) in all messages belonging to the same operation; ot | |||
| <t>Starting a request operation matchable to a | herwise, | |||
| previous operation and even using the same Request-Tag value is called request t | they are treated as separate operations by the server.</t> | |||
| ag recycling. | <t>Starting a request operation matchable to a previous operation and ev | |||
| The absence of a Request-Tag option is viewed as a value distinct from all value | en using | |||
| s with a single Request-Tag option set; | the same Request-Tag value is called "request tag recycling". The absence | |||
| starting a request operation matchable to a previous operation where neither has | of a | |||
| a Request-Tag option | Request-Tag option is viewed as a value distinct from all values with a s | |||
| therefore constitutes request tag recycling just as well | ingle | |||
| (also called "recycling the absent option").</t> | Request-Tag option set; starting a request operation matchable to a previ | |||
| <t>Clients that use Request-Tag for a particular purpose (like in <xref | ous | |||
| target="req-tag-applications" format="default"/>) MUST NOT recycle a request tag | operation where neither has a Request-Tag option therefore constitutes re | |||
| unless the first operation has concluded. | quest tag | |||
| What constitutes a concluded operation depends on the purpose, and is defined ac | recycling just as well (also called "recycling the absent option").</t> | |||
| cordingly; see examples in <xref target="req-tag-applications" format="default"/ | <t>Clients that use Request-Tag for a particular purpose (like in <xref | |||
| >.</t> | target="req-tag-applications" format="default"/>) <bcp14>MUST NOT</bcp14> | |||
| <t>When Block1 and Block2 are combined in an operation, | recycle a | |||
| the Request-Tag of the Block1 phase is set in the Block2 phase as well | request tag unless the first operation has concluded. What constitutes a | |||
| for otherwise the request would have a different set of options | concluded | |||
| and would not be recognized any more.</t> | operation depends on the purpose and is defined accordingly; see examples | |||
| <t>Clients are encouraged to generate compact messages. This means sendi | in <xref | |||
| ng messages without Request-Tag options whenever possible, and using short value | target="req-tag-applications" format="default"/>.</t> | |||
| s when the absent option cannot be recycled.</t> | <t>When Block1 and Block2 are combined in an operation, the Request-Tag | |||
| <t>Note that Request-Tag options can be present in request messages that | of the | |||
| carry no Block option | Block1 phase is set in the Block2 phase as well; otherwise, the request w | |||
| (for example, because a Request-Tag unaware proxy reassembled them), | ould | |||
| and MUST be ignored in those.</t> | have a different set of options and would not be recognized any more.</t> | |||
| <t>The Request-Tag option MUST NOT be present in response messages.</t> | <t>Clients are encouraged to generate compact messages. This means sendi | |||
| ng messages | ||||
| without Request-Tag options whenever possible and using short values when | ||||
| the | ||||
| absent option cannot be recycled.</t> | ||||
| <t>Note that Request-Tag options can be present in request messages that | ||||
| carry no | ||||
| Block options (for example, because a proxy unaware of Request-Tag reasse | ||||
| mbled them).</t> | ||||
| <t>The Request-Tag option <bcp14>MUST NOT</bcp14> be present in response | ||||
| messages.</t> | ||||
| </section> | </section> | |||
| <section anchor="req-tag-applications" numbered="true" toc="default"> | <section anchor="req-tag-applications" numbered="true" toc="default"> | |||
| <name>Applications of the Request-Tag Option</name> | <name>Applications of the Request-Tag Option</name> | |||
| <section anchor="body-integrity" numbered="true" toc="default"> | <section anchor="body-integrity" numbered="true" toc="default"> | |||
| <name>Body Integrity Based on Payload Integrity</name> | <name>Body Integrity Based on Payload Integrity</name> | |||
| <t>When a client fragments a request body into multiple message payloa | <t>When a client fragments a request body into multiple message payloa | |||
| ds, even if the individual messages are integrity protected, it is still possibl | ds, even if | |||
| e for an attacker to maliciously replace a later operation's blocks with an earl | the individual messages are integrity protected, it is still possible f | |||
| ier operation's blocks (see Section 2.5 of <xref target="I-D.mattsson-core-coap- | or an | |||
| attacks" format="default"/>). Therefore, the integrity protection of each block | attacker to maliciously replace a later operation's blocks with an earl | |||
| does not extend to the operation's request body.</t> | ier | |||
| operation's blocks (see <xref target="I-D.mattsson-core-coap-attacks" | ||||
| sectionFormat="of" section="2.5"/>). Therefore, the integrity protectio | ||||
| n of each | ||||
| block does not extend to the operation's request body.</t> | ||||
| <t>In order to gain that protection, use the Request-Tag mechanism as follows:</t> | <t>In order to gain that protection, use the Request-Tag mechanism as follows:</t> | |||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li>The individual exchanges MUST be integrity protected end-to-end | <li>The individual exchanges <bcp14>MUST</bcp14> be integrity protec | |||
| between client and server.</li> | ted | |||
| end to end between the client and server.</li> | ||||
| <li> | <li> | |||
| <t>The client MUST NOT recycle a request tag in a new operation un | <t>The client <bcp14>MUST NOT</bcp14> recycle a request tag in a n | |||
| less the <!-- or "all", but by this rule there can only be one --> previous oper | ew | |||
| ation matchable to the new one has concluded. </t> | operation unless the previous operation matchable to the new one ha | |||
| <t> | s concluded. </t> | |||
| If any future security mechanisms allow a block-wise transfer to continue | ||||
| after an endpoint's details (like the IP address) have changed, then | <t>If any future security mechanisms allow a block-wise transfer t | |||
| the client MUST consider messages matchable if they were sent to <em>any</em> en | o continue | |||
| dpoint address using the new operation's security context.</t> | after an endpoint's details (like the IP address) have changed, the | |||
| n | ||||
| the client <bcp14>MUST</bcp14> consider messages matchable if they | ||||
| were sent | ||||
| to any endpoint address using the new operation's security | ||||
| context.</t> | ||||
| </li> | </li> | |||
| <li> | <li> | |||
| <t>The client MUST NOT regard a block-wise request operation as co | <t>The client <bcp14>MUST NOT</bcp14> regard a block-wise request | |||
| ncluded unless all of the messages the client has sent in the operation would be | operation | |||
| regarded as invalid by the server if they were replayed. </t> | as concluded unless all of the messages the client has sent in the | |||
| <t> | operation | |||
| When security services are provided by OSCORE, these confirmations typically res | would be regarded as invalid by the server if they were replayed.</ | |||
| ult either from the client receiving an OSCORE response message matching the req | t> | |||
| uest (an empty ACK is insufficient), or because the message's sequence number is | <t>When security services are provided by OSCORE, these confirmati | |||
| old enough to be outside the server's receive window. </t> | ons | |||
| <t> | typically result either from the client receiving an OSCORE respons | |||
| When security services are provided by DTLS, this can only be confirmed if there | e message | |||
| was no CoAP retransmission of the request, the request was responded to, and th | matching the request (an empty Acknowledgement (ACK) is insufficien | |||
| e server uses replay protection.</t> | t) or | |||
| because the message's | ||||
| sequence number is old enough to be outside the server's receive wi | ||||
| ndow.</t> | ||||
| <t>When security services are provided by DTLS, this can only be c | ||||
| onfirmed if | ||||
| there was no CoAP retransmission of the request, the request was re | ||||
| sponded | ||||
| to, and the server uses replay protection.</t> | ||||
| </li> | </li> | |||
| </ul> | </ul> | |||
| <!-- pending see thread "ERT and OSCORE" --> | <t>Authors of other documents (e.g., applications of <xref target="RFC8 | |||
| <t>Authors of other documents (e.g. applications of <xref target="RFC8613" forma | 613" | |||
| t="default"/>) are invited to mandate this subsection's behavior for clients tha | format="default"/>) are invited to mandate this subsection's behavior f | |||
| t execute block-wise interactions over secured transports. In this way, the serv | or clients | |||
| er can rely on a conforming client to set the Request-Tag option when required, | that execute block-wise interactions over secured transports. In this w | |||
| and thereby have confidence in the integrity of the assembled body.</t> | ay, the | |||
| <t>Note that this mechanism is implicitly implemented when the securit | server can rely on a conforming client to set the Request-Tag option wh | |||
| y layer guarantees ordered delivery (e.g. CoAP over TLS <xref target="RFC8323" f | en | |||
| ormat="default"/>). This is because with each message, any earlier message canno | required and thereby have confidence in the integrity of the assembled | |||
| t be replayed any more, so the client never needs to set the Request-Tag option | body.</t> | |||
| unless it wants to perform concurrent operations.</t> | <t>Note that this mechanism is implicitly implemented when the securit | |||
| <t>Body integrity only makes sense in applications that have stateful | y layer | |||
| block-wise transfers. | guarantees ordered delivery (e.g., CoAP over TLS <xref target="RFC8323" | |||
| On applications where all the state is in the application | format="default"/>). This is because, with each message, any earlier me | |||
| (e.g. because rather than POSTing a large representation to a collection in a st | ssage | |||
| ateful block-wise transfer, | cannot be replayed any more, so the client never needs to set the Reque | |||
| a collection item is created first, then written to once and available when writ | st-Tag | |||
| ten completely), | option unless it wants to perform concurrent operations.</t> | |||
| clients need not concern themselves with body integrity and thus the Request-Tag | <t>Body integrity only makes sense in applications that have stateful | |||
| .</t> | block-wise | |||
| <t>Body integrity is largely independent from replay protection: | transfers. On applications where all the state is in the application (e | |||
| When no replay protection is available (it is optional in DTLS), | .g., | |||
| a full block-wise operation may be replayed, | because rather than POSTing a large representation to a collection in a | |||
| but by adhering to the above, no operations will be mixed up. | stateful | |||
| <!-- the other direction was covered already, see core-coap-attacks --> | block-wise transfer, a collection item is created first, then written t | |||
| The only link between body integrity and replay protection is that without repla | o once and | |||
| y protection, recycling is not possible.</t> | available when written completely), clients need not concern themselves | |||
| with body | ||||
| integrity and thus the Request-Tag.</t> | ||||
| <t>Body integrity is largely independent from replay protection. When | ||||
| no replay | ||||
| protection is available (it is optional in DTLS), a full block-wise ope | ||||
| ration may | ||||
| be replayed, but, by adhering to the above, no operations will be mixed | ||||
| up. | ||||
| The only link between body integrity and replay protection is that, wit | ||||
| hout replay | ||||
| protection, recycling is not possible.</t> | ||||
| </section> | </section> | |||
| <section anchor="multiple-concurrent-block-wise-operations" numbered="tr | <section anchor="multiple-concurrent-block-wise-operations" numbered="tr | |||
| ue" toc="default"> | ue" | |||
| <name>Multiple Concurrent Block-wise Operations</name> | toc="default"> | |||
| <t>CoAP clients, especially CoAP proxies, may initiate a block-wise re | <name>Multiple Concurrent Block-Wise Operations</name> | |||
| quest operation to a resource, to which a previous one is already in progress, w | <t>CoAP clients, especially CoAP proxies, may initiate a block-wise re | |||
| hich the new request should not cancel. | quest | |||
| A CoAP proxy would be in such a situation when it forwards operations with the s | operation to a resource, to which a previous one is already in progress | |||
| ame cache-key options but possibly different payloads.</t> | , which | |||
| <t>For those cases, Request-Tag is the proxy-safe elective option sugg | the new request should not cancel. A CoAP proxy would be in such a situ | |||
| ested in <xref target="RFC7959" format="default"/> Section 2.4 last paragraph.</ | ation when | |||
| t> | it forwards operations with the same cache-key options but possibly dif | |||
| <t>When initializing a new block-wise operation, a client has to look | ferent | |||
| at other active operations:</t> | payloads.</t> | |||
| <t>For those cases, Request-Tag is the proxy-safe elective option sugg | ||||
| ested in | ||||
| the last paragraph of | ||||
| <xref target="RFC7959" sectionFormat="of" section="2.4"/>.</t> | ||||
| <t>When initializing a new block-wise operation, a client has to look | ||||
| at other | ||||
| active operations:</t> | ||||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li>If any of them is matchable to the new one, and the client neith | <li>If any of them is matchable to the new one, and the client neith | |||
| er wants to cancel the old one nor postpone the new one, | er wants to | |||
| it can pick a Request-Tag value (including the absent option) that is not in use | cancel the old one nor postpone the new one, it can pick a Request-Ta | |||
| by the other matchable operations for the new operation.</li> | g value | |||
| <li>Otherwise, it can start the new operation without setting the Re | (including the absent option) that is not in use by the other matchab | |||
| quest-Tag option on it.</li> | le | |||
| operations for the new operation.</li> | ||||
| <li>Otherwise, it can start the new operation without setting the Re | ||||
| quest-Tag | ||||
| option on it.</li> | ||||
| </ul> | </ul> | |||
| </section> | </section> | |||
| <section anchor="simpleproxy" numbered="true" toc="default"> | <section anchor="simpleproxy" numbered="true" toc="default"> | |||
| <name>Simplified Block-Wise Handling for Constrained Proxies</name> | <name>Simplified Block-Wise Handling for Constrained Proxies</name> | |||
| <t>The Block options were defined to be unsafe to forward | <t>The Block options were defined to be unsafe to forward because a pr | |||
| because a proxy that would forward blocks as plain messages would risk mixing up | oxy that | |||
| clients' requests.</t> | would forward blocks as plain messages would risk mixing up clients' re | |||
| <t>In some cases, | quests.</t> | |||
| for example when forwarding block-wise request operations, | <t>In some cases, for example, when forwarding block-wise request oper | |||
| appending a Request-Tag value unique to the client | ations, | |||
| can satisfy the requirements on the proxy that come from the presence of a block | appending a Request-Tag value unique to the client can satisfy the requ | |||
| option.</t> | irements | |||
| <t>This is particularly useful to proxies that strive for stateless op | on the proxy that come from the presence of a Block option.</t> | |||
| eration | <t>This is particularly useful to proxies that strive for stateless op | |||
| as described in <xref target="RFC8974" format="default"/> Section 4.</t> | erations, | |||
| <t>The precise classification of cases in which such a Request-Tag opt | as described in <xref target="RFC8974" sectionFormat="comma" section="4 | |||
| ion is sufficient | "/>.</t> | |||
| is not trivial, especially when both request and response body are fragmented, | <t>The precise classification of cases in which such a Request-Tag opt | |||
| and out of scope for this document.</t> | ion is | |||
| sufficient is not trivial, especially when both request and response bo | ||||
| dy are | ||||
| fragmented, and is out of scope for this document.</t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="rationale-for-the-option-properties" numbered="true" toc= "default"> | <section anchor="rationale-for-the-option-properties" numbered="true" toc= "default"> | |||
| <name>Rationale for the Option Properties</name> | <name>Rationale for the Option Properties</name> | |||
| <t>The Request-Tag option can be elective, because to servers unaware of | ||||
| the Request-Tag option, operations with differing request tags will not be matc | <t>The Request-Tag option can be elective, because to servers unaware of | |||
| hable.</t> | the | |||
| <t>The Request-Tag option can be safe to forward but part of the cache k | Request-Tag option, operations with differing request tags will not be | |||
| ey, because proxies unaware of the Request-Tag option will consider operations w | matchable.</t> | |||
| ith differing request tags unmatchable but can still forward them.</t> | <t>The Request-Tag option can be safe to forward but part of the cache k | |||
| <t>The Request-Tag option is repeatable | ey, because | |||
| because this easily allows several cascaded stateless proxies to each put in an | proxies unaware of the Request-Tag option will consider operations with d | |||
| origin address. | iffering | |||
| They can perform the steps of <xref target="simpleproxy" format="default"/> with | request tags unmatchable but can still forward them.</t> | |||
| out the need to create an option value | <t>The Request-Tag option is repeatable because this easily allows sever | |||
| that is the concatenation of the received option and their own value, | al cascaded | |||
| and can simply add a new Request-Tag option unconditionally.</t> | stateless proxies to each put in an origin address. They can perform the | |||
| <t>In draft versions of this document, the Request-Tag option used to be | steps of | |||
| critical and unsafe to forward. | <xref target="simpleproxy" format="default"/> without the need to create | |||
| That design was based on an erroneous understanding of which blocks could be com | an option | |||
| posed according to <xref target="RFC7959" format="default"/>.</t> | value that is the concatenation of the received option and their own valu | |||
| e | ||||
| and can simply add a new Request-Tag option unconditionally.</t> | ||||
| <t>In draft versions of this document, the Request-Tag option used to be | ||||
| critical | ||||
| and unsafe to forward. That design was based on an erroneous understandin | ||||
| g of which | ||||
| blocks could be composed according to <xref target="RFC7959" format="defa | ||||
| ult"/>.</t> | ||||
| </section> | </section> | |||
| <section anchor="rationale-for-introducing-the-option" numbered="true" toc ="default"> | <section anchor="rationale-for-introducing-the-option" numbered="true" toc ="default"> | |||
| <name>Rationale for Introducing the Option</name> | <name>Rationale for Introducing the Option</name> | |||
| <t>An alternative that was considered to the Request-Tag option | <t>An alternative that was considered to the Request-Tag option for copi | |||
| for coping with the problem of fragmented message body integrity (<xref target=" | ng with the | |||
| body-integrity" format="default"/>) | problem of fragmented message body integrity (<xref target="body-integrit | |||
| was to update <xref target="RFC7959" format="default"/> to say that blocks could | y" | |||
| only be assembled | format="default"/>) was to update <xref target="RFC7959" format="default" | |||
| if their fragments' order corresponded to the sequence numbers.</t> | /> to say | |||
| <t>That approach would have been difficult to roll out reliably on DTLS | that blocks could only be assembled if their fragments' order corresponde | |||
| where many implementations do not expose sequence numbers, | d to the | |||
| and would still not prevent attacks like in <xref target="I-D.mattsson-core-coap | sequence numbers.</t> | |||
| -attacks" format="default"/> Section 2.5.2.</t> | <t>That approach would have been difficult to roll out reliably on DTLS, | |||
| where many implementations do not expose sequence numbers, and would stil | ||||
| l not | ||||
| prevent attacks like in <xref target="I-D.mattsson-core-coap-attacks" | ||||
| sectionFormat="of" section="2.5.2"/>.</t> | ||||
| </section> | </section> | |||
| <section anchor="etag" numbered="true" toc="default"> | <section anchor="etag" numbered="true" toc="default"> | |||
| <name>Block2 / ETag Processing</name> | <name>Block2 and ETag Processing</name> | |||
| <t>The same security properties as in <xref target="body-integrity" form | <t>The same security properties as in <xref target="body-integrity" | |||
| at="default"/> can be obtained for block-wise response operations. | format="default"/> can be obtained for block-wise response operations. Th | |||
| The threat model here does not depend on an attacker: | e threat | |||
| a client can construct a wrong representation | model here does not depend on an attacker; a client can construct a wrong | |||
| by assembling it from blocks from different resource states. | representation by assembling it from blocks from different resource state | |||
| That can happen when a resource is modified during a transfer, | s. That | |||
| or when some blocks are still valid in the client's cache.</t> | can happen when a resource is modified during a transfer or when some blo | |||
| <t>Rules stating that response body reassembly is conditional on matchin | cks are | |||
| g ETag values are already in place from Section 2.4 of <xref target="RFC7959" fo | still valid in the client's cache.</t> | |||
| rmat="default"/>.</t> | <t>Rules stating that response body reassembly is conditional on matchin | |||
| <t>To gain equivalent protection to <xref target="body-integrity" format | g ETag | |||
| ="default"/>, | values are already in place from <xref target="RFC7959" sectionFormat="of | |||
| a server MUST use the Block2 option in conjunction with the ETag option (<xref t | " | |||
| arget="RFC7252" format="default"/>, Section 5.10.6), | section="2.4"/>.</t> | |||
| and MUST NOT use the same ETag value for different representations of a resource | <t>To gain protection equivalent to that described in <xref target="body- | |||
| .</t> | integrity" | |||
| format="default"/>, a server <bcp14>MUST</bcp14> use the Block2 option in | ||||
| conjunction with the ETag option (<xref target="RFC7252" sectionFormat="c | ||||
| omma" | ||||
| section="5.10.6"/>) and <bcp14>MUST NOT</bcp14> use the same ETag value f | ||||
| or | ||||
| different representations of a resource.</t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="token" numbered="true" toc="default"> | <section anchor="token" numbered="true" toc="default"> | |||
| <name>Token Processing for Secure Request-Response Binding</name> | <name>Token Processing for Secure Request-Response Binding</name> | |||
| <section anchor="req-resp-bind" numbered="true" toc="default"> | <section anchor="req-resp-bind" numbered="true" toc="default"> | |||
| <name>Request-Response Binding</name> | <name>Request-Response Binding</name> | |||
| <t>A fundamental requirement of secure REST operations is that the clien | <t>A fundamental requirement of secure REST operations is that the clien | |||
| t can bind a response to a particular request. If this is not ensured, a client | t can bind | |||
| may erroneously associate the wrong response to a request. The wrong response ma | a response to a particular request. If this is not ensured, a client may | |||
| y be an old response for the same resource or a response for a completely differ | erroneously associate the wrong response to a request. The wrong response | |||
| ent resource (see e.g. Section 2.3 of <xref target="I-D.mattsson-core-coap-attac | may be an | |||
| ks" format="default"/>). For example, a request for the alarm status "GET /statu | old response for the same resource or a response for a completely differe | |||
| s" may be associated to a prior response "on", instead of the correct response " | nt | |||
| off".</t> | resource (e.g., see <xref target="I-D.mattsson-core-coap-attacks" section | |||
| <t>In HTTP/1.1, this type of binding is always assured by the ordered an | Format="of" | |||
| d reliable delivery as well as mandating that the server sends responses in the | section="2.3"/>). For example, a request for the alarm status "GET /statu | |||
| same order that the requests were received. The same is not true for CoAP where | s" may be | |||
| the server (or an attacker) can return responses in any order and where there ca | associated to a prior response "on", instead of the correct response "off | |||
| n be any number of responses to a request (see e.g. <xref target="RFC7641" forma | ".</t> | |||
| t="default"/>). In CoAP, concurrent requests are differentiated by their Token. | <t>In HTTP/1.1, this type of binding is always assured by the ordered an | |||
| Note that the CoAP Message ID cannot be used for this purpose since those are ty | d reliable | |||
| pically different for REST request and corresponding response in case of "separa | delivery, as well as mandating that the server sends responses in the sam | |||
| te response", see Section 2.2 of <xref target="RFC7252" format="default"/>.</t> | e order | |||
| <t>CoAP <xref target="RFC7252" format="default"/> does not treat Token a | that the requests were received. The same is not true for CoAP, where the | |||
| s a cryptographically important value and does not give stricter guidelines than | server (or | |||
| that the Tokens currently "in use" SHOULD (not SHALL) be unique. If used with a | an attacker) can return responses in any order and where there can be any | |||
| security protocol not providing bindings between requests and responses (e.g. D | number of | |||
| TLS and TLS) Token reuse may result in situations where a client matches a respo | responses to a request (e.g., see <xref target="RFC7641" format="default" | |||
| nse to the wrong request. Note that mismatches can also happen for other reasons | />). In | |||
| than a malicious attacker, e.g. delayed delivery or a server sending notificati | CoAP, concurrent requests are differentiated by their Token. Note that th | |||
| ons to an uninterested client.</t> | e CoAP | |||
| <t>A straightforward mitigation is to mandate clients to not reuse Token | Message ID cannot be used for this purpose since those are typically diff | |||
| s until the traffic keys have been replaced. The following section formalizes th | erent for | |||
| at.</t> | the REST request and corresponding response in case of "separate response | |||
| " (see | ||||
| <xref target="RFC7252" sectionFormat="of" section="2.2"/>).</t> | ||||
| <t>CoAP <xref target="RFC7252" format="default"/> does not treat the Tok | ||||
| en as a | ||||
| cryptographically important value and does not give stricter guidelines t | ||||
| han that | ||||
| the Tokens currently "in use" <bcp14>SHOULD</bcp14> (not <bcp14>SHALL</bc | ||||
| p14>) be | ||||
| unique. If used with a security protocol not providing bindings between r | ||||
| equests | ||||
| and responses (e.g., DTLS and TLS), Token reuse may result in situations | ||||
| where a | ||||
| client matches a response to the wrong request. Note that mismatches can | ||||
| also | ||||
| happen for other reasons than a malicious attacker, e.g., delayed deliver | ||||
| y or a | ||||
| server sending notifications to an uninterested client.</t> | ||||
| <t>A straightforward mitigation is to mandate clients to not reuse Token | ||||
| s until the | ||||
| traffic keys have been replaced. The following section formalizes that.</ | ||||
| t> | ||||
| </section> | </section> | |||
| <section anchor="updated-token-processing-requirements-for-clients" number | <section anchor="updated-token-processing-requirements-for-clients" number | |||
| ed="true" toc="default"> | ed="true" | |||
| toc="default"> | ||||
| <name>Updated Token Processing Requirements for Clients</name> | <name>Updated Token Processing Requirements for Clients</name> | |||
| <t>As described in <xref target="req-resp-bind" format="default"/>, the | <t>As described in <xref target="req-resp-bind" format="default"/>, the | |||
| client must be able to verify that a response corresponds to a particular reques | client must | |||
| t. This section updates the Token processing requirements for clients in <xref t | be able to verify that a response corresponds to a particular request. Th | |||
| arget="RFC7252" format="default"/> to always assure a cryptographically secure b | is section | |||
| inding of responses to requests for secure REST operations like "coaps". The Tok | updates the Token processing requirements for clients in <xref target="RF | |||
| en processing for servers is not updated. Token processing in Section 5.3.1 of < | C7252" | |||
| xref target="RFC7252" format="default"/> is updated by adding the following text | format="default"/> to always assure a cryptographically secure binding of | |||
| :</t> | responses | |||
| <t>When CoAP is used with a security protocol not providing bindings bet | to requests for secure REST operations like "coaps". The Token processing | |||
| ween requests and responses, the Tokens have cryptographic importance. The clien | for | |||
| t MUST make sure that Tokens are not used in a way so that responses risk being | servers is not updated. Token processing in <xref target="RFC7252" | |||
| associated with the wrong request.</t> | sectionFormat="of" section="5.3.1"/> is updated by adding the following t | |||
| <t>One easy way to accomplish this is to implement the Token (or part of | ext:</t> | |||
| the Token) as a sequence number starting at zero for each new or rekeyed secure | <blockquote> | |||
| connection. This approach SHOULD be followed.</t> | <t>When CoAP is used with a security protocol not providing bindings bet | |||
| ween | ||||
| requests and responses, the Tokens have cryptographic importance. The cli | ||||
| ent | ||||
| <bcp14>MUST</bcp14> make sure that Tokens are not used in a way so that r | ||||
| esponses | ||||
| risk being associated with the wrong request.</t> | ||||
| <t>One easy way to accomplish this is to implement the Token (or part of | ||||
| the Token) | ||||
| as a sequence number, starting at zero for each new or rekeyed secure con | ||||
| nection. | ||||
| This approach <bcp14>SHOULD</bcp14> be followed.</t> | ||||
| </blockquote> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="sec-cons" numbered="true" toc="default"> | <section anchor="sec-cons" numbered="true" toc="default"> | |||
| <name>Security Considerations</name> | <name>Security Considerations</name> | |||
| <t>The freshness assertion of the Echo option comes from the client reprod | <t>The freshness assertion of the Echo option comes from the client reprod | |||
| ucing the same value of the Echo option in a request as it received in a previou | ucing the | |||
| s response. If the Echo value is a large random number then there is a high prob | same value of the Echo option in a request as it received in a previous re | |||
| ability that the request is generated after having seen the response. If the Ech | sponse. If | |||
| o value of the response can be guessed, e.g. if based on a small random number o | the Echo option value is a large random number, then there is a high proba | |||
| r a counter (see <xref target="echo-state" format="default"/>), then it is possi | bility | |||
| ble to compose a request with the right Echo value ahead of time. Using guessabl | that the request is generated after having seen the response. If the Echo | |||
| e Echo values is only permissible in a narrow set of cases described in <xref ta | option | |||
| rget="source-of-truth" format="default"/>. Echo values MUST be set by the CoAP s | value of the response can be guessed, e.g., if based on a small random num | |||
| erver such that the risk associated with unintended reuse can be managed.</t> | ber or a | |||
| <t>If uniqueness of the Echo value is based on randomness, then the availa | counter (see <xref target="echo-state" format="default"/>), then it is pos | |||
| bility of a secure pseudorandom number generator and truly random seeds are esse | sible to | |||
| ntial for the security of the Echo option. If no true random number generator is | compose a request with the right Echo option value ahead of time. Using gu | |||
| available, a truly random seed must be provided from an external source. As eac | essable | |||
| h pseudorandom number must only be used once, an implementation needs to get a n | Echo option values is only permissible in a narrow set of cases described | |||
| ew truly random seed after reboot, or continuously store state in nonvolatile me | in <xref | |||
| mory. See (<xref target="RFC8613" format="default"/>, Appendix B.1.1) for issues | target="source-of-truth" format="default"/>. Echo option values <bcp14>MUS | |||
| and approaches for writing to nonvolatile memory.</t> | T</bcp14> | |||
| <t>A single active Echo value with 64 (pseudo-)random bits gives the same | be set by the CoAP server such that the risk associated with unintended re | |||
| theoretical security level as a 64-bit MAC (as used in e.g. AES_128_CCM_8). If a | use can be | |||
| random unique Echo value is intended, the Echo option value SHOULD contain 64 ( | managed.</t> | |||
| pseudo-)random bits that are not predictable for any other party than the server | <t>If uniqueness of the Echo option value is based on randomness, then the | |||
| . A server MAY use different security levels for different uses cases (client al | availability of a | |||
| iveness, request freshness, state synchronization, network address reachability, | secure pseudorandom number generator and truly random seeds are essential | |||
| etc.).</t> | for the | |||
| <t>The security provided by the Echo and Request-Tag options depends on th | security of the Echo option. If no true random number generator is availab | |||
| e security protocol used. CoAP and HTTP proxies require (D)TLS to be terminated | le, a truly | |||
| at the proxies. The proxies are therefore able to manipulate, inject, delete, or | random seed must be provided from an external source. As each pseudorandom | |||
| reorder options or packets. The security claims in such architectures only hold | number | |||
| under the assumption that all intermediaries are fully trusted and have not bee | must only be used once, an implementation needs to get a new truly random | |||
| n compromised.</t> | seed after | |||
| <t>Echo values without the protection of randomness or a MAC are limited t | reboot or continuously store the state in nonvolatile memory. See <xref | |||
| o cases when the client is the trusted source of all derived properties (as per | target="RFC8613" sectionFormat="comma" section="B.1.1"/> for issues and ap | |||
| <xref target="source-of-truth" format="default"/>). Using them needs per-applica | proaches for | |||
| tion consideration of both the impact of a malicious client and of implementatio | writing to nonvolatile memory.</t> | |||
| n errors in clients. These Echo values are the only legitimate case for Echo val | <t>A single active Echo option value with 64 (pseudo)random bits gives the | |||
| ues shorter than four bytes, which are not necessarily secret. They MUST NOT be | same theoretical | |||
| used unless the request Echo values are integrity protected as per <xref target= | security level as a 64-bit MAC (as used in, e.g., AES_128_CCM_8). If a ran | |||
| "echo-proc" format="default"/>.</t> | dom unique | |||
| <t>Servers SHOULD use a monotonic clock to generate timestamps and compute | Echo option value is intended, the Echo option value <bcp14>SHOULD</bcp14> | |||
| round-trip times. Use of non-monotonic clocks is not secure as the server will | contain 64 | |||
| accept expired Echo option values if the clock is moved backward. The server wil | (pseudo)random bits that are not predictable for any other party than the | |||
| l also reject fresh Echo option values if the clock is moved forward. Non-monoto | server. A | |||
| nic clocks MAY be used as long as they have deviations that are acceptable given | server <bcp14>MAY</bcp14> use different security levels for different use | |||
| the freshness requirements. If the deviations from a monotonic clock are known, | cases | |||
| it may be possible to adjust the threshold accordingly.</t> | (client aliveness, request freshness, state synchronization, network addre | |||
| <t>An attacker may be able to affect the server's system time in various w | ss | |||
| ays such as setting up a fake NTP server or broadcasting false time signals to r | reachability, etc.).</t> | |||
| adio-controlled clocks.</t> | <t>The security provided by the Echo and Request-Tag options depends on th | |||
| <t>For the purpose of generating timestamps for Echo a server MAY set a ti | e security | |||
| mer at reboot and use the time since reboot, choosing the granularity such that | protocol used. CoAP and HTTP proxies require (D)TLS to be terminated at th | |||
| different requests arrive at different times. Servers MAY intermittently reset | e proxies. | |||
| the timer and MAY generate a random offset applied to all timestamps. When reset | The proxies are therefore able to manipulate, inject, delete, or reorder o | |||
| ting the timer, the server MUST reject all Echo values that were created before | ptions or | |||
| the reset.</t> | packets. The security claims in such architectures only hold under the ass | |||
| <t>Servers that use the List of Cached Random Values and Timestamps method | umption | |||
| described in <xref target="echo-state" format="default"/> may be vulnerable to | that all intermediaries are fully trusted and have not been compromised.</ | |||
| resource exhaustion attacks. One way to minimize state is to use the Integrity P | t> | |||
| rotected Timestamp method described in <xref target="echo-state" format="default | ||||
| "/>.</t> | <t>Echo option values without the protection of randomness or a MAC are li | |||
| mited to cases | ||||
| when the client is the trusted source of all derived properties (as per <x | ||||
| ref | ||||
| target="source-of-truth" format="default"/>). Using them needs per-applica | ||||
| tion | ||||
| consideration of both the impact of a malicious client and of implementati | ||||
| on errors | ||||
| in clients. These Echo option values are the only legitimate case for Echo | ||||
| option | ||||
| values shorter | ||||
| than four bytes, which are not necessarily secret. They <bcp14>MUST NOT</b | ||||
| cp14> be | ||||
| used unless the Echo option values in the request are integrity protected, | ||||
| as per <xref | ||||
| target="echo-proc" format="default"/>.</t> | ||||
| <t>Servers <bcp14>SHOULD</bcp14> use a monotonic clock to generate timesta | ||||
| mps and | ||||
| compute round-trip times. Use of non-monotonic clocks is not secure, as th | ||||
| e server | ||||
| will accept expired Echo option values if the clock is moved backward. The | ||||
| server | ||||
| will also reject fresh Echo option values if the clock is moved forward. | ||||
| Non-monotonic clocks <bcp14>MAY</bcp14> be used as long as they have devia | ||||
| tions that | ||||
| are acceptable given the freshness requirements. If the deviations from a | ||||
| monotonic | ||||
| clock are known, it may be possible to adjust the threshold accordingly.</ | ||||
| t> | ||||
| <t>An attacker may be able to affect the server's system time in various w | ||||
| ays, such as | ||||
| setting up a fake NTP server or broadcasting false time signals to radio-c | ||||
| ontrolled | ||||
| clocks.</t> | ||||
| <t>For the purpose of generating timestamps for the Echo option, a server | ||||
| <bcp14>MAY</bcp14> set | ||||
| a timer at reboot and use the time since reboot, choosing the granularity | ||||
| such that | ||||
| different requests arrive at different times. Servers <bcp14>MAY</bcp14> | ||||
| intermittently reset the timer and <bcp14>MAY</bcp14> generate a random of | ||||
| fset | ||||
| applied to all timestamps. When resetting the timer, the server <bcp14>MUS | ||||
| T</bcp14> | ||||
| reject all Echo option values that were created before the reset.</t> | ||||
| <t>Servers that use the "List of Cached Random Values and Timestamps" meth | ||||
| od described | ||||
| in <xref target="echo-state" format="default"/> may be vulnerable to resou | ||||
| rce | ||||
| exhaustion attacks. One way to minimize the state is to use the "Integrity | ||||
| -Protected | ||||
| Timestamp" method described in <xref target="echo-state" format="default"/ | ||||
| >.</t> | ||||
| <section anchor="token-reuse" numbered="true" toc="default"> | <section anchor="token-reuse" numbered="true" toc="default"> | |||
| <name>Token reuse</name> | <name>Token Reuse</name> | |||
| <t>Reusing Tokens in a way so that responses are guaranteed to not be as | <t>Reusing Tokens in a way so that responses are guaranteed to not be as | |||
| sociated with the wrong request is not trivial: The server may process requests | sociated | |||
| in any order, and send multiple responses to the same request. An attacker may b | with the wrong request is not trivial. The server may process requests in | |||
| lock, delay, and reorder messages. The use of a sequence number is therefore rec | any | |||
| ommended when CoAP is used with a security protocol that does not provide bindin | order and send multiple responses to the same request. An attacker may bl | |||
| gs between requests and responses such as DTLS or TLS.</t> | ock, | |||
| <t>For a generic response to a Confirmable request over DTLS, binding ca | delay, and reorder messages. The use of a sequence number is therefore re | |||
| n only be claimed without out-of-band knowledge if</t> | commended | |||
| <ul spacing="normal"> | when CoAP is used with a security protocol that does not provide bindings | |||
| <li>the original request was never retransmitted,</li> | between | |||
| <li>the response was piggybacked in an Acknowledgement message (as a C | requests and responses, such as DTLS or TLS.</t> | |||
| onfirmable or Non-confirmable response may have been transmitted multiple times) | <t>For a generic response to a Confirmable request over DTLS, binding ca | |||
| , and</li> | n only be | |||
| <li>if observation was used, the same holds for the registration, all | claimed without out-of-band knowledge if:</t> | |||
| re-registrations, and the cancellation.</li> | ||||
| <ul spacing="normal"> | ||||
| <li>the original request was never retransmitted and</li> | ||||
| <li>the response was piggybacked in an Acknowledgement message (as a C | ||||
| onfirmable | ||||
| or Non-confirmable response may have been transmitted multiple times).< | ||||
| /li> | ||||
| </ul> | </ul> | |||
| <t>(In addition, for observations, any responses using that Token and a | <t>If observation was used, the same holds for the registration, all | |||
| DTLS sequence number earlier than the cancellation Acknowledgement message need | reregistrations, and the cancellation.</t> | |||
| to be discarded. This is typically not supported in DTLS implementations.)</t> | <t>(In addition, for observations, any responses using that Token and a | |||
| <t>In some setups, Tokens can be reused without the above constraints, a | DTLS | |||
| s a different component in the setup provides the associations:</t> | sequence number earlier than the cancellation Acknowledgement message nee | |||
| d to be | ||||
| discarded. This is typically not supported in DTLS implementations.)</t> | ||||
| <t>In some setups, Tokens can be reused without the above constraints, a | ||||
| s a | ||||
| different component in the setup provides the associations:</t> | ||||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li>In CoAP over TLS, retransmissions are not handled by the CoAP laye | <li>In CoAP over TLS, retransmissions are not handled by the CoAP laye | |||
| r and behaves like a replay window size of 1. When a client is sending TLS-prote | r and | |||
| cted requests without Observe to a single server, the client can reuse a Token a | behave like a replay window size of 1. When a client is sending TLS-pro | |||
| s soon as the previous response with that Token has been received.</li> | tected | |||
| <li>Requests whose responses are cryptographically bound to the reques | requests without Observe to a single server, the client can reuse a Tok | |||
| ts (like in OSCORE) can reuse Tokens indefinitely. | en as soon | |||
| <!-- could be added but is probably not worth the lines of text * Requests whose | as the previous response with that Token has been received.</li> | |||
| responses reflect all the data in the request that is varied over reuses of the | <li>Requests whose responses are cryptographically bound to the reques | |||
| same token (for example, if a token is always used on a single path with the si | ts (like in | |||
| ngle query parameter `?t=X` for various values of X, then the response needs to | OSCORE) can reuse Tokens indefinitely. | |||
| contain X in a unique position) can share a token, provided the application does | ||||
| not rely on the freshness of the responses, or sends different requests all the | ||||
| time. | ||||
| </li> | </li> | |||
| </ul> | </ul> | |||
| <t>In all other cases, a sequence number approach is RECOMMENDED as per | <t>In all other cases, a sequence number approach is <bcp14>RECOMMENDED< | |||
| <xref target="token" format="default"/>.</t> | /bcp14>, as | |||
| <t>Tokens that cannot be reused need to be handled appropriately. This c | per <xref target="token" format="default"/>.</t> | |||
| ould be solved by increasing the Token as soon as the currently used Token canno | <t>Tokens that cannot be reused need to be handled appropriately. This c | |||
| t be reused, or by keeping a list of all Tokens unsuitable for reuse.</t> | ould be | |||
| <t>When the Token (or part of the Token) contains a sequence number, the | solved by increasing the Token as soon as the currently used Token cannot | |||
| encoding of the sequence number has to be chosen in a way to avoid any collisio | be | |||
| ns. This is especially true when the Token contains more information than just t | reused or by keeping a list of all Tokens unsuitable for reuse.</t> | |||
| he sequence number, e.g. serialized state as in <xref target="RFC8974" format="d | <t>When the Token (or part of the Token) contains a sequence number, the | |||
| efault"/>.</t> | encoding | |||
| of the sequence number has to be chosen in a way to avoid any collisions. | ||||
| This is | ||||
| especially true when the Token contains more information than just the se | ||||
| quence | ||||
| number, e.g., the serialized state, as in <xref target="RFC8974" | ||||
| format="default"/>.</t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="priv-cons" numbered="true" toc="default"> | <section anchor="priv-cons" numbered="true" toc="default"> | |||
| <name>Privacy Considerations</name> | <name>Privacy Considerations</name> | |||
| <t>Implementations SHOULD NOT put any privacy-sensitive information in the | <t>Implementations <bcp14>SHOULD NOT</bcp14> put any privacy-sensitive inf | |||
| Echo or Request-Tag option values. Unencrypted timestamps could reveal informat | ormation in | |||
| ion about the server such as location or time since reboot, or that the server w | the Echo or Request-Tag option values. Unencrypted timestamps could reveal | |||
| ill accept expired certificates. Timestamps MAY be used if Echo is encrypted bet | information about the server, such as location, time since reboot, or that | |||
| ween the client and the server, e.g. in the case of DTLS without proxies or when | the | |||
| using OSCORE with an Inner Echo option.</t> | server will accept expired certificates. Timestamps <bcp14>MAY</bcp14> be | |||
| <t>Like HTTP cookies, the Echo option could potentially be abused as a tra | used if | |||
| cking mechanism that identifies a client across requests. This is especially tru | the Echo option is encrypted between the client and the server, e.g., in t | |||
| e for preemptive Echo values. Servers MUST NOT use the Echo option to correlate | he case of | |||
| requests for other purposes than freshness and reachability. Clients only send E | DTLS without | |||
| cho values to the same server from which the values were received. Compared to H | proxies or when using OSCORE with an Inner Echo option.</t> | |||
| TTP, CoAP clients are often authenticated and non-mobile, and servers can theref | <t>Like HTTP cookies, the Echo option could potentially be abused as a tra | |||
| ore often correlate requests based on the security context, the client credentia | cking | |||
| ls, or the network address. Especially when the Echo option increases a server's | mechanism that identifies a client across requests. This is especially tru | |||
| ability to correlate requests, clients MAY discard all preemptive Echo values.< | e for | |||
| /t> | preemptive Echo option values. Servers <bcp14>MUST NOT</bcp14> use the Ech | |||
| <t>Publicly visible generated identifiers, | o option to | |||
| even when opaque (as all defined in this document are), | correlate requests for other purposes than freshness and reachability. Cli | |||
| can leak information as described in <xref target="I-D.irtf-pearg-numeric-ids-ge | ents only | |||
| neration" format="default"/>. | send Echo option values to the same server from which the values were rece | |||
| To avoid effects described there, the absent Request-Tag option should be recycl | ived. Compared to | |||
| ed as much as possible. | HTTP, CoAP clients are often authenticated and non-mobile, and servers can | |||
| (That is generally possible as long as a security mechanism is in place - even i | therefore | |||
| n the case of OSCORE outer block-wise transfers, as the OSCORE option's variatio | often correlate requests based on the security context, the client credent | |||
| n ensures that no matchable requests are created by different clients). | ials, or | |||
| When an unprotected Echo option is used to demonstrate reachability, | the network address. Especially when the Echo option increases a server's | |||
| the recommended mechanism of <xref target="echo-proc" format="default"/> keeps t | ability to | |||
| he effects to a minimum.</t> | correlate requests, clients <bcp14>MAY</bcp14> discard all preemptive Echo | |||
| option values.</t> | ||||
| <t>Publicly visible generated identifiers, even when opaque (as all define | ||||
| d in this | ||||
| document are), can leak information as described in <xref | ||||
| target="I-D.irtf-pearg-numeric-ids-generation" format="default"/>. To avoi | ||||
| d the effects | ||||
| described there, the absent Request-Tag option should be recycled as much | ||||
| as possible. | ||||
| (That is generally possible as long as a security mechanism is in place -- | ||||
| even in the | ||||
| case of OSCORE outer block-wise transfers, as the OSCORE option's variatio | ||||
| n ensures | ||||
| that no matchable requests are created by different clients.) When an unpr | ||||
| otected | ||||
| Echo option is used to demonstrate reachability, the recommended mechanism | ||||
| of <xref | ||||
| target="echo-proc" format="default"/> keeps the effects to a minimum.</t> | ||||
| </section> | </section> | |||
| <section anchor="iana" numbered="true" toc="default"> | <section anchor="iana" numbered="true" toc="default"> | |||
| <name>IANA Considerations</name> | <name>IANA Considerations</name> | |||
| <t>IANA is requested to add the following option numbers to the "CoAP Opti | <t>IANA has added the following option numbers to the "CoAP Option Numbers | |||
| on Numbers" registry defined by <xref target="RFC7252" format="default"/>:</t> | " | |||
| <t>[</t> | registry defined by <xref target="RFC7252" format="default"/>:</t> | |||
| <t>The editor is asked to suggest the numbers after TBD, as those satisfy | <table anchor="iana-table" align="left"> | |||
| the construction requirements set out in RFC7252: | <name>Additions to CoAP Option Numbers Registry</name> | |||
| Echo is NoCacheKey but not Unsafe or Critical, so it needs to end with 11100 in | <thead> | |||
| binary representation; | <tr> | |||
| Request-Tag has no properties so it needs to end with 00 and not with 11100).</t | <th>Number</th> | |||
| > | <th>Name</th> | |||
| <t>Request-Tag was picked to not waste the precious space of less-than-one | <th>Reference</th> | |||
| -byte options, | </tr> | |||
| but such that its offset from the Block1 option it regularly occurs with can sti | </thead> | |||
| ll be expressed in an 1-byte offset (27 + (13 + 255) > 292).</t> | <tbody> | |||
| <t>Echo was picked to be the shortest it can be in an empty message as a N | <tr> | |||
| oCacheKey option | <td>252</td> | |||
| (11100 in binary does not fit in a nibble, and two lower ones are already taken) | <td>Echo</td> | |||
| , | <td>RFC 9175</td> | |||
| and as high as possible to keep room for other options that might typically occu | </tr> | |||
| r in pairs and might still use optimization around low numbers.</t> | <tr> | |||
| <t>]</t> | <td>292</td> | |||
| <figure anchor="iana-table"> | <td>Request-Tag</td> | |||
| <name>CoAP Option Numbers</name> | <td>RFC 9175</td> | |||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | </tr> | |||
| +--------+-------------+-------------------+ | </tbody> | |||
| | Number | Name | Reference | | </table> | |||
| +--------+-------------+-------------------+ | ||||
| | TBD252 | Echo | [[this document]] | | ||||
| | | | | | ||||
| | TBD292 | Request-Tag | [[this document]] | | ||||
| +--------+-------------+-------------------+ | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| </section> | </section> | |||
| </middle> | </middle> | |||
| <back> | <back> | |||
| <displayreference target="I-D.ietf-core-groupcomm-bis" to="GROUP-COAP"/> | ||||
| <displayreference target="I-D.ietf-core-oscore-groupcomm" to="GROUP-OSCORE"/ | ||||
| > | ||||
| <displayreference target="I-D.irtf-pearg-numeric-ids-generation" to="NUMERIC | ||||
| -IDS"/> | ||||
| <displayreference target="I-D.mattsson-core-coap-attacks" to="COAP-ATTACKS"/ | ||||
| > | ||||
| <references> | <references> | |||
| <name>References</name> | <name>References</name> | |||
| <references> | <references> | |||
| <name>Normative References</name> | <name>Normative References</name> | |||
| <reference anchor="RFC2119"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| <front> | C.2119.xml"/> | |||
| <title>Key words for use in RFCs to Indicate Requirement Levels</tit | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| le> | C.7252.xml"/> | |||
| <seriesInfo name="DOI" value="10.17487/RFC2119"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| <seriesInfo name="RFC" value="2119"/> | C.7959.xml"/> | |||
| <seriesInfo name="BCP" value="14"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| <author fullname="S. Bradner" initials="S." surname="Bradner"> | C.8174.xml"/> | |||
| <organization/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| </author> | C.8613.xml"/> | |||
| <date month="March" year="1997"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| <abstract> | FC.6347.xml"/> | |||
| <t>In many standards track documents several words are used to sig | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| nify the requirements in the specification. These words are often capitalized. | C.8470.xml"/> | |||
| This document defines these words as they should be interpreted in IETF document | ||||
| s. This document specifies an Internet Best Current Practices for the Internet | ||||
| Community, and requests discussion and suggestions for improvements.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="RFC7252"> | ||||
| <front> | ||||
| <title>The Constrained Application Protocol (CoAP)</title> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7252"/> | ||||
| <seriesInfo name="RFC" value="7252"/> | ||||
| <author fullname="Z. Shelby" initials="Z." surname="Shelby"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="K. Hartke" initials="K." surname="Hartke"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="C. Bormann" initials="C." surname="Bormann"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="June" year="2014"/> | ||||
| <abstract> | ||||
| <t>The Constrained Application Protocol (CoAP) is a specialized we | ||||
| b transfer protocol for use with constrained nodes and constrained (e.g., low-po | ||||
| wer, lossy) networks. The nodes often have 8-bit microcontrollers with small am | ||||
| ounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wir | ||||
| eless 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 appl | ||||
| ication endpoints, supports built-in discovery of services and resources, and in | ||||
| cludes key concepts of the Web such as URIs and Internet media types. CoAP is d | ||||
| esigned to easily interface with HTTP for integration with the Web while meeting | ||||
| specialized requirements such as multicast support, very low overhead, and simp | ||||
| licity for constrained environments.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="RFC7959"> | ||||
| <front> | ||||
| <title>Block-Wise Transfers in the Constrained Application Protocol | ||||
| (CoAP)</title> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7959"/> | ||||
| <seriesInfo name="RFC" value="7959"/> | ||||
| <author fullname="C. Bormann" initials="C." surname="Bormann"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="Z. Shelby" initials="Z." role="editor" surname="Sh | ||||
| elby"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="August" year="2016"/> | ||||
| <abstract> | ||||
| <t>The Constrained Application Protocol (CoAP) is a RESTful transf | ||||
| er protocol for constrained nodes and networks. Basic CoAP messages work well f | ||||
| or small payloads from sensors and actuators; however, applications will need to | ||||
| transfer larger payloads occasionally -- for instance, for firmware updates. I | ||||
| n 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 S | ||||
| ecurity (DTLS). These transports only offer fragmentation, which is even more p | ||||
| roblematic in constrained nodes and networks, limiting the maximum size of resou | ||||
| rce representations that can practically be transferred.</t> | ||||
| <t>Instead of relying on IP fragmentation, this specification exte | ||||
| nds basic CoAP with a pair of "Block" options for transferring multiple blocks o | ||||
| f information from a resource representation in multiple request-response pairs. | ||||
| In many important cases, the Block options enable a server to be truly statele | ||||
| ss: the server can handle each block transfer separately, with no need for a con | ||||
| nection setup or other server-side memory of previous block transfers. Essentia | ||||
| lly, 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 gener | ||||
| ally is limited in the size of the representations that can be exchanged, so the | ||||
| re is an expectation that the Block options will be widely used in CoAP implemen | ||||
| tations. Therefore, this specification updates RFC 7252.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="RFC8174"> | ||||
| <front> | ||||
| <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</ti | ||||
| tle> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8174"/> | ||||
| <seriesInfo name="RFC" value="8174"/> | ||||
| <seriesInfo name="BCP" value="14"/> | ||||
| <author fullname="B. Leiba" initials="B." surname="Leiba"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="May" year="2017"/> | ||||
| <abstract> | ||||
| <t>RFC 2119 specifies common key words that may be used in protoco | ||||
| l specifications. This document aims to reduce the ambiguity by clarifying tha | ||||
| t only UPPERCASE usage of the key words have the defined special meanings.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="RFC8613"> | ||||
| <front> | ||||
| <title>Object Security for Constrained RESTful Environments (OSCORE) | ||||
| </title> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8613"/> | ||||
| <seriesInfo name="RFC" value="8613"/> | ||||
| <author fullname="G. Selander" initials="G." surname="Selander"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="J. Mattsson" initials="J." surname="Mattsson"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="F. Palombini" initials="F." surname="Palombini"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="L. Seitz" initials="L." surname="Seitz"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="July" year="2019"/> | ||||
| <abstract> | ||||
| <t>This document defines Object Security for Constrained RESTful E | ||||
| nvironments (OSCORE), a method for application-layer protection of the Constrain | ||||
| ed Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE). | ||||
| OSCORE provides end-to-end protection between endpoints communicating using Co | ||||
| AP 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> | ||||
| </reference> | ||||
| <reference anchor="RFC6347"> | ||||
| <front> | ||||
| <title>Datagram Transport Layer Security Version 1.2</title> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC6347"/> | ||||
| <seriesInfo name="RFC" value="6347"/> | ||||
| <author fullname="E. Rescorla" initials="E." surname="Rescorla"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="N. Modadugu" initials="N." surname="Modadugu"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="January" year="2012"/> | ||||
| <abstract> | ||||
| <t>This document specifies version 1.2 of the Datagram Transport L | ||||
| ayer Security (DTLS) protocol. The DTLS protocol provides communications privac | ||||
| y for datagram protocols. The protocol allows client/server applications to com | ||||
| municate in a way that is designed to prevent eavesdropping, tampering, or messa | ||||
| ge forgery. The DTLS protocol is based on the Transport Layer Security (TLS) pr | ||||
| otocol and provides equivalent security guarantees. Datagram semantics of the u | ||||
| nderlying transport are preserved by the DTLS protocol. This document updates D | ||||
| TLS 1.0 to work with TLS version 1.2. [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="RFC8470"> | ||||
| <front> | ||||
| <title>Using Early Data in HTTP</title> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8470"/> | ||||
| <seriesInfo name="RFC" value="8470"/> | ||||
| <author fullname="M. Thomson" initials="M." surname="Thomson"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="M. Nottingham" initials="M." surname="Nottingham"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="W. Tarreau" initials="W." surname="Tarreau"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="September" year="2018"/> | ||||
| <abstract> | ||||
| <t>Using TLS early data creates an exposure to the possibility of | ||||
| a replay attack. This document defines mechanisms that allow clients to communi | ||||
| cate with servers about HTTP requests that are sent in early data. Techniques a | ||||
| re described that use these mechanisms to mitigate the risk of replay.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| </reference> | ||||
| </references> | </references> | |||
| <references> | <references> | |||
| <name>Informative References</name> | <name>Informative References</name> | |||
| <reference anchor="RFC7641"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| <front> | C.7641.xml"/> | |||
| <title>Observing Resources in the Constrained Application Protocol ( | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| CoAP)</title> | C.8323.xml"/> | |||
| <seriesInfo name="DOI" value="10.17487/RFC7641"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| <seriesInfo name="RFC" value="7641"/> | C.8446.xml"/> | |||
| <author fullname="K. Hartke" initials="K." surname="Hartke"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="September" year="2015"/> | ||||
| <abstract> | ||||
| <t>The Constrained Application Protocol (CoAP) is a RESTful applic | ||||
| ation 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 ex | ||||
| tension for CoAP that enables CoAP clients to "observe" resources, i.e., to retr | ||||
| ieve 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 s | ||||
| ending 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> | ||||
| </reference> | ||||
| <reference anchor="RFC8323"> | ||||
| <front> | ||||
| <title>CoAP (Constrained Application Protocol) over TCP, TLS, and We | ||||
| bSockets</title> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8323"/> | ||||
| <seriesInfo name="RFC" value="8323"/> | ||||
| <author fullname="C. Bormann" initials="C." surname="Bormann"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="S. Lemay" initials="S." surname="Lemay"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="K. Hartke" initials="K." surname="Hartke"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="B. Silverajan" initials="B." surname="Silverajan"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="B. Raymor" initials="B." role="editor" surname="Ra | ||||
| ymor"> | ||||
| <organization/> | ||||
| </author> | ||||
| <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 do | ||||
| cument outlines the changes required to use CoAP over TCP, TLS, and WebSockets t | ||||
| ransports. 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> | ||||
| </reference> | ||||
| <reference anchor="RFC8446"> | ||||
| <front> | ||||
| <title>The Transport Layer Security (TLS) Protocol Version 1.3</titl | ||||
| e> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8446"/> | ||||
| <seriesInfo name="RFC" value="8446"/> | ||||
| <author fullname="E. Rescorla" initials="E." surname="Rescorla"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="August" year="2018"/> | ||||
| <abstract> | ||||
| <t>This document specifies version 1.3 of the Transport Layer Secu | ||||
| rity (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 50 | ||||
| 77, 5246, and 6961. This document also specifies new requirements for TLS 1.2 i | ||||
| mplementations.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="I-D.ietf-core-groupcomm-bis"> | ||||
| <front> | ||||
| <title>Group Communication for the Constrained Application Protocol | ||||
| (CoAP)</title> | ||||
| <seriesInfo name="Internet-Draft" value="draft-ietf-core-groupcomm-b | ||||
| is-04"/> | ||||
| <author fullname="Esko Dijk"> | ||||
| <organization>IoTconsultancy.nl</organization> | ||||
| </author> | ||||
| <author fullname="Chonggang Wang"> | ||||
| <organization>InterDigital</organization> | ||||
| </author> | ||||
| <author fullname="Marco Tiloca"> | ||||
| <organization>RISE AB</organization> | ||||
| </author> | ||||
| <date day="12" month="July" year="2021"/> | ||||
| <abstract> | ||||
| <t> This document specifies the use of the Constrained Applicati | ||||
| on | ||||
| Protocol (CoAP) for group communication, including the use of UDP/IP | ||||
| multicast as the default underlying data transport. Both unsecured | ||||
| and secured CoAP group communication are specified. Security is | ||||
| achieved by use of the Group Object Security for Constrained RESTful | ||||
| Environments (Group OSCORE) protocol. The target application area of | ||||
| this specification is any group communication use cases that involve | ||||
| resource-constrained devices or networks that support CoAP. This | ||||
| document replaces RFC7390, while it updates RFC7252 and RFC7641. | ||||
| </t> | <!-- [I-D.ietf-core-groupcomm-bis] I-D Exists --> | |||
| </abstract> | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D. | |||
| </front> | ietf-core-groupcomm-bis.xml"/> | |||
| </reference> | ||||
| <reference anchor="I-D.ietf-core-oscore-groupcomm"> | ||||
| <front> | ||||
| <title>Group OSCORE - Secure Group Communication for CoAP</title> | ||||
| <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-grou | ||||
| pcomm-12"/> | ||||
| <author fullname="Marco Tiloca"> | ||||
| <organization>RISE AB</organization> | ||||
| </author> | ||||
| <author fullname="Göran Selander"> | ||||
| <organization>Ericsson AB</organization> | ||||
| </author> | ||||
| <author fullname="Francesca Palombini"> | ||||
| <organization>Ericsson AB</organization> | ||||
| </author> | ||||
| <author fullname="John Preuss Mattsson"> | ||||
| <organization>Ericsson AB</organization> | ||||
| </author> | ||||
| <author fullname="Jiye Park"> | ||||
| <organization>Universitaet Duisburg-Essen</organization> | ||||
| </author> | ||||
| <date day="12" month="July" year="2021"/> | ||||
| <abstract> | ||||
| <t> This document defines Group Object Security for Constrained | ||||
| RESTful | ||||
| Environments (Group OSCORE), providing end-to-end security of CoAP | ||||
| messages exchanged between members of a group, e.g., sent over IP | ||||
| multicast. In particular, the described approach defines how OSCORE | ||||
| is used in a group communication setting to provide source | ||||
| authentication for CoAP group requests, sent by a client to multiple | ||||
| servers, and for protection of the corresponding CoAP responses. | ||||
| Group OSCORE also defines a pairwise mode where each member of the | ||||
| group can efficiently derive a symmetric pairwise key with any other | ||||
| member of the group for pairwise OSCORE communication. | ||||
| </t> | <!-- [I-D.ietf-core-oscore-groupcomm] I-D Exists --> | |||
| </abstract> | <reference anchor="I-D.ietf-core-oscore-groupcomm"> | |||
| </front> | <front> | |||
| </reference> | <title>Group OSCORE - Secure Group Communication for CoAP</title> | |||
| <reference anchor="I-D.mattsson-core-coap-attacks"> | <author fullname="Marco Tiloca"> | |||
| <front> | <organization>RISE AB</organization> | |||
| <title>CoAP Attacks</title> | </author> | |||
| <seriesInfo name="Internet-Draft" value="draft-mattsson-core-coap-at | <author fullname="Göran Selander"> | |||
| tacks-01"/> | <organization>Ericsson AB</organization> | |||
| <author fullname="John Preuß Mattsson"> | </author> | |||
| <organization>Ericsson AB</organization> | <author fullname="Francesca Palombini"> | |||
| </author> | <organization>Ericsson AB</organization> | |||
| <author fullname="John Fornehed"> | </author> | |||
| <organization>Ericsson AB</organization> | <author initials="J" surname="Preuß Mattsson" fullname="John Preuß Mattsson"> | |||
| </author> | <organization>Ericsson AB</organization> | |||
| <author fullname="Göran Selander"> | </author> | |||
| <organization>Ericsson AB</organization> | <author fullname="Jiye Park"> | |||
| </author> | <organization>Universitaet Duisburg-Essen</organization> | |||
| <author fullname="Francesca Palombini"> | </author> | |||
| <organization>Ericsson AB</organization> | <date month="October" day="25" year="2021"/> | |||
| </author> | </front> | |||
| <author fullname="Christian Amsüss"> | <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-groupcomm-13"/> | |||
| <organization>Energy Harvesting Solutions</organization> | <format type="TXT" target="https://www.ietf.org/archive/id/draft-ietf-core-oscor | |||
| </author> | e-groupcomm-13.txt"/> | |||
| <date day="27" month="July" year="2021"/> | </reference> | |||
| <abstract> | ||||
| <t> Being able to securely read information from sensors, to sec | ||||
| urely | ||||
| control actuators, and to not enable distributed denial-of-service | ||||
| attacks are essential in a world of connected and networking things | ||||
| interacting with the physical world. This document summarizes a | ||||
| number of known attacks on CoAP and show that just using CoAP with a | ||||
| security protocol like DTLS, TLS, or OSCORE is not enough for secure | ||||
| operation. The document also summarizes different denial-of-service | ||||
| attacks using CoAP. The goal with this document is motivating | ||||
| generic and protocol-specific recommendations on the usage of CoAP. | ||||
| Several of the discussed attacks can be mitigated with the solutions | ||||
| in draft-ietf-core-echo-request-tag. | ||||
| </t> | <!-- [I-D.mattsson-core-coap-attacks] I-D Exists --> | |||
| </abstract> | <reference anchor="I-D.mattsson-core-coap-attacks"> | |||
| </front> | <front> | |||
| </reference> | <title>Attacks on the Constrained Application Protocol (CoAP)</title> | |||
| <reference anchor="RFC8974"> | <author initials="J" surname="Preuß Mattsson" fullname="John Preuß Mattsson"> | |||
| <front> | <organization>Ericsson AB</organization> | |||
| <title>Extended Tokens and Stateless Clients in the Constrained Appl | </author> | |||
| ication Protocol (CoAP)</title> | <author fullname="John Fornehed"> | |||
| <seriesInfo name="DOI" value="10.17487/RFC8974"/> | <organization>Ericsson AB</organization> | |||
| <seriesInfo name="RFC" value="8974"/> | </author> | |||
| <author fullname="K. Hartke" initials="K." surname="Hartke"> | <author fullname="Göran Selander"> | |||
| <organization/> | <organization>Ericsson AB</organization> | |||
| </author> | </author> | |||
| <author fullname="M. Richardson" initials="M." surname="Richardson"> | <author fullname="Francesca Palombini"> | |||
| <organization/> | <organization>Ericsson AB</organization> | |||
| </author> | </author> | |||
| <date month="January" year="2021"/> | <author fullname="Christian Amsüss"> | |||
| <abstract> | <organization>Energy Harvesting Solutions</organization> | |||
| <t>This document provides considerations for alleviating Constrain | </author> | |||
| ed Application Protocol (CoAP) clients and intermediaries of keeping per-request | <date month="July" day="27" year="2021"/> | |||
| state. To facilitate this, this document additionally introduces a new, optiona | </front> | |||
| l CoAP protocol extension for extended token lengths. </t> | <seriesInfo name="Internet-Draft" value="draft-mattsson-core-coap-attacks-01"/> | |||
| <t>This document updates RFCs 7252 and 8323 with an extended defin | <format type="TXT" target="https://www.ietf.org/archive/id/draft-mattsson-core-c | |||
| ition of the "TKL" field in the CoAP message header.</t> | oap-attacks-01.txt"/> | |||
| </abstract> | </reference> | |||
| </front> | ||||
| </reference> | ||||
| <reference anchor="REST" target="https://www.ics.uci.edu/~fielding/pubs/ | ||||
| dissertation/fielding_dissertation.pdf"> | ||||
| <front> | ||||
| <title>Architectural Styles and the Design of Network-based Software | ||||
| Architectures</title> | ||||
| <author initials="R." surname="Fielding"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date year="2000"/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="RFC9000"> | ||||
| <front> | ||||
| <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC9000"/> | ||||
| <seriesInfo name="RFC" value="9000"/> | ||||
| <author fullname="J. Iyengar" initials="J." role="editor" surname="I | ||||
| yengar"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="M. Thomson" initials="M." role="editor" surname="T | ||||
| homson"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="May" year="2021"/> | ||||
| <abstract> | ||||
| <t>This document defines the core of the QUIC transport protocol. | ||||
| QUIC provides applications with flow-controlled streams for structured communic | ||||
| ation, low-latency connection establishment, and network path migration. QUIC in | ||||
| cludes security measures that ensure confidentiality, integrity, and availabilit | ||||
| y in a range of deployment circumstances. Accompanying documents describe the i | ||||
| ntegration of TLS for key negotiation, loss detection, and an exemplary congesti | ||||
| on control algorithm.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="I-D.irtf-pearg-numeric-ids-generation"> | ||||
| <front> | ||||
| <title>On the Generation of Transient Numeric Identifiers</title> | ||||
| <seriesInfo name="Internet-Draft" value="draft-irtf-pearg-numeric-id | ||||
| s-generation-07"/> | ||||
| <author fullname="Fernando Gont"> | ||||
| <organization>SI6 Networks</organization> | ||||
| </author> | ||||
| <author fullname="Ivan Arce"> | ||||
| <organization>Quarkslab</organization> | ||||
| </author> | ||||
| <date day="2" month="February" year="2021"/> | ||||
| <abstract> | ||||
| <t> This document performs an analysis of the security and priva | ||||
| cy | ||||
| implications of different types of "transient numeric identifiers" | ||||
| used in IETF protocols, and tries to categorize them based on their | ||||
| interoperability requirements and their associated failure severity | ||||
| when such requirements are not met. Subsequently, it provides advice | ||||
| on possible algorithms that could be employed to satisfy the | ||||
| interoperability requirements of each identifier category, while | ||||
| minimizing the negative security and privacy implications, thus | ||||
| providing guidance to protocol designers and protocol implementers. | ||||
| Finally, it describes a number of algorithms that have been employed | ||||
| in real implementations to generate transient numeric identifiers, | ||||
| and analyzes their security and privacy properties. This document is | ||||
| a product of the Privacy Enhancement and Assessment Research Group | ||||
| (PEARG) in the IRTF. | ||||
| </t> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| </abstract> | C.8974.xml"/> | |||
| </front> | ||||
| </reference> | <reference anchor="REST" target="https://www.ics.uci.ed | |||
| u/~fielding/pubs/dissertation/fielding_dissertation.pdf"> | ||||
| <front> | ||||
| <title>Architectural Styles and the Design of Network-based Software | ||||
| Architectures</title> | ||||
| <author initials="R." surname="Fielding"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date year="2000"/> | ||||
| </front> | ||||
| </reference> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.9000.xml"/> | ||||
| <!-- [I-D.irtf-pearg-numeric-ids-generation] IRSG Review Revised I-D Need | ||||
| ed --> | ||||
| <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D. | ||||
| irtf-pearg-numeric-ids-generation.xml"/> | ||||
| </references> | </references> | |||
| </references> | </references> | |||
| <section anchor="echo-state" numbered="true" toc="default"> | <section anchor="echo-state" numbered="true" toc="default"> | |||
| <name>Methods for Generating Echo Option Values</name> | <name>Methods for Generating Echo Option Values</name> | |||
| <t>The content and structure of the Echo option value are implementation s | <t>The content and structure of the Echo option value are implementation s | |||
| pecific and determined by the server. Two simple mechanisms for time-based fresh | pecific and | |||
| ness and one for event-based freshness are outlined in this section, the first i | determined by the server. Two simple mechanisms for time-based freshness a | |||
| s RECOMMENDED in general, and the second is RECOMMENDED in case the Echo option | nd one for | |||
| is encrypted between the client and the server.</t> | event-based freshness are outlined in this appendix. The "List of Cached R | |||
| <t>Different mechanisms have different tradeoffs between the size of the E | andom | |||
| cho option value, the amount of server state, the amount of computation, and the | Values and Timestamps" mechanism is | |||
| security properties offered. A server MAY use different methods and security le | <bcp14>RECOMMENDED</bcp14> in general. The "Integrity-Protected Timestamp" | |||
| vels for different uses cases (client aliveness, request freshness, state synchr | mechanism is <bcp14>RECOMMENDED</bcp14> | |||
| onization, network address reachability, etc.).</t> | in case the Echo option is encrypted between the client and the server.</t | |||
| <t>1. List of Cached Random Values and Timestamps. The Echo option value i | > | |||
| s a (pseudo-)random byte string called r. The server caches a list containing th | <t>Different mechanisms have different trade-offs between the size of the | |||
| e random byte strings and their transmission times. Assuming 72-bit random value | Echo option | |||
| s and 32-bit timestamps, the size of the Echo option value is 9 bytes and the am | value, the amount of server state, the amount of computation, and the secu | |||
| ount of server state is 13n bytes, where n is the number of active Echo Option v | rity | |||
| alues. The security against an attacker guessing echo values is given by s = bit | properties offered. A server <bcp14>MAY</bcp14> use different methods and | |||
| length of r - log2(n). The length of r and the maximum allowed n should be set | security | |||
| so that the security level is harmonized with other parts of the deployment, e.g | levels for different use cases (client aliveness, request freshness, state | |||
| ., s >= 64. If the server loses time continuity, e.g. due to reboot, the entr | synchronization, network address reachability, etc.).</t> | |||
| ies in the old list MUST be deleted.</t> | <ol spacing="normal"> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | <li><t>List of Cached Random Values and Timestamps. The Echo option value | |||
| Echo option value: random value r | is a | |||
| Server State: random value r, timestamp t0 | (pseudo)random byte string called r. The server caches a list containin | |||
| ]]></artwork> | g the | |||
| <t>This method is suitable both for time- and for event-based freshness (e | random byte strings and their initial transmission times. Assuming 72-b | |||
| .g. by clearing the cache when an event occurs), | it random | |||
| and independent of the client authority.</t> | values | |||
| <t>2. Integrity Protected Timestamp. The Echo option value is an integrity | and 32-bit timestamps, the size of the Echo option value is 9 bytes and | |||
| protected timestamp. The timestamp can have different resolution and range. A 3 | the | |||
| 2-bit timestamp can e.g. give a resolution of 1 second with a range of 136 years | amount of server state is 13n bytes, where n is the number of active Ec | |||
| . The (pseudo-)random secret key is generated by the server and not shared with | ho option | |||
| any other party. The use of truncated HMAC-SHA-256 is RECOMMENDED. With a 32-bit | values. The security against an attacker guessing Echo option values is | |||
| timestamp and a 64-bit MAC, the size of the Echo option value is 12 bytes and t | given by | |||
| he Server state is small and constant. The security against an attacker guessing | s = bit | |||
| echo values is given by the MAC length. If the server loses time continuity, e. | length of r - log2(n). The length of r and the maximum allowed n should | |||
| g. due to reboot, the old key MUST be deleted and replaced by a new random secre | be set so | |||
| t key. Note that the privacy considerations in <xref target="priv-cons" format=" | that the security level is harmonized with other parts of the deploymen | |||
| default"/> may apply to the timestamp. Therefore, it might be important to encry | t, e.g., s | |||
| pt it. Depending on the choice of encryption algorithms, this may require an ini | >= 64. If the server loses time continuity, e.g., due to reboot, the | |||
| tialization vector to be included in the Echo option value, see below.</t> | entries | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | in the old list <bcp14>MUST</bcp14> be deleted.</t> | |||
| Echo option value: timestamp t0, MAC(k, t0) | <dl> | |||
| Server State: secret key k | <dt>Echo option value:</dt><dd>random value r</dd> | |||
| ]]></artwork> | <dt>Server State:</dt><dd>random value r, timestamp t0</dd> | |||
| <t>This method is suitable both for time- and for event-based freshness (b | </dl> | |||
| y the server remembering the time at which the event took place), | <t>This method is suitable for both time-based and event-based freshnes | |||
| and independent of the client authority.</t> | s (e.g., | |||
| <t>If this method is used to additionally obtain network reachability of t | by clearing the cache when an event occurs) and is independent of the c | |||
| he client, | lient | |||
| the server MUST use the client's network address too, e.g. as in <tt>MAC(k, t0 | authority.</t> | |||
| , apparent network address)</tt>.</t> | </li> | |||
| <t>3. Persistent Counter. This can be used in OSCORE for sequence number r | <li><t>Integrity-Protected Timestamp. The Echo option value is an | |||
| ecovery per Appendix B.1.2 of <xref target="RFC8613" format="default"/>. The Ech | integrity-protected | |||
| o option value is a simple counter without integrity protection of its own, seri | timestamp. The timestamp can have a different resolution and range. A 3 | |||
| alized in uint format. The counter is incremented in a persistent way every time | 2-bit | |||
| the state that needs to be synchronized is changed (in the B.1.2 case: when a r | timestamp can, e.g., give a resolution of 1 second with a range of 136 | |||
| eboot indicates that volatile state may have been lost). An example of how such | years. The | |||
| a persistent counter can be implemented efficiently is the OSCORE server Sender | (pseudo)random secret key is generated by the server and not shared wit | |||
| Sequence Number mechanism described in Appendix B.1.1 of <xref target="RFC8613" | h any | |||
| format="default"/>.</t> | other party. The use of truncated HMAC-SHA-256 is <bcp14>RECOMMENDED</b | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | cp14>. | |||
| Echo option value: counter | With a 32-bit timestamp and a 64-bit MAC, the size of the Echo option v | |||
| Server State: counter | alue is 12 | |||
| ]]></artwork> | bytes, and the server state is small and constant. The security against | |||
| <t>This method is suitable only if the client is the authority over the sy | an | |||
| nchronized property. | attacker guessing Echo option values is given by the MAC length. If the | |||
| Consequently, it cannot be used to show client aliveness. | server loses | |||
| It provides statements from the client similar to event based freshness (but w | time continuity, e.g., due to reboot, the old key <bcp14>MUST</bcp14> b | |||
| ithout a proof of freshness).</t> | e deleted | |||
| <t>Other mechanisms complying with the security and privacy considerations | and replaced by a new random secret key. Note that the privacy consider | |||
| may be used. The use of encrypted timestamps in the Echo option provides additi | ations in | |||
| onal protection, but typically requires an initialization vector (a.k.a. nonce) | <xref target="priv-cons" format="default"/> may apply to the timestamp. | |||
| as input to the encryption algorithm, which adds a slight complication to the pr | Therefore, it might be important to encrypt it. Depending on the choice | |||
| ocedure as well as overhead.</t> | of | |||
| encryption algorithms, this may require an initialization vector to be | ||||
| included | ||||
| in the Echo option value (see below).</t> | ||||
| <dl> | ||||
| <dt>Echo option value:</dt><dd>timestamp t0, MAC(k, t0)</dd> | ||||
| <dt>Server State:</dt><dd>secret key k</dd> | ||||
| </dl> | ||||
| <t>This method is suitable for both time-based and event-based freshnes | ||||
| s (by the | ||||
| server remembering the time at which the event took place) and independ | ||||
| ent of | ||||
| the client authority.</t> | ||||
| <t>If this method is used to additionally obtain network reachability o | ||||
| f the | ||||
| client, the server <bcp14>MUST</bcp14> use the client's network address | ||||
| too, e.g., | ||||
| as in MAC(k, t0, claimed network address).</t> | ||||
| </li> | ||||
| <li><t>Persistent Counter. This can be used in OSCORE for sequence number | ||||
| recovery, | ||||
| per <xref | ||||
| target="RFC8613" sectionFormat="of" section="B.1.2"/>. The Echo option | ||||
| value is a simple counter without integrity protection of its own, serial | ||||
| ized in | ||||
| uint format. The counter is incremented in a persistent way every time th | ||||
| e state | ||||
| that needs to be synchronized is changed (in the case described in <xref | ||||
| target="RFC8613" | ||||
| sectionFormat="of" section="B.1.2"/>, when a reboot | ||||
| indicates that volatile state may have been lost). An example of how such | ||||
| a | ||||
| persistent counter can be implemented efficiently is the OSCORE server Se | ||||
| nder | ||||
| Sequence Number mechanism described in <xref target="RFC8613" | ||||
| sectionFormat="of" section="B.1.1"/>.</t> | ||||
| <dl> | ||||
| <dt>Echo option value:</dt><dd>counter</dd> | ||||
| <dt>Server State:</dt><dd>counter</dd> | ||||
| </dl> | ||||
| <t>This method is suitable only if the client is the authority over the | ||||
| synchronized property. Consequently, it cannot be used to show client a | ||||
| liveness. | ||||
| It provides statements from the client similar to event-based freshness | ||||
| (but | ||||
| without a proof of freshness).</t> | ||||
| </li> | ||||
| </ol> | ||||
| <t>Other mechanisms complying with the security and privacy considerati | ||||
| ons may be | ||||
| used. The use of encrypted timestamps in the Echo option provides addit | ||||
| ional | ||||
| protection but typically requires an initialization vector (a.k.a. nonc | ||||
| e) as | ||||
| input to the encryption algorithm, which adds a slight complication to | ||||
| the | ||||
| procedure as well as overhead.</t> | ||||
| </section> | </section> | |||
| <section anchor="request-tag-message-size-impact" numbered="true" toc="defau lt"> | <section anchor="request-tag-message-size-impact" numbered="true" toc="defau lt"> | |||
| <name>Request-Tag Message Size Impact</name> | <name>Request-Tag Message Size Impact</name> | |||
| <t>In absence of concurrent operations, the Request-Tag mechanism for body | <t>In absence of concurrent operations, the Request-Tag mechanism for body | |||
| integrity (<xref target="body-integrity" format="default"/>) incurs no overhead | integrity | |||
| if no messages are lost (more precisely: in OSCORE, if no operations are aborte | (<xref target="body-integrity" format="default"/>) incurs no overhead if n | |||
| d due to repeated transmission failure; in DTLS, if no packets are lost and repl | o messages | |||
| ay protection is active), | are lost (more precisely, in OSCORE, if no operations are aborted due to r | |||
| or when block-wise request operations happen rarely (in OSCORE, if there is alwa | epeated | |||
| ys only one request block-wise operation in the replay window).</t> | transmission failure and, in DTLS, if no packets are lost and replay prote | |||
| <t>In those situations, no message has any Request-Tag option set, and tha | ction is | |||
| t can be recycled indefinitely.</t> | active) or when block-wise request operations happen rarely (in OSCORE, if | |||
| <t>When the absence of a Request-Tag option cannot be recycled any more wi | there is | |||
| thin a security context, the messages with a present but empty Request-Tag optio | always only one request block-wise operation in the replay window).</t> | |||
| n can be used (1 Byte overhead), and when that is used-up, 256 values from one b | ||||
| yte long options (2 Bytes overhead) are available.</t> | <t>In those situations, no message has any Request-Tag option set, and the | |||
| <t>In situations where those overheads are unacceptable (e.g. because the | Request-Tag value can be recycled indefinitely.</t> | |||
| payloads are known to be at a fragmentation threshold), the absent Request-Tag v | <t>When the absence of a Request-Tag option cannot be recycled any more wi | |||
| alue can be made usable again:</t> | thin a | |||
| security context, the messages with a present but empty Request-Tag option | ||||
| can be | ||||
| used (1 byte overhead), and when that is used up, 256 values from 1-byte | ||||
| options (2 bytes overhead) are available.</t> | ||||
| <t>In situations where that overhead is unacceptable (e.g., because the pa | ||||
| yloads | ||||
| are known to be at a fragmentation threshold), the absent Request-Tag valu | ||||
| e can be | ||||
| made usable again:</t> | ||||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li>In DTLS, a new session can be established.</li> | <li>In DTLS, a new session can be established.</li> | |||
| <li>In OSCORE, the sequence number can be artificially increased so that | <li>In OSCORE, the sequence number can be artificially increased so that | |||
| all lost messages are outside of the replay window by the time the first reques | all lost | |||
| t of the new operation gets processed, and all earlier operations can therefore | messages are outside of the replay window by the time the first request o | |||
| be regarded as concluded.</li> | f the new | |||
| </ul> | operation gets processed, and all earlier operations can therefore be reg | |||
| </section> | arded as | |||
| <section anchor="change-log" numbered="true" toc="default"> | concluded.</li> | |||
| <name>Change Log</name> | ||||
| <t>[ The editor is asked to remove this section before publication. ]</t> | ||||
| <ul spacing="normal"> | ||||
| <li> | ||||
| <t>Changes since draft-ietf-core-echo-request-tag-13 </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Minor editorial fixes.</li> | ||||
| <li> | ||||
| <t>Wording enhancements: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>nonce -> initialization vector</li> | ||||
| <li>information extracted by the sever -> information conveye | ||||
| d to the server</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li>Acknowledgements updated.</li> | ||||
| <li>Changelog for -13 added (previous upload just pointed to other r | ||||
| esources).</li> | ||||
| <li>Short title is "Echo, Request-Tag, and Token Processing" now ins | ||||
| tead of outdated acronym.</li> | ||||
| <li>Informative reference to RFC 7390 is now to draft-ietf-core-grou | ||||
| pcomm-bis</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Changes since draft-ietf-core-echo-request-tag-12 (addressing comme | ||||
| nts from IESG review) </t> | ||||
| <t> | ||||
| See CoRE point-to-point responses at <eref target="https://github.com/core-wg/ec | ||||
| ho-request-tag/blob/master/point-to-point.md">https://github.com/core-wg/echo-re | ||||
| quest-tag/blob/master/point-to-point.md</eref> and on CoRE mailing list. </t> | ||||
| <ul spacing="normal"> | ||||
| <li> | ||||
| <t>Add subsection "Characterization of Echo Applications". | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Changes in applications and appendices to use the newly intr | ||||
| oduced terms.</li> | ||||
| <li>In particular, some of the legitimization for using short Ec | ||||
| ho values was drawn from the applications being event based; the concept of the | ||||
| client being the "Authority over [the] Used Information" now legitimizes these m | ||||
| ore precisely.</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li>Add subsection "Updated Amplification Mitigation Requirements fo | ||||
| r Servers". It contains the normative text updating RFC 7252 w/rt recommended mi | ||||
| tigation methods, which previously happened in passing.</li> | ||||
| <li> | ||||
| <t>Amplification mitigation: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Increase precision: Reachability check is performed once per | ||||
| endpoint (was: peer).</li> | ||||
| <li>State that amplification factor applies to the sum of all (p | ||||
| reviously: "the size of the", implicitly, single) returned packets.</li> | ||||
| <li>Fix odd wording around how the Echo value would "contain" th | ||||
| e claimed address: was meant to contain in a cryptographic sense, now clarified | ||||
| in that a MAC is recommended</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li>Define "preemptive Echo value" that was previously used without | ||||
| definition; another occurrence of the concept was simplified using the term.</li | ||||
| > | ||||
| <li>Add considerations for the use of DTLS without replay protection | ||||
| .</li> | ||||
| <li>Privacy considerations: Address concerns raised in various numer | ||||
| ic-ids documents.</li> | ||||
| <li>Explicitly state expected security modes for Echo applications a | ||||
| nd examples.</li> | ||||
| <li>Fix of requirements for H-C proxies: They <em>MUST NOT</em> rela | ||||
| y unsafe requests. (Previously, it only said that they SHOULD use a particular m | ||||
| ethod, but not clearly that some method is mandated.)</li> | ||||
| <li>Clarify that state synchonization is an application of the fresh | ||||
| ness results in combination with some transported application data, and not an i | ||||
| mmediate result of using Echo alone.</li> | ||||
| <li>Add text to tie together applications and suggested mechanisms < | ||||
| !-- eg. 92070767 as I'm pretty sure I wouldn't find that when asked for it --> | ||||
| </li> | ||||
| <li>Restrict C-C proxy allowed behavior: Only safe requests (incorre | ||||
| ctly said "idempotent") may be used to proactively populate the proxy's cache.</ | ||||
| li> | ||||
| <li> | ||||
| <t>Justify some "SHOULD"s by outlining justification for different | ||||
| behavior. | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Normatively require H-C proxies to process Echo if they're j | ||||
| ustified to do so, as no alternatives are available.</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Reference updates: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>QUIC is now RFC9000; precise section given as amplification | ||||
| reference.</li> | ||||
| <li>Add note for RFC editor that RFC6347 can be upgraded to DTLS | ||||
| 1.3 if C321 overtakes C280</li> | ||||
| <li>Follow the core-coap-actuators to core-coap-attacks update</ | ||||
| li> | ||||
| <li>RFC8470 reference is now normative (as using what's defined | ||||
| there has been RECOMMENDED already)</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Editorial fixes | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Rewording of confusing sentences in amplification mitigation | ||||
| and inner-/outer Echo values</li> | ||||
| <li>Replace "blacklist" terminology with "deny-list" where left | ||||
| after other changes</li> | ||||
| <li>Removed sloppy use of Echo as a verb</li> | ||||
| <li>Minor clarifications</li> | ||||
| <li>Remove duplicate statements</li> | ||||
| <li>Typography and spelling fixes</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Fixes that are not editorial but minor | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Freshness is about time, of which round-trip time (specializ | ||||
| ation now removed) is only a part.</li> | ||||
| <li>Reference how HTTP <em>1.1</em> does it when explaining toke | ||||
| n requirements, as that's an easily and widely understood baseline.</li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Changes since draft-ietf-core-echo-request-tag-11 (addressing GenAR | ||||
| T, TSVART, OpsDir comments) </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Explain the size permissible for responses before amplification | ||||
| mitigation by referring to the QUIC draft for an OK factor, and giving the remai | ||||
| ning numbers that led to it. The actual number is reduced from 152 to 136 becaus | ||||
| e the more conservative case of the attacker not sending a token is considered n | ||||
| ow.</li> | ||||
| <li>Added a definition for "freshness"</li> | ||||
| <li>Give more concrete example values in figures 2 and 3 (based on t | ||||
| he appendix suggestions), highlighting the differences between the figures by te | ||||
| lling how they are processed in the examples.</li> | ||||
| <li>Figure with option summary: E/U columns removed (for duplicate h | ||||
| eaders and generally not contributing)</li> | ||||
| <li>MAY capitalization changed for consistency.</li> | ||||
| <li>Editorial changes (IV acronym expanded, s/can not/cannot/g)</li> | ||||
| <li>Draft ietf-core-stateless has become RFC8974</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Changes since draft-ietf-core-echo-request-tag-10 (Barry's comments | ||||
| ) </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Align terminology on attacker</li> | ||||
| <li>A number of clarifications and editorial fixes</li> | ||||
| <li>Promote DTLS and OSCORE to normative references</li> | ||||
| <li>Add counter-based version to the Methods for Generating Echo Opt | ||||
| ion Values appendix</li> | ||||
| <li>Use 64-bit randomness recommendation throughout (but keep it as | ||||
| SHOULD so applications with strict requirements can reduce if if really needed)< | ||||
| /li> | ||||
| <li>Speling and Capitalization</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Changes since draft-ietf-core-echo-request-tag-09: </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Allow intermediaries to do Echo processing, provided they ask at | ||||
| least as much freshness as they forward</li> | ||||
| <li>Emphasize that clients can forget Echo to further discourage abu | ||||
| se as cookies</li> | ||||
| <li>Emphasize that RESTful application design can avoid the need for | ||||
| a Request-Tag</li> | ||||
| <li>Align with core-oscore-groupcomm-09</li> | ||||
| <li>Add interaction with HTTP Early Data / 425 Too Early</li> | ||||
| <li>Abstract: Explicitly mention both updates to 7252</li> | ||||
| <li>Change requested option number of Echo to 252 (previous property | ||||
| calculation was erroneous)</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Changes since draft-ietf-core-echo-request-tag-08: </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Make amplification attack mitigation by Echo an RFC7252 updating | ||||
| recommendation</li> | ||||
| <li>Give some more concrete guidance to that use case in terms of si | ||||
| zes and message types</li> | ||||
| <li>Allow short (1-3 byte) Echo values for deterministic cases, with | ||||
| according security considerations</li> | ||||
| <li>Point out the tricky parts around Request-Tag for stateless prox | ||||
| ies, and make that purely an outlook example with out-of-scope details</li> | ||||
| <li>Lift ban on Request-Tag options without Block1 (as they can legi | ||||
| timately be generated by an unaware proxy)</li> | ||||
| <li>Suggest concrete numbers for the options</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Changes since draft-ietf-core-echo-request-tag-07 (largely addressi | ||||
| ng Francesca's review): </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Request tag: Explicitly limit "MUST NOT recycle" requirement to | ||||
| particular applications</li> | ||||
| <li>Token reuse: upper-case RECOMMEND sequence number approach</li> | ||||
| <li>Structure: Move per-topic introductions to respective chapters ( | ||||
| this avoids long jumps by the reader)</li> | ||||
| <li>Structure: Group Block2 / ETag section inside new fragmentation | ||||
| (formerly Request-Tag) section</li> | ||||
| <li>More precise references into other documents</li> | ||||
| <li>"concurrent operations": Emphasise that all here only matters be | ||||
| tween endpoint pairs</li> | ||||
| <li>Freshness: Generalize wording away from time-based freshness</li | ||||
| > | ||||
| <li>Echo: Emphasise that no binding between any particular pair of r | ||||
| esponses and requests is established</li> | ||||
| <li>Echo: Add event-based example</li> | ||||
| <li>Echo: Clarify when protection is needed</li> | ||||
| <li>Request tag: Enhance wording around "not sufficient condition"</ | ||||
| li> | ||||
| <li>Request tag: Explicitly state when a tag needs to be set</li> | ||||
| <li>Request tag: Clarification about permissibility of leaving the o | ||||
| ption absent</li> | ||||
| <li>Security considerations: wall clock time -> system time (and | ||||
| remove inaccurate explanations)</li> | ||||
| <li>Token reuse: describe deny-listing in a more implementation-inde | ||||
| pendent way</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Changes since draft-ietf-core-echo-request-tag-06: </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Removed visible comment that should not be visible in Token reus | ||||
| e considerations.</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Changes since draft-ietf-core-echo-request-tag-05: </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Add privacy considerations on cookie-style use of Echo values</l | ||||
| i> | ||||
| <li>Add security considerations for token reuse</li> | ||||
| <li>Add note in security considerations on use of nonvolatile memory | ||||
| when | ||||
| dealing with pseudorandom numbers</li> | ||||
| <li>Appendix on echo generation: add a few words on up- and downside | ||||
| s of the | ||||
| encrypted timestamp alternative</li> | ||||
| <li> | ||||
| <t>Clarifications around Outer Echo: </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Could be generated by the origin server to prove network rea | ||||
| chability | ||||
| (but for most applications it MUST be inner)</li> | ||||
| <li>Could be generated by intermediaries</li> | ||||
| <li>Is answered by the client to the endpoint from which it rece | ||||
| ived it | ||||
| (ie. Outer if received as Outer)</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li>Clarification that a server can send Echo preemtively</li> | ||||
| <li>Refer to stateless to explain what "more information than just t | ||||
| he | ||||
| sequence number" could be</li> | ||||
| <li>Remove explanations around 0.00 empty messags</li> | ||||
| <li> | ||||
| <t>Rewordings: </t> | ||||
| <ul spacing="normal"> | ||||
| <li>the attack: from "forging" to "guessing"</li> | ||||
| <li>"freshness tokens" to "freshness indicators" (to avoid confu | ||||
| sion with | ||||
| the Token)</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Editorial fixes: </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Abstract and introduction mention what is updated in RFC7252 | ||||
| </li> | ||||
| <li>Reference updates</li> | ||||
| <li>Capitalization, spelling, terms from other documents</li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Changes since draft-ietf-core-echo-request-tag-04: </t> | ||||
| <ul spacing="normal"> | ||||
| <li> | ||||
| <t>Editorial fixes </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Moved paragraph on collision-free encoding of data in the To | ||||
| ken to | ||||
| Security Considerations and rephrased it</li> | ||||
| <li>"easiest" -> "one easy"</li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Changes since draft-ietf-core-echo-request-tag-03: </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Mention Token processing changes in title</li> | ||||
| <li>Abstract reworded</li> | ||||
| <li>Clarify updates to Token processing</li> | ||||
| <li>Describe security levels from Echo length</li> | ||||
| <li>Allow non-monotonic clocks under certain conditions for freshnes | ||||
| s</li> | ||||
| <li>Simplify freshness expressions</li> | ||||
| <li>Describe when a Request-Tag can be set</li> | ||||
| <li>Add note on application-level freshness mechanisms</li> | ||||
| <li>Minor editorial changes</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Changes since draft-ietf-core-echo-request-tag-02: </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Define "freshness"</li> | ||||
| <li>Note limitations of "aliveness"</li> | ||||
| <li>Clarify proxy and OSCORE handling in presence of "echo"</li> | ||||
| <li>Clarify when Echo values may be reused</li> | ||||
| <li>Update security considerations</li> | ||||
| <li>Various minor clarifications</li> | ||||
| <li>Minor editorial changes</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Major changes since draft-ietf-core-echo-request-tag-01: </t> | ||||
| <ul spacing="normal"> | ||||
| <li> | ||||
| <t>Follow-up changes after the "relying on block-wise" change in - | ||||
| 01: </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Simplify the description of Request-Tag and matchability</li | ||||
| > | ||||
| <li>Do not update RFC7959 any more</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li>Make Request-Tag repeatable.</li> | ||||
| <li>Add rationale on not relying purely on sequence numbers.</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Major changes since draft-ietf-core-echo-request-tag-00: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Reworded the Echo section.</li> | ||||
| <li>Added rules for Token processing.</li> | ||||
| <li>Added security considerations.</li> | ||||
| <li>Added actual IANA section.</li> | ||||
| <li>Made Request-Tag optional and safe-to-forward, relying on block- | ||||
| wise to treat it as part of the cache-key</li> | ||||
| <li>Dropped use case about OSCORE Outer-block-wise (the case went aw | ||||
| ay when its Partial IV was moved into the Object-Security option)</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Major changes since draft-amsuess-core-repeat-request-tag-00: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>The option used for establishing freshness was renamed from "Rep | ||||
| eat" to "Echo" to reduce confusion about repeatable options.</li> | ||||
| <li>The response code that goes with Echo was changed from 4.03 to 4 | ||||
| .01 because the client needs to provide better credentials.</li> | ||||
| <li>The interaction between the new option and (cross) proxies is no | ||||
| w covered.</li> | ||||
| <li>Two messages being "Request-Tag matchable" was introduced to rep | ||||
| lace the older concept of having a request tag value with its slightly awkward e | ||||
| quivalence definition.</li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | </ul> | |||
| </section> | </section> | |||
| <section numbered="false" anchor="acknowledgments" toc="default"> | <section numbered="false" anchor="acknowledgements" toc="default"> | |||
| <name>Acknowledgments</name> | <name>Acknowledgements</name> | |||
| <t>The authors want to thank | <t>The authors want to thank <contact fullname="Carsten Bormann"/>, <conta | |||
| Carsten Bormann, | ct | |||
| Roman Danyliw, | fullname="Roman Danyliw"/>, <contact fullname="Benjamin Kaduk"/>, <contact | |||
| Benjamin Kaduk, | fullname="Murray Kucherawy"/>, <contact fullname="Francesca Palombini"/>, | |||
| Murray Kucherawy, | and | |||
| Francesca Palombini | <contact fullname="Jim Schaad"/> for providing valuable input to the docum | |||
| and | ent.</t> | |||
| Jim Schaad | ||||
| for providing valuable input to the draft.</t> | ||||
| </section> | </section> | |||
| </back> | </back> | |||
| <!-- ##markdown-source: | ||||
| H4sIAHP1WmEAA+193ZbbVpbePZ8CoS5EukmqqvRnl8dOSiXZ1rRlKapSe2b1 | ||||
| 9OpBkWAVXCTAAGCVOG7NyjvkKld5i1zlbt4kT5L9f/YBwJKs7mTNRbRmWjIJ | ||||
| AgfnZ/9++9vT6XTQ5M0qO06Gp+XJm+PkxfyqnCRvs/+yzepmep5eTpK0WCTn | ||||
| 5XVWJG+qcp7VdV5cDgfpxUWV3cDvPvkXi3JepGt41KJKl800z5rldF5W2TSD | ||||
| O0wruUGTXk4PHw3maZNdltXuOKmbxWC7WcB/18fJ06PHR4NBvqmOk6ba1s3R | ||||
| wcFXB0eDtMrS4+T7rMiqdDW4Lavry6rcbo6T0/Lti+Rn+G8YQfI9fjYY1A2M | ||||
| 78/pqixgLLusHmzy4+SPTTmfJHVZNVW2rOFfuzX+40+DQbptrsrqeJBMBwn8 | ||||
| yQsYxuksOVnXMN6aPuPXOr2q8rrJ0wK/+7f/Jd9l6zRfHSdz/fI/pfzD2bxc | ||||
| R/f8+1nyKm2aui4Ld9O/L69wFrPtv/2P+OuyukyL/F/SJi8LWLYqn+NXyckz | ||||
| /9Rf4NeztfzsP2VyUefR38+Ss2wFs5JV7tHf/9v/rOBlom/gqXsfBsuVFrNa | ||||
| Lo+fNijKCsaR32Qwkcnb706PDg+/kn/imuo/v3qsn355+PSR/vPJ4UP555OH | ||||
| j54ewwYolq37PX3y6FAvf3ikl3/56NET/OfL6fNZ2G+0N2BU6+lFXne/Luv4 | ||||
| Kr1C55GvmpfpZgqfpPPrWp/2lQz5xdn5Mc1Mk1aXWXOcXDXNpj5+8OD29nYG | ||||
| szLbzvNZttg++Ndlnq0WsDcfbLYX9YNFXtdZ1dCaPtCv/uw/nW0WS76znNqT | ||||
| an6VN9m82cLOT86a3Sqr6fw1V1nyPKvzyyIpl8lPWYOnYnqR1tkiOSuXzS2c | ||||
| mcT9OquHdGPb7vRnKn/LRnk7S76TYdEXeCqPEziEBwP8M51Ok/Sibqp03gwG | ||||
| 51d5ncCh366zoknqTTbP4Z3qJCuu0mKe4ad10pQ00tOywJ/lBYzuZLNZ5XN6 | ||||
| XZQfcDDLVTJC8TSGa9MmWedNfglPTupsvq3yZpfADMGZgjEmm7Rq8vl2lVbJ | ||||
| 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 | ||||
| +pnQzyxX2+Vy8H8AYCJiJHMtAQA= | ||||
| </rfc> | </rfc> | |||
| End of changes. 79 change blocks. | ||||
| 2434 lines changed or deleted | 1784 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||