Izdaja kriptografske knjižnice OpenSSL 3.0.0

Po treh letih razvoja in 19 testnih izdajah je bila izdana knjižnica OpenSSL 3.0.0 z implementacijo protokolov SSL/TLS in različnih šifrirnih algoritmov. Nova veja vključuje spremembe, ki prekinejo združljivost za nazaj na ravni API-ja in ABI, vendar spremembe ne bodo vplivale na delovanje večine aplikacij, ki zahtevajo vnovično izgradnjo za selitev iz OpenSSL 1.1.1. Prejšnja veja OpenSSL 1.1.1 bo podprta do septembra 2023.

Pomembna sprememba številke različice je posledica prehoda na tradicionalno oštevilčenje "Major.Minor.Patch". Od zdaj naprej se bo prva številka (Major) v številki različice spremenila le, če je združljivost prekinjena na ravni API/ABI, druga (Minor) pa se bo spremenila, ko se funkcionalnost poveča brez spreminjanja API/ABI. Popravne posodobitve bodo dostavljene s spremembo tretje števke (popravek). Številka 3.0.0 takoj za 1.1.1 je bila izbrana, da bi se izognili prekrivanju s trenutno razvijajočim se modulom FIPS za OpenSSL, za katerega je bilo uporabljeno oštevilčenje 2.x.

Druga pomembna sprememba projekta je bil prehod z dvojne licence (OpenSSL in SSLeay) na licenco Apache 2.0. Prejšnja lastniška licenca OpenSSL je temeljila na besedilu podedovane licence Apache 1.0 in je zahtevala izrecno omembo OpenSSL v marketinškem gradivu pri uporabi knjižnic OpenSSL ter posebno obvestilo, če je bil OpenSSL na voljo kot del izdelka. Zaradi teh zahtev je bila stara licenca nezdružljiva z GPL, kar je otežilo uporabo OpenSSL v projektih z licenco GPL. Da bi se izognili tej nezdružljivosti, so bili projekti GPL prisiljeni uporabljati posebne licenčne pogodbe, v katerih je bilo glavno besedilo GPL dopolnjeno s klavzulo, ki izrecno dovoljuje povezavo aplikacije s knjižnico OpenSSL in omenja, da zahteve GPL ne velja za povezovanje z OpenSSL.

