| rfc9853.original | rfc9853.txt | |||
|---|---|---|---|---|
| TLS H. Tschofenig, Ed. | Internet Engineering Task Force (IETF) H. Tschofenig, Ed. | |||
| Internet-Draft H-BRS | Request for Comments: 9853 H-BRS | |||
| Updates: 9146, 9147 (if approved) A. Kraus | Updates: 9146, 9147 A. Kraus | |||
| Intended status: Standards Track | Category: Standards Track | |||
| Expires: 15 January 2026 T. Fossati | ISSN: 2070-1721 T. Fossati | |||
| Linaro | Linaro | |||
| 14 July 2025 | February 2026 | |||
| Return Routability Check for DTLS 1.2 and DTLS 1.3 | Return Routability Check for DTLS 1.2 and 1.3 | |||
| draft-ietf-tls-dtls-rrc-20 | ||||
| Abstract | Abstract | |||
| This document specifies a return routability check for use in context | This document specifies a Return Routability Check (RRC) for use in | |||
| of the Connection ID (CID) construct for the Datagram Transport Layer | the context of the Connection ID (CID) construct for the Datagram | |||
| Security (DTLS) protocol versions 1.2 and 1.3. | Transport Layer Security (DTLS) protocol versions 1.2 and 1.3. | |||
| Implementations offering the CID functionality described in RFC 9146 | ||||
| and RFC 9147 are encouraged to also provide the return routability | ||||
| check functionality described in this document. For this reason, | ||||
| this document updates RFC 9146 and RFC 9147. | ||||
| Discussion Venues | ||||
| This note is to be removed before publishing as an RFC. | ||||
| Discussion of this document takes place on the Transport Layer | ||||
| Security Working Group mailing list (tls@ietf.org), which is archived | ||||
| at https://mailarchive.ietf.org/arch/browse/tls/. | ||||
| Source for this draft and an issue tracker can be found at | Implementations offering the CID functionality described in RFCs 9146 | |||
| https://github.com/tlswg/dtls-rrc. | and 9147 are encouraged to also provide the RRC functionality | |||
| described in this document. For this reason, this document updates | ||||
| RFCs 9146 and 9147. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | This document is a product of the Internet Engineering Task Force | |||
| Task Force (IETF). Note that other groups may also distribute | (IETF). It represents the consensus of the IETF community. It has | |||
| working documents as Internet-Drafts. The list of current Internet- | received public review and has been approved for publication by the | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | Information about the current status of this document, any errata, | |||
| and may be updated, replaced, or obsoleted by other documents at any | and how to provide feedback on it may be obtained at | |||
| time. It is inappropriate to use Internet-Drafts as reference | https://www.rfc-editor.org/info/rfc9853. | |||
| material or to cite them other than as "work in progress." | ||||
| This Internet-Draft will expire on 15 January 2026. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2025 IETF Trust and the persons identified as the | Copyright (c) 2026 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
| described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
| provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
| 2. Conventions and Terminology . . . . . . . . . . . . . . . . . 3 | 2. Conventions and Terminology | |||
| 3. RRC Extension . . . . . . . . . . . . . . . . . . . . . . . . 4 | 3. RRC Extension | |||
| 3.1. RRC and CID Interplay . . . . . . . . . . . . . . . . . . 4 | 3.1. RRC and CID Interplay | |||
| 4. Return Routability Check Message Types . . . . . . . . . . . 5 | 4. Return Routability Check Message Types | |||
| 5. Path Validation Procedure . . . . . . . . . . . . . . . . . . 6 | 5. Path Validation Procedure | |||
| 5.1. Basic . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 5.1. Basic | |||
| 5.2. Enhanced . . . . . . . . . . . . . . . . . . . . . . . . 7 | 5.2. Enhanced | |||
| 5.3. Path Challenge Requirements . . . . . . . . . . . . . . 8 | 5.3. Path Challenge Requirements | |||
| 5.4. Path Response/Drop Requirements . . . . . . . . . . . . . 9 | 5.4. Path Response/Drop Requirements | |||
| 5.5. Timer Choice . . . . . . . . . . . . . . . . . . . . . . 9 | 5.5. Timer Choice | |||
| 6. Example . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 6. Example | |||
| 7. Operational Considerations . . . . . . . . . . . . . . . . . 11 | 7. Operational Considerations | |||
| 7.1. Logging Anomalous Events . . . . . . . . . . . . . . . . 12 | 7.1. Logging Anomalous Events | |||
| 7.2. Middlebox Interference . . . . . . . . . . . . . . . . . 12 | 7.2. Middlebox Interference | |||
| 8. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | 8. Security Considerations | |||
| 8.1. Attacker Model . . . . . . . . . . . . . . . . . . . . . 13 | 8.1. Attacker Model | |||
| 8.1.1. Amplification . . . . . . . . . . . . . . . . . . . . 14 | 8.1.1. Amplification | |||
| 8.1.2. Off-Path Packet Forwarding . . . . . . . . . . . . . 14 | 8.1.2. Off-Path Packet Forwarding | |||
| 9. Privacy Considerations . . . . . . . . . . . . . . . . . . . 18 | 9. Privacy Considerations | |||
| 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 19 | 10. IANA Considerations | |||
| 10.1. New TLS ContentType . . . . . . . . . . . . . . . . . . 19 | 10.1. New TLS ContentType | |||
| 10.2. New TLS ExtensionType . . . . . . . . . . . . . . . . . 19 | 10.2. New TLS ExtensionType | |||
| 10.3. New "TLS RRC Message Type" Registry . . . . . . . . . . 20 | 10.3. New "TLS RRC Message Type" Registry | |||
| 10.3.1. Designated Expert Instructions . . . . . . . . . . . 21 | 10.3.1. Designated Expert Instructions | |||
| 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 21 | 11. References | |||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 21 | 11.1. Normative References | |||
| 12.1. Normative References . . . . . . . . . . . . . . . . . . 22 | 11.2. Informative References | |||
| 12.2. Informative References . . . . . . . . . . . . . . . . . 23 | Acknowledgments | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 23 | Authors' Addresses | |||
| 1. Introduction | 1. Introduction | |||
| A Connection ID (CID) is an identifier carried in the record layer | A Connection ID (CID) is an identifier carried in the record layer | |||
| header of a DTLS datagram that gives the receiver additional | header of a DTLS datagram that gives the receiver additional | |||
| information for selecting the appropriate security context. The CID | information for selecting the appropriate security context. The CID | |||
| mechanism has been specified in [RFC9146] for DTLS 1.2 and in | mechanism has been specified in [RFC9146] for DTLS 1.2 and in | |||
| [RFC9147] for DTLS 1.3. | [RFC9147] for DTLS 1.3. | |||
| Section 6 of [RFC9146] describes how the use of CID increases the | Section 6 of [RFC9146] describes how the use of CID increases the | |||
| attack surface of DTLS 1.2 and 1.3 by providing both on-path and off- | attack surface of DTLS 1.2 and 1.3 by providing both on-path and off- | |||
| path attackers an opportunity for (D)DoS. It also describes the | path attackers an opportunity for DoS or DDoS. It also describes the | |||
| steps a DTLS principal must take when a record with a CID is received | steps a DTLS principal must take when a record with a CID is received | |||
| that has a source address different from the one currently associated | that has a source address different from the one currently associated | |||
| with the DTLS connection. However, the actual mechanism for ensuring | with the DTLS connection. However, the actual mechanism for ensuring | |||
| that the new peer address is willing to receive and process DTLS | that the new peer address is willing to receive and process DTLS | |||
| records is left open. To address the gap, this document defines a | records is left open. To address the gap, this document defines a | |||
| Return Routability Check (RRC) sub-protocol for DTLS 1.2 and 1.3 | Return Routability Check (RRC) subprotocol for DTLS 1.2 and 1.3, | |||
| inspired by the path validation procedure defined in Section 8.2 of | inspired by the path validation procedure defined in Section 8.2 of | |||
| [RFC9000]. As such, this document updates [RFC9146] and [RFC9147]. | [RFC9000]. As such, this document updates [RFC9146] and [RFC9147]. | |||
| The return routability check is performed by the receiving endpoint | The return routability check is performed by the receiving endpoint | |||
| before the CID-address binding is updated in that endpoint's session | before the CID-address binding is updated in that endpoint's session | |||
| state. This is done in order to give the receiving endpoint | state. This is done in order to give the receiving endpoint | |||
| confidence that the sending peer is in fact reachable at the source | confidence that the sending peer is in fact reachable at the source | |||
| address indicated in the received datagram. For an illustration of | address indicated in the received datagram. For an illustration of | |||
| the handshake and address validation phases, see Section 6. | the handshake and address validation phases, see Section 6. | |||
| Section 5.1 of this document explains the fundamental mechanism that | Section 5.1 of this document explains the fundamental mechanism that | |||
| aims to reduce the DDoS attack surface. Additionally, in | aims to reduce the DDoS attack surface. Additionally, Section 5.2 | |||
| Section 5.2, a more advanced address validation mechanism is | discusses a more advanced address validation mechanism. This | |||
| discussed. This mechanism is designed to counteract off-path | mechanism is designed to counteract off-path attackers trying to | |||
| attackers trying to place themselves on-path by racing packets that | place themselves on-path by racing packets that trigger address | |||
| trigger address rebinding at the receiver. To gain a detailed | rebinding at the receiver. To gain a detailed understanding of the | |||
| understanding of the attacker model, please refer to Section 8.1. | attacker model, please refer to Section 8.1. | |||
| Apart from of its use in the context of CID-address binding updates, | Apart from of its use in the context of CID-address binding updates, | |||
| the path validation capability offered by RRC can be used at any time | the path validation capability offered by RRC can be used at any time | |||
| by either endpoint. For instance, an endpoint might use RRC to check | by either endpoint. For instance, an endpoint might use RRC to check | |||
| that a peer is still reachable at its last known address after a | that a peer is still reachable at its last known address after a | |||
| period of quiescence. | period of quiescence. | |||
| 2. Conventions and Terminology | 2. Conventions and Terminology | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| skipping to change at page 4, line 18 ¶ | skipping to change at line 147 ¶ | |||
| of [RFC8446]. | of [RFC8446]. | |||
| In this document, the term "anti-amplification limit" means three | In this document, the term "anti-amplification limit" means three | |||
| times the amount of data received from an unvalidated address. This | times the amount of data received from an unvalidated address. This | |||
| includes all DTLS records originating from that source address, | includes all DTLS records originating from that source address, | |||
| excluding those that have been discarded. This follows the pattern | excluding those that have been discarded. This follows the pattern | |||
| of [RFC9000], applying a similar concept to DTLS. | of [RFC9000], applying a similar concept to DTLS. | |||
| The term "address" is defined in Section 1.2 of [RFC9000]. | The term "address" is defined in Section 1.2 of [RFC9000]. | |||
| The terms "client", "server", "peer" and "endpoint" are defined in | The terms "client", "server", "peer", and "endpoint" are defined in | |||
| Section 1.1 of [RFC8446]. | Section 1.1 of [RFC8446]. | |||
| 3. RRC Extension | 3. RRC Extension | |||
| The use of RRC is negotiated via the rrc extension. The rrc | The use of RRC is negotiated via the rrc extension. The rrc | |||
| extension is only defined for DTLS 1.2 and DTLS 1.3. On connecting, | extension is only defined for DTLS 1.2 and 1.3. On connecting, a | |||
| a client wishing to use RRC includes the rrc extension in its | client wishing to use RRC includes the rrc extension in its | |||
| ClientHello. If the server is capable of meeting this requirement, | ClientHello. If the server is capable of meeting this requirement, | |||
| it responds with a rrc extension in its ServerHello. The | it responds with an rrc extension in its ServerHello. The | |||
| extension_type value for this extension is TBD1 and the | extension_type value for this extension is 61, and the extension_data | |||
| extension_data field of this extension is empty. A client offering | field of this extension is empty. A client offering the rrc | |||
| the rrc extension MUST also offer the connection_id extension | extension MUST also offer the connection_id extension [RFC9146]. If | |||
| [RFC9146]. If the client includes the rrc extension in its | the client includes the rrc extension in its ClientHello but omits | |||
| ClientHello but omits the connection_id extension, the server MUST | the connection_id extension, the server MUST NOT include the rrc | |||
| NOT include the rrc extension in its ServerHello. A client offering | extension in its ServerHello. A client offering the connection_id | |||
| the connection_id extension SHOULD also offer the rrc extension, | extension SHOULD also offer the rrc extension, unless the application | |||
| unless the application using DTLS has its own address validation | using DTLS has its own address validation mechanism. The client and | |||
| mechanism. The client and server MUST NOT use RRC unless both sides | server MUST NOT use RRC unless both sides have successfully exchanged | |||
| have successfully exchanged rrc extensions. | rrc extensions. | |||
| 3.1. RRC and CID Interplay | 3.1. RRC and CID Interplay | |||
| RRC offers an in-protocol mechanism to perform peer address | RRC offers an in-protocol mechanism to perform peer address | |||
| validation that complements the "peer address update" procedure | validation that complements the "peer address update" procedure | |||
| described in Section 6 of [RFC9146]. Specifically, when both CID | described in Section 6 of [RFC9146]. Specifically, when both CID | |||
| [RFC9146] and RRC have been successfully negotiated for the session, | [RFC9146] and RRC have been successfully negotiated for the session, | |||
| if a record with CID is received that has the source address of the | if a record with CID is received that has the source address of the | |||
| enclosing UDP datagram different from what is currently associated | enclosing UDP datagram different from what is currently associated | |||
| with that CID value, the receiver SHOULD perform a return routability | with that CID value, the receiver SHOULD perform a return routability | |||
| check as described in Section 5, unless an application-specific | check as described in Section 5, unless an application-specific | |||
| address validation mechanism can be triggered instead (e.g., CoAP | address validation mechanism can be triggered instead (e.g., | |||
| Echo [RFC9175]). | Constrained Application Protocol (CoAP) Echo [RFC9175]). | |||
| 4. Return Routability Check Message Types | 4. Return Routability Check Message Types | |||
| This document defines the return_routability_check content type | This document defines the return_routability_check content type | |||
| (Figure 1) to carry Return Routability Check messages. | (Figure 1) to carry Return Routability Check messages. | |||
| The RRC sub-protocol consists of three message types: path_challenge, | The RRC subprotocol consists of three message types: path_challenge, | |||
| path_response and path_drop that are used for path validation and | path_response, and path_drop. These message types are used for path | |||
| selection as described in Section 5. | validation and selection as described in Section 5. | |||
| Each message carries a Cookie, an 8-byte field containing 64 bits of | Each message carries a Cookie, an 8-byte field containing 64 bits of | |||
| entropy (e.g., obtained from the CSPRNG used by the TLS | entropy (e.g., obtained from the cryptographically secure | |||
| implementation, see Appendix C.1 of [RFC8446]). | pseudorandom number generator (CSPRNG) used by the TLS | |||
| implementation; see Appendix C.1 of [RFC8446]). | ||||
| The return_routability_check message MUST be authenticated and | The return_routability_check message MUST be authenticated and | |||
| encrypted using the currently active security context. | encrypted using the currently active security context. | |||
| enum { | enum { | |||
| invalid(0), | invalid(0), | |||
| change_cipher_spec(20), | change_cipher_spec(20), | |||
| alert(21), | alert(21), | |||
| handshake(22), | handshake(22), | |||
| application_data(23), | application_data(23), | |||
| skipping to change at page 6, line 5 ¶ | skipping to change at line 230 ¶ | |||
| rrc_msg_type msg_type; | rrc_msg_type msg_type; | |||
| select (return_routability_check.msg_type) { | select (return_routability_check.msg_type) { | |||
| case path_challenge: Cookie; | case path_challenge: Cookie; | |||
| case path_response: Cookie; | case path_response: Cookie; | |||
| case path_drop: Cookie; | case path_drop: Cookie; | |||
| }; | }; | |||
| } return_routability_check; | } return_routability_check; | |||
| Figure 1: Return Routability Check Message and Content Type | Figure 1: Return Routability Check Message and Content Type | |||
| Future extensions to the RRC sub-protocol may define new message | Future extensions to the RRC subprotocol may define new message | |||
| types. Implementations MUST be able to parse and understand the | types. Implementations MUST be able to parse and understand the | |||
| three RRC message types defined in this document. In addition, | three RRC message types defined in this document. In addition, | |||
| implementations MUST be able to parse and gracefully ignore messages | implementations MUST be able to parse and gracefully ignore messages | |||
| with an unknown msg_type. | with an unknown msg_type. | |||
| 5. Path Validation Procedure | 5. Path Validation Procedure | |||
| A receiver that observes the peer's address change MUST stop sending | A receiver that observes the peer's address change MUST stop sending | |||
| any buffered application data, or limit the data sent to the | any buffered application data or limit the data sent to the | |||
| unvalidated address to the anti-amplification limit. It then | unvalidated address to the anti-amplification limit. It then | |||
| initiates the return routability check. | initiates the return routability check. | |||
| This document describes two kinds of checks: basic (Section 5.1) and | This document describes two kinds of checks: basic (Section 5.1) and | |||
| enhanced (Section 5.2). The choice of one or the other depends on | enhanced (Section 5.2). The choice of one or the other depends on | |||
| whether the off-path attacker scenario described in Section 8.1.2 is | whether the off-path attacker scenario described in Section 8.1.2 is | |||
| to be considered. (The decision on what strategy to choose depends | to be considered. (The decision on what strategy to choose depends | |||
| mainly on the threat model, but may also be influenced by other | mainly on the threat model but may also be influenced by other | |||
| considerations. Examples of impacting factors include: the need to | considerations. Examples of impacting factors include the need to | |||
| minimise implementation complexity, privacy concerns, and the need to | minimise implementation complexity, privacy concerns, and the need to | |||
| reduce the time it takes to switch path. The choice may be offered | reduce the time it takes to switch path. The choice may be offered | |||
| as a configuration option to the user of the TLS implementation.) | as a configuration option to the user of the TLS implementation.) | |||
| After the path validation procedure is completed, any pending send | After the path validation procedure is complete, any pending send | |||
| operation is resumed to the bound peer address. | operation is resumed to the bound peer address. | |||
| Section 5.3 and Section 5.4 list the requirements for the initiator | Sections 5.3 and 5.4 list the requirements for the initiator and | |||
| and responder roles, broken down per protocol phase. | responder roles, broken down per protocol phase. | |||
| Please note that the presented algorithms are not designed to handle | Please note that the presented algorithms are not designed to handle | |||
| nested rebindings, i.e. rebindings that may occur while a path is | nested rebindings, i.e. rebindings that may occur while a path is | |||
| being validated following a previous rebinding. If this happens | being validated following a previous rebinding. This should rarely | |||
| (which should rarely occur), the path_response message is dropped, | occur, but if it happens, the path_response message is dropped, the | |||
| the address validation times out, and the address will not be | address validation times out, and the address will not be updated. A | |||
| updated. A new path validation will start when new data is received. | new path validation will start when new data is received. | |||
| Also note that in the event of a NAT rebind, the initiator and | Also, note that in the event of a NAT rebind, the initiator and | |||
| responder will have different views of the path: the initiator will | responder will have different views of the path: The initiator will | |||
| see a new path, while the responder will still see the old one. | see a new path, while the responder will still see the old one. | |||
| 5.1. Basic | 5.1. Basic | |||
| The basic return routability check comprises the following steps: | The basic return routability check comprises the following steps: | |||
| 1. The receiver (i.e., the initiator) creates a | 1. The receiver (i.e., the initiator) creates a | |||
| return_routability_check message of type path_challenge and | return_routability_check message of type path_challenge and | |||
| places the unpredictable cookie into the message. | places the unpredictable cookie into the message. | |||
| skipping to change at page 7, line 17 ¶ | skipping to change at line 290 ¶ | |||
| 3. The peer (i.e., the responder) cryptographically verifies the | 3. The peer (i.e., the responder) cryptographically verifies the | |||
| received return_routability_check message of type path_challenge | received return_routability_check message of type path_challenge | |||
| and responds by echoing the cookie value in a | and responds by echoing the cookie value in a | |||
| return_routability_check message of type path_response. | return_routability_check message of type path_response. | |||
| 4. When the initiator receives the return_routability_check message | 4. When the initiator receives the return_routability_check message | |||
| of type path_response and verifies that it contains the sent | of type path_response and verifies that it contains the sent | |||
| cookie, it updates the peer address binding. | cookie, it updates the peer address binding. | |||
| 5. If T expires the peer address binding is not updated. | 5. If T expires, the peer address binding is not updated. | |||
| 5.2. Enhanced | 5.2. Enhanced | |||
| The enhanced return routability check comprises the following steps: | The enhanced return routability check comprises the following steps: | |||
| 1. The receiver (i.e., the initiator) creates a | 1. The receiver (i.e., the initiator) creates a | |||
| return_routability_check message of type path_challenge and | return_routability_check message of type path_challenge and | |||
| places the unpredictable cookie into the message. | places the unpredictable cookie into the message. | |||
| 2. The message is sent to the previously valid address, which | 2. The message is sent to the previously valid address, which | |||
| corresponds to the old path. Additionally, a timer T is started, | corresponds to the old path. Additionally, a timer T is started | |||
| see Section 5.5. | (see Section 5.5). | |||
| 3. If the path is still functional, the peer (i.e., the responder) | 3. If the path is still functional, the peer (i.e., the responder) | |||
| cryptographically verifies the received return_routability_check | cryptographically verifies the received return_routability_check | |||
| message of type path_challenge. The action to be taken depends | message of type path_challenge. The action to be taken depends | |||
| on whether the path through which the message was received | on whether the path through which the message was received | |||
| remains the preferred one. | remains the preferred one. | |||
| * If the path through which the message was received is | * If the path through which the message was received is | |||
| preferred, a return_routability_check message of type | preferred, a return_routability_check message of type | |||
| path_response MUST be returned. (Note that, from the | path_response MUST be returned. (Note that, from the | |||
| skipping to change at page 8, line 11 ¶ | skipping to change at line 330 ¶ | |||
| that this path is no longer the preferred one.) | that this path is no longer the preferred one.) | |||
| In either case, the peer echoes the cookie value in the response. | In either case, the peer echoes the cookie value in the response. | |||
| 4. The initiator receives and verifies that the | 4. The initiator receives and verifies that the | |||
| return_routability_check message contains the previously sent | return_routability_check message contains the previously sent | |||
| cookie. The actions taken by the initiator differ based on the | cookie. The actions taken by the initiator differ based on the | |||
| received message: | received message: | |||
| * When a return_routability_check message of type path_response | * When a return_routability_check message of type path_response | |||
| was received, the initiator MUST continue using the previously | is received, the initiator MUST continue using the previously | |||
| valid address, i.e., no switch to the new path takes place and | valid address, i.e., no switch to the new path takes place and | |||
| the peer address binding is not updated. | the peer address binding is not updated. | |||
| * When a return_routability_check message of type path_drop was | * When a return_routability_check message of type path_drop is | |||
| received, the initiator MUST perform a return routability | received, the initiator MUST perform a return routability | |||
| check on the observed new address, as described in | check on the observed new address, as described in | |||
| Section 5.1. | Section 5.1. | |||
| 5. If T expires the peer address binding is not updated. In this | 5. If T expires, the peer address binding is not updated. In this | |||
| case, the initiator MUST perform a return routability check on | case, the initiator MUST perform a return routability check on | |||
| the observed new address, as described in Section 5.1. | the observed new address, as described in Section 5.1. | |||
| 5.3. Path Challenge Requirements | 5.3. Path Challenge Requirements | |||
| * The initiator MAY send multiple return_routability_check messages | * The initiator MAY send multiple return_routability_check messages | |||
| of type path_challenge to cater for packet loss on the probed | of type path_challenge to cater for packet loss on the probed | |||
| path. | path. | |||
| - Each path_challenge SHOULD go into different transport packets. | - Each path_challenge SHOULD go into different transport packets. | |||
| (Note that the DTLS implementation may not have control over | (Note that the DTLS implementation may not have control over | |||
| the packetization done by the transport layer.) | the packetization done by the transport layer.) | |||
| - The transmission of subsequent path_challenge messages SHOULD | - The transmission of subsequent path_challenge messages SHOULD | |||
| be paced to decrease the chance of loss. | be paced to decrease the chance of loss. | |||
| - Each path_challenge message MUST contain random data. | - Each path_challenge message MUST contain random data. | |||
| - In general, the number of "backup" path_challenge messages | - In general, the number of "backup" path_challenge messages | |||
| depends on the application, since some are more sensitive to | depends on the application, since some are more sensitive than | |||
| latency caused by changes in the path than others. In the | others to latency caused by changes in the path. In the | |||
| absence of application-specific requirements, the initiator can | absence of application-specific requirements, the initiator can | |||
| send a path_challenge message once per round-trip time (RTT), | send a path_challenge message once per round-trip time (RTT), | |||
| up to the anti-amplification limit. | up to the anti-amplification limit. | |||
| * The initiator MAY use padding using the record padding mechanism | * The initiator MAY use padding using the record padding mechanism | |||
| available in DTLS 1.3 (and in DTLS 1.2, when CID is enabled on the | available in DTLS 1.3 (and in DTLS 1.2, when CID is enabled on the | |||
| sending direction) up to the anti-amplification limit to probe if | sending direction) up to the anti-amplification limit to probe if | |||
| the path MTU (PMTU) for the new path is still acceptable. | the Path MTU (PMTU) for the new path is still acceptable. | |||
| 5.4. Path Response/Drop Requirements | 5.4. Path Response/Drop Requirements | |||
| * The responder MUST NOT delay sending an elicited path_response or | * The responder MUST NOT delay sending an elicited path_response or | |||
| path_drop messages. | path_drop messages. | |||
| * The responder MUST send exactly one path_response or path_drop | * The responder MUST send exactly one path_response or path_drop | |||
| message for each valid path_challenge it received. | message for each valid path_challenge it received. | |||
| * The responder MUST send the path_response or the path_drop to the | * The responder MUST send the path_response or the path_drop to the | |||
| skipping to change at page 9, line 34 ¶ | skipping to change at line 399 ¶ | |||
| 5.5. Timer Choice | 5.5. Timer Choice | |||
| When setting T, implementations are cautioned that the new path could | When setting T, implementations are cautioned that the new path could | |||
| have a longer RTT than the original. | have a longer RTT than the original. | |||
| In settings where there is external information about the RTT of the | In settings where there is external information about the RTT of the | |||
| active path (i.e., the old path), implementations SHOULD use T = | active path (i.e., the old path), implementations SHOULD use T = | |||
| 3xRTT. | 3xRTT. | |||
| If an implementation has no way to obtain information regarding the | If an implementation has no way to obtain information regarding the | |||
| RTT of the active path, T SHOULD be set to 1s. | RTT of the active path, T SHOULD be set to 1 second. | |||
| Profiles for specific deployment environments -- for example, | Profiles for specific deployment environments -- for example, | |||
| constrained networks [I-D.ietf-uta-tls13-iot-profile] -- MAY specify | constrained networks [IOT-PROFILE] -- MAY specify a different, more | |||
| a different, more suitable value for T. | suitable value for T. | |||
| 6. Example | 6. Example | |||
| Figure 2 shows an example of a DTLS 1.3 handshake in which a client | Figure 2 shows an example of a DTLS 1.3 handshake in which a client | |||
| and a server successfully negotiate support for both the CID and RRC | and a server successfully negotiate support for both the CID and RRC | |||
| extensions. | extensions. | |||
| Client Server | Client Server | |||
| Key ^ ClientHello | Key ^ ClientHello | |||
| skipping to change at page 10, line 45 ¶ | skipping to change at line 451 ¶ | |||
| derived from [sender]_application_traffic_secret_N. | derived from [sender]_application_traffic_secret_N. | |||
| Figure 2: Message Flow for Full DTLS Handshake | Figure 2: Message Flow for Full DTLS Handshake | |||
| Once a connection has been established, the client and the server | Once a connection has been established, the client and the server | |||
| exchange application payloads protected by DTLS with a unilaterally | exchange application payloads protected by DTLS with a unilaterally | |||
| used CID. In this case, the client is requested to use CID 100 for | used CID. In this case, the client is requested to use CID 100 for | |||
| records sent to the server. | records sent to the server. | |||
| At some point in the communication interaction, the address used by | At some point in the communication interaction, the address used by | |||
| the client changes and, thanks to the CID usage, the security context | the client changes, and thanks to the CID usage, the security context | |||
| to interpret the record is successfully located by the server. | to interpret the record is successfully located by the server. | |||
| However, the server wants to test the reachability of the client at | However, the server wants to test the reachability of the client at | |||
| its new address. | its new address. | |||
| Figure 3 shows the server initiating a "basic" RRC exchange (see | Figure 3 shows the server initiating a basic RRC exchange (see | |||
| Section 5.1) that establishes reachability of the client at the new | Section 5.1) that establishes reachability of the client at the new | |||
| address. | address. | |||
| Client Server | Client Server | |||
| ------ ------ | ------ ------ | |||
| Application Data ========> | Application Data ========> | |||
| <CID=100> | <CID=100> | |||
| Src-IP=A | Src-IP=A | |||
| Dst-IP=Z | Dst-IP=Z | |||
| skipping to change at page 11, line 47 ¶ | skipping to change at line 502 ¶ | |||
| Src-IP=B | Src-IP=B | |||
| Dst-IP=Z | Dst-IP=Z | |||
| <<< IP Address B | <<< IP Address B | |||
| Verified >> | Verified >> | |||
| <======== Application Data | <======== Application Data | |||
| Src-IP=Z | Src-IP=Z | |||
| Dst-IP=B | Dst-IP=B | |||
| Figure 3: "Basic" Return Routability Example | Figure 3: Basic Return Routability Example | |||
| 7. Operational Considerations | 7. Operational Considerations | |||
| 7.1. Logging Anomalous Events | 7.1. Logging Anomalous Events | |||
| Logging of RRC operations at both ends of the protocol can be | Logging of RRC operations at both ends of the protocol can be | |||
| generally useful for the users of an implementation. In particular, | generally useful for the users of an implementation. In particular, | |||
| for security information and event management (SIEM) and | for Security Information and Event Management (SIEM) and | |||
| troubleshooting purposes, it is strongly advised that implementations | troubleshooting purposes, it is strongly advised that implementations | |||
| collect statistics about any unsuccessful RRC operations, as they | collect statistics about any unsuccessful RRC operations, as they | |||
| could represent security-relevant events when they coincide with | could represent security-relevant events when they coincide with | |||
| attempts by an attacker to interfere with the end-to-end path. It is | attempts by an attacker to interfere with the end-to-end path. It is | |||
| also advisable to log instances where multiple responses to a single | also advisable to log instances where multiple responses to a single | |||
| path_challenge are received, as this could suggest an off-path attack | path_challenge are received, as this could suggest an off-path attack | |||
| attempt. | attempt. | |||
| In some cases, the presence of frequent path probes could indicate a | In some cases, the presence of frequent path probes could indicate a | |||
| problem with the stability of the path. This information can be used | problem with the stability of the path. This information can be used | |||
| skipping to change at page 12, line 31 ¶ | skipping to change at line 533 ¶ | |||
| 7.2. Middlebox Interference | 7.2. Middlebox Interference | |||
| Since the DTLS 1.3 encrypted packet's record type is opaque to on- | Since the DTLS 1.3 encrypted packet's record type is opaque to on- | |||
| path observers, RRC messages are immune to middlebox interference | path observers, RRC messages are immune to middlebox interference | |||
| when using DTLS 1.3. In contrast, DTLS 1.2 RRC messages that are not | when using DTLS 1.3. In contrast, DTLS 1.2 RRC messages that are not | |||
| wrapped in the tls12_cid record (e.g., in the server-to-client | wrapped in the tls12_cid record (e.g., in the server-to-client | |||
| direction if the server negotiated a zero-length CID) have the | direction if the server negotiated a zero-length CID) have the | |||
| return_routability_check content type in plain text, making them | return_routability_check content type in plain text, making them | |||
| susceptible to interference (e.g., dropping of path_challenge | susceptible to interference (e.g., dropping of path_challenge | |||
| messages), which would hinder the RRC functionality altogether. | messages), which would hinder the RRC functionality altogether. | |||
| Therefore, when using RRC in DTLS 1.2 and middlebox interference is a | Therefore, when RRC in DTLS 1.2 is used and middlebox interference is | |||
| concern, it is recommended to enable CID in both directions. | a concern, it is recommended to enable CID in both directions. | |||
| 8. Security Considerations | 8. Security Considerations | |||
| Note that the return routability checks do not protect against | Note that the return routability checks do not protect against | |||
| flooding of third-parties if the attacker is on-path, as the attacker | flooding of third parties if the attacker is on-path, as the attacker | |||
| can redirect the return routability checks to the real peer (even if | can redirect the return routability checks to the real peer (even if | |||
| those datagrams are cryptographically authenticated). On-path | those datagrams are cryptographically authenticated). On-path | |||
| adversaries can, in general, pose a harm to connectivity. | adversaries can, in general, pose a harm to connectivity. | |||
| If the RRC challenger reuses a cookie that was previously used in the | If the RRC challenger reuses a cookie that was previously used in the | |||
| same connection and does not implement anti-replay protection (see | same connection and does not implement anti-replay protection (see | |||
| Section 4.5.1 of [RFC9147] and Section 4.1.2.6 of [RFC6347]), an | Section 4.5.1 of [RFC9147] and Section 4.1.2.6 of [RFC6347]), an | |||
| attacker could replay a previously sent path_response message | attacker could replay a previously sent path_response message | |||
| containing the reused cookie to mislead the challenger into switching | containing the reused cookie to mislead the challenger into switching | |||
| to a path of the attacker's choosing. To prevent this, RRC cookies | to a path of the attacker's choosing. To prevent this, RRC cookies | |||
| must be _freshly_ generated using a reliable source of entropy | must be _freshly_ generated using a reliable source of entropy | |||
| [RFC4086]. See Appendix C.1 of [RFC8446] for guidance. | [RFC4086]. See Appendix C.1 of [RFC8446] for guidance. | |||
| 8.1. Attacker Model | 8.1. Attacker Model | |||
| Two classes of attackers are considered, off-path and on-path, with | Two classes of attackers are considered, off-path and on-path, with | |||
| increasing capabilities (see Figure 4) partly following terminology | increasing capabilities (see Figure 4) partly following terminology | |||
| introduced in QUIC (Section 21.1 of [RFC9000]): | introduced in QUIC (Section 21.1 of [RFC9000]): | |||
| * An off-path attacker is not on the original path between the DTLS | * An off-path attacker is not on the original path between the DTLS | |||
| peers, but is able to observe packets on the original path and has | peers, but it is able to observe packets on the original path and | |||
| a faster forwarding path compared to the DTLS peers, which allows | has a faster forwarding path compared to the DTLS peers, which | |||
| it to make copies of the observed packets, race its copies to | allows it to make copies of the observed packets, race its copies | |||
| either peer and consistently win the race. | to either peer, and consistently win the race. | |||
| * An on-path attacker is on the original path between the DTLS peers | * An on-path attacker is on the original path between the DTLS peers | |||
| and is therefore capable, compared to the off-path attacker, to | and is therefore capable, compared to the off-path attacker, to | |||
| also drop and delay records at will. | also drop and delay records at will. | |||
| Note that, in general, attackers cannot craft DTLS records in a way | Note that, in general, attackers cannot craft DTLS records in a way | |||
| that would successfully pass verification, due to the cryptographic | that would successfully pass verification, due to the cryptographic | |||
| protections applied by the DTLS record layer. | protections applied by the DTLS record layer. | |||
| .--> .------------------------------------. <--. | .--> .------------------------------------. <--. | |||
| | | Inspect un-encrypted portions | | | | | Inspect unencrypted portions | | | |||
| | +------------------------------------+ | | | +------------------------------------+ | | |||
| | | Inject | | | | | Inject | | | |||
| off-path +------------------------------------+ | | off-path +------------------------------------+ | | |||
| | | Reorder | | | | | Reorder | | | |||
| | +------------------------------------+ | | | +------------------------------------+ | | |||
| | | Modify un-authenticated portions | on-path | | | Modify unauthenticated portions | on-path | |||
| '--> +------------------------------------+ | | '--> +------------------------------------+ | | |||
| | Delay | | | | Delay | | | |||
| +------------------------------------+ | | +------------------------------------+ | | |||
| | Drop | | | | Drop | | | |||
| +------------------------------------+ | | +------------------------------------+ | | |||
| | Manipulate the packetization layer | | | | Manipulate the packetization layer | | | |||
| '------------------------------------' <--' | '------------------------------------' <--' | |||
| Figure 4: Attacker capabilities | Figure 4: Attacker Capabilities | |||
| RRC is designed to defend against the following attacks: | RRC is designed to defend against the following attacks: | |||
| * On-path and off-path attackers that try to create an amplification | * On-path and off-path attackers that try to create an amplification | |||
| attack by spoofing the source address of the victim | attack by spoofing the source address of the victim | |||
| (Section 8.1.1). | (Section 8.1.1). | |||
| * Off-path attackers that try to put themselves on-path | * Off-path attackers that try to put themselves on-path | |||
| (Section 8.1.2), provided that the enhanced path validation | (Section 8.1.2), provided that the enhanced path validation | |||
| algorithm is used (Section 5.2). | algorithm is used (Section 5.2). | |||
| 8.1.1. Amplification | 8.1.1. Amplification | |||
| Both on-path and off-path attackers can send a packet (either by | Both on-path and off-path attackers can send a packet (either by | |||
| modifying it on the fly, or by copying, injecting, and racing it, | modifying it on the fly or by copying, injecting, and racing it, | |||
| respectively) with the source address modified to that of a victim | respectively) with the source address modified to that of a victim | |||
| host. If the traffic generated by the server in response is larger | host. If the traffic generated by the server in response is larger | |||
| compared to the received packet (e.g., a CoAP server returning an | compared to the received packet (e.g., a CoAP server returning an | |||
| MTU's worth of data from a 20-bytes GET request | MTU's worth of data from a 20-byte GET request [AMP-ATTACKS]), the | |||
| [I-D.irtf-t2trg-amplification-attacks]) the attacker can use the | attacker can use the server as a traffic amplifier toward the victim. | |||
| server as a traffic amplifier toward the victim. | ||||
| 8.1.1.1. Mitigation Strategy | 8.1.1.1. Mitigation Strategy | |||
| When receiving a packet with a known CID that has a source address | When receiving a packet with a known CID that has a source address | |||
| different from the one currently associated with the DTLS connection, | different from the one currently associated with the DTLS connection, | |||
| an RRC-capable endpoint will not send a (potentially large) response | an RRC-capable endpoint will not send a (potentially large) response | |||
| but instead a small path_challenge message to the victim host. Since | but instead a small path_challenge message to the victim host. Since | |||
| the host is not able to decrypt it and generate a valid | the host is not able to decrypt it and generate a valid | |||
| path_response, the address validation fails, which in turn keeps the | path_response, the address validation fails, which in turn keeps the | |||
| original address binding unaltered. | original address binding unaltered. | |||
| Note that in case of an off-path attacker, the original packet still | Note that in the case of an off-path attacker, the original packet | |||
| reaches the intended destination; therefore, an implementation could | still reaches the intended destination; therefore, an implementation | |||
| use a different strategy to mitigate the attack. | could use a different strategy to mitigate the attack. | |||
| 8.1.2. Off-Path Packet Forwarding | 8.1.2. Off-Path Packet Forwarding | |||
| An off-path attacker that can observe packets might forward copies of | An off-path attacker that can observe packets might forward copies of | |||
| genuine packets to endpoints over a different path. If the copied | genuine packets to endpoints over a different path. If the copied | |||
| packet arrives before the genuine packet, this will appear as a path | packet arrives before the genuine packet, this will appear as a path | |||
| change, like in a genuine NAT rebinding occurrence. Any genuine | change, like in a genuine NAT rebinding occurrence. Any genuine | |||
| packet will be discarded as a duplicate. If the attacker is able to | packet will be discarded as a duplicate. If the attacker is able to | |||
| continue forwarding packets, it might be able to cause migration to a | continue forwarding packets, it might be able to cause migration to a | |||
| path via the attacker. This places the attacker on-path, giving it | path via the attacker. This places the attacker on-path, giving it | |||
| skipping to change at page 14, line 50 ¶ | skipping to change at line 645 ¶ | |||
| This style of attack relies on the attacker using a path that has the | This style of attack relies on the attacker using a path that has the | |||
| same or better characteristics (e.g., due to a more favourable | same or better characteristics (e.g., due to a more favourable | |||
| service level agreements) as the direct path between endpoints. The | service level agreements) as the direct path between endpoints. The | |||
| attack is more effective if relatively few packets are sent or if | attack is more effective if relatively few packets are sent or if | |||
| packet loss coincides with the attempted attack. | packet loss coincides with the attempted attack. | |||
| A data packet received on the original path that increases the | A data packet received on the original path that increases the | |||
| maximum received packet number will cause the endpoint to move back | maximum received packet number will cause the endpoint to move back | |||
| to that path. Therefore, eliciting packets on this path increases | to that path. Therefore, eliciting packets on this path increases | |||
| the likelihood that the attack is unsuccessful. Note however that, | the likelihood that the attack is unsuccessful. However, note that, | |||
| unlike QUIC, DTLS has no "non-probing" packets so this would require | unlike QUIC, DTLS has no "non-probing" packets so this would require | |||
| application specific mechanisms. | application-specific mechanisms. | |||
| 8.1.2.1. Mitigation Strategy | 8.1.2.1. Mitigation Strategy | |||
| Figure 5 illustrates the case where a receiver receives a packet with | Figure 5 illustrates the case where a receiver receives a packet with | |||
| a new source address. In order to determine that this path change | a new source address. In order to determine that this path change | |||
| was not triggered by an off-path attacker, the receiver will send an | was not triggered by an off-path attacker, the receiver will send an | |||
| RRC message of type path_challenge (1) on the old path. | RRC message of type path_challenge (1) on the old path. | |||
| new old | new old | |||
| path .----------. path | path .----------. path | |||
| skipping to change at page 16, line 26 ¶ | skipping to change at line 709 ¶ | |||
| '----|-+-|-----------------------' | '----|-+-|-----------------------' | |||
| | | | . | | | | . | |||
| | | 2 path- . | | | 2 path- . | |||
| | | | challenge . | | | | challenge . | |||
| | | | .----------. . | | | | .----------. . | |||
| | | '-->| | . | | | '-->| | . | |||
| | '-----+ Sender +.....' | | '-----+ Sender +.....' | |||
| '-------+ | | '-------+ | | |||
| '----------' | '----------' | |||
| Figure 6: Old path is dead | Figure 6: Old Path Is Dead | |||
| Case 2: The old path is alive but not preferred. | Case 2: The old path is alive but not preferred. | |||
| This case is shown in Figure 7 whereby the sender replies with a | This case is shown in Figure 7 whereby the sender replies with a | |||
| path_drop message (2) on the old path. This triggers the receiver to | path_drop message (2) on the old path. This triggers the receiver to | |||
| send a path_challenge (3) on the new path. The sender will reply | send a path_challenge (3) on the new path. The sender will reply | |||
| with a path_response (4) on the new path, thus providing confirmation | with a path_response (4) on the new path, thus providing confirmation | |||
| for the path migration. | for the path migration. | |||
| new old | new old | |||
| skipping to change at page 17, line 26 ¶ | skipping to change at line 740 ¶ | |||
| '-----------|---|--' '----|-+-|---------' | '-----------|---|--' '----|-+-|---------' | |||
| | | | | | | | | | | | | | | |||
| | | 3 path- | | 2 path- | | | 3 path- | | 2 path- | |||
| | | | challenge | | | drop | | | | challenge | | | drop | |||
| | | | .----------. | | | | | | | .----------. | | | | |||
| | | '-->| |<--' | | | | | '-->| |<--' | | | |||
| | '-----+ Sender +-----' | | | '-----+ Sender +-----' | | |||
| '-------+ +-------' | '-------+ +-------' | |||
| '----------' | '----------' | |||
| Figure 7: Old path is not preferred | Figure 7: Old Path Is Not Preferred | |||
| Case 3: The old path is alive and preferred. | Case 3: The old path is alive and preferred. | |||
| This is most likely the result of an off-path attacker trying to | This is most likely the result of an off-path attacker trying to | |||
| place itself on path. The receiver sends a path_challenge on the old | place itself on-path. As shown in Figure 8, the receiver sends a | |||
| path and the sender replies with a path_response (2) on the old path. | path_challenge on the old path, and the sender replies with a | |||
| The interaction is shown in Figure 8. This results in the connection | path_response (2) on the old path. This results in the connection | |||
| not being migrated to the new path, thus thwarting the attack. | not being migrated to the new path, thus thwarting the attack. | |||
| new old | new old | |||
| path .----------. path | path .----------. path | |||
| | +-------. | | +-------. | |||
| .-----+ Receiver +-----. | | .-----+ Receiver +-----. | | |||
| | | |<--. | | | | | |<--. | | | |||
| | '----------' | | | | | '----------' | | | | |||
| | | | 1 path- | | | | 1 path- | |||
| | | | | challenge | | | | | challenge | |||
| skipping to change at page 18, line 27 ¶ | skipping to change at line 772 ¶ | |||
| '------+---' | | | | '------+---' | | | | |||
| | | | | | | | | | | |||
| | path- 2 | | | | path- 2 | | | |||
| | response | | | | | response | | | | |||
| | .----------. | | | | | .----------. | | | | |||
| | | +---' | | | | | +---' | | | |||
| '-----+ Sender +-----' | | '-----+ Sender +-----' | | |||
| | |<------' | | |<------' | |||
| '----------' | '----------' | |||
| Figure 8: Old path is preferred | Figure 8: Old Path Is Preferred | |||
| Note that this defense is imperfect, but this is not considered a | Note that this defense is imperfect, but this is not considered a | |||
| serious problem. If the path via the attacker is reliably faster | serious problem. If the path via the attacker is reliably faster | |||
| than the old path despite multiple attempts to use that old path, it | than the old path despite multiple attempts to use that old path, it | |||
| is not possible to distinguish between an attack and an improvement | is not possible to distinguish between an attack and an improvement | |||
| in routing. | in routing. | |||
| An endpoint could also use heuristics to improve detection of this | An endpoint could also use heuristics to improve detection of this | |||
| style of attack. For instance, NAT rebinding is improbable if | style of attack. For instance, NAT rebinding is improbable if | |||
| packets were recently received on the old path. Endpoints can also | packets were recently received on the old path. Endpoints can also | |||
| look for duplicated packets. Conversely, a change in connection ID | look for duplicated packets. Conversely, a change in CID is more | |||
| is more likely to indicate an intentional migration rather than an | likely to indicate an intentional migration rather than an attack. | |||
| attack. Note that changes in connection IDs are supported in DTLS | Note that changes in CIDs are supported in DTLS 1.3 but not in DTLS | |||
| 1.3 but not in DTLS 1.2. | 1.2. | |||
| 9. Privacy Considerations | 9. Privacy Considerations | |||
| When using DTLS 1.3, peers SHOULD avoid using the same CID on | When using DTLS 1.3, peers SHOULD avoid using the same CID on | |||
| multiple network paths, in particular when initiating connection | multiple network paths, in particular when initiating connection | |||
| migration or when probing a new network path, as described in | migration or when probing a new network path, as described in | |||
| Section 5, as an adversary can otherwise correlate the communication | Section 5, as an adversary can otherwise correlate the communication | |||
| interaction across those different paths. DTLS 1.3 provides | interaction across those different paths. DTLS 1.3 provides | |||
| mechanisms to ensure that a new CID can always be used. In general, | mechanisms to ensure that a new CID can always be used. In general, | |||
| an endpoint should proactively send a RequestConnectionId message to | an endpoint should proactively send a RequestConnectionId message to | |||
| ask for new CIDs as soon as the pool of spare CIDs is depleted (or | ask for new CIDs as soon as the pool of spare CIDs is depleted (or | |||
| goes below a threshold). Also, in case a peer might have exhausted | goes below a threshold). Also, in case a peer might have exhausted | |||
| available CIDs, a migrating endpoint could include NewConnectionId in | available CIDs, a migrating endpoint could include NewConnectionId in | |||
| packets sent on the new path to make sure that the subsequent path | packets sent on the new path to make sure that the subsequent path | |||
| validation can use fresh CIDs. | validation can use fresh CIDs. | |||
| Note that DTLS 1.2 does not offer the ability to request new CIDs | Note that DTLS 1.2 does not offer the ability to request new CIDs | |||
| during the session lifetime since CIDs have the same life-span of the | during the session lifetime since CIDs have the same lifespan of the | |||
| connection. Therefore, deployments that use DTLS in multihoming | connection. Therefore, deployments that use DTLS in multihoming | |||
| environments SHOULD refuse to use CIDs with DTLS 1.2 and switch to | environments SHOULD refuse to use CIDs with DTLS 1.2 and switch to | |||
| DTLS 1.3 if the correlation privacy threat is a concern. | DTLS 1.3 if the correlation privacy threat is a concern. | |||
| 10. IANA Considerations | 10. IANA Considerations | |||
| // RFC Editor: please replace RFCthis with this RFC number and remove | ||||
| // this note. | ||||
| 10.1. New TLS ContentType | 10.1. New TLS ContentType | |||
| IANA is requested to allocate an entry in the TLS ContentType | IANA has allocated an entry in the "TLS ContentType" registry within | |||
| registry within the "Transport Layer Security (TLS) Parameters" | the "Transport Layer Security (TLS) Parameters" registry group | |||
| registry group [IANA.tls-parameters] for the | [IANA.tls-parameters] for the return_routability_check (27) message | |||
| return_routability_check(TBD2) message defined in this document. | defined in this document. IANA set the DTLS_OK column to "Y" and | |||
| IANA is requested to set the DTLS_OK column to Y and to add the | added the following note to the registry: | |||
| following note prior to the table: | ||||
| NOTE: The return_routability_check content type is only applicable | | Note: The return_routability_check content type is only applicable | |||
| to DTLS 1.2 and 1.3. | | to DTLS 1.2 and 1.3. | |||
| 10.2. New TLS ExtensionType | 10.2. New TLS ExtensionType | |||
| IANA is requested to allocate the extension code point (TBD1) for the | IANA has allocated the extension code point (61) for rrc in the "TLS | |||
| rrc extension to the TLS ExtensionType Values registry as described | ExtensionType Values" registry as described in Table 1. | |||
| in Table 1. | ||||
| +=====+=========+===+===========+=============+===========+=======+ | +=====+=========+===+===========+=============+===========+=======+ | |||
| |Value|Extension|TLS| DTLS-Only | Recommended | Reference |Comment| | |Value|Extension|TLS| DTLS-Only | Recommended | Reference |Comment| | |||
| | |Name |1.3| | | | | | | |Name |1.3| | | | | | |||
| +=====+=========+===+===========+=============+===========+=======+ | +=====+=========+===+===========+=============+===========+=======+ | |||
| |TBD1 |rrc |CH,| Y | N | RFCthis | | | |61 |rrc |CH,| Y | N | RFC 9853 | | | |||
| | | |SH | | | | | | | | |SH | | | | | | |||
| +-----+---------+---+-----------+-------------+-----------+-------+ | +-----+---------+---+-----------+-------------+-----------+-------+ | |||
| Table 1: rrc entry in the TLS ExtensionType Values registry | Table 1: New Entry in the TLS ExtensionType Values Registry | |||
| 10.3. New "TLS RRC Message Type" Registry | 10.3. New "TLS RRC Message Type" Registry | |||
| IANA is requested to create a new registry "TLS RRC Message Types" | IANA has created the "TLS RRC Message Types" registry within the | |||
| within the Transport Layer Security (TLS) Parameters registry group | "Transport Layer Security (TLS) Parameters" registry group | |||
| [IANA.tls-parameters]. This registry will be administered under the | [IANA.tls-parameters]. This registration procedure is "Expert | |||
| "Expert Review" policy (Section 4.5 of [RFC8126]). | Review" (Section 4.5 of [RFC8126]). | |||
| Follow the procedures in Section 16 of [I-D.ietf-tls-rfc8447bis] to | To submit registration requests, follow the procedures in Section 16 | |||
| submit registration requests. | of [RFC9847]. | |||
| Each entry in the registry must include the following fields: | Each entry in the registry must include the following fields: | |||
| Value: | Value: | |||
| A (decimal) number in the range 0 to 253 | A (decimal) number in the range 0 to 253. | |||
| Description: | Description: | |||
| A brief description of the RRC message | A brief description of the RRC message. | |||
| DTLS-Only: | DTLS-Only: | |||
| Whether the message applies only to DTLS. Since RRC is only | Indication of whether the message only applies to DTLS. Since RRC | |||
| available in DTLS, this column will be set to Y for all the | is only available in DTLS, this column is set to "Y" for all the | |||
| current entries in this registry. Future work may define new RRC | initial entries in this registry. Future work may define new RRC | |||
| Message Types that also apply to TLS. | message types that also apply to TLS. | |||
| Recommended: | Recommended: | |||
| Whether the message is recommended for implementations to support. | Indication of whether the message is recommended for | |||
| The semantics for this field is defined in Section 5 of [RFC8447] | implementations to support. The semantics for this field is | |||
| and updated in Section 3 of [I-D.ietf-tls-rfc8447bis] | defined in Section 5 of [RFC8447] and updated in Section 3 of | |||
| [RFC9847]. | ||||
| Reference: | Reference: | |||
| A reference to a publicly available specification for the value | A reference to a publicly available specification for the value. | |||
| Comment: | Comment: | |||
| Any relevant notes or comments that relate to this entry | Any relevant notes or comments that relate to this entry. | |||
| The initial state of this sub-registry is as follows: | Table 2 shows the initial contents of this registry: | |||
| +=======+================+=========+=============+=========+=======+ | +=======+================+=========+=============+=========+=======+ | |||
| |Value | Description |DTLS-Only| Recommended |Reference|Comment| | |Value | Description |DTLS-Only| Recommended |Reference|Comment| | |||
| +=======+================+=========+=============+=========+=======+ | +=======+================+=========+=============+=========+=======+ | |||
| |0 | path_challenge |Y | Y |RFCthis | | | |0 | path_challenge |Y | Y |RFC 9853 | | | |||
| +-------+----------------+---------+-------------+---------+-------+ | +-------+----------------+---------+-------------+---------+-------+ | |||
| |1 | path_response |Y | Y |RFCthis | | | |1 | path_response |Y | Y |RFC 9853 | | | |||
| +-------+----------------+---------+-------------+---------+-------+ | +-------+----------------+---------+-------------+---------+-------+ | |||
| |2 | path_drop |Y | Y |RFCthis | | | |2 | path_drop |Y | Y |RFC 9853 | | | |||
| +-------+----------------+---------+-------------+---------+-------+ | +-------+----------------+---------+-------------+---------+-------+ | |||
| |3-253 | Unassigned | | | | | | |3-253 | Unassigned | | | | | | |||
| +-------+----------------+---------+-------------+---------+-------+ | +-------+----------------+---------+-------------+---------+-------+ | |||
| |254-255| Reserved for |Y | |RFCthis | | | |254-255| Reserved for |Y | |RFC 9853 | | | |||
| | | Private Use | | | | | | | | Private Use | | | | | | |||
| +-------+----------------+---------+-------------+---------+-------+ | +-------+----------------+---------+-------------+---------+-------+ | |||
| Table 2: Initial Entries in TLS RRC Message Type registry | Table 2: Initial Entries in TLS RRC Message Type Registry | |||
| IANA is requested to add the following note for additional | IANA added the following note to provide additional information | |||
| information regarding the use of RRC message codepoints in | regarding the use of RRC message codepoints in experiments: | |||
| experiments: | ||||
| Note: As specified in [RFC8126], assignments made in the Private Use | | Note: As specified in [RFC8126], assignments made in the Private | |||
| space are not generally useful for broad interoperability. Those | | Use space are not generally useful for broad interoperability. | |||
| making use of the Private Use range are responsible for ensuring | | Those making use of the Private Use range are responsible for | |||
| that no conflicts occur within the intended scope of use. For | | ensuring that no conflicts occur within the intended scope of use. | |||
| widespread experiments, provisional registrations (Section 4.13 of | | For widespread experiments, provisional registrations | |||
| [RFC8126]) are available. | | (Section 4.13 of [RFC8126]) are available. | |||
| 10.3.1. Designated Expert Instructions | 10.3.1. Designated Expert Instructions | |||
| To enable a broadly informed review of registration decisions, it is | To enable a broadly informed review of registration decisions, it is | |||
| recommended that multiple Designated Experts be appointed who are | recommended that multiple designated experts be appointed to | |||
| able to represent the perspectives of both the transport and security | represent the perspectives of both the transport and security areas. | |||
| areas. | ||||
| In cases where a registration decision could be perceived as creating | In cases where a registration decision could be perceived as creating | |||
| a conflict of interest for a particular Expert, that Expert SHOULD | a conflict of interest for a particular expert, that expert SHOULD | |||
| defer to the judgment of the other Experts. | defer to the judgment of the other experts. | |||
| 11. Acknowledgments | ||||
| We would like to thank Colin Perkins, Deb Cooley, Eric Rescorla, Éric | ||||
| Vyncke, Erik Kline, Hanno Becker, Hanno Böck, Joe Clarke, Manuel | ||||
| Pégourié-Gonnard, Marco Tiloca, Martin Thomson, Mike Bishop, Mike | ||||
| Ounsworth, Mohamed Boucadair, Mohit Sahni, Rich Salz, Russ Housley, | ||||
| Sean Turner, and Yaron Sheffer for their input to this document. | ||||
| 12. References | 11. References | |||
| 12.1. Normative References | ||||
| [I-D.ietf-tls-rfc8447bis] | 11.1. Normative References | |||
| Salowey, J. A. and S. Turner, "IANA Registry Updates for | ||||
| TLS and DTLS", Work in Progress, Internet-Draft, draft- | ||||
| ietf-tls-rfc8447bis-14, 16 June 2025, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-tls- | ||||
| rfc8447bis-14>. | ||||
| [IANA.tls-parameters] | [IANA.tls-parameters] | |||
| IANA, "Transport Layer Security (TLS) Parameters", | IANA, "Transport Layer Security (TLS) Parameters", | |||
| <https://www.iana.org/assignments/tls-parameters>. | <https://www.iana.org/assignments/tls-parameters>. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/rfc/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC6347] Rescorla, E. and N. Modadugu, "Datagram Transport Layer | [RFC6347] Rescorla, E. and N. Modadugu, "Datagram Transport Layer | |||
| Security Version 1.2", RFC 6347, DOI 10.17487/RFC6347, | Security Version 1.2", RFC 6347, DOI 10.17487/RFC6347, | |||
| January 2012, <https://www.rfc-editor.org/rfc/rfc6347>. | January 2012, <https://www.rfc-editor.org/info/rfc6347>. | |||
| [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
| Writing an IANA Considerations Section in RFCs", BCP 26, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
| RFC 8126, DOI 10.17487/RFC8126, June 2017, | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
| <https://www.rfc-editor.org/rfc/rfc8126>. | <https://www.rfc-editor.org/info/rfc8126>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/rfc/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
| Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
| <https://www.rfc-editor.org/rfc/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
| [RFC8447] Salowey, J. and S. Turner, "IANA Registry Updates for TLS | [RFC8447] Salowey, J. and S. Turner, "IANA Registry Updates for TLS | |||
| and DTLS", RFC 8447, DOI 10.17487/RFC8447, August 2018, | and DTLS", RFC 8447, DOI 10.17487/RFC8447, August 2018, | |||
| <https://www.rfc-editor.org/rfc/rfc8447>. | <https://www.rfc-editor.org/info/rfc8447>. | |||
| [RFC9146] Rescorla, E., Ed., Tschofenig, H., Ed., Fossati, T., and | [RFC9146] Rescorla, E., Ed., Tschofenig, H., Ed., Fossati, T., and | |||
| A. Kraus, "Connection Identifier for DTLS 1.2", RFC 9146, | A. Kraus, "Connection Identifier for DTLS 1.2", RFC 9146, | |||
| DOI 10.17487/RFC9146, March 2022, | DOI 10.17487/RFC9146, March 2022, | |||
| <https://www.rfc-editor.org/rfc/rfc9146>. | <https://www.rfc-editor.org/info/rfc9146>. | |||
| [RFC9147] Rescorla, E., Tschofenig, H., and N. Modadugu, "The | [RFC9147] Rescorla, E., Tschofenig, H., and N. Modadugu, "The | |||
| Datagram Transport Layer Security (DTLS) Protocol Version | Datagram Transport Layer Security (DTLS) Protocol Version | |||
| 1.3", RFC 9147, DOI 10.17487/RFC9147, April 2022, | 1.3", RFC 9147, DOI 10.17487/RFC9147, April 2022, | |||
| <https://www.rfc-editor.org/rfc/rfc9147>. | <https://www.rfc-editor.org/info/rfc9147>. | |||
| 12.2. Informative References | [RFC9847] Salowey, J. and S. Turner, "IANA Registry Updates for TLS | |||
| and DTLS", RFC 9847, DOI 10.17487/RFC9847, December 2025, | ||||
| <https://www.rfc-editor.org/info/rfc9847>. | ||||
| [I-D.ietf-uta-tls13-iot-profile] | 11.2. Informative References | |||
| Tschofenig, H., Fossati, T., and M. Richardson, "TLS/DTLS | ||||
| 1.3 Profiles for the Internet of Things", Work in | ||||
| Progress, Internet-Draft, draft-ietf-uta-tls13-iot- | ||||
| profile-14, 5 May 2025, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-uta- | ||||
| tls13-iot-profile-14>. | ||||
| [I-D.irtf-t2trg-amplification-attacks] | [AMP-ATTACKS] | |||
| Mattsson, J. P., Selander, G., and C. Amsüss, | Preuß Mattsson, J., Selander, G., and C. Amsüss, | |||
| "Amplification Attacks Using the Constrained Application | "Amplification Attacks Using the Constrained Application | |||
| Protocol (CoAP)", Work in Progress, Internet-Draft, draft- | Protocol (CoAP)", Work in Progress, Internet-Draft, draft- | |||
| irtf-t2trg-amplification-attacks-05, 18 June 2025, | irtf-t2trg-amplification-attacks-05, 18 June 2025, | |||
| <https://datatracker.ietf.org/doc/html/draft-irtf-t2trg- | <https://datatracker.ietf.org/doc/html/draft-irtf-t2trg- | |||
| amplification-attacks-05>. | amplification-attacks-05>. | |||
| [IOT-PROFILE] | ||||
| Tschofenig, H., Fossati, T., and M. Richardson, "TLS/DTLS | ||||
| 1.3 Profiles for the Internet of Things", Work in | ||||
| Progress, Internet-Draft, draft-ietf-uta-tls13-iot- | ||||
| profile-18, 3 February 2026, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-uta- | ||||
| tls13-iot-profile-18>. | ||||
| [RFC4086] Eastlake 3rd, D., Schiller, J., and S. Crocker, | [RFC4086] Eastlake 3rd, D., Schiller, J., and S. Crocker, | |||
| "Randomness Requirements for Security", BCP 106, RFC 4086, | "Randomness Requirements for Security", BCP 106, RFC 4086, | |||
| DOI 10.17487/RFC4086, June 2005, | DOI 10.17487/RFC4086, June 2005, | |||
| <https://www.rfc-editor.org/rfc/rfc4086>. | <https://www.rfc-editor.org/info/rfc4086>. | |||
| [RFC9000] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | [RFC9000] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | |||
| Multiplexed and Secure Transport", RFC 9000, | Multiplexed and Secure Transport", RFC 9000, | |||
| DOI 10.17487/RFC9000, May 2021, | DOI 10.17487/RFC9000, May 2021, | |||
| <https://www.rfc-editor.org/rfc/rfc9000>. | <https://www.rfc-editor.org/info/rfc9000>. | |||
| [RFC9175] Amsüss, C., Preuß Mattsson, J., and G. Selander, | [RFC9175] Amsüss, C., Preuß Mattsson, J., and G. Selander, | |||
| "Constrained Application Protocol (CoAP): Echo, Request- | "Constrained Application Protocol (CoAP): Echo, Request- | |||
| Tag, and Token Processing", RFC 9175, | Tag, and Token Processing", RFC 9175, | |||
| DOI 10.17487/RFC9175, February 2022, | DOI 10.17487/RFC9175, February 2022, | |||
| <https://www.rfc-editor.org/rfc/rfc9175>. | <https://www.rfc-editor.org/info/rfc9175>. | |||
| Acknowledgments | ||||
| We would like to thank Colin Perkins, Deb Cooley, Eric Rescorla, Éric | ||||
| Vyncke, Erik Kline, Hanno Becker, Hanno Böck, Joe Clarke, Manuel | ||||
| Pégourié-Gonnard, Marco Tiloca, Martin Thomson, Mike Bishop, Mike | ||||
| Ounsworth, Mohamed Boucadair, Mohit Sahni, Rich Salz, Russ Housley, | ||||
| Sean Turner, and Yaron Sheffer for their input to this document. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Hannes Tschofenig (editor) | Hannes Tschofenig (editor) | |||
| University of Applied Sciences Bonn-Rhein-Sieg | University of Applied Sciences Bonn-Rhein-Sieg | |||
| Email: Hannes.Tschofenig@gmx.net | Email: Hannes.Tschofenig@gmx.net | |||
| Achim Kraus | Achim Kraus | |||
| Email: achimkraus@gmx.net | Email: achimkraus@gmx.net | |||
| End of changes. 100 change blocks. | ||||
| 254 lines changed or deleted | 234 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||