Izdanje kriptografske knjižnice OpenSSL 3.0.0

Nakon tri godine razvoja i 19 testnih izdanja, objavljena je biblioteka OpenSSL 3.0.0 s implementacijom SSL/TLS protokola i raznih algoritama šifriranja. Nova grana uključuje promjene koje prekidaju kompatibilnost unatrag na API i ABI razini, ali promjene neće utjecati na rad većine aplikacija koje zahtijevaju ponovnu izgradnju za migraciju s OpenSSL 1.1.1. Prethodna grana OpenSSL-a 1.1.1 bit će podržana do rujna 2023.

Značajna promjena u broju verzije nastala je zbog prijelaza na tradicionalno numeriranje "Major.Minor.Patch". Od sada će se prva znamenka (Major) u broju verzije promijeniti samo ako je kompatibilnost prekinuta na API/ABI razini, a druga (Minor) će se promijeniti kada se funkcionalnost poveća bez promjene API-ja/ABI-ja. Korektivna ažuriranja bit će isporučena s promjenom treće znamenke (Patch). Broj 3.0.0 odmah nakon 1.1.1 odabran je kako bi se izbjegla preklapanja s FIPS modulom koji je trenutno u razvoju za OpenSSL, za koji je korišteno numeriranje 2.x.

Druga važna promjena za projekt bio je prijelaz s dualne licence (OpenSSL i SSLeay) na Apache 2.0 licencu. Prethodna vlasnička OpenSSL licenca temeljila se na tekstu naslijeđene Apache 1.0 licence i zahtijevala je eksplicitno spominjanje OpenSSL-a u marketinškim materijalima prilikom korištenja OpenSSL biblioteka, kao i posebnu obavijest ako je OpenSSL bio osiguran kao dio proizvoda. Ovi zahtjevi učinili su staru licencu nekompatibilnom s GPL-om, što je otežalo korištenje OpenSSL-a u projektima licenciranim GPL-om. Kako bi se zaobišla ova nekompatibilnost, GPL projekti bili su prisiljeni koristiti posebne licencne ugovore u kojima je glavni tekst GPL-a dopunjen klauzulom koja izričito dopušta povezivanje aplikacije s OpenSSL bibliotekom i spominje da zahtjevi GPL-a nisu primjenjuju se na povezivanje s OpenSSL-om.

