Lëshimi i parë i zbatimit të protokollit TLS 1.3 në Java me algoritme GOST sipas RFC 9367

Moduli crypto-gost-tls13 përmban një implementim TLS 1.3 (RFC 8446 + RFC 9367) me kriptografi GOST. Ky version është një version fillestar i bibliotekës dhe është i gatshëm për përdorim të brendshëm.

Karakteristika e bibliotekës është implementimi në Java të pastër. Të gjitha operacionet kriptografike kryhen nga mjetet e integruara të bibliotekës — pa varësi të jashtme.

Kjo është një nga implementimet e para të hapura të TLS 1.3 me GOST në Java, prandaj testimi i interoperabilitetit është realizuar në një shkallë minimale të disponueshme.

Më poshtë janë mundësitë e bibliotekës.

  1. Protokollat:
  • Handshake: i plotë (client/server), i shkurtuar (PSK), i ndërsjellë (mTLS).
  • ALPN (RFC 7301) — negociimi i protokollit të nivelit aplikativ (HTTP/2, HTTP/1.1).
  • SNI (RFC 6066) — përcaktimi i emrit server për implementimet multi-tenant.
  • KeyUpdate (RFC 8446 §4.6.3) — përditësimi i çelësave të enkriptimit të trafikut.
  • Cipher suites: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
  • ECDHE: CryptoPro-A (256-bit), CryptoPro-B (512-bit)
  • Per-record TLSTREE re-keying — ndryshimi i çelësit të enkriptimit për çdo regjistrim TLS.
  • Fraktimi dhe grumbullimi i dorëheqjeve dhe regjistrimeve (RFC 8446 §5.1).
  • Rikthimi i seancës: PSK përmes NewSessionTicket (PskStore në memorie, përdorim të vetëm).
  • OCSP stapling: server bashkëngjit përgjigjen OCSP në certifikat.
  • Post-handshake messages: NewSessionTicket (ruajtja për PSK).
  1. Kriptografia:
  • Plani i çelësit: HKDF-Streebog (RFC 5869) sipas skemës TLS 1.3 (RFC 8446 §7.1).
  • Mbrojtja e të dhënave: MGM-AEAD (Kuznyechik) me nonce sipas RFC 8446 §5.3.
  • Çelësat efemer fshihen pas përdorimit.
  1. Certifikatat:
  • Analiza X.509v3 (GOST R 34.10-2012) — parser DER i integruar.
  • Validimi i zinxhirit: nënshkrimet, DN (emitues → subjekt), Kufizimet Bazike, Përdorimi i Çelësit, Përdorimi i Zgjeruar të Çelësit (serverAuth / clientAuth), pathLen.
  • Kontrolli i hostname: dNSName + iPAddress (RFC 6125).
  • Verifikimi i përgjigjeve OCSP (RFC 6960).

4.Transporti:

  • TlsTransport — ndërfaqe.
  • InMemoryTlsTransport — për teste dhe skenarë njëprocesorë (kuotë në memorie).
  • SocketTlsTransport — bllokim I/O përmes java.net.Socket.
  • ChannelTlsTransport — transport i bazuar në NIO SocketChannel (modalitet bllokimi, ndërprerës).
  1. Handshake hap pas hapi:
  • TlsHandshakeEngine — makinë gjendjeje për handshake (e ndarë nga I/O). Përdoret TlsSession si orkestrues; e përshtatshme për integrim me JSSE (SSLEngine).
  1. API ByteBuffer:
  • TlsRecord.protect/unprotect — mbipërcaktimet e ByteBuffer për integrim zero-copy me NIO. Ngarkimi i çelësave:
  • Pkcs12Loader — leximi i PFX (PKCS#12) me PBKDF2-HMAC-SHA256 + AES-256-CBC.
  1. Përfundimi i seancës:
  • close_notify — mbyllje korrekte sipas protokollit.
  • Fshirja e materialit të çelësit gjatë mbylljes ose gabimit.
  • Trajtimi i alertit: fatal — mbyllje e menjëhershme + fshirje.
  1. Siguria e implementimit:
  • Krahasime me kohë konstante për verify_data dhe PSK binders (mbrojtje nga sulmet e kohës)
  • Shkëputja e materialit kryesor: destroy() në të gjitha objektet me çelësa (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), në close, alarmin fatal, përjashtim në handshake
  • Mbrojtja nga DoS: kufizime mbi gjatësi e zinxhirit të certifikatave (10), mesazhet post-handshake, madhësia e të dhënave.
  • MGM nonce: MSB i byte-it të parë blihet për ICN (RFC 9058 §3, RFC 9367 §3.3).
  • Çelësi privat ECDHE dhe transkripti i handshake shkatërrohen pas përfundimit të handshake.
  • Materiali i çelësit HMAC fshihet pas përdorimit (HkdfStreebog, KdfGostR3411_2012_256).
  1. Kufizime:
  • Vetëm resumption PSK (0-RTT dhe PSK të jashtëzakonshme nuk mbështeten).
  • Vetëm psk_dhe_ke (pure PSK pa ECDHE nuk mbështetet).
  • HelloRetryRequest (RFC 8446 §4.1.4) nuk mbështetet - përdoret vetëm një grup i emërtuar (GC256A si parazgjedhje).
  • Vetëm GOST (pazgjidhjet jo-GOST nuk mbështeten).
  1. Testimi:
  • Biblioteka përmban Testet e Njohura të Përgjigjes nga RFC 9367 Prandah A.1 (varianti L dhe S) - plani i plotë i çelësit, TLSTREE, AEAD, ECDHE. Dhe kalon një gamë të plotë testesh KAT.
  • 4 teste integrimi (self-interop) përmes soketeve reale TCP.
  • Teste fuzzing për parserët: TlsMessageParser (8 metoda), TlsDerParser (3 metoda), TlsOcspVerifier (1 metodë), për të siguruar sigurinë dhe për të zvogëluar vektorin e sulmeve në parserët.
  1. Zgjidhjet arkitekturore:
  • TlsHandshakeEngine - makinë gjendjeje, e çliruar nga I/O (për modul të ardhshëm JSSE).
  • ByteBuffer-ngarkesat TlsRecord.protect/unprotect për NIO/JSSE.
  • TLSTREE cache (TlsTreeCache) — ri-kalkulimi vetëm i niveleve të ndryshuara (RFC 9367).
  • InMemoryTlsTransport.Pair — çift dypërdorimshëm për teste dhe ndërveprim të një procesi.

Biblioteka shpërndahet nën një licencë të lirë.

Burimi: linux.org.ru

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster