Rilis pertama implementasi protokol TLS 1.3 dalam Java dengan algoritma GOST sesuai dengan RFC 9367.

Modul kripto-gost-tls13 berisi implementasi TLS 1.3 (RFC 8446 + RFC 9367) dengan kriptografi GOST. Rilis ini adalah versi awal dari pustaka dan siap untuk penggunaan internal.

Salah satu fitur unik dari pustaka ini adalah implementasinya yang sepenuhnya berbasis Java. Semua operasi kriptografi dilakukan menggunakan alat bawaan pustaka, tanpa ketergantungan eksternal.

Ini adalah salah satu implementasi open source pertama dari TLS 1.3 dengan GOST di Java, sehingga pengujian interoperabilitas telah dilakukan seminimal mungkin.

Berikut adalah kemampuan perpustakaan tersebut.

  1. Protokol:
  • Jabat tangan: penuh (klien/server), singkat (PSK), timbal balik (mTLS).
  • ALPN (RFC 7301) - Negosiasi Protokol Lapisan Aplikasi (HTTP/2, HTTP/1.1).
  • SNI (RFC 6066) - Indikasi Nama server untuk penerapan multi-tenant.
  • KeyUpdate (RFC 8446 §4.6.3) – memperbarui kunci enkripsi lalu lintas.
  • Rangkaian sandi: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
  • ECDHE: CryptoPro-A (256-bit), CryptoPro-B (512-bit)
  • Penggantian kunci TLSTREE per-rekaman — mengubah kunci enkripsi untuk setiap rekaman TLS.
  • Fragmentasi dan penyusunan kembali jabat tangan dan catatan (RFC 8446 §5.1).
  • Pengaktifan kembali sesi: PSK melalui NewSessionTicket (PskStore dalam memori, sekali pakai).
  • Penjepitan OCSP: server Menambahkan respons OCSP ke sertifikat.
  • Pesan pasca-jabat tangan: NewSessionTicket (kecuali untuk PSK).
  1. Kriptografi:
  • Jadwal utama: HKDF-Streebog (RFC 5869) melalui TLS 1.3 (RFC 8446 §7.1).
  • Perlindungan rekaman: MGM-AEAD (Kuznyechik) dengan nonce sesuai dengan RFC 8446 §5.3.
  • Kunci sementara akan dihapus setelah digunakan.
  1. Sertifikat:
  • Penguraian X.509v3 (GOST R 34.10-2012) — pengurai DER bawaan.
  • Rantai validasi: tanda tangan, DN (penerbit → subjek), Batasan Dasar, Penggunaan Kunci, Penggunaan Kunci Tambahan * (serverAuth / clientAuth), pathLen.
  • Pemeriksaan nama host: dNSName + iPAddress (RFC 6125).
  • Verifikasi respons OCSP (RFC 6960).

4.Transportasi:

  • TlsTransport - antarmuka.
  • InMemoryTlsTransport - untuk pengujian dan skenario proses tunggal (antrian dalam memori).
  • SocketTlsTransport — I/O pemblokiran melalui java.net.Socket.
  • ChannelTlsTransport - Transportasi berbasis SocketChannel NIO (mode pemblokiran, dapat diinterupsi).
  1. Langkah demi langkah berjabat tangan:
  • TlsHandshakeEngine adalah mesin keadaan untuk jabat tangan (terpisah dari I/O). Ia menggunakan TlsSession sebagai pengatur dan cocok untuk diintegrasikan dengan JSSE (SSLEngine).
  1. API ByteBuffer:
  • TlsRecord.protect/unprotect — Overload ByteBuffer untuk integrasi zero-copy dengan NIO. Memuat kunci:
  • Pkcs12Loader — membaca PFX (PKCS#12) dengan PBKDF2-HMAC-SHA256 + AES-256-CBC.
  1. Akhir sesi:
  • close_notify - penutupan yang benar sesuai dengan protokol.
  • Menghapus materi kunci saat menutup atau membuat kesalahan.
  • Penanganan peringatan: fatal - penutupan dan penghapusan segera.
  1. Keamanan implementasi:
  • Perbandingan waktu konstan untuk pengikat verify_data dan PSK (perlindungan terhadap serangan waktu)
  • Menghapus materi kunci: destroy() pada semua objek dengan kunci (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), saat ditutup, peringatan fatal, pengecualian dalam jabat tangan
  • Perlindungan DoS: batasan pada panjang rantai sertifikat (10), pesan pasca-jabat tangan, ukuran rekaman.
  • Nonce MGM: MSB dari byte pertama dibersihkan untuk ICN (RFC 9058 §3, RFC 9367 §3.3).
  • Kunci privat ECDHE dan transkrip jabat tangan akan dimusnahkan setelah proses jabat tangan selesai.
  • Materi kunci HMAC dihapus setelah digunakan (HkdfStreebog, KdfGostR3411_2012_256).
  1. Keterbatasan:
  • Hanya PSK pemulihan (0-RTT dan PSK eksternal tidak didukung).
  • Hanya psk_dhe_ke (PSK murni tanpa ECDHE tidak didukung).
  • HelloRetryRequest (RFC 8446 §4.1.4) tidak didukung - hanya satu grup bernama yang digunakan (GC256A secara default).
  • Hanya GOST (rangkaian sandi non-GOST tidak didukung).
  1. Pengujian:
  • Pustaka ini berisi Tes Jawaban yang Diketahui dari RFC 9367 Lampiran A.1 (varian L dan S)—jadwal kunci lengkap, TLSTREE, AEAD, dan ECDHE. Pustaka ini juga lolos seluruh rangkaian tes KAT.
  • 4 pengujian integrasi (interoperabilitas mandiri) melalui soket TCP sungguhan.
  • Pengujian fuzz untuk parser: TlsMessageParser (8 metode), TlsDerParser (3 metode), TlsOcspVerifier (1 metode), untuk memastikan keamanan dan mengurangi vektor serangan pada parser.
  1. Solusi arsitektur:
  • TlsHandshakeEngine - mesin keadaan yang terpisah dari I/O (untuk modul JSSE di masa mendatang).
  • Overload ByteBuffer dari TlsRecord.protect/unprotect untuk NIO/JSSE.
  • Cache TLSTREE (TlsTreeCache) - penghitungan ulang hanya level yang berubah (RFC 9367).
  • InMemoryTlsTransport.Pair adalah pasangan dua arah untuk pengujian dan komunikasi proses tunggal.

Pustaka ini didistribusikan di bawah lisensi gratis.

Sumber: linux.org.ru

Beli hosting yang andal untuk situs dengan perlindungan DDoS, server VPS VDS 🔥 Beli hosting website andal dengan perlindungan DDoS, server VPS VDS | ProHoster