Xusheng Li avasi Windowsin Paintin purkuohjelmassa ja lähti katsomaan, mitä ohjelma oikeasti tekee, kun käyttäjä pyytää siltä tekoälykuvan. Vastaus löytyi funktiosta nimeltä WmkWriteWatermark. Se kirjoittaa jokaiseen Paintin Image Creatorilla tehtyyn kuvaan 18 tavun paketin, joka ei näy silmällä mutta on luettavissa pikseleistä: merkkitavu, 16 tavun tunniste ja tarkistussumma. Yhdessä 512 kertaa 512 pikselin kuvassa merkintä koskettaa Li:n mittausten mukaan lähes 200 000 pikseliä.
Tunnistetta ei arvota omalla koneella. Li seurasi Paintin verkkoliikennettä ja havaitsi, että ohjelma lähettää kirjoitetun kehotteen Microsoftin palvelimelle moderoitavaksi, ja palvelin palauttaa vastauksessaan watermarkId-kentän. Juuri se päätyy kuvan pikseleihin. Li on ohjelmistokehittäjä Vector 35 -yhtiössä, ja hän julkaisi havaintonsa blogissaan ja LinkedInissä. The Register uutisoi niistä tiistaina.
“Microsoft Paint ja Kuvat upottavat palvelimen antaman GUID:n näkymättömäksi vesileimaksi paikallisesti generoituihin tekoälykuviin.”
Mikä ihmeen GUID
GUID tulee sanoista globally unique identifier, maailmanlaajuisesti yksilöllinen tunniste. Se on 128-bittinen numero, jollaisia ohjelmistot jakavat silloin, kun jokaisen kohteen pitää erottua kaikista muista. Kahden saman numeron osumisen todennäköisyys on käytännössä nolla. Numero itsessään ei kerro kenestäkään mitään. Merkitykselliseksi se muuttuu vasta, jos jollakulla on lista siitä, mikä numero annettiin mihinkin pyyntöön.
Microsoftilla sellainen lista voisi olla, koska tunniste syntyy yhtiön palvelimella samassa hetkessä kun kehote moderoidaan. "Kehotteesi lähetetään Microsoftille moderointia varten, ja palautettu GUID koodataan pikseleihin", Li kirjoittaa.
Toinen havainto on kytkentä. Paint lähettää seuraavan moderointipyynnön mukana edellisen pyynnön tunnisteen kentässä lastPromptGenerationId. Peräkkäiset kuvapyynnöt liittyvät siis toisiinsa jo palvelimen kirjanpidossa, ilman että kukaan joutuu jälkikäteen arvailemaan niiden yhteyttä.
Mitä se tarkoittaa arjessa? Tee Paintilla kaksi kuvaa peräkkäin ja julkaise ne kahdella eri nimimerkillä kahdessa eri palvelussa. Kuvissa ei ole nimeäsi, sijaintiasi eikä kameran tietoja, mutta molemmissa on oma tunnisteensa, ja tunnisteet on ketjutettu toisiinsa. Se, jolla on pääsy sekä kuviin että kytkentätietoon, voi päätellä nimimerkkien takana olevan sama kone ja sama istunto.
Vertailukohta löytyy paperilta. Lasertulostimet ovat vuosikymmeniä painaneet tulosteisiin haaleita keltaisia pistekuvioita, joista selviää tulostimen sarjanumero ja tulostusaika. Kuviot tulivat yleiseen tietoon vasta kun tutkijat purkivat ne, ja sen jälkeen ne ovat olleet yksityisyysjärjestöille vakioesimerkki seurannasta, joka rakennetaan laitteeseen kertomatta siitä käyttäjälle. Paintin tunniste tekee kuvatiedostolle jotakin hyvin samankaltaista.
Osa merkinnästä on lain vaatimaa, osa ei
Kuviin liitetään myös C2PA-manifesti. C2PA eli Coalition for Content Provenance and Authenticity on alan yhteinen standardi, jolla tiedostoon kiinnitetään kryptografisesti allekirjoitettu tieto sen alkuperästä. Tästä osasta ei juuri kiistellä. Tekoälyllä tehty kuva pitää pystyä tunnistamaan tekoälyllä tehdyksi, ja EU:n tekoälyasetus sekä sen pohjalta laadittu tekoälysisällön läpinäkyvyyttä koskeva käytännesäännöstö edellyttävät allekirjoittajiltaan koneluettavaa merkintää.
Kiinnostavin kohta on raja. Li havaitsi, että manifestiin on kirjattu kenttä, joka sitoo tiedoston pikseleihin piilotettuun vesileimaan: algoritmiksi merkitään com.microsoft.invismark.1 ja arvoksi sama GUID. Alkuperämerkintä ei tarvitse yksilöllistä numeroa toimiakseen. Riittäisi tieto siitä, että kuva on koneen tekemä ja millä työkalulla. Yksilöllinen tunniste on askel sen yli.
Li huomauttaa myös, ettei Microsoftin oma tukidokumentaatio kerro tästä. Sivut kuvaavat C2PA-merkinnän olemassaolon, mutta eivät sitä, että manifesti sisältää tunnisteen, joka osoittaa pikseleihin piilotettuun vesileimaan. Sama koskee Kuvat-sovelluksen Muotoile kuva uudelleen -toimintoa ja sen kuvageneraattoria, jotka Li tutki samalla.



