ΠΠΎΠ΄ΡΠ»Ρ crypto-gost-tls13 ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ TLS 1.3 (RFC 8446 + RFC 9367) Ρ ΠΠΠ‘Π’-ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΠ΅ΠΉ. ΠΠ°Π½Π½ΡΠΉ ΡΠ΅Π»ΠΈΠ· ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ Π³ΠΎΡΠΎΠ² Π΄Π»Ρ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΠΈΡΡΠΎΠΉ Java. ΠΡΠ΅ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ β Π±Π΅Π· Π²Π½Π΅ΡΠ½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ.
ΠΡΠΎ Π² ΡΠ²ΠΎΠ΅ΠΌ ΡΠΎΠ΄Π΅ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠΊΡΡΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ TLS 1.3 Ρ ΠΠΠ‘Π’ Π½Π° Java, ΠΏΠΎΡΡΠΎΠΌΡ interop-ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π² ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΌΠ΅.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
- ΠΡΠΎΡΠΎΠΊΠΎΠ»Ρ:
- Handshake: ΠΏΠΎΠ»Π½ΡΠΉ (client/server), ΡΠΎΠΊΡΠ°ΡΡΠ½Π½ΡΠΉ (PSK), Π²Π·Π°ΠΈΠΌΠ½ΡΠΉ (mTLS).
- ALPN (RFC 7301) β ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) β ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ° Π΄Π»Ρ multi-tenant ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΠΉ.
- KeyUpdate (RFC 8446 Β§4.6.3) β ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ΅ΠΉ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ°ΡΠΈΠΊΠ°.
- Cipher suites: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256-bit), CryptoPro-B (512-bit)
- Per-record TLSTREE re-keying β ΡΠΌΠ΅Π½Π° ΠΊΠ»ΡΡΠ° ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΡ TLS-Π·Π°ΠΏΠΈΡΡ.
- Π€ΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΈ ΡΠ±ΠΎΡΠΊΠ° ΡΡΠΊΠΎΠΏΠΎΠΆΠ°ΡΠΈΠΉ ΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΉ (RFC 8446 Β§5.1).
- Session resumption: PSK ΡΠ΅ΡΠ΅Π· NewSessionTicket (PskStore in-memory, single-use).
- OCSP stapling: ΡΠ΅ΡΠ²Π΅Ρ ΠΏΡΠΈΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ OCSP-ΠΎΡΠ²Π΅Ρ ΠΊ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ.
- Post-handshake messages: NewSessionTicket (ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π΄Π»Ρ PSK).
- ΠΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡ:
- Key schedule: HKDF-Streebog (RFC 5869) ΠΏΠΎ ΡΡ Π΅ΠΌΠ΅ TLS 1.3 (RFC 8446 Β§7.1).
- ΠΠ°ΡΠΈΡΠ° Π·Π°ΠΏΠΈΡΠ΅ΠΉ: MGM-AEAD (Kuznyechik) Ρ nonce ΠΏΠΎ RFC 8446 Β§5.3.
- ΠΡΠ΅ΠΌΠ΅ΡΠ½ΡΠ΅ ΠΊΠ»ΡΡΠΈ Π·Π°ΡΠΈΡΠ°ΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
- Π‘Π΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ:
- ΠΠ°ΡΡΠΈΠ½Π³ X.509v3 (GOST R 34.10-2012) β Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ DER-ΠΏΠ°ΡΡΠ΅Ρ.
- ΠΠ°Π»ΠΈΠ΄Π°ΡΠΈΡ ΡΠ΅ΠΏΠΎΡΠΊΠΈ: ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ, DN (issuer β subject), Basic Constraints, Key Usage, Extended Key * Usage (serverAuth / clientAuth), pathLen.
- ΠΡΠΎΠ²Π΅ΡΠΊΠ° hostname: dNSName + iPAddress (RFC 6125).
- ΠΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ OCSP-ΠΎΡΠ²Π΅ΡΠΎΠ² (RFC 6960).
4.Π’ΡΠ°Π½ΡΠΏΠΎΡΡ:
- TlsTransport β ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ.
- InMemoryTlsTransport β Π΄Π»Ρ ΡΠ΅ΡΡΠΎΠ² ΠΈ ΠΎΠ΄Π½ΠΎΠΏΡΠΎΡΠ΅ΡΡΠ½ΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² (in-memory ΠΎΡΠ΅ΡΠ΅Π΄Ρ).
- SocketTlsTransport β blocking I/O ΡΠ΅ΡΠ΅Π· java.net.Socket.
- ChannelTlsTransport β NIO SocketChannel-based transport (blocking mode, interruptible).
- ΠΠΎΡΠ°Π³ΠΎΠ²ΡΠΉ handshake:
- TlsHandshakeEngine β state machine Π΄Π»Ρ handshake (ΠΎΡΠ²ΡΠ·Π°Π½ ΠΎΡ I/O). ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ TlsSession ΠΊΠ°ΠΊ ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΎΡ; ΠΏΡΠΈΠ³ΠΎΠ΄Π΅Π½ Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ JSSE (SSLEngine).
- ByteBuffer API:
- TlsRecord.protect/unprotect β ByteBuffer-ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠΈ Π΄Π»Ρ zero-copy ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ NIO. ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΊΠ»ΡΡΠ΅ΠΉ:
- Pkcs12Loader β ΡΡΠ΅Π½ΠΈΠ΅ PFX (PKCS#12) Ρ PBKDF2-HMAC-SHA256 + AES-256-CBC.
- ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΈΠΈ:
- close_notify β ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ Π·Π°ΠΊΡΡΡΠΈΠ΅ ΠΏΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ.
- ΠΠ°ΡΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π° ΠΏΡΠΈ Π·Π°ΠΊΡΡΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΠ΅.
- ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° alert: fatal β Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ΅ Π·Π°ΠΊΡΡΡΠΈΠ΅ + Π·Π°ΡΠΈΡΠ°Π½ΠΈΠ΅.
- ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ:
- Constant-time ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π΄Π»Ρ verify_data ΠΈ PSK binders (Π·Π°ΡΠΈΡΠ° ΠΎΡ timing attacks)
- ΠΠ°ΡΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π°: destroy() Π½Π° Π²ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ Ρ ΠΊΠ»ΡΡΠ°ΠΌΠΈ (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), ΠΏΡΠΈ close, fatal alert, exception Π² handshake
- ΠΠ°ΡΠΈΡΠ° ΠΎΡ DoS: Π»ΠΈΠΌΠΈΡΡ Π½Π° Π΄Π»ΠΈΠ½Ρ ΡΠ΅ΠΏΠΎΡΠΊΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠ² (10), post-handshake messages, ΡΠ°Π·ΠΌΠ΅Ρ Π·Π°ΠΏΠΈΡΠ΅ΠΉ.
- MGM nonce: MSB ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π±Π°ΠΉΡΠ° ΠΎΡΠΈΡΠ°Π΅ΡΡΡ Π΄Π»Ρ ICN (RFC 9058 Β§3, RFC 9367 Β§3.3).
- ECDHE-ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ ΠΈ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡ handshake ΡΠ½ΠΈΡΡΠΎΠΆΠ°ΡΡΡΡ ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ handshake.
- HMAC-ΠΊΠ»ΡΡΠ΅Π²ΠΎΠΉ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» Π·Π°ΡΠΈΡΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ (HkdfStreebog, KdfGostR3411_2012_256).
- ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ:
- Π’ΠΎΠ»ΡΠΊΠΎ resumption PSK (0-RTT ΠΈ external PSK Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ).
- Π’ΠΎΠ»ΡΠΊΠΎ psk_dhe_ke (pure PSK Π±Π΅Π· ECDHE Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ).
- HelloRetryRequest (RFC 8446 Β§4.1.4) Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π° named group (GC256A ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ).
- Π’ΠΎΠ»ΡΠΊΠΎ ΠΠΠ‘Π’ (non-GOST cipher suites Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ).
- Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅:
- ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Known Answer Tests ΠΈΠ· RFC 9367 Appendix A.1 (L ΠΈ S Π²Π°ΡΠΈΠ°Π½ΡΡ) β ΠΏΠΎΠ»Π½ΡΠΉ key schedule, TLSTREE, AEAD, ECDHE. Π ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎΠ»Π½ΡΠΉ ΡΠΏΠ΅ΠΊΡΡ KAT ΡΠ΅ΡΡΠΎΠ².
- 4 ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠ΅ΡΡΠ° (self-interop) ΡΠ΅ΡΠ΅Π· ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ TCP-ΡΠΎΠΊΠ΅ΡΡ.
- Π€Π°Π·Π·ΠΈΠ½Π³-ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠ°ΡΡΠ΅ΡΠΎΠ²: TlsMessageParser (8 ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²), TlsDerParser (3 ΠΌΠ΅ΡΠΎΠ΄Π°), TlsOcspVerifier (1 ΠΌΠ΅ΡΠΎΠ΄), Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΡ Π²Π΅ΠΊΡΠΎΡΠ° Π°ΡΠ°ΠΊ Π½Π° ΠΏΠ°ΡΡΠ΅ΡΡ.
- ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ:
- TlsHandshakeEngine β state machine, ΠΎΡΠ²ΡΠ·Π°Π½Π½Π°Ρ ΠΎΡ I/O (Π΄Π»Ρ Π±ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ JSSE).
- ByteBuffer-ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠΈ TlsRecord.protect/unprotect Π΄Π»Ρ NIO/JSSE.
- TLSTREE ΠΊΡΡ (TlsTreeCache) β ΠΏΠ΅ΡΠ΅ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ²ΡΠΈΡ ΡΡ ΡΡΠΎΠ²Π½Π΅ΠΉ (RFC 9367).
- InMemoryTlsTransport.Pair β Π΄Π²ΡΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½Π°Ρ ΠΏΠ°ΡΠ° Π΄Π»Ρ ΡΠ΅ΡΡΠΎΠ² ΠΈ ΠΎΠ΄Π½ΠΎΠΏΡΠΎΡΠ΅ΡΡΠ½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠΉ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: linux.org.ru
