Модул крипто-гост-тлс13 ја содржи имплементацијата TLS 1.3 (RFC 8446 + RFC 9367) со GOST криптографија. Ова издание е првичната верзија на библиотеката и е подготвено за интерна употреба.
Уникатна карактеристика на библиотеката е нејзината чиста имплементација во Јава. Сите криптографски операции се извршуваат со помош на вградените алатки на библиотеката, без надворешни зависности.
Ова е една од првите имплементации со отворен код на TLS 1.3 со GOST во Јава, па затоа тестирањето на интероперабилноста е направено во минимален можен степен.
Подолу се прикажани можностите на библиотеката.
- Протоколи:
- Ракување: целосно (клиент/сервер), кратко (PSK), взаемно (mTLS).
- ALPN (RFC 7301) - Преговори за протокол на апликациски слој (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) - Индикација за име сервер за распоредувања со повеќе закупувачи.
- KeyUpdate (RFC 8446 §4.6.3) – ажурирање на клучевите за енкрипција на сообраќајот.
- Апартмани со шифри: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256-битен), CryptoPro-B (512-битен)
- Повторно внесување на клучеви на TLSTREE по запис — промена на клучот за шифрирање за секој TLS запис.
- Фрагментација и повторно составување на ракувања и записи (RFC 8446 §5.1).
- Продолжување на сесијата: PSK преку NewSessionTicket (PskStore во меморијата, за еднократна употреба).
- OCSP спојување: сервер го додава OCSP одговорот на сертификатот.
- Пораки по ракувањето: NewSessionTicket (зачувај за PSK).
- Криптографија:
- Клучен распоред: HKDF-Streebog (RFC 5869) преку TLS 1.3 (RFC 8446 §7.1).
- Заштита на записи: MGM-AEAD (Кузњечик) со нулта вредност според RFC 8446 §5.3.
- Ефемерните клучеви се бришат по употреба.
- Сертификати:
- Парсирање на X.509v3 (GOST R 34.10-2012) — вграден DER парсер.
- Синџир на валидација: потписи, DN (издавач → субјект), Основни ограничувања, Употреба на клуч, Употреба на проширен клуч * (serverAuth / clientAuth), pathLen.
- Проверка на име на хост: dNSName + iPAddress (RFC 6125).
- Верификација на OCSP одговори (RFC 6960).
4.Превоз:
- TlsTransport - интерфејс.
- InMemoryTlsTransport - за тестови и сценарија со еден процес (ред во меморијата).
- SocketTlsTransport — блокирање на влезно/излезни премини преку java.net.Socket.
- ChannelTlsTransport - NIO SocketChannel-базиран транспорт (режим на блокирање, прекинлив).
- Чекор-по-чекор ракување:
- TlsHandshakeEngine е машина за состојби за ракување (одвоена од I/O). Користи TlsSession како оркестратор и е погодна за интеграција со JSSE (SSLEngine).
- API на ByteBuffer:
- TlsRecord.protect/unprotect — ByteBuffer преоптоварува за интеграција со нула копии со NIO. Вчитување на клучеви:
- Pkcs12Loader — читање на PFX (PKCS#12) со PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Крај на сесијата:
- close_notify - правилно затворање според протоколот.
- Бришење на материјалот од клучот при затворање или правење грешка.
- Предупредување за ракување: фатално - моментално затворање + бришење.
- Безбедност на имплементација:
- Споредби со константно време за verify_data и PSK врзувачи (заштита од временски напади)
- Бришење на материјалот од клучот: destroy() на сите објекти со клучеви (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), при затворање, фатално предупредување, исклучок при ракување
- DoS заштита: ограничувања на должината на синџирот на сертификати (10), пораки по ракувањето, големина на записот.
- MGM нонсе: MSB на првиот бајт е исчистен за 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 по дифолт).
- Само GOST (не се поддржани пакети шифри кои не се GOST).
- Тестирање:
- Библиотеката содржи тестови со познати одговори од RFC 9367 Додаток А.1 (L и S варијанти) - целосниот распоред на клучеви, TLSTREE, AEAD и ECDHE. Исто така, ги поминува сите KAT тестови.
- 4 тестови за интеграција (самоинтерактивност) преку вистински TCP сокети.
- Fuzz тестови за парсери: TlsMessageParser (8 методи), TlsDerParser (3 методи), TlsOcspVerifier (1 метод), за да се обезбеди безбедност и да се намали векторот на напад врз парсерите.
- Архитектонски решенија:
- TlsHandshakeEngine - машина за состојби одвоена од I/O (за иден JSSE модул).
- Преоптоварување на ByteBuffer на TlsRecord.protect/unprotect за NIO/JSSE.
- TLSTREE кеш (TlsTreeCache) - повторна пресметка само на променетите нивоа (RFC 9367).
- InMemoryTlsTransport.Pair е двонасочен пар за тестови и комуникација со еден процес.
Библиотеката се дистрибуира под бесплатна лиценца.
Извор: linux.org.ru
