Lansarea bibliotecii criptografice OpenSSL 3.0.0

După trei ani de dezvoltare și 19 versiuni de testare, biblioteca OpenSSL 3.0.0 a fost lansată cu implementarea protocoalelor SSL/TLS și a diverșilor algoritmi de criptare. Noua ramură include modificări care încalcă compatibilitatea inversă la nivelul API și ABI, dar modificările nu vor afecta funcționarea majorității aplicațiilor care necesită o reconstrucție pentru a migra de la OpenSSL 1.1.1. Ramura anterioară a OpenSSL 1.1.1 va fi acceptată până în septembrie 2023.

O schimbare semnificativă a numărului versiunii se datorează trecerii la numerotarea tradițională „Major.Minor.Patch”. Prima cifră (Major) din numărul versiunii se va schimba acum numai dacă compatibilitatea este întreruptă la nivel API/ABI, iar a doua (Minor) se va schimba atunci când funcționalitatea este crescută fără a modifica API/ABI. Actualizările corective vor fi livrate cu o modificare a celei de-a treia cifre (Patch). Numărul 3.0.0 imediat după 1.1.1 a fost ales pentru a evita suprapunerile cu modulul FIPS în curs de dezvoltare pentru OpenSSL, pentru care a fost folosită numerotarea 2.x.

A doua schimbare importantă pentru proiect a fost trecerea de la o licență duală (OpenSSL și SSLeay) la licența Apache 2.0. Licența proprie OpenSSL anterioară se baza pe textul licenței vechi Apache 1.0 și necesita mențiunea explicită a OpenSSL în materialele de marketing atunci când se folosește bibliotecile OpenSSL, precum și o notificare specială dacă OpenSSL era furnizat ca parte a produsului. Astfel de cerințe au făcut ca vechea licență să fie incompatibilă cu GPL, ceea ce a făcut dificilă utilizarea OpenSSL în proiectele cu licență GPL. Pentru a evita această incompatibilitate, proiectele GPL au fost forțate să utilizeze acorduri de licență specifice în care textul principal al GPL a fost completat cu o clauză care permitea în mod explicit conectarea aplicației cu biblioteca OpenSSL și menționau că cerințele GPL nu se aplică pentru conectarea cu OpenSSL.

