Evaemon/evaemon-otk-pq

GitHub: Evaemon/evaemon-otk-pq

一个基于三层架构的后量子SSH一次性密钥认证系统,通过每次会话生成独立密钥、用后即销毁的方式,从根本上解决传统SSH密钥被盗后无限期有效的安全隐患。

Stars: 0 | Forks: 0

# Evaemon OTK-PQ Evaemon OTK-PQ 是一个用于 SSH 的**一次性密钥后量子混合认证**系统。它引入了一种全新的方法,即**每次会话都需要一个唯一的、仅使用一次的密钥,该密钥在使用后经加密销毁**。即使攻击者截获了会话密钥,它也已毫无价值。 构建于 [Evaemon](https://github.com/Yarpii/Evaemon) 后量子 SSH 工具包 (OQS-OpenSSH) 之上,OTK-PQ 增加了一个三层架构,确保没有任何东西持久存在。 ## 快速开始 ``` git clone https://github.com/Evaemon/evaemon-otk-pq.git cd evaemon-otk-pq sudo bash wizard.sh ``` 向导将引导您完成构建 OQS-OpenSSH、设置 OTK-PQ 主密钥、注册客户端以及使用一次性会话密钥进行连接的过程。 ## 问题所在 传统的 SSH 认证依赖于持久化的密钥对。同一个私钥无限期地对用户进行认证。这导致了: - 被盗的私钥授予无限访问权限,直到被手动撤销 - 跨会话的密钥重用随时间推移产生了巨大的攻击面 - 量子计算机威胁着要追溯性地破解经典密钥交换 - 认证层没有前向保密性 ## OTK-PQ 解决方案 OTK-PQ 将认证分为三个独立、分离的层: ``` ┌─────────────────────────────────────────────────────┐ │ LAYER 1 — POST-QUANTUM MASTER KEY (Anchor) │ │ ─────────────────────────────────────────────────── │ │ • Never transmitted over the network │ │ • Exists only on client │ │ • Signs ephemeral session keys to prove legitimacy │ │ • ML-DSA-87 (FIPS 204) — NIST Level 5 │ │ • The root of trust │ └──────────────────────┬──────────────────────────────┘ │ validates ┌──────────────────────▼──────────────────────────────┐ │ LAYER 2 — HYBRID SESSION KEY GENERATION │ │ ─────────────────────────────────────────────────── │ │ • Fresh key pair generated for every session │ │ • Hybrid: Ed25519 + ML-DSA-87 combined │ │ • Both must be valid — if one is broken, the other │ │ still protects │ │ • Signed by the master key │ └──────────────────────┬──────────────────────────────┘ │ authenticates ┌──────────────────────▼──────────────────────────────┐ │ LAYER 3 — ONE-TIME EXECUTION & DESTRUCTION │ │ ─────────────────────────────────────────────────── │ │ • Session key used exactly once │ │ • After session: cryptographically destroyed │ │ • Revocation ledger — used keys can never be │ │ replayed │ │ • No persistent session material remains │ └─────────────────────────────────────────────────────┘ ``` ## 功能特性 ### OTK-PQ (一次性密钥) - **三层架构** — 主密钥锚点、混合会话密钥、一次性销毁 - **每会话临时密钥** — 每次连接生成并销毁全新的混合密钥对 - **主密钥签名** — ML-DSA-87 (FIPS 204, Level 5) 对会话密钥进行签名;主密钥永不在线上传输 - **撤销账本** — 服务器端记录防止重放攻击;已使用的密钥永远无法再次使用 - **安全销毁** — 多次覆写 (shred) 并验证完全擦除 - **Nonce 验证** — 时间戳 + CSPRNG 防止重放并确保时间隔离 - **客户端注册** — 服务器仅存储主公钥;服务器受损不会暴露私钥 - **主密钥轮换** — 轮换主密钥时的归档和重新注册 - **陈旧会话清理** — 自动清理中断或崩溃的会话 ### 基础 PQ SSH (来自 Evaemon Core) - **12 种后量子算法** — Falcon, ML-DSA, SPHINCS+, SLH-DSA, MAYO - **5 种混合 KEX 算法** — ML-KEM (Kyber) + 经典密钥交换 - **混合模式** — 经典 (Ed25519, RSA) 与 PQ 算法并存 - **非侵入式** — 运行独立的 sshd;系统 OpenSSH 从未被修改 - **交互式向导** — 带有 OTK-PQ 子菜单的黑底青字 whiptail GUI - **客户端工具** — 密钥生成、连接、备份/恢复、健康检查、轮换、迁移、调试、基准测试 - **服务器工具** — 设置、监控、更新/重建、诊断 ## 算法 | 用途 | 算法 | 标准 | 安全性 | |---------|-----------|----------|----------| | 主密钥签名 | ML-DSA-87 (Dilithium) | FIPS 204 | Level 5 | | 主密钥封装 | ML-KEM-1024 (Kyber) | FIPS 203 | Level 5 | | 会话经典签名 | Ed25519 | RFC 8032 | — | | 会话经典 KEX | X25519 / Curve25519 | RFC 7748 | — | | 会话 PQ KEX | ML-KEM-1024 hybrid | FIPS 203 | Level 5 | | 会话 KDF | HKDF-SHA-512 | RFC 5869 | — | | Nonce 生成 | CSPRNG + timestamp | — | — | | 撤销哈希 | SHA3-256 | FIPS 202 | — | 另有继承自 Evaemon Core 的 12 种 PQ 认证算法和 5 种混合 KEX 算法 — 参见 [docs/security.md](docs/security.md)。 ## 工作原理 ### 1. 初始设置 (一次性) ``` # Client:生成 OTK-PQ 主密钥 sudo bash client/otk/master_key.sh generate # Client:导出主公钥以进行注册 bash client/otk/master_key.sh export > my_master.pub # Server:设置 OTK-PQ server sudo bash server/otk/otk_server.sh setup # Server:注册 client 的主公钥 sudo bash server/otk/otk_server.sh enroll alice my_master.pub ``` ### 2. 每次连接 (自动) ``` # OTK Connect 处理完整生命周期: bash client/otk/otk_connect.sh server_host username [port] ``` 幕后发生的事情: 1. **生成** — 全新的混合密钥对 (Ed25519 + ML-DSA-87),由主密钥签名 2. **推送** — 会话包 (公钥 + 签名 + nonce) 发送至服务器 3. **验证** — 服务器检查撤销账本,验证 nonce,验证主签名 4. **连接** — 使用临时密钥和混合 PQ KEX 建立 SSH 会话 5. **销毁** — 双方的所有会话密钥材料被安全擦除 6. **撤销** — 会话密钥哈希添加到撤销账本 (永远无法重放) ### 3. 结果 会话密钥**不复存在**。它无法被重建。任何重放它的尝试都会被拒绝。 ## 安全属性 | 属性 | 传统 SSH | OTK-PQ | |----------|----------------|--------| | 密钥重用 | 同一密钥无限期使用 | 从不 — 每个会话一个密钥 | | 前向保密性 | 仅会话级别 | 认证 + 会话级别 | | 量子抗性 | 无 (RSA/Ed25519) | 混合经典 + 后量子 | | 密钥被盗影响 | 完全访问直到撤销 | 零 — 密钥已过期 | | 重放攻击 | 如果密钥被盗则可能 | 不可能 — 撤销账本 | | 主密钥暴露 | 密钥即认证密钥 | 主密钥永不在线上传输 | | 攻击面 | 持久化 | 临时 — 仅在会话期间存在 | ## 项目结构 ``` evaemon-otk-pq/ ├── wizard.sh # Interactive entry point ├── build_oqs_openssh.sh # Builds liboqs + OQS-OpenSSH from source ├── OTK-PQ .md # OTK-PQ architecture specification │ ├── client/ │ ├── otk/ # ── OTK-PQ Client ── │ │ ├── master_key.sh # Layer 1: ML-DSA-87 master key manager │ │ ├── session_key.sh # Layer 2: Hybrid session key engine │ │ ├── otk_lifecycle.sh # Layer 3: Secure destruction & lifecycle │ │ └── otk_connect.sh # Full OTK connection orchestrator │ ├── keygen.sh # PQ/classical key generation │ ├── copy_key_to_server.sh # Push public key to server │ ├── connect.sh # Standard PQ SSH connection │ ├── backup.sh # AES-256 encrypted key backup/restore │ ├── health_check.sh # Five-stage connectivity check │ ├── key_rotation.sh # Safe key rotation with verification │ ├── migrate_keys.sh # Classical → PQ key migration │ └── tools/ │ ├── debug.sh # Verbose diagnostics │ └── performance_test.sh # Algorithm benchmarks │ ├── server/ │ ├── otk/ # ── OTK-PQ Server ── │ │ ├── otk_server.sh # Enrollment, verification, management │ │ └── revocation_ledger.sh # Replay prevention ledger │ ├── server.sh # Server setup (host keys, sshd_config) │ ├── monitoring.sh # Service monitoring │ ├── update.sh # Rebuild & restart │ ├── pq_only_testmode.sh # Pure PQ test mode │ └── tools/ │ └── diagnostics.sh # Server diagnostics │ ├── shared/ │ ├── config.sh # Base configuration (algorithms, paths) │ ├── otk_config.sh # OTK-PQ configuration (Layer 1-3 params) │ ├── logging.sh # Structured logging │ ├── validation.sh # Input validation │ ├── functions.sh # Shared helpers │ └── tests/ │ ├── test_runner.sh # Bash test harness │ ├── unit_tests/ │ │ ├── test_otk_config.sh # 33 tests — OTK config values │ │ ├── test_otk_session_key.sh # 18 tests — nonces, session IDs │ │ ├── test_otk_lifecycle.sh # 17 tests — destruction, verification │ │ ├── test_otk_master_key.sh # 15 tests — master key management │ │ ├── test_otk_revocation_ledger.sh # 20 tests — ledger, replay prevention │ │ ├── test_validation.sh # 44 tests — input validation │ │ ├── test_logging.sh # 26 tests — log levels │ │ ├── test_functions.sh # 13 tests — retry helpers │ │ ├── test_backup.sh # 13 tests — backup/restore │ │ ├── test_copy_key.sh # 10 tests — key copy │ │ ├── test_connect.sh # 15 tests — connection args │ │ ├── test_migrate_keys.sh # 16 tests — key migration │ │ ├── test_key_age.sh # 6 tests — rotation policy │ │ └── test_monitoring.sh # 10 tests — monitoring │ └── integration_tests/ │ ├── test_keygen.sh # 11 tests — key generation │ ├── test_server.sh # 53 tests — sshd_config │ └── test_key_rotation.sh # 14 tests — rotation │ └── docs/ ├── installation.md # Installation guide ├── usage.md # Full usage manual ├── security.md # Threat model & hardening ├── code-review-report.md # Code review findings & fixes └── examples/ ├── connect_falcon1024.sh ├── ssh_config_snippet.txt └── automated_key_rotation.sh ``` ## 测试套件 17 个测试文件中的 **334+ 项测试**。所有 OTK 测试均可在没有 OQS 二进制文件的情况下运行。 ``` # OTK-PQ 测试(无需 OQS binary) bash shared/tests/unit_tests/test_otk_config.sh # 33 tests bash shared/tests/unit_tests/test_otk_session_key.sh # 18 tests bash shared/tests/unit_tests/test_otk_lifecycle.sh # 17 tests bash shared/tests/unit_tests/test_otk_master_key.sh # 15 tests bash shared/tests/unit_tests/test_otk_revocation_ledger.sh # 20 tests # 基本单元测试(无需 OQS binary) bash shared/tests/unit_tests/test_validation.sh # 44 tests bash shared/tests/unit_tests/test_logging.sh # 26 tests # ... 以及更多 # 集成测试(若无 OQS 则自动跳过) bash shared/tests/integration_tests/test_server.sh # 53 tests ``` ## 设计理念 **没有任何东西持久存在。** 会话密钥仅在单次连接期间存在。没有密钥可以被盗,因为没有持久的密钥。 **信任是分层的。** 主密钥锚定身份。混合层确保量子弹性。一次性机制确保时间隔离。攻击者必须同时攻破所有三层。 **销毁是一个特性。** 在传统系统中,密钥销毁是事后诸葛亮。在 OTK-PQ 中,它是核心机制。系统是基于每个密钥都将被销毁的假设设计的 — 唯一的问题是会话是否先完成。 ## 许可证 专有 — Trednets B.V. ## 作者 Yarpii — CEO, Trednets *每一次连接都是唯一的。每一个密钥都是临时的。每一次会话都是终局的。*
标签:ephemeral keys, FIPS 204, JSONLines, Linux运维工具, ML-DSA-87, OQS-OpenSSH, PQC, SamuraiWTF, SSH认证, 一次性密钥, 会话安全, 前向保密, 后量子密码学, 密码学, 密钥销毁, 应用安全, 手动系统调用, 抗量子计算, 混合加密, 网络安全, 蓝队防御, 隐私保护, 零信任