Выпуск криптографических библиотек OpenSSL 3.4, LibreSSL 4.0, Botan 3.6 и Rustls 0.23.15

Опубликованы несколько новых версий криптографических библиотек:

Релиз библиотеки OpenSSL 3.4.0 с реализацией протоколов SSL/TLS и различных алгоритмов шифрования. Поддержка OpenSSL 3.4 будет осуществляться до октября 2025 года. Поддержка прошлых веток OpenSSL 3.3, 3.2, 3.1 и 3.0 LTS продлится до апреля 2026 года, ноября 2025 года, марта 2025 года и сентября 2026 года соответственно. Код проекта распространяется под лицензией Apache 2.0. Основные новшества:

  • Добавлена поддержка набора шифров для TLSv1.3, ограниченного функциями проверки целостности данных (RFC 9150) и включающего алгоритмы TLS_SHA256_SHA256 и TLS_SHA384_SHA384.
  • Добавлена опциональная возможность использования в генераторе псевдослучайных чисел дополнительного источника энтропии на основе джиттера (jitter), реализованного при помощи библиотеки jitterentropy. Формирование энтропии производится путём измерения различий во времени повторного исполнения определённого набора инструкций на CPU, зависящего от множества внутренних факторов и непредсказуемого без физического контроля над CPU.
  • Добавлена начальная поддержка авторизационных сертификатов (AC – Attribute Certificate, RFC 5755), которые включают информацию о правах доступа, полномочиях и атрибутах владельца сертификата, удостоверяющих возможность совершения определённых действий. Например, AC-сертификат может определять право подключения к какому-то сервису.
  • Добавлена поддержка расширений X.509v3, связанных с авторизационными сертификатами.
  • В провайдере FIPS реализована поддержка FIPS 140-3 Indicator API, позволяющего определить использовалась ли та или иная операция в одобренном сервисе или нет.
  • В API BIO (Basic Input/Output) улучшена обработка ввода в формате Base64.
  • Добавлена поддержка сборки утилиты openssl в режиме PIE (Position Independent Executable), позволяющем использовать рандомизацию адресного пространства (ASLR).
  • Добавлена поддержка напрямую извлекаемых комбинированных алгоритмов цифровой подписи, таких как RSA-SHA2-256.
  • В PKCS#12 добавлена поддержка PBMAC 1 (Password-Based Message Authentication Code 1, RFC 9579).
  • В утилиту openssl добавлены опции ‘-not_before’ и ‘-not_after’ для явного указания начального и конечного времени действия сертификата.
  • Предоставлена возможность использования заранее вычисленных значений при инициализации криптографических алгоритмов на базе эллиптических кривых P-256.
  • Объявлены устаревшими функции TS_VERIFY_CTX_set_*, на замену которым пришли функции TS_VERIFY_CTX_set0_* с улучшенной семантикой.
  • Объявлены устаревшими функции SSL_SESSION_get_time(), SSL_SESSION_set_time() и SSL_CTX_flush_sessions() вместо которых следует использовать SSL_SESSION_get_time_ex(), SSL_SESSION_set_time_ex() и SSL_CTX_flush_sessions_ex(), избавленные от проблемы 2038 года.
  • Ожидавшаяся в OpenSSL 3.4 поддержка протокола QIUC на стороне сервера отложена до следующего выпуска.

