
TorChat - Безопасный, приватный и анонимный пиринговый чат через сеть Tor
Безопасный, приватный и анонимный одноранговый чат через сеть Tor.
TorChat действительно крут. В нём есть несколько крутых штук, которых нет у других.
В отличие от стандартных Tor-чатов, использующих постоянные адреса, эта реализация полностью эфемерна.
Нулевая персистентность: сервер создаёт временный скрытый сервис. Как только сессия завершается, адрес .onion удаляется и не может быть восстановлен или использован повторно.
Гибридная архитектура: я заметил, что хостинг Tor-сервиса обычно является самой сложной частью для пользователей. Чтобы решить это, режим сервера использует встроенный процесс Tor, не требующий никакой настройки. Режим клиента просто подключается к экземпляру Tor, который у вас, скорее всего, уже есть (например, Tor Browser). То есть использует системный tor.
Простая безопасность: я выбрал ChaCha20-Poly1305 для шифрования. Он быстрее AES на большинстве аппаратных средств и обеспечивает встроенную аутентификацию, а это значит, что если хотя бы один бит вашего сообщения будет изменён при передаче, приложение отклонит его.
да, спроектировано с 🔏.
Примечание: ChaCha20-Poly1305 — это алгоритм аутентифицированного шифрования с присоединёнными данными (AEAD), который объединяет потоковый шифр ChaCha20 с кодом аутентификации сообщений Poly1305.[1] Он обладает высокой скоростью программной работы и без аппаратного ускорения обычно быстрее AES-GCM.[1]: §B
источник: https://en.wikipedia.org/wiki/ChaCha20-Poly1305 https://protonvpn.com/blog/chacha20
Автоматическая настройка: вам не нужно быть сетевым экспертом. Сервер сам выполняет рукопожатие Tor и автоматически создаёт секретный адрес .onion для вас.
Ссылки-приглашения: хост получает ссылку, содержащую случайный 32-байтовый секрет комнаты. Любой, у кого есть ссылка, может присоединиться — до 16 участников. Ссылка перестаёт работать в тот момент, когда хост выходит, а onion-адрес удаляется.
Обмен через QR-код: вместо ввода 56-символьного onion-адреса (в котором легко ошибиться) хост может просто показать QR-код, чтобы гость его отсканировал.
Групповые комнаты: до 16 человек в одной комнате. Хост ретранслирует каждое сообщение всем остальным, и люди могут писать и получать одновременно, не дожидаясь, пока кто-то другой закончит.
Надёжная доставка: сообщения снабжаются префиксом длины перед шифрованием, поэтому сообщение корректно собирается обратно независимо от того, как сеть разбивает его на части.
Полное стирание: этот инструмент эфемерен. Это означает, что он не оставляет следов. Нет логов, нет истории и нет сохранённых файлов. Как только вы закрываете чат, адрес и сообщения исчезают, как будто их никогда не существовало.
TorChat использует архитектуру Tor для наилучшего пользовательского опыта:
Ноль зависимостей — использует встроенный Tor
Вы можете просто запустить AppImage. Для AppImage не требуется никакой настройки.
./TorChat-x86_64.AppImage
# Choose: [1] Host room (Server)
Требуется Tor — использует системный Tor или Tor Browser
У большинства людей это уже есть, надеюсь.
Вариант A: использование Tor Browser (самый простой)
# 1. First you need to open the Tor Browser because it gives you a SOCKS proxy that works on port 9150 which's the Tor Browser.
# 2. Run TorChat client
./TorChat-x86_64.AppImage
# Choose: [2] Join room (Client)
Вариант B: использование системного Tor
# 1. Install and start system Tor
sudo apt install tor [ debian ]
sudo pacman -S tor [ arch ]
To start the tor service you need to use the following command:
sudo systemctl start tor.
This will get the tor service up and running. You have to use the tor service if you want to use tor. The command sudo
systemctl start tor
is what you should type to start tor.
# 2. Run TorChat client
./TorChat-x86_64.AppImage
# Choose: [2] Join room (Client)
Человек 1 (хост):
chmod +x TorChat-x86_64.AppImage
./TorChat-x86_64.AppImage # Choose [1] Server
# Share the invite URL/QR code
# Type /invite any time to print it again
Человек 2 (присоединение):
# Open Tor Browser first, then:
./TorChat-x86_64.AppImage # Choose [2] Client
# Paste the invite URL
# Repeat for as many people as you want in the room
Если вы считаете себя крутым разработчиком, то это для вас.
Python 3.7+
Системный Tor (только для режима клиента)
git clone https://github.com/blackXploit-404/torchat.git
cd torchat
python -m venv torchat
source torchat/bin/activate
pip install -r requirements.txt
Сервер (хост):
python3 server.py
# This uses embedded Tor, so no setup is needed
Клиент (присоединение):
# Start system Tor first
python3 client.py
Поток шифрования:
Общий секрет хешируется с помощью SHA256 для создания 32-байтового ключа.
Для каждого сообщения генерируется случайный 12-байтовый nonce.
Сообщение шифруется, а nonce добавляется в начало данных.
Получатель отбрасывает первые 12 байт, чтобы использовать их в качестве nonce для расшифровки.
Сетевое взаимодействие:
Сервер: привязывается к 127.0.0.1:5000, который Tor сопоставляет с публичным .onion-адресом.
Клиент: использует протокол SOCKS5 для туннелирования TCP-соединения через цепочку Tor.
┌─────────────────┐ ┌─────────────────┐
│ SERVER MODE │ │ CLIENT MODE │
├─────────────────┤ ├─────────────────┤
│ Embedded Tor │ │ System Tor │
│ - Tor process │◄──►│ - SOCKS proxy │
│ - Hidden service│ │ - Port 9050/9150│
│ - No dependencies│ │ - Existing Tor │
└─────────────────┘ └─────────────────┘
SENDER SIDE:
User Message: "Hello World"
│
▼
┌─────────────────────┐
│ ChaCha20-Poly1305 │
│ Encryption Engine │
├─────────────────────┤
│ Key: SHA256(secret) │
│ Nonce: 12 random │
│ Plaintext: message │
└─────────────────────┘
│
▼
Encrypted Bytes: [nonce + ciphertext + auth_tag]
│
▼
┌─────────────────────┐
│ Tor Network │
│ (3-hop anonymity) │
└─────────────────────┘
RECEIVER SIDE:
I got some encrypted bytes. These encrypted bytes were received. The encrypted bytes are now here.
│
▼