Безопасность и доверие
Безопасность и доверие
- только владелец
- Кто может открыть файл с чужой тайной на macOS и Linux
- AES-256-GCM
- Чем зашифрована сессия до того, как попадёт в вашу облачную папку
- 24 часа
- Сколько программа работает без сервера, прежде чем спросит снова
- 11018
- Автоматических проверок: 1535 на сервере, 8454 в программе, 1029 на сайте
Ваши аккаунты лежат на вашем диске
Куки, хранилища сайтов, сохранённые входы и собственные базы браузера лежат в каталоге профиля на вашей машине. Само по себе оттуда никуда ничего не уходит.
Этот каталог вы можете открыть сами: ~/Library/Application Support/@armanos/desktop на macOS, %APPDATA%\@armanos\desktop на Windows, ~/.config/@armanos/desktop на Linux.
| Что это | На вашем диске | На нашем сервере |
|---|---|---|
| Куки, хранилища сайтов, живые сессии | Да | – |
| Логин и пароль профиля | Да | – |
| Ключ одноразовых кодов у профиля | Да | – |
| История, вкладки, загрузки | Да | – |
| Настройки профиля: имя, группа, сценарий использования, шаблон, прокси | Да | Да |
| Архив сессии для второй машины | В вашей облачной папке, зашифрован | – |
На Windows права на файл устроены иначе
Пароли на каждой системе
На Windows пароли в собственных файлах программы закрывает сама система ключом вашей учётной записи Windows. На macOS они закрыты ключом, который лежит внутри самой программы, а на Linux записаны как набраны, поэтому на обеих системах это не защищает от того, кто может читать вашу папку пользователя. На экране программа об этом не говорит.
Ключ, который едет внутри программы, достанет любой, кто её скачал, и замок на macOS держится именно на таком ключе.
Что достаётся серверу
Пока вы в аккаунте, настройки профилей отражаются на сервере, чтобы вторая машина и напарники видели один список: имя, группа, сценарий использования, шаблон и поколение отпечатка, прокси, теги и заметка.
Важнее то, чего в этом списке нет. Куки не уезжают, не уезжают ни пара логин и пароль профиля, ни его ключ одноразовых кодов, ни один байт баз браузера.
Сам отпечаток не хранится нигде: он выводится в момент запуска.
Ваша почта и отпечаток пароля
Самого пароля нет нигде. Его смена сразу выводит из аккаунта все другие устройства и отзывает ключи API.
Ваши машины
Имя, система, когда была на связи. Отвязка помнится, поэтому машина не зарегистрируется заново.
История вашего пространства
Новая машина записывает адрес, с которого она пришла.
Одна строка обмена на профиль и машину
Когда сессия последний раз уезжала или приезжала. Ни имён файлов, ни содержимого.
Тариф, состояние и дата продления
Данные карты в нашу базу не попадают.
Передача профиля в другой аккаунт
Заявка и случайный ключ к файлу передачи, закрытый нашим ключом, пока получатель не разложит файл, и не дольше 7 дней после приёма. Сам файл с сессией вы пересылаете получателю сами, мимо сервера.
Сессия ездит через вашу папку
Куки остаются на машине, поэтому пересесть за второй компьютер означало бы заново войти в тридцать аккаунтов. На экране «Движок», в блоке «Сессия на двух компьютерах, через папку», вы показываете программе папку, которую и так что-то синхронизирует, и туда ложится по зашифрованному файлу на профиль.
Архив зашифрован AES-256-GCM, а ключ вытягивается из вашего пароля через scrypt с N=32768, r=8, p=1. Сам пароль в папку не попадает.
- 1
Профиль закрывается
Программа ждёт четыре секунды и проверяет, что он всё ещё закрыт: Chromium дописывает базы не сразу.
- 2
Архив пишется рядом
Дальше он переименовывается на место, поэтому половина файла не ляжет на работавшую сессию.
- 3
Рядом ложится метка с размером и временем
Архив, который ещё качается, считается неготовым.
- 4
Вторая машина забирает архив перед запуском
Тот же номер профиля, тот же отпечаток и приехавшие с ним куки.
- 5
Менялось и там, и здесь? Не трогается ничего.
Значит, работали на двух машинах сразу, и программа даёт выбрать.
Один профиль одно открытое окно
Двое из команды могут потянуться к одному профилю в один и тот же миг, и сайт увидит один аккаунт живым сразу с двух машин. Это ровно то поведение, за которое аккаунты блокируют.
Поэтому замок держит сервер: машины друг друга не видят. Держится он по времени, поэтому машина, выключенная из розетки, отпускает свой профиль сама.
- Срок замка
- 3 минуты от последнего продления
- Продление
- каждые 60 секунд, пока профиль открыт
- Освобождение
- сразу при закрытии последнего окна
- Запуск отклонён, если
- профиль открыт в другом месте, машина отвязана, места нет или норма превышена
- Без аккаунта
- замка нет, профили живут только на этой машине
Опознаватель установки случайный, создаётся один раз и лежит в папке данных. Поэтому два свежих ноутбука с одинаковым именем это две машины, а не одна.
На входе два шага
Пароль хранится отпечатком bcrypt с ценой 10 и никогда открытым текстом. Десять промахов закрывают аккаунт на 15 минут, и тот же счёт распространяется на второй шаг.
Арифметика второго шага написана здесь, а не взята библиотекой: чужая библиотека по дороге к вашему паролю однажды обновится сама.
- Пароль
- bcrypt, цена 10
- Промахи
- 10, дальше 15 минут закрыто
- Второй шаг
- TOTP, 30 секунд, 6 цифр
- Запасные коды
- 10, хранятся только отпечатками SHA-256
- Билет между шагами
- 5 минут, свой ключ подписи
- Пропуск
- 15 минут, гаснет сразу, когда сеанс завершён
- Ключ обновления
- 30 дней, меняется, повтор отзывает цепочку
- Сеансы
- видны и завершаются по одному или все сразу
- Передача входа с сайта в программу
- один код, 2 минуты, гаснет вместе с сеансом, который его взял
- Сверка тарифа
- каждые 5 минут на связи
- Работа без сервера
- 24 часа
- Льгота на продление
- 3 суток после записанной даты
Переведённые назад часы срок без сервера не растягивают: проверка, датированная будущим, считается за отсутствие проверки.
Пароль на отдельный профиль
Пароль закрывает действия в ARMANOS. Профиль на диске он не шифрует.
Перед запуском закрытого профиля, правкой, выгрузкой, отправкой в папку синхронизации, удалением, копированием и открытием доступа его спрашивают программа, кабинет и локальный API. Наш сервер хранит отпечаток scrypt, а не пароль, и пропуск, который он выдаёт на верный пароль, подписан своим ключом и живёт 15 минут.
Владелец и администраторы пространства могут его сбросить, и сброс остаётся в журнале. Три неверных ввода подряд закрывают профиль на час для того, кто их ввёл, а не для всей команды.
- На сервере
- отпечаток scrypt, N 2^16
- Неверных подряд
- 3, дальше час для этого человека
- Неверных по всем профилям
- 10 в час, дальше час
- Пропуск после верного пароля
- 15 минут, свой ключ подписи
- Файлы на диске
- не шифруются
Куда девается пароль прокси
Командную строку чужого процесса читает любая программа под тем же человеком, а жилой трафик покупают гигабайтами. Поэтому пароль туда не попадает.
Вместо этого на 127.0.0.1 работает небольшой мост: с браузером он говорит без пароля, с вашим прокси с паролем. Замерено на отгруженной сборке 153.0.7978.0: адрес прокси с логином внутри делает ноль запросов, а тот же прокси за мостом делает 13.
Мост принимает подключения только с петли и спрашивает разовый пропуск у собственного расширения профиля.
Правило прокси покрывает все схемы, а WebRTC закрывается при запуске, если у профиля не выбран режим «Настоящий»; снова открыть его может расширение с правом privacy. Тест утечки на этом сайте показывает адреса, которые отдаёт этот браузер; уходит ли WebRTC мимо прокси, мерит программа: «Сеть > Запустить диагностику».

