draft-ietf-lpwan-coap-static-context-hc-13.txt | draft-ietf-lpwan-coap-static-context-hc-14.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: September 6, 2020 Institut MINES TELECOM; IMT Atlantique | Expires: November 27, 2020 Institut MINES TELECOM; IMT Atlantique | |||
R. Andreasen | R. Andreasen | |||
Universidad de Buenos Aires | Universidad de Buenos Aires | |||
March 05, 2020 | May 26, 2020 | |||
LPWAN Static Context Header Compression (SCHC) for CoAP | LPWAN Static Context Header Compression (SCHC) for CoAP | |||
draft-ietf-lpwan-coap-static-context-hc-13 | draft-ietf-lpwan-coap-static-context-hc-14 | |||
Abstract | Abstract | |||
This draft defines the way SCHC (Static Context Header Compression) | This draft defines the way Static Context Header Compression (SCHC) | |||
header compression can be applied to the CoAP protocol. SCHC is a | header compression can be applied to the Constrained Application | |||
header compression mechanism adapted for constrained devices. SCHC | Protocol (CoAP). SCHC is a header compression mechanism adapted for | |||
uses a static description of the header to reduce the redundancy and | constrained devices. SCHC uses a static description of the header to | |||
the size of the information in the header. While | reduce the redundancy and the size of the information in the header. | |||
[I-D.ietf-lpwan-ipv6-static-context-hc] describes the SCHC | While [rfc8724] describes the SCHC compression and fragmentation | |||
compression and fragmentation framework, and its application for | framework, and its application for IPv6/UDP headers, this document | |||
IPv6/UDP headers, this document applies the use of SCHC for CoAP | applies the use of SCHC for CoAP headers. The CoAP header structure | |||
headers. The CoAP header structure differs from IPv6 and UDP since | differs from IPv6 and UDP since CoAP uses a flexible header with a | |||
CoAP uses a flexible header with a variable number of options, | variable number of options, themselves of variable length. The CoAP | |||
themselves of variable length. The CoAP protocol messages format is | protocol messages format is asymmetric: the request messages have a | |||
asymmetric: the request messages have a header format different from | header format different from the one in the response messages. This | |||
the one in the response messages. This specification gives guidance | specification gives guidance on how to apply SCHC to flexible headers | |||
on how to apply SCHC to flexible headers and how to leverage the | and how to leverage the asymmetry for more efficient compression | |||
asymmetry for more efficient compression Rules. | Rules. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
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 September 6, 2020. | This Internet-Draft will expire on November 27, 2020. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2020 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 | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
2. Applying SCHC to CoAP . . . . . . . . . . . . . . . . . . . . 4 | 2. Applying SCHC to CoAP headers . . . . . . . . . . . . . . . . 4 | |||
3. CoAP Compression with SCHC . . . . . . . . . . . . . . . . . 5 | 3. CoAP Headers compressed with SCHC . . . . . . . . . . . . . . 5 | |||
3.1. Differences between CoAP and UDP/IP . . . . . . . . . . . 5 | 3.1. Differences between CoAP and UDP/IP Compression . . . . . 5 | |||
4. Compression of CoAP header fields . . . . . . . . . . . . . . 6 | 4. Compression of CoAP header fields . . . . . . . . . . . . . . 6 | |||
4.1. CoAP version field . . . . . . . . . . . . . . . . . . . 7 | 4.1. CoAP version field . . . . . . . . . . . . . . . . . . . 7 | |||
4.2. CoAP type field . . . . . . . . . . . . . . . . . . . . . 7 | 4.2. CoAP type field . . . . . . . . . . . . . . . . . . . . . 7 | |||
4.3. CoAP code field . . . . . . . . . . . . . . . . . . . . . 7 | 4.3. CoAP code field . . . . . . . . . . . . . . . . . . . . . 7 | |||
4.4. CoAP Message ID field . . . . . . . . . . . . . . . . . . 7 | 4.4. CoAP Message ID field . . . . . . . . . . . . . . . . . . 7 | |||
4.5. CoAP Token fields . . . . . . . . . . . . . . . . . . . . 7 | 4.5. CoAP Token fields . . . . . . . . . . . . . . . . . . . . 7 | |||
5. CoAP options . . . . . . . . . . . . . . . . . . . . . . . . 8 | 5. CoAP options . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
5.1. CoAP Content and Accept options. . . . . . . . . . . . . 8 | 5.1. CoAP Content and Accept options. . . . . . . . . . . . . 8 | |||
5.2. CoAP option Max-Age, Uri-Host and Uri-Port fields . . . . 8 | 5.2. CoAP option Max-Age, Uri-Host and Uri-Port fields . . . . 8 | |||
5.3. CoAP option Uri-Path and Uri-Query fields . . . . . . . . 8 | 5.3. CoAP option Uri-Path and Uri-Query fields . . . . . . . . 9 | |||
5.3.1. Variable length Uri-Path and Uri-Query . . . . . . . 9 | 5.3.1. Variable length Uri-Path and Uri-Query . . . . . . . 9 | |||
5.3.2. Variable number of path or query elements . . . . . . 10 | 5.3.2. Variable number of path or query elements . . . . . . 10 | |||
5.4. CoAP option Size1, Size2, Proxy-URI and Proxy-Scheme | 5.4. CoAP option Size1, Size2, Proxy-URI and Proxy-Scheme | |||
fields . . . . . . . . . . . . . . . . . . . . . . . . . 10 | fields . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
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 . . . . . . . . . . . . . . . . 10 | and Location-Query fields . . . . . . . . . . . . . . . . 10 | |||
6. SCHC compression of CoAP extension RFCs . . . . . . . . . . . 10 | 6. SCHC compression of CoAP extension RFCs . . . . . . . . . . . 11 | |||
6.1. Block . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 6.1. Block . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
6.2. Observe . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 6.2. Observe . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
6.3. No-Response . . . . . . . . . . . . . . . . . . . . . . . 11 | 6.3. No-Response . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
6.4. OSCORE . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 6.4. OSCORE . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
7. Examples of CoAP header compression . . . . . . . . . . . . . 12 | 7. Examples of CoAP header compression . . . . . . . . . . . . . 13 | |||
7.1. Mandatory header with CON message . . . . . . . . . . . . 12 | 7.1. Mandatory header with CON message . . . . . . . . . . . . 13 | |||
7.2. OSCORE Compression . . . . . . . . . . . . . . . . . . . 13 | 7.2. OSCORE Compression . . . . . . . . . . . . . . . . . . . 14 | |||
7.3. Example OSCORE Compression . . . . . . . . . . . . . . . 17 | 7.3. Example OSCORE Compression . . . . . . . . . . . . . . . 17 | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 27 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 27 | |||
9. Security considerations . . . . . . . . . . . . . . . . . . . 27 | 9. Security considerations . . . . . . . . . . . . . . . . . . . 27 | |||
10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 28 | 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 28 | |||
11. Normative References . . . . . . . . . . . . . . . . . . . . 28 | 11. Normative References . . . . . . . . . . . . . . . . . . . . 28 | |||
Appendix A. Extension to the RFC8724 Annex D. . . . . . . . . . 29 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 29 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 29 | |||
1. Introduction | 1. Introduction | |||
CoAP [rfc7252] is a transfer protocol that implements a subset of | CoAP [rfc7252] is designed to easily interop with HTTP (Hypertext | |||
HTTP (Hypertext Transfer Protocol) and is optimized for REST-based | Transfer Protocol) and is optimized for REST-based (Representational | |||
(Representational state transfer) services. Although CoAP was | state transfer) services. Although CoAP was designed for constrained | |||
designed for constrained devices, the size of a CoAP header still is | devices, the size of a CoAP header still is too large for the | |||
too large for the constraints of LPWAN (Low Power Wide Area Networks) | constraints of LPWAN (Low Power Wide Area Networks) and some | |||
and some compression is needed to reduce the header size. | compression is needed to reduce the header size. | |||
The [I-D.ietf-lpwan-ipv6-static-context-hc] defines SCHC, a header | The [rfc8724] defines SCHC, a header compression mechanism for LPWAN | |||
compression mechanism for LPWAN network based on a static context. | network based on a static context. The section 5 of the [rfc8724] | |||
The section 5 of the [I-D.ietf-lpwan-ipv6-static-context-hc] explains | explains the architecture where compression and decompression are | |||
the architecture where compression and decompression are done. The | done. The context is known by both ends before transmission. The | |||
context is known by both ends before transmission. The way the | way the context is configured, provisioned or exchanged is out of the | |||
context is configured or exchanged is out of the scope for this | scope of this document. | |||
document. | ||||
SCHC compresses and decompresses headers based on shared contexts | SCHC compresses and decompresses headers based on shared contexts | |||
between devices. Each context consists of multiple Rules. Each rule | between devices. Each context consists of multiple Rules. Each Rule | |||
can match header fields and specific values or ranges of values. If | can match header fields and specific values or ranges of values. If | |||
a rule matches, the matched header fields are substituted by the rule | a Rule matches, the matched header fields are substituted by the | |||
ID and optionally some residual bits. Thus, different Rules may | RuleID and optionally some residual bits. Thus, different Rules may | |||
correspond to different types of packets that a device expects to | correspond to different types of packets that a device expects to | |||
send or receive. | send or receive. | |||
A Rule describes the complete header of the packet with an ordered | A Rule describes the complete header of the packet with an ordered | |||
list of fields descriptions, see section 7 of the | list of fields descriptions, see section 7 of [rfc8724], thereby each | |||
[I-D.ietf-lpwan-ipv6-static-context-hc], thereby each description | description contains the field ID (FID), its length (FL) and its | |||
contains the field ID (FID), its length (FL) and its position (FP), a | position (FP), a direction indicator (DI) (upstream, downstream and | |||
direction indicator (DI) (upstream, downstream and bidirectional) and | bidirectional) and some associated Target Values (TV). | |||
some associated Target Values (TV). | ||||
A Matching Operator (MO) is associated to each header field | A Matching Operator (MO) is associated to each header field | |||
description. The rule is selected if all the MOs fit the TVs for all | description. The Rule is selected if all the MOs fit the TVs for all | |||
fields of the incoming packet. | fields of the incoming header. | |||
In that case, a Compression/Decompression Action (CDA) associated to | In that case, a Compression/Decompression Action (CDA) associated to | |||
each field defines how the compressed and the decompressed values are | each field defines how the compressed and the decompressed values are | |||
computed out of each other, for each of the header fields. | computed. Compression mainly results in one of 4 actions: | |||
Compression mainly results in one of 4 actions: * send the field | ||||
value, * send nothing, * send some least significant bits of the | ||||
field or * send an index. After applying the compression there may | ||||
be some bits to be sent, these values are called Compression | ||||
Residues. | ||||
SCHC is a general concept mechanism that can be applied to different | o send the field value, | |||
o send nothing, | ||||
o send some least significant bits of the field or | ||||
o send an index. | ||||
After applying the compression there may be some bits to be sent, | ||||
these values are called Compression Residues. | ||||
SCHC is a general mechanism that can be applied to different | ||||
protocols, the exact Rules to be used depend on the protocol and the | protocols, the exact Rules to be used depend on the protocol and the | |||
application, and CoAP differs from UDP and IPv6, see Section 3. | application. The section 10 of the [rfc8724] describes the | |||
compression scheme for IPv6 and UDP headers. This document targets | ||||
the CoAP header compression 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. Applying SCHC to CoAP | 2. Applying SCHC to CoAP headers | |||
The SCHC Compression rules can be applied to CoAP flows. SCHC | The SCHC Compression Rules can be applied to CoAP headers. SCHC | |||
Compression of the 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 layers | lower layers (IPv6/UDP) or independently. The SCHC adaptation layers | |||
as described in section 5 of [I-D.ietf-lpwan-ipv6-static-context-hc] | as described in Section 5 of [rfc8724] and may be used as shown in | |||
may be used as shown in Figure 1. | Figure 1. | |||
^ +------------+ ^ +------------+ ^ +------------+ | ^ +------------+ ^ +------------+ ^ +------------+ | |||
| | CoAP | | | CoAP | inner | | CoAP | | | | CoAP | | | CoAP | inner | | CoAP | | |||
| +------------+ v +------------+ x | OSCORE | | | +------------+ v +------------+ x | OSCORE | | |||
| | UDP | | DTLS | outer | +------------+ | | | UDP | | DTLS | outer | +------------+ | |||
| +------------+ +------------+ | | UDP | | | +------------+ +------------+ | | UDP | | |||
| | IPv6 | | UDP | | +------------+ | | | IPv6 | | UDP | | +------------+ | |||
v +------------+ +------------+ | | IPv6 | | v +------------+ +------------+ | | IPv6 | | |||
| IPv6 | v +------------+ | | IPv6 | v +------------+ | |||
+------------+ | +------------+ | |||
Figure 1: rule scope for CoAP | Figure 1: Rule scope for CoAP | |||
Figure 1 shows some examples for CoAP architecture and the SCHC | Figure 1 shows some examples for CoAP protocol stacks and the SCHC | |||
rule's scope. | Rule's scope. | |||
In the first example, a rule compresses the complete header stack | In the first example, a Rule compresses the complete header stack | |||
from IPv6 to CoAP. In this case, SCHC C/D (Static Context Header | from IPv6 to CoAP. In this case, SCHC C/D (Static Context Header | |||
Compression Compressor/Decompressor) is performed at the Sender and | Compression Compressor/Decompressor) is performed at the Sender and | |||
at the Receiver. | at the Receiver. | |||
In the second example, an end-to-end encryption mechanisms is used | In the second example, the SCHC compression is applied in the CoAP | |||
between the Sender and the Receiver. The SCHC compression is applied | layer, compressing the CoAP header independently of the other layers. | |||
in the CoAP layer compressing the CoAP header independently of the | The RuleID and the Compression Residue are encrypted using a | |||
other layers. The rule ID and the compression residue are encrypted | mechanism such as DTLS. Only the other end can decipher the | |||
using a mechanism such as DTLS. Only the other end can decipher the | information. If needed, layers below use SCHC to compress the header | |||
information. Layers below may also be compressed using other SCHC | as defined in [rfc8724] document. This use case realizes an End-to- | |||
rules (this is out of the scope of this document) as defined in the | End context initialization between the sender and the receiver, see | |||
SCHC [I-D.ietf-lpwan-ipv6-static-context-hc] document. | Appendix A. | |||
In the third example, OSCORE [rfc8613] is used. In this case, two | In the third example, the Object Security for Constrained RESTful | |||
rulesets are used to compress the CoAP message. A first ruleset | Environments (OSCORE) [rfc8613] is used. In this case, two rulesets | |||
focused on the inner header and is applied end to end by both ends. | are used to compress the CoAP message. A first ruleset focused on | |||
A second ruleset compresses the outer header and the layers below and | the inner header and is applied end to end by both ends. A second | |||
is done between the Sender and the Receiver. | ruleset compresses the outer header and the layers below and is done | |||
between the Sender and the Receiver. | ||||
3. CoAP Compression with SCHC | 3. CoAP Headers compressed with SCHC | |||
SCHC with CoAP will be used exactly the same way as it is applied in | The use of SCHC over the CoAP header uses the same description and | |||
any protocol as IP or UDP with the difference that the fields | compression/decompression techniques as the one for IP and UDP | |||
description needs to be defined based on both headers and target | explained in the [rfc8724]. For CoAP, SCHC Rules description uses | |||
values of the request and the responses. SCHC Rules description use | the direction information to optimize the compression by reducing the | |||
the direction information to optmize the compression by reducing the | number of Rules needed to compress headers. The field description | |||
number of Rules needed to compress traffic. CoAP compression follows | MAY define both request/response headers and target values in the | |||
the [I-D.ietf-lpwan-ipv6-static-context-hc] scheme and as for other | same Rule, using the DI (direction indicator) to make the difference. | |||
protocols, if no valid Rule was found, then the packet MUST be sent | As for other protocols, when the compressor does not find a correct | |||
uncompressed using the RuleID dedicated to this purpose and the | Rule to compress the header, the packet MUST be sent uncompressed | |||
Compression Residue is the complete header of the packet. See | using the RuleID dedicated to this purpose, and the Compression | |||
section 6 of [I-D.ietf-lpwan-ipv6-static-context-hc]. | Residue is the complete header of the packet. See section 6 of | |||
[rfc8724]. | ||||
3.1. Differences between CoAP and UDP/IP | 3.1. Differences between CoAP and UDP/IP Compression | |||
CoAP differs from IPv6 and UDP protocols on the following aspects: | CoAP compression differs from IPv6 and UDP compression on the | |||
following aspects: | ||||
o IPv6 and UDP are not request and response protocols as CoAP, and | o The CoAP protocol is asymmetric, the headers are different for a | |||
so the same header fields are used in all packets for all | request or a response. For example, the URI-path option is | |||
directions, with the value of some fields being swapped on the | mandatory in the request, and it is not present in the response, a | |||
return path (e.g. source and destination addresses fields). The | request may contain an Accept option, and the response may include | |||
CoAP headers instead are asymmetric, the headers are different for | a Content option. In comparison, IPv6 and UDP returning path swap | |||
a request or a response. For example, the URI-path option is | the value of some fields in the header. | |||
mandatory in the request and is not found in the response, a | But all the directions have the same fields (e.g., source and | |||
request may contain an Accept option and the response may contain | destination addresses fields). | |||
a Content option. | ||||
The [I-D.ietf-lpwan-ipv6-static-context-hc] defines the use of a | The [rfc8724] defines the use of a Direction Indicator (DI) in the | |||
Direction Indicator (DI) in the Field Description, which allows a | Field Description, which allows a single Rule to process message | |||
single Rule to process message headers differently depending on | headers differently depending on the direction. | |||
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. To performs | the values carried in each direction are different. | |||
the compression a matching list in the TV might be use because | The compression may use a matching list in the TV to limit the | |||
this allows reducing the range of expected values in a particular | range of expected values in a particular direction and therefore | |||
direction and therefore reduces the size of the | reduces the size of the Compression Residue. Through the | |||
compression residue. For instance, if a client sends only CON | Direction Indicator (DI), a field description in the Rules splits | |||
requests, the type can be elided by compression and the answer may | the possible field value into two parts, one for each direction. | |||
use one single bit to carry either the ACK or RST type. In CoAP | For instance, if a client sends only CON requests, the type can be | |||
some fields have the same behavior, for example the field Code can | elided by compression, and the answer may use one single bit to | |||
have 0.0X code format value in the request and Y.ZZ code format in | carry either the ACK or RST type. The field Code have as well the | |||
the response. Through the direction indicator, a field | same behavior, the 0.0X code format value in the request and Y.ZZ | |||
description in the Rules splits the possible field value in two | code format in the response. | |||
parts. Resulting in a smaller compression residue. | ||||
o In IPv6 and UDP, header fields have a fixed size, defined in the | o Headers in IPv6 and UDP have a fixed size. The size is not sent | |||
Rule, which is not sent. In CoAP, some fields in the header have | as part of the Compression Residue, but is defined in the Rule. | |||
a variable length, for example the Token size may vary from 0 to 8 | Some CoAP header fields have variable lengths, so the length is | |||
bytes, the length is given by a field in the header. The CoAP | also specified in the Field Description. For example, the Token | |||
options are described using the Type-Length-Value encoding format. | size may vary from 0 to 8 bytes. And the CoAP options have a | |||
variable length since they use the Type-Length-Value encoding | ||||
format, as URI-path or URI-query. | ||||
Section 7.5.2 from [I-D.ietf-lpwan-ipv6-static-context-hc] offers | Section 7.5.2 from [rfc8724] offers the possibility to define a | |||
the possibility to define a function for the Field Length in the | function for the Field length in the Field Description to have | |||
Field Description to have knwoledge of the length before | knowledge of the length before compression. When doing SCHC | |||
compression. When doing SCHC compression of a variable length | compression of a variable-length field, | |||
field two cases may be raised after applying the CDA: * The result | if the field size is not known, the Field Length in the Rule is | |||
of the compression is of fixed length and the compressed value is | set as variable and the size is sent with the Compression Residue. | |||
sent in the residue. * Or the result of the compression is of | ||||
variable-length and in this case, the size is sent with the | ||||
compressed value in the residue. | ||||
o In CoAP headers, a field can appear several times. This is | o A field can appear several time in the CoAP headers. This is | |||
typical for elements of a URI (path or queries). The SCHC | typical for elements of a URI (path or queries). The SCHC | |||
specification [I-D.ietf-lpwan-ipv6-static-context-hc] allows a | specification [rfc8724] allows a Field ID to appear several times | |||
Field ID to appears several times in the rule, and uses the Field | in the Rule, and uses the Field Position (FP) to identify the | |||
Position (FP) to identify the correct instance, and thereby | correct instance, and thereby removing the ambiguity of the | |||
removing the ambiguity of the matching operation. | matching operation. | |||
o Field sizes defined in the CoAP protocol can be too large | o Field sizes defined in the CoAP protocol can be too large | |||
regarding LPWAN traffic constraints. This is particularly true | regarding LPWAN traffic constraints. This is particularly true | |||
for the Message ID field and the Token field. SCHC uses different | for the Message ID field and the Token field. SCHC uses different | |||
Matching operators (MO) to performs the compression, see section | Matching operators (MO) to perform the compression, see section | |||
7.4 of [I-D.ietf-lpwan-ipv6-static-context-hc]. In this case the | 7.4 of [rfc8724]. In this case the Most Significant Bits (MSB) MO | |||
Most Significant Bits (MSB) MO can be applied to reduce the | can be applied to reduce the information carried on LPWANs. | |||
information carried on LP | ||||
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 the Section 7.1 of | |||
[I-D.ietf-lpwan-ipv6-static-context-hc]. | [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 | if new versions of CoAP are 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 type of messages: two request | The CoAP Protocol [rfc7252] has four type of messages: two request | |||
(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 field SHOULD be elided if for instance a client is sending only | |||
NON or only CON messages. For the RST message a dedicated Rule may | NON or only CON messages. For the RST message a dedicated Rule may | |||
be needed. For other usages a mapping list can be used. | be needed. For other usages a mapping list can be used. | |||
4.3. CoAP code field | 4.3. CoAP code field | |||
The code field indicates the Request Method used in CoAP, a registry | The code field indicates the Request Method used in CoAP, a IANA | |||
is given in section 12.1 of [rfc7252]. The compression of the CoAP | registry [rfc7252]. The compression of the CoAP code field follows | |||
code field follows the same principle as that of the CoAP type field. | the same principle as that of the CoAP type field. If the device | |||
If the device plays a specific role, the set of code values can be | plays a specific role, the set of code values can be split in two | |||
split in two parts, the request codes with the 0 class and the | parts, the request codes with the 0 class and the response values. | |||
response values. | ||||
If the device only implements a CoAP client, the request code can be | If the device only implements a CoAP client, the request code can be | |||
reduced to the set of requests the client is able to process. | reduced to the set of requests the client is able to process. | |||
A mapping list can be used for known values, for other values the | A mapping list can be used for known values. For other values the | |||
field cannot be compressed an the value needs to be sent in the | field cannot be compressed an the value needs to be sent in the | |||
residue. | Compression 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 | The Message ID field can be compressed with the MSB(x) MO and the | |||
Least Significant Bits (LSB) CDA, see section 7.4 of | Least Significant Bits (LSB) CDA, see section 7.4 of [rfc8724]. | |||
[I-D.ietf-lpwan-ipv6-static-context-hc]. | ||||
4.5. CoAP Token fields | 4.5. CoAP Token fields | |||
Token is defined through two CoAP fields, Token Length in the | Token is defined through 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 | Token Length is processed as any protocol field. If the value does | |||
not change, the size can be stored in the TV and elided during the | not change, the size can be stored in the TV and elided during the | |||
transmission. Otherwise, it will have to be sent in the compression | transmission. Otherwise, it will have to be sent in the Compression | |||
residue. | Residue. | |||
Token Value MUST not be sent as a variable length residue to avoid | Token Value MUST NOT be sent as a variable length residue to avoid | |||
ambiguity with Token Length. Therefore, Token Length value MUST be | ambiguity with Token Length. Therefore, Token Length value MUST be | |||
used to define the size of the residue. A specific function | used to define the size of the Compression Residue. A specific | |||
designated as "TKL" MUST be used in the Rule. During the | function designated as "TKL" MUST be used in the Rule. 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 | ||||
Numbers order, see [rfc7252]. Each Option instance in a message uses | ||||
the format Delta-Type (D-T), Length (L), Value (V). When applying | ||||
SCHC compression to the Option, the D-T, L, and V format serves to | ||||
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 | ||||
uses section 7.4 of RFC8724. When the Option Length has a wellknown | ||||
size it can be stored in the Rule. Therefore, SCHC compression does | ||||
not send it. Otherwise, SCHC Compression carries the length of the | ||||
Compression Residue in addition to the Compression Residue value. | ||||
Note that length coding differs between CoAP options and SCHC | ||||
variable size Compression Residue. | ||||
The following sections present how SCHC compresses some specific CoAP | ||||
Options. | ||||
5.1. CoAP Content and Accept options. | 5.1. CoAP Content and Accept options. | |||
These fields are both unidirectional and MUST NOT be set to | These fields are both unidirectional and MUST NOT be set to | |||
bidirectional in a rule entry. | bidirectional in a Rule entry. | |||
If a single value is expected by the client, it can be stored in the | If a single value is expected by the client, it can be stored in the | |||
TV and elided during the transmission. Otherwise, if several | TV and elided during the transmission. Otherwise, if several | |||
possible values are expected by the client, a matching-list SHOULD be | possible values are expected by the client, a matching-list SHOULD be | |||
used to limit the size of the residue. Otherwise, the value has to | used to limit the size of the Compression Residue. Otherwise, the | |||
be sent as a residue (fixed or variable length). | value has to be sent as a 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 | |||
These fields are unidirectional and MUST NOT be set to bidirectional | These fields are unidirectional and MUST NOT be set to bidirectional | |||
in a rule DI entry. see section 7.1 of | in a Rule DI entry, see section 7.1 of [rfc8724]. They are used only | |||
[I-D.ietf-lpwan-ipv6-static-context-hc]. They are used only by the | by the server to inform of the caching duration and is never found in | |||
server to inform of the caching duration and is never found in client | client requests. | |||
requests. | ||||
If the duration is known by both ends, the value can be elided on the | If the duration is known by both ends, the value can be elided. | |||
LPWAN. | ||||
A matching list can be used if some well-known values are defined. | A matching list can be used if some well-known values are defined. | |||
Otherwise these options can be sent as a residue (fixed or variable | Otherwise these options can be sent as a Compression Residue (fixed | |||
length). | or variable length). | |||
5.3. CoAP option Uri-Path and Uri-Query fields | 5.3. CoAP option Uri-Path and Uri-Query fields | |||
These fields are unidirectional and MUST NOT be set to bidirectional | These fields are unidirectional and MUST NOT be set to bidirectional | |||
in a rule entry. They are used only by the client to access a | in a Rule entry. They are used only by the client to access a | |||
specific resource and are never found in server responses. | specific resource and are never found in server responses. | |||
Uri-Path and Uri-Query elements are a repeatable options, the Field | Uri-Path and Uri-Query elements are a repeatable options, the Field | |||
Position (FP) gives the position in the path. | Position (FP) gives the position in the path. | |||
A Mapping list can be used to reduce the size of variable Paths or | A Mapping list can be used to reduce the size of variable Paths or | |||
Queries. In that case, to optimize the compression, several elements | Queries. In that case, to optimize the compression, several elements | |||
can be regrouped into a single entry. Numbering of elements do not | can be regrouped into a single entry. Numbering of elements do not | |||
change, MO comparison is set with the first element of the matching. | change, MO comparison is set with the first element of the matching. | |||
+-------------+--+--+--+--------+---------+-------------+ | +-------------+---+--+--+--------+---------+-------------+ | |||
| Field |FL|FP|DI| Target | Match | CDA | | | Field |FL |FP|DI| Target | Match | CDA | | |||
| | | | | Value | Opera. | | | | | | | | Value | Opera. | | | |||
+-------------+--+--+--+--------+---------+-------------+ | +-------------+---+--+--+--------+---------+-------------+ | |||
|URI-Path | | 1|up|["/a/b",|equal |not-sent | | |URI-Path | | 1|up|["/a/b",|equal |not-sent | | |||
| | | | |"/c/d"] | | | | | | | | |"/c/d"] | | | | |||
|URI-Path | | 3|up| |ignore |value-sent | | |URI-Path |var| 3|up| |ignore |value-sent | | |||
+-------------+--+--+--+--------+---------+-------------+ | +-------------+---+--+--+--------+---------+-------------+ | |||
Figure 2: complex path example | Figure 2: complex path example | |||
In Figure 2 a single bit residue can be used to code one of the 2 | In Figure 2 a single bit residue can be used to code one of the 2 | |||
paths. If regrouping were not allowed, a 2 bits residue would be | paths. If regrouping were not allowed, a 2 bits residue would be | |||
needed. | needed. The third path element is sent as a variable size 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 the length is not known at the Rule creation, the Field Length | |||
MUST be set to variable, and the unit is set to bytes. | MUST be set to variable, and the unit is set to bytes. | |||
The MSB MO can be applied to a Uri-Path or Uri-Query element. Since | The MSB MO can be applied to a Uri-Path or Uri-Query element. Since | |||
MSB value is given in bit, the size MUST always be a multiple of 8 | MSB value is given in bit, 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 residue | |||
indicates the size of the LSB in bytes. | indicates the size of the LSB 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 can be set | |||
to: | to: | |||
+-------------+---+--+--+--------+---------+-------------+ | +-------------+---+--+--+--------+---------+-------------+ | |||
| 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 3: CORECONF URI compression | Figure 3: CORECONF URI compression | |||
Figure 3 shows the parsing and the compression of the URI, where c is | Figure 3 shows the parsing and the compression of the URI, where c is | |||
not sent. The second element is sent with the length (i.e. 0x2 X 6) | not sent. The second element is sent with the length (i.e. 0x2 X 6) | |||
followed by the query option (i.e. 0x05 "eth0"). | 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 | The number of Uri-path or Uri-Query elements in a Rule is fixed at | |||
the rule creation time. If the number varies, several rules SHOULD | the Rule creation time. If the number varies, several Rules SHOULD | |||
be created to cover all the possibilities. Another possibility is to | be created to cover all the possibilities. Another possibility is to | |||
define the length of Uri-Path to variable and send a compression | define the length of Uri-Path to variable and send 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 the 4 bits of the variable residue size. See section 7.5.2 | This adds 4 bits to the variable Residue size. See section 7.5.2 | |||
[I-D.ietf-lpwan-ipv6-static-context-hc] | [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 | |||
These fields are unidirectional and MUST NOT be set to bidirectional | These fields are unidirectional and MUST NOT be set to bidirectional | |||
in a rule DI entry, see section 7.1 of the | in a Rule DI entry, see section 7.1 of the [rfc8724]. They are used | |||
[I-D.ietf-lpwan-ipv6-static-context-hc]. They are used only by the | only by the client to access a specific resource and are never found | |||
client to access a specific resource and are never found in server | in server response. | |||
response. | ||||
If the field value has to be sent, TV is not set, MO is set to | If the field value has to be sent, TV is not set, MO is set to | |||
"ignore" and CDA is set to "value-sent". A mapping MAY also be used. | "ignore" and CDA is set to "value-sent". A mapping MAY also be used. | |||
Otherwise, the TV is set to the value, MO is set to "equal" and CDA | Otherwise, the TV is set to the value, MO is set to "equal" and CDA | |||
is set 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 are unidirectional. | These fields are unidirectional. | |||
These fields values cannot be stored in a rule entry. They MUST | These fields values cannot be stored in a Rule entry. They MUST | |||
always be sent with the compression residues. | always be sent with the Compression Residues. | |||
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 | Block [rfc7959] allows a fragmentation at the CoAP level. SCHC also | |||
includes a fragmentation protocol. They are compatible. If a block | includes a fragmentation protocol. They can be both used. If a | |||
option is used, its content MUST be sent as a compression residue. | block option is used, its content MUST be sent as a Compression | |||
Residue. | ||||
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 TV is not set, MO is | |||
set to "ignore" and the CDA is set to "value-sent". SCHC does not | set to "ignore" and the CDA is set to "value-sent". SCHC does not | |||
limit the maximum size for this option (3 bytes). To reduce the | limit the maximum size for this option (3 bytes). To reduce the | |||
transmission size, either the device implementation MAY limit the | transmission size, either the device implementation MAY limit the | |||
delta between two consecutive values, or a proxy can modify the | delta between two consecutive values, or a proxy can modify the | |||
increment. | increment. | |||
Since an RST message may be sent to inform a server that the client | Since an RST message may be sent to inform a server that the client | |||
does not require Observe response, a rule MUST allow the transmission | does not require Observe response, a Rule MUST allow the transmission | |||
of this message. | of this message. | |||
6.3. No-Response | 6.3. No-Response | |||
The [rfc7967] defines a No-Response option limiting the responses | The [rfc7967] defines a No-Response option limiting the responses | |||
made by a server to a request. If the value is known by both ends, | made by a server to a request. If the value is known by both ends, | |||
then TV is set to this value, MO is set to "equal" and CDA is set to | then TV is set to this value, MO is set to "equal" and CDA is set to | |||
"not-sent". | "not-sent". | |||
Otherwise, if the value is changing over time, TV is not set, MO is | Otherwise, if the value is changing over time, TV is not set, MO is | |||
set to "ignore" and CDA to "value-sent". A matching list can also be | set to "ignore" and CDA to "value-sent". A matching list can also be | |||
used to reduce the size. | used to reduce the size. | |||
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 | |||
skipping to change at page 12, line 8 ¶ | skipping to change at page 12, line 25 ¶ | |||
| s (if any) | kid context (if any) | kid (if any) ... | | | s (if any) | kid context (if any) | kid (if any) ... | | |||
+------------+----------------------+-----------------------+ | +------------+----------------------+-----------------------+ | |||
| | | | | | | | |||
| <------ CoAP OSCORE_kidctxt ----->|<-- CoAP OSCORE_kid -->| | | <------ CoAP OSCORE_kidctxt ----->|<-- CoAP OSCORE_kid -->| | |||
Figure 4: OSCORE Option | Figure 4: OSCORE Option | |||
The encoding of the OSCORE Option Value defined in Section 6.1 of | The encoding of the OSCORE Option Value defined in Section 6.1 of | |||
[rfc8613] is repeated in Figure 4. | [rfc8613] is repeated in Figure 4. | |||
The first byte is used for flags that specify the contents of the | The first byte specifies the content of the OSCORE options using | |||
OSCORE option. The 3 most significant bits of this byte are reserved | flags. The three most significant bits of this byte are reserved and | |||
and always set to 0. Bit h, when set, indicates the presence of the | always set to 0. Bit h, when set, indicates the presence of the kid | |||
kid context field in the option. Bit k, when set, indicates the | context field in the option. Bit k, when set, indicates the presence | |||
presence of a kid field. The 3 least significant bits n indicate the | of a kid field. The three least significant bits n indicate the | |||
length of the piv (Partial Initialization Vector) field in bytes. | length of the piv (Partial Initialization Vector) field in bytes. | |||
When n = 0, no piv is present. | When n = 0, no piv is present. | |||
The flag byte is followed by the piv field, kid context field and kid | The flag byte is followed by the piv field, kid context field, and | |||
field in this order and if present; the length of the kid context | kid field in this order, and if present, the length of the kid | |||
field is encoded in the first byte denoting by s the length of the | context field is encoded in the first byte denoting by s the length | |||
kid context in bytes. | of the kid context in bytes. | |||
This specification recommends to identify the OSCORE Option and the | ||||
fields it contains. | ||||
Conceptually, it discerns up to 4 distinct pieces of information | This specification recommends identifying the OSCORE Option and the | |||
within the OSCORE option: the flag bits, the piv, the kid context, | fields it contains Conceptually, it discerns up to 4 distinct pieces | |||
and the kid. It is thus recommended that the parser split the OSCORE | of information within the OSCORE option: the flag bits, the piv, the | |||
option into the 4 subsequent fields: | kid context, 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_kidctxt, | o CoAP OSCORE_kidctxt, | |||
o CoAP OSCORE_kid. | o CoAP OSCORE_kid. | |||
These fields are shown superimposed on the OSCORE Option format in | The OSCORE Option shows superimposed these four fields using the | |||
Figure 4, the CoAP OSCORE_kidctxt field including the size bits s. | format Figure 4, the CoAP OSCORE_kidctxt field includes the size bits | |||
Their size SHOULD be reduced using SCHC compression. | 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 LPWAN Compressor at the Network Gateway | |||
side receives from an Internet client a POST message, which is | side receives from an Internet client a POST message, which is | |||
immediately acknowledged by the Device. For this simple scenario, | immediately acknowledged by the Device. For this simple scenario, | |||
the rules are described Figure 5. | the Rules are described Figure 5. | |||
Rule ID 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 | | |bi| 01 |equal |not-sent || | | |CoAP version | | |bi| 01 |equal |not-sent || | | |||
|CoAP Type | | |dw| CON |equal |not-sent || | | |CoAP Type | | |dw| CON |equal |not-sent || | | |||
|CoAP Type | | |up|[ACK, | | || | | |CoAP Type | | |up|[ACK, | | || | | |||
| | | | | RST] |match-map|matching-sent|| T | | | | | | | RST] |match-map|matching-sent|| T | | |||
|CoAP TKL | | |bi| 0 |equal |not-sent || | | |CoAP TKL | | |bi| 0 |equal |not-sent || | | |||
|CoAP Code | | |bi|[0.00,| | || | | |CoAP Code | | |bi|[0.00,| | || | | |||
skipping to change at page 13, line 35 ¶ | skipping to change at page 13, line 48 ¶ | |||
response codes defined in [rfc7252] has been shrunk to 5 bits using a | response codes defined in [rfc7252] has been shrunk to 5 bits using a | |||
matching list. Uri-Path contains a single element indicated in the | matching list. Uri-Path contains a single element indicated in the | |||
matching operator. | matching operator. | |||
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 request sent by a client located in an Application Server | |||
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, before the core SCHC C/D can rewrite the message ID to a value | |||
matched by the rule. | matched by 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. The goal, therefore, is to hide as much of the message as | |||
possible while still enabling proxy operation. | possible 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 which is not necessary for proxy | contains sensitive information which is not necessary for proxy | |||
skipping to change at page 15, line 44 ¶ | skipping to change at page 15, line 44 ¶ | |||
+------+-------------------+ | Payload | | +------+-------------------+ | Payload | | |||
| 0xFF | | | | | 0xFF | | | | |||
+------+ +-------------------+ | +------+ +-------------------+ | |||
Figure 6: A CoAP message is split into an OSCORE outer and plaintext | Figure 6: A CoAP message is split into an OSCORE outer and plaintext | |||
Figure 6 shows the message format for the OSCORE Message and | Figure 6 shows the message format for the OSCORE Message and | |||
Plaintext. | Plaintext. | |||
In the Outer Header, the original message code is hidden and replaced | In the Outer Header, the original message code is hidden and replaced | |||
by a default dummy value. As seen in sections 4.1.3.5 and 4.2 of the | by a default dummy value. As seen in Sections 4.1.3.5 and 4.2 of the | |||
[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 Observe is not used. If Observe is used, | |||
the message code is replaced by FETCH for requests and Content for | the message code is replaced by FETCH for requests and Content for | |||
responses. | responses. | |||
The original message code is put into the first byte of the | The original message code is put into the first byte of the | |||
Plaintext. Following the message code, the class E options comes and | Plaintext. Following the message code, the class E options comes and | |||
if present the original message Payload is preceded by its payload | if present the original message Payload is preceded by its payload | |||
marker. | marker. | |||
skipping to change at page 16, line 47 ¶ | skipping to change at page 16, line 47 ¶ | |||
+----------------------------------+ | +----------------------------------+ | |||
Figure 7: OSCORE message | Figure 7: 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 8. | encryption, see Figure 8. | |||
This translates into a segmented process where SCHC compression is | This translates into a segmented process where SCHC compression is | |||
applied independently in 2 stages, each with its corresponding set of | applied independently in 2 stages, each with its corresponding set of | |||
rules, with the Inner SCHC Rules and the Outer SCHC Rules. This way | Rules, with the Inner SCHC Rules and the Outer SCHC Rules. This way | |||
compression is applied to all fields of the original CoAP message. | compression is applied to all fields of the original CoAP message. | |||
Note that since the Inner part of the message can only be decrypted | Note that since the Inner part of the message can only be decrypted | |||
by the corresponding end-point, this end-point will also have to | by the corresponding end-point, this end-point will also have to | |||
implement Inner SCHC Compression/Decompression. | implement 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 | | |||
+-+-+---+--------+---------------+....+ +-------+-----......+ | +-+-+---+--------+---------------+....+ +-------+-----......+ | |||
skipping to change at page 17, line 30 ¶ | skipping to change at page 17, line 30 ¶ | |||
+------+------------+ +-------------------+ | +------+------------+ +-------------------+ | |||
| Ciphertext |<---------\ | | | Ciphertext |<---------\ | | |||
| | | v | | | | v | |||
+-------------------+ | +-----------------+ | +-------------------+ | +-----------------+ | |||
| | | Inner SCHC | | | | | Inner SCHC | | |||
v | | Compression | | v | | Compression | | |||
+-----------------+ | +-----------------+ | +-----------------+ | +-----------------+ | |||
| Outer SCHC | | | | | Outer SCHC | | | | |||
| Compression | | v | | Compression | | v | |||
+-----------------+ | +-------+ | +-----------------+ | +-------+ | |||
| | |Rule ID| | | | |RuleID | | |||
v | +-------+--+ | v | +-------+--+ | |||
+--------+ +------------+ | Residue | | +--------+ +------------+ | Residue | | |||
|Rule ID'| | Encryption | <--- +----------+--------+ | |RuleID' | | Encryption | <--- +----------+--------+ | |||
+--------+--+ +------------+ | | | +--------+--+ +------------+ | | | |||
| Residue' | | Payload | | | Residue' | | Payload | | |||
+-----------+-------+ | | | +-----------+-------+ | | | |||
| Ciphertext | +-------------------+ | | Ciphertext | +-------------------+ | |||
| | | | | | |||
+-------------------+ | +-------------------+ | |||
Figure 8: OSCORE Compression Diagram | Figure 8: 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 | An example is given with a GET Request and its consequent Content | |||
Response from a device-based CoAP client to a cloud-based CoAP | Response from a device-based CoAP client to a cloud-based CoAP | |||
server. A possible set of rules for the Inner and Outer SCHC | server. A possible set of Rules for the Inner and Outer SCHC | |||
Compression is shown. A dump of the results and a contrast between | Compression is shown. A dump of the results and a contrast between | |||
SCHC + OSCORE performance with SCHC + COAP performance is also | SCHC + OSCORE performance with SCHC + COAP performance is also | |||
listed. This gives an approximation to the cost of security with | listed. This gives an approximation to the cost of security with | |||
SCHC-OSCORE. | SCHC-OSCORE. | |||
Our first example CoAP message is the GET Request in Figure 9 | Our first example CoAP message is the GET Request in Figure 9 | |||
Original message: | Original message: | |||
================= | ================= | |||
0x4101000182bb74656d7065726174757265 | 0x4101000182bb74656d7065726174757265 | |||
skipping to change at page 19, line 5 ¶ | skipping to change at page 19, line 5 ¶ | |||
0x82 = token | 0x82 = token | |||
0xFF Payload marker | 0xFF Payload marker | |||
Payload: | Payload: | |||
0x32332043 | 0x32332043 | |||
Original msg length: 10 | Original msg length: 10 | |||
Figure 10: CoAP CONTENT Response | Figure 10: CoAP CONTENT Response | |||
TheSCHC Rules for the Inner Compression include all fields that are | The SCHC Rules for the Inner Compression include all fields that are | |||
alreadypresent in a regular CoAP message. The methods described in | already present in a regular CoAP message. The methods described in | |||
section Section 4 applies to these fields. As an example, see | Section 4 applies to these fields. As an example, see Figure 11. | |||
Figure 11. | ||||
Rule ID 0 | RuleID 0 | |||
+---------------+--+--+-----------+-----------+-----------++------+ | +---------------+--+--+-----------+-----------+-----------++------+ | |||
| Field |FP|DI| Target | MO | CDA || Sent | | | Field |FP|DI| Target | MO | CDA || Sent | | |||
| | | | Value | | ||[bits]| | | | | | Value | | ||[bits]| | |||
+---------------+--+--+-----------+-----------+-----------++------+ | +---------------+--+--+-----------+-----------+-----------++------+ | |||
|CoAP Code | |up| 1 | equal |not-sent || | | |CoAP Code | |up| 1 | equal |not-sent || | | |||
|CoAP Code | |dw|[69,132] | match-map |match-sent || c | | |CoAP Code | |dw|[69,132] | match-map |match-sent || c | | |||
|CoAP Uri-Path | |up|temperature| equal |not-sent || | | |CoAP Uri-Path | |up|temperature| equal |not-sent || | | |||
|COAP Option-End| |dw| 0xFF | equal |not-sent || | | |COAP Option-End| |dw| 0xFF | equal |not-sent || | | |||
+---------------+--+--+-----------+-----------+-----------++------+ | +---------------+--+--+-----------+-----------+-----------++------+ | |||
Figure 11: Inner SCHC Rules | Figure 11: Inner SCHC Rules | |||
Figure 12 shows the Plaintext obtained for our example GET Request | Figure 12 shows the Plaintext obtained for our example GET Request | |||
and follows the process of Inner Compression and Encryption until we | and follows the process of Inner Compression and Encryption until we | |||
end up with the Payload to be added in the outer OSCORE Message. | end up with the Payload to be added in the outer OSCORE Message. | |||
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 Rule ID). | Plaintext can be compressed up to only 1 byte (size of the RuleID). | |||
The AEAD algorithm preserves this length in its first output, but | The AEAD algorithm preserves this length in its first output, but | |||
also yields a fixed-size tag which cannot be compressed and has to be | also yields a fixed-size tag which cannot be compressed and has to be | |||
included in the OSCORE message. This translates into an overhead in | included in the OSCORE message. This translates into an overhead in | |||
total message length, which limits the amount of compression that can | total message length, which limits the amount of compression that can | |||
be achieved and plays into the cost of adding security to the | be achieved and plays into the cost of adding security to the | |||
exchange. | exchange. | |||
________________________________________________________ | ________________________________________________________ | |||
| | | | | | |||
| OSCORE Plaintext | | | OSCORE Plaintext | | |||
skipping to change at page 20, line 28 ¶ | skipping to change at page 20, line 28 ¶ | |||
| | | | |||
| Inner SCHC Compression | | Inner SCHC Compression | |||
| | | | |||
v | v | |||
_________________________________ | _________________________________ | |||
| | | | | | |||
| Compressed Plaintext | | | Compressed Plaintext | | |||
| | | | | | |||
| 0x00 | | | 0x00 | | |||
| | | | | | |||
| Rule ID = 0x00 (1 byte) | | | RuleID = 0x00 (1 byte) | | |||
| (No residue) | | | (No residue) | | |||
|_________________________________| | |_________________________________| | |||
| | | | |||
| AEAD Encryption | | AEAD Encryption | |||
| (piv = 0x04) | | (piv = 0x04) | |||
v | v | |||
_________________________________________________ | _________________________________________________ | |||
| | | | | | |||
| encrypted_plaintext = 0xa2 (1 byte) | | | encrypted_plaintext = 0xa2 (1 byte) | | |||
skipping to change at page 21, line 32 ¶ | skipping to change at page 21, line 32 ¶ | |||
| | | | |||
| Inner SCHC Compression | | Inner SCHC Compression | |||
| | | | |||
v | v | |||
__________________________________________ | __________________________________________ | |||
| | | | | | |||
| Compressed Plaintext | | | Compressed Plaintext | | |||
| | | | | | |||
| 0x001919902180 (6 bytes) | | | 0x001919902180 (6 bytes) | | |||
| | | | | | |||
| 00 Rule ID | | | 00 RuleID | | |||
| | | | | | |||
| 0b0 (1 bit match-map residue) | | | 0b0 (1 bit match-map residue) | | |||
| 0x32332043 >> 1 (shifted payload) | | | 0x32332043 >> 1 (shifted payload) | | |||
| 0b0000000 Padding | | | 0b0000000 Padding | | |||
|__________________________________________| | |__________________________________________| | |||
| | | | |||
| AEAD Encryption | | AEAD Encryption | |||
| (piv = 0x04) | | (piv = 0x04) | |||
v | v | |||
_________________________________________________________ | _________________________________________________________ | |||
| | | | | | |||
| encrypted_plaintext = 0x10c6d7c26cc1 (6 bytes) | | | encrypted_plaintext = 0x10c6d7c26cc1 (6 bytes) | | |||
| tag = 0xe9aef3f2461e0c29 (8 bytes) | | | tag = 0xe9aef3f2461e0c29 (8 bytes) | | |||
| | | | | | |||
| ciphertext = 0x10c6d7c26cc1e9aef3f2461e0c29 (14 bytes) | | | ciphertext = 0x10c6d7c26cc1e9aef3f2461e0c29 (14 bytes) | | |||
|_________________________________________________________| | |_________________________________________________________| | |||
Figure 13: Plaintext compression and encryption for CONTENT Response | Figure 13: Plaintext compression and encryption for CONTENT Response | |||
The Outer SCHC Rules (Figure 16) MUST process the OSCORE Options | The Outer SCHC Rules (Figure 16) must process the OSCORE Options | |||
fields. In Figure 14 and Figure 15 we show a dump of the OSCORE | fields. In Figure 14 and Figure 15 we show a dump of the OSCORE | |||
Messages generated from our example messages once they have been | Messages generated from our example messages once they have been | |||
provided with the Inner Compressed Ciphertext in the payload. These | provided with the Inner Compressed Ciphertext in the payload. These | |||
are the messages that have to be compressed by the Outer SCHC | are the messages that have to be compressed by the Outer SCHC | |||
Compression. | Compression. | |||
Protected message: | Protected message: | |||
================== | ================== | |||
0x4102000182d8080904636c69656e74ffa2c54fe1b434297b62 | 0x4102000182d8080904636c69656e74ffa2c54fe1b434297b62 | |||
(25 bytes) | (25 bytes) | |||
skipping to change at page 24, line 10 ¶ | skipping to change at page 24, line 10 ¶ | |||
established. | 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 | CDA MSB. The rest of the field could have additional bits masked | |||
off, or have the whole field be fixed with MO equal and CDA not-sent. | off, or have the whole field be fixed with MO equal and CDA not-sent. | |||
The same holds for the kid field. | The same holds for the kid field. | |||
Figure 16 shows a possible set of Outer Rules to compress the Outer | Figure 16 shows a possible set of Outer Rules to compress the Outer | |||
Header. | Header. | |||
Rule ID 0 | RuleID 0 | |||
+-------------------+--+--+--------------+--------+---------++------+ | +-------------------+--+--+--------------+--------+---------++------+ | |||
| Field |FP|DI| Target | MO | CDA || Sent | | | Field |FP|DI| Target | MO | CDA || Sent | | |||
| | | | Value | | ||[bits]| | | | | | Value | | ||[bits]| | |||
+-------------------+--+--+--------------+--------+---------++------+ | +-------------------+--+--+--------------+--------+---------++------+ | |||
|CoAP version | |bi| 01 |equal |not-sent || | | |CoAP version | |bi| 01 |equal |not-sent || | | |||
|CoAP Type | |up| 0 |equal |not-sent || | | |CoAP Type | |up| 0 |equal |not-sent || | | |||
|CoAP Type | |dw| 2 |equal |not-sent || | | |CoAP Type | |dw| 2 |equal |not-sent || | | |||
|CoAP TKL | |bi| 1 |equal |not-sent || | | |CoAP TKL | |bi| 1 |equal |not-sent || | | |||
|CoAP Code | |up| 2 |equal |not-sent || | | |CoAP Code | |up| 2 |equal |not-sent || | | |||
|CoAP Code | |dw| 68 |equal |not-sent || | | |CoAP Code | |dw| 68 |equal |not-sent || | | |||
skipping to change at page 25, line 8 ¶ | skipping to change at page 25, line 8 ¶ | |||
Figure 16: Outer SCHC Rules | Figure 16: Outer SCHC Rules | |||
These Outer Rules are applied to the example GET Request and CONTENT | These Outer Rules are applied to the example GET Request and CONTENT | |||
Response. The resulting messages are shown in Figure 17 and | Response. The resulting messages are shown in Figure 17 and | |||
Figure 18. | Figure 18. | |||
Compressed message: | Compressed message: | |||
================== | ================== | |||
0x001489458a9fc3686852f6c4 (12 bytes) | 0x001489458a9fc3686852f6c4 (12 bytes) | |||
0x00 Rule ID | 0x00 RuleID | |||
1489 Compression Residue | 1489 Compression Residue | |||
458a9fc3686852f6c4 Padded payload | 458a9fc3686852f6c4 Padded payload | |||
Compression residue: | Compression Residue: | |||
0b 0001 010 0100 0100 (15 bits -> 2 bytes with padding) | 0b 0001 010 0100 0100 (15 bits -> 2 bytes with padding) | |||
mid tkn piv kid | mid tkn piv kid | |||
Payload | Payload | |||
0xa2c54fe1b434297b62 (9 bytes) | 0xa2c54fe1b434297b62 (9 bytes) | |||
Compressed message length: 12 bytes | Compressed message length: 12 bytes | |||
Figure 17: SCHC-OSCORE Compressed GET Request | Figure 17: SCHC-OSCORE Compressed GET Request | |||
Compressed message: | Compressed message: | |||
================== | ================== | |||
0x0014218daf84d983d35de7e48c3c1852 (16 bytes) | 0x0014218daf84d983d35de7e48c3c1852 (16 bytes) | |||
0x00 Rule ID | 0x00 RuleID | |||
14 Compression residue | 14 Compression Residue | |||
218daf84d983d35de7e48c3c1852 Padded payload | 218daf84d983d35de7e48c3c1852 Padded payload | |||
Compression residue: | Compression Residue: | |||
0b0001 010 (7 bits -> 1 byte with padding) | 0b0001 010 (7 bits -> 1 byte with padding) | |||
mid tkn | mid tkn | |||
Payload | Payload | |||
0x10c6d7c26cc1e9aef3f2461e0c29 (14 bytes) | 0x10c6d7c26cc1e9aef3f2461e0c29 (14 bytes) | |||
Compressed msg length: 16 bytes | Compressed msg length: 16 bytes | |||
Figure 18: SCHC-OSCORE Compressed CONTENT Response | Figure 18: SCHC-OSCORE Compressed CONTENT Response | |||
For contrast, we compare these results with what would be obtained by | For contrast, we compare these results with what would be obtained by | |||
SCHC compressing the original CoAP messages without protecting them | SCHC compressing the original CoAP messages without protecting them | |||
with OSCORE. To do this, we compress the CoAP messages according to | with OSCORE. To do this, we compress the CoAP messages according to | |||
the SCHC rules in Figure 19. | the SCHC Rules in Figure 19. | |||
Rule ID 1 | RuleID 1 | |||
+---------------+--+--+-----------+---------+-----------++--------+ | +---------------+--+--+-----------+---------+-----------++--------+ | |||
| Field |FP|DI| Target | MO | CDA || Sent | | | Field |FP|DI| Target | MO | CDA || Sent | | |||
| | | | Value | | || [bits] | | | | | | Value | | || [bits] | | |||
+---------------+--+--+-----------+---------+-----------++--------+ | +---------------+--+--+-----------+---------+-----------++--------+ | |||
|CoAP version | |bi| 01 |equal |not-sent || | | |CoAP version | |bi| 01 |equal |not-sent || | | |||
|CoAP Type | |up| 0 |equal |not-sent || | | |CoAP Type | |up| 0 |equal |not-sent || | | |||
|CoAP Type | |dw| 2 |equal |not-sent || | | |CoAP Type | |dw| 2 |equal |not-sent || | | |||
|CoAP TKL | |bi| 1 |equal |not-sent || | | |CoAP TKL | |bi| 1 |equal |not-sent || | | |||
|CoAP Code | |up| 2 |equal |not-sent || | | |CoAP Code | |up| 2 |equal |not-sent || | | |||
|CoAP Code | |dw| [69,132] |match-map|map-sent ||C | | |CoAP Code | |dw| [69,132] |match-map|map-sent ||C | | |||
skipping to change at page 26, line 30 ¶ | skipping to change at page 26, line 30 ¶ | |||
+---------------+--+--+-----------+---------+-----------++--------+ | +---------------+--+--+-----------+---------+-----------++--------+ | |||
Figure 19: SCHC-CoAP Rules (No OSCORE) | Figure 19: SCHC-CoAP Rules (No OSCORE) | |||
This yields the results in Figure 20 for the Request, and Figure 21 | This yields the results in Figure 20 for the Request, and Figure 21 | |||
for the Response. | for the Response. | |||
Compressed message: | Compressed message: | |||
================== | ================== | |||
0x0114 | 0x0114 | |||
0x01 = Rule ID | 0x01 = RuleID | |||
Compression residue: | Compression Residue: | |||
0b00010100 (1 byte) | 0b00010100 (1 byte) | |||
Compressed msg length: 2 | Compressed msg length: 2 | |||
Figure 20: CoAP GET Compressed without OSCORE | Figure 20: CoAP GET Compressed without OSCORE | |||
Compressed message: | Compressed message: | |||
================== | ================== | |||
0x010a32332043 | 0x010a32332043 | |||
0x01 = Rule ID | 0x01 = RuleID | |||
Compression residue: | Compression Residue: | |||
0b00001010 (1 byte) | 0b00001010 (1 byte) | |||
Payload | Payload | |||
0x32332043 | 0x32332043 | |||
Compressed msg length: 6 | Compressed msg length: 6 | |||
Figure 21: CoAP CONTENT Compressed without OSCORE | Figure 21: CoAP CONTENT Compressed without OSCORE | |||
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 of cost. | compared to regular SCHC + COAP is about 10 bytes of cost. | |||
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 | |||
This document does not have any more Security consideration than the | The Security Considerations of SCHC header compression RFC8724 are | |||
ones already raised on [I-D.ietf-lpwan-ipv6-static-context-hc]. | valid for SCHC CoAP header compression. When CoAP uses OSCORE, the | |||
Variable length residues may be used to compress URI elements. They | security considerations defined in RFC8613 does not change when SCHC | |||
cannot produce a packet expansion either on the LPWAN network or in | header compression is applied. | |||
the Internet network after decompression. The length send is not | ||||
used to indicate the information that should be reconstructed at the | The definition of SCHC over CoAP header fields permits the | |||
other end, but on the contrary the information sent as a Residue. | compression of header information only. The SCHC header compression | |||
Therefore, if a length is set to a high value, but the number of bits | itself does not increase or reduce the level of security in the | |||
on the SCHC packet is smaller, the packet must be dropped by the | communication. When the communication does not use any security | |||
decompressor. | 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 | ||||
SCHC corrupted packet onto the link and cause a compression | ||||
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 | ||||
fields. In the compressed header, the length sent is not the | ||||
original header field length but the length of the Residue. So if a | ||||
corrupted packet comes to the decompressor with a longer or shorter | ||||
length than the one in the original header, SCHC decompression will | ||||
detect an error and drops the packet. | ||||
OSCORE compression is also based on the same compression method | OSCORE compression is also based on the same compression method | |||
described in [I-D.ietf-lpwan-ipv6-static-context-hc]. The size of | described in [rfc8724]. The size of the Initialisation Vector (IV) | |||
the Initialisation Vector residue size must be considered carefully. | residue size must be considered carefully. A too large value has an | |||
A too large value has a impact on the compression efficiency and a | impact on the compression efficiency and a too small value will force | |||
too small value will force the device to renew its key more often. | the device to renew its key more often. This operation may be long | |||
This operation may be long and energy consuming. | and energy consuming. The size of the compressed IV MUST be choosen | |||
regarding the highest expected traffic from the device. | ||||
SCHC header and compression Rules MUST remain tightly coupled. | ||||
Otherwise, an encrypted residue may be decompressed in a different | ||||
way by the receiver. To avoid this situation, if the Rule is | ||||
modified in one location, the OSCORE keys MUST be re-established. | ||||
10. Acknowledgements | 10. Acknowledgements | |||
The authors would like to thank Dominique Barthel, Carsten Bormann, | The authors would like to thank (in alphabetic order): Christian | |||
Thomas Fossati, Klaus Hartke, Francesca Palombini, Alexander Pelov, | Amsuss, Dominique Barthel, Carsten Bormann, Theresa Enghardt, Thomas | |||
Goran Selander. | Fossati, Klaus Hartke, Francesca Palombini, Alexander Pelov and Goran | |||
Selander. | ||||
11. Normative References | 11. Normative References | |||
[I-D.ietf-lpwan-ipv6-static-context-hc] | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Minaburo, A., Toutain, L., Gomez, C., Barthel, D., and J. | ||||
Zuniga, "Static Context Header Compression (SCHC) and | ||||
fragmentation for LPWAN, application to UDP/IPv6", draft- | ||||
ietf-lpwan-ipv6-static-context-hc-24 (work in progress), | ||||
December 2019. | ||||
[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>. | |||
[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 | |||
skipping to change at page 29, line 5 ¶ | skipping to change at page 29, line 19 ¶ | |||
[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. | ||||
Zuniga, "SCHC: Generic Framework for Static Context Header | ||||
Compression and Fragmentation", RFC 8724, | ||||
DOI 10.17487/RFC8724, April 2020, | ||||
<https://www.rfc-editor.org/info/rfc8724>. | ||||
Appendix A. Extension to the RFC8724 Annex D. | ||||
This section extends the RFC8724 Annex D list. | ||||
o How to establish the End-to-End context initialization using SCHC | ||||
for CoAP header only. | ||||
Authors' Addresses | Authors' Addresses | |||
Ana Minaburo | Ana Minaburo | |||
Acklio | Acklio | |||
1137A avenue des Champs Blancs | 1137A avenue des Champs Blancs | |||
35510 Cesson-Sevigne Cedex | 35510 Cesson-Sevigne Cedex | |||
France | France | |||
Email: ana@ackl.io | Email: ana@ackl.io | |||
End of changes. 104 change blocks. | ||||
277 lines changed or deleted | 320 lines changed or added | |||
This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |