Farbschema: Hell
Sie befinden sich hier: start » de » Dokumentation » Post-Quanten-Kryptografie » WKL.System.Security.Cryptography – Überblick » Fehlerbehebung » OpenSSL bietet ML-DSA oder ML-KEM nicht an

OpenSSL bietet ML-DSA oder ML-KEM nicht an

PostQuantumConfig.EnablePostQuantum oder eine Operation mit PQ-Anteil wirft eine CryptographicException mit dieser Meldung, obwohl OpenSSL geladen wurde:

The loaded OpenSSL 3.0.13 ('/usr/lib/x86_64-linux-gnu/libcrypto.so.3') does not provide ML-DSA-65. Use an OpenSSL 3 build whose providers include it; the default provider has ML-DSA and ML-KEM from OpenSSL 3.5 on.

Statt ML-DSA-65 kann jeder Parametersatz von ML-DSA und ML-KEM stehen, außerdem HKDF, ARGON2ID, PBKDF2, AES-256-GCM oder CHACHA20-POLY1305.

Umgebung

Alle Zielsysteme mit dem Anbieter für OpenSSL: .NET Framework, .NET Core 3.1 und .NET 8 unter Windows, Linux und macOS. Blazor WebAssembly ist nicht betroffen, weil es OpenSSL als WebAssembly-Modul mitbringt.

Ursache

Die Bibliothek lädt jede libcrypto mit der Schnittstelle von OpenSSL 3. Welche Verfahren eine Installation anbietet, hängt nicht allein an der Versionsnummer, sondern an den Providern, die OpenSSL lädt. Deshalb fragt die Bibliothek die geladene Installation je Verfahren, ob sie es anbietet:

  • EnablePostQuantum(CryptoMode.Hybrid) und EnablePostQuantum(CryptoMode.PostQuantum) fragen beim Start nach ML-DSA-65 und ML-KEM-768, den Parametersätzen der Voreinstellung. Fehlt einer, wirft die Methode, und DefaultMode behält seinen bisherigen Wert.
  • Jede Operation fragt vor der Rechnung nach dem Verfahren, das sie braucht, etwa ML-DSA-87 für einen Schlüssel dieses Parametersatzes oder Argon2id für eine Schlüsselsicherung.

Die Meldung tritt in diesen Fällen auf:

FallErkennungsmerkmal
OpenSSL vor 3.5Die Meldung nennt eine Version 3.0 bis 3.4. Der Default-Provider bietet ML-DSA und ML-KEM erst ab 3.5 an. Unter Linux ist das oft das OpenSSL des Systems, etwa 3.0 unter Ubuntu 24.04.
OpenSSL vor 3.2 und Argon2idDie Meldung nennt ARGON2ID und eine Version 3.0 oder 3.1.
Build ohne die VerfahrenDie Version ist 3.5 oder höher. Die Installation wurde mit no-ml-dsa oder no-ml-kem gebaut.
Konfiguration ohne den Default-ProviderDie Version ist 3.5 oder höher. Eine OpenSSL-Konfiguration (OPENSSL_CONF, openssl.cnf) lädt nur Provider, die das Verfahren nicht anbieten.

Lehnt die Richtlinie einen Parametersatz ab, etwa ML-DSA-44 ohne Freischaltung, meldet die Bibliothek das zuerst, auch wenn OpenSSL den Parametersatz nicht anbietet. Diese Meldung beschreibt Die Richtlinie weist eine Operation ab.

Lösung

  1. Lesen Sie Version und Pfad aus der Meldung. Sie nennen die Installation, die die Bibliothek tatsächlich geladen hat.
  2. Ist die Version älter als 3.5, installieren Sie OpenSSL ab 3.5 für die Architektur des Prozesses und setzen Sie PostQuantumConfig.OpenSslPath auf deren Verzeichnis mit libcrypto, wie es So binden Sie OpenSSL ein beschreibt.
  3. Ist die Version 3.5 oder höher, prüfen Sie mit dem Kommandozeilenwerkzeug derselben Installation, welche Verfahren sie anbietet:

    openssl list -signature-algorithms
    openssl list -kem-algorithms

    Fehlen dort ML-DSA-65 oder ML-KEM-768, prüfen Sie die OpenSSL-Konfiguration, auf die OPENSSL_CONF zeigt, und aktivieren Sie den Default-Provider. Fehlen sie auch ohne Konfiguration, wurde die Installation ohne die Verfahren gebaut; verwenden Sie eine andere.

  4. Starten Sie den Prozess neu. Die Bibliothek lädt OpenSSL einmal je Prozess und merkt sich die Antworten.

Ob die geladene Installation ML-DSA-65 und ML-KEM-768 anbietet, fragt eine Anwendung vorab mit MLDsaKey.IsSupported und MLKemKey.IsSupported ab, ohne dass eine Ausnahme entsteht.

de/wiki/pqcrypt/lib/troubleshooting/openssl-lacks-pq-algorithms.txt · Zuletzt geändert: von Wolfgang van der Stille