[{"author": "Muhammad Usama Sardar", "text": "<p>Did he say they are all proved?</p>", "time": "2025-11-05T19:34:30.000Z"}, {"author": "Muhammad Usama Sardar", "text": "<p>as in formally proved?</p>", "time": "2025-11-05T19:34:49.000Z"}, {"author": "Cory Benfield", "text": "<p>I believe that was \"approved\"</p>", "time": "2025-11-05T19:35:08.000Z"}, {"author": "Sean Turner", "text": "<p>The errata are either held for document update, approved, or rejected.</p>", "time": "2025-11-05T19:35:36.000Z"}, {"author": "Muhammad Usama Sardar", "text": "<p>Thanks.</p>", "time": "2025-11-05T19:36:25.000Z"}, {"author": "Sean Turner", "text": "<p>We had these: <a href=\"https://www.rfc-editor.org/errata_search.php?rfc=6347&amp;rec_status=15&amp;presentation=table\">https://www.rfc-editor.org/errata_search.php?rfc=6347&amp;rec_status=15&amp;presentation=table</a><br>\nand these:<br>\n<a href=\"https://www.rfc-editor.org/errata_search.php?rfc=9147&amp;rec_status=15&amp;presentation=table\">https://www.rfc-editor.org/errata_search.php?rfc=9147&amp;rec_status=15&amp;presentation=table</a></p>", "time": "2025-11-05T19:37:23.000Z"}, {"author": "Martin Thomson", "text": "<p>NSS doesn't do any processing until the entire handshake message is available</p>", "time": "2025-11-05T19:39:24.000Z"}, {"author": "Carlos Melchor", "text": "<p>o/</p>", "time": "2025-11-05T19:39:38.000Z"}, {"author": "Ira McDonald", "text": "<p>EKR's mic is too hot and is distorting quite a lot</p>", "time": "2025-11-05T19:42:48.000Z"}, {"author": "Martin Thomson", "text": "<p>he has it really close to his mouth, which is sometimes necessary, but not in this case</p>", "time": "2025-11-05T19:43:09.000Z"}, {"author": "Thom Wiggers", "text": "<p>it kinda hurts to listen to remotely</p>", "time": "2025-11-05T19:43:35.000Z"}, {"author": "Yoav Nir", "text": "<p>For IKEv2 you need to implement 5 or 6 extensions to get McEliece to work.</p>", "time": "2025-11-05T19:43:41.000Z"}, {"author": "Ira McDonald", "text": "<p>EKR's mic overload will also spoil scrutability of the session recording.  Asking him to back off the mic would be a good idea.</p>", "time": "2025-11-05T19:44:44.000Z"}, {"author": "Sean Turner", "text": "<p>With these mics you kind of have to eat it</p>", "time": "2025-11-05T19:45:07.000Z"}, {"author": "Thom Wiggers", "text": "<p>EKR is way too close, when he was a bit more chill like right now it's waaay better</p>", "time": "2025-11-05T19:45:46.000Z"}, {"author": "Martin Thomson", "text": "<p>to be clear, this point about invalid content is one that QUIC solves.  it's a little harder in TLS, where there is no authentication for the first flight.  Would it make sense to add authentication to unencrypted packets?</p>", "time": "2025-11-05T19:46:19.000Z"}, {"author": "David Benjamin", "text": "<p>Looks like the original report had some notes about ACKs at DTLS 1.2.<br>\n<a href=\"https://mailarchive.ietf.org/arch/msg/tls/ZEj04LyL3hJXeK1nsiOBoB2vCsg/\">https://mailarchive.ietf.org/arch/msg/tls/ZEj04LyL3hJXeK1nsiOBoB2vCsg/</a></p>", "time": "2025-11-05T19:47:40.000Z"}, {"author": "David Benjamin", "text": "<blockquote>\n<ol>\n<li>If a DTLS 1.2 (i.e. does not implement RFC 9147 at all) implementation<br>\nreceives an ACK record for whatever reason, what happens? This decision we<br>\ndon't get to change. Rather, it is a design constraint. Both OpenSSL and<br>\nBoringSSL treat unexpected record types as a fatal error. I haven't checked<br>\nother implementations. So I think we must take as a constraint that you<br>\ncannot send an ACK unless you know the peer is 1.3-capable.</li>\n</ol>\n</blockquote>", "time": "2025-11-05T19:47:58.000Z"}, {"author": "David Benjamin", "text": "<p>The problem is that an ACK is still a valid record, and it's mostly the record layer that has the loose behavior. Only the next layer goes \"ehh, what is this record type??\"</p>", "time": "2025-11-05T19:48:57.000Z"}, {"author": "Martin Thomson", "text": "<p>Yeah, that seems suboptimal, but it only really builds the case against DTLS</p>", "time": "2025-11-05T19:51:42.000Z"}, {"author": "Martin Thomson", "text": "<p><span class=\"user-mention\" data-user-id=\"4721\">@Yaroslav Rosomakho</span> if you want multiple keys, you can have multiple files.  It is fairly straightforward to combine ECH configs.</p>", "time": "2025-11-05T19:52:43.000Z"}, {"author": "David Benjamin", "text": "<p>I mean, I will not debate against any case against DTLS! :-) But in a hypothetical DTLS with authenticated unencrypted packets, this would still have broken, unless we decided ACKs used different encryption or something goofy.</p>", "time": "2025-11-05T19:53:20.000Z"}, {"author": "Martin Thomson", "text": "<p>Or we had a different extension model that involved ignoring stuff you didn't understand</p>", "time": "2025-11-05T19:54:00.000Z"}, {"author": "Yaroslav Rosomakho", "text": "<p>Sure. I think it would be more straightfoward to have EchConfig rather than EchConfigList in this context, but I guess that ship has sailed</p>", "time": "2025-11-05T19:54:12.000Z"}, {"author": "David Benjamin", "text": "<p>Sure. If we said explicitly that unknown content types were ignored, then this would be straightforward.</p>", "time": "2025-11-05T19:54:21.000Z"}, {"author": "Martin Thomson", "text": "<p>It's nice to have ECHConfigList, because that's the sequence of bytes you put in other places.</p>", "time": "2025-11-05T19:54:35.000Z"}, {"author": "Stephen Farrell", "text": "<p>s/might/do/ want to end up with 1</p>", "time": "2025-11-05T19:56:14.000Z"}, {"author": "Bas Westerbaan", "text": "<p>One please.</p>", "time": "2025-11-05T19:56:14.000Z"}, {"author": "David Benjamin", "text": "<p>I do regret that the ECHConfigList includes those stupid two bytes in front as an artifact of the TLS presentation language. Makes everything needlessly annoying.</p>", "time": "2025-11-05T19:56:16.000Z"}, {"author": "Martin Thomson", "text": "<p>I don't see the indirection via a public_name as something that provides useful features, only more risk.</p>", "time": "2025-11-05T19:57:06.000Z"}, {"author": "Stephen Farrell", "text": "<p>critical X.509 extension == not happening</p>", "time": "2025-11-05T19:57:06.000Z"}, {"author": "David Benjamin", "text": "<p><span class=\"user-mention silent\" data-user-id=\"26\">Martin Thomson</span> <a href=\"#narrow/channel/140-tls/topic/ietf-124/near/192390\">said</a>:</p>\n<blockquote>\n<p>I don't see the indirection via a public_name as something that provides useful features, only more risk.</p>\n</blockquote>\n<p>I tend to agree. Just to consider why it'd be useful, we did discuss back when designing ECH \"what if you lost all your private keys, can you recover?\". The RPK mode <em>does</em> add an unrecoverable private key loss. But I dunno if I care very much either way.</p>", "time": "2025-11-05T19:59:58.000Z"}, {"author": "Stephen Farrell", "text": "<p>the public_name might be used to route to the place with the ECH private key</p>", "time": "2025-11-05T20:02:51.000Z"}, {"author": "David Benjamin", "text": "<p><span class=\"user-mention silent\" data-user-id=\"55\">Stephen Farrell</span> <a href=\"#narrow/channel/140-tls/topic/ietf-124/near/192408\">said</a>:</p>\n<blockquote>\n<p>the public_name might be used to route to the place with the ECH private key</p>\n</blockquote>\n<p>If you are doing that, then you actually need the outer SNI to be the public name.</p>", "time": "2025-11-05T20:03:15.000Z"}, {"author": "Dennis Jackson", "text": "<p>Indeed. You could use the ConfigID at the cost of 1/256 GREASE clients also stopping by</p>", "time": "2025-11-05T20:03:39.000Z"}, {"author": "Bas Westerbaan", "text": "<p>There is. There is \"mandatory\"</p>", "time": "2025-11-05T20:04:08.000Z"}, {"author": "Stephen Farrell", "text": "<p>yep</p>", "time": "2025-11-05T20:04:13.000Z"}, {"author": "Martin Thomson", "text": "<p><span class=\"user-mention\" data-user-id=\"4813\">@David Adrian</span> I thought that this would have been helpful in terms of making it possible to deploy</p>", "time": "2025-11-05T20:06:02.000Z"}, {"author": "Eric Rescorla", "text": "<p>I just want to point out that I got my stuff done in &lt;20 minutes, so it's on everyone else if this runs long</p>", "time": "2025-11-05T20:07:20.000Z"}, {"author": "Deirdre Connolly", "text": "<p><span class=\"user-mention\" data-user-id=\"810\">@Eric Rescorla</span> but you operate at 2X speed</p>", "time": "2025-11-05T20:07:42.000Z"}, {"author": "Martin Thomson", "text": "<p>It's on the chairs, isn't it?</p>", "time": "2025-11-05T20:07:44.000Z"}, {"author": "Rich Salz", "text": "<p>DTLSbis is not important to many people?</p>", "time": "2025-11-05T20:07:51.000Z"}, {"author": "Eric Rescorla", "text": "<p><span class=\"user-mention silent\" data-user-id=\"11\">Rich Salz</span> <a href=\"#narrow/channel/140-tls/topic/ietf-124/near/192445\">said</a>:</p>\n<blockquote>\n<p>DTLSbis is not important to many people?</p>\n</blockquote>\n<p>Good point</p>", "time": "2025-11-05T20:08:00.000Z"}, {"author": "Bas Westerbaan", "text": "<p>Except that in the current draft, there is client state that can brick clients for a long while</p>", "time": "2025-11-05T20:09:32.000Z"}, {"author": "Stephen Farrell", "text": "<p>these ideas don't change that</p>", "time": "2025-11-05T20:11:03.000Z"}, {"author": "Ted Hardie", "text": "<p>Are the authors asking for adoption today?</p>", "time": "2025-11-05T20:11:36.000Z"}, {"author": "Christopher Patton", "text": "<p><span class=\"user-mention\" data-user-id=\"549\">@Bas Westerbaan</span> can you elaboarate at the mic? Totally understandable if it's too late in the evening</p>", "time": "2025-11-05T20:11:41.000Z"}, {"author": "Martin Thomson", "text": "<p>this only allows two things:</p>\n<ol>\n<li>updates via arbitrary media</li>\n<li>no link between the outer SNI and the authentication of the updated ECH (which is really just number 1)</li>\n</ol>", "time": "2025-11-05T20:11:53.000Z"}, {"author": "Christopher Patton", "text": "<p><span class=\"user-mention\" data-user-id=\"2103\">@Dennis Jackson</span> this was fixed with the HTTPS resource record (IP hints)</p>", "time": "2025-11-05T20:12:22.000Z"}, {"author": "Bas Westerbaan", "text": "<p><span class=\"user-mention silent\" data-user-id=\"3787\">Christopher Patton</span> <a href=\"#narrow/channel/140-tls/topic/ietf-124/near/192467\">said</a>:</p>\n<blockquote>\n<p><span class=\"user-mention silent\" data-user-id=\"549\">Bas Westerbaan</span> can you elaboarate at the mic? Totally understandable if it's too late in the evening</p>\n</blockquote>\n<p>It's a bit late. Dennis can comment.</p>", "time": "2025-11-05T20:12:39.000Z"}, {"author": "David Benjamin", "text": "<p>Rotation of RPK signing keys is... a little interesting.</p>", "time": "2025-11-05T20:12:46.000Z"}, {"author": "David Benjamin", "text": "<p>Yeah, HTTPS-RR went through great pains to handle multi-CDN.</p>", "time": "2025-11-05T20:13:21.000Z"}, {"author": "Erik Nygren", "text": "<p>I things implement the HTTPS RR TargetName handling properly then multi-CDN <em>should</em> work, but from discussions there are indications that implementers find this part of the spec hard to understand.</p>", "time": "2025-11-05T20:13:22.000Z"}, {"author": "Dennis Jackson", "text": "<p>David: It's a list of PK hashes so rotation works the obvious way. Operatos could certainly get it wrong though.</p>", "time": "2025-11-05T20:14:03.000Z"}, {"author": "Stephen Farrell", "text": "<p>IMO the PKIX one won't work out</p>", "time": "2025-11-05T20:14:21.000Z"}, {"author": "Dennis Jackson", "text": "<p>Re Multi CDN: My comment was maybe more about how deployment has gone, rather than what the tech stack supports.</p>", "time": "2025-11-05T20:14:50.000Z"}, {"author": "Christopher Patton", "text": "<p>RPK: If ECHConfigs are basically TOFU, would it be alright to ship the SPKI in the DNS record itself?</p>", "time": "2025-11-05T20:15:09.000Z"}, {"author": "Bas Westerbaan", "text": "<p>So there is no one that wants to go for PKIX.</p>", "time": "2025-11-05T20:15:33.000Z"}, {"author": "Dennis Jackson", "text": "<p>Chris: We ship the hash of the SPKI, smaller. Also lets us ship multiple</p>", "time": "2025-11-05T20:15:33.000Z"}, {"author": "Bas Westerbaan", "text": "<p>Let's kill the PKIX method then.</p>", "time": "2025-11-05T20:15:35.000Z"}, {"author": "Martin Thomson", "text": "<p>RPK is the only option I care about here</p>", "time": "2025-11-05T20:15:49.000Z"}, {"author": "Christopher Patton", "text": "<p>How does the client get the public key, in either case?</p>", "time": "2025-11-05T20:15:52.000Z"}, {"author": "Erik Nygren", "text": "<p>TOFU doesn't work for things like multi-CDN.<br>\n(you'd have to do try and then if it fails try again)</p>", "time": "2025-11-05T20:16:02.000Z"}, {"author": "Rich Salz", "text": "<p>Also not in favor of cert-based.</p>", "time": "2025-11-05T20:16:04.000Z"}, {"author": "Dennis Jackson", "text": "<p>In RPK: Get hash of SPKI. In Retry Config, get full PK and signature.</p>", "time": "2025-11-05T20:16:10.000Z"}, {"author": "Stephen Farrell", "text": "<p>ah, I was hoping DJB would be the bonus:-)</p>", "time": "2025-11-05T20:16:14.000Z"}, {"author": "David Benjamin", "text": "<p>The challenge is the client may be expecting stale RPK hashes (recovery is in large part about stale DNS), so the server needs to send a signature from basically every key they've ever had.</p>", "time": "2025-11-05T20:16:16.000Z"}, {"author": "Martin Thomson", "text": "<p>The lack of indirection for RPK is not a big deal: you can always go back to DNS</p>", "time": "2025-11-05T20:16:19.000Z"}, {"author": "Christopher Patton", "text": "<p>excellent, thanks Dennis</p>", "time": "2025-11-05T20:16:28.000Z"}, {"author": "David Benjamin", "text": "<p>The public name + outer SNI model, for all its pains, has one nice property: even if you believe in a stale public name, as long as the client-facing server can still authoritatively speak for that public name, the outer SNI will correctly select that cert and get you the auth you're looking for.</p>", "time": "2025-11-05T20:16:58.000Z"}, {"author": "Dennis Jackson", "text": "<p>DB: Yep. A signature from anything that a client could have for RPK. However, don't need to rotate RPK keys often. E.g. could be 90 days. Doesn't impact forward secrecy.</p>", "time": "2025-11-05T20:17:24.000Z"}, {"author": "Martin Thomson", "text": "<p>There are two ways to do RPK: Either the config contains the public key; or the config contains a public key commitment (hash) and the update contains the public key.</p>", "time": "2025-11-05T20:17:32.000Z"}, {"author": "Dennis Jackson", "text": "<p>DB: Yeah, that reason is partly why the PKIX method stuck around</p>", "time": "2025-11-05T20:17:38.000Z"}, {"author": "Christopher Patton", "text": "<p>Yeah I'm liking RPK over PKIX for this.</p>", "time": "2025-11-05T20:17:50.000Z"}, {"author": "Mike Ounsworth", "text": "<p>Tourist's view: isn't the point of ECH to obfuscate your CH from <span aria-label=\"eyes\" class=\"emoji emoji-1f440\" role=\"img\" title=\"eyes\">:eyes:</span> as it goes over Web? If you end up talking to the wrong server, then you're gonna fail the pkix step of the real TLS handshake, right?<br>\nSo why are we talking about signing ECHConfig and ECH TOFU and other \"trust\" things?</p>", "time": "2025-11-05T20:18:03.000Z"}, {"author": "Martin Thomson", "text": "<p><span class=\"user-mention\" data-user-id=\"829\">@David Benjamin</span> that problem is addressed by going back to DNS if you fail to authenticate a fallback config.</p>", "time": "2025-11-05T20:18:54.000Z"}, {"author": "Dennis Jackson", "text": "<p>Mike: Hard to boil down to a short message, but this is about what happens when you have the 'wrong' ECH config because its stale or whatever. So there's no handshake with the right server, but you need a way to authenticate the retry config sent back to you by the server.</p>", "time": "2025-11-05T20:19:05.000Z"}, {"author": "Mike Ounsworth", "text": "<p><span class=\"user-mention silent\" data-user-id=\"2103\">Dennis Jackson</span> <a href=\"#narrow/channel/140-tls/topic/ietf-124/near/192519\">said</a>:</p>\n<blockquote>\n<p>Mike: Hard to boil down to a short message, but this is about what happens when you have the 'wrong' ECH config because its stale or whatever. So there's no handshake with the right server, but you need a way to authenticate the retry config sent back to you by the server.</p>\n</blockquote>\n<p>So sortof a discoverability / recovery thing, rather than a trust thing?</p>", "time": "2025-11-05T20:19:49.000Z"}, {"author": "Dennis Jackson", "text": "<p>Mike: Yes. If you like, the bug we're fixing is that the recovery authentication mechanism ALSO impacts the public SNI.</p>", "time": "2025-11-05T20:20:16.000Z"}, {"author": "Erik Nygren", "text": "<p>Mike: in the multi-CDN setup there are different servers both with valid (often different) PKIX certs, but also with different ECH configs.  The HTTPS/SVCB RRs are designed to bind the IPs (pointed to by TargetName) together with the ECHConfig.</p>", "time": "2025-11-05T20:20:34.000Z"}, {"author": "David Benjamin", "text": "<p><span class=\"user-mention silent\" data-user-id=\"26\">Martin Thomson</span> <a href=\"#narrow/channel/140-tls/topic/ietf-124/near/192517\">said</a>:</p>\n<blockquote>\n<p><span class=\"user-mention silent\" data-user-id=\"829\">David Benjamin</span> that problem is addressed by going back to DNS if you fail to authenticate a fallback config.</p>\n</blockquote>\n<p>That was my original proposal before we landed on this inner/outer handshake dance. I was unable to convince people it was safe enough, given how many layers of caching DNS has. Had to be sure we will actually get a fresh record. If we could be sure of that, we wouldn't need any of this! Go back to DNS and move on.</p>", "time": "2025-11-05T20:20:44.000Z"}, {"author": "Martin Thomson", "text": "<p>This is QUIC Preferred Address for TLS.  That it requires a new TCP flow is unfortunate.</p>", "time": "2025-11-05T20:20:52.000Z"}, {"author": "Muhammad Usama Sardar", "text": "<p>In this figure, R1 just forwards the ClientHello?</p>", "time": "2025-11-05T20:21:19.000Z"}, {"author": "Martin Thomson", "text": "<p><span class=\"user-mention silent\" data-user-id=\"829\">David Benjamin</span> <a href=\"#narrow/channel/140-tls/topic/ietf-124/near/192527\">said</a>:</p>\n<blockquote>\n<p><span class=\"user-mention silent\" data-user-id=\"26\">Martin Thomson</span> <a href=\"#narrow/channel/140-tls/topic/ietf-124/near/192517\">said</a>:</p>\n<blockquote>\n<p><span class=\"user-mention silent\" data-user-id=\"829\">David Benjamin</span> that problem is addressed by going back to DNS if you fail to authenticate a fallback config.</p>\n</blockquote>\n<p>That was my original proposal before we landed on this inner/outer handshake dance. I was unable to convince people it was safe enough, given how many layers of caching DNS has. Had to be sure we will actually get a fresh record. If we could be sure of that, we wouldn't need any of this! Go back to DNS and move on.</p>\n</blockquote>\n<p>I think that you still need something like what we have for DNS caching reasons, but going back to DNS could be part of the overall risk management plan</p>", "time": "2025-11-05T20:21:57.000Z"}, {"author": "Erik Nygren", "text": "<p>For HTTPS this is also Alt-Svc which never got critical mass implementation for alternate server names.</p>", "time": "2025-11-05T20:22:00.000Z"}, {"author": "Martin Thomson", "text": "<p><span class=\"user-mention\" data-user-id=\"672\">@Erik Nygren</span> or Alt-SVCB :)</p>", "time": "2025-11-05T20:22:18.000Z"}, {"author": "Erik Nygren", "text": "<p>(but not exactly, but had a similar set of use-cases)</p>", "time": "2025-11-05T20:22:23.000Z"}, {"author": "Erik Nygren", "text": "<p>right.  :)</p>", "time": "2025-11-05T20:22:25.000Z"}, {"author": "David Benjamin", "text": "<p>(Er, \"unable to convince people\" is probably too strong. I had no priors and was just trying to get ECH into a deployable state. I agreed with folks that going back to DNS was not good enough.)</p>", "time": "2025-11-05T20:23:07.000Z"}, {"author": "Mike Ounsworth", "text": "<p>So, still in my tourist's view (ie: I understood like 60% of the well-intentioned words used to explain this to me.)<br>\nSounds like the failover / failback stuff matters. Sounds like building in a strong authentication model is overkill engineering?</p>", "time": "2025-11-05T20:23:46.000Z"}, {"author": "David Benjamin", "text": "<p>(ECH has enough uphill battles to get deployed, without also scaring every SRE into thinking they will blackhole their domains. So we really wanted to mitigate that footgun.)</p>", "time": "2025-11-05T20:23:56.000Z"}, {"author": "David Benjamin", "text": "<p><span class=\"user-mention\" data-user-id=\"5873\">@Mike Ounsworth</span> The challenge is in getting both:</p>\n<ol>\n<li>Make ECH fully rollback-safe, and robust to the caching mess that is DNS</li>\n<li>Attacker cannot make you think some ECH config was \"rolled back\" the wrong key or disabled by the server when it wasn't</li>\n</ol>\n<p>That means having some kind of as-good-as-your-source-DNS-record authentication on the rollback signal. It's a very messy thing.</p>", "time": "2025-11-05T20:26:46.000Z"}, {"author": "Mike Ounsworth", "text": "<p><span class=\"user-mention silent\" data-user-id=\"829\">David Benjamin</span> <a href=\"#narrow/channel/140-tls/topic/ietf-124/near/192546\">said</a>:</p>\n<blockquote>\n<p><span class=\"user-mention silent\" data-user-id=\"5873\">Mike Ounsworth</span> The challenge is in getting both:</p>\n<ol>\n<li>Make ECH fully rollback-safe, and robust to the caching mess that is DNS</li>\n<li>Attacker cannot make you think some ECH config was \"rolled back\" the wrong key or disabled by the server when it wasn't</li>\n</ol>\n<p>That means having some kind of as-good-as-your-source-DNS-record authentication on the rollback signal. It's a very messy thing.</p>\n</blockquote>\n<p>Yeah, right, ok, I get that.<br>\nBUT security modelling (in the real world) is Risk = Cost x Likelihood. IE don't spend more on security than the thing you're protecting. If replacing a passport costs $100; don't spend $1000 on a fire safe.<br>\nWhat, exactly, is ECH protecting that could be compromised by an incompletely authenticated rollback mechanisms here?</p>", "time": "2025-11-05T20:29:18.000Z"}]