V primerjavi z vejo OpenSSL 1.1.1 je OpenSSL 3.0.0 dodal več kot 7500 sprememb, ki jih je prispevalo 350 razvijalcev. Glavne novosti OpenSSL 3.0.0:

  • Predlagan je nov modul FIPS, vključno z implementacijo kriptografskih algoritmov, ki so v skladu z varnostnim standardom FIPS 140-2 (proces certificiranja modula se bo začel ta mesec, certificiranje FIPS 140-2 pa pričakujemo naslednje leto). Novi modul je veliko enostavnejši za uporabo in povezovanje z mnogimi aplikacijami ne bo nič težje kot spreminjanje konfiguracijske datoteke. Privzeto je modul FIPS onemogočen in zahteva, da je omogočena možnost enable-fips.
  • libcrypto implementira koncept vtičnih ponudnikov, ki je nadomestil koncept motorjev (ENGINE API je bil opuščen). S pomočjo ponudnikov lahko dodate lastne izvedbe algoritmov za operacije, kot so šifriranje, dešifriranje, generiranje ključev, izračun MAC, ustvarjanje in preverjanje digitalnih podpisov. Možno je tako povezati nove kot ustvariti alternativne izvedbe že podprtih algoritmov (privzeto se zdaj za vsak algoritem uporablja ponudnik, vgrajen v OpenSSL).
  • Dodana podpora za protokol za upravljanje potrdil (RFC 4210), ki ga je mogoče uporabiti za zahtevanje potrdil od strežnika CA, posodabljanje potrdil in preklic potrdil. Delo s CMP poteka z uporabo novega pripomočka openssl-cmp, ki podpira tudi format CRMF (RFC 4211) in pošiljanje zahtev prek HTTP/HTTPS (RFC 6712).
  • Implementiran je bil polnopravni odjemalec za protokola HTTP in HTTPS, ki podpira metodi GET in POST, preusmeritev zahtev, delo prek proxyja, kodiranje ASN.1 in obdelavo časovne omejitve.
  • Dodan je bil nov EVP_MAC (API kode za preverjanje pristnosti sporočila), ki olajša dodajanje novih izvedb lažnih vstavkov.
  • Predlaga se nov programski vmesnik za generiranje ključev - EVP_KDF (Key Derivation Function API), ki poenostavlja dodajanje novih implementacij KDF in PRF. Stari API EVP_PKEY, prek katerega so bili na voljo algoritmi scrypt, TLS1 PRF in HKDF, je bil preoblikovan v obliki plasti, implementirane na vrhu API-jev EVP_KDF in EVP_MAC.
  • Izvedba protokola TLS omogoča uporabo odjemalca in strežnika TLS, vgrajenega v jedro Linuxa, za pospešitev operacij. Če želite omogočiti implementacijo TLS, ki jo zagotavlja jedro Linuxa, morate omogočiti možnost "SSL_OP_ENABLE_KTLS" ali nastavitev "enable-ktls".
  • Dodana podpora za nove algoritme:
    • Algoritma za generiranje ključev (KDF) sta »SINGLE STEP« in »SSH«.
    • Simulirani algoritmi vstavljanja (MAC) so »GMAC« in »KMAC«.
    • Algoritem enkapsulacije ključa RSA (KEM) "RSASVE".
    • Algoritem šifriranja "AES-SIV" (RFC-8452).
    • Dodani klici v API EVP s podporo za inverzne šifre z uporabo algoritma AES za šifriranje ključev (Key Wrap): »AES-128-WRAP-INV«, »AES-192-WRAP-INV«, »AES-256-WRAP- INV«, »AES-128-WRAP-PAD-INV«, »AES-192-WRAP-PAD-INV« in »AES-256-WRAP-PAD-INV«.
    • Dodana podpora za algoritme izposoje šifriranih besedil (CTS) v EVP API: »AES-128-CBC-CTS«, »AES-192-CBC-CTS«, »AES-256-CBC-CTS«, »CAMELLIA-128-CBC -CTS” ", "CAMELLIA-192-CBC-CTS" in "CAMELLIA-256-CBC-CTS".
    • Dodana podpora za digitalne podpise CAdES-BES (RFC 5126).
    • AES_GCM implementira parameter AuthEnvelopedData (RFC 5083), da omogoči šifriranje in dešifriranje sporočil, overjenih in šifriranih z načinom AES GCM.
  • Funkciji PKCS7_get_octet_string in PKCS7_type_is_other sta bili dodani v javni API.
  • API PKCS#12 nadomešča privzete algoritme, uporabljene v funkciji PKCS12_create(), s PBKDF2 in AES ter uporablja algoritem SHA-256 za izračun MAC. Za obnovitev preteklega vedenja je na voljo možnost "-legacy". Dodano veliko število novih razširjenih klicev v PKCS12_*_ex, PKCS5_*_ex in PKCS8_*_ex, kot sta PKCS12_add_key_ex().PKCS12_create_ex() in PKCS12_decrypt_skey_ex().
  • Za platformo Windows je bila dodana podpora za sinhronizacijo niti z uporabo mehanizma SRWLock.
  • Dodan nov API za sledenje, omogočen prek parametra enable-trace.
  • Obseg ključev, podprtih v funkcijah EVP_PKEY_public_check() in EVP_PKEY_param_check(), je bil razširjen: RSA, DSA, ED25519, X25519, ED448 in X448.
  • Podsistem RAND_DRBG je bil odstranjen, nadomeščen z API-jem EVP_RAND. Funkciji FIPS_mode() in FIPS_mode_set() sta bili odstranjeni.
  • Velik del API-ja je postal zastarel – uporaba zastarelih klicev v projektni kodi bo povzročila opozorila med prevajanjem. Vključno z nizkonivojskimi API-ji, povezanimi z določenimi implementacijami algoritmov (na primer AES_set_encrypt_key in AES_encrypt), so uradno razglasili za zastarele. Uradna podpora v OpenSSL 3.0.0 je zdaj na voljo samo za API-je EVP na visoki ravni, ki so izvzeti iz posameznih vrst algoritmov (ta API vključuje na primer funkcije EVP_EncryptInit_ex, EVP_EncryptUpdate in EVP_EncryptFinal). Zastareli API-ji bodo odstranjeni v eni od naslednjih večjih izdaj. Izvedbe podedovanih algoritmov, kot sta MD2 in DES, ki so na voljo prek API-ja EVP, so bile premaknjene v ločen »podedovani« modul, ki je privzeto onemogočen.
  • Dokumentacija in nabor testov sta bila znatno razširjena. V primerjavi z vejo 1.1.1 se je obseg dokumentacije povečal za 94 %, velikost kode testne zbirke pa za 54 %.

Vir: opennet.ru

Dodaj komentar