OpenSSL 3.0.0 cryptografische bibliotheek release

Na drie jaar ontwikkeling en 19 testreleases werd de OpenSSL 3.0.0-bibliotheek uitgebracht met de implementatie van de SSL/TLS-protocollen en verschillende versleutelingsalgoritmen. De nieuwe tak bevat wijzigingen die de achterwaartse compatibiliteit op API- en ABI-niveau verbreken, maar de wijzigingen hebben geen invloed op de werking van de meeste applicaties die opnieuw moeten worden opgebouwd om te migreren van OpenSSL 1.1.1. De vorige tak van OpenSSL 1.1.1 wordt ondersteund tot september 2023.

Een significante verandering in het versienummer is het gevolg van de overgang naar de traditionele “Major.Minor.Patch”-nummering. Vanaf nu zal het eerste cijfer (Major) in het versienummer alleen veranderen als de compatibiliteit op API/ABI-niveau wordt verbroken, en het tweede (Minor) zal veranderen als de functionaliteit wordt vergroot zonder de API/ABI te veranderen. Corrigerende updates worden geleverd met een wijziging in het derde cijfer (Patch). Om overlappingen met de momenteel in ontwikkeling zijnde FIPS-module voor OpenSSL, waarvoor de 3.0.0.x-nummering werd gebruikt, werd gekozen voor het nummer 1.1.1 direct na 2.

De tweede belangrijke verandering voor het project was de overgang van een dubbele licentie (OpenSSL en SSLeay) naar de Apache 2.0-licentie. De vorige eigen OpenSSL-licentie was gebaseerd op de tekst van de oudere Apache 1.0-licentie en vereiste expliciete vermelding van OpenSSL in marketingmateriaal bij het gebruik van OpenSSL-bibliotheken, evenals een speciale kennisgeving als OpenSSL werd geleverd als onderdeel van het product. Deze vereisten maakten de oude licentie incompatibel met de GPL, waardoor het moeilijk werd om OpenSSL te gebruiken in projecten met een GPL-licentie. Om deze incompatibiliteit te omzeilen, werden GPL-projecten gedwongen om specifieke licentieovereenkomsten te gebruiken waarin de hoofdtekst van de GPL werd aangevuld met een clausule die expliciet toestond dat de applicatie werd gekoppeld aan de OpenSSL-bibliotheek en vermeldde dat de vereisten van de GPL dat niet deden. gelden voor koppeling met OpenSSL.

