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.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |