Moodul crypto-gost-tls13 sisaldab ellu viimistlemist TLS 1.3 (RFC 8446 + RFC 9367) GOST-krüptograafiaga. See väljaanne on raamatukogu algversioon ja valmis sisemiseks kasutamiseks.
Raamatukogu eripära on puhta Java teostus. Kõik krüptograafilised operatsioonid viiakse läbi raamatukogu sisseehitatud vahenditega - väliste sõltuvusteta.
See on omaette üks esimesi avatud TLS 1.3 GOST rakendusi Java-s, seetõttu on interop-testimine teostatud minimaalsetes tingimustes.
Allpool on välja toodud raamatukogu võimalused.
- Protokollid:
- Handshake: täielik (client/server), lühendatud (PSK), vastastikune (mTLS).
- ALPN (RFC 7301) - rakenduste tasandi protokolli läbirääkimine (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) - nime määramine serverid multi-tenant rakenduste jaoks.
- KeyUpdate (RFC 8446 §4.6.3) - krüptimise võtmete värskendamine.
- Cipher suites: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256-bit), CryptoPro-B (512-bit)
- Per-record TLSTREE re-keying - krüpteerimisse võtme vahetamine iga TLS-kirje kohta.
- Käepigistuste ja kirjete fragmentimine ja koostamine (RFC 8446 §5.1).
- Seansi taastamine: PSK läbi NewSessionTicket (PskStore in-memory, ühekordne kasutamine).
- OCSP stapling: server kinnitab OCSP-vastuse sertifikaadile.
- Post-handshake sõnumid: NewSessionTicket (salvestamine PSK jaoks).
- Krüptograafia:
- Key schedule: HKDF-Streebog (RFC 5869) TLS 1.3 skeemi järgi (RFC 8446 §7.1).
- Kirjete kaitse: MGM-AEAD (Kuznyechik) nonce'i abil vastavalt RFC 8446 §5.3.
- Efkefeerilised võtmed kustutatakse pärast kasutamist.
- Sertifikaadid:
- X.509v3 analüüs (GOST R 34.10-2012) - sisse ehitatud DER-parser.
- Ahelate valideerimine: allkirjad, DN (väljaandja → subjekt), põhi piirangud, võtme kasutamine, laiendatud võtme * kasutamine (serverAuth / clientAuth), pathLen.
- Hostname'i kontroll: dNSName + iPAddress (RFC 6125).
- OCSP-vastuste valideerimine (RFC 6960).
4.Transport:
- TlsTransport - liides.
- InMemoryTlsTransport - testide ja ühes protsessis stsenaariumide jaoks (in-memory järjekord).
- SocketTlsTransport - blokeeriv I/O kaudu java.net.Socket.
- ChannelTlsTransport - NIO SocketChannel-põhine transport (blokeerimise režiim, katkestatav).
- Samm-sammult handshake:
- TlsHandshakeEngine - olekumasin handshake'i jaoks (I/O-st lahti seotud). Kasutatakse TlsSession'it orkestrina; sobib JSSE (SSLEngine) integreerimiseks.
- ByteBuffer API:
- TlsRecord.protect/unprotect - ByteBuffer'i ülekanded zero-copy integreerimiseks NIO-iga. Võtmete laadimine:
- Pkcs12Loader - PFX (PKCS#12) lugemine PBKDF2-HMAC-SHA256 + AES-256-CBC abil.
- Seansi lõpuleviimine:
- close_notify - korrektne sulgemine protokolli järgi.
- Võtme materjali kustutamine sulgemisel või vea korral.
- Alertide töötlemine: fatal - kohene sulgemine + kustutamine.
- Rakenduse turvalisus:
- Constant-time võrdlemine verify_data ja PSK binders (aeg-haavatavuste kaitse)
- Kriitilise materjali kustutamine: destroy() kõigis objektides, millel on võtmed (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), kui sulgeda, fatali häire, erand käepideme ajal.
- DoS kaitse: sertifikaatide ahela pikkuse piirangud (10), post-handshake sõnumid, salvestuste suurus.
- MGM nonce: ICN-i esimese byte'i MSB puhastatakse (RFC 9058 §3, RFC 9367 §3.3).
- ECDHE privaatvõti ja käepideme transkriptsioon hävitatakse pärast käepideme lõpetamist.
- HMAC võtmematerjal puhastatakse pärast kasutamist (HkdfStreebog, KdfGostR3411_2012_256).
- Piirangud:
- Ainult jätkamis PSK (0-RTT ja väline PSK ei ole toetatud).
- Ainult psk_dhe_ke (puht PSK ilma ECDHE ei ole toetatud).
- HelloRetryRequest (RFC 8446 §4.1.4) ei ole toetatud — kasutatakse ainult üht named group'i (GC256A vaikimisi).
- Ainult GOST (non-GOST krüptosüsteemide komplekte ei toetata).
- Testimine:
- Raamatukogu sisaldab tuntud vastuse teste RFC 9367 lisa A.1 (L ja S variandid) - täielik võtme ajakava, TLSTREE, AEAD, ECDHE. Ja läbib täielikku KAT testide spektrit.
- 4 integreerimistesti (self-interop) reaalse TCP-soketi kaudu.
- Fuzzing-testid parserite jaoks: TlsMessageParser (8 meetodit), TlsDerParser (3 meetodit), TlsOcspVerifier (1 meetod), et tagada turvalisus ja vähendada rünnakuvõimalusi parserite suhtes.
- Arhitektuursed lahendused:
- TlsHandshakeEngine - oleku masin, mis on lahutatud I/O-st (tulevast JSSE moodulit silmas pidades).
- ByteBuffer ülekoormus TlsRecord.protect/unprotect NIO/JSSE jaoks.
- TLSTREE cache (TlsTreeCache) - ümberarvutamine ainult muudetud tasanditele (RFC 9367).
- InMemoryTlsTransport.Pair - kahepoolne paar testide ja üheprotsessilise suhtluse jaoks.
Raamatukogu on vabakutselise litsentsi alusel.
Allikas: linux.org.ru
