Модул крипто-гост-тлс13 садржи имплементацију TLS 1.3 (RFC 8446 + RFC 9367) са ГОСТ криптографијом. Ово издање је почетна верзија библиотеке и спремно је за интерну употребу.
Јединствена карактеристика библиотеке је њена чиста Јава имплементација. Све криптографске операције се изводе помоћу уграђених алата библиотеке, без икаквих спољних зависности.
Ово је једна од првих имплементација TLS 1.3 са GOST-ом отвореног кода у Јави, тако да је тестирање интероперабилности извршено у најмањој могућој мери.
Испод су могућности библиотеке.
- Протоколи:
- Руковање: пуно (клијент/сервер), кратко (PSK), обострано (mTLS).
- ALPN (RFC 7301) - Преговарање протокола апликацијског слоја (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) - Индикација имена сервер за имплементације са више закупаца.
- KeyUpdate (RFC 8446 §4.6.3) – ажурирање кључева за шифровање саобраћаја.
- Шифровани пакети: ТЛС_КУЗНИЕЦХИК_МГМ_СТРЕЕБОГ_256_Л/С.
- ECDHE: КриптоПро-А (256-битни), КриптоПро-Б (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 (Kuznyechik) са једнократним бројем према RFC 8446 §5.3.
- Ефемерни кључеви се бришу након употребе.
- Сертификати:
- X.509v3 парсирање (ГОСТ Р 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).
- БајтБафер АПИ:
- 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 nonce: 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 подразумевано).
- Само по ГОСТ-у (шифре које нису по ГОСТ-у нису подржане).
- тестирање:
- Библиотека садржи тестове са познатим одговорима из 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 је двосмерни пар за тестове и комуникацију једног процеса.
Библиотека се дистрибуира под бесплатном лиценцом.
Извор: линук.орг.ру
