| < draft-ietf-lpwan-coap-static-context-hc-14.txt | draft-ietf-lpwan-coap-static-context-hc-15.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 27, 2020 Institut MINES TELECOM; IMT Atlantique | Expires: January 4, 2021 Institut MINES TELECOM; IMT Atlantique | |||
| R. Andreasen | R. Andreasen | |||
| Universidad de Buenos Aires | Universidad de Buenos Aires | |||
| May 26, 2020 | July 03, 2020 | |||
| LPWAN Static Context Header Compression (SCHC) for CoAP | LPWAN Static Context Header Compression (SCHC) for CoAP | |||
| draft-ietf-lpwan-coap-static-context-hc-14 | draft-ietf-lpwan-coap-static-context-hc-15 | |||
| Abstract | Abstract | |||
| This draft defines the way Static Context Header Compression (SCHC) | This draft defines the way Static Context Header Compression (SCHC) | |||
| header compression can be applied to the Constrained Application | header compression can be applied to the Constrained Application | |||
| Protocol (CoAP). SCHC is a header compression mechanism adapted for | Protocol (CoAP). SCHC is a header compression mechanism adapted for | |||
| constrained devices. SCHC uses a static description of the header to | constrained devices. SCHC uses a static description of the header to | |||
| reduce the redundancy and the size of the information in the header. | reduce the redundancy and the size of the information in the header. | |||
| While [rfc8724] describes the SCHC compression and fragmentation | While [rfc8724] describes the SCHC compression and fragmentation | |||
| framework, and its application for IPv6/UDP headers, this document | framework, and its application for IPv6/UDP headers, this document | |||
| skipping to change at page 1, line 47 ¶ | skipping to change at page 1, line 47 ¶ | |||
| 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 27, 2020. | This Internet-Draft will expire on January 4, 2021. | |||
| 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 | |||
| skipping to change at page 2, line 25 ¶ | skipping to change at page 2, line 25 ¶ | |||
| 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 headers . . . . . . . . . . . . . . . . 4 | 2. Applying SCHC to CoAP headers . . . . . . . . . . . . . . . . 4 | |||
| 3. CoAP Headers compressed with SCHC . . . . . . . . . . . . . . 5 | 3. CoAP Headers compressed with SCHC . . . . . . . . . . . . . . 6 | |||
| 3.1. Differences between CoAP and UDP/IP Compression . . . . . 5 | 3.1. Differences between CoAP and UDP/IP Compression . . . . . 7 | |||
| 4. Compression of CoAP header fields . . . . . . . . . . . . . . 6 | 4. Compression of CoAP header fields . . . . . . . . . . . . . . 8 | |||
| 4.1. CoAP version field . . . . . . . . . . . . . . . . . . . 7 | 4.1. CoAP version field . . . . . . . . . . . . . . . . . . . 8 | |||
| 4.2. CoAP type field . . . . . . . . . . . . . . . . . . . . . 7 | 4.2. CoAP type field . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 4.3. CoAP code field . . . . . . . . . . . . . . . . . . . . . 7 | 4.3. CoAP code field . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 4.4. CoAP Message ID field . . . . . . . . . . . . . . . . . . 7 | 4.4. CoAP Message ID field . . . . . . . . . . . . . . . . . . 9 | |||
| 4.5. CoAP Token fields . . . . . . . . . . . . . . . . . . . . 7 | 4.5. CoAP Token fields . . . . . . . . . . . . . . . . . . . . 9 | |||
| 5. CoAP options . . . . . . . . . . . . . . . . . . . . . . . . 8 | 5. CoAP options . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 5.1. CoAP Content and Accept options. . . . . . . . . . . . . 8 | 5.1. CoAP Content and Accept options. . . . . . . . . . . . . 10 | |||
| 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 . . . . 10 | |||
| 5.3. CoAP option Uri-Path and Uri-Query fields . . . . . . . . 9 | 5.3. CoAP option Uri-Path and Uri-Query fields . . . . . . . . 10 | |||
| 5.3.1. Variable length Uri-Path and Uri-Query . . . . . . . 9 | 5.3.1. Variable length Uri-Path and Uri-Query . . . . . . . 11 | |||
| 5.3.2. Variable number of path or query elements . . . . . . 10 | 5.3.2. Variable number of path or query elements . . . . . . 11 | |||
| 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 . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 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 . . . . . . . . . . . . . . . . 12 | |||
| 6. SCHC compression of CoAP extension RFCs . . . . . . . . . . . 11 | 6. SCHC compression of CoAP extension RFCs . . . . . . . . . . . 12 | |||
| 6.1. Block . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 6.1. Block . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 6.2. Observe . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 6.2. Observe . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 6.3. No-Response . . . . . . . . . . . . . . . . . . . . . . . 11 | 6.3. No-Response . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 6.4. OSCORE . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 6.4. OSCORE . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 7. Examples of CoAP header compression . . . . . . . . . . . . . 13 | 7. Examples of CoAP header compression . . . . . . . . . . . . . 14 | |||
| 7.1. Mandatory header with CON message . . . . . . . . . . . . 13 | 7.1. Mandatory header with CON message . . . . . . . . . . . . 14 | |||
| 7.2. OSCORE Compression . . . . . . . . . . . . . . . . . . . 14 | 7.2. OSCORE Compression . . . . . . . . . . . . . . . . . . . 15 | |||
| 7.3. Example OSCORE Compression . . . . . . . . . . . . . . . 17 | 7.3. Example OSCORE Compression . . . . . . . . . . . . . . . 18 | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 27 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 28 | |||
| 9. Security considerations . . . . . . . . . . . . . . . . . . . 27 | 9. Security considerations . . . . . . . . . . . . . . . . . . . 28 | |||
| 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 28 | 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 11. Normative References . . . . . . . . . . . . . . . . . . . . 28 | 11. Normative References . . . . . . . . . . . . . . . . . . . . 29 | |||
| Appendix A. Extension to the RFC8724 Annex D. . . . . . . . . . 29 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 30 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 29 | ||||
| 1. Introduction | 1. Introduction | |||
| CoAP [rfc7252] is designed to easily interop with HTTP (Hypertext | CoAP [rfc7252] is designed to easily interop with HTTP (Hypertext | |||
| Transfer Protocol) and is optimized for REST-based (Representational | Transfer Protocol) and is optimized for REST-based (Representational | |||
| state transfer) services. Although CoAP was designed for constrained | state transfer) services. Although CoAP was designed for constrained | |||
| devices, the size of a CoAP header still is too large for the | devices, the size of a CoAP header still is too large for the | |||
| constraints of LPWAN (Low Power Wide Area Networks) and some | constraints of LPWAN (Low Power Wide Area Networks) and some | |||
| compression is needed to reduce the header size. | compression is needed to reduce the header size. | |||
| The [rfc8724] defines SCHC, a header compression mechanism for LPWAN | The [rfc8724] defines SCHC, a header compression mechanism for LPWAN | |||
| network based on a static context. The section 5 of the [rfc8724] | network based on a static context. Section 5 of the [rfc8724] | |||
| explains the architecture where compression and decompression are | explains the architecture where compression and decompression are | |||
| done. The context is known by both ends before transmission. The | done. The context is known by both ends before transmission. The | |||
| way the context is configured, provisioned or exchanged is out of the | way the context is configured, provisioned or exchanged is out of the | |||
| scope of this document. | scope of this document. | |||
| CoAP is an End-to-End protocol at the application level, so CoAP | ||||
| compression requires to install common Rules between two hosts and IP | ||||
| Routing may be needed to allow End-to-End communication. Therefore, | ||||
| SCHC compression may apply at two different levels, one to compress | ||||
| IP and UDP as described in [rfc8724] in the LPWAN network and another | ||||
| at the application level. These two compressions may be independent. | ||||
| The Compression Rules can be set up by two independent entities and | ||||
| are out of the scope of this document. In both cases, SCHC mechanism | ||||
| remains the same. | ||||
| 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 | a Rule matches, the matched header fields are substituted by the | |||
| RuleID 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 [rfc8724], thereby each | list of fields descriptions, see section 7 of [rfc8724], thereby each | |||
| skipping to change at page 4, line 29 ¶ | skipping to change at page 4, line 40 ¶ | |||
| "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 headers | 2. Applying SCHC to CoAP headers | |||
| The SCHC Compression Rules can be applied to CoAP headers. 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 [rfc8724] and may be used as shown in | as described in Section 5 of [rfc8724] and may be used as shown in | |||
| Figure 1. | Figure 1, Figure 2 and Figure 3. | |||
| ^ +------------+ ^ +------------+ ^ +------------+ | In the first example Figure 1, a Rule compresses the complete header | |||
| | | CoAP | | | CoAP | inner | | CoAP | | stack from IPv6 to CoAP. In this case, SCHC C/D (Static Context | |||
| | +------------+ v +------------+ x | OSCORE | | Header Compression Compressor/Decompressor) is performed at the | |||
| | | UDP | | DTLS | outer | +------------+ | Sender and at the Receiver. The host communicating with the device | |||
| | +------------+ +------------+ | | UDP | | do not implement SCHC C/D. | |||
| | | IPv6 | | UDP | | +------------+ | ||||
| v +------------+ +------------+ | | IPv6 | | ||||
| | IPv6 | v +------------+ | ||||
| +------------+ | ||||
| Figure 1: Rule scope for CoAP | (device) (NGW) (internet) (App) | |||
| Figure 1 shows some examples for CoAP protocol stacks and the SCHC | +--------+ +--------+ | |||
| Rule's scope. | | CoAP | | CoAP | | |||
| +--------+ +--------+ | ||||
| | UDP | | UDP | | ||||
| +--------+ +----------------+ +--------+ | ||||
| | IPv6 | | IPv6 | | IPv6 | | ||||
| +--------+ +--------+-------+ +--------+ | ||||
| | SCHC | | SCHC | | | | | ||||
| +--------+ +--------+ + + + | ||||
| | LPWAN | | LPWAN | | | | | ||||
| +--------+ +--------+-------+ +--------+ | ||||
| ((((((())))))) ----- ------ ------ ----- | ||||
| In the first example, a Rule compresses the complete header stack | Figure 1: Compression/decompression at the LPWAN bondary | |||
| from IPv6 to CoAP. In this case, SCHC C/D (Static Context Header | ||||
| Compression Compressor/Decompressor) is performed at the Sender and | ||||
| at the Receiver. | ||||
| In the second example, the SCHC compression is applied in the CoAP | In the second example, Figure 2, the SCHC compression is applied in | |||
| layer, compressing the CoAP header independently of the other layers. | the CoAP layer, compressing the CoAP header independently of the | |||
| The RuleID and the Compression Residue are encrypted using a | other layers. The RuleID 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. If needed, layers below use SCHC to compress the header | |||
| as defined in [rfc8724] document. This use case realizes an End-to- | as defined in [rfc8724] document. This use case realizes an End-to- | |||
| End context initialization between the sender and the receiver, see | End context initialization between the sender and the receiver and is | |||
| Appendix A. | out-of-scope of this document. | |||
| In the third example, the Object Security for Constrained RESTful | (device) (NGW) (internet) (App) | |||
| Environments (OSCORE) [rfc8613] is used. In this case, two rulesets | ||||
| are used to compress the CoAP message. A first ruleset focused on | +--------+ +--------+ | |||
| the inner header and is applied end to end by both ends. A second | | CoAP | | CoAP | | |||
| ruleset compresses the outer header and the layers below and is done | +--------+ +--------+ | |||
| between the Sender and the Receiver. | | SCHC | | SCHC | | |||
| +--------+ +--------+ | ||||
| | DTLS | | DTLS | | ||||
| +--------+ +--------+ | ||||
| . udp . . udp . | ||||
| .......... .................. .......... | ||||
| . ipv6 . . ipv6 . . ipv6 . | ||||
| .......... .................. .......... | ||||
| . schc . . schc . . . . | ||||
| .......... .......... . . . | ||||
| . lpwan . . lpwan . . . . | ||||
| .......... .................. .......... | ||||
| ((((((())))))) ----- ------ ------ ----- | ||||
| Figure 2: Standalone CoAP ene-to-end compression/decompression | ||||
| In the third example, Figure 3 the Object Security for Constrained | ||||
| RESTful Environments (OSCORE) [rfc8613] is used. In this case, two | ||||
| rulesets are used to compress the CoAP message. A first ruleset | ||||
| focused on the inner header and is applied end to end by both ends. | ||||
| A second ruleset compresses the outer header and the layers below and | ||||
| is done between the Sender and the Receiver. | ||||
| (device) (NGW) (internet) (App) | ||||
| +--------+ +--------+ | ||||
| | CoAP | | CoAP | | ||||
| | inner | | inner | | ||||
| +--------+ +--------+ | ||||
| | SCHC | | SCHC | | ||||
| +--------+ +--------+ | ||||
| | CoAP | | CoAP | | ||||
| | outer | | outer | | ||||
| +--------+ +--------+ | ||||
| . udp . . udp . | ||||
| .......... .................. .......... | ||||
| . ipv6 . . ipv6 . . ipv6 . | ||||
| .......... .................. .......... | ||||
| . schc . . schc . . . . | ||||
| .......... .......... . . . | ||||
| . lpwan . . lpwan . . . . | ||||
| .......... .................. .......... | ||||
| ((((((())))))) ----- ------ ------ ----- | ||||
| Figure 3: OSCORE compression/decompression. | ||||
| In case of 2 rule-sets, as shown in Figure 2 and Figure 3, they may | ||||
| come from different provisioning domains, and that they do not | ||||
| include the cryptography part that is done in between the two SCHC | ||||
| activities. This document focuses on CoAP compression represented in | ||||
| the dashed boxes in the previous figures. | ||||
| 3. CoAP Headers compressed with SCHC | 3. CoAP Headers compressed with SCHC | |||
| The use of SCHC over the CoAP header uses the same description and | The use of SCHC over the CoAP header uses the same description and | |||
| compression/decompression techniques as the one for IP and UDP | compression/decompression techniques as the one for IP and UDP | |||
| explained in the [rfc8724]. For CoAP, SCHC Rules description uses | explained in the [rfc8724]. For CoAP, SCHC Rules description uses | |||
| the direction information to optimize the compression by reducing the | the direction information to optimize the compression by reducing the | |||
| number of Rules needed to compress headers. The field description | number of Rules needed to compress headers. The field description | |||
| MAY define both request/response headers and target values in the | MAY define both request/response headers and target values in the | |||
| same Rule, using the DI (direction indicator) to make the difference. | same Rule, using the DI (direction indicator) to make the difference. | |||
| skipping to change at page 8, line 26 ¶ | skipping to change at page 9, line 46 ¶ | |||
| the format Delta-Type (D-T), Length (L), Value (V). When applying | 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 | 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 | make the Rule description of the Option. The SCHC compression builds | |||
| the description of the Option by using in the Field ID the Option | the description of the Option by using in the Field ID the Option | |||
| Number built from D-T; in TV, the Option Value; and the Option Length | Number built from D-T; in TV, the Option Value; and the Option Length | |||
| uses section 7.4 of RFC8724. When the Option Length has a wellknown | 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 | size it can be stored in the Rule. Therefore, SCHC compression does | |||
| not send it. Otherwise, SCHC Compression carries the length of the | not send it. Otherwise, SCHC Compression carries the length of the | |||
| Compression Residue in addition to the Compression Residue value. | Compression Residue in addition to the Compression Residue value. | |||
| CoAP request and response do not include the same options. So | ||||
| Compression Rules may reflect these assymetry by tagging the | ||||
| direction indicator. | ||||
| Note that length coding differs between CoAP options and SCHC | Note that length coding differs between CoAP options and SCHC | |||
| variable size Compression Residue. | variable size Compression Residue. | |||
| The following sections present how SCHC compresses some specific CoAP | The following sections present how SCHC compresses some specific CoAP | |||
| Options. | Options. | |||
| 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 | ||||
| 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 Compression Residue. Otherwise, the | used to limit the size of the Compression Residue. Otherwise, the | |||
| value has to be sent as a Compression Residue (fixed or variable | value has to be sent as a Compression Residue (fixed or variable | |||
| length). | 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 | ||||
| in a Rule DI entry, see section 7.1 of [rfc8724]. They are used only | ||||
| by the server to inform of the caching duration and is never found in | ||||
| client requests. | ||||
| If the duration is known by both ends, the value can be elided. | If the duration is known by both ends, the value can be elided. | |||
| 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 Compression Residue (fixed | Otherwise these options can be sent as a Compression Residue (fixed | |||
| or variable 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 | ||||
| in a Rule entry. They are used only by the client to access a | ||||
| 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 |var| 3|up| |ignore |value-sent | | |URI-Path |var| 3|up| |ignore |value-sent | | |||
| +-------------+---+--+--+--------+---------+-------------+ | +-------------+---+--+--+--------+---------+-------------+ | |||
| Figure 2: complex path example | Figure 4: complex path example | |||
| In Figure 2 a single bit residue can be used to code one of the 2 | In Figure 4 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. The third path element is sent as a variable size residue. | 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 | |||
| skipping to change at page 10, line 17 ¶ | skipping to change at page 11, line 29 ¶ | |||
| +-------------+---+--+--+--------+---------+-------------+ | +-------------+---+--+--+--------+---------+-------------+ | |||
| | 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 5: CORECONF URI compression | |||
| Figure 3 shows the parsing and the compression of the URI, where c is | Figure 5 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 4 bits to the variable Residue size. See section 7.5.2 | This adds 4 bits to the variable Residue size. See section 7.5.2 | |||
| [rfc8724] | [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 | ||||
| in a Rule DI entry, see section 7.1 of the [rfc8724]. They are used | ||||
| only by the client to access a specific resource and are never found | ||||
| in server 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 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 can be both used. If a | includes a fragmentation protocol. They can be both used. If a | |||
| block option is used, its content MUST be sent as a Compression | block option is used, its content MUST be sent as a Compression | |||
| skipping to change at page 12, line 20 ¶ | skipping to change at page 13, line 20 ¶ | |||
| |<-- CoAP -->|<------ CoAP OSCORE_piv ------> | | |<-- CoAP -->|<------ CoAP OSCORE_piv ------> | | |||
| OSCORE_flags | OSCORE_flags | |||
| <- 1 byte -> <------ s bytes -----> | <- 1 byte -> <------ s bytes -----> | |||
| +------------+----------------------+-----------------------+ | +------------+----------------------+-----------------------+ | |||
| | s (if any) | kid context (if any) | kid (if any) ... | | | s (if any) | kid context (if any) | kid (if any) ... | | |||
| +------------+----------------------+-----------------------+ | +------------+----------------------+-----------------------+ | |||
| | | | | | | | | |||
| | <------ CoAP OSCORE_kidctxt ----->|<-- CoAP OSCORE_kid -->| | | <------ CoAP OSCORE_kidctxt ----->|<-- CoAP OSCORE_kid -->| | |||
| Figure 4: OSCORE Option | Figure 6: 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 6. | |||
| The first byte specifies the content of the OSCORE options using | The first byte specifies the content of the OSCORE options using | |||
| flags. The three most significant bits of this byte are reserved and | flags. The three most significant bits of this byte are reserved and | |||
| always set to 0. Bit h, when set, indicates the presence of the kid | always set to 0. Bit h, when set, indicates the presence of the kid | |||
| context field in the option. Bit k, when set, indicates the presence | context field in the option. Bit k, when set, indicates the presence | |||
| of a kid field. The three 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 | The flag byte is followed by the piv field, kid context field, and | |||
| skipping to change at page 13, line 6 ¶ | skipping to change at page 14, line 6 ¶ | |||
| 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. | |||
| The OSCORE Option shows superimposed these four fields using the | The OSCORE Option shows superimposed these four fields using the | |||
| format Figure 4, the CoAP OSCORE_kidctxt field includes the size bits | format Figure 6, the CoAP OSCORE_kidctxt field includes the size bits | |||
| s. | 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 7. | |||
| RuleID 1 | RuleID 1 | |||
| +-------------+--+--+--+------+---------+-------------++------------+ | +-------------+--+--+--+------+---------+-------------++------------+ | |||
| | Field |FL|FP|DI|Target| Match | CDA || Sent | | | Field |FL|FP|DI|Target| Match | CDA || Sent | | |||
| | | | | |Value | Opera. | || [bits] | | | | | | |Value | Opera. | || [bits] | | |||
| +-------------+--+--+--+------+---------+-------------++------------+ | +-------------+--+--+--+------+---------+-------------++------------+ | |||
| |CoAP version | | |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,| | || | | |||
| | | | | | ... | | || | | | | | | | ... | | || | | |||
| | | | | | 5.05]|match-map|matching-sent|| CC CCC | | | | | | | 5.05]|match-map|matching-sent|| CC CCC | | |||
| |CoAP MID | | |bi| 0000 |MSB(7 ) |LSB || M-ID| | |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 7: CoAP Context to compress header without token | |||
| The version and Token Length fields are elided. The 26 method and | The version and Token Length fields are elided. The 26 method and | |||
| 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). | |||
| skipping to change at page 14, line 18 ¶ | skipping to change at page 15, line 18 ¶ | |||
| 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 | |||
| 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 6. | caching. This decomposition is illustrated in Figure 8. | |||
| 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 15, line 38 ¶ | skipping to change at page 16, line 38 ¶ | |||
| +-+-+---+--------+---------------+....+ +-------+-----......+ | +-+-+---+--------+---------------+....+ +-------+-----......+ | |||
| | Token | | Options (E) | | | Token | | Options (E) | | |||
| +--------------------------------.....+ +-------+------.....+ | +--------------------------------.....+ +-------+------.....+ | |||
| | Options (IU) | | OxFF | | | Options (IU) | | OxFF | | |||
| . . +-------+-----------+ | . . +-------+-----------+ | |||
| . OSCORE Option . | | | . OSCORE Option . | | | |||
| +------+-------------------+ | Payload | | +------+-------------------+ | Payload | | |||
| | 0xFF | | | | | 0xFF | | | | |||
| +------+ +-------------------+ | +------+ +-------------------+ | |||
| Figure 6: A CoAP message is split into an OSCORE outer and plaintext | Figure 8: A CoAP message is split into an OSCORE outer and plaintext | |||
| Figure 6 shows the message format for the OSCORE Message and | Figure 8 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. | |||
| 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 7. | OSCORE message, as illustrated in Figure 9. | |||
| 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 | |||
| +-+-+---+--------+---------------+ | +-+-+---+--------+---------------+ | |||
| skipping to change at page 16, line 39 ¶ | skipping to change at page 17, line 39 ¶ | |||
| +------+-------------------+ | +------+-------------------+ | |||
| | 0xFF | | | 0xFF | | |||
| +------+---------------------------+ | +------+---------------------------+ | |||
| | | | | | | |||
| | Ciphertext: Encrypted Inner | | | Ciphertext: Encrypted Inner | | |||
| | Header and Payload | | | Header and Payload | | |||
| | + Authentication Tag | | | + Authentication Tag | | |||
| | | | | | | |||
| +----------------------------------+ | +----------------------------------+ | |||
| Figure 7: OSCORE message | Figure 9: OSCORE message | |||
| The SCHC Compression scheme consists of compressing both the | The SCHC Compression scheme consists of compressing both the | |||
| Plaintext before encryption and the resulting OSCORE message after | Plaintext before encryption and the resulting OSCORE message after | |||
| encryption, see Figure 8. | encryption, see Figure 10. | |||
| 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 17, line 41 ¶ | skipping to change at page 18, line 41 ¶ | |||
| v | +-------+--+ | v | +-------+--+ | |||
| +--------+ +------------+ | Residue | | +--------+ +------------+ | Residue | | |||
| |RuleID' | | Encryption | <--- +----------+--------+ | |RuleID' | | Encryption | <--- +----------+--------+ | |||
| +--------+--+ +------------+ | | | +--------+--+ +------------+ | | | |||
| | Residue' | | Payload | | | Residue' | | Payload | | |||
| +-----------+-------+ | | | +-----------+-------+ | | | |||
| | Ciphertext | +-------------------+ | | Ciphertext | +-------------------+ | |||
| | | | | | | |||
| +-------------------+ | +-------------------+ | |||
| Figure 8: OSCORE Compression Diagram | Figure 10: OSCORE Compression Diagram | |||
| 7.3. Example OSCORE Compression | 7.3. Example OSCORE Compression | |||
| An example is given with a GET Request and its consequent Content | 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 11 | |||
| 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 18, line 28 ¶ | skipping to change at page 19, 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 9: CoAP GET Request | Figure 11: CoAP GET Request | |||
| Its corresponding response is the CONTENT Response in Figure 10. | Its corresponding response is the CONTENT Response in Figure 12. | |||
| Original message: | Original message: | |||
| ================= | ================= | |||
| 0x6145000182ff32332043 | 0x6145000182ff32332043 | |||
| Header: | Header: | |||
| 0x6145 | 0x6145 | |||
| 01 Ver | 01 Ver | |||
| 10 ACK | 10 ACK | |||
| 0001 tkl | 0001 tkl | |||
| skipping to change at page 18, line 52 ¶ | skipping to change at page 19, 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 10: CoAP CONTENT Response | Figure 12: 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. The methods described in | already present in a regular CoAP message. The methods described in | |||
| Section 4 applies to these fields. As an example, see Figure 11. | Section 4 applies to these fields. As an example, see Figure 13. | |||
| RuleID 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 13: Inner SCHC Rules | |||
| Figure 12 shows the Plaintext obtained for our example GET Request | Figure 14 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 RuleID). | 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 | |||
| skipping to change at page 20, line 44 ¶ | skipping to change at page 21, 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 12: Plaintext compression and encryption for GET Request | Figure 14: Plaintext compression and encryption for GET Request | |||
| In Figure 13 the process is repeated for the example CONTENT | In Figure 15 the process is repeated for the example CONTENT | |||
| Response. The residue is 1 bit long. Note that since SCHC adds | Response. The residue is 1 bit long. Note that since SCHC adds | |||
| padding after the payload, this misalignment causes the hexadecimal | padding after the payload, this misalignment causes the hexadecimal | |||
| code from the payload to differ from the original, even though it has | code from the payload to differ from the original, even though it has | |||
| not been compressed. | not been compressed. | |||
| On top of this, the overhead from the tag bytes is incurred as | On top of this, the overhead from the tag bytes is incurred as | |||
| before. | before. | |||
| ________________________________________________________ | ________________________________________________________ | |||
| | | | | | | |||
| skipping to change at page 21, line 51 ¶ | skipping to change at page 22, line 51 ¶ | |||
| | (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 15: Plaintext compression and encryption for CONTENT Response | |||
| The Outer SCHC Rules (Figure 16) must process the OSCORE Options | The Outer SCHC Rules (Figure 18) must process the OSCORE Options | |||
| fields. In Figure 14 and Figure 15 we show a dump of the OSCORE | fields. In Figure 16 and Figure 17 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 22, line 39 ¶ | skipping to change at page 23, line 39 ¶ | |||
| 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 14: Protected and Inner SCHC Compressed GET Request | Figure 16: 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 24, 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 15: Protected and Inner SCHC Compressed CONTENT Response | Figure 17: Protected and Inner SCHC Compressed CONTENT Response | |||
| For the flag bits, a number of compression methods has been shown to | For the flag bits, a number of compression methods has been shown to | |||
| be useful depending on the application. The simplest alternative is | be useful depending on the application. The simplest alternative is | |||
| to provide a fixed value for the flags, combining MO equal and CDA | to provide a fixed value for the flags, combining MO equal and CDA | |||
| not- sent. This saves most bits but could prevent flexibility. | not- sent. This saves most bits but could prevent flexibility. | |||
| Otherwise, match-mapping could be used to choose from an interested | Otherwise, match-mapping could be used to choose from an interested | |||
| number of configurations to the exchange. Otherwise, MSB could be | number of configurations to the exchange. Otherwise, MSB could be | |||
| used to mask off the 3 hard-coded most significant bits. | used to mask off the 3 hard-coded most significant bits. | |||
| Note that fixing a flag bit will limit the choice of CoAP Options | Note that fixing a flag bit will limit the choice of CoAP Options | |||
| skipping to change at page 24, line 7 ¶ | skipping to change at page 25, line 7 ¶ | |||
| Note that compressing the sequence numbers effectively reduces the | Note that compressing the sequence numbers effectively reduces the | |||
| maximum amount of sequence numbers that can be used in an exchange. | maximum amount of sequence numbers that can be used in an exchange. | |||
| Once this amount is exceeded, the OSCORE keys need to be re- | Once this amount is exceeded, the OSCORE keys need to be re- | |||
| 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 18 shows a possible set of Outer Rules to compress the Outer | |||
| Header. | Header. | |||
| RuleID 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 || | | |||
| skipping to change at page 24, line 33 ¶ | skipping to change at page 25, line 33 ¶ | |||
| |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 16: Outer SCHC Rules | Figure 18: 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 19 and | |||
| Figure 18. | Figure 20. | |||
| Compressed message: | Compressed message: | |||
| ================== | ================== | |||
| 0x001489458a9fc3686852f6c4 (12 bytes) | 0x001489458a9fc3686852f6c4 (12 bytes) | |||
| 0x00 RuleID | 0x00 RuleID | |||
| 1489 Compression Residue | 1489 Compression Residue | |||
| 458a9fc3686852f6c4 Padded payload | 458a9fc3686852f6c4 Padded payload | |||
| Compression Residue: | Compression Residue: | |||
| 0b 0001 010 0100 0100 (15 bits -> 2 bytes with padding) | 0b 0001 010 0100 0100 (15 bits -> 2 bytes with padding) | |||
| mid tkn piv kid | mid tkn piv kid | |||
| Payload | Payload | |||
| 0xa2c54fe1b434297b62 (9 bytes) | 0xa2c54fe1b434297b62 (9 bytes) | |||
| Compressed message length: 12 bytes | Compressed message length: 12 bytes | |||
| Figure 17: SCHC-OSCORE Compressed GET Request | Figure 19: SCHC-OSCORE Compressed GET Request | |||
| Compressed message: | Compressed message: | |||
| ================== | ================== | |||
| 0x0014218daf84d983d35de7e48c3c1852 (16 bytes) | 0x0014218daf84d983d35de7e48c3c1852 (16 bytes) | |||
| 0x00 RuleID | 0x00 RuleID | |||
| 14 Compression Residue | 14 Compression Residue | |||
| 218daf84d983d35de7e48c3c1852 Padded payload | 218daf84d983d35de7e48c3c1852 Padded payload | |||
| Compression Residue: | Compression Residue: | |||
| 0b0001 010 (7 bits -> 1 byte with padding) | 0b0001 010 (7 bits -> 1 byte with padding) | |||
| mid tkn | mid tkn | |||
| Payload | Payload | |||
| 0x10c6d7c26cc1e9aef3f2461e0c29 (14 bytes) | 0x10c6d7c26cc1e9aef3f2461e0c29 (14 bytes) | |||
| Compressed msg length: 16 bytes | Compressed msg length: 16 bytes | |||
| Figure 18: SCHC-OSCORE Compressed CONTENT Response | Figure 20: 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 21. | |||
| RuleID 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 | | |||
| |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 19: SCHC-CoAP Rules (No OSCORE) | Figure 21: SCHC-CoAP Rules (No OSCORE) | |||
| This yields the results in Figure 20 for the Request, and Figure 21 | This yields the results in Figure 22 for the Request, and Figure 23 | |||
| for the Response. | for the Response. | |||
| Compressed message: | Compressed message: | |||
| ================== | ================== | |||
| 0x0114 | 0x0114 | |||
| 0x01 = RuleID | 0x01 = RuleID | |||
| Compression Residue: | Compression Residue: | |||
| 0b00010100 (1 byte) | 0b00010100 (1 byte) | |||
| Compressed msg length: 2 | Compressed msg length: 2 | |||
| Figure 20: CoAP GET Compressed without OSCORE | Figure 22: CoAP GET Compressed without OSCORE | |||
| Compressed message: | Compressed message: | |||
| ================== | ================== | |||
| 0x010a32332043 | 0x010a32332043 | |||
| 0x01 = RuleID | 0x01 = RuleID | |||
| Compression Residue: | Compression Residue: | |||
| 0b00001010 (1 byte) | 0b00001010 (1 byte) | |||
| Payload | Payload | |||
| 0x32332043 | 0x32332043 | |||
| Compressed msg length: 6 | Compressed msg length: 6 | |||
| Figure 21: CoAP CONTENT Compressed without OSCORE | Figure 23: 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 | |||
| The Security Considerations of SCHC header compression RFC8724 are | When applied to LPWAN, the Security Considerations of SCHC header | |||
| valid for SCHC CoAP header compression. When CoAP uses OSCORE, the | compression [rfc8724] are valid for SCHC CoAP header compression. | |||
| security considerations defined in RFC8613 does not change when SCHC | When CoAP uses OSCORE, the security considerations defined in | |||
| header compression is applied. | [rfc8613] does not change when SCHC header compression is applied. | |||
| The definition of SCHC over CoAP header fields permits the | The definition of SCHC over CoAP header fields permits the | |||
| compression of header information only. The SCHC header compression | compression of header information only. The SCHC header compression | |||
| itself does not increase or reduce the level of security in the | itself does not increase or reduce the level of security in the | |||
| communication. When the communication does not use any security | communication. When the connection does not use any security | |||
| protocol as OSCORE, DTLS, or other. It is highly necessary to use a | protocol as OSCORE, DTLS, or other, it is highly necessary to use a | |||
| layer two security. | layer two security. | |||
| DoS attacks are possible if an intruder can introduce a compressed | DoS attacks are possible if an intruder can introduce a compressed | |||
| SCHC corrupted packet onto the link and cause a compression | SCHC corrupted packet onto the link and cause a compression | |||
| efficiency reduction. However, an intruder having the ability to add | efficiency reduction. However, an intruder having the ability to add | |||
| corrupted packets at the link layer raises additional security issues | corrupted packets at the link layer raises additional security issues | |||
| than those related to the use of header compression. | than those related to the use of header compression. | |||
| SCHC compression returns variable-length Residues for some CoAP | SCHC compression returns variable-length Residues for some CoAP | |||
| fields. In the compressed header, the length sent is not the | fields. In the compressed header, the length sent is not the | |||
| original header field length but the length of the Residue. So if a | original header field length but the length of the Residue. So if a | |||
| corrupted packet comes to the decompressor with a longer or shorter | corrupted packet comes to the decompressor with a longer or shorter | |||
| length than the one in the original header, SCHC decompression will | length than the one in the original header, SCHC decompression will | |||
| detect an error and drops the packet. | 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 [rfc8724]. The size of the Initialisation Vector (IV) | described in [rfc8724]. The size of the Initialisation Vector (IV) | |||
| residue size must be considered carefully. A too large value has an | residue must be considered carefully. A residue size obtained with | |||
| impact on the compression efficiency and a too small value will force | LSB CDA over the IV has an impact on the compression efficiency and | |||
| the device to renew its key more often. This operation may be long | the frequency the device will renew its key. This operation requires | |||
| and energy consuming. The size of the compressed IV MUST be choosen | several exchanges and is energy-consuming. | |||
| regarding the highest expected traffic from the device. | ||||
| SCHC header and compression Rules MUST remain tightly coupled. | SCHC header and compression Rules MUST remain tightly coupled. | |||
| Otherwise, an encrypted residue may be decompressed in a different | Otherwise, an encrypted residue may be decompressed differently by | |||
| way by the receiver. To avoid this situation, if the Rule is | the receiver. To avoid this situation, if the Rule is modified in | |||
| modified in one location, the OSCORE keys MUST be re-established. | one location, the OSCORE keys MUST be re-established. | |||
| 10. Acknowledgements | 10. Acknowledgements | |||
| The authors would like to thank (in alphabetic order): Christian | The authors would like to thank (in alphabetic order): Christian | |||
| Amsuss, Dominique Barthel, Carsten Bormann, Theresa Enghardt, Thomas | Amsuss, Dominique Barthel, Carsten Bormann, Theresa Enghardt, Thomas | |||
| Fossati, Klaus Hartke, Francesca Palombini, Alexander Pelov and Goran | Fossati, Klaus Hartke, Francesca Palombini, Alexander Pelov and Goran | |||
| Selander. | Selander. | |||
| 11. Normative References | 11. Normative References | |||
| skipping to change at page 29, line 25 ¶ | skipping to change at page 30, line 20 ¶ | |||
| "Object Security for Constrained RESTful Environments | "Object Security for Constrained RESTful Environments | |||
| (OSCORE)", RFC 8613, DOI 10.17487/RFC8613, July 2019, | (OSCORE)", RFC 8613, DOI 10.17487/RFC8613, July 2019, | |||
| <https://www.rfc-editor.org/info/rfc8613>. | <https://www.rfc-editor.org/info/rfc8613>. | |||
| [rfc8724] Minaburo, A., Toutain, L., Gomez, C., Barthel, D., and JC. | [rfc8724] Minaburo, A., Toutain, L., Gomez, C., Barthel, D., and JC. | |||
| Zuniga, "SCHC: Generic Framework for Static Context Header | Zuniga, "SCHC: Generic Framework for Static Context Header | |||
| Compression and Fragmentation", RFC 8724, | Compression and Fragmentation", RFC 8724, | |||
| DOI 10.17487/RFC8724, April 2020, | DOI 10.17487/RFC8724, April 2020, | |||
| <https://www.rfc-editor.org/info/rfc8724>. | <https://www.rfc-editor.org/info/rfc8724>. | |||
| 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. 66 change blocks. | ||||
| 146 lines changed or deleted | 185 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/ | ||||