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)undEnablePostQuantum(CryptoMode.PostQuantum)fragen beim Start nach ML-DSA-65 und ML-KEM-768, den Parametersätzen der Voreinstellung. Fehlt einer, wirft die Methode, undDefaultModebehä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:
| Fall | Erkennungsmerkmal |
|---|---|
| OpenSSL vor 3.5 | Die 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 Argon2id | Die Meldung nennt ARGON2ID und eine Version 3.0 oder 3.1. |
| Build ohne die Verfahren | Die Version ist 3.5 oder höher. Die Installation wurde mit no-ml-dsa oder no-ml-kem gebaut. |
| Konfiguration ohne den Default-Provider | Die 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
- Lesen Sie Version und Pfad aus der Meldung. Sie nennen die Installation, die die Bibliothek tatsächlich geladen hat.
- Ist die Version älter als 3.5, installieren Sie OpenSSL ab 3.5 für die Architektur des Prozesses und setzen Sie
PostQuantumConfig.OpenSslPathauf deren Verzeichnis mitlibcrypto, wie es So binden Sie OpenSSL ein beschreibt. 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-65oderML-KEM-768, prüfen Sie die OpenSSL-Konfiguration, auf dieOPENSSL_CONFzeigt, und aktivieren Sie den Default-Provider. Fehlen sie auch ohne Konfiguration, wurde die Installation ohne die Verfahren gebaut; verwenden Sie eine andere.- 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.