129 lines
8.2 KiB
Markdown
129 lines
8.2 KiB
Markdown
|
|
# 00. Сводка для аудитора — Montana Android v6.5.0
|
|||
|
|
|
|||
|
|
## За одну страницу
|
|||
|
|
|
|||
|
|
**Что это:** Android-приложение Montana — клиент VPN-сети с встроенным BIP39-кошельком. Пользователь получает 0.001 Ɉ за каждую секунду online через VPN-каскад из трёх узлов (Helsinki / Frankfurt / NewYork).
|
|||
|
|
|
|||
|
|
**Размер пакета:** ~3000 строк документации, 11 файлов.
|
|||
|
|
|
|||
|
|
**APK:** `montana-6.6.0.apk` (Phase 2 integration закрыта), 32 MB, подписан Genesis-keystore (fingerprint `305bc99b…3ce4d`).
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Что аудитор должен проверить в первую очередь
|
|||
|
|
|
|||
|
|
### Критические (P0, блокеры mainnet)
|
|||
|
|
|
|||
|
|
1. **`07-Известные-ограничения.md` F-2** — Heartbeat без cryptographic auth. Backend принимает heartbeat от любого 40-hex адреса если IP source ∈ MONTANA_NODES. Sybil-атака открыта. Closure: Falcon-512 подпись (Phase 3, ~2 недели).
|
|||
|
|
2. **`07-Известные-ограничения.md` F-4** — `balances.json` живёт только на Moscow. SPOF. Closure: TimeChain validator state (Phase 3, ~2 недели).
|
|||
|
|
3. **`03-Криптография.md` §5** — Address derivation `SHA-256("montana-v1:" || seed)[0..20]` несовместима с BIP32/BIP44. Cross-wallet import показывает пустые балансы. Phase 4 → SLIP-44 registration.
|
|||
|
|
|
|||
|
|
### Высокие
|
|||
|
|
|
|||
|
|
4. **`07` F-6** — Seed в plain text localStorage. Уязвимо на rooted устройствах и forensic. Closure: Android Keystore wrap.
|
|||
|
|
5. **`07` F-7** — Нет backup confirmation flow при создании кошелька. UX risk потери денег.
|
|||
|
|
6. **`07` CF-recovery-tests** — Нет automated tests recovery determinism между устройствами.
|
|||
|
|
7. **`10-Покрытие-тестами.md`** — Ноль automated tests. Manual verification только.
|
|||
|
|
|
|||
|
|
### Средние
|
|||
|
|
|
|||
|
|
8. **`07` CF-4** — Reality keys + UUID в 19 местах ([C-1] SSOT violation).
|
|||
|
|
9. **`07` F-3.1** — Покажется automated cron purge inactive балансов.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Что работает корректно (verified)
|
|||
|
|
|
|||
|
|
✓ BIP39 derivation byte-exact совместимо со стандартом (cross-verified Python ↔ JS WebCrypto — см. `приложения/вектора-тестов-bip39.md`)
|
|||
|
|
✓ haproxy stick-on-src закрепляет клиент за одним exit-узлом на 24h (verified 10/10 запросов)
|
|||
|
|
✓ Atomic LOCK_EX на balances.json (закрыл CF-5 race)
|
|||
|
|
✓ BIP39 wordlist SHA-256 integrity check fail-closed
|
|||
|
|
✓ JSON parsing через `org.json.JSONObject` (закрыл CF-2 regex fragility)
|
|||
|
|
✓ Catch logging в 10/13 try-блоках (закрыл CF-1)
|
|||
|
|
✓ Reality Active probing resistance через SNI Echo decoy
|
|||
|
|
✓ TUN-петля закрыта через `addDisallowedApplication(packageName)`
|
|||
|
|
✓ ALPN pin = `http/1.1` для парсера
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Структура аудиторского пакета
|
|||
|
|
|
|||
|
|
| Файл | Содержание | Размер |
|
|||
|
|
|------|-----------|--------|
|
|||
|
|
| `README.md` | Точка входа | 74 строк |
|
|||
|
|
| `00-Сводка-для-аудитора.md` | Этот файл | ~150 строк |
|
|||
|
|
| `01-Архитектура.md` | Компоненты, потоки, границы доверия | 264 строк |
|
|||
|
|
| `02-Угрозы-и-модель.md` | Threat model (атакующие A-H) | 166 строк |
|
|||
|
|
| `03-Криптография.md` | Все примитивы с derivation констант | 249 строк |
|
|||
|
|
| `04-Сетевой-слой.md` | VPN-каскад, haproxy sticky, Reality | 407 строк |
|
|||
|
|
| `05-Состояние-и-хранилище.md` | Где живёт state, защита | 254 строк |
|
|||
|
|
| `06-Восстановление.md` | BIP39 procedures, recovery, тест-векторы | 240 строк |
|
|||
|
|
| `07-Известные-ограничения.md` | Findings tracker со severity и closure path | 244 строк |
|
|||
|
|
| `08-Воспроизводимая-сборка.md` | Точные инструкции получить APK | 173 строк |
|
|||
|
|
| `09-Инвентаризация-кода.md` | Файл-за-файлом разбор | 295 строк |
|
|||
|
|
| `10-Покрытие-тестами.md` | Что тестируется, что нет | 209 строк |
|
|||
|
|
| `приложения/вектора-тестов-bip39.md` | Реальные test vectors + cross-verification | 147 строк |
|
|||
|
|
| `приложения/ключи-узлов.md` | Reality public keys, APK signing key | 70 строк |
|
|||
|
|
| `приложения/api-эндпоинты.md` | Backend REST + heartbeat trace | 252 строк |
|
|||
|
|
|
|||
|
|
**Total:** ~3000 строк.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Рекомендуемая последовательность чтения
|
|||
|
|
|
|||
|
|
1. `00-Сводка-для-аудитора.md` (этот) — overview
|
|||
|
|
2. `01-Архитектура.md` — понять компоненты
|
|||
|
|
3. `02-Угрозы-и-модель.md` — понять что защищаем
|
|||
|
|
4. `07-Известные-ограничения.md` — что **не** работает + roadmap
|
|||
|
|
5. `03-Криптография.md` — детальный crypto audit
|
|||
|
|
6. `04-Сетевой-слой.md` — VPN-каскад
|
|||
|
|
7. `05-Состояние-и-хранилище.md` — persistence layer
|
|||
|
|
8. `06-Восстановление.md` + `приложения/вектора-тестов-bip39.md` — recovery verification
|
|||
|
|
9. `08-Воспроизводимая-сборка.md` — собрать APK с нуля
|
|||
|
|
10. `09-Инвентаризация-кода.md` — code reading reference
|
|||
|
|
11. `10-Покрытие-тестами.md` — test gap
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Заявление о готовности к production-mainnet
|
|||
|
|
|
|||
|
|
**Готовность:** ~60% (после Phase 2 closure). Часть production-fixes применена в v6.5.0 (Phase 1), но **критические findings F-2 и F-4 остаются open**.
|
|||
|
|
|
|||
|
|
Запуск mainnet **запрещён** до закрытия P0 findings:
|
|||
|
|
- F-2 (heartbeat auth) — требует TimeChain integration M-VPN-3
|
|||
|
|
- F-4 (state persistence) — требует TimeChain integration M-VPN-2
|
|||
|
|
- F-6 (seed encryption) — Phase 2 user passcode flow
|
|||
|
|
- F-7 (backup confirmation) — Phase 2 UX
|
|||
|
|
- CF-recovery-tests (test coverage) — Phase 2 obligatory
|
|||
|
|
|
|||
|
|
Phase 2 closure cost: ~1-2 недели.
|
|||
|
|
Phase 3 closure cost: ~3-4 недели (вкл. spec patch Montana Protocol v35.25 → v35.26).
|
|||
|
|
|
|||
|
|
После закрытия Phase 2/3 пакет должен быть **переаудитован** независимым специалистом (формальный engagement, не self-audit).
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Контакт и обратная связь
|
|||
|
|
|
|||
|
|
**Спецификация протокола:** `/Users/kh./Python/Ничто/Montana Protocol v35.25.0.md`
|
|||
|
|
**Реализация:** `/Users/kh./Python/Ничто/Montana/Montana-Protocol/Code/`
|
|||
|
|
**Hub:** `https://hub.montana.quest/efir369999/montana`
|
|||
|
|
**Аудитор может ответить через issue в hub либо напрямую автору.**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Ограничения этого аудиторского пакета
|
|||
|
|
|
|||
|
|
1. **Self-audit, не независимый.** Пакет собран автором проекта на основе ролей критика/архитектора из спецификации. Не заменяет внешний security audit от независимой firm (NCC Group, Trail of Bits, Cure53, Quarkslab).
|
|||
|
|
|
|||
|
|
2. **Snapshot 2026-05-18.** Все findings и закрытия зафиксированы на эту дату. После Phase 2/3 пакет должен быть обновлён с новыми статусами.
|
|||
|
|
|
|||
|
|
3. **Не покрывает:**
|
|||
|
|
- Внешнюю криптографию xray-core (отдельный аудит xray)
|
|||
|
|
- Android OS уязвимости (CVE)
|
|||
|
|
- Hosting provider integrity
|
|||
|
|
- Legal compliance (GDPR, лицензирование VPN в странах деятельности)
|
|||
|
|
|
|||
|
|
4. **Не имеет formal proof.** Все утверждения empirical либо математические по стандарту, но без formal verification (TLA+, Coq, F\*).
|