Модулът crypto-gost-tls13 съдържа реализация TLS 1.3 (RFC 8446 + RFC 9367) с ГОСТ криптография. Тази версия е началната версия на библиотеката и е готова за вътрешна употреба.
Особеност на библиотеката е реализацията на чиста Java. Всички криптографски операции се извършват с вградените средства на библиотеката — без външни зависимости.
Това е по рода си една от първите отворени реализации на TLS 1.3 с ГОСТ на Java, затова интероп-тестовете са проведени в минимално налично количество.
По-долу са представени възможностите на библиотеката.
- Протоколи:
- 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 in-memory, еднократна употреба).
- OCSP stapling: сървър прилага OCSP отговор към сертификата.
- Следхендшейк съобщения: 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), Основни ограничения, Използване на ключа, Разширено използване на ключа * (serverAuth / clientAuth), pathLen.
- Проверка на име на хост: dNSName + iPAddress (RFC 6125).
- Верификация на OCSP отговори (RFC 6960).
4.Транспорт:
- TlsTransport — интерфейс.
- InMemoryTlsTransport — за тестове и еднопроцесорни сценарии (in-memory опашка).
- SocketTlsTransport — блокиращо I/O чрез java.net.Socket.
- ChannelTlsTransport — NIO SocketChannel-базиран транспорт (блокиращ режим, прекъсваем).
- Стъпков хендшейк:
- TlsHandshakeEngine — машина на състояния за хендшейк (отделена от 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 — правилно затваряне по протокола.
- Изтриване на ключовия материал при затваряне или грешка.
- Обработка на предупреждения: fatal — незабавно затваряне + изтриване.
- Сигурност на реализацията:
- Сравнение за постоянно време за 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).
- Ограничения:
- Само resumption PSK (0-RTT и external PSK не се поддържат).
- Само psk_dhe_ke (чист 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 варианти) — пълен ключов график, 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
