这是用 Java 编写的 TLS 1.3 协议实现的第一个版本,采用了符合 RFC 9367 标准的 GOST 算法。

crypto-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. 密码学:
  • 关键计划:HKDF-Streebog(RFC 5869)通过 TLS 1.3(RFC 8446 §7.1)。
  • 记录保护:MGM-AEAD(Kuznyechik),根据 RFC 8446 §5.3 规定使用 nonce。
  • 临时密钥使用后会被清除。
  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. 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(),关闭时发出致命警报,握手过程中出现异常
  • 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(不支持纯 PSK,不支持 ECDHE)。
  • HelloRetryRequest(RFC 8446 §4.1.4)不受支持 - 仅使用一个命名组(默认为 GC256A)。
  • 仅支持 GOST(不支持非 GOST 密码套件)。
  1. 测试:
  • 该库包含 RFC 9367 附录 A.1 中的已知答案测试(L 和 S 变体)——完整的密钥调度、TLSTREE、AEAD 和 ECDHE。它还能通过所有 KAT 测试。
  • 通过真实的 TCP 套接字进行 4 次集成测试(自互操作性)。
  • 对解析器进行模糊测试:TlsMessageParser(8 个方法)、TlsDerParser(3 个方法)、TlsOcspVerifier(1 个方法),以确保安全性并减少对解析器的攻击向量。
  1. 建筑解决方案:
  • TlsHandshakeEngine - 与 I/O 解耦的状态机(用于未来的 JSSE 模块)。
  • ByteBuffer 重载了 TlsRecord.protect/unprotect 以用于 NIO/JSSE。
  • TLSTREE 缓存(TlsTreeCache)- 仅重新计算已更改的级别(RFC 9367)。
  • InMemoryTlsTransport.Pair 是一个用于测试和单进程通信的双向对。

该库以自由许可协议发布。

来源: linux.org.ru

为具有 DDoS 保护、VPS VDS 服务器的站点购买可靠的主机 🔥 购买具备 DDoS 防护的可靠网站托管服务,包括 VPS 和 VDS 服务器 | ProHoster