Każdy obraz wygenerowany przez sztuczną inteligencję w Paincie i aplikacji Zdjęcia zawiera niewidoczny dla oka, unikalny identyfikator, który Microsoft wydaje osobno dla każdego promptu. Odkrył to Xusheng Li, inżynier z firmy Vector 35, rozkładając na czynniki pierwsze bibliotekę Watermarker.dll dołączoną do obu programów.
Kluczowe fakty:
- Inżynier Xusheng Li z firmy Vector 35 odkrył, że Microsoft osadza niewidoczny znak wodny w każdym obrazie generowanym przez AI w aplikacjach Paint i Zdjęcia, za pomocą funkcji WmkWriteWatermark zawartej w bibliotece Watermarker.dll.
- Niewidoczny identyfikator ma stałą długość 16 bajtów i jest unikalny dla każdego promptu, co oznacza, że może być powiązany z konkretnym zapytaniem konkretnego użytkownika.
- Li odkrył również, że Paint korzysta z czterech lokalnych modeli AI w formacie .onnx, szyfrowanych kluczem XOR, a nie – jak można było zakładać – wyłącznie ze zdalnego API.
To nie jest historia o tym, że Microsoft oznacza treści AI. To już wiedzieliśmy i wiemy, dlaczego: od 2 sierpnia obowiązuje artykuł 50 AI Act. Historia zaczyna się w miejscu, w którym oznaczenie przestaje być etykietą „to zrobiła maszyna”, a staje się numerem seryjnym przypisanym do konkretnego zapytania konkretnego użytkownika.
Od ciekawości do Watermarker.dll
Li zajmuje się rewersingiem zawodowo i zajrzał do Painta bez żadnej hipotezy. Spodziewał się, że generowanie obrazów w aplikacji sprowadza się do wywołania zdalnego API. Zamiast tego znalazł cztery lokalne modele w formacie .onnxe, zaszyfrowane prostym XOR-em kluczem Microsoft_2023 w starszej wersji i czterokilobajtowym ciągiem znaków w nowszej. Największy z nich, mager.onnx, ma ponad 15 tysięcy węzłów grafu.
Przy okazji natknął się na plik Watermarker.dll. Paint ma widoczny znak wodny, mały logotyp Copilota w prawym dolnym rogu, ale do dorysowania ikonki nikt nie potrzebuje biblioteki ważącej 1,67 MB. Li sprawdził, co jeszcze siedzi w środku. Znalazł funkcję WmkWriteWatermark, wywoływaną po każdej lokalnej generacji obrazu przez Stable Diffusion, całkowicie niezależną od ustawienia widocznego znaku.
Sam przyznaje, że do pomysłu popchnęła go sierpniowa zapowiedź Anthropic o wszyciu niewidzialnego znaku wodnego w teksty Claude’a. Jedna firma ogłasza znakowanie tekstu, a badacz idzie sprawdzić, czy druga po cichu nie robi tego samego z obrazami. Robi.
Co dokładnie trafia w piksele
Funkcja przyjmuje ładunek o sztywnej długości 16 bajtów. Nie 15, nie 17, dokładnie 16, przy czym kod zwraca dwa różne kody błędu w zależności od tego, czy dane są za krótkie, czy za długie. Szesnaście bajtów to rozmiar identyfikatora GUID i tak właśnie się okazało.
Sposób osadzenia jest przemyślany:
- z GUID-a budowany jest 18-bajtowy komunikat: bajt
0x4c, szesnaście bajtów identyfikatora i suma kontrolna - komunikat rozbijany jest na 144 pojedyncze bity
- każdy bit musi zostać wpisany w obraz co najmniej trzy razy, inaczej operacja kończy się błędem
- obraz musi mieć minimum 192 na 192 piksele
- kodowanie działa na blokach, z operacjami macierzowymi i rozkładem SVD, czyli klasyczna technika adaptacyjna odporna na drobne przekształcenia
Li przetestował funkcję na syntetycznym obrazie 512 na 512 pikseli. Zmieniło się 193 376 z 262 144 pikseli. Gołym okiem nie widać nic.
Ciekawsze jest jednak pochodzenie samego identyfikatora. Zanim Paint uruchomi lokalny model, wysyła prompt na serwer Microsoftu do moderacji. W odpowiedzi dostaje poprawiony prompt, promptGenerationId, watermarkId oraz flagę containsHumanReference, czyli serwerową ocenę, czy zapytanie dotyczy człowieka. I to właśnie watermarkId ląduje w pikselach.
„Twój prompt jest wysyłany do Microsoftu do moderacji, a zwrócony GUID jest kodowany w pikselach” / „the returned GUID is encoded into the pixels”, napisał Li w poście na LinkedInie, cytowanym przez The Register.
Jest jeszcze jeden szczegół, który w mojej ocenie waży najwięcej w całej tej analizie. Przy kolejnym zapytaniu Paint dokłada do żądania pole lastPromptGenerationId z poprzedniej generacji. Sesja twórcza użytkownika jest więc po stronie serwera jawnie połączona w łańcuch.
Ten sam numer wraca w metadanych C2PA
Paint dokłada do zapisanego pliku manifest C2PA, czyli Content Credentials. Li zapisał obraz z Image Creatora i przejrzał chunki PNG. Zaraz za nagłówkiem znalazł blisko 19-kilobajtowy blok caBX z podpisanym manifestem, a w nim asercję c2pa.soft-binding z algorytmem com.microsoft.invismark.1 i wartością identyczną z GUID-em wszytym w piksele.
InvisMark to nie przypadkowa nazwa. Zespół Microsoft Responsible AI opublikował pod tym szyldem pracę naukową opisującą znakowanie obrazów o wysokiej rozdzielczości z ładunkiem do 256 bitów i skutecznością odczytu powyżej 97 procent po typowych przekształceniach pliku. Teraz wiemy, że to nie została na papierze.
Soft binding w standardzie C2PA istnieje po to, żeby dopasować treść do rekordu pochodzenia nawet wtedy, gdy metadane pliku zostaną usunięte. Wytnij manifest, przekonwertuj plik, a znak w pikselach zostaje. Microsoft podpisał tę asercję kryptograficznie.
Nie mam pretensji do Microsoftu o to, że znakuje obrazy. Firma robi dokładnie to, czego wymaga od niej prawo, a nawet więcej, i akurat to więcej jest sensowne technicznie: znak wodny odporny na konwersję pliku jest dużo uczciwszy wobec odbiorcy niż metadane, które znikają po pierwszym wrzuceniu zdjęcia na Facebooka. Problem leży gdzie indziej. AI Act mówi o oznaczeniu maszynowo odczytywalnym, czyli o odpowiedzi na pytanie „czy to zrobiła maszyna”. Nie mówi o unikalnym numerze dla każdej pojedynczej generacji, powiązanym po stronie serwera z kontem, urządzeniem i historią wcześniejszych zapytań. To dwie zupełnie różne rzeczy, choć wyglądają na tę samą funkcję.
Nie twierdzę, że Microsoft buduje bazę do namierzania ludzi po obrazkach z Painta. Twierdzę, że architektura, którą opisał Li, na to pozwala, a użytkownik nie ma jak się o niej dowiedzieć z interfejsu ani z dokumentacji. Producenci drukarek laserowych przerabiali dokładnie ten scenariusz dwadzieścia lat temu i skończyło się awanturą, bo ludzie nie lubią, gdy urządzenie podpisuje ich pracę bez pytania.
Zadaję więc pytanie, na które Microsoft na razie nie odpowiedział: jak długo firma przechowuje powiązanie między
watermarkIda kontem, które wysłało prompt? Bo od tej jednej liczby zależy, czy mówimy o systemie prowenancji treści, czy o systemie identyfikacji autorów.Piotr Wolniewicz, Redaktor Naczelny AIPORT.pl
Dlaczego Paint w ogóle musi znakować lokalnie
Aplikacja ma dwie ścieżki generowania. Image Creator korzysta z Azure OpenAI ImageGen i całą robotę wykonuje chmura: filtrowanie, generowanie, znak wodny, manifest. Paint dostaje gotowy plik.
Cocreator działa inaczej. Na komputerach z certyfikatem Copilot+ obraz powstaje lokalnie na NPU, ale moderacja promptu i podpisanie prowenancji nadal idą przez sieć. Funkcja wymaga konta Microsoft i połączenia z internetem, mimo że samo wnioskowanie odbywa się na urządzeniu. Stąd potrzeba lokalnego kodera znaku wodnego. Chmura nie może wszyć identyfikatora w obraz, którego nigdy nie widziała.
Li ujmuje to zwięźle: „wygenerowane lokalnie” nie oznacza, że cała operacja jest lokalna.
Widać to też w drobiazgu, który łatwo przeoczyć. Po wygenerowaniu obrazu Paint pozwala zapisać plik wyłącznie w formatach PNG, JPEG, GIF i własnym .paint. BMP, format kojarzony z Paintem od trzydziestu lat, znika z listy. Powód jest prozaiczny: specyfikacja C2PA wskazuje BMP jako format, który nie potrafi przenieść manifestu. Gdyby eksport był możliwy, metadane by wyparowały.
Zdjęcia robią to samo, tylko wybaczają błędy
Ta sama biblioteka siedzi w aplikacji Microsoft Photos, pod funkcjami Image Creator i Restyle Image. Różnica dotyczy zachowania w razie awarii. Paint traktuje nieudane wszycie znaku jako błąd całej generacji i nie oddaje użytkownikowi obrazu. Zdjęcia logują komunikat o pominiętym znaku wodnym i zwracają plik mimo wszystko.
Dla producenta to niespójność. Dla użytkownika szukającego obrazu bez identyfikatora to informacja.
Sam Li zresztą studzi emocje wokół obchodzenia mechanizmu. Zmodyfikowanie aplikacji tak, by ominąć moderację i znakowanie, jest jego zdaniem możliwe, tylko nikomu nie daje nowej możliwości, bo Stable Diffusion można uruchomić bezpośrednio, bez żadnej z tych warstw.
Znak wodny jako obowiązek, identyfikator jako nadmiar
Microsoft nie jest sam. Anthropic przy okazji ogłoszenia własnego znaku wodnego podał, że co najmniej 190 dostawców AI zgodziło się przestrzegać europejskich reguł przejrzystości. Meta pracuje nad technologią Content Seal, OpenAI dokłada do swoich obrazów SynthID od Google DeepMind oraz metadane C2PA. Kierunek jest jeden.
Różnica polega na ziarnistości. Znak informujący „to wygenerowała AI” wypełnia obowiązek. Znak mówiący „to wygenerowała AI w odpowiedzi na zapytanie numer 83424621-03cb-40e3-9808-a9fae837156d” wypełnia obowiązek i dokłada coś jeszcze.
Li kończy analizę zdaniem, które w kontekście regulacyjnym brzmi mocniej, niż wygląda: „Te szczegóły niosą oczywiste konsekwencje dla prywatności i prawa do informacji” / „Those details carry obvious privacy and right-to-know implications”. The Register poprosił Microsoft o komentarz i nie otrzymał odpowiedzi przed publikacją.
Skala problemu rośnie razem ze sprzętem. Gartner szacuje, że w 2026 roku komputery z akceleratorami AI odpowiadają za około 55 procent globalnych dostaw pecetów, czyli mniej więcej 143 miliony sztuk rocznie. Po zakończeniu wsparcia Windows 10 w październiku 2025 roku wymiana flot firmowych przyspieszyła. Paint i Zdjęcia są preinstalowane na każdej z tych maszyn.
Polski nadzór ma już nazwę i uprawnienia
U nas ten temat przestał być teoretyczny 2 sierpnia, kiedy zaczął obowiązywać artykuł 50 AI Act. Pisałem już, że obowiązek oznaczania dotknie firmy szerzej, niż zapowiadano, a rozdział ról jest tu podwójny: dostawca narzędzia odpowiada za oznaczenie maszynowe, podmiot stosujący AI za poinformowanie odbiorcy. Za naruszenie grozi kara do 15 milionów euro albo 3 procent światowego obrotu.
Egzekwować będzie Komisja Rozwoju i Bezpieczeństwa Sztucznej Inteligencji, powołana ustawą podpisaną 24 lipca 2026 roku. KRiBSI może prowadzić kontrole, wydawać decyzje, nakładać kary i przyjmować skargi od każdego. Od jesieni ruszają opinie indywidualne i piaskownice regulacyjne.
Dla polskiej firmy, która korzysta z Painta albo Zdjęć do przygotowania grafiki na stronę czy do materiału marketingowego, wynikają z tego trzy praktyczne konsekwencje:
- oznaczenie maszynowe jest już wykonane za was, więc od strony technicznej macie zgodność z art. 50 ust. 2 bez żadnego wysiłku
- prompt, nawet przy generowaniu lokalnym na firmowym laptopie, trafia na serwery Microsoftu razem z identyfikatorami użytkownika i urządzenia, co przy wrażliwych projektach klienckich powinno przejść przez ocenę zgodności z RODO i wewnętrzną politykę bezpieczeństwa informacji
- pytanie, czy sam GUID stanowi dane osobowe, zależy od tego, czy Microsoft utrzymuje powiązanie z kontem, a tego nie ujawnił, więc ryzyka nie da się dziś rzetelnie wycenić
Nie znam polskiej firmy, która analizowałaby ruch sieciowy Painta przed dopuszczeniem go do użytku. Po tej publikacji zespoły bezpieczeństwa mają powód, żeby zacząć.
Źródła i metodologia
Artykuł powstał na podstawie analizy redakcji AIPORT.pl oraz dodatkowych źródeł, w tym oryginalnej pracy badawczej Xusheng Li z dnia 21.08.2026 oraz relacji The Register z 25.08.2026. Kontekst techniczny uzupełniono o dokumentację standardu C2PA, publikację zespołu Microsoft Responsible AI opisującą algorytm InvisMark oraz dane rynkowe Gartnera dotyczące dostaw komputerów z akceleratorami AI w 2026 roku. Doniesienia potwierdzają również Neowin i BigGo. Kontekst regulacyjny opracowano na podstawie tekstu rozporządzenia 2024/1689, Wytycznych Komisji Europejskiej z 20 lipca 2026 roku oraz analizy kancelarii Traple Konarski Podrecki i Wspólnicy. Cytaty Xusheng Li zostały zweryfikowane z oryginalnym anglojęzycznym materiałem źródłowym. Komentarz redakcyjny i ocena kontekstu branżowego: Piotr Wolniewicz, Redaktor Naczelny AIPORT.pl. Artykuł będzie aktualizowany w miarę pojawiania się nowych informacji o znakowaniu obrazów AI w aplikacjach Microsoftu i ewentualnego stanowiska firmy.
