Farbschema: Dunkel
Sie befinden sich hier: start » de » Dokumentation » Post-Quanten-Kryptografie » WKL.System.Security.Cryptography – Überblick » Fehlerbehebung » Die PQ-Signaturprüfung schlägt fehl

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:

ErgebnisBedeutung
false, Grund in ChainStatusDie klassische Prüfung von .NET ist gescheitert, etwa an einem unbekannten Stammzertifikat. Die PQ-Signaturen wurden nicht geprüft.
false, ChainStatus ohne FehlerMindestens 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.
CryptographicExceptionDer 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

  1. 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}");
        }
    }
  2. Invalid bei einem Zertifikat: Stellen Sie es neu aus. Eine ungültige Signatur lässt sich nicht reparieren.
  3. 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.
  4. 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