| < draft-ietf-tls-dtls-rrc-00.txt | draft-ietf-tls-dtls-rrc-01.txt > | |||
|---|---|---|---|---|
| TLS H. Tschofenig, Ed. | TLS H. Tschofenig, Ed. | |||
| Internet-Draft T. Fossati | Internet-Draft T. Fossati | |||
| Updates: 6347 (if approved) Arm Limited | Updates: 6347 (if approved) Arm Limited | |||
| Intended status: Standards Track 9 June 2021 | Intended status: Standards Track 25 October 2021 | |||
| Expires: 11 December 2021 | Expires: 28 April 2022 | |||
| Return Routability Check for DTLS 1.2 and DTLS 1.3 | Return Routability Check for DTLS 1.2 and DTLS 1.3 | |||
| draft-ietf-tls-dtls-rrc-00 | draft-ietf-tls-dtls-rrc-01 | |||
| Abstract | Abstract | |||
| This document specifies a return routability check for use in context | This document specifies a return routability check for use in context | |||
| of the Connection ID (CID) construct for the Datagram Transport Layer | of the Connection ID (CID) construct for the Datagram Transport Layer | |||
| Security (DTLS) protocol versions 1.2 and 1.3. | Security (DTLS) protocol versions 1.2 and 1.3. | |||
| Discussion Venues | Discussion Venues | |||
| This note is to be removed before publishing as an RFC. | This note is to be removed before publishing as an RFC. | |||
| skipping to change at page 1, line 44 ¶ | skipping to change at page 1, line 44 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on 11 December 2021. | This Internet-Draft will expire on 28 April 2022. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 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 (https://trustee.ietf.org/ | |||
| license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
| Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
| skipping to change at page 2, line 28 ¶ | skipping to change at page 2, line 28 ¶ | |||
| modifications of such material outside the IETF Standards Process. | modifications of such material outside the IETF Standards Process. | |||
| Without obtaining an adequate license from the person(s) controlling | Without obtaining an adequate license from the person(s) controlling | |||
| the copyright in such materials, this document may not be modified | the copyright in such materials, this document may not be modified | |||
| outside the IETF Standards Process, and derivative works of it may | outside the IETF Standards Process, and derivative works of it may | |||
| not be created outside the IETF Standards Process, except to format | not be created outside the IETF Standards Process, except to format | |||
| it for publication as an RFC or to translate it into languages other | it for publication as an RFC or to translate it into languages other | |||
| than English. | than English. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 2. Conventions and Terminology . . . . . . . . . . . . . . . . . 3 | 2. Conventions and Terminology . . . . . . . . . . . . . . . . . 3 | |||
| 3. The Return Routability Check Message . . . . . . . . . . . . 4 | 3. RRC Extension . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 4. Example . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 4. The Return Routability Check Message . . . . . . . . . . . . 4 | |||
| 5. Security and Privacy Considerations . . . . . . . . . . . . . 7 | 5. Example . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 7 | 6. Security and Privacy Considerations . . . . . . . . . . . . . 8 | |||
| 7. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 7 | 8. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 9. Normative References . . . . . . . . . . . . . . . . . . . . 7 | 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| Appendix A. History . . . . . . . . . . . . . . . . . . . . . . 8 | 10. Normative References . . . . . . . . . . . . . . . . . . . . 8 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 8 | Appendix A. History . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 10 | ||||
| 1. Introduction | 1. Introduction | |||
| In "classical" DTLS, selecting a security context of an incoming DTLS | In "classical" DTLS, selecting a security context of an incoming DTLS | |||
| record is accomplished with the help of the 5-tuple, i.e. source IP | record is accomplished with the help of the 5-tuple, i.e. source IP | |||
| address, source port, transport protocol, destination IP address, and | address, source port, transport protocol, destination IP address, and | |||
| destination port. Changes to this 5 tuple can happen for a variety | destination port. Changes to this 5 tuple can happen for a variety | |||
| reasons over the lifetime of the DTLS session. In the IoT context, | reasons over the lifetime of the DTLS session. In the IoT context, | |||
| NAT rebinding is common with sleepy devices. Other examples include | NAT rebinding is common with sleepy devices. Other examples include | |||
| end host mobility and multi-homing. Without CID, if the source IP | end host mobility and multi-homing. Without CID, if the source IP | |||
| skipping to change at page 4, line 10 ¶ | skipping to change at page 3, line 44 ¶ | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
| BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| This document assumes familiarity with the CID format and protocol | This document assumes familiarity with the CID format and protocol | |||
| defined for DTLS 1.2 [I-D.ietf-tls-dtls-connection-id] and for DTLS | defined for DTLS 1.2 [I-D.ietf-tls-dtls-connection-id] and for DTLS | |||
| 1.3 [I-D.ietf-tls-dtls13]. The presentation language used in this | 1.3 [I-D.ietf-tls-dtls13]. The presentation language used in this | |||
| document is described in Section 4 of [RFC8446]. | document is described in Section 4 of [RFC8446]. | |||
| 3. The Return Routability Check Message | 3. RRC Extension | |||
| This specification uses the tls_flags extension defined in | ||||
| [I-D.ietf-tls-tlsflags] to allow a client and a server to negotiate | ||||
| support for this extension. | ||||
| The RRC flag is assigned the value (TBD1) and is used in the | ||||
| ClientHello (CH) and the ServerHello (SH). | ||||
| 4. The Return Routability Check Message | ||||
| When a record with CID is received that has the source address of the | When a record with CID is received that has the source address of the | |||
| enclosing UDP datagram different from the one previously associated | enclosing UDP datagram different from the one previously associated | |||
| with that CID, the receiver MUST NOT update its view of the peer's IP | with that CID, the receiver MUST NOT update its view of the peer's IP | |||
| address and port number with the source specified in the UDP datagram | address and port number with the source specified in the UDP datagram | |||
| before cryptographically validating the enclosed record(s) but | before cryptographically validating the enclosed record(s) but | |||
| instead perform a return routability check. | instead perform a return routability check. | |||
| 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), | |||
| heartbeat(24), /* RFC 6520 */ | heartbeat(24), /* RFC 6520 */ | |||
| return_routability_check(TBD), /* NEW */ | return_routability_check(TBD), /* NEW */ | |||
| (255) | (255) | |||
| } ContentType; | } ContentType; | |||
| struct { | uint64 Cookie; | |||
| opaque cookie<1..2^16-1>; | ||||
| } Cookie; | enum { | |||
| path_challenge(0), | ||||
| path_response(1), | ||||
| reserved(2..255) | ||||
| } rrc_msg_type; | ||||
| struct { | struct { | |||
| Cookie cookie; | rrc_msg_type msg_type; | |||
| select (return_routability_check.msg_type) { | ||||
| case path_challenge: Cookie; | ||||
| case path_response: Cookie; | ||||
| }; | ||||
| } return_routability_check; | } return_routability_check; | |||
| The newly introduced return_routability_check message contains a | The newly introduced return_routability_check message contains a | |||
| cookie. The semantic of the cookie is similar to the cookie used in | cookie. The cookie is a 8-byte field containing arbitrary data. | |||
| the HelloRetryRequest message defined in [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. | |||
| The receiver that observes the peer's address and or port update MUST | The receiver that observes the peer's address and or port update MUST | |||
| stop sending any buffered application data (or limit the sending rate | stop sending any buffered application data (or limit the data sent to | |||
| to a TBD threshold) and initiate the return routability check that | a TBD threshold) and initiate the return routability check that | |||
| proceeds as follows: | proceeds as follows: | |||
| 1. A cookie is placed in the return_routability_check message; | 1. A cookie is placed in a return_routability_check message of type | |||
| path_challenge; | ||||
| 2. The message is sent to the observed new address and a timeout T | 2. The message is sent to the observed new address and a timeout T | |||
| is started; | is started; | |||
| 3. The peer endpoint, after successfully verifying the received | 3. The peer endpoint, after successfully verifying the received | |||
| return_routability_check message echoes it back; | return_routability_check message echoes the cookie value in a | |||
| return_routability_check message of type path_response; | ||||
| 4. When the initiator receives and verifies the | 4. When the initiator receives and verifies the | |||
| return_routability_check message, it updates the peer address | return_routability_check message contains the sent cookie, it | |||
| binding; | updates the peer address binding; | |||
| 5. If T expires, or the address confirmation fails, the peer address | 5. If T expires, or the address confirmation fails, the peer address | |||
| binding is not updated. | binding is not updated. | |||
| After this point, any pending send operation is resumed to the bound | After this point, any pending send operation is resumed to the bound | |||
| peer address. | peer address. | |||
| 4. Example | 5. Example | |||
| The example shown in Figure 1 illustrates a client and a server | The example TLS 1.3 handshake shown in Figure 1 shows a client and a | |||
| exchanging application payloads protected by DTLS with an | server negotiating the support for CID and for the RRC extension. | |||
| unilaterally used CIDs. At some point in the communication | ||||
| interaction the IP address used by the client changes and, thanks to | Client Server | |||
| the CID usage, the security context to interpret the record is | ||||
| successfully located by the server. However, the server wants to | Key ^ ClientHello | |||
| test the reachability of the client at his new IP address, to avoid | Exch | + key_share | |||
| being abused (e.g., as an amplifier) by an attacker impersonating the | | + signature_algorithms | |||
| client. | | + tls_flags (RRC) | |||
| v + connection_id=empty | ||||
| --------> | ||||
| ServerHello ^ Key | ||||
| + key_share | Exch | ||||
| + connection_id=100 | | ||||
| + tls_flags (RRC) v | ||||
| {EncryptedExtensions} ^ Server | ||||
| {CertificateRequest} v Params | ||||
| {Certificate} ^ | ||||
| {CertificateVerify} | Auth | ||||
| <-------- {Finished} v | ||||
| ^ {Certificate} | ||||
| Auth | {CertificateVerify} | ||||
| v {Finished} --------> | ||||
| [Application Data] <-------> [Application Data] | ||||
| + Indicates noteworthy extensions sent in the | ||||
| previously noted message. | ||||
| * Indicates optional or situation-dependent | ||||
| messages/extensions that are not always sent. | ||||
| {} Indicates messages protected using keys | ||||
| derived from a [sender]_handshake_traffic_secret. | ||||
| [] Indicates messages protected using keys | ||||
| derived from [sender]_application_traffic_secret_N. | ||||
| Figure 1: Message Flow for Full TLS Handshake | ||||
| Once a connection has been established the client and the server | ||||
| exchange application payloads protected by DTLS with an unilaterally | ||||
| used CIDs. In our case, the client is requested to use CID 100 for | ||||
| records sent to the server. | ||||
| At some point in the communication interaction the IP address used by | ||||
| the client changes and, thanks to the CID usage, the security context | ||||
| to interpret the record is successfully located by the server. | ||||
| However, the server wants to test the reachability of the client at | ||||
| his new IP 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 | |||
| <======== Application Data | <======== Application Data | |||
| Src-IP=Z | Src-IP=Z | |||
| skipping to change at page 6, line 31 ¶ | skipping to change at page 7, line 31 ¶ | |||
| Application Data ========> | Application Data ========> | |||
| <CID=100> | <CID=100> | |||
| Src-IP=B | Src-IP=B | |||
| Dst-IP=Z | Dst-IP=Z | |||
| <<< Unverified IP | <<< Unverified IP | |||
| Address B >> | Address B >> | |||
| <-------- Return Routability Check | <-------- Return Routability Check | |||
| (cookie) | path_challenge(cookie) | |||
| Src-IP=Z | Src-IP=Z | |||
| Dst-IP=B | Dst-IP=B | |||
| Return Routability Check --------> | Return Routability Check --------> | |||
| (cookie) | path_response(cookie) | |||
| 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 1: Return Routability Example | Figure 2: Return Routability Example | |||
| 5. Security and Privacy Considerations | 6. Security and Privacy 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. | |||
| 6. IANA Considerations | 7. IANA Considerations | |||
| IANA is requested to allocate an entry to the existing TLS | IANA is requested to allocate an entry to the TLS "ContentType" | |||
| "ContentType" registry, for the return_routability_check(TBD) defined | registry, for the return_routability_check(TBD) defined in this | |||
| in this document. | document. | |||
| 7. Open Issues | IANA is requested to allocate an entry to the TLS Flags registry in | |||
| the tls_flags type: | ||||
| * Value: [[IANA please assign a value from the 32-63 value range.]] | ||||
| * Flag Name: RRC | ||||
| * Message: CH,SH | ||||
| * Recommended: Y | ||||
| * Reference: [[This document]] | ||||
| 8. Open Issues | ||||
| Issues against this document are tracked at https://github.com/tlswg/ | Issues against this document are tracked at https://github.com/tlswg/ | |||
| dtls-rrc/issues | dtls-rrc/issues | |||
| 8. Acknowledgments | 9. Acknowledgments | |||
| We would like to thank Achim Kraus, Hanno Becker and Manuel Pegourie- | We would like to thank Achim Kraus, Hanno Becker, Hanno Boeck, Manuel | |||
| Gonnard for their input to this document. | Pegourie-Gonnard, Mohit Sahni and Rich Salz for their input to this | |||
| document. | ||||
| 9. Normative References | 10. Normative References | |||
| [I-D.ietf-tls-dtls-connection-id] | [I-D.ietf-tls-dtls-connection-id] | |||
| Rescorla, E., Tschofenig, H., Fossati, T., and A. Kraus, | Rescorla, E., Tschofenig, H., Fossati, T., and A. Kraus, | |||
| "Connection Identifiers for DTLS 1.2", Work in Progress, | "Connection Identifiers for DTLS 1.2", Work in Progress, | |||
| Internet-Draft, draft-ietf-tls-dtls-connection-id-12, 11 | Internet-Draft, draft-ietf-tls-dtls-connection-id-13, 22 | |||
| May 2021, <https://tools.ietf.org/html/draft-ietf-tls- | June 2021, <https://datatracker.ietf.org/doc/html/draft- | |||
| dtls-connection-id-12>. | ietf-tls-dtls-connection-id-13>. | |||
| [I-D.ietf-tls-dtls13] | [I-D.ietf-tls-dtls13] | |||
| Rescorla, E., Tschofenig, H., and N. Modadugu, "The | Rescorla, E., Tschofenig, H., and N. Modadugu, "The | |||
| Datagram Transport Layer Security (DTLS) Protocol Version | Datagram Transport Layer Security (DTLS) Protocol Version | |||
| 1.3", Work in Progress, Internet-Draft, draft-ietf-tls- | 1.3", Work in Progress, Internet-Draft, draft-ietf-tls- | |||
| dtls13-43, 30 April 2021, | dtls13-43, 30 April 2021, | |||
| <https://tools.ietf.org/html/draft-ietf-tls-dtls13-43>. | <https://datatracker.ietf.org/doc/html/draft-ietf-tls- | |||
| dtls13-43>. | ||||
| [I-D.ietf-tls-tlsflags] | ||||
| Nir, Y., "A Flags Extension for TLS 1.3", Work in | ||||
| Progress, Internet-Draft, draft-ietf-tls-tlsflags-06, 13 | ||||
| July 2021, <https://datatracker.ietf.org/doc/html/draft- | ||||
| ietf-tls-tlsflags-06>. | ||||
| [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/rfc/rfc2119>. | |||
| [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/rfc/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/rfc/rfc8446>. | |||
| Appendix A. History | Appendix A. History | |||
| RFC EDITOR: PLEASE REMOVE THE THIS SECTION | RFC EDITOR: PLEASE REMOVE THE THIS SECTION | |||
| draft-ietf-tls-dtls-rrc-00 | draft-ietf-tls-dtls-rrc-01 | |||
| * Draft name changed after WG adoption | * Use the TLS flags extension for negotiating RRC | |||
| draft-tschofenig-tls-dtls-rrc-01 | * Enhanced IANA consideration section | |||
| * Expanded example section | ||||
| * Revamp message layout: | ||||
| - Use 8-byte fixed size cookies | ||||
| - Explicitly separate path challenge from response | ||||
| draft-ietf-tls-dtls-rrc-00 | ||||
| * Draft name changed after WG adoption | ||||
| * Removed text that overlapped with draft-ietf-tls-dtls-connection- | * Removed text that overlapped with draft-ietf-tls-dtls-connection- | |||
| id | id | |||
| draft-tschofenig-tls-dtls-rrc-00 | draft-tschofenig-tls-dtls-rrc-00 | |||
| * Initial version | * Initial version | |||
| Authors' Addresses | Authors' Addresses | |||
| Hannes Tschofenig (editor) | Hannes Tschofenig (editor) | |||
| End of changes. 31 change blocks. | ||||
| 57 lines changed or deleted | 150 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/ | ||||