OpenSSL 3.0.0 Kriptografiese Biblioteekvrystelling

Na drie jaar van ontwikkeling en 19 toetsvrystellings, is die OpenSSL 3.0.0-biblioteek vrygestel met die implementering van die SSL/TLS-protokolle en verskeie enkripsiealgoritmes. Die nuwe tak sluit veranderinge in wat terugwaartse versoenbaarheid op die API- en ABI-vlak breek, maar die veranderinge sal nie die werking van die meeste toepassings beïnvloed wat 'n herbou vereis om vanaf OpenSSL 1.1.1 te migreer nie. Die vorige tak van OpenSSL 1.1.1 sal tot September 2023 ondersteun word.

'n Beduidende verandering in die weergawenommer is as gevolg van die oorgang na die tradisionele "Major.Minor.Patch"-nommering. Van nou af sal die eerste syfer (Major) in die weergawenommer slegs verander as versoenbaarheid op die API/ABI-vlak gebreek word, en die tweede (Minor) sal verander wanneer funksionaliteit verhoog word sonder om die API/ABI te verander. Korrektiewe opdaterings sal afgelewer word met 'n verandering na die derde syfer (Patch). Die nommer 3.0.0 onmiddellik na 1.1.1 is gekies om oorvleueling te vermy met die FIPS-module wat tans ontwikkel word vir OpenSSL, waarvoor die 2.x-nommering gebruik is.

Die tweede belangrike verandering vir die projek was die oorgang van 'n dubbele lisensie (OpenSSL en SSLeay) na die Apache 2.0-lisensie. Die vorige eie OpenSSL-lisensie was gebaseer op die teks van die erfenis Apache 1.0-lisensie en vereis eksplisiete vermelding van OpenSSL in bemarkingsmateriaal wanneer OpenSSL-biblioteke gebruik word, sowel as 'n spesiale kennisgewing as OpenSSL as deel van die produk verskaf is. Hierdie vereistes het die ou lisensie onversoenbaar met die GPL gemaak, wat dit moeilik gemaak het om OpenSSL in GPL-gelisensieerde projekte te gebruik. Om hierdie onversoenbaarheid te omseil, is GPL-projekte gedwing om spesifieke lisensie-ooreenkomste te gebruik waarin die hoofteks van die GPL aangevul is met 'n klousule wat uitdruklik toegelaat het dat die toepassing aan die OpenSSL-biblioteek gekoppel word en genoem het dat die vereistes van die GPL nie van toepassing op koppeling met OpenSSL.

