וואלהשני מחבלים שקידמו מתווי טרור נעצרו בכפר קבאטיהDaily MaverickFUTURE INVESTMENT: Thrive by Five uses data to drive smarter investment in early childhoodESPN Deportes¿Quién es Joshua Báez? El dominicano del histórico debut de 3 jonronesESPNWhich NFL teams are in the best shape for the next three seasons? 1-32 projections for 2027-29The Jerusalem PostHealth Min. reviews possible sperm donor genetic mismatch at Assuta Medical Center, Tel AvivRolling StoneTaylor Swift Can’t Stop Listening to Phoebe Bridgers’ New AlbumColliderAll 7 X-Men Actors Announced at D23kickerAwoniyi verstärkt PL-Aufsteiger - Milosevic vor VfB-AbgangLa PresseAffaire d’espionnage à l’OTAN | Des auditions sur le processus de contrôle de sécurité auront lieuThe Hollywood Reporter‘60 Minutes’ Adds The New Yorker’s Ariel Levy as CBS Series Keeps Staffing UpХабрТочка GANSAPressing degli Usa sul piano Gaza, Trump: 'Basta raid sulla Striscia'
The Daily Newsstand · Free, Always
Monday, August 17, 2026

Маскируем чувствительные данные при отправке в ИИ‑чат. Бесплатное приложение

Translate

ИИ‑чаты стали рабочим инструментом наравне с почтой — а вместе с ними появился новый канал утечек, которого три года назад не существовало. Договоры, резюме, пароли и клиентские данные уезжают на чужие серверы не через взлом, а через обычное поле ввода. Блокировать доступ пробовали многие — люди просто уходят на личные устройства, и риск становится невидимым.

Мы решили задачу иначе: расширение для браузера, которое перед отправкой заменяет чувствительные данные обезличенными метками, а ответ ИИ расшифровывает обратно — прямо на экране, незаметно для человека.

В статье расскажу, какие подходы мы перепробовали и почему они не сработали, как выглядит путь пользователя и что у решения под капотом — от контрольных сумм до локального распознавания сканов.

С чего всё началось

Проблема типовая, и она есть в любой организации, где ИИ не заблокирован (а часто и там, где заблокирован — просто с личных телефонов). Достаточно представить обычный рабочий день:

  • HR вставляет резюме кандидата целиком — «сделай выжимку». В резюме телефон, почта, дата рождения, иногда паспорт.

  • Юрист загружает договор — «перепиши третий раздел попроще». В договоре реквизиты обеих сторон, счета, подписанты.

  • Бухгалтер кидает табличку — «посчитай среднее по отделам». В табличке фамилии и зарплаты.

  • Айтишник вставляет конфиг, который не заводится, — вместе с паролем от боевой базы, потому что пароль в этом конфиге и лежит.

Никто из них не вредитель. Каждый просто делает свою работу быстрее — и в этом вся коварность: граница «можно/нельзя» в момент вставки не видна. Человек вставил «текст договора», а не «персональные данные третьих лиц».

А дальше происходит то, о чём мало кто задумывается. Всё отправленное остаётся в истории чата на чужом сервере. Попадает в логи провайдера. Иногда — в обучающие выборки. И главное: кнопки «удалить моё сообщение с ваших бэкапов» не существует. Отправленное не возвращается.

Что мы перепробовали

Прежде чем писать своё, мы прошли классический путь. Он короткий, и каждый шаг чему‑то научил.

1. Менять данные руками. Просим людей заменять «Иванова» на «Клиента N» перед отправкой. Аккуратный человек делает так три дня, потом устаёт. А номер счёта в середине таблицы на четыреста строк руками не найдёт и не заменит вообще никто. Отпало.

2. Регулярка в скрипте. Написать поиск телефонов, ИНН и карт — кажется, дело на вечер. Мы честно попробовали, и выяснилось много весёлого:

  • \b в JavaScript не считает кириллицу буквами — «граница слова» в русском тексте просто не работает;

  • любые десять цифр подряд радостно объявляются ИНН, и скрипт кричит на каждый номер накладной;

  • «Иванову Ивану Петровичу» и «Иванов Иван Петрович» — для регулярки два разных человека.

Пару недель такой жизни — и люди отключают защиту, потому что она мешает. Ложные срабатывания убивают доверие быстрее, чем пропуски.

