| rfc8968xml2.original.xml | rfc8968.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="US-ASCII"?> | <?xml version='1.0' encoding='UTF-8'?> | |||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | ||||
| <!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .2119.xml"> | ||||
| <!ENTITY RFC6347 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .6347.xml"> | ||||
| <!ENTITY RFC7250 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .7250.xml"> | ||||
| <!ENTITY RFC7918 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .7918.xml"> | ||||
| <!ENTITY RFC7924 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .7924.xml"> | ||||
| <!ENTITY RFC8094 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .8094.xml"> | ||||
| <!ENTITY RFC8174 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .8174.xml"> | ||||
| ]> | ||||
| <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | ||||
| <?rfc toc="yes"?> | ||||
| <?rfc tocdepth="2"?> | ||||
| <?rfc symrefs="yes"?> | ||||
| <?rfc sortrefs="yes" ?> | ||||
| <?rfc compact="no" ?> | ||||
| <rfc category="std" | ||||
| obsoletes="" | ||||
| docName="draft-ietf-babel-dtls-10" | ||||
| ipr="trust200902"> | ||||
| <front> | ||||
| <title abbrev="Babel over DTLS">Babel Routing Protocol over Datagram | ||||
| Transport Layer Security</title> | ||||
| <author fullname="Antonin Decimo" initials="A." surname="Decimo"> | ||||
| <organization>IRIF, University of Paris-Diderot</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street></street> | ||||
| <city>Paris</city> | ||||
| <region></region> | ||||
| <code></code> | ||||
| <country>France</country> | ||||
| </postal> | ||||
| <email>antonin.decimo@gmail.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname='David Schinazi' surname='Schinazi' initials='D.'> | ||||
| <organization>Google LLC</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>1600 Amphitheatre Parkway</street> | ||||
| <city>Mountain View</city> | ||||
| <region>California</region> | ||||
| <code>94043</code> | ||||
| <country>USA</country> | ||||
| </postal> | ||||
| <email>dschinazi.ietf@gmail.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Juliusz Chroboczek" initials="J." surname="Chroboczek"> | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
| <organization>IRIF, University of Paris-Diderot</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>Case 7014</street> | ||||
| <city>75205 Paris Cedex 13</city> | ||||
| <region></region> | ||||
| <code></code> | ||||
| <country>France</country> | ||||
| </postal> | ||||
| <email>jch@irif.fr</email> | ||||
| </address> | ||||
| </author> | ||||
| <date/> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" | |||
| category="std" | ||||
| obsoletes="" | ||||
| number="8968" | ||||
| docName="draft-ietf-babel-dtls-10" | ||||
| ipr="trust200902" | ||||
| updates="" | ||||
| submissionType="IETF" | ||||
| consensus="true" | ||||
| xml:lang="en" | ||||
| tocInclude="true" | ||||
| tocDepth="2" | ||||
| symRefs="true" | ||||
| sortRefs="true" | ||||
| version="3"> | ||||
| <!-- xml2rfc v2v3 conversion 3.0.0 --> | ||||
| <front> | ||||
| <title abbrev="Babel over DTLS">Babel Routing Protocol over Datagram | ||||
| Transport Layer Security</title> | ||||
| <seriesInfo name="RFC" value="8968"/> | ||||
| <author fullname="Antonin Décimo" initials="A." surname="Décimo"> | ||||
| <organization>IRIF, University of Paris-Diderot</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <city>Paris</city> | ||||
| <country>France</country> | ||||
| </postal> | ||||
| <email>antonin.decimo@gmail.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="David Schinazi" surname="Schinazi" initials="D."> | ||||
| <organization>Google LLC</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>1600 Amphitheatre Parkway</street> | ||||
| <city>Mountain View</city> | ||||
| <region>CA</region> | ||||
| <code>94043</code> | ||||
| <country>United States of America</country> | ||||
| </postal> | ||||
| <email>dschinazi.ietf@gmail.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Juliusz Chroboczek" initials="J." surname="Chroboczek"> | ||||
| <organization>IRIF, University of Paris-Diderot</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>Case 7014</street> | ||||
| <city>Paris CEDEX 13</city> | ||||
| <code>75205</code> | ||||
| <country>France</country> | ||||
| </postal> | ||||
| <email>jch@irif.fr</email> | ||||
| </address> | ||||
| </author> | ||||
| <date month="January" year="2021"/> | ||||
| <abstract> | <abstract> | |||
| <t>The Babel Routing Protocol does not contain any means to authenticate | <t>The Babel Routing Protocol does not contain any means to authenticate | |||
| neighbours or provide integrity or confidentiality for messages sent between | neighbours or provide integrity or confidentiality for messages sent between | |||
| them. This document specifies a mechanism to ensure these properties, using | them. This document specifies a mechanism to ensure these properties using | |||
| Datagram Transport Layer Security (DTLS).</t> | Datagram Transport Layer Security (DTLS).</t> | |||
| </abstract> | </abstract> | |||
| </front> | ||||
| </front> | <middle> | |||
| <section numbered="true" toc="default"> | ||||
| <middle> | <name>Introduction</name> | |||
| <t>The Babel routing protocol <xref target="RFC8966" format="default"/> do | ||||
| <section title="Introduction"> | es not contain | |||
| <t>The Babel Routing Protocol <xref target="RFC6126bis"/> does not contain | ||||
| any means to authenticate neighbours or protect messages sent between them. | any means to authenticate neighbours or protect messages sent between them. | |||
| Because of this, an attacker is able to send maliciously crafted Babel | Because of this, an attacker is able to send maliciously crafted Babel | |||
| messages which could lead a network to route traffic to an attacker or | messages that could lead a network to route traffic to an attacker or | |||
| to an under-resourced target causing denial of service. | to an under-resourced target, causing denial of service. | |||
| This document specifies a mechanism to prevent such attacks, using | This document specifies a mechanism to prevent such attacks using | |||
| Datagram Transport Layer Security (DTLS) <xref target="RFC6347"/>.</t> | Datagram Transport Layer Security (DTLS) <xref target="RFC6347" format="default" | |||
| />.</t> | ||||
| <section title="Specification of Requirements"> | <section numbered="true" toc="default"> | |||
| <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | ||||
| "OPTIONAL" 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 title="Applicability"> | <name>Specification of Requirements</name> | |||
| <t> | ||||
| The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | ||||
| "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | ||||
| 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> | ||||
| <t>The protocol described in this document protects Babel packets with | <section numbered="true" toc="default"> | |||
| <name>Applicability</name> | ||||
| <t>The protocol described in this document protects Babel packets with | ||||
| DTLS. As such, it inherits the features offered by DTLS, notably | DTLS. As such, it inherits the features offered by DTLS, notably | |||
| authentication, integrity, optional replay protection, confidentiality and | authentication, integrity, optional replay protection, confidentiality, and | |||
| asymmetric keying. It is therefore expected to be applicable in a wide | asymmetric keying. It is therefore expected to be applicable in a wide | |||
| range of environments.</t> | range of environments.</t> | |||
| <t>There exists another mechanism for securing Babel, namely Message Aut | ||||
| <t>There exists another mechanism for securing Babel, namely Babel HMAC | hentication Code (MAC) | |||
| authentication <xref target="BABEL-HMAC"/>. HMAC only offers basic | authentication for Babel (Babel-MAC) <xref target="RFC8967" format="default"/>. | |||
| features, namely authentication, integrity and replay protection with | Babel-MAC only offers basic | |||
| features, namely authentication, integrity, and replay protection with | ||||
| a small number of symmetric keys. A comparison of Babel security mechanisms | a small number of symmetric keys. A comparison of Babel security mechanisms | |||
| and their applicability can be found in <xref target="RFC6126bis"/>.</t> | and their applicability can be found in <xref target="RFC8966" format="default"/ | |||
| >.</t> | ||||
| <t>Note that Babel over DTLS provides a single authentication domain, meaning | <t>Note that Babel over DTLS provides a single authentication domain, me | |||
| aning | ||||
| that all nodes that have the right credentials can convey any and all routing | that all nodes that have the right credentials can convey any and all routing | |||
| information.</t> | information.</t> | |||
| <t>DTLS supports several mechanisms by which nodes can identify themselv | ||||
| <t>DTLS supports several mechanisms by which nodes can identify themselves | es | |||
| and prove possession of secrets tied to these identities. This document | and prove possession of secrets tied to these identities. This document | |||
| does not prescribe which of these mechanisms to use; details of identity | does not prescribe which of these mechanisms to use; details of identity | |||
| management are left to deployment profiles of Babel over DTLS.</t> | management are left to deployment profiles of Babel over DTLS.</t> | |||
| </section> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| </section> | <name>Operation of the Protocol</name> | |||
| <t>Babel over DTLS requires some changes to how Babel operates. | ||||
| <section title="Operation of the Protocol"> | ||||
| <t>Babel over DTLS requires some changes to how Babel operates. | ||||
| First, DTLS is a client-server protocol, while Babel is a peer-to-peer | First, DTLS is a client-server protocol, while Babel is a peer-to-peer | |||
| protocol. Second, DTLS can only protect unicast communication, while | protocol. Second, DTLS can only protect unicast communication, while | |||
| Babel packets can be sent to both unicast and multicast destinations.</t> | Babel packets can be sent to both unicast and multicast destinations.</t> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="DTLS Connection Initiation"> | <name>DTLS Connection Initiation</name> | |||
| <t>Babel over DTLS operates on a different port than unencrypted Babel. | ||||
| <t>Babel over DTLS operates on a different port than unencrypted Babel. | All Babel over DTLS nodes <bcp14>MUST</bcp14> act as DTLS servers on a given UDP | |||
| All Babel over DTLS nodes MUST act as DTLS servers on a given UDP port, | port | |||
| and MUST listen for unencrypted Babel traffic on another UDP port, which | and <bcp14>MUST</bcp14> listen for unencrypted Babel traffic on another UDP port | |||
| MUST be distinct from the first one. The default port for Babel over DTLS is | , which | |||
| registered with IANA as the "babel-dtls" port (UDP port TBD, see | <bcp14>MUST</bcp14> be distinct from the first one. The default port for Babel | |||
| <xref target="iana_considerations"/>), and the port exchanging unencrypted | over DTLS is | |||
| registered with IANA as the "babel-dtls" port (UDP port 6699, see | ||||
| <xref target="iana_considerations" format="default"/>), and the port exchanging | ||||
| unencrypted | ||||
| Babel traffic is registered as the "babel" port (UDP port 6696, | Babel traffic is registered as the "babel" port (UDP port 6696, | |||
| see Section 5 of <xref target="RFC6126bis"/>).</t> | see <xref target="RFC8966" sectionFormat="of" section="5"/>).</t> | |||
| <t>When a Babel node discovers a new neighbour (generally by | ||||
| <t>When a Babel node discovers a new neighbour (generally by | ||||
| receiving an unencrypted multicast Babel packet), it compares the neighbour's | receiving an unencrypted multicast Babel packet), it compares the neighbour's | |||
| IP address with its own, using network byte ordering. If a node's | IP address with its own, using network byte ordering. If a node's | |||
| address is lower than the recently discovered neighbour's address, it acts | address is lower than the recently discovered neighbour's address, it acts | |||
| as a client and connects to the neighbour. In other words, the node with | as a client and connects to the neighbour. In other words, the node with | |||
| the lowest address is the DTLS client for this pairwise relationship. | the lowest address is the DTLS client for this pairwise relationship. | |||
| As an example, fe80::1:2 is considered lower than fe80::2:1.</t> | As an example, fe80::1:2 is considered lower than fe80::2:1.</t> | |||
| <t>The node acting as DTLS client initiates its DTLS connection from an | ||||
| <t>The node acting as DTLS client initiates its DTLS connection from an | ephemeral UDP port. Nodes <bcp14>SHOULD</bcp14> ensure that new client DTLS con | |||
| ephemeral UDP port. Nodes SHOULD ensure that new client DTLS connections | nections | |||
| use different ephemeral ports from recently used connections to allow | use different ephemeral ports from recently used connections to allow | |||
| servers to differentiate between the new and old DTLS connections. | servers to differentiate between the new and old DTLS connections. | |||
| Alternatively, nodes could use DTLS connection identifiers | Alternatively, nodes could use DTLS connection identifiers | |||
| <xref target="DTLS-CID"/> as a higher-entropy mechanism to distinguish between | <xref target="I-D.ietf-tls-dtls-connection-id" format="default"/> as a higher-en tropy mechanism to distinguish between | |||
| connections.</t> | connections.</t> | |||
| <t>When a node receives a new DTLS connection, it <bcp14>MUST</bcp14> ve | ||||
| <t>When a node receives a new DTLS connection, it MUST verify that the source | rify that the source | |||
| IP address is either an IPv6 link-local address or an IPv4 address belonging | IP address is either an IPv6 link-local address or an IPv4 address belonging | |||
| to the local network; if it is neither, it MUST reject the | to the local network; if it is neither, it <bcp14>MUST</bcp14> reject the | |||
| connection. Nodes use mutual authentication (authenticating | connection. Nodes use mutual authentication (authenticating | |||
| both client and server); clients MUST authenticate servers and servers MUST | both client and server); clients <bcp14>MUST</bcp14> authenticate servers and se | |||
| authenticate clients. Implementations MUST support | rvers <bcp14>MUST</bcp14> | |||
| authenticate clients. Implementations <bcp14>MUST</bcp14> support | ||||
| authenticating peers against a local store of credentials. If either node | authenticating peers against a local store of credentials. If either node | |||
| fails to authenticate its peer against its local policy, it MUST abort the DTLS | fails to authenticate its peer against its local policy, it <bcp14>MUST</bcp14> | |||
| handshake. The guidance given in <xref target="BCP195"/> MUST be followed to | abort the DTLS | |||
| avoid attacks on DTLS. Additionally, nodes MUST only negotiate DTLS version | handshake. The guidance given in <xref target="BCP195" format="default"/> <bcp1 | |||
| 1.2 or higher. Nodes MUST | 4>MUST</bcp14> be followed to | |||
| avoid attacks on DTLS. Additionally, nodes <bcp14>MUST</bcp14> only negotiate D | ||||
| TLS version | ||||
| 1.2 or higher. Nodes <bcp14>MUST</bcp14> | ||||
| use DTLS replay protection to prevent attackers from replaying stale | use DTLS replay protection to prevent attackers from replaying stale | |||
| information. Nodes SHOULD drop packets that have been reordered by more than | information. Nodes <bcp14>SHOULD</bcp14> drop packets that have been reordered by more than | |||
| two IHU (I Heard You) intervals, to avoid letting attackers make stale | two IHU (I Heard You) intervals, to avoid letting attackers make stale | |||
| information last longer. If a node receives a new DTLS connection from a | information last longer. If a node receives a new DTLS connection from a | |||
| neighbour to whom it already has a connection, the node MUST NOT discard the | neighbour to whom it already has a connection, the node <bcp14>MUST NOT</bcp14> discard the | |||
| older connection until it has completed the handshake of the new one and | older connection until it has completed the handshake of the new one and | |||
| validated the identity of the peer.</t> | validated the identity of the peer.</t> | |||
| </section> | ||||
| </section> | <section numbered="true" toc="default"> | |||
| <name>Protocol Encoding</name> | ||||
| <section title="Protocol Encoding"> | <t>Babel over DTLS sends all unicast Babel packets protected by DTLS. T | |||
| he | ||||
| <t>Babel over DTLS sends all unicast Babel packets protected by DTLS. The | ||||
| entire Babel packet, from the Magic byte at the start of the Babel header | entire Babel packet, from the Magic byte at the start of the Babel header | |||
| to the last byte of the Babel packet trailer, is sent protected by DTLS.</t> | to the last byte of the Babel packet trailer, is sent protected by DTLS.</t> | |||
| </section> | ||||
| </section> | <section numbered="true" toc="default"> | |||
| <name>Transmission</name> | ||||
| <section title="Transmission"> | <t>When sending packets, Babel over DTLS nodes <bcp14>MUST NOT</bcp14> s | |||
| end any TLVs over | ||||
| <t>When sending packets, Babel over DTLS nodes MUST NOT send any TLVs over | ||||
| the unprotected "babel" port, with the exception of Hello TLVs without the | the unprotected "babel" port, with the exception of Hello TLVs without the | |||
| Unicast flag set. Babel over DTLS nodes MUST NOT send any unprotected unicast | Unicast flag set. Babel over DTLS nodes <bcp14>MUST NOT</bcp14> send any unprot ected unicast | |||
| packets. This ensures the confidentiality of the information sent in Babel | packets. This ensures the confidentiality of the information sent in Babel | |||
| packets (e.g., the network topology) by only sending it encrypted by DTLS. | packets (e.g., the network topology) by only sending it encrypted by DTLS. | |||
| Unless some out-of-band neighbour discovery mechanism is available, | Unless some out-of-band neighbour discovery mechanism is available, | |||
| nodes SHOULD periodically send unprotected multicast Hellos to ensure | nodes <bcp14>SHOULD</bcp14> periodically send unprotected Multicast Hellos to en sure | |||
| discovery of new neighbours. In order to maintain bidirectional reachability, | discovery of new neighbours. In order to maintain bidirectional reachability, | |||
| nodes can either rely entirely on unprotected multicast Hellos, or send | nodes can either rely entirely on unprotected Multicast Hellos, or send | |||
| protected unicast Hellos in addition to the multicast Hellos.</t> | protected Unicast Hellos in addition to the Multicast Hellos.</t> | |||
| <t>Since Babel over DTLS only protects unicast packets, implementors may | ||||
| <t>Since Babel over DTLS only protects unicast packets, implementors may | ||||
| implement Babel over DTLS by modifying an implementation of Babel without DTLS | implement Babel over DTLS by modifying an implementation of Babel without DTLS | |||
| support, and replacing any TLV previously sent over multicast with a separate | support and replacing any TLV previously sent over multicast with a separate | |||
| TLV sent over unicast for each neighbour. TLVs previously sent over multicast | TLV sent over unicast for each neighbour. TLVs previously sent over multicast | |||
| can be replaced with the same contents over unicast, with the exception of | can be replaced with the same contents over unicast, with the exception of | |||
| Hellos as described above. Some implementations could also change the contents | Hellos as described above. Some implementations could also change the contents | |||
| of IHU TLVs when converting to unicast in order to remove redundant | of IHU TLVs when converting to unicast in order to remove redundant | |||
| information.</t> | information.</t> | |||
| </section> | ||||
| </section> | <section numbered="true" toc="default"> | |||
| <name>Reception</name> | ||||
| <section title="Reception"> | <t>Babel over DTLS nodes can receive Babel packets either protected over | |||
| a | ||||
| <t>Babel over DTLS nodes can receive Babel packets either protected over a | DTLS connection or unprotected directly over the "babel" port. To ensure the | |||
| DTLS connection, or unprotected directly over the "babel" port. To ensure the | ||||
| security properties of this mechanism, unprotected packets are treated | security properties of this mechanism, unprotected packets are treated | |||
| differently. Nodes MUST silently ignore any unprotected packet sent over | differently. Nodes <bcp14>MUST</bcp14> silently ignore any unprotected packet s | |||
| unicast. When parsing an unprotected packet, a node MUST silently | ent over | |||
| ignore all TLVs that are not of type Hello. Nodes MUST also silently ignore | unicast. When parsing an unprotected packet, a node <bcp14>MUST</bcp14> silentl | |||
| y | ||||
| ignore all TLVs that are not of type Hello. Nodes <bcp14>MUST</bcp14> also sile | ||||
| ntly ignore | ||||
| any unprotected Hello with the Unicast flag set. Note that receiving an | any unprotected Hello with the Unicast flag set. Note that receiving an | |||
| unprotected packet can still be used to discover new neighbours, even when | unprotected packet can still be used to discover new neighbours, even when | |||
| all TLVs in that packet are silently ignored.</t> | all TLVs in that packet are silently ignored.</t> | |||
| </section> | ||||
| </section> | <section numbered="true" toc="default"> | |||
| <name>Neighbour Table Entry</name> | ||||
| <section title="Neighbour table entry"> | <t>It is <bcp14>RECOMMENDED</bcp14> for nodes to associate the state of | |||
| their DTLS connection | ||||
| <t>It is RECOMMENDED for nodes to associate the state of their DTLS connection | ||||
| with their neighbour table. When a neighbour entry is flushed from the | with their neighbour table. When a neighbour entry is flushed from the | |||
| neighbour table (Appendix A of <xref target="RFC6126bis"/>), its associated | neighbour table (<xref target="RFC8966" section="A" sectionFormat="of" format="d | |||
| DTLS state SHOULD be discarded. The node SHOULD send a DTLS close_notify alert | efault"/>), its associated | |||
| DTLS state <bcp14>SHOULD</bcp14> be discarded. The node <bcp14>SHOULD</bcp14> s | ||||
| end a DTLS close_notify alert | ||||
| to the neighbour if it believes the link is still viable.</t> | to the neighbour if it believes the link is still viable.</t> | |||
| </section> | ||||
| </section> | <section numbered="true" toc="default"> | |||
| <name>Simultaneous Operation of Babel over DTLS and Unprotected Babel on | ||||
| <section title="Simultaneous operation of both Babel over DTLS and unprotected B | a Node</name> | |||
| abel on a Node"> | <t>Implementations <bcp14>MAY</bcp14> implement both Babel over DTLS and | |||
| unprotected Babel. | ||||
| <t>Implementations MAY implement both Babel over DTLS and unprotected Babel. | Additionally, a node <bcp14>MAY</bcp14> simultaneously run both Babel over DTLS | |||
| Additionally, a node MAY simultaneously run both Babel over DTLS and | and | |||
| unprotected Babel. However, a node running both MUST ensure that it runs | unprotected Babel. However, a node running both <bcp14>MUST</bcp14> ensure that | |||
| it runs | ||||
| them on separate interfaces, as the security properties of Babel over DTLS | them on separate interfaces, as the security properties of Babel over DTLS | |||
| rely on not accepting unprotected Babel packets (other than multicast Hellos). | rely on ignoring unprotected Babel packets (other than Multicast Hellos). | |||
| An implementation MAY offer configuration options to allow unprotected Babel on | An implementation <bcp14>MAY</bcp14> offer configuration options to allow unprot | |||
| some interfaces but not others; this effectively gives nodes on that interface | ected Babel on | |||
| the same access as authenticated nodes, and SHOULD NOT be done unless that | some interfaces but not others, which effectively gives nodes on that interface | |||
| the same access as authenticated nodes; however, this <bcp14>SHOULD NOT</bcp14> | ||||
| be done unless that | ||||
| interface has a mechanism to authenticate nodes at a lower | interface has a mechanism to authenticate nodes at a lower | |||
| layer (e.g., IPsec).</t> | layer (e.g., IPsec).</t> | |||
| </section> | ||||
| </section> | <section numbered="true" toc="default"> | |||
| <name>Simultaneous Operation of Babel over DTLS and Unprotected Babel on | ||||
| <section title="Simultaneous operation of both Babel over DTLS and unprotected B | a Network</name> | |||
| abel on a Network"> | <t>If Babel over DTLS and unprotected Babel are both operated on the sam | |||
| e | ||||
| <t>If Babel over DTLS and unprotected Babel are both operated on the same | network, the Babel over DTLS implementation will receive unprotected Multicast | |||
| network, the Babel over DTLS implementation will receive unprotected multicast | ||||
| Hellos and attempt to initiate a DTLS connection. These connection attempts | Hellos and attempt to initiate a DTLS connection. These connection attempts | |||
| can be sent to nodes that only run unprotected Babel, who will not | can be sent to nodes that only run unprotected Babel, who will not | |||
| respond. Babel over DTLS implementations SHOULD therefore rate-limit their | respond. Babel over DTLS implementations <bcp14>SHOULD</bcp14> therefore rate-l imit their | |||
| DTLS connection attempts to avoid causing undue load on the network.</t> | DTLS connection attempts to avoid causing undue load on the network.</t> | |||
| </section> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| </section> | <name>Interface Maximum Transmission Unit Issues</name> | |||
| <t>Compared to unprotected Babel, DTLS adds header, authentication tag, an | ||||
| <section title="Interface Maximum Transmission Unit Issues"> | d | |||
| <t>Compared to unprotected Babel, DTLS adds header, authentication tag and | ||||
| possibly block-size padding overhead to every packet. This reduces the size of | possibly block-size padding overhead to every packet. This reduces the size of | |||
| the Babel payload that can be carried. This document does not relax the | the Babel payload that can be carried. This document does not relax the | |||
| packet size requirements in Section 4 of <xref target="RFC6126bis"/>, but | packet size requirements in <xref target="RFC8966" sectionFormat="of" section="4 "/> but | |||
| recommends that DTLS overhead be taken into account when computing maximum | recommends that DTLS overhead be taken into account when computing maximum | |||
| packet size.</t> | packet size.</t> | |||
| <t> More precisely, nodes <bcp14>SHOULD</bcp14> compute the overhead of DT | ||||
| <t> More precisely, nodes SHOULD compute the overhead of DTLS depending on | LS depending on | |||
| the ciphersuites in use, and SHOULD NOT send Babel packets larger than the | the ciphersuites in use and <bcp14>SHOULD NOT</bcp14> send Babel packets larger | |||
| interface maximum transmission unit (MTU) minus the overhead of IP, UDP | than the | |||
| and DTLS. Nodes MUST NOT send Babel packets larger than the attached | interface maximum transmission unit (MTU) minus the overhead of IP, UDP, | |||
| and DTLS. Nodes <bcp14>MUST NOT</bcp14> send Babel packets larger than the atta | ||||
| ched | ||||
| interface's MTU adjusted for known lower-layer headers (at least UDP and | interface's MTU adjusted for known lower-layer headers (at least UDP and | |||
| IP) or 512 octets, whichever is larger, but not exceeding 2^16 - | IP) or 512 octets, whichever is larger, but not exceeding 2<sup>16</sup> - | |||
| 1 adjusted for lower-layer headers. Every Babel speaker MUST be able to | 1 adjusted for lower-layer headers. Every Babel speaker <bcp14>MUST</bcp14> be | |||
| able to | ||||
| receive packets that are as large as any attached interface's MTU adjusted | receive packets that are as large as any attached interface's MTU adjusted | |||
| for UDP and IP headers or 512 octets, whichever is larger. Note that this | for UDP and IP headers or 512 octets, whichever is larger. Note that this | |||
| requirement on reception does not take into account the overhead of DTLS | requirement on reception does not take into account the overhead of DTLS | |||
| because the peer may not have the ability to compute the overhead of DTLS | because the peer may not have the ability to compute the overhead of DTLS, | |||
| and the packet may be fragmented by lower layers.</t> | and the packet may be fragmented by lower layers.</t> | |||
| <t>Note that distinct DTLS connections can use different ciphers, which ca | ||||
| <t>Note that distinct DTLS connections can use different ciphers, which can | n | |||
| have different amounts of per-packet overhead. Therefore, the MTU to one | have different amounts of per-packet overhead. Therefore, the MTU to one | |||
| neighbour can be different from the MTU to another neighbour on the same | neighbour can be different from the MTU to another neighbour on the same | |||
| link.</t> | link.</t> | |||
| </section> | ||||
| </section> | <section anchor="iana_considerations" numbered="true" toc="default"> | |||
| <name>IANA Considerations</name> | ||||
| <section title="IANA Considerations" anchor="iana_considerations"> | <t>IANA has registered a UDP port | |||
| number, called "babel-dtls", for use by Babel over DTLS: | ||||
| <t>If this document is approved, IANA is requested to register a UDP port | ||||
| number, called "babel-dtls", for use by Babel over DTLS. Details of the | ||||
| request to IANA are as follows: | ||||
| <list style="symbols"> | ||||
| <t>Assignee: IESG, iesg@ietf.org</t> | ||||
| <t>Contact Person: IETF Chair, chair@ietf.org</t> | ||||
| <t>Transport Protocols: UDP only</t> | ||||
| <t>Service Code: None</t> | ||||
| <t>Service Name: babel-dtls</t> | ||||
| <t>Desired Port Number: 6699</t> | ||||
| <t>Description: Babel Routing Protocol over DTLS</t> | ||||
| <t>Reference: This document</t> | ||||
| <t>Defined TXT Keys: None</t> | ||||
| </list> | ||||
| </t> | </t> | |||
| <ul empty="true"><li> | ||||
| </section> | <dl spacing="normal"> | |||
| <dt>Service Name:</dt><dd> babel-dtls</dd> | ||||
| <section title="Security Considerations"> | <dt>Port Number:</dt><dd> 6699</dd> | |||
| <dt>Transport Protocols:</dt><dd> UDP only</dd> | ||||
| <t>A malicious client might attempt to perform a high number of DTLS | <dt>Description:</dt><dd> Babel Routing Protocol over DTLS</dd> | |||
| <dt>Assignee:</dt><dd> IESG, iesg@ietf.org</dd> | ||||
| <dt>Contact:</dt><dd> IETF Chair, chair@ietf.org</dd> | ||||
| <dt>Reference:</dt><dd> RFC 8968</dd> | ||||
| <dt>Service Code:</dt><dd> None</dd> | ||||
| </dl> | ||||
| </li> | ||||
| </ul> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Security Considerations</name> | ||||
| <t>A malicious client might attempt to perform a high number of DTLS | ||||
| handshakes with a server. As the clients are not uniquely identified | handshakes with a server. As the clients are not uniquely identified | |||
| by the protocol until the handshake completes and can be obfuscated with IPv6 | by the protocol until the handshake completes and can be obfuscated with IPv6 | |||
| temporary addresses, a server needs to mitigate the impact of such an attack. | temporary addresses, a server needs to mitigate the impact of such an attack. | |||
| Note that attackers might attempt to keep in-progress handshakes open for as | Note that attackers might attempt to keep in-progress handshakes open for as | |||
| long as possible by using variants on the attack commonly known as | long as possible by using variants on the attack commonly known as | |||
| Slowloris <xref target="SLOWLORIS"/>. Mitigating these attacks might involve | Slowloris <xref target="SLOWLORIS" format="default"/>. Mitigating these attacks | |||
| rate limiting handshakes from a given subnet or more advanced denial of | might involve | |||
| limiting the rate of handshakes from a given subnet or more advanced denial of | ||||
| service avoidance techniques beyond the scope of this document.</t> | service avoidance techniques beyond the scope of this document.</t> | |||
| <t>Babel over DTLS allows sending Multicast Hellos unprotected; attackers | ||||
| <t>Babel over DTLS allows sending multicast Hellos unprotected; attackers can | can | |||
| therefore tamper with them. For example, an attacker could send erroneous | therefore tamper with them. For example, an attacker could send erroneous | |||
| values for the Seqno and Interval fields, causing bidirectional | values for the Seqno and Interval fields, causing bidirectional | |||
| reachability detection to fail. While implementations MAY use multicast Hellos | reachability detection to fail. While implementations <bcp14>MAY</bcp14> use Mu | |||
| for link quality estimation, they SHOULD also emit protected unicast Hellos to | lticast Hellos | |||
| for link quality estimation, they <bcp14>SHOULD</bcp14> also emit protected Unic | ||||
| ast Hellos to | ||||
| prevent this class of denial-of-service attack.</t> | prevent this class of denial-of-service attack.</t> | |||
| <t>While DTLS provides protection against an attacker that replays valid | ||||
| <t>While DTLS provides protection against an attacker that replays valid | ||||
| packets, DTLS is not able to detect when an active on-path attacker intercepts | packets, DTLS is not able to detect when an active on-path attacker intercepts | |||
| valid packets and resends them at a later time. This attack could be used to | valid packets and resends them at a later time. This attack could be used to | |||
| make a node believe it has bidirectional reachability to a neighbour even | make a node believe it has bidirectional reachability to a neighbour even | |||
| though that neighbour has disconnected from the network. To prevent this | though that neighbour has disconnected from the network. To prevent this | |||
| attack, nodes MUST discard the DTLS state associated with a neighbour after a | attack, nodes <bcp14>MUST</bcp14> discard the DTLS state associated with a neigh bour after a | |||
| finite time of not receiving valid DTLS packets. This can be implemented by, | finite time of not receiving valid DTLS packets. This can be implemented by, | |||
| for example, discarding a neighbour's DTLS state when its associated IHU timer | for example, discarding a neighbour's DTLS state when its associated IHU timer | |||
| fires. Note that relying solely on the receipt of Hellos is not sufficient as | fires. Note that relying solely on the receipt of Hellos is not sufficient as | |||
| multicast Hellos are sent unprotected. Additionally, an attacker could save | Multicast Hellos are sent unprotected. Additionally, an attacker could save | |||
| some packets and replay them later in hopes of propagating stale routing | some packets and replay them later in hopes of propagating stale routing | |||
| information at a later time. This can be mitigated by discarding received | information at a later time. This can be mitigated by discarding received | |||
| packets that have been reordered by more than two IHU intervals.</t> | packets that have been reordered by more than two IHU intervals.</t> | |||
| </section> | ||||
| </middle> | ||||
| <back> | ||||
| </section> | <displayreference target="I-D.ietf-tls-dtls-connection-id" to="DTLS-CID"/> | |||
| </middle> | <references> | |||
| <name>References</name> | ||||
| <references> | ||||
| <name>Normative References</name> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.2119.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.6347.xml"/> | ||||
| <back> | <reference anchor='BCP195' target='https://www.rfc-editor.org/info/bcp195'> | |||
| <front> | ||||
| <title>Recommendations for Secure Use of Transport Layer Security (TLS) and Data | ||||
| gram Transport Layer Security (DTLS)</title> | ||||
| <author initials='Y.' surname='Sheffer' fullname='Y. Sheffer'><organization /></ | ||||
| author> | ||||
| <author initials='R.' surname='Holz' fullname='R. Holz'><organization /></author | ||||
| > | ||||
| <author initials='P.' surname='Saint-Andre' fullname='P. Saint-Andre'><organizat | ||||
| ion /></author> | ||||
| <date year='2015' month='May' /> | ||||
| <abstract><t>Transport Layer Security (TLS) and Datagram Transport Layer Securit | ||||
| y (DTLS) are widely used to protect data exchanged over application protocols su | ||||
| ch as HTTP, SMTP, IMAP, POP, SIP, and XMPP. Over the last few years, several se | ||||
| rious attacks on TLS have emerged, including attacks on its most commonly used c | ||||
| ipher suites and their modes of operation. This document provides recommendatio | ||||
| ns for improving the security of deployed services that use TLS and DTLS. The re | ||||
| commendations are applicable to the majority of use cases.</t></abstract> | ||||
| </front> | ||||
| <seriesInfo name='BCP' value='195'/> | ||||
| <seriesInfo name='RFC' value='7525'/> | ||||
| </reference> | ||||
| <references title="Normative References"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.8174.xml"/> | |||
| &RFC2119; | <reference anchor="RFC8966" target='https://www.rfc-editor.org/info/rfc8 | |||
| &RFC6347; | 966'> | |||
| <front> | ||||
| <title>The Babel Routing Protocol</title> | ||||
| <author fullname="Juliusz Chroboczek" initials="J." surname="Chroboc | ||||
| zek"/> | ||||
| <author fullname="David Schinazi" initials="D." surname="Schinazi"/> | ||||
| <date month="January" year="2021"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8966"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8966"/> | ||||
| </reference> | ||||
| </references> | ||||
| <references> | ||||
| <reference anchor="BCP195" target="https://www.rfc-editor.org/info/bcp195"> | <name>Informative References</name> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7250.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7918.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7924.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8094.xml"/> | ||||
| <reference anchor='RFC8967' target='https://www.rfc-editor.org/info/rfc8967'> | ||||
| <front> | <front> | |||
| <title> | <title>MAC Authentication for the Babel Routing Protocol</title> | |||
| Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Tr | <author initials='C' surname='Dô' fullname='Clara Dô'> | |||
| ansport Layer Security (DTLS) | <organization /> | |||
| </title> | ||||
| <author initials="Y." surname="Sheffer" fullname="Y. Sheffer"> | ||||
| <organization/> | ||||
| </author> | </author> | |||
| <author initials="R." surname="Holz" fullname="R. Holz"> | <author initials='W' surname='Kolodziejak' fullname='Weronika Kolodziejak'> | |||
| <organization/> | <organization /> | |||
| </author> | </author> | |||
| <author initials="P." surname="Saint-Andre" fullname="P. Saint-Andre"> | <author initials='J' surname='Chroboczek' fullname='Juliusz Chroboczek'> | |||
| <organization/> | <organization /> | |||
| </author> | </author> | |||
| <date year="2015" month="May"/> | <date month='January' year='2021' /> | |||
| <abstract> | ||||
| <t> | ||||
| Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) are | ||||
| widely used to protect data exchanged over application protocols such as HTTP, S | ||||
| MTP, IMAP, POP, SIP, and XMPP. Over the last few years, several serious attacks | ||||
| on TLS have emerged, including attacks on its most commonly used cipher suites a | ||||
| nd their modes of operation. This document provides recommendations for improvin | ||||
| g the security of deployed services that use TLS and DTLS. The recommendations a | ||||
| re applicable to the majority of use cases. | ||||
| </t> | ||||
| </abstract> | ||||
| </front> | </front> | |||
| <seriesInfo name="BCP" value="195"/> | <seriesInfo name="RFC" value="8967"/> | |||
| <seriesInfo name="RFC" value="7525"/> | <seriesInfo name="DOI" value="10.17487/RFC8967"/> | |||
| <seriesInfo name="DOI" value="10.17487/RFC7525"/> | ||||
| </reference> | ||||
| &RFC8174; | ||||
| <reference anchor="RFC6126bis"><front> | ||||
| <title>The Babel Routing Protocol</title> | ||||
| <author fullname="Juliusz Chroboczek" initials="J." surname="Chroboczek"/> | ||||
| <author fullname="David Schinazi" initials="D." surname="Schinazi"/> | ||||
| <date month="February" year="2020"/></front> | ||||
| <seriesInfo name="Internet Draft" value="draft-ietf-babel-rfc6126bis-17"/> | ||||
| </reference> | ||||
| </references> | ||||
| <references title="Informative References"> | ||||
| &RFC7250; | ||||
| &RFC7918; | ||||
| &RFC7924; | ||||
| &RFC8094; | ||||
| <reference anchor="BABEL-HMAC"><front> | ||||
| <title>Babel Cryptographic Authentication</title> | ||||
| <author fullname="Clara Do" initials="C." surname="Do"/> | ||||
| <author fullname="Weronika Kolodziejak" initials="W." surname="Kolodziejak"/> | ||||
| <author fullname="Juliusz Chroboczek" initials="J." surname="Chroboczek"/> | ||||
| <date month="August" year="2019"/></front> | ||||
| <seriesInfo name="Internet Draft" value="draft-ietf-babel-hmac-10"/> | ||||
| </reference> | ||||
| <reference anchor="DTLS-CID"><front> | ||||
| <title>Connection Identifiers for DTLS 1.2</title> | ||||
| <author fullname="Eric Rescorla" initials="E." surname="Rescorla"/> | ||||
| <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig"/> | ||||
| <author fullname="Thomas Fossati" initials="T." surname="Fossati"/> | ||||
| <author fullname="Tobias Gondrom" initials="T." surname="Gondrom"/> | ||||
| <date month="October" year="2019"/></front> | ||||
| <seriesInfo name="Internet Draft" value="draft-ietf-tls-dtls-connection-id-07"/> | ||||
| </reference> | ||||
| <reference anchor="SLOWLORIS" target="https://web.archive.org/web/20150315054838 | ||||
| /http://ha.ckers.org/slowloris/"><front> | ||||
| <title>Welcome to Slowloris...</title> | ||||
| <author fullname="RSnake Hansen" initials="R." surname="Hansen"/> | ||||
| <date month="June" year="2009"/></front> | ||||
| </reference> | </reference> | |||
| </references> | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D. ietf-tls-dtls-connection-id.xml"/> | |||
| <section title="Performance Considerations"> | <reference anchor="SLOWLORIS" target="https://web.archive.org/web/201503 | |||
| 15054838/http://ha.ckers.org/slowloris/"> | ||||
| <front> | ||||
| <title>Slowloris HTTP DoS</title> | ||||
| <author fullname="RSnake Hansen" initials="R." surname="Hansen"/> | ||||
| <date month="June" year="2009"/> | ||||
| </front> | ||||
| </reference> | ||||
| </references> | ||||
| </references> | ||||
| <t>To reduce the number of octets taken by the DTLS handshake, | <section numbered="true" toc="default"> | |||
| <name>Performance Considerations</name> | ||||
| <t>To reduce the number of octets taken by the DTLS handshake, | ||||
| especially the size of the certificate in the ServerHello (which can | especially the size of the certificate in the ServerHello (which can | |||
| be several kilobytes), Babel peers can use raw public keys <xref | be several kilobytes), Babel peers can use raw public keys <xref target="RFC7250 | |||
| target="RFC7250"/> or the Cached Information Extension <xref | " format="default"/> or the Cached Information Extension <xref target="RFC7924" | |||
| target="RFC7924"/>. The Cached Information Extension avoids | format="default"/>. The Cached Information Extension avoids | |||
| transmitting the server's certificate and certificate chain if the | transmitting the server's certificate and certificate chain if the | |||
| client has cached that information from a previous TLS handshake. TLS | client has cached that information from a previous TLS handshake. TLS | |||
| False Start <xref target="RFC7918"/> can reduce round trips by | False Start <xref target="RFC7918" format="default"/> can reduce round trips by | |||
| allowing the TLS second flight of messages (ChangeCipherSpec) to also | allowing the TLS second flight of messages (ChangeCipherSpec) to also | |||
| contain the (encrypted) Babel packet.</t> | contain the (encrypted) Babel packet.</t> | |||
| </section> | ||||
| </section> | <section numbered="false" toc="default"> | |||
| <name>Acknowledgments</name> | ||||
| <section title="Acknowledgments"> | <t>The authors would like to thank | |||
| <contact fullname="Roman Danyliw"/>, | ||||
| <t>The authors would like to thank | <contact fullname="Donald Eastlake"/>, | |||
| Roman Danyliw, | <contact fullname="Thomas Fossati"/>, | |||
| Donald Eastlake, | <contact fullname="Benjamin Kaduk"/>, | |||
| Thomas Fossati, | <contact fullname="Gabriel Kerneis"/>, | |||
| Benjamin Kaduk, | <contact fullname="Mirja Kühlewind"/>, | |||
| Gabriel Kerneis, | <contact fullname="Antoni Przygienda"/>, | |||
| Mirja Kuehlewind, | <contact fullname="Henning Rogge"/>, | |||
| Antoni Przygienda, | <contact fullname="Dan Romascanu"/>, | |||
| Henning Rogge, | <contact fullname="Barbara Stark"/>, | |||
| Dan Romascanu, | <contact fullname="Markus Stenberg"/>, | |||
| Barbara Stark, | <contact fullname="Dave Taht"/>, | |||
| Markus Stenberg, | <contact fullname="Martin Thomson"/>, | |||
| Dave Taht, | <contact fullname="Sean Turner"/>, | |||
| Martin Thomson, | and <contact fullname="Martin Vigoureux"/> | |||
| Sean Turner | ||||
| and Martin Vigoureux | ||||
| for their input and contributions. | for their input and contributions. | |||
| The performance considerations in this document were inspired from the ones for | The performance considerations in this document were inspired from the ones for | |||
| DNS over DTLS <xref target="RFC8094"/>.</t> | DNS over DTLS <xref target="RFC8094" format="default"/>.</t> | |||
| </section> | ||||
| </section> | </back> | |||
| </back> | ||||
| </rfc> | </rfc> | |||
| End of changes. 71 change blocks. | ||||
| 368 lines changed or deleted | 364 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||