Modul kripto-gost-tls13 vsebuje izvedbo TLS 1.3 (RFC 8446 + RFC 9367) z GOST kriptografijo. Ta izdaja je začetna različica knjižnice in je pripravljena za interno uporabo.
Edinstvena značilnost knjižnice je njena čista implementacija v Javi. Vse kriptografske operacije se izvajajo z vgrajenimi orodji knjižnice, brez zunanjih odvisnosti.
To je ena prvih odprtokodnih implementacij TLS 1.3 z GOST v Javi, zato je bilo testiranje medsebojnega delovanja opravljeno v najmanjši možni meri.
Spodaj so navedene zmogljivosti knjižnice.
- Protokoli:
- Rokovanje: polno (odjemalec/strežnik), kratko (PSK), medsebojno (mTLS).
- ALPN (RFC 7301) - Pogajanja o protokolu aplikacijske plasti (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) - Navedba imena strežnika za večnajemniške uvedbe.
- KeyUpdate (RFC 8446 §4.6.3) – posodabljanje ključev za šifriranje prometa.
- Šifrirani paketi: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256-bitni), CryptoPro-B (512-bitni)
- Ponovno kodiranje TLSTREE za vsak zapis – spreminjanje šifrirnega ključa za vsak zapis TLS.
- Fragmentacija in ponovno sestavljanje rokovanja in zapisov (RFC 8446 §5.1).
- Nadaljevanje seje: PSK prek NewSessionTicket (PskStore v pomnilniku, za enkratno uporabo).
- Spenjanje OCSP: strežnik прикладывает OCSP-ответ к сертификату.
- Sporočila po rokovanju: NewSessionTicket (razen za PSK).
- Kriptografija:
- Ključni razpored: HKDF-Streebog (RFC 5869) prek TLS 1.3 (RFC 8446 §7.1).
- Zaščita zapisa: MGM-AEAD (Kuznyechik) z nonce v skladu z RFC 8446 §5.3.
- Kratkoročne tipke se po uporabi izbrišejo.
- Potrdila:
- Razčlenjevanje X.509v3 (GOST R 34.10-2012) – vgrajen razčlenjevalnik DER.
- Veriga validacije: podpisi, DN (izdajatelj → zadeva), osnovne omejitve, uporaba ključa, razširjena uporaba ključa * (serverAuth / clientAuth), dolžina poti.
- Preverjanje imena gostitelja: dNSName + iPAddress (RFC 6125).
- Preverjanje odgovorov OCSP (RFC 6960).
4.Prevoz:
- TlsTransport - vmesnik.
- InMemoryTlsTransport - za teste in scenarije z enim samim procesom (čakalna vrsta v pomnilniku).
- SocketTlsTransport — blokiranje V/I prek java.net.Socket.
- ChannelTlsTransport - transport na osnovi NIO SocketChannel (blokirni način, prekinljiv).
- Rokovanje po korakih:
- TlsHandshakeEngine je stroj stanj za rokovanje (ločen od V/I). Uporablja TlsSession kot orkestrator in je primeren za integracijo z JSSE (SSLEngine).
- API za bajtni medpomnilnik:
- TlsRecord.protect/unprotect — Preobremenitve ByteBufferja za integracijo ničelne kopije z NIO. Nalaganje ključev:
- Pkcs12Loader — branje PFX (PKCS#12) z PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Konec seje:
- close_notify - pravilno zapiranje v skladu s protokolom.
- Brisanje ključnega materiala pri zapiranju ali napaki.
- Opozorilo o ravnanju: usodno - takojšnje zapiranje + brisanje.
- Varnost izvedbe:
- Primerjave v konstantnem času za verify_data in PSK binderje (zaščita pred časovnimi napadi)
- Brisanje ključnega materiala: destroy() na vseh objektih s ključi (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), ob zaprtju, usodnem opozorilu, izjema pri handshakeu
- Zaščita pred DoS: omejitve dolžine verige potrdil (10), sporočila po rokovanju, velikost zapisa.
- MGM nonce: MSB prvega bajta se izbriše za ICN (RFC 9058 §3, RFC 9367 §3.3).
- Zasebni ključ ECDHE in prepis rokovanja se uničita po zaključku rokovanja.
- Ključno gradivo HMAC se po uporabi izbriše (HkdfStreebog, KdfGostR3411_2012_256).
- Omejitve:
- Samo nadaljevanje PSK (0-RTT in zunanji PSK nista podprta).
- Samo psk_dhe_ke (čisti PSK brez ECDHE ni podprt).
- Zahteva HelloRetryRequest (RFC 8446 §4.1.4) ni podprta - uporablja se samo ena imenovana skupina (privzeto GC256A).
- Samo GOST (šifri, ki niso GOST, niso podprti).
- Testiranje:
- Knjižnica vsebuje teste z znanimi odgovori iz dodatka A.1 k RFC 9367 (različici L in S) – celoten razpored ključev, TLSTREE, AEAD in ECDHE. Prav tako uspešno opravlja celoten nabor testov KAT.
- 4 integracijski testi (samointerop) prek pravih TCP vtičnic.
- Fuzz testi za razčlenjevalnike: TlsMessageParser (8 metod), TlsDerParser (3 metode), TlsOcspVerifier (1 metoda) za zagotavljanje varnosti in zmanjšanje vektorja napadov na razčlenjevalnike.
- Arhitekturne rešitve:
- TlsHandshakeEngine - stroj stanj, ločen od V/I (za prihodnji JSSE modul).
- Preobremenitve ByteBufferja za TlsRecord.protect/unprotect za NIO/JSSE.
- Predpomnilnik TLSTREE (TlsTreeCache) - ponovni izračun samo spremenjenih nivojev (RFC 9367).
- InMemoryTlsTransport.Pair je dvosmerni par za teste in komunikacijo med posameznimi procesi.
Knjižnica se distribuira pod brezplačno licenco.
Vir: linux.org.ru