In vergelyking met die OpenSSL 1.1.1-tak, het OpenSSL 3.0.0 meer as 7500 350 veranderinge bygevoeg wat deur 3.0.0 ontwikkelaars bygedra is. Belangrikste innovasies van OpenSSL XNUMX:

  • ’n Nuwe FIPS-module is voorgestel, insluitend die implementering van kriptografiese algoritmes wat aan die FIPS 140-2-sekuriteitstandaard voldoen (die sertifiseringsproses vir die module is geskeduleer om hierdie maand te begin, en FIPS 140-2-sertifisering word volgende jaar verwag). Die nuwe module is baie makliker om te gebruik en om dit aan baie toepassings te koppel sal nie moeiliker wees as om die konfigurasielêer te verander nie. By verstek is die FIPS-module gedeaktiveer en vereis dat die enable-fips opsie geaktiveer word.
  • libcrypto implementeer die konsep van inpropbare verskaffers, wat die konsep van enjins vervang het (die ENGINE API is afgekeur). Met die hulp van verskaffers kan u u eie implementerings van algoritmes byvoeg vir bewerkings soos enkripsie, dekripsie, sleutelgenerering, MAC-berekening, skepping en verifikasie van digitale handtekeninge. Dit is moontlik om beide nuwes te koppel en alternatiewe implementerings van reeds ondersteunde algoritmes te skep (by verstek word die verskaffer wat in OpenSSL ingebou is, nou vir elke algoritme gebruik).
  • Bygevoeg ondersteuning vir die Certificate Management Protocol (RFC 4210), wat gebruik kan word om sertifikate van 'n CA-bediener aan te vra, sertifikate op te dateer en sertifikate te herroep. Werk met CMP word uitgevoer met behulp van die nuwe openssl-cmp-nutsding, wat ook die CRMF-formaat ondersteun (RFC 4211) en die stuur van versoeke via HTTP/HTTPS (RFC 6712).
  • 'n Volwaardige kliënt vir die HTTP- en HTTPS-protokolle is geïmplementeer, wat die GET- en POST-metodes ondersteun, versoek herleiding, werk deur 'n instaanbediener, ASN.1-enkodering en uittelverwerking.
  • 'n Nuwe EVP_MAC (Message Authentication Code API) is bygevoeg om dit makliker te maak om nuwe implementerings van skyn-insetsels by te voeg.
  • 'n Nuwe sagteware-koppelvlak vir die generering van sleutels word voorgestel - EVP_KDF (Key Derivation Function API), wat die byvoeging van nuwe implementerings van KDF en PRF vergemaklik. Die ou EVP_PKEY API, waardeur die scrypt, TLS1 PRF en HKDF algoritmes beskikbaar was, is herontwerp in die vorm van 'n laag wat bo-op die EVP_KDF en EVP_MAC API's geïmplementeer is.
  • Die implementering van die TLS-protokol bied die vermoë om die TLS-kliënt en bediener wat in die Linux-kern ingebou is te gebruik om bedrywighede te bespoedig. Om die TLS-implementering wat deur die Linux-kern verskaf word, te aktiveer, moet jy die "SSL_OP_ENABLE_KTLS"-opsie of die "enable-ktls"-instelling aktiveer.
  • Bygevoeg ondersteuning vir nuwe algoritmes:
    • Sleutelgenereringsalgoritmes (KDF) is "ENKEL STAP" en "SSH".
    • Gesimuleerde invoegingsalgoritmes (MAC) is "GMAC" en "KMAC".
    • RSA Key Encapsulation Algoritme (KEM) "RSASVE".
    • Enkripsie-algoritme "AES-SIV" (RFC-8452).
    • Oproepe by die EVP API gevoeg met ondersteuning vir inverse syfers wat die AES-algoritme gebruik om sleutels te enkripteer (Key Wrap): "AES-128-WRAP-INV", "AES-192-WRAP-INV", "AES-256-WRAP- INV", "AES-128-WRAP-PAD-INV", "AES-192-WRAP-PAD-INV" en "AES-256-WRAP-PAD-INV".
    • Bygevoeg ondersteuning vir ciphertext leen (CTS) algoritmes by die EVP API: "AES-128-CBC-CTS", "AES-192-CBC-CTS", "AES-256-CBC-CTS", "CAMELLIA-128-CBC -CTS", "CAMELLIA-192-CBC-CTS" en "CAMELLIA-256-CBC-CTS".
    • Bygevoeg ondersteuning vir CAdES-BES digitale handtekeninge (RFC 5126).
    • AES_GCM implementeer die AuthEnvelopedData (RFC 5083) parameter om enkripsie en dekripsie moontlik te maak van boodskappe wat gewaarmerk en geïnkripteer is met die AES GCM-modus.
  • Die PKCS7_get_octet_string en PKCS7_type_is_other funksies is by die publieke API gevoeg.
  • Die PKCS#12 API vervang die verstek algoritmes wat in die PKCS12_create() funksie gebruik word met PBKDF2 en AES, en gebruik die SHA-256 algoritme om MAC te bereken. Om vorige gedrag te herstel, word die "-legacy" opsie verskaf. Het 'n groot aantal nuwe uitgebreide oproepe by PKCS12_*_ex, PKCS5_*_ex en PKCS8_*_ex gevoeg, soos PKCS12_add_key_ex().PKCS12_create_ex() en PKCS12_decrypt_skey_ex().
  • Vir die Windows-platform is ondersteuning vir draadsinchronisasie met die SRWLock-meganisme bygevoeg.
  • Het 'n nuwe opsporings-API bygevoeg, geaktiveer via die enable-trace-parameter.
  • Die reeks sleutels wat in die EVP_PKEY_public_check()- en EVP_PKEY_param_check()-funksies ondersteun word, is uitgebrei: RSA, DSA, ED25519, X25519, ED448 en X448.
  • Die RAND_DRBG-substelsel is verwyder, vervang deur die EVP_RAND API. Die FIPS_mode() en FIPS_mode_set() funksies is verwyder.
  • 'n Beduidende deel van die API is verouderd gemaak - die gebruik van verouderde oproepe in projekkode sal waarskuwings tydens samestelling tot gevolg hê. Insluitend laevlak-API's wat gekoppel is aan sekere implementerings van algoritmes (byvoorbeeld AES_set_encrypt_key en AES_encrypt) is amptelik as verouderd verklaar. Amptelike ondersteuning in OpenSSL 3.0.0 word nou slegs verskaf vir hoëvlak EVP API's wat uit individuele algoritmetipes onttrek word (hierdie API sluit byvoorbeeld die EVP_EncryptInit_ex, EVP_EncryptUpdate en EVP_EncryptFinal funksies in). Verouderde API's sal in een van die volgende groot vrystellings verwyder word. Implementerings van verouderde algoritmes soos MD2 en DES, beskikbaar deur die EVP API, is geskuif na 'n aparte "legacy" module, wat by verstek gedeaktiveer is.
  • Die dokumentasie en toetsreeks is aansienlik uitgebrei. In vergelyking met tak 1.1.1, het die volume dokumentasie met 94% toegeneem, en die grootte van die toetsreekskode het met 54% toegeneem.

Bron: opennet.ru

Voeg 'n opmerking