Skip to main content
Glama
scottdhughes

Post-Quantum Cryptography MCP Server

by scottdhughes

MCP-сервер постквантовой криптографии

License: MIT Python 3.10+ liboqs 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

  • Анализ безопасности: Сравнение классических и квантовых уровней безопасности

Быстрый старт

Предварительные требования

  • Python 3.10+

  • Общая библиотека liboqs

  • uv (рекомендуется) или pip

Установка

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 install

Ubuntu/Debian:

sudo apt-get install liboqs-dev

Альтернатива: Используйте прилагаемый скрипт установки, который автоматизирует вышеуказанные действия:

bash scripts/install-liboqs.sh

2. Клонирование и установка

git clone https://github.com/scottdhughes/post-quantum-mcp.git
cd post-quantum-mcp

# Install all dependencies (creates .venv automatically)
uv sync --all-extras

3. Настройка 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 mappings

pqc_algorithm_info

Получение подробной информации о конкретном алгоритме.

Input: { "algorithm": "ML-KEM-768" }
Output: Key sizes, security level, performance characteristics

pqc_generate_keypair

Генерация устойчивой к квантовым вычислениям пары ключей.

Input: { "algorithm": "ML-DSA-65" }
Output: Base64-encoded public and secret keys

pqc_encapsulate

Выполнение инкапсуляции ключа (создание общего секрета).

Input: { "algorithm": "ML-KEM-768", "public_key": "<base64>" }
Output: Ciphertext and shared secret

pqc_decapsulate

Восстановление общего секрета из шифротекста.

Input: { "algorithm": "ML-KEM-768", "secret_key": "<base64>", "ciphertext": "<base64>" }
Output: Shared secret

pqc_sign

Подписание сообщения постквантовой подписью.

Input: { "algorithm": "ML-DSA-65", "secret_key": "<base64>", "message": "Hello, quantum world!" }
Output: Base64-encoded signature

pqc_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 base64

pqc_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) принимаются, но им не хватает привязки к режиму; в ответ включается предупре

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Defense-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.
    18
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides 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
  • A
    license
    A
    quality
    C
    maintenance
    Post-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.
    16
    14
    Apache 2.0