| rfc9729.original | rfc9729.txt | |||
|---|---|---|---|---|
| HTTPBIS D. Schinazi | Internet Engineering Task Force (IETF) D. Schinazi | |||
| Internet-Draft Google LLC | Request for Comments: 9729 Google LLC | |||
| Intended status: Standards Track D. Oliver | Category: Standards Track D. Oliver | |||
| Expires: 23 March 2025 Guardian Project | ISSN: 2070-1721 Guardian Project | |||
| J. Hoyland | J. Hoyland | |||
| Cloudflare Inc. | Cloudflare Inc. | |||
| 19 September 2024 | February 2025 | |||
| The Concealed HTTP Authentication Scheme | The Concealed HTTP Authentication Scheme | |||
| draft-ietf-httpbis-unprompted-auth-12 | ||||
| Abstract | Abstract | |||
| Most HTTP authentication schemes are probeable in the sense that it | Most HTTP authentication schemes are probeable in the sense that it | |||
| is possible for an unauthenticated client to probe whether an origin | is possible for an unauthenticated client to probe whether an origin | |||
| serves resources that require authentication. It is possible for an | serves resources that require authentication. It is possible for an | |||
| origin to hide the fact that it requires authentication by not | origin to hide the fact that it requires authentication by not | |||
| generating Unauthorized status codes, however that only works with | generating Unauthorized status codes; however, that only works with | |||
| non-cryptographic authentication schemes: cryptographic signatures | non-cryptographic authentication schemes: cryptographic signatures | |||
| require a fresh nonce to be signed. Prior to this document, there | require a fresh nonce to be signed. Prior to this document, there | |||
| was no existing way for the origin to share such a nonce without | was no existing way for the origin to share such a nonce without | |||
| exposing the fact that it serves resources that require | exposing the fact that it serves resources that require | |||
| authentication. This document defines a new non-probeable | authentication. This document defines a new non-probeable | |||
| cryptographic authentication scheme. | cryptographic authentication scheme. | |||
| About This Document | ||||
| This note is to be removed before publishing as an RFC. | ||||
| The latest revision of this draft can be found at https://httpwg.org/ | ||||
| http-extensions/draft-ietf-httpbis-unprompted-auth.html. Status | ||||
| information for this document may be found at | ||||
| https://datatracker.ietf.org/doc/draft-ietf-httpbis-unprompted-auth/. | ||||
| Discussion of this document takes place on the HTTP Working Group | ||||
| mailing list (mailto:ietf-http-wg@w3.org), which is archived at | ||||
| https://lists.w3.org/Archives/Public/ietf-http-wg/. Working Group | ||||
| information can be found at https://httpwg.org/. | ||||
| Source for this draft and an issue tracker can be found at | ||||
| https://github.com/httpwg/http-extensions/labels/unprompted-auth. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on 23 March 2025. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| https://www.rfc-editor.org/info/rfc9729. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2024 IETF Trust and the persons identified as the | Copyright (c) 2025 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
| described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
| provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
| 1.1. Conventions and Definitions . . . . . . . . . . . . . . . 3 | 1.1. Conventions and Definitions | |||
| 2. The Concealed Authentication Scheme . . . . . . . . . . . . . 4 | 2. The Concealed HTTP Authentication Scheme | |||
| 3. Client Handling . . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Client Handling | |||
| 3.1. Key Exporter Context . . . . . . . . . . . . . . . . . . 4 | 3.1. Key Exporter Context | |||
| 3.1.1. Public Key Encoding . . . . . . . . . . . . . . . . . 6 | 3.1.1. Public Key Encoding | |||
| 3.2. Key Exporter Output . . . . . . . . . . . . . . . . . . . 6 | 3.2. Key Exporter Output | |||
| 3.3. Signature Computation . . . . . . . . . . . . . . . . . . 7 | 3.3. Signature Computation | |||
| 4. Authentication Parameters . . . . . . . . . . . . . . . . . . 7 | 4. Authentication Parameters | |||
| 4.1. The k Parameter . . . . . . . . . . . . . . . . . . . . . 8 | 4.1. The k Parameter | |||
| 4.2. The a Parameter . . . . . . . . . . . . . . . . . . . . . 8 | 4.2. The a Parameter | |||
| 4.3. The p Parameter . . . . . . . . . . . . . . . . . . . . . 8 | 4.3. The p Parameter | |||
| 4.4. The s Parameter . . . . . . . . . . . . . . . . . . . . . 8 | 4.4. The s Parameter | |||
| 4.5. The v Parameter . . . . . . . . . . . . . . . . . . . . . 9 | 4.5. The v Parameter | |||
| 5. Example . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 5. Example | |||
| 6. Server Handling . . . . . . . . . . . . . . . . . . . . . . . 9 | 6. Server Handling | |||
| 6.1. Frontend Handling . . . . . . . . . . . . . . . . . . . . 10 | 6.1. Frontend Handling | |||
| 6.2. Communication between Frontend and Backend . . . . . . . 10 | 6.2. Communication Between Frontend and Backend | |||
| 6.3. Backend Handling . . . . . . . . . . . . . . . . . . . . 11 | 6.3. Backend Handling | |||
| 6.4. Non-Probeable Server Handling . . . . . . . . . . . . . . 11 | 6.4. Non-Probeable Server Handling | |||
| 7. Requirements on TLS Usage | ||||
| 7. Requirements on TLS Usage . . . . . . . . . . . . . . . . . . 12 | 8. Security Considerations | |||
| 8. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | 9. IANA Considerations | |||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 | 9.1. HTTP Authentication Schemes Registry | |||
| 9.1. HTTP Authentication Schemes Registry . . . . . . . . . . 13 | 9.2. TLS Keying Material Exporter Labels | |||
| 9.2. TLS Keying Material Exporter Labels . . . . . . . . . . . 13 | 9.3. HTTP Field Name | |||
| 9.3. HTTP Field Name . . . . . . . . . . . . . . . . . . . . . 14 | 10. References | |||
| 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 10.1. Normative References | |||
| 10.1. Normative References . . . . . . . . . . . . . . . . . . 14 | 10.2. Informative References | |||
| 10.2. Informative References . . . . . . . . . . . . . . . . . 16 | Acknowledgments | |||
| Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 16 | Authors' Addresses | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 17 | ||||
| 1. Introduction | 1. Introduction | |||
| HTTP authentication schemes (see Section 11 of [HTTP]) allow origins | HTTP authentication schemes (see Section 11 of [HTTP]) allow origins | |||
| to restrict access for some resources to only authenticated requests. | to restrict access for some resources to only authenticated requests. | |||
| While these schemes commonly involve a challenge where the origin | While these schemes commonly involve a challenge where the origin | |||
| asks the client to provide authentication information, it is possible | asks the client to provide authentication information, it is possible | |||
| for clients to send such information unprompted. This is | for clients to send such information unprompted. This is | |||
| particularly useful in cases where an origin wants to offer a service | particularly useful in cases where an origin wants to offer a service | |||
| or capability only to "those who know" while all others are given no | or capability only to "those who know", while all others are given no | |||
| indication the service or capability exists. Such designs rely on an | indication the service or capability exists. Such designs rely on an | |||
| externally-defined mechanism by which keys are distributed. For | externally defined mechanism by which keys are distributed. For | |||
| example, a company might offer remote employee access to company | example, a company might offer remote employee access to company | |||
| services directly via its website using their employee credentials, | services directly via its website using their employee credentials or | |||
| or offer access to limited special capabilities for specific | offer access to limited special capabilities for specific employees | |||
| employees, while making discovering (or probing for) such | while making discovering (or probing for) such capabilities | |||
| capabilities difficult. As another example, members of less well- | difficult. As another example, members of less well-defined | |||
| defined communities might use more ephemeral keys to acquire access | communities might use more ephemeral keys to acquire access to | |||
| to geography- or capability-specific resources, as issued by an | geography- or capability-specific resources, as issued by an entity | |||
| entity whose user base is larger than the available resources can | whose user base is larger than the available resources can support | |||
| support (by having that entity metering the availability of keys | (by having that entity metering the availability of keys temporally | |||
| temporally or geographically). | or geographically). | |||
| While digital-signature-based HTTP authentication schemes already | While digital-signature-based HTTP authentication schemes already | |||
| exist (e.g., [HOBA]), they rely on the origin explicitly sending a | exist (e.g., [HOBA]), they rely on the origin explicitly sending a | |||
| fresh challenge to the client, to ensure that the signature input is | fresh challenge to the client, to ensure that the signature input is | |||
| fresh. That makes the origin probeable as it sends the challenge to | fresh. That makes the origin probeable as it sends the challenge to | |||
| unauthenticated clients. This document defines a new signature-based | unauthenticated clients. This document defines a new signature-based | |||
| authentication scheme that is not probeable. | authentication scheme that is not probeable. | |||
| 1.1. Conventions and Definitions | 1.1. Conventions and Definitions | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "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 uses the notation from Section 1.3 of [QUIC]. | This document uses the notation from Section 1.3 of [QUIC]. | |||
| 2. The Concealed Authentication Scheme | Various examples in this document contain long lines that may be | |||
| folded, as described in [RFC8792]. | ||||
| 2. The Concealed HTTP Authentication Scheme | ||||
| This document defines the "Concealed" HTTP authentication scheme. It | This document defines the "Concealed" HTTP authentication scheme. It | |||
| uses asymmetric cryptography. Clients possess a key ID and a public/ | uses asymmetric cryptography. Clients possess a key ID and a public/ | |||
| private key pair, and origin servers maintain a mapping of authorized | private key pair, and origin servers maintain a mapping of authorized | |||
| key IDs to associated public keys. | key IDs to associated public keys. | |||
| The client uses a TLS keying material exporter to generate data to be | The client uses a TLS keying material exporter to generate data to be | |||
| signed (see Section 3) then sends the signature using the | signed (see Section 3) then sends the signature using the | |||
| Authorization (or Proxy-Authorization) header field (see Section 11 | Authorization (or Proxy-Authorization) header field (see Section 11 | |||
| of [HTTP]). The signature and additional information are exchanged | of [HTTP]). The signature and additional information are exchanged | |||
| using authentication parameters (see Section 4). Once the server | using authentication parameters (see Section 4). Once the server | |||
| receives these, it can check whether the signature validates against | receives these, it can check whether the signature validates against | |||
| an entry in its database of known keys. The server can then use the | an entry in its database of known keys. The server can then use the | |||
| validation result to influence its response to the client, for | validation result to influence its response to the client, for | |||
| example by restricting access to certain resources. | example, by restricting access to certain resources. | |||
| 3. Client Handling | 3. Client Handling | |||
| When a client wishes to use the Concealed HTTP authentication scheme | When a client wishes to use the Concealed HTTP authentication scheme | |||
| with a request, it SHALL compute the authentication proof using a TLS | with a request, it SHALL compute the authentication proof using a TLS | |||
| keying material exporter with the following parameters: | keying material exporter with the following parameters: | |||
| * the label is set to "EXPORTER-HTTP-Concealed-Authentication" | * The label is set to "EXPORTER-HTTP-Concealed-Authentication". | |||
| * the context is set to the structure described in Section 3.1 | * The context is set to the structure described in Section 3.1. | |||
| * the exporter output length is set to 48 bytes (see Section 3.2) | * The exporter output length is set to 48 bytes (see Section 3.2). | |||
| Note that TLS 1.3 keying material exporters are defined in | Note that TLS 1.3 keying material exporters are defined in | |||
| Section 7.5 of [TLS], while TLS 1.2 keying material exporters are | Section 7.5 of [TLS], while TLS 1.2 keying material exporters are | |||
| defined in [KEY-EXPORT]. | defined in [KEY-EXPORT]. | |||
| 3.1. Key Exporter Context | 3.1. Key Exporter Context | |||
| The TLS key exporter context is described in Figure 1, using the | The TLS key exporter context is described in Figure 1, using the | |||
| notation from Section 1.3 of [QUIC]: | notation from Section 1.3 of [QUIC]: | |||
| skipping to change at page 5, line 38 ¶ | skipping to change at line 202 ¶ | |||
| signature provided by the client. Its encoding is described in | signature provided by the client. Its encoding is described in | |||
| Section 3.1.1. | Section 3.1.1. | |||
| Scheme: The scheme for this request, encoded using the format of the | Scheme: The scheme for this request, encoded using the format of the | |||
| scheme portion of a URI as defined in Section 3.1 of [URI]. | scheme portion of a URI as defined in Section 3.1 of [URI]. | |||
| Host: The host for this request, encoded using the format of the | Host: The host for this request, encoded using the format of the | |||
| host portion of a URI as defined in Section 3.2.2 of [URI]. | host portion of a URI as defined in Section 3.2.2 of [URI]. | |||
| Port: The port for this request, encoded in network byte order. | Port: The port for this request, encoded in network byte order. | |||
| Note that the port is either included in the URI, or is the | Note that the port is either included in the URI or is the default | |||
| default port for the scheme in use; see Section 3.2.3 of [URI]. | port for the scheme in use; see Section 3.2.3 of [URI]. | |||
| Realm: The realm of authentication that is sent in the realm | Realm: The realm of authentication that is sent in the realm | |||
| authentication parameter (Section 11.5 of [HTTP]). If the realm | authentication parameter (see Section 11.5 of [HTTP]). If the | |||
| authentication parameter is not present, this SHALL be empty. | realm authentication parameter is not present, this SHALL be | |||
| This document does not define a means for the origin to | empty. This document does not define a means for the origin to | |||
| communicate a realm to the client. If a client is not configured | communicate a realm to the client. If a client is not configured | |||
| to use a specific realm, it SHALL use an empty realm and SHALL NOT | to use a specific realm, it SHALL use an empty realm and SHALL NOT | |||
| send the realm authentication parameter. | send the realm authentication parameter. | |||
| The Signature Algorithm and Port fields are encoded as unsigned | The Signature Algorithm and Port fields are encoded as unsigned | |||
| 16-bit integers in network byte order. The Key ID, Public Key, | 16-bit integers in network byte order. The Key ID, Public Key, | |||
| Scheme, Host, and Realm fields are length prefixed strings; they are | Scheme, Host, and Realm fields are length-prefixed strings; they are | |||
| preceded by a Length field that represents their length in bytes. | preceded by a Length field that represents their length in bytes. | |||
| These length fields are encoded using the variable-length integer | These length fields are encoded using the variable-length integer | |||
| encoding from Section 16 of [QUIC] and MUST be encoded in the minimum | encoding from Section 16 of [QUIC] and MUST be encoded in the minimum | |||
| number of bytes necessary. | number of bytes necessary. | |||
| 3.1.1. Public Key Encoding | 3.1.1. Public Key Encoding | |||
| Both the "Public Key" field of the TLS key exporter context (see | Both the "Public Key" field of the TLS key exporter context (see | |||
| above) and the a Parameter (see Section 4.2) carry the same public | above) and the a Parameter (see Section 4.2) carry the same public | |||
| key. The encoding of the public key is determined by the Signature | key. The encoding of the public key is determined by the signature | |||
| Algorithm in use as follows: | algorithm in use as follows: | |||
| RSASSA-PSS algorithms: The public key is an RSAPublicKey structure | RSASSA-PSS algorithms: The public key is an RSAPublicKey structure | |||
| [PKCS1] encoded in DER [X.690]. BER encodings which are not DER | [PKCS1] encoded in DER [X.690]. BER encodings that are not DER | |||
| MUST be rejected. | MUST be rejected. | |||
| ECDSA algorithms: The public key is a | ECDSA algorithms: The public key is an | |||
| UncompressedPointRepresentation structure defined in | UncompressedPointRepresentation structure defined in | |||
| Section 4.2.8.2 of [TLS], using the curve specified by the | Section 4.2.8.2 of [TLS], using the curve specified by the | |||
| SignatureScheme. | SignatureScheme. | |||
| EdDSA algorithms: The public key is the byte string encoding defined | EdDSA algorithms: The public key is the byte string encoding defined | |||
| in [EdDSA]. | in [EdDSA]. | |||
| This document does not define the public key encodings for other | This document does not define the public key encodings for other | |||
| algorithms. In order for a SignatureScheme to be usable with the | algorithms. In order for a SignatureScheme to be usable with the | |||
| Concealed HTTP authentication scheme, its public key encoding needs | Concealed HTTP authentication scheme, its public key encoding needs | |||
| skipping to change at page 7, line 15 ¶ | skipping to change at line 276 ¶ | |||
| 3.3. Signature Computation | 3.3. Signature Computation | |||
| Once the Signature Input has been extracted from the key exporter | Once the Signature Input has been extracted from the key exporter | |||
| output (see Section 3.2), it is prefixed with static data before | output (see Section 3.2), it is prefixed with static data before | |||
| being signed. The signature is computed over the concatenation of: | being signed. The signature is computed over the concatenation of: | |||
| * A string that consists of octet 32 (0x20) repeated 64 times | * A string that consists of octet 32 (0x20) repeated 64 times | |||
| * The context string "HTTP Concealed Authentication" | * The context string "HTTP Concealed Authentication" | |||
| * A single 0 byte which serves as a separator | * A single 0 byte that serves as a separator | |||
| * The Signature Input extracted from the key exporter output (see | * The Signature Input extracted from the key exporter output (see | |||
| Section 3.2) | Section 3.2) | |||
| For example, if the Signature Input has all its 32 bytes set to 01, | For example, if the Signature Input has all its 32 bytes set to 01, | |||
| the content covered by the signature (in hexadecimal format) would | the content covered by the signature (in hexadecimal format) would | |||
| be: | be: | |||
| 2020202020202020202020202020202020202020202020202020202020202020 | 2020202020202020202020202020202020202020202020202020202020202020 | |||
| 2020202020202020202020202020202020202020202020202020202020202020 | 2020202020202020202020202020202020202020202020202020202020202020 | |||
| skipping to change at page 7, line 49 ¶ | skipping to change at line 310 ¶ | |||
| Parameter (see Section 4.3). | Parameter (see Section 4.3). | |||
| 4. Authentication Parameters | 4. Authentication Parameters | |||
| This specification defines the following authentication parameters. | This specification defines the following authentication parameters. | |||
| All of the byte sequences below are encoded using base64url (see | All of the byte sequences below are encoded using base64url (see | |||
| Section 5 of [BASE64]) without quotes and without padding. In other | Section 5 of [BASE64]) without quotes and without padding. In other | |||
| words, the values of these byte-sequence authentication parameters | words, the values of these byte-sequence authentication parameters | |||
| MUST NOT include any characters other than ASCII letters, digits, | MUST NOT include any characters other than ASCII letters, digits, | |||
| dash and underscore. | dash, and underscore. | |||
| The integer below is encoded without a minus and without leading | The integer below is encoded without a minus and without leading | |||
| zeroes. In other words, the value of this integer authentication | zeroes. In other words, the value of this integer authentication | |||
| parameter MUST NOT include any characters other than digits, and MUST | parameter MUST NOT include any characters other than digits and MUST | |||
| NOT start with a zero unless the full value is "0". | NOT start with a zero unless the full value is "0". | |||
| Using the syntax from [ABNF]: | Using the syntax from [ABNF]: | |||
| concealed-byte-sequence-param-value = *( ALPHA / DIGIT / "-" / "_" ) | concealed-byte-sequence-param-value = *( ALPHA / DIGIT / "-" / "_" ) | |||
| concealed-integer-param-value = %x31-39 1*4( DIGIT ) / "0" | concealed-integer-param-value = %x31-39 1*4( DIGIT ) / "0" | |||
| Figure 4: Authentication Parameter Value ABNF | Figure 4: Authentication Parameter Value ABNF | |||
| 4.1. The k Parameter | 4.1. The k Parameter | |||
| The REQUIRED "k" (key ID) Parameter is a byte sequence that | The REQUIRED "k" (key ID) Parameter is a byte sequence that | |||
| identifies which key the client wishes to use to authenticate. This | identifies which key the client wishes to use to authenticate. This | |||
| is used by the backend to point to an entry in a server-side database | is used by the backend to point to an entry in a server-side database | |||
| of known keys, see Section 6.3. | of known keys (see Section 6.3). | |||
| 4.2. The a Parameter | 4.2. The a Parameter | |||
| The REQUIRED "a" (public key) Parameter is a byte sequence that | The REQUIRED "a" (public key) Parameter is a byte sequence that | |||
| specifies the public key used by the server to validate the signature | specifies the public key used by the server to validate the signature | |||
| provided by the client. This avoids key confusion issues (see | provided by the client. This avoids key confusion issues (see | |||
| [SEEMS-LEGIT]). The encoding of the public key is described in | [SEEMS-LEGIT]). The encoding of the public key is described in | |||
| Section 3.1.1. | Section 3.1.1. | |||
| 4.3. The p Parameter | 4.3. The p Parameter | |||
| The REQUIRED "p" (proof) Parameter is a byte sequence that specifies | The REQUIRED "p" (proof) Parameter is a byte sequence that specifies | |||
| the proof that the client provides to attest to possessing the | the proof that the client provides to attest to possessing the | |||
| credential that matches its key ID. | credential that matches its key ID. | |||
| 4.4. The s Parameter | 4.4. The s Parameter | |||
| The REQUIRED "s" (signature) Parameter is an integer that specifies | The REQUIRED "s" (signature scheme) Parameter is an integer that | |||
| the signature scheme used to compute the proof transmitted in the p | specifies the signature scheme used to compute the proof transmitted | |||
| Parameter. Its value is an integer between 0 and 65535 inclusive | in the p Parameter. Its value is an integer between 0 and 65535 | |||
| from the IANA "TLS SignatureScheme" registry maintained at | inclusive from the IANA "TLS SignatureScheme" registry maintained at | |||
| <https://www.iana.org/assignments/tls-parameters/tls- | <https://www.iana.org/assignments/tls-parameters>. | |||
| parameters.xhtml#tls-signaturescheme>. | ||||
| 4.5. The v Parameter | 4.5. The v Parameter | |||
| The REQUIRED "v" (verification) Parameter is a byte sequence that | The REQUIRED "v" (verification) Parameter is a byte sequence that | |||
| specifies the verification that the client provides to attest to | specifies the verification that the client provides to attest to | |||
| possessing the key exporter output (see Section 3.2 for details). | possessing the key exporter output (see Section 3.2 for details). | |||
| This avoids issues with signature schemes where certain keys can | This avoids issues with signature schemes where certain keys can | |||
| generate signatures that are valid for multiple inputs (see | generate signatures that are valid for multiple inputs (see | |||
| [SEEMS-LEGIT]). | [SEEMS-LEGIT]). | |||
| 5. Example | 5. Example | |||
| For example, the key ID "basement" authenticating using Ed25519 | For example, a client using the key ID "basement" and the signature | |||
| [ED25519] could produce the following header field: | algorithm Ed25519 [ED25519] could produce the following header field: | |||
| NOTE: '\' line wrapping per RFC 8792 | NOTE: '\' line wrapping per RFC 8792 | |||
| Authorization: Concealed \ | Authorization: Concealed \ | |||
| k=YmFzZW1lbnQ, \ | k=YmFzZW1lbnQ, \ | |||
| a=VGhpcyBpcyBh-HB1YmxpYyBrZXkgaW4gdXNl_GhlcmU, \ | a=VGhpcyBpcyBh-HB1YmxpYyBrZXkgaW4gdXNl_GhlcmU, \ | |||
| s=2055, \ | s=2055, \ | |||
| v=dmVyaWZpY2F0aW9u_zE2Qg, \ | v=dmVyaWZpY2F0aW9u_zE2Qg, \ | |||
| p=QzpcV2luZG93c_xTeXN0ZW0zMlxkcml2ZXJz-ENyb3dkU\ | p=QzpcV2luZG93c_xTeXN0ZW0zMlxkcml2ZXJz-ENyb3dkU\ | |||
| 3RyaWtlXEMtMDAwMDAwMDAyOTEtMD-wMC0w_DAwLnN5cw | 3RyaWtlXEMtMDAwMDAwMDAyOTEtMD-wMC0w_DAwLnN5cw | |||
| Figure 5: Example Header Field | Figure 5: Example Header Field | |||
| 6. Server Handling | 6. Server Handling | |||
| In this section, we subdivide the server role in two: | In this section, we subdivide the server role in two: | |||
| * the "frontend" runs in the HTTP server that terminates the TLS or | * The "frontend" runs in the HTTP server that terminates the TLS or | |||
| QUIC connection created by the client. | QUIC connection created by the client. | |||
| * the "backend" runs in the HTTP server that has access to the | * The "backend" runs in the HTTP server that has access to the | |||
| database of accepted key identifiers and public keys. | database of accepted key identifiers and public keys. | |||
| In most deployments, we expect the frontend and backend roles to both | In most deployments, we expect both the frontend and backend roles to | |||
| be implemented in a single HTTP origin server (as defined in | be implemented in a single HTTP origin server (as defined in | |||
| Section 3.6 of [HTTP]). However, these roles can be split such that | Section 3.6 of [HTTP]). However, these roles can be split such that | |||
| the frontend is an HTTP gateway (as defined in Section 3.7 of [HTTP]) | the frontend is an HTTP gateway (as defined in Section 3.7 of [HTTP]) | |||
| and the backend is an HTTP origin server. | and the backend is an HTTP origin server. | |||
| 6.1. Frontend Handling | 6.1. Frontend Handling | |||
| If a frontend is configured to check the Concealed authentication | If a frontend is configured to check the Concealed HTTP | |||
| scheme, it will parse the Authorization (or Proxy-Authorization) | authentication scheme, it will parse the Authorization (or Proxy- | |||
| header field. If the authentication scheme is set to "Concealed", | Authorization) header field. If the authentication scheme is set to | |||
| the frontend MUST validate that all the required authentication | "Concealed", the frontend MUST validate that all the required | |||
| parameters are present and can be parsed correctly as defined in | authentication parameters are present and can be parsed correctly as | |||
| Section 4. If any parameter is missing or fails to parse, the | defined in Section 4. If any parameter is missing or fails to parse, | |||
| frontend MUST ignore the entire Authorization (or Proxy- | the frontend MUST ignore the entire Authorization (or Proxy- | |||
| Authorization) header field. | Authorization) header field. | |||
| The frontend then uses the data from these authentication parameters | The frontend then uses the data from these authentication parameters | |||
| to compute the key exporter output, as defined in Section 3.2. The | to compute the key exporter output, as defined in Section 3.2. The | |||
| frontend then shares the header field and the key exporter output | frontend then shares the header field and the key exporter output | |||
| with the backend. | with the backend. | |||
| 6.2. Communication between Frontend and Backend | 6.2. Communication Between Frontend and Backend | |||
| If the frontend and backend roles are implemented in the same | If the frontend and backend roles are implemented in the same | |||
| machine, this can be handled by a simple function call. | machine, this can be handled by a simple function call. | |||
| If the roles are split between two separate HTTP servers, then the | If the roles are split between two separate HTTP servers, then the | |||
| backend won't be able to directly access the TLS keying material | backend won't be able to directly access the TLS keying material | |||
| exporter from the TLS connection between the client and frontend, so | exporter from the TLS connection between the client and frontend, so | |||
| the frontend needs to explictly send it. This document defines the | the frontend needs to explicitly send it. This document defines the | |||
| "Concealed-Auth-Export" request header field for this purpose. The | "Concealed-Auth-Export" request header field for this purpose. The | |||
| Concealed-Auth-Export header field's value is a Structured Field Byte | Concealed-Auth-Export header field's value is a Structured Field Byte | |||
| Sequence (see Section 3.3.5 of [STRUCTURED-FIELDS]) that contains the | Sequence (see Section 3.3.5 of [STRUCTURED-FIELDS]) that contains the | |||
| 48-byte key exporter output (see Section 3.2), without any | 48-byte key exporter output (see Section 3.2), without any | |||
| parameters. Note that Structured Field Byte Sequences are encoded | parameters. Note that Structured Field Byte Sequences are encoded | |||
| using the non-URL-safe variant of base64. For example: | using the non-URL-safe variant of base64. For example: | |||
| NOTE: '\' line wrapping per RFC 8792 | NOTE: '\' line wrapping per RFC 8792 | |||
| Concealed-Auth-Export: :VGhpc+BleGFtcGxlIFRMU/BleHBvcn\ | Concealed-Auth-Export: :VGhpc+BleGFtcGxlIFRMU/BleHBvcn\ | |||
| skipping to change at page 11, line 33 ¶ | skipping to change at line 472 ¶ | |||
| * validate that the public key from the database is equal to the one | * validate that the public key from the database is equal to the one | |||
| in the Authorization (or Proxy-Authorization) header field | in the Authorization (or Proxy-Authorization) header field | |||
| * validate that the verification field from the Authorization (or | * validate that the verification field from the Authorization (or | |||
| Proxy-Authorization) header field matches the one extracted from | Proxy-Authorization) header field matches the one extracted from | |||
| the key exporter output | the key exporter output | |||
| * verify the cryptographic signature as defined in Section 3.3 | * verify the cryptographic signature as defined in Section 3.3 | |||
| If all of these checks succeed, the backend can consider the request | If all of these checks succeed, the backend can consider the request | |||
| to be properly authenticated, and can reply accordingly (the backend | to be properly authenticated and can reply accordingly (the backend | |||
| can also forward the request to another HTTP server). | can also forward the request to another HTTP server). | |||
| If any of the above checks fail, the backend MUST treat it as if the | If any of the above checks fail, the backend MUST treat it as if the | |||
| Authorization (or Proxy-Authorization) header field was missing. | Authorization (or Proxy-Authorization) header field was missing. | |||
| 6.4. Non-Probeable Server Handling | 6.4. Non-Probeable Server Handling | |||
| Servers that wish to introduce resources whose existence cannot be | Servers that wish to introduce resources whose existence cannot be | |||
| probed need to ensure that they do not reveal any information about | probed need to ensure that they do not reveal any information about | |||
| those resources to unauthenticated clients. In particular, such | those resources to unauthenticated clients. In particular, such | |||
| servers MUST respond to authentication failures with the exact same | servers MUST respond to authentication failures with the exact same | |||
| response that they would have used for non-existent resources. For | response that they would have used for nonexistent resources. For | |||
| example, this can mean using HTTP status code 404 (Not Found) instead | example, this can mean using HTTP status code 404 (Not Found) instead | |||
| of 401 (Unauthorized). | of 401 (Unauthorized). | |||
| The authentication checks described above can take time to compute, | The authentication checks described above can take time to compute, | |||
| and an attacker could detect use of this mechanism if that time is | and an attacker could detect use of this mechanism if that time is | |||
| observable by comparing the timing of a request for a known non- | observable by comparing the timing of a request for a known | |||
| existent resource to the timing of a request for a potentially | nonexistent resource to the timing of a request for a potentially | |||
| authenticated resource. Servers can mitigate this observability by | authenticated resource. Servers can mitigate this observability by | |||
| slightly delaying responses to some non-existent resources such that | slightly delaying responses to some nonexistent resources such that | |||
| the timing of the authentication verification is not observable. | the timing of the authentication verification is not observable. | |||
| This delay needs to be carefully considered to avoid having the delay | This delay needs to be carefully considered to avoid having the delay | |||
| itself leak the fact that this origin uses this mechanism at all. | itself leak the fact that this origin uses this mechanism at all. | |||
| Non-probeable resources also need to be non-discoverable for | Non-probeable resources also need to be non-discoverable for | |||
| unauthenticated users. For example, if a server operator wishes to | unauthenticated users. For example, if a server operator wishes to | |||
| hide an authenticated resource by pretending it does not exist to | hide an authenticated resource by pretending it does not exist to | |||
| unauthenticated users, then the server operator needs to ensure there | unauthenticated users, then the server operator needs to ensure there | |||
| are no unauthenticated pages with links to that resource, and no | are no unauthenticated pages with links to that resource and no other | |||
| other out-of-band ways for unauthenticated users to discover this | out-of-band ways for unauthenticated users to discover this resource. | |||
| resource. | ||||
| 7. Requirements on TLS Usage | 7. Requirements on TLS Usage | |||
| This authentication scheme is only defined for uses of HTTP with TLS | This authentication scheme is only defined for uses of HTTP with TLS | |||
| [TLS]. This includes any use of HTTP over TLS as typically used for | [TLS]. This includes any use of HTTP over TLS as typically used for | |||
| HTTP/2 [HTTP/2], or HTTP/3 [HTTP/3] where the transport protocol uses | HTTP/2 [HTTP/2], or HTTP/3 [HTTP/3] where the transport protocol uses | |||
| TLS as its authentication and key exchange mechanism [QUIC-TLS]. | TLS as its authentication and key exchange mechanism [QUIC-TLS]. | |||
| Because the TLS keying material exporter is only secure for | Because the TLS keying material exporter is only secure for | |||
| authentication when it is uniquely bound to the TLS session | authentication when it is uniquely bound to the TLS session | |||
| [RFC7627], the Concealed authentication scheme requires either one of | [RFC7627], the Concealed authentication scheme requires either one of | |||
| the following properties: | the following properties: | |||
| * The TLS version in use is greater or equal to 1.3 [TLS]. | * The TLS version in use is greater than or equal to 1.3 [TLS]. | |||
| * The TLS version in use is 1.2 and the Extended Master Secret | * The TLS version in use is 1.2, and the extended master secret | |||
| extension [RFC7627] has been negotiated. | extension [RFC7627] has been negotiated. | |||
| Clients MUST NOT use the Concealed authentication scheme on | Clients MUST NOT use the Concealed HTTP authentication scheme on | |||
| connections that do not meet one of the two properties above. If a | connections that do not meet one of the two properties above. If a | |||
| server receives a request that uses this authentication scheme on a | server receives a request that uses this authentication scheme on a | |||
| connection that meets neither of the above properties, the server | connection that meets neither of the above properties, the server | |||
| MUST treat the request as if the authentication were not present. | MUST treat the request as if the authentication were not present. | |||
| 8. Security Considerations | 8. Security Considerations | |||
| The Concealed HTTP authentication scheme allows a client to | The Concealed HTTP authentication scheme allows a client to | |||
| authenticate to an origin server while guaranteeing freshness and | authenticate to an origin server while guaranteeing freshness and | |||
| without the need for the server to transmit a nonce to the client. | without the need for the server to transmit a nonce to the client. | |||
| This allows the server to accept authenticated clients without | This allows the server to accept authenticated clients without | |||
| revealing that it supports or expects authentication for some | revealing that it supports or expects authentication for some | |||
| resources. It also allows authentication without the client leaking | resources. It also allows authentication without the client leaking | |||
| the presence of authentication to observers due to clear-text TLS | the presence of authentication to observers due to cleartext TLS | |||
| Client Hello extensions. | Client Hello extensions. | |||
| Since the freshness described above is provided by a TLS key | Since the freshness described above is provided by a TLS key | |||
| exporter, it can be as old as the underlying TLS connection. Servers | exporter, it can be as old as the underlying TLS connection. Servers | |||
| can require better freshness by forcing clients to create new | can require better freshness by forcing clients to create new | |||
| connections using mechanisms such as the GOAWAY frame (see | connections using mechanisms such as the GOAWAY frame (see | |||
| Section 5.2 of [HTTP/3]). | Section 5.2 of [HTTP/3]). | |||
| The authentication proofs described in this document are not bound to | The authentication proofs described in this document are not bound to | |||
| individual HTTP requests; if the key is used for authentication | individual HTTP requests; if the key is used for authentication | |||
| proofs on multiple requests on the same connection, they will all be | proofs on multiple requests on the same connection, they will all be | |||
| identical. This allows for better compression when sending over the | identical. This allows for better compression when sending over the | |||
| wire, but implies that client implementations that multiplex | wire, but it implies that client implementations that multiplex | |||
| different security contexts over a single HTTP connection need to | different security contexts over a single HTTP connection need to | |||
| ensure that those contexts cannot read each other's header fields. | ensure that those contexts cannot read each other's header fields. | |||
| Otherwise, one context would be able to replay the Authorization | Otherwise, one context would be able to replay the Authorization | |||
| header field of another. This constraint is met by modern Web | header field of another. This constraint is met by modern web | |||
| browsers. If an attacker were to compromise the browser such that it | browsers. If an attacker were to compromise the browser such that it | |||
| could access another context's memory, the attacker might also be | could access another context's memory, the attacker might also be | |||
| able to access the corresponding key, so binding authentication to | able to access the corresponding key, so binding authentication to | |||
| requests would not provide much benefit in practice. | requests would not provide much benefit in practice. | |||
| Authentication asymmetric keys used for the Concealed HTTP | Authentication asymmetric keys used for the Concealed HTTP | |||
| authentication scheme MUST NOT be reused in other protocols. Even | authentication scheme MUST NOT be reused in other protocols. Even | |||
| though we attempt to mitigate these issues by adding a static prefix | though we attempt to mitigate these issues by adding a static prefix | |||
| to the signed data (see Section 3.3), reusing keys could undermine | to the signed data (see Section 3.3), reusing keys could undermine | |||
| the security guarantees of the authentication. | the security guarantees of the authentication. | |||
| Origins offering this scheme can link requests that use the same key. | Origins offering this scheme can link requests that use the same key. | |||
| However, requests are not linkable across origins if the keys used | However, requests are not linkable across origins if the keys used | |||
| are specific to the individual origins using this scheme. | are specific to the individual origins using this scheme. | |||
| 9. IANA Considerations | 9. IANA Considerations | |||
| 9.1. HTTP Authentication Schemes Registry | 9.1. HTTP Authentication Schemes Registry | |||
| This document, if approved, requests IANA to register the following | IANA has registered the following entry in the "HTTP Authentication | |||
| entry in the "HTTP Authentication Schemes" Registry maintained at | Schemes" registry maintained at <https://www.iana.org/assignments/ | |||
| <https://www.iana.org/assignments/http-authschemes>: | http-authschemes>: | |||
| Authentication Scheme Name: Concealed | Authentication Scheme Name: Concealed | |||
| Reference: This document | Reference: RFC 9729 | |||
| Notes: None | Notes: None | |||
| 9.2. TLS Keying Material Exporter Labels | 9.2. TLS Keying Material Exporter Labels | |||
| This document, if approved, requests IANA to register the following | IANA has registered the following entry in the "TLS Exporter Labels" | |||
| entry in the "TLS Exporter Labels" registry maintained at | registry maintained at <https://www.iana.org/assignments/tls- | |||
| <https://www.iana.org/assignments/tls-parameters#exporter-labels>: | parameters>: | |||
| Value: EXPORTER-HTTP-Concealed-Authentication | Value: EXPORTER-HTTP-Concealed-Authentication | |||
| DTLS-OK: N | DTLS-OK: N | |||
| Recommended: Y | Recommended: Y | |||
| Reference: This document | Reference: RFC 9729 | |||
| 9.3. HTTP Field Name | 9.3. HTTP Field Name | |||
| This document, if approved, requests IANA to register the following | IANA has registered the following entry in the "Hypertext Transfer | |||
| entry in the "Hypertext Transfer Protocol (HTTP) Field Name" registry | Protocol (HTTP) Field Name Registry" maintained at | |||
| maintained at <https://www.iana.org/assignments/http-fields/http- | <https://www.iana.org/assignments/http-fields>: | |||
| fields.xhtml>: | ||||
| Field Name: Concealed-Auth-Export | Field Name: Concealed-Auth-Export | |||
| Status: permanent | Status: permanent | |||
| Structured Type: Item | Structured Type: Item | |||
| Reference: This document | Reference: RFC 9729 | |||
| Comments: None | Comments: None | |||
| 10. References | 10. References | |||
| 10.1. Normative References | 10.1. Normative References | |||
| [ABNF] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | [ABNF] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | |||
| Specifications: ABNF", STD 68, RFC 5234, | Specifications: ABNF", STD 68, RFC 5234, | |||
| DOI 10.17487/RFC5234, January 2008, | DOI 10.17487/RFC5234, January 2008, | |||
| <https://www.rfc-editor.org/rfc/rfc5234>. | <https://www.rfc-editor.org/info/rfc5234>. | |||
| [BASE64] Josefsson, S., "The Base16, Base32, and Base64 Data | [BASE64] Josefsson, S., "The Base16, Base32, and Base64 Data | |||
| Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006, | Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006, | |||
| <https://www.rfc-editor.org/rfc/rfc4648>. | <https://www.rfc-editor.org/info/rfc4648>. | |||
| [EdDSA] Josefsson, S. and I. Liusvaara, "Edwards-Curve Digital | [EdDSA] Josefsson, S. and I. Liusvaara, "Edwards-Curve Digital | |||
| Signature Algorithm (EdDSA)", RFC 8032, | Signature Algorithm (EdDSA)", RFC 8032, | |||
| DOI 10.17487/RFC8032, January 2017, | DOI 10.17487/RFC8032, January 2017, | |||
| <https://www.rfc-editor.org/rfc/rfc8032>. | <https://www.rfc-editor.org/info/rfc8032>. | |||
| [HTTP] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | [HTTP] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
| Ed., "HTTP Semantics", STD 97, RFC 9110, | Ed., "HTTP Semantics", STD 97, RFC 9110, | |||
| DOI 10.17487/RFC9110, June 2022, | DOI 10.17487/RFC9110, June 2022, | |||
| <https://www.rfc-editor.org/rfc/rfc9110>. | <https://www.rfc-editor.org/info/rfc9110>. | |||
| [KEY-EXPORT] | [KEY-EXPORT] | |||
| Rescorla, E., "Keying Material Exporters for Transport | Rescorla, E., "Keying Material Exporters for Transport | |||
| Layer Security (TLS)", RFC 5705, DOI 10.17487/RFC5705, | Layer Security (TLS)", RFC 5705, DOI 10.17487/RFC5705, | |||
| March 2010, <https://www.rfc-editor.org/rfc/rfc5705>. | March 2010, <https://www.rfc-editor.org/info/rfc5705>. | |||
| [PKCS1] Moriarty, K., Ed., Kaliski, B., Jonsson, J., and A. Rusch, | [PKCS1] Moriarty, K., Ed., Kaliski, B., Jonsson, J., and A. Rusch, | |||
| "PKCS #1: RSA Cryptography Specifications Version 2.2", | "PKCS #1: RSA Cryptography Specifications Version 2.2", | |||
| RFC 8017, DOI 10.17487/RFC8017, November 2016, | RFC 8017, DOI 10.17487/RFC8017, November 2016, | |||
| <https://www.rfc-editor.org/rfc/rfc8017>. | <https://www.rfc-editor.org/info/rfc8017>. | |||
| [QUIC] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | [QUIC] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | |||
| Multiplexed and Secure Transport", RFC 9000, | Multiplexed and Secure Transport", RFC 9000, | |||
| DOI 10.17487/RFC9000, May 2021, | DOI 10.17487/RFC9000, May 2021, | |||
| <https://www.rfc-editor.org/rfc/rfc9000>. | <https://www.rfc-editor.org/info/rfc9000>. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/rfc/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC7627] Bhargavan, K., Ed., Delignat-Lavaud, A., Pironti, A., | [RFC7627] Bhargavan, K., Ed., Delignat-Lavaud, A., Pironti, A., | |||
| Langley, A., and M. Ray, "Transport Layer Security (TLS) | Langley, A., and M. Ray, "Transport Layer Security (TLS) | |||
| Session Hash and Extended Master Secret Extension", | Session Hash and Extended Master Secret Extension", | |||
| RFC 7627, DOI 10.17487/RFC7627, September 2015, | RFC 7627, DOI 10.17487/RFC7627, September 2015, | |||
| <https://www.rfc-editor.org/rfc/rfc7627>. | <https://www.rfc-editor.org/info/rfc7627>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/rfc/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [RFC8792] Watsen, K., Auerswald, E., Farrel, A., and Q. Wu, | [RFC8792] Watsen, K., Auerswald, E., Farrel, A., and Q. Wu, | |||
| "Handling Long Lines in Content of Internet-Drafts and | "Handling Long Lines in Content of Internet-Drafts and | |||
| RFCs", RFC 8792, DOI 10.17487/RFC8792, June 2020, | RFCs", RFC 8792, DOI 10.17487/RFC8792, June 2020, | |||
| <https://www.rfc-editor.org/rfc/rfc8792>. | <https://www.rfc-editor.org/info/rfc8792>. | |||
| [STRUCTURED-FIELDS] | [STRUCTURED-FIELDS] | |||
| Nottingham, M. and P. Kamp, "Structured Field Values for | Nottingham, M. and P. Kamp, "Structured Field Values for | |||
| HTTP", RFC 8941, DOI 10.17487/RFC8941, February 2021, | HTTP", RFC 9651, DOI 10.17487/RFC9651, September 2024, | |||
| <https://www.rfc-editor.org/rfc/rfc8941>. | <https://www.rfc-editor.org/info/rfc9651>. | |||
| [TLS] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [TLS] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
| Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
| <https://www.rfc-editor.org/rfc/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
| [URI] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | [URI] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | |||
| Resource Identifier (URI): Generic Syntax", STD 66, | Resource Identifier (URI): Generic Syntax", STD 66, | |||
| RFC 3986, DOI 10.17487/RFC3986, January 2005, | RFC 3986, DOI 10.17487/RFC3986, January 2005, | |||
| <https://www.rfc-editor.org/rfc/rfc3986>. | <https://www.rfc-editor.org/info/rfc3986>. | |||
| [X.690] ITU-T, "Information technology - ASN.1 encoding Rules: | [X.690] ITU-T, "Information technology - ASN.1 encoding Rules: | |||
| Specification of Basic Encoding Rules (BER), Canonical | Specification of Basic Encoding Rules (BER), Canonical | |||
| Encoding Rules (CER) and Distinguished Encoding Rules | Encoding Rules (CER) and Distinguished Encoding Rules | |||
| (DER)", ISO/IEC 8824-1:2021 , February 2021. | (DER)", ITU-T Recommendation X690, ISO/IEC 8825-1:2021, | |||
| February 2021, <https://www.itu.int/rec/T-REC-X.690>. | ||||
| 10.2. Informative References | 10.2. Informative References | |||
| [ED25519] Josefsson, S. and J. Schaad, "Algorithm Identifiers for | [ED25519] Josefsson, S. and J. Schaad, "Algorithm Identifiers for | |||
| Ed25519, Ed448, X25519, and X448 for Use in the Internet | Ed25519, Ed448, X25519, and X448 for Use in the Internet | |||
| X.509 Public Key Infrastructure", RFC 8410, | X.509 Public Key Infrastructure", RFC 8410, | |||
| DOI 10.17487/RFC8410, August 2018, | DOI 10.17487/RFC8410, August 2018, | |||
| <https://www.rfc-editor.org/rfc/rfc8410>. | <https://www.rfc-editor.org/info/rfc8410>. | |||
| [HOBA] Farrell, S., Hoffman, P., and M. Thomas, "HTTP Origin- | [HOBA] Farrell, S., Hoffman, P., and M. Thomas, "HTTP Origin- | |||
| Bound Authentication (HOBA)", RFC 7486, | Bound Authentication (HOBA)", RFC 7486, | |||
| DOI 10.17487/RFC7486, March 2015, | DOI 10.17487/RFC7486, March 2015, | |||
| <https://www.rfc-editor.org/rfc/rfc7486>. | <https://www.rfc-editor.org/info/rfc7486>. | |||
| [HTTP/2] Thomson, M., Ed. and C. Benfield, Ed., "HTTP/2", RFC 9113, | [HTTP/2] Thomson, M., Ed. and C. Benfield, Ed., "HTTP/2", RFC 9113, | |||
| DOI 10.17487/RFC9113, June 2022, | DOI 10.17487/RFC9113, June 2022, | |||
| <https://www.rfc-editor.org/rfc/rfc9113>. | <https://www.rfc-editor.org/info/rfc9113>. | |||
| [HTTP/3] Bishop, M., Ed., "HTTP/3", RFC 9114, DOI 10.17487/RFC9114, | [HTTP/3] Bishop, M., Ed., "HTTP/3", RFC 9114, DOI 10.17487/RFC9114, | |||
| June 2022, <https://www.rfc-editor.org/rfc/rfc9114>. | June 2022, <https://www.rfc-editor.org/info/rfc9114>. | |||
| [MASQUE-ORIGINAL] | [MASQUE-ORIGINAL] | |||
| Schinazi, D., "The MASQUE Protocol", Work in Progress, | Schinazi, D., "The MASQUE Protocol", Work in Progress, | |||
| Internet-Draft, draft-schinazi-masque-00, 28 February | Internet-Draft, draft-schinazi-masque-00, 28 February | |||
| 2019, <https://datatracker.ietf.org/doc/html/draft- | 2019, <https://datatracker.ietf.org/doc/html/draft- | |||
| schinazi-masque-00>. | schinazi-masque-00>. | |||
| [QUIC-TLS] Thomson, M., Ed. and S. Turner, Ed., "Using TLS to Secure | [QUIC-TLS] Thomson, M., Ed. and S. Turner, Ed., "Using TLS to Secure | |||
| QUIC", RFC 9001, DOI 10.17487/RFC9001, May 2021, | QUIC", RFC 9001, DOI 10.17487/RFC9001, May 2021, | |||
| <https://www.rfc-editor.org/rfc/rfc9001>. | <https://www.rfc-editor.org/info/rfc9001>. | |||
| [SEEMS-LEGIT] | [SEEMS-LEGIT] | |||
| Jackson, D., Cremers, C., Cohn-Gordon, K., and R. Sasse, | Jackson, D., Cremers, C., Cohn-Gordon, K., and R. Sasse, | |||
| "Seems Legit: Automated Analysis of Subtle Attacks on | "Seems Legit: Automated Analysis of Subtle Attacks on | |||
| Protocols That Use Signatures", CCS '19: Proceedings of | Protocols That Use Signatures", CCS '19: Proceedings of | |||
| the 2019 ACM SIGSAC Conference on Computer and | the 2019 ACM SIGSAC Conference on Computer and | |||
| Communications Security, pp. 2165–2180, | Communications Security, pp. 2165-2180, | |||
| DOI 10.1145/3319535.3339813, 2019, | DOI 10.1145/3319535.3339813, November 2019, | |||
| <https://doi.org/10.1145/3319535.3339813>. | <https://doi.org/10.1145/3319535.3339813>. | |||
| Acknowledgments | Acknowledgments | |||
| The authors would like to thank many members of the IETF community, | The authors would like to thank many members of the IETF community, | |||
| as this document is the fruit of many hallway conversations. In | as this document is the fruit of many hallway conversations. In | |||
| particular, the authors would like to thank David Benjamin, Reese | particular, the authors would like to thank David Benjamin, Reese | |||
| Enghardt, Nick Harper, Dennis Jackson, Ilari Liusvaara, François | Enghardt, Nick Harper, Dennis Jackson, Ilari Liusvaara, François | |||
| Michel, Lucas Pardue, Justin Richer, Ben Schwartz, Martin Thomson, | Michel, Lucas Pardue, Justin Richer, Ben Schwartz, Martin Thomson, | |||
| and Chris A. Wood for their reviews and contributions. The mechanism | and Chris A. Wood for their reviews and contributions. The mechanism | |||
| End of changes. 76 change blocks. | ||||
| 177 lines changed or deleted | 156 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||