RFC 9367 стандартын дагуу GOST алгоритмтай Java хэл дээрх TLS 1.3 протоколын хэрэгжилтийн анхны хувилбар

Модуль крипто-гост-tls13 хэрэгжилтийг агуулдаг TLS 1.3 (RFC 8446 + RFC 9367) ГОСТ криптографтай. Энэхүү хувилбар нь номын сангийн анхны хувилбар бөгөөд дотоод хэрэглээнд бэлэн болсон.

Номын сангийн өвөрмөц онцлог нь цэвэр Java хэрэгжилт юм. Бүх криптографийн үйлдлүүдийг номын сангийн суурилагдсан хэрэгслүүдийг ашиглан, гадны хамааралгүйгээр гүйцэтгэдэг.

Энэ нь Java хэл дээрх GOST-тэй TLS 1.3-ийн анхны нээлттэй эхийн хэрэгжилтүүдийн нэг тул интероп туршилтыг аль болох хамгийн бага хэмжээнд хийсэн.

Номын сангийн боломжуудыг доор харуулав.

  1. Протоколууд:
  • Гар барих: бүтэн (клиент/сервер), богино (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-д хадгалах).
  1. Криптографи:
  • Гол хуваарь: TLS 1.3 (RFC 8446 §7.1) дээгүүр HKDF-Streebog (RFC 5869).
  • Бичлэгийн хамгаалалт: RFC 8446 §5.3-ын дагуу MGM-AEAD (Kuznyechik) нь nonce-тэй.
  • Түр зуурын түлхүүрүүдийг хэрэглэсний дараа арилгадаг.
  1. Гэрчилгээ:
  • X.509v3 задлан шинжлэх (ГОСТ R 34.10-2012) — суурилуулсан DER задлан шинжлэх төхөөрөмж.
  • Баталгаажуулах гинж: гарын үсэг, DN (олгогч → сэдэв), Үндсэн хязгаарлалтууд, Түлхүүр хэрэглээ, Өргөтгөсөн Түлхүүр * хэрэглээ (serverAuth / clientAuth), pathLen.
  • Хостын нэрийг шалгах: dNSName + iPAddress (RFC 6125).
  • OCSP хариултуудын баталгаажуулалт (RFC 6960).

4.Тээвэр:

  • TlsTransport - интерфэйс.
  • InMemoryTlsTransport - тест болон дан процессын хувилбаруудад (санах ой доторх дараалал).
  • SocketTlsTransport — java.net.Socket дээр I/O-г хаах.
  • ChannelTlsTransport - NIO SocketСуваг дээр суурилсан тээвэрлэлт (хаалттай горим, тасалдалтай).
  1. Алхам алхмаар гар барих:
  • TlsHandshakeEngine нь гар барих төлөвийн машин (I/O-оос салгагдсан). Энэ нь TlsSession-г оркестратор болгон ашигладаг бөгөөд JSSE (SSLEngine)-тэй нэгтгэхэд тохиромжтой.
  1. ByteBuffer API:
  • TlsRecord.protect/unprotect — NIO-той тэг хуулбартай интеграцчилалын хувьд ByteBuffer хэт ачаалал өгдөг. Түлхүүрүүдийг ачаалж байна:
  • Pkcs12Loader — PBKDF2-HMAC-SHA256 + AES-256-CBC ашиглан PFX (PKCS#12)-г уншиж байна.
  1. Хуралдааны төгсгөл:
  • close_notify - протоколын дагуу зөв хаах.
  • Хаах эсвэл алдаа гаргах үед гол материалыг арчих.
  • Харьцуулах дохиолол: үхлийн аюултай - шууд хаах + устгах.
  1. Хэрэгжүүлэлтийн аюулгүй байдал:
  • verify_data болон PSK холбогчдын тогтмол хугацааны харьцуулалт (цаг хугацааны халдлагаас хамгаалах)
  • Түлхүүр материалыг арчих: түлхүүртэй бүх объектууд дээр (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext) destroy(), хаах үед, үхлийн дохиолол, handshake-д алдаа гарах үед
  • DoS хамгаалалт: гэрчилгээний гинжин хэлхээний уртын хязгаарлалт (10), гар барьсны дараах мессежүүд, бичлэгийн хэмжээ.
  • MGM nonce: Эхний байтын MSB нь ICN-д зориулагдсан (RFC 9058 §3, RFC 9367 §3.3).
  • ECDHE-ийн хувийн түлхүүр болон гар барих тэмдэглэгээ нь гар барих дууссаны дараа устгагдана.
  • HMAC түлхүүрийн материалыг хэрэглэсний дараа устгадаг (HkdfStreebog, KdfGostR3411_2012_256).
  1. Хязгаарлалт:
  • Зөвхөн PSK-г үргэлжлүүлэх (0-RTT болон гадаад PSK дэмжигдээгүй).
  • Зөвхөн psk_dhe_ke (ECDHE-гүй цэвэр PSK дэмжигдээгүй).
  • HelloRetryRequest (RFC 8446 §4.1.4) дэмжигдээгүй - зөвхөн нэг нэртэй бүлэг ашиглагдаж байна (анхдагчаар GC256A).
  • Зөвхөн ГОСТ (ГОСТ бус шифрийн багцууд дэмжигдээгүй).
  1. Туршилт:
  • Номын санд RFC 9367 Хавсралт А.1 (L ба S хувилбарууд)-аас авсан мэдэгдэж буй хариултын тестүүд багтсан болно - бүрэн түлхүүр хуваарь, TLSTREE, AAAD, ECDHE. Мөн KAT тестүүдийн бүрэн хүрээг давсан.
  • Бодит TCP сокетуудаар дамжуулан 4 интеграцийн тест (өөрөө харилцан үйлчлэл).
  • Аюулгүй байдлыг хангах, задлан шинжилэгчид халдах векторыг багасгахын тулд задлан шинжилэгчид зориулсан Fuzz тестүүд: TlsMessageParser (8 арга), TlsDerParser (3 арга), TlsOcspVerifier (1 арга).
  1. Архитектурын шийдлүүд:
  • TlsHandshakeEngine - төлөвийн машин нь I/O-оос салгагдсан (ирээдүйн JSSE модулийн хувьд).
  • NIO/JSSE-д зориулсан TlsRecord.protect/unprotect файлын ByteBuffer хэт ачаалалтай байна.
  • TLSTREE кэш (TlsTreeCache) - зөвхөн өөрчлөгдсөн түвшингүүдийн дахин тооцоолол (RFC 9367).
  • InMemoryTlsTransport.Pair нь тест болон дан процессын харилцаа холбооны хоёр чиглэлтэй хос юм.

Номын сан нь үнэгүй лицензийн дагуу түгээгддэг.

Эх сурвалж: linux.org.ru

DDoS хамгаалалт, VPS VDS сервер бүхий сайтуудад найдвартай хостинг худалдаж аваарай 🔥 DDoS хамгаалалттай, VPS VDS сервертэй найдвартай вэбсайт хостинг худалдаж аваарай | ProHoster