On Wed, Feb 7, 2024 at 2:06 PM Elardus Erasmus <Elardus.Erasmus=
40sophos....@dmarc.ietf.org> wrote:

> Hi,
>
> I figured it would be better to send an email, rather than proposing and
> discussing this on a PR (proposed edits/diffs are at the bottom of this
> email).
>
> We have two suggestions regarding the specification text (
> https://datatracker.ietf.org/doc/draft-ietf-tls-esni/):
>
> *Suggestion 1*
>
> Make it clear that if an ECH extension is absent from the server_hello, it
> qualifies as an ECH disabling signal. The text earlier in the section
> already requires that “both authentication and the handshake complete
> successfully” in the initial ECH-enabled connection, for ECH to be regarded
> as disabled. The same (ECH disabling due to absent ECH ext from server) can
> be deducted by reading a few paragraphs, but even then, it is not clear.
> This makes it much clearer.
>
> In Section 6.1.6, change:
>
> If none of the values provided in "retry_configs" contains a supported
> version,
> or an earlier TLS version was negotiated, the client can regard ECH as
> securely
> disabled by the server, and it SHOULD retry the handshake with a new
> transport
> connection and ECH disabled.
>
> To:
>
> If none of the values provided in "retry_configs" contains a supported
> version,
> or an earlier TLS version was negotiated, *or the server did not supply
> an*
> *"encrypted_client_hello" extension in its EncryptedExtensions message,*
> the
> client can regard ECH as securely disabled by the server. It SHOULD retry
> the handshake with a new transport connection and ECH disabled.
>

I agree with this. I have created PR #603 to address this:
https://github.com/tlswg/draft-ietf-tls-esni/pull/603





> *Suggestion 2*
>
> Section 6.1.6 also mentions that:
>
> Clients SHOULD implement a limit on retries caused by receipt of
> "retry_configs"
> or servers which do not acknowledge the "encrypted_client_hello" extension.
>
> The text does not differentiate between *retry types* for the purpose of
> limiting the connections. I.e., if the ECH config was replaced, then it is
> an *ECH-enabled* retry (with new keys). But if ECH was disabled, then it
> is an * ECH-disabled* retry. Limiting the connections makes sense for
> *ECH-enabled* retries due to config replacement, since the connections
> seem not be successful in any case and thus the extra load is not
> necessary. But limiting it for *ECH-disabled* connections could mean that
> connections may start failing abruptly, depending on the aggressiveness of
> the limit on the client. As long as ECH-disabled connections succeed, they
> should not be limited so that connectivity does not suffer unnecessarily.
>

I think I agree with you that we shouldn't limit




> It would probably even be good/necessary to implement a *holdoff* on the
> client in the *ECH-disabled* case. I.e., not making an ECH-enabled
> connection to an SNI that resulted in ECH disabling for some duration of
> time. Some scenarios where this would be desirable:
>
>    - The ECH version steps. This will lead to ECH-disabled retries.
>    During DNS propagation time, the number of connections to client-facing
>    servers of ECH enabled sites will double (say a large CDN activates a
>    version step of all its sites all at once). Clients that limit retries
>    could experience connectivity issues, but clients that implement a holdoff
>    would mitigate the connection doubling problem in such a scenario.
>    - A server disables ECH temporarily or serves TLS 1.2. Again, ECH will
>    be securely disabled, and a connectivity loss may occur (retry limit). A
>    doubling in connections will be experienced until DNS propagation is
>    finished - or indefinitely in case of a config issue (e.g. server
>    administrator does not remove ECH config from DNS).
>    - Section 8.2 talks about middleboxes acting as TLS-terminating
>    proxies. All connections going through such proxies will result in ECH
>    being disabled (due to the ECH extension being absent from the
>    server_hello). Also leading to a possible connectivity loss, or at the very
>    least a permanent doubling in connections.
>
> The “connection doubling” in the scenarios above increases connection
> establishment latency and adds load to the client, server, middlebox, and
> other stateful network devices, and can be mitigated by a temporary holdoff
> on ECH-enabled connections on the client.
>
> The proposal is therefore to change Section 6.1.6 from:
>
> If none of the values provided in "retry_configs" contains a supported
> version,
> or an earlier TLS version was negotiated, the client can regard ECH as
> securely
> disabled by the server, and it SHOULD retry the handshake with a new
> transport
> connection and ECH disabled.
>
>
>
> Clients SHOULD implement a limit on retries caused by receipt of
> "retry_configs"
> or servers which do not acknowledge the "encrypted_client_hello"
> extension. If
> the client does not retry in either scenario, it MUST report an error to
> the
> calling application.
>
> To:
>
> Clients SHOULD implement a limit* on ECH-enabled *retries caused by* the
> secure*
> *replacement of ECH keys by "retry_configs". If the client does not retry,
> it*
> *MUST report an error to the calling application.*
>
>
>
> If none of the values provided in "retry_configs" contains a supported
> version,
> or an earlier TLS version was negotiated*, or the server did not supply
> an*
> *"encrypted_client_hello" extension in its EncryptedExtensions message*,
> the
> client can regard ECH as securely disabled by the server. It SHOULD retry
> the handshake with a new transport connection and ECH disabled. *If the
> client*
> *does not retry, it MUST report an error to the calling application.*
>
>
>
> *Clients SHOULD implement a holdoff on ECH-enabled connections to an SNI
> for*
>
> *which ECH has been securely disabled. I.e., those connections made after
> the*
>
> *ECH-disabled retry. Clients SHOULD still send a GREASE ECH extension (see*
>
> *{{grease-ech}}) for ECH-disabled connections made during the holdoff
> period.*
>

See https://github.com/tlswg/draft-ietf-tls-esni/issues/604 for discussion
on this.

-Ekr


>
> Thanks,
>
> Elardus
>
> (suggested diffs to the specification below)
>
> @@ -852,10 +852,11 @@ If the server supplied an "encrypted_client_hello"
> extension in its
>
> EncryptedExtensions message, the client MUST check that it is syntactically
>
> valid and the client MUST abort the connection with a "decode_error" alert
>
> otherwise. If an earlier TLS version was negotiated, the client MUST NOT
> enable
>
> -the False Start optimization {{RFC7918}} for this handshake. If both
>
> -authentication and the handshake complete successfully, the client MUST
> perform
>
> -the processing described below then abort the connection with an
> "ech_required"
>
> -alert before sending any application data to the server.
>
> +the False Start optimization {{RFC7918}} for this handshake.
>
> +
>
> +If both authentication and the handshake complete successfully, the
> client MUST
>
> +perform the processing described below then abort the connection with an
>
> +"ech_required" alert before sending any application data to the server.
>
>  If the server provided "retry_configs" and if at least one of the values
>
> contains a version supported by the client, the client can regard the ECH
> keys
>
> @@ -876,15 +877,21 @@ because the client will send cookies to the server
> in parallel connections,
>
> using the retry configurations for these parallel connections does not
>
> introduce a new tracking vector.
>
> +Clients SHOULD implement a limit on ECH-enabled retries caused by the
> secure
>
> +replacement of ECH keys by "retry_configs". If the client does not retry,
> it
>
> +MUST report an error to the calling application.
>
> +
>
> If none of the values provided in "retry_configs" contains a supported
> version,
>
> -or an earlier TLS version was negotiated, the client can regard ECH as
> securely
>
> -disabled by the server, and it SHOULD retry the handshake with a new
> transport
>
> -connection and ECH disabled.
>
> -
>
> -Clients SHOULD implement a limit on retries caused by receipt of
> "retry_configs"
>
> -or servers which do not acknowledge the "encrypted_client_hello"
> extension. If
>
> -the client does not retry in either scenario, it MUST report an error to
> the
>
> -calling application.
>
> +or an earlier TLS version was negotiated, or the server did not supply an
>
> +"encrypted_client_hello" extension in its EncryptedExtensions message, the
>
> +client can regard ECH as securely disabled by the server. It SHOULD retry
>
> +the handshake with a new transport connection and ECH disabled. If the
> client
>
> +does not retry, it MUST report an error to the calling application.
>
> +
>
> +Clients SHOULD implement a holdoff on ECH-enabled connections to an SNI
> for
>
> +which ECH has been securely disabled. I.e., those connections made after
> the
>
> +ECH-disabled retry. Clients SHOULD still send a GREASE ECH extension (see
>
> +{{grease-ech}}) for ECH-disabled connections made during the holdoff
> period.
>
>  ### Authenticating for the Public Name {#auth-public-name}
>
>
>
>
> _______________________________________________
> TLS mailing list
> TLS@ietf.org
> https://www.ietf.org/mailman/listinfo/tls
>
_______________________________________________
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls

Reply via email to