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认证, 一次性密钥, 会话安全, 前向保密, 后量子密码学, 密码学, 密钥销毁, 应用安全, 手动系统调用, 抗量子计算, 混合加密, 网络安全, 蓝队防御, 隐私保护, 零信任