OpenSSL 3.0.0 kriptogrāfijas bibliotēkas laidiens

Pēc trīs gadu izstrādes un 19 testa laidieniem tika izlaista OpenSSL 3.0.0 bibliotēka, kurā tika ieviesti SSL/TLS protokoli un dažādi šifrēšanas algoritmi. Jaunajā filiālē ir iekļautas izmaiņas, kas izjauc atpakaļejošu saderību API un ABI līmenī, taču izmaiņas neietekmēs lielāko daļu lietojumprogrammu darbību, kurām nepieciešama pārbūve, lai migrētu no OpenSSL 1.1.1. Iepriekšējā OpenSSL 1.1.1 filiāle tiks atbalstīta līdz 2023. gada septembrim.

Būtiskas izmaiņas versijas numurā ir saistītas ar pāreju uz tradicionālo “Major.Minor.Patch” numerāciju. Turpmāk pirmais cipars (Major) versijas numurā mainīsies tikai tad, ja saderība ir bojāta API/ABI līmenī, bet otrais (Minor) mainīsies, kad tiks palielināta funkcionalitāte, nemainot API/ABI. Koriģējošie atjauninājumi tiks piegādāti ar izmaiņām trešajā ciparā (Patch). Numurs 3.0.0 uzreiz aiz 1.1.1 tika izvēlēts, lai izvairītos no pārklāšanās ar pašlaik izstrādāto FIPS moduli OpenSSL, kuram tika izmantota numerācija 2.x.

Otra svarīgā projekta izmaiņa bija pāreja no dubultās licences (OpenSSL un SSLeay) uz Apache 2.0 licenci. Iepriekšējā patentētā OpenSSL licence bija balstīta uz mantotās Apache 1.0 licences tekstu, un, izmantojot OpenSSL bibliotēkas, mārketinga materiālos bija skaidri jānorāda OpenSSL, kā arī īpašs paziņojums, ja OpenSSL tika nodrošināts kā daļa no produkta. Šīs prasības padarīja veco licenci nesaderīgu ar GPL, apgrūtinot OpenSSL izmantošanu GPL licencētos projektos. Lai apietu šo nesaderību, GPL projekti bija spiesti izmantot īpašus licences līgumus, kuros GPL pamatteksts tika papildināts ar punktu, kas nepārprotami ļāva lietojumprogrammu saistīt ar OpenSSL bibliotēku un pieminēja, ka GPL prasības neatbilst. attiecas uz saistīšanu ar OpenSSL.

