Modul kripto-gost-tls13 sadrži implementaciju TLS 1.3 (RFC 8446 + RFC 9367) sa GOST kriptografijom. Ovo izdanje je početna verzija biblioteke i spremna je za internu upotrebu.
Jedinstvena karakteristika biblioteke je njena čista Java implementacija. Sve kriptografske operacije se izvode korištenjem ugrađenih alata biblioteke, bez ikakvih vanjskih zavisnosti.
Ovo je jedna od prvih implementacija otvorenog koda TLS 1.3 sa GOST-om u Javi, tako da je testiranje interoperabilnosti urađeno u minimalnoj mogućoj mjeri.
U nastavku su navedene mogućnosti biblioteke.
- Protokoli:
- Rukovanje: puno (klijent/server), kratko (PSK), obostrano (mTLS).
- ALPN (RFC 7301) - Pregovaranje protokola aplikacijskog sloja (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) - Indikacija imena server za implementacije s više zakupaca.
- KeyUpdate (RFC 8446 §4.6.3) – ažuriranje ključeva za šifriranje prometa.
- Paketi šifri: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256-bitni), CryptoPro-B (512-bitni)
- Ponovno šifriranje 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-a (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) sa nonce-om u skladu sa 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, upotreba ključa, proširena upotreba ključa (serverAuth / clientAuth), dužina putanje.
- Provjera imena hosta: dNSName + iPAddress (RFC 6125).
- Verifikacija OCSP odgovora (RFC 6960).
4.Transport:
- TlsTransport - interfejs.
- InMemoryTlsTransport - za testove i scenarije s jednim procesom (red čekanja u memoriji).
- SocketTlsTransport — blokiranje I/O preko java.net.Socket-a.
- ChannelTlsTransport - Transport zasnovan na NIO SocketChannel-u (blokirajući način rada, prekidljiv).
- Rukovanje korak po korak:
- TlsHandshakeEngine je mašina stanja za rukovanje (odvojena od I/O). Koristi TlsSession kao orkestrator i pogodna je za integraciju sa JSSE (SSLEngine).
- API za ByteBuffer:
- TlsRecord.protect/unprotect — Preopterećenja ByteBuffer-a za integraciju nulte kopije sa NIO. Učitavanje ključeva:
- Pkcs12Loader — čitanje PFX-a (PKCS#12) sa PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Kraj sesije:
- close_notify - ispravno zatvaranje u skladu s protokolom.
- Brisanje materijala ključa prilikom zatvaranja ili pravljenja greške.
- Upozorenje o rukovanju: fatalno - trenutno zatvaranje + brisanje.
- Sigurnost implementacije:
- Konstantna vremenska poređenja 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, fatalnom alarmu, izuzetku pri handshake-u
- DoS zaštita: ograničenja dužine 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 se uništavaju 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 eksterni 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 Dodatak A.1 (L i S varijante) - puni raspored ključeva, TLSTREE, AEAD i ECDHE. Također prolazi kroz cijeli niz KAT testova.
- 4 testa integracije (samointeroperabilnost) putem stvarnih TCP soketa.
- Fuzz testovi za parsere: TlsMessageParser (8 metoda), TlsDerParser (3 metode), TlsOcspVerifier (1 metoda), radi osiguranja sigurnosti i smanjenja vektora napada na parsere.
- Arhitektonska rješenja:
- TlsHandshakeEngine - mašina stanja odvojena od I/O (za budući JSSE modul).
- Preopterećenja ByteBuffer-a za TlsRecord.protect/unprotect za NIO/JSSE.
- TLSTREE keš memorija (TlsTreeCache) - ponovno izračunavanje samo promijenjenih nivoa (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
