Безопасная передача файлов с помощью Magic Wormhole
Для передачи файлов между распределенными устройствами и пользователями в повседневной работе как правило используются различные сервисы и инструменты, например, мессенджеры или электронная почта для мелких файлов, облачные хранилища и файлообменники для больших. Варианты безусловно удобные и быстрые, однако, в таком случае, чтобы была возможность поделиться файлами с кем-то еще, они оказываются на “чужом” сервере, где ничто не мешает владельцу этого самого сервера распорядиться ими по своему усмотрению.
🔥 Для устранения необходимости в посредниках при обмене данными существует специализированная библиотека с открытым исходным кодом Magic Wormhole на python, основанная на одноименном протоколе. Назначение - прямая передача файлов, каталогов или текстовых сообщений между двумя устройствами в зашифрованном виде с использованием уникальных одноразовых кодов, которые генерируются для каждой сессии передачи.
⚡️ Magic Wormhole использует PAKE (Password Authenticated Key Exchange) - протокол обмена ключами, при котором используется пароль для создания общего ключа на каждой из сторон с дальнейшей его верификацией, который используется для шифрования пересылаемых данных.
📌 Обязательными компонентами Magic Wormhole являются:
- Сервер-ретранслятор для обмена служебными сообщениями между клиентам Magic Wormhole Mailbox Server.
- Транзитный сервер Magic Wormhole Transit Relay, задача которого “склеить” два клиентских сокета по запросу, если это не удалось сделать напрямую.
В библиотеке адреса двух серверов разработчика системы прописаны по умолчанию. Они могут быть развернуты на своем хостинге, что еще больше повысит надежность обмена.
📌 Библиотека поставляется вместе с консольной утилитой wormhole. На примере ее работы можно оценить простоту использования протокола.
🔹 Установка
1
2
# Debian / Ubuntu
sudo apt install magic-wormhole
Magic Wormhole доступна под разные операционные системы. Подробнее о способах установки здесь.
🔹 Отправка файла
1
2
3
4
5
# wormhole send [args] --text TEXT
# wormhole send [args] FILENAME
# wormhole send [args] DIRNAME
wormhole send myfile.txt
Будет сформирован одноразовый код, который необходимо сообщить получателю.
🔹 Получение файла
1
2
3
# wormhole receive [args]
wormhole receive
Вводим одноразовый код и получаем файл.
🔹 Явное указание адресов сервера-ретранслятора и транзитного сервера
1
wormhole send --relay-url=ws://<server ip>:4000/v1 --transit-helper=tcp:[<server ip>]:4001 myfile.txt
Другая сторона должна указать эти же параметры при получении.
📌 Реализация протокола Magic Wormhole была адаптирована в виде библиотеки и под другие языки, а также разработаны клиентские приложения на их основе, включая мобильные. Полный перечень библиотек и приложений можно посмотреть в документации.
