familiewapen Mick Beermickbeer.com

manuscript ·

beginselTracking en cookiesbronnenverwant

Fingerprinting ontwijkt je weigering door niets op te slaan

Fingerprinting bewaart geen cookie, maar meet subtiele eigenschappen van je apparaat (canvas- en WebGL-rendering, de audio-stack, lettertypen, sensoren) en stelt daaruit een vrijwel unieke vingerafdruk samen. Juist doordat er niets op je toestel wordt opgeslagen, is er niets om toestemming voor te vragen en niets om te wissen. De herkenning loopt zo buiten de cookiewet en je weigerknop om door. De regels die voor cookies gelden, hebben hier geen grip.

Herkenning zonder opslag

Fingerprinting bewaart geen cookie. In plaats daarvan meet het subtiele eigenschappen van je apparaat en stelt daaruit een vrijwel unieke handtekening samen. De bouwstenen zijn dingen die je nooit als identificerend zou aanwijzen: hoe je browser een plaatje op een canvas tekent, hoe de WebGL-laag een 3D-scène rendert, hoe de audio-stack een toon opbouwt, welke lettertypen geïnstalleerd zijn, welke sensoren je toestel heeft. Elk van die eigenschappen zegt op zichzelf weinig. Samen vormen ze een combinatie die maar bij weinig andere toestellen op de wereld precies zo voorkomt.

Het idee heet in het vakgebied device fingerprinting, en het onderliggende principe is entropie. Elke gemeten eigenschap voegt bits informatie toe. Een handvol grove eigenschappen levert al genoeg bits om jou uit miljoenen te lichten. De Electronic Frontier Foundation demonstreerde dit jaren geleden met het Panopticlick-project, dat liet zien dat een gewone browserconfiguratie in de meeste gevallen uniek was. Dat het principe werkt, is gemeten en herhaaldelijk gepubliceerd. Hoe uniek een concreet toestel is, hangt af van hoeveel eigenschappen een script uitleest.

Hoe een canvas-vingerafdruk ontstaat

Het bekendste voorbeeld is de canvas-fingerprint. Een script tekent onzichtbaar een stukje tekst of een vorm op een <canvas>-element en leest daarna de exacte pixels terug. Twee toestellen die hetzelfde stukje tekst tekenen, leveren net iets andere pixels op, doordat de grafische kaart, de driver, de fontrendering en de anti-aliasing per toestel verschillen. Van die pixels maakt het script een hash, en die hash is je identifier voor deze meting.

function canvasFingerprint() {
  const c = document.createElement("canvas");
  const ctx = c.getContext("2d");
  ctx.textBaseline = "top";
  ctx.font = "14px Arial";
  ctx.fillStyle = "#f60";
  ctx.fillRect(10, 10, 100, 30);
  ctx.fillStyle = "#069";
  ctx.fillText("Mick Beer ☁ privacy", 12, 15);
  return c.toDataURL();          // pixels als string, verschilt per toestel
}
// De string wordt gehasht en met andere signalen samengevoegd.

Dezelfde truc bestaat voor de audio-stack. Een AudioContext genereert een toon, meet hoe het toestel die verwerkt, en leidt daar bits uit af. WebGL levert de renderernaam van je grafische kaart en de manier waarop je toestel een testscène tekent. Lettertypen worden geteld door te meten hoe breed een stukje tekst wordt in een reeks fonts. Al die uitkomsten gaan door een hashfunctie en vormen samen één identifier.

Waarom het je weigering omzeilt

De Nederlandse cookiewet, artikel 11.7a van de Telecommunicatiewet, en de Europese basis daaronder gaan in de eerste plaats over het opslaan van gegevens op je apparaat en het uitlezen van gegevens die er al staan. Een cookie valt daar duidelijk onder: er wordt iets weggeschreven en later teruggelezen. Je wisknop en je toestemmingsvraag zijn op dat model gebouwd. Je wist het cookie, en de herkenning is weg.

Fingerprinting past slecht in dat model. Er wordt niets weggeschreven dat je later kunt wissen. De identifier bestaat alleen als een berekening op eigenschappen die je toestel toch al uitstraalt. Het gevolg is dat er in de praktijk niets tastbaars is om toestemming voor te vragen en niets om te verwijderen. De herkenning loopt buiten de cookie-logica door. De knoppen die voor cookies zijn gemaakt, krijgen er geen grip op.

De grens van blokkeren