Выход через свой сервер мостом не отдаётся
Дверь автоматизации закрыта
Программой можно управлять из сценариев через локальный API по HTTP. Он выключен, пока вы не включите его на экране «Для программистов» переключателем «Включить локальный API», слушает только 127.0.0.1, и каждый вызов, кроме состояния, несёт токен доступа с того же экрана.
Одной петли мало: страница, которую вы открыли, дотягивается до 127.0.0.1 из вашего же браузера, а под подменённым именем читает ответы как своя. Поэтому запрос с заголовками, бывающими только у браузера, или с чужим адресом узла программа отклоняет.
Замерено на этом движке: открытие отладочного порта ставит navigator.webdriver в истину, а ключ запуска возвращает его в ложь.

Чего мы не собираем
В программе нет сбора статистики, и на сайте его нет тоже. Ни диспетчера тегов, ни записи сеансов, ни отправки отчётов о падениях, ни одного чужого сценария.
Отчёт о проблеме собирается на месте и никуда не уходит, пока вы не нажмёте отправку. Всё, похожее на тайну, вырезается по имени поля, а само имя остаётся, чтобы вы видели, что оно было.
Проверка страны выхода
Публичная служба адресов по HTTPS и через прокси этого же профиля.
Лента движка
Проверка обновлений по HTTPS, установка только при совпавшей контрольной сумме.
Наш сервер
Настройки профилей, тариф, команда и поддержка, и только пока вы в аккаунте.
Поддержка, когда вы нажали отправку
Вместе с вашим сообщением уезжает вычищенный отчёт.
Бесплатные инструменты и закрытые двери
Бесплатные инструменты этого сайта считают внутри вашего браузера и не делают запросов. Сам сайт отдаётся с закрытыми дверями, и заголовки ниже уходят с каждым ответом.
| Заголовок | Значение | Что закрывает |
|---|---|---|
| Strict-Transport-Security | max-age=31536000; includeSubDomains | Первый заход по http, который можно перехватить |
| Content-Security-Policy | default-src 'self', connect-src наш сервер | Чужой сценарий, чужую рамку и чужой адрес назначения |
| X-Frame-Options и frame-ancestors | DENY и 'none' | Показ вашего кабинета внутри чужой страницы |
| X-Content-Type-Options | nosniff | Догадку о виде файла и запуск его как сценария |
| Referrer-Policy | strict-origin-when-cross-origin | Утечку адреса кабинета на сайты, которые вы открыли |
| Permissions-Policy | camera=(), microphone=(), geolocation=() | Просьбу о приборах, которые сайту не нужны |
Удаление это удаление
Удаление профиля сперва останавливает его браузер. Работающий Chromium продолжает писать в каталог, у которого больше нет хозяина, а на Windows живой процесс держит свои файлы открытыми.
Дальше уходит всё, что было привязано к профилю: каталог браузера, его расширения, его расписания, его счётчики и записи о запусках в файле уведомлений.
Кнопка «Удалить навсегда» в корзине убирает и зашифрованный архив из вашей папки, поэтому вторая машина профиль обратно не принесёт.
Чего это не делает
- Это не обещание, что вас нельзя узнать. Здесь сделаны разделение и устройство, которое не меняется от запуска к запуску. Сайт всё равно судит по поведению, по истории самого аккаунта и по репутации адреса, с которого вы выходите.
- Сборки пока не подписаны и не заверены. macOS и Windows предупредят при первом запуске, и разрешить программу придётся руками.
- Права «только для владельца» настоящие на macOS и Linux. На Windows папку с данными защищает учётная запись, внутри которой она лежит, а не права у каждого файла.
- Пароль от файлов синхронизации лежит на вашей машине: на Windows закрытый самой системой, на macOS закрытый ключом, который лежит внутри самой программы, а на Linux записанный как набран. Спрашивать его при каждом закрытии профиля значит не сделать выгрузку вовсе, и об этом сказано на экране.
- Две машины, записавшие в папку синхронизации в один миг, заставляют облако положить рядом вторую копию под своим именем, а не выбрать победителя. Такие копии узнаются и показываются вам, а обрезки старше часа подметаются.
- Правило источников сайта всё ещё разрешает наши собственные встроенные сценарии, потому что их подставляет фреймворк. Это не самый строгий вид заголовка.
- Без аккаунта замка между машинами нет, а недоступный сервер запуску не мешает. Замок защищает от второго окна, а не от плохой сети.
Как проверить
У каждого утверждения выше есть файл, который его исполняет, и стенд, который падает, когда оно перестаёт быть правдой.
- Файлы с чужими тайнами пишутся только для хозяина и целиком
- apps/desktop/src/lib/secureFile.js · apps/desktop/test/secrets-on-disk.js
- Куки и входы профиля на сервер не уезжают
- apps/desktop/src/lib/profiles.js · apps/desktop/test/login-stays-local.js · apps/server/test/куки-и-входы-сервер-не-примет.js
- Пароль прокси не попадает в командную строку, а прокси с логином работает
- apps/desktop/src/lib/proxyAuthBridge.js · apps/desktop/test/proxy-auth-bridge.js · apps/desktop/test/мост-принадлежит-профилю.js
- Сессия ездит зашифрованной, а удаление убирает её и из папки
- apps/desktop/src/lib/sessionSync.js · apps/desktop/test/session-sync-folder.js · apps/desktop/test/purge-clears-cloud.js
- Один профиль, одно открытое окно
- apps/server/src/profiles/profiles.service.ts · apps/server/test/profile-lock.js · apps/desktop/test/profile-busy.js
- Завершённый сеанс теряет пропуск, ключ обновления и взятые им коды входа
- apps/server/src/auth/сеансы.service.ts · apps/server/test/сеансы.js · apps/server/test/выданное-до-завершения.js
- Бесплатные инструменты сайта не делают ни одного сетевого вызова
- apps/web/components/tools/FingerprintCheck.tsx · apps/web/test/инструмент-отпечатка.js · apps/web/test/тест-утечки.js
Вопросы
- Что делать, если пароль от файлов синхронизации забыт?
- С нашей стороны эти архивы открыть нечем: пароль не покидает вашей машины и в папку не попадает. Задайте новый, и каждый профиль уедет заново под ним с той машины, где сессии ещё живы.
- Может ли поддержка открыть мои профили?
- Нет. Куки, входы профилей и ключи одноразовых кодов до сервера не доезжают, поэтому открывать у нас нечего.
- Что увидит человек за моим незапертым компьютером?
- Всё, что держат профили, ровно как в любом браузере под этой учётной записью. Права на файлы защищают от других записей машины, а не от вашей собственной.
- Что именно попадает в историю пространства?
- Каждая выдача пароля прокси, каждая машина с адресом, с которого она зарегистрировалась, и каждый перехват занятого профиля.
- Можно работать без аккаунта?
- Да, и профили тогда живут только на этой машине: ни замка между машинами, ни общих настроек, ни команды.
Читать дальше
Проверьте каждое обещание
Каждое обещание сайта рядом с местом в программе и проверкой, которая его держит.
Пароль на профиль
Что закрывает пароль на отдельный профиль, а чего нет.
Сессия на двух компьютерах
Как зашифрованный архив ездит через папку, которая уже есть у вас.
Прокси
Мост, страна выхода и что делает профиль при смене адреса.
ARMANOS Browser
Движок, который несёт отпечаток, и что в нём поправлено.
Одноразовые коды
Коды для аккаунтов профиля, лежащие рядом с профилем на этой машине.
Проверьте на своей машине
В программе откройте профиль и посмотрите на права у файлов и на адрес в командной строке. Два профиля бесплатны, карта не спрашивается.