Релиз проекта LibreSSL 4.0.0, развивающего форк OpenSSL, нацеленный на предоставление более высокого уровня безопасности и качественную поддержку протоколов SSL/TLS с удалением излишней функциональности, добавлением дополнительных средств защиты и проведением значительной чистки и переработки кодовой базы. Значительная смена номера версии связана с использованием десятичной нумерации (после 3.9 следует версия 4.0). Наиболее заметные изменения:

  • Добавлена начальная поддержка сборки с использованием Emscripten, компилятора из C/C++ в WebAssembly.
  • В команду “openssl cms” добавлена опция CRLfile для указания дополнительных списков отозванных сертификатов (CRL), которые будут использованы при верификации.
  • Прекращена поддержка платформы mips32.
  • Прекращено предоставление доступа к функциям, написанным на языке ассемблер, через публичный API (подобные функции теперь предоставляются только через функции-обвязки на языке Си). Удалены ассемблерные реализации устеревших шифров для устаревших архитектур.
  • Удалён код для кэширования валидности сертификатов, которое потеряло смысл после оптимизации производительности.
  • Улучшена реализация расширений X.509v3, унифицированы методы X.509v3 и проведена чистка связанных с X.509v3 API.
  • Полностью переписана реализация типа CRYPTO_EX_DATA.
  • В libcrypto функции atoi() и strtol() заменены на strtonum().
  • Добавлен заголовочный файл crypto_arch.h, в который вынесен код, специфичный для аппаратных архитектур.
  • Переработана и оптимизирована реализация алгоритма DES.
  • Удалены заголовочные файлы pem2.h, ssl2.h, ssl23.h и ui_compat.h.
  • Удалена поддержка алгоритма хэширования Whirlpool.
  • Удалены функции HMAC_Init(), OPENSSL_load_builtin_modules(), X509_REQ_{get,set}_extension_nids(), X509_check_trust().
  • Удалены типы PEM_USER, PEM_CTX, COMP_CTX, COMP_METHOD, X509_CRL_METHOD, STORE, STORE_METHOD и SSL_AEAD_CTX.
  • В libssl добавлены функции SSL_CTX_set1_cert_store() и SSL_CIPHER_get_handshake_digest().

Доступен выпуск криптографической библиотеки Botan 3.6.0, применяемой в проекте NeoPG, форке GnuPG 2. Библиотека предоставляет большую коллекцию готовых примитивов, используемых в протоколе TLS, сертификатах X.509, шифрах AEAD, модулях TPM, PKCS#11, хэшировании паролей и постквантовой криптографии (подписи на основе хэша и согласование ключей на основе McEliece). Библиотека написана на языке C++ и поставляется под лицензией BSD. В новой версии:

  • Интегрирована новая библиотека с криптоалгоритмами на основе эллиптических кривых, операции на базе типовых кривых в которой выполняются в 2-3 раза быстрее. Также предложен новый API для низкоуровневой работы с эллиптическими кривыми.
  • Добавлена поддержка недавно стандартизированных в NIST алгоритмов постквантового шифрования: FIPS 203 ML-KEM (Kyber), FIPS 204 ML-DSA (Dilithium) и FIPS 205 SLH-DSA (SPHINCS+).
  • Добавлена поддержка чипов TPM2.
  • Расширено использование вычислений с постоянным временем выполнения операций для защиты от атак по сторонним каналам.
  • Добавлена генерация дополнительной энтропии при помощи библиотеки jitterentropy.
  • Повышена производительность обработки данных в шестнадцатеричном формате и кодировке base64.
  • Добавлена поддержка процессорных расширений AVX2-VAES и GFNI-AVX2.
  • Добавлено определение возможностей CPU armv7, aarch64 и ppc64 на платформе OpenBSD.
  • Добавлена сборочная опция для отключения всех ассемблерных inline-вставок.

Релиз проекта Rustls 0.23.15, развивающего клиентскую и серверную реализацию протоколов TLS1.2 и TLS1.3 для проектов на языке Rust. Rustls не предоставляет собственную реализацию криптографических примитивов, а использует подключаемые провайдеры криптографических функций (поддерживаются алгоритмы ECDSA, Ed25519, RSA, ChaCha20-Poly1305, AES128-GCM и AES256-GCM). По умолчанию в Rustls используется криптопровайдер на базе библиотеки aws-lc-rs, которая развивается компанией Amazon и базируется на С++ коде AWS-LC, ответвлённом от проекта BoringSSL (сопровождаемый Google форк OpenSSL). В качестве криптопровайдера также может использоваться библиотека ring, частично основанная на BoringSSL и комбинирующая код на ассемблере, С++ и Rust.

Новая версия примечательна значительными оптимизациями производительности. Утверждается, что при использовании криптопримитивов aws-lc-rs библиотека Rustls теперь опережает библиотеки OpenSSL и BoringSSL в тестах, измеряющих пропускную способность и скорость согласования/возобновления соединения.




Release. Ссылка here.