Juist omdat er niets wordt opgeslagen, is fingerprinting lastig te weigeren of te blokkeren. Je kunt een cookie verwijderen. Je kunt de manier waarop jouw grafische kaart een canvas rendert niet verwijderen, want die is een eigenschap van je hardware. Verdedigingen bestaan wel, en ze werken langs één van twee wegen.

De eerste weg is ruis toevoegen. Sommige browsers randomiseren de pixels die een canvas teruggeeft, zodat elke meting een net andere hash oplevert en de identifier onstabiel wordt. De tweede weg is uniformering: je toestel op zoveel mogelijk andere toestellen laten lijken, zodat je in een grote massa verdwijnt. De Tor-browser kiest die weg door alle gebruikers dezelfde vensterafmeting en dezelfde fingerprint-signalen te geven. Beide wegen zijn moeilijker dan een vinkje uitzetten, en beide hebben een prijs. Ruis kan sites laten breken. Uniformering vraagt dat je opgaat in een kudde die groot genoeg is, en die kudde is er niet altijd.

Een resetbare identifier zoals het reclamenummer van je toestel kun je wél opnieuw instellen, maar een fingerprint reist daar dwars doorheen, want hij hangt aan de hardware en niet aan een instelling. Dat maakt de fingerprint een stabielere sleutel dan de identifier die je officieel mag resetten, iets wat ik verder uitwerk in Een resetbare identifier is alsnog een sleutel.

Wat mijn meting hier wel en niet aantoont

Ik moet eerlijk zijn over wat ik van fingerprinting kan bewijzen, want het is lastiger te betrappen dan een cookie. Een cookie zie je vertrekken in het netwerkverkeer, met een herkenbare header. Een fingerprint zie je niet als zodanig vertrekken. Wat ik zie, is een script dat de bouwstenen uitleest: aanroepen naar toDataURL, naar AudioContext, naar de WebGL-renderer, naar een fontmeting. Die aanroepen zijn gemeten: ze staan in de code die de pagina uitvoert, en ik kan ze onderscheppen. Dat die aanroepen samen een identifier vormen die verstuurd wordt, is meestal afgeleid, want de hash zelf is een ondoorzichtige string die overal in een verzoek kan zitten. En dat de identifier daadwerkelijk gebruikt wordt om je over sessies heen te herkennen, is zonder inzage aan de ontvangende kant vermoed.

Ik houd die niveaus streng uit elkaar, want fingerprinting is precies het soort onderwerp waar een overtuigd onderzoeker te ver springt. Het bestaan van de aanroepen bewijst de mogelijkheid. Het bewijst nog niet de daad. Zo'n fingerprint kan bovendien buiten mijn zicht om verwerkt worden aan de serverkant, waar ik helemaal niets meer meet, wat aansluit op Server-side tagging verplaatst de tracking uit het zicht.

Wat ik ervan vind

Fingerprinting is de reden dat ik het cookievrije web niet als een schoon web beschouw. De afwezigheid van cookies zegt weinig, want de herkenning kan zich hebben verplaatst naar iets wat geen sporen achterlaat. Dat maakt het een ongemakkelijk onderwerp, want mijn sterkste bewijsvorm, het cookie in het verkeer, valt hier weg. Ik compenseer dat door de aanroepen te meten en heel precies te zeggen wat die wel en niet aantonen. Hoe gevoeliger de context waarin ik dit tegenkom, hoe zwaarder ik het weeg, in lijn met Hoe gevoeliger de context, hoe langer de identifier meegaat. Een fingerprint op een spelletjessite is vervelend. Een fingerprint in een app rond gezondheid of geloof is een heel ander gewicht. De techniek is dezelfde. De context bepaalt hoe hard ik erop druk.

Zie ook Een resetbare identifier is alsnog een sleutel, Server-side tagging verplaatst de tracking uit het zicht en Hoe gevoeliger de context, hoe langer de identifier meegaat.

bronnen
  1. Peter Eckersley, "How Unique Is Your Web Browser?", PETS 2010de meting waarmee browservingerafdrukken aantoonbaar identificerend bleken
  2. European Data Protection Board, richtsnoeren over de reikwijdte van artikel 5(3) ePrivacy, 2024uitlezen van het toestel valt onder de toestemmingseis, ook zonder opslag
citeer alsBeer, M. (2026, 9 juli). Fingerprinting ontwijkt je weigering door niets op te slaan. mickbeer.com. https://mickbeer.com/#fingerprinting-ontwijkt-je-weigering-door-niets-op-te-slaan

lees dit stuk in het manuscript, met alles waar het aan hangt