rfc9729v1.md   rfc9729.md 
skipping to change at line 43 skipping to change at line 43
uri: https://guardianproject.info uri: https://guardianproject.info
- -
ins: J. Hoyland ins: J. Hoyland
name: Jonathan Hoyland name: Jonathan Hoyland
org: Cloudflare Inc. org: Cloudflare Inc.
email: jonathan.hoyland@gmail.com email: jonathan.hoyland@gmail.com
normative: normative:
RFC8792: RFC8792:
X.690: X.690:
target: https://www.itu.int/rec/T-REC-X.690
title: "Information technology - ASN.1 encoding Rules: Specification of Ba sic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Enc oding Rules (DER)" title: "Information technology - ASN.1 encoding Rules: Specification of Ba sic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Enc oding Rules (DER)"
date: 2021-02 date: 2021-02
author: author:
org: ITU-T org: ITU-T
seriesinfo: seriesinfo:
ITU-T: Recommendation X690 ITU-T: Recommendation X690
ISO/IEC: 8825-1:2021 ISO/IEC: 8825-1:2021
informative: informative:
H2: H2:
skipping to change at line 130 skipping to change at line 131
makes the origin probeable as it sends the challenge to unauthenticated makes the origin probeable as it sends the challenge to unauthenticated
clients. This document defines a new signature-based authentication scheme tha t clients. This document defines a new signature-based authentication scheme tha t
is not probeable. is not probeable.
## Conventions and Definitions {#conventions} ## Conventions and Definitions {#conventions}
{::boilerplate bcp14-tagged} {::boilerplate bcp14-tagged}
This document uses the notation from {{Section 1.3 of !QUIC=RFC9000}}. This document uses the notation from {{Section 1.3 of !QUIC=RFC9000}}.
<!-- [rfced] FYI, we have added the following sentence to Section 1.1
("Conventions and Definitions") in order to include a citation for RFC 8792 in
the text. Please let us know of any objections.
Current:
Various examples in this document contain long lines that may be folded,
as described in [RFC8792].
Various examples in this document contain long lines that may be folded, Various examples in this document contain long lines that may be folded,
as described in [RFC8792]. as described in [RFC8792].
<!--[rfced] Throughout the text, "Concealed HTTP authentication scheme" and
# The Concealed HTTP Authentication Scheme # The Concealed HTTP Authentication Scheme
"Concealed authentication scheme" appear to be used inconsistently. Please
review these occurrences and let us know if/how they be made consistent.
Some examples are listed here:
Original:
When a client wishes to use the Concealed HTTP authentication scheme
with a request, it SHALL compute the authentication proof using a TLS
keying material exporter with the following parameters:
...
If a frontend is configured to check the Concealed authentication
scheme, it will parse the Authorization (or Proxy-Authorization)
header field.
# The Concealed Authentication Scheme
This document defines the "Concealed" HTTP authentication scheme. It uses This document defines the "Concealed" HTTP authentication scheme. It uses
asymmetric cryptography. Clients possess a key ID and a public/private key asymmetric cryptography. Clients possess a key ID and a public/private key
pair, and origin servers maintain a mapping of authorized key IDs to associate d pair, and origin servers maintain a mapping of authorized key IDs to associate d
public keys. public keys.
The client uses a TLS keying material exporter to generate data to be signed The client uses a TLS keying material exporter to generate data to be signed
(see {{client}}) then sends the signature using the Authorization (or (see {{client}}) then sends the signature using the Authorization (or
Proxy-Authorization) header field (see {{Section 11 of HTTP}}). The signature Proxy-Authorization) header field (see {{Section 11 of HTTP}}). The signature
and additional information are exchanged using authentication parameters (see and additional information are exchanged using authentication parameters (see
skipping to change at line 195 skipping to change at line 171
Note that TLS 1.3 keying material exporters are defined in {{Section 7.5 of Note that TLS 1.3 keying material exporters are defined in {{Section 7.5 of
TLS}}, while TLS 1.2 keying material exporters are defined in TLS}}, while TLS 1.2 keying material exporters are defined in
{{!KEY-EXPORT=RFC5705}}. {{!KEY-EXPORT=RFC5705}}.
## Key Exporter Context {#context} ## Key Exporter Context {#context}
The TLS key exporter context is described in {{fig-context}}, using the The TLS key exporter context is described in {{fig-context}}, using the
notation from {{Section 1.3 of QUIC}}: notation from {{Section 1.3 of QUIC}}:
<!-- [rfced] Please review sourcecode types within the markdown file, and
let us know if they should be set and/or have been set correctly.
The current list of preferred values for sourcecode types is available at
<https://www.rfc-editor.org/rpc/wiki/doku.php?id=sourcecode-types>.
If the current list does not contain an applicable type, feel free to
suggest additions for consideration. Note that it is also acceptable
to leave the sourcecode type not set.
~~~ ~~~
Signature Algorithm (16), Signature Algorithm (16),
Key ID Length (i), Key ID Length (i),
Key ID (..), Key ID (..),
Public Key Length (i), Public Key Length (i),
Public Key (..), Public Key (..),
Scheme Length (i), Scheme Length (i),
Scheme (..), Scheme (..),
Host Length (i), Host Length (i),
Host (..), Host (..),
skipping to change at line 227 skipping to change at line 193
Realm (..), Realm (..),
~~~ ~~~
{: #fig-context title="Key Exporter Context Format"} {: #fig-context title="Key Exporter Context Format"}
The key exporter context contains the following fields: The key exporter context contains the following fields:
Signature Algorithm: Signature Algorithm:
: The signature scheme sent in the `s` Parameter (see {{parameter-s}}). : The signature scheme sent in the `s` Parameter (see {{parameter-s}}).
<!-- [rfced] We see that the capitalization of "Key ID" is inconsistent. Pleas
e let how we should update it.
Key ID: Key ID:
: The key ID sent in the `k` Parameter (see {{parameter-k}}). : The key ID sent in the `k` Parameter (see {{parameter-k}}).
Public Key: Public Key:
: The public key used by the server to validate the signature provided by the : The public key used by the server to validate the signature provided by the
client. Its encoding is described in {{public-key-encoding}}. client. Its encoding is described in {{public-key-encoding}}.
Scheme: Scheme:
skipping to change at line 273 skipping to change at line 236
The Signature Algorithm and Port fields are encoded as unsigned 16-bit integer s The Signature Algorithm and Port fields are encoded as unsigned 16-bit integer s
in network byte order. The Key ID, Public Key, Scheme, Host, and Realm fields in network byte order. The Key ID, Public Key, Scheme, Host, and Realm fields
are length-prefixed strings; they are preceded by a Length field that are length-prefixed strings; they are preceded by a Length field that
represents their length in bytes. These length fields are encoded using the represents their length in bytes. These length fields are encoded using the
variable-length integer encoding from {{Section 16 of QUIC}} and MUST be variable-length integer encoding from {{Section 16 of QUIC}} and MUST be
encoded in the minimum number of bytes necessary. encoded in the minimum number of bytes necessary.
### Public Key Encoding {#public-key-encoding} ### Public Key Encoding {#public-key-encoding}
<!--[rfced] As "Signature Algorithm" is being used in a general way and not as
a field name, may we make it lowercase in this sentence?
Original:
The encoding of the public key is determined by the Signature
Algorithm in use as follows:
Perhaps:
The encoding of the public key is determined by the signature
algorithm in use as follows:
Both the "Public Key" field of the TLS key exporter context (see above) and th e Both the "Public Key" field of the TLS key exporter context (see above) and th e
`a` Parameter (see {{parameter-a}}) carry the same public key. The encoding of `a` Parameter (see {{parameter-a}}) carry the same public key. The encoding of
the public key is determined by the Signature Algorithm in use as follows: the public key is determined by the signature algorithm in use as follows:
<!--[rfced] For clarity, may we update "which" to "that" here? It depends on t
he
intended meaning, as noted below.
Original:
The public key is an RSAPublicKey structure
[PKCS1] encoded in DER [X.690]. BER encodings which are not DER
MUST be rejected.
Perhaps (restrictive "that", meaning some BER encodings):
The public key is an RSAPublicKey structure
[PKCS1] encoded in DER [X.690]. BER encodings that are not DER
MUST be rejected.
Or (nonrestrictive "which", meaning all BER encodings):
The public key is an RSAPublicKey structure
[PKCS1] encoded in DER [X.690]. BER encodings, which are not DER,
MUST be rejected.
RSASSA-PSS algorithms: RSASSA-PSS algorithms:
: The public key is an RSAPublicKey structure {{!PKCS1=RFC8017}} encoded in DE R : The public key is an RSAPublicKey structure {{!PKCS1=RFC8017}} encoded in DE R
{{X.690}}. BER encodings which are not DER MUST be rejected. {{X.690}}. BER encodings that are not DER MUST be rejected.
ECDSA algorithms: ECDSA algorithms:
: The public key is an UncompressedPointRepresentation structure defined in : The public key is an UncompressedPointRepresentation structure defined in
{{Section 4.2.8.2 of TLS}}, using the curve specified by the SignatureScheme. {{Section 4.2.8.2 of TLS}}, using the curve specified by the SignatureScheme.
EdDSA algorithms: EdDSA algorithms:
: The public key is the byte string encoding defined in {{!EdDSA=RFC8032}}. : The public key is the byte string encoding defined in {{!EdDSA=RFC8032}}.
skipping to change at line 445 skipping to change at line 377
## The v Parameter {#parameter-v} ## The v Parameter {#parameter-v}
The REQUIRED "v" (verification) Parameter is a byte sequence that specifies th e The REQUIRED "v" (verification) Parameter is a byte sequence that specifies th e
verification that the client provides to attest to possessing the key exporter verification that the client provides to attest to possessing the key exporter
output (see {{output}} for details). This avoids issues with signature schemes output (see {{output}} for details). This avoids issues with signature schemes
where certain keys can generate signatures that are valid for multiple inputs where certain keys can generate signatures that are valid for multiple inputs
(see {{SEEMS-LEGIT}}). (see {{SEEMS-LEGIT}}).
# Example {#example} # Example {#example}
<!-- [rfced] We having difficulty parsing the following sentence. For example, a client using the key ID "basement" and the signature algorithm
Does the key ID authenticate or does the client? Ed25519 {{?ED25519=RFC8410}} could produce the following header field:
Current:
For example, the key ID "basement" authenticating using Ed25519
[ED25519] could produce the following header field
Perhaps:
For example, a client authenticating with the key ID "basement"
and using Ed25519 [ED25519] could produce the following header
field
For example, the key ID "basement" authenticating using Ed25519
{{?ED25519=RFC8410}} could produce the following header field:
~~~ http-message ~~~ http-message
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\
skipping to change at line 492 skipping to change at line 411
accepted key identifiers and public keys. accepted key identifiers and public keys.
In most deployments, we expect both the frontend and backend roles to be In most deployments, we expect both the frontend and backend roles to be
implemented in a single HTTP origin server (as defined in {{Section 3.6 of implemented in a single HTTP origin server (as defined in {{Section 3.6 of
HTTP}}). However, these roles can be split such that the frontend is an HTTP HTTP}}). However, these roles can be split such that the frontend is an HTTP
gateway (as defined in {{Section 3.7 of HTTP}}) and the backend is an HTTP gateway (as defined in {{Section 3.7 of HTTP}}) and the backend is an HTTP
origin server. origin server.
## Frontend Handling ## Frontend Handling
If a frontend is configured to check the Concealed authentication scheme, it If a frontend is configured to check the Concealed HTTP authentication scheme, it
will parse the Authorization (or Proxy-Authorization) header field. If the will parse the Authorization (or Proxy-Authorization) header field. If the
authentication scheme is set to "Concealed", the frontend MUST validate that authentication scheme is set to "Concealed", the frontend MUST validate that
all the required authentication parameters are present and can be parsed all the required authentication parameters are present and can be parsed
correctly as defined in {{auth-params}}. If any parameter is missing or fails correctly as defined in {{auth-params}}. If any parameter is missing or fails
to parse, the frontend MUST ignore the entire Authorization (or to parse, the frontend MUST ignore the entire Authorization (or
Proxy-Authorization) header field. Proxy-Authorization) header field.
The frontend then uses the data from these authentication parameters to comput e The frontend then uses the data from these authentication parameters to comput e
the key exporter output, as defined in {{output}}. The frontend then shares th e the key exporter output, as defined in {{output}}. The frontend then shares th e
header field and the key exporter output with the backend. header field and the key exporter output with the backend.
## Communication Between Frontend and Backend ## Communication Between Frontend and Backend
If the frontend and backend roles are implemented in the same machine, this ca n If the frontend and backend roles are implemented in the same machine, this ca n
be handled by a simple function call. be handled by a simple function call.
<!-- [rfced] RFC 8941 has been obsoleted by RFC 9651. May we replace RFC
8941 with RFC 9651?
If the roles are split between two separate HTTP servers, then the backend If the roles are split between two separate HTTP servers, then the backend
won't be able to directly access the TLS keying material exporter from the TLS won't be able to directly access the TLS keying material exporter from the TLS
connection between the client and frontend, so the frontend needs to explicitl y connection between the client and frontend, so the frontend needs to explicitl y
send it. This document defines the "Concealed-Auth-Export" request header fiel d send it. This document defines the "Concealed-Auth-Export" request header fiel d
for this purpose. The Concealed-Auth-Export header field's value is a for this purpose. The Concealed-Auth-Export header field's value is a
Structured Field Byte Sequence (see {{Section 3.3.5 of Structured Field Byte Sequence (see {{Section 3.3.5 of
!STRUCTURED-FIELDS=RFC8941}}) that contains the 48-byte key exporter output !STRUCTURED-FIELDS=RFC9651}}) that contains the 48-byte key exporter output
(see {{output}}), without any parameters. Note that Structured Field Byte (see {{output}}), without any parameters. Note that Structured Field Byte
Sequences are encoded using the non-URL-safe variant of base64. For example: Sequences are encoded using the non-URL-safe variant of base64. For example:
~~~ http-message ~~~ http-message
NOTE: '\' line wrapping per RFC 8792 NOTE: '\' line wrapping per RFC 8792
Concealed-Auth-Export: :VGhpc+BleGFtcGxlIFRMU/BleHBvcn\ Concealed-Auth-Export: :VGhpc+BleGFtcGxlIFRMU/BleHBvcn\
Rlc+BvdXRwdXQ/aXMgNDggYnl0ZXMgI/+h: Rlc+BvdXRwdXQ/aXMgNDggYnl0ZXMgI/+h:
~~~ ~~~
{: #fig-int-hdr-example title="Example Concealed-Auth-Export Header Field"} {: #fig-int-hdr-example title="Example Concealed-Auth-Export Header Field"}
skipping to change at line 610 skipping to change at line 525
{{!TLS=RFC8446}}. This includes any use of HTTP over TLS as typically used for {{!TLS=RFC8446}}. This includes any use of HTTP over TLS as typically used for
HTTP/2 {{H2}}, or HTTP/3 {{H3}} where the transport protocol uses TLS as its HTTP/2 {{H2}}, or HTTP/3 {{H3}} where the transport protocol uses TLS as its
authentication and key exchange mechanism {{?QUIC-TLS=RFC9001}}. authentication and key exchange mechanism {{?QUIC-TLS=RFC9001}}.
Because the TLS keying material exporter is only secure for authentication whe n Because the TLS keying material exporter is only secure for authentication whe n
it is uniquely bound to the TLS session {{!RFC7627}}, the Concealed it is uniquely bound to the TLS session {{!RFC7627}}, the Concealed
authentication scheme requires either one of the following properties: authentication scheme requires either one of the following properties:
* The TLS version in use is greater than or equal to 1.3 {{TLS}}. * The TLS version in use is greater than or equal to 1.3 {{TLS}}.
<!-- [rfced] Please review the "Inclusive Language" portion of the online
Style Guide <https://www.rfc-editor.org/styleguide/part2/#inclusive_language>
and let us know if any changes are needed. Updates of this nature typically
result in more precise language, which is helpful for readers.
* The TLS version in use is 1.2, and the extended master secret extension * The TLS version in use is 1.2, and the extended master secret extension
{{RFC7627}} has been negotiated. {{RFC7627}} has been negotiated.
Clients MUST NOT use the Concealed authentication scheme on connections that d o Clients MUST NOT use the Concealed HTTP authentication scheme on connections t hat do
not meet one of the two properties above. If a server receives a request that not meet one of the two properties above. If a server receives a request that
uses this authentication scheme on a connection that meets neither of the abov e uses this authentication scheme on a connection that meets neither of the abov e
properties, the server MUST treat the request as if the authentication were no t properties, the server MUST treat the request as if the authentication were no t
present. present.
# Security Considerations {#security} # Security Considerations {#security}
The Concealed HTTP authentication scheme allows a client to authenticate to an The Concealed HTTP authentication scheme allows a client to authenticate to an
origin server while guaranteeing freshness and without the need for the server origin server while guaranteeing freshness and without the need for the server
to transmit a nonce to the client. This allows the server to accept to transmit a nonce to the client. This allows the server to accept
skipping to change at line 747 skipping to change at line 656
{:numbered="false"} {:numbered="false"}
The authors would like to thank many members of the IETF community, as this The authors would like to thank many members of the IETF community, as this
document is the fruit of many hallway conversations. In particular, the author s document is the fruit of many hallway conversations. In particular, the author s
would like to thank {{{David Benjamin}}}, {{{Reese Enghardt}}}, {{{Nick would like to thank {{{David Benjamin}}}, {{{Reese Enghardt}}}, {{{Nick
Harper}}}, {{{Dennis Jackson}}}, {{{Ilari Liusvaara}}}, {{{François Michel}}}, Harper}}}, {{{Dennis Jackson}}}, {{{Ilari Liusvaara}}}, {{{François Michel}}},
{{{Lucas Pardue}}}, {{{Justin Richer}}}, {{{Ben Schwartz}}}, {{{Martin {{{Lucas Pardue}}}, {{{Justin Richer}}}, {{{Ben Schwartz}}}, {{{Martin
Thomson}}}, and {{{Chris A. Wood}}} for their reviews and contributions. The Thomson}}}, and {{{Chris A. Wood}}} for their reviews and contributions. The
mechanism described in this document was originally part of the first iteratio n mechanism described in this document was originally part of the first iteratio n
of MASQUE {{?MASQUE-ORIGINAL=I-D.schinazi-masque-00}}. of MASQUE {{?MASQUE-ORIGINAL=I-D.schinazi-masque-00}}.
<!--[rfced] References. May we add the following URL to this reference for the
ease of the reader?
https://www.itu.int/rec/T-REC-X.690
Current:
[X.690] ITU-T, "Information technology - ASN.1 encoding Rules:
Specification of Basic Encoding Rules (BER), Canonical
Encoding Rules (CER) and Distinguished Encoding Rules
(DER)", ITU-T Recommendation X690, ISO/IEC 8825-1:2021,
February 2021.
 End of changes. 16 change blocks. 
92 lines changed or deleted 8 lines changed or added

This html diff was produced by rfcdiff 1.48.