Modul kripto-gost-tls13 sadrži implementaciju TLS 1.3 (RFC 8446 + RFC 9367) s GOST kriptografijom. Ovo izdanje je početna verzija biblioteke i spremno je za internu upotrebu.
Jedinstvena značajka biblioteke je njezina čista Java implementacija. Sve kriptografske operacije izvode se pomoću ugrađenih alata biblioteke, bez ikakvih vanjskih ovisnosti.
Ovo je jedna od prvih implementacija TLS 1.3 s GOST-om otvorenog koda u Javi, tako da je testiranje interoperabilnosti provedeno u minimalnoj mogućoj mjeri.
U nastavku su navedene mogućnosti knjižnice.
- Protokoli:
- Rukovanje: puno (klijent/poslužitelj), kratko (PSK), obostrano (mTLS).
- ALPN (RFC 7301) - Pregovaranje protokola aplikacijskog sloja (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) - Naziv poslužitelja za implementacije s više zakupaca.
- KeyUpdate (RFC 8446 §4.6.3) – ažuriranje ključeva za šifriranje prometa.
- Kompleti šifri: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256-bitni), CryptoPro-B (512-bitni)
- Ponovno kodiranje TLSTREE-a po zapisu — promjena ključa za šifriranje za svaki TLS zapis.
- Fragmentacija i ponovno sastavljanje rukovanja i zapisa (RFC 8446 §5.1).
- Nastavak sesije: PSK putem NewSessionTicket (PskStore u memoriji, jednokratna upotreba).
- OCSP klamanje: server dodaje OCSP odgovor certifikatu.
- Poruke nakon rukovanja: NewSessionTicket (osim za PSK).
- Kriptografija:
- Ključni raspored: HKDF-Streebog (RFC 5869) preko TLS 1.3 (RFC 8446 §7.1).
- Zaštita zapisa: MGM-AEAD (Kuznyechik) s jednokratnim brojem prema RFC 8446 §5.3.
- Efemerni ključevi se brišu nakon upotrebe.
- Certifikati:
- X.509v3 parsiranje (GOST R 34.10-2012) — ugrađeni DER parser.
- Lanac validacije: potpisi, DN (izdavatelj → subjekt), osnovna ograničenja, korištenje ključa, prošireno korištenje ključa (serverAuth / clientAuth), duljina puta.
- Provjera imena hosta: dNSName + iPAddress (RFC 6125).
- Provjera OCSP odgovora (RFC 6960).
4.prijevoz:
- TlsTransport - sučelje.
- InMemoryTlsTransport - za testove i scenarije s jednim procesom (red čekanja u memoriji).
- SocketTlsTransport — blokiranje I/O preko java.net.Socket.
- ChannelTlsTransport - NIO SocketChannel-bazirani transport (blokirajući način, prekidljiv).
- Rukovanje korak po korak:
- TlsHandshakeEngine je stroj stanja za rukovanje (odvojen od I/O). Koristi TlsSession kao orkestrator i pogodan je za integraciju s JSSE (SSLEngine).
- API za ByteBuffer:
- TlsRecord.protect/unprotect — Preopterećenja ByteBuffera za integraciju nulte kopije s NIO-om. Učitavanje ključeva:
- Pkcs12Loader — čitanje PFX-a (PKCS#12) s PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Kraj sesije:
- close_notify - ispravno zatvaranje prema protokolu.
- Brisanje materijala ključa prilikom zatvaranja ili pogreške.
- Upozorenje o rukovanju: fatalno - trenutno zatvaranje + brisanje.
- Sigurnost implementacije:
- Usporedbe u konstantnom vremenu za verify_data i PSK bindere (zaštita od vremenskih napada)
- Brisanje ključnog materijala: destroy() na svim objektima s ključevima (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), pri zatvaranju, fatalna upozorenje, iznimka pri rukovanju
- DoS zaštita: ograničenja duljine lanca certifikata (10), poruke nakon rukovanja, veličina zapisa.
- MGM nonce: MSB prvog bajta se briše za ICN (RFC 9058 §3, RFC 9367 §3.3).
- ECDHE privatni ključ i transkript rukovanja uništavaju se nakon završetka rukovanja.
- Materijal HMAC ključa se briše nakon upotrebe (HkdfStreebog, KdfGostR3411_2012_256).
- ograničenja:
- Samo nastavak PSK-a (0-RTT i vanjski PSK nisu podržani).
- Samo psk_dhe_ke (čisti PSK bez ECDHE nije podržan).
- HelloRetryRequest (RFC 8446 §4.1.4) nije podržan - koristi se samo jedna imenovana grupa (GC256A prema zadanim postavkama).
- Samo GOST (šifri koji nisu GOST nisu podržani).
- Testiranje:
- Biblioteka sadrži testove poznatih odgovora iz RFC 9367 Dodatka A.1 (L i S varijante) - puni raspored ključeva, TLSTREE, AEAD, ECDHE. Također prolazi cijeli niz KAT testova.
- 4 integracijska testa (samointeroperabilnost) putem stvarnih TCP socketa.
- Fuzz testovi za parsere: TlsMessageParser (8 metoda), TlsDerParser (3 metode), TlsOcspVerifier (1 metoda), kako bi se osigurala sigurnost i smanjio vektor napada na parsere.
- Arhitektonska rješenja:
- TlsHandshakeEngine - automat stanja odvojen od I/O (za budući JSSE modul).
- Preopterećenja ByteBuffera za TlsRecord.protect/unprotect za NIO/JSSE.
- TLSTREE predmemorija (TlsTreeCache) - ponovni izračun samo promijenjenih razina (RFC 9367).
- InMemoryTlsTransport.Pair je dvosmjerni par za testove i komunikaciju između jednog procesa.
Biblioteka se distribuira pod slobodnom licencom.
Izvor: linux.org.ru
