Устройство системы
Как работает подключение по ID
Постоянный ID нужен, чтобы стороны нашли друг друга без настройки роутера и без знания IP-адреса.
- 1. Владелец сообщает хабу, что он в сети, и свои адреса.
- 2. Клиент спрашивает хаб, где владелец с этим ID.
- 3. Клиент соединяется с владельцем напрямую: TLS 1.3, ключ сверяется по отпечатку.
- 4. Если напрямую не вышло, тот же зашифрованный поток идёт через хаб. Хаб пересылает только шифртекст.
Что такое ID
Это девять цифр вида 123-456-789, которые хаб выдаёт владельцу при первой регистрации. ID привязан к ключу владельца: подтвердить его может только тот, у кого есть этот ключ.
Что происходит при подключении
- Включённая раздача периодически сообщает хабу, что владелец в сети, и свои адреса.
- Клиент вводит ID. Хаб отвечает, в сети ли владелец, и отдаёт его адреса и отпечаток ключа.
- Клиент параллельно пробует эти адреса: сначала адреса в локальной сети, затем публичный. Время ожидания на попытку 2,5 с.
- Если за 3 с прямое соединение не получилось, включается запасной путь через сервер. Побеждает тот путь, который сработал первым, остальные закрываются.
- Удачный путь запоминается: в следующий раз клиент начнёт с него.
Прямое соединение и запасной путь
Прямое соединение предпочтительно: данные идут между двумя компьютерами без посредников. Запасной путь нужен, когда напрямую не пробиться, например из-за сетевых ограничений. Тогда хаб пересылает байты между сторонами, но с ограничением скорости и числа одновременных сессий. Поэтому для тяжёлых передач стоит добиваться прямого соединения.
Что хаб не видит
Между клиентом и владельцем всегда устанавливается сквозное шифрование TLS 1.3 с проверкой отпечатка ключа. Хаб в этом разговоре не участник: при запасном пути через него идёт тот же шифрованный поток, и он видит лишь шифртекст. Ни содержимое файлов, ни обмен с токеном, ни PIN-коды, ни чат хаб прочитать не может.
Хаб знает: ID, отпечаток ключа, время последней активности и IP-адрес (см. политику конфиденциальности).
Защита от перебора
Если ID не существует или владелец не в сети, хаб отвечает одинаково, поэтому перебором нельзя узнать, какие ID заняты. Запросы поиска ограничены по частоте. Даже зная ID, подключиться без выданного владельцем доступа нельзя.
Нужен только адрес и порт, без хаба? Так тоже можно: см. инструкцию. Для доступа из интернета по адресу порт придётся пробросить.