[TLS] Re: Ambiguity of TLS Certificate Compression (RFC 8879)

Muhammad Usama Sardar <muhammad_usama.sardar@tu-dresden.de> Wed, 11 February 2026 14:15 UTC

Return-Path: <muhammad_usama.sardar@tu-dresden.de>
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 72CF9B56CD6E for <tls@mail2.ietf.org>; Wed, 11 Feb 2026 06:15:25 -0800 (PST)
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -4.397
X-Spam-Level:
X-Spam-Status: No, score=-4.397 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, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=unavailable autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (2048-bit key) header.d=tu-dresden.de
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 imb6STxwF3ki for <tls@mail2.ietf.org>; Wed, 11 Feb 2026 06:15:23 -0800 (PST)
Received: from mailout4.zih.tu-dresden.de (mailout4.zih.tu-dresden.de [141.30.67.75]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature ECDSA (P-256) server-digest SHA256) (No client certificate requested) by mail2.ietf.org (Postfix) with ESMTPS id 99E8EB56CD55 for <tls@ietf.org>; Wed, 11 Feb 2026 06:15:23 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tu-dresden.de; s=dkim2022; h=Content-Type:In-Reply-To:From:References:CC:To :Subject:MIME-Version:Date:Message-ID:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=ad0d4c/mUMI/OQq5wRHSiPfxyg+6rLhHY5CvbO//ifo=; b=TpYBvZ6r/E6wev12g8Uqx94cfv al9ri2GphwCzPeNG2keYsFDvtv3JXEgkGmoTDJXYsDArY/vrtzZPTi2iVyJLPAoo6V28nB8aEVfiD omPcxX8g2G9I1NgBRcRqLdf4COlLYXOv7j3J9I1sPUvIX/kEq4qaOywpOHSkMMz1dr2KN2kE5OLdH 0tZlLZa06CdW93byPKT05oD0ydqxIWwYDit536IbXGSxQTzSQ17qQJirtltHWZSQkXLh+pz4MVIz3 vYsU9J3NBuxomfnRIxx1xK0OAyjKE9p2bxokWr/KMqCvlMgvWNi7k91Cu+398WKwU1MjCeJ2pwE5M SLWxbQ0w==;
Received: from msx-t422.msx.ad.zih.tu-dresden.de ([172.26.35.139] helo=msx.tu-dresden.de) by mailout4.zih.tu-dresden.de with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from <muhammad_usama.sardar@tu-dresden.de>) id 1vqAzx-0005Y0-R7; Wed, 11 Feb 2026 15:15:22 +0100
Received: from [192.168.178.60] (141.76.13.165) by msx-t422.msx.ad.zih.tu-dresden.de (172.26.35.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.35; Wed, 11 Feb 2026 15:15:13 +0100
Message-ID: <c70a361c-153c-41ee-828c-b4e74b415c37@tu-dresden.de>
Date: Wed, 11 Feb 2026 15:15:12 +0100
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
To: David Benjamin <davidben@chromium.org>
References: <20260130.124640.484427558490648192.kazu@iij.ad.jp> <aYLj37WY/VbA5rkq@ubby> <CAF8qwaAfAs=tMABHs30M+FFdvkWQko3nV4RTA-kMeAOfZ5hxyQ@mail.gmail.com>
Content-Language: en-US
From: Muhammad Usama Sardar <muhammad_usama.sardar@tu-dresden.de>
In-Reply-To: <CAF8qwaAfAs=tMABHs30M+FFdvkWQko3nV4RTA-kMeAOfZ5hxyQ@mail.gmail.com>
Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg="sha-512"; boundary="------------ms020503030003010900080601"
X-ClientProxiedBy: MSX-T416.msx.ad.zih.tu-dresden.de (172.26.35.136) To msx-t422.msx.ad.zih.tu-dresden.de (172.26.35.139)
X-TUD-Virus-Scanned: mailout4.zih.tu-dresden.de
Message-ID-Hash: 3U5KTFRKPZWC4X4E3KPGNRCSO3BCYKD6
X-Message-ID-Hash: 3U5KTFRKPZWC4X4E3KPGNRCSO3BCYKD6
X-MailFrom: muhammad_usama.sardar@tu-dresden.de
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-tls.ietf.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
CC: "Kazu Yamamoto (山本和彦)" <kazu=40iij.ad.jp@dmarc.ietf.org>, tls@ietf.org
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [TLS] Re: Ambiguity of TLS Certificate Compression (RFC 8879)
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/eJ98i6lUUv97tLoCLa2JXo9PP2Y>
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>

In formal model, I always take what is actually sent/received by the 
endpoints. I suspect additional lemmas will be required for the proofs 
if it is not the case.

 From a formal analysis perspective, by now, I had all three cases you 
mention, i.e.:

  * Extensions to existing messages
  * Modification of existing messages
  * Addition of new messages

On 11.02.26 03:18, David Benjamin wrote:
> Like many extensions, RFC 8879 changes the messages that are sent over 
> the handshake stream, both in contents (new extensions added to 
> ClientHello and CertificateRequest)
I like to think of those as extensions to existing messages.
> and in type (CompressedCertificate is sent instead of Certificate).
I like to think of those as modification of existing messages.
> While it is rare that we change the message types, it's not unheard 
> of. For example, RFC 6066 introduced the CertificateStatus message.
I like to think of those as addition of new message. In this case, RFC 
6066 is for TLS 1.2. I don't directly see how this is necessarily 
relevant for RFC8446bis. Is there any RFC where a new message was added 
to TLS 1.3 handshake?
> When that happens, such changes are reflected in the handshake transcript.
Could you clarify what exactly "that" refers to: the last one (new 
message) or all three above?
> Indeed some handle the transcript automatically under the handshake 
> layer and would /only/ be able to implement this version.
I don't quite get that "/only/". Whatever layer it is implemented, it is 
still software which -- in principle -- can be changed (hardware can be 
changed, too but a bit more costly). This may need some work to 
re-architecture (just like you were able to) but I don't think the 
reasoning is that they are /not able/ to implement the other version.
> Ours used to be like that.
Just to be sure, did you mean BoringSSL?
> And it happens that other TLS handshake mechanisms interact with the 
> result of that decompression as if they saw a vanilla Certificate 
> message, but that's all within the handshake proper and about the 
> handshake stream that we transcribe.
I couldn't follow what you are trying to say here. In particular, what 
is /vanilla Certificate message/? Neither RFC8446bis nor RFC8879 
specifies/uses it. Where can I find its specification?
> But then the problem is the transcript in RFC 8446 is not actually 
> defined in terms of what's actually sent/received over the handshake 
> stream. It is defined in reference to particular messages, albeit with 
> some "..."s in between. It also says this:
>
>    For concreteness, the transcript hash is always taken from the
>    following sequence of handshake messages, starting at the first
>    ClientHello and including only those messages that were sent:
>    ClientHello, HelloRetryRequest, ClientHello, ServerHello,
>    EncryptedExtensions, server CertificateRequest, server Certificate,
>    server CertificateVerify, server Finished, EndOfEarlyData, client
>    Certificate, client CertificateVerify, client Finished.
>
> https://www.rfc-editor.org/rfc/rfc8446#section-4.4.1:~:text=For%20concreteness%2C%20the,CertificateVerify%2C%20client%20Finished.
>
> Taken literally, this text would suggest that, if an extension adds or 
> modifies handshake messages, it's not reflected in the transcript, 
> unless it says otherwise.
If you "take literally", I couldn't follow how you came to conclusion 
"unless it says otherwise", specially given that the quoted text says 
"*always*", independent of whatever the extensions define.
> That's not what we want, both by how real implementations work, or by 
> the security goals of the transcript.
I can't say anything for real implementations but agree for security 
goals from a formal analysis perspective.
> But in TLS we're sloppy enough about messages with and without the 
> header that it's worth being explicit.

Do the headers contain any security-relevant information? If not, isn't 
it intentionally just left over as an implementation choice, rather than 
being sloppy?

-Usama