sara-star-quant/Quantum-Go

GitHub: sara-star-quant/Quantum-Go

一个 Go 语言抗量子隧道加密库,通过混合 KEM 机制为 TCP/UDP 连接提供兼具后量子安全和经典安全的字节流加密。

Stars: 1 | Forks: 1

# Quantum-Go **使用级联混合 KEM (CH-KEM) 的抗量子隧道加密** [![Go 版本](https://img.shields.io/badge/Go-1.26+-00ADD8?style=flat&logo=go)](https://go.dev) [![Go 参考](https://pkg.go.dev/badge/github.com/sara-star-quant/quantum-go.svg)](https://pkg.go.dev/github.com/sara-star-quant/quantum-go) [![Go 报告卡](https://goreportcard.com/badge/pzverkov/quantum-go)](https://goreportcard.com/report/github.com/sara-star-quant/quantum-go) [![Go 构建](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/4ebe282698152707.svg)](https://github.com/sara-star-quant/quantum-go/actions/workflows/ci.yml) [![安全等级](https://img.shields.io/badge/Security-NIST%20Category%205-green)](https://csrc.nist.gov/projects/post-quantum-cryptography) [![FIPS 模式](https://img.shields.io/badge/FIPS%20140--3-Ready-orange)](docs/FIPS.md) [![许可证](https://img.shields.io/badge/License-MIT-blue)](LICENSE) ## 概述 Quantum-Go 是一个研究级(1.0 版本之前)的抗量子隧道加密库,实现了新颖的**级联混合密钥封装机制 (CH-KEM)**。它通过结合以下技术提供深度防御安全: - **ML-KEM-1024** (NIST FIPS 203) - 后量子基于格的密码学 - **X25519** (RFC 7748) - 经典椭圆曲线 Diffie-Hellman - **SHAKE-256** (NIST FIPS 202) - 密码学密钥派生 ## 安全属性 | 属性 | 状态 | |----------|--------| | 后量子安全 | ML-KEM-1024 (NIST 类别 5) | | 经典安全 | X25519 (128 位) | | 混合保证 | 只要任一算法安全即为安全 | | 端点身份验证 | 暂无 - 没有握手前的对端身份验证(路线图 v0.1.0) | | 前向保密 | 每个会话(以及每次重新生成密钥时)使用临时密钥 | | 会话恢复 | 带有安全简化握手的加密票据 | | FIPS 140-3 | 包含 POST/CST 自检的构建模式([文档](docs/FIPS.md)) | ## 功能 ### 核心密码学 - 混合 CH-KEM 密钥交换 (ML-KEM-1024 + X25519) - AES-256-GCM 和 ChaCha20-Poly1305 加密套件 - 带有重放保护的自动会话密钥更新 ### FIPS 140-3 合规性 - 通过 `-tags fips` 实现的 **FIPS 构建模式**(仅限 AES-GCM) - **上电自检 (POST)** - 模块加载时的 KAT 验证 - **条件自检 (CST)** - 成对一致性和 RNG 健康检查 - 使用 `crypto.FIPSMode()` 进行运行时合规性验证 ### 生产环境强化 - 带有健康检查的连接池 - 缓冲池(减少 75% 以上的分配) - 基于 IP 的限速和 DoS 保护 - Prometheus 指标和 OpenTelemetry 链路追踪 ## 范围 Quantum-Go 是一个隧道**加密库**,而不是 VPN 客户端。它负责在 `net.Conn` 或 UDP socket 上加密和验证字节流。它不负责配置、捕获或路由操作系统的网络流量。 **该库提供的功能(连接连续性):** - **经过身份验证的漫游** - 数据报会话可以在对端 IP 或端口发生变化(NAT 重绑定,从 Wi-Fi 切换到蜂窝网络)后继续存在:它通过随机连接索引(而不是源地址)进行解复用,并且仅在收到经过 AEAD 身份验证的数据包后才进行重绑定。 - **可靠的握手** - 后量子握手会在有丢包的 UDP 路径上通过退避机制重传丢失的 flight。 - 面向长生命周期会话的**密钥更新、恢复和空闲清理**。 **该库不提供的功能(集成应用程序的责任):** - **完全断开连接后的重新连接** - 该库没有自动重拨循环;使用 `Dial` / `DialDatagram` 重新建立连接由调用者负责。 - **DNS 泄露预防** - 该库不控制操作系统的解析器。 - **终止开关** - 当隧道关闭时,该库不会阻止非隧道流量。 - **TUN 设备和系统路由** - 该库不捕获主机流量或将其路由到隧道中。 这些属性属于围绕该库构建的 VPN 客户端,而不是库本身。本文档描述的是软件,而非安全或法律建议;Quantum-Go 基于 MIT 许可证发布,按“原样”提供,不提供任何形式的担保(请参阅 [LICENSE](LICENSE) 以及下方的合规与责任声明部分)。 ## 快速入门 ``` go get github.com/sara-star-quant/quantum-go ``` ``` import "github.com/sara-star-quant/quantum-go/pkg/tunnel" // Server listener, _ := tunnel.Listen("tcp", ":8443", nil) conn, _ := listener.Accept() // Client conn, _ := tunnel.Dial("tcp", "server:8443", nil) ``` 对于 FIPS 模式,请使用以下命令构建: ``` go build -tags fips ./... ``` 有关详细示例,请参阅[快速入门指南](docs/usage/QUICKSTART.md)。 ## 文档 | 指南 | 描述 | |-------|-------------| | [快速入门](docs/usage/QUICKSTART.md) | 安装和基本用法 | | [FIPS 合规](docs/FIPS.md) | FIPS 140-3 构建模式和自检 | | [配置](docs/usage/CONFIGURATION.md) | 调整超时、限速和会话 | | [CLI 参考](docs/usage/CLI.md) | 使用 `quantum-tunnel` 进行演示和基准测试 | | [架构](docs/technical/ARCHITECTURE.md) | CH-KEM 协议和安全设计 | | [威胁模型](docs/technical/THREAT_MODEL.md) | 自行编写的威胁和风险分析 (NIST SP 800-30) | | [路线图](docs/ROADMAP.md) | 开发路线图和合规计划 | ## 性能 在可用的情况下支持硬件加速(Apple Silicon 上的 ARMv8 Crypto Extensions;x86-64 上的 AES-NI / AVX2 / 硬件 SHA-3)。Go 1.26.3 (Green Tea GC)。 两种传输方式共享加密核心:**TCP/流**传输(长度前缀帧)和无连接的 **UDP/数据报**传输(独立的通信格式,互不兼容)。数据报路径实现了端到端的功能完整:带有重传的分片 PQ 握手、零分配的加密数据平面、可靠的密钥更新、基于负载门控的无状态防放大 cookie、经过身份验证的漫游、Linux 上的批量 `recvmmsg` 接收,以及可选的定长握手填充。 **实测数据 (Apple M1 Pro, Go 1.26.3, loopback):** | 指标 | 结果 | |--------|--------| | AES-256-GCM 加密 (原始 AEAD, 单核) | ~2.5 GB/s | | ChaCha20-Poly1305 加密 (原始 AEAD) | ~0.7 GB/s | | 握手数/秒 (stream/TCP, 完整 CH-KEM, 顺序执行) | ~1,450 (~670 µs/次) | | 握手数/秒 (datagram/UDP, 完整 CH-KEM, 顺序执行) | ~1,300 (~760 µs/次) | | 单隧道吞吐量 (stream/TCP, AES-GCM, 端到端) | ~690 MB/s (5.5 Gb/s), 在多次密钥更新期间保持稳定 | | 数据报发送 (加密 + 组帧, 独立测试, 零分配稳态) | ~3.0 GB/s (~380 ns/op, 1 alloc/op) | | 数据报净吞吐量 (UDP, 单向单流, 完整接收循环) | macOS loopback 上约 ~58 MB/s; Linux 上约 ~1.8 Gb/s (见下文) | 数据报数据路径是**受系统调用限制,而非受加密限制**:独立发送路径速度约为 ~3 GB/s,因此每数据报的吞吐量取决于发送 + 接收的系统调用,而不是 AEAD。macOS loopback 的每数据报 socket 路径较慢,因此那里的单流净吞吐量 (~58 MB/s) 是 loopback 的伪影,而不是传输限制。在 Linux 上,相同的单流可以提供高得多的吞吐量: **实测数据 (Linux, Go 1.26, 单流, 容器 arm64 - 仅供参考,虚拟机会压低绝对值):** | 指标 | 结果 | |--------|--------| | 数据报净吞吐量 (UDP, 单向单流, 实际送达) | ~280 MB/s (~2.2 Gb/s) | | 数据报总净吞吐量 (单一接收 goroutine, 1-8 个流) | 在接近 4 个流时达到峰值 ~365 MB/s,随后趋于平缓 | | 数据报总净吞吐量 (`SO_REUSEPORT`, 8 个流, 1->8 个 sockets) | ~355 -> ~565 MB/s (跨越 8 个核心提升约 1.6 倍) | | 数据报发送 (独立测试, 零分配稳态) | ~1.2 GB/s | | 数据报接收, `recvmmsg` 批量对比单次系统调用接收 | ~1030 对比 ~975 MB/s | 端到端净吞吐量是指实际送达的吞吐量(基准测试对流控制发送方,因此丢弃的数据报永远不会被计算在内),这是完整路径:加密、发送、内核、接收循环、解复用、AEAD 解密、交付。单个接收 goroutine 负责对每个数据报进行解复用和 AEAD 解密是每个端点的瓶颈(在这个 8 核虚拟机上总吞吐量约为 ~365 MB/s);`ListenDatagram` 使用 `SO_REUSEPORT` 将这些工作分散到多个核心上,将总净吞吐量提升了约 1.6 倍(在这里提升至 ~565 MB/s),并且在多核主机上可以进一步扩展。交付路径的 CPU 性能分析显示大约 35% 用于 AES(已经过硬件加速),约 30% 用于系统调用,其余用于组帧/分配/簿记工作。~2.5 GB/s 的总吞吐量目标是一个多核并行的目标(AES-GCM 约为 2.5 GB/s/核心):要达到这个目标,需要比这个虚拟机更多的核心,并且每个数据报的系统调用要更少,而这正是 `UDP_SEGMENT`/`UDP_GRO` 卸载(已在[路线图](docs/ROADMAP.md)上)所提供的功能。可选的握手填充 (`WithHandshakePadding`) 以大约 +42% 的握手带宽开销(ClientHello flight 从约 1700 字节增长到 2400 字节)换取大小统一、抗指纹识别的握手数据报;它绝对不会触及数据平面。 **在其他硬件上的估算**(根据加密吞吐量推算;尚未独立测量;请运行基准测试进行验证): | 平台 | AES-256-GCM 加密 (原始) | |----------|--------------------------| | 云端实例 (c6i.xlarge) | 3-5 GB/s | | 中端服务器 (Xeon Silver) | 4-7 GB/s | | 企业级 (Xeon Platinum / EPYC) | 8-12 GB/s | 在你的目标硬件上运行 `quantum-tunnel bench --handshakes N --datagram-handshakes N --throughput`。请参阅 [CLI 参考](docs/usage/CLI.md#benchmark-mode)。 ## 许可证 MIT 许可证 - 请参阅 [LICENSE](LICENSE)。 ## 合规与责任 **重要提示:使用、克隆或复刻本仓库,即表示您承认并同意以下条款:** ### 出口管制 本软件实现了 ECCN 5D002 双用途密码技术。用户需全权负责遵守以下规定: - **美国**:出口管理条例 (EAR)。外国公民访问可能构成“视为出口”。 - **欧盟**:双用途法规 (EU 2021/821)。可能适用开源豁免。 - **其他**:当地进出口法规(例如,法国 ANSSI 声明,英国 SPIRE 许可)。 ### FIPS 验证状态 本库实现了带有上电和条件自检的 FIPS 203/202 参数。但是,它**不是**经过 FIPS 140-3 验证的加密模块。需要 FIPS 验证的联邦机构和受监管行业必须将其视为研究级软件。 ### 司法管辖区限制 强加密在某些司法管辖区(例如,中国、俄罗斯、阿联酋、沙特阿拉伯)受到限制或监管。本软件**不得**用于绕过电信法规。在受限制地区部署的用户需对法律合规性承担全部责任。 ### 免责声明 本软件按“原样”提供,不提供任何形式的明示或暗示的担保,包括但不限于适销性、特定用途的适用性和非侵权性的担保。在任何情况下,作者均不对因使用本软件而引起的任何索赔、损害或其他责任承担责任。 ### 非法律建议 本仓库任何内容——包括文档、合规参考、FIPS 实施细节和监管指南——均不构成法律、监管或合规建议。用户应咨询合格的法律顾问,以获取有关其所在司法管辖区适用法律和法规的指导。 ### 用户责任 使用、克隆、复刻或合并本软件,即表示您承认您有责任全权确定其在您所在司法管辖区的合法性,并负责遵守所有适用的法律、法规和标准。作者和版权所有者不对本软件的使用或部署方式承担任何责任。 有关涵盖 15 个以上司法管辖区的法规参考,请参阅 [ROADMAP.md](docs/ROADMAP.md#global-compliance--regulatory-considerations)。
标签:EVTX分析, FIPS 140-3, Go, Ruby工具, 密码学库, 密钥封装, 抗量子加密, 日志审计, 混合加密, 用户代理, 网络隧道, 自定义请求头, 蓝队防御