← Назад в блог

Векторы — это не хэши: как злоумышленники читают векторные базы в обратную сторону

13 октября 2026 г. · 5 мин чтения
Векторы — это не хэши: как злоумышленники читают векторные базы в обратную сторону - Векторы — это не хэши. Как атаки инверсии эмбеддингов восстанавливают исходный текст, имена и коммерческие тайны напрямую из координат векторной базы.

На защите архитектуры нового ИИ-ассистента для финансовой компании директор по безопасности задает прямой вопрос: где именно будут храниться заметки клиентских менеджеров о портфелях инвесторов?

Ведущий разработчик указывает на облачную векторную базу данных на схеме и уверенно отвечает: «Сам текст вообще не покидает наш закрытый контур. Во внешнее облако улетают только массивы из 1536 чисел с плавающей точкой на каждый абзац. Даже если подрядчика взломают, хакеры получат лишь бесполезные таблицы десятичных дробей».

Отдел информационной безопасности подписывает согласование. Поскольку в базе нет открытого текста, команда не включает дополнительное шифрование полей, складывает резервные копии индексов в тестовые бакеты и открывает доступ внешним аналитикам.

Спустя полгода дамп тестовой базы утекает в сеть. С помощью открытой модели инверсии злоумышленники прогоняют массивы из 1536 чисел через обычную видеокарту и восстанавливают имена клиентов, суммы активов и детали готовящихся сделок с точностью 89% слово в слово.

Эта уязвимость называется атакой инверсии эмбеддингов (Embedding Inversion Attack).

Кухонный блендер против GPS-координаты

Многие инженерные команды относятся к векторным эмбеддингам так, словно это криптографические хэши вроде SHA-256. Путаница возникает из-за внешнего сходства: на вход математической функции подается осмысленное предложение, а на выходе получается нечитаемый ряд цифр.

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

Векторный эмбеддинг устроен прямо противоположным образом — это булавка с GPS-координатами на подробной карте. Вся суть модели эмбеддингов состоит в сохранении смысловой близости: похожие по смыслу фразы обязаны ложиться в соседние точки пространства. Если заменить в предложении одно слово, вектор сместится лишь на долю миллиметра.

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

Бытовая аналогия с картой дает трещину в одном важном месте: двухмерная координата на карте города покажет только здание, но не расскажет, о чем говорят внутри. А вектор из 1536 или 3072 чисел обладает такой геометрической емкостью, что кодирует точный словарный состав фразы из тридцати слов, включая имена собственные и суммы контрактов.

Как итеративная инверсия возвращает текст

Исследователи безопасности (в частности, авторы архитектуры Vec2Text) доказали, что для разворота плотных векторов обратно в текст не нужен доступ к промптам компании — достаточно украденного массива чисел и доступа к стандартной модели эмбеддингов (например, OpenAI text-embedding-3-small или популярному открытому энкодеру с HuggingFace):

Шаг 1 (Первая догадка):    Украденный вектор v_target  -->  Базовый декодер  -->  "Клиент обсуждал налоги"
Шаг 2 (Повторный вектор):  "Клиент обсуждал..."        -->  Эмбеддер         -->  Вектор догадки v_guess
Шаг 3 (Поправка дельты):   Разница (v_target - v_guess) сдвигает слова ближе к цели
Шаг 4 (Итерация 40):       Косинусное сходство 0.999   -->  "Клиент Елена Ростова перевела 4.2M в Цюрих"
  1. Начальная гипотеза: Легкая нейросеть-декодер смотрит на украденный вектор v_target и генерирует приблизительную фразу, попадающую в нужный смысловой район карты.
  2. Вычисление геометрической ошибки: Атакующий пропускает эту черновую фразу через модель эмбеддингов, получает вектор v_guess и вычитает один вектор из другого, находя точный вектор промаха в многомерном пространстве.
  3. Пословная доводка: Корректирующий трансформер точечно меняет слова и имена в черновике, проверяя, какая замена уменьшает угол между v_guess и v_target. За 20–50 шагов текст сходится к оригинальному предложению, восстанавливая фамилии, даты и финансовые показатели.

Три архитектурные привычки, которые открывают базу для чтения

Компании регулярно оставляют векторные индексы без защиты, потому что регламенты безопасности отстают от векторной математики:

  1. Удаление текста без очистки персональных данных: Разработчики удаляют поле text из метаданных облачной векторной базы, чтобы пройти формальную проверку безопасности, но оставляют сырые массивы Float32 в открытом виде.
  2. Логирование векторов в системы мониторинга: Команды отправляют векторы пользовательских запросов в сторонние сервисы наблюдаемости для отладки качества поиска, фактически сливая обратимые клиентские запросы во внешние логи.
  3. Использование стандартных моделей без модификаций: Когда компания строит индекс на публичном коммерческом API или популярной открытой модели, у атакующего заранее есть точная математическая карта для запуска цикла инверсии.

Как защитить координатное пространство

Безопасная архитектура RAG требует относиться к каждому массиву векторов ровно с тем же уровнем секретности, что и к исходным документам:

  1. Очистка PII до векторизации: Никогда не отправляйте паспортные данные, номера счетов и фамилии клиентов в модель эмбеддингов в сыром виде. Прогоняйте текст через детерминированные регулярные выражения и NER-парсеры до создания вектора, заменяя чувствительные сущности типизированными маркерами ([CLIENT_ID_884]).
  2. Квантование и инъекция координатного шума: Алгоритмы инверсии опираются на высокую точность 32-битных чисел с плавающей точкой (Float32), чтобы нащупывать градиент к нужному слову. Сжатие векторов до целочисленных Int8, бинарное квантование или добавление калиброванного гауссовского шума снижает точность поиска менее чем на 1%, но полностью разрушает тонкие математические градиенты, необходимые для восстановления точных имен и цифр.
  3. Шифрование на уровне индекса и изоляция тенантов: Используйте собственные ключи шифрования (CMK) и строгую изоляцию коллекций. Таблица векторов в Qdrant, Pinecone или pgvector — это не обезличенная статистика, а обратимая копия вашей корпоративной базы знаний.

Приходилось ли вам слышать от подрядчиков или коллег аргумент, что их ИИ-хранилище полностью безопасно, потому что «мы храним в облаке только векторы, а не сам текст»?

Есть проект на прицеле?

Давайте обсудим, как мы можем помочь.

Есть идея проекта? →