Post-Quantum Cryptography MCP Server
后量子密码学 MCP 服务器
仅供研究和原型设计使用。 本服务器使用 liboqs,明确不建议用于生产环境或保护敏感数据。使用
store_as模式(推荐)时,私钥会从工具输出中脱敏,并保存在会话范围的密钥环中。如果不使用store_as,私钥和共享密钥会出现在工具输出中,这可能会进入模型上下文、客户端日志或转录内容。设置PQC_REQUIRE_KEY_HANDLES=1可强制所有私钥操作仅使用句柄模式。适用于实验、教育和互操作性测试。
A 模型上下文协议 (MCP) 服务器,提供使用 Open Quantum Safe 的 liboqs 的后量子密码操作。使 Claude 等 AI 助手能够执行抗量子密码操作,包括密钥生成、加密、签名和验证。
为什么需要后量子密码学?
当前的密码系统(RSA、ECC、ECDSA)将被运行 Shor 算法的量子计算机破解。NIST 已经标准化了新的抗量子算法:
标准 | 算法 | 类型 | 状态 |
FIPS 203 | ML-KEM (原 CRYSTALS-Kyber) | 密钥封装 | 2024 年定稿 |
FIPS 204 | ML-DSA (原 CRYSTALS-Dilithium) | 数字签名 | 2024 年定稿 |
FIPS 205 | SLH-DSA (原 SPHINCS+) | 基于哈希的签名 | 2024 年定稿 |
此 MCP 服务器使 AI 代理能够访问这些算法,用于研究、开发和集成。
Related MCP server: hive-mcp-sigr
功能特性
通过 liboqs 提供密钥封装机制 (KEMs):ML-KEM, FrodoKEM, HQC, BIKE, Classic McEliece
通过 liboqs 提供签名算法:ML-DSA, Falcon, SLH-DSA, MAYO, CROSS, UOV
完整的 MCP 集成:适用于 Claude Desktop、Claude Code、Cursor 以及任何 MCP 客户端
支持 NIST 标准化算法:实现了 FIPS 203、204 和 205 算法
安全性分析:比较经典与量子安全性级别
快速入门
先决条件
安装
1. 安装 liboqs
macOS (使用共享库的 Homebrew):
# Homebrew only provides static library, build from source for shared:
git clone --depth 1 --branch 0.15.0 https://github.com/open-quantum-safe/liboqs.git
cd liboqs && mkdir build && cd build
cmake -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=$HOME/.local ..
make -j4 && make installUbuntu/Debian:
sudo apt-get install liboqs-dev替代方案:使用自动执行上述操作的捆绑安装脚本:
bash scripts/install-liboqs.sh2. 克隆并安装
git clone https://github.com/scottdhughes/post-quantum-mcp.git
cd post-quantum-mcp
# Install all dependencies (creates .venv automatically)
uv sync --all-extras3. 配置 Claude Code / Claude Desktop
添加到您的 MCP 配置中:
Claude Code (~/.claude.json):
{
"mcpServers": {
"pqc": {
"type": "stdio",
"command": "/path/to/post-quantum-mcp/run.sh",
"args": [],
"env": {}
}
}
}Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"pqc": {
"command": "/path/to/post-quantum-mcp/run.sh"
}
}
}该服务器也可以通过 python -m pqc_mcp_server 直接运行。
可用工具
pqc_list_algorithms
列出所有可用的后量子算法。
Input: { "type": "kem" | "sig" | "all" }
Output: List of available algorithms with NIST standard mappingspqc_algorithm_info
获取有关特定算法的详细信息。
Input: { "algorithm": "ML-KEM-768" }
Output: Key sizes, security level, performance characteristicspqc_generate_keypair
生成抗量子密钥对。
Input: { "algorithm": "ML-DSA-65" }
Output: Base64-encoded public and secret keyspqc_encapsulate
执行密钥封装(创建共享密钥)。
Input: { "algorithm": "ML-KEM-768", "public_key": "<base64>" }
Output: Ciphertext and shared secretpqc_decapsulate
从密文中恢复共享密钥。
Input: { "algorithm": "ML-KEM-768", "secret_key": "<base64>", "ciphertext": "<base64>" }
Output: Shared secretpqc_sign
使用后量子签名对消息进行签名。
Input: { "algorithm": "ML-DSA-65", "secret_key": "<base64>", "message": "Hello, quantum world!" }
Output: Base64-encoded signaturepqc_verify
验证后量子签名。
Input: { "algorithm": "ML-DSA-65", "public_key": "<base64>", "message": "...", "signature": "<base64>" }
Output: { "valid": true/false }pqc_hash
使用抗量子哈希函数对消息进行哈希处理。
Input: { "message": "data", "algorithm": "SHA3-256" | "SHA3-512" | "SHAKE128" | "SHAKE256" }
Output: Digest in hex and base64pqc_security_analysis
分析算法的安全性属性。
Input: { "algorithm": "ML-KEM-768" }
Output: NIST level, classical/quantum security equivalents, Grover/Shor resistance混合密钥交换 (X25519 + ML-KEM-768)
套件:mlkem768-x25519-sha3-256 — 借用了 LAMPS 复合 ML-KEM 草案 (id-MLKEM768-X25519-SHA3-256) 中的 KEM 组合器。套件名称中的 sha3-256 指的是 KEM 组合器哈希;HKDF 密钥派生使用 SHA-256(通过 cryptography HKDF)。密封信封层是本项目构建在该组合器之上的自有协议。
这是一种匿名密封盒结构,提供具有密文完整性的混合机密性。它不具备针对接收方密钥泄露的前向安全性,且不提供发送方身份验证。
pqc_hybrid_keygen
生成混合密钥对包。
推荐:使用 store_as(私钥已脱敏)
// Input
{"store_as": "alice"}
// Output — no secret keys
{
"suite": "mlkem768-x25519-sha3-256",
"handle": "alice",
"classical": {"algorithm": "X25519", "public_key": "DeRN3xLbEglMdXKO7P98cAvc...", "fingerprint": "a1b2c3d4..."},
"pqc": {"algorithm": "ML-KEM-768", "public_key": "gDsL8UgEVcMeJgUOQgSlAotx...", "fingerprint": "e5f6a7b8..."}
}不使用 store_as(返回原始密钥 — 不推荐):
// Input
{}
// Output — secret keys exposed in tool output
{
"suite": "mlkem768-x25519-sha3-256",
"classical": {
"algorithm": "X25519",
"public_key": "DeRN3xLbEglMdXKO7P98cAvc...",
"secret_key": "YEYD9j5c2hpTei0ferXWbAFb..."
},
"pqc": {
"algorithm": "ML-KEM-768",
"public_key": "gDsL8UgEVcMeJgUOQgSlAotx...",
"secret_key": "MQB2U0EzNGmloLuiTYG3BTcr..."
}
}pqc_hybrid_encap / pqc_hybrid_decap
构建块密钥封装。返回通过套件的 SHA3-256 组合器派生的组合共享密钥。
pqc_hybrid_seal / pqc_hybrid_open
使用混合封装 + AES-256-GCM 加密/解密明文。全标头 AAD 绑定。确定性随机数(不在信封中传输)。
// Seal input
{
"plaintext": "Hello, quantum world!",
"recipient_classical_public_key": "<base64 X25519 public key>",
"recipient_pqc_public_key": "<base64 ML-KEM-768 public key>"
}
// Seal output
{
"envelope": {
"version": "pqc-mcp-v3",
"mode": "anon-seal",
"suite": "mlkem768-x25519-sha3-256",
"x25519_ephemeral_public_key": "6+b1Y8AkgEycKL5wL2cIeSMv...",
"pqc_ciphertext": "DF+PYy4zx+OmnW8wLD3EL+4M...",
"ciphertext": "NnEap2fDq5+xTCwvHdKfy5Xj..."
}
}
// Open input
{
"envelope": { "...envelope from seal..." },
"classical_secret_key": "<base64 X25519 secret key>",
"pqc_secret_key": "<base64 ML-KEM-768 secret key>"
}
// Open output
{
"suite": "mlkem768-x25519-sha3-256",
"plaintext": "Hello, quantum world!",
"plaintext_base64": "SGVsbG8sIHF1YW50dW0gd29ybGQh"
}混合提示词示例
"生成一个混合密钥对并为我密封一条消息"
"执行混合密钥交换并向我展示共享密钥"
"使用混合 PQC 加密 '机密数据' 然后解密它"
已验证的混合信封
使用 ML-DSA-65 (FIPS 204) 签名将发送方身份验证添加到混合机密层。发送方对覆盖整个信封的规范二进制转录进行签名。接收方在解密前验证发送方身份。
这是一种发送方验证的密封信封结构。它仍然不具备针对后续接收方长期密钥泄露的前向安全性。密封信封层是本项目构建的自有协议。
pqc_hybrid_auth_seal
加密 + 签名。需要发送方 ML-DSA-65 签名密钥 + 接收方混合密钥。
推荐:使用密钥句柄
// Input
{
"plaintext": "Authenticated message",
"recipient_key_store_name": "bob",
"sender_key_store_name": "alice-signing"
}
// Output
{
"envelope": {
"version": "pqc-mcp-v3",
"mode": "auth-seal",
"suite": "mlkem768-x25519-sha3-256",
"sender_signature_algorithm": "ML-DSA-65",
"sender_public_key": "0ji6POTItnZUX8rELwVwWSOV...",
"sender_key_fingerprint": "0f617ece2f1d04c0...",
"recipient_classical_key_fingerprint": "c1deade4a5300a9a...",
"recipient_pqc_key_fingerprint": "bb0e084213d6ac74...",
"x25519_ephemeral_public_key": "5LEikNANeJNhZSiq...",
"pqc_ciphertext": "ybgWc3ruG3JwXmr4...",
"ciphertext": "6OYdADdh0eH/LviD...",
"signature": "BOniPALs1kfhWcRh..."
}
}替代方案:使用原始密钥(不推荐)
// Input
{
"plaintext": "Authenticated message",
"recipient_classical_public_key": "<base64 X25519 public key>",
"recipient_pqc_public_key": "<base64 ML-KEM-768 public key>",
"sender_secret_key": "<base64 ML-DSA-65 secret key>",
"sender_public_key": "<base64 ML-DSA-65 public key>"
}pqc_hybrid_auth_open
验证发送方 + 解密。需要 expected_sender_public_key 或 expected_sender_fingerprint。在解密前验证签名 — 身份验证失败与解密失败是不同的。
// Open with expected sender public key
{
"envelope": { "...envelope from auth_seal..." },
"classical_secret_key": "<base64 X25519 secret key>",
"pqc_secret_key": "<base64 ML-KEM-768 secret key>",
"expected_sender_public_key": "<base64 ML-DSA-65 public key>"
}
// Or open with expected sender fingerprint
{
"envelope": { "...envelope from auth_seal..." },
"classical_secret_key": "...",
"pqc_secret_key": "...",
"expected_sender_fingerprint": "0f617ece2f1d04c0481aa0fe..."
}
// Output
{
"suite": "mlkem768-x25519-sha3-256",
"plaintext": "Authenticated message",
"plaintext_base64": "QXV0aGVudGljYXRlZCBtZXNzYWdl",
"sender_key_fingerprint": "0f617ece2f1d04c0481aa0fe...",
"sender_signature_algorithm": "ML-DSA-65",
"authenticated": true
}pqc_hybrid_auth_verify
在不解密的情况下验证已验证信封上的发送方签名。无需私钥。检查发送方绑定、指纹一致性、ML-DSA-65 签名和时间戳新鲜度。
// Input
{
"envelope": { "...envelope from auth_seal..." },
"expected_sender_fingerprint": "0f617ece2f1d04c0..."
}
// Output
{
"verified": true,
"sender_key_fingerprint": "0f617ece2f1d04c0...",
"sender_signature_algorithm": "ML-DSA-65",
"version": "pqc-mcp-v3",
"mode": "auth-seal",
"replay_seen": false,
"timestamp": "1711929600"
}pqc_envelope_inspect
在不解密的情况下检查信封元数据。无需私钥。返回版本、套件、指纹和字段大小。
// Input
{"envelope": { "...any sealed or authenticated envelope..." }}
// Output
{
"version": "pqc-mcp-v3",
"mode": "auth-seal",
"suite": "mlkem768-x25519-sha3-256",
"authenticated": true,
"sender_key_fingerprint": "0f617ece2f1d04c0...",
"ciphertext_size": 1234,
"plaintext_size_approx": 1218,
"pqc_ciphertext_size": 1088,
"signature_size": 3309
}pqc_fingerprint
计算公钥的 SHA3-256 指纹。返回小写十六进制。
// Input
{"public_key": "<base64-encoded public key>"}
// Output
{"fingerprint": "a1b2c3d4e5f6...", "algorithm": "SHA3-256"}pqc_benchmark
基准测试 PQC 算法:计时密钥生成、封装/签名、解封装/验证以及密钥/密文/签名大小。
// Input
{"algorithm": "ML-KEM-768", "iterations": 10}
// Output — timing and size measurements密钥生成流程
1. Sender: generate ML-DSA-65 signing keys via pqc_generate_keypair
2. Recipient: generate hybrid keys via pqc_hybrid_keygen
3. Exchange public keys out-of-band
4. Sender: pqc_hybrid_auth_seal with both key sets
5. Recipient: pqc_hybrid_auth_open with expected sender identity已验证提示词示例
"生成一个 ML-DSA-65 签名密钥对和一个混合接收方密钥对,然后发送一条已验证的加密消息"
"打开此已验证信封并验证它来自预期的发送方"
"将消息密封给 Bob 并用我的 ML-DSA 密钥签名,然后让 Bob 使用我的指纹打开它"
密钥句柄(私钥脱敏)
选择性模式,私钥存储在进程本地,绝不会出现在工具输出中。句柄是进程全局的,在服务器重启时丢失。
使用句柄生成
// pqc_hybrid_keygen with store_as
{"store_as": "alice"}
// Output — no secret keys
{
"suite": "mlkem768-x25519-sha3-256",
"handle": "alice",
"classical": {"algorithm": "X25519", "public_key": "...", "fingerprint": "..."},
"pqc": {"algorithm": "ML-KEM-768", "public_key": "...", "fingerprint": "..."}
}在下游工具中使用句柄
// pqc_hybrid_seal with store name instead of raw keys
{
"plaintext": "Hello via handle!",
"recipient_key_store_name": "alice"
}
// pqc_hybrid_auth_seal with two store names
{
"plaintext": "Authenticated via handles",
"recipient_key_store_name": "alice",
"sender_key_store_name": "bob-signing"
}通用 PQC 工具(pqc_sign、pqc_verify、pqc_encapsulate、pqc_decapsulate)也接受 key_store_name。
为同一角色同时提供存储名称和原始密钥是错误的。
密钥存储管理
pqc_key_store_save:按名称保存密钥生成输出,以便于引用。会话范围,无持久化。pqc_key_store_load:按名称加载存储的密钥。仅返回句柄条目的公共材料。pqc_key_store_list:列出所有带有元数据(名称、类型、指纹)的存储密钥。不显示私钥材料。pqc_key_store_delete:按名称删除存储的密钥。
安全特性
v3 信封协议
v3 信封是模式绑定的:每个信封都携带一个显式的 mode 字段(anon-seal 或 auth-seal),该字段绑定到 HKDF 信息、AAD 和身份验证转录中。这提供了真正的跨模式隔离 — 一种模式生成的密文无法被另一种模式解密,从而在 AEAD 层阻止了身份验证剥离降级攻击。AAD 在 v3 中使用长度前缀框架(自定界)。已验证信封在规范转录中包含一个已签名的 timestamp 字段;在验证/打开时,服务器会检查新鲜度(默认:24 小时,可通过 max_age_seconds 配置)。时钟偏差容差为 5 分钟。
重放保护
服务器维护一个带有 TTL 的签名摘要缓存(信封签名字节的 SHA3-256)。pqc_hybrid_auth_verify 执行只读重放检查。pqc_hybrid_auth_open 执行解密前检查和成功后标记。缓存持久化到 ~/.pqc/state/replay-cache.json 并在服务器重启后保留。最多 50,000 条目,采用先进先出驱逐策略。
信封大小验证
所有信封在进行任何密码处理前都会经过验证:每个 base64 字段(ciphertext、pqc_ciphertext、signature、sender_public_key、x25519_ephemeral_public_key)最大 1MB,总共最多 50 个字段。防止内存炸弹和资源耗尽。
服务器安全策略
设置 PQC_REQUIRE_KEY_HANDLES=1 以强制执行仅句柄模式:服务器拒绝任何传递原始私钥的工具调用,强制所有私钥操作(密钥生成、签名、解封装和混合信封操作)使用 store_as/key_store_name。这是一个无法被行为不端的代理绕过的服务器端检查。
v1/v2 向后兼容性
v1 信封 (pqc-mcp-v1) 在打开/验证时被接受以实现向后兼容,但会产生明显的警告。v1 信封缺少已签名的时间戳,因此跳过新鲜度检查且不提供重放保护。v2 信封 (pqc-mcp-v2) 被接受但缺少模式绑定;响应中包含弃用警告。
中继传输
该项目包含一个用于跨机器 A2A 消息传递的 Cloudflare Worker 中继。
在线: https://quantum-seal-relay.novoamorx1.workers.dev
中继是一个不透明的信封邮箱 — 它存储和转发 JSON 数据块,而不执行密码操作或访问私钥。
端点 | 方法 | 用途 |
| POST | 将信封存入收件人邮箱 |
| GET | 获取待处理信封 |
| DELETE | 确认收到 |
| PUT | 配置发送方白名单 |
限制: 最大 50KB 信封,每个邮箱 1000 条消息,24 小时 TTL,速率限制(每个 IP 每分钟 60 次 POST,120 次 GET)。
安全性: 中继永远看不到明文。端到端机密性、完整性和发送方身份验证在客户端强制执行。请参阅 deploy/relay/RELAY-SPEC.md 获取完整的传输协议。
支持的算法
注意: 旧算法名称(Kyber, Dilithium, SPHINCS+)被接受为别名,以兼容旧版本的 liboqs。
密钥封装机制 (KEMs)
算法 | NIST 级别 | 公钥 | 密文 | 共享密钥 |
ML-KEM-512 | 1 | 800 B | 768 B | 32 B |
ML-KEM-768 | 3 | 1,184 B | 1,088 B | 32 B |
ML-KEM-1024 | 5 | 1,568 B | 1,568 B | 32 B |
FrodoKEM-640 | 1 | 9,616 B | 9,720 B | 16 B |
HQC-128 | 1 | 2,249 B | 4,481 B | 64 B |
数字签名
算法 | NIST 级别 | 公钥 | 签名 | 备注 |
ML-DSA-44 | 2 | 1,312 B | 2,420 B | 平衡 |
ML-DSA-65 | 3 | 1,952 B | 3,309 B | 推荐 |
ML-DSA-87 | 5 | 2,592 B | 4,627 B | 高安全性 |
Falcon-512 | 1 | 897 B | 653 B | 最小签名 |
Falcon-1024 | 5 | 1,793 |
This server cannot be deployed
Maintenance
Related MCP Connectors
QuantumOracle — 18 post-quantum crypto tools: Kyber, Dilithium, hybrid schemes, migration.
Production-grade cryptography toolkit with 31 MCP tools for classical, PQC, and KMS workflows.
QRNG-seeded random bytes, seeds, and ML-KEM-768 keys with signed provenance receipts.
LLM Orchestration Agent (Cryptography)
Related MCP Servers
- AlicenseBqualityDmaintenanceDefense-grade cryptographic compliance and analysis tools for MCP, including FIPS 140-3 validation, CNSA 2.0 analysis, post-quantum readiness assessment, and classical cipher utilities.181MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to sign and verify actions with ML-DSA-65 digital signatures, providing tamper-proof receipts that can be verified offline without any secrets.MIT
- AlicenseNot gradedqualityBmaintenanceProvides tools to sign and verify post-quantum attestations of AI agent actions (mint, trajectory, coherence) using ML-DSA-65 signatures, with offline verification always free.MIT
- AlicenseAqualityCmaintenancePost-quantum readiness for AI coding agents: scans code for quantum-vulnerable cryptography (RSA/ECDH/ECDSA/DH) and returns NIST ML-KEM/ML-DSA/SLH-DSA (and hybrid) migration guidance, with fix verification and dependency checks. Content-based, advisory tools only; runs local (npx @quantakrypto/mcp) or as a hosted OAuth endpoint.1614Apache 2.0