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-сервер делает эти алгоритмы доступными для ИИ-агентов для исследований, разработки и интеграции.

Функции

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

-
security - not tested
A
license - permissive license
-
quality - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/scottdhughes/post-quantum-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server