Lanzamento da biblioteca criptográfica OpenSSL 3.0.0

Despois de tres anos de desenvolvemento e 19 versións de proba, lanzouse a biblioteca OpenSSL 3.0.0 coa implementación dos protocolos SSL/TLS e varios algoritmos de cifrado. A nova rama inclúe cambios que rompen a compatibilidade cara atrás a nivel de API e ABI, pero os cambios non afectarán o funcionamento da maioría das aplicacións que requiren unha reconstrución para migrar desde OpenSSL 1.1.1. A rama anterior de OpenSSL 1.1.1 será compatible ata setembro de 2023.

Un cambio significativo no número de versión débese á transición á numeración tradicional "Major.Minor.Patch". A partir de agora, o primeiro díxito (Maior) do número de versión cambiará só se a compatibilidade se rompe no nivel API/ABI, e o segundo (Menor) cambiará cando se aumente a funcionalidade sen cambiar a API/ABI. As actualizacións correctivas entregaranse cun cambio no terceiro díxito (Parche). Escolleuse o número 3.0.0 inmediatamente posterior á 1.1.1 para evitar solapamentos co módulo FIPS actualmente en desenvolvemento para OpenSSL, para o que se utilizou a numeración 2.x.

O segundo cambio importante para o proxecto foi a transición dunha licenza dual (OpenSSL e SSLeay) á licenza Apache 2.0. A licenza propietaria anterior de OpenSSL baseábase no texto da licenza Apache 1.0 herdada e requiría a mención explícita de OpenSSL nos materiais de márketing cando se usaban bibliotecas OpenSSL, así como un aviso especial se se fornecía OpenSSL como parte do produto. Estes requisitos fixeron que a antiga licenza fose incompatible coa GPL, o que dificultou o uso de OpenSSL en proxectos con licenza GPL. Para sortear esta incompatibilidade, os proxectos GPL víronse obrigados a utilizar acordos de licenza específicos nos que o texto principal da GPL se complementaba cunha cláusula que permitía de forma explícita vincular a aplicación coa biblioteca OpenSSL e mencionaba que os requisitos da GPL non aplicar para vincular con OpenSSL.

