| rfc8824.original | rfc8824.txt | |||
|---|---|---|---|---|
| lpwan Working Group A. Minaburo | Internet Engineering Task Force (IETF) A. Minaburo | |||
| Internet-Draft Acklio | Request for Comments: 8824 Acklio | |||
| Intended status: Standards Track L. Toutain | Category: Standards Track L. Toutain | |||
| Expires: September 9, 2021 Institut MINES TELECOM; IMT Atlantique | ISSN: 2070-1721 IMT Atlantique | |||
| R. Andreasen | R. Andreasen | |||
| Universidad de Buenos Aires | Universidad de Buenos Aires | |||
| March 08, 2021 | June 2021 | |||
| LPWAN Static Context Header Compression (SCHC) for CoAP | Static Context Header Compression (SCHC) for the | |||
| draft-ietf-lpwan-coap-static-context-hc-19 | Constrained Application Protocol (CoAP) | |||
| Abstract | Abstract | |||
| This draft defines how to compress the Constrained Application | This document defines how to compress Constrained Application | |||
| Protocol (CoAP) using the Static Context Header Compression (SCHC). | Protocol (CoAP) headers using the Static Context Header Compression | |||
| SCHC is a header compression mechanism adapted for Constrained | and fragmentation (SCHC) framework. SCHC defines a header | |||
| Devices. SCHC uses a static description of the header to reduce the | compression mechanism adapted for Constrained Devices. SCHC uses a | |||
| header's redundancy and size. While RFC 8724 describes the SCHC | static description of the header to reduce the header's redundancy | |||
| compression and fragmentation framework, and its application for | and size. While RFC 8724 describes the SCHC compression and | |||
| IPv6/UDP headers, this document applies SCHC for CoAP headers. The | fragmentation framework, and its application for IPv6/UDP headers, | |||
| CoAP header structure differs from IPv6 and UDP since CoAP uses a | this document applies SCHC to CoAP headers. The CoAP header | |||
| flexible header with a variable number of options, themselves of | structure differs from IPv6 and UDP, since CoAP uses a flexible | |||
| variable length. The CoAP protocol messages format is asymmetric: | header with a variable number of options, themselves of variable | |||
| the request messages have a header format different from the one in | length. The CoAP message format is asymmetric: the request messages | |||
| the response messages. This specification gives guidance on applying | have a header format different from the format in the response | |||
| SCHC to flexible headers and how to leverage the asymmetry for more | messages. This specification gives guidance on applying SCHC to | |||
| efficient compression Rules. | flexible headers and how to leverage the asymmetry for more efficient | |||
| compression Rules. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on September 9, 2021. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| https://www.rfc-editor.org/info/rfc8824. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
| 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.1. Terminology | |||
| 2. SCHC Applicability to CoAP . . . . . . . . . . . . . . . . . 4 | 2. SCHC Applicability to CoAP | |||
| 3. CoAP Headers compressed with SCHC . . . . . . . . . . . . . . 7 | 3. CoAP Headers Compressed with SCHC | |||
| 3.1. Differences between CoAP and UDP/IP Compression . . . . . 8 | 3.1. Differences between CoAP and UDP/IP Compression | |||
| 4. Compression of CoAP header fields . . . . . . . . . . . . . . 9 | 4. Compression of CoAP Header Fields | |||
| 4.1. CoAP version field . . . . . . . . . . . . . . . . . . . 9 | 4.1. CoAP Version Field | |||
| 4.2. CoAP type field . . . . . . . . . . . . . . . . . . . . . 9 | 4.2. CoAP Type Field | |||
| 4.3. CoAP code field . . . . . . . . . . . . . . . . . . . . . 9 | 4.3. CoAP Code Field | |||
| 4.4. CoAP Message ID field . . . . . . . . . . . . . . . . . . 10 | 4.4. CoAP Message ID Field | |||
| 4.5. CoAP Token fields . . . . . . . . . . . . . . . . . . . . 10 | 4.5. CoAP Token Fields | |||
| 5. CoAP options . . . . . . . . . . . . . . . . . . . . . . . . 10 | 5. CoAP Options | |||
| 5.1. CoAP Content and Accept options. . . . . . . . . . . . . 11 | 5.1. CoAP Content and Accept Options | |||
| 5.2. CoAP option Max-Age, Uri-Host, and Uri-Port fields . . . 11 | 5.2. CoAP Option Max-Age, Uri-Host, and Uri-Port Fields | |||
| 5.3. CoAP option Uri-Path and Uri-Query fields . . . . . . . . 11 | 5.3. CoAP Option Uri-Path and Uri-Query Fields | |||
| 5.3.1. Variable number of Path or Query elements . . . . . . 13 | 5.3.1. Variable Number of Path or Query Elements | |||
| 5.4. CoAP option Size1, Size2, Proxy-URI and Proxy-Scheme | 5.4. CoAP Option Size1, Size2, Proxy-URI, and Proxy-Scheme | |||
| fields . . . . . . . . . . . . . . . . . . . . . . . . . 13 | Fields | |||
| 5.5. CoAP option ETag, If-Match, If-None-Match, Location-Path, | 5.5. CoAP Option ETag, If-Match, If-None-Match, Location-Path, | |||
| and Location-Query fields . . . . . . . . . . . . . . . . 13 | and Location-Query Fields | |||
| 6. SCHC compression of CoAP extension RFCs . . . . . . . . . . . 13 | 6. SCHC Compression of CoAP Extensions | |||
| 6.1. Block . . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 6.1. Block | |||
| 6.2. Observe . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 6.2. Observe | |||
| 6.3. No-Response . . . . . . . . . . . . . . . . . . . . . . . 14 | 6.3. No-Response | |||
| 6.4. OSCORE . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 6.4. OSCORE | |||
| 7. Examples of CoAP header compression . . . . . . . . . . . . . 15 | 7. Examples of CoAP Header Compression | |||
| 7.1. Mandatory header with CON message . . . . . . . . . . . . 15 | 7.1. Mandatory Header with CON Message | |||
| 7.2. OSCORE Compression . . . . . . . . . . . . . . . . . . . 16 | 7.2. OSCORE Compression | |||
| 7.3. Example OSCORE Compression . . . . . . . . . . . . . . . 20 | 7.3. Example OSCORE Compression | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 31 | 8. IANA Considerations | |||
| 9. Security considerations . . . . . . . . . . . . . . . . . . . 31 | 9. Security Considerations | |||
| 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 32 | 10. Normative References | |||
| 11. Normative References . . . . . . . . . . . . . . . . . . . . 32 | Acknowledgements | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 33 | Authors' Addresses | |||
| 1. Introduction | 1. Introduction | |||
| CoAP [RFC7252] is a command/response protocol designed for micro- | The Constrained Application Protocol (CoAP) [RFC7252] is a command/ | |||
| controllers with a small RAM and ROM and optimized for REST-based | response protocol designed for microcontrollers with small RAM and | |||
| (Representative state transfer) services. Although the Constrained | ROM and optimized for services based on REST (Representational State | |||
| Devices leads the CoAP design, a CoAP header's size is still too | Transfer). Although the Constrained Devices are a leading factor in | |||
| large for LPWAN (Low Power Wide Area Networks). SCHC header | the design of CoAP, a CoAP header's size is still too large for | |||
| compression over CoAP header is required to increase performance or | LPWANs (Low-Power Wide-Area Networks). Static Context Header | |||
| use CoAP over LPWAN technologies. | Compression and fragmentation (SCHC) over CoAP headers is required to | |||
| increase performance or to use CoAP over LPWAN technologies. | ||||
| The [RFC8724] defines SCHC, a header compression mechanism for the | [RFC8724] defines the SCHC framework, which includes a header | |||
| LPWAN network based on a static context. Section 5 of the [RFC8724] | compression mechanism for LPWANs that is based on a static context. | |||
| explains where compression and decompression occur in the | Section 5 of [RFC8724] explains where compression and decompression | |||
| architecture. The SCHC compression scheme assumes as a prerequisite | occur in the architecture. The SCHC compression scheme assumes as a | |||
| that both end-points know the static context before transmission. | prerequisite that both endpoints know the static context before | |||
| The way the context is configured, provisioned, or exchanged is out | transmission. The way the context is configured, provisioned, or | |||
| of this document's scope. | exchanged is out of this document's scope. | |||
| CoAP is an application protocol, so CoAP compression requires | CoAP is an application protocol, so CoAP compression requires | |||
| installing common Rules between the two SCHC instances. SCHC | installing common Rules between the two SCHC instances. SCHC | |||
| compression may apply at two different levels: at IP and UDP in the | compression may apply at two different levels: at IP and UDP in the | |||
| LPWAN network and another at the application level for CoAP. These | LPWAN and another at the application level for CoAP. These two | |||
| two compressions may be independent. Both follow the same principle | compression techniques may be independent. Both follow the same | |||
| described in [RFC8724]. As different entities manage the CoAP | principle as that described in [RFC8724]. As different entities | |||
| compression at different levels, the SCHC Rules driving the | manage the CoAP compression process at different levels, the SCHC | |||
| compression/decompression are also different. The [RFC8724] | Rules driving the compression/decompression are also different. | |||
| describes how to use SCHC for IP and UDP headers. This document | [RFC8724] describes how to use SCHC for IP and UDP headers. This | |||
| specifies how to apply SCHC compression to CoAP headers. | document specifies how to apply SCHC compression to CoAP headers. | |||
| SCHC compresses and decompresses headers based on common contexts | SCHC compresses and decompresses headers based on common contexts | |||
| between Devices. SCHC context includes multiple Rules. Each Rule | between Devices. The SCHC context includes multiple Rules. Each | |||
| can match the header fields to specific values or ranges of values. | Rule can match the header fields to specific values or ranges of | |||
| If a Rule matches, the matched header fields are replaced by the | values. If a Rule matches, the matched header fields are replaced by | |||
| RuleID and the Compression Residue that contains the residual bits of | the RuleID and the Compression Residue that contains the residual | |||
| the compression. Thus, different Rules may correspond to different | bits of the compression. Thus, different Rules may correspond to | |||
| protocol headers in the packet that a Device expects to send or | different protocol headers in the packet that a Device expects to | |||
| receive. | send or receive. | |||
| A Rule describes the packets' entire header with an ordered list of | A Rule describes the packets' entire header with an ordered list of | |||
| fields descriptions; see section 7 of [RFC8724]. Thereby | Field Descriptors; see Section 7 of [RFC8724]. Thereby, each | |||
| each description contains the field ID (FID), its length (FL), and | description contains the Field ID (FID), Field Length (FL), and Field | |||
| its position (FP), a direction indicator (DI) (upstream, downstream, | Position (FP), as well as a Direction Indicator (DI) (upstream, | |||
| and bidirectional), and some associated Target Values (TV). The | downstream, and bidirectional) and some associated Target Values | |||
| direction indicator is used for compression to give the best TV to | (TVs). The DI is used for compression to give the best TV to the FID | |||
| the FID when these values differ in the transmission direction. So a | when these values differ in their transmission direction. So, a | |||
| field may be described several times. | field may be described several times. | |||
| A Matching Operator (MO) is associated with each header field | A Matching Operator (MO) is associated with each header Field | |||
| description. The Rule is selected if all the MOs fit the TVs for all | Descriptor. The Rule is selected if all the MOs fit the TVs for all | |||
| fields of the incoming header. A Rule cannot be selected if the | fields of the incoming header. A Rule cannot be selected if the | |||
| message contains an unknown field to the SCHC compressor. | message contains a field that is unknown to the SCHC compressor. | |||
| In that case, a Compression/Decompression Action (CDA) associated | In that case, a Compression/Decompression Action (CDA) associated | |||
| with each field gives the method to compress and decompress each | with each field gives the method to compress and decompress each | |||
| field. Compression mainly results in one of 4 actions: | field. Compression mainly results in one of four actions: | |||
| o send the field value (value-sent), | * send the field value (value-sent), | |||
| o send nothing (not-sent), | * send nothing (not-sent), | |||
| o send some least significant bits of the field (LSB) or, | * send some Least Significant Bits (LSBs) of the field, or | |||
| o send an index (mapping-sent). | * send an index (mapping-sent). | |||
| After applying the compression, there may be some bits to be sent. | After applying the compression, there may be some bits to be sent. | |||
| These values are called Compression Residue. | These values are called "Compression Residue". | |||
| SCHC is a general mechanism applied to different protocols, the exact | SCHC is a general mechanism applied to different protocols, with the | |||
| Rules to be used depending on the protocol and the Application. | exact Rules to be used depending on the protocol and the application. | |||
| Section 10 of the [RFC8724] describes the compression scheme for IPv6 | Section 10 of [RFC8724] describes the compression scheme for IPv6 and | |||
| and UDP headers. This document targets the CoAP header compression | UDP headers. This document targets CoAP header compression using | |||
| using SCHC. | SCHC. | |||
| 1.1. Terminology | 1.1. Terminology | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
| 14 [RFC2119][RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| 2. SCHC Applicability to CoAP | 2. SCHC Applicability to CoAP | |||
| SCHC Compression for CoAP header MAY be done in conjunction with the | SCHC compression for CoAP headers MAY be done in conjunction with the | |||
| lower layers (IPv6/UDP) or independently. The SCHC adaptation | lower layers (IPv6/UDP) or independently. The SCHC adaptation | |||
| layers, described in Section 5 of [RFC8724], may be used as shown in | layers, described in Section 5 of [RFC8724], may be used as shown in | |||
| Figure 1, Figure 2, and Figure 3. | Figures 1, 2, and 3. | |||
| In the first example, Figure 1, a Rule compresses the complete header | In the first example, Figure 1, a Rule compresses the complete header | |||
| stack from IPv6 to CoAP. In this case, the Device and the NGW | stack from IPv6 to CoAP. In this case, the Device and the Network | |||
| perform SCHC C/D (Static Context Header Compression Compressor/ | Gateway (NGW) perform SCHC C/D (SCHC Compression/Decompression; see | |||
| Decompressor). The Application communicating with the Device does | [RFC8724]). The application communicating with the Device does not | |||
| not implement SCHC C/D. | implement SCHC C/D. | |||
| (Device) (NGW) (App) | (Device) (NGW) (App) | |||
| +--------+ +--------+ | +--------+ +--------+ | |||
| | CoAP | | CoAP | | | CoAP | | CoAP | | |||
| +--------+ +--------+ | +--------+ +--------+ | |||
| | UDP | | UDP | | | UDP | | UDP | | |||
| +--------+ +----------------+ +--------+ | +--------+ +----------------+ +--------+ | |||
| | IPv6 | | IPv6 | | IPv6 | | | IPv6 | | IPv6 | | IPv6 | | |||
| +--------+ +--------+-------+ +--------+ | +--------+ +--------+-------+ +--------+ | |||
| | SCHC | | SCHC | | | | | | SCHC | | SCHC | | | | | |||
| +--------+ +--------+ + + + | +--------+ +--------+ + + + | |||
| | LPWAN | | LPWAN | | | | | | LPWAN | | LPWAN | | | | | |||
| +--------+ +--------+-------+ +--------+ | +--------+ +--------+-------+ +--------+ | |||
| ((((LPWAN)))) ------ Internet ------ | ((((LPWAN)))) ------ Internet ------ | |||
| Figure 1: Compression/Decompression at the LPWAN boundary. | Figure 1: Compression/Decompression at the LPWAN Boundary | |||
| Figure 1 shows the use of SCHC header compression above layer 2 in | Figure 1 shows the use of SCHC header compression above Layer 2 in | |||
| the Device and the NGW. The SCHC layer receives non-encrypted | the Device and the NGW. The SCHC layer receives non-encrypted | |||
| packets and can apply compression Rules to all the headers in the | packets and can apply compression Rules to all the headers in the | |||
| stack. On the other end, the NGW receives the SCHC packet and | stack. On the other end, the NGW receives the SCHC packet and | |||
| reconstructs the headers using the Rule and the Compression Residue. | reconstructs the headers using the Rule and the Compression Residue. | |||
| After the decompression, the NGW forwards the IPv6 packet toward the | After the decompression, the NGW forwards the IPv6 packet toward the | |||
| destination. The same process applies in the other direction when a | destination. The same process applies in the other direction when a | |||
| non-encrypted packet arrives at the NGW. Thanks to the IP forwarding | non-encrypted packet arrives at the NGW. Thanks to the IP forwarding | |||
| based on the IPv6 prefix, the NGW identifies the Device and | based on the IPv6 prefix, the NGW identifies the Device and | |||
| compresses headers using the Device's Rules. | compresses headers using the Device's Rules. | |||
| In the second example, Figure 2, the SCHC compression is applied in | In the second example, Figure 2, SCHC compression is applied in the | |||
| the CoAP layer, compressing the CoAP header independently of the | CoAP layer, compressing the CoAP header independently of the other | |||
| other layers. The RuleID, the Compression Residue, and CoAP payload | layers. The RuleID, Compression Residue, and CoAP payload are | |||
| are encrypted using a mechanism such as DTLS. Only the other end | encrypted using a mechanism such as DTLS. Only the other end (App) | |||
| (App) can decipher the information. If needed, layers below use SCHC | can decipher the information. If needed, layers below use SCHC to | |||
| to compress the header as defined in [RFC8724] (represented in dotted | compress the header as defined in [RFC8724] (represented by dotted | |||
| lines). | lines in the figure). | |||
| This use case needs an end-to-end context initialization between the | This use case needs an end-to-end context initialization between the | |||
| Device and the Application. The context initialization is out of the | Device and the application. The context initialization is out of | |||
| scope of this document. | scope for this document. | |||
| (Device) (NGW) (App) | (Device) (NGW) (App) | |||
| +--------+ +--------+ | +--------+ +--------+ | |||
| | CoAP | | CoAP | | | CoAP | | CoAP | | |||
| +--------+ +--------+ | +--------+ +--------+ | |||
| | SCHC | | SCHC | | | SCHC | | SCHC | | |||
| +--------+ +--------+ | +--------+ +--------+ | |||
| | DTLS | | DTLS | | | DTLS | | DTLS | | |||
| +--------+ +--------+ | +--------+ +--------+ | |||
| . udp . . udp . | . udp . . udp . | |||
| .......... .................. .......... | .......... .................. .......... | |||
| . ipv6 . . ipv6 . . ipv6 . | . ipv6 . . ipv6 . . ipv6 . | |||
| .......... .................. .......... | .......... .................. .......... | |||
| . schc . . schc . . . . | . schc . . schc . . . . | |||
| .......... .......... . . . | .......... .......... . . . | |||
| . lpwan . . lpwan . . . . | . lpwan . . lpwan . . . . | |||
| .......... .................. .......... | .......... .................. .......... | |||
| ((((LPWAN)))) ------ Internet ------ | ((((LPWAN)))) ------ Internet ------ | |||
| Figure 2: Standalone CoAP end-to-end Compression/Decompression | Figure 2: Standalone CoAP End-to-End Compression/Decompression | |||
| The third example, Figure 3, shows the use of Object Security for | The third example, Figure 3, shows the use of Object Security for | |||
| Constrained RESTful Environments (OSCORE) [RFC8613]. In this case, | Constrained RESTful Environments (OSCORE) [RFC8613]. In this case, | |||
| SCHC needs two Rules to compress the CoAP header. A first Rule | SCHC needs two Rules to compress the CoAP header. A first Rule | |||
| focused on the inner header. The result of this first compression is | focuses on the Inner header. The result of this first compression is | |||
| encrypted using the OSCORE mechanism. Then a second Rule compresses | encrypted using the OSCORE mechanism. Then, a second Rule compresses | |||
| the outer header, including the OSCORE Options. | the Outer header, including the OSCORE options. | |||
| (Device) (NGW) (App) | (Device) (NGW) (App) | |||
| +--------+ +--------+ | +--------+ +--------+ | |||
| | CoAP | | CoAP | | | CoAP | | CoAP | | |||
| | inner | | inner | | | Inner | | Inner | | |||
| +--------+ +--------+ | +--------+ +--------+ | |||
| | SCHC | | SCHC | | | SCHC | | SCHC | | |||
| | inner | | inner | | | Inner | | Inner | | |||
| +--------+ +--------+ | +--------+ +--------+ | |||
| | CoAP | | CoAP | | | CoAP | | CoAP | | |||
| | outer | | outer | | | Outer | | Outer | | |||
| +--------+ +--------+ | +--------+ +--------+ | |||
| | SCHC | | SCHC | | | SCHC | | SCHC | | |||
| | outer | | outer | | | Outer | | Outer | | |||
| +--------+ +--------+ | +--------+ +--------+ | |||
| . udp . . udp . | . udp . . udp . | |||
| .......... .................. .......... | .......... .................. .......... | |||
| . ipv6 . . ipv6 . . ipv6 . | . ipv6 . . ipv6 . . ipv6 . | |||
| .......... .................. .......... | .......... .................. .......... | |||
| . schc . . schc . . . . | . schc . . schc . . . . | |||
| .......... .......... . . . | .......... .......... . . . | |||
| . lpwan . . lpwan . . . . | . lpwan . . lpwan . . . . | |||
| .......... .................. .......... | .......... .................. .......... | |||
| ((((LPWAN)))) ------ Internet ------ | ((((LPWAN)))) ------ Internet ------ | |||
| Figure 3: OSCORE compression/decompression. | Figure 3: OSCORE Compression/Decompression | |||
| In the case of several SCHC instances, as shown in Figure 2 and | In the case of several SCHC instances, as shown in Figures 2 and 3, | |||
| Figure 3, the Rules may come from different provisioning domains. | the Rules may come from different provisioning domains. | |||
| This document focuses on CoAP compression represented in the dashed | This document focuses on CoAP compression, as represented by the | |||
| boxes in the previous figures. | 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 applies the same description and | |||
| compression/decompression techniques like the one for IP and UDP | compression/decompression techniques as the technique used for IP and | |||
| explained in the [RFC8724]. For CoAP, the SCHC Rules description | UDP, as explained in [RFC8724]. For CoAP, the SCHC Rules description | |||
| uses the direction information to optimize the compression by | uses the direction information to optimize the compression by | |||
| reducing the number of Rules needed to compress headers. The field | reducing the number of Rules needed to compress headers. The Field | |||
| description MAY define both request/response headers and target | Descriptor MAY define both request/response headers and TVs in the | |||
| values in the same Rule, using the DI (direction indicator) to make | same Rule, using the DI to indicate the header type. | |||
| the difference. | ||||
| As for other header compression protocols, when the compressor does | As for other header compression protocols, when the compressor does | |||
| not find a correct Rule to compress the header, the packet MUST be | not find a correct Rule to compress the header, the packet MUST be | |||
| sent uncompressed using the RuleID dedicated to this purpose. Where | sent uncompressed using the RuleID dedicated to this purpose, and | |||
| the Compression Residue is the complete header of the packet. See | where the Compression Residue is the complete header of the packet. | |||
| section 6 of [RFC8724]. | See Section 6 of [RFC8724]. | |||
| 3.1. Differences between CoAP and UDP/IP Compression | 3.1. Differences between CoAP and UDP/IP Compression | |||
| CoAP compression differs from IPv6 and UDP compression in the | CoAP compression differs from IPv6 and UDP compression in the | |||
| following aspects: | following aspects: | |||
| o The CoAP protocol is asymmetric; the headers are different for a | * The CoAP message format is asymmetric; the headers are different | |||
| request or a response. For example, the URI-Path option is | for a request or a response. For example, the Uri-Path option is | |||
| mandatory in the request, and it might not be present in the | mandatory in the request, and it might not be present in the | |||
| response. A request might contain an Accept option, and the | response. A request might contain an Accept option, and the | |||
| response might include a Content-Format option. In comparison, | response might include a Content-Format option. In comparison, | |||
| IPv6 and UDP returning path swap the value of some fields in the | the IPv6 and UDP returning path swaps the value of some fields in | |||
| header. However, all the directions have the same fields (e.g., | the header. However, all the directions have the same fields | |||
| source and destination address fields). | (e.g., source and destination address fields). | |||
| The [RFC8724] defines the use of a direction indicator (DI) in the | [RFC8724] defines the use of a DI in the Field Descriptor, which | |||
| Field Descriptor, which allows a single Rule to process a message | allows a single Rule to process a message header differently, | |||
| header differently depending on the direction. | depending on the direction. | |||
| o Even when a field is "symmetric" (i.e., found in both directions), | * Even when a field is "symmetric" (i.e., found in both directions), | |||
| the values carried in each direction are different. The | the values carried in each direction are different. The | |||
| compression may use a "match-mapping" MO to limit the range of | compression may use a "match-mapping" MO to limit the range of | |||
| expected values in a particular direction and reduce the | expected values in a particular direction and reduce the | |||
| Compression Residue's size. Through the direction indicator (DI), | Compression Residue's size. Through the DI, a Field Descriptor in | |||
| a field description in the Rules splits the possible field value | the Rules splits the possible field value into two parts, one for | |||
| into two parts, one for each direction. For instance, if a client | each direction. For instance, if a client sends only Confirmable | |||
| sends only CON requests, the Type can be elided by compression, | (CON) requests [RFC7252], the Type can be elided by compression, | |||
| and the answer may use one single bit to carry either the ACK or | and the answer may use one single bit to carry either the ACK or | |||
| RST type. The field Code has the same behavior, the 0.0X code | Reset (RST) type. The field Code has the same behavior: the 0.0X | |||
| format value in the request, and the Y.ZZ code format in the | code format value in the request and the Y.ZZ code format in the | |||
| response. | response. | |||
| o In SCHC, the Rule defines the different header fields' length, so | * In SCHC, the Rule defines the different header fields' length, so | |||
| SCHC does not need to send it. In IPv6 and UDP headers, the | SCHC does not need to send it. In IPv6 and UDP headers, the | |||
| fields have a fixed size, known by definition. On the other hand, | fields have a fixed size, known by definition. On the other hand, | |||
| some CoAP header fields have variable lengths, and the Rule | some CoAP header fields have variable lengths, and the Rule | |||
| description specifies it. For example, in a URI-path or URI- | description specifies it. For example, in a Uri-Path or Uri- | |||
| query, the Token size may vary from 0 to 8 bytes, and the CoAP | Query, the Token size may vary from 0 to 8 bytes, and the CoAP | |||
| options use the Type-Length-Value encoding format. | options use the Type-Length-Value encoding format. | |||
| When doing SCHC compression of a variable-length field, | When doing SCHC compression of a variable-length field, | |||
| Section 7.5.2 from [RFC8724] offers the possibility to define a | Section 7.4.2 of [RFC8724] offers the option of defining a | |||
| function for the Field length in the Field Description to know the | function for the Field Length in the Field Descriptor to know the | |||
| length before compression. If the field length is unknown, the | length before compression. If the Field Length is unknown, the | |||
| Rule will set it as a variable, and SCHC will send the compressed | Rule will set it as a variable, and SCHC will send the compressed | |||
| field's length in the Compression Residue. | field's length in the Compression Residue. | |||
| o A field can appear several times in the CoAP headers. It is found | * A field can appear several times in the CoAP headers. It is found | |||
| typically for elements of a URI (path or queries). The SCHC | typically for elements of a URI (path or queries). The SCHC | |||
| specification [RFC8724] allows a Field ID to appear several times | specification [RFC8724] allows a FID to appear several times in | |||
| in the Rule and uses the Field Position (FP) to identify the | the Rule and uses the Field Position (FP) to identify the correct | |||
| correct instance, thereby removing the matching operation's | instance, thereby removing the MO's ambiguity. | |||
| ambiguity. | ||||
| o Field lengths defined in the CoAP protocol can be too | * Field Lengths defined in CoAP can be too large when it comes to | |||
| large regarding LPWAN traffic constraints. For instance, this is | LPWAN traffic constraints. For instance, this is particularly | |||
| particularly true for the Message-ID field and the Token field. | true for the Message ID field and the Token field. SCHC uses | |||
| SCHC uses different Matching operators (MO) to perform the | different MOs to perform the compression. See Section 7.4 of | |||
| compression. See section 7.4 of [RFC8724]. In this case, SCHC | [RFC8724]. In this case, SCHC can apply the Most Significant Bits | |||
| can apply the Most Significant Bits (MSB) MO to reduce the | (MSBs) MO to reduce the information carried on LPWANs. | |||
| information carried on LPWANs. | ||||
| 4. Compression of CoAP header fields | 4. Compression of CoAP Header Fields | |||
| This section discusses the compression of the different CoAP header | This section discusses the compression of the different CoAP header | |||
| fields. The CoAP compression with SCHC follows Section 7.1 of | fields. CoAP compression with SCHC follows the information provided | |||
| [RFC8724]. | in Section 7.1 of [RFC8724]. | |||
| 4.1. CoAP version field | 4.1. CoAP Version Field | |||
| CoAP version is bidirectional and MUST be elided during the SCHC | The CoAP version is bidirectional and MUST be elided during SCHC | |||
| compression since it always contains the same value. In the future, | compression, since it always contains the same value. In the future, | |||
| or if a new version of CoAP is defined, new Rules will be needed to | or if a new version of CoAP is defined, new Rules will be needed to | |||
| avoid ambiguities between versions. | avoid ambiguities between versions. | |||
| 4.2. CoAP type field | 4.2. CoAP Type Field | |||
| The CoAP protocol [RFC7252] has four types of messages: two requests | CoAP [RFC7252] has four types of messages: two requests (CON, NON), | |||
| (CON, NON), one response (ACK), and one empty message (RST). | one response (ACK), and one empty message (RST). | |||
| The SCHC compression SHOULD elide this field if, for instance, a | The SCHC compression scheme SHOULD elide this field if, for instance, | |||
| client is sending only NON or only CON messages. For the RST | a client is sending only Non-confirmable (NON) messages or only CON | |||
| message, SCHC may use a dedicated Rule. For other usages, SCHC can | messages. For the RST message, SCHC may use a dedicated Rule. For | |||
| use a "match-mapping" MO. | other usages, SCHC can use a "match-mapping" MO. | |||
| 4.3. CoAP code field | 4.3. CoAP Code Field | |||
| The code field is an IANA registry [RFC7252], and it indicates the | The Code field, defined in an IANA registry [RFC7252], indicates the | |||
| Request Method used in CoAP. The compression of the CoAP code field | Request Method used in CoAP. The compression of the CoAP Code field | |||
| follows the same principle as that of the CoAP type field. If the | follows the same principle as that of the CoAP Type field. If the | |||
| Device plays a specific role, SCHC may split the code values into two | Device plays a specific role, SCHC may split the code values into two | |||
| fields description, the request codes with the 0 class and the | Field Descriptors: (1) the request codes with the 0 class and (2) the | |||
| response values. SCHC will use the direction indicator to identify | response values. SCHC will use the DI to identify the correct value | |||
| the correct value in the packet. | in the packet. | |||
| If the Device only implements a CoAP client, SCHC compression may | If the Device only implements a CoAP client, SCHC compression may | |||
| reduce the request code to the set of requests the client can | reduce the request code to the set of requests the client can | |||
| process. | process. | |||
| For known values, SCHC can use a "match-mapping" MO. If SCHC cannot | For known values, SCHC can use a "match-mapping" MO. If SCHC cannot | |||
| compress the code field, it will send the values in the Compression | compress the Code field, it will send the values in the Compression | |||
| Residue. | Residue. | |||
| 4.4. CoAP Message ID field | 4.4. CoAP Message ID Field | |||
| SCHC can compress the Message ID field with the "MSB" MO and the | SCHC can compress the Message ID field with the "MSB" MO and the | |||
| "LSB" CDA. See section 7.4 of [RFC8724]. | "LSB" CDA. See Section 7.4 of [RFC8724]. | |||
| 4.5. CoAP Token fields | 4.5. CoAP Token Fields | |||
| CoAP defines the Token using two CoAP fields, Token Length in the | CoAP defines the Token using two CoAP fields: Token Length in the | |||
| mandatory header and Token Value directly following the mandatory | mandatory header and Token Value directly following the mandatory | |||
| CoAP header. | CoAP header. | |||
| SCHC processes the Token length as any header field. If the value | SCHC processes the Token Length as it would any header field. If the | |||
| does not change, the size can be stored in the TV and elided during | value does not change, the size can be stored in the TV and elided | |||
| the transmission. Otherwise, SCHC will send the token length in the | during the transmission. Otherwise, SCHC will send the Token Length | |||
| Compression Residue. | in the Compression Residue. | |||
| For the Token Value, SCHC MUST NOT send it as a variable-length in | For the Token Value, SCHC MUST NOT send it as variable-length data in | |||
| the Compression Residue to avoid ambiguity with Token Length. | the Compression Residue, to avoid ambiguity with the Token Length. | |||
| Therefore, SCHC MUST use the Token length value to define the size of | Therefore, SCHC MUST use the Token Length value to define the size of | |||
| the Compression Residue. SCHC designates a specific function "tkl" | the Compression Residue. SCHC designates a specific function, "tkl", | |||
| that the Rule MUST use to complete the field description. During the | that the Rule MUST use to complete the Field Descriptor. During the | |||
| decompression, this function returns the value contained in the Token | decompression, this function returns the value contained in the Token | |||
| Length field. | Length field. | |||
| 5. CoAP options | 5. CoAP Options | |||
| CoAP defines options placed after the basic header in Option Numbers | CoAP defines options placed after the basic header, ordered by option | |||
| order; see [RFC7252]. Each Option instance in a message uses the | number; see [RFC7252]. Each Option instance in a message uses the | |||
| format Delta-Type (D-T), Length (L), Value (V). The SCHC Rule builds | format Delta-Type (D-T), Length (L), Value (V). The SCHC Rule builds | |||
| the description of the option by using in the Field ID the Option | the description of the option by using the following: | |||
| 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 well- | ||||
| known size, the Rule may keep the length value. Therefore, SCHC | ||||
| compression does not send it. Otherwise, SCHC Compression carries | ||||
| the length of the Compression Residue, in addition to the Compression | ||||
| Residue value. | ||||
| CoAP requests and responses do not include the same options. So | * in the FID: the option number built from the D-T; | |||
| Compression Rules may reflect this asymmetry by tagging the direction | ||||
| indicator. | * in the TV: the option value; and | |||
| * for the Option Length: the information provided in Sections 7.4.1 | ||||
| and 7.4.2 of [RFC8724]. | ||||
| When the Option Length has a well-known size, the Rule may keep the | ||||
| length value. Therefore, SCHC compression does not send it. | ||||
| Otherwise, SCHC compression carries the length of the Compression | ||||
| Residue, in addition to the Compression Residue value. | ||||
| CoAP requests and responses do not include the same options. So, | ||||
| compression Rules may reflect this asymmetry by tagging the DI. | ||||
| Note that length coding differs between CoAP options and SCHC | Note that length coding differs between CoAP options and SCHC | |||
| variable size Compression Residue. | variable size Compression Residue. | |||
| The following sections present how SCHC compresses some specific CoAP | The following sections present how SCHC compresses some specific CoAP | |||
| options. | options. | |||
| If CoAP introduces a new option, the SCHC Rules MAY be updated, and | If CoAP introduces a new option, the SCHC Rules MAY be updated, and | |||
| the new Field ID description MUST be assigned to allow its | the new FID description MUST be assigned to allow its compression. | |||
| compression. Otherwise, if no Rule describes this new option, the | Otherwise, if no Rule describes this new option, SCHC compression is | |||
| SCHC compression is not achieved, and SCHC sends the CoAP header | not achieved, and SCHC sends the CoAP header without compression. | |||
| without compression. | ||||
| 5.1. CoAP Content and Accept options. | 5.1. CoAP Content and Accept Options | |||
| If the client expects a single value, it can be stored in the TV and | If the client expects a single value, it can be stored in the TV and | |||
| elided during the transmission. Otherwise, if the client expects | elided during the transmission. Otherwise, if the client expects | |||
| several possible values, a "match-mapping" SHOULD be used to limit | several possible values, a "match-mapping" MO SHOULD be used to limit | |||
| the Compression Residue's size. If not, SCHC has to send the option | the Compression Residue's size. If not, SCHC has to send the option | |||
| value in the Compression Residue (fixed or variable length). | value in the Compression Residue (fixed or variable length). | |||
| 5.2. CoAP option Max-Age, Uri-Host, and Uri-Port fields | 5.2. CoAP Option Max-Age, Uri-Host, and Uri-Port Fields | |||
| SCHC compresses these three fields in the same way. When the value | SCHC compresses these three fields in the same way. When the values | |||
| of these options is known, SCHC can elide these fields. If the | of these options are known, SCHC can elide these fields. If the | |||
| option uses well-known values, SCHC can use a "match-mapping" MO. | option uses well-known values, SCHC can use a "match-mapping" MO. | |||
| Otherwise, SCHC will use "value-sent" MO, and the Compression Residue | Otherwise, SCHC will use the "value-sent" MO, and the Compression | |||
| will send these options' values. | Residue will send these options' values. | |||
| 5.3. CoAP option Uri-Path and Uri-Query fields | 5.3. CoAP Option Uri-Path and Uri-Query Fields | |||
| The Uri-Path and Uri-Query fields are repeatable options; this means | The Uri-Path and Uri-Query fields are repeatable options; this means | |||
| that in the CoAP header, they may appear several times with different | that in the CoAP header, they may appear several times with different | |||
| values. SCHC Rule description uses the Field Position (FP) to | values. The SCHC Rule description uses the FP to distinguish the | |||
| distinguish the different instances in the path. | different instances in the path. | |||
| To compress repeatable field values, SCHC may use a "match-mapping" | To compress repeatable field values, SCHC may use a "match-mapping" | |||
| MO to reduce the size of variable Paths or Queries. In these cases, | MO to reduce the size of variable paths or queries. In these cases, | |||
| to optimize the compression, several elements can be regrouped into a | to optimize the compression, several elements can be regrouped into a | |||
| single entry. The Numbering of elements does not change, and the | single entry. The numbering of elements does not change, and the | |||
| first matching element sets the MO comparison. | first matching element sets the MO comparison. | |||
| +--------+---+--+--+--------+-------------+------------+ | In Table 1, SCHC can use a single bit in the Compression Residue to | |||
| | Field |FL |FP|DI| Target | Matching | CDA | | ||||
| | | | | | Value | Operator | | | ||||
| +--------+---+--+--+--------+-------------+------------+ | ||||
| |Uri-Path| | 1|up|["/a/b",|match-mapping|mapping-sent| | ||||
| | | | | |"/c/d"] | | | | ||||
| |Uri-Path|var| 3|up| |ignore |value-sent | | ||||
| +--------+---+--+--+--------+-------------+------------+ | ||||
| Figure 4: complex path example | ||||
| In Figure 4, SCHC can use a single bit in the Compression Residue to | ||||
| code one of the two paths. If regrouping were not allowed, 2 bits in | code one of the two paths. If regrouping were not allowed, 2 bits in | |||
| the Compression Residue would be needed. SCHC sends the third path | the Compression Residue would be needed. SCHC sends the third path | |||
| element as a variable size in the Compression Residue. | element as a variable size in the Compression Residue. | |||
| The length of URI-Path and URI-Query may be known when the rule is | +==========+=====+====+====+==========+=========+==============+ | |||
| defined. In any case, SCHC MUST set the field length to variable. | | Field | FL | FP | DI | TV | MO | CDA | | |||
| The unit to indicate the Compression Residue size is in Byte. | +==========+=====+====+====+==========+=========+==============+ | |||
| | Uri-Path | | 1 | Up | ["/a/b", | match- | mapping-sent | | ||||
| | | | | | "/c/d"] | mapping | | | ||||
| +----------+-----+----+----+----------+---------+--------------+ | ||||
| | Uri-Path | var | 3 | Up | | ignore | value-sent | | ||||
| +----------+-----+----+----+----------+---------+--------------+ | ||||
| Table 1: Complex Path Example | ||||
| The length of Uri-Path and Uri-Query may be known when the Rule is | ||||
| defined. In any case, SCHC MUST set the Field Length to a variable | ||||
| value. The Compression Residue size is expressed in bytes. | ||||
| SCHC compression can use the MSB MO to a Uri-Path or Uri-Query | SCHC compression can use the MSB MO to a Uri-Path or Uri-Query | |||
| element. However, attention to the length is important because the | element. However, attention to the length is important because the | |||
| MSB value is in bits, and the size MUST always be a multiple of 8 | MSB value is in bits, and the size MUST always be a multiple of 8 | |||
| bits. | bits. | |||
| The length sent at the beginning of a variable-length Compression | The length sent at the beginning of a variable-length Compression | |||
| Residue indicates the LSB's size in bytes. | Residue indicates the LSB's size in bytes. | |||
| For instance, for a CORECONF path /c/X6?k="eth0" the Rule description | For instance, for a CORECONF path /c/X6?k=eth0, the Rule description | |||
| can be: | can be as follows (Table 2): | |||
| +-------------+---+--+--+--------+---------+-------------+ | +===========+=====+====+====+======+=========+============+ | |||
| | Field |FL |FP|DI| Target | Match | CDA | | | Field | FL | FP | DI | TV | MO | CDA | | |||
| | | | | | Value | Opera. | | | +===========+=====+====+====+======+=========+============+ | |||
| +-------------+---+--+--+--------+---------+-------------+ | | Uri-Path | | 1 | Up | "c" | equal | not-sent | | |||
| |Uri-Path | | 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(24) |LSB | | +-----------+-----+----+----+------+---------+------------+ | |||
| +-------------+---+--+--+--------+---------+-------------+ | | Uri-Query | var | 1 | Up | "k=" | MSB(16) | LSB | | |||
| +-----------+-----+----+----+------+---------+------------+ | ||||
| Figure 5: CORECONF URI compression | Table 2: CORECONF URI Compression | |||
| Figure 5 shows the Rule description for a URI-Path and a URI-Query. | Table 2 shows the Rule description for a Uri-Path and a Uri-Query. | |||
| SCHC compresses the first part of the URI-Path with a "not-sent" CDA. | SCHC compresses the first part of the Uri-Path with a "not-sent" CDA. | |||
| SCHC will send the second element of the URI-Path with the length | SCHC will send the second element of the Uri-Path with the length | |||
| (i.e., 0x2 X 6) followed by the query option (i.e., 0x05 eth0"). | (i.e., 0x2 "X6") followed by the query option (i.e., 0x4 "eth0"). | |||
| 5.3.1. Variable number of Path or Query elements | 5.3.1. Variable Number of Path or Query Elements | |||
| SCHC fixed the number of Uri-Path or Uri-Query elements in a Rule at | SCHC fixed the number of Uri-Path or Uri-Query elements in a Rule at | |||
| the Rule creation time. If the number varies, SCHC SHOULD create | the Rule creation time. If the number varies, SCHC SHOULD either | |||
| several Rules to cover all the possibilities. Another one is to | ||||
| define the length of Uri-Path to variable and sends a Compression | * create several Rules to cover all possibilities or | |||
| Residue with a length of 0 to indicate that this Uri-Path is empty. | ||||
| * create a Rule that defines several entries for Uri-Path to cover | ||||
| the longest path and send a Compression Residue with a length of 0 | ||||
| to indicate that a Uri-Path entry is empty. | ||||
| However, this adds 4 bits to the variable Compression Residue size. | However, this adds 4 bits to the variable Compression Residue size. | |||
| See section 7.5.2 [RFC8724]. | See Section 7.4.2 of [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 | |||
| The SCHC Rule description MAY define sending some field values by | The SCHC Rule description MAY define sending some field values by | |||
| setting the TV to "not-sent," MO to "ignore," and CDA to "value- | setting the TV to "not-sent", the MO to "ignore", and the CDA to | |||
| sent." A Rule MAY also use a "match-mapping" when there are | "value-sent". A Rule MAY also use a "match-mapping" MO when there | |||
| different options for the same FID. Otherwise, the Rule sets the TV | are different options for the same FID. Otherwise, the Rule sets the | |||
| to the value, MO to "equal," and CDA to "not-sent." | TV to the value, the MO to "equal", and the CDA 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 | |||
| A Rule entry cannot store these fields' values. The Rule description | A Rule entry cannot store these fields' values. The Rule description | |||
| MUST always send these values in the Compression Residue. | MUST always send these values in the Compression Residue. | |||
| 6. SCHC compression of CoAP extension RFCs | 6. SCHC Compression of CoAP Extensions | |||
| 6.1. Block | 6.1. Block | |||
| When a packet uses a Block [RFC7959] option, SCHC compression MUST | When a packet uses a Block option [RFC7959], SCHC compression MUST | |||
| send its content in the Compression Residue. The SCHC Rule describes | send its content in the Compression Residue. The SCHC Rule describes | |||
| an empty TV with a MO set to "ignore" and a CDA to "value-sent." | an empty TV with the MO set to "ignore" and the CDA set to "value- | |||
| Block option allows fragmentation at the CoAP level that is | sent". The Block option allows fragmentation at the CoAP level that | |||
| compatible with SCHC fragmentation. Both fragmentation mechanisms | is compatible with SCHC fragmentation. Both fragmentation mechanisms | |||
| are complementary, and the node may use them for the same packet as | are complementary, and the node may use them for the same packet as | |||
| needed. | needed. | |||
| 6.2. Observe | 6.2. Observe | |||
| The [RFC7641] defines the Observe option. The SCHC Rule description | [RFC7641] defines the Observe Option. The SCHC Rule description will | |||
| will not define the TV, but MO to "ignore," and the CDA to "value- | not define the TV but will set the MO to "ignore" and the CDA to | |||
| sent." SCHC does not limit the maximum size for this option (3 | "value-sent". SCHC does not limit the maximum size for this option | |||
| bytes). To reduce the transmission size, either the Device | (3 bytes). To reduce the transmission size, either the Device | |||
| implementation MAY limit the delta between two consecutive values, or | implementation MAY limit the delta between two consecutive values or | |||
| a proxy can modify the increment. | a proxy can modify the increment. | |||
| Since the Observe option MAY use an RST message to inform a server | Since the Observe Option MAY use a RST message to inform a server | |||
| that the client does not require the Observe response, a specific | that the client does not require the Observe response, a specific | |||
| SCHC Rule SHOULD exist to allow the message's compression with the | SCHC Rule SHOULD exist to allow the message's compression with the | |||
| RST type. | RST type. | |||
| 6.3. No-Response | 6.3. No-Response | |||
| The [RFC7967] defines a No-Response option limiting the responses | [RFC7967] defines a No-Response option limiting the responses made by | |||
| made by a server to a request. Different behaviors exist while using | a server to a request. Different behaviors exist while using this | |||
| this option to limit the responses made by a server to a request. If | option to limit the responses made by a server to a request. If both | |||
| both ends know the value, then the SCHC Rule will describe a TV to | ends know the value, then the SCHC Rule will describe a TV to this | |||
| this value, with a MO set to "equal" and CDA set to "not-sent." | value, with the MO set to "equal" and the CDA set to "not-sent". | |||
| Otherwise, if the value is changing over time, the SCHC Rule will set | Otherwise, if the value is changing over time, the SCHC Rule will set | |||
| the MO to "ignore" and CDA to "value-sent." The Rule may also use a | the MO to "ignore" and the CDA to "value-sent". The Rule may also | |||
| "match-mapping" to compress this option. | use a "match-mapping" MO to compress this option. | |||
| 6.4. OSCORE | 6.4. OSCORE | |||
| OSCORE [RFC8613] defines end-to-end protection for CoAP messages. | OSCORE [RFC8613] defines end-to-end protection for CoAP messages. | |||
| This section describes how SCHC Rules can be applied to compress | This section describes how SCHC Rules can be applied to compress | |||
| OSCORE-protected messages. | OSCORE-protected messages. | |||
| Figure 4 shows the OSCORE option value encoding defined in | ||||
| Section 6.1 of [RFC8613], where the first byte specifies the content | ||||
| of the OSCORE options using 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 context field in the option. Bit | ||||
| k, when set, indicates the presence of a kid field. The three least | ||||
| significant bits, n, indicate the length of the piv (Partial | ||||
| Initialization Vector) field in bytes. When n = 0, no piv is | ||||
| present. | ||||
| 0 1 2 3 4 5 6 7 <--------- n bytes -------------> | 0 1 2 3 4 5 6 7 <--------- n bytes -------------> | |||
| +-+-+-+-+-+-+-+-+--------------------------------- | +-+-+-+-+-+-+-+-+--------------------------------- | |||
| |0 0 0|h|k| n | Partial IV (if any) ... | |0 0 0|h|k| n | Partial IV (if any) ... | |||
| +-+-+-+-+-+-+-+-+--------------------------------- | +-+-+-+-+-+-+-+-+--------------------------------- | |||
| | | | | | | | | |||
| |<-- CoAP -->|<------ CoAP OSCORE_piv ------> | | |<-- CoAP -->|<------ CoAP OSCORE_piv ------> | | |||
| OSCORE_flags | OSCORE_flags | |||
| <- 1 byte -> <------ s bytes -----> | <- 1 byte -> <------ s bytes -----> | |||
| +------------+----------------------+-----------------------+ | +------------+----------------------+-----------------------+ | |||
| | s (if any) | kid context (if any) | kid (if any) ... | | | s (if any) | kid context (if any) | kid (if any) ... | | |||
| +------------+----------------------+-----------------------+ | +------------+----------------------+-----------------------+ | |||
| | | | | | | | | |||
| | <------ CoAP OSCORE_kidctx ------>|<-- CoAP OSCORE_kid -->| | | <------ CoAP OSCORE_kidctx ------>|<-- CoAP OSCORE_kid -->| | |||
| Figure 6: OSCORE Option | Figure 4: OSCORE Option | |||
| The Figure 6 shows the OSCORE Option Value encoding defined in | ||||
| Section 6.1 of [RFC8613], where the first byte specifies the Content | ||||
| of the OSCORE options using 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 context field in the option. Bit | ||||
| k, when set, indicates the presence of a kid field. The three least | ||||
| significant bits n indicate the length of the piv (Partial | ||||
| Initialization Vector) field in bytes. 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, the kid context field, | |||
| kid field in this order, and if present, the kid context field's | and the kid field, in that order, and, if present, the kid context | |||
| length is encoded in the first byte denoting by 's' the length of the | field's length (in bytes) is encoded in the first byte, denoted by | |||
| kid context in bytes. | "s". | |||
| To better perform OSCORE SCHC compression, the Rule description needs | To better perform OSCORE SCHC compression, the Rule description needs | |||
| to identify the OSCORE Option and the fields it contains. | to identify the OSCORE option and the fields it contains. | |||
| Conceptually, it discerns up to 4 distinct pieces of information | Conceptually, it discerns up to four 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. The SCHC Rule splits into four field descriptions the | and the kid. The SCHC Rule splits the OSCORE option into four Field | |||
| OSCORE option to compress them: | Descriptors in order to compress them: | |||
| o CoAP OSCORE_flags, | * CoAP OSCORE_flags | |||
| o CoAP OSCORE_piv, | * CoAP OSCORE_piv | |||
| o CoAP OSCORE_kidctx, | * CoAP OSCORE_kidctx | |||
| o CoAP OSCORE_kid. | * CoAP OSCORE_kid | |||
| Figure 6 shows the OSCORE Option format with those four fields | Figure 4 shows the OSCORE option format with those four fields | |||
| superimposed on it. Note that the CoAP OSCORE_kidctx field directly | superimposed on it. Note that the CoAP OSCORE_kidctx field directly | |||
| includes the size octet s. | includes the size octet, s. | |||
| 7. Examples of CoAP header compression | 7. Examples of CoAP Header Compression | |||
| 7.1. Mandatory header with CON message | 7.1. Mandatory Header with CON Message | |||
| In this first scenario, the SCHC Compressor at the Network Gateway | In this first scenario, the SCHC compressor on the NGW side receives | |||
| side receives a POST message from an Internet client, which is | a POST message from an Internet client, which is immediately | |||
| immediately acknowledged by the Device. Figure 7 describes the SCHC | acknowledged by the Device. Table 3 describes the SCHC Rule | |||
| Rule descriptions for this scenario. | descriptions for this scenario. | |||
| RuleID 1 | +===================================================================+ | |||
| +-------------+--+--+--+------+---------+-------------++------------+ | |RuleID 1 | | |||
| | Field |FL|FP|DI|Target| Match | CDA || Sent | | +==========+===+==+==+======+===============+===============+=======+ | |||
| | | | | |Value | Opera. | || [bits] | | | Field | FL|FP|DI| TV | MO | CDA | Sent | | |||
| +-------------+--+--+--+------+---------+-------------++------------+ | | | | | | | | | [bits]| | |||
| |CoAP version | 2| 1|bi| 01 |equal |not-sent || | | +==========+===+==+==+======+===============+===============+=======+ | |||
| |CoAP Type | 2| 1|dw| CON |equal |not-sent || | | |CoAP |2 |1 |Bi|01 | equal | not-sent | | | |||
| |CoAP Type | 2| 1|up|[ACK, |match- |matching- || | | |version | | | | | | | | | |||
| | | | | | RST] |mapping |sent || T | | +----------+---+--+--+------+---------------+---------------+=======+ | |||
| |CoAP TKL | 4| 1|bi| 0 |equal |not-sent || | | |CoAP Type |2 |1 |Dw|CON | equal | not-sent | | | |||
| |CoAP Code | 8| 1|bi|[0.00,| | || | | +----------+---+--+--+------+---------------+---------------+=======+ | |||
| | | | | | ... |match- |matching- || | | |CoAP Type |2 |1 |Up|[ACK, | match-mapping | matching-sent |T | | |||
| | | | | | 5.05]|mapping |sent || CC CCC | | | | | | |RST] | | | | | |||
| |CoAP MID |16| 1|bi| 0000 |MSB(7 ) |LSB || M-ID| | +----------+---+--+--+------+---------------+---------------+=======+ | |||
| |CoAP Uri-Path|var 1|dw| path |equal 1 |not-sent || | | |CoAP TKL |4 |1 |Bi|0 | equal | not-sent | | | |||
| +-------------+--+--+--+------+---------+-------------++------------+ | +----------+---+--+--+------+---------------+---------------+=======+ | |||
| |CoAP Code |8 |1 |Bi|[0.00,| match-mapping | matching-sent |CC CCC | | ||||
| | | | | |... | | | | | ||||
| | | | | |5.05] | | | | | ||||
| +----------+---+--+--+------+---------------+---------------+=======+ | ||||
| |CoAP MID |16 |1 |Bi|0000 | MSB(7) | LSB |MID | | ||||
| +----------+---+--+--+------+---------------+---------------+=======+ | ||||
| |CoAP Uri- |var|1 |Dw|path | equal 1 | not-sent | | | ||||
| |Path | | | | | | | | | ||||
| +----------+---+--+--+------+---------------+---------------+=======+ | ||||
| Figure 7: CoAP Context to compress header without Token | Table 3: CoAP Context to Compress Header without Token | |||
| In this example, SCHC compression elides the version and the Token | In this example, SCHC compression elides the version and Token Length | |||
| Length fields. The 26 method and response codes defined in [RFC7252] | fields. The 25 Method and Response Codes defined in [RFC7252] have | |||
| has been shrunk to 5 bits using a "match-mapping" MO. The Uri-Path | been shrunk to 5 bits using a "match-mapping" MO. The Uri-Path | |||
| contains a single element indicated in the TV and elided with the CDA | contains a single element indicated in the TV and elided with the CDA | |||
| "not-sent." | "not-sent". | |||
| SCHC Compression reduces the header sending only the Type, a mapped | SCHC compression reduces the header, sending only the Type, a mapped | |||
| code, and the least significant bits of Message ID (9 bits in the | code, and the least significant bits of the Message ID (9 bits in the | |||
| example above). | example above). | |||
| Note that a client located in an Application Server sending a request | Note that a client located in an Application Server sending a request | |||
| to a server located in the Device may not be compressed through this | to a server located in the Device may not be compressed through this | |||
| Rule since the MID might not start with 7 bits equal to 0. A CoAP | Rule, since the MID might not start with 7 bits equal to 0. A CoAP | |||
| proxy placed before the SCHC C/D can rewrite the message ID to fit | proxy placed before SCHC C/D can rewrite the Message ID to fit the | |||
| the value and match the Rule. | value and match the Rule. | |||
| 7.2. OSCORE Compression | 7.2. OSCORE Compression | |||
| OSCORE aims to solve the problem of end-to-end encryption for CoAP | OSCORE aims to solve the problem of end-to-end encryption for CoAP | |||
| messages. Therefore, the goal is to hide as much as possible the | messages. Therefore, the goal is to hide the message as much as | |||
| message 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 that is not necessary for proxy | contains sensitive information that is not necessary for proxy | |||
| operation. However, it is part of the message that can be encrypted | operation. However, it is part of the message that can be encrypted | |||
| until it reaches its end destination. The Outer Message acts as a | until it reaches its end destination. The Outer Message acts as a | |||
| shell matching the regular CoAP message format and includes all | shell matching the regular CoAP message format and includes all | |||
| Options and information needed for proxy operation and caching. | options and information needed for proxy operation and caching. | |||
| Figure 8 illustrates this analysis. | Figure 5 below illustrates this analysis. | |||
| The CoAP protocol arranges the options into one of 3 classes; each | CoAP arranges the options into one of three classes, each granted a | |||
| 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, | Class E: Encrypted options moved to the Inner Plaintext. | |||
| o Class I: Integrity-protected options included in the AAD for the | Class I: Integrity-protected options included in the Additional | |||
| encryption of the Plaintext but otherwise left untouched in the | Authenticated Data (AAD) for the encryption of the Plaintext but | |||
| Outer Message, | otherwise left untouched in the Outer Message. | |||
| o Class U: Unprotected options left untouched in the Outer Message. | Class U: Unprotected options left untouched in the Outer Message. | |||
| These classes point out that the Outer option contains the OSCORE | These classes point out that the Outer option contains the OSCORE | |||
| Option and that the message is OSCORE protected; this option carries | option and that the message is OSCORE protected; this option carries | |||
| the information necessary to retrieve the Security Context. The end- | the information necessary to retrieve the Security Context. The | |||
| point will use this Security Context to decrypt the message | endpoint will use this Security Context to decrypt the message | |||
| correctly. | correctly. | |||
| Original CoAP Packet | Original CoAP Packet | |||
| +-+-+---+-------+---------------+ | +-+-+---+-------+---------------+ | |||
| |v|t|TKL| code | Msg Id. | | |v|t|TKL| code | Message ID | | |||
| +-+-+---+-------+---------------+....+ | +-+-+---+-------+---------------+....+ | |||
| | Token | | | Token | | |||
| +-------------------------------.....+ | +-------------------------------.....+ | |||
| | Options (IEU) | | | Options (IEU) | | |||
| . . | . . | |||
| . . | . . | |||
| +------+-------------------+ | +------+-------------------+ | |||
| | 0xFF | | | 0xFF | | |||
| +------+------------------------+ | +------+------------------------+ | |||
| | | | | | | |||
| | Payload | | | Payload | | |||
| | | | | | | |||
| +-------------------------------+ | +-------------------------------+ | |||
| / \ | / \ | |||
| / \ | / \ | |||
| / \ | / \ | |||
| / \ | / \ | |||
| Outer Header v v Plaintext | Outer Header v v Plaintext | |||
| +-+-+---+--------+---------------+ +-------+ | +-+-+---+--------+---------------+ +-------+ | |||
| |v|t|TKL|new code| Msg Id. | | code | | |v|t|TKL|new code| Message ID | | code | | |||
| +-+-+---+--------+---------------+....+ +-------+-----......+ | +-+-+---+--------+---------------+....+ +-------+-----......+ | |||
| | Token | | Options (E) | | | Token | | Options (E) | | |||
| +--------------------------------.....+ +-------+------.....+ | +--------------------------------.....+ +-------+------.....+ | |||
| | Options (IU) | | OxFF | | | Options (IU) | | 0xFF | | |||
| . . +-------+-----------+ | . . +-------+-----------+ | |||
| . OSCORE Option . | | | . OSCORE Option . | | | |||
| +------+-------------------+ | Payload | | +------+-------------------+ | Payload | | |||
| | 0xFF | | | | | 0xFF | | | | |||
| +------+ +-------------------+ | +------+ +-------------------+ | |||
| Figure 8: A CoAP packet is split into an OSCORE outer and plaintext | Figure 5: CoAP Packet Split into OSCORE Outer Header and Plaintext | |||
| Figure 8 shows the packet format for the OSCORE Outer header and | Figure 5 shows the packet format for the OSCORE Outer header and | |||
| Plaintext. | Plaintext. | |||
| In the Outer Header, the original header code is hidden and replaced | In the Outer header, the original header code is hidden and replaced | |||
| by a default dummy value. As seen in Sections 4.1.3.5 and 4.2 of | by a default dummy value. As seen in Sections 4.1.3.5 and 4.2 of | |||
| [RFC8613], the message code is replaced by POST for requests and | [RFC8613], the message code is replaced by POST for requests and | |||
| Changed for responses when CoAP is not using the Observe option. If | Changed for responses when CoAP is not using the Observe Option. If | |||
| CoAP uses Observe, the OSCORE message code is replaced by FETCH for | CoAP uses Observe, the OSCORE message code is replaced by FETCH for | |||
| requests and Content for responses. | requests and Content for responses. | |||
| The first byte of the Plaintext contains the original packet code, | The first byte of the Plaintext contains the original packet code, | |||
| followed by the message code, the class E options, and, if present, | followed by the message code, the class E options, and, if present, | |||
| the original message Payload preceded by its payload marker. | the original message payload preceded by its payload marker. | |||
| An AEAD algorithm now encrypts the Plaintext. This integrity | An Authenticated Encryption with Associated Data (AEAD) algorithm now | |||
| protects the Security Context parameters and, eventually, any class I | encrypts the Plaintext. This integrity-protects the Security Context | |||
| options from the Outer Header. The resulting Ciphertext becomes the | parameters and, eventually, any class I options from the Outer | |||
| new payload of the OSCORE message, as illustrated in Figure 9. | header. The resulting ciphertext becomes the new payload of the | |||
| OSCORE message, as illustrated in Figure 6. | ||||
| As defined in [RFC5116], this Ciphertext is the encrypted Plaintext's | As defined in [RFC5116], this ciphertext is the encrypted Plaintext's | |||
| concatenation of the authentication tag. Note that Inner Compression | concatenation of the Authentication Tag. Note that Inner Compression | |||
| only affects the Plaintext before encryption. Thus only the first | only affects the Plaintext before encryption. The Authentication | |||
| variable-length of the Ciphertext can be reduced. The authentication | Tag, fixed in length and uncompressed, is considered part of the cost | |||
| tag is fixed in length and is considered part of the cost of | of protection. | |||
| protection. | ||||
| Outer Header | Outer Header | |||
| +-+-+---+--------+---------------+ | +-+-+---+--------+---------------+ | |||
| |v|t|TKL|new code| Msg Id. | | |v|t|TKL|new code| Message ID | | |||
| +-+-+---+--------+---------------+....+ | +-+-+---+--------+---------------+....+ | |||
| | Token | | | Token | | |||
| +--------------------------------.....+ | +--------------------------------.....+ | |||
| | Options (IU) | | | Options (IU) | | |||
| . . | . . | |||
| . OSCORE Option . | . OSCORE Option . | |||
| +------+-------------------+ | +------+-------------------+ | |||
| | 0xFF | | | 0xFF | | |||
| +------+---------------------------+ | +------+---------------------------+ | |||
| | | | | | | |||
| | Ciphertext: Encrypted Inner | | | Ciphertext: Encrypted Inner | | |||
| | Header and Payload | | | Header and Payload | | |||
| | + Authentication Tag | | | + Authentication Tag | | |||
| | | | | | | |||
| +----------------------------------+ | +----------------------------------+ | |||
| Figure 9: OSCORE message | Figure 6: OSCORE Message | |||
| The SCHC Compression scheme consists of compressing both the | The SCHC compression scheme consists of compressing both the | |||
| Plaintext before encryption and the resulting OSCORE message after | Plaintext before encryption and the resulting OSCORE message after | |||
| encryption, see Figure 10. | encryption; see Figure 7. | |||
| The OSCORE message translates into a segmented process where SCHC | The OSCORE message translates into a segmented process where SCHC | |||
| compression is applied independently in 2 stages, each with its | compression is applied independently in two stages, each with its | |||
| corresponding set of Rules, with the Inner SCHC Rules and the Outer | corresponding set of Rules, with the Inner SCHC Rules and the Outer | |||
| SCHC Rules. This way, compression is applied to all fields of the | SCHC Rules. This way, compression is applied to all fields of the | |||
| original CoAP message. | original CoAP message. | |||
| Note that since the corresponding end-point can only decrypt the | ||||
| Inner part of the message, this end-point will also have to implement | ||||
| Inner SCHC Compression/Decompression. | ||||
| Outer Message OSCORE Plaintext | Outer Message OSCORE Plaintext | |||
| +-+-+---+--------+---------------+ +-------+ | +-+-+---+--------+---------------+ +-------+ | |||
| |v|t|TKL|new code| Msg Id. | | code | | |v|t|TKL|new code| Message ID | | code | | |||
| +-+-+---+--------+---------------+....+ +-------+-----......+ | +-+-+---+--------+---------------+....+ +-------+-----......+ | |||
| | Token | | Options (E) | | | Token | | Options (E) | | |||
| +--------------------------------.....+ +-------+------.....+ | +--------------------------------.....+ +-------+------.....+ | |||
| | Options (IU) | | OxFF | | | Options (IU) | | 0xFF | | |||
| . . +-------+-----------+ | . . +-------+-----------+ | |||
| . OSCORE Option . | | | . OSCORE Option . | | | |||
| +------+-------------------+ | Payload | | +------+-------------------+ | Payload | | |||
| | 0xFF | | | | | 0xFF | | | | |||
| +------+------------+ +-------------------+ | +------+------------+ +-------------------+ | |||
| | Ciphertext |<---------\ | | | Ciphertext |<---------\ | | |||
| | | | v | | | | v | |||
| +-------------------+ | +-----------------+ | +-------------------+ | +-----------------+ | |||
| | | | Inner SCHC | | | | | Inner SCHC | | |||
| v | | Compression | | v | | Compression | | |||
| skipping to change at page 20, line 43 ¶ | skipping to change at line 875 ¶ | |||
| v | +-------+-----------+ | v | +-------+-----------+ | |||
| +--------+ +------------+ |Compression Residue| | +--------+ +------------+ |Compression Residue| | |||
| |RuleID' | | Encryption | <-- +----------+--------+ | |RuleID' | | Encryption | <-- +----------+--------+ | |||
| +--------+-----------+ +------------+ | | | +--------+-----------+ +------------+ | | | |||
| |Compression Residue'| | Payload | | |Compression Residue'| | Payload | | |||
| +-----------+--------+ | | | +-----------+--------+ | | | |||
| | Ciphertext | +-------------------+ | | Ciphertext | +-------------------+ | |||
| | | | | | | |||
| +--------------------+ | +--------------------+ | |||
| Figure 10: OSCORE Compression Diagram | Figure 7: OSCORE Compression Diagram | |||
| Note that since the corresponding endpoint can only decrypt the Inner | ||||
| part of the message, this endpoint will also have to implement Inner | ||||
| SCHC Compression/Decompression. | ||||
| 7.3. Example OSCORE Compression | 7.3. Example OSCORE Compression | |||
| This section gives an example with a GET Request and its consequent | This section gives an example with a GET request and its consequent | |||
| Content Response from a Device-based CoAP client to a cloud-based | Content response from a Device-based CoAP client to a cloud-based | |||
| CoAP server. The example also describes a possible set of Rules for | CoAP server. The example also describes a possible set of Rules for | |||
| the Inner and Outer SCHC Compression. A dump of the results and a | Inner SCHC Compression and Outer SCHC Compression. A dump of the | |||
| contrast between SCHC + OSCORE performance with SCHC + COAP | results and a contrast between SCHC + OSCORE performance with SCHC + | |||
| performance is also listed. This example gives an approximation of | CoAP performance are also listed. This example gives an | |||
| the cost of security with SCHC-OSCORE. | approximation of the cost of security with SCHC-OSCORE. | |||
| Our first CoAP message is the GET request in Figure 11. | Our first CoAP message is the GET request in Figure 8. | |||
| Original message: | Original message: | |||
| ================= | ================= | |||
| 0x4101000182bb74656d7065726174757265 | 0x4101000182bb74656d7065726174757265 | |||
| Header: | Header: | |||
| 0x4101 | 0x4101 | |||
| 01 Ver | 01 Ver | |||
| 00 CON | 00 CON | |||
| 0001 TKL | 0001 TKL | |||
| 00000001 Request Code 1 "GET" | 00000001 Request Code 1 "GET" | |||
| 0x0001 = mid | 0x0001 = mid | |||
| 0x82 = token | 0x82 = token | |||
| Options: | Options: | |||
| 0xbb74656d7065726174757265 | 0xbb74656d7065726174757265 | |||
| Option 11: URI_PATH | Option 11: URI_PATH | |||
| Value = temperature | Value = temperature | |||
| Original msg length: 17 bytes. | Original message length: 17 bytes | |||
| Figure 11: CoAP GET Request | Figure 8: CoAP GET Request | |||
| Its corresponding response is the CONTENT Response in Figure 12. | Its corresponding response is the Content response in Figure 9. | |||
| Original message: | Original message: | |||
| ================= | ================= | |||
| 0x6145000182ff32332043 | 0x6145000182ff32332043 | |||
| Header: | Header: | |||
| 0x6145 | 0x6145 | |||
| 01 Ver | 01 Ver | |||
| 10 ACK | 10 ACK | |||
| 0001 TKL | 0001 TKL | |||
| 01000101 Successful Response Code 69 "2.05 Content" | 01000101 Successful Response Code 69 "2.05 Content" | |||
| 0x0001 = mid | 0x0001 = mid | |||
| 0x82 = token | 0x82 = token | |||
| 0xFF Payload marker | 0xFF Payload marker | |||
| Payload: | Payload: | |||
| 0x32332043 | 0x32332043 | |||
| Original msg length: 10 | Original message length: 10 bytes | |||
| Figure 12: CoAP CONTENT Response | Figure 9: CoAP Content Response | |||
| The SCHC Rules for the Inner Compression include all fields already | The SCHC Rules for the Inner Compression include all fields already | |||
| present in a regular CoAP message. The methods described in | present in a regular CoAP message. The methods described in | |||
| Section 4 apply to these fields. As an example, see Figure 13. | Section 4 apply to these fields. Table 4 provides an example. | |||
| RuleID 0 | +===================================================================+ | |||
| +--------------+--+--+--+-----------+---------+---------++------+ | |RuleID 0 | | |||
| | Field |FL|FP|DI| Target | MO | CDA || Sent | | +========+==+==+==+===========+===============+==============+======+ | |||
| | | | | | Value | | ||[bits]| | | Field |FL|FP|DI| TV | MO | CDA | Sent | | |||
| +--------------+--+--+--+-----------+---------+---------++------+ | | | | | | | | |[bits]| | |||
| |CoAP Code | 8| 1|up| 1 | equal |not-sent || | | +========+==+==+==+===========+===============+==============+======+ | |||
| |CoAP Code | 8| 1|dw|[69, | | || | | |CoAP |8 |1 |Up|1 | equal | not-sent | | | |||
| | | | | |132] |match- |mapping- || | | |Code | | | | | | | | | |||
| | | | | | |mapping |sent || c | | +--------+--+--+--+-----------+---------------+--------------+======+ | |||
| |CoAP Uri-Path | | 1|up|temperature| equal |not-sent || | | |CoAP |8 |1 |Dw|[69,132] | match-mapping | mapping-sent |c | | |||
| +--------------+--+--+--+-----------+---------+---------++------+ | |Code | | | | | | | | | |||
| +--------+--+--+--+-----------+---------------+--------------+======+ | ||||
| |CoAP | |1 |Up|temperature| equal | not-sent | | | ||||
| |Uri-Path| | | | | | | | | ||||
| +--------+--+--+--+-----------+---------------+--------------+======+ | ||||
| Figure 13: Inner SCHC Rules | Table 4: Inner SCHC Rule | |||
| Figure 14 shows the Plaintext obtained for the example GET request. | Figure 10 shows the Plaintext obtained for the example GET request. | |||
| The packet follows the process of Inner Compression and Encryption | The packet follows the process of Inner Compression and encryption | |||
| until the payload. The outer OSCORE Message adds the result of the | until the payload. The Outer OSCORE message adds the result of the | |||
| Inner process. | Inner process. | |||
| In this case, the original message has no payload, and its resulting | ||||
| Plaintext compressed up to only 1 byte (size of the RuleID). The | ||||
| AEAD algorithm preserves this length in its first output and yields a | ||||
| fixed-size tag. SCHC cannot compress the tag, and the OSCORE message | ||||
| must include it without compression. The use of integrity protection | ||||
| translates into an overhead in total message length, limiting the | ||||
| amount of compression that can be achieved and plays into the cost of | ||||
| adding security to the exchange. | ||||
| ________________________________________________________ | ________________________________________________________ | |||
| | | | | | | |||
| | OSCORE Plaintext | | | OSCORE Plaintext | | |||
| | | | | | | |||
| | 0x01bb74656d7065726174757265 (13 bytes) | | | 0x01bb74656d7065726174757265 (13 bytes) | | |||
| | | | | | | |||
| | 0x01 Request Code GET | | | 0x01 Request Code GET | | |||
| | | | | | | |||
| | bb74656d7065726174757265 Option 11: URI_PATH | | | bb74656d7065726174757265 Option 11: URI_PATH | | |||
| | Value = temperature | | | Value = temperature | | |||
| skipping to change at page 23, line 49 ¶ | skipping to change at line 1006 ¶ | |||
| | (piv = 0x04) | | (piv = 0x04) | |||
| v | v | |||
| _________________________________________________ | _________________________________________________ | |||
| | | | | | | |||
| | encrypted_plaintext = 0xa2 (1 byte) | | | encrypted_plaintext = 0xa2 (1 byte) | | |||
| | tag = 0xc54fe1b434297b62 (8 bytes) | | | tag = 0xc54fe1b434297b62 (8 bytes) | | |||
| | | | | | | |||
| | ciphertext = 0xa2c54fe1b434297b62 (9 bytes) | | | ciphertext = 0xa2c54fe1b434297b62 (9 bytes) | | |||
| |_________________________________________________| | |_________________________________________________| | |||
| Figure 14: Plaintext compression and encryption for GET Request | Figure 10: Plaintext Compression and Encryption for GET Request | |||
| Figure 15 shows the process for the example CONTENT Response. The | In this case, the original message has no payload, and its resulting | |||
| Plaintext is compressed up to only 1 byte (the size of the RuleID). | ||||
| The AEAD algorithm preserves this length in its first output and | ||||
| yields a fixed-size tag. SCHC cannot compress the tag, and the | ||||
| OSCORE message must include it without compression. The use of | ||||
| integrity protection translates into an overhead in total message | ||||
| length, limiting the amount of compression that can be achieved and | ||||
| playing into the cost of adding security to the exchange. | ||||
| Figure 11 shows the process for the example Content response. The | ||||
| Compression Residue is 1 bit long. Note that since SCHC adds padding | Compression Residue is 1 bit long. Note that since SCHC adds padding | |||
| after the payload, this misalignment causes the hexadecimal code from | after the payload, this misalignment causes the hexadecimal code from | |||
| the payload to differ from the original, even if SCHC cannot compress | the payload to differ from the original, even if SCHC cannot compress | |||
| the tag. The overhead for the tag bytes limits the SCHC's | the tag. The overhead for the tag bytes limits SCHC's performance | |||
| performance but brings security to the transmission. | but brings security to the transmission. | |||
| ________________________________________________________ | ________________________________________________________ | |||
| | | | | | | |||
| | OSCORE Plaintext | | | OSCORE Plaintext | | |||
| | | | | | | |||
| | 0x45ff32332043 (6 bytes) | | | 0x45ff32332043 (6 bytes) | | |||
| | | | | | | |||
| | 0x45 Successful Response Code 69 "2.05 Content" | | | 0x45 Successful Response Code 69 "2.05 Content" | | |||
| | | | | | | |||
| | ff Payload marker | | | ff Payload marker | | |||
| | | | | | | |||
| | 32332043 Payload | | | 32332043 Payload | | |||
| |________________________________________________________| | |________________________________________________________| | |||
| | | | | |||
| | | | | |||
| | Inner SCHC Compression | | Inner SCHC Compression | |||
| | | | | |||
| v | v | |||
| _____________________________________________ | _________________________________________________ | |||
| | | | | | | |||
| | Compressed Plaintext | | | Compressed Plaintext | | |||
| | | | | | | |||
| | 0x001919902180 (6 bytes) | | | 0x001919902180 (6 bytes) | | |||
| | | | | | | |||
| | 00 RuleID | | | 00 RuleID | | |||
| | | | | | | |||
| | 0b0 (1 bit match-map Compression Residue) | | | 0b0 (1 bit match-mapping Compression Residue) | | |||
| | 0x32332043 >> 1 (shifted payload) | | | 0x32332043 >> 1 (shifted payload) | | |||
| | 0b0000000 Padding | | | 0b0000000 Padding | | |||
| |_____________________________________________| | |_________________________________________________| | |||
| | | | | |||
| | AEAD Encryption | | AEAD Encryption | |||
| | (piv = 0x04) | | (piv = 0x04) | |||
| v | v | |||
| _________________________________________________________ | _________________________________________________________ | |||
| | | | | | | |||
| | encrypted_plaintext = 0x10c6d7c26cc1 (6 bytes) | | | encrypted_plaintext = 0x10c6d7c26cc1 (6 bytes) | | |||
| | tag = 0xe9aef3f2461e0c29 (8 bytes) | | | tag = 0xe9aef3f2461e0c29 (8 bytes) | | |||
| | | | | | | |||
| | ciphertext = 0x10c6d7c26cc1e9aef3f2461e0c29 (14 bytes) | | | ciphertext = 0x10c6d7c26cc1e9aef3f2461e0c29 (14 bytes) | | |||
| |_________________________________________________________| | |_________________________________________________________| | |||
| Figure 15: Plaintext compression and encryption for CONTENT Response | Figure 11: Plaintext Compression and Encryption for Content Response | |||
| The Outer SCHC Rules (Figure 18) must process the OSCORE Options | The Outer SCHC Rule (Table 5) must process the OSCORE options fields. | |||
| fields. Figure 16 and Figure 17 shows a dump of the OSCORE Messages | Figures 12 and 13 show a dump of the OSCORE messages generated from | |||
| generated from the example messages. They include the Inner | the example messages. They include the Inner Compressed ciphertext | |||
| Compressed Ciphertext in the payload. These are the messages that | in the payload. These are the messages that have to be compressed | |||
| have to be compressed by the Outer SCHC Compression. | via the Outer SCHC Compression scheme. | |||
| Table 5 shows a possible set of Outer Rule items to compress the | ||||
| Outer header. | ||||
| +===================================================================+ | ||||
| |RuleID 0 | | ||||
| +===============+===+==+==+================+=======+=========+======+ | ||||
| | Field | FL|FP|DI| TV | MO | CDA | Sent | | ||||
| | | | | | | | |[bits]| | ||||
| +===============+===+==+==+================+=======+=========+======+ | ||||
| |CoAP version |2 |1 |Bi| 01 |equal |not-sent | | | ||||
| +---------------+---+--+--+----------------+-------+---------+======+ | ||||
| |CoAP Type |2 |1 |Up| 0 |equal |not-sent | | | ||||
| +---------------+---+--+--+----------------+-------+---------+======+ | ||||
| |CoAP Type |2 |1 |Dw| 2 |equal |not-sent | | | ||||
| +---------------+---+--+--+----------------+-------+---------+======+ | ||||
| |CoAP TKL |4 |1 |Bi| 1 |equal |not-sent | | | ||||
| +---------------+---+--+--+----------------+-------+---------+======+ | ||||
| |CoAP Code |8 |1 |Up| 2 |equal |not-sent | | | ||||
| +---------------+---+--+--+----------------+-------+---------+======+ | ||||
| |CoAP Code |8 |1 |Dw| 68 |equal |not-sent | | | ||||
| +---------------+---+--+--+----------------+-------+---------+======+ | ||||
| |CoAP MID |16 |1 |Bi| 0000 |MSB(12)|LSB |MMMM | | ||||
| +---------------+---+--+--+----------------+-------+---------+======+ | ||||
| |CoAP Token |tkl|1 |Bi| 0x80 |MSB(5) |LSB |TTT | | ||||
| +---------------+---+--+--+----------------+-------+---------+======+ | ||||
| |CoAP |8 |1 |Up| 0x09 |equal |not-sent | | | ||||
| |OSCORE_flags | | | | | | | | | ||||
| +---------------+---+--+--+----------------+-------+---------+======+ | ||||
| |CoAP OSCORE_piv|var|1 |Up| 0x00 |MSB(4) |LSB |PPPP | | ||||
| +---------------+---+--+--+----------------+-------+---------+======+ | ||||
| |CoAP OSCORE_kid|var|1 |Up| 0x636c69656e70 |MSB(52)|LSB |KKKK | | ||||
| +---------------+---+--+--+----------------+-------+---------+======+ | ||||
| |CoAP |var|1 |Bi| b'' |equal |not-sent | | | ||||
| |OSCORE_kidctx | | | | | | | | | ||||
| +---------------+---+--+--+----------------+-------+---------+======+ | ||||
| |CoAP |8 |1 |Dw| b'' |equal |not-sent | | | ||||
| |OSCORE_flags | | | | | | | | | ||||
| +---------------+---+--+--+----------------+-------+---------+======+ | ||||
| |CoAP OSCORE_piv|var|1 |Dw| b'' |equal |not-sent | | | ||||
| +---------------+---+--+--+----------------+-------+---------+======+ | ||||
| |CoAP OSCORE_kid|var|1 |Dw| b'' |equal |not-sent | | | ||||
| +---------------+---+--+--+----------------+-------+---------+======+ | ||||
| Table 5: Outer SCHC Rule | ||||
| Protected message: | Protected message: | |||
| ================== | ================== | |||
| 0x4102000182d8080904636c69656e74ffa2c54fe1b434297b62 | 0x4102000182d8080904636c69656e74ffa2c54fe1b434297b62 | |||
| (25 bytes) | (25 bytes) | |||
| Header: | Header: | |||
| 0x4102 | 0x4102 | |||
| 01 Ver | 01 Ver | |||
| 00 CON | 00 CON | |||
| 0001 TKL | 0001 TKL | |||
| 00000010 Request Code 2 "POST" | 00000010 Request Code 2 "POST" | |||
| 0x0001 = mid | 0x0001 = mid | |||
| 0x82 = token | 0x82 = token | |||
| Options: | Options: | |||
| 0xd8080904636c69656e74 (10 bytes) | 0xd8080904636c69656e74 (10 bytes) | |||
| Option 21: OBJECT_SECURITY | Option 21: OBJECT_SECURITY | |||
| Value = 0x0904636c69656e74 | Value = 0x0904636c69656e74 | |||
| 09 = 000 0 1 001 Flag byte | 09 = 000 0 1 001 flag byte | |||
| h k n | h k n | |||
| 04 piv | 04 piv | |||
| 636c69656e74 kid | 636c69656e74 kid | |||
| 0xFF Payload marker | 0xFF Payload marker | |||
| Payload: | Payload: | |||
| 0xa2c54fe1b434297b62 (9 bytes) | 0xa2c54fe1b434297b62 (9 bytes) | |||
| Figure 16: Protected and Inner SCHC Compressed GET Request | Figure 12: 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 27, line 29 ¶ | skipping to change at line 1174 ¶ | |||
| Options: | Options: | |||
| 0xd008 (2 bytes) | 0xd008 (2 bytes) | |||
| Option 21: OBJECT_SECURITY | Option 21: OBJECT_SECURITY | |||
| Value = b'' | Value = b'' | |||
| 0xFF Payload marker | 0xFF Payload marker | |||
| Payload: | Payload: | |||
| 0x10c6d7c26cc1e9aef3f2461e0c29 (14 bytes) | 0x10c6d7c26cc1e9aef3f2461e0c29 (14 bytes) | |||
| Figure 17: Protected and Inner SCHC Compressed CONTENT Response | Figure 13: Protected and Inner SCHC Compressed Content Response | |||
| For the flag bits, some SCHC compression methods are useful, | For the flag bits, some SCHC compression methods are useful, | |||
| depending on the Application. The most straightforward alternative | depending on the application. The most straightforward alternative | |||
| is to provide a fixed value for the flags, combining MO "equal" and | is to provide a fixed value for the flags, combining a MO of "equal" | |||
| CDA "not-sent." This SCHC definition saves most bits but could | and a CDA of "not-sent". This SCHC definition saves most bits but | |||
| prevent flexibility. Otherwise, SCHC could use a "match-mapping" MO | could prevent flexibility. Otherwise, SCHC could use a "match- | |||
| to choose from several configurations for the exchange. If not, the | mapping" MO to choose from several configurations for the exchange. | |||
| SCHC description may use an "MSB" MO to mask off the three hard-coded | If not, the SCHC description may use an "MSB" MO to mask off the | |||
| most significant bits. | three hard-coded most significant bits. | |||
| Note that fixing a flag bit will limit CoAP Options choice that can | Note that fixing a flag bit will limit the choices of CoAP options | |||
| be used in the exchange since their values are dependent on specific | that can be used in the exchange, since the values of these choices | |||
| options. | are dependent on specific options. | |||
| The piv field lends itself to having some bits masked off with "MSB" | The piv field lends itself to having some bits masked off with an | |||
| MO and "LSB" CDA. This SCHC description could be useful in | "MSB" MO and an "LSB" CDA. This SCHC description could be useful in | |||
| applications where the message frequency is low such as LPWAN | applications where the message frequency is low, such as LPWAN | |||
| technologies. Note that compressing the sequence numbers may reduce | technologies. Note that compressing the sequence numbers may reduce | |||
| the maximum number of sequence numbers that can be used in an | the maximum number of sequence numbers that can be used in an | |||
| exchange. Once the sequence number exceeds the maximum value, the | exchange. Once the sequence number exceeds the maximum value, the | |||
| OSCORE keys need to be re-established. | OSCORE keys need to be re-established. | |||
| The size s included in the kid context field MAY be masked off with | The size, s, that is included in the kid context field MAY be masked | |||
| "LSB" CDA. The rest of the field could have additional bits masked | off with an "LSB" CDA. The rest of the field could have additional | |||
| off or have the whole field fixed with MO "equal" and CDA "not-sent." | bits masked off or have the whole field fixed with a MO of "equal" | |||
| The same holds for the kid field. | and a CDA of "not-sent". The same holds for the kid field. | |||
| Figure 18 shows a possible set of Outer Rules to compress the Outer | ||||
| Header. | ||||
| RuleID 0 | ||||
| +------------------+--+--+--+--------------+-------+--------++------+ | ||||
| | Field |FL|FP|DI| Target | MO | CDA || Sent | | ||||
| | | | | | Value | | ||[bits]| | ||||
| +------------------+--+--+--+--------------+-------+--------++------+ | ||||
| |CoAP version | 2| 1|bi| 01 |equal |not-sent|| | | ||||
| |CoAP Type | 2| 1|up| 0 |equal |not-sent|| | | ||||
| |CoAP Type | 2| 1|dw| 2 |equal |not-sent|| | | ||||
| |CoAP TKL | 4| 1|bi| 1 |equal |not-sent|| | | ||||
| |CoAP Code | 8| 1|up| 2 |equal |not-sent|| | | ||||
| |CoAP Code | 8| 1|dw| 68 |equal |not-sent|| | | ||||
| |CoAP MID |16| 1|bi| 0000 |MSB(12)|LSB ||MMMM | | ||||
| |CoAP Token |tkl 1|bi| 0x80 |MSB(5) |LSB ||TTT | | ||||
| |CoAP OSCORE_flags | 8| 1|up| 0x09 |equal |not-sent|| | | ||||
| |CoAP OSCORE_piv |var 1|up| 0x00 |MSB(4) |LSB ||PPPP | | ||||
| |COAP OSCORE_kid |var 1|up|0x636c69656e70|MSB(52)|LSB ||KKKK | | ||||
| |COAP OSCORE_kidctx|var 1|bi| b'' |equal |not-sent|| | | ||||
| |CoAP OSCORE_flags | 8| 1|dw| b'' |equal |not-sent|| | | ||||
| |CoAP OSCORE_piv |var 1|dw| b'' |equal |not-sent|| | | ||||
| |CoAP OSCORE_kid |var 1|dw| b'' |equal |not-sent|| | | ||||
| +------------------+--+--+--+--------------+-------+--------++------+ | ||||
| Figure 18: Outer SCHC Rules | ||||
| The Outer Rule of Figure 18 is applied to the example GET Request and | The Outer Rule of Table 5 is applied to the example GET request and | |||
| CONTENT Response. Figure 19 and Figure 20 show the resulting | Content response. Figures 14 and 15 show the resulting messages. | |||
| messages. | ||||
| Compressed message: | Compressed message: | |||
| ================== | ================== | |||
| 0x001489458a9fc3686852f6c4 (12 bytes) | 0x001489458a9fc3686852f6c4 (12 bytes) | |||
| 0x00 RuleID | 0x00 RuleID | |||
| 1489 Compression Residue | 1489 Compression Residue | |||
| 458a9fc3686852f6c4 Padded payload | 458a9fc3686852f6c4 Padded payload | |||
| Compression Residue: | Compression Residue: | |||
| 0b 0001 010 0100 0100 (15 bits -> 2 bytes with padding) | 0b 0001 010 0100 0100 (15 bits -> 2 bytes with padding) | |||
| 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 19: SCHC-OSCORE Compressed GET Request | Figure 14: 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 message length: 16 bytes | |||
| Figure 20: SCHC-OSCORE Compressed CONTENT Response | Figure 15: SCHC-OSCORE Compressed Content Response | |||
| In contrast, comparing these results with what would be obtained by | In contrast, comparing 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 is done by compressing the CoAP messages according to the | with OSCORE is done by compressing the CoAP messages according to the | |||
| SCHC Rules in Figure 21. | SCHC Rule in Table 6. | |||
| RuleID 1 | +===================================================================+ | |||
| +---------------+--+--+--+-----------+---------+-----------++-------+ | |RuleID 1 | | |||
| | Field |FL|FP|DI| Target | MO | CDA || Sent | | +========+===+==+==+===========+===============+=============+======+ | |||
| | | | | | Value | | || [bits]| | | Field | FL|FP|DI| TV | MO | CDA | Sent | | |||
| +---------------+--+--+--+-----------+---------+-----------++-------+ | | | | | | | | |[bits]| | |||
| |CoAP version | 2| 1|bi| 01 |equal |not-sent || | | +========+===+==+==+===========+===============+=============+======+ | |||
| |CoAP Type | 2| 1|up| 0 |equal |not-sent || | | |CoAP |2 |1 |Bi|01 | equal |not-sent | | | |||
| |CoAP Type | 2| 1|dw| 2 |equal |not-sent || | | |version | | | | | | | | | |||
| |CoAP TKL | 4| 1|bi| 1 |equal |not-sent || | | +--------+---+--+--+-----------+---------------+-------------+======+ | |||
| |CoAP Code | 8| 1|up| 2 |equal |not-sent || | | |CoAP |2 |1 |Up|0 | equal |not-sent | | | |||
| |CoAP Code | 8| 1|dw| [69,132] |match- |mapping- || | | |Type | | | | | | | | | |||
| | | | | | |mapping |sent ||C | | +--------+---+--+--+-----------+---------------+-------------+======+ | |||
| |CoAP MID |16| 1|bi| 0000 |MSB(12) |LSB ||MMMM | | |CoAP |2 |1 |Dw|2 | equal |not-sent | | | |||
| |CoAP Token |tkl 1|bi| 0x80 |MSB(5) |LSB ||TTT | | |Type | | | | | | | | | |||
| |CoAP Uri-Path | | 1|up|temperature|equal |not-sent || | | +--------+---+--+--+-----------+---------------+-------------+======+ | |||
| +---------------+--+--+--+-----------+---------+-----------++-------+ | |CoAP TKL|4 |1 |Bi|1 | equal |not-sent | | | |||
| +--------+---+--+--+-----------+---------------+-------------+======+ | ||||
| |CoAP |8 |1 |Up|2 | equal |not-sent | | | ||||
| |Code | | | | | | | | | ||||
| +--------+---+--+--+-----------+---------------+-------------+======+ | ||||
| |CoAP |8 |1 |Dw|[69,132] | match-mapping |mapping-sent |C | | ||||
| |Code | | | | | | | | | ||||
| +--------+---+--+--+-----------+---------------+-------------+======+ | ||||
| |CoAP MID|16 |1 |Bi|0000 | MSB(12) |LSB |MMMM | | ||||
| +--------+---+--+--+-----------+---------------+-------------+======+ | ||||
| |CoAP |tkl|1 |Bi|0x80 | MSB(5) |LSB |TTT | | ||||
| |Token | | | | | | | | | ||||
| +--------+---+--+--+-----------+---------------+-------------+======+ | ||||
| |CoAP | |1 |Up|temperature| equal |not-sent | | | ||||
| |Uri-Path| | | | | | | | | ||||
| +--------+---+--+--+-----------+---------------+-------------+======+ | ||||
| Figure 21: SCHC-CoAP Rules (No OSCORE) | Table 6: SCHC-CoAP Rule (No OSCORE) | |||
| Figure 21 Rule yields the SCHC compression results in Figure 22 for | The Rule in Table 6 yields the SCHC compression results as shown in | |||
| request, and Figure 23 for the response. | Figure 16 for the request and Figure 17 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 message length: 2 bytes | |||
| Figure 22: CoAP GET Compressed without OSCORE | Figure 16: 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 message length: 6 bytes | |||
| Figure 23: CoAP CONTENT Compressed without OSCORE | Figure 17: 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. | compared to regular SCHC + CoAP is about 10 bytes. | |||
| 8. IANA Considerations | 8. IANA Considerations | |||
| This document has no request to IANA. | This document has no IANA actions. | |||
| 9. Security considerations | 9. Security Considerations | |||
| The use of SCHC header compression for CoAP header fields only | The use of SCHC header compression for CoAP header fields only | |||
| affects the representation of the header information. SCHC header | affects the representation of the header information. SCHC header | |||
| compression itself does not increase or decrease the overall level of | compression itself does not increase or decrease the overall level of | |||
| security of the communication. When the connection does not use a | security of the communication. When the connection does not use a | |||
| security protocol (such as OSCORE, DTLS, etc.), it is necessary to | security protocol (OSCORE, DTLS, etc.), it is necessary to use a | |||
| use a layer-two security mechanism to protect the SCHC messages. | Layer 2 security mechanism to protect the SCHC messages. | |||
| If LPWAN is the layer-two technology, the SCHC security | If an LPWAN is the Layer 2 technology being used, the SCHC security | |||
| considerations of [RFC8724] continue to apply. When using another | considerations discussed in [RFC8724] continue to apply. When using | |||
| layer-two protocol, use of a cryptographic integrity-protection | another Layer 2 protocol, the use of a cryptographic integrity- | |||
| mechanisms to protect the SCHC headers is REQUIRED. Such | protection mechanism to protect the SCHC headers is REQUIRED. Such | |||
| cryptographic integrity protection is necessary in order to continue | cryptographic integrity protection is necessary in order to continue | |||
| to provide the properties that [RFC8724] relies upon. | to provide the properties that [RFC8724] relies upon. | |||
| When SCHC is used with OSCORE, the security considerations of | When SCHC is used with OSCORE, the security considerations discussed | |||
| [RFC8613] continue to apply. | in [RFC8613] continue to apply. | |||
| When SCHC is used with the OSCORE outer headers, the Initialization | When SCHC is used with the OSCORE Outer headers, the Initialization | |||
| Vector (IV) size in the Compression Residue must be carefully | Vector (IV) size in the Compression Residue must be carefully | |||
| selected. There is a tradeoff between compression efficiency (with a | selected. There is a trade-off between compression efficiency (with | |||
| longer "MSB" MO prefix) and the frequency at which the Device must | a longer "MSB" MO prefix) and the frequency at which the Device must | |||
| renew its key material (in order to prevent the IV from expanding to | renew its key material (in order to prevent the IV from expanding to | |||
| an uncompressable value). The key renewal operation itself requires | an uncompressible value). The key-renewal operation itself requires | |||
| several message exchanges and requires energy-intensive computation, | several message exchanges and requires energy-intensive computation, | |||
| but the optimal tradeoff will depend on the specifics of the device | but the optimal trade-off will depend on the specifics of the Device | |||
| and expected usage patterns. | and expected usage patterns. | |||
| If an attacker can introduce a corrupted SCHC-compressed packet onto | If an attacker can introduce a corrupted SCHC-compressed packet onto | |||
| a link, DoS attacks are possible by causing excessive resource | a link, DoS attacks can be mounted by causing excessive resource | |||
| consumption at the decompressor. However, an attacker able to inject | consumption at the decompressor. However, an attacker able to inject | |||
| packets at the link layer is also capable of other, potentially more | packets at the link layer is also capable of other, potentially more | |||
| damaging, attacks. | damaging, attacks. | |||
| SCHC compression emits variable-length Compression Residues for some | SCHC compression emits variable-length Compression Residues for some | |||
| CoAP fields. In the compressed header representation, the length | CoAP fields. In the representation of the compressed header, the | |||
| field that is sent is not the length of the original header field but | length field that is sent is not the length of the original header | |||
| rather the length of the Compression Residue that is being | field but rather the length of the Compression Residue that is being | |||
| transmitted. If a corrupted packet arrives at the decompressor with | transmitted. If a corrupted packet arrives at the decompressor with | |||
| a longer or shorter length than the original compressed | a longer or shorter length than the original compressed | |||
| representation possessed, the SCHC decompression procedures will | representation possessed, the SCHC decompression procedures will | |||
| detect an error and drop the packet. | detect an error and drop the packet. | |||
| SCHC header compression rules MUST remain tightly coupled between | SCHC header compression Rules MUST remain tightly coupled between the | |||
| compressor and decompressor. If the compression rules get out of | compressor and the decompressor. If the compression Rules get out of | |||
| sync, a Compression Residue might be decompressed differently at the | sync, a Compression Residue might be decompressed differently at the | |||
| receiver than the initial message submitted to compression | receiver than the initial message submitted to compression | |||
| procedures. Accordingly, any time the context Rules are updated on | procedures. Accordingly, any time the context Rules are updated on | |||
| an OSCORE endpoint, that endpoint MUST trigger OSCORE key re- | an OSCORE endpoint, that endpoint MUST trigger OSCORE key re- | |||
| establishment. Similar procedures may be appropriate to signal Rule | establishment. Similar procedures may be appropriate to signal Rule | |||
| udpates when other message-protection mechanisms are in use. | updates when other message-protection mechanisms are in use. | |||
| 10. Acknowledgements | ||||
| The authors would like to thank (in alphabetic order): Christian | ||||
| Amsuss, Dominique Barthel, Carsten Bormann, Theresa Enghardt, Thomas | ||||
| Fossati, Klaus Hartke, Benjamin Kaduk, Francesca Palombini, Alexander | ||||
| Pelov, Goran Selander and Eric Vyncke. | ||||
| 11. Normative References | 10. Normative References | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC5116] McGrew, D., "An Interface and Algorithms for Authenticated | [RFC5116] McGrew, D., "An Interface and Algorithms for Authenticated | |||
| Encryption", RFC 5116, DOI 10.17487/RFC5116, January 2008, | Encryption", RFC 5116, DOI 10.17487/RFC5116, January 2008, | |||
| <https://www.rfc-editor.org/info/rfc5116>. | <https://www.rfc-editor.org/info/rfc5116>. | |||
| skipping to change at page 33, line 35 ¶ | skipping to change at line 1410 ¶ | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [RFC8613] Selander, G., Mattsson, J., Palombini, F., and L. Seitz, | [RFC8613] Selander, G., Mattsson, J., Palombini, F., and L. Seitz, | |||
| "Object Security for Constrained RESTful Environments | "Object Security for Constrained RESTful Environments | |||
| (OSCORE)", RFC 8613, DOI 10.17487/RFC8613, July 2019, | (OSCORE)", RFC 8613, DOI 10.17487/RFC8613, July 2019, | |||
| <https://www.rfc-editor.org/info/rfc8613>. | <https://www.rfc-editor.org/info/rfc8613>. | |||
| [RFC8724] Minaburo, A., Toutain, L., Gomez, C., Barthel, D., and JC. | [RFC8724] Minaburo, A., Toutain, L., Gomez, C., Barthel, D., and JC. | |||
| Zuniga, "SCHC: Generic Framework for Static Context Header | Zúñiga, "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>. | |||
| Acknowledgements | ||||
| The authors would like to thank (in alphabetic order): Christian | ||||
| Amsuss, Dominique Barthel, Carsten Bormann, Theresa Enghardt, Thomas | ||||
| Fossati, Klaus Hartke, Benjamin Kaduk, Francesca Palombini, Alexander | ||||
| Pelov, Göran Selander, and Éric Vyncke. | ||||
| 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 | |||
| Laurent Toutain | Laurent Toutain | |||
| Institut MINES TELECOM; IMT Atlantique | Institut MINES TELECOM; IMT Atlantique | |||
| 2 rue de la Chataigneraie | ||||
| CS 17607 | CS 17607 | |||
| 2 rue de la Chataigneraie | ||||
| 35576 Cesson-Sevigne Cedex | 35576 Cesson-Sevigne Cedex | |||
| France | France | |||
| Email: Laurent.Toutain@imt-atlantique.fr | Email: Laurent.Toutain@imt-atlantique.fr | |||
| Ricardo Andreasen | Ricardo Andreasen | |||
| Universidad de Buenos Aires | Universidad de Buenos Aires | |||
| Av. Paseo Colon 850 | Av. Paseo Colon 850 | |||
| C1063ACV Ciudad Autonoma de Buenos Aires | C1063ACV Ciudad Autonoma de Buenos Aires | |||
| Argentina | Argentina | |||
| End of changes. 210 change blocks. | ||||
| 587 lines changed or deleted | 638 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/ | ||||