OpenSSL ne ponuja ML-DSA ali ML-KEM
PostQuantumConfig.EnablePostQuantum ali operacija z deležem PQ sproži CryptographicException s tem
sporočilom, čeprav je bil OpenSSL naložen:
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.
Namesto ML-DSA-65 je lahko naveden kateri koli nabor parametrov ML-DSA in ML-KEM, poleg tega še HKDF,
ARGON2ID, PBKDF2, AES-256-GCM ali CHACHA20-POLY1305.
Okolje
Vsa ciljna okolja s ponudnikom za OpenSSL: .NET Framework, .NET Core 3.1 in .NET 8 v sistemih Windows, Linux in macOS. Blazor WebAssembly to ne zadeva, ker OpenSSL prinese kot modul WebAssembly.
Vzrok
Knjižnica naloži vsako libcrypto z vmesnikom OpenSSL 3. Katere postopke namestitev ponuja, ni odvisno samo
od številke različice, temveč od ponudnikov (providers), ki jih OpenSSL naloži. Zato knjižnica naloženo
namestitev za vsak postopek vpraša, ali ga ponuja:
EnablePostQuantum(CryptoMode.Hybrid)inEnablePostQuantum(CryptoMode.PostQuantum)ob zagonu vprašata za ML-DSA-65 in ML-KEM-768, privzeta nabora parametrov. Če kateri manjka, metoda sproži izjemo,DefaultModepa obdrži dotedanjo vrednost.- Vsaka operacija pred izračunom vpraša za postopek, ki ga potrebuje, na primer ML-DSA-87 za ključ s tem naborom parametrov ali Argon2id za zaščito ključa.
Sporočilo se pojavi v teh primerih:
| Primer | Prepoznavni znak |
|---|---|
| OpenSSL pred 3.5 | Sporočilo navaja različico od 3.0 do 3.4. Privzeti ponudnik ML-DSA in ML-KEM ponuja šele od 3.5. V sistemu Linux je to pogosto sistemski OpenSSL, na primer 3.0 v Ubuntu 24.04. |
| OpenSSL pred 3.2 in Argon2id | Sporočilo navaja ARGON2ID in različico 3.0 ali 3.1. |
| Gradnja brez postopkov | Različica je 3.5 ali novejša. Namestitev je bila zgrajena z no-ml-dsa ali no-ml-kem. |
| Konfiguracija brez privzetega ponudnika | Različica je 3.5 ali novejša. Konfiguracija OpenSSL (OPENSSL_CONF, openssl.cnf) naloži samo ponudnike, ki postopka ne ponujajo. |
Če pravila zavrnejo nabor parametrov, na primer ML-DSA-44 brez izjeme, knjižnica to sporoči najprej, tudi če OpenSSL nabora parametrov ne ponuja. To sporočilo opisuje Pravila zavrnejo operacijo.
Rešitev
- Iz sporočila preberite različico in pot. Navajata namestitev, ki jo je knjižnica dejansko naložila.
- Če je različica starejša od 3.5, namestite OpenSSL 3.5 ali novejši za arhitekturo procesa in
PostQuantumConfig.OpenSslPathnastavite na njegovo mapo zlibcrypto, kot opisuje Vključitev OpenSSL. Če je različica 3.5 ali novejša, z orodjem ukazne vrstice iste namestitve preverite, katere postopke ponuja:
openssl list -signature-algorithms openssl list -kem-algorithms
Če
ML-DSA-65aliML-KEM-768tam manjkata, preverite konfiguracijo OpenSSL, na katero kažeOPENSSL_CONF, in vklopite privzeti ponudnik. Če manjkata tudi brez konfiguracije, je bila namestitev zgrajena brez teh postopkov; uporabite drugo.- Proces znova zaženite. Knjižnica OpenSSL naloži enkrat na proces in si odgovore zapomni.
Ali naložena namestitev ponuja ML-DSA-65 in ML-KEM-768, aplikacija vnaprej preveri z MLDsaKey.IsSupported
in MLKemKey.IsSupported, ne da bi nastala izjema.