Modulis crypto-gost-tls13 apima įgyvendinimą TLS 1.3 (RFC 8446 + RFC 9367) su GOST kriptografija. Ši versija yra pradinė bibliotekos versija ir yra paruošta vidiniam naudojimui.
Unikali bibliotekos savybė yra grynas „Java“ įgyvendinimas. Visos kriptografinės operacijos atliekamos naudojant bibliotekoje integruotus įrankius, be jokių išorinių priklausomybių.
Tai vienas pirmųjų atvirojo kodo TLS 1.3 su GOST diegimų Java kalboje, todėl sąveikumo testavimas buvo atliktas kuo mažiau.
Žemiau pateikiamos bibliotekos galimybės.
- Protokolai:
- Rankos paspaudimas: pilnas (klientas/serveris), trumpas (PSK), abipusis (mTLS).
- ALPN (RFC 7301) – taikomųjų programų lygmens protokolo derybos (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) – pavadinimo nurodymas serveris kelių nuomininkų diegimui.
- „KeyUpdate“ (RFC 8446 §4.6.3) – srauto šifravimo raktų atnaujinimas.
- Šifravimo rinkiniai: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: „CryptoPro-A“ (256 bitų), „CryptoPro-B“ (512 bitų)
- TLSTREE įrašo šifravimo rakto keitimas – kiekvieno TLS įrašo šifravimo rakto keitimas.
- Rankų paspaudimų ir įrašų fragmentavimas ir pakartotinis surinkimas (RFC 8446 §5.1).
- Sesijos atnaujinimas: PSK per „NewSessionTicket“ („PskStore“ atmintyje, vienkartinio naudojimo).
- OCSP susegimas: serverio prideda OCSP atsakymą prie sertifikato.
- Pranešimai po rankos paspaudimo: „NewSessionTicket“ (išsaugoti PSK).
- Kriptografija:
- Pagrindinis tvarkaraštis: HKDF-Streebog (RFC 5869) per TLS 1.3 (RFC 8446 §7.1).
- Įrašo apsauga: MGM-AEAD (Kuznyechik) su nonce pagal RFC 8446 §5.3.
- Trumpalaikiai raktai ištrinami po naudojimo.
- Sertifikatai:
- X.509v3 analizavimas (GOST R 34.10-2012) — integruotas DER analizatorius.
- Patvirtinimo grandinė: parašai, DN (išdavėjas → subjektas), pagrindiniai apribojimai, rakto naudojimas, išplėstinis rakto naudojimas (serverio autentifikavimas / kliento autentifikavimas), kelio ilgis.
- Pagrindinio kompiuterio pavadinimo patikra: dNSName + iPAddress (RFC 6125).
- OCSP atsakymų patikrinimas (RFC 6960).
4.Transportas:
- TlsTransport – sąsaja.
- „InMemoryTlsTransport“ – testams ir vieno proceso scenarijams (eilė atmintyje).
- „SocketTlsTransport“ – įvesties/išvesties blokavimas per java.net.Socket.
- „ChannelTlsTransport“ – NIO „Socket“ kanalu pagrįstas perdavimas (blokavimo režimas, pertraukiamas).
- Žingsnis po žingsnio rankos paspaudimas:
- „TlsHandshakeEngine“ yra būsenos mašina, skirta pasisveikinimui (atjungta nuo įvesties/išvesties). Ji naudoja „TlsSession“ kaip orkestratorių ir yra tinkama integracijai su JSSE (SSLEngine).
- „ByteBuffer“ API:
- „TlsRecord.protect/unprotect“ – „ByteBuffer“ perkrauna, kad būtų galima integruoti su NIO be kopijavimo. Raktų įkėlimas:
- „Pkcs12Loader“ – skaito PFX (PKCS#12) su PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Sesijos pabaiga:
- close_notify – teisingas uždarymas pagal protokolą.
- Rakto medžiagos valymas uždarant arba padarant klaidą.
- Įspėjimas dėl tvarkymo: mirtinas – nedelsiant uždaryti + ištrinti.
- Įgyvendinimo saugumas:
- Pastovaus laiko palyginimai verify_data ir PSK segtuvams (apsauga nuo laiko atakų)
- Rakto medžiagos valymas: destroy() visiems objektams su raktais (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), uždarius, kritinis įspėjimas, išimtis rankos paspaudime
- Apsauga nuo atakų (DoS): sertifikatų grandinės ilgio (10), pranešimų po pasisveikinimo, įrašo dydžio apribojimai.
- MGM nonce: Pirmojo baito MSB išvalomas ICN (RFC 9058 §3, RFC 9367 §3.3).
- ECDHE privatusis raktas ir pasisveikinimo transkripcija sunaikinami pasibaigus pasisveikinimui.
- HMAC rakto medžiaga ištrinama po naudojimo („HkdfStreebog“, „KdfGostR3411_2012_256“).
- Apribojimai:
- Tik atnaujinimo PSK (0-RTT ir išorinis PSK nepalaikomi).
- Tik psk_dhe_ke (grynas PSK be ECDHE nepalaikomas).
- „HelloRetryRequest“ (RFC 8446 §4.1.4) nepalaikoma – naudojama tik viena įvardyta grupė (pagal numatytuosius nustatymus – GC256A).
- Tik GOST (ne GOST šifravimo rinkiniai nepalaikomi).
- Testavimas:
- Bibliotekoje yra žinomų atsakymų testai iš RFC 9367 A.1 priedo (L ir S variantai) – pilnas raktų sąrašas, TLSTREE, AEAD ir ECDHE. Ji taip pat išlaiko visus KAT testus.
- 4 integracijos testai (savarankiškas sąveikavimas) per tikrus TCP lizdus.
- Apytiksliai testai, skirti analizatoriams: „TlsMessageParser“ (8 metodai), „TlsDerParser“ (3 metodai), „TlsOcspVerifier“ (1 metodas), siekiant užtikrinti saugumą ir sumažinti atakų vektorių prieš analizatorius.
- Architektūriniai sprendimai:
- „TlsHandshakeEngine“ – būsenos mašina, atjungta nuo įvesties/išvesties (būsimui JSSE moduliui).
- „ByteBuffer“ perkrauna „TlsRecord.protect/unprotect“ NIO/JSSE atveju.
- TLSTREE talpykla („TlsTreeCache“) – tik pakeistų lygių perskaičiavimas (RFC 9367).
- „InMemoryTlsTransport.Pair“ yra dvikryptė pora, skirta testams ir vieno proceso komunikacijai.
Biblioteka platinama pagal nemokamą licenciją.
Šaltinis: linux.org.ru
