AlexMelanFromRingo/uber-mesh
GitHub: AlexMelanFromRingo/uber-mesh
基于 Rust 和 libp2p 的去中心化抗审查 P2P mesh 网络,采用混合后量子加密与 TLS 流量混淆来抵御深度包检测。
Stars: 0 | Forks: 0
# uber-mesh
**一个去中心化、抗审查的 Rust 点对点 mesh 网络——构建于现代、标准化、混合后量子密码学之上。**
*旨在让节点在激进的 DPI(俄罗斯的 TSPU、伊朗的 IRGFW)下保持连接,并在面临全面封锁时优雅降级。*
[](https://github.com/AlexMelanfromRingo/uber-mesh/actions/workflows/ci.yml)
[](LICENSE)
[](https://www.rust-lang.org)
[](https://doc.rust-lang.org/edition-guide/)
[](#validation--benchmarks)
[](#security-model)
[](#security-model)
[](https://libp2p.io)
## 目录
- [为什么](#why) · [核心亮点](#highlights) · [架构](#architecture) · [Workspace](#workspace-crates)
- [快速开始](#quickstart) · [抗审查](#censorship-resistance) · [验证与基准测试](#validation--benchmarks)
- [安全模型](#security-model) · [项目结构](#project-layout) · [规范驱动开发](#spec-driven-development)
- [路线图](#roadmap) · [贡献指南](#contributing) · [许可证](#license)
## 为什么
在 2025-26 年,应对审查的韧性来自于**敏捷性,而非单一牢不可破的协议**。审查者
结合了被动全加密分类(熵/无头部启发式)、主动探测、TLS 状态机
和 SNI 检查,以及基于流量的限速。uber-mesh 在一个**去中心化的 libp2p
overlay** 网络上,将一个**可插拔、由环境自动选择的
混淆传输层**置于**混合后量子安全通道**之下——
因此,节点可以混入普通的 TLS 流量中,拒绝向探测者暴露自身,绕过
封锁,并在没有任何中央机构的情况下端到端验证每条消息。
## 核心亮点
| 功能 | 具体作用 |
|---|---|
| 🔐 **混合后量子** | 每条链路均通过 X-Wing 风格的 BLAKE3 组合器,使用 **X25519 + ML-KEM-768** 生成密钥。经典部分保持权威性;所有 mesh 数据均通过 PQ 密钥隧道传输(杜绝“先收集后解密”)。 |
| 🥷 **模拟 TLS-1.3 ClientHello** | 混淆握手是一个*结构合法的* TLS 1.3 ClientHello → ServerHello,并带有一个 PQ 混合的 `X25519MLKEM768` key_share。有效对抗基于熵/无头部**以及** TLS 状态机的 DPI;可与真实的 PQ-TLS 流量完美融合。 |
| 🪞 **类 REALITY 的探测防御** | 未持有共享 PSK 的对等节点将无法通过网关,只能得到**静默回应**,或者**被反向代理到真实的掩护站点**——主动探测者无法区分节点与真正的 TLS 服务器。 |
| 🕸️ **去中心化 Overlay** | libp2p **Gossipsub**(严格签名 + 评分)、**私有 Kademlia**、identify/ping,以及 NAT 组合套件(**AutoNAT v2 / Circuit Relay v2 / DCUtR**)——全部*运行于*混淆载体之上。 |
| ✍️ **签名 gossip + 防重放** | 经过 Ed25519 签名、内容寻址的消息,配合单调递增的 seqno、时间戳窗口和 LRU 去重保护。伪造和重放消息将被拒绝。 |
| 📦 **内容交换与同步** | 内容寻址存储 + 请求/响应 blob (`BLAKE3(bytes) == Cid`) 以及 **negentropy 风格的集合协调**。 |
| 📈 **可观测且轻量** | 每个节点均提供 Prometheus `/metrics` 及预配置的 Grafana;每个叶节点仅占 **~4 MB RSS**,支持自定义 Tokio worker 池(`UMESH_WORKERS`)。 |
| 🦀 **纯 Rust 实现,无 `unsafe`** | 整个 workspace 启用 `unsafe_code = "deny"`;加密核心中使用 `#![forbid(unsafe_code)]`。默认构建不包含 C/FFI。 |
## 架构
uber-mesh 将混淆层堆叠在 libp2p 的 Noise 通道**之下**,因此整个 gossip mesh 天然具备了
该传输层的 DPI 抗性,且数据通道实现了端到端的混合 PQ 安全。
```
flowchart TB
subgraph app["uber-mesh CLI · umesh-node"]
A["init · run · mesh · status · keysconfig · keystore · runtime · Prometheus /metrics"] end subgraph overlay["umesh-p2p — libp2p overlay"] B["Gossipsub (signed + scored) · private Kademlia
AutoNAT v2 / Relay v2 / DCUtR · blobs · set reconciliation"] end subgraph noise["libp2p Noise + Yamux"] C["authenticated, multiplexed secure channel"] end subgraph obfs["umesh-obfs — obfuscation carrier"] D["TLS-1.3 ClientHello/ServerHello handshake (PQ key_share + session_id MAC gate)
AEAD record stream · length-hiding padding · IAT shaping · profiles · rotation"] end subgraph crypto["umesh-crypto (#![forbid(unsafe_code)])"] E["hybrid X25519 + ML-KEM-768 KEM · Ed25519 identity
BLAKE3 hash/KDF/MAC/CID · XChaCha20-Poly1305 · Merkle · PoW"] end A --> B --> C --> D --> F["TCP / :443-survivable (QUIC — staged)"] E -. keys & primitives .-> C E -. keys & primitives .-> D ``` 混淆握手本身在网络数据包中看起来就像是一个普通的后量子 TLS 1.3 开场: ``` sequenceDiagram participant C as Client participant S as Server (PSK holder) Note over C: ephemeral X25519 + ML-KEM-768 keygen C->>S: TLS ClientHello (0x16)
key_share = ml-kem ek(1184) ‖ x25519(32)
session_id = epoch ‖ MAC(key_share, epoch) Note over S: verify session_id MAC under PSK (gate)
fail ⇒ silence OR reverse-proxy to cover site S->>C: TLS ServerHello (0x16)
key_share = ml-kem ct(1088) ‖ x25519(32) Note over C,S: derive directional AEAD keys from the hybrid shared secret C->>S: Application-Data records (0x17) — Noise → Gossipsub … S->>C: Application-Data records (0x17) ``` ### Workspace crates | Crate | 作用 | |-------|------| | [`umesh-crypto`](crates/umesh-crypto) | 纯 Rust 加密核心 (`#![forbid(unsafe_code)]`):混合 X25519+ML-KEM-768 KEM(X-Wing 风格 BLAKE3 组合器)、Ed25519 身份标识 (`PeerId = BLAKE3(pubkey)`)、BLAKE3 哈希/KDF/带密钥 MAC/带域分离的 CID、XChaCha20-Poly1305、Merkle 树、PoW。包含 KATs 和属性测试。 | | [`umesh-obfs`](crates/umesh-obfs) | 可插拔的混淆载体:带 `session_id` MAC 网关的 TLS-1.3 ClientHello/ServerHello 模拟握手、AEAD 记录流、隐藏长度的填充 + 流量整形、环境配置文件、`ObfsTcp` + 连接时轮换、类 REALITY 的回退机制。包含 DPI 模拟测试。 | | [`umesh-p2p`](crates/umesh-p2p) | libp2p mesh:签名 gossip + 防重放、`MeshBehaviour`(包含 Gossipsub Strict、私有 Kademlia、identify、ping)+ NAT 组合套件(AutoNAT v2 / Relay v2 / DCUtR)+ blob 请求/响应(bincode 编解码器)+ negentropy 风格的集合协调、内容寻址的 `ContentStore`、`MeshNode` 驱动程序、Prometheus 指标。 | | [`umesh-node`](crates/umesh-node) | 节点调度:配置、身份密钥库 (`0600`)、运行时、无泄露密钥的状态。 | | [`uber-mesh`](crates/uber-mesh) | CLI 二进制程序。 | ## 快速开始 ``` git clone https://github.com/AlexMelanFromRingo/uber-mesh cd uber-mesh cargo build --workspace cargo test --workspace # 99 tests: KATs, property tests, DPI sim, gossip/NAT/reconcile integration cargo clippy --workspace --all-targets -- -D warnings ``` ### 双节点 gossip mesh(已混淆、混合 PQ、抗探测) Mesh 网络运行在混淆载体之上,因此对等节点之间会共享一个混淆 **PSK**(由 `init` 打印的网桥密钥, 需通过带外方式分发)。 ``` # 初始化两个节点——每个节点会打印一个 PSK。记下节点 A 的 PSK。 cargo run -p uber-mesh -- --data-dir /tmp/a init # ← copy A's PSK cargo run -p uber-mesh -- --data-dir /tmp/b init # 节点 A(bootstrap)——打印 "libp2p peer:
环境变量
| 变量 | 默认值 | 含义 | |---|---|---| | `UMESH_WORKERS` | `2` | Tokio worker 线程数(`1` = current-thread 运行时;越小足迹越轻)。 | | `METRICS_PORT` | `9100` | `mesh` 命令使用的 Prometheus `/metrics` 端口(设为 `off` 以禁用)。 | | `UMESH_SNI` | `www.cloudflare.com` | 混淆 ClientHello 中呈现的掩护域名 SNI。 | | `RUST_LOG` | `info` | Tracing 过滤器(绝不记录密钥)。 |标签:libp2p, P2P网络, Rust, 可视化界面, 后量子密码学, 抗审查, 流量伪装, 网络流量审计, 网络通信, 自定义请求头, 请求拦截, 通知系统