Po troch rokoch vývoja a 19 testovacích vydaniach bol vydaný OpenSSL 3.0.0, ktorý implementuje protokoly SSL/TLS a rôzne šifrovacie algoritmy. Nová verzia obsahuje zmeny, ktoré narušujú spätnú kompatibilitu na úrovni API a ABI, no tieto zmeny neovplyvnia fungovanie väčšiny aplikácií, ktorých prevod z OpenSSL 1.1.1 si vyžaduje iba prekompiláciu. Podpora predchádzajúcej verzie OpenSSL 1.1.1 bude zabezpečovaná do septembra 2023.
Významná zmena čísla verzie súvisí s prechodom na tradičné číslovanie „Major.Minor.Patch“. Prvá cifra (Major) v čísle verzie sa odteraz zmení iba pri narušení kompatibility na úrovni API/ABI, zatiaľ čo druhá (Minor) pri rozšírení funkčnosti bez zmeny API/ABI. Opravy sa budú poskytovať zmenou tretej cifry (Patch). Číslo 3.0.0 bolo vybrané bezprostredne po 1.1.1, aby sa predišlo prelínaniu s vyvíjaným FIPS-modulom pre OpenSSL, ktorý mal číslovanie 2.x.
Druhou dôležitou zmenou pre projekt bol prechod z dvojitej licencie (OpenSSL a SSLeay) na licenciu Apache 2.0. Predtým používaná vlastná licencia OpenSSL bola založená na texte zastaranej licencie Apache 1.0 a vyžadovala explicitné uvedenie OpenSSL v reklamných materiáloch pri použití knižníc OpenSSL, ako aj pridanie špeciálneho upozornenia v prípade dodania OpenSSL ako súčasti produktu. Takéto požiadavky robili starú licenciu nekompatibilnou s GPL, čo spôsobovalo ťažkosti pri použití OpenSSL v projektoch s licenciou GPL. Na obídenie tejto nekompatibility boli GPL-projekty nútené používať špecifické licenčné dohody, v ktorých sa základný text GPL doplnil o bod, ktorý explicitne umožňuje prepojenie aplikácie s knižnicou OpenSSL a spomína, že požiadavky GPL sa nevzťahujú na prepojenie s OpenSSL.
V porovnaní s vetvou OpenSSL 1.1.1 obsahuje OpenSSL 3.0.0 viac ako 7500 zmien, ktoré pripravilo 350 vývojárov. Hlavné novinky OpenSSL 3.0.0:
- Bol pridaný nový modul FIPS, ktorý obsahuje implementáciu kryptografických algoritmov zodpovedajúcich bezpečnostnému štandardu FIPS 140-2 (certifikačný proces modulu sa plánuje na tento mesiac, pričom získanie certifikátu FIPS 140-2 sa očakáva budúci rok). Nový modul je omnoho jednoduchší na používanie a jeho integrácia do mnohých aplikácií si nebude vyžadovať viac ako zmenu konfiguračného súboru. Modul FIPS je predvolene vypnutý a na aktiváciu je potrebné zadať možnosť enable-fips.
- V libcrypto bola implementovaná koncepcia plugin providerov, ktorá nahrádza koncept engine (API ENGINE je považované za zastarané). S pomocou providerov je možné pridávať vlastné implementácie algoritmov pre operácie ako šifrovanie, dešifrovanie, generovanie kľúčov, výpočet MAC, vytváranie a overovanie digitálnych podpisov. Je možné ako pripojiť nové, tak i vytvoriť alternatívne implementácie už podporovaných algoritmov (predvolene sa teraz pre každý algoritmus používa integrovaný provider OpenSSL).
- Pridaná podpora pre protokol správy certifikátov CMP (Certificate Management Protocol, RFC 4210), ktorý je možné využiť na požiadanie certifikátov od servera certifikačného úradu, obnovovanie certifikátov a zrušenie certifikátov. Práca s CMP sa vykonáva pomocou novej utilitky openssl-cmp, v ktorej je tiež podporovaný formát CRMF (RFC 4211) a prenos požiadaviek cez HTTP/HTTPS (RFC 6712).
- Bola implementovaná plnohodnotná klientská aplikácia pre protokoly HTTP a HTTPS, ktorá podporuje metódy GET a POST, presmerovanie požiadaviek, prácu cez proxy, kódovanie ASN.1 a spracovanie časových limitov.
- Bol pridaný nový API EVP_MAC (API pre kód autentifikácie správ), ktorý zjednodušuje pridávanie nových implementácií MAC.
- Bol navrhnutý nový aplikačný rozhranie na generovanie kľúčov — EVP_KDF (API pre funkciu derivácie kľúča), ktoré zjednodušuje pridávanie nových implementácií KDF a PRF. Starý API EVP_PKEY, cez ktorý boli dostupné algoritmy scrypt, TLS1 PRF a HKDF, bol prepracovaný vo forme vrstvy implementovanej nad API EVP_KDF a EVP_MAC.
- V implementácii protokolu TLS bola poskytnutá možnosť používať zabudovaného klienta a servera TLS v jadre Linuxu na zrýchlenie operácií. Na aktiváciu zabudovanej implementácie TLS v jadre Linuxu je potrebné povoliť možnosť „SSL_OP_ENABLE_KTLS“ alebo nastavenie „enable-ktls“.
- Pridaná podpora nových algoritmov:
- Algoritmy generovania kľúčov (KDF) – „SINGLE STEP“ a „SSH“.
- Algoritmy autentifikácie (MAC) – „GMAC“ a „KMAC“.
- Algoritmus enkapsulácie kľúčov RSA (KEM) „RSASVE“.
- Šifrovací algoritmus „AES-SIV“ (RFC-8452).
- V API EVP boli pridané volania s podporou inverzných šifrier, ktoré používajú algoritmus AES na šifrovanie kľúčov (Key Wrap): „AES-128-WRAP-INV“, „AES-192-WRAP-INV“, „AES-256-WRAP-INV“, „AES-128-WRAP-PAD-INV“, „AES-192-WRAP-PAD-INV“ a „AES-256-WRAP-PAD-INV“.
- V API EVP bola pridaná podpora algoritmov kódujúcich šifrový text (CTS): „AES-128-CBC-CTS“, „AES-192-CBC-CTS“, „AES-256-CBC-CTS“, „CAMELLIA-128-CBC-CTS“, „CAMELLIA-192-CBC-CTS“ a „CAMELLIA-256-CBC-CTS“.
- Pridaná podpora digitálnych podpisov CAdES-BES (RFC 5126).
- V AES_GCM bol implementovaný parameter AuthEnvelopedData (RFC 5083), ktorý umožňuje šifrovať a dešifrovať správy, ktoré sú autentifikované a šifrované pomocou režimu AES GCM.
- Do verejného API boli presunuté funkcie PKCS7_get_octet_string a PKCS7_type_is_other.
- V API PKCS#12 boli algoritmy, ktoré sa používajú predvolene vo funkcii PKCS12_create(), nahradené PBKDF2 a AES, a na výpočet MAC bol použitý algoritmus SHA-256. Pre obnovenie predchádzajúceho správania je k dispozícii možnosť „-legacy“. Bola pridaná veľká skupina nových rozšírených volaní PKCS12_*_ex, PKCS5_*_ex a PKCS8_*_ex, ako napríklad PKCS12_add_key_ex(), PKCS12_create_ex() a PKCS12_decrypt_skey_ex().
- Pre platformu Windows bola pridaná podpora synchronizácie vlákien pomocou mechanizmu SRWLock.
- Bol pridaný nový API pre trasovanie, ktorý sa aktivuje prostredníctvom parametra enable-trace.
- Rozšíril sa rozsah kľúčov podporovaných vo funkciách EVP_PKEY_public_check() a EVP_PKEY_param_check(): RSA, DSA, ED25519, X25519, ED448 a X448.
- Podsystem RAND_DRBG bol odstránený, namiesto neho bol navrhnutý API EVP_RAND. Funkcie FIPS_mode() a FIPS_mode_set() boli odstránené.
- Významná časť API bola preložená do kategórie zastaraných - používanie zastaraných volaní v kóde projektov povedie k zobrazeniu varovaní pri kompilácii. Medzi zastarané boli oficiálne zaradené aj nízkoúrovňové API, viazané na konkrétne implementácie algoritmov (napríklad AES_set_encrypt_key a AES_encrypt). Oficiálna podpora v OpenSSL 3.0.0 je teraz poskytovaná len pre vysokoúrovňové API EVP, abstrahované od jednotlivých typov algoritmov (k tomuto API patrí napríklad funkcia EVP_EncryptInit_ex, EVP_EncryptUpdate a EVP_EncryptFinal). V jednom z nasledujúcich významných vydaní budú zastarané API odstránené. Implementácie zastaraných algoritmov, ako sú MD2 a DES, dostupné prostredníctvom API EVP, boli presunuté do samostatného modulu „legacy“, ktorý je predvolene vypnutý.
- Dokumentácia a sada testov boli výrazne rozšírené. V porovnaní s vetvou 1.1.1 sa objem dokumentácie zvýšil o 94 %, a veľkosť kódu testovacej sady o 54%.
Zdroj: opennet.ru