3. Внешние анонимизаторы. Есть сервисы, которые принимают текст по API, находят чувствительное у себя на сервере и возвращают замаскированный вариант. Точность приличная. Но остановитесь на секунду: чтобы данные не утекли в ИИ, мы отправляем их... в другой внешний сервис. Ту же самую проблему мы не решили — мы её переименовали. Плюс задержка на каждый запрос, плюс ещё один договор на обработку персональных данных.

Из этих проб сложились три требования к решению:

  1. Работает само. Не по кнопке — дисциплина не масштабируется.

  2. Работает локально. Данные не покидают компьютер вообще: ни в ИИ, ни «к нам на сервер».

  3. Не мешает. Человек продолжает пользоваться любимым чатом как раньше.

Из этих трёх пунктов расширение для браузера вывелось почти автоматически: оно живёт там же, где живёт проблема, — на вкладке с ИИ‑чатом.

Как это выглядит для человека

Путь пользователя состоит из четырёх шагов, и три из них происходят без его участия:

1. Отправка. Сотрудник пишет сообщение и жмёт «отправить». Расширение перехватывает отправку и за долю секунды проверяет текст.

2. Находки. Если нашлось чувствительное — появляется окно: вот что обнаружено (ФИО, карта, ИНН). Один клик — «Анонимизировать и отправить».

3. Маскирование. Каждое значение получает псевдоним, и на сервер ИИ уходит текст с метками:

  1. // человек написал: "Составь ответ клиенту: Иванов Иван Петрович, карта 2200 2404 0000 0002, почта i.ivanov@mail.ru — оплата прошла дважды" // на сервер ИИ ушло: "Составь ответ клиенту: [user_qhb6tm], карта [card_348zsg], почта [email_p8xw2n] — оплата прошла дважды"

ИИ спокойно работает с такой заготовкой — чтобы составить ответ про двойную оплату, ему не нужен настоящий номер карты. Отвечает он тоже метками: «Уважаемый [user_qhb6tm], возврат по карте [card_348zsg]...».

4. Расшифровка. Расширение на лету подставляет в ответ настоящие значения — но только на экране пользователя. Человек читает нормальный текст с именем и номером, а на сервере ИИ как лежали метки, так и лежат. Словарь соответствий «оригинал ↔ псевдоним» живёт в памяти браузера и умирает вместе с ним.

Для недоверчивых есть режим «Показать псевдонимы» — он снимает расшифровку и показывает ровно то, что физически ушло на сервер. Проверить можно в один клик, не выключая защиту.

Теперь как это устроено внутри

Хабр — площадка техническая, так что немного подробностей. Движок — это набор категорий (сейчас их 33), каждая описана декларативно: шаблоны, валидатор, приоритет, префикс метки:

inn: {
  patterns: ['(?<!\\d)\\d{10}(?!\\d)', '(?<!\\d)\\d{12}(?!\\d)'],
  postFilter: innChecksum,   // контрольные числа по алгоритму ФНС
  prefix: 'inn',
  priority: 80
}

Три решения, которые в итоге определили качество, — и до каждого мы дошли через грабли.

Валидация вместо угадывания. Совпадение с шаблоном — только кандидат:

  • ИНН проверяется контрольными числами, карта — алгоритмом Луна, СНИЛС и ОГРН — своими суммами. Случайное десятизначное число находкой не станет.

  • С паролями задача обратная — отсеять заглушки: кандидат проходит проверку энтропии и словарь стоп‑значений, чтобы password: password из документации не будил детектор.

Нормализация. Русский язык склоняется. «Иванову Ивану Петровичу» в начале письма и «Иванов Иван Петрович» в конце — один человек, и метку они должны получить одну, иначе ИИ решит, что персонажей двое, и ответ развалится. Поэтому ФИО перед выдачей метки приводится к именительному падежу (род определяется по отчеству).

Толерантный разбор ответа. Сюрприз, которого мы не ждали: модели искажают метки. Возвращают [ORG_T3WNFD] вместо [org_t3wnfd], вставляют пробелы, оборачивают в markdown, а однажды мы поймали кириллическую «о» вместо латинской — гомоглиф, глазами не отличишь. Строгий парсер терял 5 из 11 реалистичных искажений; после того, как разбор стал нечувствительным к регистру, пробелам и гомоглифам — 11 из 11. Даже алфавит меток подчинён этому: шесть символов в Crockford Base32, без букв i, l, o, u — чтобы «i превратилась в 1» разбиралось однозначно.

