Skip to content

Repository files navigation

HushDrop

Русский | English version

Твои файлы. Твоя сеть. Никого лишнего.

Приватная передача файлов телефон ↔ ПК в локальной сети (Wi-Fi) без интернета, мессенджеров, сторонних серверов и облачных хранилищ. Телефон ↔ телефон — через общий хаб на ПК: один загружает через «Отправить», второй забирает через «Получить».

Release Status Go Version React License: MIT

Warning

Дисклеймер безопасности (Alpha)

Проект находится в стадии активной альфа-версии (v0.1.0). Предназначен исключительно для локальных сетей (домашний Wi-Fi, локальная офисная сеть, мобильная точка доступа). Не выставляйте порт сервиса наружу в глобальный интернет без VPN. Перед загрузкой файлов сверяйте отпечаток TLS.


⚡ Быстрый старт

Windows (Портативный запуск)

  1. Скачайте HushDrop.exe из Releases.
  2. Запустите двойным кликом или из терминала:
    HushDrop.exe --portable
  3. Отсканируйте камерой смартфона QR-код, появившийся в консоли (оба устройства должны быть в одном Wi-Fi).
  4. В открывшемся PWA введите 6-значный PIN и проверьте отпечаток TLS.
  5. Готово! Перетаскивайте файлы в окно браузера для передачи.

Портативность 100%: В режиме --portable все сертификаты, временные чанки и скачанные файлы сохраняются строго в папку ./data рядом с бинарником. Запись в системный реестр Windows или %APPDATA% не производится. Программа может запускаться напрямую с USB-флешки без прав администратора.

Запуск через Docker (Dev-окружение)

docker compose up --build

Интерфейс будет доступен по адресу https://<lan-ip>:8443.


🔍 Как сверить Fingerprint (Отпечаток TLS 1.3)

Сверка отпечатка исключает атаку типа «Человек посередине» (MITM) в недоверенном Wi-Fi:

  1. При старте на ПК в консоли выводится строка вида:
    🔒 TLS 1.3 Fingerprint (SHA256): ED:5B:3F:AD:D2:...
    
  2. При сканировании QR-кода отпечаток передается в ссылке (&fp=...).
  3. В веб-интерфейсе смартфона в окне ввода PIN отображается отпечаток сервера:
    • Если хэш совпадает со ссылкой из QR, загорается зелёный бейдж: «Сверен с QR».
    • Сверьте первые 4 и последние 4 символа с экраном ПК. При совпадении соединение гарантированно установлено напрямую с вашим компьютером.

🔒 Безопасность и Архитектура

  • Строго LAN-Only (RFC 1918): Любые входящие подключения вне частных диапазонов (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.1, ::1) мгновенно отклоняются с кодом 403 Forbidden.
  • TLS 1.3 с проверкой Fingerprint: Самоподписанный ECDSA P-256 сертификат генерируется при первом запуске. Отпечаток SHA-256 отображается в консоли и сверяется клиентом при подключении через QR.
  • E2E поверх TLS (PFS): Эфемерные ключи X25519 и AES-256-GCM сессионные ключи хранятся исключительно в оперативной памяти (RAM). При перезапуске сервера все сессии мгновенно инвалидируются.
  • Защита от перебора PIN: 6-значный PIN имеет TTL 10 минут. 5 неверных попыток ввода подряд блокируют IP-адрес клиента на 5 минут.
  • Rate-Limiting: Ограничение 20 запросов в минуту на каждый IP-адрес. При превышении возвращается 429 Too Many Requests.
  • Защита памяти (< 200MB RAM): Чанковая передача по 4MB со сквозной записью на диск через потоковый буфер 64KB. Передача файлов размером до 5GB не перегружает оперативную память.
  • Подтверждение опасных расширений: Исполняемые файлы и скрипты (.exe, .bat, .ps1, .sh, .msi) помечаются флагом безопасности и требуют явного согласия пользователя перед загрузкой.
  • Кнопка «Забыть всё» (POST /api/revoke): Мгновенно обнуляет активные ключи в RAM, инвалидирует сессии и очищает переданные временные файлы.
  • Маскирование в логах: IP-адреса и имена файлов маскируются (192.168.***.***, fi***.zip), предотвращая утечку метаданных. Generic HTTP 500 без stacktrace.
  • Никакой телеметрии и внешних CDN: Приложение полностью автономно и работает в изолированной сети без выхода в интернет.

📡 Спецификация API

Все закрытые эндпоинты требуют заголовок Authorization: Bearer <access_token> (кроме /api/pair, /api/pair/info, /health и статики).

Метод Эндпоинт Описание
GET /health Проверка доступности сервиса
GET /api/pair/info Получение TLS-отпечатка и оставшегося времени сопряжения
POST /api/pair Сопряжение по PIN и X25519: возвращает пару {accessToken, refreshToken, serverPubKey}
POST /api/pair/refresh Обновление токена доступа по refresh-токену
GET /api/files Список полученных завершенных файлов
POST /api/upload Загрузка чанка 4MB (X-File-Id, X-Chunk-Index, X-Total-Chunks)
GET /api/download?id=... Потоковое скачивание файла с поддержкой HTTP Range (bytes=...)
POST /api/revoke Инвалидация всех сессий, обнуление ключей и удаление файлов

🛠 Сборка из исходников

Требуются Go 1.22+ и Node.js 18+.

# Сборка с автоматической упаковкой во фронтенд и директорию ./dist:
# Для Windows:
powershell -ExecutionPolicy Bypass -File .\scripts\build.ps1

# Для Linux / macOS:
chmod +x ./scripts/build.sh
./scripts/build.sh

📄 Лицензия и безопасность

  • Лицензия: MIT
  • Политика раскрытия уязвимостей: SECURITY.md

About

HushDrop — приватная передача файлов телефон ↔ ПК в локальной сети без облака и мессенджеров. TLS 1.3 + QR + PIN, portable Go-бинарь, PWA, Android APK, трей для ПК.

Topics

Resources

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages