Farbschema: Dunkel
Sie befinden sich hier: start » de » Dokumentation » Post-Quanten-Kryptografie » WKL.System.Security.Cryptography – Überblick » Fehlerbehebung » Der private ML-DSA-Schlüssel fehlt

Der private ML-DSA-Schlüssel fehlt

Ein Aufruf mit CryptoMode.Hybrid oder CryptoMode.PostQuantum wirft eine CryptographicException mit einer dieser Meldungen:

The ML-DSA private key of issuer 'CN=Muster GmbH Hybrid CA' is not available.
No ML-DSA private key is available for signer 'CN=Muster GmbH Buchhaltung'; Hybrid signing requires one.
A PQ export was requested, but no ML-DSA private key is available for any certificate.
No ML-DSA key pair is available for 'CN=www.example.com'; a PQ store operation needs one.

Oder GetAlternativePrivateMLDsaKey beziehungsweise GetPrivateMLDsaKey gibt null zurück.

Umgebung

Alle Zielsysteme. Betroffen sind Operationen, die mit dem privaten ML-DSA-Schlüssel eines Zertifikats signieren: Zertifikate und Sperrlisten ausstellen, CMS-Nachrichten signieren, PFX-Dateien mit PQ-Schlüssel exportieren und Schlüsseldateien ablegen.

Ursache

X509Certificate2 von .NET trägt keinen ML-DSA-Schlüssel. Die Bibliothek hält ihn in einer Tabelle des Prozesses, die das Zertifikat über seinen Fingerabdruck findet. Der Eintrag fehlt in diesen Fällen:

  • Das Zertifikat wurde in einem anderen Prozess ausgestellt und als PEM- oder DER-Datei geladen. Solche Dateien enthalten keinen privaten Schlüssel.
  • Das Zertifikat wurde mit new X509Certificate2(pfx, password) von .NET importiert. Dieser Weg übergeht den PQ-Schlüssel der PFX-Datei.
  • Ein reines ML-DSA-Zertifikat wurde mit Create aus einer Anforderung ausgestellt. Es kennt zunächst nur den öffentlichen Schlüssel.
  • Der Prozess wurde neu gestartet. Die Tabelle lebt nur so lange wie der Prozess.

Lösung

Ordnen Sie den Schlüssel zu, bevor Sie die Operation aufrufen. Der Weg hängt davon ab, wo der Schlüssel liegt:

Der Schlüssel liegtZuordnen mit
in einer PFX-Datei aus ExportPfxX509Certificate2ExportExtensions.ImportPfx statt des Konstruktors von .NET
in einer Schlüsseldatei neben dem ZertifikatsspeicherX509Store.Find(findType, findValue, validOnly, restorePqKeys: true) oder X509StoreExtensions.RestorePqKeys
als MLDsaKey im Prozess, hybrides Zertifikatcertificate.AttachAlternativePrivateMLDsaKey(key)
als MLDsaKey im Prozess, reines ML-DSA-Zertifikatcertificate.AttachPrivateMLDsaKey(key)

Prüfen Sie danach mit GetAlternativePrivateMLDsaKey beziehungsweise GetPrivateMLDsaKey, dass der Schlüssel vorhanden ist. HasPrivateKey von .NET zeigt nur den klassischen Schlüssel an. Einzelheiten: Schlüssel und ihre Ablage.

de/wiki/pqcrypt/lib/troubleshooting/no-ml-dsa-private-key.txt · Zuletzt geändert: von Wolfgang van der Stille