| draft-ietf-quic-tls-latest.txt | draft-ietf-quic-tls-auth48.txt | |||
|---|---|---|---|---|
| skipping to change at page 2, line 7 ¶ | skipping to change at line 46 ¶ | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
| 2. Notational Conventions . . . . . . . . . . . . . . . . . . . 4 | 2. Notational Conventions | |||
| 2.1. TLS Overview . . . . . . . . . . . . . . . . . . . . . . 4 | 2.1. TLS Overview | |||
| 3. Protocol Overview . . . . . . . . . . . . . . . . . . . . . . 6 | 3. Protocol Overview | |||
| 4. Carrying TLS Messages . . . . . . . . . . . . . . . . . . . . 8 | 4. Carrying TLS Messages | |||
| 4.1. Interface to TLS . . . . . . . . . . . . . . . . . . . . 9 | 4.1. Interface to TLS | |||
| 4.1.1. Handshake Complete . . . . . . . . . . . . . . . . . 9 | 4.1.1. Handshake Complete | |||
| 4.1.2. Handshake Confirmed . . . . . . . . . . . . . . . . . 10 | 4.1.2. Handshake Confirmed | |||
| 4.1.3. Sending and Receiving Handshake Messages . . . . . . 10 | 4.1.3. Sending and Receiving Handshake Messages | |||
| 4.1.4. Encryption Level Changes . . . . . . . . . . . . . . 12 | 4.1.4. Encryption Level Changes | |||
| 4.1.5. TLS Interface Summary . . . . . . . . . . . . . . . . 13 | 4.1.5. TLS Interface Summary | |||
| 4.2. TLS Version . . . . . . . . . . . . . . . . . . . . . . . 15 | 4.2. TLS Version | |||
| 4.3. ClientHello Size . . . . . . . . . . . . . . . . . . . . 15 | 4.3. ClientHello Size | |||
| 4.4. Peer Authentication . . . . . . . . . . . . . . . . . . . 16 | 4.4. Peer Authentication | |||
| 4.5. Session Resumption . . . . . . . . . . . . . . . . . . . 17 | 4.5. Session Resumption | |||
| 4.6. 0-RTT . . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 4.6. 0-RTT | |||
| 4.6.1. Enabling 0-RTT . . . . . . . . . . . . . . . . . . . 18 | 4.6.1. Enabling 0-RTT | |||
| 4.6.2. Accepting and Rejecting 0-RTT . . . . . . . . . . . . 18 | 4.6.2. Accepting and Rejecting 0-RTT | |||
| 4.6.3. Validating 0-RTT Configuration . . . . . . . . . . . 19 | 4.6.3. Validating 0-RTT Configuration | |||
| 4.7. HelloRetryRequest . . . . . . . . . . . . . . . . . . . . 19 | 4.7. HelloRetryRequest | |||
| 4.8. TLS Errors . . . . . . . . . . . . . . . . . . . . . . . 19 | 4.8. TLS Errors | |||
| 4.9. Discarding Unused Keys . . . . . . . . . . . . . . . . . 20 | 4.9. Discarding Unused Keys | |||
| 4.9.1. Discarding Initial Keys . . . . . . . . . . . . . . . 21 | 4.9.1. Discarding Initial Keys | |||
| 4.9.2. Discarding Handshake Keys . . . . . . . . . . . . . . 21 | 4.9.2. Discarding Handshake Keys | |||
| 4.9.3. Discarding 0-RTT Keys . . . . . . . . . . . . . . . . 21 | 4.9.3. Discarding 0-RTT Keys | |||
| 5. Packet Protection . . . . . . . . . . . . . . . . . . . . . . 22 | 5. Packet Protection | |||
| 5.1. Packet Protection Keys . . . . . . . . . . . . . . . . . 22 | 5.1. Packet Protection Keys | |||
| 5.2. Initial Secrets . . . . . . . . . . . . . . . . . . . . . 23 | 5.2. Initial Secrets | |||
| 5.3. AEAD Usage . . . . . . . . . . . . . . . . . . . . . . . 24 | 5.3. AEAD Usage | |||
| 5.4. Header Protection . . . . . . . . . . . . . . . . . . . . 25 | 5.4. Header Protection | |||
| 5.4.1. Header Protection Application . . . . . . . . . . . . 26 | 5.4.1. Header Protection Application | |||
| 5.4.2. Header Protection Sample . . . . . . . . . . . . . . 29 | 5.4.2. Header Protection Sample | |||
| 5.4.3. AES-Based Header Protection . . . . . . . . . . . . . 30 | 5.4.3. AES-Based Header Protection | |||
| 5.4.4. ChaCha20-Based Header Protection . . . . . . . . . . 30 | 5.4.4. ChaCha20-Based Header Protection | |||
| 5.5. Receiving Protected Packets . . . . . . . . . . . . . . . 31 | 5.5. Receiving Protected Packets | |||
| 5.6. Use of 0-RTT Keys . . . . . . . . . . . . . . . . . . . . 31 | 5.6. Use of 0-RTT Keys | |||
| 5.7. Receiving Out-of-Order Protected Packets . . . . . . . . 32 | 5.7. Receiving Out-of-Order Protected Packets | |||
| 5.8. Retry Packet Integrity . . . . . . . . . . . . . . . . . 33 | 5.8. Retry Packet Integrity | |||
| 6. Key Update . . . . . . . . . . . . . . . . . . . . . . . . . 34 | 6. Key Update | |||
| 6.1. Initiating a Key Update . . . . . . . . . . . . . . . . . 36 | 6.1. Initiating a Key Update | |||
| 6.2. Responding to a Key Update . . . . . . . . . . . . . . . 37 | 6.2. Responding to a Key Update | |||
| 6.3. Timing of Receive Key Generation . . . . . . . . . . . . 37 | 6.3. Timing of Receive Key Generation | |||
| 6.4. Sending with Updated Keys . . . . . . . . . . . . . . . . 38 | 6.4. Sending with Updated Keys | |||
| 6.5. Receiving with Different Keys . . . . . . . . . . . . . . 38 | 6.5. Receiving with Different Keys | |||
| 6.6. Limits on AEAD Usage . . . . . . . . . . . . . . . . . . 39 | 6.6. Limits on AEAD Usage | |||
| 6.7. Key Update Error Code . . . . . . . . . . . . . . . . . . 41 | 6.7. Key Update Error Code | |||
| 7. Security of Initial Messages | ||||
| 7. Security of Initial Messages . . . . . . . . . . . . . . . . 41 | 8. QUIC-Specific Adjustments to the TLS Handshake | |||
| 8. QUIC-Specific Adjustments to the TLS Handshake . . . . . . . 41 | 8.1. Protocol Negotiation | |||
| 8.1. Protocol Negotiation . . . . . . . . . . . . . . . . . . 42 | 8.2. QUIC Transport Parameters Extension | |||
| 8.2. QUIC Transport Parameters Extension . . . . . . . . . . . 42 | 8.3. Removing the EndOfEarlyData Message | |||
| 8.3. Removing the EndOfEarlyData Message . . . . . . . . . . . 43 | 8.4. Prohibit TLS Middlebox Compatibility Mode | |||
| 8.4. Prohibit TLS Middlebox Compatibility Mode . . . . . . . . 43 | 9. Security Considerations | |||
| 9. Security Considerations . . . . . . . . . . . . . . . . . . . 44 | 9.1. Session Linkability | |||
| 9.1. Session Linkability . . . . . . . . . . . . . . . . . . . 44 | 9.2. Replay Attacks with 0-RTT | |||
| 9.2. Replay Attacks with 0-RTT . . . . . . . . . . . . . . . . 44 | 9.3. Packet Reflection Attack Mitigation | |||
| 9.3. Packet Reflection Attack Mitigation . . . . . . . . . . . 45 | 9.4. Header Protection Analysis | |||
| 9.4. Header Protection Analysis . . . . . . . . . . . . . . . 45 | 9.5. Header Protection Timing Side Channels | |||
| 9.5. Header Protection Timing Side Channels . . . . . . . . . 46 | 9.6. Key Diversity | |||
| 9.6. Key Diversity . . . . . . . . . . . . . . . . . . . . . . 47 | 9.7. Randomness | |||
| 9.7. Randomness . . . . . . . . . . . . . . . . . . . . . . . 47 | 10. IANA Considerations | |||
| 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 47 | 11. References | |||
| 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 48 | 11.1. Normative References | |||
| 11.1. Normative References . . . . . . . . . . . . . . . . . . 48 | 11.2. Informative References | |||
| 11.2. Informative References . . . . . . . . . . . . . . . . . 49 | Appendix A. Sample Packet Protection | |||
| Appendix A. Sample Packet Protection . . . . . . . . . . . . . . 51 | A.1. Keys | |||
| A.1. Keys . . . . . . . . . . . . . . . . . . . . . . . . . . 51 | A.2. Client Initial | |||
| A.2. Client Initial . . . . . . . . . . . . . . . . . . . . . 52 | A.3. Server Initial | |||
| A.3. Server Initial . . . . . . . . . . . . . . . . . . . . . 54 | A.4. Retry | |||
| A.4. Retry . . . . . . . . . . . . . . . . . . . . . . . . . . 55 | A.5. ChaCha20-Poly1305 Short Header Packet | |||
| A.5. ChaCha20-Poly1305 Short Header Packet . . . . . . . . . . 55 | Appendix B. AEAD Algorithm Analysis | |||
| Appendix B. AEAD Algorithm Analysis . . . . . . . . . . . . . . 57 | ||||
| B.1. Analysis of AEAD_AES_128_GCM and AEAD_AES_256_GCM Usage | B.1. Analysis of AEAD_AES_128_GCM and AEAD_AES_256_GCM Usage | |||
| Limits . . . . . . . . . . . . . . . . . . . . . . . . . 58 | Limits | |||
| B.1.1. Confidentiality Limit . . . . . . . . . . . . . . . . 58 | B.1.1. Confidentiality Limit | |||
| B.1.2. Integrity Limit . . . . . . . . . . . . . . . . . . . 58 | B.1.2. Integrity Limit | |||
| B.2. Analysis of AEAD_AES_128_CCM Usage Limits . . . . . . . . 59 | B.2. Analysis of AEAD_AES_128_CCM Usage Limits | |||
| Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 60 | Contributors | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 62 | Authors' Addresses | |||
| 1. Introduction | 1. Introduction | |||
| This document describes how QUIC [QUIC-TRANSPORT] is secured using | This document describes how QUIC [QUIC-TRANSPORT] is secured using | |||
| TLS [TLS13]. | TLS [TLS13]. | |||
| TLS 1.3 provides critical latency improvements for connection | TLS 1.3 provides critical latency improvements for connection | |||
| establishment over previous versions. Absent packet loss, most new | establishment over previous versions. Absent packet loss, most new | |||
| connections can be established and secured within a single round | connections can be established and secured within a single round | |||
| trip; on subsequent connections between the same client and server, | trip; on subsequent connections between the same client and server, | |||
| skipping to change at page 4, line 38 ¶ | skipping to change at line 172 ¶ | |||
| +-------------+------------+--------------+---------+ | +-------------+------------+--------------+---------+ | |||
| Content | | | Application | | | Content | | | Application | | | |||
| Layer | Handshake | Alerts | Data | ... | | Layer | Handshake | Alerts | Data | ... | | |||
| | | | | | | | | | | | | |||
| +-------------+------------+--------------+---------+ | +-------------+------------+--------------+---------+ | |||
| Record | | | Record | | | |||
| Layer | Records | | Layer | Records | | |||
| | | | | | | |||
| +---------------------------------------------------+ | +---------------------------------------------------+ | |||
| Figure 1: TLS Layers | Figure 1: TLS Layers | |||
| Each content-layer message (e.g., handshake, alerts, and application | Each content-layer message (e.g., handshake, alerts, and application | |||
| data) is carried as a series of typed TLS records by the record | data) is carried as a series of typed TLS records by the record | |||
| layer. Records are individually cryptographically protected and then | layer. Records are individually cryptographically protected and then | |||
| transmitted over a reliable transport (typically TCP), which provides | transmitted over a reliable transport (typically TCP), which provides | |||
| sequencing and guaranteed delivery. | sequencing and guaranteed delivery. | |||
| The TLS authenticated key exchange occurs between two endpoints: | The TLS authenticated key exchange occurs between two endpoints: | |||
| client and server. The client initiates the exchange and the server | client and server. The client initiates the exchange and the server | |||
| responds. If the key exchange completes successfully, both client | responds. If the key exchange completes successfully, both client | |||
| skipping to change at page 5, line 20 ¶ | skipping to change at line 203 ¶ | |||
| TLS supports X.509 [RFC5280] certificate-based authentication for | TLS supports X.509 [RFC5280] certificate-based authentication for | |||
| both server and client. When PSK key exchange is used (as in | both server and client. When PSK key exchange is used (as in | |||
| resumption), knowledge of the PSK serves to authenticate the peer. | resumption), knowledge of the PSK serves to authenticate the peer. | |||
| The TLS key exchange is resistant to tampering by attackers, and it | The TLS key exchange is resistant to tampering by attackers, and it | |||
| produces shared secrets that cannot be controlled by either | produces shared secrets that cannot be controlled by either | |||
| participating peer. | participating peer. | |||
| TLS provides two basic handshake modes of interest to QUIC: | TLS provides two basic handshake modes of interest to QUIC: | |||
| o A full 1-RTT handshake, in which the client is able to send | * A full 1-RTT handshake, in which the client is able to send | |||
| application data after one round trip and the server immediately | application data after one round trip and the server immediately | |||
| responds after receiving the first handshake message from the | responds after receiving the first handshake message from the | |||
| client. | client. | |||
| o A 0-RTT handshake, in which the client uses information it has | * A 0-RTT handshake, in which the client uses information it has | |||
| previously learned about the server to send application data | previously learned about the server to send application data | |||
| immediately. This application data can be replayed by an | immediately. This application data can be replayed by an | |||
| attacker, so 0-RTT is not suitable for carrying instructions that | attacker, so 0-RTT is not suitable for carrying instructions that | |||
| might initiate any action that could cause unwanted effects if | might initiate any action that could cause unwanted effects if | |||
| replayed. | replayed. | |||
| A simplified TLS handshake with 0-RTT application data is shown in | A simplified TLS handshake with 0-RTT application data is shown in | |||
| Figure 2. | Figure 2. | |||
| Client Server | Client Server | |||
| skipping to change at page 6, line 22 ¶ | skipping to change at line 235 ¶ | |||
| <-------- [Application Data] | <-------- [Application Data] | |||
| {Finished} --------> | {Finished} --------> | |||
| [Application Data] <-------> [Application Data] | [Application Data] <-------> [Application Data] | |||
| () Indicates messages protected by Early Data (0-RTT) Keys | () Indicates messages protected by Early Data (0-RTT) Keys | |||
| {} Indicates messages protected using Handshake Keys | {} Indicates messages protected using Handshake Keys | |||
| [] Indicates messages protected using Application Data | [] Indicates messages protected using Application Data | |||
| (1-RTT) Keys | (1-RTT) Keys | |||
| Figure 2: TLS Handshake with 0-RTT | Figure 2: TLS Handshake with 0-RTT | |||
| Figure 2 omits the EndOfEarlyData message, which is not used in QUIC; | Figure 2 omits the EndOfEarlyData message, which is not used in QUIC; | |||
| see Section 8.3. Likewise, neither ChangeCipherSpec nor KeyUpdate | see Section 8.3. Likewise, neither ChangeCipherSpec nor KeyUpdate | |||
| messages are used by QUIC. ChangeCipherSpec is redundant in TLS 1.3; | messages are used by QUIC. ChangeCipherSpec is redundant in TLS 1.3; | |||
| see Section 8.4. QUIC has its own key update mechanism; see | see Section 8.4. QUIC has its own key update mechanism; see | |||
| Section 6. | Section 6. | |||
| Data is protected using a number of encryption levels: | Data is protected using a number of encryption levels: | |||
| o Initial keys | * Initial keys | |||
| o Early data (0-RTT) keys | * Early data (0-RTT) keys | |||
| o Handshake keys | * Handshake keys | |||
| o Application data (1-RTT) keys | * Application data (1-RTT) keys | |||
| Application data can only appear in the early data and application | Application data can only appear in the early data and application | |||
| data levels. Handshake and alert messages may appear in any level. | data levels. Handshake and alert messages may appear in any level. | |||
| The 0-RTT handshake can be used if the client and server have | The 0-RTT handshake can be used if the client and server have | |||
| previously communicated. In the 1-RTT handshake, the client is | previously communicated. In the 1-RTT handshake, the client is | |||
| unable to send protected application data until it has received all | unable to send protected application data until it has received all | |||
| of the handshake messages sent by the server. | of the handshake messages sent by the server. | |||
| 3. Protocol Overview | 3. Protocol Overview | |||
| skipping to change at page 7, line 35 ¶ | skipping to change at line 297 ¶ | |||
| QUIC also relies on TLS for authentication and negotiation of | QUIC also relies on TLS for authentication and negotiation of | |||
| parameters that are critical to security and performance. | parameters that are critical to security and performance. | |||
| Rather than a strict layering, these two protocols cooperate: QUIC | Rather than a strict layering, these two protocols cooperate: QUIC | |||
| uses the TLS handshake; TLS uses the reliability, ordered delivery, | uses the TLS handshake; TLS uses the reliability, ordered delivery, | |||
| and record layer provided by QUIC. | and record layer provided by QUIC. | |||
| At a high level, there are two main interactions between the TLS and | At a high level, there are two main interactions between the TLS and | |||
| QUIC components: | QUIC components: | |||
| o The TLS component sends and receives messages via the QUIC | * The TLS component sends and receives messages via the QUIC | |||
| component, with QUIC providing a reliable stream abstraction to | component, with QUIC providing a reliable stream abstraction to | |||
| TLS. | TLS. | |||
| o The TLS component provides a series of updates to the QUIC | * The TLS component provides a series of updates to the QUIC | |||
| component, including (a) new packet protection keys to install and | component, including (a) new packet protection keys to install and | |||
| (b) state changes such as handshake completion, the server | (b) state changes such as handshake completion, the server | |||
| certificate, etc. | certificate, etc. | |||
| Figure 4 shows these interactions in more detail, with the QUIC | Figure 4 shows these interactions in more detail, with the QUIC | |||
| packet protection being called out specially. | packet protection being called out specially. | |||
| +------------+ +------------+ | +------------+ +------------+ | |||
| | |<---- Handshake Messages ----->| | | | |<---- Handshake Messages ----->| | | |||
| | |<- Validate 0-RTT Parameters ->| | | | |<- Validate 0-RTT Parameters ->| | | |||
| skipping to change at page 9, line 5 ¶ | skipping to change at line 356 ¶ | |||
| packet number space that is used determines the semantics of frames. | packet number space that is used determines the semantics of frames. | |||
| Some frames are prohibited in different packet number spaces; see | Some frames are prohibited in different packet number spaces; see | |||
| Section 12.5 of [QUIC-TRANSPORT]. | Section 12.5 of [QUIC-TRANSPORT]. | |||
| Because packets could be reordered on the wire, QUIC uses the packet | Because packets could be reordered on the wire, QUIC uses the packet | |||
| type to indicate which keys were used to protect a given packet, as | type to indicate which keys were used to protect a given packet, as | |||
| shown in Table 1. When packets of different types need to be sent, | shown in Table 1. When packets of different types need to be sent, | |||
| endpoints SHOULD use coalesced packets to send them in the same UDP | endpoints SHOULD use coalesced packets to send them in the same UDP | |||
| datagram. | datagram. | |||
| +---------------------+-----------------+------------------+ | +=====================+=================+==================+ | |||
| | Packet Type | Encryption Keys | PN Space | | | Packet Type | Encryption Keys | PN Space | | |||
| +---------------------+-----------------+------------------+ | +=====================+=================+==================+ | |||
| | Initial | Initial secrets | Initial | | | Initial | Initial secrets | Initial | | |||
| | | | | | +=====================+-----------------+------------------+ | |||
| | 0-RTT Protected | 0-RTT | Application data | | | 0-RTT Protected | 0-RTT | Application data | | |||
| | | | | | +=====================+-----------------+------------------+ | |||
| | Handshake | Handshake | Handshake | | | Handshake | Handshake | Handshake | | |||
| | | | | | +=====================+-----------------+------------------+ | |||
| | Retry | Retry | N/A | | | Retry | Retry | N/A | | |||
| | | | | | +=====================+-----------------+------------------+ | |||
| | Version Negotiation | N/A | N/A | | | Version Negotiation | N/A | N/A | | |||
| | | | | | +=====================+-----------------+------------------+ | |||
| | Short Header | 1-RTT | Application data | | | Short Header | 1-RTT | Application data | | |||
| +---------------------+-----------------+------------------+ | +=====================+-----------------+------------------+ | |||
| Table 1: Encryption Keys by Packet Type | Table 1: Encryption Keys by Packet Type | |||
| Section 17 of [QUIC-TRANSPORT] shows how packets at the various | Section 17 of [QUIC-TRANSPORT] shows how packets at the various | |||
| encryption levels fit into the handshake process. | encryption levels fit into the handshake process. | |||
| 4.1. Interface to TLS | 4.1. Interface to TLS | |||
| As shown in Figure 4, the interface from QUIC to TLS consists of four | As shown in Figure 4, the interface from QUIC to TLS consists of four | |||
| primary functions: | primary functions: | |||
| o Sending and receiving handshake messages | * Sending and receiving handshake messages | |||
| o Processing stored transport and application state from a resumed | * Processing stored transport and application state from a resumed | |||
| session and determining if it is valid to generate or accept early | session and determining if it is valid to generate or accept 0-RTT | |||
| data | data | |||
| o Rekeying (both transmit and receive) | * Rekeying (both transmit and receive) | |||
| o Updating handshake state | * Updating handshake state | |||
| Additional functions might be needed to configure TLS. In | Additional functions might be needed to configure TLS. In | |||
| particular, QUIC and TLS need to agree on which is responsible for | particular, QUIC and TLS need to agree on which is responsible for | |||
| validation of peer credentials, such as certificate validation | validation of peer credentials, such as certificate validation | |||
| [RFC5280]. | [RFC5280]. | |||
| 4.1.1. Handshake Complete | 4.1.1. Handshake Complete | |||
| In this document, the TLS handshake is considered complete when the | In this document, the TLS handshake is considered complete when the | |||
| TLS stack has reported that the handshake is complete. This happens | TLS stack has reported that the handshake is complete. This happens | |||
| skipping to change at page 11, line 26 ¶ | skipping to change at line 472 ¶ | |||
| QUIC CRYPTO frames only carry TLS handshake messages. TLS alerts are | QUIC CRYPTO frames only carry TLS handshake messages. TLS alerts are | |||
| turned into QUIC CONNECTION_CLOSE error codes; see Section 4.8. TLS | turned into QUIC CONNECTION_CLOSE error codes; see Section 4.8. TLS | |||
| application data and other content types cannot be carried by QUIC at | application data and other content types cannot be carried by QUIC at | |||
| any encryption level; it is an error if they are received from the | any encryption level; it is an error if they are received from the | |||
| TLS stack. | TLS stack. | |||
| When an endpoint receives a QUIC packet containing a CRYPTO frame | When an endpoint receives a QUIC packet containing a CRYPTO frame | |||
| from the network, it proceeds as follows: | from the network, it proceeds as follows: | |||
| o If the packet uses the current TLS receiving encryption level, | * If the packet uses the current TLS receiving encryption level, | |||
| sequence the data into the input flow as usual. As with STREAM | sequence the data into the input flow as usual. As with STREAM | |||
| frames, the offset is used to find the proper location in the data | frames, the offset is used to find the proper location in the data | |||
| sequence. If the result of this process is that new data is | sequence. If the result of this process is that new data is | |||
| available, then it is delivered to TLS in order. | available, then it is delivered to TLS in order. | |||
| o If the packet is from a previously installed encryption level, it | * If the packet is from a previously installed encryption level, it | |||
| MUST NOT contain data that extends past the end of previously | MUST NOT contain data that extends past the end of previously | |||
| received data in that flow. Implementations MUST treat any | received data in that flow. Implementations MUST treat any | |||
| violations of this requirement as a connection error of type | violations of this requirement as a connection error of type | |||
| PROTOCOL_VIOLATION. | PROTOCOL_VIOLATION. | |||
| o If the packet is from a new encryption level, it is saved for | * If the packet is from a new encryption level, it is saved for | |||
| later processing by TLS. Once TLS moves to receiving from this | later processing by TLS. Once TLS moves to receiving from this | |||
| encryption level, saved data can be provided to TLS. When TLS | encryption level, saved data can be provided to TLS. When TLS | |||
| provides keys for a higher encryption level, if there is data from | provides keys for a higher encryption level, if there is data from | |||
| a previous encryption level that TLS has not consumed, this MUST | a previous encryption level that TLS has not consumed, this MUST | |||
| be treated as a connection error of type PROTOCOL_VIOLATION. | be treated as a connection error of type PROTOCOL_VIOLATION. | |||
| Each time that TLS is provided with new data, new handshake bytes are | Each time that TLS is provided with new data, new handshake bytes are | |||
| requested from TLS. TLS might not provide any bytes if the handshake | requested from TLS. TLS might not provide any bytes if the handshake | |||
| messages it has received are incomplete or it has no data to send. | messages it has received are incomplete or it has no data to send. | |||
| skipping to change at page 12, line 39 ¶ | skipping to change at line 534 ¶ | |||
| level are available. | level are available. | |||
| The availability of new keys is always a result of providing inputs | The availability of new keys is always a result of providing inputs | |||
| to TLS. TLS only provides new keys after being initialized (by a | to TLS. TLS only provides new keys after being initialized (by a | |||
| client) or when provided with new handshake data. | client) or when provided with new handshake data. | |||
| However, a TLS implementation could perform some of its processing | However, a TLS implementation could perform some of its processing | |||
| asynchronously. In particular, the process of validating a | asynchronously. In particular, the process of validating a | |||
| certificate can take some time. While waiting for TLS processing to | certificate can take some time. While waiting for TLS processing to | |||
| complete, an endpoint SHOULD buffer received packets if they might be | complete, an endpoint SHOULD buffer received packets if they might be | |||
| processed using keys that aren't yet available. These packets can be | processed using keys that are not yet available. These packets can | |||
| processed once keys are provided by TLS. An endpoint SHOULD continue | be processed once keys are provided by TLS. An endpoint SHOULD | |||
| to respond to packets that can be processed during this time. | continue to respond to packets that can be processed during this | |||
| time. | ||||
| After processing inputs, TLS might produce handshake bytes, keys for | After processing inputs, TLS might produce handshake bytes, keys for | |||
| new encryption levels, or both. | new encryption levels, or both. | |||
| TLS provides QUIC with three items as a new encryption level becomes | TLS provides QUIC with three items as a new encryption level becomes | |||
| available: | available: | |||
| o A secret | * A secret | |||
| o An Authenticated Encryption with Associated Data (AEAD) function | * An Authenticated Encryption with Associated Data (AEAD) function | |||
| o A Key Derivation Function (KDF) | ||||
| * A Key Derivation Function (KDF) | ||||
| These values are based on the values that TLS negotiates and are used | These values are based on the values that TLS negotiates and are used | |||
| by QUIC to generate packet and header protection keys; see Section 5 | by QUIC to generate packet and header protection keys; see Section 5 | |||
| and Section 5.4. | and Section 5.4. | |||
| If 0-RTT is possible, it is ready after the client sends a TLS | If 0-RTT is possible, it is ready after the client sends a TLS | |||
| ClientHello message or the server receives that message. After | ClientHello message or the server receives that message. After | |||
| providing a QUIC client with the first handshake bytes, the TLS stack | providing a QUIC client with the first handshake bytes, the TLS stack | |||
| might signal the change to 0-RTT keys. On the server, after | might signal the change to 0-RTT keys. On the server, after | |||
| receiving handshake bytes that contain a ClientHello message, a TLS | receiving handshake bytes that contain a ClientHello message, a TLS | |||
| skipping to change at page 14, line 40 ¶ | skipping to change at line 628 ¶ | |||
| 1-RTT - - - - - - - -> | 1-RTT - - - - - - - -> | |||
| Handshake Received | Handshake Received | |||
| Handshake Complete | Handshake Complete | |||
| Handshake Confirmed | Handshake Confirmed | |||
| Install rx 1-RTT keys | Install rx 1-RTT keys | |||
| <--------------- 1-RTT | <--------------- 1-RTT | |||
| (HANDSHAKE_DONE) | (HANDSHAKE_DONE) | |||
| Handshake Confirmed | Handshake Confirmed | |||
| Figure 5: Interaction Summary between QUIC and TLS | Figure 5: Interaction Summary between QUIC and TLS | |||
| Figure 5 shows the multiple packets that form a single "flight" of | Figure 5 shows the multiple packets that form a single "flight" of | |||
| messages being processed individually, to show what incoming messages | messages being processed individually, to show what incoming messages | |||
| trigger different actions. This shows multiple "Get Handshake" | trigger different actions. This shows multiple "Get Handshake" | |||
| invocations to retrieve handshake messages at different encryption | invocations to retrieve handshake messages at different encryption | |||
| levels. New handshake messages are requested after incoming packets | levels. New handshake messages are requested after incoming packets | |||
| have been processed. | have been processed. | |||
| Figure 5 shows one possible structure for a simple handshake | Figure 5 shows one possible structure for a simple handshake | |||
| exchange. The exact process varies based on the structure of | exchange. The exact process varies based on the structure of | |||
| skipping to change at page 16, line 28 ¶ | skipping to change at line 711 ¶ | |||
| The requirements for authentication depend on the application | The requirements for authentication depend on the application | |||
| protocol that is in use. TLS provides server authentication and | protocol that is in use. TLS provides server authentication and | |||
| permits the server to request client authentication. | permits the server to request client authentication. | |||
| A client MUST authenticate the identity of the server. This | A client MUST authenticate the identity of the server. This | |||
| typically involves verification that the identity of the server is | typically involves verification that the identity of the server is | |||
| included in a certificate and that the certificate is issued by a | included in a certificate and that the certificate is issued by a | |||
| trusted entity (see for example [RFC2818]). | trusted entity (see for example [RFC2818]). | |||
| Note: Where servers provide certificates for authentication, the | | Note: Where servers provide certificates for authentication, | |||
| size of the certificate chain can consume a large number of bytes. | | the size of the certificate chain can consume a large number of | |||
| Controlling the size of certificate chains is critical to | | bytes. Controlling the size of certificate chains is critical | |||
| performance in QUIC as servers are limited to sending 3 bytes for | | to performance in QUIC as servers are limited to sending 3 | |||
| every byte received prior to validating the client address; see | | bytes for every byte received prior to validating the client | |||
| Section 8.1 of [QUIC-TRANSPORT]. The size of a certificate chain | | address; see Section 8.1 of [QUIC-TRANSPORT]. The size of a | |||
| can be managed by limiting the number of names or extensions; | | certificate chain can be managed by limiting the number of | |||
| using keys with small public key representations, like ECDSA; or | | names or extensions; using keys with small public key | |||
| by using certificate compression [COMPRESS]. | | representations, like ECDSA; or by using certificate | |||
| | compression [COMPRESS]. | ||||
| A server MAY request that the client authenticate during the | A server MAY request that the client authenticate during the | |||
| handshake. A server MAY refuse a connection if the client is unable | handshake. A server MAY refuse a connection if the client is unable | |||
| to authenticate when requested. The requirements for client | to authenticate when requested. The requirements for client | |||
| authentication vary based on application protocol and deployment. | authentication vary based on application protocol and deployment. | |||
| A server MUST NOT use post-handshake client authentication (as | A server MUST NOT use post-handshake client authentication (as | |||
| defined in Section 4.6.2 of [TLS13]) because the multiplexing offered | defined in Section 4.6.2 of [TLS13]) because the multiplexing offered | |||
| by QUIC prevents clients from correlating the certificate request | by QUIC prevents clients from correlating the certificate request | |||
| with the application-level event that triggered it (see | with the application-level event that triggered it (see | |||
| skipping to change at page 18, line 15 ¶ | skipping to change at line 793 ¶ | |||
| [TLS13] sets a limit of seven days on the time between the original | [TLS13] sets a limit of seven days on the time between the original | |||
| connection and any attempt to use 0-RTT. There are other constraints | connection and any attempt to use 0-RTT. There are other constraints | |||
| on 0-RTT usage, notably those caused by the potential exposure to | on 0-RTT usage, notably those caused by the potential exposure to | |||
| replay attack; see Section 9.2. | replay attack; see Section 9.2. | |||
| 4.6.1. Enabling 0-RTT | 4.6.1. Enabling 0-RTT | |||
| The TLS early_data extension in the NewSessionTicket message is | The TLS early_data extension in the NewSessionTicket message is | |||
| defined to convey (in the max_early_data_size parameter) the amount | defined to convey (in the max_early_data_size parameter) the amount | |||
| of TLS 0-RTT data the server is willing to accept. QUIC does not use | of TLS 0-RTT data the server is willing to accept. QUIC does not use | |||
| TLS 0-RTT data. QUIC uses 0-RTT packets to carry early data. | TLS early data. QUIC uses 0-RTT packets to carry early data. | |||
| Accordingly, the max_early_data_size parameter is repurposed to hold | Accordingly, the max_early_data_size parameter is repurposed to hold | |||
| a sentinel value 0xffffffff to indicate that the server is willing to | a sentinel value 0xffffffff to indicate that the server is willing to | |||
| accept QUIC 0-RTT data. To indicate that the server does not accept | accept QUIC 0-RTT data. To indicate that the server does not accept | |||
| 0-RTT data, the early_data extension is omitted from the | 0-RTT data, the early_data extension is omitted from the | |||
| NewSessionTicket. The amount of data that the client can send in | NewSessionTicket. The amount of data that the client can send in | |||
| QUIC 0-RTT is controlled by the initial_max_data transport parameter | QUIC 0-RTT is controlled by the initial_max_data transport parameter | |||
| supplied by the server. | supplied by the server. | |||
| Servers MUST NOT send the early_data extension with a | Servers MUST NOT send the early_data extension with a | |||
| max_early_data_size field set to any value other than 0xffffffff. A | max_early_data_size field set to any value other than 0xffffffff. A | |||
| skipping to change at page 19, line 17 ¶ | skipping to change at line 843 ¶ | |||
| application protocol, transport parameters, and any application | application protocol, transport parameters, and any application | |||
| configuration. The client therefore MUST reset the state of all | configuration. The client therefore MUST reset the state of all | |||
| streams, including application state bound to those streams. | streams, including application state bound to those streams. | |||
| A client MAY reattempt 0-RTT if it receives a Retry or Version | A client MAY reattempt 0-RTT if it receives a Retry or Version | |||
| Negotiation packet. These packets do not signify rejection of 0-RTT. | Negotiation packet. These packets do not signify rejection of 0-RTT. | |||
| 4.6.3. Validating 0-RTT Configuration | 4.6.3. Validating 0-RTT Configuration | |||
| When a server receives a ClientHello with the early_data extension, | When a server receives a ClientHello with the early_data extension, | |||
| it has to decide whether to accept or reject early data from the | it has to decide whether to accept or reject 0-RTT data from the | |||
| client. Some of this decision is made by the TLS stack (e.g., | client. Some of this decision is made by the TLS stack (e.g., | |||
| checking that the cipher suite being resumed was included in the | checking that the cipher suite being resumed was included in the | |||
| ClientHello; see Section 4.2.10 of [TLS13]). Even when the TLS stack | ClientHello; see Section 4.2.10 of [TLS13]). Even when the TLS stack | |||
| has no reason to reject early data, the QUIC stack or the application | has no reason to reject 0-RTT data, the QUIC stack or the application | |||
| protocol using QUIC might reject early data because the configuration | protocol using QUIC might reject 0-RTT data because the configuration | |||
| of the transport or application associated with the resumed session | of the transport or application associated with the resumed session | |||
| is not compatible with the server's current configuration. | is not compatible with the server's current configuration. | |||
| QUIC requires additional transport state to be associated with a | QUIC requires additional transport state to be associated with a | |||
| 0-RTT session ticket. One common way to implement this is using | 0-RTT session ticket. One common way to implement this is using | |||
| stateless session tickets and storing this state in the session | stateless session tickets and storing this state in the session | |||
| ticket. Application protocols that use QUIC might have similar | ticket. Application protocols that use QUIC might have similar | |||
| requirements regarding associating or storing state. This associated | requirements regarding associating or storing state. This associated | |||
| state is used for deciding whether early data must be rejected. For | state is used for deciding whether 0-RTT data must be rejected. For | |||
| example, HTTP/3 settings [QUIC-HTTP] determine how early data from | example, HTTP/3 settings [QUIC-HTTP] determine how 0-RTT data from | |||
| the client is interpreted. Other applications using QUIC could have | the client is interpreted. Other applications using QUIC could have | |||
| different requirements for determining whether to accept or reject | different requirements for determining whether to accept or reject | |||
| early data. | 0-RTT data. | |||
| 4.7. HelloRetryRequest | 4.7. HelloRetryRequest | |||
| The HelloRetryRequest message (see Section 4.1.4 of [TLS13]) can be | The HelloRetryRequest message (see Section 4.1.4 of [TLS13]) can be | |||
| used to request that a client provide new information, such as a key | used to request that a client provide new information, such as a key | |||
| share, or to validate some characteristic of the client. From the | share, or to validate some characteristic of the client. From the | |||
| perspective of QUIC, HelloRetryRequest is not differentiated from | perspective of QUIC, HelloRetryRequest is not differentiated from | |||
| other cryptographic handshake messages that are carried in Initial | other cryptographic handshake messages that are carried in Initial | |||
| packets. Although it is in principle possible to use this feature | packets. Although it is in principle possible to use this feature | |||
| for address verification, QUIC implementations SHOULD instead use the | for address verification, QUIC implementations SHOULD instead use the | |||
| skipping to change at page 22, line 12 ¶ | skipping to change at line 979 ¶ | |||
| determines that it has received all 0-RTT packets, which can be done | determines that it has received all 0-RTT packets, which can be done | |||
| by keeping track of missing packet numbers. | by keeping track of missing packet numbers. | |||
| 5. Packet Protection | 5. Packet Protection | |||
| As with TLS over TCP, QUIC protects packets with keys derived from | As with TLS over TCP, QUIC protects packets with keys derived from | |||
| the TLS handshake, using the AEAD algorithm [AEAD] negotiated by TLS. | the TLS handshake, using the AEAD algorithm [AEAD] negotiated by TLS. | |||
| QUIC packets have varying protections depending on their type: | QUIC packets have varying protections depending on their type: | |||
| o Version Negotiation packets have no cryptographic protection. | * Version Negotiation packets have no cryptographic protection. | |||
| o Retry packets use AEAD_AES_128_GCM to provide protection against | * Retry packets use AEAD_AES_128_GCM to provide protection against | |||
| accidental modification and to limit the entities that can produce | accidental modification and to limit the entities that can produce | |||
| a valid Retry; see Section 5.8. | a valid Retry; see Section 5.8. | |||
| o Initial packets use AEAD_AES_128_GCM with keys derived from the | * Initial packets use AEAD_AES_128_GCM with keys derived from the | |||
| Destination Connection ID field of the first Initial packet sent | Destination Connection ID field of the first Initial packet sent | |||
| by the client; see Section 5.2. | by the client; see Section 5.2. | |||
| o All other packets have strong cryptographic protections for | * All other packets have strong cryptographic protections for | |||
| confidentiality and integrity, using keys and algorithms | confidentiality and integrity, using keys and algorithms | |||
| negotiated by TLS. | negotiated by TLS. | |||
| This section describes how packet protection is applied to Handshake | This section describes how packet protection is applied to Handshake | |||
| packets, 0-RTT packets, and 1-RTT packets. The same packet | packets, 0-RTT packets, and 1-RTT packets. The same packet | |||
| protection process is applied to Initial packets. However, as it is | protection process is applied to Initial packets. However, as it is | |||
| trivial to determine the keys used for Initial packets, these packets | trivial to determine the keys used for Initial packets, these packets | |||
| are not considered to have confidentiality or integrity protection. | are not considered to have confidentiality or integrity protection. | |||
| Retry packets use a fixed key and so similarly lack confidentiality | Retry packets use a fixed key and so similarly lack confidentiality | |||
| and integrity protection. | and integrity protection. | |||
| skipping to change at page 22, line 48 ¶ | skipping to change at line 1015 ¶ | |||
| Each encryption level has separate secret values for protection of | Each encryption level has separate secret values for protection of | |||
| packets sent in each direction. These traffic secrets are derived by | packets sent in each direction. These traffic secrets are derived by | |||
| TLS (see Section 7.1 of [TLS13]) and are used by QUIC for all | TLS (see Section 7.1 of [TLS13]) and are used by QUIC for all | |||
| encryption levels except the Initial encryption level. The secrets | encryption levels except the Initial encryption level. The secrets | |||
| for the Initial encryption level are computed based on the client's | for the Initial encryption level are computed based on the client's | |||
| initial Destination Connection ID, as described in Section 5.2. | initial Destination Connection ID, as described in Section 5.2. | |||
| The keys used for packet protection are computed from the TLS secrets | The keys used for packet protection are computed from the TLS secrets | |||
| using the KDF provided by TLS. In TLS 1.3, the HKDF-Expand-Label | using the KDF provided by TLS. In TLS 1.3, the HKDF-Expand-Label | |||
| function described in Section 7.1 of [TLS13] is used, using the hash | function described in Section 7.1 of [TLS13] is used with the hash | |||
| function from the negotiated cipher suite. All uses of HKDF-Expand- | function from the negotiated cipher suite. All uses of HKDF-Expand- | |||
| Label in QUIC use a zero-length Context. | Label in QUIC use a zero-length Context. | |||
| Note that labels, which are described using strings, are encoded as | Note that labels, which are described using strings, are encoded as | |||
| bytes using ASCII [ASCII] without quotes or any trailing NUL byte. | bytes using ASCII [ASCII] without quotes or any trailing NUL byte. | |||
| Other versions of TLS MUST provide a similar function in order to be | Other versions of TLS MUST provide a similar function in order to be | |||
| used with QUIC. | used with QUIC. | |||
| The current encryption level secret and the label "quic key" are | The current encryption level secret and the label "quic key" are | |||
| skipping to change at page 24, line 37 ¶ | skipping to change at line 1094 ¶ | |||
| The HKDF-Expand-Label function defined in TLS 1.3 MUST be used for | The HKDF-Expand-Label function defined in TLS 1.3 MUST be used for | |||
| Initial packets even where the TLS versions offered do not include | Initial packets even where the TLS versions offered do not include | |||
| TLS 1.3. | TLS 1.3. | |||
| The secrets used for constructing subsequent Initial packets change | The secrets used for constructing subsequent Initial packets change | |||
| when a server sends a Retry packet to use the connection ID value | when a server sends a Retry packet to use the connection ID value | |||
| selected by the server. The secrets do not change when a client | selected by the server. The secrets do not change when a client | |||
| changes the Destination Connection ID it uses in response to an | changes the Destination Connection ID it uses in response to an | |||
| Initial packet from the server. | Initial packet from the server. | |||
| Note: The Destination Connection ID field could be any length up | | Note: The Destination Connection ID field could be any length | |||
| to 20 bytes, including zero length if the server sends a Retry | | up to 20 bytes, including zero length if the server sends a | |||
| packet with a zero-length Source Connection ID field. After a | | Retry packet with a zero-length Source Connection ID field. | |||
| Retry, the Initial keys provide the client no assurance that the | | After a Retry, the Initial keys provide the client no assurance | |||
| server received its packet, so the client has to rely on the | | that the server received its packet, so the client has to rely | |||
| exchange that included the Retry packet to validate the server | | on the exchange that included the Retry packet to validate the | |||
| address; see Section 8.1 of [QUIC-TRANSPORT]. | | server address; see Section 8.1 of [QUIC-TRANSPORT]. | |||
| Appendix A contains sample Initial packets. | Appendix A contains sample Initial packets. | |||
| 5.3. AEAD Usage | 5.3. AEAD Usage | |||
| The Authenticated Encryption with Associated Data (AEAD) function | The Authenticated Encryption with Associated Data (AEAD) function | |||
| (see [AEAD]) used for QUIC packet protection is the AEAD that is | (see [AEAD]) used for QUIC packet protection is the AEAD that is | |||
| negotiated for use with the TLS connection. For example, if TLS is | negotiated for use with the TLS connection. For example, if TLS is | |||
| using the TLS_AES_128_GCM_SHA256 cipher suite, the AEAD_AES_128_GCM | using the TLS_AES_128_GCM_SHA256 cipher suite, the AEAD_AES_128_GCM | |||
| function is used. | function is used. | |||
| skipping to change at page 27, line 18 ¶ | skipping to change at line 1209 ¶ | |||
| if (packet[0] & 0x80) == 0x80: | if (packet[0] & 0x80) == 0x80: | |||
| # Long header: 4 bits masked | # Long header: 4 bits masked | |||
| packet[0] ^= mask[0] & 0x0f | packet[0] ^= mask[0] & 0x0f | |||
| else: | else: | |||
| # Short header: 5 bits masked | # Short header: 5 bits masked | |||
| packet[0] ^= mask[0] & 0x1f | packet[0] ^= mask[0] & 0x1f | |||
| # pn_offset is the start of the Packet Number field. | # pn_offset is the start of the Packet Number field. | |||
| packet[pn_offset:pn_offset+pn_length] ^= mask[1:1+pn_length] | packet[pn_offset:pn_offset+pn_length] ^= mask[1:1+pn_length] | |||
| Figure 6: Header Protection Pseudocode | Figure 6: Header Protection Pseudocode | |||
| Specific header protection functions are defined based on the | Specific header protection functions are defined based on the | |||
| selected cipher suite; see Section 5.4.3 and Section 5.4.4. | selected cipher suite; see Section 5.4.3 and Section 5.4.4. | |||
| Figure 7 shows an example long header packet (Initial) and a short | Figure 7 shows an example long header packet (Initial) and a short | |||
| header packet (1-RTT). Figure 7 shows the fields in each header that | header packet (1-RTT). Figure 7 shows the fields in each header that | |||
| are covered by header protection and the portion of the protected | are covered by header protection and the portion of the protected | |||
| packet payload that is sampled. | packet payload that is sampled. | |||
| Initial Packet { | Initial Packet { | |||
| skipping to change at page 32, line 22 ¶ | skipping to change at line 1422 ¶ | |||
| if it receives an indication that 0-RTT data has been rejected. | if it receives an indication that 0-RTT data has been rejected. | |||
| A server MUST NOT use 0-RTT keys to protect packets; it uses 1-RTT | A server MUST NOT use 0-RTT keys to protect packets; it uses 1-RTT | |||
| keys to protect acknowledgments of 0-RTT packets. A client MUST NOT | keys to protect acknowledgments of 0-RTT packets. A client MUST NOT | |||
| attempt to decrypt 0-RTT packets it receives and instead MUST discard | attempt to decrypt 0-RTT packets it receives and instead MUST discard | |||
| them. | them. | |||
| Once a client has installed 1-RTT keys, it MUST NOT send any more | Once a client has installed 1-RTT keys, it MUST NOT send any more | |||
| 0-RTT packets. | 0-RTT packets. | |||
| Note: 0-RTT data can be acknowledged by the server as it receives | | Note: 0-RTT data can be acknowledged by the server as it | |||
| it, but any packets containing acknowledgments of 0-RTT data | | receives it, but any packets containing acknowledgments of | |||
| cannot have packet protection removed by the client until the TLS | | 0-RTT data cannot have packet protection removed by the client | |||
| handshake is complete. The 1-RTT keys necessary to remove packet | | until the TLS handshake is complete. The 1-RTT keys necessary | |||
| protection cannot be derived until the client receives all server | | to remove packet protection cannot be derived until the client | |||
| handshake messages. | | receives all server handshake messages. | |||
| 5.7. Receiving Out-of-Order Protected Packets | 5.7. Receiving Out-of-Order Protected Packets | |||
| Due to reordering and loss, protected packets might be received by an | Due to reordering and loss, protected packets might be received by an | |||
| endpoint before the final TLS handshake messages are received. A | endpoint before the final TLS handshake messages are received. A | |||
| client will be unable to decrypt 1-RTT packets from the server, | client will be unable to decrypt 1-RTT packets from the server, | |||
| whereas a server will be able to decrypt 1-RTT packets from the | whereas a server will be able to decrypt 1-RTT packets from the | |||
| client. Endpoints in either role MUST NOT decrypt 1-RTT packets from | client. Endpoints in either role MUST NOT decrypt 1-RTT packets from | |||
| their peer prior to completing the handshake. | their peer prior to completing the handshake. | |||
| Even though 1-RTT keys are available to a server after receiving the | Even though 1-RTT keys are available to a server after receiving the | |||
| first handshake messages from a client, it is missing assurances on | first handshake messages from a client, it is missing assurances on | |||
| the client state: | the client state: | |||
| o The client is not authenticated, unless the server has chosen to | * The client is not authenticated, unless the server has chosen to | |||
| use a pre-shared key and validated the client's pre-shared key | use a pre-shared key and validated the client's pre-shared key | |||
| binder; see Section 4.2.11 of [TLS13]. | binder; see Section 4.2.11 of [TLS13]. | |||
| o The client has not demonstrated liveness, unless the server has | * The client has not demonstrated liveness, unless the server has | |||
| validated the client's address with a Retry packet or other means; | validated the client's address with a Retry packet or other means; | |||
| see Section 8.1 of [QUIC-TRANSPORT]. | see Section 8.1 of [QUIC-TRANSPORT]. | |||
| o Any received 0-RTT data that the server responds to might be due | * Any received 0-RTT data that the server responds to might be due | |||
| to a replay attack. | to a replay attack. | |||
| Therefore, the server's use of 1-RTT keys before the handshake is | Therefore, the server's use of 1-RTT keys before the handshake is | |||
| complete is limited to sending data. A server MUST NOT process | complete is limited to sending data. A server MUST NOT process | |||
| incoming 1-RTT protected packets before the TLS handshake is | incoming 1-RTT protected packets before the TLS handshake is | |||
| complete. Because sending acknowledgments indicates that all frames | complete. Because sending acknowledgments indicates that all frames | |||
| in a packet have been processed, a server cannot send acknowledgments | in a packet have been processed, a server cannot send acknowledgments | |||
| for 1-RTT packets until the TLS handshake is complete. Received | for 1-RTT packets until the TLS handshake is complete. Received | |||
| packets protected with 1-RTT keys MAY be stored and later decrypted | packets protected with 1-RTT keys MAY be stored and later decrypted | |||
| and used once the handshake is complete. | and used once the handshake is complete. | |||
| Note: TLS implementations might provide all 1-RTT secrets prior to | | Note: TLS implementations might provide all 1-RTT secrets prior | |||
| handshake completion. Even where QUIC implementations have 1-RTT | | to handshake completion. Even where QUIC implementations have | |||
| read keys, those keys are not to be used prior to completing the | | 1-RTT read keys, those keys are not to be used prior to | |||
| handshake. | | completing the handshake. | |||
| The requirement for the server to wait for the client Finished | The requirement for the server to wait for the client Finished | |||
| message creates a dependency on that message being delivered. A | message creates a dependency on that message being delivered. A | |||
| client can avoid the potential for head-of-line blocking that this | client can avoid the potential for head-of-line blocking that this | |||
| implies by sending its 1-RTT packets coalesced with a Handshake | implies by sending its 1-RTT packets coalesced with a Handshake | |||
| packet containing a copy of the CRYPTO frame that carries the | packet containing a copy of the CRYPTO frame that carries the | |||
| Finished message, until one of the Handshake packets is acknowledged. | Finished message, until one of the Handshake packets is acknowledged. | |||
| This enables immediate server processing for those packets. | This enables immediate server processing for those packets. | |||
| A server could receive packets protected with 0-RTT keys prior to | A server could receive packets protected with 0-RTT keys prior to | |||
| skipping to change at page 33, line 47 ¶ | skipping to change at line 1495 ¶ | |||
| Retry packets (see Section 17.2.5 of [QUIC-TRANSPORT]) carry a Retry | Retry packets (see Section 17.2.5 of [QUIC-TRANSPORT]) carry a Retry | |||
| Integrity Tag that provides two properties: it allows the discarding | Integrity Tag that provides two properties: it allows the discarding | |||
| of packets that have accidentally been corrupted by the network, and | of packets that have accidentally been corrupted by the network, and | |||
| only an entity that observes an Initial packet can send a valid Retry | only an entity that observes an Initial packet can send a valid Retry | |||
| packet. | packet. | |||
| The Retry Integrity Tag is a 128-bit field that is computed as the | The Retry Integrity Tag is a 128-bit field that is computed as the | |||
| output of AEAD_AES_128_GCM [AEAD] used with the following inputs: | output of AEAD_AES_128_GCM [AEAD] used with the following inputs: | |||
| o The secret key, K, is 128 bits equal to | * The secret key, K, is 128 bits equal to | |||
| 0xbe0c690b9f66575a1d766b54e368c84e. | 0xbe0c690b9f66575a1d766b54e368c84e. | |||
| o The nonce, N, is 96 bits equal to 0x461599d35d632bf2239825bb. | * The nonce, N, is 96 bits equal to 0x461599d35d632bf2239825bb. | |||
| o The plaintext, P, is empty. | * The plaintext, P, is empty. | |||
| o The associated data, A, is the contents of the Retry Pseudo- | * The associated data, A, is the contents of the Retry Pseudo- | |||
| Packet, as illustrated in Figure 8: | Packet, as illustrated in Figure 8: | |||
| The secret key and the nonce are values derived by calling HKDF- | The secret key and the nonce are values derived by calling HKDF- | |||
| Expand-Label using | Expand-Label using | |||
| 0xd9c9943e6101fd200021506bcc02814c73030f25c79d71ce876eca876e6fca8e as | 0xd9c9943e6101fd200021506bcc02814c73030f25c79d71ce876eca876e6fca8e as | |||
| the secret, with labels being "quic key" and "quic iv" (Section 5.1). | the secret, with labels being "quic key" and "quic iv" (Section 5.1). | |||
| Retry Pseudo-Packet { | Retry Pseudo-Packet { | |||
| ODCID Length (8), | ODCID Length (8), | |||
| Original Destination Connection ID (0..160), | Original Destination Connection ID (0..160), | |||
| skipping to change at page 35, line 47 ¶ | skipping to change at line 1592 ¶ | |||
| QUIC Packets [1] @N | QUIC Packets [1] @N | |||
| containing ACK | containing ACK | |||
| <-------- | <-------- | |||
| ... Key Update Permitted | ... Key Update Permitted | |||
| @N [1] QUIC Packets | @N [1] QUIC Packets | |||
| containing ACK for @N packets | containing ACK for @N packets | |||
| --------> | --------> | |||
| Key Update Permitted ... | Key Update Permitted ... | |||
| Figure 9: Key Update | Figure 9: Key Update | |||
| 6.1. Initiating a Key Update | 6.1. Initiating a Key Update | |||
| Endpoints maintain separate read and write secrets for packet | Endpoints maintain separate read and write secrets for packet | |||
| protection. An endpoint initiates a key update by updating its | protection. An endpoint initiates a key update by updating its | |||
| packet protection write secret and using that to protect new packets. | packet protection write secret and using that to protect new packets. | |||
| The endpoint creates a new write secret from the existing write | The endpoint creates a new write secret from the existing write | |||
| secret as performed in Section 7.2 of [TLS13]. This uses the KDF | secret as performed in Section 7.2 of [TLS13]. This uses the KDF | |||
| function provided by TLS with a label of "quic ku". The | function provided by TLS with a label of "quic ku". The | |||
| corresponding key and IV are created from that secret as defined in | corresponding key and IV are created from that secret as defined in | |||
| skipping to change at page 36, line 36 ¶ | skipping to change at line 1625 ¶ | |||
| the handshake (Section 4.1.2). An endpoint MUST NOT initiate a | the handshake (Section 4.1.2). An endpoint MUST NOT initiate a | |||
| subsequent key update unless it has received an acknowledgment for a | subsequent key update unless it has received an acknowledgment for a | |||
| packet that was sent protected with keys from the current key phase. | packet that was sent protected with keys from the current key phase. | |||
| This ensures that keys are available to both peers before another key | This ensures that keys are available to both peers before another key | |||
| update can be initiated. This can be implemented by tracking the | update can be initiated. This can be implemented by tracking the | |||
| lowest packet number sent with each key phase and the highest | lowest packet number sent with each key phase and the highest | |||
| acknowledged packet number in the 1-RTT space: once the latter is | acknowledged packet number in the 1-RTT space: once the latter is | |||
| higher than or equal to the former, another key update can be | higher than or equal to the former, another key update can be | |||
| initiated. | initiated. | |||
| Note: Keys of packets other than the 1-RTT packets are never | | Note: Keys of packets other than the 1-RTT packets are never | |||
| updated; their keys are derived solely from the TLS handshake | | updated; their keys are derived solely from the TLS handshake | |||
| state. | | state. | |||
| The endpoint that initiates a key update also updates the keys that | The endpoint that initiates a key update also updates the keys that | |||
| it uses for receiving packets. These keys will be needed to process | it uses for receiving packets. These keys will be needed to process | |||
| packets the peer sends after updating. | packets the peer sends after updating. | |||
| An endpoint MUST retain old keys until it has successfully | An endpoint MUST retain old keys until it has successfully | |||
| unprotected a packet sent using the new keys. An endpoint SHOULD | unprotected a packet sent using the new keys. An endpoint SHOULD | |||
| retain old keys for some time after unprotecting a packet sent using | retain old keys for some time after unprotecting a packet sent using | |||
| the new keys. Discarding old keys too early can cause delayed | the new keys. Discarding old keys too early can cause delayed | |||
| packets to be discarded. Discarding packets will be interpreted as | packets to be discarded. Discarding packets will be interpreted as | |||
| skipping to change at page 46, line 4 ¶ | skipping to change at line 2071 ¶ | |||
| [NAN] analyzes authenticated encryption algorithms that provide nonce | [NAN] analyzes authenticated encryption algorithms that provide nonce | |||
| privacy, referred to as "Hide Nonce" (HN) transforms. The general | privacy, referred to as "Hide Nonce" (HN) transforms. The general | |||
| header protection construction in this document is one of those | header protection construction in this document is one of those | |||
| algorithms (HN1). Header protection is applied after the packet | algorithms (HN1). Header protection is applied after the packet | |||
| protection AEAD, sampling a set of bytes ("sample") from the AEAD | protection AEAD, sampling a set of bytes ("sample") from the AEAD | |||
| output and encrypting the header field using a pseudorandom function | output and encrypting the header field using a pseudorandom function | |||
| (PRF) as follows: | (PRF) as follows: | |||
| protected_field = field XOR PRF(hp_key, sample) | protected_field = field XOR PRF(hp_key, sample) | |||
| The header protection variants in this document use a pseudorandom | The header protection variants in this document use a pseudorandom | |||
| permutation (PRP) in place of a generic PRF. However, since all PRPs | permutation (PRP) in place of a generic PRF. However, since all PRPs | |||
| are also PRFs [IMC], these variants do not deviate from the HN1 | are also PRFs [IMC], these variants do not deviate from the HN1 | |||
| construction. | construction. | |||
| As "hp_key" is distinct from the packet protection key, it follows | As "hp_key" is distinct from the packet protection key, it follows | |||
| that header protection achieves AE2 security as defined in [NAN] and | that header protection achieves AE2 security as defined in [NAN] and | |||
| therefore guarantees privacy of "field", the protected packet header. | therefore guarantees privacy of "field", the protected packet header. | |||
| Future header protection variants based on this construction MUST use | Future header protection variants based on this construction MUST use | |||
| a PRF to ensure equivalent security guarantees. | a PRF to ensure equivalent security guarantees. | |||
| Use of the same key and ciphertext sample more than once risks | Use of the same key and ciphertext sample more than once risks | |||
| compromising header protection. Protecting two different headers | compromising header protection. Protecting two different headers | |||
| with the same key and ciphertext sample reveals the exclusive OR of | with the same key and ciphertext sample reveals the exclusive OR of | |||
| the protected fields. Assuming that the AEAD acts as a PRF, if L | the protected fields. Assuming that the AEAD acts as a PRF, if L | |||
| bits are sampled, the odds of two ciphertext samples being identical | bits are sampled, the odds of two ciphertext samples being identical | |||
| approach 2^-L/2, that is, the birthday bound. For the algorithms | approach 2^(-L/2), that is, the birthday bound. For the algorithms | |||
| described in this document, that probability is one in 2^64. | described in this document, that probability is one in 2^64. | |||
| To prevent an attacker from modifying packet headers, the header is | To prevent an attacker from modifying packet headers, the header is | |||
| transitively authenticated using packet protection; the entire packet | transitively authenticated using packet protection; the entire packet | |||
| header is part of the authenticated additional data. Protected | header is part of the authenticated additional data. Protected | |||
| fields that are falsified or modified can only be detected once the | fields that are falsified or modified can only be detected once the | |||
| packet protection is removed. | packet protection is removed. | |||
| 9.5. Header Protection Timing Side Channels | 9.5. Header Protection Timing Side Channels | |||
| skipping to change at page 48, line 8 ¶ | skipping to change at line 2171 ¶ | |||
| 10. IANA Considerations | 10. IANA Considerations | |||
| IANA has registered a codepoint of 57 (or 0x39) for the | IANA has registered a codepoint of 57 (or 0x39) for the | |||
| quic_transport_parameters extension (defined in Section 8.2) in the | quic_transport_parameters extension (defined in Section 8.2) in the | |||
| "TLS ExtensionType Values" registry [TLS-REGISTRIES]. | "TLS ExtensionType Values" registry [TLS-REGISTRIES]. | |||
| The Recommended column for this extension is marked Yes. The TLS 1.3 | The Recommended column for this extension is marked Yes. The TLS 1.3 | |||
| Column includes CH (ClientHello) and EE (EncryptedExtensions). | Column includes CH (ClientHello) and EE (EncryptedExtensions). | |||
| +-------+---------------------------+-----+-------------+-----------+ | +=======+===========================+=====+=============+===========+ | |||
| | Value | Extension Name | TLS | Recommended | Reference | | | Value | Extension Name | TLS | Recommended | Reference | | |||
| | | | 1.3 | | | | | | | 1.3 | | | | |||
| +-------+---------------------------+-----+-------------+-----------+ | +=======+===========================+=====+=============+===========+ | |||
| | 57 | quic_transport_parameters | CH, | Y | This | | | 57 | quic_transport_parameters | CH, | Y | This | | |||
| | | | EE | | document | | | | | EE | | document | | |||
| +-------+---------------------------+-----+-------------+-----------+ | +-------+---------------------------+-----+-------------+-----------+ | |||
| Table 2: TLS ExtensionType Values Registry Entry | Table 2: TLS ExtensionType Values Registry Entry | |||
| 11. References | 11. References | |||
| 11.1. Normative References | 11.1. Normative References | |||
| [AEAD] McGrew, D., "An Interface and Algorithms for Authenticated | [AEAD] McGrew, D., "An Interface and Algorithms for Authenticated | |||
| Encryption", RFC 5116, DOI 10.17487/RFC5116, January 2008, | Encryption", RFC 5116, DOI 10.17487/RFC5116, January 2008, | |||
| <https://www.rfc-editor.org/info/rfc5116>. | <https://www.rfc-editor.org/info/rfc5116>. | |||
| [AES] "Advanced encryption standard (AES)", National Institute | [AES] "Advanced encryption standard (AES)", National Institute | |||
| of Standards and Technology report, | of Standards and Technology report, | |||
| DOI 10.6028/nist.fips.197, November 2001. | DOI 10.6028/nist.fips.197, November 2001, | |||
| <https://doi.org/10.6028/nist.fips.197>. | ||||
| [ALPN] Friedl, S., Popov, A., Langley, A., and E. Stephan, | [ALPN] Friedl, S., Popov, A., Langley, A., and E. Stephan, | |||
| "Transport Layer Security (TLS) Application-Layer Protocol | "Transport Layer Security (TLS) Application-Layer Protocol | |||
| Negotiation Extension", RFC 7301, DOI 10.17487/RFC7301, | Negotiation Extension", RFC 7301, DOI 10.17487/RFC7301, | |||
| July 2014, <https://www.rfc-editor.org/info/rfc7301>. | July 2014, <https://www.rfc-editor.org/info/rfc7301>. | |||
| [CHACHA] Nir, Y. and A. Langley, "ChaCha20 and Poly1305 for IETF | [CHACHA] Nir, Y. and A. Langley, "ChaCha20 and Poly1305 for IETF | |||
| Protocols", RFC 8439, DOI 10.17487/RFC8439, June 2018, | Protocols", RFC 8439, DOI 10.17487/RFC8439, June 2018, | |||
| <https://www.rfc-editor.org/info/rfc8439>. | <https://www.rfc-editor.org/info/rfc8439>. | |||
| skipping to change at page 49, line 27 ¶ | skipping to change at line 2235 ¶ | |||
| "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/info/rfc4086>. | <https://www.rfc-editor.org/info/rfc4086>. | |||
| [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/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [SHA] Dang, Q., "Secure Hash Standard", National Institute of | [SHA] Dang, Q., "Secure Hash Standard", National Institute of | |||
| Standards and Technology report, | Standards and Technology report, | |||
| DOI 10.6028/nist.fips.180-4, July 2015. | DOI 10.6028/nist.fips.180-4, July 2015, | |||
| <https://doi.org/10.6028/nist.fips.180-4>. | ||||
| [TLS-REGISTRIES] | [TLS-REGISTRIES] | |||
| Salowey, J. and S. Turner, "IANA Registry Updates for TLS | 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/info/rfc8447>. | <https://www.rfc-editor.org/info/rfc8447>. | |||
| [TLS13] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [TLS13] 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/info/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
| 11.2. Informative References | 11.2. Informative References | |||
| [AEBounds] | [AEBounds] Luykx, A. and K. Paterson, "Limits on Authenticated | |||
| Luykx, A. and K. Paterson, "Limits on Authenticated | Encryption Use in TLS", 28 August 2017, | |||
| Encryption Use in TLS", August 2017, | ||||
| <https://www.isg.rhul.ac.uk/~kp/TLS-AEbounds.pdf>. | <https://www.isg.rhul.ac.uk/~kp/TLS-AEbounds.pdf>. | |||
| [ASCII] Cerf, V., "ASCII format for network interchange", STD 80, | [ASCII] Cerf, V., "ASCII format for network interchange", STD 80, | |||
| RFC 20, DOI 10.17487/RFC0020, October 1969, | RFC 20, DOI 10.17487/RFC0020, October 1969, | |||
| <https://www.rfc-editor.org/info/rfc20>. | <https://www.rfc-editor.org/info/rfc20>. | |||
| [CCM-ANALYSIS] | [CCM-ANALYSIS] | |||
| Jonsson, J., "On the Security of CTR + CBC-MAC", | Jonsson, J., "On the Security of CTR + CBC-MAC", Selected | |||
| DOI 10.1007/3-540-36492-7_7, Selected Areas in | Areas in Cryptography, SAC 2002, Lecture Notes in Computer | |||
| Cryptography, SAC 2002, Lecture Notes in Computer Science, | Science, vol 2595, pp. 76-93, DOI 10.1007/3-540-36492-7_7, | |||
| vol 2595, pp. 76-93, 2003. | 2003, <https://doi.org/10.1007/3-540-36492-7_7>. | |||
| [COMPRESS] | [COMPRESS] Ghedini, A. and V. Vasiliev, "TLS Certificate | |||
| Ghedini, A. and V. Vasiliev, "TLS Certificate | ||||
| Compression", RFC 8879, DOI 10.17487/RFC8879, December | Compression", RFC 8879, DOI 10.17487/RFC8879, December | |||
| 2020, <https://www.rfc-editor.org/info/rfc8879>. | 2020, <https://www.rfc-editor.org/info/rfc8879>. | |||
| [GCM-MU] Hoang, V., Tessaro, S., and A. Thiruvengadam, "The Multi- | [GCM-MU] Hoang, V., Tessaro, S., and A. Thiruvengadam, "The Multi- | |||
| user Security of GCM, Revisited: Tight Bounds for Nonce | user Security of GCM, Revisited: Tight Bounds for Nonce | |||
| Randomization", DOI 10.1145/3243734.3243816, CCS '18: | Randomization", CCS '18: Proceedings of the 2018 ACM | |||
| Proceedings of the 2018 ACM SIGSAC Conference on Computer | SIGSAC Conference on Computer and Communications Security, | |||
| and Communications Security, pp. 1429-1440, 2018. | pp. 1429-1440, DOI 10.1145/3243734.3243816, 2018, | |||
| <https://doi.org/10.1145/3243734.3243816>. | ||||
| [HTTP-REPLAY] | [HTTP-REPLAY] | |||
| Thomson, M., Nottingham, M., and W. Tarreau, "Using Early | Thomson, M., Nottingham, M., and W. Tarreau, "Using Early | |||
| Data in HTTP", RFC 8470, DOI 10.17487/RFC8470, September | Data in HTTP", RFC 8470, DOI 10.17487/RFC8470, September | |||
| 2018, <https://www.rfc-editor.org/info/rfc8470>. | 2018, <https://www.rfc-editor.org/info/rfc8470>. | |||
| [HTTP2-TLS13] | [HTTP2-TLS13] | |||
| Benjamin, D., "Using TLS 1.3 with HTTP/2", RFC 8740, | Benjamin, D., "Using TLS 1.3 with HTTP/2", RFC 8740, | |||
| DOI 10.17487/RFC8740, February 2020, | DOI 10.17487/RFC8740, February 2020, | |||
| <https://www.rfc-editor.org/info/rfc8740>. | <https://www.rfc-editor.org/info/rfc8740>. | |||
| [IMC] Katz, J. and Y. Lindell, "Introduction to Modern | [IMC] Katz, J. and Y. Lindell, "Introduction to Modern | |||
| Cryptography, Second Edition", ISBN 978-1466570269, | Cryptography, Second Edition", ISBN 978-1466570269, 6 | |||
| November 2014. | November 2014. | |||
| [NAN] Bellare, M., Ng, R., and B. Tackmann, "Nonces Are Noticed: | [NAN] Bellare, M., Ng, R., and B. Tackmann, "Nonces Are Noticed: | |||
| AEAD Revisited", DOI 10.1007/978-3-030-26948-7_9, | AEAD Revisited", Advances in Cryptology - CRYPTO 2019, | |||
| Advances in Cryptology - CRYPTO 2019, Lecture Notes in | Lecture Notes in Computer Science, vol 11692, pp. 235-265, | |||
| Computer Science, vol 11692, pp. 235-265, 2019. | DOI 10.1007/978-3-030-26948-7_9, 2019, | |||
| <https://doi.org/10.1007/978-3-030-26948-7_9>. | ||||
| [QUIC-HTTP] | [QUIC-HTTP] | |||
| Bishop, M., Ed., "Hypertext Transfer Protocol Version 3 | Bishop, M., Ed., "Hypertext Transfer Protocol Version 3 | |||
| (HTTP/3)", draft-ietf-quic-http-latest (work in progress). | (HTTP/3)", Work in Progress, Internet-Draft, draft-ietf- | |||
| quic-http-34, 2 February 2021, | ||||
| <https://tools.ietf.org/html/draft-ietf-quic-http-34>. | ||||
| [RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, | [RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, | |||
| DOI 10.17487/RFC2818, May 2000, | DOI 10.17487/RFC2818, May 2000, | |||
| <https://www.rfc-editor.org/info/rfc2818>. | <https://www.rfc-editor.org/info/rfc2818>. | |||
| [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | |||
| Housley, R., and W. Polk, "Internet X.509 Public Key | Housley, R., and W. Polk, "Internet X.509 Public Key | |||
| Infrastructure Certificate and Certificate Revocation List | Infrastructure Certificate and Certificate Revocation List | |||
| (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008, | (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008, | |||
| <https://www.rfc-editor.org/info/rfc5280>. | <https://www.rfc-editor.org/info/rfc5280>. | |||
| [ROBUST] Fischlin, M., Guenther, F., and C. Janson, "Robust | [ROBUST] Fischlin, M., Günther, F., and C. Janson, "Robust | |||
| Channels: Handling Unreliable Networks in the Record | Channels: Handling Unreliable Networks in the Record | |||
| Layers of QUIC and DTLS 1.3", May 2020, | Layers of QUIC and DTLS 1.3", 16 May 2020, | |||
| <https://eprint.iacr.org/2020/718>. | <https://eprint.iacr.org/2020/718>. | |||
| Appendix A. Sample Packet Protection | Appendix A. Sample Packet Protection | |||
| This section shows examples of packet protection so that | This section shows examples of packet protection so that | |||
| implementations can be verified incrementally. Samples of Initial | implementations can be verified incrementally. Samples of Initial | |||
| packets from both client and server plus a Retry packet are defined. | packets from both client and server plus a Retry packet are defined. | |||
| These packets use an 8-byte client-chosen Destination Connection ID | These packets use an 8-byte client-chosen Destination Connection ID | |||
| of 0x8394c8f03e515708. Some intermediate values are included. All | of 0x8394c8f03e515708. Some intermediate values are included. All | |||
| values are shown in hexadecimal. | values are shown in hexadecimal. | |||
| skipping to change at page 57, line 13 ¶ | skipping to change at line 2559 ¶ | |||
| packet = 4cfe4189655e5cd55c41f69080575d7999c25a5bfb | packet = 4cfe4189655e5cd55c41f69080575d7999c25a5bfb | |||
| Appendix B. AEAD Algorithm Analysis | Appendix B. AEAD Algorithm Analysis | |||
| This section documents analyses used in deriving AEAD algorithm | This section documents analyses used in deriving AEAD algorithm | |||
| limits for AEAD_AES_128_GCM, AEAD_AES_128_CCM, and AEAD_AES_256_GCM. | limits for AEAD_AES_128_GCM, AEAD_AES_128_CCM, and AEAD_AES_256_GCM. | |||
| The analyses that follow use symbols for multiplication (*), division | The analyses that follow use symbols for multiplication (*), division | |||
| (/), and exponentiation (^), plus parentheses for establishing | (/), and exponentiation (^), plus parentheses for establishing | |||
| precedence. The following symbols are also used: | precedence. The following symbols are also used: | |||
| t: The size of the authentication tag in bits. For these ciphers, t | t: The size of the authentication tag in bits. For these ciphers, t | |||
| is 128. | is 128. | |||
| n: The size of the block function in bits. For these ciphers, n is | n: The size of the block function in bits. For these ciphers, n is | |||
| 128. | 128. | |||
| k: The size of the key in bits. This is 128 for AEAD_AES_128_GCM and | k: The size of the key in bits. This is 128 for AEAD_AES_128_GCM | |||
| AEAD_AES_128_CCM; 256 for AEAD_AES_256_GCM. | and AEAD_AES_128_CCM; 256 for AEAD_AES_256_GCM. | |||
| l: The number of blocks in each packet (see below). | l: The number of blocks in each packet (see below). | |||
| q: The number of genuine packets created and protected by endpoints. | q: The number of genuine packets created and protected by endpoints. | |||
| This value is the bound on the number of packets that can be | This value is the bound on the number of packets that can be | |||
| protected before updating keys. | protected before updating keys. | |||
| v: The number of forged packets that endpoints will accept. This | v: The number of forged packets that endpoints will accept. This | |||
| value is the bound on the number of forged packets that an | value is the bound on the number of forged packets that an | |||
| endpoint can reject before updating keys. | endpoint can reject before updating keys. | |||
| o: The amount of offline ideal cipher queries made by an adversary. | o: The amount of offline ideal cipher queries made by an adversary. | |||
| The analyses that follow rely on a count of the number of block | The analyses that follow rely on a count of the number of block | |||
| operations involved in producing each message. This analysis is | operations involved in producing each message. This analysis is | |||
| performed for packets of size up to 2^11 (l = 2^7) and 2^16 (l = | performed for packets of size up to 2^11 (l = 2^7) and 2^16 (l = | |||
| 2^12). A size of 2^11 is expected to be a limit that matches common | 2^12). A size of 2^11 is expected to be a limit that matches common | |||
| deployment patterns, whereas the 2^16 is the maximum possible size of | deployment patterns, whereas the 2^16 is the maximum possible size of | |||
| a QUIC packet. Only endpoints that strictly limit packet size can | a QUIC packet. Only endpoints that strictly limit packet size can | |||
| use the larger confidentiality and integrity limits that are derived | use the larger confidentiality and integrity limits that are derived | |||
| using the smaller packet size. | using the smaller packet size. | |||
| For AEAD_AES_128_GCM and AEAD_AES_256_GCM, the message length (l) is | For AEAD_AES_128_GCM and AEAD_AES_256_GCM, the message length (l) is | |||
| the length of the associated data in blocks plus the length of the | the length of the associated data in blocks plus the length of the | |||
| plaintext in blocks. | plaintext in blocks. | |||
| For AEAD_AES_128_CCM, the total number of block cipher operations is | For AEAD_AES_128_CCM, the total number of block cipher operations is | |||
| the sum of the following: the length of the associated data in | the sum of the following: the length of the associated data in | |||
| blocks, the length of the ciphertext in blocks, the length of the | blocks, the length of the ciphertext in blocks, the length of the | |||
| plaintext in blocks, plus 1. In this analysis, this is simplified to | plaintext in blocks, plus 1. In this analysis, this is simplified to | |||
| a value of twice the length of the packet in blocks (that is, 2l = | a value of twice the length of the packet in blocks (that is, "2l = | |||
| 2^8 for packets that are limited to 2^11 bytes, or 2l = 2^13 | 2^8" for packets that are limited to 2^11 bytes, or "2l = 2^13" | |||
| otherwise). This simplification is based on the packet containing | otherwise). This simplification is based on the packet containing | |||
| all of the associated data and ciphertext. This results in a one to | all of the associated data and ciphertext. This results in a one to | |||
| three block overestimation of the number of operations per packet. | three block overestimation of the number of operations per packet. | |||
| B.1. Analysis of AEAD_AES_128_GCM and AEAD_AES_256_GCM Usage Limits | B.1. Analysis of AEAD_AES_128_GCM and AEAD_AES_256_GCM Usage Limits | |||
| [GCM-MU] specifies concrete bounds for AEAD_AES_128_GCM and | [GCM-MU] specifies concrete bounds for AEAD_AES_128_GCM and | |||
| AEAD_AES_256_GCM as used in TLS 1.3 and QUIC. This section documents | AEAD_AES_256_GCM as used in TLS 1.3 and QUIC. This section documents | |||
| this analysis using several simplifying assumptions: | this analysis using several simplifying assumptions: | |||
| o The number of ciphertext blocks an attacker uses in forgery | * The number of ciphertext blocks an attacker uses in forgery | |||
| attempts is bounded by v * l, which is the number of forgery | attempts is bounded by v * l, which is the number of forgery | |||
| attempts multiplied by the size of each packet (in blocks). | attempts multiplied by the size of each packet (in blocks). | |||
| o The amount of offline work done by an attacker does not dominate | * The amount of offline work done by an attacker does not dominate | |||
| other factors in the analysis. | other factors in the analysis. | |||
| The bounds in [GCM-MU] are tighter and more complete than those used | The bounds in [GCM-MU] are tighter and more complete than those used | |||
| in [AEBounds], which allows for larger limits than those described in | in [AEBounds], which allows for larger limits than those described in | |||
| [TLS13]. | [TLS13]. | |||
| B.1.1. Confidentiality Limit | B.1.1. Confidentiality Limit | |||
| For confidentiality, Theorem (4.3) in [GCM-MU] establishes that, for | For confidentiality, Theorem (4.3) in [GCM-MU] establishes that, for | |||
| a single user that does not repeat nonces, the dominant term in | a single user that does not repeat nonces, the dominant term in | |||
| skipping to change at page 60, line 27 ¶ | skipping to change at line 2719 ¶ | |||
| therefore have both confidentiality and integrity limits of 2^26.5 | therefore have both confidentiality and integrity limits of 2^26.5 | |||
| packets. Endpoints that do not restrict packet size have a limit of | packets. Endpoints that do not restrict packet size have a limit of | |||
| 2^21.5. | 2^21.5. | |||
| Contributors | Contributors | |||
| The IETF QUIC Working Group received an enormous amount of support | The IETF QUIC Working Group received an enormous amount of support | |||
| from many people. The following people provided substantive | from many people. The following people provided substantive | |||
| contributions to this document: | contributions to this document: | |||
| o Adam Langley | * Adam Langley | |||
| * Alessandro Ghedini | ||||
| o Alessandro Ghedini | * Christian Huitema | |||
| * Christopher Wood | ||||
| o Christian Huitema | * David Schinazi | |||
| * Dragana Damjanovic | ||||
| o Christopher Wood | * Eric Rescorla | |||
| * Felix Günther | ||||
| o David Schinazi | * Ian Swett | |||
| * Jana Iyengar | ||||
| o Dragana Damjanovic | * 奥 一穂 (Kazuho Oku) | |||
| * Marten Seemann | ||||
| o Eric Rescorla | * Martin Duke | |||
| o Felix Guenther | * Mike Bishop | |||
| * Mikkel Fahnøe Jørgensen | ||||
| o Ian Swett | * Nick Banks | |||
| * Nick Harper | ||||
| o Jana Iyengar | * Roberto Peon | |||
| * Rui Paulo | ||||
| o Kazuho Oku | * Ryan Hamilton | |||
| * Victor Vasiliev | ||||
| o Marten Seemann | ||||
| o Martin Duke | ||||
| o Mike Bishop | ||||
| o Mikkel Fahnoee Joergensen | ||||
| o Nick Banks | ||||
| o Nick Harper | ||||
| o Roberto Peon | ||||
| o Rui Paulo | ||||
| o Ryan Hamilton | ||||
| o Victor Vasiliev | ||||
| Authors' Addresses | Authors' Addresses | |||
| Martin Thomson (editor) | Martin Thomson (editor) | |||
| Mozilla | Mozilla | |||
| Email: mt@lowentropy.net | Email: mt@lowentropy.net | |||
| Sean Turner (editor) | Sean Turner (editor) | |||
| sn3rd | sn3rd | |||
| End of changes. 83 change blocks. | ||||
| 238 lines changed or deleted | 227 lines changed or added | |||
This html diff was produced by rfcdiff 1.44jr. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||