rfc9333xml2.original.xml | rfc9333.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="UTF-8"?> | <?xml version='1.0' encoding='utf-8'?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd"> | ||||
<?rfc rfcedstyle="yes"?> | <!DOCTYPE rfc [ | |||
<?rfc toc="yes"?> | <!ENTITY nbsp " "> | |||
<?rfc tocindent="yes"?> | <!ENTITY zwsp "​"> | |||
<?rfc sortrefs="yes"?> | <!ENTITY nbhy "‑"> | |||
<?rfc symrefs="yes"?> | <!ENTITY wj "⁠"> | |||
<?rfc strict="yes"?> | ]> | |||
<?rfc comments="yes"?> | ||||
<?rfc inline="yes"?> | ||||
<?rfc docmapping="yes"?> | ||||
<rfc category="info" docName="draft-ietf-lwig-minimal-esp-12" ipr="trust200902"> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" number="9333" category="info" do | |||
<front> | cName="draft-ietf-lwig-minimal-esp-12" ipr="trust200902" obsoletes="" updates="" | |||
<title abbrev="Minimal ESP">Minimal IP Encapsulating Security Payload (ESP)< | submissionType="IETF" consensus="true" xml:lang="en" tocInclude="true" sortRefs | |||
/title> | ="true" symRefs="true" version="3"> | |||
<!-- xml2rfc v2v3 conversion 3.15.0 --> | ||||
<front> | ||||
<title abbrev="Minimal IP ESP">Minimal IP Encapsulating Security Payload (ES | ||||
P)</title> | ||||
<seriesInfo name="RFC" value="9333"/> | ||||
<author surname="Migault" initials="D." fullname="Daniel Migault"> | <author surname="Migault" initials="D." fullname="Daniel Migault"> | |||
<organization>Ericsson</organization> | <organization>Ericsson</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>8400 boulevard Decarie</street> | <street>8275 Rte Transcanadienne</street> | |||
<city>Montreal, QC H4P 2N2</city> | <city>Saint-Laurent</city> | |||
<region>QC</region> | ||||
<code>H4S 0B6</code> | ||||
<country>Canada</country> | <country>Canada</country> | |||
</postal> | </postal> | |||
<email>daniel.migault@ericsson.com</email> | <email>daniel.migault@ericsson.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author surname="Guggemos" initials="T." fullname="Tobias Guggemos"> | <author surname="Guggemos" initials="T." fullname="Tobias Guggemos"> | |||
<organization>LMU Munich</organization> | <organization>LMU Munich</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>MNM-Team</street> | <street>MNM-Team</street> | |||
<street>Oettingenstr. 67</street> | <street>Oettingenstr. 67</street> | |||
<city>80538 Munich</city> | <city>80538 Munich</city> | |||
<country>Germany</country> | <country>Germany</country> | |||
</postal> | </postal> | |||
<email>guggemos@mnm-team.org</email> | <email>guggemos@mnm-team.org</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date /> | <date year="2022" month="December" /> | |||
<area>INTERNET</area> | <area>Internet</area> | |||
<workgroup>Light-Weight Implementation Guidance (lwig)</workgroup> | <workgroup>Light-Weight Implementation Guidance (lwig)</workgroup> | |||
<abstract> | ||||
<t> | ||||
This document describes the minimal properties that an IP Encapsulating Security | ||||
Payload (ESP) implementation needs to meet to remain interoperable with the sta | ||||
ndard RFC4303 ESP. | ||||
<!-- This document describes a minimal IP Encapsulation Security Payload (ESP) d | ||||
efined in RFC 4303. Its purpose is to enable implementation of ESP with a minima | ||||
l set of options to remain compatible with ESP as described in RFC 4303. --> | ||||
Such a minimal version of ESP is not intended to become a replacement of the RFC | ||||
4303 ESP. | ||||
Instead, a minimal implementation is expected to be optimized for constrained en | ||||
vironments while remaining interoperable with implementations of RFC 4303 ESP. | ||||
In addition, this document also provides some considerations for implementing mi | ||||
nimal ESP in a constrained environment which includes limiting the number of fla | ||||
sh writes, handling frequent wakeup / sleep states, limiting wakeup time, and re | ||||
ducing the use of random generation. </t> | ||||
<t> This document does not update or modify RFC 4303. It provides a compact desc | <abstract> | |||
ription of how to implement the minimal version of that protocol. | <t> | |||
This document describes the minimal properties that an IP Encapsulating Security | ||||
Payload (ESP) implementation needs to meet to remain interoperable with the sta | ||||
ndard ESP as defined in RFC 4303. | ||||
Such a minimal version of ESP is not intended to become a replacement of ESP in | ||||
RFC 4303. | ||||
Instead, a minimal implementation is expected to be optimized for constrained en | ||||
vironments while remaining interoperable with implementations of ESP. | ||||
In addition, this document provides some considerations for implementing minimal | ||||
ESP in a constrained environment, such as limiting the number of flash writes, | ||||
handling frequent wakeup and sleep states, limiting wakeup time, and reducing th | ||||
e use of random generation. </t> | ||||
<t> This document does not update or modify RFC 4303. It provides a compac | ||||
t description of how to implement the minimal version of that protocol. | ||||
RFC 4303 remains the authoritative description.</t> | RFC 4303 remains the authoritative description.</t> | |||
</abstract> | ||||
</front> | ||||
<middle> | ||||
</abstract> | <section numbered="true" toc="default"> | |||
</front> | <name>Introduction</name> | |||
<t>ESP <xref target="RFC4303" format="default"/> is part of the IPsec prot | ||||
<middle> | ocol suite <xref target="RFC4301" format="default"/>. | |||
IPsec is used to provide confidentiality, data origin authentication, connection | ||||
<section title="Requirements notation"> | less integrity, an anti-replay service, and limited Traffic Flow Confidentiality | |||
(TFC) padding.</t> | ||||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", | <t><xref target="fig-esp-description" format="default"/> describes an ESP | |||
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this d | packet. | |||
ocument are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <x | Currently, ESP is implemented in the kernel of most major multipurpose Operating | |||
ref target="RFC8174"/> when, and only when, they appear in all capitals, as show | Systems (OSes). | |||
n here.</t> | ESP is usually implemented with all of its features to fit the multipurpose usag | |||
e of these OSes, at the expense of resources and with no considerations for code | ||||
</section> | size. | |||
Constrained devices are likely to have their own implementation of ESP optimized | ||||
<section title="Introduction"> | and adapted to their specific use, such as limiting the number of flash writes | |||
(for each packet or across wake time), handling frequent wakeup and sleep states | ||||
<t>ESP <xref target="RFC4303"/> is part of the IPsec protocol suite <xref targe | , limiting wakeup time, and reducing the use of random generation. | |||
t="RFC4301"/>. | With the adoption of IPsec by Internet of Things (IoT) devices with minimal IKEv | |||
IPsec is used to provide confidentiality, data origin authentication, connection | 2 <xref target="RFC7815" format="default"/> and ESP Header Compression (EHC) <xr | |||
less integrity, an anti-replay service and limited traffic flow confidentiality | ef target="I-D.mglt-ipsecme-diet-esp" format="default"/> <xref target="I-D.mglt- | |||
(TFC) padding.</t> | ipsecme-ikev2-diet-esp-extension" format="default"/>, these ESP implementations | |||
<bcp14>MUST</bcp14> remain interoperable with standard ESP implementations. | ||||
<t><xref target="fig-esp-description"/> describes an ESP Packet. | This document describes the minimal properties an ESP implementation needs to me | |||
Currently, ESP is implemented in the kernel of most major multipurpose Operating | et to remain interoperable with ESP <xref target="RFC4303" format="default"/>. | |||
Systems (OS). | In addition, this document provides advice to implementers for implementing ESP | |||
ESP is usually implemented with all of its features to fit the multiple purpose | within constrained environments. | |||
usage of these OSes, at the expense of resources and with no considerations for | This document does not update or modify <xref target="RFC4303" format="default"/ | |||
code size. | >.</t> | |||
Constrained devices are likely to have their own implementation of ESP optimized | ||||
and adapted to their specific use, such as limiting the number of flash writes | ||||
(for each packet or across wake time), handling frequent wakeup and sleep state, | ||||
limiting wakeup time, and reducing the use of random generation. | ||||
With the adoption of IPsec by IoT devices with minimal IKEv2 <xref target="RFC78 | ||||
15"/> and ESP Header Compression (EHC) with <xref target="I-D.mglt-ipsecme-diet- | ||||
esp"/> or <xref target="I-D.mglt-ipsecme-ikev2-diet-esp-extension"/>, these ESP | ||||
implementations MUST remain interoperable with standard ESP implementations. | ||||
This document describes the minimal properties an ESP implementation needs to me | ||||
et to remain interoperable with <xref target="RFC4303"/> ESP. | ||||
In addition, this document also provides advise to implementers for implementing | ||||
ESP within constrained environments. | ||||
This document does not update or modify RFC 4303.</t> | ||||
<t> For each field of the ESP packet represented in <xref target="fig-esp-descri | <t>For each field of the ESP packet represented in <xref target="fig-esp-descrip | |||
ption"/> this document provides recommendations and guidance for minimal impleme | tion" format="default"/>, this document provides recommendations and guidance fo | |||
ntations. | r minimal implementations. | |||
The primary purpose of Minimal ESP is to remain interoperable with other nodes i | The primary purpose of minimal ESP is to remain interoperable with other nodes i | |||
mplementing RFC 4303 ESP, while limiting the standard complexity of the implemen | mplementing ESP <xref target="RFC4303" format="default"/>, while limiting the st | |||
tation. | andard complexity of the implementation. | |||
</t> | </t> | |||
<figure anchor="fig-esp-description" title="ESP Packet Description"> | <figure anchor="fig-esp-description"> | |||
<artwork><![CDATA[ | <name>ESP Packet Description</name> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ---- | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ---- | |||
| Security Parameters Index (SPI) | ^Int. | | Security Parameters Index (SPI) | ^Int. | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Cov- | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Cov- | |||
| Sequence Number | |ered | | Sequence Number | |ered | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ---- | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ---- | |||
| Payload Data* (variable) | | ^ | | Payload Data* (variable) | | ^ | |||
~ ~ | | | ~ ~ | | | |||
| | |Conf. | | | |Conf. | |||
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Cov- | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Cov- | |||
| | Padding (0-255 bytes) | |ered* | | | Padding (0-255 bytes) | |ered* | |||
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |||
| | Pad Length | Next Header | v v | | | Pad Length | Next Header | v v | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ------ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ------ | |||
| Integrity Check Value-ICV (variable) | | | Integrity Check Value (ICV) (variable) | | |||
~ ~ | ~ ~ | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
</section> | ||||
</section> | <section numbered="true" toc="default"> | |||
<name>Requirements Notation</name> | ||||
<section anchor="sec-spi" title="Security Parameter Index (SPI) (32 bit)"> | <t> | |||
The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | ||||
<!-- what is the spi / definition --> | IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
<t> <xref target="RFC4303"/> defines the SPI as a mandatory 32 bits field. </t> | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | ||||
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | ||||
be interpreted as | ||||
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | ||||
when, and only when, they appear in all capitals, as shown here. | ||||
</t> | ||||
</section> | ||||
<section anchor="sec-spi" numbered="true" toc="default"> | ||||
<name>Security Parameters Index (SPI)</name> | ||||
<t> The SPI has a local significance to index the Security Association (SA). | <t> <xref target="RFC4303" format="default"/> defines the SPI as a mandatory 32- | |||
From <xref target="RFC4301"/> section 4.1, nodes supporting only unicast communi | bit field. </t> | |||
cations can index their SA using only the SPI. | ||||
Nodes supporting multicast communications also require to use the IP addresses a | ||||
nd thus SA lookup need to be performed using the longest match. </t> | ||||
<t> For nodes supporting only unicast communications, it is RECOMMENDED indexing | <t> The SPI has local significance to index the Security Association (SA). | |||
the SA using only the SPI. | As described in <xref target="RFC4301" sectionFormat="of" section="4.1"/>, nodes | |||
The index may be based on the full 32 bits of SPI or a subset of these bits. | supporting only unicast communications can index their SA using only the SPI. | |||
Nodes supporting multicast communications also require the use of IP | ||||
addresses; thus, SA lookup needs to be performed using the longest | ||||
match. | ||||
</t> | ||||
<t> For nodes supporting only unicast communications, indexing the SA usin | ||||
g only the SPI is <bcp14>RECOMMENDED</bcp14>. | ||||
The index may be based on the full 32 bits of the SPI or a subset of these bits. | ||||
The node may require a combination of the SPI as well as other parameters (like the IP address) to index the SA.</t> | The node may require a combination of the SPI as well as other parameters (like the IP address) to index the SA.</t> | |||
<t> Values 0-255 <bcp14>MUST NOT</bcp14> be used. | ||||
As per <xref target="RFC4303" sectionFormat="of" section="2.1"/>, values 1-255 a | ||||
re reserved, and 0 is only allowed to be used internally and <bcp14>MUST NOT</bc | ||||
p14> be sent over the wire. </t> | ||||
<t> Values 0-255 MUST NOT be used. | <t> <xref target="RFC4303" format="default"/> does not require the 32-bit SPI to | |||
As per section 2.1 of <xref target="RFC4303"/>, values 1-255 are reserved and 0 | be randomly generated, although that is the <bcp14>RECOMMENDED</bcp14> way to g | |||
is only allowed to be used internally and it MUST NOT be sent over the wire. </t | enerate SPIs as it provides some privacy and security benefits and avoids correl | |||
> | ation between ESP communications. | |||
To obtain a usable random 32-bit SPI, the node generates a random 32-bit value a | ||||
<!-- generation of the spi --> | nd checks it does not fall within the 0-255 range. | |||
<t> <xref target="RFC4303"/> does not require the 32 bit SPI to be randomly gene | ||||
rated, although that is the RECOMMENDED way to generate SPIs as it provides some | ||||
privacy and security benefits and avoids correlation between ESP communications | ||||
. | ||||
To obtain a usable random 32 bit SPI, the node generates a random 32 bit value a | ||||
nd checks it does not fall within the 0-255 range. | ||||
If the SPI has an acceptable value, it is used to index the inbound session. | If the SPI has an acceptable value, it is used to index the inbound session. | |||
Otherwise the generated value is discarded and the process repeats until a valid value is found. | Otherwise, the generated value is discarded, and the process repeats until a val id value is found. | |||
</t> | </t> | |||
<t>Some constrained devices are less concerned with the privacy properties | ||||
<t>Some constrained devices are less concerned with the privacy properties assoc | associated with randomly generated SPIs. | |||
iated to randomly generated SPIs. | ||||
Examples of such devices might include sensors looking to reduce their code comp lexity. | Examples of such devices might include sensors looking to reduce their code comp lexity. | |||
The use of a predictive function to generate the SPI might be preferred over the generation and handling of random values. | The use of a predictive function to generate the SPI might be preferred over the generation and handling of random values. | |||
An implementation of such predictable function could use the combination of a fi xed value and the memory address of the SAD structure. | An implementation of such predictable function could use the combination of a fi xed value and the memory address of the Security Association Database (SAD) stru cture. | |||
For every incoming packet, the node will be able to point to the SAD structure d irectly from the SPI value. | For every incoming packet, the node will be able to point to the SAD structure d irectly from the SPI value. | |||
This avoids having a separate and additional binding and lookup function for the SPI to its SAD entry for every incoming packet. | This avoids having a separate and additional binding and lookup function for the SPI to its SAD entry for every incoming packet. | |||
</t> | </t> | |||
<!-- privacy / security implication for non random SPIs --> | <section numbered="true" toc="default"> | |||
<name>Considerations for SPI Generation</name> | ||||
<section title="Considerations over SPI generation"> | <t>SPIs that are not randomly generated over 32 bits may have privacy an | |||
d security concerns. | ||||
<t>SPIs that are not randomly generated over 32 bits may have privacy and securi | ||||
ty concerns. | ||||
As a result, the use of alternative designs requires careful security and privac y reviews. | As a result, the use of alternative designs requires careful security and privac y reviews. | |||
This section provides some considerations upon the adoption of alternative desig ns. </t> | This section provides some considerations for the adoption of alternative design s. </t> | |||
<t>The SPI value is only looked up for inbound traffic. | <t>The SPI value is only looked up for inbound traffic. | |||
The SPI negotiated with IKEv2 <xref target="RFC7296"/> or Minimal IKEv2 <xref ta | The SPI negotiated with IKEv2 <xref target="RFC7296" format="default"/> or minim | |||
rget="RFC7815"/> by a peer is the value used by the remote peer when it sends tr | al IKEv2 <xref target="RFC7815" format="default"/> by a peer is the value used b | |||
affic. | y the remote peer when it sends traffic. | |||
The main advantage of using a rekeying mechanism is to enable a rekey, that is p | The main advantage of using a rekeying mechanism is to enable a rekey, which is | |||
erformed by replacing an old SA by a new SA, both indexed with distinct SPIs. | performed by replacing an old SA with a new SA, both indexed with distinct SPIs. | |||
As the SPI is only used for inbound traffic by the peer, this allows each peer t | The SPI is only used for inbound traffic by the peer, which allows each peer to | |||
o manage the set of SPIs used for its inbound traffic. | manage the set of SPIs used for its inbound traffic. | |||
The necessary number of SPI reflects the number of inbound SAs as well as the ab | The necessary number of SPIs reflects the number of inbound SAs as well as the a | |||
ility to rekey these SAs. Typically, rekeying a SA is performed by creating a ne | bility to rekey those SAs. Typically, rekeying an SA is performed by creating a | |||
w SA (with a dedicated SPI) before the old SA is deleted. This results in an add | new SA (with a dedicated SPI) before the old SA is deleted. This results in an a | |||
itional SA and the need to support an additional SPI. | dditional SA and the need to support an additional SPI. | |||
Similarly, the privacy concerns associated with the generation of non-random SPI s is also limited to the incoming traffic. </t> | Similarly, the privacy concerns associated with the generation of non-random SPI s is also limited to the incoming traffic. </t> | |||
<!--Alternate designs that take less resources than fully random SPI's are likel | ||||
y using a limited list of possible SPIs. | ||||
This limit should take into account the number of inbound SAs - possibly per IP | ||||
addresses - as well as the requirement for rekeying which would briefly require | ||||
2 inbound SPIs to co-exist as the new SA is setup before the old SA is torn down | ||||
. | ||||
<t> | <t> | |||
Alternatively, some constrained devices will not implement IKEv2 or Minimal IKEv | Alternatively, some constrained devices will not implement IKEv2 or minimal IKEv | |||
2 and as such will not be able to manage a roll-over between two distinct SAs. I | 2 and, as such, will not be able to manage a rollover between two distinct SAs. | |||
n addition, some of these constrained devices are also likely to have a limited | In addition, some of these constrained devices are likely to have a limited numb | |||
number of SAs - likely to be indexed over 3 bytes only for example. One possible | er of SAs; for example, they are likely to be indexed over 3 bytes only. One pos | |||
way to enable a rekey mechanism with these devices is to use the SPI where for | sible way to enable a rekeying mechanism with these devices is to use the SPI wh | |||
example the first 3 bytes designates the SA while the remaining byte indicates a | ere, for example, the first 3 bytes designates the SA while the remaining byte i | |||
rekey index. | ndicates a rekey index. | |||
SPI numbers can be used to implement tracking the inbound SAs when rekeying is t | SPI numbers can be used to implement tracking the inbound SAs when rekeying is t | |||
aking place. When rekeying a SPI, the new SPI could use the SPI bytes to indicat | aking place. When rekeying an SPI, the new SPI could use the SPI bytes to indica | |||
e the rekeying index. | te the rekeying index. | |||
</t> | </t> | |||
<t>The use of a small limited set of SPI numbers across communications comes wit | <t>The use of a small, limited set of SPI numbers across communications comes | |||
h privacy and security concerns. | with privacy and security concerns. Some specific values or subsets of SPI | |||
Some specific values or subset of SPI values could reveal the models or manufact | values could reveal the model or manufacturer of the node implementing ESP or | |||
urer of the node implementing ESP. It could also reveal some state such as "not | reveal a state such as "not yet rekeyed" or "rekeyed 10 times". If a | |||
yet rekeyed" or "rekeyed 10 times". | constrained host uses a very limited number of applications, eventually a | |||
If a constrained host uses a very limited or even just one application, the SPI | single one, the SPI itself could indicate what kind of traffic is transmitted | |||
itself could indicate what kind of traffic (eg the kind of application typically | (e.g., the kind of application typically running). This could also be | |||
running) is transmitted. This could be further correlated by encrypted data siz | correlated with encrypted data size to further leak information to an observer | |||
e to further leak information to an observer on the network. | on the network. In addition, use of specific hardcoded SPI numbers could | |||
In addition, use of specific hardcoded SPI numbers could reveal a manufacturer o | reveal a manufacturer or device version. If updated devices use different SPI | |||
r device version. If updated devices use different SPI numbers, an attacker coul | numbers, an attacker could locate vulnerable devices by their use of specific | |||
d locate vulnerable devices by their use of specific SPI numbers. | SPI numbers. | |||
</t> | </t> | |||
<t> | <t> | |||
A privacy analysis should consider at least the type of information as well the | A privacy analysis should consider at least the type of information as well as t | |||
traffic pattern before deciding whether non-random SPIs are safe to use. | he traffic pattern before deciding whether non-random SPIs are safe to use. | |||
Typically temperature sensors, wind sensors, used outdoors may not leak privacy | Typically, temperature and wind sensors that are used outdoors do not leak priva | |||
sensitive information and most of its traffic is expected to be outbound traffic | cy-sensitive information, and most of their traffic is expected to be outbound t | |||
. | raffic. | |||
When used indoors, a sensor that reports an encrypted status of a door (closed o | When used indoors, a sensor that reports an encrypted status of a door (closed o | |||
r opened) every minute, might not leak sensitive information outside the local n | r opened) every minute might not leak sensitive information outside the local ne | |||
etwork. | twork. | |||
In these examples, the privacy aspect of the information itself might be limited | In these examples, the privacy aspect of the information itself might be limited | |||
. Being able to determine the version of the sensor to potentially take control | . Being able to determine the version of the sensor to potentially take control | |||
of it may also have some limited security consequences. Of course this depends o | of it may also have some limited security consequences. Of course, this depends | |||
n the context these sensors are being used. If the risks associated to privacy a | on the context in which these sensors are being used. If the risks associated to | |||
nd security are acceptable, a non-randomized SPI can be used. | privacy and security are acceptable, a non-randomized SPI can be used. | |||
</t> | </t> | |||
</section> | ||||
</section> | ||||
<section anchor="sec-sn" numbered="true" toc="default"> | ||||
<name>Sequence Number (SN)</name> | ||||
<t> The Sequence Number (SN) in <xref target="RFC4303" format="default"/> | ||||
is a mandatory 32-bit field in the packet. </t> | ||||
<t> The SN is set by the sender so the receiver can implement anti-replay | ||||
protection. | ||||
The SN is derived from any strictly increasing function that guarantees the foll | ||||
owing: if packet B is sent after packet A, then the SN of packet B is higher tha | ||||
n the SN of packet A. </t> | ||||
<t>Some constrained devices may establish communication with specific devi | ||||
ces where it is known whether or not the peer implements anti-replay protection. | ||||
As per <xref target="RFC4303" format="default"/>, the sender <bcp14>MUST</bcp14> | ||||
still implement a strictly increasing function to generate the SN. </t> | ||||
</section> | <t> | |||
It is <bcp14>RECOMMENDED</bcp14> that multipurpose ESP implementations | ||||
</section> | increment a counter for each packet sent. However, a constrained device may | |||
avoid maintaining this context and use another source that is known to | ||||
<section anchor="sec-sn" title="Sequence Number(SN) (32 bit)"> | always increase. Typically, constrained devices use 802.15.4 Time Slotted | |||
Channel Hopping (TSCH). This communication is heavily dependent on time. A | ||||
<t> The Sequence Number (SN) in <xref target="RFC4303"/> is a mandatory 32 bits | constrained device can take advantage of this clock mechanism to generate | |||
field in the packet. </t> | the SN. A lot of IoT devices are in a sleep state most of the time and wake | |||
up only to perform a specific operation before going back to sleep. These | ||||
<t> The SN is set by the sender so the receiver can implement anti-replay protec | devices have separate hardware that allows them to wake up after a certain | |||
tion. | timeout and typically also have timers that start running when the device is | |||
The SN is derived from any strictly increasing function that guarantees: if pack | booted up, so they might have a concept of time with certain granularity. | |||
et B is sent after packet A, then SN of packet B is higher than the SN of packet | This requires devices to store any information in stable storage that can be | |||
A. </t> | restored across sleeps (e.g., flash memory). Storing information associated | |||
with the SA (such as the SN) requires some read and write operations on | ||||
<t>Some constrained devices may establish communication with specific devices wh | stable storage after each packet is sent as opposed to an SPI number or | |||
ere it is known whether or not the peer implements anti-replay protection. | cryptographic keys that are only written to stable storage at the creation | |||
As per <xref target="RFC4303"/>, the sender MUST still implement a strictly incr | of the SA. Write operations wear out the flash storage. Write operations | |||
easing function to generate the SN. </t> | also slow down the system significantly, as writing to flash is much slower | |||
than reading from flash. While these devices have internal clocks or timers | ||||
<t>The RECOMMENDED way for multipurpose ESP implementation is to increment a cou | that might not be very accurate, they are good enough to guarantee that each | |||
nter for each packet sent. | time the device wakes up from sleep, the time is greater than what it was | |||
However, a constrained device may avoid maintaining this context and use another | before the device went to sleep. Using time for the SN would guarantee a | |||
source that is known to always increase. | strictly increasing function and avoid storing any additional values or | |||
Typically, constrained devices use 802.15.4 Time Slotted Channel Hopping (TSCH). | context related to the SN on flash. In addition to the time value, a | |||
This communication is heavily dependent on time. | RAM-based counter can be used to ensure that the serial numbers are still | |||
A contrained device can take advantage of this clock mechanism to generate the S | increasing and unique if the device sends multiple packets over an SA within | |||
N. | one wakeup period. | |||
A lot of IoT devices are in a sleep state most of the time and wake up only to p | ||||
erform a specific operation before going back to sleep. | ||||
These devices do have separate hardware that allows them to wake up after a cert | ||||
ain timeout and typically also timers that start running when the device was boo | ||||
ted up, so they might have a concept of time with certain granularity. | ||||
This requires to store any information in a stable storage - such as flash memor | ||||
y - that can be restored across sleeps. | ||||
Storing information associated with the SA such as SN requires some read and wri | ||||
te operation on a stable storage after each packet is sent as opposed to a SPI n | ||||
umber or cryptographic keys that are only written to stable storage at the creat | ||||
ion of the SA. | ||||
Write operations wear out the flash storage. | ||||
Write operations also slow down the system significantly, as writing to flash is | ||||
much slower than reading from flash. | ||||
While these devices have internal clocks or timers that might not be very accura | ||||
te, these are good enough to guarantee that each time the device wakes up from s | ||||
leep that their time is greater than what it was before the device went to sleep | ||||
. | ||||
Using time for the SN would guarantee a strictly increasing function and avoid s | ||||
toring any additional values or context related to the SN on flash. | ||||
In addition to the time value, a RAM based counter can be used to ensure that if | ||||
the device sends multiple packets over an SA within one wake up period, that th | ||||
e serial numbers are still increasing and unique. | ||||
</t> | </t> | |||
<!-- | <t>For inbound traffic, it is <bcp14>RECOMMENDED</bcp14> that receivers | |||
implement anti-replay protection. The size of the window should depend on the | ||||
Note that standard receivers are generally configured with incrementing counters | network characteristic to deliver packets out of order. In an environment | |||
and, if not appropriately configured, the use of a significantly larger SN than | where out-of-order packets are not possible, the window size can be set to | |||
the previous packet can result in that packet falling outside of the peer's rec | one. An ESP implementation may choose to not implement anti-replay | |||
eiver window which could cause that packet to be discarded. </t> | protection. An implementation of anti-replay protection may require the | |||
device to write the received SN for every packet to stable storage. This will | ||||
As a result, using time based SN should only be used when it is known | have the same issues as discussed earlier with the SN. Some constrained | |||
that the remote peer supports this or when it is known that anti-replay | device implementations may choose to not implement the optional anti-replay | |||
windows are disabled.</t> | protection. A typical example is an IoT device such as a temperature sensor | |||
that sends a temperature measurement every 60 seconds and receives an | ||||
<t>For inbound traffic, it is RECOMMENDED that receivers implement anti-replay p | acknowledgment from the receiver. In a case like this, the ability to spoof | |||
rotection. | and replay an acknowledgement is of limited interest and might not justify the | |||
The size of the window should depend on the property of the network to deliver p | implementation of an anti-replay mechanism. Receiving peers may also use an | |||
ackets out of order. | ESP anti-replay mechanism adapted to a specific application. Typically, when | |||
In an environment where out of order packets are not possible, the window size c | the sending peer is using an SN based on time, anti-replay may be implemented | |||
an be set to one. | by discarding any packets that present an SN whose value is too much in the | |||
An ESP implementation may choose to not implement an anti-replay protection. | past. Such mechanisms may consider clock drifting in various ways in addition | |||
An implementation of anti-replay protection may require the device to write the | to acceptable delay induced by the network to avoid the anti-replay windows | |||
received SN for every packet to stable storage. | rejecting legitimate packets. Receiving peers could accept any SN as long as it | |||
This will have the same issues as discussed earlier with the SN. | is higher | |||
Some constrained device implementations may choose to not implement the optional | than the previously received SN. Another mechanism could be used where only | |||
anti-replay protection. | the received time on the device is used to consider a packet to be valid, | |||
A typical example might consider an IoT device such as a temperature sensor that | without looking at the SN at all. | |||
is sending a temperature measurement every 60 seconds, and that receives an ack | ||||
nowledgment from the receiver. | ||||
In such cases, the ability to spoof and replay an acknowledgement is of limited | ||||
interest and might not justify the implementation of an anti-replay mechanism. | ||||
Receiving peers may also use ESP anti-replay mechanism adapted to a specific app | ||||
lication. | ||||
Typically, when the sending peer is using SN based on time, anti-replay may be i | ||||
mplemented by discarding any packets that present a SN whose value is too much i | ||||
n the past. | ||||
Such mechanisms may consider clock drifting in various ways in addition to accep | ||||
table delay induced by the network to avoid the anti replay windows rejecting le | ||||
gitimate packets. | ||||
It could accept any SN as long as it is higher than the previously received SN. | ||||
Another mechanism could be used where only the received time on the device is us | ||||
ed to consider a packet as valid, without looking at the SN at all. | ||||
</t> | </t> | |||
<t>The SN can be represented as a 32 bit number, or as a 64 bit number, known as | <t>The SN can be represented as a 32-bit number or as a 64-bit number, kno | |||
Extended Sequence Number (ESN). | wn as an "Extended Sequence Number (ESN)". | |||
As per <xref target="RFC4303"/>, support of ESN is not mandatory and its use is | As per <xref target="RFC4303" format="default"/>, support of ESN is not mandator | |||
negotiated via IKEv2 <xref target="RFC7296"/>. | y, and its use is negotiated via IKEv2 <xref target="RFC7296" format="default"/> | |||
A ESN is used for high speed links to ensure there can be more than 2^32 packets | . | |||
before the SA needs to be rekeyed to prevent the SN from rolling over. | An ESN is used for high-speed links to ensure there can be more than 2<sup>32</s | |||
up> packets before the SA needs to be rekeyed to prevent the SN from rolling ove | ||||
r. | ||||
This assumes the SN is incremented by 1 for each packet. | This assumes the SN is incremented by 1 for each packet. | |||
When the SN is incremented differently - such as when time is used - rekeying ne | When the SN is incremented differently -- such as when time is used -- rekeying | |||
eds to happen based on how the SN is incremented to prevent the SN from rolling | needs to happen based on how the SN is incremented to prevent the SN from rollin | |||
over. | g over. | |||
The security of all data protected under a given key decreases slightly with eac | The security of all data protected under a given key decreases slightly with eac | |||
h message and a node must ensure the limit is not reached - even though the SN w | h message, and a node must ensure the limit is not reached, even though the SN w | |||
ould permit it. | ould permit it. | |||
Estimation of the maximum number of packets to be sent by a node is not always p | Estimation of the maximum number of packets to be sent by a node is not always p | |||
redicatable and large margins should be used espcially as nodes could be online | redictable, and large margins should be used, especially as nodes could be onlin | |||
for much more time than expected. | e for much more time than expected. | |||
Even for constrained devices, it is RECOMMENDED to implement some rekey mechanis | Even for constrained devices, it is <bcp14>RECOMMENDED</bcp14> to implement some | |||
ms (see <xref target="sec-security-considerations"/>). | rekeying mechanisms (see <xref target="sec-security-considerations" format="def | |||
ault"/>). | ||||
</t> | </t> | |||
</section> | ||||
</section> | <section anchor="sec-padding" numbered="true" toc="default"> | |||
<name>Padding</name> | ||||
<section anchor="sec-padding" title="Padding"> | <t> Padding is required to keep the 32-bit alignment of ESP. | |||
<t> Padding is required to keep the 32 bit alignment of ESP. | ||||
It is also required for some encryption transforms that need a specific block si ze of input, such as ENCR_AES_CBC. | It is also required for some encryption transforms that need a specific block si ze of input, such as ENCR_AES_CBC. | |||
ESP specifies padding in the Pad Length byte, followed by up to 255 bytes of pad ding. | ESP specifies padding in the Pad Length byte, followed by up to 255 bytes of pad ding. | |||
</t> | </t> | |||
<t> Checking the padding structure is not mandatory, so constrained device | ||||
<t> Checking the padding structure is not mandatory, so constrained devices may | s may omit these checks on received ESP packets. | |||
omit these checks on received ESP packets. | ||||
For outgoing ESP packets, padding must be applied as required by ESP. </t> | For outgoing ESP packets, padding must be applied as required by ESP. </t> | |||
<t> In some situation the padding bytes may take a fixed value. | <t> In some situations, the padding bytes may take a fixed value. | |||
This would typically be the case when the Data Payload is of fixed size. </t> | This would typically be the case when the Payload Data is of fixed size. </t> | |||
<t>ESP <xref target="RFC4303" format="default"/> additionally provides Tra | ||||
<t>ESP <xref target="RFC4303"/> additionally provides Traffic Flow Confidentiali | ffic Flow Confidentiality (TFC) as a way to perform padding to hide traffic char | |||
ty (TFC) as a way to perform padding to hide traffic characteristics. | acteristics. | |||
TFC is not mandatory and is negotiated with the SA management protocol, such as IKEv2. | TFC is not mandatory and is negotiated with the SA management protocol, such as IKEv2. | |||
TFC has been widely implemented but it is not widely deployed for ESP traffic. | TFC has been widely implemented, but it is not widely deployed for ESP traffic. | |||
It is NOT RECOMMENDED to implement TFC for a minimal ESP. </t> | It is <bcp14>NOT RECOMMENDED</bcp14> to implement TFC for minimal ESP. </t> | |||
<t>As a consequence, communication protection that relies on TFC would be more s | ||||
ensitive to traffic patterns without TFC. | ||||
This can leak application information as well as the manifacturor or model of th | ||||
e device used to a passive monitoring attacker. | ||||
Such information can be used, for example, by an attacker in case a vulnerabilit | ||||
y is known for the specific device or application. | ||||
In addition, some application use - such as health applications - could leak imp | ||||
ortant privacy oriented information.</t> | ||||
<t>Constrained devices that have limited battery lifetime may prefer to avoid se | <t>As a consequence, communication protection that relies on TFC would be more | |||
nding extra padding bytes. | sensitive to traffic patterns without TFC. This can leak application | |||
information as well as the manufacturer or model of the device used to a | ||||
passive monitoring attacker. Such information can be used, for example, by an | ||||
attacker if a vulnerability is known for the specific device or application. | ||||
In addition, some applications (such as health applications) could leak | ||||
important privacy-oriented information. | ||||
</t> | ||||
<t>Constrained devices that have a limited battery lifetime may prefer to | ||||
avoid sending extra padding bytes. | ||||
In most cases, the payload carried by these devices is quite small, and the stan dard padding mechanism can be used as an alternative to TFC. | In most cases, the payload carried by these devices is quite small, and the stan dard padding mechanism can be used as an alternative to TFC. | |||
Alternatively, any information leak based on the size - or presence - of the pac | Alternatively, any information leak based on the size -- or presence -- of the p | |||
ket can also be addressed at the application level, before the packet is encrypt | acket can also be addressed at the application level before the packet is encryp | |||
ed with ESP. | ted with ESP. | |||
If application packets vary between 1 to 30 bytes, the application could always | If application packets vary between 1 to 30 bytes, the application could always | |||
send 32 byte responses to ensure all traffic sent is of identical length. | send 32-byte responses to ensure all traffic sent is of identical length. | |||
To prevent leaking information that a sensor changed state, such as "temperature | To prevent leaking information that a sensor changed state, such as "temperature | |||
changed" or "door opened", an application could send this information at regula | changed" or "door opened", an application could send this information at regula | |||
r time interval, rather than when a specific event is happening, even if the sen | r time intervals, rather than when a specific event is happening, even if the se | |||
sor state did not change. | nsor state did not change. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="sec-nh" numbered="true" toc="default"> | ||||
<section anchor="sec-nh" title="Next Header (8 bit) and Dummy Packets"> | <name>Next Header and "Dummy" Packets</name> | |||
<t>ESP <xref target="RFC4303" format="default"/> defines the Next Header a | ||||
<t>ESP <xref target="RFC4303"/> defines the Next Header as a mandatory 8 bits fi | s a mandatory 8-bit field in the packet. | |||
eld in the packet. | The Next Header, only visible after decryption, specifies the data contained in | |||
The Next header, only visible after decryption, specifies the data contained in | the payload. | |||
the payload. | In addition, the Next Header may carry an indication on how to process the packe | |||
In addition, the Next Header may also carry an indication on how to process the | t <xref target="I-D.nikander-esp-beet-mode" format="default"/>. | |||
packet <xref target="I-D.nikander-esp-beet-mode"/>. | The Next Header can point to a "dummy" packet, i.e., a packet with the Next Head | |||
The Next Header can point to a dummy packet, i.e. packets with the Next Header v | er value set to 59, meaning "no next header". | |||
alue set to 59 meaning "no next header". | The data following "no next header" is unstructured "dummy" data. (Note that thi | |||
The data following to "no next header" is unstructured dummy data. | s document uses the term “dummy” for consistency with <xref target="RFC4303" for | |||
mat="default"/>.) | ||||
</t> | </t> | |||
<t>The ability to generate, receive, and ignore "dummy" packets is require | ||||
<t>The ability to generate and to receive and ignore dummy packets is required b | d by <xref target="RFC4303" format="default"/>. | |||
y <xref target="RFC4303"/>. | An implementation can omit ever generating and sending "dummy" packets. | |||
An implementation can omit ever generating and sending dummy packets. | For interoperability, a minimal ESP implementation <bcp14>MUST</bcp14> be able t | |||
For interoperability, a minimal ESP implementation MUST be able to process and d | o process and discard "dummy" packets without indicating an error. | |||
iscard dummy packets without indicating an error. | ||||
</t> | </t> | |||
<t> | ||||
In constrained environments, sending "dummy" packets may have too much impact on | ||||
the device lifetime, in which case, "dummy" packets should not be generated and | ||||
sent. | ||||
<t> | On the other hand, constrained devices running specific applications that would | |||
In constrained environments, sending dummy packets may have too much impact on t | leak too much information by not generating and sending "dummy" packets may impl | |||
he device lifetime, in which case dummy packets should not be generated and sent | ement this functionality or even implement something similar at the application | |||
. | layer. | |||
Note also that similarly to padding and TFC that can be used to hide some traffi | ||||
On the other hand, Constrained devices running specific applications that would | c characteristics (see <xref target="sec-padding" format="default"/>), "dummy" p | |||
leak too much information by not generating and sending dummy packets may implem | ackets may also reveal some patterns that can be used to identify the applicatio | |||
ent this functionality or even implement something similar at the application la | n. | |||
yer. | For example, an application may send "dummy" data to hide a traffic pattern. Sup | |||
Note also that similarly to padding and TFC that can be used to hide some traffi | pose such an application sends a 1-byte data when a change occurs. | |||
c characteristics (see <xref target="sec-padding"/>), dummy packet may also reve | ||||
al some patterns that can be used to identify the application. | ||||
For example, an application may send dummy data to hide some traffic pattern. Su | ||||
ppose such such application sends a 1 byte data when a change occurs. | ||||
This results in sending a packet notifying a change has occurred. | This results in sending a packet notifying a change has occurred. | |||
Dummy packet may be used to prevent such information to be leaked by sending a 1 | "Dummy" packets may be used to prevent such information from being leaked by sen | |||
byte packet every second when the information is not changed. | ding a 1-byte packet every second when the information is not changed. | |||
After an upgrade the data becomes two bytes. At that point, the dummy packets d | After an upgrade, the data becomes 2 bytes. At that point, the "dummy" packets | |||
o not hide anything and having 1 byte regularly versus 2 bytes make even the ide | do not hide anything, and having 1 byte regularly versus 2 bytes makes even the | |||
ntification of the application, version easier to identify. | identification of the application version easier to identify. | |||
This generaly makes the use of dummy packets more appropriated on high speed lin | This generally makes the use of "dummy" packets more appropriate on high-speed l | |||
ks. | inks. | |||
</t> | </t> | |||
<!-- | ||||
Constrained devices running specific applications that would leak too much infor | ||||
mation by not generating and sending dummy packets could implement this function | ||||
ality instead at the application layer. | ||||
<t> In some cases, devices are dedicated to a single application or a single tra | ||||
nsport protocol, in which case, the Next Header has a fixed value.</t> | ||||
<t>Specific processing indications have not been standardized yet <xref target=" | ||||
I-D.nikander-esp-beet-mode"/> and is expected to result from an agreement betwee | ||||
n the peers. | ||||
As a result, it SHOULD NOT be part of a minimal implementation of ESP. </t> | ||||
</section> | ||||
<section anchor="sec-icv" title="ICV"> | ||||
<t>The ICV depends on the cryptographic suite used. | <t> In some cases, devices are dedicated to a single application or a single tra | |||
As detailed in <xref target="RFC8221"/> authentication or authenticated encrypti | nsport protocol. In this case, the Next Header has a fixed value.</t> | |||
on are RECOMMENDED and as such the ICV field must be present with a size differe | <t>Specific processing indications have not been standardized yet <xref ta | |||
nt from zero. | rget="I-D.nikander-esp-beet-mode" format="default"/> and are expected to result | |||
from an agreement between the peers. | ||||
As a result, they <bcp14>SHOULD NOT</bcp14> be part of a minimal implementation | ||||
of ESP. </t> | ||||
</section> | ||||
<section anchor="sec-icv" numbered="true" toc="default"> | ||||
<name>ICV</name> | ||||
<t>The ICV depends on the cryptographic suite used. | ||||
As detailed in <xref target="RFC8221" format="default"/>, authentication or auth | ||||
enticated encryption is <bcp14>RECOMMENDED</bcp14>, and as such, the ICV field m | ||||
ust be present with a size different from zero. | ||||
Its length is defined by the security recommendations only. </t> | Its length is defined by the security recommendations only. </t> | |||
</section> | ||||
</section> | <section anchor="sec-encr" numbered="true" toc="default"> | |||
<name>Cryptographic Suites</name> | ||||
<section anchor="sec-encr" title="Cryptographic Suites"> | <t> The recommended algorithms to use are expected to evolve over time, an | |||
d implementers <bcp14>SHOULD</bcp14> follow the recommendations provided by <xre | ||||
<t> The recommended algorithms to use are expected to evolve over time and imple | f target="RFC8221" format="default"/> and updates. | |||
menters SHOULD follow the recommendations provided by <xref target="RFC8221"/> a | ||||
nd updates. | ||||
</t> | ||||
<t> This section lists some of the criteria that may be considered to select an | ||||
appropriate cryptographic suite. | ||||
The list is not expected to be exhaustive and may also evolve over time: </t> | ||||
<t><list style="numbers"> | ||||
<t> Security: Security is the criteria that should be considered first for the s | ||||
election of encryption algorithm transform. | ||||
The security of encryption algorithm transforms is expected to evolve over time, | ||||
and it is of primary importance to follow up-to-date security guidance and reco | ||||
mmendations. | ||||
The chosen encryption algorithm MUST NOT be vulnerable or weak (see <xref target | ||||
="RFC8221"/> for outdated ciphers). | ||||
ESP can be used to authenticate only (ENCR_NULL) or to encrypt the communication | ||||
. | ||||
In the latter case, authenticated encryption (AEAD) is RECOMMENDED <xref target= | ||||
"RFC8221"/>.</t> | ||||
<t>Resilience to nonce re-use: Some transforms -including AES-GCM - are vulnerab | ||||
le to nonce collision with a given key. | ||||
While the generation of the nonce may prevent such collision during a session, t | ||||
he mechanisms are unlikely to provide such protection across sleep states or reb | ||||
oot. | ||||
This causes an issue for devices that are configured using static keys (called m | ||||
anual keying) and manual keying should not be used with these encryption algorit | ||||
hms. | ||||
When the key is likely to be re-used across reboots, algorithms that are nonce m | ||||
isuse resistant such as, for example, AES-SIV <xref target="RFC5297"/>, AES-GCM- | ||||
SIV <xref target="RFC8452"/> or Deoxys-II <xref target="DeoxysII"/> are RECOMMEN | ||||
DED. | ||||
Note however that currently none of these are yet defined for use with ESP. | ||||
</t> | ||||
<t> Interoperability: constrained devices usually only implement one or very few | ||||
different encryption algorithm transforms. | ||||
<xref target="RFC8221"/> takes the life cycle of encryption algorithm transforms | ||||
and device manufactoring into consideration in its recommendations for mandator | ||||
y-to-implement ("MTI") algorithms. | ||||
</t> | </t> | |||
<t> This section lists some of the criteria that may be considered to sele | ||||
ct an appropriate cryptographic suite. | ||||
The list is not expected to be exhaustive and may also evolve over time. </t> | ||||
<ol spacing="normal" type="1"> | ||||
<t> Power Consumption and Cipher Suite Complexity: Complexity of the encryption | <li>Security: Security is the criteria that should be considered first | |||
algorithm transform and the energy cost associated with it are especially import | for the selection of encryption algorithm transforms. The security of | |||
ant considerations for devices that have limited resources or are battery powere | encryption algorithm transforms is expected to evolve over time, and | |||
d. | it is of primary importance to follow up-to-date security guidance and | |||
The battery life might determine the lifetime of the entire device. | recommendations. The chosen encryption algorithm <bcp14>MUST | |||
The choice of a cryptographic function should consider re-using specific librari | NOT</bcp14> be vulnerable or weak (see <xref target="RFC8221" | |||
es or to take advantage of hardware acceleration provided by the device. | format="default"/> for outdated ciphers). ESP can be used to | |||
For example, if the device benefits from AES hardware modules and uses ENCR_AES_ | authenticate only (ENCR_NULL) or to encrypt the communication. In the | |||
CTR, it may prefer AUTH_AES-XCBC for its authentication. | latter case, Authenticated Encryption with Associated Data (AEAD) is | |||
In addition, some devices may also embed radio modules with hardware acceleratio | <bcp14>RECOMMENDED</bcp14> <xref target="RFC8221" | |||
n for AES-CCM, in which case, this transform may be preferred.</t> | format="default"/>.</li> | |||
<t> Power Consumption and Bandwidth Consumption: Reducing the payload sent may s | ||||
ignificantly reduce the energy consumption of the device. | ||||
Encryption algorithm transforms with low overhead are strongly preferred. | ||||
To reduce the overall payload size one may, for example: | ||||
<list style="numbers"> | ||||
<t> Use of counter-based ciphers without fixed block length (e.g. AES-CTR, or Ch | ||||
aCha20-Poly1305).</t> | ||||
<t>Use of ciphers with capability of using implicit IVs <xref target="RFC8750"/> | ||||
.</t> | ||||
<t>Use of ciphers recommended for IoT <xref target="RFC8221"/>.</t> | ||||
<t> Avoid Padding by sending payload data which are aligned to the cipher block | ||||
length - 2 for the ESP trailer.</t> | ||||
</list></t> | ||||
</list></t> | ||||
</section> | ||||
<section title="IANA Considerations"> | ||||
<t>There are no IANA consideration for this document.</t> | ||||
</section> | ||||
<section anchor="sec-security-considerations" title="Security Considerations"> | ||||
<t> Security Considerations are those of <xref target="RFC4303"/>. | <li>Resilience to Nonce Reuse: Some transforms, including AES-GCM, | |||
In addition, this document provided security recommendations and guidance over t | are vulnerable to nonce collision with a given key. While the | |||
he implementation choices for each ESP field. </t> | generation of the nonce may prevent such collision during a session, | |||
the mechanisms are unlikely to provide such protection across sleep | ||||
states or reboot. This causes an issue for devices that are | ||||
configured using static keys (called "manual keying"), and manual keying | ||||
should not be used with these encryption algorithms. When the key is | ||||
likely to be reused across reboots, algorithms that are resistant to non | ||||
ce misuse | ||||
(for example, AES-SIV <xref target="RFC5297" | ||||
format="default"/>, AES-GCM-SIV <xref target="RFC8452" | ||||
format="default"/>, and Deoxys-II <xref target="DeoxysII" | ||||
format="default"/>) are <bcp14>RECOMMENDED</bcp14>. Note, however, | ||||
that none of these are currently defined for use with | ||||
ESP.</li> | ||||
<li>Interoperability: Constrained devices usually only implement one | ||||
or very few different encryption algorithm transforms. <xref | ||||
target="RFC8221" format="default"/> takes the life cycle of encryption | ||||
algorithm transforms and device manufacturing into consideration in | ||||
its recommendations for mandatory-to-implement (MTI) | ||||
algorithms.</li> | ||||
<t>The security of a communication provided by ESP is closely related to the sec | <li>Power Consumption and Cipher Suite Complexity: Complexity of the | |||
urity associated with the management of that key. | encryption algorithm transform and the energy cost associated with it | |||
are especially important considerations for devices that have limited | ||||
resources or are battery powered. The battery life might determine | ||||
the lifetime of the entire device. When choosing a cryptographic | ||||
function, reusing specific libraries or taking | ||||
advantage of hardware acceleration provided by the device should be cons | ||||
idered. For | ||||
example, if the device benefits from AES hardware modules and uses | ||||
ENCR_AES_CTR, it may prefer AUTH_AES-XCBC for its authentication. In | ||||
addition, some devices may embed radio modules with hardware | ||||
acceleration for AES-CCM, in which case, this transform may be | ||||
preferred.</li> | ||||
<li><t>Power Consumption and Bandwidth Consumption: Reducing the | ||||
payload sent may significantly reduce the energy consumption of the | ||||
device. Encryption algorithm transforms with low overhead are | ||||
strongly preferred. To reduce the overall payload size, one may, for | ||||
example:</t> | ||||
<ul spacing="normal"> | ||||
<li>Use counter-based ciphers without fixed block length | ||||
(e.g., AES-CTR or ChaCha20-Poly1305).</li> | ||||
<li>Use ciphers capable of using implicit | ||||
Initialization Vectors (IVs) <xref target="RFC8750" | ||||
format="default"/>.</li> | ||||
<li>Use ciphers recommended for IoT <xref target="RFC8221" | ||||
format="default"/>.</li> | ||||
<li> Avoid padding by sending payload data that are | ||||
aligned to the cipher block length -- 2 bytes for the ESP trailer.</ | ||||
li> | ||||
</ul> | ||||
</li> | ||||
</ol> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>IANA Considerations</name> | ||||
<t>This document has no IANA actions.</t> | ||||
</section> | ||||
<section anchor="sec-security-considerations" numbered="true" toc="default"> | ||||
<name>Security Considerations</name> | ||||
<t> The security considerations in <xref target="RFC4303" format="default" | ||||
/> apply to this document as well. | ||||
In addition, this document provides security recommendations and guidance for th | ||||
e implementation choices for each ESP field. </t> | ||||
<t>The security of a communication provided by ESP is closely related to t | ||||
he security associated with the management of that key. | ||||
This usually includes mechanisms to prevent a nonce from repeating, for example. | This usually includes mechanisms to prevent a nonce from repeating, for example. | |||
When a node is provisioned with a session key that is used across reboot, the im plementer MUST ensure that the mechanisms put in place remain valid across reboo t as well. | When a node is provisioned with a session key that is used across reboot, the im plementer <bcp14>MUST</bcp14> ensure that the mechanisms put in place remain val id across reboot as well. | |||
</t> | </t> | |||
<t>It is <bcp14>RECOMMENDED</bcp14> to use ESP in conjunction with key man | ||||
agement protocols such as, for example, IKEv2 <xref target="RFC7296" format="def | ||||
ault"/> or minimal IKEv2 <xref target="RFC7815" format="default"/>. | ||||
Such mechanisms are responsible for negotiating fresh session keys as well as pr | ||||
eventing a session key being used beyond its lifetime. | ||||
<t>It is RECOMMENDED to use ESP in conjunction with key management protocols suc | When such mechanisms cannot be implemented, such as when the session key is prov | |||
h as for example IKEv2 <xref target="RFC7296"/> or minimal IKEv2 <xref target="R | isioned, the device <bcp14>MUST</bcp14> ensure that keys are not used beyond the | |||
FC7815"/>. | ir lifetime and that the key remains used in compliance with all security requir | |||
Such mechanisms are responsible for negotiating fresh session keys as well as pr | ements across reboots (e.g., conditions on counters and nonces remain valid). | |||
event a session key being use beyond its lifetime. | ||||
When such mechanisms cannot be implemented, such as when the the session key is | ||||
provisioned, the device MUST ensure that keys are not used beyond their lifetime | ||||
and that the the key remains used in compliance will all security requirements | ||||
across reboots - e.g. conditions on counters and nonces remains valid. | ||||
</t> | </t> | |||
<t>When a device generates its own key or when random values such as nonce | ||||
<t>When a device generates its own key or when random value such as nonces are g | s are generated, the random generation <bcp14>MUST</bcp14> follow <xref target=" | |||
enerated, the random generation MUST follow <xref target="RFC4086"/>. | RFC4086" format="default"/>. | |||
In addition, <xref target="SP-800-90A-Rev-1"/> provides guidance on how to build | In addition, <xref target="SP-800-90A-Rev-1" format="default"/> provides guidanc | |||
random generators based on deterministic random functions. | e on how to build random generators based on deterministic random functions. | |||
</t> | </t> | |||
</section> | ||||
</section> | <section anchor="sec-privacy-considerations" numbered="true" toc="default"> | |||
<name>Privacy Considerations</name> | ||||
<section anchor="sec-privacy-considerations" title="Privacy Considerations"> | <t>Preventing the leakage of privacy-sensitive information is a hard probl | |||
em to solve and usually results in balancing the information potentially being l | ||||
<t>Preventing the leakage of privacy sensitive information is a hard problem to | eaked to the cost associated with the counter measures. | |||
solve and usually result in balancing the information potentially being leaked t | ||||
o the cost associated with the counter measures. | ||||
This problem is not inherent to the minimal ESP described in this document and a lso concerns the use of ESP in general. </t> | This problem is not inherent to the minimal ESP described in this document and a lso concerns the use of ESP in general. </t> | |||
<t>This document targets minimal implementations of ESP and, as such, desc | ||||
ribes a minimalistic way to implement ESP. | ||||
In some cases, this may result in potentially revealing privacy-sensitive pieces | ||||
of information. | ||||
This document describes these privacy implications so the implementer can make t | ||||
he appropriate decisions given the specificities of a given environment and depl | ||||
oyment. </t> | ||||
<t>The main risk associated with privacy is the ability to identify an app | ||||
lication or a device by analyzing the traffic, which is designated as "traffic s | ||||
haping". | ||||
As discussed in <xref target="sec-spi" format="default"/>, the use in a very spe | ||||
cific context of non-randomly generated SPIs might ease the determination of the | ||||
device or the application in some cases. | ||||
Similarly, padding provides limited capabilities to obfuscate the traffic compar | ||||
ed to those provided by TFC. Such consequences on privacy are detailed in <xref | ||||
target="sec-padding" format="default"/>. </t> | ||||
</section> | ||||
</middle> | ||||
<back> | ||||
<t>This document targets minimal implementations of ESP and as such describes so | <displayreference target="I-D.mglt-ipsecme-diet-esp" to="EHC-DIET-ESP"/> | |||
me minimalistic way to implement ESP. | <displayreference target="I-D.mglt-ipsecme-ikev2-diet-esp-extension" to="EHC-IKE | |||
In some cases, this may result in potentially revealing privacy sensitive pieces | v2"/> | |||
of information. | <displayreference target="I-D.nikander-esp-beet-mode" to="BEET-ESP"/> | |||
This document describes these privacy implications so the implementer can take t | ||||
he appropriate decisions given the specificities of a given environment and depl | ||||
oyment. </t> | ||||
<t>The main risks associated with privacy is the ability to identify an applicat | ||||
ion or a device by analyzing the traffic which is designated as traffic shaping. | ||||
As discussed in <xref target="sec-spi"/>, the use in some very specific context | ||||
of non randomly generated SPI might in some cases ease the determination of the | ||||
device or the application. | ||||
Similarly, padding provides limited capabilities to obfuscate the traffic compar | ||||
ed to those provided by TFC. Such consequence on privacy as detailed in <xref ta | ||||
rget="sec-padding"/>. </t> | ||||
</section> | ||||
<section title="Acknowledgment"> | ||||
<t> The authors would like to thank Daniel Palomares, Scott Fluhrer, Tero Kivine | <references> | |||
n, Valery Smyslov, Yoav Nir, Michael Richardson, Thomas Peyrin, Eric Thormarker, | <name>References</name> | |||
Nancy Cam-Winget and Bob Briscoe for their valuable comments. | <references> | |||
In particular Scott Fluhrer suggested including the rekey index in the SPI. | <name>Normative References</name> | |||
Tero Kivinen also provided multiple clarifications and examples of deployment ES | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2 | |||
P within constrained devices with their associated optimizations. | 119.xml"/> | |||
Thomas Peyrin Eric Thormarker and Scott Fluhrer suggested and clarified the use | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4 | |||
of transform resilient to nonce misuse. | 086.xml"/> | |||
</t> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4 | |||
301.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4 | ||||
303.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | ||||
296.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | ||||
815.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
174.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
221.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
750.xml"/> | ||||
</references> | ||||
<references> | ||||
<name>Informative References</name> | ||||
</section> | <!-- [draft-nikander-esp-beet-mode] IESG state Expired. --> | |||
</middle> | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-nikande r-esp-beet-mode.xml"/> | |||
<back> | <!-- [draft-mglt-ipsecme-diet-esp] IESG state I-D Exists. --> | |||
<references title="Normative References"> | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-mglt-ip secme-diet-esp.xml"/> | |||
<?rfc include="reference.RFC.2119.xml"?> | <!-- [draft-mglt-ipsecme-ikev2-diet-esp-extension] IESG state I-D Exists. --> | |||
<!--<?rfc include="reference.RFC.3602.xml"?>--> | ||||
<!--<?rfc include="reference.RFC.3686.xml"?>--> | ||||
<!--<?rfc include="reference.RFC.4106.xml"?>--> | ||||
<?rfc include="reference.RFC.4086.xml"?> | ||||
<?rfc include="reference.RFC.4301.xml"?> | ||||
<?rfc include="reference.RFC.4303.xml"?> | ||||
<!--<?rfc include="reference.RFC.4309.xml"?>--> | ||||
<?rfc include="reference.RFC.7296.xml"?> | ||||
<?rfc include="reference.RFC.7815.xml"?> | ||||
<?rfc include="reference.RFC.8174.xml"?> | ||||
<?rfc include="reference.RFC.8221.xml"?> | ||||
<!--<?rfc include="reference.RFC.8247.xml"?>--> | ||||
<?rfc include="reference.RFC.8750.xml"?> | ||||
</references> | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-mglt-ip secme-ikev2-diet-esp-extension.xml"/> | |||
<references title="Informative References"> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | |||
452.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5 | ||||
297.xml"/> | ||||
<?rfc include="reference.I-D.nikander-esp-beet-mode.xml"?> | <reference anchor="SP-800-90A-Rev-1" target="https://csrc.nist.gov/publi | |||
<?rfc include="reference.I-D.mglt-ipsecme-diet-esp.xml"?> | cations/detail/sp/800-90a/rev-1/final"> | |||
<?rfc include="reference.I-D.mglt-ipsecme-ikev2-diet-esp-extension.xml"?> | <front> | |||
<?rfc include="reference.RFC.8452.xml"?> | <title>Recommendation for Random Number Generation Using Determinist | |||
<?rfc include="reference.RFC.5297.xml"?> | ic Random Bit Generators</title> | |||
<reference anchor="SP-800-90A-Rev-1" target="https://csrc.nist.gov/publications/ | <author initials="E." surname="Barker" fullname="Elaine Barker"> | |||
detail/sp/800-90a/rev-1/final"> | <organization>NIST</organization> | |||
<front> | ||||
<title>Recommendation for Random Number Generation Using Deterministic Rando | ||||
m Bit Generators</title> | ||||
<author initials="E. B." surname="Elain" fullname="Elaine Barker"> | ||||
<organization >NIST</organization> | ||||
</author> | </author> | |||
<author initials="J. K." surname="Kelsey" fullname="John Kelsey"> | <author initials="J." surname="Kelsey" fullname="John Kelsey"> | |||
<organization >NIST</organization> | <organization>NIST</organization> | |||
</author> | </author> | |||
<date month="" year="" /> | <date month="June" year="2015"/> | |||
</front> | ||||
</front> | <seriesInfo name="NIST SP" value="800-90A Rev 1"/> | |||
</reference> | <seriesInfo name="DOI" value="10.6028/NIST.SP.800-90Ar1"/> | |||
</reference> | ||||
<reference anchor="DeoxysII" target="https://competitions.cr.yp.to/round3/deoxys | <reference anchor="DeoxysII" target="https://competitions.cr.yp.to/round | |||
v141.pdf"> | 3/deoxysv141.pdf"> | |||
<front> | <front> | |||
<title>Deoxys v1.41</title> | <title>Deoxys v1.41</title> | |||
<author initials="J. J." surname="Jeremy" fullname="Jeremy Jean"> | <author initials="J." surname="Jean" fullname="Jérémy Jean"> | |||
<organization >Nanyang Technological University, Singapore</orga | <organization>ANSSI, Paris, France `&' Nanyang Technological U | |||
nization> | niversity, Singapore</organization> | |||
</author> | </author> | |||
<author initials="I. N." surname="Ivica" fullname="Ivica Nikolic"> | <author initials="I." surname="Nikolić" fullname="Ivica Nikolić"> | |||
<organization >Nanyang Technological University, Singapore</orga | <organization>Nanyang Technological University, Singapore</organiz | |||
nization> | ation> | |||
</author> | </author> | |||
<author initials="T. P." surname="Thomas" fullname="Thomas Peyrin"> | <author initials="T." surname="Peyrin" fullname="Thomas Peyrin"> | |||
<organization >Nanyang Technological University, Singapore</orga | <organization>Nanyang Technological University, Singapore</organiz | |||
nization> | ation> | |||
</author> | </author> | |||
<author initials="Y. S." surname="Yannick" fullname="Yannick Seurin"> | <author initials="Y." surname="Seurin" fullname="Yannick Seurin"> | |||
<organization >ANSSI, Paris, France</organization> | <organization>ANSSI, Paris, France</organization> | |||
</author> | </author> | |||
<date month="October" year="2016"/> | ||||
<date month="October" year="2016" /> | </front> | |||
</front> | </reference> | |||
</references> | ||||
</reference> | </references> | |||
<section numbered="false" toc="default"> | ||||
</references> | <name>Acknowledgments</name> | |||
<t>The authors would like to thank <contact fullname="Daniel | ||||
Palomares"/>, <contact fullname="Scott Fluhrer"/>, <contact | ||||
fullname="Tero Kivinen"/>, <contact fullname="Valery Smyslov"/>, | ||||
<contact fullname="Yoav Nir"/>, <contact fullname="Michael | ||||
Richardson"/>, <contact fullname="Thomas Peyrin"/>, <contact | ||||
fullname="Eric Thormarker"/>, <contact fullname="Nancy Cam-Winget"/>, and | ||||
<contact fullname="Bob Briscoe"/> for their valuable comments. In | ||||
particular, <contact fullname="Scott Fluhrer"/> suggested including the | ||||
rekey index in the SPI. <contact fullname="Tero Kivinen"/> also | ||||
provided multiple clarifications and examples of ESP deployment within | ||||
constrained devices with their associated optimizations. | ||||
<contact fullname="Thomas Peyrin"/>, <contact fullname="Eric Thormarker"/>, and | ||||
<contact fullname="Scott Fluhrer"/> suggested and clarified the use of | ||||
transform resilient to nonce misuse. The authors would also like to thank <conta | ||||
ct fullname="Mohit Sethi"/> for his support as the LWIG Working Group Chair. | ||||
</t> | ||||
</section> | ||||
</back> | </back> | |||
</rfc> | </rfc> | |||
End of changes. 74 change blocks. | ||||
597 lines changed or deleted | 568 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |