RFC 9367に準拠したGOSTアルゴリズムを用いたJavaによるTLS 1.3プロトコル実装の最初のリリース

モジュール 暗号-GOST-TLS13 実装が含まれています TLS 1.3 (RFC 8446 + RFC 9367) GOST暗号化に対応しています。今回のリリースはライブラリの初期バージョンであり、社内での利用が可能です。

このライブラリのユニークな特徴は、純粋な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 に従って nonce を使用した MGM-AEAD (Kuznyechik)。
  • 一時的なキーは使用後に消去されます。
  1. 証明書:
  • X.509v3 解析 (GOST R 34.10-2012) — 組み込みの DER パーサー。
  • 検証チェーン: 署名、DN (発行者 → 主体)、基本制約、キー使用法、拡張キー * 使用法 (サーバー認証 / クライアント認証)、パス長。
  • ホスト名チェック: dNSName + iPAddress (RFC 6125)。
  • OCSP応答の検証(RFC 6960)。

4.交通機関:

  • TlsTransport - インターフェース。
  • InMemoryTlsTransport - テストおよびシングルプロセスシナリオ(インメモリキュー)用。
  • SocketTlsTransport — java.net.Socket を介したブロッキング I/O。
  • ChannelTlsTransport - NIO SocketChannel ベースのトランスポート (ブロッキングモード、割り込み可能)。
  1. 握手の手順(ステップバイステップ):
  • TlsHandshakeEngineは、ハンドシェイクのためのステートマシンです(I/Oとは分離されています)。オーケストレーターとしてTlsSessionを使用し、JSSE(SSLEngine)との統合に適しています。
  1. BytBuffer 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() を実行、クローズ時、致命的なアラート発生時、ハンドシェイク中の例外発生時
  • DoS攻撃対策:証明書チェーンの長さ(10)、ハンドシェイク後のメッセージ、レコードサイズに制限があります。
  • MGM nonce: 最初のバイトの最上位ビットは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) はサポートされていません。使用される名前付きグループは 1 つのみです (デフォルトでは GC256A)。
  • GOST規格のみ対応(GOST規格以外の暗号スイートはサポートされていません)。
  1. テスト:
  • このライブラリには、RFC 9367 付録 A.1 (L および S バリアント) に記載されている既知回答テスト (KAT) が含まれています。具体的には、完全なキースケジュール、TLSTREE、AEAD、および ECDHE です。また、KAT のすべてのテストに合格しています。
  • 実際のTCPソケットを介した4つの統合テスト(自己相互運用性)。
  • パーサーに対するファジングテスト: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