Перший випуск реалізації протоколу TLS 1.3 на Java з алгоритмами ГОСТ відповідно до RFC 9367

модуль crypto-gost-tls13 містить реалізацію TLS 1.3 (RFC 8446 + RFC 9367) із ГОСТ-криптографією. Цей реліз є початковою версією бібліотеки та готовий для внутрішнього використання.

Особливістю бібліотеки є реалізація на чистій Java. Усі криптографічні операції виконуються вбудованими засобами бібліотеки без зовнішніх залежностей.

Це в своєму роді одна з перших відкритих реалізацій TLS 1.3 з ГОСТ Java, тому interop-тестування виконано в мінімально доступному обсязі.

Нижче наведено можливості бібліотеки.

  1. Протоколи:
  • 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 in-memory, single-use).
  • Степлювання OCSP: сервер прикладає OCSP-відповідь до сертифіката.
  • Post-handshake messages: NewSessionTicket (збереження для PSK).
  1. Криптографія:
  • Key schedule: HKDF-Streebog (RFC 5869) за схемою TLS 1.3 (RFC 8446 §7.1).
  • Захист записів: MGM-AEAD (Kuznyechik) з nonce RFC 8446 §5.3.
  • Ефемерні ключі затираються після використання.
  1. сертифікати:
  • Парсинг X.509v3 (GOST R 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).

4.Транспорт:

  • TlsTransport - інтерфейс.
  • InMemoryTlsTransport - для тестів та однопроцесних сценаріїв (in-memory черга).
  • SocketTlsTransport - blocking I/O через java.net.Socket.
  • ChannelTlsTransport — NIO Socket Channel-базований транспорт (blocking mode, interruptible).
  1. Покроковий handshake:
  • TlsHandshakeEngine - state machine для handshake (відв'язаний від I/O). Використовується TlsSession як оркестратор; придатний для інтеграції із JSSE (SSLEngine).
  1. ByteBuffer API:
  • TlsRecord.protect/unprotect — ByteBuffer-навантаження для zero-copy інтеграції з NIO. Завантаження ключів:
  • Pkcs12Loader - читання PFX (PKCS # 12) з PBKDF2-HMAC-SHA256 + AES-256-CBC.
  1. Завершення сесії:
  • close_notify - коректне закриття протоколу.
  • Затирання ключового матеріалу під час закриття або помилки.
  • Обробка alert: fatal - негайне закриття + затирання.
  1. Безпека реалізації:
  • Constant-time порівняння для verify_data та PSK binders (захист від timing attacks)
  • Затирання ключового матеріалу: destroy() на всіх об'єктах з ключами (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), при close, fatal alert, exception в handshake
  • Захист від DoS: ліміти на довжину ланцюжка сертифікатів (10), post-handshake messages, розмір записів.
  • MGM nonce: MSB першого байта очищається для ICN (RFC 9058 §3, RFC 9367 §3.3).
  • ECDHE-приватний ключ та транскрипт handshake знищуються після завершення handshake.
  • HMAC-ключовий матеріал затирається після використання (HkdfStreebog, KdfGostR3411_2012_256).
  1. обмеження:
  • Тільки resumption PSK (0-RTT та external PSK не підтримуються).
  • Тільки psk_dhe_ke (pure PSK без ECDHE не підтримується).
  • HelloRetryRequest (RFC 8446 §4.1.4) не підтримується - використовується лише одна named group (GC256A за замовчуванням).
  • Тільки ДЕРЖСТАНДАРТ (non-GOST cipher suites не підтримуються).
  1. Тестування:
  • Бібліотека містить Known Answer Tests з RFC 9367 Appendix A.1 (L та S варіанти) - повний key schedule, TLSTREE, AEAD, ECDHE. І проходить повний спектр тестів KAT.
  • 4 інтеграційні тести (self-interop) через реальні TCP-сокети.
  • Фазинг-тести для парсерів: TlsMessageParser (8 методів), TlsDerParser (3 методи), TlsOcspVerifier (1 метод), для забезпечення безпеки та зниження вектора атак на парсери.
  1. Архітектурні рішення:
  • TlsHandshakeEngine - state machine, відв'язана від I/O (для майбутнього модуля JSSE).
  • ByteBuffer-навантаження TlsRecord.protect/unprotect для NIO/JSSE.
  • TLSTREE кеш (TlsTreeCache) — перерахунок рівнів, що тільки змінилися (RFC 9367).
  • InMemoryTlsTransport.Pair — двонаправлена ​​пара для тестів та однопроцесної взаємодії.

Бібліотека поширюється під вільною ліцензією.

Джерело: linux.org.ru

Купити надійний хостинг для сайтів із захистом від DDoS, VPS VDS сервери 🔥 Купити надійний хостинг для сайтів із захистом від DDoS, VPS VDS сервери | ProHoster