Skip to content

CorvusSharp/Secret-Call-

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SecureCall WebRTC

SecureCall — это экспериментальный анонимный мессенджер для голосовых звонков на базе WebRTC с минимальным серверным компонентом (signal-only).
Задача проекта — показать, что даже без тяжелой инфраструктуры можно построить звонки, которые по безопасности не уступают крупным решениям, а в некоторых сценариях даже превосходят.


🔧 Архитектура

  • Бэкенд: aiohttp WebSocket-сервер (Python 3.11+).
    Используется только для сигналинга (обмена SDP/ICE).

    • Антифлуд, анти-replay, ограничение по Origin, токен комнаты.
    • UDP discovery для поиска хоста в локальной сети.
    • Защищённые HTTP-заголовки (CSP, HSTS, Permissions-Policy).
  • Фронтенд: Vanilla JS + WebRTC API.

    • Каждый пир соединяется напрямую с остальными (mesh до 10 человек).
    • RTCPeerConnection с relay-only TURN (в продакшене) или STUN (dev).
    • Автоматическая ренегоциация, watchdog для аудио.
    • Детекция речи, отображение fingerprint'ов.
  • E2E криптография:

    • ECDH (P-256) для установления общего секрета.
    • HKDF → AES-256-GCM (шифрование сообщений) и HMAC-SHA256 (подписи).
    • Fingerprint = первые 8 байт SHA-256(pub).
    • Все чаты — сквозное шифрование.
    • Голос — встроенный SRTP от WebRTC (AES-GCM).

🔒 Почему это безопасно

  1. Нет сервера-хранилища: сервер только пересылает сигналы, не видит SDP/ICE/ключей.
  2. Анти-replay: сервер отклоняет дубликаты ts, клиенты — строго возрастающую монотонию.
  3. Anti-flood: лимит 20 сообщений/сек на пира.
  4. Origin whitelist + токен: без токена и правильного Origin подключиться нельзя.
  5. Relay-only TURN: в продакшене IP пиров скрыт, соединение идёт только через TURN.
  6. E2E-чат: AES-GCM поверх WebRTC DataChannel.
  7. Fingerprints: пользователи могут сверить SHA-256(pub) голоса вручную.
  8. Браузер-only: клиенты — только браузеры (нет «ботов» и «CLI клиентов»).

📊 Сравнение с Signal / Session

Фактор SecureCall Signal Session
Архитектура Сервер-сигналинг, звонки P2P Серверы Signal (централиз.) Децентрализованные узлы
Хранение данных Нет Метаданные у сервера Метаданные распределены
Верификация ключей Fingerprint (вручную) Safety Numbers (QR) Onion routing + PKI
Анонимность Высокая при TURN-only Средняя (IP известен) Очень высокая, но медленнее
Масштабируемость до ~10 пиров (mesh) тысячи пользователей зависит от сети
Устойчивость к цензуре средняя высокая высокая

Где SecureCall сильнее:

  • Нет центрального сервера, нет метаданных о звонках.
  • TURN-only скрывает IP собеседников друг от друга.
  • Минимум логов: без SDP, ICE, токенов.

Где уступает:

  • Нет onion-роутинга (как у Session).
  • Mesh-конференции ограничены по числу участников (~10).
  • Нет федерации и discovery как у Signal/Matrix.

🌍 Когда это самый анонимный мессенджер

  • При использовании своего TURN-сервера за VPN/Tor.
  • При отключении STUN и работе только через relay.
  • При ручной сверке fingerprint'ов собеседников.
  • При ограничении числа участников и использовании одноразовых токенов.

В таких условиях:

  • Сервер не хранит ничего, кроме факта подключения.
  • IP скрыт, даже от собеседников.
  • Данные шифруются на двух уровнях: SRTP + E2E.
  • Никаких логов, никакой централизации.

🚀 Запуск

# Установить зависимости
pip install -r requirements.txt

# Запустить сервер (2 пира)
python ./main.py

# В браузере: открыть http://localhost:8790/

Для продакшена:

  • Настроить TURN (например, coturn).
  • Включить HTTPS/WSS.
  • Выставить PROD=1, ROOM_TOKEN=..., ALLOWED_ORIGINS=....

⚖️ Итог

SecureCall — лёгкий и анонимный P2P-мессенджер, который сочетает:

  • простоту WebRTC,
  • защиту уровня Signal,
  • анонимность уровня Session (при правильной конфигурации).

Главное ограничение — масштабируемость. Но для приватных созвонов на 2–10 человек — это один из самых безопасных вариантов.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published