модуль 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 in-memory, single-use).
- Сшыванне OCSP: сервер прыкладвае OCSP-адказ да сертыфіката.
- Post-handshake messages: NewSessionTicket (захаванне для PSK).
- Крыптаграфія:
- Key schedule: HKDF-Streebog (RFC 5869) па схеме TLS 1.3 (RFC 8446 §7.1).
- Абарона запісаў: MGM-AEAD (Kuznyechik) з nonce па RFC 8446 §5.3.
- Эфемерныя ключы заціраюцца пасля выкарыстання.
- сертыфікаты:
- Парсінг 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 SocketChannel-базаваны транспарт (blocking mode, interruptible).
- Пакрокавы handshake:
- TlsHandshakeEngine - state machine для handshake (адвязаны ад I/O). Выкарыстоўваецца TlsSession як аркестратар; прыдатны для інтэграцыі з JSSE (SSLEngine).
- ByteBuffer API:
- TlsRecord.protect/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 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).
- абмежаванні:
- Толькі 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 не падтрымліваюцца).
- Тэставанне:
- Бібліятэка змяшчае 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 метад), для забеспячэння бяспекі і зніжэння вектара нападаў на парсеры.
- Архітэктурныя рашэнні:
- TlsHandshakeEngine - state machine, адвязаная ад I/O (для будучага модуля JSSE).
- ByteBuffer-перагрузкі TlsRecord.protect/unprotect для NIO/JSSE.
- TLSTREE кэш (TlsTreeCache) - пералік толькі якія змяніліся узроўняў (RFC 9367).
- InMemoryTlsTransport.Pair - двунакіраваная пара для тэстаў і аднапрацэснага ўзаемадзеяння.
Бібліятэка распаўсюджваецца пад свабоднай ліцэнзіяй.
Крыніца: linux.org.ru
