Векторы — это не хэши: как злоумышленники читают векторные базы в обратную сторону
На защите архитектуры нового ИИ-ассистента для финансовой компании директор по безопасности задает прямой вопрос: где именно будут храниться заметки клиентских менеджеров о портфелях инвесторов?
Ведущий разработчик указывает на облачную векторную базу данных на схеме и уверенно отвечает: «Сам текст вообще не покидает наш закрытый контур. Во внешнее облако улетают только массивы из 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 в Цюрих"
- Начальная гипотеза: Легкая нейросеть-декодер смотрит на украденный вектор
v_targetи генерирует приблизительную фразу, попадающую в нужный смысловой район карты. - Вычисление геометрической ошибки: Атакующий пропускает эту черновую фразу через модель эмбеддингов, получает вектор
v_guessи вычитает один вектор из другого, находя точный вектор промаха в многомерном пространстве. - Пословная доводка: Корректирующий трансформер точечно меняет слова и имена в черновике, проверяя, какая замена уменьшает угол между
v_guessиv_target. За 20–50 шагов текст сходится к оригинальному предложению, восстанавливая фамилии, даты и финансовые показатели.
Три архитектурные привычки, которые открывают базу для чтения
Компании регулярно оставляют векторные индексы без защиты, потому что регламенты безопасности отстают от векторной математики:
- Удаление текста без очистки персональных данных: Разработчики удаляют поле
textиз метаданных облачной векторной базы, чтобы пройти формальную проверку безопасности, но оставляют сырые массивыFloat32в открытом виде. - Логирование векторов в системы мониторинга: Команды отправляют векторы пользовательских запросов в сторонние сервисы наблюдаемости для отладки качества поиска, фактически сливая обратимые клиентские запросы во внешние логи.
- Использование стандартных моделей без модификаций: Когда компания строит индекс на публичном коммерческом API или популярной открытой модели, у атакующего заранее есть точная математическая карта для запуска цикла инверсии.
Как защитить координатное пространство
Безопасная архитектура RAG требует относиться к каждому массиву векторов ровно с тем же уровнем секретности, что и к исходным документам:
- Очистка PII до векторизации: Никогда не отправляйте паспортные данные, номера счетов и фамилии клиентов в модель эмбеддингов в сыром виде. Прогоняйте текст через детерминированные регулярные выражения и NER-парсеры до создания вектора, заменяя чувствительные сущности типизированными маркерами (
[CLIENT_ID_884]). - Квантование и инъекция координатного шума: Алгоритмы инверсии опираются на высокую точность 32-битных чисел с плавающей точкой (
Float32), чтобы нащупывать градиент к нужному слову. Сжатие векторов до целочисленныхInt8, бинарное квантование или добавление калиброванного гауссовского шума снижает точность поиска менее чем на 1%, но полностью разрушает тонкие математические градиенты, необходимые для восстановления точных имен и цифр. - Шифрование на уровне индекса и изоляция тенантов: Используйте собственные ключи шифрования (CMK) и строгую изоляцию коллекций. Таблица векторов в Qdrant, Pinecone или pgvector — это не обезличенная статистика, а обратимая копия вашей корпоративной базы знаний.
Приходилось ли вам слышать от подрядчиков или коллег аргумент, что их ИИ-хранилище полностью безопасно, потому что «мы храним в облаке только векторы, а не сам текст»?