Как Microsoft paint и photos ставят невидимые метки на ваши локальные изображения

26.08.2026 · 5 мин

Знаете это чувство, когда рисуешь что-то в Paint, нажимаешь «создать с ИИ» и думаешь, что всё происходит локально, на твоей машине, без отправки данных куда-то?

Автор исследования, Сюшэн Ли, решил проверить, как именно работает генерация изображений в Paint. И нашёл то, что заставляет задуматься.

Локальная модель — и всё равно уникальный идентификатор

Microsoft действительно встроила локальные модели в Windows. Это не один большой файл, а четыре модели в формате ONNX:

МОДЕЛИ ДЛЯ ГЕНЕРАЦИИ ИЗОБРАЖЕНИЙ В PAINT
─────────────────────────────────────────
seg.onnxe         23.1 MB    — сегментация
inseg_enc.onnxe   28.0 MB    — кодировщик изображения
inseg_dec.onnxe   16.5 MB    — декодировщик (маски)
mager.onnxe      302.4 MB    — основная модель (Stabe Diffusion)
─────────────────────────────────────────
Расположение: C:\Program Files\WindowsApps\Microsoft.Paint_*\
               PaintApp\
Локальные модели для генерации изображений в Microsoft Paint

Звучит честно: модель на твоём компьютере, изображение генерируется локально. Но есть нюанс.

Что происходит на самом деле

Перед генерацией Paint отправляет текстовый запрос на сервер Microsoft:

https://apsaiservices-a0fqcjc6bzhdcdcd.b02.azurefd.net/
  v1/paint-cocreator/moderate-prompt

Сервер проверяет запрос на безопасность и возвращает JSON с тремя GUID’ами:

{
  "revisedPrompt": "a cobalt blue circle above a tiny orange square",
  "promptGenerationId": "74d9e06b-adea-43ce-85fe-186a26e2e34a",
  "watermarkId": "83424621-03cb-40e3-9808-a9fae837156d",
  "containsHumanReference": false
}

Вот этот watermarkId — уникальный 16-байтовый идентификатор — и встраивается в итоговое изображение. Причём невидимо.

Механизм невидимой метки

Автор исследования разобрал библиотеку Watermarker.dll и нашёл функцию WmkWriteWatermark. Она делает следующее:

ВСТРАИВАНИЕ GUID В ИЗОБРАЖЕНИЕ
──────────────────────────────
Входной GUID:  83424621-03cb-40e3-9808-a9fae837156d
                    │
                    ▼
┌───────────────────────────────────────┐
│  Формирование 18-байтового пакета     │
│  0x4c + 16 байт GUID + 1 байт CRC    │
└───────────────────────────────────────┘
                    │
                    ▼
┌───────────────────────────────────────┐
│  Разложение в 144 бита                │
│  (144 счётчика, по одному на бит)     │
└───────────────────────────────────────┘
                    │
                    ▼
┌───────────────────────────────────────┐
│  Модификация пикселей в блоках 3×5    │
│  ~193 376 изменённых из 262 144       │
│  для изображения 512×512              │
└───────────────────────────────────────┘
                    │
                    ▼
       Выходное изображение с
       встроенным невидимым GUID
──────────────────────────────
GUID встраивается не как метаданные, а через изменения пикселей

Чтобы убедиться в работоспособности, автор даже написал тестовый код, который напрямую вызывал эту функцию. На синтетическом изображении 512×512 изменилось примерно 74% пикселей — и это при том, что глаз ничего не замечает.

Отличие от видимого водяного знака

В настройках Paint есть галочка «добавить водяной знак» — маленький логотип Copilot в углу. Это видимый водяной знак. Он контролируется пользователем.

Невидимый GUID — совсем другое. Настройка видимого водяного знака не влияет на встраивание GUID. Даже если отключить видимый логотип, метка всё равно добавится.

ВИДИМЫЙ vs НЕВИДИМЫЙ ВОДЯНОЙ ЗНАК
────────────────────────────────────
┌─────────────────┐    ┌─────────────────┐
│ Видимый         │    │ Невидимый       │
│ водяной знак    │    │ GUID            │
├─────────────────┤    ├─────────────────┤
│ Логотип Copilot │    │ 18 байт в       │
│ в углу фото     │    │ пикселях        │
│                 │    │                 │
│ Контроль:       │    │ Контроль:       │
│ настройки Paint │    │ НЕТ             │
│                 │    │                 │
│ Наличие:        │    │ Наличие:        │
│ опционально     │    │ ВСЕГДА          │
└─────────────────┘    └─────────────────┘
────────────────────────────────────
Видимый логотип можно отключить, скрытый GUID — нет

Почему это важно

GUID — это не метаданные вроде EXIF, которые легко удалить. Это изменённые пиксели, распределённые по всему изображению. Для удаления такой метки нужно либо существенно исказить картинку, либо применять специальные алгоритмы dewatermarking’а.

Что это значит на практике:

Что это значит для меня

Меня зацепило не столько наличие водяного знака, сколько то, как это сделано. SVD-подобное встраивание в пиксели — серьёзная инженерная работа. Это не побочный эффект, а осознанное архитектурное решение.

Для пользователей Windows это означает: даже если вы генерируете картинку в Paint без интернета на Copilot+ PC с локальной моделью, Microsoft всё равно получит ваш запрос и встроит в результат связываемый идентификатор.

Единственный способ избежать этого — использовать другие инструменты. Но это уже совсем другая история.

Выводы

Ссылки

Дмитрий Полухин — продуктовый дизайнер. Пишу про разработку, AI и дизайн интерфейсов. Обо мне, контакты и профили.