[TLS] Re: draft-sheffer-tls-pqc-continuity-02: four comments on the client cache rules

Yaron Sheffer <yaronf.ietf@gmail.com> Mon, 03 August 2026 19:26 UTC

Return-Path: <yaronf.ietf@gmail.com>
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 B3CC0122EADB8 for <tls@mail2.ietf.org>; Mon, 3 Aug 2026 12:26:45 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1785785205; bh=UfT/MEZHK7Mum/Kl9clb61c+ehQna9q5Kldea6TUcxw=; h=Date:Subject:To:References:From:In-Reply-To; b=ePjVxluQwaUrilbTyQ63yqHx9HtsatHOjJWUo4l7+tLw66Y67iz/IUxt4lsffuj9P BN2YSXVxa3Mu647dNSCyGUx3rap9lYJGEFlbz34y5voZ3HGkjaKMU1mTWUfTswexRw b7ZeqKlTrJaN2W9kSBcL/Q3X4IKDJNr/VYzDtx0I=
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -1.998
X-Spam-Level:
X-Spam-Status: No, score=-1.998 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, MIME_HTML_ONLY=0.1, 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=gmail.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 4MyqPrG-qQeX for <tls@mail2.ietf.org>; Mon, 3 Aug 2026 12:26:45 -0700 (PDT)
Received: from mail-wr1-x432.google.com (mail-wr1-x432.google.com [IPv6:2a00:1450:4864:20::432]) (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 05958122EADB3 for <tls@ietf.org>; Mon, 3 Aug 2026 12:26:45 -0700 (PDT)
Received: by mail-wr1-x432.google.com with SMTP id ffacd0b85a97d-47f7872abb6so2289063f8f.3 for <tls@ietf.org>; Mon, 03 Aug 2026 12:26:44 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785785204; x=1786390004; darn=ietf.org; h=content-transfer-encoding:content-type:in-reply-to:from :content-language:references:to:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to:content-type; bh=2YrzaEvmmgr7HBa5fKhAei19JiLupNMdlOBfjFCu2GU=; b=LRCkT/0t9sIkJSnlW8o2EKJiqzl0ZEjzgekwXIecEGiuGS6sg03cHZ8vsG0oEFgCyW Tc9RZHFiKc/RZNhqPHwQ/T1URHus53SvqukU4z/1j1A0aKBCiGCKFBPiP+25Y944HBwH mQ89yXixlnqrMyE8PIkmKOPbyOZLvnHN+nHwRrv86FLc+cujyLGvnSFqJoCqB8NQB6LS jD8HiGz+w+hce4Vjuwcevg2OU7Jf2fs9/F6QXrb0rKTGBB9k1FdljxP3RDZXR06268v8 +I1bYtPEvvjMFovxeyGCEgM3FjL05Xyi8RAWJ0w+zBLNYBMASJOZpkMFpfvzvZgv7m2v iLaw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785785204; x=1786390004; h=content-transfer-encoding:content-type:in-reply-to:from :content-language:references:to:subject:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=2YrzaEvmmgr7HBa5fKhAei19JiLupNMdlOBfjFCu2GU=; b=jTumlazxyxIz4A9jvlf3tbZ/u0K76UZtFvwckcsXwghPorZJVac1Sb5QA/vJVImCFi G2jPN1jDhk5nTEbpWbrYjvu4J+QomURXIiADN73hJDVgF6gO61AUugz8vFKJ7hrpx202 PcYQ9dZKI9peyt4QmO/NdddGsaSn6atXtEQqFNaRiIiy8Js/zs6z6pnHzVicvjLEDvSM QIu3HO6vqMraSBlMSuidf2SEY5G80g3u2UHtXyp42v/negDI1ntQlLT1HXJ4AAkuzigy WvupWUx1vlMRjL1pS84lGYwwXMPpMLWHUf6T3wHw3Ht1DxL7g/5ogldig/9oK/ZeqnVt jt8w==
X-Forwarded-Encrypted: i=1; AHgh+RoPFBc4v9wTgWEZZZp00xq6aIqQDmkVOgjUbDhbSingq7s192pbIdpm842QEv51KBxHZ4I=@ietf.org
X-Gm-Message-State: AOJu0YzDuHQga17RJf5OQdrEc+CeeRxQOWLyxTEnS5UuIR61mv4RGtYO nEwi//9i/scguaa4zzq4rdMpisyfZDeKo2pbJLtNNC0UU3kTgVHLfsOYk+hthD0Fio8=
X-Gm-Gg: AR+sD11tLe3dEuf9DSep1MxUlXow+icYk4GL7ITYRMJ76bloI7KTKti4ZrySIGwau8E rRCXxMR4JzBAYkyupsgGOpeelSD+jh7x6LlGCaz18UO9RBzzgfpGRA2aoBH6yTET6y2vW53L/Il e/RxRtP+Xw27jVuomtAyTiGTs0e7qydKZ3Nf/9Rbyk2JtaK4Ou0YtgB82IovxiP+uGZzQD1EUzV 3xICGbayB+x6xtqVZPPj4p5jhg4GUiU4efVKSb5z+0dGzhLj2aezJkey1Q5xCpUtXP1fGaUxmRd MuTV7SZvN1zqkiQcg2zBXOMPrpjLlLJ9JeIinRcVruEY6bVnUnQGb5uhTDtKjhiMnC/KdkSafca 9Bh5f7drhLonV3kzcsoRVb6swqrQoj6ec8xNXhQVJWkQ5jpj1X9ah0QzTXByGTTCEnCZRSSBW6G TOS7k0Ya97kTMPg1lo43+EKbVc1smBM4HYkB1FW+yuDnQnTARCx4/cfIbEI3yfVPbpHv7ZhWTIe QIFEX4ODJ4rBZLb603lNqDnf6KCOltZfMF2poXE2J9z1hNt8Q2INiEZ
X-Received: by 2002:a05:6000:1acf:b0:47f:73fb:daa1 with SMTP id ffacd0b85a97d-47fd72b5179mr26826141f8f.19.1785785203774; Mon, 03 Aug 2026 12:26:43 -0700 (PDT)
Received: from [192.168.68.100] (IGLD-84-229-147-168.inter.net.il. [84.229.147.168]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47fd458bf7csm36997205f8f.32.2026.08.03.12.26.42 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 03 Aug 2026 12:26:43 -0700 (PDT)
Message-ID: <591819d7-3b4b-4ee6-bead-c1632db801c4@gmail.com>
Date: Mon, 03 Aug 2026 22:26:41 +0300
MIME-Version: 1.0
User-Agent: Betterbird (Windows)
To: Nazmus Salehin Sammo <mit252100@stud.mit.edu.au>, "tls@ietf.org" <tls@ietf.org>
References: <SEZPR02MB7994150469B3D1468943F4C7A1D62@SEZPR02MB7994.apcprd02.prod.outlook.com>
Content-Language: en-US
From: Yaron Sheffer <yaronf.ietf@gmail.com>
In-Reply-To: <SEZPR02MB7994150469B3D1468943F4C7A1D62@SEZPR02MB7994.apcprd02.prod.outlook.com>
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: 8bit
Message-ID-Hash: WM5F2RVMNF3ZG62BBAX2EIU5Y2YCC4HE
X-Message-ID-Hash: WM5F2RVMNF3ZG62BBAX2EIU5Y2YCC4HE
X-MailFrom: yaronf.ietf@gmail.com
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; header-match-tls.ietf.org-4; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [TLS] Re: 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/tlyn2fThgbnq7ROrBi-K8pqavII>
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>

Hi Nazmus,


Thank you for your review and the issues you submitted. We will review and address them shortly.


Best,

    Yaron


On 02/08/2026 7:43, Nazmus Salehin Sammo wrote:
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


_______________________________________________
TLS mailing list -- tls@ietf.org
To unsubscribe send an email to tls-leave@ietf.org