gonzafg2/quantumssh

GitHub: gonzafg2/quantumssh

一个用 Rust 从零构建的后量子优先 SSH 服务器项目,以内存安全和默认混合后量子密钥交换应对「先收集、后解密」的量子威胁。

Stars: 0 | Forks: 0

# QuantumSSH **QuantumSSH** 是一个使用 Rust 编写的内存安全、以后量钥优先(post-quantum-first)的 SSH 服务器。它是从零开始设计的,旨在应对这样一个未来:如今加密的流量正被记录下来,并将在一代人的时间内被量子计算机解密。 我们不会 Fork OpenSSH。我们也不会将 PQ(后量钥)算法仅仅作为一个选项添加。我们正在构建我们认为到 2030 年应该默认存在的 SSH 服务器——并且我们将其构建为**真正的开放基础设施**,可自由审计、自由 Fork、自由使用。 ## 状态 🚧 **预 Alpha 阶段(Pre-alpha)—— 愿景与设计阶段。** 此仓库目前包含项目的宣言、路线图和治理承诺。代码即将发布。如果您想跟进开发进程,请 Star 并 Watch 本仓库;如果您想讨论设计,请开启一个 Issue。 支持性基础设施(DNS、TLS、电子邮件、代码签名、仓库加固)在 [`docs/infrastructure.md`](./docs/infrastructure.md) 中进行了描述;独立的验证方案位于 [`docs/operations.md`](./docs/operations.md) 中。 ## 问题所在 SSH 是运行互联网底层管道的协议。每台服务器、每次部署、每条 CI pipeline、每一台带有控制平面的嵌入式设备——它们都在使用 SSH。占主导地位的实现 OpenSSH 是严谨 C 语言工程的典范,一直为我们提供了卓越的服务。 但它背负着两个不断加剧的负担: **1. 内存不安全。** OpenSSH 包含约 120,000 行 C 代码。尽管其维护者具备世界级的严谨性,但它所依赖的更广泛的生态系统(以及它集成的 shell、PAM 模块和操作系统原语)多年来不断产生大量的 CVE。2024 年的 `xz-utils` 后门事件通过一个压缩依赖项瞄准了 OpenSSH 的身份验证路径,这清楚地表明信任链已经变得多么脆弱。 **2. 量子悬崖。** 如今的 SSH 密钥交换主要依赖于基于椭圆曲线的经典 Diffie-Hellman 和 RSA。在功能足够强大的量子计算机上,这两种算法都容易受到 Shor 算法的攻击。如今真正重要的威胁模型不是“量子计算机明天就会出现”——而是**先收集,后解密**。国家级对手正在记录当今加密的 SSH 会话,押注他们能在 10 到 15 年内将其解密。任何用于保护具有较长保留期信息的会话——源代码、基础设施机密、受监管的银行数据、个人通信——都已经处于风险之中。 OpenSSH 正在做出回应。10.0 版本已将 ML-KEM 混合密钥交换设为默认值。GitHub 于 2025 年 9 月推出了后量钥 SSH 访问。方向是正确的。但这些实现是直接修补在一门内存不安全的语言编写的、拥有 25 年历史的代码库上的,保留了几十年的遗留算法、配置接口和边缘情况——其中的每一行代码都是潜在的攻击面和维护负担。 我们认为,存在探索不同答案的空间。 ## 愿景 QuantumSSH 的构建围绕四项技术承诺和一项结构性承诺。 **构造上即保证内存安全。** 使用 Rust 编写。在协议或加密层中没有未经论证、审查和测试的 `unsafe` 块。借用检查器是一项功能,而不是负担。 **默认支持后量钥,而非需要手动选择加入。** 混合密钥交换(ML-KEM + X25519)是默认且唯一受支持的密钥交换族。用户不需要知道 PQ 的含义或如何配置它。开箱即用即执行正确的操作。 **零遗留。** 不支持 SSH-1。不支持 RSA-1024。不支持 DSA。不支持 CBC 模式。不支持 `diffie-hellman-group1-sha1`。默认配置文件中不包含密码认证。我们拒绝继承 25 年来“因为某人的旧路由器需要它,所以它仍然存在”的技术债。 **极小的攻击面。** MVP(最小可行产品)支持公钥身份验证、命令执行、交互式 PTY shell 和 SFTP。仅此而已。端口转发、X11 转发、Agent 转发和其他功能是显式选择启用的,受 feature flags 和配置的管控。 **开源作为一项永久承诺。** 这不是一种营销姿态。请参阅下一节。 ## 真正的开源 加密基础设施通过三件事赢得信任:时间、审查以及任何人验证其声明的能力。第三点是不可妥协的,我们对此非常明确,因为更广泛的环境正越来越多地将“开放”作为一个营销词汇,用于名不副实的事物上。 **QuantumSSH 现在是、且将来永远是采用 Apache 2.0 许可证的开源项目。** 我们公开并永久承诺: - **不使用“源码可见”许可证。** 源码可见不等于开源。我们不会采用限制商业用途、Fork 权利、再分发或修改的许可证。 - **阅读代码无需签署 NDA。** 从第一次提交开始,每一行代码都在公开仓库中。永远如此。 - **不提供具有完全不同代码的“企业版”。** 如果我们将来提供付费服务,它们将是围绕开放项目的服务(支持、托管、集成),而不是一个真正的核心版本被私有化的双轨制代码库。 - **绝不进行“更改许可证的突然袭击”。** 每位贡献者的工作将保留在其贡献时采用的许可证下。我们不会对已接受的贡献进行未来的 BUSL 或 AGPL 转换。治理结构将使这种举动在结构上变得难以实施,而不仅仅是不太可能。 - **不对项目强制执行专利。** Apache 2.0 的专利授权是双向的。Fleming Science and Technologies SpA 持有的与此相关的任何专利,均以永久免费、不可撤销的方式授权给本项目的所有用户。 此承诺被特意写在 README 中。如果该项目的未来版本悄然删除了这一节,这本身就表明发生了某些变化。我们邀请社区监督我们遵守此承诺。 ## 非目标 我们有意不尝试成为: - **OpenSSH 的直接替代品。** 在能使系统更安全或更简单的地方,配置文件、命令行标志和行为将有所不同。 - **向后兼容旧客户端。** 如果您的客户端不能使用现代的混合 PQ SSH,它就无法连接。毫无妥协余地。 - **最快的 SSH 服务器。** OpenSSH 已经足够快了。我们的优化目标是正确性,其次是安全性,再次是人体工程学。性能排在最后。 - **学术研究载体。** 我们使用 NIST 已经标准化且更广泛社区正在趋向采用的算法。我们不发明密码学。 ## 路线图 ### 阶段 0 — 基础(基本完成) - ✅ 宣言、README、治理模型 - 🟡 威胁模型文档 — 骨架已提交;实质性内容在 [#8](https://github.com/gonzafg2/quantumssh/issues/8) 中跟进 - 🟡 关于使用 `russh` 还是从零开始构建的决定 — 初步选择 `russh`;正式 RFC 将与 Phase 1 / Hito 1 一起待定 ([#9](https://github.com/gonzafg2/quantumssh/issues/9)) 阶段 0 还交付了项目的支持性基础设施(带有 DNSSEC 的 DNS、带有 HSTS 预加载提交的 TLS、入站电子邮件转发、已发布的项目 PGP 密钥、`main` 分支上强制执行签名提交的分支保护,以及带有工作区状态守卫的 CI 脚手架,当阶段 1 到来时它们会自动禁用),以及包含 16 个 ADR(架构决策记录)的目录,记录了每项操作选择及其理由。当前状态请参见 [`docs/infrastructure.md`](./docs/infrastructure.md),独立验证方案请参见 [`docs/operations.md`](./docs/operations.md),决策记录请参见 [`docs/adr/`](./docs/adr/)。 ### 阶段 1 — 可运行的骨架 在 [#9](https://github.com/gonzafg2/quantumssh/issues/9) 中跟进。 - 服务器监听端口,接受连接 - 混合 PQ 密钥交换(ML-KEM-768 + X25519) - Ed25519 主机密钥 - 仅支持公钥身份验证 - 单一命令执行 - 通过 `tracing` 进行结构化日志记录 ### 阶段 2 — 实用化 - 交互式 PTY 分配 - 配置文件(TOML,而非 `sshd_config`) - SFTP 子系统 - systemd 集成 - 首个公开发布版本:`0.1.0` ### 阶段 3 — 加固 - 持续模糊测试(`cargo-fuzz`,OSS-Fuzz) - 针对 OpenSSH 客户端的一致性测试 - 安全审计(由社区资助或获得赠款资助) - 首个生产候选发布版本:`0.5.0` ### 阶段 4 — 生态系统 - 发行版软件包 - 文档站点 - 参考部署模式 - 面向受监管行业的量子准备就绪指南 我们预计阶段 1 需要数周时间。阶段 2 需要数月。阶段 3 需要一年或更长时间。我们不急于求成。加密基础设施缓慢地赢得信任。 ## 为什么是 Rust,为什么是现在 Rust 是第一种具备 C 语言性能特征、将内存安全作为核心保证,并拥有现代化工具链的系统级语言。它正被采用来解决完全属于此类的问题:Linux 内核正在集成 Rust 驱动程序;Cloudflare 用 Pingora(Rust)替换了 Nginx;Microsoft 正在用 Rust 重写部分 Windows 代码;ISRG(Let's Encrypt 背后的基金会)通过其 [Prossimo](https://www.memorysafety.org/) 项目资助了 `sudo`、`ntpd` 和 DNS 栈的内存安全重写。 SSH 尚未迎来作为真正开放、内存安全、后量钥基础设施的高光时刻。我们认为它早就该到来了。 我们还认为,向后量钥的过渡是一个正确的拐点。全球的基础设施团队都需要在接下来的十年内迁移到支持 PQ 的 SSH。他们可以通过逐步升级 OpenSSH 来实现,也可以通过采用一个从第一天起就为那个世界量身打造的工具来实现。这两种方式都无可厚非。我们正在构建第二种选择,并在此过程中保持其开放性。 ## 项目价值观 - **正确性胜于炫技。** 显然有效的无聊代码胜过可能有效的优雅代码。 - **文档是产品的一部分。** 没有人能理解的协议实现,就是没有人能审计的协议实现。 - **西班牙语和英语享有同等地位。** 文档、博客文章和会议演讲将同时提供这两种语言版本。拉丁美洲作为系统软件消费者的时间太长了。我们打算成为生产者。 - **极小的接触面,锐利的边界。** 我们拒绝功能的频率将高于接受。每一项功能都是维护、审计和推演的永久承诺。 - **开放式治理。** 设计决策通过公开的 RFC 进行。从长远来看,这里没有仁慈的独裁者;只有一个记录其推理过程的社区,以便新来者可以理解事物是如何发展到今天的。 ## 相关工作 我们应对社区诚实地说明该领域已经存在的事物。有几个项目与 QuantumSSH 的领域有交集,而我们的定位最好与他们的定位放在一起理解。 **OpenSSH** 是成熟且占主导地位的实现。使用 C 语言编写,积极维护,并正在集成 PQ 密钥交换(`mlkem768x25519-sha256` 在 10.0+ 版本中是默认选项)。它在设计上承载了 25 年的遗留物——这对兼容性是优势,对安全是负担。QuantumSSH 不是 OpenSSH 的直接替代品;它是一个具有不同权衡的替代方案。 **`russh`** 是一个实现了 SSH 协议的 Rust 库,同时包含客户端和服务器原语。这是一项基础性的工作,也很可能成为 QuantumSSH 底层的起点。我们期望成为其贡献者和下游用户,而不是竞争对手。 滑铁卢大学的 **Open Quantum Safe(`liboqs`、`liboqs-rust`)** 提供了使此类项目成为可能的后量钥原语。他们的 `openssh` 分支是面向研究的,并且基于较旧的 OpenSSH。我们使用他们的密码学库;我们不分叉他们的 SSH。 **Microsoft `Quantum-Safe-OpenSSH`** 是 OpenSSH 的研究性 Fork,包含 PQ 算法,以 Azure 虚拟机映像的形式分发。它明确仅供研究使用,不适用于生产环境。 **`qssh`** 是一项相关工作,旨在 Rust 中实现后量钥 SSH,并声称具有形式化验证。截至撰写本文时,它是在*源码可见的协作许可证*下分发的,要求通过电子邮件请求并可能需要签署 NDA 才能获取源代码。我们尊重这项工作及其模型的选择。QuantumSSH 走的是一条不同的道路:采用 Apache 2.0 许可证,从第一次提交开始完全公开,任何人都可以在无需事先协议的情况下进行贡献。这两个项目是不可互换的,对这两种方向都进行探索对社区来说更有利。 如果我们遗漏了您的项目,请开启一个 Issue,我们会将其添加进来。 ## 起源 QuantumSSH 由智利的 **Fleming Science and Technologies SpA** 公司的 [Gonzalo Fleming Garrido](https://flemingtechnologies.cl/) 发起并目前负责主导。该项目从第一次提交就是开源的,并欢迎来自世界各地的贡献者。 配套文档 [`MANIFIESTO.es.md`](./MANIFIESTO.es.md) 用西班牙语解释了该项目存在的原因以及我们对其的期望。我们鼓励您阅读,但这并非强制要求。 ## 参与其中 - **Watch 本仓库** 以跟进整个开发旅程。 - **开启一个 Issue** 来讨论设计决策、提出功能建议或质疑现有假设。永远不需要签署 NDA。 - **联系我们**,如果您在以下方面有经验:SSH 协议内部机制、后量钥密码学、模糊测试、形式化验证或大规模系统级 Rust 开发。 我们明确寻找具有密码学背景的合作者。如果您正是这样的人,请做个自我介绍。 ## 许可证 QuantumSSH 采用 **Apache License 2.0** 进行许可(参见 [`LICENSE`](./LICENSE))。 选择 Apache 2.0 是经过深思熟虑的: - 它是现代系统基础设施(Kubernetes、Tokio 以及大部分 Rust 生态系统)的事实标准。 - 它包含专利授权,这对于一个涉及密码学算法的项目来说非常重要。 - 它具有足够的宽容性,可以允许在受监管的行业(银行、政府、医疗保健)中采用,而不会产生法律摩擦。 - 它与大多数其他开源许可证兼容,便于下游集成。 此许可证选择是明确且永久的。请参见上面的 *真正的开源* 部分。 版权所有 (c) 2026 Fleming Science and Technologies SpA 及贡献者。 ## 致谢 本项目站在以下项目的肩膀上: - **OpenSSH** 团队,他们 25 年来的严谨工作教会了世界优秀的 SSH 实现应该是什么样子。 - 滑铁卢大学的 **Open Quantum Safe** 项目,其 `liboqs` 和 `liboqs-rust` 库使实现者能够轻松使用后量钥密码学。 - **`russh`** 项目,其在 Rust 中现有的协议工作很可能成为 QuantumSSH 底层的起点。 - **ISRG / Prossimo** 和 **Sovereign Tech Fund**,他们资助内存安全关键基础设施的模式启发了我们的路线图。 - **NIST 后量钥密码学**标准化团队,其多年的流程为我们提供了可以依赖的算法。 *在智利构建。为世界编写。为未来三十年而设计。开放,且永远开放。*
标签:CVE防护, OpenSSH替代, PQC, Python安全, Rust, SSH, 免受NDAS, 内存安全, 加密通信, 可视化界面, 后量子加密, 后量子密码学, 子域名枚举, 安全协议, 安全基础设施, 密码学, 开源, 开源基础设施, 手动系统调用, 抗量子计算, 智能代码审计, 服务器, 系统安全, 网络安全, 网络流量审计, 远程访问, 量子SSH, 隐私保护