Децентрализованное peer-to-peer приложение для обмена сообщениями на Android, работающее без централизованной инфраструктуры. Поддерживает текстовые сообщения, передачу файлов и голосовые звонки через локальные Wi-Fi сети и Wi-Fi Direct.
┌───────────────────────────────────────────────────────────┐
│ Слой интерфейса │
│ ┌────────────┐ ┌────────────┐ ┌──────────┐ ┌──────────┐ │
│ │PeersFragment│ │ChatFragment│ │GroupChat │ │LogFragment│ │
│ └─────┬──────┘ └─────┬──────┘ └────┬─────┘ └────┬─────┘ │
│ ┌─────┴──────────────┴─────────────┴────────────┴──────┐ │
│ │ ViewModels / LiveData / Flow │ │
│ └──────────────────────────┬────────────────────────────┘ │
├─────────────────────────────┴────────────────────────────────┤
│ MeshService │
│ ┌──────────────────┐ ┌───────────┐ ┌──────────────────┐ │
│ │ Обнаружение │ │Маршрутиз. │ │ Криптография │ │
│ │ UDP mcast │ │ Flood+TTL │ │ AES-256-GCM │ │
│ │ 239.255.42.99 │ │ LRU дедуп │ │ Ed25519 подп. │ │
│ │ :42099 │ │ │ │ X25519 DH │ │
│ │ + Wi-Fi Direct │ │ │ │ BeaconSigner │ │
│ │ + BLE Discovery │ │ │ │ TOFU пиннинг │ │
│ └───────┬──────────┘ └─────┬─────┘ └────────┬─────────┘ │
│ ┌───────┴──────────┐ ┌─────┴─────┐ │ │
│ │ UDP Multicast │ │TCP :42100 │ │ │
│ │ + P2P :42101 │ │ │ │ │
│ │ + BLE GATT │ │ │ │ │
│ └──────────────────┘ └───────────┘ │ │
│ ┌──────────────────┐ ┌──────────────────────┴────────┐ │
│ │ Передача файлов │ │ WebRTC менеджер звонков │ │
│ │ 32КБ чанки+SHA256│ │ Opus аудио, метрики │ │
│ └──────────────────┘ └───────────────────────────────┘ │
│ ┌──────────────────┐ ┌───────────────┐ ┌───────────────┐ │
│ │ GroupManager │ │NetworkMonitor │ │BatteryAware │ │
│ │ Групповые чаты │ │ Wi-Fi состоян.│ │ Энергосбереж. │ │
│ │ E2E на участника│ │ Авто-реконнект│ │ 4 режима │ │
│ └──────────────────┘ └───────────────┘ └───────────────┘ │
└──────────────────────────────────────────────────────────────┘
- Обнаружение узлов: UDP multicast (239.255.42.99:42099) + Wi-Fi Direct (:42101) + BLE GATT-сервер с автоматическими подписанными HELLO/BYE маяками
- Текстовые сообщения: Зашифрованный P2P чат с подтверждениями доставки (ACK)
- Групповые чаты: Создание групп, приглашения, E2E-шифрование на каждого участника (без общего группового ключа)
- Мультихоп-маршрутизация: Flooding с TTL (макс. 5 хопов) + LRU-дедупликация (кэш 10K)
- Передача файлов: Чанки по 32 КБ с SHA-256 проверкой целостности, скользящее окно, возобновление
- Голосовые звонки: WebRTC с SDP-сигнализацией через mesh, метрики качества (RTT/потери/джиттер)
- Шифрование: AES-256-GCM (AEAD), подписи Ed25519, X25519 DH, HKDF-SHA256 со случайной солью, TOFU-пиннинг ключей
- Хранение ключей: EncryptedSharedPreferences (AES-256-GCM + AES-256-SIV)
- Подпись маяков: Все HELLO/BYE подписаны Ed25519 через интерфейс BeaconSigner
- Надёжная доставка: ACK + повторы с экспоненциальным откатом (2с/4с/8с, макс. 3 попытки)
- Мониторинг сети: Отслеживание состояния Wi-Fi/Ethernet, автоматический реконнект при смене сети
- Энергосбережение: 4 режима (FULL_POWER/BALANCED/LOW_POWER/CRITICAL), адаптивные интервалы маяков, приоритет BLE при низком заряде
- Журнал событий: UI в реальном времени с событиями обнаружения, маршрутизации, криптографии и доставки
- Язык: Kotlin
- Платформа: Android (minSdk 26, targetSdk 34)
- Сеть: UDP Multicast, TCP Sockets, Wi-Fi Direct, BLE GATT, WebRTC
- Криптография: Google Tink (AEAD), java.security (Ed25519, X25519), AndroidX Security Crypto
- Асинхронность: Kotlin Coroutines + Flow + StateFlow
- Интерфейс: Material Design 3, ViewBinding, RecyclerView
# Клонирование
git clone <repo-url>
cd net_hack
# Сборка
./gradlew assembleDebug
# Установка
adb install app/build/outputs/apk/debug/app-debug.apk
# Запуск тестов
./gradlew testДля проверки peer-to-peer связи:
- Запустите два Android-эмулятора на одной машине
- Оба эмулятора используют общую сеть хоста, поэтому multicast-обнаружение работает
- Установите приложение на оба эмулятора
- Узлы должны появиться автоматически в течение 5 секунд
- Нажмите кнопку чата у узла для начала обмена сообщениями
app/src/main/java/com/hexteam/securemesh/
├── SecureMeshApp.kt # Класс Application
├── MainActivity.kt # Главная активность с ViewPager
├── model/ # Классы данных
│ ├── Peer.kt # Информация об узле
│ ├── MeshMessage.kt # Сообщение протокола
│ ├── MessageType.kt # Перечисление типов (14 типов)
│ ├── ChatMessage.kt # UI-сообщение чата
│ ├── LogEntry.kt # Запись журнала событий
│ ├── FileTransferInfo.kt # Состояние передачи файла
│ └── GroupChat.kt # Модель группового чата
├── protocol/
│ └── MessageCodec.kt # JSON кодирование/декодирование + фрейминг
├── network/
│ ├── MeshEventBus.kt # Центральная шина событий (Flow)
│ ├── MulticastDiscovery.kt # UDP multicast HELLO/BYE + подпись
│ ├── WifiDirectDiscovery.kt # Wi-Fi Direct обнаружение + подпись
│ ├── BleDiscovery.kt # BLE GATT обнаружение (fallback)
│ ├── TcpTransport.kt # TCP соединения + фрейминг
│ ├── MeshRouter.kt # Flooding + TTL + LRU дедупликация
│ ├── ReliableDelivery.kt # ACK + очередь повторов
│ ├── GroupManager.kt # Групповые чаты + E2E на участника
│ ├── NetworkMonitor.kt # Мониторинг Wi-Fi/Ethernet состояния
│ └── BatteryAwareManager.kt # Энергосбережение (4 режима)
├── crypto/
│ ├── KeyManager.kt # Генерация и хранение ключей (EncryptedSharedPrefs)
│ ├── MessageEncryptor.kt # AES-GCM + подпись Ed25519
│ └── BeaconSigner.kt # Интерфейс подписи/верификации маяков
├── file/
│ └── FileTransferManager.kt # Передача файлов чанками
├── call/
│ ├── CallSignaling.kt # SDP/ICE через mesh
│ ├── WebRtcCallManager.kt # WebRTC аудиозвонки
│ └── CallMetrics.kt # RTT, потери, джиттер
├── service/
│ └── MeshService.kt # Foreground-сервис
└── ui/
├── peers/ # Вкладка списка узлов
├── chat/ # Вкладка чата
├── log/ # Вкладка журнала событий
└── call/ # Активность звонка
docs/
├── spec.md # Спецификация архитектуры
├── threat_model.md # Модель угроз
├── guide_deploy.md # Сборка, развёртывание, тестирование
├── guide_network.md # Настройка сетевых подключений
└── guide_user.md # Руководство пользователя
| Разрешение | Назначение |
|---|---|
| INTERNET | TCP/UDP сетевое взаимодействие |
| ACCESS_WIFI_STATE | Получение информации о Wi-Fi для multicast |
| CHANGE_WIFI_STATE | Управление Wi-Fi Direct |
| CHANGE_WIFI_MULTICAST_STATE | Включение MulticastLock |
| ACCESS_FINE_LOCATION | Wi-Fi Direct / BLE обнаружение (Android 6–12) |
| NEARBY_WIFI_DEVICES | Wi-Fi Direct обнаружение (Android 13+) |
| BLUETOOTH | BLE обнаружение (до Android 12) |
| BLUETOOTH_ADMIN | BLE сканирование/рекламирование (до Android 12) |
| BLUETOOTH_SCAN | BLE сканирование (Android 12+) |
| BLUETOOTH_ADVERTISE | BLE рекламирование (Android 12+) |
| BLUETOOTH_CONNECT | BLE подключение (Android 12+) |
| RECORD_AUDIO | Голосовые звонки |
| FOREGROUND_SERVICE | Фоновая работа mesh-сервиса |
- Спецификация архитектуры — форматы протокола, маршрутизация, обнаружение, хранение
- Модель угроз — актёры, атаки, меры защиты, криптографические примитивы
- Сборка и тестирование — установка SDK, сборка APK, тестирование на эмуляторах
- Настройка сети — Wi-Fi роутер, Wi-Fi Direct, multicast, устранение неполадок
- Руководство пользователя — как пользоваться: чат, файлы, звонки, безопасность
- План разработки для Ubuntu — пошаговая инструкция: установка JDK/SDK, сборка, тестирование