11 KiB
Постквантовые замены Monero-примитивов
Версия: 1.0 draft Цель: для каждого ключевого Monero-примитива — конкретная PQ-замена с обоснованием выбора и known-tradeoffs.
Сводная таблица
| Monero (классический) | PQ-замена в Монеро-Монтане | Источник | Готовность |
|---|---|---|---|
| CLSAG ring signature (Ed25519) | Lattice ring signature (MatRiCT+ или новейшая) | Esgin-Steinfeld-Sun 2019, MatRiCT+ 2022 | Research, не production |
| Stealth addresses (curve25519 DH) | PQ stealth via ML-KEM-768 KEM | NIST FIPS 203 | Готов, нужна формализация derivation |
| Pedersen commitment + Bulletproofs (SECP) | Lattice commitment + Lattice range proof | Esgin-Nguyen-Seiler 2020, Lyubashevsky-Nguyen-Plançon 2022 | Research, тяжёлая |
| Triptych anonymity (next-gen) | Lattice-based аналог | Не существует production-ready | TBD |
| EdDSA (transaction signatures) | ML-DSA-65 (FIPS 204) | NIST 2024 | Production-ready |
| SHA-3 (some hashes) | SHA-256 (consistent с TimeChain) | NIST FIPS 180-4 | Production-ready |
1. Ring Signature: CLSAG → Lattice Ring Signature
Что делает CLSAG в Monero
Подписант доказывает что он один из K=11 потенциальных подписантов из anonymity set без раскрытия конкретного. Использует Ed25519 + Schnorr-подобную конструкцию + linkability tag для предотвращения двойного подписания.
Почему нужна замена
Ed25519 базируется на эллиптической кривой (curve25519). Алгоритм Шора ломает дискретный логарифм за полиномиальное время → ring signature становится тривиально проследимой при появлении достаточно мощного квантового компьютера.
MatRiCT+ как кандидат
Esgin et al. (2022) предложили improved version их 2019-й работы. Параметры:
- Категория безопасности: NIST L3 (≥192 бит классических, ≥128 квантовых).
- Размер подписи: ~5–20 КБ (в зависимости от K). Bigger чем Monero CLSAG ~0.5 КБ, но в пределах разумного.
- Время подписания: ~100–500 мс на современном CPU.
- Время верификации: ~50–200 мс.
Альтернативы
- Mubarak-Shen 2024 и другие более поздние lattice ring signatures — могут быть лучше по размеру, но менее проверены.
- One-out-of-many SNARK — теоретически возможно, но требует trusted setup или post-quantum SNARK с большим overhead.
Решение
Использовать MatRiCT+ как baseline, мониторить новые публикации каждые 6 месяцев. Если появится production-grade implementation с лучшими параметрами — мигрировать через MIP в 12 Управление.
Открытые вопросы
- Готовая audited implementation на Rust? Нет. Нужен либо port from C++ research code, либо самостоятельная реализация. Это значимый риск (см. F-01 в Internal Audit).
- Совместимость с lightweight clients (мобильные кошельки)? Требует оптимизации.
2. Stealth Addresses: curve25519 DH → ML-KEM-768
Что делают stealth addresses в Monero
Получатель публикует одну пару ключей (view, spend). Отправитель генерирует one-time public key для конкретной транзакции через DH-протокол:
r = random scalar
R = r·G (опубликовано в transaction)
P = Hash(r·V)·G + S (target one-time address)
Получатель сканирует транзакции, проверяет принадлежность через свой view-secret-key.
PQ адаптация через ML-KEM-768
Заменяем DH на key encapsulation:
(view_pk, view_sk) ← ML-KEM-768 keygen()
(spend_pk, spend_sk) ← ML-DSA-65 keygen()
Sender:
(ct, K) ← ML-KEM-768 encapsulate(view_pk)
one_time_addr = spend_pk + Hash(K)·G_PQ # G_PQ — generator в lattice space
Publish (one_time_addr, ct) on chain.
Recipient (scan):
K' ← ML-KEM-768 decapsulate(view_sk, ct)
expected = spend_pk + Hash(K')·G_PQ
if expected == one_time_addr: this transaction is mine.
Параметры
- ML-KEM-768 ciphertext: 1088 байт.
- ML-KEM-768 public key: 1184 байт.
- Размер one-time-address packet: ~1.5 КБ vs ~64 байт классический Monero.
Открытые вопросы
- Корректность derivation
spend_pk + Hash(K)·G_PQв lattice space — нужна формальная проверка что this preserves ML-DSA-65 EUF-CMA. - Sub-address scheme (Monero supports multiple stealth addresses from one base) — нужна PQ-адаптация.
3. Range Proofs: Bulletproofs → Lattice Range Proofs
Что делают Bulletproofs в Monero
Доказательство 0 ≤ amount < 2^64 без раскрытия amount. Использует Pedersen commitments + inner-product argument на эллиптической кривой.
Параметры Monero (post-2018):
- Размер: ~675 байт для одного output.
- Время верификации: ~5 мс.
PQ замены
3.1 Esgin-Nguyen-Seiler 2020
Lattice-based exact proofs через amortized SIS protocol.
- Размер: ~5–15 КБ за range proof.
- Время верификации: ~50–100 мс.
3.2 Lyubashevsky-Nguyen-Plançon 2022
Improvement предыдущих lattice proofs.
- Размер: ~3–10 КБ.
- Время верификации: ~30–80 мс.
3.3 SNARK-based PQ (e.g. STARK)
STARKs пост-квантовы по построению (hash-based).
- Размер: ~50–200 КБ (большой!).
- Время верификации: ~5–20 мс (очень быстро благодаря logarithmic).
- Trusted setup: НЕ нужен (это плюс).
Решение
Lyubashevsky-Nguyen-Plançon как baseline. STARKs как fallback если lattice не reach acceptable size.
Trade-off
PQ range proofs значительно тяжелее Bulletproofs:
- Размер: 3–10× больше.
- Verifier time: 6–20× больше.
Это означает что throughput приватного слоя меньше public Montana. Это сознательное решение — приватность стоит производительности.
4. Подписи: Ed25519 → ML-DSA-65
Уже решено в основной спецификации Монтаны. ML-DSA-65 (FIPS 204) — production-ready.
| Параметр | Ed25519 | ML-DSA-65 |
|---|---|---|
| Public key | 32 байт | 1952 байт |
| Подпись | 64 байт | 3309 байт |
| Уровень безопасности | 128 бит классических, 0 квантовых | 192 классических, 128 квантовых |
5. Хеш-функции
Унификация: SHA-256 везде где это разумно. Monero использует Keccak; Montana использует SHA-256 (соответствует FIPS 180-4 и используется в VDF). При интеграции на boundary — convertor.
6. Сводный анализ trade-off
Размер транзакции:
Public Monero: ~2–3 КБ
Public Montana: ~5 КБ
Монеро-Монтана: ~50–100 КБ (10–20× public Montana)
Время верификации одной транзакции:
Public Monero: ~10 мс
Public Montana: ~5 мс
Монеро-Монтана: ~100–500 мс (20–100× public Montana)
Throughput транзакций в окне τ₁=60с:
Public Monero: ~10⁴+ tx/блок
Public Montana: ~10⁴+ tx/окно
Монеро-Монтана: ~100 tx/окно (consensus bottleneck — verification time)
Это значит: приватный слой имеет существенно меньшую пропускную способность чем публичный. Это honest trade-off — приватность дорогая.
7. Открытые направления исследований
- Bench MatRiCT+ vs newer schemes — какая лучше для Монтаны.
- Реальная implementation хотя бы reference в Rust (нет готовых сейчас).
- Audited cryptographic library с PQ ring sigs (нет в open-source проектах).
- Optimization range proofs: targeting <5 КБ.
- Compatibility с mobile/lightweight clients.
8. Связанные документы
- Архитектура — где эти примитивы используются.
- 02 Криптография — базовые PQ-примитивы Монтаны.
- 09 Внешний аудит — F-01 single-implementation risk применим к этим примитивам тоже.
- Вызов Монеро-сообществу — приглашение к рецензии этих choices.
9. Источники
- Esgin, M. F., Steinfeld, R., Sun, S.-F., et al. (2019). MatRiCT. CCS.
- Esgin, M. F., et al. (2022). MatRiCT+. (newer revision).
- Esgin, M. F., Nguyen, N. K., Seiler, G. (2020). Practical Exact Proofs from Lattices. ASIACRYPT.
- Lyubashevsky, V., Nguyen, N. K., Plançon, M. (2022). Lattice-Based Zero-Knowledge Proofs and Applications. EUROCRYPT.
- Bünz, B., et al. (2018). Bulletproofs. IEEE S&P. (для контекста сравнения)
- Goodell, B., Noether, S., Blue, A. (2020). CLSAG. (для контекста сравнения)
- Ben-Sasson, E., et al. (2018). Scalable, transparent, and post-quantum secure computational integrity (STARK).