Modul kripto-gost-tls13 ngandhut implementasi TLS 1.3 (RFC 8446 + RFC 9367) nganggo kriptografi GOST. Rilis iki minangka versi awal saka perpustakaan lan wis siap digunakake internal.
Fitur unik saka perpustakaan iki yaiku implementasine Java murni. Kabeh operasi kriptografi ditindakake nggunakake piranti bawaan perpustakaan, tanpa katergantungan eksternal.
Iki minangka salah sawijining implementasi sumber terbuka pertama saka TLS 1.3 karo GOST ing Java, mula pengujian interop wis ditindakake sabisa-bisane.
Ing ngisor iki kapabilitas perpustakaan.
- Protokol:
- Jabat tangan: lengkap (klien/server), cendhak (PSK), bebarengan (mTLS).
- ALPN (RFC 7301) - Negosiasi Protokol Lapisan Aplikasi (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) - Indikasi Jeneng server kanggo panyebaran multi-tenant.
- KeyUpdate (RFC 8446 §4.6.3) – nganyari kunci enkripsi lalu lintas.
- Suite Cipher: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256-bit), CryptoPro-B (512-bit)
- Pangowahan kunci TLSTREE saben rekaman — ngganti kunci enkripsi kanggo saben rekaman TLS.
- Fragmentasi lan perakitan maneh jabat tangan lan cathetan (RFC 8446 §5.1).
- Nerusake sesi: PSK liwat NewSessionTicket (PskStore ing memori, panggunaan sapisan).
- Stapel OCSP: server прикладывает OCSP-ответ к сертификату.
- Pesen sawise jabat tangan: NewSessionTicket (kajaba PSK).
- Kriptografi:
- Jadwal kunci: HKDF-Streebog (RFC 5869) liwat TLS 1.3 (RFC 8446 §7.1).
- Proteksi cathetan: MGM-AEAD (Kuznyechik) nganggo nonce miturut RFC 8446 §5.3.
- Tombol sementara dibusak sawise digunakake.
- Sertifikat:
- Parsing X.509v3 (GOST R 34.10-2012) — parser DER bawaan.
- Rantai validasi: tanda tangan, DN (penerbit → subjek), Kendala Dasar, Panggunaan Kunci, Panggunaan Kunci Tambahan * (serverAuth / clientAuth), pathLen.
- Pamriksan jeneng host: dNSName + iPAddress (RFC 6125).
- Verifikasi respon OCSP (RFC 6960).
4.Angkutan:
- Antarmuka TlsTransport.
- InMemoryTlsTransport - kanggo skenario tes lan proses tunggal (antrian ing memori).
- SocketTlsTransport — mblokir I/O liwat java.net.Socket.
- Transportasi Saluran - Transportasi berbasis NIO SocketChannel (mode pamblokiran, interupsi).
- Langkah demi langkah jabat tangan:
- TlsHandshakeEngine kuwi mesin status kanggo handshake (dipisah saka I/O). Mesin iki nggunakake TlsSession minangka orkestrator lan cocok kanggo integrasi karo JSSE (SSLEngine).
- API ByteBuffer:
- TlsRecord.protect/unprotect — ByteBuffer kakehan beban kanggo integrasi nol-salinan karo NIO. Tombol sing lagi dimuat:
- Pkcs12Loader — maca PFX (PKCS#12) nganggo PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Pungkasan sesi:
- close_notify - nutup kanthi bener miturut protokol.
- Ngusap bahan kunci nalika nutup utawa nggawe kesalahan.
- Peringatan penanganan: fatal - nutup langsung + mbusak.
- Keamanan implementasi:
- Perbandingan wektu-konstan kanggo pengikat verify_data lan PSK (proteksi marang serangan wektu)
- Ngilangi materi kunci: destroy() ing kabeh obyek nganggo kunci (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), nalika cedhak, tandha fatal, pangecualian ing jabat tangan
- Proteksi DoS: watesan dawa rantai sertifikat (10), pesen sawise jabat tangan, ukuran rekaman.
- MGM nonce: MSB saka byte pisanan dibusak kanggo ICN (RFC 9058 §3, RFC 9367 §3.3).
- Kunci pribadi ECDHE lan transkrip jabat tangan bakal dirusak sawise jabat tangan rampung.
- Materi kunci HMAC dibusak sawise digunakake (HkdfStreebog, KdfGostR3411_2012_256).
- Watesan:
- Nerusake maneh PSK wae (0-RTT lan PSK eksternal ora didhukung).
- Mung psk_dhe_ke (PSK murni tanpa ECDHE ora didhukung).
- HelloRetryRequest (RFC 8446 §4.1.4) ora didhukung - mung siji grup sing dijenengi sing digunakake (GC256A minangka standar).
- Mung GOST (suite sandi non-GOST ora didhukung).
- Testing:
- Perpustakaan iki ngemot Tes Jawaban sing Dikenal saka RFC 9367 Lampiran A.1 (varian L lan S)—jadwal kunci lengkap, TLSTREE, AEAD, lan ECDHE. Perpustakaan iki uga lulus kabeh tes KAT.
- 4 tes integrasi (interop mandiri) liwat soket TCP nyata.
- Tes fuzz kanggo parser: TlsMessageParser (8 metode), TlsDerParser (3 metode), TlsOcspVerifier (1 metode), kanggo njamin keamanan lan nyuda vektor serangan ing parser.
- Solusi arsitektur:
- TlsHandshakeEngine - mesin status dipisahake saka I/O (kanggo modul JSSE ing mangsa ngarep).
- Kelebihan TlsRecord.protect/unprotect saka ByteBuffer kanggo NIO/JSSE.
- Cache TLSTREE (TlsTreeCache) - pitungan ulang mung level sing diganti (RFC 9367).
- InMemoryTlsTransport.Pair kuwi pasangan bidirectional kanggo tes lan komunikasi proses tunggal.
Perpustakaan iki disebarake miturut lisensi gratis.
Source: linux.org.ru
