Modul crypto-gost-tls13 sadrži implementaciju TLS 1.3 (RFC 8446 + RFC 9367) s GOST kriptografijom. Ova verzija je početna verzija biblioteke i spremna je za internu upotrebu.
Osobina biblioteke je implementacija na čistoj Javi. Sve kriptografske operacije vrše se ugrađenim sredstvima biblioteke – bez vanjskih zavisnosti.
Ovo je u neku ruku jedna od prvih otvorenih implementacija TLS 1.3 s GOST-om na Javi, stoga je interop-testiranje izvršeno u minimalnom dostupnom obimu.
U nastavku su navedene mogućnosti biblioteke.
- Protokoli:
- Handshake: potpuni (client/server), skraćeni (PSK), uzajaman (mTLS).
- ALPN (RFC 7301) — dogovor protokola aplikacijskog nivoa (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) — navođenje imena strežnika za multi-tenant implementacije.
- KeyUpdate (RFC 8446 §4.6.3) — ažuriranje šifrirnih ključeva prometa.
- Cipher suite: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256-bit), CryptoPro-B (512-bit)
- Per-record TLSTREE re-keying — promjena šifrirnog ključa za svaki TLS zapis.
- Fragmentacija i sastavljanje rukovanja i zapisa (RFC 8446 §5.1).
- Obnavljanje sesije: PSK putem NewSessionTicket (PskStore in-memory, jednokratna upotreba).
- OCSP stapling: strežnik prikazuje OCSP odgovor uz sertifikat.
- Post-handshake poruke: NewSessionTicket (čuvanje za PSK).
- Kriptografija:
- Key schedule: HKDF-Streebog (RFC 5869) prema shemi TLS 1.3 (RFC 8446 §7.1).
- Zaštita zapisa: MGM-AEAD (Kuznyechik) s nonce prema RFC 8446 §5.3.
- Efemerna ključeva se brišu nakon korišćenja.
- Certifikati:
- Parsiranje X.509v3 (GOST R 34.10-2012) — ugrađeni DER-parser.
- Validacija lanca: potpisi, DN (issuer → subject), Osnovna ograničenja, Upotreba ključa, Proširena upotreba ključa (serverAuth / clientAuth), pathLen.
- Provera hostname: dNSName + iPAddress (RFC 6125).
- Verifikacija OCSP odgovora (RFC 6960).
4.Transport:
- TlsTransport — interfejs.
- InMemoryTlsTransport — za testove i jednostavne scenarije (in-memory red).
- SocketTlsTransport — blocking I/O preko java.net.Socket.
- ChannelTlsTransport — NIO SocketChannel-baziran transport (blokirajući režim, prekidiv).
- Korak po korak handshake:
- TlsHandshakeEngine — automatski mehanizam za handshake (odvojen od I/O). Koristi se TlsSession kao orkestrator; pogodan je za integraciju s JSSE (SSLEngine).
- ByteBuffer API:
- TlsRecord.protect/unprotect — ByteBuffer preopterećenja za zero-copy integraciju s NIO. Učitavanje ključeva:
- Pkcs12Loader — čitanje PFX (PKCS#12) s PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Završetak sesije:
- close_notify — ispravno zatvaranje prema protokolu.
- Brisanje ključnog materijala prilikom zatvaranja ili greške.
- Obrada alert: fatal — odmah zatvaranje + brisanje.
- Sigurnost implementacije:
- Сравнения с постоянным временем для verify_data и PSK binders (защита от временных атак)
- Затирание ключевого материала: destroy() на всех объектах с ключами (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext) при закрытии, фатальном сигнале, исключении в handshake
- Защита от DoS: лимиты на длину цепочки сертификатов (10), пост-хендшейкерные сообщения, размер записей.
- Nonce MGM: старший бит первого байта очищается для ICN (RFC 9058 §3, RFC 9367 §3.3).
- ECDHE-приватный ключ и транскрипт хендшейка уничтожаются после завершения хендшейка.
- HMAC-ключевой материал затирается после использования (HkdfStreebog, KdfGostR3411_2012_256).
- Ограничения:
- Только PSK для возобновления (0-RTT и внешние PSK не поддерживаются).
- Только psk_dhe_ke (чистый PSK без ECDHE не поддерживается).
- HelloRetryRequest (RFC 8446 §4.1.4) не поддерживается — используется только одна именованная группа (GC256A по умолчанию).
- Только ГОСТ (не ГОСТ шифровые наборы не поддерживаются).
- Тестирование:
- Библиотека содержит известные тесты ответов из RFC 9367 Appendix A.1 (варианты L и S) — полный ключевой график, TLSTREE, AEAD, ECDHE. И проходит полный спектр KAT тестов.
- 4 интеграционных теста (self-interop) через реальные TCP-сокеты.
- Фаззинг-тесты для парсеров: TlsMessageParser (8 методов), TlsDerParser (3 метода), TlsOcspVerifier (1 метод) для обеспечения безопасности и снижения вектора атак на парсеры.
- Архитектурные решения:
- TlsHandshakeEngine — машина состояний, отделенная от I/O (для будущего модуля JSSE).
- Перегрузки ByteBuffer TlsRecord.protect/unprotect для NIO/JSSE.
- Кэш TLSTREE (TlsTreeCache) — пересчет только изменившихся уровней (RFC 9367).
- InMemoryTlsTransport.Pair — двунаправленная пара для тестов и однопроцессного взаимодействия.
Библиотека распространяется под свободной лицензией.
Izvor: linux.org.ru
