Device fingerprinting zonder cookies: hoe het werkt
Cookies verdwijnen. Zo biedt device fingerprinting persistente identificatie zonder enige opslag aan de clientzijde.
De cookie is stervende. Safari's Intelligent Tracking Prevention (ITP) beperkt de levensduur van cookies tot 7 dagen. Firefox' Enhanced Tracking Protection blokkeert third-party cookies volledig. Chrome's Privacy Sandbox schaft third-party cookies af. GDPR-toestemmingsvereisten zorgen ervoor dat gebruikers cookiebanners steeds vaker weigeren.
Voor fraudepreventie is dit een probleem. Als je apparaten niet persistent kunt identificeren, kun je recidivisten niet volgen, multi-accounting niet detecteren en verdachte sessies niet aan elkaar koppelen. Device fingerprinting lost dit op door apparaten te herkennen aan hun technische kenmerken — geen cookies, geen localStorage, geen enkele vorm van opslag aan de clientzijde.
De signaalcategorieën
Passieve fingerprinting (geen JavaScript vereist)
Nog voordat je pagina wordt geladen, geeft de browser informatie prijs via signalen op netwerkniveau:
TLS-fingerprinting (JA4). Het TLS Client Hello-bericht bevat cipher suites, extensies, elliptische curven en handtekeningalgoritmen. We gebruiken JA4-hashing — een moderne vervanger van JA3 met een fijnere granulariteit.
TCP/IP-stackanalyse. TCP-vensterformaat, TTL-waarden en MSS-instellingen verschillen per besturingssysteem. Linux, Windows en macOS hebben elk hun kenmerkende TCP-stackconfiguraties.
HTTP-headeranalyse. De volgorde van headers, Accept-Language-waarden en verbindingsvoorkeuren verschillen tussen browsers.
Actieve fingerprinting (JavaScript aan de clientzijde)
Canvas-fingerprinting. We tekenen een zorgvuldig ontworpen scène — specifieke tekst, geometrische vormen en gradiënten. Verschillende GPU's renderen dit met subtiele verschillen op pixelniveau door anti-aliasing, sub-pixel-rendering en variaties in kleurmenging. We hashen de pixeldata.
WebGL-fingerprinting. WebGL onthult de vendor/renderer-strings van de GPU, maximale textuurformaten, ondersteunde extensies en shadermogelijkheden. Deze data identificeert het GPU-model en de driverversie sterk.
AudioContext-fingerprinting. We genereren een testsignaal en analyseren hoe het wordt verwerkt. Verschillende audiohardware produceert meetbaar verschillende output door verschillen in floating-pointprecisie.
Font-enumeratie. De beschikbare systeemlettertypen verschillen per besturingssysteem, taalpakket en geïnstalleerde software. We testen op ~300 diagnostische lettertypen met behulp van canvas-meettechnieken.
Navigator-eigenschappen. CPU-cores, apparaatgeheugen, platform, taal, tijdzone, schermresolutie, kleurdiepte, aanwijs- en aanraakmogelijkheden.
Entropie-analyse
Niet alle signalen wegen even zwaar. We meten de entropie van elk signaal:
| Signaalcategorie | Benaderde entropie |
|---|---|
| Canvas + WebGL gecombineerd | ~18 bits |
| Lettertypelijst | ~8 bits |
| AudioContext | ~5 bits |
| Navigator-eigenschappen | ~7 bits |
| TLS-fingerprint | ~6 bits |
| Scherm + weergave | ~4 bits |
| Tijdzone + taal | ~3 bits |
Gecombineerd leveren onze 130+ signalen ongeveer 50+ bits aan entropie op — genoeg om meer dan 1 biljard verschillende apparaten uniek te identificeren.
Van signalen naar een stabiele hash
Het verzamelen van ruwe signalen is slechts de helft van het probleem. Browserupdates wijzigen user-agentstrings. Driverupdates veranderen WebGL-parameters. Het installeren van lettertypen wijzigt de lettertypelijst.
Fuzzy matching
In plaats van exacte overeenkomsten te vereisen, gebruiken we een fuzzy-matching-algoritme dat signalen weegt op stabiliteit en entropie. Stabiele signalen (canvas, GPU-model) wegen zwaarder dan volatiele signalen (user agent, schermresolutie).
Kandidaatgeneratie gebruikt locality-sensitive hashing (LSH) op de meest stabiele signalen om potentiële overeenkomsten te vinden. Overeenkomstscoring berekent een gewogen score over alle signaalcategorieën, gekalibreerd zodat normale apparaatwijzigingen de bezoekers-ID niet veranderen, terwijl daadwerkelijke apparaatwijzigingen dat wel doen.
Dit behaalt 99,5% nauwkeurigheid — het correct herkennen van terugkerende bezoekers na browserupdates, het wissen van cookies, in incognitomodus en bij het wisselen van browser.
Privacybeschermende architectuur
Verwerking aan de serverzijde. Alle fingerprint-berekeningen vinden plaats op onze servers. De agent aan de clientzijde verzamelt ruwe signalen, maar berekent of bewaart de fingerprint-hash niet.
Geen opslag van PII. We bewaren fingerprint-hashes, geen ruwe signalen. De hash is een eenrichtingsfunctie.
Dataresidentie. Data van EU-klanten wordt verwerkt en opgeslagen in datacenters in de EU. GDPR-artikel 6(1)(f) dekt fraudepreventie als gerechtvaardigd belang.
Cross-browser-identificatie
De grootste uitdaging is het identificeren van hetzelfde apparaat in verschillende browsers. We steunen op browseronafhankelijke signalen: GPU-hardware, schermkenmerken, tijdzone, taalinstellingen, geïnstalleerde lettertypen (op OS-niveau) en TCP/IP-stackkenmerken.
De nauwkeurigheid van cross-browser-koppeling is ongeveer 94% — lager dan bij identificatie binnen dezelfde browser, maar voldoende om multi-accounting over meerdere browsers op hetzelfde apparaat te detecteren.
Integratie
Het toevoegen van device fingerprinting kost drie regels code. De agent laadt asynchroon, verzamelt signalen in minder dan 50 ms en stuurt ze naar onze API. Het serverantwoord bevat de bezoekers-ID, betrouwbaarheidsscore en alle 24 Smart Signals.