Publikimi i Bibliotekës Kriptografike OpenSSL 3.0.0

Pas tre vitesh zhvillim dhe 19 lëshime testimi, biblioteka OpenSSL 3.0.0 u lëshua me zbatimin e protokolleve SSL/TLS dhe algoritmeve të ndryshme të enkriptimit. Dega e re përfshin ndryshime që prishin përputhshmërinë mbrapsht në nivelin API dhe ABI, por ndryshimet nuk do të ndikojnë në funksionimin e shumicës së aplikacioneve që kërkojnë një rindërtim për të migruar nga OpenSSL 1.1.1. Dega e mëparshme e OpenSSL 1.1.1 do të mbështetet deri në shtator 2023.

Një ndryshim i rëndësishëm në numrin e versionit është për shkak të kalimit në numërimin tradicional "Major.Minor.Patch". Tani e tutje, shifra e parë (Major) në numrin e versionit do të ndryshojë vetëm nëse përputhshmëria prishet në nivelin API/ABI dhe e dyta (Minor) do të ndryshojë kur funksionaliteti rritet pa ndryshuar API/ABI. Përditësimet korrigjuese do të dorëzohen me një ndryshim në shifrën e tretë (Patch). Numri 3.0.0 menjëherë pas 1.1.1 u zgjodh për të shmangur mbivendosjet me modulin FIPS aktualisht në zhvillim për OpenSSL, për të cilin u përdor numërimi 2.x.

Ndryshimi i dytë i rëndësishëm për projektin ishte kalimi nga një licencë e dyfishtë (OpenSSL dhe SSLeay) në licencën Apache 2.0. Licenca e mëparshme e pronarit OpenSSL bazohej në tekstin e licencës së trashëguar Apache 1.0 dhe kërkonte përmendje të qartë të OpenSSL në materialet e marketingut kur përdorni bibliotekat OpenSSL, si dhe një njoftim të veçantë nëse OpenSSL ofrohej si pjesë e produktit. Këto kërkesa e bënë licencën e vjetër të papajtueshme me GPL, duke e bërë të vështirë përdorimin e OpenSSL në projektet e licencuara nga GPL. Për të kapërcyer këtë papajtueshmëri, projektet GPL u detyruan të përdorin marrëveshje të veçanta licence në të cilat teksti kryesor i GPL plotësohej me një klauzolë që lejonte në mënyrë eksplicite lidhjen e aplikacionit me bibliotekën OpenSSL dhe përmendte se kërkesat e GPL nuk aplikoni për lidhjen me OpenSSL.

