Модул 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 в паметта, еднократна употреба).
- OCSP stapling: сървър прилагане на OCSP-отговор към сертификата.
- Post-handshake съобщения: 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.
- Проверка на hostname: dNSName + iPAddress (RFC 6125).
- Верифициране на OCSP-отговори (RFC 6960).
4.Транспорт:
- TlsTransport — интерфейс.
- InMemoryTlsTransport — за тестове и сценарии с един процес (in-memory опашка).
- SocketTlsTransport — блокиране I/O чрез java.net.Socket.
- ChannelTlsTransport — базиран на NIO SocketChannel транспорт (блокиращ режим, интеруптивен).
- Стъпков 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 (защита от тайминг атаки)
- Заличаване на ключовия материал: 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 крипто суити не се поддържат).
- Тестиране:
- Библиотеката съдържа 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
