drošība · 5 min · 24.08.2026

Paint iestrādā ģenerētā attēla pikseļos 18 baitu GUID, ko izsniedz Microsoft serveris

Microsoft Paint pirms attēla ģenerēšanas aizsūta lietotāja uzvedni uz Microsoft serveri, saņem atpakaļ 16 baitu GUID un ieraksta to gatavā attēla pikseļos. Identifikators paliek attēlā arī tad, kad metadati ir nodzēsti. Reverso inženieriju veica Sjušens Li, kurš 23. augustā publicēja Watermarker.dll analīzi ar funkciju nosaukumiem, tīkla pieprasījumiem un konkrētu testa GUID.

Microsoft publiski apraksta divas lietas. Uzvednes tiek filtrētas mākonī. Ģenerētajos attēlos ir C2PA satura akreditācija. Servera izsniegtais GUID, tā piesaiste konkrētai uzvednei un iestrādāšana pašos pikseļos dokumentācijā neparādās.

Kas ir iekšā Watermarker.dll

Li sāka ar to, ka Paint instalācijā pamanīja neproporcionāli lielu failu. Watermarker.dll aizņem 1,67 MB. Redzama Copilot logotipa uzlikšanai tik daudz koda nevajag. Bibliotēkā ir funkcija WmkWriteWatermark(), ko izsauc Paint::AI::AddWatermark() no PaintAIManager.dll. Otrā funkcija kā argumentu saņem GUID.

Iestrādājamā krava ir 18 baiti: viens marķiera baits 0x4c, tad 16 GUID baiti, tad viens kontrolsummas baits, kas ir GUID baitu summa pēc dalīšanas ar 256. Kopā sanāk 144 biti. Katrs bits attēlā tiek ierakstīts vismaz trīs vietās, tāpēc attēlam jābūt vismaz 192×192 pikseļus lielam. Ja vietas nepietiek, funkcija atgriež kļūdu −8.

Ap ūdenszīmi Paint mapē ir arī četri šifrēti ONNX modeļi, lielākais no tiem 302,4 MB. Atšifrēšanas atslēga versijā 1.0.80 bija virkne “Microsoft_2023”. Versijā 1.0.81 tā ir 4096 baitus gara.

Lokālā ģenerēšana nav bezsaistes ģenerēšana

Pirms Cocreator sāk rēķināt attēlu uz ierīces NPU, Paint nosūta POST pieprasījumu uz galapunktu /v1/paint-cocreator/moderate-prompt Azure Front Door domēnā. Pieprasījumā ir uzvedne, izvēlētais stils un iepriekšējās ģenerēšanas identifikators. Atbildē serveris atdod četrus laukus: revisedPrompt, promptGenerationId, watermarkId un containsHumanReference.

Pikseļos nonāk watermarkId. Li testā ar uzvedni par kobaltzilu apli virs maza oranža kvadrāta serveris atdeva vērtību 83424621-03cb-40e3-9808-a9fae837156d. Tā pati vērtība parādās arī attēla C2PA manifestā:

“c2pa.soft-binding”: { “alg”: “com.microsoft.invismark.1”, “value”: “83424621-03cb-40e3-9808-a9fae837156d” }

Manifestu no faila var izmest ar jebkuru metadatu rīku. Pikseļus tik viegli nevar. Tieši tāpēc C2PA specifikācijā šo lauku sauc par mīksto saiti: tas ir ceļš, kā atrast provenances ierakstu tad, kad metadati ir pazuduši.

Kā izskatās attēls pēc ūdenszīmes uzlikšanas

Kodēšana strādā bloku līmenī un pielāgojas saturam. Li kodā atrada SVD stila matricu operācijas ar 3×5 matricām un kvantēšanas konstantes 24,0, 0,25, 0,5 un 0,2. Praktiskais rezultāts ir tāds, ka mainās gandrīz viss attēls. 512×512 pikseļu BGRA testā pēc ūdenszīmes uzlikšanas atšķīrās 193 376 pikseļi no 262 144, tas ir 73,8 %.

Ar aci izmaiņas nav redzamas. Ar failu salīdzinātāju gan. Paint saglabāšanas dialogā piedāvā tikai tos formātus, kas nes C2PA manifestu: PNG, JPEG, GIF un iekšējo .paint. BMP sarakstā nav, jo BMP manifestu neuzglabātu.

Paint un Photos rīkojas atšķirīgi

Ja WmkWriteWatermark() atgriež kļūdu, Paint uzskata, ka neizdevusies visa ģenerēšana. Lietotājs attēlu nesaņem vispār. Photos to pašu kļūdu ieraksta žurnālā ar piezīmi, ka ūdenszīme netiks uzlikta. Attēlu Photos tomēr atdod. Li pārbaudīja Paint versiju 11.2605.71.0 un Photos versiju 2026.11060.2004.0.

Skartas ir četras funkcijas. Paint pusē tās ir Image Creator un Cocreator, Photos pusē Image Creator un Restyle Image. Lokālā ģenerēšana prasa Copilot+ datoru ar NPU. Vecākās mašīnās Image Creator strādā mākonī, kur ūdenszīmi uzliek serveris pirms attēla nosūtīšanas atpakaļ. Rezultāts abos gadījumos ir viens: failā ir GUID, ko dators nav izdomājis pats.

Iestatījumos ir slēdzis redzamajai ūdenszīmei. To neredzamo tas neietekmē. Atsevišķa slēdža neredzamajai ūdenszīmei nav.

Pats algoritms ir atvērtā koda

Metode nav slepena. Microsoft ir publicējis InvisMark ar MIT licenci, zinātniskais raksts par to nolasīts WACV 2025 konferencē. Publiskotajā apmācītajā modelī kravas ietilpība ir 100 biti. Paint variants nes 144. Slēgtā daļa ir uzskaite Microsoft pusē. Tieši tur atrodas atbilde uz jautājumu, ko pret katru izsniegto watermarkId glabā serveris, kas GUID izsniedza kopā ar uzvednes moderācijas rezultātu.

Hacker News diskusijā vairāki lasītāji norādīja, ka pierādījumu par lietotāja identitātes piesaisti GUID nav. Redzamais ir vājāks apgalvojums: viens serveris vienā brīdī zināja uzvedni, ierīces kontekstu un izsniedza identifikatoru, kas tagad ir attēla pikseļos. Vai šos trīs datus kāds glabā kopā, no ārpuses pārbaudīt nevar.

Praktiskā sekas lietotājam ir vienkārša. Attēls, ko Copilot+ dators uzzīmēja lokāli uz sava NPU bez viena baita sūtīšanas uz āru, joprojām satur numuru, ko izsniedza Microsoft. Microsoft Paint lietojumprogrammas kartē, kas pēdējoreiz atjaunināta 2026. gada 15. jūlijā, teikts, ka mākoņa pakalpojumi nodrošina drošības sistēmas, tostarp satura filtrēšanu. Vārds GUID tajā neparādās nevienu reizi.

Avoti

komentārisaruna

Komentāri

Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.

Pievieno komentāru

Tavs e-pasts netiks publicēts. Obligātie lauki atzīmēti.

vēl no drošībasaistītie