| < draft-ietf-lpwan-coap-static-context-hc-04.txt | draft-ietf-lpwan-coap-static-context-hc-05.txt > | |||
|---|---|---|---|---|
| lpwan Working Group A. Minaburo | lpwan Working Group A. Minaburo | |||
| Internet-Draft Acklio | Internet-Draft Acklio | |||
| Intended status: Informational L. Toutain | Intended status: Informational L. Toutain | |||
| Expires: January 3, 2019 Institut MINES TELECOM; IMT Atlantique | Expires: April 25, 2019 Institut MINES TELECOM; IMT Atlantique | |||
| R. Andreasen | R. Andreasen | |||
| Universidad de Buenos Aires | Universidad de Buenos Aires | |||
| July 02, 2018 | October 22, 2018 | |||
| LPWAN Static Context Header Compression (SCHC) for CoAP | LPWAN Static Context Header Compression (SCHC) for CoAP | |||
| draft-ietf-lpwan-coap-static-context-hc-04 | draft-ietf-lpwan-coap-static-context-hc-05 | |||
| Abstract | Abstract | |||
| This draft defines the way SCHC header compression can be applied to | This draft defines the way SCHC header compression can be applied to | |||
| CoAP headers. CoAP header structure differs from IPv6 and UDP | CoAP headers. CoAP header structure differs from IPv6 and UDP | |||
| protocols since the CoAP | protocols since the CoAP | |||
| use a flexible header with a variable number of options themself of a | use a flexible header with a variable number of options themselves of | |||
| variable length. Another important difference is the asymmetry in | a variable length. Another important difference is the asymmetry in | |||
| the header format used in request and response messages. Most of the | the header format used in request and response messages. Most of the | |||
| compression mechanisms have been introduced in | compression mechanisms have been introduced in | |||
| [I-D.ietf-lpwan-ipv6-static-context-hc], this document explains how | [I-D.ietf-lpwan-ipv6-static-context-hc], this document explains how | |||
| to use the SCHC compression for CoAP. | to use the SCHC compression for CoAP. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on January 3, 2019. | This Internet-Draft will expire on April 25, 2019. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2018 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 . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 2. SCHC Compression Process . . . . . . . . . . . . . . . . . . 3 | 2. SCHC Compression Process . . . . . . . . . . . . . . . . . . 3 | |||
| 3. CoAP Compression with SCHC . . . . . . . . . . . . . . . . . 4 | 3. CoAP Compression with SCHC . . . . . . . . . . . . . . . . . 4 | |||
| 4. Compression of CoAP header fields . . . . . . . . . . . . . . 6 | 4. Compression of CoAP header fields . . . . . . . . . . . . . . 5 | |||
| 4.1. CoAP version field . . . . . . . . . . . . . . . . . . . 6 | 4.1. CoAP version field . . . . . . . . . . . . . . . . . . . 5 | |||
| 4.2. CoAP type field . . . . . . . . . . . . . . . . . . . . . 6 | 4.2. CoAP type field . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 4.3. CoAP code field . . . . . . . . . . . . . . . . . . . . . 6 | 4.3. CoAP code field . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 4.4. CoAP Message ID field . . . . . . . . . . . . . . . . . . 6 | 4.4. CoAP Message ID field . . . . . . . . . . . . . . . . . . 6 | |||
| 4.5. CoAP Token fields . . . . . . . . . . . . . . . . . . . . 7 | 4.5. CoAP Token fields . . . . . . . . . . . . . . . . . . . . 6 | |||
| 5. CoAP options . . . . . . . . . . . . . . . . . . . . . . . . 7 | 5. CoAP options . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5.1. CoAP Content and Accept options. . . . . . . . . . . . . 7 | 5.1. CoAP Content and Accept options. . . . . . . . . . . . . 7 | |||
| 5.2. CoAP option Max-Age field, CoAP option Uri-Host and Uri- | 5.2. CoAP option Max-Age field, CoAP option Uri-Host and Uri- | |||
| Port fields . . . . . . . . . . . . . . . . . . . . . . . 7 | Port fields . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5.3. CoAP option Uri-Path and Uri-Query fields . . . . . . . . 8 | 5.3. CoAP option Uri-Path and Uri-Query fields . . . . . . . . 7 | |||
| 5.3.1. Variable length Uri-Path and Uri-Query . . . . . . . 8 | 5.3.1. Variable length Uri-Path and Uri-Query . . . . . . . 8 | |||
| 5.3.2. Variable number of path or query elements . . . . . . 9 | 5.3.2. Variable number of path or query elements . . . . . . 8 | |||
| 5.4. CoAP option Size1, Size2, Proxy-URI and Proxy-Scheme | 5.4. CoAP option Size1, Size2, Proxy-URI and Proxy-Scheme | |||
| fields . . . . . . . . . . . . . . . . . . . . . . . . . 9 | fields . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 5.5. CoAP option ETag, If-Match, If-None-Match, Location-Path | 5.5. CoAP option ETag, If-Match, If-None-Match, Location-Path | |||
| and Location-Query fields . . . . . . . . . . . . . . . . 9 | and Location-Query fields . . . . . . . . . . . . . . . . 9 | |||
| 6. Other RFCs . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 6. Other RFCs . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 6.1. Block . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 6.1. Block . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 6.2. Observe . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 6.2. Observe . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 6.3. No-Response . . . . . . . . . . . . . . . . . . . . . . . 10 | 6.3. No-Response . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 6.4. Time Scale . . . . . . . . . . . . . . . . . . . . . . . 10 | 6.4. Time Scale . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 6.5. OSCORE . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 6.5. OSCORE . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 7. Examples of CoAP header compression . . . . . . . . . . . . . 12 | 7. Examples of CoAP header compression . . . . . . . . . . . . . 11 | |||
| 7.1. Mandatory header with CON message . . . . . . . . . . . . 12 | 7.1. Mandatory header with CON message . . . . . . . . . . . . 11 | |||
| 7.2. Complete exchange . . . . . . . . . . . . . . . . . . . . 13 | 7.2. OSCORE Compression . . . . . . . . . . . . . . . . . . . 13 | |||
| 7.3. OSCORE Compression . . . . . . . . . . . . . . . . . . . 14 | 7.3. Example OSCORE Compression . . . . . . . . . . . . . . . 17 | |||
| 7.4. Example OSCORE Compression . . . . . . . . . . . . . . . 17 | 8. Normative References . . . . . . . . . . . . . . . . . . . . 27 | |||
| 8. Normative References . . . . . . . . . . . . . . . . . . . . 22 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 27 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 22 | ||||
| 1. Introduction | 1. Introduction | |||
| CoAP [rfc7252] is an implementation of the REST architecture for | CoAP [rfc7252] is an implementation of the REST architecture for | |||
| constrained devices. Nevertheless, if limited, the size of a CoAP | constrained devices. Nevertheless, if limited, the size of a CoAP | |||
| header may be too large for LPWAN constraints and some compression | header may be too large for LPWAN constraints and some compression | |||
| may be needed to reduce the header size. | may be needed to reduce the header size. | |||
| [I-D.ietf-lpwan-ipv6-static-context-hc] defines a header compression | [I-D.ietf-lpwan-ipv6-static-context-hc] defines a header compression | |||
| mechanism for LPWAN network based on a static context. The context | mechanism for LPWAN network based on a static context. The context | |||
| skipping to change at page 5, line 34 ¶ | skipping to change at page 5, line 19 ¶ | |||
| o In CoAP headers, a field can be duplicated several times, for | o In CoAP headers, a field can be duplicated several times, for | |||
| instances, elements of an URI (path or queries). The position | instances, elements of an URI (path or queries). The position | |||
| defined in a rule, associated to a Field ID, can be used to | defined in a rule, associated to a Field ID, can be used to | |||
| identify the proper element. | identify the proper element. | |||
| [I-D.ietf-lpwan-ipv6-static-context-hc] allows a Field id to | [I-D.ietf-lpwan-ipv6-static-context-hc] allows a Field id to | |||
| appears several times in the rule, the Field Position (FP) removes | appears several times in the rule, the Field Position (FP) removes | |||
| ambiguities for the matching operation. | ambiguities for the matching operation. | |||
| o Field size defined in the CoAP protocol can be to large regarding | o Field size defined in the CoAP protocol can be too large regarding | |||
| LPWAN traffic constraints. This is particularly true for the | LPWAN traffic constraints. This is particularly true for the | |||
| message ID field or Token field. The use of MSB MO can be used to | message ID field or Token field. The use of MSB MO can be used to | |||
| reduce the information carried on LPWANs. | reduce the information carried on LPWANs. | |||
| o CoAP also obeys to the client/server paradigm and the compression | o CoAP also obeys to the client/server paradigm and the compression | |||
| rate can be different if the request is issued from an LPWAN node | rate can be different if the request is issued from an LPWAN node | |||
| or from an non LPWAN device. For instance a Device (Dev) aware of | or from an non LPWAN device. For instance a Device (Dev) aware of | |||
| LPWAN constraints can generate a 1 byte token, but a regular CoAP | LPWAN constraints can generate a 1 byte token, but a regular CoAP | |||
| client will certainly send a larger token to the Thing. SCHC | client will certainly send a larger token to the Thing. SCHC | |||
| compression will not modify the values to offer a better | compression will not modify the values to offer a better | |||
| skipping to change at page 6, line 48 ¶ | skipping to change at page 6, line 30 ¶ | |||
| reduced to the set of request the client is able to process. | reduced to the set of request the client is able to process. | |||
| All the response codes should be compressed with a SCHC rule. | All the response codes should be compressed with a SCHC rule. | |||
| 4.4. CoAP Message ID field | 4.4. CoAP Message ID field | |||
| This field is bidirectional and is used to manage acknowledgments. | This field is bidirectional and is used to manage acknowledgments. | |||
| Server memorizes the value for a EXCHANGE_LIFETIME period (by default | Server memorizes the value for a EXCHANGE_LIFETIME period (by default | |||
| 247 seconds) for CON messages and a NON_LIFETIME period (by default | 247 seconds) for CON messages and a NON_LIFETIME period (by default | |||
| 145 seconds) for NON messages. During that period, a server | 145 seconds) for NON messages. During that period, a server | |||
| receiving the same Message ID value will process the message has a | receiving the same Message ID value will process the message as a | |||
| retransmission. After this period, it will be processed as a new | retransmission. After this period, it will be processed as a new | |||
| messages. | messages. | |||
| In case the Device is a client, the size of the message ID field may | In case the Device is a client, the size of the message ID field may | |||
| the too large regarding the number of messages sent. Client may use | the too large regarding the number of messages sent. Client may use | |||
| only small message ID values, for instance 4 bit long. Therefore a | only small message ID values, for instance 4 bit long. Therefore a | |||
| MSB can be used to limit the size of the compression residue. | MSB can be used to limit the size of the compression residue. | |||
| In case the Device is a server, client may be located outside of the | In case the Device is a server, client may be located outside of the | |||
| LPWAN area and view the device as a regular device connected to the | LPWAN area and view the device as a regular device connected to the | |||
| skipping to change at page 7, line 23 ¶ | skipping to change at page 7, line 5 ¶ | |||
| space offered by this field. A CoAP proxy can be set before the SCHC | space offered by this field. A CoAP proxy can be set before the SCHC | |||
| C/D to reduce the value of the Message ID, to allow its compression | C/D to reduce the value of the Message ID, to allow its compression | |||
| with the MSB matching operator and LSB CDA. | with the MSB matching operator and LSB CDA. | |||
| 4.5. CoAP Token fields | 4.5. CoAP Token fields | |||
| Token is defined through two CoAP fields, Token Length in the | Token is defined through two CoAP fields, Token Length in the | |||
| mandatory header and Token Value directly following the mandatory | mandatory header and Token Value directly following the mandatory | |||
| CoAP header. | CoAP header. | |||
| Token Length is processed as a tradition protocol field. If the | Token Length is processed as any protocol field. If the value | |||
| value remains the same during all the transaction, the size can be | remains the same during all the transaction, the size can be stored | |||
| stored in the context and elided during the transmission. Otherwise | in the context and elided during the transmission. Otherwise it will | |||
| it will have to the send as a compression residue. | have to the send as a compression residue. | |||
| Token Value size should not be defined directly in the rule in the | Token Value size should not be defined directly in the rule in the | |||
| Field Length (FL). Instead a specific function designed as "TKL" | Field Length (FL). Instead a specific function designed as "TKL" | |||
| must be used. This function informs the SCHC C/D that the length of | must be used and length do not have to the sent with the residue. | |||
| this field has to be read from the Token Length field. | During the decompression, this function returns the value contained | |||
| in the Token Length field. | ||||
| 5. CoAP options | 5. CoAP options | |||
| 5.1. CoAP Content and Accept options. | 5.1. CoAP Content and Accept options. | |||
| These field are both unidirectional and must not be set to | These field are both unidirectional and must not be set to | |||
| bidirectional in a rule entry. | bidirectional in a rule entry. | |||
| If single value is expected by the client, it can be stored in the TV | If single value is expected by the client, it can be stored in the TV | |||
| and elided during the transmission. Otherwise, if several possible | and elided during the transmission. Otherwise, if several possible | |||
| values are expected by the client, a matching-list should be used to | values are expected by the client, a matching-list should be used to | |||
| limit the size of the residue. If not the possible, the value as to | limit the size of the residue. If is not possible, the value has to | |||
| be sent as a residue (fixed or variable length). | be sent as a residue (fixed or variable length). | |||
| 5.2. CoAP option Max-Age field, CoAP option Uri-Host and Uri-Port | 5.2. CoAP option Max-Age field, CoAP option Uri-Host and Uri-Port | |||
| fields | fields | |||
| This field is unidirectional and must not be set to bidirectional in | This field is unidirectional and must not be set to bidirectional in | |||
| a rule entry. It is used only by the server to inform of the caching | a rule entry. It is used only by the server to inform of the caching | |||
| duration and is never found in client requests. | duration and is never found in client requests. | |||
| If the duration is known by both ends, value can be elided on the | If the duration is known by both ends, value can be elided on the | |||
| skipping to change at page 8, line 35 ¶ | skipping to change at page 8, line 18 ¶ | |||
| change, MO comparison is set with the first element of the matching. | change, MO comparison is set with the first element of the matching. | |||
| FID FL FP DI TV MO CDA | FID FL FP DI TV MO CDA | |||
| URI-Path 1 up ["/a/b", equal not-sent | URI-Path 1 up ["/a/b", equal not-sent | |||
| "/c/d"] | "/c/d"] | |||
| URI-Path 3 up ignore value-sent | URI-Path 3 up ignore value-sent | |||
| Figure 2: complex path example | Figure 2: complex path example | |||
| In Figure 2 a single bit residue can be used to code one of the 2 | In Figure 2 a single bit residue can be used to code one of the 2 | |||
| paths. If regrouping was not allowed, a 2 bits residue whould have | paths. If regrouping was not allowed, a 2 bits residue is needed. | |||
| been needed. | ||||
| 5.3.1. Variable length Uri-Path and Uri-Query | 5.3.1. Variable length Uri-Path and Uri-Query | |||
| When the length is known at the rule creation, the Field Length must | When the length is known at the rule creation, the Field Length must | |||
| be set to variable, and the unit is set to bytes. | be set to variable, and the unit is set to bytes. | |||
| The MSB MO can be apply to a Uri-Path or Uri-Query element. Since | The MSB MO can be apply to a Uri-Path or Uri-Query element. Since | |||
| MSB value is given in bit, the size must always be a multiple of 8 | MSB value is given in bit, the size must always be a multiple of 8 | |||
| bits and the LSB CDA must not carry any value. | bits and the LSB CDA must not carry any value. | |||
| skipping to change at page 9, line 32 ¶ | skipping to change at page 9, line 12 ¶ | |||
| residue with a length of 0 to indicate that this Uri-Path is empty. | residue with a length of 0 to indicate that this Uri-Path is empty. | |||
| This add 4 bits to the compression residue. | This add 4 bits to the compression residue. | |||
| 5.4. CoAP option Size1, Size2, Proxy-URI and Proxy-Scheme fields | 5.4. CoAP option Size1, Size2, Proxy-URI and Proxy-Scheme fields | |||
| These fields are unidirectional and must not be set to bidirectional | These fields are unidirectional and must not be set to bidirectional | |||
| in a rule entry. They are used only by the client to access to a | in a rule entry. They are used only by the client to access to a | |||
| specific resource and are never found in server response. | specific resource and are never found in server response. | |||
| If the field value must be sent, TV is not set, MO is set to "ignore" | If the field value must be sent, TV is not set, MO is set to "ignore" | |||
| and CDF is set to "value-sent. A mapping can also be used. | and CDA is set to "value-sent. A mapping can also be used. | |||
| Otherwise the TV is set to the value, MO is set to "equal" and CDF is | Otherwise the TV is set to the value, MO is set to "equal" and CDA is | |||
| set to "not-sent" | set to "not-sent" | |||
| 5.5. CoAP option ETag, If-Match, If-None-Match, Location-Path and | 5.5. CoAP option ETag, If-Match, If-None-Match, Location-Path and | |||
| Location-Query fields | Location-Query fields | |||
| These fields are unidirectional. | These fields are unidirectional. | |||
| These fields values cannot be stored in a rule entry. They must | These fields values cannot be stored in a rule entry. They must | |||
| always be sent with the compression residues. | always be sent with the compression residues. | |||
| skipping to change at page 10, line 8 ¶ | skipping to change at page 9, line 37 ¶ | |||
| 6.1. Block | 6.1. Block | |||
| Block [rfc7959] allows a fragmentation at the CoAP level. SCHC | Block [rfc7959] allows a fragmentation at the CoAP level. SCHC | |||
| includes also a fragmentation protocol. They are compatible. If a | includes also a fragmentation protocol. They are compatible. If a | |||
| block option is used, its content must be sent as a compression | block option is used, its content must be sent as a compression | |||
| residue. | residue. | |||
| 6.2. Observe | 6.2. Observe | |||
| [rfc7641] defines the Observe option. The TV is not set, MO is set | [rfc7641] defines the Observe option. The TV is not set, MO is set | |||
| to "ignore" and the CDF is set to "value-sent". SCHC does not limit | to "ignore" and the CDA is set to "value-sent". SCHC does not limit | |||
| the maximum size for this option (3 bytes). To reduce the | the maximum size for this option (3 bytes). To reduce the | |||
| transmission size either the device implementation should limit the | transmission size either the device implementation should limit the | |||
| value increase or a proxy can modify the incrementation. | delta between two consecutive value or a proxy can modify the | |||
| incrementation. | ||||
| Since RST message may be sent to inform a server that the client do | Since RST message may be sent to inform a server that the client does | |||
| not require Observe response, a rule must allow the transmission of | not require Observe response, a rule must allow the transmission of | |||
| this message. | this message. | |||
| 6.3. No-Response | 6.3. No-Response | |||
| [rfc7967] defines an No-Response option limiting the responses made | [rfc7967] defines an No-Response option limiting the responses made | |||
| by a server to a request. If the value is not known by both ends, | by a server to a request. If the value is not known by both ends, | |||
| then TV is set to this value, MO is set to "equal" and CDF is set to | then TV is set to this value, MO is set to "equal" and CDA is set to | |||
| "not-sent". | "not-sent". | |||
| Otherwise, if the value is changing over time, TV is not set, MO is | Otherwise, if the value is changing over time, TV is not set, MO is | |||
| set to "ignore" and CDA to "value-sent". A matching list can also be | set to "ignore" and CDA to "value-sent". A matching list can also be | |||
| used to reduce the size. | used to reduce the size. | |||
| 6.4. Time Scale | 6.4. Time Scale | |||
| Time scale [I-D.toutain-core-time-scale] option allows a client to | Time scale [I-D.toutain-core-time-scale] option allows a client to | |||
| inform the server that it is in a slow network and that message ID | inform the server that it is in a slow network and that message ID | |||
| skipping to change at page 11, line 9 ¶ | skipping to change at page 10, line 32 ¶ | |||
| 6.5. OSCORE | 6.5. OSCORE | |||
| OSCORE [I-D.ietf-core-object-security] defines end-to-end protection | OSCORE [I-D.ietf-core-object-security] defines end-to-end protection | |||
| for CoAP messages. This section describes how SCHC rules can be | for CoAP messages. This section describes how SCHC rules can be | |||
| applied to compress OSCORE-protected messages. | applied to compress OSCORE-protected messages. | |||
| 0 1 2 3 4 5 6 7 <--------- n bytes -------------> | 0 1 2 3 4 5 6 7 <--------- n bytes -------------> | |||
| +-+-+-+-+-+-+-+-+--------------------------------- | +-+-+-+-+-+-+-+-+--------------------------------- | |||
| |0 0 0|h|k| n | Partial IV (if any) ... | |0 0 0|h|k| n | Partial IV (if any) ... | |||
| +-+-+-+-+-+-+-+-+--------------------------------- | +-+-+-+-+-+-+-+-+--------------------------------- | |||
| | | | | | | | |||
| | <--------- CoAP OSCORE_piv ------------------> | | |<-- CoAP -->|<------ CoAP OSCORE_piv ------> | | |||
| OSCORE_flags | ||||
| <- 1 byte -> <------ s bytes -----> | <- 1 byte -> <------ s bytes -----> | |||
| +------------+----------------------+-----------------------+ | +------------+----------------------+-----------------------+ | |||
| | s (if any) | kid context (if any) | kid (if any) ... | | | s (if any) | kid context (if any) | kid (if any) ... | | |||
| +------------+----------------------+-----------------------+ | +------------+----------------------+-----------------------+ | |||
| | | | | | | | | |||
| | <------ CoAP OSCORE_kidctxt ----->|<-- CoAP OSCORE_kid -->| | | <------ CoAP OSCORE_kidctxt ----->|<-- CoAP OSCORE_kid -->| | |||
| Figure 4: OSCORE Option | Figure 4: OSCORE Option | |||
| The encoding of the OSCORE Option Value defined in Section 6.1 of | The encoding of the OSCORE Option Value defined in Section 6.1 of | |||
| [I-D.ietf-core-object-security] is repeated in Figure 4. | [I-D.ietf-core-object-security] is repeated in Figure 4. | |||
| The first byte is used for flags that specify the contents of the | The first byte is used for flags that specify the contents of the | |||
| OSCORE option. The 3 most significant bits are reserved and always | OSCORE option. The 3 most significant bits are reserved and always | |||
| set to 0. Bit h, when set, indicates the presence of the kid context | 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 | field in the option. Bit k, when set, indicates the presence of a | |||
| kid field. The 3 least significant bits n indicate to length of the | kid field. The 3 least significant bits n indicate the length of the | |||
| piv field in bytes, n = 0 taken to mean that no piv is present. | piv field in bytes. When n = 0, no piv is present. | |||
| After the flag byte follow the piv field, kid context field and kid | After the flag byte follow the piv field, kid context field and kid | |||
| field in order and if present; the length of the kid context field is | field in order and if present; the length of the kid context field is | |||
| encoded in the first byte denoting by s the length of the kid context | encoded in the first byte denoting by s the length of the kid context | |||
| in bytes. | in bytes. | |||
| This draft recommends to implement a parser that is able to identify | This draft recommends to implement a parser that is able to identify | |||
| the OSCORE Option and the fields it contains - this makes it possible | the OSCORE Option and the fields it contains. | |||
| to do a preliminary processing of the message in preparation for | ||||
| regular SCHC compression. | ||||
| Conceptually, the OSCORE option can transmit up to 3 distinct pieces | Conceptually, it discerns up to 4 distinct pieces of information | |||
| of information at a time: the piv, the kid context, and the kid. | within the OSCORE option: the flag bits, the piv, the kid context, | |||
| This draft proposes that the SCHC Parser split the contents of this | and the kid. It is thus recommended that the parser split the OSCORE | |||
| option into 3 SCHC fields: | option into the 4 subsequent fields: | |||
| o CoAP OSCORE_flags, | ||||
| o CoAP OSCORE_piv, | o CoAP OSCORE_piv, | |||
| o CoAP OSCORE_ctxt, | o CoAP OSCORE_kidctxt, | |||
| o CoAP OSCORE_kid. | o CoAP OSCORE_kid. | |||
| These fields are superposed on the OSCORE Option format in Figure 4, | These fields are superposed on the OSCORE Option format in Figure 4, | |||
| and include the corresponding flag and size bits for each part of the | the CoAP OSCORE_kidctxt field including the size bits s. Their size | |||
| option. Both the flag and size bits can be omitted by use of the MSB | may be reduced using the MSB matching operator. | |||
| matching operator on each field. | ||||
| 7. Examples of CoAP header compression | 7. Examples of CoAP header compression | |||
| 7.1. Mandatory header with CON message | 7.1. Mandatory header with CON message | |||
| In this first scenario, the LPWAN compressor receives from outside | In this first scenario, the LPWAN compressor receives from outside | |||
| client a POST message, which is immediately acknowledged by the | client a POST message, which is immediately acknowledged by the | |||
| Device. For this simple scenario, the rules are described Figure 5. | Device. For this simple scenario, the rules are described Figure 5. | |||
| Rule ID 1 | Rule ID 1 | |||
| skipping to change at page 13, line 26 ¶ | skipping to change at page 13, line 26 ¶ | |||
| | | | | | | |||
| ---------------------->| rule id=1 | | ---------------------->| rule id=1 | | |||
| +-+-+--+----+--------+ |------------------->| | +-+-+--+----+--------+ |------------------->| | |||
| |1|2| 0|2.05| 0x0034 | | TCCCCCMMMMMMMMM |---------------------> | |1|2| 0|2.05| 0x0034 | | TCCCCCMMMMMMMMM |---------------------> | |||
| +-+-+--+----+--------+ | 001100000110100 | +-+-+--+----+------+ | +-+-+--+----+--------+ | 001100000110100 | +-+-+--+----+------+ | |||
| | | |1|2| 0|2.05|0x0034| | | | |1|2| 0|2.05|0x0034| | |||
| v v +-+-+--+----+------+ | v v +-+-+--+----+------+ | |||
| Figure 6: Compression with global addresses | Figure 6: Compression with global addresses | |||
| 7.2. Complete exchange | 7.2. OSCORE Compression | |||
| In that example, the Thing is using CoMi and sends queries for 2 SID. | ||||
| CON | ||||
| MID=0x0012 | | | ||||
| POST | | | ||||
| Accept X | | | ||||
| /c/k=AS |------------------------>| | ||||
| | | | ||||
| | | | ||||
| |<------------------------| ACK MID=0x0012 | ||||
| | | 0.00 | ||||
| | | | ||||
| | | | ||||
| |<------------------------| CON | ||||
| | | MID=0X0034 | ||||
| | | Content-Format X | ||||
| ACK MID=0x0034 |------------------------>| | ||||
| 0.00 | ||||
| 7.3. 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, which are otherwise required to terminate their TLS or DTLS | messages. The goal, therefore, is to hide as much of the message as | |||
| protection at the proxy, as discussed in Section 11.2 of [rfc7252]. | possible while still enabling proxy operation. | |||
| CoAP proxies are men-in-the-middle, but not all of the information | ||||
| they have access to is necessary for their operation. The goal, | ||||
| therefore, is to hide as much of the message as possible while still | ||||
| enabling proxy operation. | ||||
| Conceptually this is achieved by splitting the CoAP message into an | Conceptually this is achieved by splitting the CoAP message into an | |||
| Inner Plaintext and Outer OSCORE Message. The Inner Plaintext | Inner Plaintext and Outer OSCORE Message. The Inner Plaintext | |||
| contains sensible information which is not necessary for proxy | contains sensible information which is not necessary for proxy | |||
| operation. This, in turn, is the part of the message which can be | operation. This, in turn, is the part of the message which can be | |||
| encrypted and need not be decrypted until it reaches its end | encrypted until it reaches its end destination. The Outer Message | |||
| destination. The Outer Message acts as a shell matching the format | acts as a shell matching the format of a regular CoAP message, and | |||
| of a regular CoAP message, and includes all Options and information | includes all Options and information needed for proxy operation and | |||
| needed for proxy operation and caching. This decomposition is | caching. This decomposition is illustrated in Figure 7. | |||
| illustrated in Figure 7. | ||||
| CoAP options are sorted into one of 3 classes, each granted a | CoAP options are sorted into one of 3 classes, each granted a | |||
| specific type of protection by the protocol: | specific type of protection by the protocol: | |||
| o Class E: Enrypted options moved to the Inner Plaintext, | o Class E: Encrypted options moved to the Inner Plaintext, | |||
| o Class I: Intergrity-protected options included in the AAD for the | o Class I: Integrity-protected options included in the AAD for the | |||
| encryption of the Plaintext but otherwise left untouched in the | encryption of the Plaintext but otherwise left untouched in the | |||
| Outer Message, | Outer Message, | |||
| o Class U: Unprotected options left untouched in the Outer Message. | o Class U: Unprotected options left untouched in the Outer Message. | |||
| Additionally, the OSCORE Option is added as an Outer option, | Additionally, the OSCORE Option is added as an Outer option, | |||
| signaling that the message is OSCORE protected. This option carries | signaling that the message is OSCORE protected. This option carries | |||
| the information necessary to retrieve the Security Context with which | the information necessary to retrieve the Security Context with which | |||
| the message was encrypted so that it may be correctly decrypted at | the message was encrypted so that it may be correctly decrypted at | |||
| the other end-point. | the other end-point. | |||
| Orignal CoAP Message | Original CoAP Message | |||
| +-+-+---+-------+---------------+ | +-+-+---+-------+---------------+ | |||
| |v|t|tkl| code | Msg Id. | | |v|t|tkl| code | Msg Id. | | |||
| +-+-+---+-------+---------------+....+ | +-+-+---+-------+---------------+....+ | |||
| | Token | | | Token | | |||
| +-------------------------------.....+ | +-------------------------------.....+ | |||
| | Options (IEU) | | | Options (IEU) | | |||
| . . | . . | |||
| . . | . . | |||
| +------+-------------------+ | +------+-------------------+ | |||
| | 0xFF | | | 0xFF | | |||
| skipping to change at page 15, line 41 ¶ | skipping to change at page 14, line 47 ¶ | |||
| | Options (IU) | | OxFF | | | Options (IU) | | OxFF | | |||
| . . +-------+-----------+ | . . +-------+-----------+ | |||
| . OSCORE Option . | | | . OSCORE Option . | | | |||
| +------+-------------------+ | Payload | | +------+-------------------+ | Payload | | |||
| | 0xFF | | | | | 0xFF | | | | |||
| +------+ +-------------------+ | +------+ +-------------------+ | |||
| Figure 7: OSCORE inner and outer header form a CoAP message | Figure 7: OSCORE inner and outer header form a CoAP message | |||
| Figure 7 shows the message format for the OSCORE Message and | Figure 7 shows the message format for the OSCORE Message and | |||
| Plaintext. In the Outer Header, the original message code is hidden | Plaintext. | |||
| and replaced by a default value (POST or FETCH) depending on whether | ||||
| the original message was a Request or a Response. The original | In the Outer Header, the original message code is hidden and replaced | |||
| message code is put into the first byte of the Plaintext. Following | by a default dummy value. As seen in sections 4.1.3.5 and 4.2 of | |||
| the message code come the class E options and if present the original | ||||
| message Payload preceded by its payload marker. | [I-D.ietf-core-object-security], the message code is replaced by POST | |||
| for requests and Changed for responses when Observe is not used. If | ||||
| Observe is used, the message code is replaced by FETCH for requests | ||||
| and Content for responses. | ||||
| The original message code is put into the first byte of the | ||||
| Plaintext. Following the message code, the class E options comes and | ||||
| if present the original message Payload is preceded by its payload | ||||
| marker. | ||||
| The Plaintext is now encrypted by an AEAD algorithm which integrity | The Plaintext is now encrypted by an AEAD algorithm which integrity | |||
| protects Security Context parameters and eventually any class I | protects Security Context parameters and eventually any class I | |||
| options from the Outer Header. Currently no CoAP options are marked | options from the Outer Header. Currently no CoAP options are marked | |||
| class I. The resulting Ciphertext becomes the new Payload of the | class I. The resulting Ciphertext becomes the new Payload of the | |||
| OSCORE message, as illustrated in Figure 8. | OSCORE message, as illustrated in Figure 8. | |||
| This Ciphertext is, as defined in RFC 5116, the concatenation of the | ||||
| encrypted Plaintext and its authentication tag. Note that Inner | ||||
| Compression only affects the Plaintext before encryption, thus we can | ||||
| only aim to reduce this first, variable length component of the | ||||
| Ciphertext. The authentication tag is fixed in length and considered | ||||
| part of the cost of protection. | ||||
| Outer Header | Outer Header | |||
| +-+-+---+--------+---------------+ | +-+-+---+--------+---------------+ | |||
| |v|t|tkl|new code| Msg Id. | | |v|t|tkl|new code| Msg Id. | | |||
| +-+-+---+--------+---------------+....+ | +-+-+---+--------+---------------+....+ | |||
| | Token | | | Token | | |||
| +--------------------------------.....+ | +--------------------------------.....+ | |||
| | Options (IU) | | | Options (IU) | | |||
| . . | . . | |||
| . OSCORE Option . | . OSCORE Option . | |||
| +------+-------------------+ | +------+-------------------+ | |||
| skipping to change at page 16, line 29 ¶ | skipping to change at page 16, line 7 ¶ | |||
| | | | | | | |||
| | Encrypted Inner Header and | | | Encrypted Inner Header and | | |||
| | Payload | | | Payload | | |||
| | | | | | | |||
| +--------------------------------+ | +--------------------------------+ | |||
| Figure 8: OSCORE message | Figure 8: OSCORE message | |||
| The SCHC Compression scheme consists of compressing both the | The SCHC Compression scheme consists of compressing both the | |||
| Plaintext before encryption and the resulting OSCORE message after | Plaintext before encryption and the resulting OSCORE message after | |||
| encryption, see Figure 9. This way compression reaches all fields of | encryption, see Figure 9. | |||
| the original CoAP message. | ||||
| This translates into a segmented process where SCHC compression is | ||||
| applied independently in 2 stages, each with its corresponding set of | ||||
| rules, with the Inner SCHC Rules and the Outer SCHC Rules. This way | ||||
| compression is applied to all fields of the original CoAP message. | ||||
| Note that since the Inner part of the message can only be decrypted | ||||
| by the corresponding end-point, this end-point will also have to | ||||
| implement Inner SCHC Compression/Decompression. | ||||
| Outer Message OSCORE Plaintext | Outer Message OSCORE Plaintext | |||
| +-+-+---+--------+---------------+ +-------+ | +-+-+---+--------+---------------+ +-------+ | |||
| |v|t|tkl|new code| Msg Id. | | code | | |v|t|tkl|new code| Msg Id. | | code | | |||
| +-+-+---+--------+---------------+....+ +-------+-----......+ | +-+-+---+--------+---------------+....+ +-------+-----......+ | |||
| | Token | | Options (E) | | | Token | | Options (E) | | |||
| +--------------------------------.....+ +-------+------.....+ | +--------------------------------.....+ +-------+------.....+ | |||
| | Options (IU) | | OxFF | | | Options (IU) | | OxFF | | |||
| . . +-------+-----------+ | . . +-------+-----------+ | |||
| . OSCORE Option . | | | . OSCORE Option . | | | |||
| skipping to change at page 17, line 39 ¶ | skipping to change at page 17, line 5 ¶ | |||
| |Rule ID'| | Encryption | <--- +----------+--------+ | |Rule ID'| | Encryption | <--- +----------+--------+ | |||
| +--------+--+ +------------+ | | | +--------+--+ +------------+ | | | |||
| | Residue' | | Payload | | | Residue' | | Payload | | |||
| +-----------+-------+ | | | +-----------+-------+ | | | |||
| | Ciphertext | +-------------------+ | | Ciphertext | +-------------------+ | |||
| | | | | | | |||
| +-------------------+ | +-------------------+ | |||
| Figure 9: OSCORE Compression Diagram | Figure 9: OSCORE Compression Diagram | |||
| 7.4. Example OSCORE Compression | 7.3. Example OSCORE Compression | |||
| In what follows we present an example GET Request and consequent | An example is given with a GET Request and its consequent CONTENT | |||
| CONTENT Response and show a possible set of rules for the Inner and | Response. A possible set of rules for the Inner and Outer SCHC | |||
| Outer SCHC Compression. We then show a dump of the results and | Compression is shown. A dump of the results and a contrast between | |||
| contrast SCHC + OSCORE performance with SCHC + COAP performance. | SCHC + OSCORE performance with SCHC + COAP performance is also | |||
| This gives an approximation to the cost of security with SCHC-OSCORE. | listed. This gives an approximation to the cost of security with | |||
| SCHC-OSCORE. | ||||
| Our first example CoAP message is the GET Request in Figure 10 | Our first example CoAP message is the GET Request in Figure 10 | |||
| 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" | |||
| skipping to change at page 19, line 6 ¶ | skipping to change at page 18, line 28 ¶ | |||
| 0xFF Payload marker | 0xFF Payload marker | |||
| Payload: | Payload: | |||
| 0x32332043 | 0x32332043 | |||
| Original msg length: 10 | Original msg length: 10 | |||
| Figure 11: CoAP CONTENT Response | Figure 11: CoAP CONTENT Response | |||
| The SCHC Rules for the Inner Compression include all fields that are | The SCHC Rules for the Inner Compression include all fields that are | |||
| already present in a regular CoAP message, what matters is the order | already present in a regular CoAP message, what is important is the | |||
| of appearance and inclusion of only those CoAP fields that go into | order of appearance and inclusion of only those CoAP fields that go | |||
| the Plaintext, Figure 12. | into the Plaintext, Figure 12. | |||
| Rule ID 0 | Rule ID 0 | |||
| +----------------+--+--+-----------+-----------+-----------++--------+ | +----------------+--+--+-----------+-----------+-----------++--------+ | |||
| | Field |FP|DI| Target | MO | CDA || Sent | | | Field |FP|DI| Target | MO | CDA || Sent | | |||
| | | | | Value | | || [bits] | | | | | | Value | | || [bits] | | |||
| +----------------+--+--+-----------+-----------+-----------++--------+ | +----------------+--+--+-----------+-----------+-----------++--------+ | |||
| |CoAP Code | |up| 1 | equal |not-sent || | | |CoAP Code | |up| 1 | equal |not-sent || | | |||
| |CoAP Code | |dw|[69,132] | match-map |match-sent || c | | |CoAP Code | |dw|[69,132] | match-map |match-sent || c | | |||
| |CoAP Uri-Path | |up|temperature| equal |not-sent || | | |CoAP Uri-Path | |up|temperature| equal |not-sent || | | |||
| |COAP Option-End | |dw| 0xFF | equal |not-sent || | | |COAP Option-End | |dw| 0xFF | equal |not-sent || | | |||
| +----------------+--+--+-----------+-----------+-----------++--------+ | +----------------+--+--+-----------+-----------+-----------++--------+ | |||
| Figure 12: Inner SCHC Rules | Figure 12: Inner SCHC Rules | |||
| The Outer SCHC Rules (Figure 13) must process the OSCORE Options | Figure 13 shows the Plaintext obtained for our example GET Request | |||
| fields. Here we mask off the repeated bits (most importantly the | and follows the process of Inner Compression and Encryption until we | |||
| flag and size bits) with the MSB Mathing Operator. | end up with the Payload to be added in the outer OSCORE Message. | |||
| In this case the original message has no payload and its resulting | ||||
| Plaintext can be compressed up to only 1 byte (size of the Rule ID). | ||||
| The AEAD algorithm preserves this length in its first output, but | ||||
| also yields a fixed-size tag which cannot be compressed and must be | ||||
| included in the OSCORE message. This translates into an overhead in | ||||
| total message length, which limits the amount of compression that can | ||||
| be achieved and plays into the cost of adding security to the | ||||
| exchange. | ||||
| ________________________________________________________ | ||||
| | | | ||||
| | OSCORE Plaintext | | ||||
| | | | ||||
| | 0x01bb74656d7065726174757265 (13 bytes) | | ||||
| | | | ||||
| | 0x01 Request Code GET | | ||||
| | | | ||||
| | bb74656d7065726174757265 Option 11: URI_PATH | | ||||
| | Value = temperature | | ||||
| |________________________________________________________| | ||||
| | | ||||
| | | ||||
| | Inner SCHC Compression | ||||
| | | ||||
| v | ||||
| _________________________________ | ||||
| | | | ||||
| | Compressed Plaintext | | ||||
| | | | ||||
| | 0x00 | | ||||
| | | | ||||
| | Rule ID = 0x00 (1 byte) | | ||||
| | (No residue) | | ||||
| |_________________________________| | ||||
| | | ||||
| | AEAD Encryption | ||||
| | (piv = 0x04) | ||||
| v | ||||
| _________________________________________________ | ||||
| | | | ||||
| | encrypted_plaintext = 0xa2 (1 byte) | | ||||
| | tag = 0xc54fe1b434297b62 (8 bytes) | | ||||
| | | | ||||
| | ciphertext = 0xa2c54fe1b434297b62 (9 bytes) | | ||||
| |_________________________________________________| | ||||
| Figure 13: Plaintext compression and encryption for GET Request | ||||
| In Figure 14 we repeat the process for the example CONTENT Response. | ||||
| In this case the misalignment produced by the compression residue (1 | ||||
| bit) makes it so that 7 bits of padding must be applied after the | ||||
| payload, resulting in a compressed Plaintext that is the same size as | ||||
| before compression. This misalignment also causes the hexcode from | ||||
| the payload to differ from the original, even though it has not been | ||||
| compressed. On top of this, the overhead from the tag bytes is | ||||
| incurred as before. | ||||
| ________________________________________________________ | ||||
| | | | ||||
| | OSCORE Plaintext | | ||||
| | | | ||||
| | 0x45ff32332043 (6 bytes) | | ||||
| | | | ||||
| | 0x45 Successful Response Code 69 "2.05 Content" | | ||||
| | | | ||||
| | ff Payload marker | | ||||
| | | | ||||
| | 32332043 Payload | | ||||
| |________________________________________________________| | ||||
| | | ||||
| | | ||||
| | Inner SCHC Compression | ||||
| | | ||||
| v | ||||
| __________________________________________ | ||||
| | | | ||||
| | Compressed Plaintext | | ||||
| | | | ||||
| | 0x001919902180 (6 bytes) | | ||||
| | | | ||||
| | 00 Rule ID | | ||||
| | | | ||||
| | 0b0 (1 bit match-map residue) | | ||||
| | 0x32332043 >> 1 (shifted payload) | | ||||
| | 0b0000000 Padding | | ||||
| |__________________________________________| | ||||
| | | ||||
| | AEAD Encryption | ||||
| | (piv = 0x04) | ||||
| v | ||||
| _________________________________________________________ | ||||
| | | | ||||
| | encrypted_plaintext = 0x10c6d7c26cc1 (6 bytes) | | ||||
| | tag = 0xe9aef3f2461e0c29 (8 bytes) | | ||||
| | | | ||||
| | ciphertext = 0x10c6d7c26cc1e9aef3f2461e0c29 (14 bytes) | | ||||
| |_________________________________________________________| | ||||
| Figure 14: Plaintext compression and encryption for CONTENT Response | ||||
| The Outer SCHC Rules (Figure 17) must process the OSCORE Options | ||||
| fields. In Figure 15 and Figure 16 we show a dump of the OSCORE | ||||
| Messages generated from our example messages once they have been | ||||
| provided with the Inner Compressed Ciphertext in the payload. These | ||||
| are the messages that are to go through Outer SCHC Compression. | ||||
| Protected message: | ||||
| ================== | ||||
| 0x4102000182d7080904636c69656e74ffa2c54fe1b434297b62 | ||||
| (25 bytes) | ||||
| Header: | ||||
| 0x4102 | ||||
| 01 Ver | ||||
| 00 CON | ||||
| 0001 tkl | ||||
| 00000010 Request Code 2 "POST" | ||||
| 0x0001 = mid | ||||
| 0x82 = token | ||||
| Options: | ||||
| 0xd7080904636c69656e74 (10 bytes) | ||||
| Option 21: OBJECT_SECURITY | ||||
| Value = 0x0904636c69656e74 | ||||
| 09 = 000 0 1 001 Flag byte | ||||
| h k n | ||||
| 04 piv | ||||
| 636c69656e74 kid | ||||
| 0xFF Payload marker | ||||
| Payload: | ||||
| 0xa2c54fe1b434297b62 (9 bytes) | ||||
| Figure 15: Protected and Inner SCHC Compressed GET Request | ||||
| Protected message: | ||||
| ================== | ||||
| 0x6144000182d008ff10c6d7c26cc1e9aef3f2461e0c29 | ||||
| (22 bytes) | ||||
| Header: | ||||
| 0x6144 | ||||
| 01 Ver | ||||
| 10 ACK | ||||
| 0001 tkl | ||||
| 01000100 Successful Response Code 68 "2.04 Changed" | ||||
| 0x0001 = mid | ||||
| 0x82 = token | ||||
| Options: | ||||
| 0xd008 (2 bytes) | ||||
| Option 21: OBJECT_SECURITY | ||||
| Value = b'' | ||||
| 0xFF Payload marker | ||||
| Payload: | ||||
| 0x10c6d7c26cc1e9aef3f2461e0c29 (14 bytes) | ||||
| Figure 16: Protected and Inner SCHC Compressed CONTENT Response | ||||
| For the flag bits, a number of compression methods could prove to be | ||||
| useful depending on the application. The simplest alternative is to | ||||
| provide a fixed value for the flags, combining MO equal and CDA not- | ||||
| sent. This saves most bits but could hinder flexibility. Otherwise, | ||||
| match-mapping could allow to choose from a number of configurations | ||||
| of interest to the exchange. If neither of these alternatives is | ||||
| desirable, MSB could be used to mask off the 3 hard-coded most | ||||
| significant bits. | ||||
| Note that fixing a flag bit will limit the choice of CoAP Options | ||||
| that can be used in the exchange, since their values are dependent on | ||||
| certain options. | ||||
| The piv field lends itself to having a number of bits masked off with | ||||
| MO MSB and CDA LSB. This could prove useful in applications where | ||||
| the message frequency is low such as that found in LPWAN | ||||
| technologies. Note that compressing the sequence numbers effectively | ||||
| reduces the maximum amount of sequence numbers that can be used in an | ||||
| exchange. Once this amount is exceeded, the SCHC Context would need | ||||
| to be re-established. | ||||
| The size s included in the kid context field may be masked off with | ||||
| CDA MSB. The rest of the field could have additional bits masked | ||||
| off, or have the whole field be fixed with MO equal and CDA not-sent. | ||||
| The same holds for the kid field. | ||||
| Figure 17 shows a possible set of Outer Rules to compress the Outer | ||||
| Header. | ||||
| Rule ID 0 | Rule ID 0 | |||
| +---------------+--+--+--------------+---------+-----------++------------+ | +-------------------+--+--+--------------+---------+-----------++--------+ | |||
| | Field |FP|DI| Target | MO | CDA || Sent | | | Field |FP|DI| Target | MO | CDA || Sent | | |||
| | | | | Value | | || [bits] | | | | | | Value | | || [bits] | | |||
| +---------------+--+--+--------------+---------+-----------++------------+ | +-------------------+--+--+--------------+---------+-----------++--------+ | |||
| |CoAP version | |bi| 01 |equal |not-sent || | | |CoAP version | |bi| 01 |equal |not-sent || | | |||
| |CoAP Type | |up| 0 |equal |not-sent || | | |CoAP Type | |up| 0 |equal |not-sent || | | |||
| |CoAP Type | |dw| 2 |equal |not-sent || | | |CoAP Type | |dw| 2 |equal |not-sent || | | |||
| |CoAP TKL | |bi| 1 |equal |not-sent || | | |CoAP TKL | |bi| 1 |equal |not-sent || | | |||
| |CoAP Code | |up| 2 |equal |not-sent || | | |CoAP Code | |up| 2 |equal |not-sent || | | |||
| |CoAP Code | |dw| 68 |equal |not-sent || | | |CoAP Code | |dw| 68 |equal |not-sent || | | |||
| |CoAP MID | |bi| 0000 |MSB(12) |LSB ||MMMM | | |CoAP MID | |bi| 0000 |MSB(12) |LSB ||MMMM | | |||
| |CoAP Token | |bi| 0x80 |MSB(5) |LSB ||TTT | | |CoAP Token | |bi| 0x80 |MSB(5) |LSB ||TTT | | |||
| |CoAP OSCORE_piv| |up| 0x0900 |MSB(12) |LSB ||PPPP | | |CoAP OSCORE_flags | |up| 0x09 |equal |not-sent || | | |||
| |COAP OSCORE_kid| |up|b'\x06client' |MSB(52) |LSB ||KKKK | | |CoAP OSCORE_piv | |up| 0x00 |MSB(4) |LSB ||PPPP | | |||
| |CoAP OSCORE_piv| |dw| b'' |equal |not-sent || | | |COAP OSCORE_kid | |up|0x636c69656e70|MSB(52) |LSB ||KKKK | | |||
| |COAP Option-End| |dw| 0xFF |equal |not-sent || | | |COAP OSCORE_kidctxt| |bi| b'' |equal |not-sent || | | |||
| +---------------+--+--+--------------+---------+-----------++------------+ | |CoAP OSCORE_flags | |dw| b'' |equal |not-sent || | | |||
| |CoAP OSCORE_piv | |dw| b'' |equal |not-sent || | | ||||
| |CoAP OSCORE_kid | |dw| b'' |equal |not-sent || | | ||||
| |COAP Option-End | |dw| 0xFF |equal |not-sent || | | ||||
| +-------------------+--+--+--------------+---------+-----------++--------+ | ||||
| Figure 13: Outer SCHC Rules | Figure 17: Outer SCHC Rules | |||
| Next we show a dump of the compressed message: | These Outer Rules are applied to the example GET Request and CONTENT | |||
| Response. The resulting messages are shown in Figure 18 and | ||||
| Figure 19. | ||||
| Compressed message: | Compressed message: | |||
| ================== | ================== | |||
| 0x00291287f0a5c4833760d170 | 0x001489458a9fc3686852f6c4 (12 bytes) | |||
| 0x00 = Rule ID | 0x00 Rule ID | |||
| 1489 Compression Residue | ||||
| piv = 0x04 | 458a9fc3686852f6c4 Padded payload | |||
| Compression residue: | Compression residue: | |||
| 0b0001 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 | |||
| 0xa1fc297120cdd8345c | 0xa2c54fe1b434297b62 (9 bytes) | |||
| Compressed message length: 12 bytes | Compressed message length: 12 bytes | |||
| Figure 14: SCHC-OSCORE Compressed GET Request | Figure 18: SCHC-OSCORE Compressed GET Request | |||
| Compressed message: | Compressed message: | |||
| ================== | ================== | |||
| 0x0015f4de9cb814c96aed9b1d981a3a58 | 0x0014218daf84d983d35de7e48c3c1852 (16 bytes) | |||
| 0x00 = Rule ID | 0x00 Rule ID | |||
| 14 Compression residue | ||||
| 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 | |||
| 0xfa6f4e5c0a64b576cd8ecc0d1d2c | 0x10c6d7c26cc1e9aef3f2461e0c29 (14 bytes) | |||
| Compressed msg length: 16 bytes | Compressed msg length: 16 bytes | |||
| Figure 15: SCHC-OSCORE Compressed CONTENT Response | Figure 19: SCHC-OSCORE Compressed CONTENT Response | |||
| For contrast, we compare these results with what would be obtained by | For contrast, we compare these results with what would be obtained by | |||
| SCHC compressing the original CoAP messages without protecting them | SCHC compressing the original CoAP messages without protecting them | |||
| with OSCORE. To do this, we compress the CoAP mesages according to | with OSCORE. To do this, we compress the CoAP messages according to | |||
| the SCHC rules in Figure 16. | the SCHC rules in Figure 20. | |||
| Rule ID 1 | Rule ID 1 | |||
| +---------------+--+--+-----------+---------+-----------++------------+ | +---------------+--+--+-----------+---------+-----------++------------+ | |||
| | Field |FP|DI| Target | MO | CDA || Sent | | | Field |FP|DI| Target | MO | CDA || Sent | | |||
| | | | | Value | | || [bits] | | | | | | Value | | || [bits] | | |||
| +---------------+--+--+-----------+---------+-----------++------------+ | +---------------+--+--+-----------+---------+-----------++------------+ | |||
| |CoAP version | |bi| 01 |equal |not-sent || | | |CoAP version | |bi| 01 |equal |not-sent || | | |||
| |CoAP Type | |up| 0 |equal |not-sent || | | |CoAP Type | |up| 0 |equal |not-sent || | | |||
| |CoAP Type | |dw| 2 |equal |not-sent || | | |CoAP Type | |dw| 2 |equal |not-sent || | | |||
| |CoAP TKL | |bi| 1 |equal |not-sent || | | |CoAP TKL | |bi| 1 |equal |not-sent || | | |||
| |CoAP Code | |up| 2 |equal |not-sent || | | |CoAP Code | |up| 2 |equal |not-sent || | | |||
| |CoAP Code | |dw| [69,132] |equal |not-sent || | | |CoAP Code | |dw| [69,132] |equal |not-sent || | | |||
| |CoAP MID | |bi| 0000 |MSB(12) |LSB ||MMMM | | |CoAP MID | |bi| 0000 |MSB(12) |LSB ||MMMM | | |||
| |CoAP Token | |bi| 0x80 |MSB(5) |LSB ||TTT | | |CoAP Token | |bi| 0x80 |MSB(5) |LSB ||TTT | | |||
| |CoAP Uri-Path | |up|temperature|equal |not-sent || | | |CoAP Uri-Path | |up|temperature|equal |not-sent || | | |||
| |COAP Option-End| |dw| 0xFF |equal |not-sent || | | |COAP Option-End| |dw| 0xFF |equal |not-sent || | | |||
| +---------------+--+--+-----------+---------+-----------++------------+ | +---------------+--+--+-----------+---------+-----------++------------+ | |||
| Figure 16: SCHC-CoAP Rules (No OSCORE) | Figure 20: SCHC-CoAP Rules (No OSCORE) | |||
| This yields the results in Figure 17 for the Request, and Figure 18 | This yields the results in Figure 21 for the Request, and Figure 22 | |||
| for the Response. | for the Response. | |||
| Compressed message: | Compressed message: | |||
| ================== | ================== | |||
| 0x0114 | 0x0114 | |||
| 0x01 = Rule ID | 0x01 = Rule ID | |||
| Compression residue: | Compression residue: | |||
| 0b00010100 (1 byte) | 0b00010100 (1 byte) | |||
| Compressed msg length: 2 | Compressed msg length: 2 | |||
| Figure 17: CoAP GET Compressed without OSCORE | Figure 21: CoAP GET Compressed without OSCORE | |||
| Compressed message: | Compressed message: | |||
| ================== | ================== | |||
| 0x010a32332043 | 0x010a32332043 | |||
| 0x01 = Rule ID | 0x01 = Rule ID | |||
| Compression residue: | Compression residue: | |||
| 0b00001010 (1 byte) | 0b00001010 (1 byte) | |||
| Payload | Payload | |||
| 0x32332043 | 0x32332043 | |||
| Compressed msg length: 6 | Compressed msg length: 6 | |||
| Figure 18: CoAP CONTENT Compressed without OSCORE | Figure 22: CoAP CONTENT Compressed without OSCORE | |||
| As can be seen, the difference between applying SCHC + OSCORE as | As can be seen, the difference between applying SCHC + OSCORE as | |||
| compared to regular SCHC + COAP is about 10 bytes of cost. | compared to regular SCHC + COAP is about 10 bytes of cost. | |||
| 8. Normative References | 8. Normative References | |||
| [I-D.ietf-core-object-security] | [I-D.ietf-core-object-security] | |||
| Selander, G., Mattsson, J., Palombini, F., and L. Seitz, | Selander, G., Mattsson, J., Palombini, F., and L. Seitz, | |||
| "Object Security for Constrained RESTful Environments | "Object Security for Constrained RESTful Environments | |||
| (OSCORE)", draft-ietf-core-object-security-13 (work in | (OSCORE)", draft-ietf-core-object-security-15 (work in | |||
| progress), June 2018. | progress), August 2018. | |||
| [I-D.ietf-lpwan-ipv6-static-context-hc] | [I-D.ietf-lpwan-ipv6-static-context-hc] | |||
| Minaburo, A., Toutain, L., Gomez, C., and D. Barthel, | Minaburo, A., Toutain, L., Gomez, C., and D. Barthel, | |||
| "LPWAN Static Context Header Compression (SCHC) and | "LPWAN Static Context Header Compression (SCHC) and | |||
| fragmentation for IPv6 and UDP", draft-ietf-lpwan-ipv6- | fragmentation for IPv6 and UDP", draft-ietf-lpwan-ipv6- | |||
| static-context-hc-16 (work in progress), June 2018. | static-context-hc-16 (work in progress), June 2018. | |||
| [I-D.toutain-core-time-scale] | [I-D.toutain-core-time-scale] | |||
| Minaburo, A. and L. Toutain, "CoAP Time Scale Option", | Minaburo, A. and L. Toutain, "CoAP Time Scale Option", | |||
| draft-toutain-core-time-scale-00 (work in progress), | draft-toutain-core-time-scale-00 (work in progress), | |||
| End of changes. 62 change blocks. | ||||
| 152 lines changed or deleted | 353 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/ | ||||