๊ธฐ์ค ์น์ ํฌ๋ฆฝํ -๊ณ ์คํธ-tls13 ๊ตฌํ ๋ด์ฉ์ด ํฌํจ๋์ด ์์ต๋๋ค. TLS 1.3 (RFC 8446 + RFC 9367) GOST ์ํธํ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฒ ๋ฆด๋ฆฌ์ค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ด๊ธฐ ๋ฒ์ ์ด๋ฉฐ ๋ด๋ถ ์ฌ์ฉ์ ์ํด ์ค๋น๋์์ต๋๋ค.
์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ ํนํ ํน์ง์ ์์ ์๋ฐ๋ก ๊ตฌํ๋์๋ค๋ ์ ์ ๋๋ค. ๋ชจ๋ ์ํธํ ์์ ์ ์ธ๋ถ ์ข ์์ฑ ์์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ด์ฅ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค.
์ด๊ฒ์ Java๋ก ๊ตฌํ๋ GOST ํ์ค์ ์ค์ํ๋ TLS 1.3์ ์ต์ด ์คํ ์์ค ๊ตฌํ ์ค ํ๋์ด๋ฏ๋ก, ์ํธ ์ด์ฉ์ฑ ํ ์คํธ๋ ์ต์ํ์ ๋ฒ์ ๋ด์์๋ง ์ํ๋์์ต๋๋ค.
์๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ฅ์ ๋๋ค.
- ํ๋กํ ์ฝ:
- ํธ๋์ ฐ์ดํฌ: ์ ์ฒด(ํด๋ผ์ด์ธํธ/์๋ฒ), ๊ฐ๋ตํ(PSK), ์ํธ(mTLS).
- ALPN(RFC 7301) - ์์ฉ ๊ณ์ธต ํ๋กํ ์ฝ ํ์(HTTP/2, HTTP/1.1).
- SNI(RFC 6066) - ์ด๋ฆ ํ์ ์๋ฒ ๋ค์ค ํ ๋ํธ ๋ฐฐํฌ์ฉ์ ๋๋ค.
- KeyUpdate(RFC 8446 ยง4.6.3) โ ํธ๋ํฝ ์ํธํ ํค ์ ๋ฐ์ดํธ.
- ์ํธํ ์ ํ๊ตฐ: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A(256๋นํธ), CryptoPro-B(512๋นํธ)
- ๋ ์ฝ๋๋ณ TLSTREE ํค ์ฌ์ค์ โ ๊ฐ TLS ๋ ์ฝ๋์ ๋ํ ์ํธํ ํค๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
- ์ ์์ ๊ธฐ๋ก์ ํํธํ ๋ฐ ์ฌ์กฐ๋ฆฝ(RFC 8446 ยง5.1).
- ์ธ์ ์ฌ๊ฐ: NewSessionTicket์ ํตํ PSK(๋ฉ๋ชจ๋ฆฌ ๋ด PskStore, ์ผํ์ฉ).
- OCSP ์คํ ์ดํ๋ง: ์๋ฒ ะฟัะธะบะปะฐะดัะฒะฐะตั OCSP-ะพัะฒะตั ะบ ัะตััะธัะธะบะฐัั.
- ํธ๋์ ฐ์ดํฌ ํ ๋ฉ์์ง: NewSessionTicket (PSK ์ ์ฅ์ฉ).
- ์ํธํ:
- ์ฃผ์ ์ผ์ : TLS 1.3(RFC 8446 ยง7.1)์ ํตํ HKDF-Streebog(RFC 5869).
- ๊ธฐ๋ก ๋ณดํธ: RFC 8446 ยง5.3์ ๋ฐ๋ฅธ nonce๋ฅผ ์ฌ์ฉํ๋ MGM-AEAD(Kuznyechik).
- ์์ ํค๋ ์ฌ์ฉ ํ ์ญ์ ๋ฉ๋๋ค.
- ์ธ์ฆ์:
- X.509v3 ๊ตฌ๋ฌธ ๋ถ์(GOST R 34.10-2012) โ ๋ด์ฅ DER ๊ตฌ๋ฌธ ๋ถ์๊ธฐ.
- ์ ํจ์ฑ ๊ฒ์ฌ ์ฒด์ธ: ์๋ช , DN(๋ฐ๊ธ์ โ ์ฃผ์ฒด), ๊ธฐ๋ณธ ์ ์ฝ ์กฐ๊ฑด, ํค ์ฌ์ฉ, ํ์ฅ ํค ์ฌ์ฉ(์๋ฒ ์ธ์ฆ/ํด๋ผ์ด์ธํธ ์ธ์ฆ), ๊ฒฝ๋ก ๊ธธ์ด.
- ํธ์คํธ ์ด๋ฆ ํ์ธ: dNSName + IP ์ฃผ์(RFC 6125).
- OCSP ์๋ต ๊ฒ์ฆ(RFC 6960).
4.ํ๊ฐ :
- TlsTransport - ์ธํฐํ์ด์ค.
- InMemoryTlsTransport - ํ ์คํธ ๋ฐ ๋จ์ผ ํ๋ก์ธ์ค ์๋๋ฆฌ์ค์ฉ(์ธ๋ฉ๋ชจ๋ฆฌ ํ).
- SocketTlsTransport โ java.net.Socket์ ํตํ ๋ธ๋กํน I/O.
- ChannelTlsTransport - NIO SocketChannel ๊ธฐ๋ฐ ์ ์ก(๋ธ๋กํน ๋ชจ๋, ์ธํฐ๋ฝํธ ๊ฐ๋ฅ).
- ์ ์ํ๋ ๋ฐฉ๋ฒ ๋จ๊ณ๋ณ ์ค๋ช :
- TlsHandshakeEngine์ ํธ๋์ ฐ์ดํฌ๋ฅผ ์ํ ์ํ ๋จธ์ ์ ๋๋ค(I/O์ ๋ถ๋ฆฌ๋จ). TlsSession์ ์ค์ผ์คํธ๋ ์ดํฐ๋ก ์ฌ์ฉํ๋ฉฐ JSSE(SSLEngine)์์ ํตํฉ์ ์ ํฉํฉ๋๋ค.
- ByteBuffer API:
- TlsRecord.protect/unprotect โ NIO์์ ์ ๋ก ์นดํผ ํตํฉ์ ์ํ ByteBuffer ์ค๋ฒ๋ก๋. ํค ๋ก๋ฉ:
- Pkcs12Loader โ PBKDF2-HMAC-SHA256 + AES-256-CBC๋ฅผ ์ฌ์ฉํ์ฌ PFX(PKCS#12) ํ์ผ์ ์ฝ์ต๋๋ค.
- ์ธ์ ์ข ๋ฃ:
- close_notify - ํ๋กํ ์ฝ์ ๋ฐ๋ผ ์ฌ๋ฐ๋ฅด๊ฒ ์ข ๋ฃํฉ๋๋ค.
- ๋ซ๊ฑฐ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋ ์ฃผ์ ์๋ฃ๋ฅผ ๋ฆ์๋ด๋ ํ์.
- ์ฒ๋ฆฌ ๊ฒฝ๊ณ : ์น๋ช ์ - ์ฆ์ ์ข ๋ฃ ๋ฐ ์ญ์ .
- ๊ตฌํ ๋ณด์:
- verify_data ๋ฐ PSK ๋ฐ์ธ๋์ ๋ํ ์์ ์๊ฐ ๋น๊ต(ํ์ด๋ฐ ๊ณต๊ฒฉ ๋ฐฉ์ง)
- ์ฃผ์ ์ ๋ณด ์ญ์ : TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext ํค๋ฅผ ๊ฐ์ง ๋ชจ๋ ๊ฐ์ฒด์ ๋ํด ์ข ๋ฃ ์ destroy() ํธ์ถ, ์น๋ช ์ ์ธ ๊ฒฝ๊ณ ๋ฐ์, ํธ๋์ ฐ์ดํฌ ์ค ์์ธ ๋ฐ์
- DoS ๋ณดํธ: ์ธ์ฆ์ ์ฒด์ธ ๊ธธ์ด(10), ํธ๋์ ฐ์ดํฌ ํ ๋ฉ์์ง, ๋ ์ฝ๋ ํฌ๊ธฐ์ ๋ํ ์ ํ.
- MGM ๋ ผ์ค: ์ฒซ ๋ฒ์งธ ๋ฐ์ดํธ์ ์ต์์ ๋นํธ(MSB)๋ ICN(RFC 9058 ยง3, RFC 9367 ยง3.3)์ ์ํด ์ง์์ง๋๋ค.
- ECDHE ๊ฐ์ธ ํค์ ํธ๋์ ฐ์ดํฌ ๊ธฐ๋ก์ ํธ๋์ ฐ์ดํฌ๊ฐ ์๋ฃ๋ ํ ํ๊ธฐ๋ฉ๋๋ค.
- HMAC ํค ์๋ฃ๋ ์ฌ์ฉ ํ ์ญ์ ๋ฉ๋๋ค(HkdfStreebog, KdfGostR3411_2012_256).
- ์ ํ ์ฌํญ :
- ์ฌ๊ฐ PSK๋ง ์ง์ํฉ๋๋ค(0-RTT ๋ฐ ์ธ๋ถ PSK๋ ์ง์๋์ง ์์ต๋๋ค).
- psk_dhe_ke๋ง ์ง์๋ฉ๋๋ค(ECDHE๊ฐ ์๋ ์์ PSK๋ ์ง์๋์ง ์์ต๋๋ค).
- HelloRetryRequest(RFC 8446 ยง4.1.4)๋ ์ง์๋์ง ์์ต๋๋ค. ๋ช ๋ช ๋ ๊ทธ๋ฃน์ ํ๋๋ง ์ฌ์ฉ๋ฉ๋๋ค(๊ธฐ๋ณธ๊ฐ์ GC256A).
- GOST ์ํธํ ์ค์ํธ๋ง ์ง์ํฉ๋๋ค(GOST ์ด์ธ์ ์ํธํ ์ค์ํธ๋ ์ง์ํ์ง ์์ต๋๋ค).
- ํ ์คํธ:
- ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ RFC 9367 ๋ถ๋ก A.1(L ๋ฐ S ๋ณํ)์ ์๋ ค์ง ๋ต๋ณ ํ ์คํธ(KAT)๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ์ ์ฒด ํค ์ค์ผ์ค, TLSTREE, AEAD ๋ฐ ECDHE๊ฐ ํฌํจ๋ฉ๋๋ค. ๋ํ ๋ชจ๋ KAT ํ ์คํธ๋ฅผ ํต๊ณผํฉ๋๋ค.
- ์ค์ TCP ์์ผ์ ํตํ 4๊ฐ์ง ํตํฉ ํ ์คํธ(์์ฒด ์ํธ ์ด์ฉ์ฑ).
- ํ์์ ๋ํ ํผ์ฆ ํ ์คํธ: TlsMessageParser(8๊ฐ ๋ฉ์๋), TlsDerParser(3๊ฐ ๋ฉ์๋), TlsOcspVerifier(1๊ฐ ๋ฉ์๋)๋ฅผ ํตํด ๋ณด์์ ๊ฐํํ๊ณ ํ์์ ๋ํ ๊ณต๊ฒฉ ๋ฒกํฐ๋ฅผ ์ค์ ๋๋ค.
- ๊ฑด์ถ ์๋ฃจ์ :
- TlsHandshakeEngine - I/O์ ๋ถ๋ฆฌ๋ ์ํ ๋จธ์ (ํฅํ JSSE ๋ชจ๋์ฉ).
- NIO/JSSE์ฉ TlsRecord.protect/unprotect์ ByteBuffer ์ค๋ฒ๋ก๋์ ๋๋ค.
- TLSTREE ์บ์(TlsTreeCache) - ๋ณ๊ฒฝ๋ ๋ ๋ฒจ๋ง ์ฌ๊ณ์ฐ(RFC 9367).
- InMemoryTlsTransport.Pair๋ ํ ์คํธ ๋ฐ ๋จ์ผ ํ๋ก์ธ์ค ํต์ ์ ์ํ ์๋ฐฉํฅ ์์ ๋๋ค.
์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฌด๋ฃ ๋ผ์ด์ ์ค ํ์ ๋ฐฐํฌ๋ฉ๋๋ค.
์ถ์ฒ : linux.org.ru
