[Ssh] Re: Supporting pure ML-DSA as hostkey and authkey

Damien Miller <djm@mindrot.org> Wed, 29 April 2026 16:20 UTC

Return-Path: <djm@mindrot.org>
X-Original-To: ssh@mail2.ietf.org
Delivered-To: ssh@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id 575BCE5C9CF6 for <ssh@mail2.ietf.org>; Wed, 29 Apr 2026 09:20:31 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1777479631; bh=HBkY2bMpEVctHmBEvti3EDlodlZzoVrPNwRpJuOZW3o=; h=Date:From:To:cc:Subject:In-Reply-To:References; b=wa5BCPooFzJnnLOev6/yIlxH1coWdYHF4tQ8/5UtsKF6/1my7nHBqtE9JK7WeyRyf 7KSB52b/5F+JGj9E8brICZzSqAsxtOIAxtKMpI4IV17eRjyujv4KIG4/rB/BfOkC1L Iu9glbNnvBX6Zes8ODRMzfJ1JsFcaWm05cBZ/jvw=
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -1.898
X-Spam-Level:
X-Spam-Status: No, score=-1.898 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
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 2kl9ixNF_ilH for <ssh@mail2.ietf.org>; Wed, 29 Apr 2026 09:20:29 -0700 (PDT)
Received: from train.compute.dc.uq.edu.au (train.compute.dc.uq.edu.au [130.102.189.35]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail2.ietf.org (Postfix) with ESMTPS id A772DE5C94D7 for <SSH@ietf.org>; Wed, 29 Apr 2026 09:16:45 -0700 (PDT)
Received: from smtp2.compute.dc.uq.edu.au (smtp2.compute.dc.uq.edu.au [10.208.138.89]) by train.compute.dc.uq.edu.au (8.14.5/8.14.5) with ESMTP id 63TGGVh5038182; Thu, 30 Apr 2026 02:16:31 +1000
Received: from mailhub.eait.uq.edu.au (holly.eait.uq.edu.au [130.102.79.58]) by smtp2.compute.dc.uq.edu.au (8.14.5/8.14.5) with ESMTP id 63TGGVQs031086 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 30 Apr 2026 02:16:31 +1000
Received: from haru.mindrot.org (haru.mindrot.org [130.102.96.5]) by mailhub.eait.uq.edu.au (8.15.1/8.15.1) with ESMTPS id 63TGGV76029114 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 30 Apr 2026 02:16:31 +1000 (AEST)
Received: from localhost (localhost [127.0.0.1]) by haru.mindrot.org (OpenSMTPD) with ESMTP id 83c39ccc; Thu, 30 Apr 2026 02:16:30 +1000 (AEST)
Date: Thu, 30 Apr 2026 02:16:30 +1000
From: Damien Miller <djm@mindrot.org>
To: Filippo Valsorda <filippo@ml.filippo.io>
In-Reply-To: <ba9669a6-65a6-4276-8306-bd55ef0d146f@app.fastmail.com>
Message-ID: <534410e1-5a26-f610-ba68-1f0595ab7a64@mindrot.org>
References: <68bc138c-ccfc-2d97-0f25-64271655c23b@mindrot.org> <CACsn0ckzxMZRN6MxmkUjByzzgbgJdH3eRxVT1dA37TYQHeUq2Q%mail.gmail.com@mailhub.eait.uq.edu.au> <461a8358-8bd8-4f45-f8f3-073f993fb18f@mindrot.org> <ba9669a6-65a6-4276-8306-bd55ef0d146f@app.fastmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="US-ASCII"
x-ms-reactions: disallow
X-Scanned-By: MIMEDefang 2.75 on 130.102.79.58
Message-ID-Hash: Q456TWKLZVCT4UVXFIJN47T5N2ROLLUR
X-Message-ID-Hash: Q456TWKLZVCT4UVXFIJN47T5N2ROLLUR
X-MailFrom: djm@mindrot.org
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: Watson Ladd <watsonbladd@gmail.com>, "ssh@ietf.org" <SSH@ietf.org>, Nicola Murino <nicola.murino@gmail.com>
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [Ssh] Re: Supporting pure ML-DSA as hostkey and authkey
List-Id: "The SSH mail list will allow discussions on improving aspects of the Secure Shell (SSH) protocol." <ssh.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/ssh/XuWk99LRJPv7sR2TNPxZ-l_cWpM>
List-Archive: <https://mailarchive.ietf.org/arch/browse/ssh>
List-Help: <mailto:ssh-request@ietf.org?subject=help>
List-Owner: <mailto:ssh-owner@ietf.org>
List-Post: <mailto:ssh@ietf.org>
List-Subscribe: <mailto:ssh-join@ietf.org>
List-Unsubscribe: <mailto:ssh-leave@ietf.org>

On Wed, 29 Apr 2026, Filippo Valsorda wrote:

> >From the point of view of Go, we'd strongly prefer to implement pure ML-DSA,
> specifically because of the increased urgency.
> 
>  1. If the CRQC are coming sooner than expected, the hypothetical value of
>     the ECC component is obviously shorter-lived.

Currently we have a notion that CQRCs might arrive sooner. This has
caused many people to be given actual mandates to move to PQC on a
compressed timeline.

The CQRC may or may not happen sooner than expected but the mandates
will force transition faster than the original timeline regardless.

The argument for doing pure signatures whe we did not have the
confidence to do pure KEMs was that we'd get more time with them before
we had to migrate. This seems to no longer be the case.

>  2. Picking and specifying a composite will take longer, as proven by the
>     failure of every other ecosystem to pick and deploy a composite so far.

Well, as I said previously, we have ietf-lamps-pq-composite-sigs, which
seems to have "won" the construction fight. We need only pick the
algorithms to plug into it.

>  4. Composites, unlike hybrid ephemeral key exchange, add complexity across
>     the stack, as I have argued on the TLS WG mailing list:
> 
>     https://mailarchive.ietf.org/arch/msg/tls/oh3jmmkHzHdp1hk4R4M9QjkmvBk/

You make two points there, 1) that they leak across the whole stack and
2) that they make the already complex X.509 authentication even more
complex.

