Pas tri vjet zhvillimi dhe 19 lëshimeve testuese, u realizua lëshimi i bibliotekës OpenSSL 3.0.0 me implementimin e protokolleve SSL/TLS dhe algoritmeve të ndryshëm të enkriptimit. Kjo degë e re përfshin ndryshime që shkelin kompatibilitetin mbrapsht në nivelin API dhe ABI, por këto ndryshime nuk do të ndikojnë në funksionimin e shumicës së aplikacioneve, për të cilat ritransportimi nga OpenSSL 1.1.1 mjafton për rindërtim. Mbështetje për degën e mëparshme OpenSSL 1.1.1 do të ofrohet deri në shtator 2023.
Ndryshimi i konsiderueshëm i numrit të versions është i lidhur me kalimin në numeracionin tradicional "Major.Minor.Patch". Numri i parë (Major) në numrin e versionit tani do të ndryshohet vetëm me shkeljen e kompatibilitetit në nivelin API/ABI, ndërsa i dyti (Minor) me zgjerimin e funksionalitetit pa ndryshimin e API/ABI. Përditësimet korrigjuese do të dorëzohen me ndryshimin e numrit të tretë (Patch). Numri 3.0.0 menjëherë pas 1.1.1 është zgjedhur për të shmangur kryqëzimet me modulin FIPS që është në zhvillim për OpenSSL, për të cilin është aplikuar numeracioni 2.x.
Një ndryshim tjetër i rëndësishëm për projektin ishte kalimi nga licenca e dyfishtë (OpenSSL dhe SSLeay) në licencën Apache 2.0. Licenca e mëparshme e OpenSSL ishte e bazuar në tekstin e licencës së vjetruar Apache 1.0 dhe kërkonte përmendje të qartë të OpenSSL në materialet reklamuese gjatë përdorimit të bibliotekave OpenSSL, si dhe shtimin e një shënimi të veçantë në rast se OpenSSL ofrohej si pjesë e produktit. Këto kërkesa e bënë licencën e vjetër të papërshtatshme me GPL, duke krijuar vështirësi në përdorimin e OpenSSL në projekte me licencë GPL. Për të anashkaluar këtë papërshtatshmëri, projektet GPL ishin të detyruara të aplikonin marrëveshje të veçanta licencimi, ku teksti kryesor i GPL plotësohej me një klauzolë që lejonte qartë lidhjen e aplikacionit me bibliotekën OpenSSL dhe përmendte se kërkesat e GPL nuk zbatohen për lidhjen me OpenSSL.
Në krahasim me degën OpenSSL 1.1.1, OpenSSL 3.0.0 ka shtuar më shumë se 7500 ndryshime, të përgatitura nga 350 zhvillues. Risi kryesore të OpenSSL 3.0.0:
- Një modul i ri FIPS është propozuar, duke përfshirë zbatimin e algoritmeve kriptografikë që përmbushin standardin e sigurisë FIPS 140-2 (procesi i certifikimit të modulit është planifikuar të fillojë këtë muaj, ndërsa certifikata FIPS 140-2 pritet të merret vitin tjetër). Moduli i ri është ndjeshëm më i lehtë për t'u përdorur dhe lidhja e tij me shumë aplikacione do të jetë po aq e thjeshtë sa ndryshimi i skedarit të konfigurimit. Nga e para, moduli FIPS është i çaktivizuar dhe kërkon opsionin enable-fips për t'u aktivizuar.
- Koncepti i ofruesve tĂ« integruar Ă«shtĂ« implementuar nĂ« libcrypto, duke zĂ«vendĂ«suar konceptin e motorĂ«ve (API-ja ENGINE Ă«shtĂ« shpallur e skaduar). Me ndihmĂ«n e ofruesve, mund tĂ« shtoni zbatime tĂ« veçanta tĂ« algoritmeve pĂ«r operacione si enkriptimi, dekryptimi, krijimi i çelĂ«save, llogaritja e MAC, krijimi dhe verifikimi i nĂ«nshkrimeve dixhitale. ĂshtĂ« e mundur si lidhja e tĂ« rejave, ashtu edhe krijimi i zbatimeve alternative tĂ« algoritmeve tashmĂ« tĂ« mbĂ«shtetur (nĂ« mĂ«nyrĂ« domethĂ«nĂ«se, pĂ«r çdo algoritĂ«m tani pĂ«rdoret ofruesi i integruar nĂ« OpenSSL).
- Shtimi i mbështetjes për protokollin e menaxhimit të certifikatave CMP (Certificate Management Protocol, RFC 4210), i cili mund të përdoret për të kërkuar certifikata nga serverë autoriteti i certifikimit, për ta rinovuar dhe për ta tërhequr certifikatën. Puna me CMP bëhet përmes utilitarit të ri openssl-cmp, në të cilin gjithashtu është implementuar mbështetje për formatin CRMF (RFC 4211) dhe transferimin e kërkesave përmes HTTP/HTTPS (RFC 6712).
- Një klient i plotë për protokollet HTTP dhe HTTPS është implementuar, i mbështetur në metodat GET dhe POST, ridrejtime të kërkesave, punën përmes proxy-t, kodimin ASN.1 dhe përpunimin e kohëve të pritjes.
- Një API i ri EVP_MAC (API i Kodit të Autentikimit të Mesazheve) është shtuar, duke thjeshtuar shtimin e zbatimeve të reja të imitosvëngjeve.
- NjĂ« interface i ri programues pĂ«r krijimin e çelĂ«save â EVP_KDF (API pĂ«r Funksionin e Derivimit tĂ« ĂelĂ«save) Ă«shtĂ« propozuar, qĂ« thjeshton shtimin e zbatimeve tĂ« reja tĂ« KDF dhe PRF. API i vjetĂ«r EVP_PKEY, pĂ«rmes tĂ« cilit ishin tĂ« aksesueshme algoritmet scrypt, TLS1 PRF dhe HKDF, Ă«shtĂ« ristrukturuar nĂ« formĂ«n e njĂ« shtrese, e cila Ă«shtĂ« implementuar mbi API EVP_KDF dhe EVP_MAC.
- Në implementimin e protokollit TLS është ofruar mundësia e përdorimit të implementimeve të integruara në kernelin Linux të klientit dhe serverit TLS për të përshpejtuar operacionet. Për të aktivizuar implementimin e ofruar nga kernelin Linux të TLS, është e nevojshme të aktivizohet opsioni "SSL_OP_ENABLE_KTLS" ose të konfigurohet "enable-ktls".
- Shtimi i mbështetjes për algoritmet e reja:
- Algoritmet e formimit të çelsave (KDF) - «SINGLE STEP» dhe «SSH».
- Algoritmet e imitoshtesave (MAC) - «GMAC» dhe «KMAC».
- Algoritmi i encapsulimit të çelave RSA (KEM) «RSASVE».
- Algoritmi i enkriptimit «AES-SIV» (RFC-8452).
- Në API EVP janë shtuar thirrje me mbështetje për enkriptim invers, që përdorin algoritmin AES për enkriptimin e çelave (Key Wrap): «AES-128-WRAP-INV», «AES-192-WRAP-INV», «AES-256-WRAP-INV», «AES-128-WRAP-PAD-INV», «AES-192-WRAP-PAD-INV» dhe «AES-256-WRAP-PAD-INV».
- Në API EVP është shtuar mbështetje për algoritmet e huazimit të tekstit të enkriptuar (CTS): «AES-128-CBC-CTS», «AES-192-CBC-CTS», «AES-256-CBC-CTS», «CAMELLIA-128-CBC-CTS», «CAMELLIA-192-CBC-CTS» dhe «CAMELLIA-256-CBC-CTS».
- ĂshtĂ« shtuar mbĂ«shtetje pĂ«r nĂ«nshkrimet dixhitale CAdES-BES (RFC 5126).
- Në AES_GCM është implementuar parametri AuthEnvelopedData (RFC 5083), që lejon enkriptimin dhe dekriptimin e mesazheve, të autoktuara dhe të enkriptuara duke përdorur modin AES GCM.
- Në API-në publike janë nxjerrë funksionet PKCS7_get_octet_string dhe PKCS7_type_is_other.
- Në API PKCS#12 algoritmet që përdoren si parazgjedhje në funksionin PKCS12_create(), janë zëvendësuar me PBKDF2 dhe AES, ndërsa për llogaritjen e MAC është përdorur algoritmi SHA-256. Për të rikthyer sjelljen e kaluar është parashikuar opsioni «-legacy». Janë shtuar një numër i madh thirrjesh të reja të zgjeruara PKCS12_*_ex, PKCS5_*_ex dhe PKCS8_*_ex, siç janë PKCS12_add_key_ex(), PKCS12_create_ex() dhe PKCS12_decrypt_skey_ex().
- Për platformën Windows është shtuar mbështetje për sinkronizimin e rrjedhave përmes mekanizmit SRWLock.
- ĂshtĂ« shtuar njĂ« API i ri pĂ«r gjurmimin, i aktivizuar nĂ«pĂ«rmjet parametrave enable-trace.
- ĂshtĂ« zgjeruar gama e çelsave tĂ« mbĂ«shtetur nĂ« funksionet EVP_PKEY_public_check() dhe EVP_PKEY_param_check(): RSA, DSA, ED25519, X25519, ED448 dhe X448.
- ĂshtĂ« hequr nĂ«nsistemi RAND_DRBG, pĂ«r tĂ« cilin Ă«shtĂ« ofruar API EVP_RAND. JanĂ« hequr funksionet FIPS_mode() dhe FIPS_mode_set().
- Një pjesë e dukshme e API-t është shpallur e vjetruar - përdorimi i thirrjeve të vjetra në kodin e projekteve do të shkaktojë njoftime paralajmërimi gjatë kompilimit. Në mesin e tyre, API-t e nivelit të ulët, të lidhura me realizime të caktuara të algoritmeve (për shembull, AES_set_encrypt_key dhe AES_encrypt), janë shpallur zyrtarisht të vjetra. Mbështetje zyrtare në OpenSSL 3.0.0 tani ofrohet vetëm për API-t e nivelit të lartë EVP, të abstractizuar nga llojet e veçanta të algoritmeve (për këtë API përfshihen, për shembull, funksionet EVP_EncryptInit_ex, EVP_EncryptUpdate dhe EVP_EncryptFinal). Në një nga lëshimet e ardhshme të rëndësishme, API-t e vjetra do të fshihen. Realizimet e algoritmeve të vjetra, si MD2 dhe DES, të disponueshme përmes API-t EVP, janë zhvendosur në një modul të veçantë 'legacy', i cili është i çaktivizuar nga default.
- Dokumentacioni dhe seti i testeve kanë pasur një zgjerim të konsiderueshëm. Krahasuar me degën 1.1.1, volumi i dokumentacionit është rritur me 94%, ndërsa madhësia e kodit të setit të testeve me 54%.
Burimi: opennet.ru
