后量子混合加密与密钥管理服务器。
Citadel 结合了 X25519 + ML-KEM-768 进行密钥封装,并使用 AES-256-GCM 进行数据加密,遵循 NIST 为后量子过渡提出的混合方法。应用程序通过 REST API 进行加密和解密。Citadel 负责管理密钥——包括生成、轮换、撤销、访问控制和审计日志记录。
状态: 功能实现。未经审计。无生产部署。请参阅下面的安全说明。
Your Application Citadel Database
| | |
|-- POST /encrypt ------->| |
| |-- hybrid KEM (X25519+ML-KEM) |
| |-- derive AES-256 key (HKDF) |
| |-- encrypt with AES-256-GCM |
|<-- encrypted blob ------| |
| |
|-- store blob ------------------------------------------>|
您的应用程序永远不会接触原始密钥材料。加密 blob 是自包含的——它包含包装密钥、算法标识符和密文。您可以将它存储在任何数据库中。通过将 blob 连同相同的 AAD 和上下文发送回 Citadel 来进行解密。
citadel-envelope 混合加密核心(X25519 + ML-KEM-768 + AES-256-GCM)
citadel-keystore 密钥生命周期管理,4级层次结构,威胁自适应策略
citadel-api HTTP 服务器,作用域 API 密钥认证,速率限制,实时仪表板
# 克隆
git clone https://github.com/mrcord77/rust_citadel.git
cd rust_citadel
# 设置您的管理员 API 密钥
echo -n "your-secret-key" | sha256sum | cut -d' ' -f1
# 复制哈希值
# 启动
CITADEL_API_KEY_HASH=<粘贴哈希值> docker compose up -d
# 验证
curl http://localhost:3000/health
# {"status":"ok","version":"0.2.0"}
需要 Rust 1.75+。
cargo build --release -p citadel-api
CITADEL_API_KEY="your-secret-key" CITADEL_SEED_DEMO=true ./target/release/citadel-api
import requests
api = "http://localhost:3000"
headers = {"Authorization": "Bearer your-secret-key"}
# 加密
r = requests.post(f"{api}/api/keys/{dek_id}/encrypt", headers=headers, json={
"plaintext": "sensitive data",
"aad": "record-001", # 将密文绑定到此记录
"context": "patient-records" # 域分离
})
blob = r.json()
# 解密
r = requests.post(f"{api}/api/decrypt", headers=headers, json={
"blob": blob,
"aad": "record-001",
"context": "patient-records"
})
plaintext = r.json()["plaintext"]
请参阅 citadel_example.py 获取包含 AAD 绑定、密钥轮换和威胁感知应用程序行为的完整工作示例。
# 状态
curl http://localhost:3000/api/status -H "Authorization: Bearer $KEY"
# 列出密钥
curl http://localhost:3000/api/keys -H "Authorization: Bearer $KEY"
# 加密
curl -X POST http://localhost:3000/api/keys/$DEK_ID/encrypt \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{"plaintext":"hello","aad":"test","context":"demo"}'
Root Key
└── Domain Key (per environment / business unit)
└── KEK — Key Encrypting Key (wraps DEKs)
└── DEK — Data Encrypting Key (encrypts application data)
遵循 NIST SP 800-57。每一层都限制了被攻破的影响范围——如果 DEK 泄露,不会影响其他 DEK,因为 KEK 是独立的。
| 作用域 | 权限 |
|---|---|
read | 查看密钥、状态、指标、威胁等级 |
encrypt | 加密和解密数据 |
manage | 创建、轮换、撤销、销毁密钥 |
admin |
admin 隐含所有其他作用域。最小权限原则:给监控仪表板分配 read,给应用服务分配 read + encrypt,给管理工具分配 admin。
Citadel 监控安全事件并自动调整密钥策略:
提升威胁等级的事件:认证失败、解密失败、快速访问模式、手动提升。分数随时间衰减。
| 组件 |
|---|
混合构造:两个共享密钥拼接后经过 HKDF。只要 X25519 或 ML-KEM-768 中任一保持安全,则整体安全。
version[1] || suite_kem[1] || suite_aead[1] || flags[1] || kem_ct_len[2] ||
x25519_ephemeral_pk[32] || mlkem768_ct[1088] || nonce[12] || aead_ct[variable]
自描述、带版本号、无协商(防止降级攻击)。完整规范请参阅 SPEC.md。
subtle crate 验证 API 密钥,防止时序攻击Zeroizing<T> 包装,在丢弃时归零Citadel 是未经审计的软件。
该实现通过成熟的 Rust crate(ml-kem、x25519-dalek、aes-gcm、hkdf)使用 NIST 标准化的原语。它不实现任何加密算法。其价值在于正确的组合,而非新颖的数学。
已完成的工作:
未完成的工作:
未经独立审查,请勿用于敏感数据。 漏洞报告请参阅 SECURITY.md。
映射了 34 项 NIST SP 800-57 控制项:26 项满足,7 项部分满足,1 项存在差距。完整的映射请参阅 COMPLIANCE_MATRIX.md。
相关框架:NIST SP 800-57(密钥管理)、CNSA 2.0(PQC 时间线)、HIPAA(静态加密)、SOC 2(访问控制和审计)。
rust_citadel/
├── citadel-envelope/ # 核心混合加密库
│ ├── src/
│ │ ├── envelope.rs # 加密/解密操作
│ │ ├── kem.rs # X25519 + ML-KEM-768 混合 KEM
│ │ ├── kdf.rs # HKDF-SHA256 密钥派生
│ │ ├── wire.rs # 线格式编码/解码
│ │ ├── aead.rs # AES-256-GCM 包装器
│ │ ├── aad.rs # 额外的认证数据
│ │ ├── error.rs # 统一错误类型
│ │ └── sdk.rs # 高级 API
│ ├── tests/ # KAT + 往返测试
│ └── fuzz/ # 模糊测试目标
├── citadel-keystore/ # 密钥生命周期管理
│ └── src/
│ ├── keystore.rs # 密钥 CRUD + 状态机
│ ├── policy.rs # 加密周期策略
│ ├── threat.rs # 自适应威胁情报
│ ├── storage.rs # 基于文件的密钥存储
│ ├── audit.rs # 完整性链审计日志
│ └── types.rs # 密钥类型和状态
├── citadel-api/ # HTTP 服务器
│ └── src/
│ ├── main.rs # API 路由、认证、速率限制
│ └── dashboard.html # 实时安全仪表板
├── citadel_example.py # Python 集成示例
├── Backup-Citadel.ps1 # 备份/恢复工具
├── docker-compose.yml # 开发部署
├── docker-compose-production.yml # 生产环境(带 TLS)
├── SPEC.md # 线格式规范
├── THREAT_MODEL.md # 安全目标和攻击者模型
├── COMPLIANCE_MATRIX.md # NIST 800-57 控制映射
└── CITADEL_OVERVIEW.md # 商业概述
本项目采用双重许可:
如果您在商业环境中使用此软件,或不想遵守 AGPL 条款,则必须获得商业许可证。
商业条款请参见 COMMERCIAL_LICENSE.md。
AGPL 全文在 AGPL-3.0.txt 和 COPYING 中提供。
联系方式:[email protected]
Andre Cordero — [email protected]
| 端点 | 方法 | 作用域 | 描述 |
|---|
/health | GET | — | 健康检查 |
/api/status | GET | read | 威胁等级、密钥数量 |
/api/metrics | GET | read | 安全指标 |
/api/keys | GET | read | 列出所有密钥 |
/api/keys | POST | manage | 生成新密钥 |
/api/keys/:id | GET | read | 获取密钥详情 |
/api/keys/:id/activate | POST | manage | 激活待处理密钥 |
/api/keys/:id/rotate | POST | manage | 轮换密钥(新版本) |
/api/keys/:id/revoke | POST | manage | 永久撤销密钥 |
/api/keys/:id/destroy | POST | manage | 销毁密钥材料 |
/api/keys/:id/encrypt | POST | encrypt | 加密数据 |
/api/decrypt | POST | encrypt | 解密数据 |
/api/threat | GET | read | 威胁情报详情 |
/api/policies | GET | read | 活跃密钥策略 |
/api/auth/whoami | GET | read | 当前 API 密钥信息 |
/api/auth/keys | GET | admin | 列出 API 密钥 |
/api/auth/keys | POST | admin | 创建 API 密钥 |
/api/auth/keys/:id | DELETE | admin | 撤销 API 密钥 |
| 以上所有权限 + 管理 API 密钥 |
| 等级 | 触发条件 | 响应 |
|---|
| LOW | 正常操作 | 标准加密周期 |
| GUARDED | 轻微异常 | 略微收紧的轮换 |
| ELEVATED | 可疑模式 | 压缩的轮换计划 |
| HIGH | 活跃威胁指标 | 强制轮换,降低使用限制 |
| CRITICAL | 正在遭受攻击 | 最大限制 |
| 算法 |
|---|
| 标准 |
|---|
| 密钥封装(经典) | X25519 ECDH | RFC 7748 |
| 密钥封装(后量子) | ML-KEM-768 | FIPS 203 |
| 数据加密 | AES-256-GCM | NIST SP 800-38D |
| 密钥派生 | HKDF-SHA256 | NIST SP 800-56C |
| 文档 | 受众 |
|---|
| SPEC.md | 线格式规范 |
| THREAT_MODEL.md | 安全目标和假设 |
| COMPLIANCE_MATRIX.md | NIST 800-57 合规性映射 |
| CITADEL_OVERVIEW.md | 商业定位 |
| SECURITY.md | 漏洞报告 |
| API_FREEZE.md | API 稳定性保证 |
| DEPLOYMENT.md | 生产部署指南 |
| QUICKSTART.md | 入门指南 |