suhteevah/sshd-pqc

GitHub: suhteevah/sshd-pqc

一个支持ML-KEM-768与X25519混合后量子密钥交换的no_std SSH守护进程,可在裸机或嵌入式环境运行。

Stars: 0 | Forks: 0

# sshd-pqc 一个使用 Rust 编写的 `#![no_std]` 后量子 SSH 守护进程。 ## 亮点 - **后量子混合密钥交换**:`mlkem768x25519-sha256@openssh.com` 将 ML-KEM-768 (FIPS 203) 与 X25519 相结合,在不牺牲经典安全性的前提下提供量子抗性 - **后量子主机密钥**:ML-DSA-65 (FIPS 204, CRYSTALS-Dilithium) + Ed25519 双签名用于服务器认证 - **经典回退**:`curve25519-sha256` 适用于尚未支持后量子算法的客户端 - **`#![no_std]` + `alloc`**:可在裸机、嵌入式系统或任何具有堆分配器的环境中运行——无需 POSIX、libc 或 Linux 内核 - **完整 SSH-2 协议**:版本交换、KEXINIT 协商、用户认证(公钥 + 密码)、通道复用、PTY、shell、exec - **ChaCha20-Poly1305**:AEAD 传输加密(`chacha20-poly1305@openssh.com`) ## 协议栈 ``` +----------------------------------+ | Channel Layer | RFC 4254: sessions, exec, pty +----------------------------------+ | Authentication Layer | RFC 4252: publickey, password +----------------------------------+ | Transport Layer | RFC 4253: packets, encryption +----------------------------------+ | Key Exchange (Hybrid PQ) | ML-KEM-768 + X25519 +----------------------------------+ | Wire Format | SSH binary encoding +----------------------------------+ ``` ## 使用方法 添加到您的 `Cargo.toml`: ``` [dependencies] sshd-pqc = "0.1" ``` 基本服务器设置: ``` use sshd_pqc::{SshServer, SshConfig}; fn my_rng(buf: &mut [u8]) { // Fill buf with random bytes from your platform's RNG # todo!() } let config = SshConfig::default(); let mut server = SshServer::new(config, my_rng); // Add an authorized Ed25519 public key let pubkey = [0u8; 32]; // your user's Ed25519 public key server.add_ed25519_key("admin", &pubkey, "admin key"); // When a TCP connection arrives: if let Some(mut session) = server.accept_connection() { // Send version string let version = session.version_bytes(); // ... send `version` over TCP ... // Feed received TCP data into the session // let actions = session.on_data_received(&tcp_data).unwrap(); // Drain outgoing packets and send over TCP // for packet in session.drain_outgoing() { ... } } ``` ## 状态 此 crate 实现了完整的 SSH-2 协议状态机。密码学操作(ML-KEM-768 封装/解封装、Ed25519 签名/验证、ML-DSA-65、ChaCha20-Poly1305 数据包加密)使用占位符实现来验证协议流程。在生产环境中请接入真正的密码学 crate API(ml-kem、ed25519-dalek、ml-dsa、chacha20poly1305)。 ## 算法 | 类别 | 算法 | 状态 | |----------|-----------|--------| | KEX | `mlkem768x25519-sha256@openssh.com` | 协议完成,ML-KEM 占位符 | | KEX | `curve25519-sha256` | 协议完成,X25519 占位符 | | 主机密钥 | `mlkem768-ed25519@openssh.com`(混合) | 协议完成,占位符签名 | | 主机密钥 | `ssh-ed25519` | 协议完成,占位符签名 | | 加密 | `chacha20-poly1305@openssh.com` | 密钥派生完成,AEAD 占位符 | | MAC | `hmac-sha2-256` | 已声明,集成在 AEAD 中 | | 认证 | 公钥(Ed25519, ML-DSA-65) | 框架完成 | | 认证 | 密码(SHA-256 哈希) | 完成 | ## 许可证 根据您选择,可使用以下许可证之一: - Apache License, Version 2.0([LICENSE-APACHE](LICENSE-APACHE) 或 ) - MIT License([LICENSE-MIT](LICENSE-MIT) 或 ) ## 贡献 欢迎贡献。请在 [GitHub](https://github.com/suhteevah/sshd-pqc) 上提交 issue 或 pull request。 ## 支持本项目 如果您觉得这个项目有用,请考虑给我买杯咖啡!您的支持帮助我持续构建和分享开源工具。 [![通过 PayPal 捐赠](https://img.shields.io/badge/Donate-PayPal-blue.svg?logo=paypal)](https://www.paypal.me/baal_hosting) **PayPal:** [baal_hosting@live.com](https://paypal.me/baal_hosting) 每一份捐赠,无论多少,都非常感谢,并激励持续开发。谢谢!
标签:AEAD加密, ChaCha20-Poly1305, CRYSTALS-Dilithium, Ed25519, Exec, FIPS203, FIPS204, ML-DSA-65, ML-KEM-768, no_std, PE 加载器, PTY, Rust, Shell, SSH-2协议, SSH服务器, X25519, 公开密钥认证, 加密协议, 可视化界面, 后量子密码学, 密码认证, 密钥交换, 嵌入式系统, 服务器, 混合密钥交换, 网络安全, 网络流量审计, 裸机运行, 远程访问, 通知系统, 通道复用, 隐私保护