Принцип
У Droplet Drop нет ни аккаунта, ни сервера передачи. Файлы идут напрямую с отправляющего устройства на принимающее по вашей локальной сети. Мы никогда не видим ваши файлы и не знаем, кто кому их отправляет: они не проходят через нас.
Никакой самодельной криптографии: Droplet Drop использует проверенные библиотеки — rustls (TLS 1.3), ring, rcgen (ECDSA P-256), SHA-256 и BLAKE3.
Шифрование
Каждое соединение шифруется TLS 1.3, и только им. Аутентификация взаимная: оба устройства доказывают свою подлинность.
При первом запуске каждое устройство создаёт собственный ключ (ECDSA P-256). Его идентификатор — отпечаток этого ключа; код безопасности в приложении — его начало, чтобы проверить с одного взгляда.
Подключающееся устройство закрепляет ожидаемый идентификатор, полученный при обнаружении в сети или из QR-кода. Любое другое устройство, выдающее себя за него, отклоняется.
Ничего не приходит без вашего согласия
Каждая отправка начинается с предложения: имя отправителя, код его устройства, число и размер файлов. Без ответа оно истекает через две минуты.
Только устройства, отмеченные вами как «доверенные», могут отправлять без подтверждения, и вы можете удалить их в любой момент.
Полученный файл никогда не запускается. Если в отправке есть программа, предложение об этом предупреждает.
Проверено до последнего байта
Перед отправкой каждый файл делится на блоки по 4 МиБ, и каждый блок получает свой отпечаток BLAKE3, как и весь файл. Получатель проверяет каждый блок по прибытии, а затем перечитывает весь файл.
Повреждённый или подменённый блок запрашивается заново. Файл, не совпадающий с оригиналом, никогда не выдаётся: он остаётся в скрытой папке возобновления, пока не станет верным, или удаляется.
Group Drop
Приглашение содержит адрес хоста в локальной сети, идентификатор его устройства (закреплённый), 128-битный идентификатор сеанса и 256-битный токен, который невозможно угадать. Хост сравнивает токен за постоянное время.
Приглашение ограничено по времени (30 минут, 2 часа или 8 часов). Поделиться ссылкой — значит дать право присоединиться: делитесь ею только с участниками.
Ссылка-приглашение может открываться на drop.dropletmesh.app: часть после «#», в которой и содержится приглашение, никогда не отправляется на наш сервер. Она остаётся в вашем браузере.
Защиты по порядку
| Угроза | Защита |
|---|---|
| Прослушивание сети | TLS 1.3 на каждом соединении |
| Подмена устройства | Закреплённый идентификатор; рукопожатие TLS доказывает владение ключом |
| Непрошеная отправка | Явное согласие (или доверенное устройство); истекает через 2 минуты |
| Посторонний в рассылке | 256-битный токен, сравниваемый за постоянное время; приглашение ограничено по времени |
| Повреждённый или подменённый файл | Отпечаток BLAKE3 каждого блока и всего файла; ничего не выдаётся до проверки |
| Запись вне папки для получения | Пути очищаются при приёме («..», корни, зарезервированные имена, запрещённые символы) |
| Перезапись файла | Никогда: выбирается свободное имя, «имя (1).ext» |
| Заполненный диск | Свободное место проверяется до приёма |
| Чрезмерные данные | Ограниченные сообщения; одна отправка — не более 100 000 файлов и 4 ТиБ |
| Перебор | После 20 неудач за минуту адрес игнорируется; не более 128 соединений одновременно |
Ключ вашего устройства
Закрытый ключ устройства никогда его не покидает. Он хранится в папке данных приложения (на Mac и Linux доступен только вашей учётной записи). Если эта папка будет удалена — например, при удалении приложения с телефона, — устройство получит новый идентификатор, и вашим другим устройствам придётся снова ему доверять.
Сообщить об уязвимости
Думаете, что нашли уязвимость? Напишите на contact@dropletmesh.app, приложив всё, что нужно для воспроизведения. Пожалуйста, дайте нам время исправить её, прежде чем публиковать; мы ответим и будем держать вас в курсе.