On 6/9/2025 12:35 AM, Martin Thomson wrote:
Hi Christian,

When it comes to ECH, the client won't know about the existence of a backend 
server.  The only thing that the client needs to know is the name that it is 
seeking to connect to.  Whether this is in split mode or not, the protocol 
works the same.

As for the question about ALPN, the general view is that ALPN values from the 
client are in the same bucket of things as other configuration: they aren't 
based on the choice of server, but on unchanging configuration at the client.  
If the client is using some new protocol, then it would advertise the same ALPN 
list (including that new protocol) in every connection attempt it makes.  As a 
result, there's not much value in trying to hide the ALPN list.  This isn't 
entirely clear in RFC 9460, but you can see from the example in Section 7.1.2 
how the DNS record should not change what the client offers.

The purpose of the ALPN parameter in SVCB is not so much to change what the 
client offers in the ClientHello, but to allow the client to filter out service 
endpoints that only speak protocols it doesn't understand.

Thanks.

I am not sure about your reasoning on ALPN. I get the argument about consistency between client connection, which means that the ALPN list is a property of the client, not so much the servers. On the other hand, we see these "properties of the client" used in deep packet inspection and other shenanigans. I believe there is at least some value into hiding what exactly the client wants to do.

I get that ECH relies on DNS for configuration, and that the HTTPS records act very much like the MX records, finding the appropriate service for a domain name. That's how clients identify the "client facing server" for a "backend server", whether for finding ECH or simply for managing proxies and load balancing. The obvious issue, noted in the draft, is that third parties that can monitor DNS traffic will be able to associate the HTTPS exchange with the following connection.

The "obvious" solution is to carry the HTTPS query over encrypted DNS -- hopefully not the ISP service if the goal is to hide the SNI from ISP monitoring. But as many have noted, if the result is that all HTTPS queries are going through a big centralized service, that service is going to accumulate a lot of knowledge about what's going on. Endpoints can alleviate that somewhat by using different DNS services for the HTTPS query and the following A/AAAA query. For example, resolve HTTPS through an encrypted open DNS resolver, cache the results, then resolve A/AAAA though the ISP service. The encrypted resolver will know that the client checked the HTTPS record for "backend.example.com", but will not know whether and when there was a connection through "facing.example.com". I would call that tactic "split and cache".

Privacy oriented endpoint can make that one better by adding "chaff". Instead of just looking HTTPS records for just the service that they intend to use, they could do multiple lookup for different domain names. The encrypted resolver will of course cache all that, but that will be low quality information that does not actually predict which of the services the client will access. For example, that would not be a very good input for "more precise advertisements".

But still, one of the most effective ways to reduce the outgoing flow of information is to do caching. The HTTPS + A/AAAA exchange produces three pieces of information: the list of facing servers that might serve the backend service; the ECH configuration and port number for the selected facing server; and the current IP address of that server. These three pieces of information have their own time to live: when the relation between backend and facing server changes due to contracts or other arrangements; when the ECH configuration changes due to configuration changes or software updates on the facing server; when the IP address changes with the connectivity of the facing server. For effective caching, I would like to split those. That means for example refreshing the ECH configuration if the facing server returns a "rety config" response, or doing an HTTPS lookup for the facing server rather than the backend server -- i.e., without making further disclosure about which service the endpoint wants to access.

That's what caused my question about ALPN. We have a little bit of mess here because not all facing server are expected to have an HTTPS record. The ones that implement HTTP will, but for other servers one has to look at SVCB records instead. And SVCB records are keyed by domain name + scheme. The scheme depends on the application, and thus from the ALPN. If I want to refresh the data about the client facing server, I need to know for what scheme I am doing that.

-- Christian Huitema

_______________________________________________
TLS mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to