Компания Mozilla запустила новый сервис Firefox Send, предоставляющий средства для обмена файлами между пользователями с применением оконечного шифрования (end-to-end).
Изначально данный сервис проходил тестирование в рамках программы Test Pilot ещё в 2017 году, а теперь признан готовым для повсеместного использования.
Firefox Send позволяет загрузить в хранилище на серверах Mozilla файл, размером до 1 Гб в анонимном режиме и 2.5 Гб при создании зарегистрированной учётной записи.
На стороне браузера файл шифруется и передаётся на сервер уже в зашифрованном виде.
После загрузки файла пользователю предоставляется ссылка, которая генерируется на стороне браузера и включает идентификатор и ключ для расшифровки.
При помощи предоставленной ссылки получатель загружает файл и расшифровывает на своей стороне.
Отправитель имеет возможность определить число загрузок, после которых файл будет удалён из хранилища Mozilla, а также время жизни файла (от одного часа до 7 дней).
По умолчанию файл удаляется после первой загрузки или после истечения 24 часов.
Также можно задать отдельный пароль для получения файла, позволяющий предотвратить доступ к конфиденциальной информации в случае попадания ссылки не в те руки (для усиления защиты пароль можно передать отдельно от ссылки, например через SMS, также можно опубликовать ссылку публично, а пароль отправить только избранным пользователям).
Сервис Send не привязан к Firefox и подготовлен в виде универсального web-приложения, не требующего встраивания в браузер дополнений.
Для работы с сервисом также подготовлено специализированное Android-приложение, бета-версия которого будет загружена в каталог Google Play в течение недели.
Серверная часть написана на JavaScript с использованием Node.js и СУБД Redis.
Код сервера размещён на GitHub под лицензией MPL 2.0 (Mozilla Public License), что позволяет любому желающему развернуть аналогичный сервис на подконтрольном оборудовании.
Для шифрования применяется API Web Crypto и алгоритм блочного шифрования AES-GCM (128 bit).
Для каждой загрузки вначале при помощи функции crypto.getRandomValues создаётся секретный ключ, на основе которого затем генерируется три ключа: ключ для шифрования файла при помощи AES-GCM, ключ для шифрования метаданных при помощи AES-GCM и ключ цифровой подписи для аутентификации запроса (HMAC SHA-256).
Зашифрованные данные и ключ цифровой подписи загружаются на сервер, а секретный ключ для расшифровки отображается как часть URL.
При указании пароля ключ для цифровой подписи формируется как хэш PBKDF2 от введённого пароля и URL с фрагментом секретного ключа (заданный пользователем пароль используется для аутентификации запроса, т.е. сервер отдаст файл только если пароль введён верно, но сам пароль не используется для шифрования).
pcnews.ru/