مدول کریپتو-گوست-tls13 شامل پیادهسازی است TLS 1.3 (RFC 8446 + RFC 9367) با رمزنگاری GOST. این نسخه، نسخه اولیه کتابخانه است و برای استفاده داخلی آماده است.
یکی از ویژگیهای منحصر به فرد این کتابخانه، پیادهسازی کاملاً جاوایی آن است. تمام عملیات رمزنگاری با استفاده از ابزارهای داخلی کتابخانه و بدون هیچ وابستگی خارجی انجام میشود.
این یکی از اولین پیادهسازیهای متنباز TLS 1.3 با GOST در جاوا است، بنابراین آزمایش تداخل تا حد امکان انجام شده است.
در زیر قابلیتهای کتابخانه آمده است.
- پروتکلها:
- دستدهی: کامل (کلاینت/سرور)، کوتاه (PSK)، متقابل (mTLS).
- ALPN (RFC 7301) - مذاکره پروتکل لایه کاربرد (HTTP/2، HTTP/1.1).
- SNI (RFC 6066) - نشانگر نام سرور برای استقرارهای چند مستاجری.
- بهروزرسانی کلید (RFC 8446 §4.6.3) - بهروزرسانی کلیدهای رمزگذاری ترافیک.
- مجموعه رمز: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256 بیتی)، CryptoPro-B (512 بیتی)
- تغییر کلید رمزگذاری TLSTREE به ازای هر رکورد - تغییر کلید رمزگذاری برای هر رکورد TLS.
- قطعه قطعه کردن و دوباره سرهم کردن handshakeها و رکوردها (RFC 8446 §5.1).
- از سرگیری جلسه: PSK از طریق NewSessionTicket (PskStore در حافظه، یکبار مصرف).
- منگنه OCSP: سرور прикладывает OCSP-ответ к сертификату.
- پیامهای پس از دستدهی: NewSessionTicket (به جز PSK).
- رمزنگاری:
- برنامهی کلیدی: 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 (صادرکننده → موضوع)، محدودیتهای اساسی، کاربرد کلید، کاربرد کلید توسعهیافته * (serverAuth / clientAuth)، pathLen.
- بررسی نام میزبان: dNSName + iPAddress (RFC 6125).
- تأیید پاسخهای OCSP (RFC 6960).
4.حمل و نقل:
- TlsTransport - رابط.
- InMemoryTlsTransport - برای تستها و سناریوهای تکپردازشی (صف درون حافظه).
- SocketTlsTransport — مسدود کردن ورودی/خروجی روی java.net.Socket.
- ChannelTlsTransport - انتقال مبتنی بر NIO SocketChannel (حالت مسدودکننده، قابل قطع).
- دست دادن مرحله به مرحله:
- TlsHandshakeEngine یک ماشین وضعیت برای handshake (جدا از I/O) است. از TlsSession به عنوان یک هماهنگکننده استفاده میکند و برای ادغام با JSSE (SSLEngine) مناسب است.
- رابط برنامهنویسی بایتبافر:
- TlsRecord.protect/unprotect — بایتبافر برای یکپارچهسازی بدون کپی با NIO، سربارگذاری میکند. بارگذاری کلیدها:
- Pkcs12Loader — خواندن PFX (PKCS#12) با PBKDF2-HMAC-SHA256 + AES-256-CBC.
- پایان جلسه:
- close_notify - بسته شدن صحیح طبق پروتکل.
- پاک شدن مواد روی کلید هنگام بستن یا بروز خطا.
- هشدار جابجایی: مهلک - بسته شدن فوری + پاک شدن.
- امنیت پیادهسازی:
- مقایسههای زمان ثابت برای verify_data و PSK binders (محافظت در برابر حملات زمانبندی)
- پاک کردن محتوای کلید: destroy() روی تمام اشیاء دارای کلید (TlsKeySchedule، TlsTrafficKeys، TlsRecord، HandshakeContext)، در صورت بسته شدن، هشدار مهلک، استثنا در handshake
- محافظت در برابر DoS: محدودیتهایی در طول زنجیره گواهی (10)، پیامهای پس از handshake، اندازه رکورد.
- نانس MGM: MSB بایت اول برای ICN پاک میشود (RFC 9058 §3، RFC 9367 §3.3).
- کلید خصوصی ECDHE و رونوشت دستدهی پس از تکمیل دستدهی از بین میروند.
- محتوای کلید HMAC پس از استفاده پاک میشود (HkdfStreebog، KdfGostR3411_2012_256).
- محدودیت ها:
- فقط از سرگیری PSK (0-RTT و PSK خارجی پشتیبانی نمیشوند).
- فقط psk_dhe_ke (PSK خالص بدون ECDHE پشتیبانی نمیشود).
- HelloRetryRequest (RFC 8446 §4.1.4) پشتیبانی نمیشود - فقط از یک گروه نامگذاری شده استفاده میشود (به طور پیشفرض GC256A).
- فقط GOST (مجموعههای رمز غیر GOST پشتیبانی نمیشوند).
- آزمایش کردن:
- این کتابخانه شامل تستهای با پاسخ شناختهشده از ضمیمه A.1 RFC 9367 (انواع L و S) است - برنامه کامل کلید، TLSTREE، AEAD و ECDHE. همچنین طیف کاملی از تستهای KAT را با موفقیت پشت سر میگذارد.
- ۴ تست یکپارچهسازی (خود-تعاملی) از طریق سوکتهای TCP واقعی.
- تستهای فاز برای تجزیهگرها: TlsMessageParser (۸ روش)، TlsDerParser (۳ روش)، TlsOcspVerifier (۱ روش)، برای اطمینان از امنیت و کاهش بردار حمله به تجزیهگرها.
- راهکارهای معماری:
- TlsHandshakeEngine - ماشین حالت جدا شده از ورودی/خروجی (برای ماژول JSSE آینده).
- ByteBuffer مقادیر TlsRecord.protect/unprotect را برای NIO/JSSE بیش از حد بارگذاری میکند.
- حافظه پنهان TLSTREE (TlsTreeCache) - محاسبه مجدد فقط سطوح تغییر یافته (RFC 9367).
- InMemoryTlsTransport.Pair یک جفت دو طرفه برای تستها و ارتباطات تک فرآیندی است.
این کتابخانه تحت مجوز رایگان توزیع شده است.
منبع: linux.org.ru
