Првото издание на имплементацијата на протоколот TLS 1.3 во Јава со GOST алгоритми во согласност со RFC 9367

Модул крипто-гост-тлс13 ја содржи имплементацијата TLS 1.3 (RFC 8446 + RFC 9367) со GOST криптографија. Ова издание е првичната верзија на библиотеката и е подготвено за интерна употреба.

Уникатна карактеристика на библиотеката е нејзината чиста имплементација во Јава. Сите криптографски операции се извршуваат со помош на вградените алатки на библиотеката, без надворешни зависности.

Ова е една од првите имплементации со отворен код на TLS 1.3 со GOST во Јава, па затоа тестирањето на интероперабилноста е направено во минимален можен степен.

Подолу се прикажани можностите на библиотеката.

  1. Протоколи:
  • Ракување: целосно (клиент/сервер), кратко (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).
  1. Криптографија:
  • Клучен распоред: HKDF-Streebog (RFC 5869) преку TLS 1.3 (RFC 8446 §7.1).
  • Заштита на записи: MGM-AEAD (Кузњечик) со нулта вредност според RFC 8446 §5.3.
  • Ефемерните клучеви се бришат по употреба.
  1. Сертификати:
  • Парсирање на 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-базиран транспорт (режим на блокирање, прекинлив).
  1. Чекор-по-чекор ракување:
  • TlsHandshakeEngine е машина за состојби за ракување (одвоена од I/O). Користи TlsSession како оркестратор и е погодна за интеграција со JSSE (SSLEngine).
  1. API на ByteBuffer:
  • TlsRecord.protect/unprotect — ByteBuffer преоптоварува за интеграција со нула копии со NIO. Вчитување на клучеви:
  • Pkcs12Loader — читање на PFX (PKCS#12) со PBKDF2-HMAC-SHA256 + AES-256-CBC.
  1. Крај на сесијата:
  • close_notify - правилно затворање според протоколот.
  • Бришење на материјалот од клучот при затворање или правење грешка.
  • Предупредување за ракување: фатално - моментално затворање + бришење.
  1. Безбедност на имплементација:
  • Споредби со константно време за 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).
  1. Ограничувања:
  • Само PSK за продолжување (0-RTT и надворешен PSK не се поддржани).
  • Само psk_dhe_ke (чиста PSK без ECDHE не е поддржана).
  • HelloRetryRequest (RFC 8446 §4.1.4) не е поддржан - се користи само една именувана група (GC256A по дифолт).
  • Само GOST (не се поддржани пакети шифри кои не се GOST).
  1. Тестирање:
  • Библиотеката содржи тестови со познати одговори од RFC 9367 Додаток А.1 (L и S варијанти) - целосниот распоред на клучеви, TLSTREE, AEAD и ECDHE. Исто така, ги поминува сите KAT тестови.
  • 4 тестови за интеграција (самоинтерактивност) преку вистински TCP сокети.
  • Fuzz тестови за парсери: TlsMessageParser (8 методи), TlsDerParser (3 методи), TlsOcspVerifier (1 метод), за да се обезбеди безбедност и да се намали векторот на напад врз парсерите.
  1. Архитектонски решенија:
  • TlsHandshakeEngine - машина за состојби одвоена од I/O (за иден JSSE модул).
  • Преоптоварување на ByteBuffer на TlsRecord.protect/unprotect за NIO/JSSE.
  • TLSTREE кеш (TlsTreeCache) - повторна пресметка само на променетите нивоа (RFC 9367).
  • InMemoryTlsTransport.Pair е двонасочен пар за тестови и комуникација со еден процес.

Библиотеката се дистрибуира под бесплатна лиценца.

Извор: linux.org.ru

Купете доверлив хостинг за сајтови со DDoS заштита, VPS VDS сервери 🔥 Купете сигурен веб-хостинг со DDoS заштита, VPS VDS сервери | ProHoster