Die PQ-Signaturprüfung schlägt fehl
X509Chain.Build(certificate, CryptoMode.Hybrid) gibt false zurück, obwohl ChainStatus keinen Fehler nennt.
Oder die Prüfung wirft eine CryptographicException, etwa:
Certificate 'CN=signer.example.com' is signed with ML-DSA, but its issuer 'CN=Muster GmbH PQ Root CA' has no ML-DSA subject key.
Umgebung
Alle Zielsysteme. Betroffen sind Kettenprüfungen mit CryptoMode.Hybrid oder CryptoMode.PostQuantum.
Ursache
Mit PQ-Betriebsart prüft die Bibliothek erst die Kette wie .NET und danach die ML-DSA-Signatur jedes Zertifikats mit dem ML-DSA-Schlüssel seines Ausstellers. Die Ergebnisse unterscheiden sich so:
| Ergebnis | Bedeutung |
|---|---|
false, Grund in ChainStatus | Die klassische Prüfung von .NET ist gescheitert, etwa an einem unbekannten Stammzertifikat. Die PQ-Signaturen wurden nicht geprüft. |
false, ChainStatus ohne Fehler | Mindestens eine ML-DSA-Signatur ist ungültig. Das Zertifikat wurde nach dem Ausstellen verändert, oder der Aussteller in der Kette ist nicht der, der signiert hat. |
CryptographicException | Der PQ-Anteil lässt sich nicht prüfen: Ein Zertifikat der Kette trägt keine ML-DSA-Signatur, oder seinem Aussteller fehlt der ML-DSA-Schlüssel. Die Bibliothek wertet das nicht als gültig und nicht still als ungültig. |
Unter Linux kann außerdem schon die klassische Prüfung einer Kette mit reinem ML-DSA-Aussteller scheitern,
wenn .NET eine libcrypto ohne ML-DSA lädt.
Lösung
Lesen Sie den Bericht der Prüfung. Er nennt für jedes Zertifikat den Status der PQ-Signatur:
if (!chain.Build(certificate, CryptoMode.Hybrid)) { foreach (var element in chain.GetValidationReport().Elements) { Console.WriteLine($"{element.Subject}: {element.PqSignatureStatus}"); } }
Invalidbei einem Zertifikat: Stellen Sie es neu aus. Eine ungültige Signatur lässt sich nicht reparieren.- Ausnahme wegen einer fehlenden Signatur: Die Kette enthält ein rein klassisches Zertifikat. Prüfen Sie diese Kette mit
CryptoMode.Classic, oder ersetzen Sie das Zertifikat durch ein hybrides. - Unter Linux: Lassen Sie auch .NET ein OpenSSL ab 3.5 laden, wie es So binden Sie OpenSSL ein beschreibt.
de/wiki/pqcrypt/lib/troubleshooting/pq-signature-check-fails.txt · Zuletzt geändert: von Wolfgang van der Stille