Lanzamiento de la biblioteca criptográfica OpenSSL 3.0.0

Después de tres años de desarrollo y 19 lanzamientos de prueba, se lanzó la biblioteca OpenSSL 3.0.0 con la implementación de los protocolos SSL/TLS y varios algoritmos de cifrado. La nueva rama incluye cambios que rompen la compatibilidad con versiones anteriores a nivel de API y ABI, pero los cambios no afectarán el funcionamiento de la mayoría de las aplicaciones que requieren una reconstrucción para migrar desde OpenSSL 1.1.1. La rama anterior de OpenSSL 1.1.1 será compatible hasta septiembre de 2023.

Un cambio significativo en el número de versión se debe a la transición a la numeración tradicional "Major.Minor.Patch". De ahora en adelante, el primer dígito (Mayor) en el número de versión cambiará solo si se rompe la compatibilidad en el nivel API/ABI, y el segundo (Menor) cambiará cuando se aumente la funcionalidad sin cambiar API/ABI. Las actualizaciones correctivas se entregarán con un cambio en el tercer dígito (Parche). Se eligió el número 3.0.0 inmediatamente después de 1.1.1 para evitar superposiciones con el módulo FIPS actualmente en desarrollo para OpenSSL, para el cual se utilizó la numeración 2.x.

El segundo cambio importante del proyecto fue la transición de una licencia dual (OpenSSL y SSLeay) a la licencia Apache 2.0. La licencia de propiedad anterior de OpenSSL se basaba en el texto de la licencia heredada de Apache 1.0 y requería una mención explícita de OpenSSL en los materiales de marketing cuando se usaban bibliotecas de OpenSSL, así como un aviso especial si OpenSSL se proporcionaba como parte del producto. Estos requisitos hicieron que la licencia anterior fuera incompatible con la GPL, lo que dificultaba el uso de OpenSSL en proyectos con licencia GPL. Para sortear esta incompatibilidad, los proyectos GPL se vieron obligados a utilizar acuerdos de licencia específicos en los que el texto principal de la GPL se complementaba con una cláusula que permitía explícitamente vincular la aplicación con la biblioteca OpenSSL y mencionaba que los requisitos de la GPL no Aplicar para vincular con OpenSSL.

