Новый сервис WebWormHole работает как портал, через который файлы передаются с компьютера на другой. Нажимаете кнопку New Wormhole — и получаете код для входа. Человек с другой стороны вводит такой же код или URL — и между вами устанавливается эфемерный туннель, по которому напрямую передаются файлы. Очень просто и эффективно. Исходный код на Github.
Для установки портала между устройствами необязательно открывать браузер. Клиент на Go запускается из командной строки и генерирует одноразовый код в консоли.
Установка:
$ go get -u webwormhole.io/cmd/ww
Передача:
$ cat hello.txt
hello, world
$ ww send hello.txt
8-enlist-decadence
Получатель на другой стороне эфемерного тоннеля вводит одноразовый код в консоли — и получает файл.
$ ww receive 8-enlist-decadence
$ cat hello.txt
hello, world
Автор программы Сальман Альджаммаз (Salmān Aljammāz) предупреждает, что клиент находится в ранней разработке, использует экспериментальные криптографические библиотеки, поэтому может глючить и работать не во всех браузерах. Программа также не прошла аудит безопасности, так что может работать неправильно и небезопасно.
Автор позаимствовал идею и название у программы Magic Wormhole, которая тоже устанавливает пиринговое соединение и передаёт файлы между компьютерами.
Magic Wormhole
Отличие в том, что WebWormHole использует WebRTC, что позволяет пробить файрволы и NAT, а также запускать передачу из браузера.
Каждый тоннель защищается одноразовым паролем и PAKE — это специфический способ обмена ключами с проверкой подлинности пароля для установки зашифрованного соединения. При этом сам пароль не передаётся по сети ни в каком виде.
Проверка осуществляется примерно как в доказательстве с нулевым разглашением, в котором получатель может убедиться в достоверности какого-либо утверждения, не имея при этом никакой другой информации от отправителя.
SPAKE2
В WebWormHole для выработки общего ключа шифрования происходит обмен описаниями сессий с отпечатками сертификатов DTLS, которые использует WebRTC для шифрования соединений.
Передача файлов через пиринговый тоннель быстрее и безопаснее, чем по почте, FTP или другими способами. По удобству и безопасности эти способы сравниваются в таблице из презентации Magic Wormhole:
Ввод отправителем | Ввод получателем | Физическая близость | Прослушка | |
---|---|---|---|---|
Электронная почта | ~30 симв. | провайдеры, центры сертификации, интернет | ||
Загрузка на FTP/HTTP | ~60 симв. | сервер, провайдеры, центры сертификации, интернет | ||
Dropbox | ~60 симв. | Dropbox, центры сертификации | ||
+сервис сокращения ссылок | ~20 симв. | сервис сокращения ссылок, случайный перебор, Dropbox, центры сертификации | ||
USB-накопитель | Х | |||
SSH/scp | ~740 симв. публичный ключ | никто | ||
magic wormhole | ~20 симв. | никто |
Кроме питоновского Magic Wormhole, есть и другие клиенты для установления прямых соединений по WebRTC между компьютерами:
- pion WebRTC: реализация WebRTC API на Go
- aiortc: библиотека WebRTC для питоновского фреймворка asyncio
- webrtcbin
- rawrtc
- node-webrtc
В качестве бонуса:
- rtc-ssh: WebRTC-обёртка для SSH-соединений
По каналу WebRTC можно установить видеосвязь между устройствами, передавать голос, файлы и т. д.
Что касается механизма обмена ключами PAKE, то он полезен и в разных областях. Например, позволяет реализовать аутентификацию на сайте без передачи пароля на сервер.