Първото издание на реализиране на протокола TLS 1.3 на Java с алгоритми ГОСТ в съответствие с RFC 9367

Модул crypto-gost-tls13 съдържа реализация TLS 1.3 (RFC 8446 + RFC 9367) с ГОСТ-криптография. Тази версия е начална за библиотеката и е готова за вътрешна употреба.

Особеност на библиотеката е реализацията на чист Java. Всички криптографски операции се извършват с вградени средства на библиотеката — без външни зависимости.

Това е една от първите отворени реализации на TLS 1.3 с ГОСТ на Java, така че тестовете за съвместимост са извършени в минимално достъпни обеми.

По-долу са представени възможностите на библиотеката.

  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-бит), CryptoPro-B (512-бит)
  • Per-record TLSTREE re-keying — смяна на ключа за криптиране за всяка TLS-запис.
  • Фрагментация и събиране на ръкостискания и записи (RFC 8446 §5.1).
  • Подновяване на сесията: PSK през NewSessionTicket (PskStore в паметта, еднократна употреба).
  • OCSP stapling: сървър прилагане на OCSP-отговор към сертификата.
  • Post-handshake съобщения: 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), Основни ограничения, Използване на ключове, Разширено използване на ключове (serverAuth / clientAuth), pathLen.
  • Проверка на hostname: dNSName + iPAddress (RFC 6125).
  • Верифициране на OCSP-отговори (RFC 6960).

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

  • TlsTransport — интерфейс.
  • InMemoryTlsTransport — за тестове и сценарии с един процес (in-memory опашка).
  • SocketTlsTransport — блокиране I/O чрез java.net.Socket.
  • ChannelTlsTransport — базиран на NIO SocketChannel транспорт (блокиращ режим, интеруптивен).
  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 (защита от тайминг атаки)
  • Заличаване на ключовия материал: destroy() на всички обекти с ключове (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), при close, fatal alert, exception в handshake
  • Защита от DoS: лимити на дължината на веригата от сертификати (10), post-handshake съобщения, размер на записите.
  • 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 (чист PSK без ECDHE не се поддържа).
  • HelloRetryRequest (RFC 8446 §4.1.4) не се поддържа — използва се само една named group (GC256A по подразбиране).
  • Само ГОСТ (non-GOST крипто суити не се поддържат).
  1. Тестиране:
  • Библиотеката съдържа Known Answer Tests от RFC 9367 Appendix A.1 (L и S варианти) — пълен ключов график, 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