Vergeleken met de OpenSSL 1.1.1-tak heeft OpenSSL 3.0.0 meer dan 7500 wijzigingen toegevoegd, bijgedragen door 350 ontwikkelaars. Belangrijkste innovaties van OpenSSL 3.0.0:

  • Er is een nieuwe FIPS-module voorgesteld, inclusief de implementatie van cryptografische algoritmen die voldoen aan de FIPS 140-2-beveiligingsstandaard (het certificeringsproces voor de module begint deze maand en de FIPS 140-2-certificering wordt volgend jaar verwacht). De nieuwe module is veel eenvoudiger te gebruiken en het verbinden met veel applicaties zal niet moeilijker zijn dan het wijzigen van het configuratiebestand. Standaard is de FIPS-module uitgeschakeld en moet de optie enable-fips zijn ingeschakeld.
  • libcrypto implementeert het concept van plug-in providers, die het concept van motoren hebben vervangen (de ENGINE API is verouderd). Met de hulp van providers kunt u uw eigen implementaties van algoritmen toevoegen voor bewerkingen als encryptie, decryptie, sleutelgeneratie, MAC-berekening, creatie en verificatie van digitale handtekeningen. Het is mogelijk om zowel nieuwe aan te sluiten als alternatieve implementaties van reeds ondersteunde algoritmen te creëren (standaard wordt nu voor elk algoritme de in OpenSSL ingebouwde provider gebruikt).
  • Ondersteuning toegevoegd voor het Certificate Management Protocol (RFC 4210), dat kan worden gebruikt om certificaten aan te vragen bij een CA-server, certificaten bij te werken en certificaten in te trekken. Het werken met CMP gebeurt met behulp van het nieuwe hulpprogramma openssl-cmp, dat ook het CRMF-formaat (RFC 4211) en het verzenden van verzoeken via HTTP/HTTPS (RFC 6712) ondersteunt.
  • Er is een volwaardige client voor de HTTP- en HTTPS-protocollen geïmplementeerd, die de GET- en POST-methoden ondersteunt, omleiding van verzoeken, werkt via een proxy, ASN.1-codering en time-outverwerking.
  • Er is een nieuwe EVP_MAC (Message Authentication Code API) toegevoegd om het gemakkelijker te maken om nieuwe implementaties van nep-invoegingen toe te voegen.
  • Er wordt een nieuwe software-interface voor het genereren van sleutels voorgesteld - EVP_KDF (Key Derivation Function API), die de toevoeging van nieuwe implementaties van KDF en PRF vereenvoudigt. De oude EVP_PKEY API, waarmee de scrypt-, TLS1 PRF- en HKDF-algoritmen beschikbaar waren, is opnieuw ontworpen in de vorm van een laag die bovenop de EVP_KDF- en EVP_MAC-API's is geïmplementeerd.
  • De implementatie van het TLS-protocol biedt de mogelijkheid om de TLS-client en -server te gebruiken die in de Linux-kernel zijn ingebouwd om de bewerkingen te versnellen. Om de TLS-implementatie van de Linux-kernel in te schakelen, moet u de optie "SSL_OP_ENABLE_KTLS" of de instelling "enable-ktls" inschakelen.
  • Ondersteuning toegevoegd voor nieuwe algoritmen:
    • Algoritmen voor het genereren van sleutels (KDF) zijn “SINGLE STEP” en “SSH”.
    • Gesimuleerde invoegalgoritmen (MAC) zijn "GMAC" en "KMAC".
    • RSA-sleutelinkapselingsalgoritme (KEM) "RSASVE".
    • Versleutelingsalgoritme "AES-SIV" (RFC-8452).
    • Aanroepen toegevoegd aan de EVP API met ondersteuning voor inverse ciphers die het AES-algoritme gebruiken om sleutels te coderen (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".
    • Ondersteuning toegevoegd voor algoritmen voor het lenen van ciphertext (CTS) aan de 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".
    • Ondersteuning toegevoegd voor CAdES-BES digitale handtekeningen (RFC 5126).
    • AES_GCM implementeert de parameter AuthEnvelopedData (RFC 5083) om versleuteling en ontsleuteling mogelijk te maken van berichten die zijn geverifieerd en versleuteld met behulp van de AES GCM-modus.
  • De functies PKCS7_get_octet_string en PKCS7_type_is_other zijn toegevoegd aan de openbare API.
  • De PKCS#12 API vervangt de standaardalgoritmen die worden gebruikt in de functie PKCS12_create() door PBKDF2 en AES, en gebruikt het SHA-256-algoritme om MAC te berekenen. Om gedrag uit het verleden te herstellen, is de optie "-legacy" beschikbaar. Een groot aantal nieuwe uitgebreide aanroepen toegevoegd aan PKCS12_*_ex, PKCS5_*_ex en PKCS8_*_ex, zoals PKCS12_add_key_ex().PKCS12_create_ex() en PKCS12_decrypt_skey_ex().
  • Voor het Windows-platform is ondersteuning voor threadsynchronisatie met behulp van het SRWLock-mechanisme toegevoegd.
  • Er is een nieuwe tracerings-API toegevoegd, ingeschakeld via de parameter enable-trace.
  • Het bereik van 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.
  • Het RAND_DRBG-subsysteem is verwijderd en vervangen door de EVP_RAND API. De functies FIPS_mode() en FIPS_mode_set() zijn verwijderd.
  • Een aanzienlijk deel van de API is verouderd. Het gebruik van verouderde aanroepen in projectcode zal resulteren in waarschuwingen tijdens het compileren. Het opnemen van API's op laag niveau die zijn gekoppeld aan bepaalde implementaties van algoritmen (bijvoorbeeld AES_set_encrypt_key en AES_encrypt) zijn officieel achterhaald verklaard. Officiële ondersteuning in OpenSSL 3.0.0 wordt nu alleen geboden voor EVP-API's op hoog niveau die zijn afgeleid van individuele algoritmetypen (deze API omvat bijvoorbeeld de functies EVP_EncryptInit_ex, EVP_EncryptUpdate en EVP_EncryptFinal). Verouderde API's worden verwijderd in een van de volgende grote releases. Implementaties van oudere algoritmen zoals MD2 en DES, beschikbaar via de EVP API, zijn verplaatst naar een aparte 'legacy'-module, die standaard is uitgeschakeld.
  • De documentatie en het testpakket zijn aanzienlijk uitgebreid. Vergeleken met tak 1.1.1 is het documentatievolume met 94% toegenomen en is de omvang van de testsuitecode met 54% toegenomen.

Bron: opennet.ru

Voeg een reactie