Post-Quantum Cryptography MCP Server
MCP-сервер постквантовой криптографии
Только для исследований и прототипирования. Этот сервер использует liboqs, который явно не рекомендуется для использования в промышленной среде или для защиты конфиденциальных данных. При использовании режима
store_as(рекомендуется) секретные ключи удаляются из вывода инструментов и хранятся в сессионной связке ключей. Безstore_asсекретные ключи и общие секреты отображаются в выводе инструментов, что может привести к их попаданию в контекст модели, логи клиента или транскрипты. УстановитеPQC_REQUIRE_KEY_HANDLES=1для принудительного использования режима только с дескрипторами для всех операций с секретными ключами. Подходит для экспериментов, обучения и тестирования совместимости.
MCP-сервер (Model Context Protocol), предоставляющий постквантовые криптографические операции с использованием liboqs от Open Quantum Safe. Позволяет ИИ-ассистентам, таким как Claude, выполнять устойчивые к квантовым вычислениям криптографические операции, включая генерацию ключей, шифрование, подписание и проверку.
Зачем нужна постквантовая криптография?
Существующие криптографические системы (RSA, ECC, ECDSA) будут взломаны квантовыми компьютерами с помощью алгоритма Шора. NIST стандартизировал новые устойчивые к квантовым вычислениям алгоритмы:
Стандарт | Алгоритм | Тип | Статус |
FIPS 203 | ML-KEM (ранее CRYSTALS-Kyber) | Инкапсуляция ключей | Финализирован 2024 |
FIPS 204 | ML-DSA (ранее CRYSTALS-Dilithium) | Цифровая подпись | Финализирован 2024 |
FIPS 205 | SLH-DSA (ранее SPHINCS+) | Хэш-подпись | Финализирован 2024 |
Этот MCP-сервер делает эти алгоритмы доступными для ИИ-агентов для исследований, разработки и интеграции.
Related MCP server: hive-mcp-sigr
Функции
Механизмы инкапсуляции ключей (KEM), доступные через liboqs: 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 — использует комбинатор KEM из черновика LAMPS composite ML-KEM (id-MLKEM768-X25519-SHA3-256). sha3-256 в названии набора относится к хэшу комбинатора KEM; вывод ключа HKDF использует SHA-256 (через cryptography HKDF). Уровень запечатанного конверта — это собственный протокол данного проекта, построенный поверх этого комбинатора.
Это конструкция анонимного запечатанного ящика, обеспечивающая гибридную конфиденциальность с целостностью шифротекста. Она не обладает свойством прямой секретности (forward secrecy) при компрометации ключа получателя и не является аутентифицированной отправителем.
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 полного заголовка. Детерминированный одноразовый номер (nonce) (не передается в конверте).
// 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 и гибридную пару ключей получателя, затем отправь аутентифицированное зашифрованное сообщение"
"Открой этот аутентифицированный конверт и проверь, что он пришел от ожидаемого отправителя"
"Запечатай сообщение для Боба и подпиши его моим ключом ML-DSA, затем пусть Боб откроет его, используя мой отпечаток"
Дескрипторы ключей (скрытие секретов)
Режим по выбору, при котором секретные ключи хранятся локально в процессе и никогда не появляются в выводе инструментов. Дескрипторы являются глобальными для процесса и теряются при перезапуске сервера.
Генерация с дескрипторами
// 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 и транскрипту аутентификации. Это обеспечивает истинное разделение режимов — шифротекст, созданный в одном режиме, не может быть расшифрован в другом, блокируя атаки понижения уровня (downgrade attacks) на уровне AEAD. AAD использует фрейминг с префиксом длины (самоограничивающийся) в v3. Аутентифицированные конверты включают подписанное поле timestamp в каноническом транскрипте; при проверке/открытии сервер проверяет свежесть (по умолчанию: 24 часа, настраивается через max_age_seconds). Допуск на расхождение часов составляет 5 минут.
Защита от повторов (Replay Protection)
Сервер поддерживает кэш дайджестов подписей (SHA3-256 байтов подписи конверта) с TTL. pqc_hybrid_auth_verify выполняет проверку на повтор только для чтения. pqc_hybrid_auth_open выполняет проверку перед дешифрованием и пометку после успеха. Кэш сохраняется в ~/.pqc/state/replay-cache.json и переживает перезапуски сервера. Максимум 50 000 записей с вытеснением самых старых.
Проверка размера конверта
Все конверты проверяются перед любой криптографической обработкой: максимум 1 МБ на поле base64 (ciphertext, pqc_ciphertext, signature, sender_public_key, x25519_ephemeral_public_key), максимум 50 полей всего. Предотвращает «бомбы памяти» и исчерпание ресурсов.
Политика безопасности сервера
Установите PQC_REQUIRE_KEY_HANDLES=1 для принудительного использования режима только с дескрипторами: сервер отклоняет любой вызов инструмента, передающий необработанные секретные ключи, принуждая использовать store_as/key_store_name для всех операций с секретными ключами (генерация, подпись, декапсуляция и операции с гибридными конвертами). Это серверная проверка, которую нельзя обойти некорректно работающим агентом.
Обратная совместимость v1/v2
Конверты v1 (pqc-mcp-v1) принимаются при открытии/проверке для обратной совместимости, но вызывают громкое предупреждение. В конвертах v1 отсутствуют подписанные метки времени, поэтому они пропускают проверки свежести и не обеспечивают защиту от повторов. Конверты v2 (pqc-mcp-v2) принимаются, но им не хватает привязки к режиму; в ответ включается предупре
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