montana/Android/Внешний-аудит/00-Сводка-для-аудитора.md
2026-05-18 22:11:45 +03:00

8.2 KiB
Raw Blame History

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-4balances.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.

Высокие

  1. 07 F-6 — Seed в plain text localStorage. Уязвимо на rooted устройствах и forensic. Closure: Android Keystore wrap.
  2. 07 F-7 — Нет backup confirmation flow при создании кошелька. UX risk потери денег.
  3. 07 CF-recovery-tests — Нет automated tests recovery determinism между устройствами.
  4. 10-Покрытие-тестами.md — Ноль automated tests. Manual verification только.

Средние

  1. 07 CF-4 — Reality keys + UUID в 19 местах ([C-1] SSOT violation).
  2. 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*).