U usporedbi s ogrankom OpenSSL 1.1.1, OpenSSL 3.0.0 dodao je više od 7500 promjena koje je doprinijelo 350 programera. Glavne inovacije OpenSSL 3.0.0:

  • Predložen je novi FIPS modul, uključujući implementaciju kriptografskih algoritama koji su u skladu sa sigurnosnim standardom FIPS 140-2 (proces certifikacije za modul trebao bi započeti ovaj mjesec, a certifikacija FIPS 140-2 očekuje se sljedeće godine). Novi modul mnogo je lakši za korištenje i njegovo povezivanje s mnogim aplikacijama neće biti ništa teže od promjene konfiguracijske datoteke. Prema zadanim postavkama, FIPS modul je onemogućen i zahtijeva da opcija enable-fips bude omogućena.
  • libcrypto implementira koncept pluggable providera, koji je zamijenio koncept motora (ENGINE API je zastario). Uz pomoć pružatelja usluga, možete dodati vlastite implementacije algoritama za takve operacije kao što su enkripcija, dešifriranje, generiranje ključeva, MAC izračun, stvaranje i provjera digitalnih potpisa. Moguće je spojiti nove i stvoriti alternativne implementacije već podržanih algoritama (prema zadanim postavkama, pružatelj ugrađen u OpenSSL sada se koristi za svaki algoritam).
  • Dodana podrška za Protokol upravljanja certifikatima (RFC 4210), koji se može koristiti za traženje certifikata od CA poslužitelja, ažuriranje certifikata i opoziv certifikata. Rad s CMP-om provodi se pomoću novog uslužnog programa openssl-cmp, koji također podržava CRMF format (RFC 4211) i slanje zahtjeva putem HTTP/HTTPS (RFC 6712).
  • Implementiran je potpuni klijent za HTTP i HTTPS protokole, koji podržava metode GET i POST, preusmjeravanje zahtjeva, rad preko proxyja, ASN.1 kodiranje i obradu vremenskog ograničenja.
  • Dodan je novi EVP_MAC (API koda za provjeru autentičnosti poruke) kako bi se olakšalo dodavanje novih implementacija lažnih umetaka.
  • Predlaže se novo softversko sučelje za generiranje ključeva - EVP_KDF (Key Derivation Function API), koje pojednostavljuje dodavanje novih implementacija KDF-a i PRF-a. Stari EVP_PKEY API, preko kojeg su bili dostupni scrypt, TLS1 PRF i HKDF algoritmi, redizajniran je u obliku sloja implementiranog povrh EVP_KDF i EVP_MAC API-ja.
  • Implementacija TLS protokola pruža mogućnost korištenja TLS klijenta i poslužitelja ugrađenih u Linux kernel za ubrzavanje operacija. Da biste omogućili implementaciju TLS-a koju pruža Linux kernel, morate omogućiti opciju "SSL_OP_ENABLE_KTLS" ili postavku "enable-ktls".
  • Dodana podrška za nove algoritme:
    • Algoritmi za generiranje ključeva (KDF) su “SINGLE STEP” i “SSH”.
    • Simulirani algoritmi umetanja (MAC) su "GMAC" i "KMAC".
    • RSA algoritam enkapsulacije ključa (KEM) "RSASVE".
    • Algoritam šifriranja "AES-SIV" (RFC-8452).
    • Dodani pozivi EVP API-ju koji podržavaju inverzne šifre pomoću AES algoritma za šifriranje ključeva (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".
    • Dodana podrška za algoritme posuđivanja šifriranog teksta (CTS) u EVP API: “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".
    • Dodana podrška za CAdES-BES digitalne potpise (RFC 5126).
    • AES_GCM implementira parametar AuthEnvelopedData (RFC 5083) kako bi omogućio šifriranje i dešifriranje poruka provjerenih i šifriranih korištenjem AES GCM načina.
  • Funkcije PKCS7_get_octet_string i PKCS7_type_is_other dodane su u javni API.
  • PKCS#12 API zamjenjuje zadane algoritme koji se koriste u funkciji PKCS12_create() s PBKDF2 i AES i koristi algoritam SHA-256 za izračunavanje MAC-a. Za vraćanje prethodnog ponašanja dostupna je opcija "-legacy". Dodan je veliki broj novih proširenih poziva za PKCS12_*_ex, PKCS5_*_ex i PKCS8_*_ex, kao što su PKCS12_add_key_ex().PKCS12_create_ex() i PKCS12_decrypt_skey_ex().
  • Za Windows platformu dodana je podrška za sinkronizaciju niti pomoću mehanizma SRWLock.
  • Dodan je novi API za praćenje, omogućen putem parametra enable-trace.
  • Raspon ključeva podržanih u funkcijama EVP_PKEY_public_check() i EVP_PKEY_param_check() je proširen: RSA, DSA, ED25519, X25519, ED448 i X448.
  • Podsustav RAND_DRBG je uklonjen, zamijenjen API-jem EVP_RAND. Uklonjene su funkcije FIPS_mode() i FIPS_mode_set().
  • Značajan dio API-ja postao je zastario - korištenje zastarjelih poziva u kodu projekta rezultirat će upozorenjima tijekom kompilacije. Uključivanje API-ja niske razine povezanih s određenim implementacijama algoritama (na primjer, AES_set_encrypt_key i AES_encrypt) službeno je proglašeno zastarjelim. Službena podrška u OpenSSL 3.0.0 sada je dostupna samo za EVP API-je visoke razine koji su apstrahirani iz pojedinačnih vrsta algoritama (ovaj API uključuje, na primjer, funkcije EVP_EncryptInit_ex, EVP_EncryptUpdate i EVP_EncryptFinal). Zastarjeli API-ji bit će uklonjeni u jednom od sljedećih velikih izdanja. Implementacije naslijeđenih algoritama kao što su MD2 i DES, dostupnih putem EVP API-ja, premještene su u zasebni "naslijeđeni" modul, koji je prema zadanim postavkama onemogućen.
  • Dokumentacija i testni paket značajno su prošireni. U usporedbi s granom 1.1.1, obujam dokumentacije porastao je za 94%, a veličina koda paketa testova porasla je za 54%.

Izvor: opennet.ru

Dodajte komentar