O desenvolvedor de software Xusheng Li, da Vector 35, publicou em 20 de agosto uma análise de engenharia reversa concluindo que o Paint e o Fotos, aplicativos nativos do Windows, ao gerar imagens com IA, codificam nos pixels um GUID de 16 bytes vindo de um servidor da Microsoft, criando uma marca d'água invisível a olho nu. Só depois que o The Register deu seguimento à reportagem em 25 de agosto o caso ganhou repercussão entre desenvolvedores.
Segundo o desmonte de Li, o processo começa no instante em que o prompt sai do dispositivo do usuário. Ao digitar uma descrição no Cocreator do Paint, o programa envia o prompt para um endpoint do Azure Front Door da Microsoft para revisão; o servidor responde com três coisas: um prompt revisado, um promptGenerationId e um valor chamado watermarkId. O watermarkId é justamente o GUID que depois é gravado nos pixels.
Como a marca d'água é embutida
O componente responsável pela codificação se chama Watermarker.dll, com 1,67 MB, acompanhado de um arquivo de modelo criptografado de 302,4 MB chamado mager.onnxe. O GUID de 16 bytes recebe um marcador 0x4c no início e um checksum no fim, totalizando 18 bytes, que se expandem em 144 bits. Cada bit precisa de pelo menos um bloco de pixels de 8×8 para ser carregado, então uma imagem só pode receber a marca d'água se tiver no mínimo 192×192 pixels.
O custo não é pequeno. Li contabilizou, numa imagem de 512×512, que dos 262 mil pixels totais, cerca de 193 mil foram alterados — cerca de 74%. A alteração usa um algoritmo do tipo SVD por blocos, adaptativo ao conteúdo, imperceptível a olho nu, mas que de fato reescreve mais da metade da imagem.
O mesmo GUID também é gravado, por soft-binding, nos metadados C2PA Content Credentials, com o identificador de algoritmo com.microsoft.invismark.1, assinado pela Microsoft. Uma cópia fica nos pixels, outra nos metadados — as duas se sustentam mutuamente: se os metadados C2PA forem removidos, a marca d'água nos pixels continua lá.
Os formatos suportados são PNG, JPEG, GIF e o formato próprio do Paint, .paint. O BMP fica de fora; Li avalia que é porque o BMP não comporta um manifesto C2PA completo.
Duas posturas diferentes
Paint e Fotos tratam de forma diferente uma falha na aplicação da marca d'água, e essa diferença revela bastante:
- Paint: se a marca d'água falha, toda a geração é considerada uma falha e a imagem simplesmente não é entregue ao usuário.
- Fotos: apenas registra um erro no log e mesmo assim entrega a imagem sem marca d'água normalmente.
O Image Creator e o Restyle Image, dentro do Fotos, usam a mesma Watermarker.dll. A postura do Paint — "melhor não gerar do que gerar sem marca d'água" — mostra que, na lógica de produto da Microsoft, a marca d'água é uma etapa necessária do processo de geração, não um item opcional adicionado depois.
Li também notou um detalhe: o Paint envia o promptGenerationId da geração anterior como lastPromptGenerationId junto com a próxima solicitação de revisão. Gerações consecutivas acabam sendo explicitamente encadeadas pelo servidor.
A questão da conexão com a internet
O ponto mais fácil de mal-entender está nos Copilot+ PCs. Essas máquinas têm NPU local e a geração de imagem realmente roda no próprio dispositivo — a Microsoft sempre usou "geração local" como argumento de venda. Mas tanto a revisão do prompt quanto a assinatura de proveniência acontecem na nuvem: o GUID precisa vir do servidor, e a assinatura C2PA precisa ser feita pela Microsoft. A imagem é desenhada localmente, mas o passe é emitido pela rede.
Do ponto de vista de privacidade, a conclusão não é complicada: se a Microsoft conseguir associar cada prompt à conta que o enviou, em teoria, ao encontrar uma imagem vazada, basta rastrear a marca d'água para descobrir quem a gerou e em qual geração. A crítica de Li não é contra a tecnologia de marca d'água em si, mas contra a falta de transparência adequada — a Microsoft já falou publicamente sobre suas medidas de segurança em IA, mas nunca deixou claro que o GUID no manifesto C2PA está vinculado ao prompt do usuário. O The Register procurou a Microsoft para comentar e, até o fechamento da matéria, não obteve resposta.
A linha entre rastreabilidade e rastreamento
As exigências de transparência da União Europeia para conteúdo gerado por IA se concentram em "deixar as pessoas saberem que aquilo foi gerado por IA". Padrões como o C2PA também foram criados para isso: indicar origem e forma de geração. A abordagem da Microsoft vai um passo além da simples rotulagem — atribui a cada geração um número único.
A implementação técnica das duas coisas é quase idêntica, mas o propósito é bem diferente. Fazendo as contas: para diferenciar informação binária do tipo "gerado por IA ou não" bastaria 1 bit; um GUID de 16 bytes tem 2^128 valores possíveis, e a largura extra só serve para codificar algo muito mais granular. Essa própria largura de bits já denuncia a intenção do design — não é uma etiqueta de conteúdo, é um documento de identidade para cada evento de geração.
Para o usuário comum do Windows, o impacto imediato é limitado — a maioria não vai usar imagens geradas no Paint para algo que exija anonimato. Mas para quem usa o Paint como ferramenta do dia a dia, uma coisa já é certa: geração local não significa ausência de rastro local, e cada imagem carrega consigo um número que só a Microsoft sabe explicar.
Fontes: relatório de engenharia reversa publicado por Xusheng Li, The Register, CocoLoop; verificados o tamanho em bytes do GUID, o número de bits da marca d'água, a quantidade de pixels alterados numa imagem de 512×512 e a grafia do identificador de algoritmo C2PA.