rfc8824xml2.original.xml | rfc8824.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 1.2.13 --> | ||||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | <!-- [CS] updated by Chris 03/10/21 --> | |||
]> | ||||
<?rfc symrefs="yes"?> | <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.2.13 --> | |||
<?rfc sortrefs="yes"?> | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
<?rfc strict="yes"?> | ||||
<?rfc compact="yes"?> | ||||
<?rfc toc="yes"?> | ||||
<rfc ipr="trust200902" docName="draft-ietf-lpwan-coap-static-context-hc-19" cate | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft | |||
gory="std"> | -ietf-lpwan-coap-static-context-hc-19" number="8824" obsoletes="" updates="" sub | |||
missionType="IETF" category="std" consensus="true" xml:lang="en" symRefs="true" | ||||
sortRefs="true" | ||||
tocInclude="true" version="3"> | ||||
<!-- xml2rfc v2v3 conversion 3.5.0 --> | ||||
<front> | <front> | |||
<title abbrev="LPWAN CoAP compression">LPWAN Static Context Header Compressi on (SCHC) for CoAP</title> | <title abbrev="SCHC for CoAP">Static Context Header Compression (SCHC) for t he Constrained Application Protocol (CoAP)</title> | |||
<seriesInfo name="RFC" value="8824"/> | ||||
<author initials="A." surname="Minaburo" fullname="Ana Minaburo"> | <author initials="A." surname="Minaburo" fullname="Ana Minaburo"> | |||
<organization>Acklio</organization> | <organization>Acklio</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>1137A avenue des Champs Blancs</street> | <street>1137A avenue des Champs Blancs</street> | |||
<city>35510 Cesson-Sevigne Cedex</city> | <city>Cesson-Sevigne Cedex</city> | |||
<code>35510</code> | ||||
<country>France</country> | <country>France</country> | |||
</postal> | </postal> | |||
<email>ana@ackl.io</email> | <email>ana@ackl.io</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author initials="L." surname="Toutain" fullname="Laurent Toutain"> | <author initials="L." surname="Toutain" fullname="Laurent Toutain"> | |||
<organization>Institut MINES TELECOM; IMT Atlantique</organization> | <organization abbrev="IMT Atlantique">Institut MINES TELECOM; IMT Atlantiq ue</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>2 rue de la Chataigneraie</street> <street>CS 17607</street> | <street>2 rue de la Chataigneraie</street> | |||
<city>35576 Cesson-Sevigne Cedex</city> | <extaddr>CS 17607</extaddr> | |||
<city>Cesson-Sevigne Cedex</city> | ||||
<code>35576</code> | ||||
<country>France</country> | <country>France</country> | |||
</postal> | </postal> | |||
<email>Laurent.Toutain@imt-atlantique.fr</email> | <email>Laurent.Toutain@imt-atlantique.fr</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author initials="R." surname="Andreasen" fullname="Ricardo Andreasen"> | <author initials="R." surname="Andreasen" fullname="Ricardo Andreasen"> | |||
<organization>Universidad de Buenos Aires</organization> | <organization>Universidad de Buenos Aires</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>Av. Paseo Colon 850</street> | <street>Av. Paseo Colon 850</street> | |||
<city>C1063ACV Ciudad Autonoma de Buenos Aires</city> | <city>Ciudad Autonoma de Buenos Aires</city> | |||
<code>C1063ACV</code> | ||||
<country>Argentina</country> | <country>Argentina</country> | |||
</postal> | </postal> | |||
<email>randreasen@fi.uba.ar</email> | <email>randreasen@fi.uba.ar</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date year="2021" month="June"/> | ||||
<date year="2021" month="March" day="08"/> | <keyword>header compression</keyword> | |||
<keyword>fragmentation</keyword> | ||||
<workgroup>lpwan Working Group</workgroup> | <keyword>IoT</keyword> | |||
<keyword>constrained networks</keyword> | ||||
<keyword>LPWAN</keyword> | ||||
<keyword>sensor network</keyword> | ||||
<keyword>constrained node</keyword> | ||||
<keyword>wireless sensor network</keyword> | ||||
<keyword>core</keyword> | ||||
<keyword>OSCORE</keyword> | ||||
<abstract> | <abstract> | |||
<t>This document defines how to compress Constrained Application Protocol | ||||
<t>This draft defines how to compress the Constrained Application Protocol (CoAP | (CoAP) headers using the Static Context Header Compression and fragmentation (SC | |||
) using the Static Context Header Compression (SCHC). | HC) framework. | |||
SCHC is a header compression mechanism adapted for Constrained Devices. | SCHC defines a header compression mechanism adapted for Constrained Devices. | |||
SCHC uses a static description of the header to reduce the header’s redundanc | SCHC uses a static description of the header to reduce the header's redundanc | |||
y and size. | y and size. | |||
While RFC 8724 describes the SCHC compression and fragmentation framework, | While RFC 8724 describes the SCHC compression and fragmentation framework, | |||
and its application for IPv6/UDP headers, this document applies SCHC for CoAP | and its application for IPv6/UDP headers, this document applies SCHC to CoAP | |||
headers. The CoAP header structure differs from | headers. The CoAP header structure differs from | |||
IPv6 and UDP since CoAP uses a flexible header with a variable number of opti | IPv6 and UDP, since CoAP uses a flexible header with a variable number of opt | |||
ons, themselves of variable length. The CoAP protocol | ions, themselves of variable length. The CoAP message format is asymmetric: the | |||
messages format is asymmetric: the request messages have a header format diff | request messages have a header format different from the format in the response | |||
erent from the one in the response messages. This | messages. | |||
This | ||||
specification gives guidance on applying SCHC to flexible headers and how to leverage the asymmetry for more efficient compression Rules.</t> | specification gives guidance on applying SCHC to flexible headers and how to leverage the asymmetry for more efficient compression Rules.</t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | <middle> | |||
<section anchor="Introduction" numbered="true" toc="default"> | ||||
<section anchor="Introduction" title="Introduction"> | <name>Introduction</name> | |||
<t>The Constrained Application Protocol (CoAP) <xref target="RFC7252" form | ||||
<t>CoAP <xref target="RFC7252"/> is a command/response protocol designed for mic | at="default"/> is a command/response protocol designed for microcontrollers with | |||
ro-controllers with a small RAM and ROM and optimized for REST-based (Representa | small RAM and ROM and optimized for services based on REST (Representational St | |||
tive state transfer) services. Although the Constrained Devices leads the CoAP d | ate Transfer). Although the Constrained Devices are a leading factor in the desi | |||
esign, a CoAP header’s size is still too large for LPWAN (Low Power Wide Area Ne | gn of CoAP, a CoAP header's size is still too large for LPWANs (Low-Power Wide-A | |||
tworks). | rea Networks). Static Context Header Compression and fragmentation (SCHC) over C | |||
SCHC header compression over CoAP header is required to increase performance or | oAP headers is required to increase performance or to use CoAP over LPWAN techno | |||
use CoAP over LPWAN technologies.</t> | logies. | |||
</t> | ||||
<t>The <xref target="RFC8724"/> defines SCHC, a header compression mechanism for | <t><xref target="RFC8724" format="default"/> defines the SCHC framework, w | |||
the LPWAN network based on a static context. Section 5 of the <xref target="RFC | hich includes a header compression mechanism for LPWANs that is based on a stati | |||
8724"/> explains where compression and decompression occur in the architecture. | c context. | |||
The SCHC compression scheme assumes as a prerequisite that both end-points know | <xref target="RFC8724" sectionFormat="of" section="5"/> explains where compressi | |||
the static context before transmission. The way the context is configured, provi | on and decompression occur in the architecture. The SCHC compression scheme assu | |||
sioned, or exchanged is out of this document’s scope.</t> | mes as a prerequisite that both endpoints know the static context before transmi | |||
ssion. The way the context is configured, provisioned, or exchanged is out of th | ||||
<t>CoAP is an application protocol, so CoAP compression requires installing comm | is document's scope.</t> | |||
on Rules between the two SCHC instances. SCHC compression may apply at two diffe | <t>CoAP is an application protocol, so CoAP compression requires installin | |||
rent levels: at IP and UDP in the LPWAN network and another at the application l | g common Rules between the two SCHC instances. SCHC compression may apply at two | |||
evel for CoAP. These two compressions may be independent. Both follow the same p | different levels: at IP and UDP in the LPWAN and another at the application lev | |||
rinciple described in <xref target="RFC8724"/>. As different entities manage the | el for CoAP. These two compression techniques may be independent. Both follow th | |||
CoAP compression at different levels, the SCHC Rules driving the compression/de | e same principle as that described in <xref target="RFC8724" format="default"/>. | |||
compression are also different. The <xref target="RFC8724"/> describes how to us | As different entities manage the CoAP compression process at different levels, | |||
e SCHC for IP and UDP headers. This document specifies how to apply SCHC c | the SCHC Rules driving the compression/decompression are also different. <xref t | |||
ompression to CoAP headers.</t> | arget="RFC8724" format="default"/> describes how to use SCHC for IP and UDP head | |||
ers. This document specifies how to apply SCHC compression to CoAP headers | ||||
<t>SCHC compresses and decompresses headers based on common contexts between Dev | .</t> | |||
ices. SCHC context includes multiple Rules. Each Rule can match the header field | <t>SCHC compresses and decompresses headers based on common contexts betwe | |||
s to specific values or ranges of values. If a Rule matches, the matched header | en Devices. The SCHC context includes multiple Rules. Each Rule can match the he | |||
fields are replaced by the RuleID and the Compression Residue that contains the | ader fields to specific values or ranges of values. If a Rule matches, the match | |||
residual bits of the compression. Thus, different Rules may correspond to differ | ed header fields are replaced by the RuleID and the Compression Residue that con | |||
ent protocol headers in the packet that a Device expects to send or receive.</t> | tains the residual bits of the compression. Thus, different Rules may correspond | |||
to different protocol headers in the packet that a Device expects to send or re | ||||
<t>A Rule describes the packets’ entire header with an ordered list of fields de | ceive.</t> | |||
scriptions; see section 7 of <xref target="RFC8724"/>. Thereby each description | <t>A Rule describes the packets' entire header with an ordered list of Fie | |||
contains the field ID (FID), its length (FL), and its position (FP), a direction | ld Descriptors; see <xref target="RFC8724" sectionFormat="of" section="7"/>. The | |||
indicator (DI) (upstream, downstream, and bidirectional), and some associated T | reby, each description contains the Field ID (FID), Field Length (FL), and Field | |||
arget Values (TV). The direction indicator is used for compression to give the b | Position (FP), as well as a Direction Indicator (DI) (upstream, downstream, and | |||
est TV to the FID when these values differ in the transmission direction. So a f | bidirectional) and some associated Target Values (TVs). The DI is used for comp | |||
ield may be described several times.</t> | ression to give the best TV to the FID when these values differ in their transmi | |||
ssion direction. So, a field may be described several times.</t> | ||||
<t>A Matching Operator (MO) is associated with each header field description. Th | <t>A Matching Operator (MO) is associated with each header Field Descripto | |||
e Rule is selected if all the MOs fit the TVs for all fields of the incoming hea | r. The Rule is selected if all the MOs fit the TVs for all fields of the incomin | |||
der. | g header. | |||
A Rule cannot be selected if the message contains an unknown field to the SCHC c | A Rule cannot be selected if the message contains a field that is unknown to the | |||
ompressor.</t> | SCHC compressor.</t> | |||
<t>In that case, a Compression/Decompression Action (CDA) associated with | ||||
<t>In that case, a Compression/Decompression Action (CDA) associated with each f | each field gives the method to compress and decompress each field. | |||
ield gives the method to compress and decompress each field. | Compression mainly results in one of four actions:</t> | |||
Compression mainly results in one of 4 actions:</t> | <ul spacing="normal"> | |||
<li>send the field value (value-sent),</li> | ||||
<t><list style="symbols"> | <li>send nothing (not-sent),</li> | |||
<t>send the field value (value-sent),</t> | <li>send some Least Significant Bits (LSBs) of the field, or</li> | |||
<t>send nothing (not-sent),</t> | <li>send an index (mapping-sent).</li> | |||
<t>send some least significant bits of the field (LSB) or,</t> | </ul> | |||
<t>send an index (mapping-sent).</t> | <t>After applying the compression, there may be some bits to be sent. | |||
</list></t> | These values are called "Compression Residue".</t> | |||
<t>SCHC is a general mechanism applied to different protocols, with the ex | ||||
<t>After applying the compression, there may be some bits to be sent. | act Rules to be used depending on the protocol and the application. <xref target | |||
These values are called Compression Residue.</t> | ="RFC8724" sectionFormat="of" section="10"/> describes the compression scheme fo | |||
r IPv6 and UDP headers. This document targets CoAP header compression using SCHC | ||||
<t>SCHC is a general mechanism applied to different protocols, the exact Rules t | .</t> | |||
o be used depending on the protocol and the Application.<vspace /> | <section anchor="terminology" numbered="true" toc="default"> | |||
Section 10 of the <xref target="RFC8724"/> describes the compression scheme for | <name>Terminology</name> | |||
IPv6 and UDP headers. This document targets the CoAP header compression using SC | <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
HC.</t> | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", | |||
"<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", | ||||
<section anchor="terminology" title="Terminology"> | "<bcp14>SHOULD NOT</bcp14>", | |||
"<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | ||||
<t>The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document | |||
“SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and | are to be interpreted as described in BCP 14 | |||
“OPTIONAL” in this document are to be interpreted as described in BCP 14 | <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only | |||
<xref target="RFC2119"/><xref target="RFC8174"/> when, and only when, they | when, they appear in all capitals, as shown here.</t> | |||
appear in all capitals, as shown here.</t> | </section> | |||
</section> | ||||
</section> | <section anchor="schc-applicability-to-coap" numbered="true" toc="default"> | |||
</section> | <name>SCHC Applicability to CoAP</name> | |||
<section anchor="schc-applicability-to-coap" title="SCHC Applicability to CoAP"> | <t>SCHC compression for CoAP headers <bcp14>MAY</bcp14> be done in conjunc | |||
tion with the lower layers (IPv6/UDP) or independently. The SCHC adaptation laye | ||||
<t>SCHC Compression for CoAP header MAY be done in conjunction with the lower la | rs, described in <xref target="RFC8724" sectionFormat="of" section="5"/>, may be | |||
yers (IPv6/UDP) or independently. The SCHC adaptation layers, described in Secti | used as shown in Figures <xref target="Fig-SCHCCOAP1" format="counter"/>, | |||
on 5 of <xref target="RFC8724"/>, may be used as shown in <xref target="Fig-SCHC | <xref target="Fig-SCHCCOAP2" format="counter"/>, and <xref target="Fig-SCHCCOAP3 | |||
COAP1"/>, <xref target="Fig-SCHCCOAP2"/>, and <xref target="Fig-SCHCCOAP3"/>.</t | " format="counter"/>.</t> | |||
> | <t>In the first example, <xref target="Fig-SCHCCOAP1" format="default"/>, | |||
a Rule compresses the complete header stack from IPv6 to CoAP. In this case, th | ||||
<t>In the first example, <xref target="Fig-SCHCCOAP1"/>, a Rule compresses the c | e Device and the Network Gateway (NGW) perform SCHC C/D (SCHC Compression/Decomp | |||
omplete header stack from IPv6 to CoAP. In this case, the Device and the NGW pe | ression; see <xref target="RFC8724"/>). The application communicating with the D | |||
rform SCHC C/D (Static Context Header Compression Compressor/Decompressor). The | evice does not implement SCHC C/D.</t> | |||
Application communicating with the Device does not implement SCHC C/D.</t> | <figure anchor="Fig-SCHCCOAP1"> | |||
<name>Compression/Decompression at the LPWAN Boundary</name> | ||||
<figure title="Compression/Decompression at the LPWAN boundary." anchor="Fig-SCH | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
CCOAP1"><artwork><![CDATA[ | ||||
(Device) (NGW) (App) | (Device) (NGW) (App) | |||
+--------+ +--------+ | +--------+ +--------+ | |||
| CoAP | | CoAP | | | CoAP | | CoAP | | |||
+--------+ +--------+ | +--------+ +--------+ | |||
| UDP | | UDP | | | UDP | | UDP | | |||
+--------+ +----------------+ +--------+ | +--------+ +----------------+ +--------+ | |||
| IPv6 | | IPv6 | | IPv6 | | | IPv6 | | IPv6 | | IPv6 | | |||
+--------+ +--------+-------+ +--------+ | +--------+ +--------+-------+ +--------+ | |||
| SCHC | | SCHC | | | | | | SCHC | | SCHC | | | | | |||
+--------+ +--------+ + + + | +--------+ +--------+ + + + | |||
| LPWAN | | LPWAN | | | | | | LPWAN | | LPWAN | | | | | |||
+--------+ +--------+-------+ +--------+ | +--------+ +--------+-------+ +--------+ | |||
((((LPWAN)))) ------ Internet ------ | ((((LPWAN)))) ------ Internet ------ | |||
]]></artwork></figure> | ]]></artwork> | |||
</figure> | ||||
<t><xref target="Fig-SCHCCOAP1"/> shows the use of SCHC header compression above | <t><xref target="Fig-SCHCCOAP1" format="default"/> shows the use of SCHC h | |||
layer 2 in the Device and the NGW. The SCHC layer receives non-encrypted packet | eader compression above Layer 2 in the Device and the NGW. The SCHC layer receiv | |||
s and can apply compression Rules to all the headers in the stack. On the other | es non-encrypted packets and can apply compression Rules to all the headers in t | |||
end, the NGW receives the SCHC packet and reconstructs the headers using the Rul | he stack. On the other end, the NGW receives the SCHC packet and reconstructs th | |||
e and the Compression Residue. After the decompression, the NGW forwards the IPv | e headers using the Rule and the Compression Residue. After the decompression, t | |||
6 packet toward the destination. The same process applies in the other direction | he NGW forwards the IPv6 packet toward the destination. The same process applies | |||
when a non-encrypted packet arrives at the NGW. Thanks to the IP forwarding bas | in the other direction when a non-encrypted packet arrives at the NGW. Thanks t | |||
ed on the IPv6 prefix, the NGW identifies the Device and compresses headers usin | o the IP forwarding based on the IPv6 prefix, the NGW identifies the Device and | |||
g the Device’s Rules.</t> | compresses headers using the Device's Rules.</t> | |||
<t>In the second example, <xref target="Fig-SCHCCOAP2" format="default"/>, | ||||
<t>In the second example, <xref target="Fig-SCHCCOAP2"/>, the SCHC compression i | SCHC compression is applied in the CoAP layer, compressing the CoAP header inde | |||
s applied in the CoAP layer, compressing the CoAP header independently of the ot | pendently of the other layers. The RuleID, Compression Residue, and CoAP payload | |||
her layers. The RuleID, the Compression Residue, and CoAP payload are encrypted | are encrypted using a mechanism such as DTLS. Only the other end (App) can deci | |||
using a mechanism such as DTLS. Only the other end (App) can decipher the inform | pher the information. If needed, layers below use SCHC to compress the header as | |||
ation. If needed, layers below use SCHC to compress the header as defined in <xr | defined in <xref target="RFC8724" format="default"/> (represented by dotted lin | |||
ef target="RFC8724"/> (represented in dotted lines).</t> | es in the figure).</t> | |||
<t>This use case needs an end-to-end context initialization between the De | ||||
<t>This use case needs an end-to-end context initialization between the Device a | vice and the application. The context initialization is out of scope for this do | |||
nd the Application. The context initialization is out of the scope of this docum | cument.</t> | |||
ent.</t> | <figure anchor="Fig-SCHCCOAP2"> | |||
<name>Standalone CoAP End-to-End Compression/Decompression</name> | ||||
<figure title="Standalone CoAP end-to-end Compression/Decompression" anchor="Fig | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
-SCHCCOAP2"><artwork><![CDATA[ | ||||
(Device) (NGW) (App) | (Device) (NGW) (App) | |||
+--------+ +--------+ | +--------+ +--------+ | |||
| CoAP | | CoAP | | | CoAP | | CoAP | | |||
+--------+ +--------+ | +--------+ +--------+ | |||
| SCHC | | SCHC | | | SCHC | | SCHC | | |||
+--------+ +--------+ | +--------+ +--------+ | |||
| DTLS | | DTLS | | | DTLS | | DTLS | | |||
+--------+ +--------+ | +--------+ +--------+ | |||
. udp . . udp . | . udp . . udp . | |||
.......... .................. .......... | .......... .................. .......... | |||
. ipv6 . . ipv6 . . ipv6 . | . ipv6 . . ipv6 . . ipv6 . | |||
.......... .................. .......... | .......... .................. .......... | |||
. schc . . schc . . . . | . schc . . schc . . . . | |||
.......... .......... . . . | .......... .......... . . . | |||
. lpwan . . lpwan . . . . | . lpwan . . lpwan . . . . | |||
.......... .................. .......... | .......... .................. .......... | |||
((((LPWAN)))) ------ Internet ------ | ((((LPWAN)))) ------ Internet ------ | |||
]]></artwork> | ||||
]]></artwork></figure> | </figure> | |||
<t>The third example, <xref target="Fig-SCHCCOAP3" format="default"/>, sho | ||||
<t>The third example, <xref target="Fig-SCHCCOAP3"/>, shows the use of Object Se | ws the use of Object Security for Constrained RESTful Environments (OSCORE) <xre | |||
curity for Constrained RESTful Environments (OSCORE) <xref target="RFC8613"/>. I | f target="RFC8613" format="default"/>. In this case, SCHC needs two Rules to com | |||
n this case, SCHC needs two Rules to compress the CoAP header. A first Rule focu | press the CoAP header. A first Rule focuses on the Inner header. The result of t | |||
sed on the inner header. The result of this first compression is encrypted using | his first compression is encrypted using the OSCORE mechanism. Then, a second Ru | |||
the OSCORE mechanism. Then a second Rule compresses the outer header, including | le compresses the Outer header, including the OSCORE options.</t> | |||
the OSCORE Options.</t> | <figure anchor="Fig-SCHCCOAP3"> | |||
<name>OSCORE Compression/Decompression</name> | ||||
<figure title="OSCORE compression/decompression." anchor="Fig-SCHCCOAP3"><artwor | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
k><![CDATA[ | ||||
(Device) (NGW) (App) | (Device) (NGW) (App) | |||
+--------+ +--------+ | +--------+ +--------+ | |||
| CoAP | | CoAP | | | CoAP | | CoAP | | |||
| inner | | inner | | | Inner | | Inner | | |||
+--------+ +--------+ | +--------+ +--------+ | |||
| SCHC | | SCHC | | | SCHC | | SCHC | | |||
| inner | | inner | | | Inner | | Inner | | |||
+--------+ +--------+ | +--------+ +--------+ | |||
| CoAP | | CoAP | | | CoAP | | CoAP | | |||
| outer | | outer | | | Outer | | Outer | | |||
+--------+ +--------+ | +--------+ +--------+ | |||
| SCHC | | SCHC | | | SCHC | | SCHC | | |||
| outer | | outer | | | Outer | | Outer | | |||
+--------+ +--------+ | +--------+ +--------+ | |||
. udp . . udp . | . udp . . udp . | |||
.......... .................. .......... | .......... .................. .......... | |||
. ipv6 . . ipv6 . . ipv6 . | . ipv6 . . ipv6 . . ipv6 . | |||
.......... .................. .......... | .......... .................. .......... | |||
. schc . . schc . . . . | . schc . . schc . . . . | |||
.......... .......... . . . | .......... .......... . . . | |||
. lpwan . . lpwan . . . . | . lpwan . . lpwan . . . . | |||
.......... .................. .......... | .......... .................. .......... | |||
((((LPWAN)))) ------ Internet ------ | ((((LPWAN)))) ------ Internet ------ | |||
]]></artwork> | ||||
]]></artwork></figure> | </figure> | |||
<t>In the case of several SCHC instances, as shown in Figures <xref t | ||||
<t>In the case of several SCHC instances, as shown in <xref target="Fig-SCHCCOAP | arget="Fig-SCHCCOAP2" format="counter"/> and <xref target="Fig-SCHCCOAP3" format | |||
2"/> and <xref target="Fig-SCHCCOAP3"/>, the Rules may come from different provi | ="counter"/>, the Rules may come from different provisioning domains.</t> | |||
sioning domains.</t> | <t>This document focuses on CoAP compression, as represented by the dashed | |||
boxes in the previous figures.</t> | ||||
<t>This document focuses on CoAP compression represented in the dashed boxes in | </section> | |||
the previous figures.</t> | <section anchor="coap-headers-compressed-with-schc" numbered="true" toc="def | |||
ault"> | ||||
</section> | <name>CoAP Headers Compressed with SCHC</name> | |||
<section anchor="coap-headers-compressed-with-schc" title="CoAP Headers compress | <t>The use of SCHC over the CoAP header applies the same description and c | |||
ed with SCHC"> | ompression/decompression techniques as the technique used for IP and UDP, as exp | |||
lained in <xref target="RFC8724" format="default"/>. For CoAP, the SCHC Rules de | ||||
<t>The use of SCHC over the CoAP header uses the same description, and compressi | scription uses the direction information to optimize the compression by reducing | |||
on/decompression techniques like the one for IP and UDP explained in the <xref t | the number of Rules needed to compress headers. The Field Descriptor <bcp14>MAY | |||
arget="RFC8724"/>. For CoAP, the SCHC Rules description uses the direction infor | </bcp14> define both request/response headers and TVs in the same Rule, using th | |||
mation to optimize the compression by reducing the number of Rules needed to com | e DI to indicate the header type. | |||
press headers. The field description MAY define both request/response headers an | </t> | |||
d target values in the same Rule, using the DI (direction indicator) to make the | <t>As for other header compression protocols, when the compressor does not | |||
difference.</t> | find a correct Rule to compress the header, the packet <bcp14>MUST</bcp14> be s | |||
ent uncompressed using the RuleID dedicated to this purpose, and where the Compr | ||||
<t>As for other header compression protocols, when the compressor does not find | ession Residue is the complete header of the packet. See <xref target="RFC8724" | |||
a correct Rule to compress the header, the packet MUST be sent uncompressed usin | sectionFormat="of" section="6"/>. | |||
g the RuleID dedicated to this purpose. Where the Compression Residue is the com | </t> | |||
plete header of the packet. See section 6 of <xref target="RFC8724"/>.</t> | <section anchor="differences-between-coap-and-udpip-compression" numbered= | |||
"true" toc="default"> | ||||
<section anchor="differences-between-coap-and-udpip-compression" title="Differen | <name>Differences between CoAP and UDP/IP Compression</name> | |||
ces between CoAP and UDP/IP Compression"> | <t>CoAP compression differs from IPv6 and UDP compression in the followi | |||
ng aspects:</t> | ||||
<t>CoAP compression differs from IPv6 and UDP compression in the following aspec | <ul spacing="normal"> | |||
ts:</t> | <li> | |||
<t>The CoAP message format is asymmetric; the headers are different | ||||
<t><list style="symbols"> | for a request or a response. | |||
<t>The CoAP protocol is asymmetric; the headers are different for a request or | For example, the Uri-Path option is mandatory in the request, and it might not b | |||
a response. | e present in the response. | |||
For example, the URI-Path option is mandatory in the request, and it might not b | ||||
e present in the response. | ||||
A request might contain an Accept option, and the response might include a Conte nt-Format option. | A request might contain an Accept option, and the response might include a Conte nt-Format option. | |||
In comparison, IPv6 and UDP returning path swap the value of some fields in the | In comparison, the IPv6 and UDP returning path swaps the value of some fields in | |||
header. | the header. However, all the directions have the same fields (e.g., source and | |||
However, all the directions have the same fields (e.g., source and destination a | destination address fields). </t> | |||
ddress fields). <vspace blankLines='1'/> | <t> | |||
The <xref target="RFC8724"/> defines the use of a direction indicator (DI) in th | <xref target="RFC8724" format="default"/> defines the use of a DI in the | |||
e | ||||
Field Descriptor, which allows a single Rule to process a message | Field Descriptor, which allows a single Rule to process a message | |||
header differently depending on the direction.</t> | header differently, depending on the direction.</t> | |||
<t>Even when a field is “symmetric” (i.e., found in both directions), the valu | </li> | |||
es carried in each direction are different. | <li>Even when a field is "symmetric" (i.e., found in both directions), | |||
The compression may use a “match-mapping” MO to limit the range of expected valu | the values carried in each direction are different. | |||
es | The compression may use a "match-mapping" MO to limit the range of expected valu | |||
in a particular direction and reduce the Compression Residue’s size. | es | |||
Through the direction indicator (DI), a field description in the Rules splits th | in a particular direction and reduce the Compression Residue's size. | |||
e possible field value into two parts, | Through the DI, a Field Descriptor in the Rules splits the possible field value | |||
one for each direction. For instance, if a client sends only CON requests, the T | into two parts, | |||
ype can be elided by compression, | one for each direction. For instance, if a client sends only Confirmable (CON) r | |||
and the answer may use one single bit to carry either the ACK or RST type. | equests <xref target="RFC7252"/>, the Type can be elided by compression, | |||
The field Code has the same behavior, the 0.0X code format value in the request, | and the answer may use one single bit to carry either the ACK or Reset (RST) typ | |||
and the Y.ZZ code format in the response.</t> | e. | |||
<t>In SCHC, the Rule defines the different header fields’ length, so SCHC does | The field Code has the same behavior: the 0.0X code format value in the request | |||
not need to send it. | and the Y.ZZ code format in the response. | |||
</li> | ||||
<li> | ||||
<t>In SCHC, the Rule defines the different header fields' length, so | ||||
SCHC does not need to send it. | ||||
In IPv6 and UDP headers, the fields have a fixed size, known by definition. | In IPv6 and UDP headers, the fields have a fixed size, known by definition. | |||
On the other hand, some CoAP header fields have variable lengths, and the Rule d escription specifies it. | On the other hand, some CoAP header fields have variable lengths, and the Rule d escription specifies it. | |||
For example, in a URI-path or URI-query, the Token size may vary from 0 to 8 byt | For example, in a Uri-Path or Uri-Query, the Token size may vary from 0 to 8 byt | |||
es, | es, | |||
and the CoAP options use the Type-Length-Value encoding format. <vspace blankLi | and the CoAP options use the Type-Length-Value encoding format. </t> | |||
nes='1'/> | <t> | |||
When doing SCHC compression of a variable-length field, | When doing SCHC compression of a variable-length field, | |||
Section 7.5.2 from <xref target="RFC8724"/> offers the possibility to define a f | <xref target="RFC8724" sectionFormat="of" section="7.4.2"/> offers the option of | |||
unction for the Field length in the Field Description | defining a function for the Field Length in the Field Descriptor to know the le | |||
to know the length before compression. If the field length is unknown, the Rule | ngth before compression. If the Field Length is unknown, the Rule will set it as | |||
will set it as a variable, | a variable, and SCHC will send the compressed field's length in the Compression | |||
and SCHC will send the compressed field’s length in the Compression Residue.</t> | Residue.</t> | |||
<t>A field can appear several times in the CoAP headers. | </li> | |||
<li>A field can appear several times in the CoAP headers. | ||||
It is found typically for elements of a URI (path or queries). | It is found typically for elements of a URI (path or queries). | |||
The SCHC specification <xref target="RFC8724"/> allows a Field ID to appear seve | The SCHC specification <xref target="RFC8724" format="default"/> allows a FID to | |||
ral times in the Rule | appear several times in the Rule | |||
and uses the Field Position (FP) to identify the correct instance, thereby remov | and uses the Field Position (FP) to identify the correct instance, thereby remov | |||
ing the matching operation’s ambiguity.</t> | ing the MO's ambiguity.</li> | |||
<t>Field lengths defined in the CoAP protocol can be too large regarding LPWAN | <li>Field Lengths defined in CoAP can be too large when it comes to LP | |||
traffic constraints. | WAN traffic constraints. | |||
For instance, this is particularly true for the Message-ID field and the Token f | For instance, this is particularly true for the Message ID field and the Token f | |||
ield. | ield. | |||
SCHC uses different Matching operators (MO) to perform the compression. See sect | SCHC uses different MOs to perform the compression. See | |||
ion 7.4 of <xref target="RFC8724"/>. | <xref target="RFC8724" sectionFormat="of" section="7.4"/>. | |||
In this case, SCHC can apply the Most Significant Bits (MSB) MO to reduce the in | In this case, SCHC can apply the Most Significant Bits (MSBs) MO to reduce the i | |||
formation carried on LPWANs.</t> | nformation carried on LPWANs.</li> | |||
</list></t> | </ul> | |||
</section> | ||||
</section> | </section> | |||
</section> | <section anchor="CoAPcomp" numbered="true" toc="default"> | |||
<section anchor="CoAPcomp" title="Compression of CoAP header fields"> | <name>Compression of CoAP Header Fields</name> | |||
<t>This section discusses the compression of the different CoAP header fie | ||||
<t>This section discusses the compression of the different CoAP header fields. T | lds. CoAP compression with SCHC follows the information provided in <xref targe | |||
he CoAP compression with SCHC follows Section 7.1 of <xref target="RFC8724"/>.</ | t="RFC8724" sectionFormat="of" section="7.1"/>.</t> | |||
t> | <section anchor="coap-version-field" numbered="true" toc="default"> | |||
<name>CoAP Version Field</name> | ||||
<section anchor="coap-version-field" title="CoAP version field"> | <t>The CoAP version is bidirectional and <bcp14>MUST</bcp14> be elided d | |||
uring SCHC compression, since it always contains the same value. | ||||
<t>CoAP version is bidirectional and MUST be elided during the SCHC compression | ||||
since it always contains the same value. | ||||
In the future, or if a new version of CoAP is defined, new Rules will be needed to avoid ambiguities between versions.</t> | In the future, or if a new version of CoAP is defined, new Rules will be needed to avoid ambiguities between versions.</t> | |||
</section> | ||||
<section anchor="coap-type-field" numbered="true" toc="default"> | ||||
<name>CoAP Type Field</name> | ||||
<t>CoAP <xref target="RFC7252" format="default"/> has four types of mess | ||||
ages: two requests (CON, NON), one response (ACK), and one empty message (RST).< | ||||
/t> | ||||
<t>The SCHC compression scheme <bcp14>SHOULD</bcp14> elide this field if | ||||
, for instance, a client is sending only Non-confirmable (NON) messages or only | ||||
CON messages. | ||||
For the RST message, SCHC may use a dedicated Rule. For other usages, SCHC can u | ||||
se a "match-mapping" MO.</t> | ||||
</section> | ||||
<section anchor="coap-code-field" numbered="true" toc="default"> | ||||
<name>CoAP Code Field</name> | ||||
<t>The Code field, defined in an IANA registry <xref target="RFC7252" fo | ||||
rmat="default"/>, indicates the Request Method used in CoAP. | ||||
The compression of the CoAP Code field follows the same principle as that of th | ||||
e CoAP Type field. If the Device plays a specific role, SCHC may split the code | ||||
values into two Field Descriptors: (1) the request codes with the 0 class and (2 | ||||
) the response values. SCHC will use the DI to identify the correct value in the | ||||
packet.</t> | ||||
<t>If the Device only implements a CoAP client, SCHC compression may red | ||||
uce the request code to the set of requests the client can process.</t> | ||||
<t>For known values, SCHC can use a "match-mapping" MO. If SCHC cannot c | ||||
ompress the Code field, it will send the values in the Compression Residue.</t> | ||||
</section> | ||||
<section anchor="coap-message-id-field" numbered="true" toc="default"> | ||||
<name>CoAP Message ID Field</name> | ||||
<t>SCHC can compress the Message ID field with the "MSB" MO and the "LSB | ||||
" CDA. | ||||
See <xref target="RFC8724" sectionFormat="of" section="7.4"/>.</t> | ||||
</section> | ||||
<section anchor="coap-token-fields" numbered="true" toc="default"> | ||||
<name>CoAP Token Fields</name> | ||||
<t>CoAP defines the Token using two CoAP fields: Token Length in the | ||||
mandatory header and Token Value directly following the mandatory | ||||
CoAP header. | ||||
</t> | ||||
<t>SCHC processes the Token Length as it would any header field. If the | ||||
value does not change, the size can be stored in the TV and elided during the tr | ||||
ansmission. Otherwise, SCHC will send the Token Length in the Compression Residu | ||||
e.</t> | ||||
<t>For the Token Value, SCHC <bcp14>MUST NOT</bcp14> send it as | ||||
variable-length data in the Compression Residue, to avoid ambiguity with the Tok | ||||
en Length. Therefore, SCHC <bcp14>MUST</bcp14> use the Token Length value to def | ||||
ine the size of the Compression Residue. SCHC designates a specific function, "t | ||||
kl", that the Rule <bcp14>MUST</bcp14> use to complete the Field Descriptor. Dur | ||||
ing the decompression, this function returns the value contained in the Token Le | ||||
ngth field.</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="coap-options" numbered="true" toc="default"> | ||||
<name>CoAP Options</name> | ||||
<t>CoAP defines options placed after the basic header, ordered by option n | ||||
umber; see <xref target="RFC7252" format="default"/>. Each Option instance in a | ||||
message uses | ||||
the format Delta-Type (D-T), Length (L), Value (V). The SCHC Rule builds the des | ||||
cription of the option by using the following:</t> | ||||
</section> | <ul spacing="normal"> | |||
<section anchor="coap-type-field" title="CoAP type field"> | <li>in the FID: the option number built from the D-T;</li> | |||
<li>in the TV: the option value; and</li> | ||||
<t>The CoAP protocol <xref target="RFC7252"/> has four types of messages: two re | <li>for the Option Length: the information provided in Sections <xref targe | |||
quests (CON, NON), one response (ACK), and one empty message (RST).</t> | t="RFC8724" section="7.4.1" sectionFormat="bare"/> and <xref target="RFC8724" se | |||
ction="7.4.2" sectionFormat="bare"/> of <xref target="RFC8724"/>.</li> | ||||
<t>The SCHC compression SHOULD elide this field if, for instance, a client is se | </ul> | |||
nding only NON or only CON messages. | ||||
For the RST message, SCHC may use a dedicated Rule. For other usages, SCHC can u | ||||
se a “match-mapping” MO.</t> | ||||
</section> | ||||
<section anchor="coap-code-field" title="CoAP code field"> | ||||
<t>The code field is an IANA registry <xref target="RFC7252"/>, and it indicates | ||||
the Request Method used in CoAP. The compression of the CoAP code field follows | ||||
the same principle as that of the CoAP type field. If the Device plays a specif | ||||
ic role, SCHC may split the code values into two fields description, the request | ||||
codes with the 0 class and the response values. SCHC will use the direction ind | ||||
icator to identify the correct value in the packet.</t> | ||||
<t>If the Device only implements a CoAP client, SCHC compression may reduce the | ||||
request code to the set of requests the client can process.</t> | ||||
<t>For known values, SCHC can use a “match-mapping” MO. If SCHC cannot compress | ||||
the code field, it will send the values in the Compression Residue.</t> | ||||
</section> | ||||
<section anchor="coap-message-id-field" title="CoAP Message ID field"> | ||||
<t>SCHC can compress the Message ID field with the “MSB” MO and the “LSB” CDA. S | ||||
ee section 7.4 of <xref target="RFC8724"/>.</t> | ||||
</section> | ||||
<section anchor="coap-token-fields" title="CoAP Token fields"> | ||||
<t>CoAP defines the Token using two CoAP fields, Token Length in the mandatory h | ||||
eader and Token Value directly following the mandatory CoAP header.</t> | ||||
<t>SCHC processes the Token length as any header field. If the value does not ch | ||||
ange, the size can be stored in the TV and elided during the transmission. Other | ||||
wise, SCHC will send the token length in the Compression Residue.</t> | ||||
<t>For the Token Value, SCHC MUST NOT send it as a variable-length in the Compre | ||||
ssion Residue to avoid ambiguity with Token Length. Therefore, SCHC MUST use the | ||||
Token length value to define the size of the Compression Residue. SCHC designat | ||||
es a specific function “tkl” that the Rule MUST use to complete the field descri | ||||
ption. During the decompression, this function returns the value contained in th | ||||
e Token Length field.</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="coap-options" title="CoAP options"> | ||||
<t>CoAP defines options placed after the basic header in Option Numbers order; s | ||||
ee <xref target="RFC7252"/>. Each Option instance in a message uses | ||||
the format Delta-Type (D-T), Length (L), Value (V). The SCHC Rule builds the des | ||||
cription of the option by using in the Field ID the Option Number built from D-T | ||||
; in TV, the Option Value; and the Option Length uses section 7.4 of <xref targe | ||||
t="RFC8724"/>. When the Option Length has a well-known size, the Rule may keep t | ||||
he length value. Therefore, SCHC compression does not send it. Otherwise, SCHC C | ||||
ompression carries the length of the Compression Residue, in addition to the Com | ||||
pression Residue value.</t> | ||||
<t>CoAP requests and responses do not include the same options. So Compression R | ||||
ules may reflect this asymmetry by tagging the direction indicator.</t> | ||||
<t>Note that length coding differs between CoAP options and SCHC variable size C | ||||
ompression Residue.</t> | ||||
<t>The following sections present how SCHC compresses some specific CoAP options | ||||
.</t> | ||||
<t>If CoAP introduces a new option, the SCHC Rules MAY be updated, and the new F | ||||
ield ID description MUST be assigned to allow its compression. | ||||
Otherwise, if no Rule describes this new option, the SCHC compression is not ach | ||||
ieved, and SCHC sends the CoAP header without compression.</t> | ||||
<section anchor="coap-content-and-accept-options" title="CoAP Content and Accept | ||||
options."> | ||||
<t>If the client expects a single value, it can be stored in the TV and elided d | ||||
uring the transmission. | ||||
Otherwise, if the client expects several possible values, a “match-mapping” SHOU | ||||
LD be used to limit the Compression Residue’s size. | ||||
If not, SCHC has to send the option value in the Compression Residue (fixed or v | ||||
ariable length).</t> | ||||
</section> | ||||
<section anchor="coap-option-max-age-uri-host-and-uri-port-fields" title="CoAP o | ||||
ption Max-Age, Uri-Host, and Uri-Port fields"> | ||||
<t>SCHC compresses these three fields in the same way. When the value of these o | ||||
ptions is known, SCHC can elide these fields. | ||||
If the option uses well-known values, SCHC can use a “match-mapping” MO. Otherwi | ||||
se, SCHC will use “value-sent” MO, and the Compression Residue will send these o | ||||
ptions’ values.</t> | ||||
</section> | ||||
<section anchor="coap-option-uri-path-and-uri-query-fields" title="CoAP option U | ||||
ri-Path and Uri-Query fields"> | ||||
<t>The Uri-Path and Uri-Query fields are repeatable options; this means that in | ||||
the CoAP header, they may appear several times with different values. SCHC Rule | ||||
description uses the Field Position (FP) to distinguish the different instances | ||||
in the path.</t> | ||||
<t>To compress repeatable field values, SCHC may use a “match-mapping” MO to red | ||||
uce the size of variable Paths or Queries. In these cases, to optimize the compr | ||||
ession, several elements can be regrouped into a single entry. The Numbering of | ||||
elements does not change, and the first matching element sets the MO comparison. | ||||
</t> | ||||
<figure title="complex path example" anchor="Fig--complex-path"><artwork><![CDAT | ||||
A[ | ||||
+--------+---+--+--+--------+-------------+------------+ | ||||
| Field |FL |FP|DI| Target | Matching | CDA | | ||||
| | | | | Value | Operator | | | ||||
+--------+---+--+--+--------+-------------+------------+ | ||||
|Uri-Path| | 1|up|["/a/b",|match-mapping|mapping-sent| | ||||
| | | | |"/c/d"] | | | | ||||
|Uri-Path|var| 3|up| |ignore |value-sent | | ||||
+--------+---+--+--+--------+-------------+------------+ | ||||
]]></artwork></figure> | <t>When the Option Length has a well-known size, the Rule may keep the length va | |||
lue. Therefore, SCHC compression does not send it. Otherwise, SCHC compression c | ||||
arries the length of the Compression Residue, in addition to the Compression Res | ||||
idue value.</t> | ||||
<t>CoAP requests and responses do not include the same options. So, compre | ||||
ssion Rules may reflect this asymmetry by tagging the DI.</t> | ||||
<t>Note that length coding differs between CoAP options and SCHC variable | ||||
size Compression Residue.</t> | ||||
<t>The following sections present how SCHC compresses some specific CoAP o | ||||
ptions.</t> | ||||
<t>If CoAP introduces a new option, the SCHC Rules <bcp14>MAY</bcp14> be u | ||||
pdated, and the new FID description <bcp14>MUST</bcp14> be assigned to allow its | ||||
compression. | ||||
Otherwise, if no Rule describes this new option, SCHC compression is not achieve | ||||
d, and SCHC sends the CoAP header without compression.</t> | ||||
<section anchor="coap-content-and-accept-options" numbered="true" toc="def | ||||
ault"> | ||||
<name>CoAP Content and Accept Options</name> | ||||
<t>If the client expects a single value, it can be stored in the TV and | ||||
elided during the transmission. | ||||
Otherwise, if the client expects several possible values, a "match-mapping" MO | ||||
<bcp14>SHOULD</bcp14> be used to limit the Compression Residue's size. If not, S | ||||
CHC has to send the option value in the Compression Residue (fixed or variable l | ||||
ength).</t> | ||||
</section> | ||||
<section anchor="coap-option-max-age-uri-host-and-uri-port-fields" numbere | ||||
d="true" toc="default"> | ||||
<name>CoAP Option Max-Age, Uri-Host, and Uri-Port Fields</name> | ||||
<t>SCHC compresses these three fields in the same way. When the values o | ||||
f these options are known, SCHC can elide these fields. | ||||
If the option uses well-known values, SCHC can use a "match-mapping" MO. Otherwi | ||||
se, SCHC will use the "value-sent" MO, and the Compression Residue will send the | ||||
se options' values.</t> | ||||
</section> | ||||
<section anchor="coap-option-uri-path-and-uri-query-fields" numbered="true | ||||
" toc="default"> | ||||
<name>CoAP Option Uri-Path and Uri-Query Fields</name> | ||||
<t>The Uri-Path and Uri-Query fields are repeatable options; this means | ||||
that in the CoAP header, they may appear several times with different values. Th | ||||
e SCHC Rule description uses the FP to distinguish the different instances in th | ||||
e path.</t> | ||||
<t>To compress repeatable field values, SCHC may use a "match-mapping" M | ||||
O to reduce the size of variable paths or queries. In these cases, to optimize t | ||||
he compression, several elements can be regrouped into a single entry. The numbe | ||||
ring of elements does not change, and the first matching element sets the MO com | ||||
parison.</t> | ||||
<t>In <xref target="Fig--complex-path"/>, SCHC can use a single bit in the Compr ession Residue to code one of the two paths. | <t>In <xref target="Table-complex-path" format="default"/>, SCHC can use a single bit in the Compression Residue to code one of the two paths. | |||
If regrouping were not allowed, 2 bits in the Compression Residue would be neede d. SCHC sends the third path element as a variable size in the Compression Resid ue.</t> | If regrouping were not allowed, 2 bits in the Compression Residue would be neede d. SCHC sends the third path element as a variable size in the Compression Resid ue.</t> | |||
<t>The length of URI-Path and URI-Query may be known when the rule is defined. I | <table anchor="Table-complex-path"> | |||
n any case, SCHC MUST set the field length to variable. The unit to indicate the | <name>Complex Path Example</name> | |||
Compression Residue size is in Byte.</t> | <thead> | |||
<tr> | ||||
<t>SCHC compression can use the MSB MO to a Uri-Path or Uri-Query element. Howev | <th align="center">Field</th> | |||
er, attention to the length is important because the MSB value is in bits, and t | <th align="center">FL</th> | |||
he size MUST always be a multiple of 8 bits.</t> | <th align="center">FP</th> | |||
<th align="center">DI</th> | ||||
<t>The length sent at the beginning of a variable-length Compression Residue ind | <th align="center">TV</th> | |||
icates the LSB’s size in bytes.</t> | <th align="center">MO</th> | |||
<th align="center">CDA</th> | ||||
<t>For instance, for a CORECONF path /c/X6?k=”eth0” the Rule description can be: | </tr> | |||
</t> | </thead> | |||
<tbody> | ||||
<figure title="CORECONF URI compression" anchor="Fig-CoMicompress"><artwork><![C | <tr> | |||
DATA[ | <td>Uri-Path</td> | |||
+-------------+---+--+--+--------+---------+-------------+ | <td></td> | |||
| Field |FL |FP|DI| Target | Match | CDA | | <td>1</td> | |||
| | | | | Value | Opera. | | | <td>Up</td> | |||
+-------------+---+--+--+--------+---------+-------------+ | <td>["/a/b",&br;"/c/d"]</td> | |||
|Uri-Path | | 1|up|"c" |equal |not-sent | | <td>match-&br;mapping</td> | |||
|Uri-Path |var| 2|up| |ignore |value-sent | | <td>mapping-sent</td> | |||
|Uri-Query |var| 1|up|"k=\"" |MSB(24) |LSB | | </tr> | |||
+-------------+---+--+--+--------+---------+-------------+ | <tr> | |||
]]></artwork></figure> | <td>Uri-Path</td> | |||
<td>var</td> | ||||
<t><xref target="Fig-CoMicompress"/> shows the Rule description for a URI-Path a | <td>3</td> | |||
nd a URI-Query. SCHC compresses the first part of the URI-Path with a “not-sent” | <td>Up</td> | |||
CDA. | <td></td> | |||
SCHC will send the second element of the URI-Path with the length (i.e., 0x2 X 6 | <td>ignore</td> | |||
) followed by the query option (i.e., 0x05 eth0”).</t> | <td>value-sent</td> | |||
</tr> | ||||
<section anchor="variable-number-of-path-or-query-elements" title="Variable numb | </tbody> | |||
er of Path or Query elements"> | </table> | |||
<t>SCHC fixed the number of Uri-Path or Uri-Query elements in a Rule at the Rule | ||||
creation time. | ||||
If the number varies, SCHC SHOULD create several Rules to cover all the possibil | ||||
ities. | ||||
Another one is to define the length of Uri-Path to variable and sends a Compress | ||||
ion Residue with a length of 0 to indicate that this Uri-Path is empty. However, | ||||
this adds 4 bits to the variable Compression Residue size. See section 7.5.2 <x | ||||
ref target="RFC8724"/>.</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="coap-option-size1-size2-proxy-uri-and-proxy-scheme-fields" titl | ||||
e="CoAP option Size1, Size2, Proxy-URI and Proxy-Scheme fields"> | ||||
<t>The SCHC Rule description MAY define sending some field values by setting the | ||||
TV to “not-sent,” MO to “ignore,” and CDA to “value-sent.” A Rule MAY also use | ||||
a “match-mapping” when there are different options for the same FID. Otherwise, | ||||
the Rule sets the TV to the value, MO to “equal,” and CDA to “not-sent.”</t> | ||||
</section> | <t>The length of Uri-Path and Uri-Query may be known when the Rule is de | |||
<section anchor="coap-option-etag-if-match-if-none-match-location-path-and-locat | fined. In any case, SCHC <bcp14>MUST</bcp14> set the Field Length to a variable | |||
ion-query-fields" title="CoAP option ETag, If-Match, If-None-Match, Location-Pat | value. The Compression Residue size is expressed in bytes.</t> | |||
h, and Location-Query fields"> | <t>SCHC compression can use the MSB MO to a Uri-Path or Uri-Query elemen | |||
t. However, attention to the length is important because the MSB value is in bit | ||||
s, and the size <bcp14>MUST</bcp14> always be a multiple of 8 bits.</t> | ||||
<t>The length sent at the beginning of a variable-length Compression Res | ||||
idue indicates the LSB's size in bytes.</t> | ||||
<t>For instance, for a CORECONF path /c/X6?k=eth0, the Rule description | ||||
can be as follows (<xref target="Table-CoMicompress"/>):</t> | ||||
<t>A Rule entry cannot store these fields’ values. The Rule description MUST alw | <table anchor="Table-CoMicompress"> | |||
ays send these values in the Compression Residue.</t> | <name>CORECONF URI Compression</name> | |||
<thead> | ||||
<tr> | ||||
<th align="center">Field</th> | ||||
<th align="center">FL</th> | ||||
<th align="center">FP</th> | ||||
<th align="center">DI</th> | ||||
<th align="center">TV</th> | ||||
<th align="center">MO</th> | ||||
<th align="center">CDA</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td>Uri-Path</td> | ||||
<td></td> | ||||
<td>1</td> | ||||
<td>Up</td> | ||||
<td>"c"</td> | ||||
<td>equal</td> | ||||
<td>not-sent</td> | ||||
</tr> | ||||
<tr> | ||||
<td>Uri-Path</td> | ||||
<td>var</td> | ||||
<td>2</td> | ||||
<td>Up</td> | ||||
<td></td> | ||||
<td>ignore</td> | ||||
<td>value-sent</td> | ||||
</tr> | ||||
<tr> | ||||
<td>Uri-Query</td> | ||||
<td>var</td> | ||||
<td>1</td> | ||||
<td>Up</td> | ||||
<td>"k="</td> | ||||
<td>MSB(16)</td> | ||||
<td>LSB</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | <t><xref target="Table-CoMicompress" format="default"/> shows the Rule d | |||
</section> | escription for a Uri-Path and a Uri-Query. SCHC compresses the first part of the | |||
<section anchor="schc-compression-of-coap-extension-rfcs" title="SCHC compressio | Uri-Path with a "not-sent" CDA. | |||
n of CoAP extension RFCs"> | SCHC will send the second element of the Uri-Path with the length (i.e., 0x2 "X6 | |||
") followed by the query option (i.e., 0x4 "eth0"). | ||||
</t> | ||||
<section anchor="variable-number-of-path-or-query-elements" numbered="tr | ||||
ue" toc="default"> | ||||
<name>Variable Number of Path or Query Elements</name> | ||||
<t>SCHC fixed the number of Uri-Path or Uri-Query elements in a Rule a | ||||
t | ||||
the Rule creation time. If the number varies, SCHC <bcp14>SHOULD</bcp14> either< | ||||
/t> | ||||
<ul spacing="normal"> | ||||
<li>create several Rules to cover all possibilities or</li> | ||||
<li>create a Rule that defines several entries for Uri-Path to cover the longest | ||||
path and send a Compression Residue with a length of 0 to indicate that a Uri-P | ||||
ath entry is empty.</li> | ||||
</ul> | ||||
<t>However, this adds 4 bits to the variable Compression Residue size. See | ||||
<xref target="RFC8724" sectionFormat="of" section="7.4.2"/>.</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="coap-option-size1-size2-proxy-uri-and-proxy-scheme-fields | ||||
" numbered="true" toc="default"> | ||||
<name>CoAP Option Size1, Size2, Proxy-URI, and Proxy-Scheme Fields</name | ||||
> | ||||
<section anchor="block" title="Block"> | <t>The SCHC Rule description <bcp14>MAY</bcp14> define sending some fiel | |||
d values by setting the TV to "not-sent", the MO to "ignore", and the CDA to "va | ||||
lue-sent". A Rule <bcp14>MAY</bcp14> also use a "match-mapping" MO when there ar | ||||
e different options for the same FID. Otherwise, the Rule sets the TV to the val | ||||
ue, the MO to "equal", and the CDA to "not-sent".</t> | ||||
</section> | ||||
<section anchor="coap-option-etag-if-match-if-none-match-location-path-and | ||||
-location-query-fields" numbered="true" toc="default"> | ||||
<name>CoAP Option ETag, If-Match, If-None-Match, Location-Path, and Loca | ||||
tion-Query Fields</name> | ||||
<t>A Rule entry cannot store these fields' values. The Rule description | ||||
<bcp14>MUST</bcp14> always send these values in the Compression Residue.</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="schc-compression-of-coap-extension-rfcs" numbered="true" to | ||||
c="default"> | ||||
<name>SCHC Compression of CoAP Extensions</name> | ||||
<t>When a packet uses a Block <xref target="RFC7959"/> option, SCHC compression | <section anchor="block" numbered="true" toc="default"> | |||
MUST send its content in the Compression Residue. | <name>Block</name> | |||
The SCHC Rule describes an empty TV with a MO set to “ignore” and a CDA to “valu | <t>When a packet uses a Block option <xref target="RFC7959" format="defa | |||
e-sent.” | ult"/>, SCHC compression <bcp14>MUST</bcp14> send its content in the Compression | |||
Block option allows fragmentation at the CoAP level that is compatible with SCHC | Residue. | |||
fragmentation. | The SCHC Rule describes an empty TV with the MO set to "ignore" and the CDA set | |||
to "value-sent". | ||||
The Block option allows fragmentation at the CoAP level that is compatible with | ||||
SCHC fragmentation. | ||||
Both fragmentation mechanisms are complementary, and the node may use them for t he same packet as needed.</t> | Both fragmentation mechanisms are complementary, and the node may use them for t he same packet as needed.</t> | |||
</section> | ||||
</section> | <section anchor="observe" numbered="true" toc="default"> | |||
<section anchor="observe" title="Observe"> | <name>Observe</name> | |||
<t><xref target="RFC7641" format="default"/> defines the Observe Option. | ||||
<t>The <xref target="RFC7641"/> defines the Observe option. The SCHC Rule descri | The SCHC Rule description will not define the TV but will set the MO to "ignore | |||
ption will not define the TV, but MO to “ignore,” and the CDA to “value-sent.” S | " and the CDA to "value-sent". SCHC does not limit the maximum size for this opt | |||
CHC does not limit the maximum size for this option (3 bytes). To reduce the tra | ion (3 bytes). To reduce the transmission size, either the Device implementation | |||
nsmission size, either the Device implementation MAY limit the delta between two | <bcp14>MAY</bcp14> limit the delta between two consecutive values or a proxy ca | |||
consecutive values, or a proxy can modify the increment.</t> | n modify the increment.</t> | |||
<t>Since the Observe Option <bcp14>MAY</bcp14> use a RST message to info | ||||
<t>Since the Observe option MAY use an RST message to inform a server that the c | rm a server that the client does not require the Observe response, a specific SC | |||
lient does not require the Observe response, a specific SCHC Rule SHOULD exist t | HC Rule <bcp14>SHOULD</bcp14> exist to allow the message's compression with the | |||
o allow the message’s compression with the RST type.</t> | RST type.</t> | |||
</section> | ||||
</section> | <section anchor="no-response" numbered="true" toc="default"> | |||
<section anchor="no-response" title="No-Response"> | <name>No-Response</name> | |||
<t><xref target="RFC7967" format="default"/> defines a No-Response optio | ||||
<t>The <xref target="RFC7967"/> defines a No-Response option limiting the respon | n limiting the responses made by a server to a request. Different behaviors exis | |||
ses made by a server to a request. Different behaviors exist while using this op | t while using this option to limit the responses made by a server to a request. | |||
tion to limit the responses made by a server to a request. If both ends know the | If both ends know the value, then the SCHC Rule will describe a TV to this value | |||
value, then the SCHC Rule will describe a TV to this value, with a MO set to “e | , with the MO set to "equal" and the CDA set to "not-sent".</t> | |||
qual” and CDA set to “not-sent.”</t> | <t>Otherwise, if the value is changing over time, the SCHC Rule will set | |||
the MO to "ignore" and the CDA to "value-sent". The Rule may also use a "match- | ||||
<t>Otherwise, if the value is changing over time, the SCHC Rule will set the MO | mapping" MO to compress this option.</t> | |||
to “ignore” and CDA to “value-sent.” The Rule may also use a “match-mapping” to | </section> | |||
compress this option.</t> | <section anchor="Sec-OSCORE" numbered="true" toc="default"> | |||
<name>OSCORE</name> | ||||
</section> | <t>OSCORE <xref target="RFC8613" format="default"/> defines end-to-end p | |||
<section anchor="Sec-OSCORE" title="OSCORE"> | rotection for CoAP messages. | |||
<t>OSCORE <xref target="RFC8613"/> defines end-to-end protection for CoAP messag | ||||
es. | ||||
This section describes how SCHC Rules can be applied to compress OSCORE-protecte d messages.</t> | This section describes how SCHC Rules can be applied to compress OSCORE-protecte d messages.</t> | |||
<figure title="OSCORE Option" anchor="Fig-OSCORE-Option"><artwork><![CDATA[ | <t><xref target="Fig-OSCORE-Option" format="default"/> shows the OSCORE | |||
option value encoding defined in | ||||
<xref target="RFC8613" sectionFormat="of" section="6.1"/>, where the first byte | ||||
specifies the content of the OSCORE options using flags. The three most signific | ||||
ant bits of this byte are reserved and always set to 0. Bit h, when set, indicat | ||||
es the presence of the kid context field in the option. Bit k, when set, indicat | ||||
es the presence of a kid field. The three least significant bits, n, indicate th | ||||
e length of the piv (Partial Initialization Vector) field in bytes. When n = 0, | ||||
no piv is present.</t> | ||||
<figure anchor="Fig-OSCORE-Option"> | ||||
<name>OSCORE Option</name> | ||||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
0 1 2 3 4 5 6 7 <--------- n bytes -------------> | 0 1 2 3 4 5 6 7 <--------- n bytes -------------> | |||
+-+-+-+-+-+-+-+-+--------------------------------- | +-+-+-+-+-+-+-+-+--------------------------------- | |||
|0 0 0|h|k| n | Partial IV (if any) ... | |0 0 0|h|k| n | Partial IV (if any) ... | |||
+-+-+-+-+-+-+-+-+--------------------------------- | +-+-+-+-+-+-+-+-+--------------------------------- | |||
| | | | | | | | |||
|<-- CoAP -->|<------ CoAP OSCORE_piv ------> | | |<-- CoAP -->|<------ CoAP OSCORE_piv ------> | | |||
OSCORE_flags | OSCORE_flags | |||
<- 1 byte -> <------ s bytes -----> | <- 1 byte -> <------ s bytes -----> | |||
+------------+----------------------+-----------------------+ | +------------+----------------------+-----------------------+ | |||
| s (if any) | kid context (if any) | kid (if any) ... | | | s (if any) | kid context (if any) | kid (if any) ... | | |||
+------------+----------------------+-----------------------+ | +------------+----------------------+-----------------------+ | |||
| | | | | | | | |||
| <------ CoAP OSCORE_kidctx ------>|<-- CoAP OSCORE_kid -->| | | <------ CoAP OSCORE_kidctx ------>|<-- CoAP OSCORE_kid -->| | |||
]]></artwork> | ||||
]]></artwork></figure> | </figure> | |||
<t>The flag byte is followed by the piv field, the kid context field, an | ||||
<t>The <xref target="Fig-OSCORE-Option"/> shows the OSCORE Option Value encoding | d the kid field, in that order, and, if present, | |||
defined in Section 6.1 of <xref target="RFC8613"/>, where the first byte specif | the kid context field's length (in bytes) is encoded in the first byte, denoted | |||
ies the Content of the OSCORE options using flags. The three most significant bi | by "s". | |||
ts of this byte are reserved and always set to 0. Bit h, when set, indicates the | </t> | |||
presence of the kid context field in the option. Bit k, when set, indicates the | <t>To better perform OSCORE SCHC compression, the Rule description needs | |||
presence of a kid field. The three least significant bits n indicate the length | to identify the OSCORE option and the fields it contains. Conceptually, it disc | |||
of the piv (Partial Initialization Vector) field in bytes. When n = 0, no piv i | erns up to four distinct pieces of information within the OSCORE option: the fla | |||
s present.</t> | g bits, the piv, the kid context, and the kid. The SCHC Rule splits the OSCORE o | |||
ption into four Field Descriptors in order to compress them: | ||||
<t>The flag byte is followed by the piv field, kid context field, and kid field | </t> | |||
in this order, and if present, | <ul spacing="normal"> | |||
the kid context field’s length is encoded in the first byte denoting by ‘s’ the | <li>CoAP OSCORE_flags</li> | |||
length of the kid context in bytes.</t> | <li>CoAP OSCORE_piv</li> | |||
<li>CoAP OSCORE_kidctx</li> | ||||
<t>To better perform OSCORE SCHC compression, the Rule description needs to iden | <li>CoAP OSCORE_kid</li> | |||
tify the OSCORE Option and the fields it contains. Conceptually, it discerns up | </ul> | |||
to 4 distinct pieces of information within the OSCORE option: the flag bits, the | <t><xref target="Fig-OSCORE-Option" format="default"/> shows the OSCORE | |||
piv, the kid context, and the kid. The SCHC Rule splits into four field descri | option format with those four fields superimposed on it. | |||
ptions the OSCORE option to compress them:</t> | Note that the CoAP OSCORE_kidctx field directly includes the size octet, s. | |||
</t> | ||||
<t><list style="symbols"> | </section> | |||
<t>CoAP OSCORE_flags,</t> | </section> | |||
<t>CoAP OSCORE_piv,</t> | <section anchor="examples-of-coap-header-compression" numbered="true" toc="d | |||
<t>CoAP OSCORE_kidctx,</t> | efault"> | |||
<t>CoAP OSCORE_kid.</t> | <name>Examples of CoAP Header Compression</name> | |||
</list></t> | <section anchor="mandatory-header-with-con-message" numbered="true" toc="d | |||
efault"> | ||||
<t><xref target="Fig-OSCORE-Option"/> shows the OSCORE Option format with those | <name>Mandatory Header with CON Message</name> | |||
four fields superimposed on it. | <t>In this first scenario, the SCHC compressor on the NGW side | |||
Note that the CoAP OSCORE_kidctx field directly includes the size octet s.</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="examples-of-coap-header-compression" title="Examples of CoAP he | ||||
ader compression"> | ||||
<section anchor="mandatory-header-with-con-message" title="Mandatory header with | ||||
CON message"> | ||||
<t>In this first scenario, the SCHC Compressor at the Network Gateway side | ||||
receives a POST message from an Internet client, which is immediately acknowledg ed by the Device. | receives a POST message from an Internet client, which is immediately acknowledg ed by the Device. | |||
<xref target="Fig-CoAP-header-1"/> describes the SCHC Rule descriptions for this | <xref target="Table-CoAP-header-1" format="default"/> describes the SCHC Rule de | |||
scenario.</t> | scriptions for this scenario.</t> | |||
<table anchor="Table-CoAP-header-1"> | ||||
<figure title="CoAP Context to compress header without Token" anchor="Fig-CoAP-h | <name>CoAP Context to Compress Header without Token</name> | |||
eader-1"><artwork><![CDATA[ | <thead> | |||
RuleID 1 | <tr> | |||
+-------------+--+--+--+------+---------+-------------++------------+ | <th align="left" colspan="8">RuleID 1</th> | |||
| Field |FL|FP|DI|Target| Match | CDA || Sent | | </tr> | |||
| | | | |Value | Opera. | || [bits] | | <tr> | |||
+-------------+--+--+--+------+---------+-------------++------------+ | <th align="center">Field</th> | |||
|CoAP version | 2| 1|bi| 01 |equal |not-sent || | | <th align="center">FL</th> | |||
|CoAP Type | 2| 1|dw| CON |equal |not-sent || | | <th align="center">FP</th> | |||
|CoAP Type | 2| 1|up|[ACK, |match- |matching- || | | <th align="center">DI</th> | |||
| | | | | RST] |mapping |sent || T | | <th align="center">TV</th> | |||
|CoAP TKL | 4| 1|bi| 0 |equal |not-sent || | | <th align="center">MO</th> | |||
|CoAP Code | 8| 1|bi|[0.00,| | || | | <th align="center">CDA</th> | |||
| | | | | ... |match- |matching- || | | <th align="center">Sent [bits]</th> | |||
| | | | | 5.05]|mapping |sent || CC CCC | | </tr> | |||
|CoAP MID |16| 1|bi| 0000 |MSB(7 ) |LSB || M-ID| | </thead> | |||
|CoAP Uri-Path|var 1|dw| path |equal 1 |not-sent || | | <tbody> | |||
+-------------+--+--+--+------+---------+-------------++------------+ | <tr> | |||
<td>CoAP version</td> | ||||
]]></artwork></figure> | <td>2</td> | |||
<td>1</td> | ||||
<t>In this example, SCHC compression elides the version and the Token Length fie | <td>Bi</td> | |||
lds. The 26 method and response codes defined in <xref target="RFC7252"/> has be | <td>01</td> | |||
en shrunk to 5 bits using a “match-mapping” MO. The Uri-Path contains a single e | <td>equal</td> | |||
lement indicated in the TV and elided with the CDA “not-sent.”</t> | <td>not-sent</td> | |||
<th></th> | ||||
<t>SCHC Compression reduces the header sending only the Type, a mapped code, and | </tr> | |||
the least significant bits of Message ID (9 bits in the example above).</t> | <tr> | |||
<td>CoAP Type</td> | ||||
<t>Note that a client located in an Application Server sending a request to a se | <td>2</td> | |||
rver located in the Device may not be compressed through this Rule since the MID | <td>1</td> | |||
might not start with 7 bits equal to 0. A CoAP proxy placed before the SCHC C/D | <td>Dw</td> | |||
can rewrite the message ID to fit the value and match the Rule.</t> | <td>CON</td> | |||
<td>equal</td> | ||||
</section> | <td>not-sent</td> | |||
<section anchor="Sec-OSCORE-Examples" title="OSCORE Compression"> | <th></th> | |||
</tr> | ||||
<tr> | ||||
<td>CoAP Type</td> | ||||
<td>2</td> | ||||
<td>1</td> | ||||
<td>Up</td> | ||||
<td>[ACK,&br;RST]</td> | ||||
<td>match-mapping</td> | ||||
<td>matching-sent</td> | ||||
<th>T</th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP TKL</td> | ||||
<td>4</td> | ||||
<td>1</td> | ||||
<td>Bi</td> | ||||
<td>0</td> | ||||
<td>equal</td> | ||||
<td>not-sent</td> | ||||
<th></th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP Code</td> | ||||
<td>8</td> | ||||
<td>1</td> | ||||
<td>Bi</td> | ||||
<td>[0.00,&br;...&br;5.05]</td> | ||||
<td>match-mapping</td> | ||||
<td>matching-sent</td> | ||||
<th>CC CCC</th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP MID</td> | ||||
<td>16</td> | ||||
<td>1</td> | ||||
<td>Bi</td> | ||||
<td>0000</td> | ||||
<td>MSB(7)</td> | ||||
<td>LSB</td> | ||||
<th>MID</th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP Uri-Path</td> | ||||
<td>var</td> | ||||
<td>1</td> | ||||
<td>Dw</td> | ||||
<td>path</td> | ||||
<td>equal 1</td> | ||||
<td>not-sent</td> | ||||
<th></th> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>OSCORE aims to solve the problem of end-to-end encryption for CoAP messages. | <t>In this example, SCHC compression elides the version and Token Length | |||
Therefore, the goal is to hide as much as possible the message | fields. The 25 Method and Response Codes defined in <xref target="RFC7252" form | |||
at="default"/> have been shrunk to 5 bits using a "match-mapping" MO. The Uri-Pa | ||||
th contains a single element indicated in the TV and elided with the CDA "not-se | ||||
nt".</t> | ||||
<t>SCHC compression reduces the header, sending only the Type, a mapped | ||||
code, and the least significant bits of the Message ID (9 bits in the example ab | ||||
ove).</t> | ||||
<t>Note that a client located in an Application Server sending a request | ||||
to a server located in the Device may not be compressed through this Rule, sinc | ||||
e the MID might not start with 7 bits equal to 0. A CoAP proxy placed before SCH | ||||
C C/D can rewrite the Message ID to fit the value and match the Rule.</t> | ||||
</section> | ||||
<section anchor="Sec-OSCORE-Examples" numbered="true" toc="default"> | ||||
<name>OSCORE Compression</name> | ||||
<t>OSCORE aims to solve the problem of end-to-end encryption for CoAP me | ||||
ssages. Therefore, the goal is to hide the message as much as possible | ||||
while still enabling proxy operation.</t> | while still enabling proxy operation.</t> | |||
<t>Conceptually, this is achieved by splitting the CoAP message into an | ||||
<t>Conceptually this is achieved by splitting the CoAP message into an Inner Pla | Inner Plaintext and Outer OSCORE message. The Inner Plaintext contains sensitive | |||
intext and Outer OSCORE Message. The Inner Plaintext contains sensitive informat | information that is not necessary for proxy operation. However, it is part of t | |||
ion that is not necessary for proxy operation. However, it is part of the messag | he message that can be encrypted until it | |||
e that can be encrypted until it | reaches its end destination. The Outer Message acts as a shell matching the regu | |||
reaches its end destination. The Outer Message acts as a shell matching the regu | lar CoAP message format and includes all options and information | |||
lar CoAP message format and includes all Options and information | needed for proxy operation and caching. <xref target="Fig-inner-outer" format="d | |||
needed for proxy operation and caching. <xref target="Fig-inner-outer"/> illustr | efault"/> below illustrates this analysis.</t> | |||
ates this analysis.</t> | <t>CoAP arranges the options into one of three classes, each granted a s | |||
pecific type of protection by the protocol:</t> | ||||
<t>The CoAP protocol arranges the options into one of 3 classes; each granted a | <dl spacing="normal"> | |||
specific type of protection by the protocol:</t> | <dt>Class E:</dt><dd>Encrypted options moved to the Inner Plaintext.</ | |||
dd> | ||||
<t><list style="symbols"> | <dt>Class I:</dt><dd>Integrity-protected options included in the Addit | |||
<t>Class E: Encrypted options moved to the Inner Plaintext,</t> | ional Authenticated Data (AAD) for the encryption of the Plaintext but otherwise | |||
<t>Class I: Integrity-protected options included in the AAD for the encryption | left untouched in the Outer Message. | |||
of the Plaintext but otherwise left untouched in the Outer Message,</t> | </dd> | |||
<t>Class U: Unprotected options left untouched in the Outer Message.</t> | <dt>Class U:</dt><dd>Unprotected options left untouched in the Outer M | |||
</list></t> | essage.</dd> | |||
</dl> | ||||
<t>These classes point out that the Outer option contains the OSCORE Option and | <t>These classes point out that the Outer option contains the OSCORE opt | |||
that the message is OSCORE protected; this option carries the information necess | ion and that the message is OSCORE protected; this option carries the informatio | |||
ary to retrieve the Security Context. The end-point will use this Security Conte | n necessary to retrieve the Security Context. The endpoint will use this Securit | |||
xt to decrypt the message correctly.</t> | y Context to decrypt the message correctly.</t> | |||
<figure anchor="Fig-inner-outer"> | ||||
<figure title="A CoAP packet is split into an OSCORE outer and plaintext" anchor | <name>CoAP Packet Split into OSCORE Outer Header and Plaintext</name> | |||
="Fig-inner-outer"><artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
Original CoAP Packet | Original CoAP Packet | |||
+-+-+---+-------+---------------+ | +-+-+---+-------+---------------+ | |||
|v|t|TKL| code | Msg Id. | | |v|t|TKL| code | Message ID | | |||
+-+-+---+-------+---------------+....+ | +-+-+---+-------+---------------+....+ | |||
| Token | | | Token | | |||
+-------------------------------.....+ | +-------------------------------.....+ | |||
| Options (IEU) | | | Options (IEU) | | |||
. . | . . | |||
. . | . . | |||
+------+-------------------+ | +------+-------------------+ | |||
| 0xFF | | | 0xFF | | |||
+------+------------------------+ | +------+------------------------+ | |||
| | | | | | |||
| Payload | | | Payload | | |||
| | | | | | |||
+-------------------------------+ | +-------------------------------+ | |||
/ \ | / \ | |||
/ \ | / \ | |||
/ \ | / \ | |||
/ \ | / \ | |||
Outer Header v v Plaintext | Outer Header v v Plaintext | |||
+-+-+---+--------+---------------+ +-------+ | +-+-+---+--------+---------------+ +-------+ | |||
|v|t|TKL|new code| Msg Id. | | code | | |v|t|TKL|new code| Message ID | | code | | |||
+-+-+---+--------+---------------+....+ +-------+-----......+ | +-+-+---+--------+---------------+....+ +-------+-----......+ | |||
| Token | | Options (E) | | | Token | | Options (E) | | |||
+--------------------------------.....+ +-------+------.....+ | +--------------------------------.....+ +-------+------.....+ | |||
| Options (IU) | | OxFF | | | Options (IU) | | 0xFF | | |||
. . +-------+-----------+ | . . +-------+-----------+ | |||
. OSCORE Option . | | | . OSCORE Option . | | | |||
+------+-------------------+ | Payload | | +------+-------------------+ | Payload | | |||
| 0xFF | | | | | 0xFF | | | | |||
+------+ +-------------------+ | +------+ +-------------------+ | |||
]]></artwork> | ||||
</figure> | ||||
]]></artwork></figure> | <t><xref target="Fig-inner-outer" format="default"/> shows the packet fo | |||
rmat for the OSCORE Outer header and Plaintext.</t> | ||||
<t><xref target="Fig-inner-outer"/> shows the packet format for the OSCORE Outer | <t>In the Outer header, the original header code is hidden and replaced | |||
header and Plaintext.</t> | by a default dummy value. As seen in | |||
Sections <xref target="RFC8613" section="4.1.3.5" sectionFormat="bare"/> an | ||||
<t>In the Outer Header, the original header code is hidden and replaced by a def | d <xref target="RFC8613" section="4.2" sectionFormat="bare"/> of <xref target="R | |||
ault dummy value. As seen in Sections 4.1.3.5 and 4.2 of <xref target="RFC8613"/ | FC8613"/>, the message code is replaced by POST for requests and Changed for res | |||
>, the message code is replaced by POST for requests and Changed for responses w | ponses when CoAP is not using the Observe Option. If CoAP uses Observe, the OSCO | |||
hen CoAP is not using the Observe option. If CoAP uses Observe, the OSCORE messa | RE message code is replaced by FETCH for requests and Content for responses.</t> | |||
ge code is replaced by FETCH for requests and Content for responses.</t> | <t>The first byte of the Plaintext contains the original packet code, fo | |||
llowed by the message code, the class E options, and, if present, the original m | ||||
<t>The first byte of the Plaintext contains the original packet code, followed b | essage payload preceded by its payload marker.</t> | |||
y the message code, the class E options, and, if present, the original message P | <t>An Authenticated Encryption with Associated Data (AEAD) algorithm now | |||
ayload preceded by its payload marker.</t> | encrypts the Plaintext. This integrity-protects the Security Context parameters | |||
and, eventually, any class I options from the Outer header. The resulting ciphe | ||||
<t>An AEAD algorithm now encrypts the Plaintext. This integrity protects the Sec | rtext becomes the new payload of the OSCORE message, as illustrated in <xref tar | |||
urity Context parameters and, eventually, any class I options from the Outer Hea | get="Fig-full-oscore" format="default"/>.</t> | |||
der. The resulting Ciphertext becomes the new payload of the OSCORE message, as | <t>As defined in <xref target="RFC5116" format="default"/>, this ciphert | |||
illustrated in <xref target="Fig-full-oscore"/>.</t> | ext is the encrypted Plaintext's concatenation of the Authentication Tag. Note t | |||
hat Inner Compression only affects the Plaintext before encryption. | ||||
<t>As defined in <xref target="RFC5116"/>, this Ciphertext is the encrypted Plai | The Authentication Tag, fixed in length and uncompressed, is considered part of | |||
ntext’s concatenation of the authentication tag. Note that Inner Compression onl | the cost of protection. | |||
y affects the Plaintext before encryption. Thus only the first variable-length o | </t> | |||
f the Ciphertext can be reduced. The authentication tag is fixed in length and i | <figure anchor="Fig-full-oscore"> | |||
s considered part of the cost of protection.</t> | <name>OSCORE Message</name> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
<figure title="OSCORE message" anchor="Fig-full-oscore"><artwork><![CDATA[ | ||||
Outer Header | Outer Header | |||
+-+-+---+--------+---------------+ | +-+-+---+--------+---------------+ | |||
|v|t|TKL|new code| Msg Id. | | |v|t|TKL|new code| Message ID | | |||
+-+-+---+--------+---------------+....+ | +-+-+---+--------+---------------+....+ | |||
| Token | | | Token | | |||
+--------------------------------.....+ | +--------------------------------.....+ | |||
| Options (IU) | | | Options (IU) | | |||
. . | . . | |||
. OSCORE Option . | . OSCORE Option . | |||
+------+-------------------+ | +------+-------------------+ | |||
| 0xFF | | | 0xFF | | |||
+------+---------------------------+ | +------+---------------------------+ | |||
| | | | | | |||
| Ciphertext: Encrypted Inner | | | Ciphertext: Encrypted Inner | | |||
| Header and Payload | | | Header and Payload | | |||
| + Authentication Tag | | | + Authentication Tag | | |||
| | | | | | |||
+----------------------------------+ | +----------------------------------+ | |||
]]></artwork> | ||||
]]></artwork></figure> | </figure> | |||
<t>The SCHC compression scheme consists of compressing both the Plaintex | ||||
<t>The SCHC Compression scheme consists of compressing both the Plaintext before | t before encryption and the resulting OSCORE message after encryption; see <xref | |||
encryption and the resulting OSCORE message after encryption, see <xref target= | target="Fig-OSCORE-Compression" format="default"/>.</t> | |||
"Fig-OSCORE-Compression"/>.</t> | <t>The OSCORE message translates into a segmented process where SCHC com | |||
pression is applied independently in two stages, each with its corresponding set | ||||
<t>The OSCORE message translates into a segmented process where SCHC compression | of Rules, with the Inner SCHC Rules and the Outer SCHC Rules. This way, compres | |||
is applied independently in 2 stages, each with its corresponding set of Rules, | sion is applied to all fields of the original CoAP message.</t> | |||
with the Inner SCHC Rules and the Outer SCHC Rules. This way, compression is ap | <figure anchor="Fig-OSCORE-Compression"> | |||
plied to all fields of the original CoAP message.</t> | <name>OSCORE Compression Diagram</name> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
<t>Note that since the corresponding end-point can only decrypt the Inner part o | ||||
f the message, this end-point will also have to implement Inner SCHC Compression | ||||
/Decompression.</t> | ||||
<figure title="OSCORE Compression Diagram" anchor="Fig-OSCORE-Compression"><artw | ||||
ork><![CDATA[ | ||||
Outer Message OSCORE Plaintext | Outer Message OSCORE Plaintext | |||
+-+-+---+--------+---------------+ +-------+ | +-+-+---+--------+---------------+ +-------+ | |||
|v|t|TKL|new code| Msg Id. | | code | | |v|t|TKL|new code| Message ID | | code | | |||
+-+-+---+--------+---------------+....+ +-------+-----......+ | +-+-+---+--------+---------------+....+ +-------+-----......+ | |||
| Token | | Options (E) | | | Token | | Options (E) | | |||
+--------------------------------.....+ +-------+------.....+ | +--------------------------------.....+ +-------+------.....+ | |||
| Options (IU) | | OxFF | | | Options (IU) | | 0xFF | | |||
. . +-------+-----------+ | . . +-------+-----------+ | |||
. OSCORE Option . | | | . OSCORE Option . | | | |||
+------+-------------------+ | Payload | | +------+-------------------+ | Payload | | |||
| 0xFF | | | | | 0xFF | | | | |||
+------+------------+ +-------------------+ | +------+------------+ +-------------------+ | |||
| Ciphertext |<---------\ | | | Ciphertext |<---------\ | | |||
| | | v | | | | v | |||
+-------------------+ | +-----------------+ | +-------------------+ | +-----------------+ | |||
| | | Inner SCHC | | | | | Inner SCHC | | |||
v | | Compression | | v | | Compression | | |||
skipping to change at line 606 ¶ | skipping to change at line 712 ¶ | |||
| | |RuleID | | | | |RuleID | | |||
v | +-------+-----------+ | v | +-------+-----------+ | |||
+--------+ +------------+ |Compression Residue| | +--------+ +------------+ |Compression Residue| | |||
|RuleID' | | Encryption | <-- +----------+--------+ | |RuleID' | | Encryption | <-- +----------+--------+ | |||
+--------+-----------+ +------------+ | | | +--------+-----------+ +------------+ | | | |||
|Compression Residue'| | Payload | | |Compression Residue'| | Payload | | |||
+-----------+--------+ | | | +-----------+--------+ | | | |||
| Ciphertext | +-------------------+ | | Ciphertext | +-------------------+ | |||
| | | | | | |||
+--------------------+ | +--------------------+ | |||
]]></artwork> | ||||
]]></artwork></figure> | </figure> | |||
<t>Note that since the corresponding endpoint can only decrypt the Inner | ||||
</section> | part of the message, this endpoint will also have to implement Inner SCHC Compr | |||
<section anchor="example-oscore-compression" title="Example OSCORE Compression"> | ession/Decompression.</t> | |||
</section> | ||||
<t>This section gives an example with a GET Request and its consequent Content | <section anchor="example-oscore-compression" numbered="true" toc="default" | |||
Response from a Device-based CoAP client to a cloud-based CoAP server. | > | |||
The example also describes a possible set of Rules for the Inner and Outer SCHC | <name>Example OSCORE Compression</name> | |||
<t>This section gives an example with a GET request and its consequent C | ||||
ontent | ||||
response from a Device-based CoAP client to a cloud-based CoAP server. | ||||
The example also describes a possible set of Rules for Inner SCHC Compression an | ||||
d Outer SCHC | ||||
Compression. A dump of the results and a contrast between SCHC + OSCORE | Compression. A dump of the results and a contrast between SCHC + OSCORE | |||
performance with SCHC + COAP performance is also listed. This example gives an a pproximation of the | performance with SCHC + CoAP performance are also listed. This example gives an approximation of the | |||
cost of security with SCHC-OSCORE.</t> | cost of security with SCHC-OSCORE.</t> | |||
<t>Our first CoAP message is the GET request in <xref target="Fig-GET-te | ||||
<t>Our first CoAP message is the GET request in <xref target="Fig-GET-temp"/>.</ | mp" format="default"/>.</t> | |||
t> | <figure anchor="Fig-GET-temp"> | |||
<name>CoAP GET Request</name> | ||||
<figure title="CoAP GET Request" anchor="Fig-GET-temp"><artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
Original message: | Original message: | |||
================= | ================= | |||
0x4101000182bb74656d7065726174757265 | 0x4101000182bb74656d7065726174757265 | |||
Header: | Header: | |||
0x4101 | 0x4101 | |||
01 Ver | 01 Ver | |||
00 CON | 00 CON | |||
0001 TKL | 0001 TKL | |||
00000001 Request Code 1 "GET" | 00000001 Request Code 1 "GET" | |||
0x0001 = mid | 0x0001 = mid | |||
0x82 = token | 0x82 = token | |||
Options: | Options: | |||
0xbb74656d7065726174757265 | 0xbb74656d7065726174757265 | |||
Option 11: URI_PATH | Option 11: URI_PATH | |||
Value = temperature | Value = temperature | |||
Original msg length: 17 bytes. | Original message length: 17 bytes | |||
]]></artwork></figure> | ]]></artwork> | |||
</figure> | ||||
<t>Its corresponding response is the CONTENT Response in <xref target="Fig-CONTE | <t>Its corresponding response is the Content response in <xref target="F | |||
NT-temp"/>.</t> | ig-CONTENT-temp" format="default"/>.</t> | |||
<figure anchor="Fig-CONTENT-temp"> | ||||
<figure title="CoAP CONTENT Response" anchor="Fig-CONTENT-temp"><artwork><![CDAT | <name>CoAP Content Response</name> | |||
A[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
Original message: | Original message: | |||
================= | ================= | |||
0x6145000182ff32332043 | 0x6145000182ff32332043 | |||
Header: | Header: | |||
0x6145 | 0x6145 | |||
01 Ver | 01 Ver | |||
10 ACK | 10 ACK | |||
0001 TKL | 0001 TKL | |||
01000101 Successful Response Code 69 "2.05 Content" | 01000101 Successful Response Code 69 "2.05 Content" | |||
0x0001 = mid | 0x0001 = mid | |||
0x82 = token | 0x82 = token | |||
0xFF Payload marker | 0xFF Payload marker | |||
Payload: | Payload: | |||
0x32332043 | 0x32332043 | |||
Original msg length: 10 | Original message length: 10 bytes | |||
]]></artwork></figure> | ]]></artwork> | |||
</figure> | ||||
<t>The SCHC Rules for the Inner Compression include all fields already present i | ||||
n a regular CoAP message. The methods described in <xref target="CoAPcomp"/> app | ||||
ly to these fields. As an example, see <xref target="Fig-Inner-Rules"/>.</t> | ||||
<figure title="Inner SCHC Rules" anchor="Fig-Inner-Rules"><artwork><![CDATA[ | ||||
RuleID 0 | ||||
+--------------+--+--+--+-----------+---------+---------++------+ | ||||
| Field |FL|FP|DI| Target | MO | CDA || Sent | | ||||
| | | | | Value | | ||[bits]| | ||||
+--------------+--+--+--+-----------+---------+---------++------+ | ||||
|CoAP Code | 8| 1|up| 1 | equal |not-sent || | | ||||
|CoAP Code | 8| 1|dw|[69, | | || | | ||||
| | | | |132] |match- |mapping- || | | ||||
| | | | | |mapping |sent || c | | ||||
|CoAP Uri-Path | | 1|up|temperature| equal |not-sent || | | ||||
+--------------+--+--+--+-----------+---------+---------++------+ | ||||
]]></artwork></figure> | ||||
<t><xref target="Fig-Inner-Compression-GET"/> shows the Plaintext obtained for t he example GET request. The packet follows the process of Inner Compression and Encryption until the payload. The outer OSCORE Message adds the result of the In ner process.</t> | <t>The SCHC Rules for the Inner Compression include all fields already p resent in a regular CoAP message. The methods described in <xref target="CoAPcom p" format="default"/> apply to these fields. <xref target="Table-Inner-Rules" fo rmat="default"/> provides an example.</t> | |||
<t>In this case, the original message has no payload, and its resulting Plaintex | <table anchor="Table-Inner-Rules"> | |||
t compressed up to only 1 byte (size of the RuleID). The AEAD algorithm preserve | <name>Inner SCHC Rule</name> | |||
s this length in its first output and yields a fixed-size tag. SCHC cannot compr | <thead> | |||
ess the tag, and the OSCORE message must include it without compression. | <tr> | |||
The use of integrity protection translates into an overhead in total message len | <th align="left" colspan="8">RuleID 0</th> | |||
gth, limiting the amount of compression that can be achieved and plays into the | </tr> | |||
cost of adding security to the exchange.</t> | <tr> | |||
<th align="center">Field</th> | ||||
<th align="center">FL</th> | ||||
<th align="center">FP</th> | ||||
<th align="center">DI</th> | ||||
<th align="center">TV</th> | ||||
<th align="center">MO</th> | ||||
<th align="center">CDA</th> | ||||
<th align="center">Sent [bits]</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td>CoAP Code</td> | ||||
<td>8</td> | ||||
<td>1</td> | ||||
<td>Up</td> | ||||
<td>1</td> | ||||
<td>equal</td> | ||||
<td>not-sent</td> | ||||
<th></th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP Code</td> | ||||
<td>8</td> | ||||
<td>1</td> | ||||
<td>Dw</td> | ||||
<td>[69,132]</td> | ||||
<td>match-mapping</td> | ||||
<td>mapping-sent</td> | ||||
<th>c</th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP Uri-Path</td> | ||||
<td></td> | ||||
<td>1</td> | ||||
<td>Up</td> | ||||
<td>temperature</td> | ||||
<td>equal</td> | ||||
<td>not-sent</td> | ||||
<th></th> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<figure title="Plaintext compression and encryption for GET Request" anchor="Fig | <t><xref target="Fig-Inner-Compression-GET" format="default"/> shows the | |||
-Inner-Compression-GET"><artwork><![CDATA[ | Plaintext obtained for the example GET request. The packet follows the process | |||
of Inner Compression and encryption until the payload. The Outer OSCORE message | ||||
adds the result of the Inner process.</t> | ||||
<figure anchor="Fig-Inner-Compression-GET"> | ||||
<name>Plaintext Compression and Encryption for GET Request</name> | ||||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
________________________________________________________ | ________________________________________________________ | |||
| | | | | | |||
| OSCORE Plaintext | | | OSCORE Plaintext | | |||
| | | | | | |||
| 0x01bb74656d7065726174757265 (13 bytes) | | | 0x01bb74656d7065726174757265 (13 bytes) | | |||
| | | | | | |||
| 0x01 Request Code GET | | | 0x01 Request Code GET | | |||
| | | | | | |||
| bb74656d7065726174757265 Option 11: URI_PATH | | | bb74656d7065726174757265 Option 11: URI_PATH | | |||
| Value = temperature | | | Value = temperature | | |||
skipping to change at line 728 ¶ | skipping to change at line 871 ¶ | |||
| AEAD Encryption | | AEAD Encryption | |||
| (piv = 0x04) | | (piv = 0x04) | |||
v | v | |||
_________________________________________________ | _________________________________________________ | |||
| | | | | | |||
| encrypted_plaintext = 0xa2 (1 byte) | | | encrypted_plaintext = 0xa2 (1 byte) | | |||
| tag = 0xc54fe1b434297b62 (8 bytes) | | | tag = 0xc54fe1b434297b62 (8 bytes) | | |||
| | | | | | |||
| ciphertext = 0xa2c54fe1b434297b62 (9 bytes) | | | ciphertext = 0xa2c54fe1b434297b62 (9 bytes) | | |||
|_________________________________________________| | |_________________________________________________| | |||
]]></artwork> | ||||
]]></artwork></figure> | </figure> | |||
<t>In this case, the original message has no payload, and its resulting | ||||
<t><xref target="Fig-Inner-Compression-CONTENT"/> shows the process for the exam | Plaintext is compressed up to only 1 byte (the size of the RuleID). The AEAD alg | |||
ple CONTENT Response. The Compression Residue is 1 bit long. | orithm preserves this length in its first output and yields a fixed-size tag. SC | |||
Note that since SCHC adds padding after the payload, this misalignment causes th | HC cannot compress the tag, and the OSCORE message must include it without compr | |||
e hexadecimal code from the payload to differ from the original, even if SCHC ca | ession. | |||
nnot compress the tag. The overhead for the tag bytes limits the SCHC’s performa | The use of integrity protection translates into an overhead in total message len | |||
nce but brings security to the transmission.</t> | gth, limiting the amount of compression that can be achieved and playing into th | |||
e cost of adding security to the exchange.</t> | ||||
<figure title="Plaintext compression and encryption for CONTENT Response" anchor | <t><xref target="Fig-Inner-Compression-CONTENT" format="default"/> shows | |||
="Fig-Inner-Compression-CONTENT"><artwork><![CDATA[ | the process for the example Content response. The Compression Residue is 1 bit | |||
long. | ||||
Note that since SCHC adds padding after the payload, this misalignment causes th | ||||
e hexadecimal code from the payload to differ from the original, even if SCHC ca | ||||
nnot compress the tag. The overhead for the tag bytes limits SCHC's performance | ||||
but brings security to the transmission.</t> | ||||
<figure anchor="Fig-Inner-Compression-CONTENT"> | ||||
<name>Plaintext Compression and Encryption for Content Response</name> | ||||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
________________________________________________________ | ________________________________________________________ | |||
| | | | | | |||
| OSCORE Plaintext | | | OSCORE Plaintext | | |||
| | | | | | |||
| 0x45ff32332043 (6 bytes) | | | 0x45ff32332043 (6 bytes) | | |||
| | | | | | |||
| 0x45 Successful Response Code 69 "2.05 Content" | | | 0x45 Successful Response Code 69 "2.05 Content" | | |||
| | | | | | |||
| ff Payload marker | | | ff Payload marker | | |||
| | | | | | |||
| 32332043 Payload | | | 32332043 Payload | | |||
|________________________________________________________| | |________________________________________________________| | |||
| | | | |||
| | | | |||
| Inner SCHC Compression | | Inner SCHC Compression | |||
| | | | |||
v | v | |||
_____________________________________________ | _________________________________________________ | |||
| | | | | | |||
| Compressed Plaintext | | | Compressed Plaintext | | |||
| | | | | | |||
| 0x001919902180 (6 bytes) | | | 0x001919902180 (6 bytes) | | |||
| | | | | | |||
| 00 RuleID | | | 00 RuleID | | |||
| | | | | | |||
| 0b0 (1 bit match-map Compression Residue) | | | 0b0 (1 bit match-mapping Compression Residue) | | |||
| 0x32332043 >> 1 (shifted payload) | | | 0x32332043 >> 1 (shifted payload) | | |||
| 0b0000000 Padding | | | 0b0000000 Padding | | |||
|_____________________________________________| | |_________________________________________________| | |||
| | | | |||
| AEAD Encryption | | AEAD Encryption | |||
| (piv = 0x04) | | (piv = 0x04) | |||
v | v | |||
_________________________________________________________ | _________________________________________________________ | |||
| | | | | | |||
| encrypted_plaintext = 0x10c6d7c26cc1 (6 bytes) | | | encrypted_plaintext = 0x10c6d7c26cc1 (6 bytes) | | |||
| tag = 0xe9aef3f2461e0c29 (8 bytes) | | | tag = 0xe9aef3f2461e0c29 (8 bytes) | | |||
| | | | | | |||
| ciphertext = 0x10c6d7c26cc1e9aef3f2461e0c29 (14 bytes) | | | ciphertext = 0x10c6d7c26cc1e9aef3f2461e0c29 (14 bytes) | | |||
|_________________________________________________________| | |_________________________________________________________| | |||
]]></artwork> | ||||
</figure> | ||||
<t>The Outer SCHC Rule (<xref target="Table-Outer-Rule" format="default" | ||||
/>) must process the OSCORE options fields. Figures <xref target="Fig-Prote | ||||
cted-Compressed-GET" format="counter"/> and <xref target="Fig-Protected-Compress | ||||
ed-CONTENT" format="counter"/> show a dump of the OSCORE messages generated from | ||||
the example messages. They include the Inner Compressed ciphertext in the paylo | ||||
ad. These are the messages that have to be compressed via the Outer SCHC Compres | ||||
sion scheme.</t> | ||||
]]></artwork></figure> | <t><xref target="Table-Outer-Rule" format="default"/> shows a possible s et of Outer Rule items to compress the Outer header.</t> | |||
<t>The Outer SCHC Rules (<xref target="Fig-Outer-Rules"/>) must process the OSCO | <table anchor="Table-Outer-Rule"> | |||
RE Options fields. <xref target="Fig-Protected-Compressed-GET"/> and <xref targe | <name>Outer SCHC Rule</name> | |||
t="Fig-Protected-Compressed-CONTENT"/> shows a dump of the OSCORE Messages gener | <thead> | |||
ated from the example messages. They include the Inner Compressed Ciphertext in | <tr> | |||
the payload. These are the messages that have to be compressed by the Outer SCHC | <th align="left" colspan="8">RuleID 0</th> | |||
Compression.</t> | </tr> | |||
<tr> | ||||
<th align="center">Field</th> | ||||
<th align="center">FL</th> | ||||
<th align="center">FP</th> | ||||
<th align="center">DI</th> | ||||
<th align="center">TV</th> | ||||
<th align="center">MO</th> | ||||
<th align="center">CDA</th> | ||||
<th align="center">Sent [bits]</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td>CoAP version</td> | ||||
<td>2</td> | ||||
<td>1</td> | ||||
<td>Bi</td> | ||||
<td>01</td> | ||||
<td>equal</td> | ||||
<td>not-sent</td> | ||||
<th></th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP Type</td> | ||||
<td>2</td> | ||||
<td>1</td> | ||||
<td>Up</td> | ||||
<td>0</td> | ||||
<td>equal</td> | ||||
<td>not-sent</td> | ||||
<th></th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP Type</td> | ||||
<td>2</td> | ||||
<td>1</td> | ||||
<td>Dw</td> | ||||
<td>2</td> | ||||
<td>equal</td> | ||||
<td>not-sent</td> | ||||
<th></th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP TKL</td> | ||||
<td>4</td> | ||||
<td>1</td> | ||||
<td>Bi</td> | ||||
<td>1</td> | ||||
<td>equal</td> | ||||
<td>not-sent</td> | ||||
<th></th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP Code</td> | ||||
<td>8</td> | ||||
<td>1</td> | ||||
<td>Up</td> | ||||
<td>2</td> | ||||
<td>equal</td> | ||||
<td>not-sent</td> | ||||
<th></th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP Code</td> | ||||
<td>8</td> | ||||
<td>1</td> | ||||
<td>Dw</td> | ||||
<td>68</td> | ||||
<td>equal</td> | ||||
<td>not-sent</td> | ||||
<th></th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP MID</td> | ||||
<td>16</td> | ||||
<td>1</td> | ||||
<td>Bi</td> | ||||
<td>0000</td> | ||||
<td>MSB(12)</td> | ||||
<td>LSB</td> | ||||
<th>MMMM</th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP Token</td> | ||||
<td>tkl</td> | ||||
<td>1</td> | ||||
<td>Bi</td> | ||||
<td>0x80</td> | ||||
<td>MSB(5)</td> | ||||
<td>LSB</td> | ||||
<th>TTT</th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP OSCORE_flags</td> | ||||
<td>8</td> | ||||
<td>1</td> | ||||
<td>Up</td> | ||||
<td>0x09</td> | ||||
<td>equal</td> | ||||
<td>not-sent</td> | ||||
<th></th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP OSCORE_piv</td> | ||||
<td>var</td> | ||||
<td>1</td> | ||||
<td>Up</td> | ||||
<td>0x00</td> | ||||
<td>MSB(4)</td> | ||||
<td>LSB</td> | ||||
<th>PPPP</th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP OSCORE_kid</td> | ||||
<td>var</td> | ||||
<td>1</td> | ||||
<td>Up</td> | ||||
<td>0x636c69656e70</td> | ||||
<td>MSB(52)</td> | ||||
<td>LSB</td> | ||||
<th>KKKK</th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP OSCORE_kidctx</td> | ||||
<td>var</td> | ||||
<td>1</td> | ||||
<td>Bi</td> | ||||
<td>b''</td> | ||||
<td>equal</td> | ||||
<td>not-sent</td> | ||||
<th></th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP OSCORE_flags</td> | ||||
<td>8</td> | ||||
<td>1</td> | ||||
<td>Dw</td> | ||||
<td>b''</td> | ||||
<td>equal</td> | ||||
<td>not-sent</td> | ||||
<th></th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP OSCORE_piv</td> | ||||
<td>var</td> | ||||
<td>1</td> | ||||
<td>Dw</td> | ||||
<td>b''</td> | ||||
<td>equal</td> | ||||
<td>not-sent</td> | ||||
<th></th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP OSCORE_kid</td> | ||||
<td>var</td> | ||||
<td>1</td> | ||||
<td>Dw</td> | ||||
<td>b''</td> | ||||
<td>equal</td> | ||||
<td>not-sent</td> | ||||
<th></th> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<figure title="Protected and Inner SCHC Compressed GET Request" anchor="Fig-Prot | <figure anchor="Fig-Protected-Compressed-GET"> | |||
ected-Compressed-GET"><artwork><![CDATA[ | <name>Protected and Inner SCHC Compressed GET Request</name> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
Protected message: | Protected message: | |||
================== | ================== | |||
0x4102000182d8080904636c69656e74ffa2c54fe1b434297b62 | 0x4102000182d8080904636c69656e74ffa2c54fe1b434297b62 | |||
(25 bytes) | (25 bytes) | |||
Header: | Header: | |||
0x4102 | 0x4102 | |||
01 Ver | 01 Ver | |||
00 CON | 00 CON | |||
0001 TKL | 0001 TKL | |||
00000010 Request Code 2 "POST" | 00000010 Request Code 2 "POST" | |||
0x0001 = mid | 0x0001 = mid | |||
0x82 = token | 0x82 = token | |||
Options: | Options: | |||
0xd8080904636c69656e74 (10 bytes) | 0xd8080904636c69656e74 (10 bytes) | |||
Option 21: OBJECT_SECURITY | Option 21: OBJECT_SECURITY | |||
Value = 0x0904636c69656e74 | Value = 0x0904636c69656e74 | |||
09 = 000 0 1 001 Flag byte | 09 = 000 0 1 001 flag byte | |||
h k n | h k n | |||
04 piv | 04 piv | |||
636c69656e74 kid | 636c69656e74 kid | |||
0xFF Payload marker | 0xFF Payload marker | |||
Payload: | Payload: | |||
0xa2c54fe1b434297b62 (9 bytes) | 0xa2c54fe1b434297b62 (9 bytes) | |||
]]></artwork></figure> | ]]></artwork> | |||
</figure> | ||||
<figure title="Protected and Inner SCHC Compressed CONTENT Response" anchor="Fig | <figure anchor="Fig-Protected-Compressed-CONTENT"> | |||
-Protected-Compressed-CONTENT"><artwork><![CDATA[ | <name>Protected and Inner SCHC Compressed Content Response</name> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
Protected message: | Protected message: | |||
================== | ================== | |||
0x6144000182d008ff10c6d7c26cc1e9aef3f2461e0c29 | 0x6144000182d008ff10c6d7c26cc1e9aef3f2461e0c29 | |||
(22 bytes) | (22 bytes) | |||
Header: | Header: | |||
0x6144 | 0x6144 | |||
01 Ver | 01 Ver | |||
10 ACK | 10 ACK | |||
0001 TKL | 0001 TKL | |||
skipping to change at line 836 ¶ | skipping to change at line 1157 ¶ | |||
0x82 = token | 0x82 = token | |||
Options: | Options: | |||
0xd008 (2 bytes) | 0xd008 (2 bytes) | |||
Option 21: OBJECT_SECURITY | Option 21: OBJECT_SECURITY | |||
Value = b'' | Value = b'' | |||
0xFF Payload marker | 0xFF Payload marker | |||
Payload: | Payload: | |||
0x10c6d7c26cc1e9aef3f2461e0c29 (14 bytes) | 0x10c6d7c26cc1e9aef3f2461e0c29 (14 bytes) | |||
]]></artwork></figure> | ]]></artwork> | |||
</figure> | ||||
<t>For the flag bits, some SCHC compression methods are useful, depending on the | <t>For the flag bits, some SCHC compression methods are useful, dependin | |||
Application. The most straightforward alternative is to | g on the application. The most straightforward alternative is to | |||
provide a fixed value for the flags, combining MO “equal” and CDA “not-sent.” | provide a fixed value for the flags, combining a MO of "equal" and a CDA of "not | |||
This SCHC definition saves most bits but could prevent flexibility. Otherwise, S | -sent". | |||
CHC could use a “match-mapping” MO to choose from several configurations for the | This SCHC definition saves most bits but could prevent flexibility. Otherwise, S | |||
exchange. If not, the SCHC description may use an “MSB” MO to mask off the thre | CHC could use a "match-mapping" MO to choose from several configurations for the | |||
e hard-coded most significant bits.</t> | exchange. If not, the SCHC description may use an "MSB" MO to mask off the thre | |||
e hard-coded most significant bits.</t> | ||||
<t>Note that fixing a flag bit will limit CoAP Options choice that can be used i | <t>Note that fixing a flag bit will limit the choices of CoAP options th | |||
n the exchange since their values are dependent on specific options.</t> | at can be used in the exchange, since the values of these choices are dependent | |||
on specific options. | ||||
<t>The piv field lends itself to having some bits masked off with “MSB” MO and “ | </t> | |||
LSB” CDA. This SCHC description could be useful in applications where the messag | <t>The piv field lends itself to having some bits masked off with an "MS | |||
e frequency is low such as LPWAN technologies. | B" MO and an "LSB" CDA. This SCHC description could be useful in applications wh | |||
ere the message frequency is low, such as LPWAN technologies. | ||||
Note that compressing the sequence numbers may reduce the maximum number of sequ ence numbers that can be used in an exchange. | Note that compressing the sequence numbers may reduce the maximum number of sequ ence numbers that can be used in an exchange. | |||
Once the sequence number exceeds the maximum value, the OSCORE keys need to be r e-established.</t> | Once the sequence number exceeds the maximum value, the OSCORE keys need to be r e-established.</t> | |||
<t>The size, s, that is included in the kid context field <bcp14>MAY</bc | ||||
<t>The size s included in the kid context field MAY be masked off with “LSB” CDA | p14> be masked off with an "LSB" CDA. The rest of the field could have additiona | |||
. The rest of the field could have additional bits masked off or have the whole | l bits masked off or have the whole field fixed with a MO of "equal" and a CDA o | |||
field fixed with MO “equal” and CDA “not-sent.” The same holds for the kid field | f "not-sent". The same holds for the kid field.</t> | |||
.</t> | <t>The Outer Rule of <xref target="Table-Outer-Rule" format="default"/> | |||
is applied to the example GET request and Content response. | ||||
<t><xref target="Fig-Outer-Rules"/> shows a possible set of Outer Rules to compr | Figures <xref target="Fig-Compressed-GET" format="counter"/> and <xref targ | |||
ess the Outer Header.</t> | et="Fig-Compressed-CONTENT" format="counter"/> show the resulting messages.</t> | |||
<figure anchor="Fig-Compressed-GET"> | ||||
<figure title="Outer SCHC Rules" anchor="Fig-Outer-Rules"><artwork><![CDATA[ | <name>SCHC-OSCORE Compressed GET Request</name> | |||
RuleID 0 | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
+------------------+--+--+--+--------------+-------+--------++------+ | ||||
| Field |FL|FP|DI| Target | MO | CDA || Sent | | ||||
| | | | | Value | | ||[bits]| | ||||
+------------------+--+--+--+--------------+-------+--------++------+ | ||||
|CoAP version | 2| 1|bi| 01 |equal |not-sent|| | | ||||
|CoAP Type | 2| 1|up| 0 |equal |not-sent|| | | ||||
|CoAP Type | 2| 1|dw| 2 |equal |not-sent|| | | ||||
|CoAP TKL | 4| 1|bi| 1 |equal |not-sent|| | | ||||
|CoAP Code | 8| 1|up| 2 |equal |not-sent|| | | ||||
|CoAP Code | 8| 1|dw| 68 |equal |not-sent|| | | ||||
|CoAP MID |16| 1|bi| 0000 |MSB(12)|LSB ||MMMM | | ||||
|CoAP Token |tkl 1|bi| 0x80 |MSB(5) |LSB ||TTT | | ||||
|CoAP OSCORE_flags | 8| 1|up| 0x09 |equal |not-sent|| | | ||||
|CoAP OSCORE_piv |var 1|up| 0x00 |MSB(4) |LSB ||PPPP | | ||||
|COAP OSCORE_kid |var 1|up|0x636c69656e70|MSB(52)|LSB ||KKKK | | ||||
|COAP OSCORE_kidctx|var 1|bi| b'' |equal |not-sent|| | | ||||
|CoAP OSCORE_flags | 8| 1|dw| b'' |equal |not-sent|| | | ||||
|CoAP OSCORE_piv |var 1|dw| b'' |equal |not-sent|| | | ||||
|CoAP OSCORE_kid |var 1|dw| b'' |equal |not-sent|| | | ||||
+------------------+--+--+--+--------------+-------+--------++------+ | ||||
]]></artwork></figure> | ||||
<t>The Outer Rule of <xref target="Fig-Outer-Rules"/> is applied to the example | ||||
GET Request and CONTENT Response. | ||||
<xref target="Fig-Compressed-GET"/> and <xref target="Fig-Compressed-CONTENT"/> | ||||
show the resulting messages.</t> | ||||
<figure title="SCHC-OSCORE Compressed GET Request" anchor="Fig-Compressed-GET">< | ||||
artwork><![CDATA[ | ||||
Compressed message: | Compressed message: | |||
================== | ================== | |||
0x001489458a9fc3686852f6c4 (12 bytes) | 0x001489458a9fc3686852f6c4 (12 bytes) | |||
0x00 RuleID | 0x00 RuleID | |||
1489 Compression Residue | 1489 Compression Residue | |||
458a9fc3686852f6c4 Padded payload | 458a9fc3686852f6c4 Padded payload | |||
Compression Residue: | Compression Residue: | |||
0b 0001 010 0100 0100 (15 bits -> 2 bytes with padding) | 0b 0001 010 0100 0100 (15 bits -> 2 bytes with padding) | |||
mid tkn piv kid | mid tkn piv kid | |||
Payload | Payload | |||
0xa2c54fe1b434297b62 (9 bytes) | 0xa2c54fe1b434297b62 (9 bytes) | |||
Compressed message length: 12 bytes | Compressed message length: 12 bytes | |||
]]></artwork></figure> | ]]></artwork> | |||
</figure> | ||||
<figure title="SCHC-OSCORE Compressed CONTENT Response" anchor="Fig-Compressed-C | <figure anchor="Fig-Compressed-CONTENT"> | |||
ONTENT"><artwork><![CDATA[ | <name>SCHC-OSCORE Compressed Content Response</name> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
Compressed message: | Compressed message: | |||
================== | ================== | |||
0x0014218daf84d983d35de7e48c3c1852 (16 bytes) | 0x0014218daf84d983d35de7e48c3c1852 (16 bytes) | |||
0x00 RuleID | 0x00 RuleID | |||
14 Compression Residue | 14 Compression Residue | |||
218daf84d983d35de7e48c3c1852 Padded payload | 218daf84d983d35de7e48c3c1852 Padded payload | |||
Compression Residue: | Compression Residue: | |||
0b0001 010 (7 bits -> 1 byte with padding) | 0b0001 010 (7 bits -> 1 byte with padding) | |||
mid tkn | mid tkn | |||
Payload | Payload | |||
0x10c6d7c26cc1e9aef3f2461e0c29 (14 bytes) | 0x10c6d7c26cc1e9aef3f2461e0c29 (14 bytes) | |||
Compressed msg length: 16 bytes | Compressed message length: 16 bytes | |||
]]></artwork></figure> | ]]></artwork> | |||
</figure> | ||||
<t>In contrast, comparing these results with what would be obtained by SCHC | <t>In contrast, comparing these results with what would be obtained by S | |||
CHC | ||||
compressing the original CoAP messages without protecting them with OSCORE is do ne | compressing the original CoAP messages without protecting them with OSCORE is do ne | |||
by compressing the CoAP messages according to the SCHC Rules in <xref target="Fi | by compressing the CoAP messages according to the SCHC Rule in <xref target="Tab | |||
g-NoOsc-Rules"/>.</t> | le-NoOsc-Rule" format="default"/>.</t> | |||
<figure title="SCHC-CoAP Rules (No OSCORE)" anchor="Fig-NoOsc-Rules"><artwork><! | ||||
[CDATA[ | ||||
RuleID 1 | ||||
+---------------+--+--+--+-----------+---------+-----------++-------+ | ||||
| Field |FL|FP|DI| Target | MO | CDA || Sent | | ||||
| | | | | Value | | || [bits]| | ||||
+---------------+--+--+--+-----------+---------+-----------++-------+ | ||||
|CoAP version | 2| 1|bi| 01 |equal |not-sent || | | ||||
|CoAP Type | 2| 1|up| 0 |equal |not-sent || | | ||||
|CoAP Type | 2| 1|dw| 2 |equal |not-sent || | | ||||
|CoAP TKL | 4| 1|bi| 1 |equal |not-sent || | | ||||
|CoAP Code | 8| 1|up| 2 |equal |not-sent || | | ||||
|CoAP Code | 8| 1|dw| [69,132] |match- |mapping- || | | ||||
| | | | | |mapping |sent ||C | | ||||
|CoAP MID |16| 1|bi| 0000 |MSB(12) |LSB ||MMMM | | ||||
|CoAP Token |tkl 1|bi| 0x80 |MSB(5) |LSB ||TTT | | ||||
|CoAP Uri-Path | | 1|up|temperature|equal |not-sent || | | ||||
+---------------+--+--+--+-----------+---------+-----------++-------+ | ||||
]]></artwork></figure> | ||||
<t><xref target="Fig-NoOsc-Rules"/> Rule yields the SCHC compression results in | <table anchor="Table-NoOsc-Rule"> | |||
<xref target="Fig-GET-temp-no-oscore"/> for request, and | <name>SCHC-CoAP Rule (No OSCORE)</name> | |||
<xref target="Fig-CONTENT-temp-no-oscore"/> for the response.</t> | <thead> | |||
<tr> | ||||
<th align="left" colspan="8">RuleID 1</th> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Field</th> | ||||
<th align="center">FL</th> | ||||
<th align="center">FP</th> | ||||
<th align="center">DI</th> | ||||
<th align="center">TV</th> | ||||
<th align="center">MO</th> | ||||
<th align="center">CDA</th> | ||||
<th align="center">Sent [bits]</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td>CoAP version</td> | ||||
<td>2</td> | ||||
<td>1</td> | ||||
<td>Bi</td> | ||||
<td>01</td> | ||||
<td>equal</td> | ||||
<td>not-sent</td> | ||||
<th></th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP Type</td> | ||||
<td>2</td> | ||||
<td>1</td> | ||||
<td>Up</td> | ||||
<td>0</td> | ||||
<td>equal</td> | ||||
<td>not-sent</td> | ||||
<th></th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP Type</td> | ||||
<td>2</td> | ||||
<td>1</td> | ||||
<td>Dw</td> | ||||
<td>2</td> | ||||
<td>equal</td> | ||||
<td>not-sent</td> | ||||
<th></th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP TKL</td> | ||||
<td>4</td> | ||||
<td>1</td> | ||||
<td>Bi</td> | ||||
<td>1</td> | ||||
<td>equal</td> | ||||
<td>not-sent</td> | ||||
<th></th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP Code</td> | ||||
<td>8</td> | ||||
<td>1</td> | ||||
<td>Up</td> | ||||
<td>2</td> | ||||
<td>equal</td> | ||||
<td>not-sent</td> | ||||
<th></th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP Code</td> | ||||
<td>8</td> | ||||
<td>1</td> | ||||
<td>Dw</td> | ||||
<td>[69,132]</td> | ||||
<td>match-mapping</td> | ||||
<td>mapping-sent</td> | ||||
<th>C</th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP MID</td> | ||||
<td>16</td> | ||||
<td>1</td> | ||||
<td>Bi</td> | ||||
<td>0000</td> | ||||
<td>MSB(12)</td> | ||||
<td>LSB</td> | ||||
<th>MMMM</th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP Token</td> | ||||
<td>tkl</td> | ||||
<td>1</td> | ||||
<td>Bi</td> | ||||
<td>0x80</td> | ||||
<td>MSB(5)</td> | ||||
<td>LSB</td> | ||||
<th>TTT</th> | ||||
</tr> | ||||
<tr> | ||||
<td>CoAP Uri-Path</td> | ||||
<td></td> | ||||
<td>1</td> | ||||
<td>Up</td> | ||||
<td>temperature</td> | ||||
<td>equal</td> | ||||
<td>not-sent</td> | ||||
<th></th> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<figure title="CoAP GET Compressed without OSCORE" anchor="Fig-GET-temp-no-oscor | <t>The Rule in <xref target="Table-NoOsc-Rule" format="default"/> yields | |||
e"><artwork><![CDATA[ | the SCHC compression results as shown in <xref target="Fig-GET-temp-no-oscore" | |||
format="default"/> for the request and | ||||
<xref target="Fig-CONTENT-temp-no-oscore" format="default"/> for the response. | ||||
</t> | ||||
<figure anchor="Fig-GET-temp-no-oscore"> | ||||
<name>CoAP GET Compressed without OSCORE</name> | ||||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
Compressed message: | Compressed message: | |||
================== | ================== | |||
0x0114 | 0x0114 | |||
0x01 = RuleID | 0x01 = RuleID | |||
Compression Residue: | Compression Residue: | |||
0b00010100 (1 byte) | 0b00010100 (1 byte) | |||
Compressed msg length: 2 | Compressed message length: 2 bytes | |||
]]></artwork> | ||||
]]></artwork></figure> | </figure> | |||
<figure anchor="Fig-CONTENT-temp-no-oscore"> | ||||
<figure title="CoAP CONTENT Compressed without OSCORE" anchor="Fig-CONTENT-temp- | <name>CoAP Content Compressed without OSCORE</name> | |||
no-oscore"><artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
Compressed message: | Compressed message: | |||
================== | ================== | |||
0x010a32332043 | 0x010a32332043 | |||
0x01 = RuleID | 0x01 = RuleID | |||
Compression Residue: | Compression Residue: | |||
0b00001010 (1 byte) | 0b00001010 (1 byte) | |||
Payload | Payload | |||
0x32332043 | 0x32332043 | |||
Compressed msg length: 6 | Compressed message length: 6 bytes | |||
]]></artwork> | ||||
]]></artwork></figure> | </figure> | |||
<t>As can be seen, the difference between applying SCHC + OSCORE as comp | ||||
<t>As can be seen, the difference between applying SCHC + OSCORE as compared to | ared to | |||
regular SCHC + COAP is about 10 bytes.</t> | regular SCHC + CoAP is about 10 bytes.</t> | |||
</section> | ||||
</section> | </section> | |||
</section> | <section anchor="iana-considerations" numbered="true" toc="default"> | |||
<section anchor="iana-considerations" title="IANA Considerations"> | <name>IANA Considerations</name> | |||
<t>This document has no IANA actions.</t> | ||||
<t>This document has no request to IANA.</t> | </section> | |||
<section anchor="SecConsiderations" numbered="true" toc="default"> | ||||
</section> | <name>Security Considerations</name> | |||
<section anchor="SecConsiderations" title="Security considerations"> | <t>The use of SCHC header compression for CoAP header fields only affects | |||
the representation of the header information. SCHC header compression | ||||
<t>The use of SCHC header compression for CoAP header fields only affects | ||||
the representation of the header information. SCHC header compression | ||||
itself does not increase or decrease the overall level of security of | itself does not increase or decrease the overall level of security of | |||
the communication. When the connection does not use a security protocol | the communication. When the connection does not use a security protocol | |||
(such as OSCORE, DTLS, etc.), it is necessary to use a layer-two | (OSCORE, DTLS, etc.), it is necessary to use a Layer 2 | |||
security mechanism to protect the SCHC messages.</t> | security mechanism to protect the SCHC messages.</t> | |||
<t>If an LPWAN is the Layer 2 technology being used, the SCHC security con | ||||
<t>If LPWAN is the layer-two technology, the SCHC security considerations | siderations | |||
of <xref target="RFC8724"></xref> continue to apply. When using another layer-t | discussed in <xref target="RFC8724" format="default"/> continue to apply. When | |||
wo protocol, | using another Layer 2 protocol, the | |||
use of a cryptographic integrity-protection mechanisms to protect the | use of a cryptographic integrity-protection mechanism to protect the | |||
SCHC headers is REQUIRED. Such cryptographic integrity protection is | SCHC headers is <bcp14>REQUIRED</bcp14>. Such cryptographic integrity protection | |||
necessary in order to continue to provide the properties that <xref target="RFC8 | is | |||
724"></xref> | necessary in order to continue to provide the properties that <xref target="RFC8 | |||
724" format="default"/> | ||||
relies upon.</t> | relies upon.</t> | |||
<t>When SCHC is used with OSCORE, the security considerations discussed in | ||||
<t>When SCHC is used with OSCORE, the security considerations of <xref target="R | <xref target="RFC8613" format="default"/> | |||
FC8613"></xref> | ||||
continue to apply.</t> | continue to apply.</t> | |||
<t>When SCHC is used with the OSCORE Outer headers, the Initialization | ||||
<t>When SCHC is used with the OSCORE outer headers, the Initialization | ||||
Vector (IV) size in the Compression Residue must be carefully selected. | Vector (IV) size in the Compression Residue must be carefully selected. | |||
There is a tradeoff between compression efficiency (with a longer “MSB” | There is a trade-off between compression efficiency (with a longer "MSB" | |||
MO prefix) and the frequency at which the Device must renew its key | MO prefix) and the frequency at which the Device must renew its key | |||
material (in order to prevent the IV from expanding to an uncompressable | material (in order to prevent the IV from expanding to an uncompressible | |||
value). The key renewal operation itself requires several message | value). The key-renewal operation itself requires several message | |||
exchanges and requires energy-intensive computation, but the optimal | exchanges and requires energy-intensive computation, but the optimal | |||
tradeoff will depend on the specifics of the device and expected usage | trade-off will depend on the specifics of the Device and expected usage | |||
patterns.</t> | patterns.</t> | |||
<t>If an attacker can introduce a corrupted SCHC-compressed packet onto a | ||||
<t>If an attacker can introduce a corrupted SCHC-compressed packet onto a | link, DoS attacks can be mounted by causing excessive resource consumption | |||
link, DoS attacks are possible by causing excessive resource consumption | at the decompressor. However, an attacker able to inject packets at the | |||
at the decompressor. However, an attacker able to inject packets at the | ||||
link layer is also capable of other, potentially more damaging, attacks.</t> | link layer is also capable of other, potentially more damaging, attacks.</t> | |||
<t>SCHC compression emits variable-length Compression Residues for some | ||||
<t>SCHC compression emits variable-length Compression Residues for some | CoAP fields. In the representation of the compressed header, the length field | |||
CoAP fields. In the compressed header representation, the length field | ||||
that is sent is not the length of the original header field but rather | that is sent is not the length of the original header field but rather | |||
the length of the Compression Residue that is being transmitted. If a | the length of the Compression Residue that is being transmitted. If a | |||
corrupted packet arrives at the decompressor with a longer or shorter | corrupted packet arrives at the decompressor with a longer or shorter | |||
length than the original compressed representation possessed, the SCHC | length than the original compressed representation possessed, the SCHC | |||
decompression procedures will detect an error and drop the packet.</t> | decompression procedures will detect an error and drop the packet.</t> | |||
<t>SCHC header compression Rules <bcp14>MUST</bcp14> remain tightly couple | ||||
<t>SCHC header compression rules MUST remain tightly coupled between | d between the | |||
compressor and decompressor. If the compression rules get out of sync, | compressor and the decompressor. If the compression Rules get out of sync, | |||
a Compression Residue might be decompressed differently at the receiver | a Compression Residue might be decompressed differently at the receiver | |||
than the initial message submitted to compression procedures. | than the initial message submitted to compression procedures. | |||
Accordingly, any time the context Rules are updated on an OSCORE | Accordingly, any time the context Rules are updated on an OSCORE | |||
endpoint, that endpoint MUST trigger OSCORE key re-establishment. | endpoint, that endpoint <bcp14>MUST</bcp14> trigger OSCORE key re-establishment. | |||
Similar procedures may be appropriate to signal Rule udpates when other | Similar procedures may be appropriate to signal Rule updates when other | |||
message-protection mechanisms are in use.</t> | message-protection mechanisms are in use.</t> | |||
</section> | ||||
</section> | ||||
<section anchor="acknowledgements" title="Acknowledgements"> | ||||
<t>The authors would like to thank (in alphabetic order): Christian Amsuss, Domi | ||||
nique Barthel, Carsten Bormann, Theresa Enghardt, Thomas Fossati, Klaus Hartke, | ||||
Benjamin Kaduk, Francesca Palombini, Alexander Pelov, Goran Selander and Eric Vy | ||||
ncke.</t> | ||||
</section> | ||||
</middle> | </middle> | |||
<back> | <back> | |||
<references> | ||||
<references title='Normative References'> | <name>Normative References</name> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
<reference anchor="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'> | .2119.xml"/> | |||
<front> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
<title>Key words for use in RFCs to Indicate Requirement Levels</title> | .5116.xml"/> | |||
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></ | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
author> | .7252.xml"/> | |||
<date year='1997' month='March' /> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
<abstract><t>In many standards track documents several words are used to signify | .7967.xml"/> | |||
the requirements in the specification. These words are often capitalized. This | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
document defines these words as they should be interpreted in IETF documents. | .7641.xml"/> | |||
This document specifies an Internet Best Current Practices for the Internet Comm | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
unity, and requests discussion and suggestions for improvements.</t></abstract> | .7959.xml"/> | |||
</front> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
<seriesInfo name='BCP' value='14'/> | .8174.xml"/> | |||
<seriesInfo name='RFC' value='2119'/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
<seriesInfo name='DOI' value='10.17487/RFC2119'/> | .8613.xml"/> | |||
</reference> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
.8724.xml"/> | ||||
<reference anchor="RFC5116" target='https://www.rfc-editor.org/info/rfc5116'> | ||||
<front> | ||||
<title>An Interface and Algorithms for Authenticated Encryption</title> | ||||
<author initials='D.' surname='McGrew' fullname='D. McGrew'><organization /></au | ||||
thor> | ||||
<date year='2008' month='January' /> | ||||
<abstract><t>This document defines algorithms for Authenticated Encryption with | ||||
Associated Data (AEAD), and defines a uniform interface and a registry for such | ||||
algorithms. The interface and registry can be used as an application-independen | ||||
t set of cryptoalgorithm suites. This approach provides advantages in efficienc | ||||
y and security, and promotes the reuse of crypto implementations. [STANDARDS-TR | ||||
ACK]</t></abstract> | ||||
</front> | ||||
<seriesInfo name='RFC' value='5116'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC5116'/> | ||||
</reference> | ||||
<reference anchor="RFC7252" target='https://www.rfc-editor.org/info/rfc7252'> | ||||
<front> | ||||
<title>The Constrained Application Protocol (CoAP)</title> | ||||
<author initials='Z.' surname='Shelby' fullname='Z. Shelby'><organization /></au | ||||
thor> | ||||
<author initials='K.' surname='Hartke' fullname='K. Hartke'><organization /></au | ||||
thor> | ||||
<author initials='C.' surname='Bormann' fullname='C. Bormann'><organization /></ | ||||
author> | ||||
<date year='2014' month='June' /> | ||||
<abstract><t>The Constrained Application Protocol (CoAP) is a specialized web tr | ||||
ansfer protocol for use with constrained nodes and constrained (e.g., low-power, | ||||
lossy) networks. The nodes often have 8-bit microcontrollers with small amount | ||||
s of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireles | ||||
s Personal Area Networks (6LoWPANs) often have high packet error rates and a typ | ||||
ical throughput of 10s of kbit/s. The protocol is designed for machine- to-mach | ||||
ine (M2M) applications such as smart energy and building automation.</t><t>CoAP | ||||
provides a request/response interaction model between application endpoints, sup | ||||
ports built-in discovery of services and resources, and includes key concepts of | ||||
the Web such as URIs and Internet media types. CoAP is designed to easily inte | ||||
rface with HTTP for integration with the Web while meeting specialized requireme | ||||
nts such as multicast support, very low overhead, and simplicity for constrained | ||||
environments.</t></abstract> | ||||
</front> | ||||
<seriesInfo name='RFC' value='7252'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC7252'/> | ||||
</reference> | ||||
<reference anchor="RFC7967" target='https://www.rfc-editor.org/info/rfc7967'> | ||||
<front> | ||||
<title>Constrained Application Protocol (CoAP) Option for No Server Response</ti | ||||
tle> | ||||
<author initials='A.' surname='Bhattacharyya' fullname='A. Bhattacharyya'><organ | ||||
ization /></author> | ||||
<author initials='S.' surname='Bandyopadhyay' fullname='S. Bandyopadhyay'><organ | ||||
ization /></author> | ||||
<author initials='A.' surname='Pal' fullname='A. Pal'><organization /></author> | ||||
<author initials='T.' surname='Bose' fullname='T. Bose'><organization /></author | ||||
> | ||||
<date year='2016' month='August' /> | ||||
<abstract><t>There can be machine-to-machine (M2M) scenarios where server respon | ||||
ses to client requests are redundant. This kind of open-loop exchange (with no | ||||
response path from the server to the client) may be desired to minimize resource | ||||
consumption in constrained systems while updating many resources simultaneously | ||||
or performing high-frequency updates. CoAP already provides Non-confirmable (NO | ||||
N) messages that are not acknowledged by the recipient. However, the request/re | ||||
sponse semantics still require the server to respond with a status code indicati | ||||
ng "the result of the attempt to understand and satisfy the request&q | ||||
uot;, per RFC 7252.</t><t>This specification introduces a CoAP option called 'No | ||||
-Response'. Using this option, the client can explicitly express to the server i | ||||
ts disinterest in all responses against the particular request. This option also | ||||
provides granular control to enable expression of disinterest to a particular r | ||||
esponse class or a combination of response classes. The server MAY decide to su | ||||
ppress the response by not transmitting it back to the client according to the v | ||||
alue of the No-Response option in the request. This option may be effective for | ||||
both unicast and multicast requests. This document also discusses a few exampl | ||||
es of applications that benefit from this option.</t></abstract> | ||||
</front> | ||||
<seriesInfo name='RFC' value='7967'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC7967'/> | ||||
</reference> | ||||
<reference anchor="RFC7641" target='https://www.rfc-editor.org/info/rfc7641'> | ||||
<front> | ||||
<title>Observing Resources in the Constrained Application Protocol (CoAP)</title | ||||
> | ||||
<author initials='K.' surname='Hartke' fullname='K. Hartke'><organization /></au | ||||
thor> | ||||
<date year='2015' month='September' /> | ||||
<abstract><t>The Constrained Application Protocol (CoAP) is a RESTful applicatio | ||||
n protocol for constrained nodes and networks. The state of a resource on a CoA | ||||
P server can change over time. This document specifies a simple protocol extens | ||||
ion for CoAP that enables CoAP clients to "observe" resources, i.e., t | ||||
o retrieve a representation of a resource and keep this representation updated b | ||||
y the server over a period of time. The protocol follows a best-effort approach | ||||
for sending new representations to clients and provides eventual consistency be | ||||
tween the state observed by each client and the actual resource state at the ser | ||||
ver.</t></abstract> | ||||
</front> | ||||
<seriesInfo name='RFC' value='7641'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC7641'/> | ||||
</reference> | ||||
<reference anchor="RFC7959" target='https://www.rfc-editor.org/info/rfc7959'> | ||||
<front> | ||||
<title>Block-Wise Transfers in the Constrained Application Protocol (CoAP)</titl | ||||
e> | ||||
<author initials='C.' surname='Bormann' fullname='C. Bormann'><organization /></ | ||||
author> | ||||
<author initials='Z.' surname='Shelby' fullname='Z. Shelby' role='editor'><organ | ||||
ization /></author> | ||||
<date year='2016' month='August' /> | ||||
<abstract><t>The Constrained Application Protocol (CoAP) is a RESTful transfer p | ||||
rotocol for constrained nodes and networks. Basic CoAP messages work well for s | ||||
mall payloads from sensors and actuators; however, applications will need to tra | ||||
nsfer larger payloads occasionally -- for instance, for firmware updates. In co | ||||
ntrast to HTTP, where TCP does the grunt work of segmenting and resequencing, Co | ||||
AP is based on datagram transports such as UDP or Datagram Transport Layer Secur | ||||
ity (DTLS). These transports only offer fragmentation, which is even more probl | ||||
ematic in constrained nodes and networks, limiting the maximum size of resource | ||||
representations that can practically be transferred.</t><t>Instead of relying on | ||||
IP fragmentation, this specification extends basic CoAP with a pair of "Bl | ||||
ock" options for transferring multiple blocks of information from a resourc | ||||
e representation in multiple request-response pairs. In many important cases, t | ||||
he Block options enable a server to be truly stateless: the server can handle ea | ||||
ch block transfer separately, with no need for a connection setup or other serve | ||||
r-side memory of previous block transfers. Essentially, the Block options provi | ||||
de a minimal way to transfer larger representations in a block-wise fashion.</t> | ||||
<t>A CoAP implementation that does not support these options generally is limite | ||||
d in the size of the representations that can be exchanged, so there is an expec | ||||
tation that the Block options will be widely used in CoAP implementations. Ther | ||||
efore, this specification updates RFC 7252.</t></abstract> | ||||
</front> | ||||
<seriesInfo name='RFC' value='7959'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC7959'/> | ||||
</reference> | ||||
<reference anchor="RFC8174" target='https://www.rfc-editor.org/info/rfc8174'> | ||||
<front> | ||||
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title> | ||||
<author initials='B.' surname='Leiba' fullname='B. Leiba'><organization /></auth | ||||
or> | ||||
<date year='2017' month='May' /> | ||||
<abstract><t>RFC 2119 specifies common key words that may be used in protocol s | ||||
pecifications. This document aims to reduce the ambiguity by clarifying that on | ||||
ly UPPERCASE usage of the key words have the defined special meanings.</t></abs | ||||
tract> | ||||
</front> | ||||
<seriesInfo name='BCP' value='14'/> | ||||
<seriesInfo name='RFC' value='8174'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC8174'/> | ||||
</reference> | ||||
<reference anchor="RFC8613" target='https://www.rfc-editor.org/info/rfc8613'> | ||||
<front> | ||||
<title>Object Security for Constrained RESTful Environments (OSCORE)</title> | ||||
<author initials='G.' surname='Selander' fullname='G. Selander'><organization /> | ||||
</author> | ||||
<author initials='J.' surname='Mattsson' fullname='J. Mattsson'><organization /> | ||||
</author> | ||||
<author initials='F.' surname='Palombini' fullname='F. Palombini'><organization | ||||
/></author> | ||||
<author initials='L.' surname='Seitz' fullname='L. Seitz'><organization /></auth | ||||
or> | ||||
<date year='2019' month='July' /> | ||||
<abstract><t>This document defines Object Security for Constrained RESTful Envir | ||||
onments (OSCORE), a method for application-layer protection of the Constrained A | ||||
pplication Protocol (CoAP), using CBOR Object Signing and Encryption (COSE). OS | ||||
CORE provides end-to-end protection between endpoints communicating using CoAP o | ||||
r CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supp | ||||
orting a range of proxy operations, including translation between different tran | ||||
sport protocols.</t><t>Although an optional functionality of CoAP, OSCORE alters | ||||
CoAP options processing and IANA registration. Therefore, this document update | ||||
s RFC 7252.</t></abstract> | ||||
</front> | ||||
<seriesInfo name='RFC' value='8613'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC8613'/> | ||||
</reference> | ||||
<reference anchor="RFC8724" target='https://www.rfc-editor.org/info/rfc8724'> | ||||
<front> | ||||
<title>SCHC: Generic Framework for Static Context Header Compression and Fragmen | ||||
tation</title> | ||||
<author initials='A.' surname='Minaburo' fullname='A. Minaburo'><organization /> | ||||
</author> | ||||
<author initials='L.' surname='Toutain' fullname='L. Toutain'><organization /></ | ||||
author> | ||||
<author initials='C.' surname='Gomez' fullname='C. Gomez'><organization /></auth | ||||
or> | ||||
<author initials='D.' surname='Barthel' fullname='D. Barthel'><organization /></ | ||||
author> | ||||
<author initials='JC.' surname='Zúñiga' fullname='JC. Zúñiga'><organization /></ | ||||
author> | ||||
<date year='2020' month='April' /> | ||||
<abstract><t>This document defines the Static Context Header Compression and fra | ||||
gmentation (SCHC) framework, which provides both a header compression mechanism | ||||
and an optional fragmentation mechanism. SCHC has been designed with Low-Power W | ||||
ide Area Networks (LPWANs) in mind.</t><t>SCHC compression is based on a common | ||||
static context stored both in the LPWAN device and in the network infrastructure | ||||
side. This document defines a generic header compression mechanism and its appl | ||||
ication to compress IPv6/UDP headers.</t><t>This document also specifies an opti | ||||
onal fragmentation and reassembly mechanism. It can be used to support the IPv6 | ||||
MTU requirement over the LPWAN technologies. Fragmentation is needed for IPv6 da | ||||
tagrams that, after SCHC compression or when such compression was not possible, | ||||
still exceed the Layer 2 maximum payload size.</t><t>The SCHC header compression | ||||
and fragmentation mechanisms are independent of the specific LPWAN technology o | ||||
ver which they are used. This document defines generic functionalities and offer | ||||
s flexibility with regard to parameter settings and mechanism choices. This docu | ||||
ment standardizes the exchange over the LPWAN between two SCHC entities. Setting | ||||
s and choices specific to a technology or a product are expected to be grouped i | ||||
nto profiles, which are specified in other documents. Data models for the contex | ||||
t and profiles are out of scope.</t></abstract> | ||||
</front> | ||||
<seriesInfo name='RFC' value='8724'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC8724'/> | ||||
</reference> | ||||
</references> | </references> | |||
</back> | <section anchor="acknowledgements" numbered="false" toc="default"> | |||
<name>Acknowledgements</name> | ||||
<!-- ##markdown-source: | <t>The authors would like to thank (in alphabetic order): | |||
H4sIAOw+RmAAA+19aXcbx5Xo9/4VdegPIkcADFAktTjOG4qkYj6LIiPS9swk | <contact fullname="Christian Amsuss"/>, <contact fullname="Dominique Barthel"/>, | |||
PjkNoEF2CHTjdTe4TOj5Lf4t/mXvrrX0wkXS5OTMBFlENLqqbt26devu1e/3 | <contact fullname="Carsten Bormann"/>, <contact fullname="Theresa Enghardt"/>, | |||
o7KKs+lf4nmeJW9MVaySKF0W9FdZbQ6Hr4eb0TSfZPECfp4W8azqp0k168+X | <contact fullname="Thomas Fossati"/>, <contact fullname="Klaus Hartke"/>, <conta | |||
13HWn+Txsg89VOkE/s6q5KbqX0z6o9fRJK7emLKaRsv0TWRMebsokln5xjy7 | ct fullname="Benjamin Kaduk"/>, <contact fullname="Francesca Palombini"/>, <cont | |||
Tcpn+CAvqtqTqkgnlfs+yRfL2H9Q5RP9ElVpNQeA3p/8tPvBnBIAZo8BMN8l | act fullname="Alexander Pelov"/>, <contact fullname="Göran Selander"/>, and | |||
8TQp4OtiWSRlmeaZWT/d+25vw8xyfLx7EsXjcZFcaXt8RMPJ69H1+RtDEzQ/ | <contact fullname="Éric Vyncke"/>.</t> | |||
5cVlmp2bPxT5ahnFq+oiL95EfZNmAPnuwBylWTxeFTmAxyjazWL/YV5AV7uT | </section> | |||
y3ma8xSTBGY0Gr14uWviqyRbJWaalGbvIl4sS/N2HmeTEueeVrdvzIvt7dHQ | ||||
7AFQedY/Ta7S8yyBr9PkhtCzyqoC3npXQKMEniSLOJ2/MXEW/2sMIw5gSAH0 | ||||
/cCc5asqTjML5/t4VSRZ5T0nUA+zElC7qszR4YeDU3N28P5g7/joG3N4dGZ2 | ||||
KwCvSv/fKnFTgb/6ZtMUNA8zj3Em0B8AWsRpQr/unZrRy53hS39aL3eePC0B | ||||
eCAA/2u6qPqxhWgwK3SyHwewCNMiicvETfdjOomLaR78QhP+IUuvkqJMp/EU | ||||
Z/B2lWR5aXZTIAVvwXavBuYEmuVAK7BTzKvtoZ3O3mi482J370ezl66wl91V | ||||
lWf5Im7pzk5utziHuQCZuPnBdAW0f52lg9U4HsRFlOXFAmj7CmZg4NWP7/Y2 | ||||
R6PXb/jP7dFoR/58ubm9qX++3nmpf+5sjezTbW32avRyS//cGb3QP19ubr3B | ||||
MaIo6vf7Jh7D3GH7RfDInF2kJW9+mNQszYBiL/Jr2JB215jqIsENiI3gd8DC | ||||
cjkHnFe4+06KHPZuPjfruNM2zKrELYUtHrtzBwiZwT8NQBKbC37R27NmkUwu | ||||
4iwtFyaexssKQODd7kDaB1KbJKXX16pMsDdmYLgRJ0W6JJDzGcEn48BEi2S6 | ||||
miTew2clPcumQKa3sOmmpkz/Mxlg3z9dpPMEkWoQq9LvOGEk0cA+4Nh0VsTn | ||||
C6AIxhd8WyTXwHl62Bv+nlYAp4dRnNrhydXO1z/snwg8ZQ+6x2XKJyvsit+H | ||||
QWlA5Xz6MjAEWjD7BEl9Nalgj5lpOpvBKwBGviBc4UgEBo4GazeRloK+2Ty5 | ||||
Scdzi63rtLqAx1dxkcb4OFstxvAYUJoTcgnSZFEm8ytoD4/tm/MkO68uPNiW | ||||
SjkIxgIQFp9DkxntCqIEOFcWCR4cbwi5RQK8oKzcqxfAZB29SEOeIOKIpogN | ||||
4fQD7iF9lEsAMrGdDIj+EYJymUzSmS7CeYrwn69SJAHsglB+i7RNOAeqqaGm | ||||
JCzK1pknwHigfxpUJ3JLK7XIYRmSGYyUIpQ+tXxczQGiSHbpIp1O50kUfQWM | ||||
uypyIFGC7G9f+V9/iSJC5t/+Jpzil194F0G/CwDoaztji24gWeTKvIcW6aTI | ||||
6Xgv8vkcZyErXC7i+dx83D2iaX085n9xkRewFbjxx4PTs/4Y2NrUrH9McBpM | ||||
5rAsuO1g9sD4SliODVMmhWzQ3Tmcs6vziwZXkS0MuIunynNgZgxuD0DyKBo2 | ||||
KO5InCqcaQBolQPSY+C8BBgf/evvYTFO8msgjp9SYNi7wILNh6TC3VduDCJa | ||||
yBZuk18lwYbCUZD4gNFPcXFhkxAzN8ukIKojCilwy3Az6oBhqIBzZXCsnKe0 | ||||
skj8tFTIPGCplOMiKL2HeB/ODNHCPWc8EcP4RwJVXifC2sCcJkwy28ry/KGT | ||||
m+UcEA8LfgH7pcG1pkmAkslkVegmiovJRQoTQ4bC+7nB98oJMAGk/BL4FW5l | ||||
gA5+JCyWKVIGiBJmnAOpJdm0v8zTDLjgZYa75yKpTcSMkxluGqKmRUoj8LjX | ||||
8S29ry/CQsGfs/QcIJv2kOSvUnwbvwDykhtE5TmgC14EUYPR4vFVJKtJvgRO | ||||
z7sKd1IWMGfdRT0QchuypVJJicJKBfsH2QVuRN3bMJPqOkkYjbB8curhyxlt | ||||
jgYiFzBD4jwG8IUtHH9DHjMHmQh+ODyxLFzWKKQR/DHOANtAW9gPLqI3KerJ | ||||
HiOE2pLh80ApCZYxstJpsoRVQ4HNvMUlnAHr0JWD0w2QBFskXc4TezxOES6P | ||||
+oANlN5UUF6q8DyDvaRcs4HcgLnz5Hvu1GX8Tov0SuUPr+3XITXHQEzxvPSQ | ||||
yeQU7kw92IWl4+62x62HcHvo8ucsOKflUHG98Fo2lrnKwxM8ioJXkrK2J7FD | ||||
OXXs/hdCk73gaM2KRtKlbJVsMl+herJYzStaKz59zEE8uaC/zSRG+qsmF764 | ||||
BJOZI3vO7YEJR/x8hYd9gXLuuR77+GxgDmew86k36imRJeMv01qnuC5FAmxp | ||||
Aj+NeWtj28N9mj5ThXdcwskwXQkvwXkRO5NjHn6J52aMwpUwPw/fuNwrAMXR | ||||
E5MPUvgkL/jMJF7v3rDnpyJedhrosZdJxUDEgmxkrsAfGU0JnpuAm2SSwMkI | ||||
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 | ||||
dGU4XRn7V+QBDFEpdzkRSMxtbM2CSbykNoAgYkY9gBCjc1O62WCBJ/g0XsR4 | ||||
wWhPJzKQuzoC4qXA7XrNwpatwn4cdBdGdLxJ/BBM6FAPCotQOarCI4736ty7 | ||||
CyXSyw44UZvPFu+levUu/0QlegJ6halHzSZtW10HGye0OTjwvMKdjnMA2okc | ||||
hei9y0XBVSCaK2nCnY6oucgLIMVIIIHhshB8D0G1wx+Ji35wJ1U09Ut/cSDX | ||||
dFWQ9YL2C50V6KQsipxLaUyBf0ssFEKvq90ioxSkK9AF3UWyiJE/YgTBHPn1 | ||||
ajmnG0aIz0XehGmIGi0fzoKld32jtQElNRQ1brNJL4rb2S9dgjL2UZtM3RXw | ||||
81tFvdxbhmstaE2Z6VsTYrka83L6PsIQdYNoV401WhIVr91VMYc8rFKADsMw | ||||
llMKVKPoPK0tAkyKirn1mJz0K+OygpU+dynGzFydo5cvkj5NFykKtt6KosOa | ||||
r7qFFSxSuvIxpyADmB+pa6vpkpJkqTAv7fdI5t0hT+AEUpRX5GYXs+uubEM4 | ||||
SpZlseoo3sDMJrV5epmwFSsGfoMnTTxfXsRACxhXgIfOxhuzd1HgJYV4fc6i | ||||
XJUlssoFLAacZ+ZtXABs857Zi4sSuJF5SykgsPXpLC1jc5CdYzBFhU/yBUiK | ||||
74D0YRP0zPdz4KrmO+jhMumZt0n21xi6Nd/H0xWw43cFZpKUk9icxHOOVOmZ | ||||
3XlyA1SJV2Yk8/yqZ/6Qw2sg0s/5KaWFFwD7j0CCl2j/pw8o1mYc4xX3UfT/ | ||||
AUBN+YYk3wAA | ||||
</back> | ||||
</rfc> | </rfc> | |||
End of changes. 100 change blocks. | ||||
1488 lines changed or deleted | 1331 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/ |