draft-ietf-lpwan-coap-static-context-hc-16.txt | draft-ietf-lpwan-coap-static-context-hc-17.txt | |||
---|---|---|---|---|
lpwan Working Group A. Minaburo | lpwan Working Group A. Minaburo | |||
Internet-Draft Acklio | Internet-Draft Acklio | |||
Intended status: Standards Track L. Toutain | Intended status: Standards Track L. Toutain | |||
Expires: April 23, 2021 Institut MINES TELECOM; IMT Atlantique | Expires: July 25, 2021 Institut MINES TELECOM; IMT Atlantique | |||
R. Andreasen | R. Andreasen | |||
Universidad de Buenos Aires | Universidad de Buenos Aires | |||
October 20, 2020 | January 21, 2021 | |||
LPWAN Static Context Header Compression (SCHC) for CoAP | LPWAN Static Context Header Compression (SCHC) for CoAP | |||
draft-ietf-lpwan-coap-static-context-hc-16 | draft-ietf-lpwan-coap-static-context-hc-17 | |||
Abstract | Abstract | |||
This draft defines how Static Context Header Compression (SCHC) can | This draft defines how to compress the Constrained Application | |||
be applied to the Constrained Application Protocol (CoAP). SCHC is a | Protocol (CoAP) using the Static Context Header Compression (SCHC). | |||
header compression mechanism adapted for constrained devices. SCHC | SCHC is a header compression mechanism adapted for Constrained | |||
uses a static description of the header to reduce the redundancy and | Devices. SCHC uses a static description of the header to reduce the | |||
size of the header's information. While RFC 8724 describes the SCHC | header's redundancy and size. While RFC 8724 describes the SCHC | |||
compression and fragmentation framework, and its application for | compression and fragmentation framework, and its application for | |||
IPv6/UDP headers, this document applies SCHC for CoAP headers. The | IPv6/UDP headers, this document applies SCHC for CoAP headers. The | |||
CoAP header structure differs from IPv6 and UDP since CoAP uses a | CoAP header structure differs from IPv6 and UDP since CoAP uses a | |||
flexible header with a variable number of options, themselves of | flexible header with a variable number of options, themselves of | |||
variable length. The CoAP protocol messages format is asymmetric: | variable length. The CoAP protocol messages format is asymmetric: | |||
the request messages have a header format different from the one in | the request messages have a header format different from the one in | |||
the response messages. This specification gives guidance on applying | the response messages. This specification gives guidance on applying | |||
SCHC to flexible headers and how to leverage the asymmetry for more | SCHC to flexible headers and how to leverage the asymmetry for more | |||
efficient compression Rules. | efficient compression Rules. | |||
skipping to change at page 1, line 46 ¶ | skipping to change at page 1, line 46 ¶ | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on April 23, 2021. | This Internet-Draft will expire on July 25, 2021. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2021 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
skipping to change at page 2, line 38 ¶ | skipping to change at page 2, line 38 ¶ | |||
4.1. CoAP version field . . . . . . . . . . . . . . . . . . . 9 | 4.1. CoAP version field . . . . . . . . . . . . . . . . . . . 9 | |||
4.2. CoAP type field . . . . . . . . . . . . . . . . . . . . . 9 | 4.2. CoAP type field . . . . . . . . . . . . . . . . . . . . . 9 | |||
4.3. CoAP code field . . . . . . . . . . . . . . . . . . . . . 9 | 4.3. CoAP code field . . . . . . . . . . . . . . . . . . . . . 9 | |||
4.4. CoAP Message ID field . . . . . . . . . . . . . . . . . . 10 | 4.4. CoAP Message ID field . . . . . . . . . . . . . . . . . . 10 | |||
4.5. CoAP Token fields . . . . . . . . . . . . . . . . . . . . 10 | 4.5. CoAP Token fields . . . . . . . . . . . . . . . . . . . . 10 | |||
5. CoAP options . . . . . . . . . . . . . . . . . . . . . . . . 10 | 5. CoAP options . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
5.1. CoAP Content and Accept options. . . . . . . . . . . . . 11 | 5.1. CoAP Content and Accept options. . . . . . . . . . . . . 11 | |||
5.2. CoAP option Max-Age, Uri-Host, and Uri-Port fields . . . 11 | 5.2. CoAP option Max-Age, Uri-Host, and Uri-Port fields . . . 11 | |||
5.3. CoAP option Uri-Path and Uri-Query fields . . . . . . . . 11 | 5.3. CoAP option Uri-Path and Uri-Query fields . . . . . . . . 11 | |||
5.3.1. Variable-length Uri-Path and Uri-Query . . . . . . . 12 | 5.3.1. Variable-length Uri-Path and Uri-Query . . . . . . . 12 | |||
5.3.2. Variable number of Path or Query elements . . . . . . 12 | 5.3.2. Variable number of Path or Query elements . . . . . . 13 | |||
5.4. CoAP option Size1, Size2, Proxy-URI and Proxy-Scheme | 5.4. CoAP option Size1, Size2, Proxy-URI and Proxy-Scheme | |||
fields . . . . . . . . . . . . . . . . . . . . . . . . . 13 | fields . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
5.5. CoAP option ETag, If-Match, If-None-Match, Location-Path, | 5.5. CoAP option ETag, If-Match, If-None-Match, Location-Path, | |||
and Location-Query fields . . . . . . . . . . . . . . . . 13 | and Location-Query fields . . . . . . . . . . . . . . . . 13 | |||
6. SCHC compression of CoAP extension RFCs . . . . . . . . . . . 13 | 6. SCHC compression of CoAP extension RFCs . . . . . . . . . . . 13 | |||
6.1. Block . . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 6.1. Block . . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
6.2. Observe . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 6.2. Observe . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
6.3. No-Response . . . . . . . . . . . . . . . . . . . . . . . 13 | 6.3. No-Response . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
6.4. OSCORE . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 6.4. OSCORE . . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
7. Examples of CoAP header compression . . . . . . . . . . . . . 15 | 7. Examples of CoAP header compression . . . . . . . . . . . . . 15 | |||
7.1. Mandatory header with CON message . . . . . . . . . . . . 15 | 7.1. Mandatory header with CON message . . . . . . . . . . . . 15 | |||
7.2. OSCORE Compression . . . . . . . . . . . . . . . . . . . 16 | 7.2. OSCORE Compression . . . . . . . . . . . . . . . . . . . 16 | |||
7.3. Example OSCORE Compression . . . . . . . . . . . . . . . 19 | 7.3. Example OSCORE Compression . . . . . . . . . . . . . . . 20 | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 29 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 31 | |||
9. Security considerations . . . . . . . . . . . . . . . . . . . 29 | 9. Security considerations . . . . . . . . . . . . . . . . . . . 31 | |||
10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 30 | 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 32 | |||
11. Normative References . . . . . . . . . . . . . . . . . . . . 30 | 11. Normative References . . . . . . . . . . . . . . . . . . . . 32 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 31 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 33 | |||
1. Introduction | 1. Introduction | |||
CoAP [rfc7252] is a command/response protocol designed for micro- | CoAP [RFC7252] is a command/response protocol designed for micro- | |||
controllers with a small amount of RAM and ROM and is optimized for | controllers with a small RAM and ROM and optimized for REST-based | |||
REST-based (Representational state transfer) services. Although CoAP | (Representative state transfer) services. Although the Constrained | |||
was designed for Low-Power Wireless Personal Area Networks (6LoWPAN), | Devices leads the CoAP design, a CoAP header's size is still too | |||
a CoAP header's size is still too large for LPWAN (Low Power Wide | large for LPWAN (Low Power Wide Area Networks). SCHC header | |||
Area Networks) and some compression of the CoAP header is required | compression over CoAP header is required to increase performance or | |||
either to increase performances or allow CoAP other some LPWAN | use CoAP over LPWAN technologies. | |||
technologies. | ||||
The [rfc8724] defines SCHC, a header compression mechanism for the | The [RFC8724] defines SCHC, a header compression mechanism for the | |||
LPWAN network based on a static context. Section 5 of the [rfc8724] | LPWAN network based on a static context. Section 5 of the [RFC8724] | |||
explains the architecture where compression and decompression are | explains where compression and decompression occur in the | |||
done. The SCHC compression scheme assumes as a prerequisite that the | architecture. The SCHC compression scheme assumes as a prerequisite | |||
static context is known to both endpoints before transmission. The | that both end-points know the static context before transmission. | |||
way the context is configured, provisioned or exchanged is out of | The way the context is configured, provisioned, or exchanged is out | |||
this document's scope. | of this document's scope. | |||
CoAP is an application protocol, so CoAP compression requires | CoAP is an application protocol, so CoAP compression requires | |||
installing common rules between the two SCHC instances. SCHC | installing common Rules between the two SCHC instances. SCHC | |||
compression may apply at two different levels: one to compress IP and | compression may apply at two different levels: at IP and UDP in the | |||
UDP in the LPWAN network and another at the application level for | LPWAN network and another at the application level for CoAP. These | |||
CoAP. These two compressions may be independent. Both follow the | two compressions may be independent. Both follow the same principle | |||
same principle described in RFC8724. SCHC rules driving the | described in [RFC8724]. As different entities manage the CoAP | |||
compression/decompression are different and may be managed by | compression at different levels, the SCHC Rules driving the | |||
different entities. The [rfc8724] describes how the IP and UDP | compression/decompression are also different. The [RFC8724] | |||
headers may be compressed. This document specifies how the SCHC | describes how to use SCHC for IP and UDP headers. This document | |||
compression rules can be applied to CoAP traffic. | specifies how to apply SCHC compression to CoAP headers. | |||
SCHC compresses and decompresses headers based on shared contexts | SCHC compresses and decompresses headers based on common contexts | |||
between devices. | between Devices. SCHC context includes multiple Rules. Each Rule | |||
Each context consists of multiple Rules. Each Rule can match header | can match the header fields to specific values or ranges of values. | |||
fields and specific values or ranges of values. | ||||
If a Rule matches, the matched header fields are replaced by the | If a Rule matches, the matched header fields are replaced by the | |||
RuleID and some residual bits. Thus, different Rules may correspond | RuleID and the Compression Residue that contains the residual bits of | |||
to divers protocols packets that a device expects to send or receive. | the compression. Thus, different Rules may correspond to different | |||
protocol headers in the packet that a Device expects to send or | ||||
receive. | ||||
A Rule describes the packets's entire header with an ordered list of | A Rule describes the packets' entire header with an ordered list of | |||
fields descriptions; see section 7 of [rfc8724]. Thereby | fields descriptions; see section 7 of [RFC8724]. Thereby | |||
each description contains the field ID (FID), its length (FL), and | each description contains the field ID (FID), its length (FL), and | |||
its position (FP), a direction indicator (DI) (upstream, downstream, | its position (FP), a direction indicator (DI) (upstream, downstream, | |||
and bidirectional), and some associated Target Values (TV). The | and bidirectional), and some associated Target Values (TV). The | |||
direction indicator is used for compression to give the best TV to | direction indicator is used for compression to give the best TV to | |||
the FID when these values differ in the transmission direction. So a | the FID when these values differ in the transmission direction. So a | |||
field may be described several times depending on the asymmetry of | field may be described several times. | |||
its possible TVs. | ||||
A Matching Operator (MO) is associated with each header field | A Matching Operator (MO) is associated with each header field | |||
description. | description. The Rule is selected if all the MOs fit the TVs for all | |||
The Rule is selected if all the MOs fit the TVs for all fields of the | fields of the incoming header. A Rule cannot be selected if the | |||
incoming header. A rule cannot be selected if the message contains a | message contains an unknown field to the SCHC compressor. | |||
field unknown to the SCHC compressor. | ||||
In that case, a Compression/Decompression Action (CDA) associated | In that case, a Compression/Decompression Action (CDA) associated | |||
with each field give the method to compress and decompress each | with each field gives the method to compress and decompress each | |||
field. Compression mainly results in one of 4 actions: | field. Compression mainly results in one of 4 actions: | |||
o send the field value, | o send the field value (value-sent), | |||
o send nothing, | o send nothing (not-sent), | |||
o send some least significant bits of the field or | o send some least significant bits of the field (LSB) or, | |||
o send an index. | o send an index (mapping-sent). | |||
After applying the compression, there may be some bits to be sent. | After applying the compression, there may be some bits to be sent. | |||
These values are called Compression Residues. | These values are called Compression Residue. | |||
SCHC is a general mechanism applied to different protocols, the exact | SCHC is a general mechanism applied to different protocols, the exact | |||
Rules to be used depending on the protocol and the application. | Rules to be used depending on the protocol and the Application. | |||
Section 10 of the [rfc8724] describes the compression scheme for IPv6 | Section 10 of the [RFC8724] describes the compression scheme for IPv6 | |||
and UDP headers. | and UDP headers. This document targets the CoAP header compression | |||
This document targets the CoAP header compression using SCHC. | using SCHC. | |||
1.1. Terminology | 1.1. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
14 [RFC2119][rfc8174] when, and only when, they appear in all | 14 [RFC2119][RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
2. SCHC Applicability to CoAP | 2. SCHC Applicability to CoAP | |||
The SCHC Compression Rules can be applied to CoAP headers. SCHC | SCHC Compression for CoAP header MAY be done in conjunction with the | |||
Compression of the CoAP header MAY be done in conjunction with the | ||||
lower layers (IPv6/UDP) or independently. The SCHC adaptation | lower layers (IPv6/UDP) or independently. The SCHC adaptation | |||
layers, described in Section 5 of [rfc8724], may be used, as shown in | layers, described in Section 5 of [RFC8724], may be used as shown in | |||
Figure 1,Figure 2 and Figure 3 | Figure 1, Figure 2, and Figure 3. | |||
In the first example, Figure 1, a Rule compresses the complete header | In the first example, Figure 1, a Rule compresses the complete header | |||
stack from IPv6 to CoAP. In this case, SCHC C/D (Static Context | stack from IPv6 to CoAP. In this case, the Device and the NGW | |||
Header Compression Compressor/Decompressor) is performed at the | perform SCHC C/D (Static Context Header Compression Compressor/ | |||
device and the application. The host communicating with the device | Decompressor). The host communicating with the Device does not | |||
does not implement SCHC C/D. | implement SCHC C/D. | |||
(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 ------ | |||
Figure 1: Compression/decompression at the LPWAN boundary | Figure 1: Compression/Decompression at the LPWAN boundary. | |||
The SCHC can be viewed as a layer above layer 2. This layer received | Figure 1 shows the use of SCHC header compression above layer 2 in | |||
non-encrypted packets and can apply compression rule to all the | the Device and the NGW. The SCHC layer receives non-encrypted | |||
headers. On the other end, the NGW receives the SCHC packet and | packets and can apply compression Rules to all the headers in the | |||
reconstructs the headers from the rule, identified by its ID and the | stack. On the other end, the NGW receives the SCHC packet and | |||
header residues. The result is a regular IPv6 packet that can be | reconstructs the headers using the Rule and the Compression Residue. | |||
forwarded toward the destination. The same process applies in the | After the decompression, the NGW forwards the IPv6 packet toward the | |||
other direction. A not encrypted packet arrived at the NGW, thanks | destination. The same process applies in the other direction when a | |||
to IP forwarding based on the IPv6 prefix. The NGW identifies the | non-encrypted packet arrives at the NGW. Thanks to the IP forwarding | |||
device and compresses headers using the device's rules. | based on the IPv6 prefix, the NGW identifies the Device and | |||
compresses headers using the Device's Rules. | ||||
In the second example, Figure 2, the SCHC compression is applied in | In the second example, Figure 2, the SCHC compression is applied in | |||
the CoAP layer, compressing the CoAP header independently of the | the CoAP layer, compressing the CoAP header independently of the | |||
other layers. The RuleID, the Compression Residue, and CoAP payload | other layers. The RuleID, the Compression Residue, and CoAP payload | |||
are encrypted using a mechanism such as DTLS. Only the other end | are encrypted using a mechanism such as DTLS. Only the other end | |||
(App) can decipher the information. If needed, layers below use SCHC | (App) can decipher the information. If needed, layers below use SCHC | |||
to compress the header as defined in [rfc8724] document (represented | to compress the header as defined in [RFC8724] (represented in dotted | |||
in dotted lines). | lines). | |||
This use case needs an end-to-end context initialization between the | This use case needs an end-to-end context initialization between the | |||
device and the application and is out-of-scope of this document. | Device and the Application. The context initialization is out of the | |||
scope of this document. | ||||
(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 ------ | |||
Figure 2: Standalone CoAP end-to-end compression/decompression | Figure 2: Standalone CoAP end-to-end Compression/Decompression | |||
In the third example, Figure 3, the Object Security for Constrained | The third example, Figure 3, shows the use of Object Security for | |||
RESTful Environments (OSCORE) [rfc8613] is used. In this case, two | Constrained RESTful Environments (OSCORE) [RFC8613]. In this case, | |||
rulesets are used to compress the CoAP message. A first ruleset | SCHC needs two Rules to compress the CoAP header. A first Rule | |||
focused on the inner header compresses it. The result is encrypted | focused on the inner header. The result of this first compression is | |||
using the OSCORE mechanism. A second ruleset compresses the outer | encrypted using the OSCORE mechanism. Then a second Rule compresses | |||
header, including the OSCORE Options. | the outer header, including the OSCORE Options. | |||
(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 | | |||
skipping to change at page 7, line 32 ¶ | skipping to change at page 7, line 32 ¶ | |||
. ipv6 . . ipv6 . . ipv6 . | . ipv6 . . ipv6 . . ipv6 . | |||
.......... .................. .......... | .......... .................. .......... | |||
. schc . . schc . . . . | . schc . . schc . . . . | |||
.......... .......... . . . | .......... .......... . . . | |||
. lpwan . . lpwan . . . . | . lpwan . . lpwan . . . . | |||
.......... .................. .......... | .......... .................. .......... | |||
((((LPWAN)))) ------ Internet ------ | ((((LPWAN)))) ------ Internet ------ | |||
Figure 3: OSCORE compression/decompression. | Figure 3: OSCORE compression/decompression. | |||
In the case of several SCHC instances, as shown in Figure 3 and | In the case of several SCHC instances, as shown in Figure 2 and | |||
Figure 3, the rulesets may come from different provisioning domains. | Figure 3, the Rules may come from different provisioning domains. | |||
This document focuses on CoAP compression represented in the dashed | This document focuses on CoAP compression represented in the dashed | |||
boxes in the previous figures. | boxes in the previous figures. | |||
3. CoAP Headers compressed with SCHC | 3. CoAP Headers compressed with SCHC | |||
The use of SCHC over the CoAP header uses the same description and | The use of SCHC over the CoAP header uses the same description, and | |||
compression/decompression techniques like the one for IP and UDP | compression/decompression techniques like the one for IP and UDP | |||
explained in the [rfc8724]. For CoAP, SCHC Rules description uses | explained in the [RFC8724]. For CoAP, the SCHC Rules description | |||
the direction information to optimize the compression by reducing the | uses the direction information to optimize the compression by | |||
number of Rules needed to compress headers. The field description | reducing the number of Rules needed to compress headers. The field | |||
MAY define both request/response headers and target values in the | description MAY define both request/response headers and target | |||
same Rule, using the DI (direction indicator) to make the difference. | values in the same Rule, using the DI (direction indicator) to make | |||
the difference. | ||||
As for other header compression protocols, when the compressor does | As for other header compression protocols, when the compressor does | |||
not find a correct Rule to compress the header, the packet MUST be | not find a correct Rule to compress the header, the packet MUST be | |||
sent uncompressed using the RuleID dedicated to this purpose. Where | sent uncompressed using the RuleID dedicated to this purpose. Where | |||
the Compression Residue is the complete header of the packet. See | the Compression Residue is the complete header of the packet. See | |||
section 6 of [rfc8724]. | section 6 of [RFC8724]. | |||
3.1. Differences between CoAP and UDP/IP Compression | 3.1. Differences between CoAP and UDP/IP Compression | |||
CoAP compression differs from IPv6 and UDP compression on the | CoAP compression differs from IPv6 and UDP compression in the | |||
following aspects: | following aspects: | |||
o The CoAP protocol is asymmetric; the headers are different for a | o The CoAP protocol is asymmetric; the headers are different for a | |||
request or a response. For example, the URI-Path option is | request or a response. For example, the URI-Path option is | |||
mandatory in the request, and it may not be present in the | mandatory in the request, and it might not be present in the | |||
response. A request may contain an Accept option, and the | response. A request might contain an Accept option, and the | |||
response may include a Content-Format option. In comparison, IPv6 | response might include a Content-Format option. In comparison, | |||
and UDP returning path swap the value of some fields in the | IPv6 and UDP returning path swap the value of some fields in the | |||
header. But all the directions have the same fields (e.g., source | header. However, all the directions have the same fields (e.g., | |||
and destination address fields). | source and destination address fields). | |||
The [rfc8724] defines the use of a Direction Indicator (DI) in the | The [RFC8724] defines the use of a direction indicator (DI) in the | |||
Field Descriptor, which allows a single Rule to process a message | Field Descriptor, which allows a single Rule to process a message | |||
headers differently depending on the direction. | header differently depending on the direction. | |||
o Even when a field is "symmetric" (i.e., found in both directions), | o Even when a field is "symmetric" (i.e., found in both directions), | |||
the values carried in each direction are different. | the values carried in each direction are different. The | |||
The compression may use a matching list in the TV to limit the | compression may use a "match-mapping" MO to limit the range of | |||
range of expected values in a particular direction and therefore | expected values in a particular direction and reduce the | |||
reduce the Compression Residue's size. Through the Direction | Compression Residue's size. Through the direction indicator (DI), | |||
Indicator (DI), a field description in the Rules splits the | a field description in the Rules splits the possible field value | |||
possible field value into two parts, one for each direction. For | into two parts, one for each direction. For instance, if a client | |||
instance, if a client sends only CON requests, the type can be | sends only CON requests, the Type can be elided by compression, | |||
elided by compression, and the answer may use one single bit to | and the answer may use one single bit to carry either the ACK or | |||
carry either the ACK or RST type. The field Code has the same | RST type. The field Code has the same behavior, the 0.0X code | |||
behavior, the 0.0X code format value in the request, and Y.ZZ code | format value in the request, and the Y.ZZ code format in the | |||
format in the response. | response. | |||
o Headers in IPv6 and UDP have a fixed size. The size is not sent | o In SCHC, the Rule defines the different header fields' length, so | |||
as part of the Compression Residue but is defined in the Rule. | SCHC does not need to send it. In IPv6 and UDP headers, the | |||
Some CoAP header fields have variable lengths, so the length is | fields have a fixed size, known by definition. On the other hand, | |||
also specified in the Field Description. For example, the Token | some CoAP header fields have variable lengths, and the Rule | |||
size may vary from 0 to 8 bytes. And the CoAP options have a | description specifies it. For example, in a URI-path or URI- | |||
variable length since they use the Type-Length-Value encoding | query, the Token size may vary from 0 to 8 bytes, and the CoAP | |||
format, as URI-path or URI-query. | options use the Type-Length-Value encoding format. | |||
Section 7.5.2 from [rfc8724] offers the possibility to define a | When doing SCHC compression of a variable-length field, | |||
Section 7.5.2 from [RFC8724] offers the possibility to define a | ||||
function for the Field length in the Field Description to know the | function for the Field length in the Field Description to know the | |||
length before compression. When doing SCHC compression of a | length before compression. If the field length is unknown, the | |||
variable-length field, | Rule will set it as a variable, and SCHC will send the compressed | |||
if the field size is unknown, the Field Length in the Rule is set | field's length in the Compression Residue. | |||
as variable, and the size is sent with the Compression Residue. | ||||
o A field can appear several times in the CoAP headers. This is | o A field can appear several times in the CoAP headers. It is found | |||
typical for elements of a URI (path or queries). The SCHC | typically for elements of a URI (path or queries). The SCHC | |||
specification [rfc8724] allows a Field ID to appear several times | specification [RFC8724] allows a Field ID to appear several times | |||
in the Rule and uses the Field Position (FP) to identify the | in the Rule and uses the Field Position (FP) to identify the | |||
correct instance, and thereby removing the ambiguity of the | correct instance, thereby removing the matching operation's | |||
matching operation. | ambiguity. | |||
o Field sizes defined in the CoAP protocol can be too | o Field lengths defined in the CoAP protocol can be too | |||
large regarding LPWAN traffic constraints. This is particularly | large regarding LPWAN traffic constraints. For instance, this is | |||
true for the Message-ID field and the Token field. SCHC uses | particularly true for the Message-ID field and the Token field. | |||
different Matching operators (MO) to perform the compression. See | SCHC uses different Matching operators (MO) to perform the | |||
section 7.4 of [rfc8724]. In this case, the Most Significant Bits | compression. See section 7.4 of [RFC8724]. In this case, SCHC | |||
(MSB) MO can be applied to reduce the information carried on | can apply the Most Significant Bits (MSB) MO to reduce the | |||
LPWANs. | information carried on LPWANs. | |||
4. Compression of CoAP header fields | 4. Compression of CoAP header fields | |||
This section discusses the compression of the different CoAP header | This section discusses the compression of the different CoAP header | |||
fields. The CoAP compression with SCHC follows the Section 7.1 of | fields. The CoAP compression with SCHC follows Section 7.1 of | |||
[rfc8724]. | [RFC8724]. | |||
4.1. CoAP version field | 4.1. CoAP version field | |||
CoAP version is bidirectional and MUST be elided during the SCHC | CoAP version is bidirectional and MUST be elided during the SCHC | |||
compression since it always contains the same value. In the future, | compression since it always contains the same value. In the future, | |||
if new versions of CoAP are defined, new Rules will be needed to | or if a new version of CoAP is defined, new Rules will be needed to | |||
avoid ambiguities between versions. | avoid ambiguities between versions. | |||
4.2. CoAP type field | 4.2. CoAP type field | |||
The CoAP Protocol [rfc7252] has four types of messages: two requests | The CoAP protocol [RFC7252] has four types of messages: two requests | |||
(CON, NON), one response (ACK), and one empty message (RST). | (CON, NON), one response (ACK), and one empty message (RST). | |||
The field SHOULD be elided if, for instance, a client is sending only | The SCHC compression SHOULD elide this field if, for instance, a | |||
NON or only CON messages. For the RST message, a dedicated Rule may | client is sending only NON or only CON messages. For the RST | |||
be needed. For other usages, a mapping list can be used. | message, SCHC may use a dedicated Rule. For other usages, SCHC can | |||
use a "match-mapping" MO. | ||||
4.3. CoAP code field | 4.3. CoAP code field | |||
The code field indicates the Request Method used in CoAP, an IANA | The code field is an IANA registry [RFC7252], and it indicates the | |||
registry [rfc7252]. The compression of the CoAP code field follows | Request Method used in CoAP. The compression of the CoAP code field | |||
the same principle as that of the CoAP type field. If the device | follows the same principle as that of the CoAP type field. If the | |||
plays a specific role, the set of code values can be split into two | Device plays a specific role, SCHC may split the code values into two | |||
parts, the request codes with the 0 class and the response values. | fields description, the request codes with the 0 class and the | |||
response values. SCHC will use the direction indicator to identify | ||||
the correct value in the packet. | ||||
If the device only implements a CoAP client, the request code can be | If the Device only implements a CoAP client, SCHC compression may | |||
reduced to the set of requests the client can to process. | reduce the request code to the set of requests the client can | |||
process. | ||||
A mapping list can be used for known values. The field cannot be | For known values, SCHC can use a "match-mapping" MO. If SCHC cannot | |||
compressed for other values, and the value needs to be sent in the | compress the code field, it will send the values in the Compression | |||
Compression Residue. | Residue. | |||
4.4. CoAP Message ID field | 4.4. CoAP Message ID field | |||
The Message ID field can be compressed with the MSB(x) MO and the | SCHC can compress the Message ID field with the "MSB" MO and the | |||
Least Significant Bits (LSB) CDA. See section 7.4 of [rfc8724]. | "LSB" CDA. See section 7.4 of [RFC8724]. | |||
4.5. CoAP Token fields | 4.5. CoAP Token fields | |||
A Token is defined through two CoAP fields, Token Length in the | CoAP defines the Token using two CoAP fields, Token Length in the | |||
mandatory header and Token Value directly following the mandatory | mandatory header and Token Value directly following the mandatory | |||
CoAP header. | CoAP header. | |||
Token Length is processed as any protocol field. If the value does | SCHC processes the Token length as any header field. If the value | |||
not change, the size can be stored in the TV and elided during the | does not change, the size can be stored in the TV and elided during | |||
transmission. Otherwise, it will have to be sent in the Compression | the transmission. Otherwise, SCHC will send the token length in the | |||
Residue. | Compression Residue. | |||
Token Value MUST NOT be sent as a variable-length residue to avoid | For the Token Value, SCHC MUST NOT send it as a variable-length in | |||
ambiguity with Token Length. Therefore, the Token Length value MUST | the Compression Residue to avoid ambiguity with Token Length. | |||
be used to define the size of the Compression Residue. A specific | Therefore, SCHC MUST use the Token length value to define the size of | |||
function designated as "TKL" MUST be used in the Rule. During the | the Compression Residue. SCHC designates a specific function "tkl" | |||
that the Rule MUST use to complete the field description. During the | ||||
decompression, this function returns the value contained in the Token | decompression, this function returns the value contained in the Token | |||
Length field. | Length field. | |||
5. CoAP options | 5. CoAP options | |||
CoAP defines options that are placed after the based header in Option | CoAP defines options placed after the based header in Option Numbers | |||
Numbers order, see [rfc7252]. Each Option instance in a message uses | order; see [RFC7252]. Each Option instance in a message uses the | |||
the format Delta-Type (D-T), Length (L), Value (V). When applying | format Delta-Type (D-T), Length (L), Value (V). The SCHC Rule builds | |||
SCHC compression to the Option, the D-T, L, and V format serve to | the description of the option by using in the Field ID the Option | |||
make the Rule description of the Option. The SCHC compression builds | ||||
the description 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 | Number built from D-T; in TV, the Option Value; and the Option Length | |||
uses section 7.4 of [rfc8724]. When the Option Length has a | uses section 7.4 of [RFC8724]. When the Option Length has a well- | |||
wellknown size, it can be stored in the Rule. Therefore, SCHC | known size, the Rule may stock the length value. Therefore, SCHC | |||
compression does not send it. Otherwise, SCHC Compression carries | compression does not send it. Otherwise, SCHC Compression carries | |||
the length of the Compression Residue, in addition to the Compression | the length of the Compression Residue, in addition to the Compression | |||
Residue value. | Residue value. | |||
CoAP requests and responses do not include the same options. So | CoAP requests and responses do not include the same options. So | |||
Compression Rules may reflect this asymmetry by tagging the direction | Compression Rules may reflect this asymmetry by tagging the direction | |||
indicator. | indicator. | |||
Note that length coding differs between CoAP options and SCHC | Note that length coding differs between CoAP options and SCHC | |||
variable size Compression Residue. | variable size Compression Residue. | |||
The following sections present how SCHC compresses some specific CoAP | The following sections present how SCHC compresses some specific CoAP | |||
options. | options. | |||
If a new option is introduced in CoAP, a new Field ID has to be | If CoAP introduces a new option, the SCHC Rules MAY be updated, and | |||
assigned in the Rules to allow its compression. Otherwise, if no | the new Field ID description MUST be assigned to allow its | |||
Rule describes this Option, the SCHC compression is not possible, and | compression. Otherwise, if no Rule describes this new option, the | |||
the CoAP header is sent without compression. | SCHC compression is not achieved, and SCHC sends the CoAP header | |||
without compression. | ||||
5.1. CoAP Content and Accept options. | 5.1. CoAP Content and Accept options. | |||
If the client expects a single value, it can be stored in the TV and | If the client expects a single value, it can be stored in the TV and | |||
elided during the transmission. Otherwise, if the client expects | elided during the transmission. Otherwise, if the client expects | |||
several possible values, a matching-list SHOULD be used to limit the | several possible values, a "match-mapping" SHOULD be used to limit | |||
Compression Residue's size. Otherwise, the value has to be sent as a | the Compression Residue's size. If not, SCHC has to send the option | |||
Compression Residue (fixed or variable length). | value in the Compression Residue (fixed or variable length). | |||
5.2. CoAP option Max-Age, Uri-Host, and Uri-Port fields | 5.2. CoAP option Max-Age, Uri-Host, and Uri-Port fields | |||
If both ends know the value, the value can be elided. | SCHC compresses these three fields in the same way. When the value | |||
of these options is known, SCHC can elide these fields. If the | ||||
A matching list can be used if some well-known values are defined. | option uses well-known values, SCHC can use a "match-mapping" MO. | |||
Otherwise, SCHC will use "value-sent" MO, and the Compression Residue | ||||
Otherwise, these options can be sent as a Compression Residue. | will send these options' values. | |||
5.3. CoAP option Uri-Path and Uri-Query fields | 5.3. CoAP option Uri-Path and Uri-Query fields | |||
Uri-Path and Uri-Query elements are repeatable options. The Field | The Uri-Path and Uri-Query fields are repeatable options; this means | |||
Position (FP) gives the position in the path. | 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. | ||||
A Mapping list can be used to reduce the size of variable Paths or | To compress repeatable field values, SCHC may use a "match-mapping" | |||
Queries. In that case, to optimize the compression, several elements | MO to reduce the size of variable Paths or Queries. In these cases, | |||
can be regrouped into a single entry. The Numbering of elements do | to optimize the compression, several elements can be regrouped into a | |||
not change; MO comparison is set with the first element of the | single entry. The Numbering of elements does not change, and the | |||
matching. | first matching element sets the MO comparison. | |||
+-------------+---+--+--+--------+---------+-------------+ | +--------+---+--+--+--------+-------------+------------+ | |||
| Field |FL |FP|DI| Target | Match | CDA | | | Field |FL |FP|DI| Target | Matching | CDA | | |||
| | | | | Value | Opera. | | | | | | | | Value | Operator | | | |||
+-------------+---+--+--+--------+---------+-------------+ | +--------+---+--+--+--------+-------------+------------+ | |||
|Uri-Path | | 1|up|["/a/b",|equal |not-sent | | |Uri-Path| | 1|up|["/a/b",|match-mapping|mapping-sent| | |||
| | | | |"/c/d"] | | | | | | | | |"/c/d"] | | | | |||
|Uri-Path |var| 3|up| |ignore |value-sent | | |Uri-Path|var| 3|up| |ignore |value-sent | | |||
+-------------+---+--+--+--------+---------+-------------+ | +--------+---+--+--+--------+-------------+------------+ | |||
Figure 4: complex path example | Figure 4: complex path example | |||
In Figure 4, a single bit residue can be used to code one of the 2 | In Figure 4, SCHC can use a single bit in the Compression Residue to | |||
paths. If regrouping were not allowed, a 2 bits residue would be | code one of the two paths. If regrouping were not allowed, 2 bits in | |||
needed. The third path element is sent as a variable size residue. | the Compression Residue would be needed. SCHC sends the third path | |||
element as a variable size in the Compression Residue. | ||||
5.3.1. Variable-length Uri-Path and Uri-Query | 5.3.1. Variable-length Uri-Path and Uri-Query | |||
When the length is not known at the Rule creation, the Field Length | When SCHC creates the Rule, the length of URI-Path and URI-Query may | |||
MUST be set to variable, and the unit is set to bytes. | be known. Nevertheless, SCHC MUST set the field length to variable, | |||
and the unit to bytes. | ||||
The MSB MO can be applied to a Uri-Path or Uri-Query element. Since | SCHC compression can use the MSB MO to a Uri-Path or Uri-Query | |||
MSB value is given in bit, the size MUST always be a multiple of 8 | element. However, attention to the length is important because the | |||
MSB value is in bits, and the size MUST always be a multiple of 8 | ||||
bits. | bits. | |||
The length sent at the beginning of a variable-length residue | The length sent at the beginning of a variable-length Compression | |||
indicates the size of the LSB in bytes. | Residue indicates the LSB's size in bytes. | |||
For instance, for a CORECONF path /c/X6?k="eth0" the Rule can be set | For instance, for a CORECONF path /c/X6?k="eth0" the Rule description | |||
to: | can be: | |||
+-------------+---+--+--+--------+---------+-------------+ | +-------------+---+--+--+--------+---------+-------------+ | |||
| Field |FL |FP|DI| Target | Match | CDA | | | Field |FL |FP|DI| Target | Match | CDA | | |||
| | | | | Value | Opera. | | | | | | | | Value | Opera. | | | |||
+-------------+---+--+--+--------+---------+-------------+ | +-------------+---+--+--+--------+---------+-------------+ | |||
|Uri-Path | 8| 1|up|"c" |equal |not-sent | | |Uri-Path | 8| 1|up|"c" |equal |not-sent | | |||
|Uri-Path |var| 2|up| |ignore |value-sent | | |Uri-Path |var| 2|up| |ignore |value-sent | | |||
|Uri-Query |var| 1|up|"k=" |MSB(16) |LSB | | |Uri-Query |var| 1|up|"k=" |MSB(16) |LSB | | |||
+-------------+---+--+--+--------+---------+-------------+ | +-------------+---+--+--+--------+---------+-------------+ | |||
Figure 5: CORECONF URI compression | Figure 5: CORECONF URI compression | |||
Figure 5 shows the parsing and the compression of the URI, where c is | Figure 5 shows the Rule description for a URI-Path and a URI-Query. | |||
not sent. The second element is sent with the length (i.e., 0x2 X 6) | SCHC compresses the first part of the URI-Path with a "not-sent" CDA. | |||
followed by the query option (i.e. 0x05 "eth0"). | ||||
SCHC will send the second element of the URI-Path with the length | ||||
(i.e., 0x2 X 6) followed by the query option (i.e., 0x05 "eth0"). | ||||
5.3.2. Variable number of Path or Query elements | 5.3.2. Variable number of Path or Query elements | |||
The number of Uri-Path or Uri-Query elements in a Rule is fixed at | SCHC fixed the number of Uri-Path or Uri-Query elements in a Rule at | |||
the Rule creation time. If the number varies, several Rules SHOULD | the Rule creation time. If the number varies, SCHC SHOULD create | |||
be created to cover all the possibilities. Another possibility is to | several Rules to cover all the possibilities. Another one is to | |||
define the length of Uri-Path to variable and send a Compression | define the length of Uri-Path to variable and sends a Compression | |||
Residue with a length of 0 to indicate that this Uri-Path is empty. | Residue with a length of 0 to indicate that this Uri-Path is empty. | |||
This adds 4 bits to the variable Residue size. See section 7.5.2 | However, this adds 4 bits to the variable Compression Residue size. | |||
[rfc8724] | See section 7.5.2 [RFC8724]. | |||
5.4. CoAP option Size1, Size2, Proxy-URI and Proxy-Scheme fields | 5.4. CoAP option Size1, Size2, Proxy-URI and Proxy-Scheme fields | |||
If the field value has to be sent, TV is not set, MO is set to | The SCHC Rule description MAY define sending some field values by | |||
"ignore", and CDA is set to "value-sent." A mapping MAY also be | setting the TV to "not-sent," MO to "ignore," and CDA to "value- | |||
used. | sent." A Rule MAY also use a "match-mapping" when there are | |||
different options for the same FID. Otherwise, the Rule sets the TV | ||||
Otherwise, the TV is set to the value, MO is set to "equal", and CDA | to the value, MO to "equal," and CDA to "not-sent." | |||
is set to "not-sent". | ||||
5.5. CoAP option ETag, If-Match, If-None-Match, Location-Path, and | 5.5. CoAP option ETag, If-Match, If-None-Match, Location-Path, and | |||
Location-Query fields | Location-Query fields | |||
These fields' values cannot be stored in a Rule entry. They MUST | A Rule entry cannot store these fields' values. The Rule description | |||
always be sent with the Compression Residues. | MUST always send these values in the Compression Residue. | |||
6. SCHC compression of CoAP extension RFCs | 6. SCHC compression of CoAP extension RFCs | |||
6.1. Block | 6.1. Block | |||
Block [rfc7959] allows a fragmentation at the CoAP level. SCHC also | When a packet uses a Block [RFC7959] option, SCHC compression MUST | |||
includes a fragmentation protocol. They can be both used. If a | send its content in the Compression Residue. The SCHC Rule describes | |||
block option is used, its content MUST be sent as a Compression | an empty TV with a MO set to "ignore" and a CDA to "value-sent." | |||
Residue. | 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 the same packet as | ||||
needed. | ||||
6.2. Observe | 6.2. Observe | |||
The [rfc7641] defines the Observe option. The TV is not set, MO is | The [RFC7641] defines the Observe option. The SCHC Rule description | |||
set to "ignore", and the CDA is set to "value-sent". SCHC does not | will not define the TV, but MO to "ignore," and the CDA to "value- | |||
limit the maximum size for this option (3 bytes). To reduce the | sent." SCHC does not limit the maximum size for this option (3 | |||
transmission size, either the device implementation MAY limit the | bytes). To reduce the transmission size, either the Device | |||
delta between two consecutive values, or a proxy can modify the | implementation MAY limit the delta between two consecutive values, or | |||
increment. | a proxy can modify the increment. | |||
Since an RST message may be sent to inform a server that the client | Since the Observe option MAY use an RST message to inform a server | |||
does not require Observe response; a Rule SHOULD exist to allow the | that the client does not require the Observe response, a specific | |||
message's compression with the RST type. | SCHC Rule SHOULD exist to allow the message's compression with the | |||
RST type. | ||||
6.3. No-Response | 6.3. No-Response | |||
The [rfc7967] defines a No-Response option limiting the responses | The [RFC7967] defines a No-Response. Different behaviors exist while | |||
made by a server to a request. If both ends know the value, then TV | using this option to limit the responses made by a server to a | |||
is set to this value, MO is set to "equal", and CDA is set to "not- | request. If both ends know the value, then the SCHC Rule will | |||
sent". | describe a TV to this value, with a MO set to "equal" and CDA set to | |||
"not-sent." | ||||
Otherwise, if the value is changing over time, TV is not set, MO is | Otherwise, if the value is changing over time, the SCHC Rule will set | |||
set to "ignore", and CDA to "value-sent". A matching list can also | the MO to "ignore" and CDA to "value-sent." The Rule may also use a | |||
be used to reduce the size. | "match-mapping" to compress this option. | |||
6.4. OSCORE | 6.4. OSCORE | |||
OSCORE [rfc8613] defines end-to-end protection for CoAP messages. | OSCORE [RFC8613] defines end-to-end protection for CoAP messages. | |||
This section describes how SCHC Rules can be applied to compress | This section describes how SCHC Rules can be applied to compress | |||
OSCORE-protected messages. | OSCORE-protected messages. | |||
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 -->| | |||
Figure 6: OSCORE Option | Figure 6: OSCORE Option | |||
The encoding of the OSCORE Option Value defined in Section 6.1 of | The Figure 6 shows the OSCORE Option Value encoding defined in | |||
[rfc8613] is repeated in Figure 6. | Section 6.1 of [RFC8613], where the first byte specifies the Content | |||
of the OSCORE options using flags. The three most significant bits | ||||
The first byte specifies the content of the OSCORE options using | of this byte are reserved and always set to 0. Bit h, when set, | |||
flags. The three most significant bits of this byte are reserved and | indicates the presence of the kid context field in the option. Bit | |||
always set to 0. Bit h, when set, indicates the presence of the kid | k, when set, indicates the presence of a kid field. The three least | |||
context field in the option. Bit k, when set, indicates the presence | significant bits n indicate the length of the piv (Partial | |||
of a kid field. The three least significant bits n indicate the | Initialization Vector) field in bytes. When n = 0, no piv is | |||
length of the piv (Partial Initialization Vector) field in bytes. | present. | |||
When n = 0, no piv is present. | ||||
The flag byte is followed by the piv field, kid context field, and | The flag byte is followed by the piv field, kid context field, and | |||
kid field in this order, and if present, the length of the kid | kid field in this order, and if present, the kid context field's | |||
context field is encoded in the first byte denoting by s the length | length is encoded in the first byte denoting by 's' the length of the | |||
of the kid context in bytes. | kid context in bytes. | |||
This specification recommends identifying the OSCORE Option and the | To better perform OSCORE SCHC compression, the Rule description needs | |||
fields it contains. Conceptually, it discerns up to 4 distinct | to identify the OSCORE Option and the fields it contains. | |||
pieces of information within the OSCORE option: the flag bits, the | Conceptually, it discerns up to 4 distinct pieces of information | |||
piv, the kid context, and the kid. The SCHC Rule splits into four | within the OSCORE option: the flag bits, the piv, the kid context, | |||
field descriptions the OSCORE option to compress them: | and the kid. The SCHC Rule splits into four field descriptions the | |||
OSCORE option to compress them: | ||||
o CoAP OSCORE_flags, | o CoAP OSCORE_flags, | |||
o CoAP OSCORE_piv, | o CoAP OSCORE_piv, | |||
o CoAP OSCORE_kidctx, | o CoAP OSCORE_kidctx, | |||
o CoAP OSCORE_kid. | o CoAP OSCORE_kid. | |||
Figure 6 shows the OSCORE Option format with those four fields | Figure 6 shows the OSCORE Option format with those four fields | |||
superimposed on it. Note that the CoAP OSCORE_kidctx field includes | superimposed on it. Note that the CoAP OSCORE_kidctx field directly | |||
directly the size octet s. | includes the size octet s. | |||
7. Examples of CoAP header compression | 7. Examples of CoAP header compression | |||
7.1. Mandatory header with CON message | 7.1. Mandatory header with CON message | |||
In this first scenario, the LPWAN Compressor at the Network Gateway | In this first scenario, the SCHC Compressor at the Network Gateway | |||
side receives from an Internet client a POST message, which is | side receives a POST message from an Internet client, which is | |||
immediately acknowledged by the Device. For this simple scenario, | immediately acknowledged by the Device. Figure 7 describes the SCHC | |||
the Rules are described in Figure 7. | Rule descriptions for this scenario. | |||
RuleID 1 | RuleID 1 | |||
+-------------+--+--+--+------+---------+-------------++------------+ | +-------------+--+--+--+------+---------+-------------++------------+ | |||
| Field |FL|FP|DI|Target| Match | CDA || Sent | | | Field |FL|FP|DI|Target| Match | CDA || Sent | | |||
| | | | |Value | Opera. | || [bits] | | | | | | |Value | Opera. | || [bits] | | |||
+-------------+--+--+--+------+---------+-------------++------------+ | +-------------+--+--+--+------+---------+-------------++------------+ | |||
|CoAP version | 2| 1|bi| 01 |equal |not-sent || | | |CoAP version | 2| 1|bi| 01 |equal |not-sent || | | |||
|CoAP Type | 2| 1|dw| CON |equal |not-sent || | | |CoAP Type | 2| 1|dw| CON |equal |not-sent || | | |||
|CoAP Type | 2| 1|up|[ACK, | | || | | |CoAP Type | 2| 1|up|[ACK, | | || | | |||
| | | | | RST] |match-map|matching-sent|| T | | | | | | | RST] |match-map|matching-sent|| T | | |||
|CoAP TKL | 4| 1|bi| 0 |equal |not-sent || | | |CoAP TKL | 4| 1|bi| 0 |equal |not-sent || | | |||
|CoAP Code | 8| 1|bi|[0.00,| | || | | |CoAP Code | 8| 1|bi|[0.00,| | || | | |||
| | | | | ... | | || | | | | | | | ... | | || | | |||
| | | | | 5.05]|match-map|matching-sent|| CC CCC | | | | | | | 5.05]|match-map|matching-sent|| CC CCC | | |||
|CoAP MID |16| 1|bi| 0000 |MSB(7 ) |LSB || M-ID| | |CoAP MID |16| 1|bi| 0000 |MSB(7 ) |LSB || M-ID| | |||
|CoAP Uri-Path|var 1|dw| path |equal 1 |not-sent || | | |CoAP Uri-Path|var 1|dw| path |equal 1 |not-sent || | | |||
+-------------+--+--+--+------+---------+-------------++------------+ | +-------------+--+--+--+------+---------+-------------++------------+ | |||
Figure 7: CoAP Context to compress header without token | Figure 7: CoAP Context to compress header without Token | |||
The version and Token Length fields are elided. The 26 method and | In this example, SCHC compression elides the version and the Token | |||
response codes defined in [rfc7252] has been shrunk to 5 bits using a | Length fields. The 26 method and response codes defined in [RFC7252] | |||
matching list. Uri-Path contains a single element indicated in the | has been shrunk to 5 bits using a "match-mapping" MO. The Uri-Path | |||
matching operator. | contains a single element indicated in the TV and elided with the CDA | |||
"not-sent." | ||||
SCHC Compression reduces the header sending only the Type, a mapped | SCHC Compression reduces the header sending only the Type, a mapped | |||
code and the least significant bits of Message ID (9 bits in the | code, and the least significant bits of Message ID (9 bits in the | |||
example above). | example above). | |||
Note that a request sent by a client located in an Application Server | 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 | to a server located in the Device may not be compressed through this | |||
Rule since the MID will not start with 7 bits equal to 0. A CoAP | Rule since the MID will not start with 7 bits equal to 0. A CoAP | |||
proxy, before the core SCHC C/D can rewrite the message ID to a value | proxy placed before the SCHC C/D can rewrite the message ID to fit | |||
matched by the Rule. | the value and match the Rule. | |||
7.2. OSCORE Compression | 7.2. OSCORE Compression | |||
OSCORE aims to solve the problem of end-to-end encryption for CoAP | OSCORE aims to solve the problem of end-to-end encryption for CoAP | |||
messages. The goal, therefore, is to hide as much of the message as | messages. Therefore, the goal is to hide as much as possible the | |||
possible while still enabling proxy operation. | message while still enabling proxy operation. | |||
Conceptually this is achieved by splitting the CoAP message into an | Conceptually this is achieved by splitting the CoAP message into an | |||
Inner Plaintext and Outer OSCORE Message. The Inner Plaintext | Inner Plaintext and Outer OSCORE Message. The Inner Plaintext | |||
contains sensitive information that is not necessary for proxy | contains sensitive information that is not necessary for proxy | |||
operation. This, in turn, is the part of the message which can be | operation. However, it is part of the message that can be encrypted | |||
encrypted until it reaches its end destination. The Outer Message | until it reaches its end destination. The Outer Message acts as a | |||
acts as a shell matching the regular CoAP message format and includes | shell matching the regular CoAP message format and includes all | |||
all Options and information needed for proxy operation and caching. | Options and information needed for proxy operation and caching. | |||
This decomposition is illustrated in Figure 8. | Figure 8 illustrates this analysis. | |||
CoAP options are sorted into one of 3 classes, each granted a | The CoAP protocol arranges the options into one of 3 classes; each | |||
specific type of protection by the protocol: | granted a specific type of protection by the protocol: | |||
o Class E: Encrypted options moved to the Inner Plaintext, | o Class E: Encrypted options moved to the Inner Plaintext, | |||
o Class I: Integrity-protected options included in the AAD for the | o Class I: Integrity-protected options included in the AAD for the | |||
encryption of the Plaintext but otherwise left untouched in the | encryption of the Plaintext but otherwise left untouched in the | |||
Outer Message, | Outer Message, | |||
o Class U: Unprotected options left untouched in the Outer Message. | o Class U: Unprotected options left untouched in the Outer Message. | |||
Additionally, the OSCORE Option is added as an Outer option, | These classes point out that the Outer option contains the OSCORE | |||
signaling that the message is OSCORE protected. This option carries | Option and that the message is OSCORE protected; this option carries | |||
the information necessary to retrieve the Security Context with which | the information necessary to retrieve the Security Context. The end- | |||
the message was encrypted to be correctly decrypted at the other end- | point will use this Security Context to decrypt the message | |||
point. | correctly. | |||
Original CoAP Message | Original CoAP Packet | |||
+-+-+---+-------+---------------+ | +-+-+---+-------+---------------+ | |||
|v|t|tkl| code | Msg Id. | | |v|t|TKL| code | Msg 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| Msg Id. | | code | | |||
+-+-+---+--------+---------------+....+ +-------+-----......+ | +-+-+---+--------+---------------+....+ +-------+-----......+ | |||
| Token | | Options (E) | | | Token | | Options (E) | | |||
+--------------------------------.....+ +-------+------.....+ | +--------------------------------.....+ +-------+------.....+ | |||
| Options (IU) | | OxFF | | | Options (IU) | | OxFF | | |||
. . +-------+-----------+ | . . +-------+-----------+ | |||
. OSCORE Option . | | | . OSCORE Option . | | | |||
+------+-------------------+ | Payload | | +------+-------------------+ | Payload | | |||
| 0xFF | | | | | 0xFF | | | | |||
+------+ +-------------------+ | +------+ +-------------------+ | |||
Figure 8: A CoAP message is split into an OSCORE outer and plaintext | Figure 8: A CoAP packet is split into an OSCORE outer and plaintext | |||
Figure 8 shows the message format for the OSCORE Message and | Figure 8 shows the packet format for the OSCORE Outer header and | |||
Plaintext. | Plaintext. | |||
In the Outer Header, the original message code is hidden and replaced | In the Outer Header, the original header code is hidden and replaced | |||
by a default dummy value. As seen in Sections 4.1.3.5 and 4.2 of | by a default dummy value. As seen in Sections 4.1.3.5 and 4.2 of | |||
[rfc8613], the message code is replaced by POST for requests and | [RFC8613], the message code is replaced by POST for requests and | |||
Changed for responses when Observe is not used. If Observe is used, | Changed for responses when CoAP is not using the Observe option. If | |||
the message code is replaced by FETCH for requests and Content for | CoAP uses Observe, the OSCORE message code is replaced by FETCH for | |||
responses. | requests and Content for responses. | |||
The original message code is put into the first byte of the | The first byte of the Plaintext contains the original packet code, | |||
Plaintext. Following the message code, the class E options come, | followed by the message code, the class E options, and, if present, | |||
and, if present, the original message Payload is preceded by its | the original message Payload preceded by its payload marker. | |||
payload marker. | ||||
The Plaintext is now encrypted by an AEAD algorithm which integrity | An AEAD algorithm now encrypts the Plaintext. This integrity | |||
protects Security Context parameters and, eventually, any class I | protects the Security Context parameters and, eventually, any class I | |||
options from the Outer Header. Currently, no CoAP options are marked | options from the Outer Header. The resulting Ciphertext becomes the | |||
class I. The resulting Ciphertext becomes the new Payload of the | new payload of the OSCORE message, as illustrated in Figure 9. | |||
OSCORE message, as illustrated in Figure 9. | ||||
As defined in [rfc5116], this Ciphertext is the concatenation of the | As defined in [RFC5116], this Ciphertext is the encrypted Plaintext's | |||
encrypted Plaintext and its authentication tag. Note that Inner | concatenation of the authentication tag. Note that Inner Compression | |||
Compression only affects the Plaintext before encryption. Thus only | only affects the Plaintext before encryption. Thus only the first | |||
the first variable-length of the Ciphertext can be reduced. The | variable-length of the Ciphertext can be reduced. The authentication | |||
authentication tag is fixed in length and is considered part of the | tag is fixed in length and is considered part of the cost of | |||
cost of protection. | protection. | |||
Outer Header | Outer Header | |||
+-+-+---+--------+---------------+ | +-+-+---+--------+---------------+ | |||
|v|t|tkl|new code| Msg Id. | | |v|t|TKL|new code| Msg Id. | | |||
+-+-+---+--------+---------------+....+ | +-+-+---+--------+---------------+....+ | |||
| Token | | | Token | | |||
+--------------------------------.....+ | +--------------------------------.....+ | |||
| Options (IU) | | | Options (IU) | | |||
. . | . . | |||
. OSCORE Option . | . OSCORE Option . | |||
+------+-------------------+ | +------+-------------------+ | |||
| 0xFF | | | 0xFF | | |||
+------+---------------------------+ | +------+---------------------------+ | |||
| | | | | | |||
skipping to change at page 18, line 45 ¶ | skipping to change at page 19, line 46 ¶ | |||
| + Authentication Tag | | | + Authentication Tag | | |||
| | | | | | |||
+----------------------------------+ | +----------------------------------+ | |||
Figure 9: OSCORE message | Figure 9: OSCORE message | |||
The SCHC Compression scheme consists of compressing both the | The SCHC Compression scheme consists of compressing both the | |||
Plaintext before encryption and the resulting OSCORE message after | Plaintext before encryption and the resulting OSCORE message after | |||
encryption, see Figure 10. | encryption, see Figure 10. | |||
This translates into a segmented process where SCHC compression is | The OSCORE message translates into a segmented process where SCHC | |||
applied independently in 2 stages, each with its corresponding set of | compression is applied independently in 2 stages, each with its | |||
Rules, with the Inner SCHC Rules and the Outer SCHC Rules. This way, | corresponding set of Rules, with the Inner SCHC Rules and the Outer | |||
compression is applied to all fields of the original CoAP message. | SCHC Rules. This way, compression is applied to all fields of the | |||
original CoAP message. | ||||
Note that since the corresponding end-point can only decrypt the | Note that since the corresponding end-point can only decrypt the | |||
Inner part of the message, this end-point will also have to implement | Inner part of the message, this end-point will also have to implement | |||
Inner SCHC Compression/Decompression. | Inner SCHC Compression/Decompression. | |||
Outer Message OSCORE Plaintext | Outer Message OSCORE Plaintext | |||
+-+-+---+--------+---------------+ +-------+ | +-+-+---+--------+---------------+ +-------+ | |||
|v|t|tkl|new code| Msg Id. | | code | | |v|t|TKL|new code| Msg Id. | | code | | |||
+-+-+---+--------+---------------+....+ +-------+-----......+ | +-+-+---+--------+---------------+....+ +-------+-----......+ | |||
| Token | | Options (E) | | | Token | | Options (E) | | |||
+--------------------------------.....+ +-------+------.....+ | +--------------------------------.....+ +-------+------.....+ | |||
| Options (IU) | | OxFF | | | Options (IU) | | OxFF | | |||
. . +-------+-----------+ | . . +-------+-----------+ | |||
. OSCORE Option . | | | . OSCORE Option . | | | |||
+------+-------------------+ | Payload | | +------+-------------------+ | Payload | | |||
| 0xFF | | | | | 0xFF | | | | |||
+------+------------+ +-------------------+ | +------+------------+ +-------------------+ | |||
| Ciphertext |<---------\ | | | Ciphertext |<---------\ | | |||
| | | v | | | | v | |||
+-------------------+ | +-----------------+ | +-------------------+ | +-----------------+ | |||
| | | Inner SCHC | | | | | Inner SCHC | | |||
v | | Compression | | v | | Compression | | |||
+-----------------+ | +-----------------+ | +-----------------+ | +-----------------+ | |||
| Outer SCHC | | | | | Outer SCHC | | | | |||
| Compression | | v | | Compression | | v | |||
+-----------------+ | +-------+ | +-----------------+ | +-------+ | |||
| | |RuleID | | | | |RuleID | | |||
v | +-------+--+ | v | +-------+-----------+ | |||
+--------+ +------------+ | Residue | | +--------+ +------------+ |Compression Residue| | |||
|RuleID' | | Encryption | <--- +----------+--------+ | |RuleID' | | Encryption | <-- +----------+--------+ | |||
+--------+--+ +------------+ | | | +--------+-----------+ +------------+ | | | |||
| Residue' | | Payload | | |Compression Residue'| | Payload | | |||
+-----------+-------+ | | | +-----------+--------+ | | | |||
| Ciphertext | +-------------------+ | | Ciphertext | +-------------------+ | |||
| | | | | | |||
+-------------------+ | +--------------------+ | |||
Figure 10: OSCORE Compression Diagram | Figure 10: OSCORE Compression Diagram | |||
7.3. Example OSCORE Compression | 7.3. Example OSCORE Compression | |||
An example is given with a GET Request and its consequent Content | This section gives an example with a GET Request and its consequent | |||
Response from a device-based CoAP client to a cloud-based CoAP | Content Response from a Device-based CoAP client to a cloud-based | |||
server. A possible set of Rules for the Inner and Outer SCHC | CoAP server. The example also describes a possible set of Rules for | |||
Compression is shown. A dump of the results and a contrast between | the Inner and Outer SCHC Compression. A dump of the results and a | |||
SCHC + OSCORE performance with SCHC + COAP performance is also | contrast between SCHC + OSCORE performance with SCHC + COAP | |||
listed. This gives an approximation to the cost of security with | performance is also listed. This example gives an approximation of | |||
SCHC-OSCORE. | the cost of security with SCHC-OSCORE. | |||
Our first example CoAP message is the GET Request in Figure 11 | Our first CoAP message is the GET request in Figure 11. | |||
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 | |||
skipping to change at page 20, line 40 ¶ | skipping to change at page 22, line 13 ¶ | |||
Its corresponding response is the CONTENT Response in Figure 12. | Its corresponding response is the CONTENT Response in Figure 12. | |||
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 msg length: 10 | |||
Figure 12: CoAP CONTENT Response | Figure 12: CoAP CONTENT Response | |||
The SCHC Rules for the Inner Compression include all fields already | The SCHC Rules for the Inner Compression include all fields already | |||
present in a regular CoAP message. The methods described in | present in a regular CoAP message. The methods described in | |||
Section 4 apply to these fields. As an example, see Figure 13. | Section 4 apply to these fields. As an example, see Figure 13. | |||
RuleID 0 | RuleID 0 | |||
+--------------+--+--+--+-----------+----------+----------++------+ | +--------------+--+--+--+-----------+---------+---------++------+ | |||
| Field |FL|FP|DI| Target | MO | CDA || Sent | | | Field |FL|FP|DI| Target | MO | CDA || Sent | | |||
| | | | | Value | | ||[bits]| | | | | | | Value | | ||[bits]| | |||
+--------------+--+--+--+-----------+----------+----------++------+ | +--------------+--+--+--+-----------+---------+---------++------+ | |||
|CoAP Code | 8| 1|up| 1 | equal |not-sent || | | |CoAP Code | 8| 1|up| 1 | equal |not-sent || | | |||
|CoAP Code | 8| 1|dw|[69,132] | match-map|match-sent|| c | | |CoAP Code | 8| 1|dw|[69, | | || | | |||
|CoAP Uri-Path |88| 1|up|temperature| equal |not-sent || | | | | | | |132] |match-map|mapp-sent|| c | | |||
+--------------+--+--+--+-----------+----------+----------++------+ | |CoAP Uri-Path |88| 1|up|temperature| equal |not-sent || | | |||
+--------------+--+--+--+-----------+---------+---------++------+ | ||||
Figure 13: Inner SCHC Rules | Figure 13: Inner SCHC Rules | |||
Figure 14 shows the Plaintext obtained for the example GET Request | Figure 14 shows the Plaintext obtained for the example GET request. | |||
and follows the process of Inner Compression and Encryption until the | The packet follows the process of Inner Compression and Encryption | |||
end up with the Payload to be added in the outer OSCORE Message. | until the payload. The outer OSCORE Message adds the result of the | |||
Inner process. | ||||
In this case, the original message has no payload, and its resulting | In this case, the original message has no payload, and its resulting | |||
Plaintext can be compressed up to only 1 byte (size of the RuleID). | Plaintext compressed up to only 1 byte (size of the RuleID). The | |||
The AEAD algorithm preserves this length in its first output and | AEAD algorithm preserves this length in its first output and yields a | |||
yields a fixed-size tag that cannot be compressed and has to be | fixed-size tag. SCHC cannot compress the tag, and the OSCORE message | |||
included in the OSCORE message. This translates into an overhead in | must include it without compression. The use of integrity translates | |||
total message length, limiting the amount of compression that can be | into an overhead in total message length, limiting the amount of | |||
achieved and plays into the cost of adding security to the exchange. | compression that can be achieved and plays into the cost of adding | |||
security to the exchange. | ||||
________________________________________________________ | ________________________________________________________ | |||
| | | | | | |||
| 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 | | |||
skipping to change at page 22, line 29 ¶ | skipping to change at page 23, line 33 ¶ | |||
| Inner SCHC Compression | | Inner SCHC Compression | |||
| | | | |||
v | v | |||
_________________________________ | _________________________________ | |||
| | | | | | |||
| Compressed Plaintext | | | Compressed Plaintext | | |||
| | | | | | |||
| 0x00 | | | 0x00 | | |||
| | | | | | |||
| RuleID = 0x00 (1 byte) | | | RuleID = 0x00 (1 byte) | | |||
| (No residue) | | | (No Compression Residue) | | |||
|_________________________________| | |_________________________________| | |||
| | | | |||
| 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) | | |||
|_________________________________________________| | |_________________________________________________| | |||
Figure 14: Plaintext compression and encryption for GET Request | Figure 14: Plaintext compression and encryption for GET Request | |||
In Figure 15, the process is repeated for the example CONTENT | Figure 15 shows the process for the example CONTENT Response. The | |||
Response. The residue is 1 bit long. Note that since SCHC adds | Compression Residue is 1 bit long. Note that since SCHC adds padding | |||
padding after the payload, this misalignment causes the hexadecimal | after the payload, this misalignment causes the hexadecimal code from | |||
code from the payload to differ from the original, even though it has | the payload to differ from the original, even if SCHC cannot compress | |||
not been compressed. | the tag. The overhead for the tag bytes limits the SCHC's | |||
performance but brings security to the transmission. | ||||
On top of this, the overhead from the tag bytes is incurred as | ||||
before. | ||||
________________________________________________________ | ________________________________________________________ | |||
| | | | | | |||
| 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 residue) | | | 0b0 (1 bit match-map 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) | | |||
| | | | | | |||
skipping to change at page 24, line 4 ¶ | skipping to change at page 25, line 49 ¶ | |||
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) | | |||
|_________________________________________________________| | |_________________________________________________________| | |||
Figure 15: Plaintext compression and encryption for CONTENT Response | Figure 15: Plaintext compression and encryption for CONTENT Response | |||
The Outer SCHC Rules (Figure 18) must process the OSCORE Options | The Outer SCHC Rules (Figure 18) must process the OSCORE Options | |||
fields. The Figure 16 and Figure 17 show a dump of the OSCORE | fields. Figure 16 and Figure 17 shows a dump of the OSCORE Messages | |||
Messages generated from the example messages once they have been | generated from the example messages. They include the Inner | |||
provided with the Inner Compressed Ciphertext in the payload. These | Compressed Ciphertext in the payload. These are the messages that | |||
are the messages that have to be compressed by the Outer SCHC | have to be compressed by the Outer SCHC Compression. | |||
Compression. | ||||
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 | |||
skipping to change at page 25, line 14 ¶ | skipping to change at page 27, line 14 ¶ | |||
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 | |||
01000100 Successful Response Code 68 "2.04 Changed" | 01000100 Successful Response Code 68 "2.04 Changed" | |||
0x0001 = mid | 0x0001 = mid | |||
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) | |||
Figure 17: Protected and Inner SCHC Compressed CONTENT Response | Figure 17: Protected and Inner SCHC Compressed CONTENT Response | |||
For the flag bits, some SCHC compression methods are useful, | For the flag bits, some SCHC compression methods are useful, | |||
depending on the application. The simplest alternative is to provide | depending on the Application. The most straightforward alternative | |||
a fixed value for the flags, combining MO equal and CDA not- sent. | is to provide a fixed value for the flags, combining MO "equal" and | |||
This saves most bits but could prevent flexibility. Otherwise, | CDA "not-sent." This SCHC definition saves most bits but could | |||
match-mapping could be used to choose from an interesting number of | prevent flexibility. Otherwise, SCHC could use a "match-mapping" MO | |||
configurations for the exchange. | to choose from several configurations for the exchange. If not, the | |||
Otherwise, MSB could be used to mask off the 3 hard-coded most | SCHC description may use an "MSB" MO to mask off the three hard-coded | |||
significant bits. | most significant bits. | |||
Note that fixing a flag bit will limit CoAP Options choice that can | Note that fixing a flag bit will limit CoAP Options choice that can | |||
be used in the exchange since their values are dependent on certain | be used in the exchange since their values are dependent on specific | |||
options. | options. | |||
The piv field lends itself to having some bits masked off with MO MSB | The piv field lends itself to having some bits masked off with "MSB" | |||
and CDA LSB. This could be useful in applications where the message | MO and "LSB" CDA. This SCHC description could be useful in | |||
frequency is low such as LPWAN technologies. Note that compressing | applications where the message frequency is low such as LPWAN | |||
the sequence numbers effectively reduces the maximum number of | technologies. Note that compressing the sequence numbers may reduce | |||
sequence numbers used in an exchange. Once this amount is exceeded, | the maximum number of sequence numbers used in an exchange. Once the | |||
the OSCORE keys need to be re-established. | sequence number exceeds the maximum value, the OSCORE keys need to be | |||
re-established. | ||||
The size s included in the kid context field MAY be masked off with | The size s included in the kid context field MAY be masked off with | |||
CDA MSB. The rest of the field could have additional bits masked off | "LSB" CDA. The rest of the field could have additional bits masked | |||
or have the whole field be fixed with MO equal and CDA not-sent. The | off or have the whole field fixed with MO "equal" and CDA "not-sent." | |||
same holds for the kid field. | The same holds for the kid field. | |||
Figure 18 shows a possible set of Outer Rules to compress the Outer | Figure 18 shows a possible set of Outer Rules to compress the Outer | |||
Header. | Header. | |||
RuleID 0 | RuleID 0 | |||
+------------------+--+--+--+--------------+-------+--------++------+ | +------------------+--+--+--+--------------+-------+--------++------+ | |||
| Field |FL|FP|DI| Target | MO | CDA || Sent | | | Field |FL|FP|DI| Target | MO | CDA || Sent | | |||
| | | | | Value | | ||[bits]| | | | | | | Value | | ||[bits]| | |||
+------------------+--+--+--+--------------+-------+--------++------+ | +------------------+--+--+--+--------------+-------+--------++------+ | |||
|CoAP version | 2| 1|bi| 01 |equal |not-sent|| | | |CoAP version | 2| 1|bi| 01 |equal |not-sent|| | | |||
skipping to change at page 26, line 34 ¶ | skipping to change at page 28, line 37 ¶ | |||
|CoAP OSCORE_piv |var 1|up| 0x00 |MSB(4) |LSB ||PPPP | | |CoAP OSCORE_piv |var 1|up| 0x00 |MSB(4) |LSB ||PPPP | | |||
|COAP OSCORE_kid |var 1|up|0x636c69656e70|MSB(52)|LSB ||KKKK | | |COAP OSCORE_kid |var 1|up|0x636c69656e70|MSB(52)|LSB ||KKKK | | |||
|COAP OSCORE_kidctx|var 1|bi| b'' |equal |not-sent|| | | |COAP OSCORE_kidctx|var 1|bi| b'' |equal |not-sent|| | | |||
|CoAP OSCORE_flags | 8| 1|dw| 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_piv |var 1|dw| b'' |equal |not-sent|| | | |||
|CoAP OSCORE_kid |var 1|dw| b'' |equal |not-sent|| | | |CoAP OSCORE_kid |var 1|dw| b'' |equal |not-sent|| | | |||
+------------------+--+--+--+--------------+-------+--------++------+ | +------------------+--+--+--+--------------+-------+--------++------+ | |||
Figure 18: Outer SCHC Rules | Figure 18: Outer SCHC Rules | |||
These Outer Rules are applied to the example GET Request and CONTENT | The Outer Rule of Figure 18 is applied to the example GET Request and | |||
Response. The resulting messages are shown in Figure 19 and | CONTENT Response. Figure 19 and Figure 20 show the resulting | |||
Figure 20. | messages. | |||
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) | |||
skipping to change at page 28, line 23 ¶ | skipping to change at page 30, line 23 ¶ | |||
|CoAP TKL | 4| 1|bi| 1 |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|up| 2 |equal |not-sent || | | |||
|CoAP Code | 8| 1|dw| [69,132] |match-map|map-sent ||C | | |CoAP Code | 8| 1|dw| [69,132] |match-map|map-sent ||C | | |||
|CoAP MID |16| 1|bi| 0000 |MSB(12) |LSB ||MMMM | | |CoAP MID |16| 1|bi| 0000 |MSB(12) |LSB ||MMMM | | |||
|CoAP Token |tkl 1|bi| 0x80 |MSB(5) |LSB ||TTT | | |CoAP Token |tkl 1|bi| 0x80 |MSB(5) |LSB ||TTT | | |||
|CoAP Uri-Path |88| 1|up|temperature|equal |not-sent || | | |CoAP Uri-Path |88| 1|up|temperature|equal |not-sent || | | |||
+---------------+--+--+--+-----------+---------+-----------++-------+ | +---------------+--+--+--+-----------+---------+-----------++-------+ | |||
Figure 21: SCHC-CoAP Rules (No OSCORE) | Figure 21: SCHC-CoAP Rules (No OSCORE) | |||
This yields the results in Figure 22 for the Request, and Figure 23 | Figure 21 Rule yields the SCHC compression results in Figure 22 for | |||
for the Response. | request, and Figure 23 for the response. | |||
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 msg length: 2 | |||
skipping to change at page 29, line 29 ¶ | skipping to change at page 31, line 29 ¶ | |||
As can be seen, the difference between applying SCHC + OSCORE as | As can be seen, the difference between applying SCHC + OSCORE as | |||
compared to regular SCHC + COAP is about 10 bytes. | compared to regular SCHC + COAP is about 10 bytes. | |||
8. IANA Considerations | 8. IANA Considerations | |||
This document has no request to IANA. | This document has no request to IANA. | |||
9. Security considerations | 9. Security considerations | |||
When applied to LPWAN, the Security Considerations of SCHC header | The use of SCHC header compression over CoAP header fields allow the | |||
compression [rfc8724] are valid for SCHC CoAP header compression. | compression of the header information only. The SCHC header | |||
When CoAP uses OSCORE, the security considerations defined in | compression itself does not increase or reduce the level of security | |||
[rfc8613] does not change when SCHC header compression is applied. | in the communication. When the connection does not use any security | |||
protocol as OSCORE, DTLS, or other, it is necessary to use a layer | ||||
two security. | ||||
The definition of SCHC over CoAP header fields permits the | If LPWAN is the layer two technology, the use of SCHC over the CoAP | |||
compression of header information only. The SCHC header compression | protocol keeps valid the Security Considerations of SCHC header | |||
itself does not increase or reduce the level of security in the | compression [RFC8724]. When using another layer two, integrity | |||
communication. When the connection does not use any security | protection is mandatory. | |||
protocol as OSCORE, DTLS, or other, it is highly necessary to use a | ||||
layer two security. | ||||
DoS attacks are possible if an intruder can introduce a compressed | The use of SCHC when CoAP uses OSCORE keeps valid the security | |||
SCHC corrupted packet onto the link and cause a compression | considerations defined in [RFC8613]. | |||
efficiency reduction. However, an intruder having the ability to add | ||||
corrupted packets at the link layer raises additional security issues | ||||
than those related to the use of header compression. | ||||
SCHC compression returns variable-length Residues for some CoAP | DoS attacks are possible if an intruder can introduce a corrupted | |||
fields. In the compressed header, the length sent is not the | SCHC compressed packet onto the link and cause excessive resource | |||
original header field length but the length of the Residue. So if a | consumption at the decompressor. However, an intruder having the | |||
corrupted packet comes to the decompressor with a longer or shorter | ability to add corrupted packets at the link layer raises additional | |||
length than the one in the original header, SCHC decompression will | security issues than those related to header compression. | |||
detect an error and drops the packet. | ||||
OSCORE compression is also based on the same compression method | SCHC compression returns variable-length Compression Residues for | |||
described in [rfc8724]. The size of the Initialisation Vector (IV) | some CoAP fields. In the compressed header, the length sent is not | |||
residue must be considered carefully. A residue size obtained with | the original header field length but the Compression Residue's length | |||
LSB CDA over the IV impacts on the compression efficiency and the | that is transmitted. So If a corrupted packet comes to the | |||
frequency the device will renew its key. This operation requires | decompressor with a longer or shorter length than the original | |||
several exchanges and is energy-consuming. | header, SCHC decompression will detect an error and drop the packet. | |||
Using SCHC over the OSCORE headers, OSCORE MUST consider the | ||||
Initialization Vector (IV) size carefully in the Compression Residue. | ||||
A Compression Residue size obtained with an "LSB" CDA over the IV | ||||
impacts the compression efficiency and the frequency that the Device | ||||
will renew its key. This operation requires several exchanges and is | ||||
energy-consuming. | ||||
SCHC header and compression Rules MUST remain tightly coupled. | SCHC header and compression Rules MUST remain tightly coupled. | |||
Otherwise, an encrypted residue may be decompressed differently by | Otherwise, an encrypted Compression Residue may be decompressed | |||
the receiver. To avoid this situation, if the Rule is modified in | differently by the receiver. Any update in the context Rules on one | |||
one location, the OSCORE keys MUST be re-established. | side MUST trigger the OSCORE keys re-establishment. | |||
10. Acknowledgements | 10. Acknowledgements | |||
The authors would like to thank (in alphabetic order): Christian | The authors would like to thank (in alphabetic order): Christian | |||
Amsuss, Dominique Barthel, Carsten Bormann, Theresa Enghardt, Thomas | Amsuss, Dominique Barthel, Carsten Bormann, Theresa Enghardt, Thomas | |||
Fossati, Klaus Hartke, Francesca Palombini, Alexander Pelov and Goran | Fossati, Klaus Hartke, Benjamin Kaduk, Francesca Palombini, Alexander | |||
Selander. | Pelov, Goran Selander and Eric Vyncke. | |||
11. Normative References | 11. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[rfc5116] McGrew, D., "An Interface and Algorithms for Authenticated | [RFC5116] McGrew, D., "An Interface and Algorithms for Authenticated | |||
Encryption", RFC 5116, DOI 10.17487/RFC5116, January 2008, | Encryption", RFC 5116, DOI 10.17487/RFC5116, January 2008, | |||
<https://www.rfc-editor.org/info/rfc5116>. | <https://www.rfc-editor.org/info/rfc5116>. | |||
[rfc7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained | [RFC7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained | |||
Application Protocol (CoAP)", RFC 7252, | Application Protocol (CoAP)", RFC 7252, | |||
DOI 10.17487/RFC7252, June 2014, | DOI 10.17487/RFC7252, June 2014, | |||
<https://www.rfc-editor.org/info/rfc7252>. | <https://www.rfc-editor.org/info/rfc7252>. | |||
[rfc7641] Hartke, K., "Observing Resources in the Constrained | [RFC7641] Hartke, K., "Observing Resources in the Constrained | |||
Application Protocol (CoAP)", RFC 7641, | Application Protocol (CoAP)", RFC 7641, | |||
DOI 10.17487/RFC7641, September 2015, | DOI 10.17487/RFC7641, September 2015, | |||
<https://www.rfc-editor.org/info/rfc7641>. | <https://www.rfc-editor.org/info/rfc7641>. | |||
[rfc7959] Bormann, C. and Z. Shelby, Ed., "Block-Wise Transfers in | [RFC7959] Bormann, C. and Z. Shelby, Ed., "Block-Wise Transfers in | |||
the Constrained Application Protocol (CoAP)", RFC 7959, | the Constrained Application Protocol (CoAP)", RFC 7959, | |||
DOI 10.17487/RFC7959, August 2016, | DOI 10.17487/RFC7959, August 2016, | |||
<https://www.rfc-editor.org/info/rfc7959>. | <https://www.rfc-editor.org/info/rfc7959>. | |||
[rfc7967] Bhattacharyya, A., Bandyopadhyay, S., Pal, A., and T. | [RFC7967] Bhattacharyya, A., Bandyopadhyay, S., Pal, A., and T. | |||
Bose, "Constrained Application Protocol (CoAP) Option for | Bose, "Constrained Application Protocol (CoAP) Option for | |||
No Server Response", RFC 7967, DOI 10.17487/RFC7967, | No Server Response", RFC 7967, DOI 10.17487/RFC7967, | |||
August 2016, <https://www.rfc-editor.org/info/rfc7967>. | August 2016, <https://www.rfc-editor.org/info/rfc7967>. | |||
[rfc8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[rfc8613] Selander, G., Mattsson, J., Palombini, F., and L. Seitz, | [RFC8613] Selander, G., Mattsson, J., Palombini, F., and L. Seitz, | |||
"Object Security for Constrained RESTful Environments | "Object Security for Constrained RESTful Environments | |||
(OSCORE)", RFC 8613, DOI 10.17487/RFC8613, July 2019, | (OSCORE)", RFC 8613, DOI 10.17487/RFC8613, July 2019, | |||
<https://www.rfc-editor.org/info/rfc8613>. | <https://www.rfc-editor.org/info/rfc8613>. | |||
[rfc8724] Minaburo, A., Toutain, L., Gomez, C., Barthel, D., and JC. | [RFC8724] Minaburo, A., Toutain, L., Gomez, C., Barthel, D., and JC. | |||
Zuniga, "SCHC: Generic Framework for Static Context Header | Zuniga, "SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation", RFC 8724, | Compression and Fragmentation", RFC 8724, | |||
DOI 10.17487/RFC8724, April 2020, | DOI 10.17487/RFC8724, April 2020, | |||
<https://www.rfc-editor.org/info/rfc8724>. | <https://www.rfc-editor.org/info/rfc8724>. | |||
Authors' Addresses | Authors' Addresses | |||
Ana Minaburo | Ana Minaburo | |||
Acklio | Acklio | |||
1137A avenue des Champs Blancs | 1137A avenue des Champs Blancs | |||
End of changes. 151 change blocks. | ||||
472 lines changed or deleted | 494 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/ |