En comparación coa rama OpenSSL 1.1.1, OpenSSL 3.0.0 engadiu máis de 7500 cambios aportados por 350 desenvolvedores. Principais novidades de OpenSSL 3.0.0:

  • Propúxose un novo módulo FIPS, que inclúe a implementación de algoritmos criptográficos que cumpran co estándar de seguridade FIPS 140-2 (o proceso de certificación do módulo está previsto que comece este mes, e espérase a certificación FIPS 140-2 o próximo ano). O novo módulo é moito máis doado de usar e conectalo a moitas aplicacións non será máis difícil que cambiar o ficheiro de configuración. Por defecto, o módulo FIPS está desactivado e require que se active a opción enable-fips.
  • libcrypto implementa o concepto de provedores conectables, que substituíu o concepto de motores (a API ENGINE quedou en desuso). Coa axuda dos provedores, pode engadir as súas propias implementacións de algoritmos para operacións como cifrado, descifrado, xeración de claves, cálculo MAC, creación e verificación de sinaturas dixitais. É posible conectar outros novos e crear implementacións alternativas de algoritmos xa compatibles (por defecto, agora utilízase o provedor integrado en OpenSSL para cada algoritmo).
  • Engadiuse compatibilidade co Protocolo de xestión de certificados (RFC 4210), que se pode usar para solicitar certificados dun servidor de CA, actualizar certificados e revogar certificados. O traballo con CMP realízase mediante a nova utilidade openssl-cmp, que tamén admite o formato CRMF (RFC 4211) e o envío de solicitudes a través de HTTP/HTTPS (RFC 6712).
  • Implementouse un cliente completo para os protocolos HTTP e HTTPS, que admite os métodos GET e POST, redirección de solicitudes, traballando a través dun proxy, codificación ASN.1 e procesamento de tempo de espera.
  • Engadiuse un novo EVP_MAC (Message Authentication Code API) para que sexa máis doado engadir novas implementacións de insercións simuladas.
  • Proponse unha nova interface de software para xerar claves - EVP_KDF (Key Derivation Function API), que simplifica a incorporación de novas implementacións de KDF e PRF. A antiga API EVP_PKEY, a través da cal estaban dispoñibles os algoritmos scrypt, TLS1 PRF e HKDF, redeseñouse en forma dunha capa implementada enriba das API EVP_KDF e EVP_MAC.
  • A implementación do protocolo TLS ofrece a posibilidade de utilizar o cliente e o servidor TLS integrados no núcleo de Linux para acelerar as operacións. Para activar a implementación de TLS proporcionada polo núcleo de Linux, debes activar a opción "SSL_OP_ENABLE_KTLS" ou a opción "enable-ktls".
  • Engadido soporte para novos algoritmos:
    • Os algoritmos de xeración de claves (KDF) son "SINGLE STEP" e "SSH".
    • Os algoritmos de inserción simulados (MAC) son "GMAC" e "KMAC".
    • Algoritmo de encapsulación de claves RSA (KEM) "RSASVE".
    • Algoritmo de cifrado "AES-SIV" (RFC-8452).
    • Engadíronse chamadas á API EVP que admiten cifrados inversos mediante o algoritmo AES para cifrar claves (Key Wrap): "AES-128-WRAP-INV", "AES-192-WRAP-INV", "AES-256-WRAP-INV". ”, "AES-128-WRAP-PAD-INV", "AES-192-WRAP-PAD-INV" e "AES-256-WRAP-PAD-INV".
    • Engadido soporte para algoritmos de préstamo de texto cifrado (CTS) á API EVP: "AES-128-CBC-CTS", "AES-192-CBC-CTS", "AES-256-CBC-CTS", "CAMELLIA-128-CBC". -CTS”, "CAMELLIA-192-CBC-CTS" e "CAMELLIA-256-CBC-CTS".
    • Engadido soporte para sinaturas dixitais CAdES-BES (RFC 5126).
    • AES_GCM implementa o parámetro AuthEnvelopedData (RFC 5083) para activar o cifrado e o descifrado das mensaxes autenticadas e cifradas mediante o modo AES GCM.
  • Engadíronse á API pública as funcións PKCS7_get_octet_string e PKCS7_type_is_other.
  • A API PKCS#12 substitúe os algoritmos predeterminados utilizados na función PKCS12_create() por PBKDF2 e AES, e utiliza o algoritmo SHA-256 para calcular MAC. Para restaurar o comportamento anterior, ofrécese a opción "-legacy". Engadiuse un gran número de novas chamadas ampliadas a PKCS12_*_ex, PKCS5_*_ex e PKCS8_*_ex, como PKCS12_add_key_ex().PKCS12_create_ex() e PKCS12_decrypt_skey_ex().
  • Para a plataforma Windows, engadiuse soporte para a sincronización de fíos mediante o mecanismo SRWLock.
  • Engadiuse unha nova API de rastrexo, habilitada mediante o parámetro enable-trace.
  • Ampliouse o rango de chaves admitidas nas funcións EVP_PKEY_public_check() e EVP_PKEY_param_check(): RSA, DSA, ED25519, X25519, ED448 e X448.
  • Eliminouse o subsistema RAND_DRBG, substituído pola API EVP_RAND. Elimináronse as funcións FIPS_mode() e FIPS_mode_set().
  • Unha parte importante da API quedou obsoleta - o uso de chamadas obsoletas no código do proxecto provocará avisos durante a compilación. Incluíndo as API de baixo nivel vinculadas a determinadas implementacións de algoritmos (por exemplo, AES_set_encrypt_key e AES_encrypt) declaráronse oficialmente obsoletas. Agora só se ofrece soporte oficial en OpenSSL 3.0.0 para as API EVP de alto nivel que se abstraen de tipos de algoritmo individuais (esta API inclúe, por exemplo, as funcións EVP_EncryptInit_ex, EVP_EncryptUpdate e EVP_EncryptFinal). As API obsoletas eliminaranse nunha das próximas versións principais. As implementacións de algoritmos legados como MD2 e DES, dispoñibles a través da API EVP, trasladáronse a un módulo "herdado" separado, que está desactivado por defecto.
  • A documentación e o paquete de probas foron significativamente ampliados. En comparación coa rama 1.1.1, o volume de documentación aumentou nun 94% e o tamaño do código do conxunto de probas aumentou nun 54%.

Fonte: opennet.ru

Engadir un comentario