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