
Модуль crypto-gost-tls13 содержит реализацию TLS 1.3 (RFC 8446 и RFC 9367) с отечественной криптографией по стандартам ГОСТ. Представленный релиз является начальной версией библиотеки и полностью готов для практического применения во внутренних проектах.
Главной технологической особенностью продукта стала разработка на чистой Java без привлечения громоздких внешних зависимостей. Все криптографические операции выполняются встроенными средствами библиотеки.
Поскольку это одна из первых открытых реализаций TLS 1.3 с алгоритмами ГОСТ на платформе Java, первичное interop-тестирование было проведено в минимально необходимом объеме.
Возможности библиотеки
Ниже детально приведены ключевые функциональные возможности и поддерживаемые компоненты.
- Поддерживаемые протоколы и механизмы:
- Handshake: полный двусторонний (client/server), сокращенный через PSK, а также взаимная аутентификация mTLS.
- ALPN (RFC 7301) — успешное согласование прикладных протоколов HTTP/2 и HTTP/1.1.
- SNI (RFC 6066) — корректная передача имени сервера для работы в multi-tenant окружении.
- KeyUpdate (RFC 8446 §4.6.3) — динамическое обновление защитных ключей шифрования трафика.
- Доступные набор шифров (Cipher suites): TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- Алгоритмы ECDHE: CryptoPro-A (256-bit) и CryptoPro-B (512-bit).
- Per-record TLSTREE re-keying — автоматическая смена ключа шифрования на каждую отдельную TLS-запись.
- Строгая фрагментация и сборка рукопожатий и пакетов (RFC 8446 §5.1).
- Возобновление сеансов связи (Session resumption): механизм PSK через NewSessionTicket (PskStore реализуется в памяти, single-use).
- OCSP stapling: возможность для сервера оперативно прикладывать актуальный OCSP-ответ непосредственно к сертификату.
- Post-handshake сообщения: отправка NewSessionTicket для последующего сохранения и использования PSK.
- Криптографический аппарат:
- Key schedule: схема HKDF-Streebog (RFC 5869) в полном соответствии со спецификацией TLS 1.3 (RFC 8446 §7.1).
- Защита записей: MGM-AEAD на базе алгоритма «Кузнечик» с nonce по стандарту RFC 8446 §5.3.
- Повышенная безопасность: временные и эфемерные ключи гарантированно затираются из памяти сразу после завершения использования.
- Работа с сертификатами:
- Парсинг X.509v3 (ГОСТ Р 34.10–2012) с помощью собственного встроенного DER-парсера.
- Проверка цепочки сертификатов: корректный анализ подписей, DN (issuer в связке с subject), Basic Constraints, Key Usage, Extended Key Usage (serverAuth и clientAuth), а также параметра pathLen.
- Верификация hostname: комплексная проверка dNSName и iPAddress по стандарту RFC 6125.
- Независимая проверка OCSP-ответов (RFC 6960).
- Сетевой транспорт:
- TlsTransport — базовый унифицированный интерфейс.
- InMemoryTlsTransport — специализированное решение для тестов и изолированных однопроцессных сценариев через in-memory очередь.
- SocketTlsTransport — традиционный блокирующий I/O на базе стандартного java.net.Socket.
- ChannelTlsTransport — эффективный транспорт на основе NIO SocketChannel (в блокирующем режиме с поддержкой прерываний).
- Пошаговый механизм handshake:
- TlsHandshakeEngine — независимая конечная автоматная система (state machine) для обработки рукопожатия, полностью отвязанная от операций ввода-вывода. Применяется компонент TlsSession в роли оркестратора и отлично подходит для бесшовной интеграции с JSSE (SSLEngine).
- ByteBuffer API:
- Методы TlsRecord.protect и TlsRecord.unprotect — удобные ByteBuffer-перегрузки, обеспечивающие полноценную zero-copy интеграцию с подсистемой NIO.
- Загрузка учетных данных:
- Pkcs12Loader — встроенный инструмент для чтения контейнеров PFX (PKCS#12), защищенных связкой PBKDF2-HMAC-SHA256 и AES-256-CBC.
- Корректное завершение сеансов:
- close_notify — штатное закрытие соединения по протоколу.
- Безопасное затирание всего ключевого материала при любых штатных закрытиях, ошибках или сбоях.
- Обработка критических alert-сообщений (fatal): немедленный разрыв соединения с одновременным очищением памяти.
- Обеспечение безопасности реализации:
- Применение сравнений в постоянном времени (Constant-time) для verify_data и PSK binders, что предотвращает опасные timing-атаки.
- Принудительное затирание секретных данных: вызов метода destroy() на всех критических объектах (включая TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext) при закрытии соединений, критических ошибках или исключениях.
- Защита от сетевых DoS-атак: жесткие лимиты на максимальную длину цепочки сертификатов (до 10), post-handshake сообщения и общий размер обрабатываемых записей.
- MGM nonce: старший бит (MSB) первого байта корректно очищается для работы с ICN (согласно RFC 9058 §3 и RFC 9367 §3.3).
- Защита параметров: приватный ключ ECDHE и общий транскрипт рукопожатия уничтожаются сразу по окончании handshake.
- Очистка памяти: ключевой материал HMAC полностью удаляется после разового применения (в классах HkdfStreebog, KdfGostR3411_2012_256).
- Текущие ограничения:
- Поддерживается исключительно resumption PSK (режимы 0-RTT и external PSK на данный момент не реализованы).
- Поддерживается только вариант psk_dhe_ke (чистый режим PSK без ECDHE не поддерживается).
- HelloRetryRequest (RFC 8446 §4.1.4) не обрабатывается — задействована единственная именованная группа (GC256A по умолчанию).
- Работа исключительно с алгоритмами ГОСТ (сторонние non-GOST шифры не поддерживаются).
- Тестирование и проверка качества:
- В состав библиотеки вошли стандартные Known Answer Tests из спецификации RFC 9367 (приложение A.1 для вариантов L и S), охватывающие полный цикл key schedule, TLSTREE, AEAD и ECDHE. Проект успешно проходит полный спектр KAT-тестов.
- Реализованы 4 комплексных интеграционных теста (self-interop) через реальные TCP-сокеты.
- Проведены глубокие фаззинг-тесты для основных парсеров: TlsMessageParser (8 методов), TlsDerParser (3 метода) и TlsOcspVerifier (1 метод) в целях минимизации векторов возможных атак.
- Архитектурные преимущества:
- Модуль TlsHandshakeEngine спроектирован как state machine без привязки к I/O для интеграции с будущими компонентами JSSE.
- ByteBuffer-перегрузки в TlsRecord обеспечивают высокую скорость для NIO/JSSE.
- Специальный кэш TLSTREE (TlsTreeCache) производит пересчет исключительно измененных уровней в соответствии с RFC 9367.
- Класс InMemoryTlsTransport.Pair реализует двунаправленный канал для комфортного проведения тестов и локального взаимодействия.
Новая библиотека распространяется под открытой свободной лицензией, позволяя разработчикам внедрять российские стандарты шифрования в современные сетевые приложения на Java.
Вышел начальный релиз протокола TLS 1.3 на Java с ГОСТ алгоритмами в соответствии с RFC 9367
© Linux.org.ru