По скорости всё скучно, и это хорошо:

Что

Сколько

Типовое сообщение

доли миллисекунды

Нагрузочный потолок: 0,9 МБ текста, 45 000 сущностей

~150 мс

Модели/загрузки при старте

нет — движок готов сразу

Интернет

не нужен: отключите сеть — маскирование продолжит работать

Файлы и сканы: где было страшнее всего

Довольно быстро стало ясно, что самое чувствительное уходит в ИИ не сообщениями, а вложениями. Договор — это файл. Табличка — файл. Поэтому расширение проверяет и их:

  • 70+ текстовых форматов — от CSV и JSON до конфигов, .env и дампов почты;

  • docx, xlsx, pptx — обезличенная копия создаётся с сохранением форматирования: таблицы, стили и колонтитулы на месте, заменены только значения. В ИИ уходит договор.anon.docx, который выглядит как оригинал;

  • PDF — текстовый слой проверяется за миллисекунды;

  • сканы и фото документов — распознаются встроенным офлайн‑движком, прямо на компьютере.

Про последний пункт — подробнее, потому что именно тут было страшнее всего. Юристы живут в PDF‑сканах, и сказать им «этот файл мы проверить не можем» означало оставить самую горячую категорию документов без защиты. Распознавать в облаке нельзя по очевидной причине: фото паспорта не должно ездить на чужой сервер даже ради благого дела. Значит — OCR на клиенте.

Когда произносишь «OCR в браузере», собеседник обычно представляет, как ноутбук взлетает вентиляторами и умирает на полчаса. Мы тоже этого боялись, поэтому перед тем как писать код, сели замерять. Реальные цифры с обычного рабочего ноутбука:

Что распознаём

Время

Память (пик)

Скан A4, 200 dpi

1,6 с

+76 МБ

Скриншот 1920×1080

0,9 с

+66 МБ

Фото телефоном 3024×4032

2,0 с

+153 МБ

10 страниц A4 подряд

14,4 с (~1,4 с/стр.)

222 МБ — не растёт от числа страниц

Занято при этом чуть больше одного ядра — распознавание идёт в одном воркере, машина остаётся отзывчивой. Память не накапливается: воркер создаётся под задачу и уничтожается после неё, пик определяется размером одной страницы, а не толщиной документа. Двадцатистраничный скан договора — это примерно полминуты с прогресс‑баром, в течение которых спокойно работаешь в соседней вкладке.

Пара находок из этих же замеров. Уменьшение картинки до 2000 px по длинной стороне оказалось бесплатным выигрышем — быстрее и точнее, потому что модель обучалась на типографских размерах текста. А сканы, сохранённые «боком», спасаются автоповтором с поворотами: плохая страница обходится в семь раз дороже хорошей, но читается — уверенность распознавания на живом тесте выросла с 37 до 94 из 100.

Сравнение с другими расширениями

Ниша браузерных маскировщиков существует, и мы разбирали конкурентов руками — без имён, но по делу:

AI Guard

Другие расширения

Срабатывание

автоматически при отправке

чаще вручную: кнопка или горячая клавиша

Российские идентификаторы (ИНН, СНИЛС, ОГРН, карты)

с проверкой контрольных сумм

обычно нет или «по виду», без валидации

ФИО во всех падежах → одна метка

да

редко

Технические секреты (ключи API, строки подключения, OTP)

да, включая вендорные форматы

как правило нет

Расшифровка ответа на экране

автоматически, с подсветкой

часто отдельным действием

Проверка файлов

70+ форматов; docx/xlsx/pptx с сохранением форматирования

обычно «запретить вложение», реже — за отдельную плату

Сканы и фото (OCR)

локально, офлайн

не встречали ни у кого; в лучшем случае облако

Работа без интернета

да, полностью

иногда докачивают модель при старте

Свои правила и профиль организации

да, без кода

редко

Управление на парк машин (GPO/Intune)

да

редко

Попробовать

Бесплатная версия лежит в Chrome Web Store — вся текстовая защита, 33 категории, свои правила, три режима работы. Версия с файлами, распознаванием сканов и раздачей настроек — по запросу.

И просьба: если найдёте текст, на котором детектор ошибается, — напишите в комментариях. У нас правило: каждый живой дефект заканчивается исправлением и регресс‑тестом. Такие сообщения двигают качество быстрее любых внутренних планов.

View the original on Хабр

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.