118 lines
6.0 KiB
Markdown
118 lines
6.0 KiB
Markdown
|
|
# TLA+ формальная верификация Proof of Time
|
|||
|
|
|
|||
|
|
**Статус:** 🟡 v0.1 — базовая модель безопасности готова, проверка через TLC + TLAPS остаётся.
|
|||
|
|
|
|||
|
|
## Что это
|
|||
|
|
|
|||
|
|
Формальная модель консенсуса Монтаны на языке TLA+ (Temporal Logic of Actions+, Lamport 2002).
|
|||
|
|
|
|||
|
|
Файлы:
|
|||
|
|
- [`PoT.tla`](PoT.tla) — спецификация модели + 4 теоремы безопасности.
|
|||
|
|
- [`PoT.cfg`](PoT.cfg) — конфигурация для TLC model checker (4 оператора, 3 аккаунта, 10 окон).
|
|||
|
|
|
|||
|
|
## Что моделируется
|
|||
|
|
|
|||
|
|
Уровень абстракции: **Safety + Liveness** при византийском противнике f<n/3 в частично синхронной сети.
|
|||
|
|
|
|||
|
|
| Сущность | TLA+ переменная | Абстракция |
|
|||
|
|
|----------|-----------------|------------|
|
|||
|
|
| VDF-цепь | `vdf_chain` | Монотонная функция от окна (детали SHA-256 не моделируются) |
|
|||
|
|
| Текущее окно | `window` | Натуральное число, монотонно растёт |
|
|||
|
|
| Зафиксированные операции | `committed` | window → SUBSET <<account, op>> |
|
|||
|
|
| Предложения операторов | `proposed` | <<operator, window, op>> |
|
|||
|
|
| Локальная цепь оператора | `operator_chain` | operator → Seq(window) |
|
|||
|
|
| Победитель лотереи | `selection_winner` | window → operator |
|
|||
|
|
|
|||
|
|
## Что НЕ моделируется (вне scope)
|
|||
|
|
|
|||
|
|
- Конкретные SHA-256 байты — VDF аппроксимирован монотонной функцией.
|
|||
|
|
- Криптография подписей (предполагается EUF-CMA-стойкость, см. [02 Криптография](../02%20Криптография/)).
|
|||
|
|
- Сетевая сериализация (предполагается канонической).
|
|||
|
|
- Тонкости gossip-распространения (предполагается eventual delivery после GST).
|
|||
|
|
|
|||
|
|
## Доказываемые свойства
|
|||
|
|
|
|||
|
|
### Инварианты (Safety)
|
|||
|
|
|
|||
|
|
| ID | Свойство | TLA+ имя |
|
|||
|
|
|----|----------|----------|
|
|||
|
|
| S1 | Невозможность двойной траты в окне | `NoDoubleSpendInWindow` |
|
|||
|
|
| S2 | VDF монотонна (каждое окно даёт новый выход) | `VDFMonotone` |
|
|||
|
|
| S3 | Только победитель лотереи коммитит | `OnlyWinnerCommits` |
|
|||
|
|
| S4 | Окно монотонно растёт | `WindowMonotone` |
|
|||
|
|
|
|||
|
|
### Темпоральные свойства (Liveness)
|
|||
|
|
|
|||
|
|
| ID | Свойство | TLA+ имя |
|
|||
|
|
|----|----------|----------|
|
|||
|
|
| L1 | После GST честная операция в конце концов коммитится | `EventuallyCommitted` |
|
|||
|
|
| L2 | Окно бесконечно продвигается при ≥1 честном операторе | `WindowProgresses` |
|
|||
|
|
|
|||
|
|
## Теоремы
|
|||
|
|
|
|||
|
|
```tla
|
|||
|
|
THEOREM Safety == Spec => []NoDoubleSpendInWindow
|
|||
|
|
THEOREM VDFCorrect == Spec => []VDFMonotone
|
|||
|
|
THEOREM CommitProvenance == Spec => []OnlyWinnerCommits
|
|||
|
|
THEOREM ChainProgress == Spec => []WindowMonotone
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Как проверить
|
|||
|
|
|
|||
|
|
### Установка TLC + TLAPS
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
brew install --cask tla-plus-toolbox # macOS
|
|||
|
|
# или скачать TLA+ Toolbox с https://lamport.azurewebsites.net/tla/toolbox.html
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Запуск model checker
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd "Формальная Документация/10 Формальная Верификация/"
|
|||
|
|
tlc -config PoT.cfg PoT.tla
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Ожидание:
|
|||
|
|
- 4 оператора × 3 аккаунта × 10 окон → state space ≈ 10^6 состояний
|
|||
|
|
- Проверка занимает ~1-5 минут на современном CPU
|
|||
|
|
- Все 4 инварианта должны быть satisfied
|
|||
|
|
- Property `WindowProgresses` должна быть satisfied
|
|||
|
|
|
|||
|
|
### Запуск TLAPS proof checker (опц.)
|
|||
|
|
|
|||
|
|
Для формального доказательства теорем (а не только model check):
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
tlapm PoT.tla
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Это требует доразвития proof obligations внутри спеки — открытый вопрос для следующей итерации.
|
|||
|
|
|
|||
|
|
## Ограничения текущей модели
|
|||
|
|
|
|||
|
|
1. **Модель малая.** 4 оператора, 3 аккаунта, 10 окон — model check на полной формальной полной структуре.
|
|||
|
|
2. **VDF абстрактна.** Не моделируется, что D итераций SHA-256 несжимаемы — это допущение из криптографии.
|
|||
|
|
3. **Сеть упрощена.** Нет явного моделирования gossip, latency, partition.
|
|||
|
|
4. **Liveness частична.** L1 формализована, но не везде проверена через TLC.
|
|||
|
|
|
|||
|
|
## Roadmap
|
|||
|
|
|
|||
|
|
- [x] Базовая модель безопасности (этот документ)
|
|||
|
|
- [ ] Расширение до 7+ операторов с symmetry reduction
|
|||
|
|
- [ ] TLAPS proof obligations для всех 4 теорем
|
|||
|
|
- [ ] Модель сетевого partition + GST поведение
|
|||
|
|
- [ ] Coq-формализация криптографических редукций (отдельная работа)
|
|||
|
|
|
|||
|
|
## Связанные документы
|
|||
|
|
|
|||
|
|
- [01 Консенсус](../01%20Консенсус/) — теоремы Safety/Liveness в неформальном виде.
|
|||
|
|
- [07 Модель угроз](../07%20Модель%20Угроз/) — допущения, которые модель охватывает.
|
|||
|
|
- [Mainnet Readiness](../Mainnet-Readiness.md) — гейт G2.
|
|||
|
|
|
|||
|
|
## Источники
|
|||
|
|
|
|||
|
|
1. Lamport, L. (2002). *Specifying Systems: The TLA+ Language and Tools*.
|
|||
|
|
2. Buchman, E., Kwon, J., Milosevic, Z. (2018). *The latest gossip on BFT consensus* (Tendermint TLA+).
|
|||
|
|
3. Hawblitzel, C., et al. (2015). *IronFleet: Proving Practical Distributed Systems Correct*.
|