Открыть сервис

GnuTLS

GnuTLS — это свободная кроссплатформенная библиотека, реализующая протоколы TLS (Transport Layer Security), SSL (Secure Sockets Layer) и DTLS (Datagram Transport Layer Security), а также функции шифрования, аутентификации и управления сертификатами. Она предоставляет программный интерфейс (API) для приложений, требующих защищённого соединения по сети, и распространяется на условиях GNU Lesser General Public License (LGPL) версии 2.1 или выше. GnuTLS является альтернативой библиотеке OpenSSL и используется в ряде операционных систем, включая GNU/Linux, и в проектах, ориентированных на свободное программное обеспечение.

История

Разработка GnuTLS началась в 2000 году под эгидой проекта GNU, который входил в состав операционной системы GNU. Основной целью было создание полностью свободной реализации протоколов TLS/SSL, не обременённой лицензионными ограничениями, характерными для OpenSSL (которая на тот момент распространялась под лицензией, несовместимой с GPL). Первый стабильный релиз, GnuTLS 1.0.0, был выпущен в 2003 году. В последующие годы библиотека развивалась, добавляя поддержку новых версий протоколов (TLS 1.1, 1.2, 1.3), алгоритмов шифрования (например, ChaCha20-Poly1305) и расширений (например, SNI — Server Name Indication). В 2015 году, после выявления уязвимости Heartbleed в OpenSSL, интерес к GnuTLS возрос, хотя сама библиотека также имела собственные уязвимости, которые оперативно исправлялись. В настоящее время GnuTLS поддерживается сообществом разработчиков и входит в состав многих дистрибутивов GNU/Linux, таких как Debian, Fedora и Arch Linux.

Архитектура и компоненты

GnuTLS состоит из нескольких модулей, обеспечивающих различные аспекты криптографической защиты:

  • Ядро библиотеки (libgnutls): Реализует протоколы TLS/DTLS, управление сессиями, обработку сертификатов и ключей. Включает поддержку алгоритмов симметричного шифрования (AES, ChaCha20, Camellia), асимметричного шифрования (RSA, ECDSA, EdDSA) и хеширования (SHA-256, SHA-3).
  • Подсистема сертификатов (libgnutls-extra): Обеспечивает проверку цепочек сертификатов X.509, работу с Certificate Revocation Lists (CRL) и Online Certificate Status Protocol (OCSP).
  • Криптографический движок (nettle): GnuTLS использует библиотеку Nettle в качестве низкоуровневого криптографического бэкенда, что позволяет избежать дублирования кода и повысить производительность. Nettle реализует алгоритмы шифрования, хеширования и генерации случайных чисел.
  • Инструменты командной строки: В состав GnuTLS входят утилиты, такие как gnutls-cli (для тестирования TLS-соединений), certtool (для управления сертификатами и ключами) и psktool (для работы с предварительными общими ключами).

Поддерживаемые протоколы и стандарты

GnuTLS поддерживает широкий спектр криптографических протоколов и стандартов, включая:

  • TLS 1.3 (RFC 8446) — последняя версия протокола, обеспечивающая улучшенную безопасность и производительность за счёт сокращения числа рукопожатий.
  • TLS 1.2 (RFC 5246) — широко используемая версия с поддержкой современных алгоритмов.
  • TLS 1.1 и 1.0 — устаревшие версии, которые по умолчанию отключены в современных сборках из соображений безопасности.
  • DTLS 1.2 и 1.0 — версии протокола для датаграммных соединений (например, для VoIP или видеоконференций).
  • SSL 3.0 — устаревший протокол, отключённый по умолчанию из-за уязвимости POODLE.
  • Протоколы аутентификации: X.509, OpenPGP (через расширение), а также аутентификация на основе предварительных общих ключей (PSK) и анонимных ключей (DH_anon).

Применение

