# 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\*).