[Plants] Re: Higher forgery resistance almost for free?

David Benjamin <davidben@chromium.org> Fri, 11 September 2026 18:44 UTC

Return-Path: <davidben@google.com>
X-Original-To: plants@mail2.ietf.org
Delivered-To: plants@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id 18623139292DD for <plants@mail2.ietf.org>; Fri, 11 Sep 2026 11:44:53 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1789152293; bh=cUBajcDg6JPBDjLHipTAzKtntWc3Ke5SS5DDVqyGDiQ=; h=References:In-Reply-To:From:Date:Subject:To:Cc; b=dbdR6b2Y2zDpziH0Dj5vR1blwakNY5Ra2bQqOPvtj64mUw6JxW/oO5i9KUScUpPE1 8e8XHybPJy7iT4UtYgHwi31yufqeovmh2bl8UqBbMLGGf+RHVcXYpfs2aTWcvj1JpD nc/VePdhcUdalTYqV5GCmH7rfMRs8W+9L8S7nfHc=
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -9.489
X-Spam-Level:
X-Spam-Status: No, score=-9.489 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_KAM_HTML_FONT_INVALID=0.01, USER_IN_DEF_SPF_WL=-7.5] autolearn=unavailable autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (1024-bit key) header.d=chromium.org
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 Hp1zggyW70w2 for <plants@mail2.ietf.org>; Fri, 11 Sep 2026 11:44:52 -0700 (PDT)
Received: from mail-ed1-x52c.google.com (mail-ed1-x52c.google.com [IPv6:2a00:1450:4864:20::52c]) (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 0D16B139292C8 for <plants@ietf.org>; Fri, 11 Sep 2026 11:44:52 -0700 (PDT)
Received: by mail-ed1-x52c.google.com with SMTP id 4fb4d7f45d1cf-6a99776ff70so1938426a12.2 for <plants@ietf.org>; Fri, 11 Sep 2026 11:44:52 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1789152285; cv=none; d=google.com; s=arc-20260327; b=YbPr5Cmwo0CfyjDGsIjoFW0KGYKC0sVLBnICx7qb2Tbv7/pWUgSfl9L/T2hpZb/svx NOhz7go/2K9HgmzNZsW3wjbrNJ8GnbVitdD74tbfSuO9ZOSIZekhwA/cQbj3oBjLJwTe /F25tnrPFRW0qPUHui5sSXJjtZ90yA49krkns/PZ/5xkPcU3lWIt+bzAoOmqb/3CGR3x ptk8/vlZO9mGa7lVghpZrYOKE67AoTQYcMKi0846jyWDzZw6X/34CHN26YSyjibfgFlX Lo1DmIQr+hOR5poYHtRNr0vt8vMU9T6/8xcaYxOCjedLUwPMgrmVLxcNhXKVcTBbpNH8 J/MA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=sE+By1Pzr8pQc3YsnkghSjtKx36vXxk7Rh3kSL7peLs=; fh=vrMJAx2wXHGjZgZ5mS9Q8v2Bf0hZewXMmveWTFfb9wo=; b=IYuiE4taAWDdv+MKrh2J7VOkyiAlpZfc2s9Se/esiwF5LqZEkg96aJAjPaYBKvoohG jlH8IfIYsSsWTr7aQRCZjr8JkdatHMDnOv7nag0zFzABKuQ1wrx51lXz1vIUD5WOrLYj 4jCctqBgj3aNPDxMCnRkVPqSkhWMBIPXV3TmG0oNU0YCThLvLKrAT8BEDy4l6ZpieWEv BcbEDB8TCCE3spCA/HbpaG3eITEa/A3lSWDSjh/9IJlXlIJaScUOvYRm3mLAqEJxaN4v Q+nfpCV3rxo+yH6YOPcAHQpRKUKqtvBd9FYzBuFKY1p6Wr8ei/PTUav6XJBar8chUVhL jqvA==; darn=ietf.org
ARC-Authentication-Results: i=1; mx.google.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1789152285; x=1789757085; darn=ietf.org; h=content-type:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:from:to:cc:subject:date:message-id:reply-to :content-type; bh=sE+By1Pzr8pQc3YsnkghSjtKx36vXxk7Rh3kSL7peLs=; b=PSyMfojMrCYOBcnBddF2e0XT/eRl1hhQob78Wu/WjZ49Dua+tqyp+yg+MHjRXI4BJp Uxk/tOo+hZU9KWzpdARnXJexOQ92wkxIEnAjiTsM/TZuXX56NVQgZlTxzMAbDjTsiIYN mrwvGDqDrMplLbBoaAihJWZWlpzDjBdCm6uGc=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1789152285; x=1789757085; h=content-type:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to:content-type; bh=sE+By1Pzr8pQc3YsnkghSjtKx36vXxk7Rh3kSL7peLs=; b=lFzmkUpcwoerG8PREt+MxRnErrYSrRujuqmjt+DmU1wsoQH8uattK9L8Gb5yJvBAf6 nFOGAbpJxwNMvYGQ7EQldBdfGs5+vQ/XSx7HeI8bC/SKH3LNuJk33zyBBYvjn0uqNvmu eCYfwrltR6g9SYT00N99vEqBFEYvfU7iGKCHyYpQpk9abFJHMJ/bH64dtDFFSRmMV3RC JNlXmNefjGfkdX17Rbu4ycRUUpxj2apcsON8MmQzlgCxIwdL/sOuQfVowiGbtZszbSwL SBv1M1d3shYYKt2UNOIaCZXA3r3GqODSiWEvDi2dVYf7ehqU5+GILGWOV60TJgtwJMae 7V9Q==
X-Forwarded-Encrypted: i=1; AKwUvBwuhwJ6OoPcEifs2O/zDQiP/FXYHwunnUTRmb4ASC5Zvl74w9vGr7wbH5KwFW7ghexRok2NEtY=@ietf.org
X-Gm-Message-State: AFuF++mFaLyRkrAR7lKG1LSkUlzUn+/KYzBD9/wYCk0KJXYnMB64NvL0 aEltLKjsXctxMW7i5l2EL1TBLdLbj+KOoHvq/jBM/h5re/MTwH/fLQKb3xRkdeGftwgrsTJI7Fs /9VBzO9zT4usCxb4ZEHVj/MCpzsrFPSFre4LWJlg=
X-Gm-Gg: AYBFou0TDHxIccIn1L5I2bN4jStXw2in5QrYxNk7w7sqnEgvLfaBJ6nDkivNbsYP3om bOSvcxQgSUvBGrQ3mFnyxwLNYQq8+DnQf+5sgjOHgk/zHa8JtT97Q48L2aGQe7J8z9xuJMPk8Hd GcnIAbXBxXjRz3A3YCwFQWAUyYQhHYkq7STllo2wnN9fRrZmdBaFZDih+Glcjc0OOUFWRb8fHUG MAhsnFmp4DAnkKNj6qmmIMuo340gN9WbGLFOSACRCJvENDR/J7F+QElwdag3739tdK1y/nwOI0H FKdBpJgakZ7JSwiisz7B7UkLD2TrQh7I+faB2OpNB2ggBUnkKVXeFe2ibO71mvk5bTieDBg1dO8 +FcZPqvE31DsWE/nUmXnWVEpSDLhscQNwrmXjJOTVZHuomAghLHPp
X-Received: by 2002:a05:6402:538c:b0:6a6:2419:8539 with SMTP id 4fb4d7f45d1cf-6a9b5659d43mr2506988a12.16.1789152284515; Fri, 11 Sep 2026 11:44:44 -0700 (PDT)
MIME-Version: 1.0
References: <CAMjbhoV1d6Ayfei=GaG8NnFTcWUq8sZ-u5oCM8xp2wXAQRQdbw@mail.gmail.com> <PH3PPFA3FE8A23FBA824621E615DA42D2B0C157A@PH3PPFA3FE8A23F.namprd11.prod.outlook.com> <CAMjbhoVdtvNYUA_Ucdv-R+6f+y7Sr63RnFG5B==i4oVMp7LHug@mail.gmail.com> <SA1PR09MB115140CADC2AF6ECC38652AC485BE2@SA1PR09MB11514.namprd09.prod.outlook.com> <CAF8qwaC6B6q3K7Us3P8N8KzuKem5o-BO2fgR2A2+b+La5jPXgA@mail.gmail.com>
In-Reply-To: <CAF8qwaC6B6q3K7Us3P8N8KzuKem5o-BO2fgR2A2+b+La5jPXgA@mail.gmail.com>
From: David Benjamin <davidben@chromium.org>
Date: Fri, 11 Sep 2026 14:44:27 -0400
X-Gm-Features: AcwNN1XugfUKNB_UxBrd7lTxZh-sCL0Y3VQLJExQIAXLl9dGdrZMJTYH6HuYeG0
Message-ID: <CAF8qwaBhwUh5CPT4eiTyvYKA9eHrLSv=oaNX=CC6vc9Qvsi9iQ@mail.gmail.com>
To: "cwwynn@uwe.nsa.gov" <cwwynn=40uwe.nsa.gov@dmarc.ietf.org>
Content-Type: multipart/alternative; boundary="0000000000005fa5d3065b397a59"
Message-ID-Hash: 2EG3ZRLVK62KXK6AM66IOP7FRCOTPEPI
X-Message-ID-Hash: 2EG3ZRLVK62KXK6AM66IOP7FRCOTPEPI
X-MailFrom: davidben@google.com
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
CC: Bas Westerbaan <bas=40cloudflare.com@dmarc.ietf.org>, "Scott Fluhrer (sfluhrer)" <sfluhrer=40cisco.com@dmarc.ietf.org>, "plants@ietf.org" <plants@ietf.org>
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [Plants] Re: Higher forgery resistance almost for free?
List-Id: "PKI, Logs, And Tree Signatures" <plants.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/plants/NBs0oFc9N5kNKjE3chpx0dUbU_4>
List-Archive: <https://mailarchive.ietf.org/arch/browse/plants>
List-Help: <mailto:plants-request@ietf.org?subject=help>
List-Owner: <mailto:plants-owner@ietf.org>
List-Post: <mailto:plants@ietf.org>
List-Subscribe: <mailto:plants-join@ietf.org>
List-Unsubscribe: <mailto:plants-leave@ietf.org>

On Fri, Sep 11, 2026 at 1:03 PM David Benjamin <davidben@chromium.org>
wrote:

> Hi Casey! This is really great feedback, thanks!
>
> For specifically the first deployments in the Web PKI (where we care about
> having a network of cosigners), I think it's important to define a mode
> that is compatible with RFC 6962 and tlog (i.e. SHA-256, no indices in the
> various hashes), so that we can reuse the wealth of existing software built
> around this tree construction. This is particularly important given the
> tight timelines for the PQ transition.
>
> But that's not to say that should be the only tree construction. The core
> ideas of MTCs would work just fine with SHA-384, SHA-384 truncated, more
> involved HashNode functions, etc. And the nice thing about this space is
> that you can very naturally key everything on the CA, so this all reduces
> to how to juggle different CAs and how to define the parameters for each
> CA. Maybe a different MTC CA would look like you describe, or maybe even
> the Web PKI would eventually support both.
>
> For that, I think one immediate conclusion here is that the CA format
> below was not right. It assumed the tree would *only* be parameterized by
> the underlying hash function, and you've described a host of other things.
>
> https://www.ietf.org/archive/id/draft-ietf-plants-merkle-tree-certs-05.html#name-representing-certification-
>
> I think I'm now fully convinced we should make the change outlined here:
> https://github.com/ietf-plants-wg/merkle-tree-certs/issues/293
>
> In that model, the hash construction defined in the draft today would be
> signaled by the id-pe-mtcCertificationAuthority-SHA256 extension. But then
> another construction with perhaps a wider hash, perhaps indices
> incorporated into the node hashes, perhaps truncation of said wider hash,
> etc., might be id-pe-mtcCertificationAuthority-SHA384-Casey (insert better
> name here :-) ). I think this is a much better extensibility model. I can
> put together a PR for that so we have something concrete to look at there.
>

