モジュール 暗号-GOST-TLS13 実装が含まれています TLS 1.3 (RFC 8446 + RFC 9367) GOST暗号化に対応しています。今回のリリースはライブラリの初期バージョンであり、社内での利用が可能です。
このライブラリのユニークな特徴は、純粋なJavaで実装されている点です。すべての暗号化処理は、ライブラリに組み込まれたツールを使用して実行され、外部ライブラリへの依存は一切ありません。
これは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 + iPAddress (RFC 6125)。
- OCSP応答の検証(RFC 6960)。
4.交通機関:
- TlsTransport - インターフェース。
- InMemoryTlsTransport - テストおよびシングルプロセスシナリオ(インメモリキュー)用。
- SocketTlsTransport — java.net.Socket を介したブロッキング I/O。
- ChannelTlsTransport - NIO SocketChannel ベースのトランスポート (ブロッキングモード、割り込み可能)。
- 握手の手順(ステップバイステップ):
- TlsHandshakeEngineは、ハンドシェイクのためのステートマシンです(I/Oとは分離されています)。オーケストレーターとしてTlsSessionを使用し、JSSE(SSLEngine)との統合に適しています。
- BytBuffer 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 nonce: 最初のバイトの最上位ビットは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) はサポートされていません。使用される名前付きグループは 1 つのみです (デフォルトでは 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