GnuTLS используется в различных программных продуктах и системах, где требуется защищённая передача данных:

  • Операционные системы: Входит в состав многих дистрибутивов GNU/Linux (например, Debian, Ubuntu, Fedora) как системная библиотека для обеспечения работы HTTPS-соединений в таких утилитах, как wget и curl.
  • Веб-серверы: Используется в веб-сервере Apache HTTP Server (через модуль mod_gnutls) и в других серверах, таких как Lighttpd.
  • Почтовые клиенты и серверы: Применяется в программах для работы с электронной почтой (например, в Mutt) и в серверах, таких как Dovecot, для шифрования IMAP и SMTP.
  • VPN и туннелирование: Используется в проектах, таких как OpenConnect (клиент для Cisco AnyConnect) и в некоторых реализациях VPN на основе TLS.
  • Библиотеки и фреймворки: Встраивается в приложения на языках C, C++, Python (через обёртку python-gnutls) и других, где требуется низкоуровневый контроль над криптографией.

Критика и ограничения

Несмотря на широкое распространение, GnuTLS подвергалась критике по нескольким причинам:

  • Производительность: В некоторых тестах GnuTLS показывает несколько более низкую скорость обработки запросов по сравнению с OpenSSL, особенно при работе с большими объёмами данных. Это связано с использованием библиотеки Nettle, которая может быть менее оптимизирована для некоторых аппаратных платформ.
  • Совместимость: В прошлом GnuTLS имела проблемы с совместимостью с некоторыми реализациями TLS, особенно с устаревшими серверами, что приводило к сбоям рукопожатия. Однако с выходом TLS 1.3 эти проблемы были в значительной степени решены.
  • Уязвимости: Как и любое криптографическое ПО, GnuTLS периодически подвергалась обнаружению уязвимостей. Например, в 2014 году была найдена уязвимость CVE-2014-3466, связанная с некорректной проверкой сертификатов, что позволяло проводить атаки «человек посередине». Разработчики оперативно выпускали исправления.
  • Лицензионные ограничения: Хотя GnuTLS распространяется под LGPL, что позволяет использовать её в проприетарном ПО, некоторые разработчики предпочитают OpenSSL из-за более широкой совместимости с другими библиотеками.

Сравнение с OpenSSL

GnuTLS и OpenSSL являются двумя основными библиотеками для реализации TLS в мире свободного ПО. Основные различия:

  • Лицензия: GnuTLS использует LGPL, что позволяет её использование в коммерческих приложениях без раскрытия исходного кода, в то время как OpenSSL использует двойную лицензию (Apache License 2.0 и OpenSSL License), что может создавать конфликты с GPL.
  • Размер и сложность: GnuTLS считается более компактной и модульной, что упрощает её интеграцию в небольшие проекты. OpenSSL, напротив, имеет более обширный API и поддерживает большее количество устаревших алгоритмов.
  • Производительность: В большинстве современных сценариев обе библиотеки показывают сопоставимые результаты, но OpenSSL часто имеет преимущество в оптимизации под конкретные процессоры (например, с использованием инструкций AES-NI).
  • Поддержка сообщества: OpenSSL имеет более широкую пользовательскую базу и большее количество сторонних инструментов, в то время как GnuTLS тесно связана с экосистемой GNU.

Интересные факты

  • GnuTLS является одной из немногих библиотек TLS, которая поддерживает протокол OpenPGP для аутентификации, что позволяет использовать ключи PGP вместо сертификатов X.509.
  • Название «GnuTLS» происходит от проекта GNU, в рамках которого она была создана, и аббревиатуры TLS.
  • В 2019 году GnuTLS была включена в состав ядра операционной системы GNU Hurd, что подчеркнуло её роль в экосистеме свободного ПО.

Источники

  • Официальная документация GnuTLS (gnutls.org)
  • Статья «GnuTLS» в Википедии (русскоязычная версия)
  • RFC 8446 (TLS 1.3)
  • CVE-2014-3466 — уязвимость в GnuTLS
  • Сравнение криптографических библиотек (OpenSSL vs GnuTLS) на сайте Linux Foundation

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →