| < draft-ietf-lpwan-coap-static-context-hc-08.txt | draft-ietf-lpwan-coap-static-context-hc-09.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: November 30, 2019 Institut MINES TELECOM; IMT Atlantique | Expires: January 7, 2020 Institut MINES TELECOM; IMT Atlantique | |||
| R. Andreasen | R. Andreasen | |||
| Universidad de Buenos Aires | Universidad de Buenos Aires | |||
| May 29, 2019 | July 06, 2019 | |||
| LPWAN Static Context Header Compression (SCHC) for CoAP | LPWAN Static Context Header Compression (SCHC) for CoAP | |||
| draft-ietf-lpwan-coap-static-context-hc-08 | draft-ietf-lpwan-coap-static-context-hc-09 | |||
| Abstract | Abstract | |||
| This draft defines the way SCHC header compression can be applied to | This draft defines the way SCHC header compression can be applied to | |||
| CoAP headers. The CoAP header structure differs from IPv6 and UDP | CoAP headers. The CoAP header structure differs from IPv6 and UDP | |||
| protocols since CoAP | protocols since CoAP uses a flexible header with a variable number of | |||
| uses a flexible header with a variable number of options themselves | options, themselves of variable length. The CoAP protocol is | |||
| of variable length. The CoAP protocol is asymmetric in its message | asymmetric in its message format: the format of the packet header in | |||
| format, the format of the header packet in the request messages is | the request messages is different from that in the response messages. | |||
| different from that in the response messages. Most of the | Most of the compression mechanisms have been introduced in | |||
| compression mechanisms have been introduced in | ||||
| [I-D.ietf-lpwan-ipv6-static-context-hc], this document explains how | [I-D.ietf-lpwan-ipv6-static-context-hc], this document explains how | |||
| to use the SCHC compression for CoAP. | to use the SCHC compression for CoAP. | |||
| 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 November 30, 2019. | This Internet-Draft will expire on January 7, 2020. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2019 IETF Trust and the persons identified as the | Copyright (c) 2019 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 | |||
| skipping to change at page 2, line 28 ¶ | skipping to change at page 2, line 25 ¶ | |||
| 2. SCHC Compression Process . . . . . . . . . . . . . . . . . . 3 | 2. SCHC Compression Process . . . . . . . . . . . . . . . . . . 3 | |||
| 3. CoAP Compression with SCHC . . . . . . . . . . . . . . . . . 4 | 3. CoAP Compression with SCHC . . . . . . . . . . . . . . . . . 4 | |||
| 4. Compression of CoAP header fields . . . . . . . . . . . . . . 6 | 4. Compression of CoAP header fields . . . . . . . . . . . . . . 6 | |||
| 4.1. CoAP version field . . . . . . . . . . . . . . . . . . . 6 | 4.1. CoAP version field . . . . . . . . . . . . . . . . . . . 6 | |||
| 4.2. CoAP type field . . . . . . . . . . . . . . . . . . . . . 6 | 4.2. CoAP type field . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 4.3. CoAP code field . . . . . . . . . . . . . . . . . . . . . 6 | 4.3. CoAP code field . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 4.4. CoAP Message ID field . . . . . . . . . . . . . . . . . . 6 | 4.4. CoAP Message ID field . . . . . . . . . . . . . . . . . . 6 | |||
| 4.5. CoAP Token fields . . . . . . . . . . . . . . . . . . . . 7 | 4.5. CoAP Token fields . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5. CoAP options . . . . . . . . . . . . . . . . . . . . . . . . 7 | 5. CoAP options . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5.1. CoAP Content and Accept options. . . . . . . . . . . . . 7 | 5.1. CoAP Content and Accept options. . . . . . . . . . . . . 7 | |||
| 5.2. CoAP option Max-Age field, CoAP option Uri-Host and Uri- | 5.2. CoAP option Max-Age, Uri-Host and Uri-Port fields . . . . 7 | |||
| Port fields . . . . . . . . . . . . . . . . . . . . . . . 8 | ||||
| 5.3. CoAP option Uri-Path and Uri-Query fields . . . . . . . . 8 | 5.3. CoAP option Uri-Path and Uri-Query fields . . . . . . . . 8 | |||
| 5.3.1. Variable length Uri-Path and Uri-Query . . . . . . . 8 | 5.3.1. Variable length Uri-Path and Uri-Query . . . . . . . 8 | |||
| 5.3.2. Variable number of path or query elements . . . . . . 9 | 5.3.2. Variable number of path or query elements . . . . . . 9 | |||
| 5.4. CoAP option Size1, Size2, Proxy-URI and Proxy-Scheme | 5.4. CoAP option Size1, Size2, Proxy-URI and Proxy-Scheme | |||
| fields . . . . . . . . . . . . . . . . . . . . . . . . . 9 | fields . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 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 . . . . . . . . . . . . . . . . 9 | and Location-Query fields . . . . . . . . . . . . . . . . 9 | |||
| 6. Other RFCs . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 6. Other RFCs . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 6.1. Block . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 6.1. Block . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 6.2. Observe . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 6.2. Observe . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 6.3. No-Response . . . . . . . . . . . . . . . . . . . . . . . 10 | 6.3. No-Response . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 6.4. Time Scale . . . . . . . . . . . . . . . . . . . . . . . 10 | 6.4. OSCORE . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 6.5. OSCORE . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 7. Examples of CoAP header compression . . . . . . . . . . . . . 11 | |||
| 7. Examples of CoAP header compression . . . . . . . . . . . . . 12 | 7.1. Mandatory header with CON message . . . . . . . . . . . . 11 | |||
| 7.1. Mandatory header with CON message . . . . . . . . . . . . 12 | 7.2. OSCORE Compression . . . . . . . . . . . . . . . . . . . 12 | |||
| 7.2. OSCORE Compression . . . . . . . . . . . . . . . . . . . 13 | 7.3. Example OSCORE Compression . . . . . . . . . . . . . . . 16 | |||
| 7.3. Example OSCORE Compression . . . . . . . . . . . . . . . 17 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 26 | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 27 | 9. Security considerations . . . . . . . . . . . . . . . . . . . 26 | |||
| 9. Security considerations . . . . . . . . . . . . . . . . . . . 27 | 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 26 | |||
| 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 27 | 11. Normative References . . . . . . . . . . . . . . . . . . . . 26 | |||
| 11. Normative References . . . . . . . . . . . . . . . . . . . . 27 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 27 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 28 | ||||
| 1. Introduction | 1. Introduction | |||
| CoAP [rfc7252] is an implementation of the REST architecture for | CoAP [rfc7252] is an implementation of the REST architecture for | |||
| constrained devices. Although CoAP was designed for constrained | constrained devices. Although CoAP was designed for constrained | |||
| devices, the size of a CoAP header may still be too large for LPWAN | devices, the size of a CoAP header may still be too large for the | |||
| constraints and some compression may be needed to reduce the header | constraints of Low Power Wide Area Networks (LPWAN) and some | |||
| size. | compression may be needed to reduce the header size. | |||
| [I-D.ietf-lpwan-ipv6-static-context-hc] defines a header compression | [I-D.ietf-lpwan-ipv6-static-context-hc] defines a header compression | |||
| mechanism for LPWAN network based on a static context. The context | mechanism for LPWAN network based on a static context. The context | |||
| is said static since the field description composing the Rules are | is said static since the field description composing the Rules are | |||
| not learned during the packet exchanges but are previously defined. | not learned during the packet exchanges but are previously defined. | |||
| The context(s) is(are) known by both ends before transmission. | The context(s) is(are) known by both ends before transmission. | |||
| A context is composed of a set of rules that are referenced by Rule | A context is composed of a set of rules that are referenced by Rule | |||
| IDs (identifiers). A rule contains an ordered list of the fields | IDs (identifiers). A rule contains an ordered list of the fields | |||
| descriptions containing a field ID (FID), its length (FL) and its | descriptions containing a field ID (FID), its length (FL) and its | |||
| position (FP), a direction indicator (DI) (upstream, downstream and | position (FP), a direction indicator (DI) (upstream, downstream and | |||
| bidirectional) and some associated Target Values (TV). Target Value | bidirectional) and some associated Target Values (TV). Target Value | |||
| indicates the value that can be expected. TV can also be a list of | indicates the value that can be expected. TV can also be a list of | |||
| values. A Matching Operator (MO) is associated to each header field | values. 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. In that case, a Compression/Decompression Action (CDA) | fields of the incoming packet. In that case, a Compression/ | |||
| associated to each field defines the link between the compressed and | Decompression Action (CDA) associated to each field defines how the | |||
| decompressed value for each of the header fields. Compression | compressed and the decompressed values are computed out of each | |||
| results mainly in 4 actions: send the field value, send nothing, send | other, for each of the header fields. Compression mainly results in | |||
| less significant bits of a field, send an index. Values sent are | one of 4 actions: send the field value, send nothing, send some least | |||
| called Compression Residues and follows the rule ID. | significant bits of the field or send an index. Values sent are | |||
| called Compression Residues and follow the rule ID in the transmitted | ||||
| message. | ||||
| The compression rules define a generic way to compress and decompress | ||||
| the fields. If the device is modified, for example, to introduce new | ||||
| functionalities or new CoAP options, the rules must be updated to | ||||
| reflect the evolution. There is no risk to lock a device in a | ||||
| particular version of CoAP. | ||||
| 2. SCHC Compression Process | 2. SCHC Compression Process | |||
| The SCHC Compression rules can be applied to CoAP flows. SCHC | The SCHC Compression rules can be applied to CoAP flows. 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 | |||
| above layers (IPv6/UDP) or independently. The SCHC adaptation layers | lower layers (IPv6/UDP) or independently. The SCHC adaptation layers | |||
| as described in [I-D.ietf-lpwan-ipv6-static-context-hc] may be used | as described in [I-D.ietf-lpwan-ipv6-static-context-hc] may be used | |||
| as shown in Figure 1. | as shown in 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 architecture and the SCHC | |||
| rule's scope. A rule can cover all headers from IPv6 to CoAP, in | rule's scope. | |||
| which case SCHC C/D is performed at the device and at the LPWAN | ||||
| boundary. If an end-to-end encryption mechanisms is used between the | In the first example, a rule compresses all headers from IPv6 to | |||
| device and the application, CoAP MAY be compressed independently of | CoAP. In this case, SCHC C/D is performed at the device and at the | |||
| the other layers. The rule ID and the compression residue are | LPWAN boundary. | |||
| encrypted using a mechanism such as DTLS. Only the other end can | ||||
| decipher the information. | In the second example, an end-to-end encryption mechanisms is used | |||
| between the device and the application. CoAP is compressed | ||||
| independently of the other layers. The rule ID and the compression | ||||
| residue are encrypted using a mechanism such as DTLS. Only the other | ||||
| end can decipher the information. | ||||
| Layers below may also be compressed using other SCHC rules (this is | Layers below may also be compressed using other SCHC rules (this is | |||
| out of the scope of this document). OSCORE | out of the scope of this document). | |||
| [I-D.ietf-core-object-security] can also define 2 rules to compress | ||||
| the CoAP message. A first rule focuses on the inner header and is | In the third example, OSCORE [I-D.ietf-core-object-security] is used. | |||
| end to end, a second rule may compress the outer header and the | 2 rulesets are used to compress the CoAP message. A first ruleset | |||
| layers below. SCHC C/D for inner header is done by both ends, SCHC | focuses on the inner header and is end to end, a second ruleset | |||
| C/D for outer header and other headers is done between the device and | compresses the outer header and the layers below. SCHC C/D for inner | |||
| the LPWAN boundary. | header is done by both ends, and SCHC C/D for outer header and other | |||
| headers is done between the device and the LPWAN boundary. | ||||
| 3. CoAP Compression with SCHC | 3. CoAP Compression with SCHC | |||
| CoAP differs from IPv6 and UDP protocols on the following aspects: | CoAP differs from IPv6 and UDP protocols on the following aspects: | |||
| o IPv6 and UDP are symmetrical protocols. The same fields are found | o IPv6 and UDP are symmetrical protocols. The same fields are found | |||
| in the request and in the response, only the location in the | in the request and in the response, with the value of some fields | |||
| header may vary (e.g. source and destination fields). A CoAP | being swapped on the return path (e.g. source and destination | |||
| request is different from a response. For example, the URI-path | fields). A CoAP request is intrinsically different from a | |||
| option is mandatory in the request and is not found in the | response. For example, the URI-path option is mandatory in the | |||
| response, a request may contain an Accept option and the response | request and is not found in the response, a request may contain an | |||
| a Content option. | Accept option and the response a Content option. | |||
| [I-D.ietf-lpwan-ipv6-static-context-hc] defines the use of a | [I-D.ietf-lpwan-ipv6-static-context-hc] defines the use of a | |||
| message direction (DI) in the Field Description, which allows a | message direction (DI) in the Field Description, which allows a | |||
| single Rule to process message headers differently in both | single Rule to process message headers differently depending of | |||
| directions. | 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. Combined with | the values carried in each direction are different. Combined with | |||
| a matching list in the TV, this allows reducing the range of | a matching list in the TV, this allows reducing the range of | |||
| expected values in a particular direction and therefore reduce the | expected values in a particular direction and therefore reduce the | |||
| size of the compression residue. For instance, if a client sends | size of the compression residue. For instance, if a client sends | |||
| only CON request, the type can be elided by compression and the | only CON request, the type can be elided by compression and the | |||
| answer may use one single bit to carry either the ACK or RST type. | answer may use one single bit to carry either the ACK or RST type. | |||
| The same behavior can be applied to the CoAP Code field (0.0X code | The same behavior can be applied to the CoAP Code field (0.0X code | |||
| are present in the request and Y.ZZ in the answer). The direction | are present in the request and Y.ZZ in the answer). The direction | |||
| skipping to change at page 5, line 25 ¶ | skipping to change at page 5, line 30 ¶ | |||
| direction. | direction. | |||
| o In IPv6 and UDP, header fields have a fixed size. In CoAP, Token | o In IPv6 and UDP, header fields have a fixed size. In CoAP, Token | |||
| size may vary from 0 to 8 bytes, the length being given by a field | size may vary from 0 to 8 bytes, the length being given by a field | |||
| in the header. More systematically, the CoAP options are | in the header. More systematically, the CoAP options are | |||
| described using the Type-Length-Value. | described using the Type-Length-Value. | |||
| [I-D.ietf-lpwan-ipv6-static-context-hc] offers the possibility to | [I-D.ietf-lpwan-ipv6-static-context-hc] offers the possibility to | |||
| define a function for the Field Length in the Field Description. | define a function for the Field Length in the Field Description. | |||
| o In CoAP headers, a field can be present several times. This is | o In CoAP headers, a field can appear several times. This is | |||
| typical for elements of an URI (path or queries). The position | typical for elements of a URI (path or queries). | |||
| defined in a rule, associated to a Field ID, can be used to | ||||
| identify the proper instance. | ||||
| [I-D.ietf-lpwan-ipv6-static-context-hc] allows a Field ID to | [I-D.ietf-lpwan-ipv6-static-context-hc] allows a Field ID to | |||
| appears several times in the rule, the Field Position (FP) removes | appears several times in the rule, the Field Position (FP) | |||
| ambiguities for the matching operation. | identifies the proper instance, thereby removing the ambiguity of | |||
| the 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 or Token field. The MSB MO can be used | for the message ID field or Token field. The MSB MO can be used | |||
| to reduce the information carried on LPWANs. | to reduce the information carried on LPWANs. | |||
| o CoAP also obeys the client/server paradigm and the compression | o CoAP also obeys the client/server paradigm and the compression | |||
| ratio can be different if the request is issued from an LPWAN | ratio can be different if the request is issued from an LPWAN | |||
| device or from an non LPWAN device. For instance a Device (Dev) | device or from a non LPWAN device. For instance a Device (Dev) | |||
| aware of LPWAN constraints can generate a 1 byte token, but a | aware of LPWAN constraints can generate a 1 byte token, but a | |||
| regular CoAP client will certainly send a larger token to the Dev. | regular CoAP client will certainly send a larger token to the Dev. | |||
| SCHC compression will not modify the values to offer a better | The SCHC compression-decompression process does not modify the | |||
| compression rate. Nevertheless, a proxy placed before the | values. Nevertheless, a proxy placed before the compressor may | |||
| compressor may change some field values to offer a better | change some field values to allow SCHC achieving a better | |||
| compression ratio and maintain the necessary context for | compression ratio, while maintaining the necessary context for | |||
| interoperability with existing CoAP implementations. | interoperability with existing CoAP implementations. | |||
| 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. | fields. | |||
| 4.1. CoAP version field | 4.1. CoAP version field | |||
| This field is bidirectional and MUST be elided during the SCHC | This field 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 defined to | if new versions of CoAP are defined, new rules will be defined to | |||
| avoid ambiguities between versions. | avoid ambiguities between versions. | |||
| 4.2. CoAP type field | 4.2. CoAP type field | |||
| [rfc7252] defines 4 types of messages: CON, NON, ACK and RST. The | [rfc7252] defines 4 types of messages: CON, NON, ACK and RST. The | |||
| last two are a response to the first two. If the device plays a | last two are a response to the first two. If the device plays a | |||
| specific role, a rule can exploit these properties with the mapping | specific client or server role, a rule can exploit these properties | |||
| list: [CON, NON] for one direction and [ACK, RST] for the other | with the mapping list: [CON, NON] for one direction and [ACK, RST] | |||
| direction. Compression residue is reduced to 1 bit. | for the other direction. The compression residue is reduced to 1 | |||
| bit. | ||||
| 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 CON messages. | NON or only CON messages. | |||
| In any case, a rule MUST be defined to carry RST to a client. | In any case, a rule MUST be defined to carry RST to a client. | |||
| 4.3. CoAP code field | 4.3. CoAP code field | |||
| The compression of the CoAP code field follows the same principle as | The compression of the CoAP code field follows the same principle as | |||
| for the CoAP type field. If the device plays a specific role, the | that of the CoAP type field. If the device plays a specific role, | |||
| set of code values can be split in two parts, the request codes with | the set of code values can be split in two parts, the request codes | |||
| the 0 class and the response values. | with the 0 class and the 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. | |||
| All the response codes MUST be compressed with a SCHC rule. | All the response codes MUST be compressed with a SCHC rule. | |||
| 4.4. CoAP Message ID field | 4.4. CoAP Message ID field | |||
| This field is bidirectional and is used to manage acknowledgments. | This field is bidirectional and is used to manage acknowledgments. | |||
| The server memorizes the value for a EXCHANGE_LIFETIME period (by | The server memorizes the value for a EXCHANGE_LIFETIME period (by | |||
| skipping to change at page 8, line 5 ¶ | skipping to change at page 7, line 48 ¶ | |||
| 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. If is not possible, the value | used to limit the size of the residue. If is not possible, the value | |||
| has to be sent as a residue (fixed or variable length). | has to be sent as a residue (fixed or variable length). | |||
| 5.2. CoAP option Max-Age field, CoAP option Uri-Host and Uri-Port | 5.2. CoAP option Max-Age, Uri-Host and Uri-Port fields | |||
| fields | ||||
| These fields is unidirectional and MUST NOT be set to bidirectional | These fields are unidirectional and MUST NOT be set to bidirectional | |||
| in a rule entry. It is used only by the server to inform of the | in a rule entry. They are used only by the server to inform of the | |||
| caching duration and is never found in client requests. | caching duration and is never found in client 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 on the | |||
| LPWAN. | 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 SHOULD be sent as a residue (fixed or | Otherwise these options SHOULD be sent as a residue (fixed or | |||
| variable length). | variable length). | |||
| skipping to change at page 10, line 37 ¶ | skipping to change at page 10, line 29 ¶ | |||
| [rfc7967] defines a No-Response option limiting the responses made by | [rfc7967] defines a No-Response option limiting the responses made by | |||
| a server to a request. If the value is known by both ends, then TV | 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 "not- | is set to this value, MO is set to "equal" and CDA is set to "not- | |||
| sent". | 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. Time Scale | 6.4. OSCORE | |||
| The time scale [I-D.toutain-core-time-scale] option allows a client | ||||
| to inform the server that it is in a constrained network and that | ||||
| message ID MUST be kept for a duration given by the option. | ||||
| 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 "not-sent". | ||||
| 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 | ||||
| used to reduce the size. | ||||
| 6.5. OSCORE | ||||
| OSCORE [I-D.ietf-core-object-security] defines end-to-end protection | OSCORE [I-D.ietf-core-object-security] defines end-to-end protection | |||
| for CoAP messages. This section describes how SCHC rules can be | for CoAP messages. This section describes how SCHC rules can be | |||
| applied to compress OSCORE-protected messages. | applied to compress 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) ... | |||
| +-+-+-+-+-+-+-+-+--------------------------------- | +-+-+-+-+-+-+-+-+--------------------------------- | |||
| | | | | | | | | |||
| skipping to change at page 12, line 4 ¶ | skipping to change at page 11, line 29 ¶ | |||
| This draft recommends to implement a parser that is able to identify | This draft recommends to implement a parser that is able to identify | |||
| the OSCORE Option and the fields it contains. | the OSCORE Option and the fields it contains. | |||
| Conceptually, it discerns up to 4 distinct pieces of information | Conceptually, it discerns up to 4 distinct pieces of information | |||
| within the OSCORE option: the flag bits, the piv, the kid context, | within the OSCORE option: the flag bits, the piv, the kid context, | |||
| and the kid. It is thus recommended that the parser split the OSCORE | and the kid. It is thus recommended that the parser split the OSCORE | |||
| option into the 4 subsequent fields: | option into the 4 subsequent fields: | |||
| 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 | These fields are shown superimposed on the OSCORE Option format in | |||
| Figure 4, the CoAP OSCORE_kidctxt field including the size bits s. | Figure 4, the CoAP OSCORE_kidctxt field including the size bits s. | |||
| Their size SHOULD be reduced using the MSB matching operator. | Their size SHOULD be reduced using SCHC compression. | |||
| 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 a client on the Internet a POST message, which is | side receives from a client on the Internet 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 | Rule ID 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 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| ML1 |match-map|matching-sent|| CC CCC | | |CoAP Code | | |bi|[0.00,| | || | | |||
| |CoAP MID | | |bi| 0000 |MSB(7 ) |LSB(9) || M-ID| | | | | | | ... | | || | | |||
| | | | | | 5.05]|match-map|matching-sent|| CC CCC | | ||||
| |CoAP MID | | |bi| 0000 |MSB(7 ) |LSB || M-ID| | ||||
| |CoAP Uri-Path| | |dw| path |equal 1 |not-sent || | | |CoAP Uri-Path| | |dw| path |equal 1 |not-sent || | | |||
| +-------------+--+--+--+------+---------+-------------++------------+ | +-------------+--+--+--+------+---------+-------------++------------+ | |||
| Figure 5: CoAP Context to compress header without token | Figure 5: CoAP Context to compress header without token | |||
| The version and Token Length fields are elided. Code has shrunk to 5 | The version and Token Length fields are elided. The 26 method and | |||
| bits using a matching list. Uri-Path contains a single element | response codes defined in [rfc7252] has been shrunk to 5 bits using a | |||
| indicated in the matching operator. | matching list. Uri-Path contains a single element indicated in the | |||
| matching operator. | ||||
| Figure 6 shows the time diagram of the exchange. A client in the | ||||
| Application Server sends a CON request. It can go through a proxy | ||||
| which reduces the message ID to a smallest value, with at least the 9 | ||||
| most significant bits equal to 0. SCHC Compression reduces the | ||||
| header sending only the Type, a mapped code and the least 9 | ||||
| significant bits of Message ID. | ||||
| Device LPWAN SCHC C/D | SCHC Compression reduces the header sending only the Type, a mapped | |||
| | | | code and the least significant bits of Message ID (9 bits in the | |||
| | rule id=1 |<-------------------- | example above). | |||
| |<-------------------| +-+-+--+----+------+ | ||||
| <------------------- | CCCCCMMMMMMMMM | |1|0| 4|0.01|0x0034| | ||||
| +-+-+--+----+-------+ | 00001000110100 | | 0xb4 p a t| | ||||
| |1|0| 1|0.01|0x0034 | | | | h | | ||||
| | 0xb4 p a t | | | +------+ | ||||
| | h | | | | ||||
| +------+ | | | ||||
| | | | ||||
| | | | ||||
| ---------------------->| rule id=1 | | ||||
| +-+-+--+----+--------+ |------------------->| | ||||
| |1|2| 0|2.05| 0x0034 | | TCCCCCMMMMMMMMM |---------------------> | ||||
| +-+-+--+----+--------+ | 001100000110100 | +-+-+--+----+------+ | ||||
| | | |1|2| 0|2.05|0x0034| | ||||
| v v +-+-+--+----+------+ | ||||
| Figure 6: Compression with global addresses | Note that a request sent by a client located an Application Server to | |||
| a server in the device, may not be compressed through this 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 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 sensible information which is not necessary for proxy | contains sensible information which is not necessary for proxy | |||
| operation. This, in turn, is the part of the message which can be | operation. This, in turn, is the part of the message which can be | |||
| encrypted until it reaches its end destination. The Outer Message | encrypted until it reaches its end destination. The Outer Message | |||
| acts as a shell matching the format of a regular CoAP message, and | acts as a shell matching the format of a regular CoAP message, and | |||
| includes all Options and information needed for proxy operation and | includes all Options and information needed for proxy operation and | |||
| caching. This decomposition is illustrated in Figure 7. | caching. This decomposition is illustrated in Figure 6. | |||
| CoAP options are sorted into one of 3 classes, each granted a | CoAP options are sorted into one of 3 classes, each granted a | |||
| specific type of protection by the protocol: | 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, | |||
| skipping to change at page 14, line 44 ¶ | skipping to change at page 14, line 38 ¶ | |||
| +-+-+---+--------+---------------+....+ +-------+-----......+ | +-+-+---+--------+---------------+....+ +-------+-----......+ | |||
| | Token | | Options (E) | | | Token | | Options (E) | | |||
| +--------------------------------.....+ +-------+------.....+ | +--------------------------------.....+ +-------+------.....+ | |||
| | Options (IU) | | OxFF | | | Options (IU) | | OxFF | | |||
| . . +-------+-----------+ | . . +-------+-----------+ | |||
| . OSCORE Option . | | | . OSCORE Option . | | | |||
| +------+-------------------+ | Payload | | +------+-------------------+ | Payload | | |||
| | 0xFF | | | | | 0xFF | | | | |||
| +------+ +-------------------+ | +------+ +-------------------+ | |||
| Figure 7: OSCORE inner and outer header form a CoAP message | Figure 6: A CoAP message is split into an OSCORE outer and plaintext | |||
| Figure 7 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 | by a default dummy value. As seen in sections 4.1.3.5 and 4.2 of | |||
| [I-D.ietf-core-object-security], the message code is replaced by POST | [I-D.ietf-core-object-security], the message code is replaced by POST | |||
| for requests and Changed for responses when Observe is not used. If | for requests and Changed for responses when Observe is not used. If | |||
| Observe is used, the message code is replaced by FETCH for requests | Observe is used, the message code is replaced by FETCH for requests | |||
| and Content for responses. | and Content for 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. | |||
| The Plaintext is now encrypted by an AEAD algorithm which integrity | The Plaintext is now encrypted by an AEAD algorithm which integrity | |||
| protects Security Context parameters and eventually any class I | protects Security Context parameters and eventually any class I | |||
| options from the Outer Header. Currently no CoAP options are marked | options from the Outer Header. Currently no CoAP options are marked | |||
| class I. The resulting Ciphertext becomes the new Payload of the | class I. The resulting Ciphertext becomes the new Payload of the | |||
| OSCORE message, as illustrated in Figure 8. | OSCORE message, as illustrated in Figure 7. | |||
| This Ciphertext is, as defined in RFC 5116, the concatenation of the | This Ciphertext is, as defined in RFC 5116, the concatenation of the | |||
| encrypted Plaintext and its authentication tag. Note that Inner | encrypted Plaintext and its authentication tag. Note that Inner | |||
| Compression only affects the Plaintext before encryption, thus we can | Compression only affects the Plaintext before encryption, thus we can | |||
| only aim to reduce this first, variable length component of the | only aim to reduce this first, variable length component of the | |||
| Ciphertext. The authentication tag is fixed in length and considered | Ciphertext. The authentication tag is fixed in length and considered | |||
| part of the cost of protection. | part of the cost of 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 | | |||
| +------+-------------------------+ | +------+---------------------------+ | |||
| | | | | | | |||
| | Encrypted Inner Header and | | | Ciphertext: Encrypted Inner | | |||
| | Payload | | | Header and Payload | | |||
| | | | | + Authentication Tag | | |||
| +--------------------------------+ | | | | |||
| +----------------------------------+ | ||||
| Figure 8: 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 9. | 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. | |||
| skipping to change at page 16, line 50 ¶ | skipping to change at page 16, line 41 ¶ | |||
| v | +-------+--+ | v | +-------+--+ | |||
| +--------+ +------------+ | Residue | | +--------+ +------------+ | Residue | | |||
| |Rule ID'| | Encryption | <--- +----------+--------+ | |Rule ID'| | Encryption | <--- +----------+--------+ | |||
| +--------+--+ +------------+ | | | +--------+--+ +------------+ | | | |||
| | Residue' | | Payload | | | Residue' | | Payload | | |||
| +-----------+-------+ | | | +-----------+-------+ | | | |||
| | Ciphertext | +-------------------+ | | Ciphertext | +-------------------+ | |||
| | | | | | | |||
| +-------------------+ | +-------------------+ | |||
| Figure 9: 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. A possible set of rules for the Inner and Outer SCHC | Response from a device-based CoAP client to a cloud-based CoAP | |||
| 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 10 | Our first example CoAP message is the GET Request in Figure 9 | |||
| Original message: | Original message: | |||
| ================= | ================= | |||
| 0x4101000182bb74656d7065726174757265 | 0x4101000182bb74656d7065726174757265 | |||
| Header: | Header: | |||
| 0x4101 | 0x4101 | |||
| 01 Ver | 01 Ver | |||
| 00 CON | 00 CON | |||
| 0001 tkl | 0001 tkl | |||
| skipping to change at page 17, line 37 ¶ | skipping to change at page 17, line 28 ¶ | |||
| 0x0001 = mid | 0x0001 = mid | |||
| 0x82 = token | 0x82 = token | |||
| Options: | Options: | |||
| 0xbb74656d7065726174757265 | 0xbb74656d7065726174757265 | |||
| Option 11: URI_PATH | Option 11: URI_PATH | |||
| Value = temperature | Value = temperature | |||
| Original msg length: 17 bytes. | Original msg length: 17 bytes. | |||
| Figure 10: CoAP GET Request | Figure 9: CoAP GET Request | |||
| Its corresponding response is the CONTENT Response in Figure 11. | Its corresponding response is the CONTENT Response in Figure 10. | |||
| Original message: | Original message: | |||
| ================= | ================= | |||
| 0x6145000182ff32332043 | 0x6145000182ff32332043 | |||
| Header: | Header: | |||
| 0x6145 | 0x6145 | |||
| 01 Ver | 01 Ver | |||
| 10 ACK | 10 ACK | |||
| 0001 tkl | 0001 tkl | |||
| skipping to change at page 18, line 25 ¶ | skipping to change at page 17, line 52 ¶ | |||
| 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 11: CoAP CONTENT Response | Figure 10: CoAP CONTENT Response | |||
| The SCHC Rules for the Inner Compression include all fields that are | The SCHC Rules for the Inner Compression include all fields that are | |||
| already present in a regular CoAP message, what is important is the | already present in a regular CoAP message, what is important is the | |||
| order of appearance and inclusion of only those CoAP fields that go | order of appearance and inclusion of only those CoAP fields that go | |||
| into the Plaintext, Figure 12. | into the Plaintext, Figure 11. | |||
| Rule ID 0 | Rule ID 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 12: Inner SCHC Rules | Figure 11: Inner SCHC Rules | |||
| Figure 13 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 Rule ID). | |||
| 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 | |||
| skipping to change at page 19, line 48 ¶ | skipping to change at page 19, line 44 ¶ | |||
| | (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 13: Plaintext compression and encryption for GET Request | Figure 12: Plaintext compression and encryption for GET Request | |||
| In Figure 14 we repeat the process for the example CONTENT Response. | In Figure 13 we repeat the process for the example CONTENT Response. | |||
| In this case the misalignment produced by the compression residue (1 | In this case the misalignment produced by the compression residue (1 | |||
| bit) makes it so that 7 bits of padding have to be applied after the | bit) makes it so that 7 bits of padding have to be applied after the | |||
| payload, resulting in a compressed Plaintext that is the same size as | payload, resulting in a compressed Plaintext that is the same size as | |||
| before compression. This misalignment also causes the hexcode from | before compression. This misalignment also causes the hexcode from | |||
| the payload to differ from the original, even though it has not been | the payload to differ from the original, even though it has not been | |||
| compressed. On top of this, the overhead from the tag bytes is | compressed. On top of this, the overhead from the tag bytes is | |||
| incurred as before. | incurred as before. | |||
| ________________________________________________________ | ________________________________________________________ | |||
| | | | | | | |||
| skipping to change at page 21, line 48 ¶ | skipping to change at page 20, line 50 ¶ | |||
| | (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 14: 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 17) MUST process the OSCORE Options | fields. In Figure 14 and Figure 15 we show a dump of the OSCORE | |||
| fields. In Figure 15 and Figure 16 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 are to go through Outer SCHC Compression. | are the messages that are to go through Outer SCHC Compression. | |||
| Protected message: | Protected message: | |||
| ================== | ================== | |||
| 0x4102000182d7080904636c69656e74ffa2c54fe1b434297b62 | 0x4102000182d7080904636c69656e74ffa2c54fe1b434297b62 | |||
| (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: | |||
| 0xd7080904636c69656e74 (10 bytes) | 0xd8080904636c69656e74 (10 bytes) | |||
| Option 21: OBJECT_SECURITY | Option 21: OBJECT_SECURITY | |||
| Value = 0x0904636c69656e74 | Value = 0x0904636c69656e74 | |||
| 09 = 000 0 1 001 Flag byte | 09 = 000 0 1 001 Flag byte | |||
| h k n | h k n | |||
| 04 piv | 04 piv | |||
| 636c69656e74 kid | 636c69656e74 kid | |||
| 0xFF Payload marker | 0xFF Payload marker | |||
| Payload: | Payload: | |||
| 0xa2c54fe1b434297b62 (9 bytes) | 0xa2c54fe1b434297b62 (9 bytes) | |||
| Figure 15: Protected and Inner SCHC Compressed GET Request | Figure 14: Protected and Inner SCHC Compressed GET Request | |||
| Protected message: | Protected message: | |||
| ================== | ================== | |||
| 0x6144000182d008ff10c6d7c26cc1e9aef3f2461e0c29 | 0x6144000182d008ff10c6d7c26cc1e9aef3f2461e0c29 | |||
| (22 bytes) | (22 bytes) | |||
| Header: | Header: | |||
| 0x6144 | 0x6144 | |||
| 01 Ver | 01 Ver | |||
| 10 ACK | 10 ACK | |||
| skipping to change at page 23, line 29 ¶ | skipping to change at page 22, line 29 ¶ | |||
| 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 16: Protected and Inner SCHC Compressed CONTENT Response | Figure 15: Protected and Inner SCHC Compressed CONTENT Response | |||
| For the flag bits, a number of compression methods could prove to be | For the flag bits, a number of compression methods could prove to be | |||
| useful depending on the application. The simplest alternative is to | useful depending on the application. The simplest alternative is to | |||
| provide a fixed value for the flags, combining MO equal and CDA not- | provide a fixed value for the flags, combining MO equal and CDA not- | |||
| sent. This saves most bits but could hinder flexibility. Otherwise, | sent. This saves most bits but could hinder flexibility. Otherwise, | |||
| match-mapping could allow to choose from a number of configurations | match-mapping could allow to choose from a number of configurations | |||
| of interest to the exchange. If neither of these alternatives is | of interest to the exchange. If neither of these alternatives is | |||
| desirable, MSB could be used to mask off the 3 hard-coded most | desirable, MSB could be used to mask off the 3 hard-coded most | |||
| significant bits. | significant bits. | |||
| skipping to change at page 24, line 10 ¶ | skipping to change at page 23, line 10 ¶ | |||
| technologies. Note that compressing the sequence numbers effectively | technologies. Note that compressing the sequence numbers effectively | |||
| reduces the maximum amount of sequence numbers that can be used in an | reduces the maximum amount of sequence numbers that can be used in an | |||
| exchange. Once this amount is exceeded, the SCHC Context would need | exchange. Once this amount is exceeded, the SCHC Context would need | |||
| to be re-established. | 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 | 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 17 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 | Rule ID 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 || | | |||
| skipping to change at page 24, line 36 ¶ | skipping to change at page 23, line 36 ¶ | |||
| |CoAP OSCORE_flags | |up| 0x09 |equal |not-sent || | | |CoAP OSCORE_flags | |up| 0x09 |equal |not-sent || | | |||
| |CoAP OSCORE_piv | |up| 0x00 |MSB(4) |LSB ||PPPP | | |CoAP OSCORE_piv | |up| 0x00 |MSB(4) |LSB ||PPPP | | |||
| |COAP OSCORE_kid | |up|0x636c69656e70|MSB(52) |LSB ||KKKK | | |COAP OSCORE_kid | |up|0x636c69656e70|MSB(52) |LSB ||KKKK | | |||
| |COAP OSCORE_kidctxt| |bi| b'' |equal |not-sent || | | |COAP OSCORE_kidctxt| |bi| b'' |equal |not-sent || | | |||
| |CoAP OSCORE_flags | |dw| b'' |equal |not-sent || | | |CoAP OSCORE_flags | |dw| b'' |equal |not-sent || | | |||
| |CoAP OSCORE_piv | |dw| b'' |equal |not-sent || | | |CoAP OSCORE_piv | |dw| b'' |equal |not-sent || | | |||
| |CoAP OSCORE_kid | |dw| b'' |equal |not-sent || | | |CoAP OSCORE_kid | |dw| b'' |equal |not-sent || | | |||
| |COAP Option-End | |dw| 0xFF |equal |not-sent || | | |COAP Option-End | |dw| 0xFF |equal |not-sent || | | |||
| +-------------------+--+--+--------------+--------+---------++------+ | +-------------------+--+--+--------------+--------+---------++------+ | |||
| Figure 17: 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 18 and | Response. The resulting messages are shown in Figure 17 and | |||
| Figure 19. | Figure 18. | |||
| Compressed message: | Compressed message: | |||
| ================== | ================== | |||
| 0x001489458a9fc3686852f6c4 (12 bytes) | 0x001489458a9fc3686852f6c4 (12 bytes) | |||
| 0x00 Rule ID | 0x00 Rule ID | |||
| 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 18: 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 Rule ID | |||
| 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 19: 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 20. | the SCHC rules in Figure 19. | |||
| Rule ID 1 | Rule ID 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] |equal |not-sent || | | |CoAP Code | |dw| [69,132] |match-map|map-sent ||C | | |||
| |CoAP MID | |bi| 0000 |MSB(12) |LSB ||MMMM | | |CoAP MID | |bi| 0000 |MSB(12) |LSB ||MMMM | | |||
| |CoAP Token | |bi| 0x80 |MSB(5) |LSB ||TTT | | |CoAP Token | |bi| 0x80 |MSB(5) |LSB ||TTT | | |||
| |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 20: SCHC-CoAP Rules (No OSCORE) | Figure 19: SCHC-CoAP Rules (No OSCORE) | |||
| This yields the results in Figure 21 for the Request, and Figure 22 | 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 = Rule ID | |||
| Compression residue: | Compression residue: | |||
| 0b00010100 (1 byte) | 0b00010100 (1 byte) | |||
| Compressed msg length: 2 | Compressed msg length: 2 | |||
| Figure 21: CoAP GET Compressed without OSCORE | Figure 20: CoAP GET Compressed without OSCORE | |||
| Compressed message: | Compressed message: | |||
| ================== | ================== | |||
| 0x010a32332043 | 0x010a32332043 | |||
| 0x01 = Rule ID | 0x01 = Rule ID | |||
| Compression residue: | Compression residue: | |||
| 0b00001010 (1 byte) | 0b00001010 (1 byte) | |||
| Payload | Payload | |||
| 0x32332043 | 0x32332043 | |||
| Compressed msg length: 6 | Compressed msg length: 6 | |||
| Figure 22: 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 | This document does not have any more Security consideration than the | |||
| ones already raised on [I-D.ietf-lpwan-ipv6-static-context-hc] | ones already raised on [I-D.ietf-lpwan-ipv6-static-context-hc] | |||
| 10. Acknowledgements | 10. Acknowledgements | |||
| Thanks to all the persons that have give us feedback | The authors would like to thank Dominique Barthel, Carsten Bormann, | |||
| Thomas Fossati, Klaus Hartke, Francesca Palombini, Alexander Pelov, | ||||
| Goran Selander. | ||||
| 11. Normative References | 11. Normative References | |||
| [I-D.ietf-core-object-security] | [I-D.ietf-core-object-security] | |||
| Selander, G., Mattsson, J., Palombini, F., and L. Seitz, | Selander, G., Mattsson, J., Palombini, F., and L. Seitz, | |||
| "Object Security for Constrained RESTful Environments | "Object Security for Constrained RESTful Environments | |||
| (OSCORE)", draft-ietf-core-object-security-16 (work in | (OSCORE)", draft-ietf-core-object-security-16 (work in | |||
| progress), March 2019. | progress), March 2019. | |||
| [I-D.ietf-lpwan-ipv6-static-context-hc] | [I-D.ietf-lpwan-ipv6-static-context-hc] | |||
| Minaburo, A., Toutain, L., Gomez, C., Barthel, D., and J. | Minaburo, A., Toutain, L., Gomez, C., Barthel, D., and J. | |||
| Zuniga, "LPWAN Static Context Header Compression (SCHC) | Zuniga, "Static Context Header Compression (SCHC) and | |||
| and fragmentation for IPv6 and UDP", draft-ietf-lpwan- | fragmentation for LPWAN, application to UDP/IPv6", draft- | |||
| ipv6-static-context-hc-18 (work in progress), December | ietf-lpwan-ipv6-static-context-hc-19 (work in progress), | |||
| 2018. | July 2019. | |||
| [I-D.toutain-core-time-scale] | [I-D.toutain-core-time-scale] | |||
| Minaburo, A. and L. Toutain, "CoAP Time Scale Option", | Minaburo, A. and L. Toutain, "CoAP Time Scale Option", | |||
| draft-toutain-core-time-scale-00 (work in progress), | draft-toutain-core-time-scale-00 (work in progress), | |||
| October 2017. | October 2017. | |||
| [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>. | |||
| End of changes. 68 change blocks. | ||||
| 175 lines changed or deleted | 157 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/ | ||||