Keluaran pertama pelaksanaan protokol TLS 1.3 dalam Java dengan algoritma GOST mengikut RFC 9367

Modul kripto-gost-tls13 mengandungi pelaksanaan TLS 1.3 (RFC 8446 + RFC 9367) dengan kriptografi GOST. Keluaran ini merupakan versi awal perpustakaan dan sedia untuk kegunaan dalaman.

Satu ciri unik perpustakaan ini ialah pelaksanaan Java tulennya. Semua operasi kriptografi dilakukan menggunakan alat terbina dalam perpustakaan, tanpa kebergantungan luaran.

Ini merupakan salah satu pelaksanaan sumber terbuka pertama TLS 1.3 dengan GOST dalam Java, jadi pengujian interop telah dilakukan seminimal mungkin.

Berikut adalah keupayaan perpustakaan.

  1. Protokol:
  • Jabat tangan: penuh (klien/pelayan), pendek (PSK), bersama (mTLS).
  • ALPN (RFC 7301) - Rundingan Protokol Lapisan Aplikasi (HTTP/2, HTTP/1.1).
  • SNI (RFC 6066) - Petunjuk Nama pelayan untuk penggunaan berbilang penyewa.
  • KeyUpdate (RFC 8446 §4.6.3) – mengemas kini kunci penyulitan trafik.
  • Suite sifir: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
  • ECDHE: CryptoPro-A (256-bit), CryptoPro-B (512-bit)
  • Penetapan semula TLSTREE setiap rekod — menukar kunci penyulitan untuk setiap rekod TLS.
  • Pemecahan dan pemasangan semula jabat tangan dan rekod (RFC 8446 §5.1).
  • Penyambungan semula sesi: PSK melalui NewSessionTicket (PskStore dalam memori, guna sekali).
  • Pengikatan OCSP: pelayan прикладывает OCSP-ответ к сертификату.
  • Mesej selepas berjabat tangan: NewSessionTicket (kecuali PSK).
  1. Kriptografi:
  • Jadual utama: HKDF-Streebog (RFC 5869) melalui TLS 1.3 (RFC 8446 §7.1).
  • Perlindungan rekod: MGM-AEAD (Kuznyechik) dengan nonce mengikut RFC 8446 §5.3.
  • Kekunci sementara dipadamkan selepas digunakan.
  1. Sijil:
  • Penghuraian X.509v3 (GOST R 34.10-2012) — penghurai DER terbina dalam.
  • Rantaian pengesahan: tandatangan, DN (penerbit → subjek), Kekangan Asas, Penggunaan Kekunci, Penggunaan Kekunci Lanjutan * (serverAuth / clientAuth), pathLen.
  • Semakan nama hos: dNSName + iPAddress (RFC 6125).
  • Pengesahan respons OCSP (RFC 6960).

4.Pengangkutan:

  • TlsTransport - antara muka.
  • InMemoryTlsTransport - untuk ujian dan senario proses tunggal (baris gilir dalam memori).
  • SocketTlsTransport — menyekat I/O melalui java.net.Socket.
  • Pengangkutan Saluran - Pengangkutan berasaskan SocketChannel NIO (mod penyekatan, boleh diganggu).
  1. Jabat tangan langkah demi langkah:
  • TlsHandshakeEngine ialah mesin keadaan untuk jabat tangan (diasingkan daripada I/O). Ia menggunakan TlsSession sebagai orkestrator dan sesuai untuk penyepaduan dengan JSSE (SSLEngine).
  1. API ByteBuffer:
  • TlsRecord.protect/unprotect — ByteBuffer membebankan untuk penyepaduan salinan sifar dengan NIO. Memuatkan kekunci:
  • Pkcs12Loader — membaca PFX (PKCS#12) dengan PBKDF2-HMAC-SHA256 + AES-256-CBC.
  1. Tamat sesi:
  • close_notify - betulkan penutupan mengikut protokol.
  • Mengelap bahan utama semasa menutup atau membuat kesilapan.
  • Amaran pengendalian: membawa maut - penutupan serta-merta + pemadaman.
  1. Keselamatan pelaksanaan:
  • Perbandingan masa malar untuk pengikat verify_data dan PSK (perlindungan terhadap serangan pemasaan)
  • Mengelap bahan kunci: destroy() pada semua objek dengan kunci (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), pada jarak dekat, amaran maut, pengecualian dalam jabat tangan
  • Perlindungan DoS: had pada panjang rantai sijil (10), mesej pasca jabat tangan, saiz rekod.
  • MGM nonce: MSB bagi bait pertama dikosongkan untuk ICN (RFC 9058 §3, RFC 9367 §3.3).
  • Kunci peribadi ECDHE dan transkrip jabat tangan dimusnahkan selepas jabat tangan selesai.
  • Bahan kunci HMAC dipadamkan selepas digunakan (HkdfStreebog, KdfGostR3411_2012_256).
  1. Had:
  • PSK penyambungan semula sahaja (0-RTT dan PSK luaran tidak disokong).
  • Hanya psk_dhe_ke (PSK tulen tanpa ECDHE tidak disokong).
  • HelloRetryRequest (RFC 8446 §4.1.4) tidak disokong - hanya satu kumpulan bernama yang digunakan (GC256A secara lalai).
  • GOST sahaja (suite sifer bukan GOST tidak disokong).
  1. Ujian:
  • Perpustakaan ini mengandungi Ujian Jawapan yang Diketahui daripada RFC 9367 Lampiran A.1 (varian L dan S)—jadual kunci penuh, TLSTREE, AEAD, ECDHE. Ia juga lulus pelbagai ujian KAT.
  • 4 ujian integrasi (interop kendiri) melalui soket TCP sebenar.
  • Ujian kabur untuk penghurai: TlsMessageParser (8 kaedah), TlsDerParser (3 kaedah), TlsOcspVerifier (1 kaedah), untuk memastikan keselamatan dan mengurangkan vektor serangan pada penghurai.
  1. Penyelesaian seni bina:
  • TlsHandshakeEngine - mesin keadaan diasingkan daripada I/O (untuk modul JSSE masa hadapan).
  • Beban berlebihan ByteBuffer bagi TlsRecord.protect/unprotect untuk NIO/JSSE.
  • Cache TLSTREE (TlsTreeCache) - pengiraan semula hanya tahap yang diubah (RFC 9367).
  • InMemoryTlsTransport.Pair ialah pasangan dwiarah untuk ujian dan komunikasi proses tunggal.

Perpustakaan ini diedarkan di bawah lesen percuma.

Sumber: linux.org.ru

Beli pengehosan yang boleh dipercayai untuk tapak dengan perlindungan DDoS, pelayan VPS VDS 🔥 Beli pengehosan laman web yang boleh dipercayai dengan perlindungan DDoS, pelayan VPS VDS | ProHoster