О проекте RealtimeClipboard
RealtimeClipboard — бесплатный онлайн-буфер обмена, который переносит текст и файлы между вашими собственными устройствами без учётной записи. Его делает и поддерживает Akshay Nikhare в CadNative, исходный код открыт под лицензией MIT, а платит за всё это один рекламный блок под редактором. Эта страница про все три пункта и про то, что сервис намеренно делать отказывается.
Зачем он нужен
Перенести абзац с рабочего ноутбука на личный телефон — задача решённая только в том случае, если оба устройства случайно оказались в одной экосистеме. У устройств Apple есть «Универсальный буфер обмена», и он заканчивается на границе Apple. Локальным инструментам вроде Snapdrop нужны обе машины в одной сети Wi-Fi, а это исключает телефон на мобильном интернете, закрытую офисную сеть и машину за два государства отсюда. Всё остальное сводится к одному и тому же обходному пути: отправить письмо самому себе или вставить текст в переписку с самим собой — и позволить компании, которую вы не выбирали, хранить копию вечно.
RealtimeClipboard — узкий ответ именно на это. Вы открываете один и тот же короткий ключ на двух устройствах, и буфер обмена у них общий. Нет учётной записи, которую надо заводить, нечего устанавливать, нет требований к сети кроме того, чтобы оба устройства были в сети, и не остаётся копии, когда вы закрываете вкладку.
Как это устроено
То, что вы копируете, шифруется в браузере алгоритмом AES-GCM ещё до того, как покинет машину, — на ключе, выведенном из короткого ключа сессии, который вы набираете. Сам ключ сессии никогда не передаётся. Сервер получает его хеш SHA-256: этого достаточно, чтобы понять, в какую комнату переслать сообщение, и недостаточно, чтобы хоть одну открыть, — плюс шифротекст, который он никак не прочитает.
Ретранслятор держит сообщения в памяти ровно то мгновение, которое нужно на пересылку, и ничего не пишет на диск. Файлы обходят сервер целиком: они идут напрямую между вашими устройствами по WebRTC, поэтому большая передача не стоит сервису ничего и нигде посередине не существует. Сессию можно закрыть PIN-кодом, который тоже никогда не передаётся.
Ничего из этого не требует верить описанию на слово. Весь исходный код открыт, сетевой протокол и модель угроз записаны в репозитории, а ретранслятор — отдельный сервис, не разделяющий с браузером ни строчки кода, только документированный протокол.
Чего он делать не станет
Короткий список — потому что то, от чего продукт отказывается, говорит больше, чем то, что он обещает:
Он не станет сводить воедино двух людей, печатающих одновременно. Бесконфликтное совместное редактирование — настоящая и тяжёлая инженерная работа, а здесь буфер обмена. Когда два устройства печатают вместе, вы видите чужой курсор в его собственном цвете, а пришедший фрагмент вам предлагают, а не молча накладывают поверх вашей работы.
Он не станет вас запоминать. Ни учётной записи, ни почты, ни профиля, ни истории на сервере. Настройки и история буфера обмена лежат в хранилище вашего же браузера и никуда не отправляются. В этом же и честная цена такой конструкции: потеряли ключ — ссылки на восстановление нет, потому что на сервере нет ничего, что знало бы, что сессия была ваша.
Он не станет выдавать ключ за нечто большее, чем он есть. Общий ключ — предъявительский: читать сессию может любой, у кого он есть, и ровно это делает возможным ключ из пяти символов без всякого входа. Этот размен записан, а не спрятан, а PIN-код существует для случаев, когда размен неверный.
Он не станет продавать то, что вы вставляете. Он и не смог бы: содержимое шифруется до отправки, а ключа у сервера нет.
На что он живёт
Ретранслятор — арендованный сервер с настоящим ежемесячным счётом, при этом нет ни подписки, ни платного тарифа, ни учётной записи, к которой их можно было бы привязать. Счёт покрывает один рекламный блок под редактором, который показывает Google AdSense.
Тут стоит быть точным, потому что два утверждения стоят рядом. Рекламный тег — сторонний код, работающий внутри страницы, а в приложении эта страница как раз та, где виден ваш расшифрованный текст, — значит, скрипт Google выполняется там, где это содержимое видно, как любой скрипт на любой странице. Чего он не получает, так это вашего ключа сессии: приложение убирает ключ из адресной строки прежде, чем рекламному тегу вообще разрешено загрузиться. Шифрование между вашими устройствами и ретранслятором в любом случае не меняется. Политика конфиденциальности излагает всё целиком, включая то, что видит Google Analytics.
Кто его делает
RealtimeClipboard делает Akshay Nikhare, инженер-программист, а издаёт CadNative. Это не компания с венчурными деньгами, и команды за ней нет — есть один сопровождающий, и именно поэтому рамки проекта остаются такими узкими, а сообщение об ошибке читает тот, кто может её исправить.
Проект открыт под лицензией MIT. Из одной кодовой базы выходят четыре вещи: веб-приложение, этот сайт, консольный клиент на Node и настольная сборка для Windows, macOS и Linux. Патчи, сообщения об ошибках и сообщения об уязвимостях одинаково приветствуются — как устроен код и какие в нём правила, написано в репозитории.
Как связаться
Вопросы, поправки, пресса и деловые предложения — всё на info@realtimeclipboard.com. Ошибки и пожелания лучше оформлять как issue на GitHub, а у проблем безопасности есть свой закрытый путь. На странице контактов есть подробности, включая то, чего ждать и сколько это занимает.
Если что-то на этом сайте неверно, скажите. Это будет исправлено, и правка останется в открытой истории изменений.