#2 does not apply to SSH and I don't think #1 universally does either.
Please take a look at my test implementation of ML-DSA65/Ed25519. There
is zero leakage of the compositeness of the key beyond the single file
that implements the composite primitive.

>     I know some folks hold on to the idea that composites will be "just
>     another key type" but that's wishful at best, especially in the context
>     of SSH, which is not tightly integrated with the cryptography library.
>
>     public/private key type in that package, we'll not be able to return it
>     from ParsePKCS8PrivateKey in crypto/x509, because the latter is in the
>     standard library. That's just an example of how composites leak through
>     API layers.

I don't follow here. ietf-lamps-pq-composite-sigs defines a PKCS8
encoding. It can absolutely be just another key type there.

> If we do absolutely need to implement composites:
> 
>  1. We will categorically implement at most one combination, ever.

That's my preference too.

>  2. The ECC side should at least be useful for hardware binding.
> 
>     There is one benefit to hybrids, and it's using hardware keys that
>     provide protections like limited PIN retries and per-signature user
>     intent (i.e. touching the YubiKey). We don't have yet widely available
>     ML-DSA hardware, so it might make sense for tools like
>     https://github.com/FiloSottile/yubikey-agent to do software / hardware
>     hybrids (which by the way breaks the "composites are just an opaque
>     key type" illusion).
> 
>     That means using ECDSA P-256.

This seems directly contradictory with your opening point - if
you're arguing against hybrid constructions on the basis that
their classical component will be broken soon, then there is no
reason to demand their use when implemented in hardware.

I'll also observe that there are many hardware devices that support
Ed25519. It's specified for both FIDO and PKCS#11 and indeed OpenSSH
supports it for both of them.

>  3. The only PQ parameters that make sense to us are ML-DSA-44 and -87.
> 
>     If we are making a risk- and security-based analysis, ML-DSA-44 is
>     perfectly fine. Unlike ML-KEM-512, which was... hotly debated, leading
>     to the selection of ML-KEM-768 for hybrids, ML-DSA-44 is Category 2,
>     so it already has a healthy margin for small improvements in lattice
>     cryptanalysis. There is no reason to think large improvements would
>     leave any parameter set standing.
> 
>     If we are making a bigger-is-better or compliance-based analysis, then
>     the obvious answer is ML-DSA-87, which is the only one allowed by
>     CNSA 2.0, and is... bigger! (Both the bigger-is-better and compliance
>     arguments are weaker when selecting a hybrid, because the hybrid is
>     already supposed to provide additional margin, and because CNSA 2.0
>     actually has a preference against hybrids, so ML-DSA-87 makes more
>     sense as a pure parameter set.)
> 
>     I see no logical argument for selecting ML-DSA-65.

I'm happy to take feedback on which ML-DSA variant to adopt in a
composite construction. In particular, ML-DSA 44 for the composite and
ML-DSA 87 for pure is a future I could envisage.

-d