Share.Ninja

Безопасность

Коротко: ваши файлы шифруются на вашем устройстве до того, как что-либо его покинет, ключи никогда не попадают к нам, а мы храним то, чего не можем прочитать. Дальше подробно.

Что шифруется

Каждый файл, каждое имя файла, каждый список папки и название раздачи. Всё это шифруется на вашем устройстве ключом, который создаётся там и там остаётся. Наши серверы, хранилище за ними и сеть между ними всегда имеют дело только с шифротекстом.

Примитивы, чтобы не гадать: AES-256-GCM для содержимого и метаданных, X25519 с HKDF-SHA256 для упаковки ключей под устройство или аккаунт, случайные 256-битные ключи на каждую раздачу.

Как ссылка несёт свой ключ

Ссылка на раздачу выглядит как share.ninja/#…. Всё после # — это токен, который браузеры никогда не отправляют на сервер; он остаётся в адресной строке. Сервер хранит только хеш этого токена и ключ раздачи, упакованный под ключ, выведенный из токена. Тот, кто открывает ссылку, выводит ключ упаковки локально, распаковывает ключ раздачи и расшифровывает. У того, у кого нет ссылки, нет ничего, и это касается и нас.

Прекратите раздачу, и сервер откажет по ссылке везде сразу. Истечение срока работает так же.

Прямые ссылки

В вебе и на десктопе ссылка может быть прямой. Тогда ничего не загружается: файлы остаются на компьютере отправителя и передаются получателю вживую по WebRTC. Передача зашифрована дважды: транспортным шифрованием самого WebRTC и нашим собственным слоем AES-256-GCM с ключом, выведенным из ключа раздачи. Если прямого сетевого пути нет, пакеты пересылает релей; релей видит шифротекст и ничего больше. Закройте отправителя, и скачивать будет нечего.

Рядом

Устройства находят друг друга тремя способами: в одной локальной сети, по Bluetooth (только в приложениях) и через наш сервер, который группирует устройства за одним интернет-подключением. Устройство объявляет своё имя, открытый ключ и восьмисимвольный отпечаток этого ключа, и только пока оно видимо. Переключатель во вкладке «Рядом».

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

Ваш аккаунт и ваши устройства

Вход создаёт ключ идентичности на вашем первом устройстве. Он никогда не покидает ваши устройства в открытом виде: каждое устройство хранит копию, упакованную под его собственный ключ устройства, а сервер хранит только эти упакованные копии и открытые половины.

Новое устройство просит доступ. Устройство, которому вы уже доверяете, показывает запрос с именем и отпечатком новичка, и если вы подтверждаете, упаковывает для него ключ идентичности. Мы не можем добавить устройство в ваш аккаунт и не можем прочитать ваши раздачи, чтобы сделать это за вас.

Если вы потеряли все устройства, фраза восстановления из 24 слов из настроек распакует ключ идентичности на новом. Восстановление отзывает все прежние устройства. Если нет ни фразы восстановления, ни устройства, раздачи потеряны; у нас нет копии, которая могла бы их вернуть. Это не политика, это арифметика.

Что видят наши серверы

Честность здесь важнее короткого списка.

  • О каждой раздаче: её идентификатор, когда создана и когда истекает, общий размер зашифрованных данных, живёт ли она в облаке или это прямая ссылка, и кому принадлежит, если владелец вошёл в аккаунт.
  • О каждой загрузке: что она была, когда и с какого IP-адреса. На этом работают ограничения частоты и разбор жалоб.
  • О каждом аккаунте: адрес почты, отображаемое имя, имена и открытые ключи его устройств, занятое место.
  • О каждом устройстве, с входом или без: идентификатор устройства, его открытый ключ, имя, которое оно объявляет устройствам рядом.
  • Логи сервера с IP-адресами и путями запросов.

Логи сервера хранятся 30 дней. Записи о загрузках и журнал активности вашего аккаунта хранят IP-адрес 90 дней, дальше остаётся только событие.

Чего наши серверы не видят: ни одного файла, ни одного имени файла, ни одного списка папки, ни одного названия раздачи, ни одного ключа.

Войдя в аккаунт, вы можете посмотреть эту запись сами: журнал активности в настройках аккаунта перечисляет каждое действие в вашем аккаунте, со временем, IP-адресом и устройством.

Хранилище и инфраструктура

Наши серверы работают у Hetzner в ЕС. Зашифрованные данные лежат там на наших собственных серверах хранения и в Wasabi S3, в нескольких регионах. Хранилище принимает и отдаёт шифротекст по короткоживущим подписанным URL; ключа у него нет никогда.

Злоупотребления

На странице каждой ссылки есть действие «Пожаловаться», аккаунт для него не нужен. Поскольку мы не можем открыть раздачу сами, отправитель жалобы решает, приложить ли к ней ключ ссылки; только тогда мы можем посмотреть, на что жалуются. Подтверждённая жалоба отключает ссылку везде, и мы можем заблокировать устройство, которое её создало. Контактная почта отправителя жалобы удаляется, как только жалоба обработана.

Сайт

Никаких скриптов отслеживания, никаких аналитических cookie, ничего не уходит третьим сторонам. Посещения считаются по нашим собственным логам сервера. В приложениях аналитики нет вообще.

Сообщить об уязвимости

Напишите на support@share.ninja и укажите в теме «security». Мы отвечаем на каждое сообщение.