În comparație cu ramura OpenSSL 1.1.1, OpenSSL 3.0.0 adaugă peste 7500 de modificări aduse de 350 de dezvoltatori. Principalele inovații ale OpenSSL 3.0.0:

  • A fost propus un nou modul FIPS, inclusiv implementarea algoritmilor criptografici care respectă standardul de securitate FIPS 140-2 (procesul de certificare pentru modul este programat să înceapă luna aceasta, iar certificarea FIPS 140-2 este așteptată anul viitor). Noul modul este mult mai ușor de utilizat și conectarea lui la multe aplicații nu va fi mai dificilă decât schimbarea fișierului de configurare. În mod implicit, modulul FIPS este dezactivat și necesită activarea opțiunii enable-fips.
  • libcrypto implementează conceptul de furnizori conectabili, care a înlocuit conceptul de motoare (API-ul ENGINE a fost depreciat). Cu ajutorul furnizorilor, puteți adăuga propriile implementări de algoritmi pentru operațiuni precum criptarea, decriptarea, generarea cheilor, calculul MAC, crearea și verificarea semnăturilor digitale. Este posibil să se conecteze altele noi și să se creeze implementări alternative ale algoritmilor deja acceptați (în mod implicit, furnizorul încorporat în OpenSSL este acum utilizat pentru fiecare algoritm).
  • S-a adăugat suport pentru Protocolul de management al certificatelor (RFC 4210), care poate fi utilizat pentru a solicita certificate de la un server CA, pentru a actualiza certificate și pentru a revoca certificate. Lucrul cu CMP se realizează folosind noul utilitar openssl-cmp, care acceptă și formatul CRMF (RFC 4211) și trimiterea cererilor prin HTTP/HTTPS (RFC 6712).
  • A fost implementat un client cu drepturi depline pentru protocoalele HTTP și HTTPS, care acceptă metodele GET și POST, redirecționarea cererilor, lucrând printr-un proxy, codificare ASN.1 și procesare timeout.
  • Un nou EVP_MAC (Message Authentication Code API) a fost adăugat pentru a facilita adăugarea de noi implementări de inserții simulate.
  • Este propusă o nouă interfață software pentru generarea cheilor - EVP_KDF (Key Derivation Function API), care simplifică adăugarea de noi implementări ale KDF și PRF. Vechiul API EVP_PKEY, prin care erau disponibili algoritmii scrypt, TLS1 PRF și HKDF, a fost reproiectat sub forma unui strat implementat peste API-urile EVP_KDF și EVP_MAC.
  • Implementarea protocolului TLS oferă posibilitatea de a utiliza clientul și serverul TLS încorporate în nucleul Linux pentru a accelera operațiunile. Pentru a activa implementarea TLS furnizată de kernel-ul Linux, trebuie să activați opțiunea „SSL_OP_ENABLE_KTLS” sau setarea „enable-ktls”.
  • S-a adăugat suport pentru noi algoritmi:
    • Algoritmii de generare a cheilor (KDF) sunt „SINGLE STEP” și „SSH”.
    • Algoritmii de inserție simulați (MAC) sunt „GMAC” și „KMAC”.
    • Algoritmul de încapsulare a cheilor RSA (KEM) „RSASVE”.
    • Algoritm de criptare „AES-SIV” (RFC-8452).
    • S-au adăugat apeluri la API-ul EVP cu suport pentru criptări inverse folosind algoritmul AES pentru a cripta cheile (Key Wrap): „AES-128-WRAP-INV”, „AES-192-WRAP-INV”, „AES-256-WRAP- INV”, „AES-128-WRAP-PAD-INV”, „AES-192-WRAP-PAD-INV” și „AES-256-WRAP-PAD-INV”.
    • S-a adăugat suport pentru algoritmi de împrumut de text cifrat (CTS) la API-ul EVP: „AES-128-CBC-CTS”, „AES-192-CBC-CTS”, „AES-256-CBC-CTS”, „CAMELLIA-128-CBC -CTS” „, „CAMELLIA-192-CBC-CTS” și „CAMELLIA-256-CBC-CTS”.
    • S-a adăugat suport pentru semnăturile digitale CAdES-BES (RFC 5126).
    • AES_GCM implementează parametrul AuthEnvelopedData (RFC 5083) pentru a activa criptarea și decriptarea mesajelor autentificate și criptate folosind modul AES GCM.
  • Funcțiile PKCS7_get_octet_string și PKCS7_type_is_other au fost adăugate la API-ul public.
  • API-ul PKCS#12 înlocuiește algoritmii impliciti utilizați în funcția PKCS12_create() cu PBKDF2 și AES și utilizează algoritmul SHA-256 pentru a calcula MAC. Pentru a restabili comportamentul trecut, este oferită opțiunea „-legacy”. S-a adăugat un număr mare de noi apeluri extinse la PKCS12_*_ex, PKCS5_*_ex și PKCS8_*_ex, cum ar fi PKCS12_add_key_ex().PKCS12_create_ex() și PKCS12_decrypt_skey_ex().
  • Pentru platforma Windows, a fost adăugat suport pentru sincronizarea firelor folosind mecanismul SRWLock.
  • S-a adăugat un nou API de urmărire, activat prin parametrul enable-trace.
  • Gama de chei acceptate în funcțiile EVP_PKEY_public_check() și EVP_PKEY_param_check() a fost extinsă: RSA, DSA, ED25519, X25519, ED448 și X448.
  • Subsistemul RAND_DRBG a fost eliminat, înlocuit cu API-ul EVP_RAND. Funcțiile FIPS_mode() și FIPS_mode_set() au fost eliminate.
  • O parte semnificativă a API-ului a fost depășită - utilizarea apelurilor învechite în codul proiectului va avea ca rezultat avertismente în timpul compilării. Inclusiv API-urile de nivel scăzut legate de anumite implementări ale algoritmilor (de exemplu, AES_set_encrypt_key și AES_encrypt) au fost declarate oficial ca fiind învechite. Suportul oficial în OpenSSL 3.0.0 este acum oferit doar pentru API-urile EVP de nivel înalt care sunt extrase de la tipurile de algoritmi individuale (acest API include, de exemplu, funcțiile EVP_EncryptInit_ex, EVP_EncryptUpdate și EVP_EncryptFinal). API-urile învechite vor fi eliminate într-una dintre următoarele versiuni majore. Implementările algoritmilor vechi, cum ar fi MD2 și DES, disponibili prin API-ul EVP, au fost mutate într-un modul separat „vehicul”, care este dezactivat implicit.
  • Documentația și suita de testare au fost extinse semnificativ. În comparație cu ramura 1.1.1, volumul documentației a crescut cu 94%, iar dimensiunea codului suitei de testare a crescut cu 54%.

Sursa: opennet.ru

Adauga un comentariu