[TLS] draft-sheffer-tls-pqc-continuity-02: four comments on the client cache rules
Nazmus Salehin Sammo <mit252100@stud.mit.edu.au> Sun, 02 August 2026 04:43 UTC
Return-Path: <mit252100@stud.mit.edu.au>
X-Original-To: tls@mail2.ietf.org
Delivered-To: tls@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id 6E7961223B1D4 for <tls@mail2.ietf.org>; Sat, 1 Aug 2026 21:43:17 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1785645797; bh=pKYcJc7K5nTph8BzPnrYJ0KKkaqn5v6jhjNOsA/+aJA=; h=From:To:Subject:Date; b=T7W4vq/wWXUI7Uotw/eyX8ayEaxr56/7cRRVwdR2iyuN3P+j+tvKam6IAbHYEFpbj Lw8PS0mKO7q9XVKPZxFMzMD3B3MRBIuKWlGKoUpoQwDNWD0bDQk67SHHCueLjdBx21 ZbMnkH8YHxYRVXtr0wWfooeafXszYsvC7MKz4r2M=
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -1.899
X-Spam-Level:
X-Spam-Status: No, score=-1.899 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (2048-bit key) header.d=stud-mit-edu-au.20251104.gappssmtp.com
Received: from mail2.ietf.org ([166.84.6.31]) by localhost (mail2.ietf.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 4_vimZfzwPNx for <tls@mail2.ietf.org>; Sat, 1 Aug 2026 21:43:16 -0700 (PDT)
Received: from mail-pj1-x1032.google.com (mail-pj1-x1032.google.com [IPv6:2607:f8b0:4864:20::1032]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (P-256) server-digest SHA256) (No client certificate requested) by mail2.ietf.org (Postfix) with ESMTPS id 4AB4B1223B1CD for <tls@ietf.org>; Sat, 1 Aug 2026 21:43:16 -0700 (PDT)
Received: by mail-pj1-x1032.google.com with SMTP id 98e67ed59e1d1-38dfe910e9dso2202403a91.3 for <tls@ietf.org>; Sat, 01 Aug 2026 21:43:16 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stud-mit-edu-au.20251104.gappssmtp.com; s=20251104; t=1785645795; x=1786250595; darn=ietf.org; h=mime-version:content-type:content-language:accept-language :message-id:date:thread-index:thread-topic:subject:to:from:from:to :cc:subject:date:message-id:reply-to:content-type; bh=PoW3TY72o8z5hbyAXsVZjxuZTUuNdxucTqVcfjXvHr4=; b=kj+f14JwJ6JgBDS41SrGaSVFQI6v7TPfx3ahxPVFFrvwE54YrFCIbgFhHDIEqd7SSp VYyC0vXnD5HNJN5Zfry/YX+jL3dbqCfxelPGEdJkwe2Z82ASEviFwOWuqE6TUGqOrm4v pcmUBMG3hfTnq4/7kH0o3momgD6WMGo2XVvHAj4oCjHol+bVwCFbkf6QWdkLHBw7XAmb P5RHa9UML+TLpYdBxfZAnNNX0Onm+UekLcNrXCgW5nE7PkG0+ziCpquiaHWKhgsm0Xxe 8VPWBzK4sBaU0wdLvwqU2QRmtv6metYW6T3hdF/DnegbBfimlovGHxATNB57wokJaf9C oTOQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785645795; x=1786250595; h=mime-version:content-type:content-language:accept-language :message-id:date:thread-index:thread-topic:subject:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=PoW3TY72o8z5hbyAXsVZjxuZTUuNdxucTqVcfjXvHr4=; b=s1/L7Vbi6NAakEOYPYJZjnwWfwJ+ywH+QZQM2RxcbkC+Ggooh27+vRiTZeHRjaqziU eFag57xsapRRvcevM9eXB9rlgF2kX4m6gG4v+6P7KA73R+6XeW+mFjzSNgDqAB7fRztn v9mNj4xtWYhK3+O49/Jd5f7KhNmKnbVUAXZmmF94ax5PC6Qq/4yTBGRo8zVZZ9iKQVa9 9zhqsPYf3bmy4mXGRyqP4gVEuRdWliBIgfU426alvBUvKYSb98B9hVOdt2vt56NMnfgT 6WBQJ5wnaI+dapIQ5Ce14C245dl2qh44hmsd82MjkQkVUYq8eAoxasTipzQ68CUtg+6Y eTQQ==
X-Gm-Message-State: AOJu0Yw/9QzRXn+/97H6wDk3lDEmrzTjkvPXx335HDtNh48s8A4Klycp /TG93VcC9huKvAYiN91E5hFfMNlr/vdavTcs70dGvPTlE2YEu45jq41UAtS6Ulr5DFYgYqrkrmv dDYhS
X-Gm-Gg: AR+sD12CpNCO5ob1Q38D1xuzjbYw1WKn03evINFJo/nbuLljdHtgXSkyV+yuOa4o3eS jOpqV6/zagzvzYhDk3St6dMTglLT5K7bahiYs6vD3on6xie6ewuQA+GCumChhN/o/ZkYTJBaP1X RnIXechbsiHyfT3co0m/eSopKQ75zuaI2IauFmA45E0bFEmI13y4TLZF1g2DpC/evynohsQFaYi wMQ1+oQN59YaL/IqQ0RB4D4FfHZF+Vhw8oeZgI9PYububLlsjfnspS8lsobLOolA7GDdaUw8DV1 9qZyquH18Dvwr0RCJZirnjJA60YauDpOVhZA0kuwXGtzH5eLlUKsS/J/BZU6ZHs/doZKwWHo+rN CvRHX/N4EwNRUtMixzSfHatNk702ki2Wcl4r/4KCuWq79VTzl6fg2PUH8HFxfCh4U5osW35+nLs vd79DqufEv+0ra630NQlEH6tuk6jMoveHldLP5CU12ufBOkZHeADbRhvClmNZGfDiMCLAC5uFMI UChVJW7AsjfxUkkBpxtZ9PJYBQECniI2xmwjxfQ9QI8dK/FDF4NtLDEX0Y+bbQHJhZCOp5OmVKn YkOIKTB5H7j2RTcD+fA8627Gq4Ym9F0B0DNtueBawfu6REFP2MSyvazN1Jt5zsWwPlbTuEPcqnn oMlMhx5itW6M+rkLR6d0O/f5ZBA==
X-Received: by 2002:a17:90b:5867:b0:381:96a2:14d7 with SMTP id 98e67ed59e1d1-38fbc4ae4e7mr5156715a91.22.1785645794896; Sat, 01 Aug 2026 21:43:14 -0700 (PDT)
Received: from SEZPR02MB7994.apcprd02.prod.outlook.com ([2603:1046:101:12a::5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38fb2ce1778sm2505008a91.15.2026.08.01.21.43.09 for <tls@ietf.org> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 01 Aug 2026 21:43:12 -0700 (PDT)
From: Nazmus Salehin Sammo <mit252100@stud.mit.edu.au>
To: "tls@ietf.org" <tls@ietf.org>
Thread-Topic: [TLS] draft-sheffer-tls-pqc-continuity-02: four comments on the client cache rules
Thread-Index: AQHdIjkxJntvVTRo90yvuX1Wq9Mt+w==
X-MS-Exchange-MessageSentRepresentingType: 1
Message-ID: <SEZPR02MB7994150469B3D1468943F4C7A1D62@SEZPR02MB7994.apcprd02.prod.outlook.com>
Accept-Language: en-US
Content-Language: en-AU
X-MS-Has-Attach:
X-MS-Exchange-Organization-SCL: -1
X-MS-TNEF-Correlator:
X-MS-Exchange-Organization-RecordReviewCfmType: 0
x-ms-reactions: allow
Content-Type: multipart/alternative; boundary="_000_SEZPR02MB7994150469B3D1468943F4C7A1D62SEZPR02MB7994apcp_"
MIME-Version: 1.0
X-MailFrom: mit252100@stud.mit.edu.au
X-Mailman-Rule-Hits: nonmember-moderation
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-tls.ietf.org-0; header-match-tls.ietf.org-1; header-match-tls.ietf.org-2; header-match-tls.ietf.org-3
Message-ID-Hash: ZHU7LDPDODG4RJLSAOYH4LRSJWR4D2ZF
X-Message-ID-Hash: ZHU7LDPDODG4RJLSAOYH4LRSJWR4D2ZF
X-Mailman-Approved-At: Mon, 03 Aug 2026 08:57:21 -0700
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [TLS] draft-sheffer-tls-pqc-continuity-02: four comments on the client cache rules
List-Id: "This is the mailing list for the Transport Layer Security working group of the IETF." <tls.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/tls/ccC9La7sOrTTppyj3oYJO7o0l3Q>
List-Archive: <https://mailarchive.ietf.org/arch/browse/tls>
List-Help: <mailto:tls-request@ietf.org?subject=help>
List-Owner: <mailto:tls-owner@ietf.org>
List-Post: <mailto:tls@ietf.org>
List-Subscribe: <mailto:tls-join@ietf.org>
List-Unsubscribe: <mailto:tls-leave@ietf.org>
Date: Sun, 02 Aug 2026 04:46:27 -0000
X-Original-Date: Sun, 2 Aug 2026 04:43:06 +0000
Hi all,
I have been doing a formal analysis of the PQ authentication negotiation
drafts as part of an MRes, and I have read
draft-sheffer-tls-pqc-continuity-02 in full. Four comments on the
client-side cache rules. All four are filed on the draft's tracker with
the detail and the suggested text. I am summarising them here for the
record, rather than starting four threads.
1. Resumption is not addressed. [1]
Enforcement is anchored entirely on the server Certificate message
(S3.2: "apply its PQC policy to every CertificateEntry in the
server's Certificate message"). Per RFC 8446 S4.4.2 the server sends
Certificate for every key exchange method "except PSK", and S2.2 says
directly that on resumption the server "does not send a Certificate
or a CertificateVerify message". So on a resumed handshake that
obligation applies to an empty set. It is satisfied with nothing to
check, the MUST-abort cannot fire, and the commitment is never
consulted. Confirmed on OpenSSL 3.6.2 with a genuine ML-DSA-65 chain:
the resumed handshake completed (Reused, TLSv1.3) with 0 Certificate
and 0 CertificateVerify messages. The draft has no occurrence of
resumption, PSK, ticket or 0-RTT.
RFC 8672 S2, covering the same TLS-layer pinning pattern, handled
this explicitly: "As a result, PSK handshakes MUST NOT include the
extension defined here." That reasoning rested on the misissuance
threat model and does not carry over unchanged to the undisclosed
CRQC attacker of S1, but it is a ready precedent. Exploitation is
bounded by the 7-day ticket cap in RFC 8446 S4.6.1. This is not a
harvest-now, decrypt-later attack and I am not claiming it is. The
specification gap stands on its own, independent of any attacker.
2. The withdrawal path lacks the condition its own rule 1 has. [2]
S3.6 rule 1 conditions caching on "after the handshake completes
successfully". Rule 2 conditions clearing only on receiving the
extension. The suggested fix is one clause, copied from rule 1.
Two things to be clear about. First, the condition is not new:
RFC 6797 S8.1 has gated all HSTS state change, including the
max-age=0 removal, on a clean secure transport since 2012, and
RFC 7469 S2.3.1 does the same for pin deletion. Since S1 says this
extension is modelled on HSTS, the honest description is that the
normative text did not restate a condition the stated model already
has. Second, the reference implementation already does the right
thing: it defers both the cache update and the cache delete to
SSL_CB_HANDSHAKE_DONE behind an X509_V_OK check, and says why in a
source comment. So there is no exploitable instance that I know of.
My concern is only that none of that appears in the normative text,
and a second implementer reading rule 2 literally would be conformant
without it. S4 of the draft already says the intended thing
non-normatively ("until they observe zero on a completed handshake"),
which is why I think this is editorial rather than a design change.
3. A question about the port in the cache key. [3]
S3.4 keys entries by (RFC 9525 identity, port, TLS/DTLS) and says
entries differing in any of these MUST NOT be merged, while the
server's obligation in S3.7 carries no port qualifier and the
reference identity is port-independent. So the client enforces
something narrower than the server has committed to. I am asking
rather than asserting: I do not think this is a bypass, since under
S3.4 no commitment is in force for the key that gets used, but I also
do not think it is the trust-on-first-use case S5.1 documents, since
S5.1's own justification depends on the client eventually connecting
directly, which never happens for a port it never uses. Related: S1
invokes HSTS, but RFC 6797 S8.3 says "the HSTS Policy applies to HTTP
over any TCP port of an HSTS Host", so the scoping differs from the
named model. That may be deliberate for DTLS and non-web use. If so
it would be worth saying.
Martin's IETF-126 comments on this cache key not working for
browsers, and on non-uniform multi-CDN deployment, are in the same
area. I am not claiming new ground there, only asking about the port
dimension specifically.
4. "The port" is not defined. [4]
S3.4 does not say whether "the port" is the authority port from the
URI or the TCP port actually connected to. These differ under an
HTTPS RR carrying a port SvcParam, where per RFC 9460 S9.1 the origin
does not change. The two readings give opposite answers about whether
a cached commitment applies, and that decides whether the scope
question in (3) is reachable at all. Two sentences would fix it.
None of this touches issue #23. I have Tamarin models behind (1) and
(2) and am happy to share them, with the caveat that they are models of
the S3.2, S3.5 and S3.6 client state machine, not security proofs of
TLS 1.3. The OpenSSL result behind (1) is the stronger evidence.
Thanks for the draft. Rule 3 of S3.6 and the S4 text made the first two
of these much easier to pin down than they would otherwise have been.
Nazmus Salehin Sammo
Melbourne Institute of Technology, Melbourne, Australia
Student ID: MIT252100
MIT252100@stud.mit.edu.au
[1] https://github.com/yaronf/draft-sheffer-tls-pqc-continuity/issues/29
[2] https://github.com/yaronf/draft-sheffer-tls-pqc-continuity/issues/27
[3] https://github.com/yaronf/draft-sheffer-tls-pqc-continuity/issues/28
[4] https://github.com/yaronf/draft-sheffer-tls-pqc-continuity/issues/26
- [TLS] draft-sheffer-tls-pqc-continuity-02: four c… Nazmus Salehin Sammo
- [TLS] Re: draft-sheffer-tls-pqc-continuity-02: fo… Yaron Sheffer