Пост

Безопасная передача файлов с помощью Magic Wormhole

Для передачи файлов между распределенными устройствами и пользователями в повседневной работе как правило используются различные сервисы и инструменты, например, мессенджеры или электронная почта для мелких файлов, облачные хранилища и файлообменники для больших. Варианты безусловно удобные и быстрые, однако, в таком случае, чтобы была возможность поделиться файлами с кем-то еще, они оказываются на “чужом” сервере, где ничто не мешает владельцу этого самого сервера распорядиться ими по своему усмотрению.

🔥 Для устранения необходимости в посредниках при обмене данными существует специализированная библиотека с открытым исходным кодом Magic Wormhole на python, основанная на одноименном протоколе. Назначение - прямая передача файлов, каталогов или текстовых сообщений между двумя устройствами в зашифрованном виде с использованием уникальных одноразовых кодов, которые генерируются для каждой сессии передачи.

⚡️ Magic Wormhole использует PAKE (Password Authenticated Key Exchange) - протокол обмена ключами, при котором используется пароль для создания общего ключа на каждой из сторон с дальнейшей его верификацией, который используется для шифрования пересылаемых данных.

📌 Обязательными компонентами Magic Wormhole являются:

  1. Сервер-ретранслятор для обмена служебными сообщениями между клиентам Magic Wormhole Mailbox Server.
  2. Транзитный сервер 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 была адаптирована в виде библиотеки и под другие языки, а также разработаны клиентские приложения на их основе, включая мобильные. Полный перечень библиотек и приложений можно посмотреть в документации.

Больше полезной информации в Telegram-канале