Paint и Photos незаметно метят локально сгенерированные картинки серверным GUID
Исследователь Сюшэн Ли из любопытства решил разобраться, как устроена генерация изображений в Microsoft Paint, и обнаружил больше, чем ожидал. Оказалось, что Windows поставляется с локальными ИИ-моделями (файлы .onnxe — это обычные ONNX, зашифрованные простым XOR), но «локально» здесь не означает «полностью на устройстве».
Невидимая метка вместо видимого логотипа
В Paint есть настройка, добавляющая видимый водяной знак — маленький логотип Copilot в углу. Но внимание автора привлекла подозрительно большая библиотека Watermarker.dll (1,67 МБ). Внутри нашлась отдельная функция WmkWriteWatermark, которая после локальной генерации картинки вносит малозаметные изменения в пиксели: на тестовом изображении 512×512 поменялись около 193 тысяч из 262 тысяч пикселей. Это content-adaptive водяной знак в духе SVD, и отдельная настройка видимой метки им не управляет.
Идентификатор приходит с сервера
Самое интересное — происхождение вшиваемых 16 байт. Это winrt::guid, и берётся он из сети. Прежде чем запустить локальную модель, Paint отправляет промпт и стиль на сервер Azure для модерации. В ответ приходит не только «отредактированный» промпт, но и пара GUID: promptGenerationId и watermarkId. Именно последний и запекается в пиксели. Более того, приложение прикладывает к следующему запросу идентификатор предыдущего, позволяя серверу связывать генерации в цепочку.
Тот же GUID оказывается и в подписанном C2PA-манифесте изображения — в поле c2pa.soft-binding с алгоритмом com.microsoft.invismark.1. То есть манифест на уровне файла и водяной знак на уровне пикселей — два слоя одной системы происхождения: даже если стереть метаданные, картинку можно сопоставить с записью по скрытому знаку.
Почему так устроено
Облачный Image Creator (на движке Azure OpenAI ImageGen) может пометить картинку сам. А вот Cocreator на Copilot+ PC генерирует изображение на локальном NPU — поэтому знак приходится вшивать на устройстве уже после инференса. Показательно, что при сбое WmkWriteWatermark Paint превращает всю генерацию в ошибку и не отдаёт картинку пользователю (Photos в той же ситуации ведёт себя мягче и просто пишет в лог). Список форматов сохранения тоже подстроен под C2PA: доступны PNG, JPEG, GIF и собственный .paint, а классический BMP, не умеющий хранить манифест, исчез.
Microsoft раскрывает, что применяет удалённую фильтрацию контента и добавляет C2PA Content Credentials. Но, отмечает автор, компания нигде не объясняет, что этот идентификатор привязан к модерации промпта и физически присутствует в пикселях — а это уже вопрос приватности и права знать. Ограничить такое поведение теоретически можно, модифицировав приложение, но новой возможности это не даёт: запустить Stable Diffusion без всяких меток и так может кто угодно.
Источник: Hacker News
Комментарии
Войдите, чтобы комментировать.