Как Submarine защищает ваши пароли
Submarine шифрует ваше хранилище на ваших устройствах, прежде чем что-либо их покинет. Серверы, на которых оно хранится, видят только зашифрованные данные, и между вами и ними нет ни аккаунта Submarine, ни сервера Submarine. На этой странице объясняется, что защищено, как именно и что ещё не сделано.
Ключ хранилища
У каждого хранилища свой ключ. Он создаётся на вашем устройстве, когда вы создаёте хранилище. Тот, у кого есть этот ключ, может открыть хранилище, а больше никто не может: ни серверы, ни мы.
- Submarine показывает вам ключ при создании хранилища. Сохраните его в надёжном месте, например на бумаге или в менеджере паролей, которым вы уже пользуетесь.
- Ключ можно также хранить в зашифрованном виде под паролем, который вы выберете сами. Тогда для открытия хранилища нужны и зашифрованный ключ, и его пароль.
- Потерянный ключ никто не сможет восстановить. Аккаунта нет, ссылки для сброса тоже нет, поэтому храните копию ключа или копию зашифрованного ключа вместе с его паролем.
На ваших устройствах
- Ваши хранилища зашифрованы на каждом устройстве ключом этого устройства.
- Этот ключ защищён вашим паролем блокировки. Submarine превращает пароль в ключ с помощью Argon2id, метода, который делает подбор паролей медленным и дорогим. Забытый пароль блокировки тоже нельзя восстановить: в этом случае вы снова открываете хранилища их ключами.
- Вместо пароля блокировки Submarine можно разблокировать отпечатком пальца, лицом или блокировкой экрана.
- Submarine блокируется сам через выбранное вами время, от немедленной блокировки до нескольких часов, и при блокировке стирает ваши хранилища из памяти.
- Скопированные пароли стираются из буфера обмена через выбранное вами время.
- На Android снимки и запись экрана Submarine запрещены, пока вы их не разрешите.
На серверах
Ваши хранилища находятся на реле Nostr, то есть на открытых серверах, которые держат независимые операторы и которыми может пользоваться или которые может запустить любой. Каждое хранилище копируется на несколько реле, поэтому оно сохранится, если одно из них перестанет работать. На каких реле его хранить, выбираете вы, включая ваши собственные.
Каждое ваше изменение шифруется на вашем устройстве и отправляется на реле в запечатанном конверте. Реле видит:
- зашифрованные данные, которые оно не может прочитать,
- публичный ключ хранилища, по которому оно понимает, какие конверты относятся друг к другу, но не что в них лежит,
- случайную дату в пределах двух дней до изменения вместо настоящего времени изменения,
- ваш IP-адрес, как и любой сайт, который вы посещаете.
Изменить ваши пароли реле тоже не может. Каждое изменение подписано ключом хранилища, и Submarine игнорирует всё, что хранилище не подписало.
Без аккаунта и без слежки
- Аккаунта Submarine нет, и ни один сервер Submarine не хранит ваши данные.
- В Submarine нет аналитики, отчётов о сбоях и рекламы.
- Код открыт под лицензией MIT, поэтому любой может проверить, что делает Submarine. Посмотреть исходный код.
Что ещё не сделано
Независимые специалисты ещё не проверяли безопасность Submarine. До тех пор храните самые важные пароли, например от почты и банка, в менеджере паролей с более долгой историей, а начните с остальных.
Если вы нашли проблему безопасности, пожалуйста, сообщите о ней или свяжитесь с нами в Nostr.
Технические подробности
Полный формат описан в протоколе Nostr Passwords.
- Хранилище представляет собой пару ключей Nostr. Его ключ показывается в виде
nsec, а зашифрованный ключ в видеncryptsecпо NIP-49 (scrypt, затем XChaCha20-Poly1305). - Каждое изменение является новой версией элемента: это событие, подписанное хранилищем, зашифрованное для хранилища по NIP-44 (ChaCha20 и HMAC-SHA256, с дополнением, скрывающим точную длину) и упакованное в gift wrap по NIP-59, подписанный одноразовым ключом и датированный случайным моментом в пределах двух предыдущих дней.
- Элементы являются элементами Bitwarden, поэтому Submarine импортирует и экспортирует формат Bitwarden.
- На устройстве ключи хранилищ зашифрованы AES-256-CBC и HMAC-SHA256 ключом устройства. Этот ключ защищён паролем блокировки через Argon2id или хранится в защищённой памяти системы. Локальная копия хранилищ зашифрована AES-256-GCM.
- Если вы пользуетесь Nostr, ключ хранилища может держать приложение для подписи, и тогда он никогда не попадает в Submarine: бункер (NIP-46), приложение для подписи, например Amber (NIP-55), или расширение браузера (NIP-07).