Krahasuar me degën OpenSSL 1.1.1, OpenSSL 3.0.0 shtoi më shumë se 7500 ndryshime të kontribuar nga 350 zhvillues. Risitë kryesore të OpenSSL 3.0.0:

  • Është propozuar një modul i ri FIPS, duke përfshirë zbatimin e algoritmeve kriptografike që përputhen me standardin e sigurisë FIPS 140-2 (procesi i certifikimit për modulin është planifikuar të fillojë këtë muaj dhe certifikimi FIPS 140-2 pritet vitin e ardhshëm). Moduli i ri është shumë më i lehtë për t'u përdorur dhe lidhja e tij me shumë aplikacione nuk do të jetë më e vështirë sesa ndryshimi i skedarit të konfigurimit. Si parazgjedhje, moduli FIPS është i çaktivizuar dhe kërkon që të aktivizohet opsioni enable-fips.
  • libcrypto zbaton konceptin e ofruesve të prizave, i cili zëvendësoi konceptin e motorëve (API ENGINE është zhvlerësuar). Me ndihmën e ofruesve, ju mund të shtoni implementimet tuaja të algoritmeve për operacione të tilla si kriptimi, deshifrimi, gjenerimi i çelësave, llogaritja e MAC, krijimi dhe verifikimi i nënshkrimeve dixhitale. Është e mundur të lidhni të reja dhe të krijoni zbatime alternative të algoritmeve tashmë të mbështetur (si parazgjedhje, ofruesi i integruar në OpenSSL tani përdoret për çdo algoritëm).
  • Mbështetje e shtuar për Protokollin e Menaxhimit të Certifikatave (RFC 4210), i cili mund të përdoret për të kërkuar certifikata nga një server CA, për të përditësuar certifikatat dhe për të revokuar certifikatat. Puna me CMP kryhet duke përdorur mjetin e ri openssl-cmp, i cili gjithashtu mbështet formatin CRMF (RFC 4211) dhe dërgimin e kërkesave përmes HTTP/HTTPS (RFC 6712).
  • Është implementuar një klient i plotë për protokollet HTTP dhe HTTPS, duke mbështetur metodat GET dhe POST, ridrejtimin e kërkesës, duke punuar përmes një përfaqësuesi, kodimin ASN.1 dhe përpunimin e afatit.
  • Një EVP_MAC i ri (API i kodit të vërtetimit të mesazheve) është shtuar për ta bërë më të lehtë shtimin e zbatimeve të reja të inserteve të rreme.
  • Propozohet një ndërfaqe e re softuerike për gjenerimin e çelësave - EVP_KDF (Key Derivation Function API), e cila thjeshton shtimin e implementimeve të reja të KDF dhe PRF. API-ja e vjetër EVP_PKEY, përmes së cilës ishin të disponueshme algoritmet scrypt, TLS1 PRF dhe HKDF, është ridizajnuar në formën e një shtrese të zbatuar në krye të API-ve EVP_KDF dhe EVP_MAC.
  • Zbatimi i protokollit TLS ofron mundësinë për të përdorur klientin dhe serverin TLS të integruar në kernelin Linux për të shpejtuar operacionet. Për të aktivizuar zbatimin TLS të ofruar nga kerneli Linux, duhet të aktivizoni opsionin "SSL_OP_ENABLE_KTLS" ose cilësimin "enable-ktls".
  • Mbështetje e shtuar për algoritme të reja:
    • Algoritmet kryesore të gjenerimit (KDF) janë "SINGLE STEP" dhe "SSH".
    • Algoritmet e simuluara të futjes (MAC) janë "GMAC" dhe "KMAC".
    • Algoritmi i kapsulimit të çelësit RSA (KEM) "RSASVE".
    • Algoritmi i enkriptimit "AES-SIV" (RFC-8452).
    • Thirrje të shtuara në API EVP që mbështesin shifra të anasjellta duke përdorur algoritmin AES për të enkriptuar çelësat (Ky Mbështjellësi): "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".
    • Mbështetje e shtuar për algoritmet e huazimit të tekstit të koduar (CTS) në API EVP: "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".
    • Mbështetje e shtuar për nënshkrimet dixhitale CAdES-BES (RFC 5126).
    • AES_GCM zbaton parametrin AuthEnvelopedData (RFC 5083) për të mundësuar enkriptimin dhe deshifrimin e mesazheve të vërtetuara dhe të koduara duke përdorur modalitetin AES GCM.
  • Funksionet PKCS7_get_octet_string dhe PKCS7_type_is_other janë shtuar në API-në publike.
  • PKCS#12 API zëvendëson algoritmet e paracaktuar të përdorura në funksionin PKCS12_create() me PBKDF2 dhe AES dhe përdor algoritmin SHA-256 për të llogaritur MAC. Për të rivendosur sjelljen e kaluar, ofrohet opsioni "-legacy". U shtua një numër i madh thirrjesh të reja të zgjeruara në PKCS12_*_ex, PKCS5_*_ex dhe PKCS8_*_ex, si p.sh. 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 fijeve duke përdorur mekanizmin SRWLock.
  • U shtua një API e re gjurmuese, e aktivizuar nëpërmjet parametrit enable-trace.
  • Gama e çelësave të mbështetur në funksionet EVP_PKEY_public_check() dhe EVP_PKEY_param_check() është zgjeruar: RSA, DSA, ED25519, X25519, ED448 dhe X448.
  • Nënsistemi RAND_DRBG është hequr, i zëvendësuar nga EVP_RAND API. Funksionet FIPS_mode() dhe FIPS_mode_set() janë hequr.
  • Një pjesë e konsiderueshme e API-së është bërë e vjetëruar - përdorimi i thirrjeve të vjetruara në kodin e projektit do të rezultojë në paralajmërime gjatë përpilimit. Përfshirë API-të e nivelit të ulët të lidhur me disa zbatime të algoritmeve (për shembull, AES_set_encrypt_key dhe AES_encrypt) janë deklaruar zyrtarisht të vjetëruara. Mbështetja zyrtare në OpenSSL 3.0.0 ofrohet tani vetëm për API-të EVP të nivelit të lartë që janë abstraktuar nga llojet individuale të algoritmeve (kjo API përfshin, për shembull, funksionet EVP_EncryptInit_ex, EVP_EncryptUpdate dhe EVP_EncryptFinal). API-të e vjetruara do të hiqen në një nga publikimet kryesore të ardhshme. Zbatimet e algoritmeve të vjetra si MD2 dhe DES, të disponueshme përmes API-së EVP, janë zhvendosur në një modul të veçantë "të trashëguar", i cili është i çaktivizuar si parazgjedhje.
  • Dokumentacioni dhe grupi i testimit janë zgjeruar ndjeshëm. Krahasuar me degën 1.1.1, vëllimi i dokumentacionit është rritur me 94%, dhe madhësia e kodit të grupit të testimit është rritur me 54%.

Burimi: opennet.ru

Shto një koment