Na drie jaar ontwikkeling en 19 testversies is de bibliotheek OpenSSL 3.0.0 vrijgegeven, met implementatie van de SSL/TLS-protocollen en verschillende encryptie-algoritmen. Deze nieuwe tak bevat wijzigingen die de achterwaartse compatibiliteit op het niveau van de API en ABI schenden, maar deze wijzigingen zullen de werking van de meeste toepassingen niet beïnvloeden. Voor de migratie van OpenSSL 1.1.1 is het voldoende om opnieuw te compileren. Ondersteuning voor de eerdere tak OpenSSL 1.1.1 zal tot september 2023 beschikbaar zijn.
De significante wijziging van het versienummer is te wijten aan de overstap naar de traditionele nummering 'Major.Minor.Patch'. Het eerste cijfer (Major) in het versienummer zal voortaan alleen veranderen bij het schenden van de compatibiliteit op het niveau van API/ABI, terwijl het tweede cijfer (Minor) zal veranderen bij uitbreiding van functionaliteit zonder de API/ABI te wijzigen. Corrigerende updates zullen worden geleverd met een wijziging van het derde cijfer (Patch). Het nummer 3.0.0 is onmiddellijk gekozen na 1.1.1 om overlap met de in ontwikkeling zijnde FIPS-module voor OpenSSL te vermijden, waarvoor nummering 2.x werd toegepast.
Een tweede belangrijke wijziging voor het project is de overstap van een dubbele licentie (OpenSSL en SSLeay) naar de Apache 2.0-licentie. De eerder gebruikte eigen OpenSSL-licentie was gebaseerd op de tekst van de verouderde Apache 1.0-licentie en vereiste een expliciete vermelding van OpenSSL in promotiematerialen bij het gebruik van OpenSSL-bibliotheken, evenals het toevoegen van een speciale opmerking in het geval dat OpenSSL als onderdeel van een product werd geleverd. Dergelijke vereisten maakten de oude licentie incompatibel met de GPL, wat problemen veroorzaakte bij het gebruik van OpenSSL in projecten met een GPL-licentie. Om deze incompatibiliteit te omzeilen, moesten GPL-projecten specifieke licentieovereenkomsten gebruiken, waarin de hoofdtekst van de GPL werd aangevuld met een clausule die expliciet het koppelen van de toepassing aan de OpenSSL-bibliotheek toestond en vermeldde dat de GPL-eisen niet van toepassing waren op de koppeling met OpenSSL.
In vergelijking met de OpenSSL 1.1.1-tak zijn in OpenSSL 3.0.0 meer dan 7500 wijzigingen door 350 ontwikkelaars aangebracht. De belangrijkste nieuwe functies van OpenSSL 3.0.0:
- Een nieuwe FIPS-module is voorgesteld, die de implementatie van cryptografische algoritmen omvat die voldoen aan de beveiligingsnorm FIPS 140-2 (de certificeringsprocedure voor de module begint deze maand, het verkrijgen van het FIPS 140-2-certificaat wordt volgend jaar verwacht). De nieuwe module is aanzienlijk gebruiksvriendelijker en de aansluiting op veel toepassingen vereist niet meer dan het aanpassen van het configuratiebestand. Standaard is de FIPS-module uitgeschakeld en moet de optie enable-fips worden opgegeven om deze te activeren.
- In libcrypto is het concept van plug-in providers geïmplementeerd, dat het engine-concept (ENGINE API is verouderd) vervangt. Met behulp van providers kunnen eigen implementaties van algoritmen worden toegevoegd voor operaties zoals encryptie, decryptie, sleutelgeneratie, MAC-berekeningen, en het maken en verifiëren van digitale handtekeningen. Zowel nieuwe als alternatieve implementaties van al ondersteunde algoritmen kunnen worden aangemaakt (standaard wordt nu de ingebouwde provider van OpenSSL voor elk algoritme gebruikt).
- Ondersteuning voor het Certificate Management Protocol (CMP, RFC 4210) is toegevoegd, dat kan worden gebruikt om certificaten aan te vragen bij de server de certificeringsinstantie, certificaten bij te werken en certificaten in te trekken. Werken met CMP gebeurt met behulp van de nieuwe utility openssl-cmp, die ook ondersteuning biedt voor het CRMF-formaat (RFC 4211) en het verzenden van aanvragen via HTTP/HTTPS (RFC 6712).
- Een volledige client voor de HTTP- en HTTPS-protocollen is geïmplementeerd, die ondersteuning biedt voor de methoden GET en POST, verzoekomleidingen, werken via proxies, ASN.1-codering en het verwerken van time-outs.
- Een nieuwe API EVP_MAC (Message Authentication Code API) is toegevoegd, die het toevoegen van nieuwe implementaties van MAC's vereenvoudigt.
- Een nieuwe interface voor sleutelgeneratie is voorgesteld — EVP_KDF (Key Derivation Function API), die het toevoegen van nieuwe implementaties van KDF's en PRF's vereenvoudigt. De oude API EVP_PKEY, die toegang bood tot de algoritmen scrypt, TLS1 PRF en HKDF, is herzien in de vorm van een laag die bovenop de API EVP_KDF en EVP_MAC is geïmplementeerd.
- In de implementatie van het TLS-protocol is de mogelijkheid geboden om de ingebouwde TLS-client en -server in de Linux-kernel te gebruiken voor het versnellen van operaties. Om de door de Linux-kernel geleverde TLS-implementatie te gebruiken, moet de optie 'SSL_OP_ENABLE_KTLS' of de instelling 'enable-ktls' worden ingeschakeld.
- Ondersteuning voor nieuwe algoritmen is toegevoegd:
- Sleutelaalgoritmen (KDF) — «SINGLE STEP» en «SSH».
- Verificatie-algoritmen (MAC) — «GMAC» en «KMAC».
- Sleutelincapsuleringsalgoritme RSA (KEM) «RSASVE».
- Versleutelingsalgoritme «AES-SIV» (RFC-8452).
- De API EVP heeft oproepen toegevoegd voor de ondersteuning van inversieve versleuteling die het algoritme AES gebruikt voor het versleutelen van sleutels (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».
- De API EVP heeft ondersteuning toegevoegd voor algoritmen voor het ontlenen van ciphertext (CTS): «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».
- Ondersteuning toegevoegd voor digitale handtekeningen CAdES-BES (RFC 5126).
- In AES_GCM is de parameter AuthEnvelopedData (RFC 5083) geïmplementeerd, wat het mogelijk maakt om berichten die authentiek en versleuteld zijn met het AES GCM-modus te versleutelen en te ontsleutelen.
- Functies PKCS7_get_octet_string en PKCS7_type_is_other zijn in de openbare API opgenomen.
- In de API PKCS#12 zijn de standaardalgoritmen die worden gebruikt in de functie PKCS12_create() vervangen door PBKDF2 en AES, en voor de berekening van MAC is het algoritme SHA-256 gebruikt. Voor het herstellen van het vorige gedrag is de optie «-legacy» voorzien. Een groot aantal nieuwe uitgebreide oproepen PKCS12_*_ex, PKCS5_*_ex en PKCS8_*_ex is toegevoegd, zoals PKCS12_add_key_ex(), PKCS12_create_ex() en PKCS12_decrypt_skey_ex().
- Voor het Windows-platform is ondersteuning toegevoegd voor het synchroniseren van threads met behulp van het SRWLock-mechanisme.
- Een nieuwe API voor tracing is toegevoegd, die is in te schakelen via de parameter enable-trace.
- Het aantal sleutels dat wordt ondersteund in de functies EVP_PKEY_public_check() en EVP_PKEY_param_check() is uitgebreid: RSA, DSA, ED25519, X25519, ED448 en X448.
- De ondermodule RAND_DRBG is verwijderd, waarvoor de API EVP_RAND is voorgesteld. De functies FIPS_mode() en FIPS_mode_set() zijn verwijderd.
- Een aanzienlijk deel van de API is verouderd geworden — het gebruik van verouderde aanroepen in de projectcode zal waarschuwingen genereren tijdens de compilatie. Onder andere zijn laag-niveau API's, die gebonden zijn aan specifieke algoritme-implementaties (zoals AES_set_encrypt_key en AES_encrypt), officieel als verouderd verklaard. Officiële ondersteuning in OpenSSL 3.0.0 wordt nu alleen aangeboden voor hoog-niveau API's EVP, die zijn abstractie van specifieke algoritmetypen. Tot deze API behoren bijvoorbeeld de functies EVP_EncryptInit_ex, EVP_EncryptUpdate en EVP_EncryptFinal. In een van de volgende belangrijke releases zullen de verouderde API's worden verwijderd. Implementaties van verouderde algoritmen zoals MD2 en DES, die beschikbaar zijn via de EVP API, zijn overgebracht naar een aparte 'legacy' module, die standaard is uitgeschakeld.
- De documentatie en de testset zijn aanzienlijk uitgebreid. Vergeleken met versie 1.1.1 is het volume van de documentatie met 94% toegenomen en de grootte van de testsetcode met 54%.
Bron: opennet.ru
