North9LLC/Seam

GitHub: North9LLC/Seam

基于 Rust 实现的后量子加密 UDP 传输协议库,内置 FEC、多流复用和抗 DDoS 握手,解决高丢包高延迟环境下 TCP/QUIC 性能不足和队头阻塞问题。

Stars: 1 | Forks: 0

# Seam **后量子加密传输协议 — 使用 Rust 编写。** UDP · 多流 · 内置 FEC · Noise_XX + ML-KEM-768 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/04c75a821e172718.svg)](https://github.com/North9LLC/Seam/actions/workflows/ci.yml) [![License: AGPL v3](https://img.shields.io/badge/license-AGPL%20v3-blue.svg)](LICENSE) [![Rust 1.88+](https://img.shields.io/badge/rust-1.88+-orange.svg)](#getting-started)
Seam 是一个用户空间传输协议,适用于 TCP 或 QUIC 性能表现不佳的应用场景。它在一个库中提供了加密、匀速发送的 UDP 传输,支持多流复用、前向纠错以及混合后量子握手。 | 功能 | 详情 | |---|---| | Transport | UDP,采用 CUBIC 拥塞控制 + 令牌桶匀速发送 | | Encryption | ChaCha20-Poly1305 数据包加密 + 头部保护 | | Handshake | Noise_XX + ML-KEM-768(后量子混合,247 µs) | | Reliability | ARQ + GF(2⁸) 前向纠错 | | Multiplexing | 优先级调度流(0–7,0 = 最高) | ## 为什么选择 Seam - **无队头阻塞。** 各流独立调度 — 停滞的大批量传输绝不会延迟控制消息。 - **默认后量子安全。** ML-KEM-768 已内置到握手中。“现在收集,以后解密”的攻击无法获取会话密钥。 - **传输层 FEC。** 数据包丢失在本地即可恢复,无需往返重传。 - **匀速发送,而非突发。** 令牌桶匀速控制器以 `cwnd/srtt` 字节/秒的速率运行,消除了困扰原生 UDP 的突发性队列堆积。 - **抗 DDoS 握手。** 无状态 Cookie 验证 — 在客户端证明其能在声称的地址接收数据之前,不进行堆内存分配。 ## 性能 **在 1400 B MTU 下,每个核心的加密吞吐量为 568 MiB/s(约 4.76 Gbps)。包含 ML-KEM-768 在内的完整握手仅需 247 µs。** ### 数据包编码 — ChaCha20-Poly1305 + 头部保护 | 负载 | 耗时 | 吞吐量 | |---|---:|---:| | 64 B | 350 ns | ~303 MiB/s | | 256 B | 644 ns | ~455 MiB/s | | 512 B | 1.03 µs | ~519 MiB/s | | 1400 B | 2.43 µs | **~568 MiB/s** | ### FEC 编码/恢复 — 1400 B 符号 | 配置 | 编码 | 恢复 1 个丢失 | |---|---:|---:| | k=4, r=1 | ~5.5 µs | ~10.4 µs | | k=8, r=2 | ~11 µs | ~21 µs | | k=10, r=3 | ~16 µs | ~32 µs | ### 握手 — Noise_XX + ML-KEM-768 | 操作 | 耗时 | |---|---:| | `IdentityKeypair::generate` | 17.8 µs | | `PacketKeys::derive_from_secret` | 370 ns | | `CookieFactory::generate` | 91 ns | | `CookieFactory::verify` | 88 ns | | **完整握手(3 条消息)** | **247 µs** | ### 会话刷新吞吐量 | 负载 | 1 个流 | 4 个流(同等优先级) | 4 个流(混合优先级) | |---|---:|---:|---:| | 256 B | 1.76 µs / 139 MiB/s | 3.27 µs | 3.35 µs | | 4 KB | 8.4 µs / 462 MiB/s | 9.2 µs | 9.3 µs | | 16 KB | 30.5 µs / 513 MiB/s | — | — | 优先级调度开销:与同等优先级相比多出 **~2.4%**。 ## 对比 | | Seam | TCP + TLS 1.3 | QUIC | Raw UDP | |---|:---:|:---:|:---:|:---:| | 队头阻塞 | ✅ 无 | ❌ 整个流 | ⚠️ 单个流内 | ✅ 无 | | 内置 FEC | ✅ | ❌ | ❌ | ❌ | | 流优先级 | ✅ 原生 0–7 | ❌ | ⚠️ 上层实现 | ❌ | | 突发控制 | ✅ 令牌桶 | ⚠️ 内核拥塞控制 | ⚠️ 依赖实现 | ❌ | | 后量子 KEM | ✅ ML-KEM-768 | ❌ 视情况而定 | ❌ 视情况而定 | ❌ | | 抗 DDoS 握手 | ✅ Cookie | ❌ | ✅ | — | ## 快速入门 ``` # 添加到 Cargo.toml # seam-protocol = { git = "https://github.com/North9LLC/Seam" } cargo build --all-targets cargo test --all-targets cargo bench ``` ### 客户端 / 服务端 ``` use seam_protocol::{api::{Client, Server}, handshake::IdentityKeypair}; // Server let id = IdentityKeypair::generate(); let mut server = Server::bind("0.0.0.0:4433".parse()?, id).await?; let conn = server.accept().await.unwrap(); // Client let id = IdentityKeypair::generate(); let mut client = Client::bind("0.0.0.0:0".parse()?, id).await?; let conn = client.connect(server_addr, &server_x25519, &server_kem_pk).await?; ``` ### 复用流 ``` use seam_protocol::tunnel::SeamMux; let mux = SeamMux::new(conn); // Locally-initiated stream let mut stream = mux.open_stream().await; // Accept a remote-initiated stream let mut stream = mux.accept_stream().await.unwrap(); // SeamStream implements AsyncRead + AsyncWrite + Unpin tokio::io::copy_bidirectional(&mut stream, &mut other).await?; ``` ## 仓库结构 ``` src/ ├── api.rs # Client, Server, SeamConn ├── tunnel.rs # SeamMux + SeamStream (AsyncRead + AsyncWrite) ├── crypto/ # ChaCha20-Poly1305, header protection, anti-replay ├── handshake/ # Noise_XX + ML-KEM-768, DDoS-resistant cookie ├── session/ # Streams, ARQ, flow control, priority scheduling ├── fec/ # GF(2⁸) arithmetic, systematic RS codec, FEC/ARQ arbiter └── transport/ # Connection, endpoint, CUBIC CC, pacer, path probing benches/ # Criterion benchmarks fuzz/ # cargo-fuzz targets ``` ## 许可证 Seam 采用双重许可: - **开源:** [GNU Affero General Public License v3.0](LICENSE) — 免费用于开源项目和个人使用 - **商业:** 如用于专有软件、政府、SaaS 或 OEM 用途,请联系 [licensing@north9.org](mailto:licensing@north9.org) 详情请参阅 [LICENSE-COMMERCIAL](LICENSE-COMMERCIAL)。
标签:ChaCha20-Poly1305, CUBIC, FEC, ML-KEM-768, Noise协议框架, Rust, UDP协议, 令牌桶 pacing, 传输层安全, 低延迟, 内核驱动, 前向纠错, 加密通信, 可视化界面, 可靠传输, 后量子密码学, 多路复用, 安全传输协议, 抗量子加密, 拥塞控制, 无队头阻塞, 混合密钥交换, 用户态网络, 网络协议, 网络安全, 网络流量审计, 通知系统, 防DDoS, 隐私保护, 高吞吐量