En comparación con la rama OpenSSL 1.1.1, OpenSSL 3.0.0 agregó más de 7500 cambios aportados por 350 desarrolladores. Principales innovaciones de OpenSSL 3.0.0:

  • Se ha propuesto un nuevo módulo FIPS, que incluye la implementación de algoritmos criptográficos que cumplan con el estándar de seguridad FIPS 140-2 (el proceso de certificación del módulo está programado para comenzar este mes y se espera la certificación FIPS 140-2 el próximo año). El nuevo módulo es mucho más fácil de usar y conectarlo a muchas aplicaciones no será más difícil que cambiar el archivo de configuración. De forma predeterminada, el módulo FIPS está deshabilitado y requiere que la opción enable-fips esté habilitada.
  • libcrypto implementa el concepto de proveedores conectables, que reemplazó el concepto de motores (la API ENGINE ha quedado obsoleta). Con la ayuda de los proveedores, puede agregar sus propias implementaciones de algoritmos para operaciones como cifrado, descifrado, generación de claves, cálculo MAC, creación y verificación de firmas digitales. Es posible conectar otros nuevos y crear implementaciones alternativas de algoritmos ya compatibles (de forma predeterminada, ahora se utiliza el proveedor integrado en OpenSSL para cada algoritmo).
  • Se agregó soporte para el Protocolo de administración de certificados (RFC 4210), que se puede usar para solicitar certificados de un servidor de CA, actualizar certificados y revocar certificados. El trabajo con CMP se realiza mediante la nueva utilidad openssl-cmp, que también admite el formato CRMF (RFC 4211) y el envío de solicitudes a través de HTTP/HTTPS (RFC 6712).
  • Se implementó un cliente completo para los protocolos HTTP y HTTPS, que admite los métodos GET y POST, redirección de solicitudes, funcionamiento a través de un proxy, codificación ASN.1 y procesamiento de tiempo de espera.
  • Se agregó una nueva EVP_MAC (API de código de autenticación de mensajes) para facilitar la adición de nuevas implementaciones de inserciones simuladas.
  • Se propone una nueva interfaz de software para generar claves: EVP_KDF (API de función de derivación de claves), que simplifica la adición de nuevas implementaciones de KDF y PRF. La antigua API EVP_PKEY, a través de la cual estaban disponibles los algoritmos scrypt, TLS1 PRF y HKDF, ha sido rediseñada en forma de una capa implementada sobre las API EVP_KDF y EVP_MAC.
  • La implementación del protocolo TLS brinda la capacidad de utilizar el cliente y servidor TLS integrados en el kernel de Linux para acelerar las operaciones. Para habilitar la implementación de TLS proporcionada por el kernel de Linux, debe habilitar la opción "SSL_OP_ENABLE_KTLS" o la configuración "enable-ktls".
  • Se agregó soporte para nuevos algoritmos:
    • Los algoritmos de generación de claves (KDF) son “SINGLE STEP” y “SSH”.
    • Los algoritmos de inserción simulados (MAC) son “GMAC” y “KMAC”.
    • Algoritmo de encapsulación de claves RSA (KEM) "RSASVE".
    • Algoritmo de cifrado "AES-SIV" (RFC-8452).
    • Se agregaron llamadas a la API EVP con soporte para cifrados inversos utilizando el 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" y "AES-256-WRAP-PAD-INV".
    • Se agregó soporte para algoritmos de préstamo de texto cifrado (CTS) a la API EVP: “AES-128-CBC-CTS”, “AES-192-CBC-CTS”, “AES-256-CBC-CTS”, “CAMELLIA-128-CBC -CTS” ", "CAMELLIA-192-CBC-CTS" y "CAMELLIA-256-CBC-CTS".
    • Se agregó soporte para firmas digitales CAdES-BES (RFC 5126).
    • AES_GCM implementa el parámetro AuthEnvelopedData (RFC 5083) para habilitar el cifrado y descifrado de mensajes autenticados y cifrados mediante el modo AES GCM.
  • Las funciones PKCS7_get_octet_string y PKCS7_type_is_other se han agregado a la API pública.
  • La API PKCS#12 reemplaza los algoritmos predeterminados utilizados en la función PKCS12_create() con PBKDF2 y AES, y utiliza el algoritmo SHA-256 para calcular MAC. Para restaurar el comportamiento pasado, se proporciona la opción "-legacy". Se agregó una gran cantidad de nuevas llamadas extendidas a PKCS12_*_ex, PKCS5_*_ex y PKCS8_*_ex, como PKCS12_add_key_ex().PKCS12_create_ex() y PKCS12_decrypt_skey_ex().
  • Para la plataforma Windows, se agregó soporte para la sincronización de subprocesos mediante el mecanismo SRWLock.
  • Se agregó una nueva API de seguimiento, habilitada mediante el parámetro enable-trace.
  • Se ha ampliado la gama de claves admitidas en las funciones EVP_PKEY_public_check() y EVP_PKEY_param_check(): RSA, DSA, ED25519, X25519, ED448 y X448.
  • El subsistema RAND_DRBG se eliminó y se reemplazó por la API EVP_RAND. Se han eliminado las funciones FIPS_mode() y FIPS_mode_set().
  • Una parte importante de la API se ha vuelto obsoleta: el uso de llamadas obsoletas en el código del proyecto generará advertencias durante la compilación. La inclusión de API de bajo nivel vinculadas a determinadas implementaciones de algoritmos (por ejemplo, AES_set_encrypt_key y AES_encrypt) se ha declarado oficialmente obsoleta. El soporte oficial en OpenSSL 3.0.0 ahora solo se proporciona para las API EVP de alto nivel que se abstraen de tipos de algoritmos individuales (esta API incluye, por ejemplo, las funciones EVP_EncryptInit_ex, EVP_EncryptUpdate y EVP_EncryptFinal). Las API obsoletas se eliminarán en una de las próximas versiones principales. Las implementaciones de algoritmos heredados como MD2 y DES, disponibles a través de la API EVP, se han trasladado a un módulo "heredado" separado, que está deshabilitado de forma predeterminada.
  • La documentación y el conjunto de pruebas se han ampliado significativamente. En comparación con la rama 1.1.1, el volumen de documentación aumentó en un 94% y el tamaño del código del conjunto de pruebas aumentó en un 54%.

Fuente: opennet.ru

Añadir un comentario