Salīdzinājumā ar OpenSSL 1.1.1 atzaru, OpenSSL 3.0.0 pievienoja vairāk nekā 7500 izmaiņas, ko veica 350 izstrādātāji. Galvenie OpenSSL 3.0.0 jauninājumi:

  • Piedāvāts jauns FIPS modulis, tostarp kriptogrāfijas algoritmu ieviešana, kas atbilst FIPS 140-2 drošības standartam (šomēnes plānots uzsākt moduļa sertifikācijas procesu, bet FIPS 140-2 sertifikācija gaidāma nākamgad). Jaunais modulis ir daudz vienkāršāk lietojams, un tā savienošana ar daudzām lietojumprogrammām nebūs grūtāka kā konfigurācijas faila maiņa. Pēc noklusējuma FIPS modulis ir atspējots, un ir jāiespējo opcija enable-fips.
  • libcrypto ievieš pievienojamo pakalpojumu sniedzēju koncepciju, kas aizstāja dzinēju koncepciju (ENGINE API ir novecojusi). Ar pakalpojumu sniedzēju palīdzību jūs varat pievienot savus algoritmus tādām darbībām kā šifrēšana, atšifrēšana, atslēgu ģenerēšana, MAC aprēķins, ciparparakstu izveide un pārbaude. Ir iespējams gan pieslēgt jaunus, gan izveidot alternatīvas jau atbalstīto algoritmu implementācijas (pēc noklusējuma katram algoritmam tagad tiek izmantots OpenSSL iebūvētais nodrošinātājs).
  • Pievienots atbalsts sertifikātu pārvaldības protokolam (RFC 4210), ko var izmantot, lai pieprasītu sertifikātus no CA servera, atjauninātu sertifikātus un atsauktu sertifikātus. Darbs ar CMP tiek veikts, izmantojot jauno openssl-cmp utilītu, kas atbalsta arī CRMF formātu (RFC 4211) un pieprasījumu sūtīšanu, izmantojot HTTP/HTTPS (RFC 6712).
  • Ir ieviests pilnvērtīgs HTTP un HTTPS protokolu klients, kas atbalsta GET un POST metodes, pieprasījumu pāradresāciju, darbu caur starpniekserveri, ASN.1 kodējumu un taimauta apstrādi.
  • Ir pievienots jauns EVP_MAC (Ziņojuma autentifikācijas koda API), lai būtu vieglāk pievienot jaunas imitācijas ievietošanas versijas.
  • Tiek piedāvāts jauns programmatūras interfeiss atslēgu ģenerēšanai - EVP_KDF (Key Derivation Function API), kas vienkāršo jaunu KDF un PRF implementāciju pievienošanu. Vecā EVP_PKEY API, caur kuru bija pieejami šifrēšanas, TLS1 PRF un HKDF algoritmi, ir pārveidota slāņa veidā, kas ieviests virs EVP_KDF un EVP_MAC API.
  • TLS protokola ieviešana nodrošina iespēju izmantot Linux kodolā iebūvēto TLS klientu un serveri, lai paātrinātu darbības. Lai iespējotu Linux kodola nodrošināto TLS ieviešanu, ir jāiespējo opcija "SSL_OP_ENABLE_KTLS" vai iestatījums "enable-ktls".
  • Pievienots atbalsts jauniem algoritmiem:
    • Atslēgu ģenerēšanas algoritmi (KDF) ir “SINGLE STEP” un “SSH”.
    • Simulēti ievietošanas algoritmi (MAC) ir “GMAC” un “KMAC”.
    • RSA atslēgas iekapsulēšanas algoritms (KEM) "RSASVE".
    • Šifrēšanas algoritms "AES-SIV" (RFC-8452).
    • Pievienoti izsaukumi EVP API, kas atbalsta apgrieztos šifrus, izmantojot AES algoritmu atslēgu šifrēšanai (Key Wrap): “AES-128-WRAP-INV”, “AES-192-WRAP-INV”, “AES-256-WRAP-INV”. ”, "AES-128-WRAP-PAD-INV", "AES-192-WRAP-PAD-INV" un "AES-256-WRAP-PAD-INV".
    • EVP API ir pievienots atbalsts šifrētā teksta aizņēmuma (CTS) algoritmiem: “AES-128-CBC-CTS”, “AES-192-CBC-CTS”, “AES-256-CBC-CTS”, “CAMELLIA-128-CBC -CTS", "CAMELLIA-192-CBC-CTS" un "CAMELLIA-256-CBC-CTS".
    • Pievienots atbalsts CAdES-BES ciparparakstiem (RFC 5126).
    • AES_GCM ievieš parametru AuthEnvelopedData (RFC 5083), lai iespējotu šifrēšanu un atšifrēšanu ziņojumiem, kas autentificēti un šifrēti, izmantojot AES GCM režīmu.
  • Publiskajam API ir pievienotas funkcijas PKCS7_get_octet_string un PKCS7_type_is_other.
  • PKCS#12 API aizstāj noklusējuma algoritmus, kas tiek izmantoti funkcijā PKCS12_create() ar PBKDF2 un AES, un izmanto SHA-256 algoritmu, lai aprēķinātu MAC. Lai atjaunotu iepriekšējo darbību, tiek nodrošināta opcija "-legacy". Pievienots liels skaits jaunu paplašinātu zvanu uz PKCS12_*_ex, PKCS5_*_ex un PKCS8_*_ex, piemēram, PKCS12_add_key_ex().PKCS12_create_ex() un PKCS12_decrypt_skey_ex().
  • Windows platformai ir pievienots atbalsts pavedienu sinhronizācijai, izmantojot SRWLock mehānismu.
  • Pievienota jauna izsekošanas API, kas iespējota, izmantojot parametru Enable-trace.
  • Funkcijās EVP_PKEY_public_check() un EVP_PKEY_param_check() atbalstīto atslēgu diapazons ir paplašināts: RSA, DSA, ED25519, X25519, ED448 un X448.
  • Apakšsistēma RAND_DRBG ir noņemta, aizstāta ar EVP_RAND API. Funkcijas FIPS_mode() un FIPS_mode_set() ir noņemtas.
  • Ievērojama API daļa ir kļuvusi novecojusi — novecojušu izsaukumu izmantošana projekta kodā radīs brīdinājumus kompilācijas laikā. Tostarp zema līmeņa API, kas saistītas ar noteiktām algoritmu ieviešanām (piemēram, AES_set_encrypt_key un AES_encrypt), ir oficiāli pasludinātas par novecojušām. OpenSSL 3.0.0 oficiālais atbalsts tagad tiek nodrošināts tikai augsta līmeņa EVP API, kas ir abstrahēti no atsevišķiem algoritmu veidiem (šajā API ietilpst, piemēram, funkcijas EVP_EncryptInit_ex, EVP_EncryptUpdate un EVP_EncryptFinal). Novecojušās API tiks noņemtas vienā no nākamajiem lielākajiem laidieniem. Mantoto algoritmu, piemēram, MD2 un DES, ieviešanas, kas pieejamas, izmantojot EVP API, ir pārvietotas uz atsevišķu "mantoto" moduli, kas pēc noklusējuma ir atspējots.
  • Dokumentācija un testu komplekts ir ievērojami paplašināts. Salīdzinot ar 1.1.1. nozari, dokumentācijas apjoms ir pieaudzis par 94%, un testa komplekta koda lielums ir palielinājies par 54%.

Avots: opennet.ru

Pievieno komentāru