185 lines
14 KiB
Markdown
185 lines
14 KiB
Markdown
|
|
# Архитектура приватного финансового слоя Монеро-Монтана
|
|||
|
|
|
|||
|
|
**Версия:** 1.0 draft
|
|||
|
|
**Базовый источник:** Montana Protocol v35.25.0; Monero whitepaper (Saberhagen 2013) + RingCT (Noether 2015) + Bulletproofs (Bünz et al. 2018)
|
|||
|
|
|
|||
|
|
## 1. Цель
|
|||
|
|
|
|||
|
|
Дать пользователю Монтаны опт-ин режим **приватных** переводов TC (Junona) — приватность отправителя, получателя, суммы — без отказа от постквантовых примитивов сети.
|
|||
|
|
|
|||
|
|
## 2. Что такое «приватность» (формально)
|
|||
|
|
|
|||
|
|
Базируется на трёх независимых ortho-свойствах от Monero:
|
|||
|
|
|
|||
|
|
| Свойство | Смысл | Monero классический | Монтана PQ-эквивалент |
|
|||
|
|
|----------|-------|---------------------|------------------------|
|
|||
|
|
| **Sender privacy** | Невозможно установить какой из K возможных аккаунтов сделал перевод | Ring signatures (CLSAG, K=11) | Lattice ring signatures (см. [Постквантовые замены](Постквантовые-замены.md)) |
|
|||
|
|
| **Recipient privacy** | Получатель не виден на цепи; нет связи с его публичным адресом | Stealth addresses (one-time keys) | PQ stealth addresses через ML-KEM-768 + DH-style derivation |
|
|||
|
|
| **Amount privacy** | Сумма перевода скрыта; виден только zero-knowledge proof что сумма ≥ 0 и ≤ доступного баланса | Pedersen commitments + Bulletproofs | Lattice commitments + lattice-based range proofs |
|
|||
|
|
|
|||
|
|
## 3. Архитектурные слои Монеро-Монтана
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────────────────┐
|
|||
|
|
│ Прикладной слой (Anchor для приложений) │
|
|||
|
|
├─────────────────────────────────────────────────────┤
|
|||
|
|
│ Приватный слой Монеро-Монтана │
|
|||
|
|
│ - Опт-ин «private mode» на уровне аккаунта │
|
|||
|
|
│ - Lattice ring sigs / PQ stealth / PQ range proofs │
|
|||
|
|
├─────────────────────────────────────────────────────┤
|
|||
|
|
│ Public Account Chain (текущая Монтана v35.25.0) │
|
|||
|
|
│ - Прозрачные TC переводы, NodeChain, AccountChain │
|
|||
|
|
├─────────────────────────────────────────────────────┤
|
|||
|
|
│ TimeChain (VDF + Proof of Time) │
|
|||
|
|
│ - Каноническая упорядоченность по τ-окнам │
|
|||
|
|
│ - ВСЕГДА ПУБЛИЧНА (без приватности) │
|
|||
|
|
└─────────────────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**TimeChain не приватизируется.** Каноническое время и порядок окон — глобальный публичный ресурс. Приватность только на уровне содержимого транзакций аккаунта в опт-ин режиме.
|
|||
|
|
|
|||
|
|
## 4. Опт-ин модель
|
|||
|
|
|
|||
|
|
Каждый аккаунт может иметь два режима:
|
|||
|
|
|
|||
|
|
- **Public mode (default)** — текущее поведение Монтаны: прозрачные транзакции, видимый баланс, видимые отправитель/получатель/сумма. Это сохраняется без изменений.
|
|||
|
|
- **Private mode (opt-in)** — аккаунт включает приватный режим и с этого момента его транзакции уходят в Монеро-Монтана слой с приватностью.
|
|||
|
|
|
|||
|
|
Переход public→private — односторонний на уровне транзакции (баланс ушедший в private может вернуться публично только через специальную операцию reveal). Эта асимметрия защищает от смешения цепей и упрощает анализ безопасности.
|
|||
|
|
|
|||
|
|
## 5. Ключевые примитивы
|
|||
|
|
|
|||
|
|
### 5.1 Lattice Ring Signatures (sender privacy)
|
|||
|
|
|
|||
|
|
Заменяет Monero CLSAG. Подписант доказывает что он один из K=11 потенциальных подписантов (anonymity set) без раскрытия какой именно. Постквантовая реализация — research direction MatRiCT (Esgin-Steinfeld-Sun 2019), MatRiCT+ (2022), последующие лattice-based ring signatures.
|
|||
|
|
|
|||
|
|
**Параметры:**
|
|||
|
|
- Anonymity set K = 11 (как в Monero post-2022).
|
|||
|
|
- Размер подписи: пока в research-mode 5–20 КБ (vs 0.5 КБ в Monero CLSAG). Это значимый рост, нужна оптимизация.
|
|||
|
|
- Бит безопасности: NIST L3 (≥192).
|
|||
|
|
|
|||
|
|
**Открытый вопрос:** есть ли уже готовая, проверенная PQ ring signature schema с разумным размером? Текущее состояние research — mid-2020s, схемы существуют, но в production-grade аудите ни одна.
|
|||
|
|
|
|||
|
|
### 5.2 PQ Stealth Addresses (recipient privacy)
|
|||
|
|
|
|||
|
|
Заменяет Monero one-time addresses. При публикации публичного адреса получателя `R = Hash(view_key, spend_key)`, отправитель генерирует `r = random`, `R' = R + Hash(r·view_key)·G`, посылает на `R'` + `r·G` как nonce. Получатель сканирует все транзакции и проверяет `R = R' - Hash(view_key·r·G)·G`.
|
|||
|
|
|
|||
|
|
**PQ адаптация через ML-KEM-768:**
|
|||
|
|
- Получатель публикует view-public-key и spend-public-key (PQ).
|
|||
|
|
- Отправитель использует ML-KEM-768 encapsulation: получает (ciphertext, shared_secret).
|
|||
|
|
- One-time spend public = `spend_pk + Hash(shared_secret)·G_PQ` (где G_PQ — generator в lattice space).
|
|||
|
|
- Получатель decapsulates ciphertext → shared_secret → распознаёт что транзакция для него.
|
|||
|
|
|
|||
|
|
**Ограничение:** размер one-time-address пакета ~ 1.5 КБ vs ~ 64 байт в классическом Monero.
|
|||
|
|
|
|||
|
|
### 5.3 PQ Range Proofs (amount privacy)
|
|||
|
|
|
|||
|
|
Заменяет Bulletproofs. Доказательство что сумма перевода в диапазоне [0, 2^64) без раскрытия суммы.
|
|||
|
|
|
|||
|
|
**Lattice-based zk range proofs:**
|
|||
|
|
- Esgin-Nguyen-Seiler 2020 (lattice-based zk for SIS/LWE).
|
|||
|
|
- ZKBoo / ZKB++ family (post-quantum NIZK).
|
|||
|
|
|
|||
|
|
**Параметры:**
|
|||
|
|
- Размер доказательства: 5–50 КБ в текущих research-схемах (vs ~1 КБ в Bulletproofs).
|
|||
|
|
- Время верификации: 50–200 ms (vs 5 ms Bulletproofs).
|
|||
|
|
|
|||
|
|
**Ограничение:** значительно тяжелее классических Bulletproofs. Требует оптимизации либо принятия повышенной нагрузки.
|
|||
|
|
|
|||
|
|
## 6. Транзакционная модель
|
|||
|
|
|
|||
|
|
### 6.1 Структура private TC transfer
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
PrivateTransfer {
|
|||
|
|
ring_signature: LatticeRingSig, // sender privacy
|
|||
|
|
stealth_recipient: PQStealthAddress, // recipient privacy
|
|||
|
|
amount_commitment: LatticeCommitment, // amount privacy
|
|||
|
|
range_proof: PQRangeProof, // proof: 0 ≤ amount ≤ supply
|
|||
|
|
nullifier: SHA256(...), // prevent double-spend
|
|||
|
|
fee_public: TC, // комиссия публична
|
|||
|
|
τ_anchor: TimeChainPosition, // каноническая позиция
|
|||
|
|
signature: ML-DSA-65, // подпись по канону
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 6.2 Двойная трата защищена через nullifier
|
|||
|
|
|
|||
|
|
Каждый private input производит уникальный `nullifier` который публикуется в TimeChain. Узлы поддерживают глобальное множество использованных nullifier'ов. Попытка повторно потратить тот же UTXO даёт коллизию nullifier и отвергается.
|
|||
|
|
|
|||
|
|
### 6.3 Anchor в TimeChain
|
|||
|
|
|
|||
|
|
Private transaction коммитится в каноническое окно τ через якорь:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
TimeChain[τ].private_anchors = SHA256(
|
|||
|
|
ring_signature || stealth_recipient || amount_commitment ||
|
|||
|
|
range_proof || nullifier || fee_public || ...
|
|||
|
|
)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Каноническое время гарантировано публичное. Содержимое анкера — приватное.
|
|||
|
|
|
|||
|
|
## 7. Размеры и производительность
|
|||
|
|
|
|||
|
|
| Компонент | Public Montana | Private (Монеро-Монтана) |
|
|||
|
|
|-----------|----------------|--------------------------|
|
|||
|
|
| Размер транзакции | ~5 КБ (ML-DSA-65 sig) | ~50–100 КБ (ring + stealth + range) |
|
|||
|
|
| Время подписания | ~10 мс | ~500 мс – 5 с |
|
|||
|
|
| Время верификации | ~5 мс | ~50–500 мс |
|
|||
|
|
| Транзакций в окне (τ₁=60с) | ~10⁴+ | ~10² (ограничение verifier) |
|
|||
|
|
|
|||
|
|
**Вывод:** приватный слой существенно тяжелее публичного. Это **сознательный trade-off** — приватность дорогая. В Monero аналогичные числа.
|
|||
|
|
|
|||
|
|
## 8. Защита от атак
|
|||
|
|
|
|||
|
|
### 8.1 Sybil против anonymity set
|
|||
|
|
|
|||
|
|
Атакующий мог бы подкупить операторов для смещения выбора anonymity set к подложным аккаунтам.
|
|||
|
|
|
|||
|
|
**Защита:** anonymity set выбирается псевдослучайно из VDF-выхода окна — детерминированно и нескомпрометируемо.
|
|||
|
|
|
|||
|
|
### 8.2 Timing attacks через τ-координату
|
|||
|
|
|
|||
|
|
Транзакция в окне τ привязана к публичному времени → возможно корреляционный анализ "кто был онлайн в момент публикации".
|
|||
|
|
|
|||
|
|
**Защита:** decoy delays — частный мод позволяет накапливать транзакции в локальный pool и публиковать через random-jitter в течение нескольких окон.
|
|||
|
|
|
|||
|
|
**Открытый вопрос:** формальный анализ устойчивости к traffic analysis на сетевом уровне (eclipse + observation).
|
|||
|
|
|
|||
|
|
### 8.3 Quantum attack
|
|||
|
|
|
|||
|
|
Все примитивы PQ → Шор не работает. Остаётся Гровер с квадратичным ускорением — требует увеличения хеш-длины для critical primitives.
|
|||
|
|
|
|||
|
|
## 9. Совместимость с public Monero
|
|||
|
|
|
|||
|
|
**Atomic swap** (см. [Atomic-Swap-Протокол](Atomic-Swap-Протокол.md)) — параллельная работа public Monero (XMR) и private Монеро-Монтана (TC) без моста. Пользователь обменивает XMR ↔ TC через protocol-level swap, никаких wrapped токенов, никакого central bridge.
|
|||
|
|
|
|||
|
|
## 10. Открытые исследовательские вопросы
|
|||
|
|
|
|||
|
|
- [ ] Выбор production-grade PQ ring signature schema (MatRiCT+? newer?).
|
|||
|
|
- [ ] PQ range proof оптимизация — текущие схемы тяжёлые.
|
|||
|
|
- [ ] Формальный анализ traffic-analysis устойчивости.
|
|||
|
|
- [ ] Совместимость с lightweight clients (мобильные кошельки) — приватные слои тяжелее.
|
|||
|
|
- [ ] Governance: как обновлять private layer separately от public (см. [12 Управление](../12%20Управление%20и%20Обновления/Governance.md)).
|
|||
|
|
- [ ] Cross-chain swap audit — atomic swap безопасность при византийских участниках.
|
|||
|
|
|
|||
|
|
## 11. Связанные документы
|
|||
|
|
|
|||
|
|
- [Вызов Монеро-сообществу](Вызов-Монеро-сообществу.md)
|
|||
|
|
- [Постквантовые замены](Постквантовые-замены.md)
|
|||
|
|
- [Atomic Swap протокол](Atomic-Swap-Протокол.md)
|
|||
|
|
- [Дорожная карта](Дорожная-Карта.md)
|
|||
|
|
- [02 Криптография](../02%20Криптография/) — базовые PQ-примитивы Монтаны
|
|||
|
|
- [04 Спецификация протокола](../04%20Спецификация%20Протокола/) — основная спека
|
|||
|
|
|
|||
|
|
## 12. Источники
|
|||
|
|
|
|||
|
|
1. Saberhagen, N. (2013). *CryptoNote v 2.0* — основа Monero.
|
|||
|
|
2. Noether, S. (2015). *Ring Confidential Transactions*. Ledger.
|
|||
|
|
3. Bünz, B., Bootle, J., Boneh, D., Poelstra, A., Wuille, P., Maxwell, G. (2018). *Bulletproofs: Short Proofs for Confidential Transactions and More*. IEEE S&P.
|
|||
|
|
4. Esgin, M. F., Steinfeld, R., Sun, S.-F., et al. (2019). *MatRiCT: Efficient, Scalable and Post-Quantum Blockchain Confidential Transactions Protocol*. CCS.
|
|||
|
|
5. Esgin, M. F., Nguyen, N. K., Seiler, G. (2020). *Practical Exact Proofs from Lattices*. ASIACRYPT.
|
|||
|
|
6. Goodell, B., Noether, S., Blue, A. (2020). *Concise Linkable Ring Signatures and Forgery Against Adversarial Keys* (CLSAG).
|
|||
|
|
7. NIST FIPS 203, 204, 205 (2024) — PQ стандарты.
|