Исследователь Сюшэн Ли разобрал, как работает встроенная в Windows генерация картинок в Paint и в приложении «Фотографии». Его разбор даёт неожиданную для многих картину.
Первое. «Считается локально» не означает «остаётся у вас». Текст запроса в любом случае уходит на удалённый сервер на проверку. Формулировка автора: «„Сгенерировано локально“ не означает, что вся операция локальная. Microsoft получает и модерирует запрос, а затем выдаёт уникальный идентификатор, который Paint вшивает в локально созданное изображение».
Второе. Обратно приходит шестнадцатибайтовый идентификатор, и он вшивается прямо в пиксели невидимым водяным знаком. На тестовой картинке 512 на 512 точек изменились 193 376 пикселей из 262 144. Тот же идентификатор дублируется в подписанных сведениях о происхождении внутри файла.
Третье, и это важно для тех, кто искал переключатель. Видимый водяной знак — логотип в углу — и невидимый знак это две разные вещи. Настройка в интерфейсе управляет только видимым. Отключить невидимый нельзя, а если его не удалось нанести, Paint вообще отменяет генерацию и картинку не отдаёт.
Четвёртое, самое любопытное. При следующей генерации Paint отправляет на сервер идентификатор предыдущей — то есть последовательные обращения можно связать между собой явным образом.
И пятое: сохранить результат можно только в те форматы, которые поддерживают сведения о происхождении, — PNG, JPEG, GIF и внутренний формат редактора. Обычный BMP в списке отсутствует.
Теперь границы, за которые выходить нельзя. Что именно кодирует идентификатор — привязан ли он к учётной записи, к устройству или только к записи запроса на сервере — неизвестно. Автор формулирует осторожно: он связан с запросом на модерацию. Сколько эти данные хранятся, тоже неизвестно. Microsoft добавление сведений о происхождении документирует, а вот то, что внутри лежит идентификатор, связанный с запросом, — нет. На просьбу прокомментировать компания не ответила.
Сам автор не называет это ни уязвимостью, ни сокрытием и добавляет здравую мысль: обойти и модерацию, и знак, судя по всему, можно, но это не даёт новых возможностей — открытые модели и так запускаются локально без того и другого.