Откройте «онлайн-генератор паролей», нажмите «создать» и сразу панель Network в инструментах разработчика. Если в теле запроса или в query появилась только что полученная строка, открытый текст уже покинул устройство. Здесь не нужно верить слогану бренда — браузер сам раскладывает трафик.
Считать в браузере — не ради «децентрализации» в маркетинге, а чтобы сжать окно открытого текста до вашей машины: меньше передачи, меньше серверных логов, меньше шанса, что кто-то прочитает дамп памяти. Ниже — модель угроз, шаги проверки и границы возможностей. Инструменты PassAfer собраны вокруг этого правила; статья не обзор продукта, а ответ на один вопрос: почему чувствительный расчёт не стоит по умолчанию отдавать серверу.
Что расширяет серверный расчёт
Окно открытого текста — это места, где открытый текст (или ключ, из которого его сразу восстановить) реально существует. Когда считает сервер, окно обычно не сводится к «вы нажали отправить»: это цепочка, которую потом трудно стереть.
- TLS-сессия от браузера до источника: процесс на сервере видит уже расшифрованный запрос, не шифротекст.
- Выборки тела запроса в обратном прокси, WAF, APM и трекерах ошибок: один 500 может положить форму в отчёт о падении.
- Query string в прикладных логах, медленных запросах и access log. Кто кладёт ключ в
?key=, пишет его в журнал доступа. - Промежуточные файлы в БД, объектном хранилище, на временном диске, плюс бэкапы и реплики.
- Время, пока эксплуатация, поддержка или злоумышленник держат любую из этих копий. Окно уже случилось; обещание «удалим сразу» этого не отменяет.
Юрисдикция и субподрядчики превращают «мы не смотрим» в фразу, которую почти нельзя аудировать. Проверить можно протокол и трафик, а не внутренний регламент чужого ЦОД.
Для генератора паролей это особенно неприятно: вам нужна строка, которой ещё нигде не было. Если её создали в чужом зале, первая копия уже не у вас. Потом вы вставите её в прод, CI или менеджер паролей — источник утечки станет ещё одним узлом, который вы не видите.
То же для аудита паролей: отдать привычный пароль «на проверку стойкости» — отдать самую чувствительную повторно используемую строку третьей стороне. Поиск по публичным утечкам можно строить на k-anonymity; Password Audit в PassAfer выбирает жёстче — проверяемый пароль не загружается, оценка стойкости и сверка с Top-списком идут в браузере. Проверять нужно не «они говорят, что не хранят», а отсутствие этой строки в запросах.
Для шифрования файлов схема «загрузить → зашифровать на сервере → скачать» хотя бы один раз кладёт фразу и содержимое в память сервера. Потоковое локальное шифрование не даёт серверу открытого текста: ему даже не нужно знать, фото это или образ диска.
HTTPS — это не локальный расчёт
TLS защищает от подслушивания на пути, не от сервера на другом конце. Если считает сервер, он как раз и должен прочитать открытый текст. Локальный расчёт отвечает на другое: этой стороне материал вообще не должен быть виден.
Что именно значит «локально»
Слово легко превращается в лозунг. Его нужно разобрать, иначе «видно только вам» в облачном диске тоже назовут локальным шифрованием.
Процесс на вашей машине, а не «в чьём-то облачном аккаунте»
У PassAfer «локально» значит: считает вкладка браузера. Случайные числа — из crypto.getRandomValues, симметричное шифрование — через Web Crypto API. Ключевой материал живёт в короткоживущих объектах CryptoKey и по умолчанию не уходит как поле аналитики. Результат можно скопировать, экспортировать или скачать; после закрытия страницы открытый текст в памяти уходит вместе с жизненным циклом браузера, а не остаётся ещё одной копией на сервере.
Это не то же самое, что «положить файл в диск, видимый только мне». Сервер диска обычно читает объект открытым текстом, пока вы сами не зашифруете его на машине и не загрузите уже шифротекст. Локальный приоритет спрашивает: появлялся ли открытый текст в пригодном виде за пределами вашего устройства.
Алгоритм и лимит файла — проверяемые факты
В первой версии симметричный алгоритм один: AES-256-GCM (аутентифицированное шифрование: если шифротекст изменят, расшифровка не пройдёт). Файловый ящик обрабатывает один файл потоком, верхняя граница 5 ГБ, выход .lock (предпочтительно) или .enc, чтобы не держать целое видео в памяти. Это цифры из требований, не прилагательные. Если на странице появится нереализованный переключатель алгоритма, ориентируйтесь на описание продукта, а не на догадки.
Локально не значит «все инструменты без входа»
Где считается и кто может пользоваться — разные оси. Гость без аккаунта может генерировать случайные и читаемые пароли (включая копирование и экспорт). Аудит паролей, приватность, создание Burn-Link, шифрование файлов и хранилище открываются после входа. Путать «локально» с «всему интернету доступны все функции» — ломать матрицу прав.
| Возможность | Без входа | Загружается ли секрет по умолчанию |
|---|---|---|
| Случайный / читаемый пароль | Да | Нет; создаётся в браузере |
| Добавить в хранилище | Предложение войти | — |
| Аудит паролей | Предложение войти | Проверяемый пароль не загружается; стойкость и список утечек — локально |
| Clean Link / маскирование | Предложение войти | URL и текст обрабатываются локально; в analytics не пишутся |
| Создание Burn-Link | Предложение войти | На сервер уходит blob шифротекста, не исходник |
| Чтение Burn-Link | Открыто получателю | Ключ в фрагменте URL #, с HTTP на сервер не уходит |
| Шифрование файлов | Предложение войти | Файл и фраза не загружаются; потоковый AES-256-GCM на машине |
Burn-Link — единственный путь, где сервер временно хранит данные, но хранит шифротекст. Ключ расшифровки стоит в сегменте #: fragment обычно не попадает в HTTP-запрос, в access log чаще только путь. Страница чтения открыта получателю — иначе ему пришлось бы регистрироваться, и разовая передача секрета не сложится. После первого чтения шифротекст по задумке сгорает. Нулевое знание сервера не значит «ничего не храним», а «даже храня, расшифровать нельзя». Здесь достаточно этой договорённости.
Как в панели Network проверить, ушёл ли секрет
Лозунг сам себя не доказывает. Ниже — шаги без доверия к бренду, только встроенные инструменты разработчика. Цель не «доказать отсутствие любых побочных каналов», а поймать онлайн-сервис, который одним кликом POST-ит открытый текст.
Начните с генератора паролей без входа. Откройте страницу, оставайтесь выйденными. И случайные символы, и читаемые фразы должны создаваться сразу. Так вы отделяете «запросы аккаунта» от «уходит ли генерация».
Откройте Network и включите Preserve log. Подойдут Chrome, Edge и Firefox. Сначала фильтр Fetch/XHR, затем все запросы. Preserve log не даст переходу страницы стереть журнал. Запросы sendBeacon и Service Worker тоже видны в панели.
Создайте легко узнаваемый пароль. Увеличьте длину, скопируйте строку в блокнот. В поиске Network вставьте её целиком или фрагмент, который вряд ли случайно встретится в исходниках JS.
Проверьте URL, Query и Request Payload. Если ни один запрос не содержит эту подстроку, как минимум в момент генерации открытый текст не ушёл как содержимое HTTP. Посторонние строки в статическом скрипте не считаются: ищете именно только что созданную.
После входа — тот же метод. Аудит паролей, приватность и шифрование файлов требуют входа. Войдите и снова поищите тестовый пароль или маленький файл. Страница аудита не должна слать проверяемую строку; страница очистки — не POST-ить исходник; файловый ящик — не грузить открытый файл как multipart.
Для Burn-Link смотрите шифротекст и fragment. При создании (нужен вход) на сервер должен уходить шифротекст, не введённый текст. В полной ссылке ключ стоит после #; уберите fragment и смотрите Network — в пути запроса ключа быть не должно. Получатель открывает страницу чтения без входа.
Что этот шаг доказывает и чего не доказывает
Network показывает, попал ли открытый текст в HTTP в этой операции. Он не видит чтение памяти своим же скриптом, вредоносное расширение или страницу с XSS. Для разоблачения массы «онлайн-инструментов» этого достаточно; формальным доказательством это не является.
Что обязано остаться локальным и какие исключения назвать прямо
На машине должны остаться материалы, которые после утечки уже не отозвать: только что созданный пароль, старый пароль на проверку, текст до маскирования, открытый файл, симметричный ключ. Попав в чужой лог, они не исчезнут, даже если вы закроете вкладку.
Уйти с устройства могут данные, криптографически бесполезные для сервера, или данные самой учётной записи. Например blob шифротекста Burn-Link, имя пользователя и пароль входа, статика без секретов. Не смешивайте «вход» и «загрузку открытого текста инструмента»: вход — это уровни доступа. Без аккаунта можно генерировать пароли; аудит, очистка, создание одноразовой ссылки, файлы и хранилище открываются после входа. Учётные данные относятся к аккаунту, а не к вопросу «загружается ли только что созданный пароль».
Выход файлового ящика — скачанный на диск .lock / .enc. Дальше облако, флешка или почта несут уже шифротекст. Если вы положите его в диск, администратор диска по-прежнему не увидит фразу и исходник — при условии, что фраза не лежит открытым текстом в той же передаче или том же письме. Локальное шифрование меняет «админ диска по умолчанию открывает ваши фото», а не физическую ответственность за носитель.
Приватность (Clean Link и маскирование) тоже оставляет URL и текст в браузере: снимает UTM и рекламные параметры, маскирует телефоны и документы, даёт вам сверить результат и уже потом отправить. Исходник не загружается и не становится содержимым события analytics. Если очистка POST-ит весь тикет на сервер и возвращает «уже замаскировано», окно открытого текста на сервере уже открылось — маскирование осталось слоем показа.
Границы и типичные ошибки браузерного шифрования
Локальный приоритет снижает риск на сервере и на пути передачи, а не на компьютере с трояном. Честнее вписать границу в ожидания, чем напечатать три буквы AES в подвале сайта.
Если страницу внедрили, алгоритм не спасёт
XSS или подменённый скрипт читает поля ввода. Web Crypto защищает «операции с ключом на честной странице», а не «вредоносный скрипт уже в том же origin». Опора — same-origin, CSP и целостность фронтенд-цепочки. Из «AES-256-GCM» не следует «значит XSS бесполезен».
Расширения, корпоративный прокси, взгляд через плечо
Расширения браузера и корпоративный SSL-прокси с расшифровкой по-прежнему могут видеть содержимое страницы. Если компания внедрила свой корневой сертификат, Network показывает мир уже после прокси. Потеря устройства, демонстрация экрана, подглядывание — локальный расчёт это не закрывает. Это безопасность конечной точки, её стоит отделять от тезиса «сервер не должен держать открытый текст».
«Не загружаем» ≠ «не выходим в сеть»
Сама страница, скрипты и запросы входа всё равно уходят. Проверяйте, нет ли секретных полей в запросах, а не выдёргивайте кабель. PassAfer также не отправляет проверяемый пароль, исходник очистки или содержимое файла как содержимое аналитики — в событии не должно быть самого секрета.
Не раздувать обещания
Первая версия — AES-256-GCM. Не ждите на странице переключаемого RSA или недоставленных национальных алгоритмов. Не пишите, что страницу чтения Burn-Link нельзя открыть без входа. Не утверждайте, что сервер тоже видит открытый текст или ключ — это против фактов продукта. Честная формулировка локального приоритета: чувствительный расчёт в браузере; открытый текст, ключи и файлы по умолчанию не загружаются; сервер одноразовой ссылки временно хранит только шифротекст.
С чего начать, если хотите проверить сами
Если нужно только убедиться, что генерация не уходит, начните с генератора паролей: вход не нужен, случайные символы и читаемые фразы создаются на машине, копирование и экспорт — тоже. Откройте Network и по шагам выше найдите только что полученную строку. Это самый дешёвый способ почувствовать «окно открытого текста».
У привычных обходов ограничения конкретны. Открытая почта и мессенджеры оставляют ключ в истории обеих сторон, серверном архиве и бэкапах устройств. Облачный диск по умолчанию читаем сервером, пока вы не зашифруете файл сами. Ключ в query почти наверняка попадёт в access log. Это не «неудобно», это встроенное окно открытого текста.
Если нужно сохранить файл, который нельзя класть в диск открытым, после входа откройте шифрование файлов: потоковый AES-256-GCM в браузере, один файл не больше 5 ГБ, скачайте .lock или .enc. Снова снимите трафик и убедитесь, что исходник не ушёл POST. Когда короткий секрет нужно один раз отдать коллеге и не светить ключ в логах сервера — Burn-Link: локальное шифрование, ключ в #, сервер касается только шифротекста, получатель читает без регистрации. Здесь достаточно уметь ответить: после этого клика открытый текст ещё в вашей вкладке?
Слоган PassAfer — «локальное шифрование — безопасность всегда с вами». «С вами» имеет смысл, если считает вкладка, которую вы сейчас смотрите, и вы можете это сверить встроенной панелью браузера.