Глоссарий
Шифрование при хранении
Шифрование при хранении это защита данных там, где они лежат: копия файла не стоит ничего для того, у кого нет ключа.
Три вопроса решают дело
Само по себе это словосочетание не значит почти ничего. Настоящую защиту от наклейки отделяют три ответа.
Где живёт ключ
Внутри программы, внутри операционной системы или только у вас в голове. Копирование файла переживают лишь последние два.
Что именно закрыто
Одно поле, один файл или вся папка. Закрытая библиотека значит мало, если то же значение лежит открытым по соседству.
Что бывает без ключа
Записать значение как есть честно. Записать его как есть под пометкой «закрыто» хуже, чем просто открытым текстом.
Что закрывает связка ключей системы
Пароли прокси, пароль входа, который несёт профиль, и пароль от папки синхронизации закрывает операционная система, там же, где она держит остальные ваши секреты.
Своего ключа у программы нет, потому что ключ, уехавший внутри программы, есть у каждого, кто её скачал. Где система умеет закрывать, там замок принадлежит системе.
Когда закрывать нечем
На машине, где система закрывать не умеет, значение пишется как есть, и никакая пометка не утверждает обратного. Пометка защиты над незащищённым значением это единственный по-настоящему плохой исход, потому что она мешает вам принять свои меры.
Закрытое значение, которое не открылось, остаётся лежать закрытым, а не выбрасывается. Один неудачный день связки ключей стоит тогда одного чтения, а не самого значения.
Архив несёт свой замок с собой
Профиль, переезжающий вместе со своей сессией, едет одним зашифрованным архивом, и руками, и через папку, которую и так синхронизирует ваше облако. Шифр это AES-256-GCM, а ключ растягивается из вашего пароля через scrypt.
Архив закрыт и от чтения, и от подделки, поэтому неверный пароль возвращается честным отказом, а не мусором, похожим на сессию. Сам пароль в папку не попадает никогда.
Права это не шифрование
Файлы с секретами пишутся правами только для хозяина, и на macOS и Linux эти права уезжают вместе с копией. На Windows они не значат ничего, и папку закрывает там учётная запись, внутри которой она лежит.
Права отвечают на вопрос, кому можно открыть файл. Шифрование отвечает, чего этот файл стоит после того, как его уже открыли, и резервная копия задаёт именно второй вопрос.
С чем это путают
Шифрование в пути
Оно бережёт сообщение между двумя машинами и кончается ровно тогда, когда сообщение записали на диск.
Шифрование всего диска
Оно бережёт выключенную машину и не даёт ничего после того, как вы вошли и диск открыт.
Хеширование
Хеш нарочно односторонний: это верно для пароля, который читать назад никому не нужно, и бесполезно для того, который нужен.
Чего это не делает
- Пока машина открыта, это не делает ничего. Значение в работе лежит в памяти открытым, и браузер с запущенным профилем тоже.
- Это не закрывает весь каталог профиля. Что пишет туда браузер, принадлежит браузеру и живёт по его правилам, а не по нашим.
- На экране не говорится, закрыли значение или нет. Программа не объявляет замка, которого не поставила, и сегодня всё сообщение состоит из этого молчания.
- Потерянный пароль не восстанавливается. Архивы в вашей папке остаются закрытыми, и второго ключа к ним нет нигде.
- Выгрузка настроек в файл это вторая дорога, и этот файл не шифруется. Если выбрать «включить доступы», в нём читаемо лежат пара входа, ключ одноразового кода и пароли прокси.
Проверить
За каждым утверждением выше стоит файл, а за большинством ещё и стенд, который краснеет, когда утверждение перестаёт быть правдой.
- Файлы с секретами пишутся правами только для хозяина и целиком
- apps/desktop/src/lib/secureFile.js · apps/desktop/test/secrets-on-disk.js
- Пароль входа и пароль прокси закрыты, а значение, которое не открылось, не стирается
- apps/desktop/src/lib/proxies.js · apps/desktop/test/login-in-keychain.js · apps/desktop/test/proxy-password-sealed.js
- Архив сессии зашифрован, и неверный пароль получает честный отказ
- apps/desktop/src/lib/bundle.js · apps/desktop/test/profile-bundle.js · apps/desktop/test/session-sync-folder.js
- Пароль прокси в базе закрыт ключом, который лежит вне базы
- apps/server/src/common/crypto/secret-box.ts · apps/server/test/proxy-secret.js
Вопросы
- Это то же самое, что шифрование всего диска?
- Нет. Шифрование диска бережёт выключенную машину, а это бережёт отдельный файл после того, как он с машины ушёл.
- У кого ключ?
- У операционной системы, когда речь о значениях, которые закрывает она. У архива ключ ваш, через пароль, которого папка синхронизации не видит.
- Чем отличается Windows?
- Замок и там принадлежит системе. А вот права только для хозяина там не работают, и папку закрывает учётная запись, внутри которой она лежит.
- Пароль прокси лежит на вашем сервере открытым?
- В базе он закрыт ключом, который живёт вне базы. Тот, у кого есть и то и другое, прочитает его, и ровно поэтому мы не называем продукт zero knowledge.
- Почему не положить ключ внутрь программы?
- Потому что этот ключ оказался бы у каждого, кто программу скачал, и значение осталось бы таким же открытым, но выглядело бы закрытым.
Рядом с этим
Безопасность и доверие
Что и где записано и что об этом знает сервер.
Zero knowledge
Обещание посильнее и проверка, которая показывает, держится ли оно.
Перенос сессии
Что едет внутри этого архива и почему он остаётся зашифрованным.
Сессия на двух компьютерах
Перевозкой занимается та папка, которая у вас и так есть.
Посмотрите, что и где записано
Страница безопасности перечисляет файлы, значения, уходящие с вашей машины, и границы, на которых защита кончается.