Done here. https://github.com/ietf-plants-wg/merkle-tree-certs/pull/315


> A minor note:
>
> >  It seems like a best practice to include the leaf indices when
> performing the internal hash and also add serialNumber to
> TBSCertificateLogEntry.  For example, the NIST hash-based signatures
> incorporate addresses when performing a hash.
>
> I think, operationally, it would make sense to put the addresses (and
> possibly the log ID?) into the hash and then *not* put the serialNumber
> in the TBSCertificateLogEntry. Once you have the leaf index and the log ID,
> all information in the serialNumber is already represented. The reason to
> omit the serialNumber is mostly a layering problem. If you imagine the CA's
> log component, it probably has some general operation like
> `AddEntry(entryData []byte)` that adds the entry as an opaque byte string.
> AddEntry might potentially need to sequence concurrent calls, etc., and so
> the caller of AddEntry may not actually know the leaf index ahead of time.
> But if the leaf index needs to be swizzled into entryData in some complex
> way, this means some layer *after* sequencing needs to be aware of the
> details of TBSCertificateLogEntry.
>
> And so I think the right way to do this would be, similar to the
> hash-based signatures, to define it as part of the various HashNode and
> HashLeaf functions and keep the entry contents opaque.
>
> On Fri, Sep 11, 2026 at 11:40 AM cwwynn@uwe.nsa.gov <cwwynn=
> 40uwe.nsa.gov@dmarc.ietf.org> wrote:
>
>> Hi all,
>>
>> I wanted to revisit the idea of incorporating leaf indices into hashing,
>> as previously mentioned by Scott.  There was only a bit of discussion at
>> the time, and I believe it's important to voice support for adding this
>> feature.  It seems like a best practice to include the leaf indices when
>> performing the internal hash and also add serialNumber to
>> TBSCertificateLogEntry.  For example, the NIST hash-based signatures
>> incorporate addresses when performing a hash.
>>
>> If used to protect data in NSS, we would recommend a MTC CA use one of
>> the (CNSA) SHA2 hash algorithms with a larger internal state (i.e. SHA-384
>> or SHA-512) possibly truncated when needed to maintain practical tree and
>> inclusion proof sizes while still mitigating the Antonov attack.  Adding
>> indices into the hashing process would further enhance security towards
>> multi-target second preimage resistance.  We would also prefer to use the
>> proposed CA-added 32 random bytes extension field.  One takeaway from the
>> Antonov attack was that SHA-256 often provides less security than presumed,
>> so it shouldn't be used with ML-DSA-87 keys.
>>
>> Best,
>> Casey
>>
>> ------------------------------
>> *From:* Bas Westerbaan <bas=40cloudflare.com@dmarc.ietf.org>
>> *Sent:* Friday, March 27, 2026 1:32 PM
>> *To:* Scott Fluhrer (sfluhrer) <sfluhrer=40cisco.com@dmarc.ietf.org>
>> *Cc:* Bas Westerbaan <bas=40cloudflare.com@dmarc.ietf.org>;
>> plants@ietf.org <plants@ietf.org>
>> *Subject:* [Plants] Re: Higher forgery resistance almost for free?
>>
>>
>>
>> By the way, I agree with the randomizer idea (and also don't forget to
>> include the Merkle tree position when you hash together two nodes - a cheap
>> way to prevent multitarget attacks).
>>
>>
>> An earlier draft did, but the current one doesn't as it's based on
>> plain rfc6962 CT-log trees. Indeed there is a multi-target attack there:
>> say, find some x such that H_internal(H_leaf(leaf), x) matches an existing
>> internal node. Then we can create a fake inclusion proof, of course
>> updating the claimed index appropriately. That's similarly in the 256 -
>> lg(number of certificates in tree) regime as the multi-target attack on the
>> SPKI hash.
>>
>> Some notes here:
>>
>> This would be a surprisingly short authentication path, and a verifier
>> could detect it. That doesn't help much: restricting ourselves to only
>> targeting the lower nodes just removes half the targets.
>>
>> Hashing the leaf index into the leaf would also prevent this. Still, the
>> other multi-target attack I mentioned still exists.
>>
>> Best,
>>
>>  Bas
>>
>>
>>
>>
>>
>> ------------------------------
>> *From:* Bas Westerbaan <bas=40cloudflare.com@dmarc.ietf.org>
>> *Sent:* Friday, March 27, 2026 12:10 PM
>> *To:* plants@ietf.org <plants@ietf.org>
>> *Subject:* [Plants] Higher forgery resistance almost for free?
>>
>> Hey all,
>>
>> For the certificate transparency use case we need to make sure that a
>> Certificate Authority can't issue a certificate without it being public. We
>> don't want the CA to able to issue two completely different certificates,
>> one harmless and one malicious at the same leaf. That requires
>> collision resistance of the hash. Hence we use SHA-256 to gain 128-bit of
>> transparency security.
>>
>> A 256-bit hash in Merkle trees can give much more than 128-bit forgery
>> resistance—256 bits even. This is well known: CNSA 2 is even happy with LMS
>> using SHA-256 truncated to 192 bits, which of course only achieves 192-bit
>> security.
>>
>> So MTC as-is has 256-bit forgery resistance? Not quite: we need to make
>> some changes, and there are some caveats.
>>
>> In the current draft, the leafs (TBSCertificateLogEntry) are mostly
>> predictable by an attacker. Thus with 128-bit work, an attacker can find a
>> collision: a harmless TBSCertificateLogEntry which it'll ask the CA to
>> issue which has the same hash as a nefarious TBSCertificateLogEntry. [1]
>>
>> The standard way to solve this is to make the leaf unpredictable to the
>> attacker, by including a CA-picked random value (randomizer) in each leaf.
>> [2] That'll boost the forgery resistance above 192 bits and well along to
>> 256-bits [3].
>>
>> The downside is that we need to add that 32-byte randomizer in each
>> certificate.
>>
>> Worth it?
>>
>> I would say so.
>>
>> Best,
>>
>>  Bas
>>
>>
>>
>>
>>
>> [1] There are some minor hurdles: it'll need to guess the serial number
>> correctly. And it'll need some immaterial field to vary to create attempts
>> for the colission. Oh, and of course 128-bit work, but we're suspending
>> disbelief for a moment.
>>
>> [2] Add 32-byte randomizer field in MerkleTreeCertEntry and MTCProof.
>>
>> [3] There is a multi-target attack against subjectPublicKeyInfoHash.
>> Suppose there are 2^30 leafs with the same algorithm in
>> subjectPublicKeyInfo. Then we only need to try 2^226 randomly generated
>> subjectPublicKeyInfos to find a second preimage with some leaf. The
>> standard way to thwart this is to add an *address* (leaf index) to the
>> hash. That's not ideal, as plain SHA-256(subjectPublicKeyInfo) is quite
>> standard now. The randomizer acts as an address for the leafs themselves.
>> There is still an issue though.
>>
>> Even with addresses, SHA-256 isn't "distinct-function multi-target
>> second-primage resistant" (DM-SPR) because it has a small internal state.
>> This allows for a clever multi-target attack negating the addresses by
>> finding successive colissions on the internal state, which was pointed out
>> by Antonov, and improved by Perlner, Kelsey, and Cooper. See section 3.3 of
>> ( https://eprint.iacr.org/2022/1061.pdf ). The attack requires room in
>> the message for the logarithmically many collision values after the
>> address. It'll depend on the algorithm whether that's feasable for the
>> subjectPublicKeyInfo, and we can remove that room by moving
>> subjectPublicKeyHash earlier in TBSCertificateLogEntry. The rigorous
>> solution is not to use SHA-256, but a hash that is DM-SPR, such as
>> SHAKE-256. But is that worth it? With a trillion certificates the attack is
>> still in the order of 217-bit work.
>>
>> _______________________________________________
>> Plants mailing list -- plants@ietf.org
>> To unsubscribe send an email to plants-leave@ietf.org
>>
>> _______________________________________________
>> Plants mailing list -- plants@ietf.org
>> To unsubscribe send an email to plants-leave@ietf.org
>>
>