Dit is het openbare werk van Mick Beer. Ik meet en bewijs waar bedrijven, instanties en overheden de gegevens van gewone mensen verkeerd behandelen, ik laat precies zien hoe ik het vond zodat iedereen het kan narekenen, en waar ik een gat aanwijs bouw ik ook aan de betere versie. Ik doe dat om de koers van digitaal Nederland te verleggen.
Het werk staat in twee lagen: losse artikelen die een zaak behapbaar uitleggen voor wie er net inkomt, en dit manuscript, waar de bevindingen, beginselen en gedachten samenkomen en elkaar onderbouwen. Het blijft niet bij privacy: het loopt door naar macht, bekwaamheid, kwaliteit en de vraag wat een mens nog zelf moet kunnen.
Wat je hier vindt: de uitkomsten van mijn eigen metingen, uitgewerkt tot stellingen die je kunt narekenen. Elke bewering hangt aan data die ik zelf heb verzameld, of aan onderzoek van iemand anders met de bron erbij. Elk stuk heeft een eigen adres en een kant-en-klare bronvermelding in APA, MLA, Chicago, Harvard of BibTeX, zodat je het kunt aanhalen in een artikel, een klacht, een scriptie of een rapport.
Waarvoor je het kunt gebruiken: als bouwer om te zien welke keuze in je eigen site de schade veroorzaakt en hoe je die repareert. Als functionaris gegevensbescherming om je eigen ontvangerslijst naast je verwerkingsregister te leggen. Als jurist of journalist om een bewering te onderbouwen met een meting die standhoudt. En als lezer om te begrijpen wat er met je gegevens gebeurt op de plekken waar je niet omheen kunt.
Zo lees je dit
Het label bij elke notitie zegt hoe ver ze staat:
gepubliceerd
staat in een artikel
geverifieerd
door mij nagemeten
in onderzoek
loopt nog
beginsel
een werkregel die uit het meten volgt
gedachte
van mij, en niet gemeten
Open je een notitie, dan staat erbij hoe hard het bewijs is. Elke notitie hoort volledig uitgewerkt te zijn; dat is de eis die ik mezelf stel. Het teken ≡ markeert de stukken waar dat al af is.
En zo werkt de inhoudsopgave hieronder:
volgorde
per tak staan de zwaarste stukken bovenaan, donkere titels wegen zwaarder dan lichte
zoekveld
doorzoekt alle titels en samenvattingen tegelijk, Escape wist het weer
k, Mick Beer, beloof aan wie mij leest:
dat ik onderzoek en schrijf naar mijn beste geweten en op feiten;
dat ik dit doe voor het publiek belang, om zichtbaar te maken wat er misgaat bij bedrijven, instanties en overheden, en wat dat de gewone burger kost;
dat ik niet schrijf om te beschadigen, maar om de koers van digitaal Nederland te wijzigen, naar een veiliger land dat de privacy van zijn burgers waarborgt;
dat alles wat ik beweer na te rekenen is, en dat ik ophoud waar het bewijs ophoudt;
dat ik, wanneer ik dwaal, dat in het openbaar rechtzet.
Een rechter valt van een trapje bij het ophangen van gordijnen, wordt ziek en gaat dood. Onderweg dringt het tot hem door dat zijn leven misschien verkeerd is geweest. Niet omdat hij slechte dingen deed, maar omdat hij precies deed wat iedereen van hem verwachtte: de juiste baan, het juiste huis, de juiste meningen. Tolstoj noemt dat leven gewoon en daarom verschrikkelijk. Wat mij raakt is dat het besef pas komt als er niets meer te veranderen valt. Het boek is daarmee een handleiding voor hoe je niet moet leven, en het antwoord erop is oud: memento mori, de reflectie van het sterfbed naar voren halen naar vandaag, toen er nog iets mee te doen viel.
Josef K. hoort nooit waarvan hij wordt beschuldigd, het oordeel ligt er voordat er iets is onderzocht, en iedereen die hij tegenkomt is volstrekt zeker van zijn zaak zonder het geheel te overzien. De macht oogt daardoor onverklaarbaar, alsof onzichtbare plaaggeesten eraan trekken. Dat is niet de beschrijving van een rechtsstelsel dat ontspoort, het is de beschrijving van hoe een hedendaagse zaak door het publiek wordt afgehandeld: de uitkomst staat vast op dag één, en de betrokkenen begrijpen er samen minder van dan één iemand zou moeten. Wat dat met een mens doet is niet woede maar uitputting: je wordt niet verslagen, je bent overgeleverd.
Het publieke verhaal over online volgen is blijven staan bij 1998: een site zet een bestandje op je computer, je kunt het weigeren of wissen, klaar. Die canon klopt nog voor precies één techniek en dekt misschien een vijfde van wat er werkelijk gebeurt. Al het andere, de veiling, de koppeling, de doorverkoop, het vermommen, heeft eigen woorden die zelden buiten het vak komen. Dit is de kaart van die woorden, en van de scheidslijnen die er structureel tussen wegvallen.
Code in een app, een verzoek op de lijn, een gegeven dat aankomt, een profiel dat wordt gekoppeld, een dossier dat wordt verkocht. Dat zijn vijf verschillende beweringen, en ze vragen elk om ander bewijs. Wie de ene meet en de andere opschrijft, heeft een fout in zijn stuk staan die een advocaat er in één zin uithaalt. Hier staat elke trap met wat je ervoor moet aantonen.
Onder het woord cookie zitten minstens acht manieren om je terug te herkennen, en de helft daarvan is helemaal geen cookie. Eigen cookie, derde-partij-cookie, opslag in de browser, een merkteken in de cache, het reclamenummer van je telefoon, een vingerafdruk van je apparaat. Ze verschillen in wie hem kan lezen, hoe lang hij leeft, of je hem kunt wissen en of de cookiewet er grip op heeft. Hier staat de hele familie, op die vier assen.
De woorden voor het meetgereedschap worden door elkaar gebruikt, terwijl ze verschillen in wat ze mogen, wat ze zien en wie ze kan aanzetten. Een pixel is een verzoek. Een tag is een stukje code. Een SDK is een meegeleverde bibliotheek met de rechten van de app zelf. Een tagmanager is een luik waardoor een marketeer na oplevering nieuwe code de pagina in schuift zonder dat er een ontwikkelaar aan te pas komt. Dat laatste is het gevaarlijkste van de vier en staat in geen enkele risicoanalyse.
Losse herkenningsnummers zijn hinderlijk. Gekoppelde herkenningsnummers zijn een dossier. De koppelindustrie heeft daar een eigen woordenschat voor: cookie-sync, identity resolution, identiteitsgrafiek, deterministisch en probabilistisch matchen, gehashte e-mail, universele id. Dit is de laag waar het echte kwaad zit, en juist deze laag is met een browsermeting nauwelijks te zien.
Tussen de site die je opent en het bedrijf dat de advertentie betaalt, zitten zeven partijen met een eigen naam, een eigen verdienmodel en een eigen kopie van jouw verzoek. Uitgever, advertentieserver, verkoopplatform, veiling, inkoopplatform, adverteerder, plus de doorverkopers en de verificatiediensten die niemand noemt. Wie de rollen niet kent, telt ze verkeerd op en publiceert een index die niet klopt.
Het verkeer is het zichtbare deel. Het profiel zelf ligt ergens opgeslagen, en de opslagplaatsen hebben namen die klinken als infrastructuur: klantdataplatform, datamanagementplatform, databroker, data clean room. Ze verschillen in wie de eigenaar is, of jouw naam eraan hangt en of er geld voor betaald wordt. De clean room is de nieuwste, wordt verkocht als privacyoplossing en is in de praktijk een koppelvlak met een keurmerk.
Doorverkoop is de zwaarste beschuldiging in dit veld en tegelijk de slechtst onderbouwde. De AVG kent het woord verkoop niet eens; die kent verstrekking aan een ontvanger. De Californische wet kent wel verkoop, en definieert die zo breed dat een gewone advertentiecookie er al onder valt. Wie een Amerikaanse definitie in een Nederlands stuk gebruikt zonder het te zeggen, beweert iets anders dan hij denkt.
Aan de vraagkant staan drie modellen die volstrekt verschillende hoeveelheden data over jou nodig hebben. Contextueel kijkt naar de pagina en heeft niets over jou nodig. Retargeting kijkt naar wat jij eerder deed. Lookalike bouwt een model van mensen die op jou lijken en heeft daarvoor een profiel van jou én van duizenden anderen nodig. Het middelste model is het bekendste, het laatste het meest ingrijpende, en het eerste bewijst dat het ook zonder kan.
Een deel van de vaktaal bestaat niet om iets te beschrijven maar om iets weg te schrijven. Geanonimiseerd, gepseudonimiseerd, niet-persoonsgebonden, first-party, eigen infrastructuur, essentieel, gerechtvaardigd belang, partner. Elk van die woorden verplaatst een verplichting zonder de techniek te veranderen. Dit is de lijst, met per woord wat het juridisch echt betekent en waaraan je ziet dat het verkeerd wordt gebruikt.
Overheid, toezicht en de wet
Wat de staat en haar toezichthouders met je gegevens doen, en hoe ver de wet en de handhaving achterblijven bij de praktijk.
Een rechter valt van een trapje bij het ophangen van gordijnen, wordt ziek en gaat dood. Onderweg dringt het tot hem door dat zijn leven misschien verkeerd is geweest. Niet omdat hij slechte dingen deed, maar omdat hij precies deed wat iedereen van hem verwachtte: de juiste baan, het juiste huis, de juiste meningen. Tolstoj noemt dat leven gewoon en daarom verschrikkelijk. Wat mij raakt is dat het besef pas komt als er niets meer te veranderen valt. Het boek is daarmee een handleiding voor hoe je niet moet leven, en het antwoord erop is oud: memento mori, de reflectie van het sterfbed naar voren halen naar vandaag, toen er nog iets mee te doen viel.
Het publieke verhaal over online volgen is blijven staan bij 1998: een site zet een bestandje op je computer, je kunt het weigeren of wissen, klaar. Die canon klopt nog voor precies één techniek en dekt misschien een vijfde van wat er werkelijk gebeurt. Al het andere, de veiling, de koppeling, de doorverkoop, het vermommen, heeft eigen woorden die zelden buiten het vak komen. Dit is de kaart van die woorden, en van de scheidslijnen die er structureel tussen wegvallen.
Onder het woord cookie zitten minstens acht manieren om je terug te herkennen, en de helft daarvan is helemaal geen cookie. Eigen cookie, derde-partij-cookie, opslag in de browser, een merkteken in de cache, het reclamenummer van je telefoon, een vingerafdruk van je apparaat. Ze verschillen in wie hem kan lezen, hoe lang hij leeft, of je hem kunt wissen en of de cookiewet er grip op heeft. Hier staat de hele familie, op die vier assen.
De woorden voor het meetgereedschap worden door elkaar gebruikt, terwijl ze verschillen in wat ze mogen, wat ze zien en wie ze kan aanzetten. Een pixel is een verzoek. Een tag is een stukje code. Een SDK is een meegeleverde bibliotheek met de rechten van de app zelf. Een tagmanager is een luik waardoor een marketeer na oplevering nieuwe code de pagina in schuift zonder dat er een ontwikkelaar aan te pas komt. Dat laatste is het gevaarlijkste van de vier en staat in geen enkele risicoanalyse.
Losse herkenningsnummers zijn hinderlijk. Gekoppelde herkenningsnummers zijn een dossier. De koppelindustrie heeft daar een eigen woordenschat voor: cookie-sync, identity resolution, identiteitsgrafiek, deterministisch en probabilistisch matchen, gehashte e-mail, universele id. Dit is de laag waar het echte kwaad zit, en juist deze laag is met een browsermeting nauwelijks te zien.
Het verkeer is het zichtbare deel. Het profiel zelf ligt ergens opgeslagen, en de opslagplaatsen hebben namen die klinken als infrastructuur: klantdataplatform, datamanagementplatform, databroker, data clean room. Ze verschillen in wie de eigenaar is, of jouw naam eraan hangt en of er geld voor betaald wordt. De clean room is de nieuwste, wordt verkocht als privacyoplossing en is in de praktijk een koppelvlak met een keurmerk.
Doorverkoop is de zwaarste beschuldiging in dit veld en tegelijk de slechtst onderbouwde. De AVG kent het woord verkoop niet eens; die kent verstrekking aan een ontvanger. De Californische wet kent wel verkoop, en definieert die zo breed dat een gewone advertentiecookie er al onder valt. Wie een Amerikaanse definitie in een Nederlands stuk gebruikt zonder het te zeggen, beweert iets anders dan hij denkt.
Een deel van de vaktaal bestaat niet om iets te beschrijven maar om iets weg te schrijven. Geanonimiseerd, gepseudonimiseerd, niet-persoonsgebonden, first-party, eigen infrastructuur, essentieel, gerechtvaardigd belang, partner. Elk van die woorden verplaatst een verplichting zonder de techniek te veranderen. Dit is de lijst, met per woord wat het juridisch echt betekent en waaraan je ziet dat het verkeerd wordt gebruikt.
Wie een bevinding over zijn eigen gegevens onder ogen krijgt, weegt zelden eerst de inhoud. Ik zie ontkenning, schaamte, woede op de verkeerde partij en berusting, en soms een reactie die veel groter is dan de technische ernst rechtvaardigt. Dat is menselijk en het is bruikbaar om vooraf te weten. Berusting is daarbij het gevaarlijkste antwoord, want die verandert een schending in een gegeven waar niemand meer iets aan doet.
Op Nederlandse overheidssites is de grootste bron van verkeer voor toestemming geen advertentietracker maar een lettertype, een kaartje of een icoonpakket van een extern adres. Google Fonts, Google Maps, Adobe Typekit, jsDelivr en Cloudflare laden in 97 tot 100 procent van de gevallen al voordat de bezoeker iets heeft geklikt. Dat is geen kwade opzet, het is een bouwkeuze, en het is de goedkoopste te repareren overtreding die er bestaat.
Toestemmingsmodules zijn niet inwisselbaar. Over 1.718 overheidssites loopt het aandeel dat al voor toestemming trackt uiteen van 20,8 procent bij de ene module tot 100 procent bij de andere. De keuze van je leverancier voorspelt je nalevingsniveau beter dan je privacyverklaring dat doet.
Op 710 van 1.718 gemeten overheidssites loopt verkeer via een subdomein van de site zelf dat in werkelijkheid naar een derde partij wijst. Voor de browser is dat eigen verkeer, dus de bescherming tegen derde-partijcookies grijpt niet. Voor de bezoeker is het onzichtbaar. Voor de verwerkingsverantwoordelijke is het meestal ook onzichtbaar, want het staat in een DNS-record en niet in de code.
Een gemiddelde overheidssite spreekt 3,2 externe partijen aan, de mediaan is 2, maar de staart loopt door tot 38 op een enkele site. Die staart is waar het risico zit. Voor een functionaris gegevensbescherming is dit de snelste zelftest die er is: meet je eigen site, leg de ontvangerslijst naast je verwerkingsregister, en tel wat er niet in staat.
De grootste ontvanger op Nederlandse overheidssites is de overheid zelf. Op 668 van 669 sites waar rijksoverheid.nl als partij optreedt, laadde die verbinding al voor enige toestemming, met Piwik PRO als analysepakket en servers in Belgie. Dat kan rechtmatig zijn, maar alleen onder voorwaarden die je moet kunnen aantonen, en die aantoonbaarheid is precies wat ontbreekt.
De vraag klinkt als cultuurpessimisme, en dat wil ik hem niet laten zijn. Daarom stel ik hem meetbaar: waar zou je het zien als het antwoord nee is, en zie ik dat in mijn eigen metingen terug? Het eerlijke antwoord is dat ik onbekwaamheid niet kan onderscheiden van verkeerde prikkels, en dat het onderscheid uitmaakt voor wat je eraan doet.
Wie een privacyschending wil melden bij de Autoriteit Persoonsgegevens, botst op een drempel die door de jaren heen hoger is geworden. Het rechtstreekse e-mailcontact voor meldingen en klachten is verdwenen. Wat overblijft zijn een paar strak dichtgetimmerde formulieren met vaste velden, en een behandeltijd die in de praktijk oploopt tot maanden. Een toezichthouder die moeilijk te bereiken is, hoort minder, en handhaaft dus ook minder.
Hoeveel land heeft een mens nodig is tot nu toe het boek dat het beste laat zien hoe ver je een complex onderwerp kunt indikken. Waar de meeste schrijvers honderden bladzijden nodig hebben, doet Tolstoj het in ongeveer achtduizend woorden, in de meeste uitgaven vijftien tot vijfentwintig bladzijden. Er gaat niets verloren. De redenering staat er compleet in, inclusief het einde dat je ziet aankomen en dat toch aankomt.
Op het eerste gezicht is het een simpel kinderboek: een meisje valt in een hol en komt in een wereld waar niets klopt. Dat beeld houdt stand tot je twee dingen erbij legt. Het voorwoord over Charles Dodgson zelf, en de manier waarop iemand als Jordan Peterson dit soort verhalen naast bijbelse leest, bijvoorbeeld naast de verloren zoon. Daarna lees je hetzelfde boek anders.
Klokkenmakers bestaan bijna niet meer, en in sommige landen is thuisbezorgen zo gewoon geworden dat zelf koken opvalt. Een vaardigheid verdwijnt niet doordat mensen dommer worden, maar doordat iets haar overbodig maakt. En omdat je koken leert van iemand die het kan, sluit een overgeslagen generatie de terugweg af.
Kafka zag iets aan macht en bureaucratie wat wij pas herkennen als hij het ons laat zien, en hij maakte het overdraagbaar in verhalen. Zijn grootste creatie is daarom geen boek maar een bijvoeglijk naamwoord: kafkaesk wordt gebruikt door miljoenen die hem nooit hebben gelezen. Dat is de hoogste vorm van maken die ik ken.
Ik heb tientallen uren aan colleges en gesprekken van hem gezien, en wat bleef hangen is de koppeling tussen verantwoordelijkheid nemen en betekenis vinden. Tegelijk moet ik mijn eigen regel op hem toepassen: bekwaamheid in het ene domein draagt niet over naar het andere, en juist bij hem is dat verschil groot.
Ik heb geholpen uit te rekenen hoe vaak je langs een kentekencamera komt, en dat is tot op de rit nauwkeurig te bepalen. Het nut aan de andere kant van de weegschaal is dat niet: de evaluatie van de wet stelt zelf dat effectiviteit niet op de gebruikelijke manier te meten valt. Zo weegt een afweging waarvan maar een kant een getal heeft.
Streep de modewoorden weg uit de vaardighedenlijsten van 2026 en er blijft iets anders over dan gereedschap: systeemdenken, root-cause zoeken, begrijpen wat code echt doet. Dat zijn denkgewoonten, en ze worden verkocht als tweedaagse cursus. Aanleg bepaalt niet of je het kunt leren, wel hoe lang het duurt en wie er onderweg afhaakt.
Randall Munroe verliet NASA om stripjes te tekenen, geeft xkcd gratis weg en beantwoordt in What If? absurde vragen met echte natuurkunde. Niemand vroeg erom, geen bedrijf verdient eraan, en juist daarom is het zo goed. Zodra iets moet renderen, wordt van bovenaf bepaald hoe diep het mag gaan en hoe het mag klinken.
Vsauce begint bij een vraag die een kind zou stellen en eindigt bij natuurkunde, wiskunde of filosofie, zonder onderweg iemand dom te laten voelen. Dat is precies wat ik probeer met een meting. De vraag serieus nemen is het vak, niet het antwoord al kennen.
Een betaalmuur is op zichzelf te verdedigen, want journalistiek kost geld. Wat ik meet is iets anders: wie betaalt, krijgt de trackers er gewoon bij. Je koopt je uit de reclame en blijft handelswaar. Dat is niet twee keer verdienen aan hetzelfde product, dat is de lezer als product houden nadat hij klant is geworden.
De regels waarop ik dagelijks toets komen uit 2002. De vervanger lag er in 2017 en is in 2025 ingetrokken, onder meer omdat hij inmiddels verouderd was. Zo bleef de oude regel staan: niet omdat hij nog past, maar omdat de opvolger tijdens het onderhandelen ouder werd dan het probleem.
Ik geloof niet dat elke politicus in zijn hart voor honderd procent achter zijn scherpste uitspraken staat, en ik geloof net zomin in de zuivere liefde die andere partijen uitstralen. Maar de vraag of ze het menen is onbeantwoordbaar. De vruchtbare vraag is welk gedrag hier beloond wordt, en het antwoord is: herkenbaar en consequent zijn, niet accuraat zijn.
Gegevens die zonder toestemming met een ander bedrijf worden gedeeld, zijn meestal geen datalek maar een andere overtreding, met een eigen route naar de toezichthouder. Meestal, niet altijd: gaat het om gevoelige gegevens of om een verstrekking die niemand bedoeld heeft, dan kan het er alsnog een zijn. Wie standaard de datalekingang kiest, kiest doorgaans de verkeerde.
Wetten zijn publiek eigendom, maar op wetten.overheid.nl kun je niet zien welk woord er gisteren veranderde. Daarom spiegel ik ze: elke wet een tekstbestand, elke wijziging een commit. Nu staan er 19.626 geldende regelingen in, bijgewerkt door een robot die elke ochtend om zes uur kijkt of Den Haag iets heeft veranderd.
Als een journalist van NRC je werk interessant vindt, gaat de wereld voor je open: Tweakers, NRC en Security.NL volgen, en zo bereikte de Belastingdienst-zaak zelfs de Tweede Kamer. Maar dat is ook eng. Geen directeur, geen toezichthouder, geen inlichtingendienst, maar één enkele journalist staat tussen belangrijke kennis en achttien miljoen Nederlanders.
Toont de eerste laag van een toestemmingsvenster geen weigerknop naast de accepteerknop, dan is er geen vrije keuze. Wat ik dan als weigering meet, is feitelijk alleen het uitblijven van een klik. Dat ontbreken is zelf een bevinding, geen leemte in de meting.
Op een hulpverleningsplatform draaide een tool die elke muisbeweging, klik en toetsaanslag vastlegt, nog voor de bezoeker iets had aangeklikt. Die opnames gaan naar een Amerikaans bedrijf. Juist op de plek waar iemand kwetsbaar is, kijkt een vreemde mee.
Op een zorgplatform liep een schermopname-tool nog nadat de bezoeker toestemming had geweigerd, en vertrokken meerdere verzoeken met gegevens naar Google. Wat je doet op een plek die vertrouwelijk hoort te zijn, belandt zo bij een derde. Ook zonder doorverkoop is dat een verstrekking aan een vreemde.
De sterkste bevindingen liggen stelselmatig bij geauthenticeerde, vitale publieke diensten: achter je DigiD, in de infrastructuur onder de staatsinlog, op de openbare weg. Precies daar heeft de burger geen alternatief en geeft hij geen toestemming, en precies daar wordt het minst gemeten. Een commerciele app kun je mijden. De overheid en de vitale infrastructuur niet.
Een buitenlandse eigenaar of oorsprong betekent niet dat je gegevens naar dat land gaan. Herkomst en bestemming zijn twee dingen, en alleen de bestemming is te meten. Wie ze verwart, maakt van een eigendomsverhouding een datastroom die niet is aangetoond.
Wisselen twee bedrijven het herkenningsnummer van een browser uit, dan herkennen ze allebei dezelfde persoon. Dat is geen technisch detail maar een gedeelde verwerking. En het roept de vraag op wie er verantwoordelijk voor is.
Op een perspagina van het ministerie van VWS, een als gevoelig gemarkeerd overheidsdomein, lezen vierendertig verschillende bedrijven mee. Twaalf daarvan krijgen hetzelfde herkenningsnummer aangereikt. De burger ziet een overheidssite. Er kijken vierendertig bedrijven mee.
Wat de burger op de cookiemuur leest, komt niet overeen met wat de machine eronder declareert. Het getoonde aantal partners is lager dan het werkelijke. De belofte en de bytes lopen uiteen, precies op het punt waar je geacht wordt geinformeerd toe te stemmen.
Tussen een app en 'een advertentie' zit een keten: een SSP in de app, een uitwisseling die de veiling houdt, en bidders die namens adverteerders bieden. Elke schakel is een aparte partij die data aanraakt. Verantwoordingsdocumenten noemen zelden de hele keten; wie alleen de eerste stap meet, ziet het topje. Uitpluizen wie er echt achter de biedstroom zit, is een eigen onderzoeksstap.
Niet elke reactie is afwerend. De Belastingdienst accepteerde de hulp, reageerde adequaat, en meldde de zaak zelf bij de toezichthouder. Dat een grote organisatie een fout erkent en aanpakt, kan dus.
Dat data in een Europees datacenter staat, maakt de Amerikaanse greep zwakker, niet nul. Draait het op een Amerikaanse aanbieder, dan blijft het bedrijf onder Amerikaans recht vorderbaar, EU-regio of niet. Serverlocatie en jurisdictie zijn twee dingen.
Een risicoafweging die je nergens kunt inzien, werkt niet als afweging maar als geruststelling. Het bestaan ervan claimen is iets anders dan hem laten toetsen. De belofte staat tegenover de gemeten werkelijkheid, en alleen die laatste is bewijs.
We maken ons druk over de overheid die op Amerikaanse cloud draait, terwijl een gewone verenigings- of scan-app je paspoortfoto binnen een minuut op diezelfde cloud kan zetten. De verontwaardiging staat niet in verhouding tot wat particuliere apps met je biometrie en identiteitsbewijs doen. Leg beide langs dezelfde meetlat, anders meet je selectief.
Bedrijven benoemen zichzelf in hun eigen documentatie tot verwerker, dienstverlener of doorgeefluik, en dat etiket houdt ze uit registers en buiten aansprakelijkheid. Het etiket beschrijft de contractuele relatie, niet de handeling. Bepalend is de feitelijke invloed op doel en middelen. Een definitie met een uitzondering erin wordt bovendien vanzelf een ontwerpruimte, want partijen richten zich precies zo in dat ze erbuiten vallen.
Zodra een beoordelingskader meerdere vragen kent, ontstaat de neiging ze te wegen en op te tellen. Dan compenseert een hoge score op het ene punt een onaanvaardbare uitkomst op het andere, en komt er alsnog een voldoende uit. Bij vragen die elk op zichzelf een grens bewaken werkt dat niet: elk antwoord moet afzonderlijk ja zijn, of het antwoord is nee. Dat verschil bepaalt of een kader iets tegenhoudt of alles doorlaat.
Uitblijvende duidelijkheid oogt als voorzichtigheid en voelt als neutraliteit. In de praktijk werkt ze maar één kant op: zolang niemand zegt dat iets niet mag, blijft het draaien, en draagt de gebruiker het risico terwijl de aanbieder doorgaat. Wie moet oordelen en dat jaren uitstelt, neemt feitelijk het standpunt in van de partij die niets hoeft te veranderen. Een besluit dat uitblijft is een uitkomst en hoort ook zo geteld te worden.
De aandacht ging naar de publieke overheidssite, maar achter de DigiD-login draait de meting door, met fiscaal-persoonlijke context erbij. Juist op de plek waar je het minst te kiezen hebt, is de tracking het diepst. Inloggen beschermt je hier niet, het verzwaart de context.
Je zou verwachten dat gevoeliger context tot voorzichtiger bewaren leidt. In de praktijk is het omgekeerd: hoe gevoeliger de omgeving, hoe langer de persistente identifier blijft leven. Precies de omgekeerde beweging van dataminimalisatie.
Op de plek achter de login is er niet eens een toestemmingsvraag om te negeren, hij ontbreekt volledig. De privacyverklaring belooft zorgvuldigheid, de meting toont het tegendeel. Geen keuze aanbieden is geen vergetelheid, het is een inrichting.
Zolang een probleem niet is aangepakt, klinkt het verweer dat het complex is en tijd kost. Zodra er een extern signaal komt, blijkt de ingreep vaak binnen dagen te doen. Die hersteltijd is zelf een meetwaarde: zij toont wat de organisatie in elk van de voorgaande jaren ook had gekund. Noteer bij elke correctie hoeveel tijd er tussen melding en fix zat, en zet dat naast de duur van de situatie.
Wie de infrastructuur onder de staatsinlog levert, is een privacyvraag op zichzelf. De overheid wist maanden vooraf dat die leverancier onder buitenlandse controle zou komen, maar de toets kwam laat en langs de lichtste route. Governance en transparantie aan de eigen kant zijn hier de kern, geen buitenlands complot.
Bij één getroffen klant is de inrichting van die klant een plausibele verklaring. Herhaalt hetzelfde patroon zich bij meerdere klanten binnen korte tijd, dan zegt dat iets over hoe het product standaard wordt uitgeleverd en welke rechten standaard aanstaan. De stelling dat de software zelf niet lek was, is technisch houdbaar en tegelijk onvoldoende. De vraag is niet of de leverancier heeft gewaarschuwd, maar of hij het foute pad heeft afgesloten.
Delen meerdere overheidsdiensten dezelfde analytics-omgeving, dan wordt een verkeerde instelling meteen een probleem voor de hele reeks. Niemand ziet dat als een risico, omdat het als losse sites oogt. Gedeelde infrastructuur vermenigvuldigt de fout.
Een register van welke gegevens de overheid naar het buitenland stuurt, hoort door een onafhankelijke buitenstaander te worden bijgehouden, niet door de overheid zelf. Een scherpe, verdedigbare afbakening is daarbij belangrijker dan volledigheid: liever een kleine claim die klopt dan een grote die wankelt.
Organisaties zetten verantwoording en dataminimalisatie tegenover elkaar: we moeten alles bewaren, anders kunnen we niets aantonen. Dat is een ontwerpkeuze die als natuurwet wordt gepresenteerd. Een openbaar, alleen aangroeiend logboek van vingerafdrukken bewijst dat een handeling op een tijdstip plaatsvond, zonder de inhoud ergens neer te leggen. Bij elk systeem dat voor de verantwoording data bewaart, is de vraag gerechtvaardigd waarom het de inhoud nodig heeft en niet het bewijs.
De ene organisatie is je dankbaar als je een lek vindt en meldt. De andere reageert met juridische druk. Hetzelfde werk, tegenovergestelde reacties. Dat verschil zit niet in wat ik doe, maar in hoe een organisatie naar kritiek kijkt.
De vraag is niet wie ik ben om hier iets van te vinden. Ik draai het liever om. Wij zijn allemaal verantwoordelijk en aangewezen om dit te doen. Als niemand het doet, gebeurt er niets.
Het woord cookie klinkt als een koekje, iets onschuldigs. Maar het is een manier om je te herkennen en te volgen, over sites heen. Een vriendelijk woord voor een techniek die allesbehalve vriendelijk is.
Data voelt persoonlijk, en dat maakt het gesprek erover geladen. Zelfs organisaties die zich met privacy bezighouden, reageren soms emotioneel en defensief, en willen liever niet praten. Terwijl juist zij het gesprek zouden moeten aangaan.
Losse datapunten lijken onschuldig: een locatie, een zoekterm, een tijdstip. Het gevaar ontstaat als ze bij elkaar komen, tot een aanwezigheidskalender, een koopprofiel of een medisch beeld. De schade zit in de combinatie.
De gevoeligste categorieen, bank, overheid, zorg, verzekeraars en politiek, blijven vrijwel schoon van deze buitenlandse partijen. Vrijwel alleen commerciele media en retail doen mee. De sector die bij uitstek over privacy zou moeten waken, verdient geld met een model dat je herkenbaar maakt.
Een persbericht-pagina van een ministerie droeg een volledige realtime-biedketen met bekende advertentiepartijen. Een pagina die louter informatie hoort te geven, veilt intussen aandacht. Zulke plekken zijn juist verdacht omdat niemand ze daar zoekt.
Op vrijwel alle gemeten sites vuurt de buitenlandse techniek pas na accepteren, dus actief weigeren helpt aantoonbaar. Toch vuurt op een enkele site de tracker ook na een weigering. Een tracker-blokker in de browser vangt wat een keuze in de banner niet vangt.
Een gewone foto wordt pas een biometrisch gegeven nadat ze met techniek is verwerkt tot een gezichtstemplate voor unieke identificatie. Tot die verwerking is het gewoon een afbeelding. Die nuance moet in een privacyverhaal kloppen, anders staat de kern op los zand.
Waar data staat en welk recht erop geldt zijn twee dingen. Een dienst die in Nederland host maar onder een Amerikaanse moeder valt, brengt die data onder de Amerikaanse wet. Voor de gebruiker telt niet de serverlocatie maar de nationaliteit van de eigenaar.
Cookie-toezicht is echt geworden. De toezichthouder scant sinds 2025 doorlopend duizenden sites, stuurt honderden waarschuwingen per jaar, en de meeste gewaarschuwde partijen passen zich aan.
De rechtspraak laat weinig ruimte. Een voorgevinkt vakje is geen toestemming, en cookies plaatsen zonder geldige toestemming is onrechtmatig. Toestemming moet vrij, specifiek, geinformeerd en ondubbelzinnig zijn, en even makkelijk in te trekken als te geven.
De strijd om internationale doorgifte is juridisch zwaar en vraagt bewijs dat een meting niet levert. De cookiewet is de eerste en eenvoudigste toets: zodra een tracker iets op je apparaat zet of uitleest zonder toestemming vooraf, staat de overtreding al los van waar de data belandt. Begin bij de laagste horde.
Het juridische kader is streng, maar de uitvoering hapert bij de overheid zelf, juist op de analytics-uitzondering. Overheidssites plaatsen analytische cookies zonder banner of keuze, terwijl een cookiewall voor overheidssites bij wet verboden is.
Openbaar privacy-onderzoek is geen schot in het duister. Tracking op een overheidsportaal werd gemeten, als datalek gemeld bij de toezichthouder, en mondde uit in Kamervragen en erkenning. Een onderbouwde meting reikt verder dan een artikel.
Bij een groot telecomlek bestond het merendeel van de blootgestelde profielen uit ex-klanten die al jaren weg waren, inclusief oude incassogegevens en identiteitsbewijzen. Data die niet was opgeruimd na het einde van de klantrelatie lekte gewoon mee. Een bewaartermijn overschrijden vergroot letterlijk de buit.
Een tracker-verzoek bewijst dat data wordt verstrekt, niet waar die belandt of wie hem inziet. Door elke vondst op een ladder te zetten, van verzoek gezien tot doorgifte bewezen, houd ik de sterke en de zwakke claim uit elkaar. Zo overclaim ik nooit, en toch blijft de harde onderlaag staan.
Een analytics-cookie voor toestemming kan onder een uitzondering vallen, maar bij het delen van herkenningsnummers, doorgifte naar de VS of een genegeerde weigering is die discussie er niet. Zet niet alles op een hoop overtreding. Splits in gemeten feit en sluitende conclusie, dan blijft je zwaarste claim ook de best verdedigbare.
Tracking en cookies
Hoe sites en apps je volgen, van de cookiebanner tot de trackers die na een weigering gewoon doorgaan.
Dit is de tak waar ik het meest om bekendsta, en het is ook waar mijn methode is ontstaan. Alles wat hier staat komt uit metingen die ik zelf heb gedaan en die iedereen kan overdoen.
Hoe ik tot een bevinding kom
Ik open een site in een schone browser, zonder geschiedenis en zonder eerdere toestemming, en ik leg al het netwerkverkeer vast. Dat doe ik drie keer: zonder iets aan te klikken, na alles weigeren, en na alles accepteren. Het verschil tussen die drie is waar de bevinding zit.
Daarna gedraag ik me als een bezoeker en niet als een scanner: scrollen, wachten, doorklikken. Veel volgtechniek vuurt pas na een handeling, en wie alleen de eerste seconde meet, ziet de helft niet.
Vervolgens lees ik de opname uit. Welke domeinen werden geraakt, welke cookies gingen mee, welke waarden zijn lang en stabiel genoeg om als sleutel te dienen, en welke partij hoort bij welk domein.
Wat ik daarna nog doe
Meten is het makkelijke deel. Het werk zit in de weging.
Ik beargumenteer eerst het tegendeel van mijn eigen bevinding, en pas als dat niet lukt schrijf ik haar op.
Ik label elke uitspraak op bewijsniveau: gemeten, afgeleid, of vermoed.
Ik scheid wat de code kan van wat er werkelijk gebeurde, want aanwezigheid is geen verstrekking.
En ik noteer wat ik niet heb gezien, want een nulbevinding is ook een bevinding.
Waarom het hier begint
Cookies en trackers zijn de toegankelijkste vorm van dit onderzoek: het gebeurt in je eigen browser, met gereedschap dat gratis is, en het is volledig na te rekenen. Vrijwel alles wat verderop in dit manuscript staat over apps, veilingen en overheden, is gebouwd op de methode die hier is ontwikkeld.
Het publieke verhaal over online volgen is blijven staan bij 1998: een site zet een bestandje op je computer, je kunt het weigeren of wissen, klaar. Die canon klopt nog voor precies één techniek en dekt misschien een vijfde van wat er werkelijk gebeurt. Al het andere, de veiling, de koppeling, de doorverkoop, het vermommen, heeft eigen woorden die zelden buiten het vak komen. Dit is de kaart van die woorden, en van de scheidslijnen die er structureel tussen wegvallen.
Onder het woord cookie zitten minstens acht manieren om je terug te herkennen, en de helft daarvan is helemaal geen cookie. Eigen cookie, derde-partij-cookie, opslag in de browser, een merkteken in de cache, het reclamenummer van je telefoon, een vingerafdruk van je apparaat. Ze verschillen in wie hem kan lezen, hoe lang hij leeft, of je hem kunt wissen en of de cookiewet er grip op heeft. Hier staat de hele familie, op die vier assen.
De woorden voor het meetgereedschap worden door elkaar gebruikt, terwijl ze verschillen in wat ze mogen, wat ze zien en wie ze kan aanzetten. Een pixel is een verzoek. Een tag is een stukje code. Een SDK is een meegeleverde bibliotheek met de rechten van de app zelf. Een tagmanager is een luik waardoor een marketeer na oplevering nieuwe code de pagina in schuift zonder dat er een ontwikkelaar aan te pas komt. Dat laatste is het gevaarlijkste van de vier en staat in geen enkele risicoanalyse.
Losse herkenningsnummers zijn hinderlijk. Gekoppelde herkenningsnummers zijn een dossier. De koppelindustrie heeft daar een eigen woordenschat voor: cookie-sync, identity resolution, identiteitsgrafiek, deterministisch en probabilistisch matchen, gehashte e-mail, universele id. Dit is de laag waar het echte kwaad zit, en juist deze laag is met een browsermeting nauwelijks te zien.
Doorverkoop is de zwaarste beschuldiging in dit veld en tegelijk de slechtst onderbouwde. De AVG kent het woord verkoop niet eens; die kent verstrekking aan een ontvanger. De Californische wet kent wel verkoop, en definieert die zo breed dat een gewone advertentiecookie er al onder valt. Wie een Amerikaanse definitie in een Nederlands stuk gebruikt zonder het te zeggen, beweert iets anders dan hij denkt.
Een deel van de vaktaal bestaat niet om iets te beschrijven maar om iets weg te schrijven. Geanonimiseerd, gepseudonimiseerd, niet-persoonsgebonden, first-party, eigen infrastructuur, essentieel, gerechtvaardigd belang, partner. Elk van die woorden verplaatst een verplichting zonder de techniek te veranderen. Dit is de lijst, met per woord wat het juridisch echt betekent en waaraan je ziet dat het verkeerd wordt gebruikt.
De wet vraagt geen toestemming voor cookies die strikt noodzakelijk zijn om een dienst te leveren die je zelf hebt gevraagd. Voor al het andere wel, vooraf. Het verschil tussen die twee is de hele cookiewet, en het wordt structureel verkeerd getrokken. Hier staat per soort cookie of hij zonder toestemming mag, met echte voorbeelden en de toets die je zelf kunt doen.
Bij gratis Nederlandse apps vertrekt bij het laden van een advertentie een OpenRTB-biedverzoek met het reclamenummer, de locatie, de netwerkcode, de provider en de toestemmingsstring erin. Dat verzoek gaat naar elke partij die op het veilingplatform mag meebieden, dus ook naar iedereen die verliest. In één gebruikssessie ging 87 procent van de netwerkverzoeken en 54 procent van de bytes naar de advertentieketen. Onverwante apps blijken dezelfde kopers achter zich te hebben: van zeven bieders in een echte bid-respons stonden er zes ook in de partnerlijst van een totaal andere app. Wat ik meet is het vertrek; wat er daarna tussen servers gebeurt blijft buiten beeld, dus elk getal is een ondergrens.
Op Nederlandse overheidssites is de grootste bron van verkeer voor toestemming geen advertentietracker maar een lettertype, een kaartje of een icoonpakket van een extern adres. Google Fonts, Google Maps, Adobe Typekit, jsDelivr en Cloudflare laden in 97 tot 100 procent van de gevallen al voordat de bezoeker iets heeft geklikt. Dat is geen kwade opzet, het is een bouwkeuze, en het is de goedkoopste te repareren overtreding die er bestaat.
Het instrument dat toestemming moet vragen, vraagt zelf geen toestemming. Op alle 38 gemeten sites met Cookiebot laadde cookiebot.com al voordat de bezoeker iets koos. Bij Google Funding Choices, een toestemmingsvenster van een advertentiebedrijf, gebeurde dat op 88 van de 112 sites. De banner is geen schild maar een extra ontvanger.
Ik heb elke site drie keer bezocht: niets doen, weigeren, accepteren. Op 77,8 procent van de sites zonder herkende toestemmingsmodule laadde na een expliciete weigering evenveel of meer dan bij niets doen. Weigeren is op die sites een knop zonder bedrading. Dat is meetbaar, per site, en het is precies de toets die een toezichthouder in een half uur kan overdoen.
Toestemmingsmodules zijn niet inwisselbaar. Over 1.718 overheidssites loopt het aandeel dat al voor toestemming trackt uiteen van 20,8 procent bij de ene module tot 100 procent bij de andere. De keuze van je leverancier voorspelt je nalevingsniveau beter dan je privacyverklaring dat doet.
Voorleessoftware, feedbackknoppen en webarchivering worden ingekocht om de site beter te maken, en ze laden vrijwel altijd voor de toestemmingsvraag. ReadSpeaker deed dat op 41 van 41 sites, Mopinion op 25 van 26, en de webarchiefdienst sitearchief.nl draagt zelf Google Analytics mee op 33 sites. Wie zijn toestemmingsvraag serieus neemt, moet ook zijn hulpmiddelen tellen.
Op 710 van 1.718 gemeten overheidssites loopt verkeer via een subdomein van de site zelf dat in werkelijkheid naar een derde partij wijst. Voor de browser is dat eigen verkeer, dus de bescherming tegen derde-partijcookies grijpt niet. Voor de bezoeker is het onzichtbaar. Voor de verwerkingsverantwoordelijke is het meestal ook onzichtbaar, want het staat in een DNS-record en niet in de code.
De grootste ontvanger op Nederlandse overheidssites is de overheid zelf. Op 668 van 669 sites waar rijksoverheid.nl als partij optreedt, laadde die verbinding al voor enige toestemming, met Piwik PRO als analysepakket en servers in Belgie. Dat kan rechtmatig zijn, maar alleen onder voorwaarden die je moet kunnen aantonen, en die aantoonbaarheid is precies wat ontbreekt.
BeforeYouMick is geen tool die zegt of een site fout zit. Het is een meetketen die vastlegt wat er gebeurde, in drie los van elkaar staande consent-modi, met een hash over elk bewijsstuk zodat een tegenpartij het kan narekenen. Hier staat de hele keten, stap voor stap, inclusief de plekken waar hij liegt als je niet oplet.
Een browser is een vertaler die code omzet in beeld, en hij is de laatste jaren steeds meer jouw kant gaan kiezen. Hij blokkeert cookies van derden, verbergt je IP-adres, en beperkt wat een script mag zien. Bijna alle technieken waar ik over schrijf bestaan om precies die bescherming te omzeilen. Wie dat eenmaal ziet, leest het nieuws over tracking anders.
Raakt iemand de vrijheid van meningsuiting aan, dan staat het land op zijn kop. Privacy staat in dezelfde grondwet en wordt dagelijks op grote schaal geschonden op het glazen plaatje waar we uren per dag naar kijken, zonder enige verontwaardiging. Dat verschil komt niet doordat mensen privacy minder belangrijk vinden. Het komt doordat elk mechanisme dat woede opwekt bij tracking stelselmatig ontbreekt.
Een betaalmuur is op zichzelf te verdedigen, want journalistiek kost geld. Wat ik meet is iets anders: wie betaalt, krijgt de trackers er gewoon bij. Je koopt je uit de reclame en blijft handelswaar. Dat is niet twee keer verdienen aan hetzelfde product, dat is de lezer als product houden nadat hij klant is geworden.
Apple, Google en Meta verdienen aan tracking, Nederlandse bedrijven leveren het aan, en de wet staat het grotendeels toe en handhaaft nauwelijks. Dan is het bijna legaal. In die situatie is boos wijzen niet genoeg. Nieuws en weer zijn te oud en te belangrijk om vergiftigd te laten. Daarom bouw ik nieuws.mickbeer.com en weer.mickbeer.com: niet alleen anders, ook beter.
Gegevens die zonder toestemming met een ander bedrijf worden gedeeld, zijn meestal geen datalek maar een andere overtreding, met een eigen route naar de toezichthouder. Meestal, niet altijd: gaat het om gevoelige gegevens of om een verstrekking die niemand bedoeld heeft, dan kan het er alsnog een zijn. Wie standaard de datalekingang kiest, kiest doorgaans de verkeerde.
Een app die je paspoort scant, je gezicht leest of je locatie kent, is in feite een spionage-tool, net zoals een cookie een tracker is. Je geeft je hele hebben en houwen aan een partij die je niet kent, vaak ongetoetst. Een externe blik is dan geen luxe maar noodzaak: wie zijn eigen vlees keurt, mist wat een expert wel ziet. Daar hoort begrip bij. Een app uit 2020 kwam op in een tijd met andere privacyspanningen dan nu. Dat verklaart hoe iets ontstaat, maar ontslaat niemand van de plicht het te laten nakijken en bij te stellen. Het verschil zit in de reactie. De een ontkent, de ander heroverweegt echt: FastID paste na de bevindingen zelfs zijn marketingclaims aan en herzag architectuurkeuzes. Dat is hoe het hoort. Ontkennen of bijsturen is uiteindelijk geen technische kwestie maar een bestuurlijke keuze.
Een HAR-bestand is de volledige opname van al het netwerkverkeer bij een websitebezoek: elk verzoek, elke cookie, elke bestemming. Bijna al mijn privacy-bevindingen komen eruit. Een verklaring is een belofte, de HAR is de uitvoering. Het vastleggen kan iedereen; het lezen en duiden is het vak.
Toont de eerste laag van een toestemmingsvenster geen weigerknop naast de accepteerknop, dan is er geen vrije keuze. Wat ik dan als weigering meet, is feitelijk alleen het uitblijven van een klik. Dat ontbreken is zelf een bevinding, geen leemte in de meting.
Op een zorgplatform liep een schermopname-tool nog nadat de bezoeker toestemming had geweigerd, en vertrokken meerdere verzoeken met gegevens naar Google. Wat je doet op een plek die vertrouwelijk hoort te zijn, belandt zo bij een derde. Ook zonder doorverkoop is dat een verstrekking aan een vreemde.
De sterkste bevindingen liggen stelselmatig bij geauthenticeerde, vitale publieke diensten: achter je DigiD, in de infrastructuur onder de staatsinlog, op de openbare weg. Precies daar heeft de burger geen alternatief en geeft hij geen toestemming, en precies daar wordt het minst gemeten. Een commerciele app kun je mijden. De overheid en de vitale infrastructuur niet.
Voordat er geboden wordt, wisselen advertentiebedrijven eerst herkenningsnummers uit, zodat ze weten dat het om dezelfde browser gaat. Die koppeling bewijst herkenning, niet dat er op dat moment op de aandacht van de bezoeker werd geboden. Wie het een voor het ander aanziet, beweert meer dan de meting toont.
Het als privacyvriendelijk verkochte alternatief voor de derde-partij-cookie wordt in de praktijk naast de oude advertentiestack gezet, niet in plaats ervan. Een aanvulling op het tracken, geen vervanging. Wie de belofte gelooft en de code niet leest, ziet alleen de helft.
De belangrijkste datastroom oogt niet als reclame en ontsnapt daardoor aan een cookie-check. Een klantdataplatform verzamelt elke handeling en zet die structureel onder Amerikaanse jurisdictie, terwijl de aandacht naar de zichtbare advertenties gaat. Wie alleen op advertentie-trackers let, mist de ruggengraat.
Wat de burger op de cookiemuur leest, komt niet overeen met wat de machine eronder declareert. Het getoonde aantal partners is lager dan het werkelijke. De belofte en de bytes lopen uiteen, precies op het punt waar je geacht wordt geinformeerd toe te stemmen.
Privacy gaat op twee tegengestelde manieren stuk. De ene verstrooit je gegevens breed: honderd bieders krijgen elk een stukje. De andere concentreert de intiemste data juist bij een poortwachter die er een totaalprofiel van bouwt. Beide zijn een probleem, maar spiegelbeeldig. Toezicht dat alleen losse derde-partij-trackers telt, ziet het concentratie-model niet eens.
Een herkenbare naam in de broncode bewijst niet dat een tracker actief is, en soms niet eens dat het de partij is die je denkt. Alleen de gemeten byte op de lijn bevestigt het. Wie op een tekstmatch afgaat, telt trackers die er niet zijn, en dat is precies wat een tegenpartij eruit pikt.
In een app of site zitten families die elk iets anders doen. Analytics meet gedrag. Crash-SDK's meten stabiliteit. Attributie koppelt een installatie aan de campagne die hem opleverde. Identity-resolution knoopt losse identifiers aan een persoon. Advertentie-SDK's bieden je toestel aan adverteerders aan. Ze allemaal 'tracker' noemen verhult dat de risico's per rol verschillen; een crash-SDK is iets anders dan een identity-resolver.
Installatie-identifiers en de advertentie-ID heten 'resetbaar', maar zodra dezelfde id in elk verzoek meegaat, werkt hij als koppelsleutel tussen bestemmingen. Een gehashte e-mail is geen anonimisering: dezelfde invoer geeft dezelfde hash, dus hij correleert een persoon over diensten heen net zo goed als de e-mail zelf. Pseudonimisering is geen anonimisering.
Twee trackers met elk een eigen identifier voor jou kunnen die id's onderling uitwisselen, zodat ze weten dat het om dezelfde persoon gaat. Zo ontstaat een gedeeld profiel zonder dat een partij alles ziet. Op het web heet dat cookie-sync; in apps bestaat het equivalent met device- en installatie-id's. Dit is het mechanisme dat losse waarnemingen tot een dossier smeedt.
Een tracker kan draaien op een subdomein van de site zelf, via een DNS-omleiding die stiekem naar de tracker-infrastructuur wijst. Daardoor lijkt hij eerste-partij en ontwijkt hij browserblokkades. Wie alleen op de domeinnaam kijkt, mist hem; je moet de DNS-keten en het uiteindelijke IP volgen om te zien wie er echt achter zit.
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.
Bij server-side tagging stuurt de site naar een eigen endpoint, dat vervolgens serverzijdig doorverdeelt naar de echte trackers. Voor een meting op je toestel lijkt het dan of er maar een, eigen bestemming is; de doorverdeling gebeurt buiten je zicht. Daarom bewijst de afwezigheid van een tracker-domein op de lijn niet dat de data er niet komt.
Een deel van het tracker-verkeer komt pas los na een handeling: na het accepteren van consent, na scrollen, na inloggen, of na een schermovergang. Een opstart-meting vangt die niet en onderschat het beeld. Daarom is een ingelogde, doorgeklikte meting rijker dan een snelle cold-start, en hoort bij '0 gevonden' altijd de vraag: gemeten tot welk punt?
Session-replay-tools nemen je tik-, scroll- en invoergedrag op alsof iemand meekijkt. De maskering van gevoelige velden is meestal view-gebaseerd: ze werkt alleen als de juiste velden als gevoelig zijn gemarkeerd. Of het echt maskeert kun je niet aannemen; dat moet frame voor frame op de opname zelf worden geverifieerd. Een claim 'wij maskeren' zonder die verificatie is onbewezen.
Toestemmingsvragen gaan over marketing en meting. Alles wat als fraudebestrijding, foutopsporing of veiligheid is geclassificeerd, valt er per ontwerp buiten en blijft dus draaien nadat je alles hebt geweigerd. Vaak is dat verdedigbaar, want zo'n functie beschermt je ook. Het gevolg is wel een hele categorie verwerkingen waarvan de gebruiker het bestaan niet kent, de omvang niet ziet en de bewaartermijn niet kan navragen.
Trackers die pas na scrollen of wachten vuren, ontsnappen aan een snelle controle. Wie wil weten wat een site echt doet, moet zich gedragen als een gewone bezoeker: scrollen, wachten, en per toestemmingskeuze apart meten. De scanner die alleen de eerste seconde ziet, ziet te weinig.
De aandacht ging naar de publieke overheidssite, maar achter de DigiD-login draait de meting door, met fiscaal-persoonlijke context erbij. Juist op de plek waar je het minst te kiezen hebt, is de tracking het diepst. Inloggen beschermt je hier niet, het verzwaart de context.
Op de plek achter de login is er niet eens een toestemmingsvraag om te negeren, hij ontbreekt volledig. De privacyverklaring belooft zorgvuldigheid, de meting toont het tegendeel. Geen keuze aanbieden is geen vergetelheid, het is een inrichting.
Veel herstel bestaat uit een laag die de code tegenhoudt in plaats van de code weghaalt. Zolang het fragment in de pagina staat, hangt de bescherming af van de juiste instelling van een module die morgen kan worden bijgewerkt. Een meting die op dat moment schoon is, blijft geldig voor dat moment en niet voor de configuratie erachter. Noteer bij een schoon resultaat altijd of iets weg is of alleen wordt tegengehouden.
Organisaties verklaren een gebrek graag uit techniek, budget of onwetendheid. Dat verweer valt weg zodra je binnen dezelfde organisatie een plek vindt waar het wél goed is ingericht. Zoek dus altijd het interne tegenvoorbeeld: de omgeving achter de login, de tweede site, de cookie die na weigeren wél verdwijnt. Dan is de bevinding niet meer dat iets misging, maar dat er ergens anders is gekozen.
Bij paginabezoeken weet een organisatie vooraf welke gegevens de meetlaag in gaan. Bij zoekbalken, chatvensters, feedbackformulieren en foutmeldingen bepaalt de bezoeker de inhoud, en die is niet vooraf te begrenzen. Daarmee is vrije tekst een categorisch ander risico dan paginastatistiek, ook als de meetopzet identiek is. Foutmeldingen tellen mee, want die bevatten vaak invoer die tot een persoon te herleiden is.
Het woord cookie klinkt als een koekje, iets onschuldigs. Maar het is een manier om je te herkennen en te volgen, over sites heen. Een vriendelijk woord voor een techniek die allesbehalve vriendelijk is.
Slimme apparaten komen je huis binnen als iets handigs. De voorwaarden accepteert iedereen, niemand leest ze. Maar als niemand ze leest, is toestemming een formaliteit geworden, geen echte keuze.
De gegevens die via cookies en trackers worden verzameld, komen via datahandelaren uiteindelijk bij fraudeurs terecht. Zo loopt er een lijn van een cookie op een website naar een bankhelpdeskfraudeur aan de lijn. Dat we die lijn normaal zijn gaan vinden, is misschien wel het ergste eraan.
De slimme bril van Meta is een hebbeding, trendy om te dragen. Maar hij legt je omgeving vast, de mensen om je heen die nergens toestemming voor gaven, en die beelden voeden de training van het bedrijf. Iets kan hip zijn en tegelijk allesbehalve cool.
De mensen die de techniek bouwen en de mensen die de koers bepalen, staan in veel organisaties ver uit elkaar. De tracking zit in de code, maar de directie weet niet altijd wat er gebeurt, en de coder niet altijd waarom. Zo ontstaat een misstand die niemand bewust koos.
Wie op een nieuwssite toestemming geeft, opent geen vast lijstje partijen maar een internationale veiling waarin herkenningsnummers worden uitgewisseld. Wie er verschijnt hangt af van de campagne, de pagina en de veiling van dat moment. De juiste kop is niet dat land X je volgt, maar dat de markt zelf grensoverschrijdend is.
In advertentie-gedreven apps gaat het leeuwendeel van je dataverbruik naar de reclame- en trackinglaag, niet naar de functie die je zocht. Je betaalt databundel en batterij aan overhead die jou niets oplevert.
Een lichte, nette app met nauwelijks advertenties beschermt je niet automatisch. Een partner in de keten is genoeg om je gegevens bij een databroker te laten belanden. Weinig trackingverkeer en toch in de lijst staan zijn twee losse vragen.
Een scan van alleen de voorpagina mist het meeste. Trackers vuren pas echt na het accepteren van cookies, na doorklikken en na het starten van een video. En een deel vuurt al voor toestemming, ook in de weiger-stand. Wie alleen de etalage test, ziet de etalage.
Bij het uitwisselen van herkenningsnummers kregen de meelezende partijen wel je nummer en je toestemmingsstring, maar niet zichtbaar welk artikel je las. Dat is een scherper en eerlijker punt dan zeggen dat ze wisten wat je las. Precies benoemen wat wel en niet in de data zat, houdt de claim overeind.
Bij een nieuwssite telt een extra gewicht mee: via een gesynchroniseerd herkenningsnummer valt te herleiden wie welk artikel opende. Voor de gewone lezer is dat profielvorming, voor journalistieke bronbescherming een apart risico, zeker als zo'n tracker op een tip- of klokkenluiderspagina staat.
De gevoeligste categorieen, bank, overheid, zorg, verzekeraars en politiek, blijven vrijwel schoon van deze buitenlandse partijen. Vrijwel alleen commerciele media en retail doen mee. De sector die bij uitstek over privacy zou moeten waken, verdient geld met een model dat je herkenbaar maakt.
Op vrijwel alle gemeten sites vuurt de buitenlandse techniek pas na accepteren, dus actief weigeren helpt aantoonbaar. Toch vuurt op een enkele site de tracker ook na een weigering. Een tracker-blokker in de browser vangt wat een keuze in de banner niet vangt.
Door een verzoek naar een niet-bestaand berichtnummer te sturen en de tijd tot de bevestiging te meten, valt af te leiden of iemand online of actief is, zonder diens toestemming. Zulke stille aanwezigheids-lekken vragen geen inbraak, alleen een klok. Metadata over aanwezigheid is een categorie op zich.
Cookie-toezicht is echt geworden. De toezichthouder scant sinds 2025 doorlopend duizenden sites, stuurt honderden waarschuwingen per jaar, en de meeste gewaarschuwde partijen passen zich aan.
De rechtspraak laat weinig ruimte. Een voorgevinkt vakje is geen toestemming, en cookies plaatsen zonder geldige toestemming is onrechtmatig. Toestemming moet vrij, specifiek, geinformeerd en ondubbelzinnig zijn, en even makkelijk in te trekken als te geven.
De strijd om internationale doorgifte is juridisch zwaar en vraagt bewijs dat een meting niet levert. De cookiewet is de eerste en eenvoudigste toets: zodra een tracker iets op je apparaat zet of uitleest zonder toestemming vooraf, staat de overtreding al los van waar de data belandt. Begin bij de laagste horde.
Het juridische kader is streng, maar de uitvoering hapert bij de overheid zelf, juist op de analytics-uitzondering. Overheidssites plaatsen analytische cookies zonder banner of keuze, terwijl een cookiewall voor overheidssites bij wet verboden is.
Openbaar privacy-onderzoek is geen schot in het duister. Tracking op een overheidsportaal werd gemeten, als datalek gemeld bij de toezichthouder, en mondde uit in Kamervragen en erkenning. Een onderbouwde meting reikt verder dan een artikel.
Moderne toestemmingssystemen sturen na een weigering nog steeds een cookieloze ping, met een geen-personalisatie-vlag. Een netwerkverzoek zonder cookie bewijst dus niet dat er niet gemeten wordt, en ook niet dat er wel getrackt wordt. Je moet de inhoud van het verzoek bekijken, niet of er een cookie aan hangt.
Er is verschil tussen een tracker die je browser rechtstreeks aanroept en een die je server-side vermoedt. Alleen het eerste is hard bewijs. Wat ik in de ruwe opname zie gebeuren telt; wat ik erbij redeneer is een aparte, zwakkere laag.
Een tracker-verzoek bewijst dat data wordt verstrekt, niet waar die belandt of wie hem inziet. Door elke vondst op een ladder te zetten, van verzoek gezien tot doorgifte bewezen, houd ik de sterke en de zwakke claim uit elkaar. Zo overclaim ik nooit, en toch blijft de harde onderlaag staan.
Een analytics-cookie voor toestemming kan onder een uitzondering vallen, maar bij het delen van herkenningsnummers, doorgifte naar de VS of een genegeerde weigering is die discussie er niet. Zet niet alles op een hoop overtreding. Splits in gemeten feit en sluitende conclusie, dan blijft je zwaarste claim ook de best verdedigbare.
Meten en wegen
De methode zelf: hoe je een schending vaststelt zonder te overclaimen, en het bewijs op niveau labelt.
Code in een app, een verzoek op de lijn, een gegeven dat aankomt, een profiel dat wordt gekoppeld, een dossier dat wordt verkocht. Dat zijn vijf verschillende beweringen, en ze vragen elk om ander bewijs. Wie de ene meet en de andere opschrijft, heeft een fout in zijn stuk staan die een advocaat er in één zin uithaalt. Hier staat elke trap met wat je ervoor moet aantonen.
BeforeYouMick is geen tool die zegt of een site fout zit. Het is een meetketen die vastlegt wat er gebeurde, in drie los van elkaar staande consent-modi, met een hash over elk bewijsstuk zodat een tegenpartij het kan narekenen. Hier staat de hele keten, stap voor stap, inclusief de plekken waar hij liegt als je niet oplet.
Hier loop ik door de redenering waarmee ik van een vermoeden naar een publiceerbare bevinding kom. Het gereedschap laat ik buiten beschouwing, want dat is inwisselbaar. De volgorde van denken is dat niet, en juist daar zit het verschil tussen een indruk en iets dat een tegenpartij overleeft.
Ik heb ruim 6.000 classificaties gedaan op Zooniverse, verspreid over zeventien projecten: kometen, asteroiden, apengezondheid, plankton, wolken op Mars. Het levert me niets op en het leert me alles over kijken. En het lost onderweg het probleem op waar ooggetuigen aan onderdoor gaan, want hier zijn de waarnemers echt onafhankelijk.
Waar een server staat, leid ik af uit een database die veroudert. Een oude database geeft valse landen. Een uitspraak over locatie is niet harder dan de dag waarop die database voor het laatst is bijgewerkt, en hoort vers bevestigd voor ze hard wordt gemaakt.
Op een perspagina van het ministerie van VWS, een als gevoelig gemarkeerd overheidsdomein, lezen vierendertig verschillende bedrijven mee. Twaalf daarvan krijgen hetzelfde herkenningsnummer aangereikt. De burger ziet een overheidssite. Er kijken vierendertig bedrijven mee.
Naast liegen en verzwijgen bestaat een derde soort: iets zeggen wat klopt maar de verkeerde indruk wekt. Wie zegt dat hij de toegang snel afsloot, maar alleen de sessie introk en niet de sleutel, spreekt geen onwaarheid en misleidt toch. Die categorie hoort apart benoemd.
Onderzoek naar een datalek mag het lek niet vergroten. Een gelekte dataset hoort in een afgesloten, netwerkloze omgeving onderzocht, niet in een clouddienst waar hij opnieuw kan uitlekken. De methode zelf moet de gegevens beschermen die ze onderzoekt.
Een herkenbare naam in de broncode bewijst niet dat een tracker actief is, en soms niet eens dat het de partij is die je denkt. Alleen de gemeten byte op de lijn bevestigt het. Wie op een tekstmatch afgaat, telt trackers die er niet zijn, en dat is precies wat een tegenpartij eruit pikt.
In een app of site zitten families die elk iets anders doen. Analytics meet gedrag. Crash-SDK's meten stabiliteit. Attributie koppelt een installatie aan de campagne die hem opleverde. Identity-resolution knoopt losse identifiers aan een persoon. Advertentie-SDK's bieden je toestel aan adverteerders aan. Ze allemaal 'tracker' noemen verhult dat de risico's per rol verschillen; een crash-SDK is iets anders dan een identity-resolver.
Installatie-identifiers en de advertentie-ID heten 'resetbaar', maar zodra dezelfde id in elk verzoek meegaat, werkt hij als koppelsleutel tussen bestemmingen. Een gehashte e-mail is geen anonimisering: dezelfde invoer geeft dezelfde hash, dus hij correleert een persoon over diensten heen net zo goed als de e-mail zelf. Pseudonimisering is geen anonimisering.
Twee trackers met elk een eigen identifier voor jou kunnen die id's onderling uitwisselen, zodat ze weten dat het om dezelfde persoon gaat. Zo ontstaat een gedeeld profiel zonder dat een partij alles ziet. Op het web heet dat cookie-sync; in apps bestaat het equivalent met device- en installatie-id's. Dit is het mechanisme dat losse waarnemingen tot een dossier smeedt.
Bij server-side tagging stuurt de site naar een eigen endpoint, dat vervolgens serverzijdig doorverdeelt naar de echte trackers. Voor een meting op je toestel lijkt het dan of er maar een, eigen bestemming is; de doorverdeling gebeurt buiten je zicht. Daarom bewijst de afwezigheid van een tracker-domein op de lijn niet dat de data er niet komt.
Bij real-time bidding stuurt een app een biedverzoek met kenmerken van je toestel en context (device-identifier, grofweg locatie, app, soms afgeleide interesses) naar een advertentie-uitwisseling. Tientallen partijen zien die request en bieden om jou een advertentie te tonen. Het punt is: de request zelf verspreidt je kenmerken naar alle deelnemers, ook de verliezers. Een advertentieplek is dus tientallen partijen die je profiel te zien kregen.
Verontwaardiging is pas geloofwaardig als je actief geprobeerd hebt jezelf ongelijk te geven. Voor elke bevinding beargumenteer ik eerst het tegendeel, en geef ik de onderzochte partij het sterkste tegenargument. Wat die ronde overleeft, staat pas echt.
Een conclusie bestaat vaak uit twee beweringen die aan elkaar zijn geplakt, met verschillende bewijskracht. Een tegenpartij weerlegt dan het zwakst onderbouwde deel en presenteert dat als weerlegging van het geheel. Formuleer daarom elke conclusie als losse helften, elk met een eigen bewijsniveau en een eigen bron. Het beschermt ook tegen jezelf: wie zijn hardste deelbevinding vooropstelt, geeft de bredere en zwaarder wegende bevinding weg.
Organisaties verwijzen een onderzoeker graag naar hun responsible-disclosure-kanaal, ook als er geen kwetsbaarheid in het spel is. Het verschil is scherp: binnendringen in andermans systeem is een beveiligingsvraag, meten wat je eigen apparaat met je eigen gegevens doet is dat niet. Voor het tweede geldt geen besloten meldroute en geen wachttermijn. Benoem dat onderscheid in het stuk zelf, want het verwijt van onzorgvuldig melden komt anders terug als frame.
Mislukt een meting, dan betekent dat niet dat er niets gebeurt, alleen dat ik niets zag. Afwezigheid van bewijs presenteren als bewijs van afwezigheid is de gevaarlijkste fout in dit werk. Een lege uitkomst is 'onbekend', geen vrijspraak.
Bij het wegen van internationale doorgifte houd ik twee dingen apart: waar de data fysiek landt, en welk recht op het bedrijf van toepassing is. Een Amerikaans bedrijf blijft vorderbaar, ook met een Europees datacenter. Die twee door elkaar halen ondermijnt de hele claim.
Meet je een hele sector langs dezelfde meetlat, dan is de best scorende partij belangrijker dan de slechtste. Zij levert het bestaansbewijs dat de functie ook zonder de gemeten constructie werkt, met hetzelfde publiek en dezelfde regels. Daarmee verschuift het gesprek van dit kan niet anders naar waarom bij jou wel. Neem in elke sectormeting bewust een koploper op, ook als die geen nieuws oplevert.
Certificaat-pinning, systeem-CA's en obfuscatie beschermen de gebruiker tegen meelezende derden. Dezelfde maatregelen sluiten de onderzoeker buiten, en daarmee ook de gebruiker die zelf wil nagaan wat zijn apparaat verstuurt. Het gevolg is een omkering: hoe gevoeliger de stroom, hoe kleiner de kans dat iemand hem kan narekenen. Controleerbaarheid is dus geen bijproduct van goede beveiliging maar een aparte eis.
Trackers die pas na scrollen of wachten vuren, ontsnappen aan een snelle controle. Wie wil weten wat een site echt doet, moet zich gedragen als een gewone bezoeker: scrollen, wachten, en per toestemmingskeuze apart meten. De scanner die alleen de eerste seconde ziet, ziet te weinig.
Zodra een beoordelingskader meerdere vragen kent, ontstaat de neiging ze te wegen en op te tellen. Dan compenseert een hoge score op het ene punt een onaanvaardbare uitkomst op het andere, en komt er alsnog een voldoende uit. Bij vragen die elk op zichzelf een grens bewaken werkt dat niet: elk antwoord moet afzonderlijk ja zijn, of het antwoord is nee. Dat verschil bepaalt of een kader iets tegenhoudt of alles doorlaat.
Een schone meting kan twee dingen betekenen: er gebeurt niets, of je instrument kijkt de verkeerde kant op. Van buitenaf zijn die twee niet te onderscheiden, en juist een nulmeting wordt gepubliceerd als geruststelling. De oplossing is een positieve controle: laat dezelfde detector eerst los op materiaal waarvan vaststaat dat het besmet is. Pas als hij daar aanslaat, telt zijn stilte op het nieuwe materiaal.
Als er een sector zou moeten kloppen op privacy, is het de sector die privacy verkoopt. Toch zakken keurmerk- en certificeringspartijen zelf voor dezelfde toets: van negen geteste partijen belandden er meerdere op het niveau Privacy Lek, waaronder twee grote certificeerders. Ze preken water en drinken zelf wijn.
Je zou verwachten dat gevoeliger context tot voorzichtiger bewaren leidt. In de praktijk is het omgekeerd: hoe gevoeliger de omgeving, hoe langer de persistente identifier blijft leven. Precies de omgekeerde beweging van dataminimalisatie.
Een enkele meting kan altijd worden weggezet als momentopname of slordigheid. Publieke webarchieven maken van dezelfde vondst een reeks, en een reeks heeft een begindatum. Duur is het verschil tussen een fout en een werkwijze: iets dat jaren onafgebroken in de broncode staat, is telkens opnieuw bevestigd. Neem bij elke bevinding de vraag mee sinds wanneer die er staat, en behandel de archiefreeks als ondergrens.
Een verklaring dat de omvang nog onduidelijk is, wordt meestal gelezen als voorbehoud. Het is een bevinding. Systemen die dit soort verkeer wel vastleggen, kunnen achteraf precies reconstrueren wat er is opgevraagd en door wie. De erkenning van onwetendheid stelt dus vast dat die vastlegging ontbrak, en dat is een controleerbare uitspraak over het ontwerp. Zet zulke uitspraken in de bevindingenkolom, niet in de nuancekolom.
Tussen wederhoor en publicatie verandert een dossier. Wie zich later verweert, pakt vaak een vroege formulering die de auteur zelf al had geschrapt. Dat is geen weerlegging maar een verplaatsing van het onderwerp, en het werkt omdat het publiek de versiegeschiedenis niet kent. Leg bij elke correctie vast wat er wanneer is geschrapt, en vraag bij elk verweer op welke versie het is uitgevoerd.
Een aangescherpte drempel verandert niet alleen de casus van vandaag maar elke eerdere meting. Wie de nieuwe regel alleen op de actuele publicatie loslaat, produceert een verschil dat geen bevinding is maar een methodeverschil, en dat lijkt gericht. Draai na elke wijziging het volledige corpus opnieuw, publiceer hoeveel eerdere uitkomsten meebewegen, en zeg erbij wanneer de regel is ingegaan.
Veel herstel bestaat uit een laag die de code tegenhoudt in plaats van de code weghaalt. Zolang het fragment in de pagina staat, hangt de bescherming af van de juiste instelling van een module die morgen kan worden bijgewerkt. Een meting die op dat moment schoon is, blijft geldig voor dat moment en niet voor de configuratie erachter. Noteer bij een schoon resultaat altijd of iets weg is of alleen wordt tegengehouden.
Een meting die tegen een eigen norm wordt afgezet, blijft een mening tegenover een mening. Een openbare, gedateerde belofte van de organisatie zelf haalt die discussie weg. De vraag wordt dan niet of iets zou moeten, maar of wat beloofd is ook feitelijk zo is. Ga vóór het meten op zoek naar brieven en beleidsteksten met een datum, en meet daarna precies wat daarin staat.
Organisaties verklaren een gebrek graag uit techniek, budget of onwetendheid. Dat verweer valt weg zodra je binnen dezelfde organisatie een plek vindt waar het wél goed is ingericht. Zoek dus altijd het interne tegenvoorbeeld: de omgeving achter de login, de tweede site, de cookie die na weigeren wél verdwijnt. Dan is de bevinding niet meer dat iets misging, maar dat er ergens anders is gekozen.
Na een incident komt de geruststelling bijna altijd van iemand met een belang bij die geruststelling. Dat geldt voor een dader die vernietiging belooft, en net zo goed voor een leverancier die zijn eigen logboeken beheert en zelf bepaalt wat eruit komt. De toets is simpel: kan een buitenstaander dit narekenen, en is het spoor onwijzigbaar voor wie er baat bij heeft. Kan dat niet, behandel de situatie dan alsof de ongunstige uitkomst waar is.
Een tijdlijn laat zien wat er gebeurde, maar verbergt dat er op elk punt een andere route beschikbaar was. Leg per moment twee dingen naast elkaar: de route die genomen werd, en de route die toen ook op tafel lag. Zo wordt zichtbaar dat de uitkomst geen ongeluk is maar een optelsom van keuzes. Deze vorm is ook eerlijker, want je toont welk alternatief realistisch was op het moment zelf en niet met kennis achteraf.
Door een verzoek naar een niet-bestaand berichtnummer te sturen en de tijd tot de bevestiging te meten, valt af te leiden of iemand online of actief is, zonder diens toestemming. Zulke stille aanwezigheids-lekken vragen geen inbraak, alleen een klok. Metadata over aanwezigheid is een categorie op zich.
Om te toetsen of een waarde een persoon volgt, leg ik hem over meerdere schone metingen naast elkaar. Blijft hij identiek over runs en over verschillende sites, dan hoort hij bij de configuratie van de site, niet bij jou. Dat gedrag scheidt een echt herkenningsnummer van ruis, niet de vorm.
Er is verschil tussen een tracker die je browser rechtstreeks aanroept en een die je server-side vermoedt. Alleen het eerste is hard bewijs. Wat ik in de ruwe opname zie gebeuren telt; wat ik erbij redeneer is een aparte, zwakkere laag.
Achter een eigen verzamelserver of een server-side veiling kunnen tientallen partijen worden aangeroepen zonder dat hun naam ooit in het verkeer verschijnt. Niet in de meting betekent dus niet niet betrokken. Dit is de grootste structurele beperking van elk verkeersonderzoek en hoort er expliciet bij.
Sites sturen bezoekersdata naar een eigen subdomein dat vervolgens server-side kan doorsturen naar wie dan ook. Behandel zo'n verzamelpunt niet als veilig omdat het van de site zelf is, maar als eigen categorie: verstrekking vastgesteld, bestemming onbekend.
Wie elke aangeraakte host meetelt als data-ontvanger, telt te hoog. Splits in categorieen: herkende partij met inhoud, aangeraakt maar inhoud onbekend, en louter infrastructuur. Anders tel je schaduwen mee.
Een tracker-verzoek bewijst dat data wordt verstrekt, niet waar die belandt of wie hem inziet. Door elke vondst op een ladder te zetten, van verzoek gezien tot doorgifte bewezen, houd ik de sterke en de zwakke claim uit elkaar. Zo overclaim ik nooit, en toch blijft de harde onderlaag staan.
RTB, adtech en brokers
De advertentieveiling achter de schermen: hoe je profiel in milliseconden wordt aangeboden aan partijen die je nooit ziet.
Deze tak gaat over de machinerie achter de advertenties, en die is groter en sneller dan de meeste mensen zich voorstellen. Hier leg ik uit hoe het werkt, want zonder dat beeld zijn de losse bevindingen niet te plaatsen.
Wat er gebeurt in de tijd dat een pagina laadt
Je opent een pagina. Voordat je iets ziet, meldt de site dat er advertentieruimte beschikbaar is. Dat bericht gaat naar een veilingplatform, dat het doorstuurt naar tientallen partijen die mogen bieden.
In dat biedverzoek zit meer dan alleen de advertentieplek. Er zit een herkenningsnummer in, meestal een cookie of het reclamenummer van je toestel. Er zit bij benadering een locatie in, afgeleid uit je IP-adres. Er staat in welk apparaat je gebruikt, welke pagina je bekijkt, en soms welke categorieën er eerder aan je zijn gekoppeld.
Die partijen bieden, de hoogste wint, en de advertentie verschijnt. Dat hele proces duurt ongeveer honderd milliseconden.
Waarom dit iets anders is dan een cookie
Bij een gewone tracker weet je wie er meekijkt: het domein staat in de opname.
Bij een veiling is dat anders. Iedereen die mag bieden, ziet het verzoek, ook wie niet biedt en ook wie niets met de advertentie te maken heeft. Verliezen kost niets en levert wel gegevens op. Dat is de reden dat deze markt zo aantrekkelijk is voor partijen die eigenlijk in data handelen en niet in reclame.
De begrippen die je nodig hebt
Identifier. Het nummer waaraan je herkend wordt. Een cookie in de browser, het reclamenummer op een telefoon, of een afgeleide sleutel uit e-mailadres of apparaatkenmerken.
Cookie-sync. Twee partijen wisselen elkaars nummer voor dezelfde persoon uit, zodat ze hun profielen kunnen koppelen. Dat bewijst herkenning, niet dat er is geboden.
Databroker. Een bedrijf dat gegevens verzamelt en doorverkoopt, vaak via meegeleverde bouwstenen in gewone apps.
Server-side. Verkeer dat tussen servers loopt in plaats van via jouw browser, en dat je met een browsermeting dus niet kunt zien.
De grens van wat ik kan meten
Dat laatste punt is belangrijk genoeg om apart te noemen. Een browsermeting ziet alleen wat langs jouw toestel komt. Het grootste deel van deze handel speelt zich af tussen servers onderling.
Alles wat ik hier vaststel is daarom een ondergrens. Nooit het volledige beeld.
Het publieke verhaal over online volgen is blijven staan bij 1998: een site zet een bestandje op je computer, je kunt het weigeren of wissen, klaar. Die canon klopt nog voor precies één techniek en dekt misschien een vijfde van wat er werkelijk gebeurt. Al het andere, de veiling, de koppeling, de doorverkoop, het vermommen, heeft eigen woorden die zelden buiten het vak komen. Dit is de kaart van die woorden, en van de scheidslijnen die er structureel tussen wegvallen.
Tussen de site die je opent en het bedrijf dat de advertentie betaalt, zitten zeven partijen met een eigen naam, een eigen verdienmodel en een eigen kopie van jouw verzoek. Uitgever, advertentieserver, verkoopplatform, veiling, inkoopplatform, adverteerder, plus de doorverkopers en de verificatiediensten die niemand noemt. Wie de rollen niet kent, telt ze verkeerd op en publiceert een index die niet klopt.
Het verkeer is het zichtbare deel. Het profiel zelf ligt ergens opgeslagen, en de opslagplaatsen hebben namen die klinken als infrastructuur: klantdataplatform, datamanagementplatform, databroker, data clean room. Ze verschillen in wie de eigenaar is, of jouw naam eraan hangt en of er geld voor betaald wordt. De clean room is de nieuwste, wordt verkocht als privacyoplossing en is in de praktijk een koppelvlak met een keurmerk.
Aan de vraagkant staan drie modellen die volstrekt verschillende hoeveelheden data over jou nodig hebben. Contextueel kijkt naar de pagina en heeft niets over jou nodig. Retargeting kijkt naar wat jij eerder deed. Lookalike bouwt een model van mensen die op jou lijken en heeft daarvoor een profiel van jou én van duizenden anderen nodig. Het middelste model is het bekendste, het laatste het meest ingrijpende, en het eerste bewijst dat het ook zonder kan.
Bij gratis Nederlandse apps vertrekt bij het laden van een advertentie een OpenRTB-biedverzoek met het reclamenummer, de locatie, de netwerkcode, de provider en de toestemmingsstring erin. Dat verzoek gaat naar elke partij die op het veilingplatform mag meebieden, dus ook naar iedereen die verliest. In één gebruikssessie ging 87 procent van de netwerkverzoeken en 54 procent van de bytes naar de advertentieketen. Onverwante apps blijken dezelfde kopers achter zich te hebben: van zeven bieders in een echte bid-respons stonden er zes ook in de partnerlijst van een totaal andere app. Wat ik meet is het vertrek; wat er daarna tussen servers gebeurt blijft buiten beeld, dus elk getal is een ondergrens.
De Bijbel zegt dat verdrukking volharding voortbrengt, en dat is geen troostpraatje maar een uitspraak over hoe mensen worden gevormd. Een kind dat binnen veilige grenzen tegenslag doorstaat, wordt een prettiger mens dan een kind dat alles voor elkaar krijgt. Dat is geen pleidooi om iemands leven te verzwaren. Het is een pleidooi om meer zelf te doen waar dat kan.
Voordat er geboden wordt, wisselen advertentiebedrijven eerst herkenningsnummers uit, zodat ze weten dat het om dezelfde browser gaat. Die koppeling bewijst herkenning, niet dat er op dat moment op de aandacht van de bezoeker werd geboden. Wie het een voor het ander aanziet, beweert meer dan de meting toont.
Een browsermeting legt alleen vast wat langs de browser loopt. Een groot deel van de handel speelt zich af tussen servers onderling, buiten dat zicht. Een bevinding uit de browser is daarom altijd een ondergrens, nooit het volledige beeld.
Apps die niets met elkaar te maken hebben, blijken dezelfde advertentieveiling en dezelfde bieders achter zich te hebben. Je positie staat daardoor niet via een, maar via meerdere kanten tegelijk te koop. De veiling is geen eigenschap van een app, maar een gedeelde markt waar ze allemaal op aansluiten.
Het als privacyvriendelijk verkochte alternatief voor de derde-partij-cookie wordt in de praktijk naast de oude advertentiestack gezet, niet in plaats ervan. Een aanvulling op het tracken, geen vervanging. Wie de belofte gelooft en de code niet leest, ziet alleen de helft.
De belangrijkste datastroom oogt niet als reclame en ontsnapt daardoor aan een cookie-check. Een klantdataplatform verzamelt elke handeling en zet die structureel onder Amerikaanse jurisdictie, terwijl de aandacht naar de zichtbare advertenties gaat. Wie alleen op advertentie-trackers let, mist de ruggengraat.
Bij het openen van sommige apps vertrekt je volledige toestelprofiel al richting de advertentieveiling: het reclamenummer van je telefoon, je locatie, je netwerkcode. Dat gebeurt voordat je iets hebt aangeraakt. Eenmaal de veiling in, is die stroom niet meer terug te halen.
Installatie-identifiers en de advertentie-ID heten 'resetbaar', maar zodra dezelfde id in elk verzoek meegaat, werkt hij als koppelsleutel tussen bestemmingen. Een gehashte e-mail is geen anonimisering: dezelfde invoer geeft dezelfde hash, dus hij correleert een persoon over diensten heen net zo goed als de e-mail zelf. Pseudonimisering is geen anonimisering.
Bij real-time bidding stuurt een app een biedverzoek met kenmerken van je toestel en context (device-identifier, grofweg locatie, app, soms afgeleide interesses) naar een advertentie-uitwisseling. Tientallen partijen zien die request en bieden om jou een advertentie te tonen. Het punt is: de request zelf verspreidt je kenmerken naar alle deelnemers, ook de verliezers. Een advertentieplek is dus tientallen partijen die je profiel te zien kregen.
Een Nederlandse app kan zijn biedstroom insturen bij een uitwisseling waar partijen uit andere jurisdicties op meebieden. De data vertrekt dan niet naar een bekende bestemming, maar naar een veilinghuis dat het verder verspreidt. Daarom is 'waar staat de server' bij RTB de verkeerde vraag; de juiste is 'wie mag meekijken in de veiling', en dat is een veel bredere en internationalere groep dan de app zelf noemt.
Tussen een app en 'een advertentie' zit een keten: een SSP in de app, een uitwisseling die de veiling houdt, en bidders die namens adverteerders bieden. Elke schakel is een aparte partij die data aanraakt. Verantwoordingsdocumenten noemen zelden de hele keten; wie alleen de eerste stap meet, ziet het topje. Uitpluizen wie er echt achter de biedstroom zit, is een eigen onderzoeksstap.
Achter de advertentiemarkt zit een kleine, vaste groep locatie-databrokers die via meegeleverde SDK's de positie van miljoenen toestellen verzamelen en doorverkopen. Ze staan zelden op een website, maar reizen mee in gewone apps. Wie de spelers kent, herkent het patroon overal terug.
Wie op een nieuwssite toestemming geeft, opent geen vast lijstje partijen maar een internationale veiling waarin herkenningsnummers worden uitgewisseld. Wie er verschijnt hangt af van de campagne, de pagina en de veiling van dat moment. De juiste kop is niet dat land X je volgt, maar dat de markt zelf grensoverschrijdend is.
Zodra een gratis app een advertentie laadt, bouwt je toestel een biedaanvraag en verstuurt die. Er zit geen afweging per veld in: het reclamenummer, de netwerkcode, de provider, de taal en de locatie vertrekken samen, in een keer. Anonimiseren gebeurt onderweg niet.
In advertentie-gedreven apps gaat het leeuwendeel van je dataverbruik naar de reclame- en trackinglaag, niet naar de functie die je zocht. Je betaalt databundel en batterij aan overhead die jou niets oplevert.
Een lichte, nette app met nauwelijks advertenties beschermt je niet automatisch. Een partner in de keten is genoeg om je gegevens bij een databroker te laten belanden. Weinig trackingverkeer en toch in de lijst staan zijn twee losse vragen.
Het advertentienummer van je telefoon lijkt onschuldig, maar bedrijven die identiteiten koppelen hangen er je e-mail en echte naam aan. Zodra dat nummer de veiling in gaat, is de rest van je profiel niet meer anoniem.
Een scan van alleen de voorpagina mist het meeste. Trackers vuren pas echt na het accepteren van cookies, na doorklikken en na het starten van een video. En een deel vuurt al voor toestemming, ook in de weiger-stand. Wie alleen de etalage test, ziet de etalage.
Bij het uitwisselen van herkenningsnummers kregen de meelezende partijen wel je nummer en je toestemmingsstring, maar niet zichtbaar welk artikel je las. Dat is een scherper en eerlijker punt dan zeggen dat ze wisten wat je las. Precies benoemen wat wel en niet in de data zat, houdt de claim overeind.
Bij een nieuwssite telt een extra gewicht mee: via een gesynchroniseerd herkenningsnummer valt te herleiden wie welk artikel opende. Voor de gewone lezer is dat profielvorming, voor journalistieke bronbescherming een apart risico, zeker als zo'n tracker op een tip- of klokkenluiderspagina staat.
Het opvallende is niet dat er buitenlandse techniek in zit, maar dat het overal dezelfde schakels zijn. Die uniformiteit is zelf de bevinding: geen toeval hier en daar, maar een vast verdienmodel dat de hele branche deelt.
De gevoeligste categorieen, bank, overheid, zorg, verzekeraars en politiek, blijven vrijwel schoon van deze buitenlandse partijen. Vrijwel alleen commerciele media en retail doen mee. De sector die bij uitstek over privacy zou moeten waken, verdient geld met een model dat je herkenbaar maakt.
Bij een huizen-app gaat het advertentienummer van je toestel ongefilterd de advertentieveiling in. Partijen die identiteiten koppelen hangen daar een koopprofiel aan, en een koopprofiel is kwetsbaar voor prijsdiscriminatie. Je zoekt een huis met een naamplaatje om.
Moderne toestemmingssystemen sturen na een weigering nog steeds een cookieloze ping, met een geen-personalisatie-vlag. Een netwerkverzoek zonder cookie bewijst dus niet dat er niet gemeten wordt, en ook niet dat er wel getrackt wordt. Je moet de inhoud van het verzoek bekijken, niet of er een cookie aan hangt.
Achter een eigen verzamelserver of een server-side veiling kunnen tientallen partijen worden aangeroepen zonder dat hun naam ooit in het verkeer verschijnt. Niet in de meting betekent dus niet niet betrokken. Dit is de grootste structurele beperking van elk verkeersonderzoek en hoort er expliciet bij.
Het bestand ads.txt vermeldt welke systemen de advertentieruimte van een site mogen verhandelen. Een systeem dat daar als toegestane route staat, heeft daarmee nog geen bod gedaan of gegevens ontvangen. Een toegestane route en een waargenomen stroom zijn twee dingen, en horen scherp uit elkaar.
Een site kan honderden verkooproutes vermelden, waarvan sommige verouderd. Ze allemaal optellen als betrokken partij blaast het beeld kunstmatig op. Tel alleen wat je ook echt kunt duiden, en benoem de opvallende afzonderlijk in plaats van in een totaal te verstoppen.
Waarom ik dit doe
De reflecties achter het werk: waarom bijna niemand anders het doet, of ik het mag, en hoe ik het breng.
Vrijwel niemand die ik meet wilde gegevens lekken. De bouwer wilde een mooi lettertype, de gemeente wilde voorleessoftware, en het effect was alsnog dat er gegevens vertrokken voordat de bezoeker iets kon kiezen. Voor het beoordelen van dat gedrag telt alleen het effect, want dat is wat de burger overkomt. Voor het beoordelen van de organisatie erachter telt de intentie wel degelijk mee. Wie die twee door elkaar haalt, straft goedwillenden te hard en pleit kwaadwillenden te makkelijk vrij.
Wie een bevinding over zijn eigen gegevens onder ogen krijgt, weegt zelden eerst de inhoud. Ik zie ontkenning, schaamte, woede op de verkeerde partij en berusting, en soms een reactie die veel groter is dan de technische ernst rechtvaardigt. Dat is menselijk en het is bruikbaar om vooraf te weten. Berusting is daarbij het gevaarlijkste antwoord, want die verandert een schending in een gegeven waar niemand meer iets aan doet.
Organisaties die ik meet reageren alsof ik iets tegen hen persoonlijk heb. Dat is een misverstand dat veel over hen zegt. Ik kijk naar wat een systeem de burger kost, en jouw site is daarin een meetpunt, geen doelwit. De reflex om dat als aanval te lezen komt uit hetzelfde denken dat analytics zwaarder laat wegen dan een grondrecht.
Ik ben niet de enige die meet en publiceert, al zijn we met weinig. Tien plekken waar hetzelfde probleem op een andere manier is opgelost, met per plek wat er beter werkt dan bij mij en wat ik overneem. Wie zijn eigen werk wil verbeteren, kijkt eerst naar wie het al langer doet.
Raakt iemand de vrijheid van meningsuiting aan, dan staat het land op zijn kop. Privacy staat in dezelfde grondwet en wordt dagelijks op grote schaal geschonden op het glazen plaatje waar we uren per dag naar kijken, zonder enige verontwaardiging. Dat verschil komt niet doordat mensen privacy minder belangrijk vinden. Het komt doordat elk mechanisme dat woede opwekt bij tracking stelselmatig ontbreekt.
Elke notitie op deze site is een van drie soorten. Een bevinding is iets dat ik heb gemeten, met het bewijs erbij. Een beginsel is een werkregel die uit dat meten volgt. Een gedachte is een beschouwing die verder reikt dan de meting draagt. Het label bovenaan een notitie zegt welke van de drie het is, en hoe zeker ik ben. Zo weet je bij alles wat je leest of het een feit is, een regel, of een mening.
Ik weet redelijk goed hoe je op LinkedIn bereik krijgt: scrollstoppende eerste regels, een beeld dat kort verwarring wekt, geen links, geen tags, en publiceren op het moment dat jij zelf kijkt. De enige regel die telt staat in het midden: verandert de verpakking mijn boodschap? Dan terug naar de tekentafel.
Sinds mijn naam in kranten staat, ben ik opeens interessant voor mensen die me daarvoor niet zagen. Ik doe precies hetzelfde werk, op dezelfde manier, met hetzelfde resultaat. Wat erbij kwam is geen kwaliteit maar een signaal dat anderen kunnen aflezen zonder mijn werk te hoeven beoordelen.
Vsauce begint bij een vraag die een kind zou stellen en eindigt bij natuurkunde, wiskunde of filosofie, zonder onderweg iemand dom te laten voelen. Dat is precies wat ik probeer met een meting. De vraag serieus nemen is het vak, niet het antwoord al kennen.
Producten als TikTok trekken zo hard aan en stoten tegelijk zo af dat er twee kampen ontstaan. Het ene zegt: boeit me niet wat ze over me weten. Het andere stapt volledig over op privacyvriendelijke alternatieven en wist dagelijks zijn sporen. Geen van beide is de juiste manier. De onverschilligheid geeft het probleem weg; de obsessie legt de last van een systeemfout bij het individu, terwijl die hoort bij wie de data verzamelt.
Een app die je paspoort scant, je gezicht leest of je locatie kent, is in feite een spionage-tool, net zoals een cookie een tracker is. Je geeft je hele hebben en houwen aan een partij die je niet kent, vaak ongetoetst. Een externe blik is dan geen luxe maar noodzaak: wie zijn eigen vlees keurt, mist wat een expert wel ziet. Daar hoort begrip bij. Een app uit 2020 kwam op in een tijd met andere privacyspanningen dan nu. Dat verklaart hoe iets ontstaat, maar ontslaat niemand van de plicht het te laten nakijken en bij te stellen. Het verschil zit in de reactie. De een ontkent, de ander heroverweegt echt: FastID paste na de bevindingen zelfs zijn marketingclaims aan en herzag architectuurkeuzes. Dat is hoe het hoort. Ontkennen of bijsturen is uiteindelijk geen technische kwestie maar een bestuurlijke keuze.
Ik neem de lezer mee en leg uit hoe een casus hem persoonlijk raakt. Niet denigrerend, geen mysterieuze terminologie, en niet zo technisch dat maar twee procent het echt snapt. En het blijft niet bij een verhaal: ik spreek bedrijven aan, zoek media-aandacht waar nodig, en draag het tot in de wetgeving en de Tweede Kamer. Een meetbaar verschil.
Als een journalist van NRC je werk interessant vindt, gaat de wereld voor je open: Tweakers, NRC en Security.NL volgen, en zo bereikte de Belastingdienst-zaak zelfs de Tweede Kamer. Maar dat is ook eng. Geen directeur, geen toezichthouder, geen inlichtingendienst, maar één enkele journalist staat tussen belangrijke kennis en achttien miljoen Nederlanders.
De sterkste bevindingen liggen stelselmatig bij geauthenticeerde, vitale publieke diensten: achter je DigiD, in de infrastructuur onder de staatsinlog, op de openbare weg. Precies daar heeft de burger geen alternatief en geeft hij geen toestemming, en precies daar wordt het minst gemeten. Een commerciele app kun je mijden. De overheid en de vitale infrastructuur niet.
Privacy gaat op twee tegengestelde manieren stuk. De ene verstrooit je gegevens breed: honderd bieders krijgen elk een stukje. De andere concentreert de intiemste data juist bij een poortwachter die er een totaalprofiel van bouwt. Beide zijn een probleem, maar spiegelbeeldig. Toezicht dat alleen losse derde-partij-trackers telt, ziet het concentratie-model niet eens.
Laadt een app die zich als zorg of welzijn presenteert al bij het opstarten advertentie- en analytics-netwerken, dan is dat geen ongelukje in de code. Het is een keuze in het ontwerp, gemaakt door wie de app liet bouwen. De jas is zorg, de motor is marketing.
We maken ons druk over de overheid die op Amerikaanse cloud draait, terwijl een gewone verenigings- of scan-app je paspoortfoto binnen een minuut op diezelfde cloud kan zetten. De verontwaardiging staat niet in verhouding tot wat particuliere apps met je biometrie en identiteitsbewijs doen. Leg beide langs dezelfde meetlat, anders meet je selectief.
De vraag is niet wie ik ben om hier iets van te vinden. Ik draai het liever om. Wij zijn allemaal verantwoordelijk en aangewezen om dit te doen. Als niemand het doet, gebeurt er niets.
Het talent volgt het geld, en het geld ligt niet hier. Geen opleiding, geen titel die past, en wie de functies vult tikt lijsten af. Daarom blijft dit liggen, en daarom doe ik het.
Misschien omdat het concreet is en na te rekenen. Misschien omdat het iedereen raakt, zijn telefoon, zijn huis, zijn kind. Misschien omdat bijna niemand anders het zo laat zien. Ik weet het niet zeker, maar de vraag is het waard om te blijven stellen.
Mijn stukken en claims worden vaak net verkeerd gelezen, waarna er een eigen verhaal van wordt gemaakt. Daarom publiceer ik alles zelf narekenbaar, met de bron erbij. Zodat wie het anders vertelt, altijd terug te leiden is naar wat er echt staat.
Data voelt persoonlijk, en dat maakt het gesprek erover geladen. Zelfs organisaties die zich met privacy bezighouden, reageren soms emotioneel en defensief, en willen liever niet praten. Terwijl juist zij het gesprek zouden moeten aangaan.
De mensen die de techniek bouwen en de mensen die de koers bepalen, staan in veel organisaties ver uit elkaar. De tracking zit in de code, maar de directie weet niet altijd wat er gebeurt, en de coder niet altijd waarom. Zo ontstaat een misstand die niemand bewust koos.
Onder het woord cookie zitten minstens acht manieren om je terug te herkennen, en de helft daarvan is helemaal geen cookie. Eigen cookie, derde-partij-cookie, opslag in de browser, een merkteken in de cache, het reclamenummer van je telefoon, een vingerafdruk van je apparaat. Ze verschillen in wie hem kan lezen, hoe lang hij leeft, of je hem kunt wissen en of de cookiewet er grip op heeft. Hier staat de hele familie, op die vier assen.
Losse herkenningsnummers zijn hinderlijk. Gekoppelde herkenningsnummers zijn een dossier. De koppelindustrie heeft daar een eigen woordenschat voor: cookie-sync, identity resolution, identiteitsgrafiek, deterministisch en probabilistisch matchen, gehashte e-mail, universele id. Dit is de laag waar het echte kwaad zit, en juist deze laag is met een browsermeting nauwelijks te zien.
Bij gratis Nederlandse apps vertrekt bij het laden van een advertentie een OpenRTB-biedverzoek met het reclamenummer, de locatie, de netwerkcode, de provider en de toestemmingsstring erin. Dat verzoek gaat naar elke partij die op het veilingplatform mag meebieden, dus ook naar iedereen die verliest. In één gebruikssessie ging 87 procent van de netwerkverzoeken en 54 procent van de bytes naar de advertentieketen. Onverwante apps blijken dezelfde kopers achter zich te hebben: van zeven bieders in een echte bid-respons stonden er zes ook in de partnerlijst van een totaal andere app. Wat ik meet is het vertrek; wat er daarna tussen servers gebeurt blijft buiten beeld, dus elk getal is een ondergrens.
Op een hulpverleningsplatform draaide een tool die elke muisbeweging, klik en toetsaanslag vastlegt, nog voor de bezoeker iets had aangeklikt. Die opnames gaan naar een Amerikaans bedrijf. Juist op de plek waar iemand kwetsbaar is, kijkt een vreemde mee.
Voordat er geboden wordt, wisselen advertentiebedrijven eerst herkenningsnummers uit, zodat ze weten dat het om dezelfde browser gaat. Die koppeling bewijst herkenning, niet dat er op dat moment op de aandacht van de bezoeker werd geboden. Wie het een voor het ander aanziet, beweert meer dan de meting toont.
Wisselen twee bedrijven het herkenningsnummer van een browser uit, dan herkennen ze allebei dezelfde persoon. Dat is geen technisch detail maar een gedeelde verwerking. En het roept de vraag op wie er verantwoordelijk voor is.
Op een perspagina van het ministerie van VWS, een als gevoelig gemarkeerd overheidsdomein, lezen vierendertig verschillende bedrijven mee. Twaalf daarvan krijgen hetzelfde herkenningsnummer aangereikt. De burger ziet een overheidssite. Er kijken vierendertig bedrijven mee.
Bij het openen van sommige apps vertrekt je volledige toestelprofiel al richting de advertentieveiling: het reclamenummer van je telefoon, je locatie, je netwerkcode. Dat gebeurt voordat je iets hebt aangeraakt. Eenmaal de veiling in, is die stroom niet meer terug te halen.
In een app of site zitten families die elk iets anders doen. Analytics meet gedrag. Crash-SDK's meten stabiliteit. Attributie koppelt een installatie aan de campagne die hem opleverde. Identity-resolution knoopt losse identifiers aan een persoon. Advertentie-SDK's bieden je toestel aan adverteerders aan. Ze allemaal 'tracker' noemen verhult dat de risico's per rol verschillen; een crash-SDK is iets anders dan een identity-resolver.
Installatie-identifiers en de advertentie-ID heten 'resetbaar', maar zodra dezelfde id in elk verzoek meegaat, werkt hij als koppelsleutel tussen bestemmingen. Een gehashte e-mail is geen anonimisering: dezelfde invoer geeft dezelfde hash, dus hij correleert een persoon over diensten heen net zo goed als de e-mail zelf. Pseudonimisering is geen anonimisering.
Twee trackers met elk een eigen identifier voor jou kunnen die id's onderling uitwisselen, zodat ze weten dat het om dezelfde persoon gaat. Zo ontstaat een gedeeld profiel zonder dat een partij alles ziet. Op het web heet dat cookie-sync; in apps bestaat het equivalent met device- en installatie-id's. Dit is het mechanisme dat losse waarnemingen tot een dossier smeedt.
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.
Bij real-time bidding stuurt een app een biedverzoek met kenmerken van je toestel en context (device-identifier, grofweg locatie, app, soms afgeleide interesses) naar een advertentie-uitwisseling. Tientallen partijen zien die request en bieden om jou een advertentie te tonen. Het punt is: de request zelf verspreidt je kenmerken naar alle deelnemers, ook de verliezers. Een advertentieplek is dus tientallen partijen die je profiel te zien kregen.
Je zou verwachten dat gevoeliger context tot voorzichtiger bewaren leidt. In de praktijk is het omgekeerd: hoe gevoeliger de omgeving, hoe langer de persistente identifier blijft leven. Precies de omgekeerde beweging van dataminimalisatie.
Wie op een nieuwssite toestemming geeft, opent geen vast lijstje partijen maar een internationale veiling waarin herkenningsnummers worden uitgewisseld. Wie er verschijnt hangt af van de campagne, de pagina en de veiling van dat moment. De juiste kop is niet dat land X je volgt, maar dat de markt zelf grensoverschrijdend is.
Zodra een gratis app een advertentie laadt, bouwt je toestel een biedaanvraag en verstuurt die. Er zit geen afweging per veld in: het reclamenummer, de netwerkcode, de provider, de taal en de locatie vertrekken samen, in een keer. Anonimiseren gebeurt onderweg niet.
Het advertentienummer van je telefoon lijkt onschuldig, maar bedrijven die identiteiten koppelen hangen er je e-mail en echte naam aan. Zodra dat nummer de veiling in gaat, is de rest van je profiel niet meer anoniem.
Bij het uitwisselen van herkenningsnummers kregen de meelezende partijen wel je nummer en je toestemmingsstring, maar niet zichtbaar welk artikel je las. Dat is een scherper en eerlijker punt dan zeggen dat ze wisten wat je las. Precies benoemen wat wel en niet in de data zat, houdt de claim overeind.
Bij een nieuwssite telt een extra gewicht mee: via een gesynchroniseerd herkenningsnummer valt te herleiden wie welk artikel opende. Voor de gewone lezer is dat profielvorming, voor journalistieke bronbescherming een apart risico, zeker als zo'n tracker op een tip- of klokkenluiderspagina staat.
Bij een huizen-app gaat het advertentienummer van je toestel ongefilterd de advertentieveiling in. Partijen die identiteiten koppelen hangen daar een koopprofiel aan, en een koopprofiel is kwetsbaar voor prijsdiscriminatie. Je zoekt een huis met een naamplaatje om.
Om te toetsen of een waarde een persoon volgt, leg ik hem over meerdere schone metingen naast elkaar. Blijft hij identiek over runs en over verschillende sites, dan hoort hij bij de configuratie van de site, niet bij jou. Dat gedrag scheidt een echt herkenningsnummer van ruis, niet de vorm.
Een analytics-cookie voor toestemming kan onder een uitzondering vallen, maar bij het delen van herkenningsnummers, doorgifte naar de VS of een genegeerde weigering is die discussie er niet. Zet niet alles op een hoop overtreding. Splits in gemeten feit en sluitende conclusie, dan blijft je zwaarste claim ook de best verdedigbare.
Tussen de site die je opent en het bedrijf dat de advertentie betaalt, zitten zeven partijen met een eigen naam, een eigen verdienmodel en een eigen kopie van jouw verzoek. Uitgever, advertentieserver, verkoopplatform, veiling, inkoopplatform, adverteerder, plus de doorverkopers en de verificatiediensten die niemand noemt. Wie de rollen niet kent, telt ze verkeerd op en publiceert een index die niet klopt.
Bij gratis Nederlandse apps vertrekt bij het laden van een advertentie een OpenRTB-biedverzoek met het reclamenummer, de locatie, de netwerkcode, de provider en de toestemmingsstring erin. Dat verzoek gaat naar elke partij die op het veilingplatform mag meebieden, dus ook naar iedereen die verliest. In één gebruikssessie ging 87 procent van de netwerkverzoeken en 54 procent van de bytes naar de advertentieketen. Onverwante apps blijken dezelfde kopers achter zich te hebben: van zeven bieders in een echte bid-respons stonden er zes ook in de partnerlijst van een totaal andere app. Wat ik meet is het vertrek; wat er daarna tussen servers gebeurt blijft buiten beeld, dus elk getal is een ondergrens.
De Bijbel zegt dat verdrukking volharding voortbrengt, en dat is geen troostpraatje maar een uitspraak over hoe mensen worden gevormd. Een kind dat binnen veilige grenzen tegenslag doorstaat, wordt een prettiger mens dan een kind dat alles voor elkaar krijgt. Dat is geen pleidooi om iemands leven te verzwaren. Het is een pleidooi om meer zelf te doen waar dat kan.
Apps die niets met elkaar te maken hebben, blijken dezelfde advertentieveiling en dezelfde bieders achter zich te hebben. Je positie staat daardoor niet via een, maar via meerdere kanten tegelijk te koop. De veiling is geen eigenschap van een app, maar een gedeelde markt waar ze allemaal op aansluiten.
Bij het openen van sommige apps vertrekt je volledige toestelprofiel al richting de advertentieveiling: het reclamenummer van je telefoon, je locatie, je netwerkcode. Dat gebeurt voordat je iets hebt aangeraakt. Eenmaal de veiling in, is die stroom niet meer terug te halen.
Bij real-time bidding stuurt een app een biedverzoek met kenmerken van je toestel en context (device-identifier, grofweg locatie, app, soms afgeleide interesses) naar een advertentie-uitwisseling. Tientallen partijen zien die request en bieden om jou een advertentie te tonen. Het punt is: de request zelf verspreidt je kenmerken naar alle deelnemers, ook de verliezers. Een advertentieplek is dus tientallen partijen die je profiel te zien kregen.
Een Nederlandse app kan zijn biedstroom insturen bij een uitwisseling waar partijen uit andere jurisdicties op meebieden. De data vertrekt dan niet naar een bekende bestemming, maar naar een veilinghuis dat het verder verspreidt. Daarom is 'waar staat de server' bij RTB de verkeerde vraag; de juiste is 'wie mag meekijken in de veiling', en dat is een veel bredere en internationalere groep dan de app zelf noemt.
Tussen een app en 'een advertentie' zit een keten: een SSP in de app, een uitwisseling die de veiling houdt, en bidders die namens adverteerders bieden. Elke schakel is een aparte partij die data aanraakt. Verantwoordingsdocumenten noemen zelden de hele keten; wie alleen de eerste stap meet, ziet het topje. Uitpluizen wie er echt achter de biedstroom zit, is een eigen onderzoeksstap.
Wie op een nieuwssite toestemming geeft, opent geen vast lijstje partijen maar een internationale veiling waarin herkenningsnummers worden uitgewisseld. Wie er verschijnt hangt af van de campagne, de pagina en de veiling van dat moment. De juiste kop is niet dat land X je volgt, maar dat de markt zelf grensoverschrijdend is.
Zodra een gratis app een advertentie laadt, bouwt je toestel een biedaanvraag en verstuurt die. Er zit geen afweging per veld in: het reclamenummer, de netwerkcode, de provider, de taal en de locatie vertrekken samen, in een keer. Anonimiseren gebeurt onderweg niet.
Het advertentienummer van je telefoon lijkt onschuldig, maar bedrijven die identiteiten koppelen hangen er je e-mail en echte naam aan. Zodra dat nummer de veiling in gaat, is de rest van je profiel niet meer anoniem.
Bij een huizen-app gaat het advertentienummer van je toestel ongefilterd de advertentieveiling in. Partijen die identiteiten koppelen hangen daar een koopprofiel aan, en een koopprofiel is kwetsbaar voor prijsdiscriminatie. Je zoekt een huis met een naamplaatje om.
Achter een eigen verzamelserver of een server-side veiling kunnen tientallen partijen worden aangeroepen zonder dat hun naam ooit in het verkeer verschijnt. Niet in de meting betekent dus niet niet betrokken. Dit is de grootste structurele beperking van elk verkeersonderzoek en hoort er expliciet bij.
Software en apparaten
Wat apps, brillen en slimme apparaten werkelijk naar buiten sturen, van je gezicht tot je zonnepanelen.
Een app kan een echte beschermlaag inbouwen en tegelijk de code van grote techbedrijven aan boord hebben. Het een heft het ander niet op. Een goede maatregel op een plek zegt niets over de rest van de app.
In cyclus-apps en sport-apps voeren mensen hun gezondheid en zelfs hun seksleven in, zonder stil te staan bij waar dat belandt. In een van de gemeten cyclus-apps lopen statistiek, inloggen en betalen via Russische diensten. Maar is dat de schuld van de gebruiker? De wet plakt er pleisters op, terwijl het de bedrijven kennelijk niet interesseert waar die gegevens heen gaan. Wat de gebruiker zelf kan doen is klein maar echt: lees de voorwaarden, en zie je daar vreemde, onbegrijpelijke taal, gebruik de app dan niet.
Dat de code van een reclamebedrijf in een app zit, bewijst dat de bouwsteen aanwezig is, niet dat er op dat moment een gegeven naartoe stroomt, en al helemaal niet dat het wordt doorverkocht. Aanwezigheid, verstrekking en doorverkoop zijn drie dingen, elk met een eigen bewijslast.
Sommige apps versturen niets, alles blijft op je toestel. Dat bewijst dat de zware advertentie- en telemetriestack een keuze is, geen technische noodzaak. Wie zegt dat het niet anders kan, wordt door de schone tegenvoorbeelden weersproken.
Bij apparaten die telemetrie versturen ligt de aandacht vanzelf op wat er weggaat. De interessantere vraag is wat er terugkomt, want dezelfde verbinding draagt vaak instellingen en firmware. Wie het platform of het account beheerst, kan het gedrag van het apparaat bepalen, tot uitschakelen aan toe. Het risico van meekijken is een privacyvraag, het risico van meesturen is er een van zeggenschap en continuïteit.
Slimme apparaten komen je huis binnen als iets handigs. De voorwaarden accepteert iedereen, niemand leest ze. Maar als niemand ze leest, is toestemming een formaliteit geworden, geen echte keuze.
Bij het afrekenen bij de ANWB, via iDEAL, wordt het toestel van de bezoeker gescand op openstaande poorten. Die techniek komt uit de fraudebestrijding. Maar ze gebeurt onzichtbaar, en de bezoeker weet er niets van. Een legitiem doel en een inbreuk op je apparaat lopen hier door elkaar.
De slimme bril van Meta is een hebbeding, trendy om te dragen. Maar hij legt je omgeving vast, de mensen om je heen die nergens toestemming voor gaven, en die beelden voeden de training van het bedrijf. Iets kan hip zijn en tegelijk allesbehalve cool.
Een app die je identiteitsbewijs scant en een selfie maakt, kan die gezichtsbeelden voor vergelijking naar een Amerikaanse clouddienst sturen. De verificatie voelt lokaal maar gebeurt buiten je zicht en buiten Europa. Wat even je gezicht controleren heet, is een biometrische verwerking op een server elders.
Een gangbare omvormer draait op twee processoren, waarvan er een naar het buitenland verbindt. Uit het verbruikspatroon valt af te leiden wanneer een huis leeg staat. Apparaten die als saai nutsgoed gelden, zijn stille datastromen.
Het tegenvoorbeeld bestaat. Een app zonder internet-permissie die alles in een lokale database bewaart, is oprecht privacyvriendelijk. De gevoelige gegevens verlaten het toestel simpelweg niet. Het kan dus wel.
Een cyclus-app weet wanneer je vruchtbaar bent, of je seks had en of je zwanger wilt worden. Bij een deel van die apps zit naast die intieme kennis de code van reclamebedrijven en soms buitenlandse diensten. De gevoeligste gegevens in het minst bewaakte hoekje van je telefoon.
Schermopname-techniek kan muisbewegingen, scrollen en formulieren vastleggen. De aanwezigheid van zo'n tag bewijst dat het product het kan, niet dat op deze site echt velden zijn opgenomen. Dat vraagt een test met een lokvink, geen aanname op grond van de mogelijkheid.
De woorden voor het meetgereedschap worden door elkaar gebruikt, terwijl ze verschillen in wat ze mogen, wat ze zien en wie ze kan aanzetten. Een pixel is een verzoek. Een tag is een stukje code. Een SDK is een meegeleverde bibliotheek met de rechten van de app zelf. Een tagmanager is een luik waardoor een marketeer na oplevering nieuwe code de pagina in schuift zonder dat er een ontwikkelaar aan te pas komt. Dat laatste is het gevaarlijkste van de vier en staat in geen enkele risicoanalyse.
Een deel van de vaktaal bestaat niet om iets te beschrijven maar om iets weg te schrijven. Geanonimiseerd, gepseudonimiseerd, niet-persoonsgebonden, first-party, eigen infrastructuur, essentieel, gerechtvaardigd belang, partner. Elk van die woorden verplaatst een verplichting zonder de techniek te veranderen. Dit is de lijst, met per woord wat het juridisch echt betekent en waaraan je ziet dat het verkeerd wordt gebruikt.
Op 710 van 1.718 gemeten overheidssites loopt verkeer via een subdomein van de site zelf dat in werkelijkheid naar een derde partij wijst. Voor de browser is dat eigen verkeer, dus de bescherming tegen derde-partijcookies grijpt niet. Voor de bezoeker is het onzichtbaar. Voor de verwerkingsverantwoordelijke is het meestal ook onzichtbaar, want het staat in een DNS-record en niet in de code.
Op een hulpverleningsplatform draaide een tool die elke muisbeweging, klik en toetsaanslag vastlegt, nog voor de bezoeker iets had aangeklikt. Die opnames gaan naar een Amerikaans bedrijf. Juist op de plek waar iemand kwetsbaar is, kijkt een vreemde mee.
Op een zorgplatform liep een schermopname-tool nog nadat de bezoeker toestemming had geweigerd, en vertrokken meerdere verzoeken met gegevens naar Google. Wat je doet op een plek die vertrouwelijk hoort te zijn, belandt zo bij een derde. Ook zonder doorverkoop is dat een verstrekking aan een vreemde.
Een tracker kan draaien op een subdomein van de site zelf, via een DNS-omleiding die stiekem naar de tracker-infrastructuur wijst. Daardoor lijkt hij eerste-partij en ontwijkt hij browserblokkades. Wie alleen op de domeinnaam kijkt, mist hem; je moet de DNS-keten en het uiteindelijke IP volgen om te zien wie er echt achter zit.
Bij server-side tagging stuurt de site naar een eigen endpoint, dat vervolgens serverzijdig doorverdeelt naar de echte trackers. Voor een meting op je toestel lijkt het dan of er maar een, eigen bestemming is; de doorverdeling gebeurt buiten je zicht. Daarom bewijst de afwezigheid van een tracker-domein op de lijn niet dat de data er niet komt.
Session-replay-tools nemen je tik-, scroll- en invoergedrag op alsof iemand meekijkt. De maskering van gevoelige velden is meestal view-gebaseerd: ze werkt alleen als de juiste velden als gevoelig zijn gemarkeerd. Of het echt maskeert kun je niet aannemen; dat moet frame voor frame op de opname zelf worden geverifieerd. Een claim 'wij maskeren' zonder die verificatie is onbewezen.
Er is verschil tussen een tracker die je browser rechtstreeks aanroept en een die je server-side vermoedt. Alleen het eerste is hard bewijs. Wat ik in de ruwe opname zie gebeuren telt; wat ik erbij redeneer is een aparte, zwakkere laag.
Achter een eigen verzamelserver of een server-side veiling kunnen tientallen partijen worden aangeroepen zonder dat hun naam ooit in het verkeer verschijnt. Niet in de meting betekent dus niet niet betrokken. Dit is de grootste structurele beperking van elk verkeersonderzoek en hoort er expliciet bij.
Sites sturen bezoekersdata naar een eigen subdomein dat vervolgens server-side kan doorsturen naar wie dan ook. Behandel zo'n verzamelpunt niet als veilig omdat het van de site zelf is, maar als eigen categorie: verstrekking vastgesteld, bestemming onbekend.
Schermopname-techniek kan muisbewegingen, scrollen en formulieren vastleggen. De aanwezigheid van zo'n tag bewijst dat het product het kan, niet dat op deze site echt velden zijn opgenomen. Dat vraagt een test met een lokvink, geen aanname op grond van de mogelijkheid.
Politiek
Waar mijn metingen de politiek raken: Kamervragen, kabinetsreacties, en de trage weg van bevinding naar beleid.
Vrijwel niemand die ik meet wilde gegevens lekken. De bouwer wilde een mooi lettertype, de gemeente wilde voorleessoftware, en het effect was alsnog dat er gegevens vertrokken voordat de bezoeker iets kon kiezen. Voor het beoordelen van dat gedrag telt alleen het effect, want dat is wat de burger overkomt. Voor het beoordelen van de organisatie erachter telt de intentie wel degelijk mee. Wie die twee door elkaar haalt, straft goedwillenden te hard en pleit kwaadwillenden te makkelijk vrij.
Wie een bevinding over zijn eigen gegevens onder ogen krijgt, weegt zelden eerst de inhoud. Ik zie ontkenning, schaamte, woede op de verkeerde partij en berusting, en soms een reactie die veel groter is dan de technische ernst rechtvaardigt. Dat is menselijk en het is bruikbaar om vooraf te weten. Berusting is daarbij het gevaarlijkste antwoord, want die verandert een schending in een gegeven waar niemand meer iets aan doet.
Ik heb geholpen uit te rekenen hoe vaak je langs een kentekencamera komt, en dat is tot op de rit nauwkeurig te bepalen. Het nut aan de andere kant van de weegschaal is dat niet: de evaluatie van de wet stelt zelf dat effectiviteit niet op de gebruikelijke manier te meten valt. Zo weegt een afweging waarvan maar een kant een getal heeft.
Nederland heeft precies een wettelijke definitie van bekwaamheid, en die staat verrassend dicht bij de mijne: boven de stof staan en haar kunnen aanpassen. Alleen kijkt het toezicht naar het dossier van de school, niet naar wat de leraar kan. We meten dus bevoegdheid, want papier is telbaar, en bekwaamheid niet.
Ik geloof niet dat elke politicus in zijn hart voor honderd procent achter zijn scherpste uitspraken staat, en ik geloof net zomin in de zuivere liefde die andere partijen uitstralen. Maar de vraag of ze het menen is onbeantwoordbaar. De vruchtbare vraag is welk gedrag hier beloond wordt, en het antwoord is: herkenbaar en consequent zijn, niet accuraat zijn.
Ik neem de lezer mee en leg uit hoe een casus hem persoonlijk raakt. Niet denigrerend, geen mysterieuze terminologie, en niet zo technisch dat maar twee procent het echt snapt. En het blijft niet bij een verhaal: ik spreek bedrijven aan, zoek media-aandacht waar nodig, en draag het tot in de wetgeving en de Tweede Kamer. Een meetbaar verschil.
Als een journalist van NRC je werk interessant vindt, gaat de wereld voor je open: Tweakers, NRC en Security.NL volgen, en zo bereikte de Belastingdienst-zaak zelfs de Tweede Kamer. Maar dat is ook eng. Geen directeur, geen toezichthouder, geen inlichtingendienst, maar één enkele journalist staat tussen belangrijke kennis en achttien miljoen Nederlanders.
Op een perspagina van het ministerie van VWS, een als gevoelig gemarkeerd overheidsdomein, lezen vierendertig verschillende bedrijven mee. Twaalf daarvan krijgen hetzelfde herkenningsnummer aangereikt. De burger ziet een overheidssite. Er kijken vierendertig bedrijven mee.
Een persbericht-pagina van een ministerie droeg een volledige realtime-biedketen met bekende advertentiepartijen. Een pagina die louter informatie hoort te geven, veilt intussen aandacht. Zulke plekken zijn juist verdacht omdat niemand ze daar zoekt.
Openbaar privacy-onderzoek is geen schot in het duister. Tracking op een overheidsportaal werd gemeten, als datalek gemeld bij de toezichthouder, en mondde uit in Kamervragen en erkenning. Een onderbouwde meting reikt verder dan een artikel.
Bewaren en lekken
Wat er misgaat met opgeslagen data: lekken, boetes, en gegevens die jaren blijven hangen.
Gegevens die zonder toestemming met een ander bedrijf worden gedeeld, zijn meestal geen datalek maar een andere overtreding, met een eigen route naar de toezichthouder. Meestal, niet altijd: gaat het om gevoelige gegevens of om een verstrekking die niemand bedoeld heeft, dan kan het er alsnog een zijn. Wie standaard de datalekingang kiest, kiest doorgaans de verkeerde.
Naast liegen en verzwijgen bestaat een derde soort: iets zeggen wat klopt maar de verkeerde indruk wekt. Wie zegt dat hij de toegang snel afsloot, maar alleen de sessie introk en niet de sleutel, spreekt geen onwaarheid en misleidt toch. Die categorie hoort apart benoemd.
Onderzoek naar een datalek mag het lek niet vergroten. Een gelekte dataset hoort in een afgesloten, netwerkloze omgeving onderzocht, niet in een clouddienst waar hij opnieuw kan uitlekken. De methode zelf moet de gegevens beschermen die ze onderzoekt.
Je zou verwachten dat gevoeliger context tot voorzichtiger bewaren leidt. In de praktijk is het omgekeerd: hoe gevoeliger de omgeving, hoe langer de persistente identifier blijft leven. Precies de omgekeerde beweging van dataminimalisatie.
Organisaties zetten verantwoording en dataminimalisatie tegenover elkaar: we moeten alles bewaren, anders kunnen we niets aantonen. Dat is een ontwerpkeuze die als natuurwet wordt gepresenteerd. Een openbaar, alleen aangroeiend logboek van vingerafdrukken bewijst dat een handeling op een tijdstip plaatsvond, zonder de inhoud ergens neer te leggen. Bij elk systeem dat voor de verantwoording data bewaart, is de vraag gerechtvaardigd waarom het de inhoud nodig heeft en niet het bewijs.
Gegevens die niet worden opgeslagen, kunnen niet uitlekken. De sterkste bescherming is niet betere beveiliging achteraf, maar minder verzamelen vooraf. Voor veel controles is bewaren niet eens nodig. Dit volgt uit artikel 5 van de privacywet.
De echte schade van een datalek haalt zelden het nieuws, en de boetes staan vaak niet in verhouding tot de omzet. Voor een concern als DPG Media is een boete van een paar ton hooguit een paar uur omzet. Zolang dat zo is, is een boete geen prikkel om het anders te doen.
In de praktijk verzamelen systemen standaard meer dan nodig. De wet en de toezichthouder eisen het omgekeerde: alleen wat strikt nodig is. Tussen wat gebruikelijk is en wat mag, zit een gat, en in dat gat zit veel van wat ik meet.
Openbaar privacy-onderzoek is geen schot in het duister. Tracking op een overheidsportaal werd gemeten, als datalek gemeld bij de toezichthouder, en mondde uit in Kamervragen en erkenning. Een onderbouwde meting reikt verder dan een artikel.
Bij een groot telecomlek bestond het merendeel van de blootgestelde profielen uit ex-klanten die al jaren weg waren, inclusief oude incassogegevens en identiteitsbewijzen. Data die niet was opgeruimd na het einde van de klantrelatie lekte gewoon mee. Een bewaartermijn overschrijden vergroot letterlijk de buit.
Papier versus code
Het verschil tussen wat een verklaring belooft en wat de code doet, want de code liegt niet.
Toestemmingsmodules zijn niet inwisselbaar. Over 1.718 overheidssites loopt het aandeel dat al voor toestemming trackt uiteen van 20,8 procent bij de ene module tot 100 procent bij de andere. De keuze van je leverancier voorspelt je nalevingsniveau beter dan je privacyverklaring dat doet.
Op 710 van 1.718 gemeten overheidssites loopt verkeer via een subdomein van de site zelf dat in werkelijkheid naar een derde partij wijst. Voor de browser is dat eigen verkeer, dus de bescherming tegen derde-partijcookies grijpt niet. Voor de bezoeker is het onzichtbaar. Voor de verwerkingsverantwoordelijke is het meestal ook onzichtbaar, want het staat in een DNS-record en niet in de code.
Nederland heeft precies een wettelijke definitie van bekwaamheid, en die staat verrassend dicht bij de mijne: boven de stof staan en haar kunnen aanpassen. Alleen kijkt het toezicht naar het dossier van de school, niet naar wat de leraar kan. We meten dus bevoegdheid, want papier is telbaar, en bekwaamheid niet.
Een herkenbare naam in de broncode bewijst niet dat een tracker actief is, en soms niet eens dat het de partij is die je denkt. Alleen de gemeten byte op de lijn bevestigt het. Wie op een tekstmatch afgaat, telt trackers die er niet zijn, en dat is precies wat een tegenpartij eruit pikt.
Laadt een app die zich als zorg of welzijn presenteert al bij het opstarten advertentie- en analytics-netwerken, dan is dat geen ongelukje in de code. Het is een keuze in het ontwerp, gemaakt door wie de app liet bouwen. De jas is zorg, de motor is marketing.
Een risicoafweging die je nergens kunt inzien, werkt niet als afweging maar als geruststelling. Het bestaan ervan claimen is iets anders dan hem laten toetsen. De belofte staat tegenover de gemeten werkelijkheid, en alleen die laatste is bewijs.
Op de plek achter de login is er niet eens een toestemmingsvraag om te negeren, hij ontbreekt volledig. De privacyverklaring belooft zorgvuldigheid, de meting toont het tegendeel. Geen keuze aanbieden is geen vergetelheid, het is een inrichting.
De mensen die de techniek bouwen en de mensen die de koers bepalen, staan in veel organisaties ver uit elkaar. De tracking zit in de code, maar de directie weet niet altijd wat er gebeurt, en de coder niet altijd waarom. Zo ontstaat een misstand die niemand bewust koos.
Het verkeer is het zichtbare deel. Het profiel zelf ligt ergens opgeslagen, en de opslagplaatsen hebben namen die klinken als infrastructuur: klantdataplatform, datamanagementplatform, databroker, data clean room. Ze verschillen in wie de eigenaar is, of jouw naam eraan hangt en of er geld voor betaald wordt. De clean room is de nieuwste, wordt verkocht als privacyoplossing en is in de praktijk een koppelvlak met een keurmerk.
Doorverkoop is de zwaarste beschuldiging in dit veld en tegelijk de slechtst onderbouwde. De AVG kent het woord verkoop niet eens; die kent verstrekking aan een ontvanger. De Californische wet kent wel verkoop, en definieert die zo breed dat een gewone advertentiecookie er al onder valt. Wie een Amerikaanse definitie in een Nederlands stuk gebruikt zonder het te zeggen, beweert iets anders dan hij denkt.
Op een zorgplatform liep een schermopname-tool nog nadat de bezoeker toestemming had geweigerd, en vertrokken meerdere verzoeken met gegevens naar Google. Wat je doet op een plek die vertrouwelijk hoort te zijn, belandt zo bij een derde. Ook zonder doorverkoop is dat een verstrekking aan een vreemde.
Dat de code van een reclamebedrijf in een app zit, bewijst dat de bouwsteen aanwezig is, niet dat er op dat moment een gegeven naartoe stroomt, en al helemaal niet dat het wordt doorverkocht. Aanwezigheid, verstrekking en doorverkoop zijn drie dingen, elk met een eigen bewijslast.
Achter de advertentiemarkt zit een kleine, vaste groep locatie-databrokers die via meegeleverde SDK's de positie van miljoenen toestellen verzamelen en doorverkopen. Ze staan zelden op een website, maar reizen mee in gewone apps. Wie de spelers kent, herkent het patroon overal terug.
De gegevens die via cookies en trackers worden verzameld, komen via datahandelaren uiteindelijk bij fraudeurs terecht. Zo loopt er een lijn van een cookie op een website naar een bankhelpdeskfraudeur aan de lijn. Dat we die lijn normaal zijn gaan vinden, is misschien wel het ergste eraan.
Een lichte, nette app met nauwelijks advertenties beschermt je niet automatisch. Een partner in de keten is genoeg om je gegevens bij een databroker te laten belanden. Weinig trackingverkeer en toch in de lijst staan zijn twee losse vragen.
Het bestand ads.txt vermeldt welke systemen de advertentieruimte van een site mogen verhandelen. Een systeem dat daar als toegestane route staat, heeft daarmee nog geen bod gedaan of gegevens ontvangen. Een toegestane route en een waargenomen stroom zijn twee dingen, en horen scherp uit elkaar.
Het publieke verhaal over online volgen is blijven staan bij 1998: een site zet een bestandje op je computer, je kunt het weigeren of wissen, klaar. Die canon klopt nog voor precies één techniek en dekt misschien een vijfde van wat er werkelijk gebeurt. Al het andere, de veiling, de koppeling, de doorverkoop, het vermommen, heeft eigen woorden die zelden buiten het vak komen. Dit is de kaart van die woorden, en van de scheidslijnen die er structureel tussen wegvallen.
De wet vraagt geen toestemming voor cookies die strikt noodzakelijk zijn om een dienst te leveren die je zelf hebt gevraagd. Voor al het andere wel, vooraf. Het verschil tussen die twee is de hele cookiewet, en het wordt structureel verkeerd getrokken. Hier staat per soort cookie of hij zonder toestemming mag, met echte voorbeelden en de toets die je zelf kunt doen.
Ik zie AI als alcohol of anabolen: een middel dat versterkt wat er al is. Wie eerst zelf heeft gestudeerd en nagedacht, krijgt een hefboom. Wie er als kind mee begint, krijgt een prothese voor een spier die nooit is gegroeid, en blijft intellectueel een baby. Daarom denk ik aan een ondergrens, en daarom moet ik ook uitleggen waarom dat geen ladder is die ik achter me optrek.
In cyclus-apps en sport-apps voeren mensen hun gezondheid en zelfs hun seksleven in, zonder stil te staan bij waar dat belandt. In een van de gemeten cyclus-apps lopen statistiek, inloggen en betalen via Russische diensten. Maar is dat de schuld van de gebruiker? De wet plakt er pleisters op, terwijl het de bedrijven kennelijk niet interesseert waar die gegevens heen gaan. Wat de gebruiker zelf kan doen is klein maar echt: lees de voorwaarden, en zie je daar vreemde, onbegrijpelijke taal, gebruik de app dan niet.
De belangrijkste datastroom oogt niet als reclame en ontsnapt daardoor aan een cookie-check. Een klantdataplatform verzamelt elke handeling en zet die structureel onder Amerikaanse jurisdictie, terwijl de aandacht naar de zichtbare advertenties gaat. Wie alleen op advertentie-trackers let, mist de ruggengraat.
Achter de advertentiemarkt zit een kleine, vaste groep locatie-databrokers die via meegeleverde SDK's de positie van miljoenen toestellen verzamelen en doorverkopen. Ze staan zelden op een website, maar reizen mee in gewone apps. Wie de spelers kent, herkent het patroon overal terug.
De wet vraagt geen toestemming voor cookies die strikt noodzakelijk zijn om een dienst te leveren die je zelf hebt gevraagd. Voor al het andere wel, vooraf. Het verschil tussen die twee is de hele cookiewet, en het wordt structureel verkeerd getrokken. Hier staat per soort cookie of hij zonder toestemming mag, met echte voorbeelden en de toets die je zelf kunt doen.
Op Nederlandse overheidssites is de grootste bron van verkeer voor toestemming geen advertentietracker maar een lettertype, een kaartje of een icoonpakket van een extern adres. Google Fonts, Google Maps, Adobe Typekit, jsDelivr en Cloudflare laden in 97 tot 100 procent van de gevallen al voordat de bezoeker iets heeft geklikt. Dat is geen kwade opzet, het is een bouwkeuze, en het is de goedkoopste te repareren overtreding die er bestaat.
Toestemmingsmodules zijn niet inwisselbaar. Over 1.718 overheidssites loopt het aandeel dat al voor toestemming trackt uiteen van 20,8 procent bij de ene module tot 100 procent bij de andere. De keuze van je leverancier voorspelt je nalevingsniveau beter dan je privacyverklaring dat doet.
Voorleessoftware, feedbackknoppen en webarchivering worden ingekocht om de site beter te maken, en ze laden vrijwel altijd voor de toestemmingsvraag. ReadSpeaker deed dat op 41 van 41 sites, Mopinion op 25 van 26, en de webarchiefdienst sitearchief.nl draagt zelf Google Analytics mee op 33 sites. Wie zijn toestemmingsvraag serieus neemt, moet ook zijn hulpmiddelen tellen.
Een browser is een vertaler die code omzet in beeld, en hij is de laatste jaren steeds meer jouw kant gaan kiezen. Hij blokkeert cookies van derden, verbergt je IP-adres, en beperkt wat een script mag zien. Bijna alle technieken waar ik over schrijf bestaan om precies die bescherming te omzeilen. Wie dat eenmaal ziet, leest het nieuws over tracking anders.
Economie en kwaliteit
Waarom de spullen slechter worden terwijl wij bekwamer worden. Geplande veroudering vraagt juist vakmanschap, en wat niet in een advertentie past, verdwijnt het eerst.
Wie het hardst roept, verdient in Nederland doorgaans het meest. Niet omdat hij meer levert, maar omdat in zijn vak het resultaat pas veel later zichtbaar is, of nooit. In een keuken, een atelier, een collegezaal of op een veld kan dat niet: daar is de output direct zichtbaar en meteen te beoordelen. Precies in de functies met de meeste macht ontbreekt die directe toets.
Klokkenmakers bestaan bijna niet meer, en in sommige landen is thuisbezorgen zo gewoon geworden dat zelf koken opvalt. Een vaardigheid verdwijnt niet doordat mensen dommer worden, maar doordat iets haar overbodig maakt. En omdat je koken leert van iemand die het kan, sluit een overgeslagen generatie de terugweg af.
Het beeld van de kikker die in langzaam opwarmend water blijft zitten, beschrijft precies hoe achteruitgang went. Alleen klopt het niet: kikkers springen er wel degelijk uit. Dat een weerlegd experiment het bekendste argument voor sluipende verslechtering is geworden, is zelf het beste voorbeeld van wat er misgaat.
Verbreed een snelweg en er komt meer verkeer, geen kortere reistijd. Bij software gebeurt hetzelfde: sneller kunnen bouwen leegt de wachtlijst niet, het haalt uitgesteld werk naar voren en maakt onrendabele plannen ineens haalbaar. De winst verdampt in hogere verwachtingen voordat iemand heeft besloten waar hij heen moest.
Randall Munroe verliet NASA om stripjes te tekenen, geeft xkcd gratis weg en beantwoordt in What If? absurde vragen met echte natuurkunde. Niemand vroeg erom, geen bedrijf verdient eraan, en juist daarom is het zo goed. Zodra iets moet renderen, wordt van bovenaf bepaald hoe diep het mag gaan en hoe het mag klinken.
Als er een nieuwe feature uitkomt, springt mijn nerd-hart op. Pas een seconde later komt het wacht even. Allebei die reacties zijn echt en ik wil ze allebei houden. Wie alleen de tweede overhoudt, is geen criticus meer maar iemand die moe is, en die overtuigt niemand die het enthousiasme wel voelt.
Films, muziek, software, auto-functies, zelfs de stappenteller in een horloge: steeds meer is een dienst die doorloopt zolang je betaalt en die de verkoper kan intrekken. Dat is een echte verschuiving en ze is te meten. Ze is alleen geen complot, en wie er een complot van maakt, maakt de waarneming onbruikbaar.
Een betaalmuur is op zichzelf te verdedigen, want journalistiek kost geld. Wat ik meet is iets anders: wie betaalt, krijgt de trackers er gewoon bij. Je koopt je uit de reclame en blijft handelswaar. Dat is niet twee keer verdienen aan hetzelfde product, dat is de lezer als product houden nadat hij klant is geworden.
Een houten knop en een dun plastic knopje doen precies hetzelfde. Toch wil je bij het ene handschoenen aan, en vraag je je bij het andere af wie het gemaakt heeft en of je het na het aanraken moet poetsen. Dat verschil zit niet in de functie maar in de verhouding, en het is de eerste kwaliteit die verdwijnt omdat ze in geen enkele advertentie past.
Bij de Apple II zaten de volledige schema's in de handleiding, want de bouwer wilde dat je hem kon openmaken. Bij het huidige Apple is een onderdeel gekoppeld aan het serienummer van je toestel. Hetzelfde bedrijf, andere baas over het ontwerp. Wie de doorslag geeft in de vergadering, is af te lezen aan het product.
Mijn stelling is dat slechte producten meestal uit de prikkel komen en niet uit onvermogen. De Cybertruck is de uitzondering die dat scherpstelt. Onbeperkt budget, de beste ingenieurs, en toch een gaspedaal dat kon blijven hangen op vol gas omdat iemand zeep gebruikte als montagesmeermiddel. Dat is geen bezuiniging, dat is niet weten wat je doet.
Apple, Google en Meta verdienen aan tracking, Nederlandse bedrijven leveren het aan, en de wet staat het grotendeels toe en handhaaft nauwelijks. Dan is het bijna legaal. In die situatie is boos wijzen niet genoeg. Nieuws en weer zijn te oud en te belangrijk om vergiftigd te laten. Daarom bouw ik nieuws.mickbeer.com en weer.mickbeer.com: niet alleen anders, ook beter.
Ingenieurs kunnen meer dan ooit, en toch gaat bijna alles wat je koopt achteruit. Dat is geen tegenspraak. Iets laten falen in jaar vijf vraagt meer precisie dan iets laten meegaan, dus bekwaamheid is niet de tegenkracht van verval maar de voorwaarde ervoor. Technologie schept geen kwaliteit, ze schept speelruimte, en die ruimte wordt naar beneden benut.
Een product laten sterven op het juiste moment kan alleen wie het precies genoeg beheerst. Handwerk faalt willekeurig, massaproductie faalt op afspraak. Het oudste bewijs is het Phoebus-kartel van 1924, waar Osram, Philips en General Electric de levensduur van de gloeilamp terugbrachten naar duizend uur en leden beboetten die te lang meegingen.
Mijn meubels zijn handgemaakt en tweedehands, mijn jassen komen uit de jaren voor mijn geboorte, mijn klokken lopen op een veer. Dat is geen nostalgie maar een meting: het nieuwe alternatief valt binnen vijf jaar uit elkaar. Wie alleen nog dingen koopt die zo lang meegaan, leent zijn hele inboedel.
De bekendste grafiek van de enshittification-curve komt uit een stuk van Tim O'Reilly, die er eerlijk bij schrijft dat hij ChatGPT om een illustratie vroeg. Er zit geen dataset onder, geen eenheid op de as, geen meting. Het idee van Doctorow is hard en citeerbaar, de curve is een tekening. Wie het verschil niet benoemt, doet precies wat hij anderen verwijt.
Literatuur en verhalen
Romans en verhalen die ik heb gelezen, met wat ze bij me losmaakten en waarom ze blijven hangen.
Een rechter valt van een trapje bij het ophangen van gordijnen, wordt ziek en gaat dood. Onderweg dringt het tot hem door dat zijn leven misschien verkeerd is geweest. Niet omdat hij slechte dingen deed, maar omdat hij precies deed wat iedereen van hem verwachtte: de juiste baan, het juiste huis, de juiste meningen. Tolstoj noemt dat leven gewoon en daarom verschrikkelijk. Wat mij raakt is dat het besef pas komt als er niets meer te veranderen valt. Het boek is daarmee een handleiding voor hoe je niet moet leven, en het antwoord erop is oud: memento mori, de reflectie van het sterfbed naar voren halen naar vandaag, toen er nog iets mee te doen viel.
Josef K. hoort nooit waarvan hij wordt beschuldigd, het oordeel ligt er voordat er iets is onderzocht, en iedereen die hij tegenkomt is volstrekt zeker van zijn zaak zonder het geheel te overzien. De macht oogt daardoor onverklaarbaar, alsof onzichtbare plaaggeesten eraan trekken. Dat is niet de beschrijving van een rechtsstelsel dat ontspoort, het is de beschrijving van hoe een hedendaagse zaak door het publiek wordt afgehandeld: de uitkomst staat vast op dag één, en de betrokkenen begrijpen er samen minder van dan één iemand zou moeten. Wat dat met een mens doet is niet woede maar uitputting: je wordt niet verslagen, je bent overgeleverd.
Hoeveel land heeft een mens nodig is tot nu toe het boek dat het beste laat zien hoe ver je een complex onderwerp kunt indikken. Waar de meeste schrijvers honderden bladzijden nodig hebben, doet Tolstoj het in ongeveer achtduizend woorden, in de meeste uitgaven vijftien tot vijfentwintig bladzijden. Er gaat niets verloren. De redenering staat er compleet in, inclusief het einde dat je ziet aankomen en dat toch aankomt.
Op het eerste gezicht is het een simpel kinderboek: een meisje valt in een hol en komt in een wereld waar niets klopt. Dat beeld houdt stand tot je twee dingen erbij legt. Het voorwoord over Charles Dodgson zelf, en de manier waarop iemand als Jordan Peterson dit soort verhalen naast bijbelse leest, bijvoorbeeld naast de verloren zoon. Daarna lees je hetzelfde boek anders.
Ik kreeg hoofdpijn van Misdaad en straf, en plaatsvervangende schaamte. Niet van het geweld, maar van de manier waarop Raskolnikov zichzelf gelijk geeft. Hij praat zijn daad stap voor stap recht, en elke stap klinkt redelijk. Dat is zo echt en zo tastbaar opgeschreven dat je het in je lijf voelt. Het slot vond ik een anticlimax.
De neus was precies wat ik ervan hoopte. Het verhaal begint bij een absurditeit, gaat die vervolgens doodserieus behandelen alsof het een gewone ambtelijke kwestie is, en glijdt aan het eind weer terug in absurditeit. Die middenbeweging is het interessante deel: de logica komt niet om de absurditeit op te lossen, ze komt eroverheen liggen.
Erbij horen in deze tijd
Hoe een tijdlijn je waarneming vormt, waarom gedrag zich voortplant als een besmetting, en wat comfort met een generatie doet.
Iemand die iets vervelends onder jouw bericht zet, laat je hartslag stijgen. Leg dat eens uit aan iemand van vijftig jaar geleden. We verdedigen en onderhouden sinds kort een stuk grondgebied dat niet bestaat in de ruimte, en het lichaam reageert erop alsof er iemand in de tuin staat.
De jaren negentig, nul en tien voelen als afgebakende tijdvakken met een eigen karakter, maar niemand werd op 1 januari 2000 wakker in een andere cultuur. Die grenzen komen uit ons tientallig stelsel en uit het feit dat we ons onze eigen jeugd het scherpst herinneren. Dat is de disciplinerende gedachte bij alles wat ik over vroeger beweer.
Op LinkedIn zag ik tussen maart en juni 2026 een golf van klaagposts: je ergert je eraan, je ziet dat het aandacht oplevert, je doet mee. Ik zag ook meer overlijdensberichten dan ooit. Het eerste is een besmetting die ik kan beschrijven, het tweede is iets over mijn tijdlijn en niet over de wereld.
Mensen schrijven me dat ik blijkbaar niet geshadowbanned ben, of vragen waarom hun reactie onder mijn bericht meer mensen bereikt dan hun eigen bericht. Dat laatste weerlegt precies wat ze beweren: zelfde account, zelfde dag, ander resultaat. Een onzichtbare straf die alles verklaart, verklaart niets, en zolang je haar gelooft toets je je eigen methode nooit.
Zelfredzaamheid wordt gepresenteerd als een eigenschap van mensen, maar wordt gemeten aan de uitkomst. Wie geld heeft, koopt de hulp die hij nodig heeft en heet zelfredzaam. Wie dat geld niet heeft, moet dezelfde taak zelf doen en heet afhankelijk zodra het misgaat. Iedereen heeft soms hulp nodig, dus het onderscheid zit niet in de behoefte maar in de betaalbaarheid. Datzelfde patroon keert terug zodra bescherming iets kost, in tijd, kennis of geld.
Wat is bekwaamheid?
Wat je wel en niet kunt aanleren, en waarom de vaardighedenlijsten van vandaag denkgewoonten vragen die als cursus worden verkocht.
De vraag klinkt als cultuurpessimisme, en dat wil ik hem niet laten zijn. Daarom stel ik hem meetbaar: waar zou je het zien als het antwoord nee is, en zie ik dat in mijn eigen metingen terug? Het eerlijke antwoord is dat ik onbekwaamheid niet kan onderscheiden van verkeerde prikkels, en dat het onderscheid uitmaakt voor wat je eraan doet.
Ronaldinho hield de bal hoog, bedacht trucs die niemand had gezien en kreeg in 2005 een staande ovatie van het publiek van de aartsrivaal. Modern voetbal is op elke meetbare as beter geworden en voelt tegelijk alsof er wordt nagedaan in plaats van beleefd. Dat is geen toeval: wat te meten valt wordt getraind, en verrassing valt niet te meten.
Sherlock Holmes ziet wat anderen missen omdat hij waarneemt in plaats van aanneemt. De beweging om me heen gaat de andere kant op: gebruikers in plaats van makers, aannemers in plaats van onderzoekers, meningen in plaats van onderbouwde standpunten. Al moet ik erbij zeggen dat Holmes' methode alleen werkt omdat de schrijver de dader al kende.
Bekwaamheid heeft niets met opleidingsniveau te maken. Het gaat erom of je de stof zo eigen hebt gemaakt dat je ermee kunt spelen: iets maken dat er nog niet was, in plaats van alleen consumeren en beoordelen. Een mbo'er die bouwt is bekwamer dan een academicus die alleen oordeelt, en de toets is simpel: laat zien wat je hebt gemaakt.
Streep de modewoorden weg uit de vaardighedenlijsten van 2026 en er blijft iets anders over dan gereedschap: systeemdenken, root-cause zoeken, begrijpen wat code echt doet. Dat zijn denkgewoonten, en ze worden verkocht als tweedaagse cursus. Aanleg bepaalt niet of je het kunt leren, wel hoe lang het duurt en wie er onderweg afhaakt.
Geheugen en getuigenis
Waarom herinnering een slecht meetinstrument is: je kunt vergeten dat je je iets herinnerde, en overtuigde getuigen wijzen de verkeerde aan.
Toen ik twaalf was hoorde ik dat er per pot appelmoes een vast aantal insecten meeverwerkt zit, wettelijk toegestaan omdat je ze er niet uit krijgt. De appelmoes veranderde niet, mijn verhouding ertoe wel. Datzelfde geldt voor software: de bugs en de dataverzameling zitten erin of je het weet of niet, en niet weten is geen bescherming maar naiviteit.
Vlad III was een orthodoxe vorst die zijn land verdedigde tegen de Ottomanen, en hij is beroemd geworden als monster. Niet door Bram Stoker, die alleen de naam leende, maar door Duitse pamfletten op de pas uitgevonden drukpers. Russische verslagen beschreven dezelfde daden als strenge rechtvaardigheid. Zelfde feiten, tegengesteld beeld, afhankelijk van wie de pers bediende.
Anne Frank en Martin Luther King zijn allebei in 1929 geboren, en koningin Elizabeth in 1926. Zij was dus ruim drie jaar ouder dan allebei, en leefde tot 2022. Dat voelt onmogelijk, en de reden is dat wij mensen niet dateren op hun geboortejaar maar op het laatste beeld dat we van ze hebben.
Er bestaat een gemeten effect waarbij mensen zich een gebeurtenis wel herinneren, maar vergeten zijn dat ze zich die eerder ook al herinnerden. Dat betekent dat het gevoel hier heb ik nooit eerder aan gedacht geen bewijs is. Je geheugen houdt geen logboek bij van zijn eigen raadplegingen, en dat is precies wat een meting wel doet.
Van de Amerikaanse veroordelingen die later met DNA zijn rechtgezet, berustte 69 procent op een ooggetuige die de verkeerde aanwees. In bijna vier op de tien van die zaken wezen meerdere getuigen dezelfde onschuldige aan. Overtuiging en overeenstemming voelen als bewijs en zijn het niet.
Bekwaamheidsfouten in code, bestuur en politiek
Twintig jaar lang won de vraag of iets werkt van de vraag hoe het werkt. Daarom zitten de gaten er nog, in code en in bestuur.
Twintig jaar lang was de vraag of iets werkte belangrijker dan de vraag hoe het werkte. Het web moest kunnen chatten, veilig kwam later, en later kwam nooit. Daarom vind ik nog steeds overal dezelfde gaten. Niet omdat ze moeilijk zijn, maar omdat niemand betaalt voor de inbraak die niet gebeurde.
Op veel IT-afdelingen beslist iemand over een implementatie die het vak zelf nooit heeft beoefend, terwijl wie het wel kan wordt afgewezen als te technisch of niet businessminded genoeg. Dezelfde omkering zie ik in de politiek: de Kamer verliest haar digitale kennis sneller dan ze die opbouwt. Dit is de onbekwaamheidscrisis in haar zuiverste vorm.
Lang was de vraag waar het digitale in ons leven paste, als een laag erbovenop. Die vraag is achterhaald. Ons leven is digitaal geworden: je bankzaken, je zorg, je identiteit, je contacten, je werk lopen er allemaal doorheen, en eruit stappen kan niet meer. Dat verandert de inzet van mijn werk, want een fout in de infrastructuur is geen ongemak maar een fout in de bodem waarop je staat.
Een glazen plaatje naast de bank tik je aan en een uur later staat er een warme maaltijd aan de deur. Dat vinden we normaal en leuk. Maar zeg code, kwetsbaarheid of wet, en ineens is alles te technisch en te ver weg. Dezelfde persoon haalt de magie zonder aarzeling binnen en duwt de gevolgen weg, en precies in dat gat werk ik.
Computer science
Wat me fascineert aan rekenen, vorm en code, van fractals tot wat ik hier nog ga schrijven.
Met Paramant bouw ik versleuteling op post-quantum standaarden, tegen een computer die nog niet bestaat. Dat is het tegendeel van keihard innoveren: je lost een probleem op dat nog niemand heeft, omdat wat vandaag wordt onderschept over tien jaar alsnog te openen is. Het is de hoe-vraag stellen voordat iemand je ertoe dwingt.
Een HAR-bestand is de volledige opname van al het netwerkverkeer bij een websitebezoek: elk verzoek, elke cookie, elke bestemming. Bijna al mijn privacy-bevindingen komen eruit. Een verklaring is een belofte, de HAR is de uitvoering. Het vastleggen kan iedereen; het lezen en duiden is het vak.
Windstil is mijn Google Maps voor de rustigste route in plaats van de snelste. Een kaart die je langs de kalmste weg stuurt, weg van drukte en prikkels. Waar elke andere app optimaliseert voor tijd, optimaliseert deze voor rust. Daarom is het tegelijk computer science en psychologie.
De Mandelbrotverzameling ontstaat uit een formule die op een bierviltje past, en toch is haar rand oneindig complex. Diezelfde fractale vorm zie je overal in de natuur terug, van varen tot kustlijn tot longblaasje, en de ingekleurde beelden zijn voor mij pure kunst. Wiskundige strengheid en visuele schoonheid in een.
Angst
Wat ik van een leven met fobieen heb geleerd over de kloof tussen wat je voelt en wat er is, en waarom dat mijn werk raakt.
Stop met tegenvechten. Ga de strijd aan met je angst in plaats van tegen je angst, en behandel hem niet als ziekte of tegenstander. Leer ermee leven in plaats van ondanks te leven. Ik vermoed dat dit voor meer geldt dan angst alleen, en dat het bij depressie en mogelijk bij andere aandoeningen dezelfde kant op werkt.
Ik kamp sinds mijn jeugd met angsten en fobieen: pleinvrees, drukte, emetofobie. Wat een fobie zo eigenaardig maakt, is dat het gevaar volledig echt voelt terwijl je verstand weet dat het er niet is. Dat is precies de kloof tussen voelen en meten waar mijn hele werk op rust, alleen dan van binnenuit, waar ik hem niet kan wegmeten.
Zien is een novelle die ik schreef vanuit mijn angststoornis. Ze volgt een engineer in Utrecht die in een database een bericht vindt dat er nooit had mogen staan, van iemand die een week later overleed. De tekst staat er zeven jaar later nog, door een technische beslissing die hij allang vergeten was. Dat is precies wat ik in mijn werk meet, alleen dan van binnenuit.
Lijden en vorming
Waarom weerstand vormt en comfort dat verhindert, van de kerkvaders tot het kind dat alles voor elkaar krijgt. Dezelfde these als bij vaardigheid en bij AI, in een ander domein.
Van Duin combineerde vakken die zelden in één mens zitten: hij schreef, speelde, zong en deed het technische werk achter zijn eigen producties. Wat mij bezighoudt is niet die veelzijdigheid, maar wat de humor deed. Een land dat net uit een oorlog kwam kreeg iemand die het liet lachen, en dat lachen was geen verstrooiing maar verwerking.
De Bijbel zegt dat verdrukking volharding voortbrengt, en dat is geen troostpraatje maar een uitspraak over hoe mensen worden gevormd. Een kind dat binnen veilige grenzen tegenslag doorstaat, wordt een prettiger mens dan een kind dat alles voor elkaar krijgt. Dat is geen pleidooi om iemands leven te verzwaren. Het is een pleidooi om meer zelf te doen waar dat kan.
Als een bezorgdienst plat ligt of een streamingdienst eruit ligt, zie ik reacties die me oprecht doen schrikken. Tegelijk kreeg ik als kind precies hetzelfde verwijt van mijn ouders, over iPads en goede scholen. Dat maakt de waarneming niet onjuist, maar wel verdacht, en de eerlijke versie moet allebei bevatten.
AI
Waar ik het aanbevelingsalgoritme bespeel, waar een taalmodel een curve tekent, en waar de belofte van AI botst met wat ze echt doet. De machinerie die bepaalt wat je ziet, gemeten zoals ik alles meet.
Mensen schrijven me dat ik blijkbaar niet geshadowbanned ben, of vragen waarom hun reactie onder mijn bericht meer mensen bereikt dan hun eigen bericht. Dat laatste weerlegt precies wat ze beweren: zelfde account, zelfde dag, ander resultaat. Een onzichtbare straf die alles verklaart, verklaart niets, en zolang je haar gelooft toets je je eigen methode nooit.
Ik weet redelijk goed hoe je op LinkedIn bereik krijgt: scrollstoppende eerste regels, een beeld dat kort verwarring wekt, geen links, geen tags, en publiceren op het moment dat jij zelf kijkt. De enige regel die telt staat in het midden: verandert de verpakking mijn boodschap? Dan terug naar de tekentafel.
De bekendste grafiek van de enshittification-curve komt uit een stuk van Tim O'Reilly, die er eerlijk bij schrijft dat hij ChatGPT om een illustratie vroeg. Er zit geen dataset onder, geen eenheid op de as, geen meting. Het idee van Doctorow is hard en citeerbaar, de curve is een tekening. Wie het verschil niet benoemt, doet precies wat hij anderen verwijt.
Wanneer is iemand bekwaam?
Wanneer ben je ver genoeg om een hulpmiddel een versterker te laten zijn in plaats van een vervanging? De vraag achter mijn bezwaar tegen AI in jonge handen.
Ik zie AI als alcohol of anabolen: een middel dat versterkt wat er al is. Wie eerst zelf heeft gestudeerd en nagedacht, krijgt een hefboom. Wie er als kind mee begint, krijgt een prothese voor een spier die nooit is gegroeid, en blijft intellectueel een baby. Daarom denk ik aan een ondergrens, en daarom moet ik ook uitleggen waarom dat geen ladder is die ik achter me optrek.
The Orthodox Church
Timothy Ware over de oosterse kerk: het boek dat me liet zien hoeveel Europese geschiedenis ik miste zonder te weten dat ik het miste.
Voor ik Timothy Ware las wist ik vrijwel niets over de kerk, over het christendom en over hoe die Europa hebben gevormd. Niet omdat het ingewikkeld is, maar omdat het in mijn opleiding simpelweg ontbrak. Dat is een ander soort onwetendheid dan iets niet snappen: ik wist niet dat er iets te weten viel.
Kafka
Iemand die dacht op een manier die de rest van ons niet kan, en dat overdraagbaar maakte. Zijn grootste creatie is niet een boek maar een woord.
Kafka zag iets aan macht en bureaucratie wat wij pas herkennen als hij het ons laat zien, en hij maakte het overdraagbaar in verhalen. Zijn grootste creatie is daarom geen boek maar een bijvoeglijk naamwoord: kafkaesk wordt gebruikt door miljoenen die hem nooit hebben gelezen. Dat is de hoogste vorm van maken die ik ken.
Jordan Peterson
Wat ik van hem heb geleerd over verantwoordelijkheid en betekenis, en waar zijn gezag ophoudt zodra hij zijn eigen vakgebied verlaat.
Ik heb tientallen uren aan colleges en gesprekken van hem gezien, en wat bleef hangen is de koppeling tussen verantwoordelijkheid nemen en betekenis vinden. Tegelijk moet ik mijn eigen regel op hem toepassen: bekwaamheid in het ene domein draagt niet over naar het andere, en juist bij hem is dat verschil groot.
Mijn favorieten, ontleed
Geen recensies. Een slechte film zet ik na vijf minuten uit, dus hier staat alleen wat het ontleden waard was, en wat het me leerde over mijn eigen vak.
Identity, Shutter Island en The Number 23 doen alle drie hetzelfde: ze laten je een verhaal volgen dat klopt, en tonen dan dat het instrument waarmee je keek kapot was. Die laatste gaat over patronen zien die er niet zijn, en dat is precies het beroepsrisico van iemand die de hele dag in data naar patronen zoekt.
Alle Nederlandse wetten, gespiegeld
Mijn open spiegel van de Nederlandse wet: elke regeling een tekstbestand, elke wijziging een commit, dagelijks bijgewerkt.
Wetten zijn publiek eigendom, maar op wetten.overheid.nl kun je niet zien welk woord er gisteren veranderde. Daarom spiegel ik ze: elke wet een tekstbestand, elke wijziging een commit. Nu staan er 19.626 geldende regelingen in, bijgewerkt door een robot die elke ochtend om zes uur kijkt of Den Haag iets heeft veranderd.
Ivan Iljitsj deed alles wat er van hem gevraagd werd, en dat was de fout
Een rechter valt van een trapje bij het ophangen van gordijnen, wordt ziek en gaat dood. Onderweg dringt het tot hem door dat zijn leven misschien verkeerd is geweest. Niet omdat hij slechte dingen deed, maar omdat hij precies deed wat iedereen van hem verwachtte: de juiste baan, het juiste huis, de juiste meningen. Tolstoj noemt dat leven gewoon en daarom verschrikkelijk. Wat mij raakt is dat het besef pas komt als er niets meer te veranderen valt. Het boek is daarmee een handleiding voor hoe je niet moet leven, en het antwoord erop is oud: memento mori, de reflectie van het sterfbed naar voren halen naar vandaag, toen er nog iets mee te doen viel.
Tolstoj schrijft ergens in het begin, vlak nadat de collega's van Ivan Iljitsj vooral hebben nagedacht over wie zijn functie krijgt, dat diens leven het meest eenvoudige en gewone was, en daarom het meest verschrikkelijke.
Die zin lijkt een tegenstelling en is het niet. Gewoon is hier niet het tegenovergestelde van verschrikkelijk, het is de oorzaak ervan.
Ivan Iljitsj heeft namelijk niets fout gedaan in de gebruikelijke zin. Hij studeerde rechten, kreeg een nette aanstelling, trouwde met een vrouw die goed bij zijn positie paste, klom door, verhuisde naar een groter huis en richtte dat in zoals zulke huizen worden ingericht. Elke stap was verstandig. Elke stap werd goedgekeurd door de mensen om hem heen.
En dat is waar hij aan is doodgegaan, lang voordat de ziekte begon.
Wat hij deed, elke keer opnieuw, was voldoen aan wat een ander van hem verlangde. Zijn vader verwachtte een loopbaan. Zijn kring verwachtte een huwelijk. Zijn stand verwachtte een bepaalde inrichting, een bepaalde toon, bepaalde meningen. Hij hoefde nooit iets te kiezen, want er was altijd al een goedgekeurde optie.
Dat is comfortabel. Het scheelt de pijn van zelf bepalen, en het levert bij elke stap bevestiging op.
De prijs blijkt pas aan het eind, en dan in één klap. Als hij ziek wordt en de mensen om hem heen zich precies zo gedragen als hun rol voorschrijft, ziet hij ineens dat hij dat zijn hele leven ook heeft gedaan. Zijn vrouw speelt de bezorgde echtgenote. De dokters spelen het onderzoek. De collega's spelen medeleven en denken aan de vacature. Niemand is oneerlijk, iedereen doet wat hoort.
Op dat punt komt de vraag die de rest van het boek draagt: en als mijn hele leven nu eens verkeerd is geweest.
Een verkeerd leven waarin je één grote fout maakt, kun je aanwijzen en betreuren. Daar hoort spijt bij, en spijt is bruikbaar: je weet wat je anders had moeten doen. Ivan Iljitsj heeft dat niet. Er is geen dag aan te wijzen waarop hij is afgeslagen. Er zijn alleen duizend redelijke keuzes die samen een leven vormen dat niet van hem was.
Daarom voelt zijn besef niet als spijt maar als iets ergers: hij ontdekt dat er nooit een keerpunt is geweest waar hij het anders had kunnen doen, want elk afzonderlijk moment was verstandig. Hetzelfde patroon als bij een systeem waarin niemand de fout maakt en de fout er toch is. Zie Het proces beschrijft geen rechtszaak maar een nieuwscyclus.
Er is één figuur die eruit springt, en Tolstoj zet hem er niet toevallig in.
Gerasim, de boerenknecht, is de enige die niet doet alsof. Hij tilt de benen van de zieke op zijn schouders omdat dat verlicht, hij ruimt op wat er op te ruimen valt, en als het gesprek op de dood komt, ontkent hij niets. Wij gaan allemaal een keer, zegt hij ongeveer, waarom zou ik dan moeite sparen.
Ivan Iljitsj kan alleen bij hem uitrusten. Niet omdat Gerasim aardiger is, maar omdat hij de enige is die de waarheid niet vermijdt. Alle beleefde mensen om hem heen bieden hem een leugen aan die als vriendelijkheid is verpakt, en die leugen isoleert hem meer dan de ziekte.
Dat is de tweede reden dat het boek blijft hangen. Het gaat niet alleen over een verkeerd geleefd leven, het gaat over hoe eenzaam je wordt van mensen die je sparen.
Ik lees dit als een waarschuwing die precies de andere kant op wijst dan de meeste levenslessen.
De gebruikelijke waarschuwing gaat over falen: pas op dat je niet de mist in gaat. Deze gaat over slagen. Pas op dat je niet je hele leven de goedkeuring van anderen achterna loopt en aan het eind ontdekt dat je nooit hebt gekozen.
De toets die ik eruit haal is kort. Doe ik dit omdat ik het juist vind, of omdat het goedgekeurd wordt. Bij het tweede antwoord ben ik Ivan Iljitsj, alleen dan met meer tijd om er nog iets aan te doen.
Zo lees ik het boek uiteindelijk. Niet als een verhaal over sterven, maar als een handleiding die alleen negatief is opgeschreven. Tolstoj vertelt nergens hoe het wel moet. Hij laat één man zien die het precies zo deed als het hoort, en laat je zelf de conclusie trekken.
Dat is een sterkere vorm dan een voorschrift. Een voorschrift kun je afwijzen omdat het niet bij je past. Een tegenvoorbeeld dat je herkent, kun je niet meer wegleggen.
En het is een eerlijker vorm, want Tolstoj weet zelf ook niet precies hoe het wel moet. Hij weet alleen zeker dat dit het niet was.
Het middeleeuwse memento mori wordt tegenwoordig gelezen als een sombere spreuk, iets voor schedels en zandlopers. Dat is een misverstand. Het is geen aansporing om over de dood te piekeren, het is een rekentruc.
Ivan Iljitsj doet op zijn laatste dagen precies de goede reflectie. Hij stelt de enige vraag die ertoe doet, hij ziet zijn leven scherper dan ooit, en hij komt tot een eerlijk oordeel. Zijn probleem is niet dat hij verkeerd denkt. Zijn probleem is de timing.
Memento mori haalt die reflectie naar voren. Je voert het gesprek dat je toch gaat voeren, alleen dan op een moment dat er nog iets mee te doen valt. Dat is geen zwaarmoedigheid, dat is planning.
De praktische vorm ervan is simpel en oncomfortabel. Stel de vraag die Iljitsj stelde, maar vandaag. Als het straks blijkt dat mijn leven verkeerd is geweest, wat zou dan het antwoord zijn geweest. Wie daar meteen een antwoord op heeft, weet ook wat er nu moet veranderen.
Wat Iljitsj had uitgesteld, waren geen praktische zaken. Zijn testament was vast in orde, zijn loopbaan liep, het huis was ingericht.
Wat hij had uitgesteld, was de vraag waarvoor hij leefde. Dat is de categorie die zich altijd laat verschuiven, want er staat nooit een deadline op en niemand vraagt ernaar. Alles wat wél een deadline heeft, dringt voor.
Daarom hoort die categorie een eigen plek te krijgen in plaats van de resttijd. Wat je gelooft, waar je voor staat, met wie je in het reine wilt komen, en wat je zou willen dat er van je werk overblijft. Niet omdat het verheven is, maar omdat het de enige post is die op het laatst nog meetelt en die je tot dat moment ongestraft kunt negeren.
Wat het boek van somber naar iets anders tilt, is dat het niet eindigt in wanhoop.
In de laatste uren kijkt hij naar zijn zoon, die zijn hand pakt en huilt, en er verandert iets. Hij ziet dat hij nog iemand verdriet kan besparen, en dat blijkt genoeg om de angst te laten wegvallen. De dood is er nog steeds, maar het bange wachten is voorbij.
Dat vind ik de eerlijkste troost die ik in een boek ben tegengekomen. Er wordt niets goedgemaakt en er is geen inhaalslag. Er is alleen het inzicht dat een leven ook op de laatste dag nog iets kan betekenen voor iemand anders, en dat dat kennelijk het enige is wat telde.
Het proces beschrijft geen rechtszaak maar een nieuwscyclus
Josef K. hoort nooit waarvan hij wordt beschuldigd, het oordeel ligt er voordat er iets is onderzocht, en iedereen die hij tegenkomt is volstrekt zeker van zijn zaak zonder het geheel te overzien. De macht oogt daardoor onverklaarbaar, alsof onzichtbare plaaggeesten eraan trekken. Dat is niet de beschrijving van een rechtsstelsel dat ontspoort, het is de beschrijving van hoe een hedendaagse zaak door het publiek wordt afgehandeld: de uitkomst staat vast op dag één, en de betrokkenen begrijpen er samen minder van dan één iemand zou moeten. Wat dat met een mens doet is niet woede maar uitputting: je wordt niet verslagen, je bent overgeleverd.
Josef K. wordt op een ochtend aangehouden zonder dat hem wordt verteld waarvoor. Hij mag blijven werken. Er is een proces, maar hij ziet geen rechter, krijgt geen aanklacht te lezen en spreekt nooit iemand die het dossier kent. Hij ontmoet advocaten die vooral over hun eigen positie praten, een schilder die uitlegt hoe je een vrijspraak kunt uitstellen maar nooit kunt halen, en bewakers die niet weten waarom ze er staan.
Wat mij bij het lezen het langst is bijgebleven, is niet de dreiging. Het is het gebrek aan een centrum. Er is geen kwaadaardig brein dat K. wil pakken. Er is helemaal geen brein.
Dat is het mechanisme, en het is preciezer dan het woord kafkaesk suggereert.
In een gewone rechtszaak weet iemand het geheel. De rechter heeft het dossier. In Het proces is die kennis versnipperd over tientallen mensen die elk een fragment hebben, en niemand voegt de fragmenten samen. De advocaat weet iets van de procedure maar niets van de zaak. De bewaker weet van de aanhouding maar niet van de grond. De schilder kent de rechters maar niet de wet.
Tel je alles op wat de personages samen weten, dan kom je niet op het geheel uit. Je komt op minder dan wat één goed geïnformeerd mens zou hebben. Kennis die versplinterd is, telt niet op maar valt weg.
En let op wat er tegelijk gebeurt: niemand van hen twijfelt. Iedereen spreekt met volle zekerheid over zijn eigen fragment. De onzekerheid zit alleen bij K., de enige die probeert het geheel te zien.
De macht lijkt gedreven door onzichtbare plaaggeesten¶
Dat is precies het gevoel dat het boek achterlaat. De macht in Het proces is niet groot en dreigend, ze is onverklaarbaar. Deuren gaan open op momenten die niemand heeft besloten. Een zolderkamer blijkt een rechtszaal. Een bewaker wordt gestraft omdat K. over hem klaagde, in een kamer die er de dag ervoor niet was.
Het oogt alsof er plaaggeesten aan het werk zijn: kleine, onzichtbare krachten die aan de touwtjes trekken zonder plan en zonder gezicht.
Dat gevoel is geen literaire truc, het is wat er met je waarneming gebeurt zodra een systeem geen centrum heeft. Wij zijn gebouwd om achter gebeurtenissen een bedoeling te zoeken. Vinden we die niet, dan verzinnen we hem liever dan dat we hem loslaten. Daarom eindigt bijna elke poging om zoiets te verklaren in een van twee richtingen: een samenzwering, of het bovennatuurlijke.
Beide zijn geruststellender dan het antwoord dat overblijft. Er is niemand die het stuurt. De structuur produceert de uitkomst zonder dat iemand hem heeft gewild, en dat maakt hem juist zo moeilijk aan te vechten: je kunt geen gesprek voeren met een verdeling van taken.
Ook dat herken ik uit mijn eigen werk. Wie een tracker op een zorgsite vindt, wil geloven dat iemand daar besloten heeft om zieke mensen te verhandelen. Dat is bijna nooit wat er gebeurde. Er was een marketingbureau met een deadline, een formulier dat niemand las, en een leverancier die standaard alles aan zet. Het resultaat is even schadelijk en er is geen dader die je kunt aanwijzen. Zie Bij gedrag telt het effect, bij de persoon de intentie.
Leg daar een hedendaagse zaak naast, en het valt op zijn plaats.
Er is een beschuldiging die zich verspreidt voordat iemand het dossier heeft gezien. Er is een oordeel dat vaststaat op de eerste dag, en al het latere onderzoek wordt gelezen als bevestiging of als uitvlucht. Er zijn duizenden mensen die zich uitspreken, elk met één fragment: een screenshot, een kop, een citaat uit een tweede hand.
En ook hier stapelt de kennis niet op. Wie vijftig reacties leest, weet niet meer dan wie er vijf leest. Hij weet alleen zekerder.
De persoon die het onderwerp is, verkeert intussen in de positie van K.: hij weet niet precies waarvan hij beschuldigd wordt, want de aanklacht verschuift, en hij kan zich niet verweren tegen een verwijt dat nergens in één zin staat opgeschreven. Wie zich verdedigt tegen de versie van gisteren, verdedigt zich tegen de verkeerde versie. Zie Een weerlegging telt pas als zij de gepubliceerde versie van de claim raakt.
Mijn scherpste samenvatting van beide, boek en nieuwscyclus, is deze. Er is misschien één iemand die voor de helft begrijpt wat er werkelijk aan de hand is. De rest beweegt eromheen met de zekerheid van iemand die het geheel overziet.
Dat is geen belediging aan het publiek. Het is een structuurkenmerk. Wie één fragment heeft, kan niet weten hoe groot het geheel is, en juist daardoor voelt zijn fragment volledig. Onwetendheid die zich niet van zichzelf bewust is, klinkt precies als kennis.
Ik zie hetzelfde in mijn eigen vakgebied, en daar kan ik het meten. Bij vrijwel elke zaak die ik onderzoek, blijkt de organisatie niet te bestaan uit mensen die iets verbergen, maar uit mensen die elk een deel beheren en aannemen dat iemand anders het overzicht heeft. De marketeer zet een tag aan. De ontwikkelaar levert de site op. De jurist tekent een verwerkersovereenkomst. Alle drie doen ze hun deel goed, en samen produceren ze een overtreding die niemand heeft besloten. Zie De bouwers en de beslissers weten vaak niet van elkaar.
Dat is Het proces, maar dan met een AVG-boete aan het eind in plaats van een steengroeve.
Onrecht maakt boos. Dit maakt moe, en dat verschil is het hele boek.
Boosheid heeft een adres nodig. Je kunt je verzetten tegen iemand die je iets aandoet, je kunt hem aanspreken, aanklagen, overtuigen of verslaan. Al die routes vragen een tegenpartij. Het proces geeft K. die nooit. Er is geen persoon die de macht draagt, dus er is niets om je tegen af te zetten, en de energie die je normaal in verzet steekt, loopt weg in de lucht.
Wat overblijft is uitputting. K. blijft doorgaan, maar zijn verzet verandert onderweg van karakter. Eerst wil hij bewijzen dat hij onschuldig is. Later wil hij alleen nog weten waarvan hij beschuldigd wordt. Aan het eind wil hij vooral dat het ophoudt. Dat is de curve van iemand die niet wordt verslagen maar wordt versleten.
En er zit nog iets onder. Zolang je gelooft dat het systeem in elkaar zit zoals het hoort, kun je hopen dat het zich uiteindelijk corrigeert. Zodra je merkt dat niemand het overziet, valt die hoop weg. Niet omdat iemand je vijandig is, maar omdat er niemand thuis is. Dat is een specifieke soort somberheid: je bent niet verslagen, je bent overgeleverd.
Ik kom die precies zo tegen bij mensen na een datalek of een schending. De eerste reactie is woede, en die is bruikbaar. Wat erna komt is erger: ze bellen de organisatie en krijgen een afdeling die het niet is, ze mailen de toezichthouder en horen maanden niets, ze lezen een privacyverklaring waarin niets staat over wat er met hen is gebeurd. Op dat punt haken de meesten af, en dat is geen zwakte. Er valt op dat moment niets meer te doen wat resultaat oplevert. Zie De sterkste bevindingen liggen achter DigiD en vitale publieke diensten en Mensen nemen hun data heel persoonlijk.
Het bijvoeglijk naamwoord kafkaesk is een succes, en het is tegelijk een verarming. In het spraakgebruik betekent het inmiddels ongeveer: ingewikkeld en frustrerend. Een formulier dat je drie keer moet invullen heet kafkaesk.
Dat mist waar het boek over gaat. Het gaat niet over ergernis, het gaat over een oordeel dat wordt geveld door een verzameling die als geheel minder weet dan haar delen suggereren. Zie Kafka's grootste creatie is een bijvoeglijk naamwoord.
Daarom is het boek nog steeds nuttig en het woord bijna niet meer. Wie de structuur eenmaal herkent, ziet hem terug in een timeline, in een vergaderreeks, in een dossier dat langs zeven afdelingen gaat, en in de behandeling van een melding die door niemand wordt tegengesproken en ook door niemand wordt opgepakt.
Dat is ook waarom ik mijn eigen stukken opdeel in wat ik heb gemeten en wat ik daaruit afleid. Niet omdat het netjes staat, maar omdat het de enige manier is om te voorkomen dat ik met de zekerheid van de bewaker over de zaak van K. praat.
Het publieke verhaal over online volgen is blijven staan bij 1998: een site zet een bestandje op je computer, je kunt het weigeren of wissen, klaar. Die canon klopt nog voor precies één techniek en dekt misschien een vijfde van wat er werkelijk gebeurt. Al het andere, de veiling, de koppeling, de doorverkoop, het vermommen, heeft eigen woorden die zelden buiten het vak komen. Dit is de kaart van die woorden, en van de scheidslijnen die er structureel tussen wegvallen.
Het standaardverhaal over online volgen gaat zo. Een website zet een klein tekstbestandje op je computer. Dat bestandje heeft een naam en een waarde, de site kan het bij een volgend bezoek terugvragen, en zo weet hij dat jij het bent. Sommige van die bestandjes zijn nodig om de site te laten werken, andere zijn er om je te volgen. Voor die laatste moet toestemming worden gevraagd. Je kunt ze weigeren, en je kunt ze wissen.
Elke zin daarvan is waar. Het probleem is dat het verhaal in 1998 compleet was en sindsdien niet is meegegroeid, terwijl de industrie eromheen dat wel deed. De canon beschrijft één techniek uit een familie van acht, één trap uit een keten van vijf, en één partij uit een keten van negen. Wie hem gebruikt om te begrijpen wat er op zijn scherm gebeurt, komt structureel te laag uit.
Vier dingen ontbreken, en ze ontbreken alle vier op een manier die het beeld gunstiger maakt dan het is.
De canon kent geen veiling. In het standaardverhaal bewaart een site iets over jou om jou later te herkennen. Wat er werkelijk gebeurt bij een advertentieplek is dat jouw kenmerken in een biedverzoek worden gezet en uitgezonden naar iedereen die op dat veilingplatform mag meedoen. Niet alleen naar de winnaar. Ook naar de partijen die niet bieden, en naar de partijen die alleen maar zitten te kijken. Zie Real-time bidding biedt jouw toestel in een veiling aan, in milliseconden en Je toestelprofiel gaat de veiling in voor je iets aanraakt.
De canon kent geen koppeling. Een cookie van partij A en een cookie van partij B zijn in het standaardverhaal twee losse dingen. In de praktijk wisselen A en B hun nummers uit, zodat ze weten dat het om dezelfde persoon gaat. Vanaf dat moment is het profiel van A en het profiel van B hetzelfde profiel, zonder dat er ooit een naam aan te pas kwam. Zie Cookie-sync laat losse partijen dezelfde persoon herkennen en Van losse nummers naar een identiteitsgrafiek.
De canon kent geen doorstroom. Het bestandje staat op jouw computer, dus jij hebt er zeggenschap over. Dat klopt voor het bestandje. Het klopt niet voor wat er met de waarneming gebeurt zodra die is verzonden. Wat er aan de andere kant van de lijn mee gebeurt, staat buiten je zicht en buiten je knoppen. Zie Van aanwezig tot doorverkocht zijn vijf trappen, met vijf bewijslasten.
De canon kent geen vermomming. In het standaardverhaal zie je aan het domein van wie de cookie is. Er zijn inmiddels minstens drie routines die precies dat onzichtbaar maken: een derde partij die achter een eigen subdomein wordt gezet, een verzameling die naar één eigen adres gaat dat serverzijdigdoorverdeelt, en meetcode die vanaf de eigen server wordt geserveerd. Op 1.718 Nederlandse overheidssites verbergt 41,3 procent een derde partij achter een eigen subdomein (scan van 14 juli 2026, zie CNAME-cloaking zit op vier op de tien overheidssites). Dat is geen randverschijnsel meer.
De rest van dit lexicon valt uiteen in acht families. Ze staan hieronder in de volgorde waarin ze in een echte gebeurtenis achter elkaar komen, want dat is de enige volgorde waarin ze te begrijpen zijn.
Waarom dit onderscheid werk is en geen woordenspel¶
Ik heb dit lexicon niet gemaakt om precies te zijn om het precies zijn. Ik heb het gemaakt omdat elke keer dat ik een bevinding publiceer, de discussie erna over een woord gaat en niet over de meting.
Twee voorbeelden uit mijn eigen werk. Toen ik schreef dat de code van een reclamebedrijf in een app zat, kwam terug: dus jullie verkopen mijn data. Dat stond er niet, en het volgde er ook niet uit. Zie Ontvangen is niet doorverkopen. En toen ik in een reeks videoveilingen zag dat een advertentiebedrijf telkens een herkenningsnummer uitwisselde, was de verleiding om te schrijven dat er op de bezoeker werd geboden. In 82 geschikte veilingen bracht dat bedrijf nul keer een bod uit. Zie Een cookie-match bewijst herkenning, geen bod.
Beide keren zit het verschil in één woord, en beide keren is dat woord het verschil tussen een bevinding die standhoudt en een bevinding die een woordvoerder in één zin onderuit haalt. Vaktaal die niemand kent, kost een verhaal zijn werking. Vaktaal die je vervangt door een sterker woord dan je kunt dragen, kost het zijn geloofwaardigheid. De uitweg is niet vager schrijven, maar precies weten welke trap je hebt gemeten.
Van aanwezig tot doorverkocht zijn vijf trappen, met vijf bewijslasten
Code in een app, een verzoek op de lijn, een gegeven dat aankomt, een profiel dat wordt gekoppeld, een dossier dat wordt verkocht. Dat zijn vijf verschillende beweringen, en ze vragen elk om ander bewijs. Wie de ene meet en de andere opschrijft, heeft een fout in zijn stuk staan die een advocaat er in één zin uithaalt. Hier staat elke trap met wat je ervoor moet aantonen.
Dit is de ruggengraat onder alle andere notities in dit lexicon. Vijf beweringen die in het spraakgebruik door elkaar lopen, met per trap wat je moet aantonen om hem te mogen doen.
Trap 1: aanwezigheid. De code van een derde partij zit in de app of op de pagina. Bewijs: de bibliotheek in het pakket, het script in de broncode, de naam in de configuratie. Wat het níét bewijst: dat er iets is verstuurd. Code kan achter een schakelaar zitten, alleen in een bepaald land vuren, of gewoon nooit worden aangeroepen. Zie Een naam in de code is nog geen tracker en Dat een tool iets kan, bewijst niet dat het gebeurde.
Trap 2: het verzoek. Je toestel legt tijdens gewoon gebruik contact met een adres van die derde partij. Bewijs: het verzoek in de netwerkopname, met tijdstip en volgorde. Wat het níét bewijst: dat er een persoonsgegeven in zat. Een verzoek zonder identificerende inhoud is nog geen verwerking van jouw gegevens, al is het adres zelf al een gegeven (jouw IP kwam daar aan). Zie Een verzoek zonder cookie bewijst niets en Een host die je toestel belt is nog geen partij die je data krijgt.
Trap 5: de doorverkoop. Een partij draagt gegevens over jou tegen betaling over aan een partij die daar zelf niets mee te maken had. Bewijs: een contract, een prijslijst, een productpagina, een marktplaatsvermelding, een klokkenluider, een toezichtdossier. Dit is niet met een meetopstelling te bewijzen. Nooit. Wie doorverkoop beweert op grond van netwerkverkeer, springt over een gat.
Waarom de sprong van 3 naar 5 zo vaak wordt gemaakt¶
Omdat trap 3 en trap 5 in de beleving hetzelfde voelen. Als jouw locatie bij een bedrijf terechtkomt waarvan je nooit hebt gehoord, dan is dat voor jou hetzelfde als verkocht worden. Emotioneel klopt dat. Juridisch en bewijstechnisch niet, en het verschil is precies waar een woordvoerder in gaat zitten.
Er is nog een reden. In het advertentiemodel is doorverkoop vaak niet nodig, want het geld wordt met de toegang verdiend, niet met de overdracht. Een inkoopplatform hoeft jouw profiel niet te kopen om erop te kunnen bieden. Het krijgt de kenmerken meegestuurd in het biedverzoek, gratis, honderden keren per dag. Dat is geen verkoop. Het is erger, want het is structureel en het gaat naar iedereen die meedoet.
De werkregel is kort. Schrijf de trap op die je hebt gemeten, met het bewijs van die trap erbij, en zeg er expliciet bij welke trap je níét hebt gemeten. Dat laatste is geen zwakte in het stuk. Het is wat het stuk overeind houdt als er tegenwerping komt.
In de praktijk betekent dat vier zinnen die ik in bijna elk stuk terug laat komen:
Ik heb gemeten dat X werd verstuurd naar Y, op moment Z, in deze omstandigheden.
Ik heb niet gemeten wat Y daarmee doet.
Ik heb geen aanwijzing dat Y deze gegevens doorverkoopt, en ik beweer dat ook niet.
Wie dat wel wil weten, moet bij Y het verwerkingsregister opvragen, niet bij mij.
De trappen lopen niet gelijk op met het recht, en dat is een tweede valkuil.
Trap 1 en 2 zijn juridisch bijna altijd niets. Trap 3 is meestal het moment waarop de cookiewet (artikel 11.7a Telecommunicatiewet) en de AVG allebei gaan gelden: er wordt iets op je toestel geplaatst of uitgelezen, en er wordt een persoonsgegeven verwerkt. Trap 4 tilt de zaak naar gezamenlijke verwerkingsverantwoordelijkheid, want twee partijen bepalen samen doel en middelen. Trap 5 is een verstrekking aan een ontvanger, met alles wat daarbij hoort aan grondslag, informatieplicht en registerplicht.
Onder het woord cookie zitten minstens acht manieren om je terug te herkennen, en de helft daarvan is helemaal geen cookie. Eigen cookie, derde-partij-cookie, opslag in de browser, een merkteken in de cache, het reclamenummer van je telefoon, een vingerafdruk van je apparaat. Ze verschillen in wie hem kan lezen, hoe lang hij leeft, of je hem kunt wissen en of de cookiewet er grip op heeft. Hier staat de hele familie, op die vier assen.
Bij elk merkteken dat je terug kan herkennen, stel ik dezelfde vier vragen. Wie kan het lezen. Hoe lang leeft het. Kan de gebruiker het weg krijgen. Valt het onder de cookiewet. De antwoorden lopen zo ver uiteen dat het woord cookie er meer verbergt dan verduidelijkt.
Eigen cookie (first-party). Gezet door het domein dat je in de adresbalk ziet. Alleen dat domein leest hem terug. Leeft van een sessie tot jaren. Wissen kan. Onder de cookiewet alleen als hij niet strikt noodzakelijk is, en dat hangt af van wat hij doet, niet van wie hem zet. Dit is het merkteken waar de canon over gaat. Zie Cookies: functioneel versus niet-functioneel, met voorbeelden.
Derde-partij-cookie (third-party). Gezet door een ander domein dat via de pagina wordt aangeroepen. Dat domein leest hem terug op elke andere site waar het ook staat, en dat is het hele punt: zo ontstaat een spoor over sites heen. Wissen kan. Onder de cookiewet altijd toestemmingsplichtig. Dit is de techniek die de browsers aan het afknijpen zijn, en dat is precies waarom de rest van deze lijst bestaat.
Browseropslag (localStorage, sessionStorage, IndexedDB). Geen cookie, wel opslag op je toestel, met vaak meer ruimte en zonder vervaldatum. Wordt niet automatisch meegestuurd met elk verzoek, dus code moet hem uitlezen en meesturen. Wissen kan, maar niet met de knop waarmee mensen cookies wissen. Juridisch gelijkgesteld: artikel 11.7a gaat over het plaatsen en uitlezen van gegevens op randapparatuur, niet over het woord cookie.
Cache-merkteken (ETag, favicon-truc, HSTS-supercookie). Misbruik van geheugen dat de browser om technische redenen bijhoudt. Een server geeft elke bezoeker een uniek versienummer voor een plaatje mee. De browser stuurt dat versienummer bij een volgend bezoek terug om te vragen of het plaatje nog actueel is. Dat versienummer is dan een identifier. Leeft zolang de cache leeft. Wissen kan alleen door de cache te legen. Valt onder dezelfde bepaling, wordt zelden zo behandeld.
Installatienummer en sessienummer per app. Elke SDK genereert er zelf een. Ze zijn per app uniek en overleven een reset van het reclamenummer. Ze zijn onzichtbaar voor de gebruiker en er is geen enkele knop voor.
Vingerafdruk (fingerprint). Er wordt niets opgeslagen. Er wordt gemeten: hoe jouw apparaat een plaatje tekent, hoe de audio-stack klinkt, welke lettertypen er staan, hoe de sensoren reageren. Uit die combinatie komt een vrijwel unieke waarde. Leeft zolang je apparaat hetzelfde blijft. Wissen kan niet, want er is niets gewist te worden. En omdat er niets wordt geplaatst of uitgelezen in de zin van de bepaling, hebben de cookieregels er nauwelijks grip op. Zie Fingerprinting ontwijkt je weigering door niets op te slaan.
Netwerk- en gedragskenmerken. IP-adres, tijdzone, schermformaat, taalvoorkeur, typesnelheid, muisbeweging. Ieder voor zich zwak, samen sterk. Dit is de bodem waar alles op terugvalt als de rest wegvalt. Zie Het risico zit in de optelsom, niet in het losse veld.
| merkteken | wie leest | wis je hem | cookiewet |
|---|---|---|---|
| eigen cookie | het zichtbare domein | ja, makkelijk | ja, tenzij noodzakelijk |
| derde-partij-cookie | elke site waar hij staat | ja, makkelijk | ja, altijd |
| browseropslag | de code die hem zette | ja, moeilijker | ja |
| cache-merkteken | de server die hem gaf | alleen via cache legen | ja, in theorie |
| reclamenummer | elke app | resetten, niet wissen | apart regime |
| installatienummer | die ene app | nee | apart regime |
| vingerafdruk | iedereen die meet | nee | nauwelijks grip |
| netwerkkenmerken | iedereen | nee | nee |
Lees die tabel van boven naar beneden en je ziet de beweging van de afgelopen tien jaar. Regelgeving en browsers hebben de bovenste twee regels aangepakt. De industrie is naar beneden geschoven. Elke regel lager is minder zichtbaar, minder wisbaar en minder gereguleerd dan de regel erboven.
Dat is geen samenzwering. Het is wat er gebeurt als je één techniek reguleert in plaats van één doel.
De eerlijke naam voor de hele familie is herkenningsmiddel. Niet mooi, wel juist. Het legt de nadruk op wat er gebeurt (jij wordt herkend) in plaats van op waar het staat (een bestandje). En het maakt meteen duidelijk waarom je vingerafdruk in dezelfde lijst hoort als je cookie, terwijl de wet ze verschillend behandelt.
De woorden voor het meetgereedschap worden door elkaar gebruikt, terwijl ze verschillen in wat ze mogen, wat ze zien en wie ze kan aanzetten. Een pixel is een verzoek. Een tag is een stukje code. Een SDK is een meegeleverde bibliotheek met de rechten van de app zelf. Een tagmanager is een luik waardoor een marketeer na oplevering nieuwe code de pagina in schuift zonder dat er een ontwikkelaar aan te pas komt. Dat laatste is het gevaarlijkste van de vier en staat in geen enkele risicoanalyse.
Pixel. Een verzoek aan een extern adres, verpakt als het ophalen van een plaatje van één bij één, of tegenwoordig gewoon als een verzoek zonder plaatje. Het punt is niet het plaatje. Het punt is dat het ophalen zelf de boodschap is: het verzoek draagt in zijn url en zijn headers de gegevens die de ontvanger wil hebben. Wie de url ontleedt, ziet letterlijk wat er is verstuurd. Een pixel is dus het meest transparante meetmiddel dat er is, en juist daarom raakt hij uit de mode.
Tag. Een stukje JavaScript dat in de pagina draait en beslissingen kan nemen. Een tag kan het scherm uitlezen, het formulier volgen, wachten op een gebeurtenis en dan pas een verzoek versturen. Een pixel doet één ding op één moment. Een tag is een programma met de rechten van de pagina waarop hij staat, en die rechten zijn ruim: alles wat jij op die pagina ziet en typt, kan hij in principe ook zien.
SDK. Een bibliotheek die met een app wordt meegeleverd en die draait met de rechten van die app. Dat is het grote verschil met een tag. Heeft de app toegang tot je locatie, je contacten of je camera, dan heeft elke SDK in die app dat in beginsel ook. De ontwikkelaar heeft één regel in een configuratiebestand gezet en een compleet vreemd bedrijf binnen de rechtenring van zijn app gelaten. Zie Trackers hebben rollen, en die verwar je niet en Ook een schone app kan in de databrokerlijst staan.
Tagmanager. Geen meetmiddel maar een luik. Er staat één script op de pagina, van bijvoorbeeld Google Tag Manager, en dat script haalt bij het laden een configuratie op waarin staat welke andere scripts er nog meer geladen moeten worden. Die configuratie wordt beheerd in een webinterface, buiten de code van de site om, meestal door marketing en niet door ontwikkeling.
Waarom de tagmanager de gevaarlijkste van de vier is¶
Drie redenen, en ze stapelen.
De inhoud staat niet in de code. Een beveiligingsonderzoek, een code-review of een broncodescan van de site laat één regel zien: het tagmanager-script. Wat er via dat luik binnenkomt, staat op een server van de leverancier en verandert zonder dat er iets in de repository gebeurt. Wie de site gisteren heeft goedgekeurd, heeft niets gezegd over wat er vandaag laadt.
De beslisser is niet de bouwer. Degene die een nieuwe tag aanzet, is doorgaans een marketeer met een deadline. Degene die de consequenties overziet, is een ontwikkelaar of een functionaris gegevensbescherming die niet gevraagd wordt. Dit is het patroon dat ik in vrijwel elke zaak terugzie. Zie De bouwers en de beslissers weten vaak niet van elkaar.
Het is een ketenrisico met één schakel. Wie het tagmanager-account overneemt, kan op elke pagina van de site willekeurige code uitvoeren, inclusief de betaalpagina en het inlogformulier. Dat is geen theoretisch scenario, het is de standaardroute van een hele klasse aanvallen.
De praktische toets die daaruit volgt: vraag niet welke trackers er op de site staan. Vraag wie er toegang heeft tot de tagmanager, en wanneer die lijst voor het laatst is opgeschoond.
Er is een variant die geen van de vier is en die de andere vier onzichtbaar maakt. Bij server-side tagging stuurt de pagina alles naar één adres, meestal een subdomein van de site zelf. Die server verdeelt het vervolgens door naar de echte ontvangers. Op jouw toestel is er dan nog maar één bestemming te zien, en die ziet er eigen uit.
Dit is ook het punt waar mijn eigen gereedschap tegen zijn grens loopt, en ik zeg dat er liever bij dan dat iemand anders het opmerkt. Een browserscanner ziet de eerste server. Wat daarachter gebeurt, is een dossiervraag, geen meetvraag.
Als je schrijft dat er een tracker op een pagina staat, heb je nog niets gezegd over wie hem daar heeft gezet, wie hem kan aanzetten en wat hij mag zien. Een pixel van een analysebedrijf en een SDK van een locatiebroker zijn allebei een tracker en verschillen een orde van grootte in risico.
De formulering die wel werkt, benoemt drie dingen: wat voor gereedschap het is, met welke rechten het draait, en wie het kan wijzigen zonder een release. Dat laatste is de vraag die in geen enkele privacyverklaring wordt beantwoord.
gepubliceerdessayFingerprinting en identifiersverwant
Van losse nummers naar een identiteitsgrafiek
Losse herkenningsnummers zijn hinderlijk. Gekoppelde herkenningsnummers zijn een dossier. De koppelindustrie heeft daar een eigen woordenschat voor: cookie-sync, identity resolution, identiteitsgrafiek, deterministisch en probabilistisch matchen, gehashte e-mail, universele id. Dit is de laag waar het echte kwaad zit, en juist deze laag is met een browsermeting nauwelijks te zien.
Eén partij die weet dat bezoeker 4f2a gisteren ook langs was, weet weinig. Twintig partijen die weten dat hun eigen nummer voor die persoon hetzelfde nummer is, weten samen alles. De koppeling is de vermenigvuldiging in dit veld, en de industrie heeft er meer woorden voor dan voor de rest bij elkaar.
Cookie-sync (ook: ID-sync, match, pixel match). Partij A roept een adres van partij B aan en zet daarbij zijn eigen nummer voor jou in de url. B ziet dat verzoek, herkent jou aan zijn eigen cookie, en legt de twee nummers naast elkaar in een tabel. Vanaf dat moment kunnen A en B over dezelfde persoon praten zonder ooit een naam te noemen. Zie Cookie-sync laat losse partijen dezelfde persoon herkennen.
Identity resolution. Het vak van het samenvoegen zelf, als dienst verkocht. Een leverancier belooft dat hij jouw losse verschijningen (browser, telefoon, tablet, e-mailadres, klantnummer) tot één persoon terugbrengt. De marketingterm is een 360-graden klantbeeld.
Identiteitsgrafiek (identity graph, ID-graph). Het resultaat: een grafiek waarin knopen identifiers zijn en verbindingen zeggen dat twee identifiers dezelfde persoon zijn. Wie zo'n grafiek heeft, kan een nieuw nummer aan een bestaand dossier hangen zolang er één brug te vinden is.
Deterministisch matchen. Koppelen op een gedeeld, hard gegeven. Jij logt in met hetzelfde e-mailadres bij twee diensten, en beide sturen de versleutelde vorm daarvan naar dezelfde partij. De koppeling is dan zeker.
Probabilistisch matchen. Koppelen op waarschijnlijkheid. Zelfde IP-adres, zelfde tijdstippen, zelfde toesteltype, zelfde bewegingspatroon tussen wifi-netwerken. Geen zekerheid, wel bruikbaar op schaal. Dit is de techniek waarmee je huisgenoten aan elkaar worden geknoopt, en waarmee ze soms verkeerd aan elkaar worden geknoopt.
Gehashte e-mail (hashed email, HEM). Je e-mailadres door een eenrichtingsfunctie gehaald, zodat er een onleesbare reeks tekens overblijft. Wordt verkocht als privacyvriendelijk omdat het adres er niet meer in te lezen is. Dat is misleidend. Een hash van een e-mailadres is een perfecte sleutel: iedereen die hetzelfde adres heeft, rekent dezelfde hash uit, dus twee partijen kunnen zonder overleg vaststellen dat ze het over dezelfde persoon hebben. En omdat de verzameling bestaande e-mailadressen eindig en grotendeels bekend is, is terugrekenen voor wie er belang bij heeft geen serieuze horde. Een hash is hier geen anonimisering, het is een gedeelde naam in andere letters.
Universele id (UID2, RampID, ID5 en soortgelijken). De opvolgers die worden gebouwd voor de wereld na de derde-partij-cookie. Ze zetten precies de bovenstaande hash centraal: jij logt ergens in, je adres wordt omgezet in een gedeelde identifier, en die identifier reist mee door de hele advertentieketen. Verkocht als een verbetering, omdat er toestemming aan hangt en de identifier roteert.
Wat het werkelijk verandert: de sleutel gaat van iets dat aan je browser hangt (wisbaar, per apparaat, per site) naar iets dat aan jou hangt (niet wisbaar, over al je apparaten heen, over alle sites heen waar je inlogt). Dat is geen inperking van het volgen. Het is een verbetering ervan, met een toestemmingsvinkje erbij. Zie De privacyvriendelijke opvolger komt naast het oude tracken.
Onboarding. Offline gegevens (een klantenbestand, een spaarkaart, een aankoophistorie in de winkel) online koppelbaar maken, meestal via het gehashte e-mailadres of telefoonnummer. Dit is de brug tussen de winkelstraat en de advertentieveiling.
Wel: de sync-verzoeken zelf, als ze in de browser gebeuren. Twee nummers in één url is hard bewijs voor een uitwisseling.
Zo zag ik het op 18 juli 2026 bij xhamster. Eén identifier, xu, vertrekt in dezelfde beweging naar het advertentienetwerk TrafficStars en naar een tweede ontvanger, en een derde ontvanger in die keten draait op een server van de Russische hoster Selectel. Negen gedeelde-identifier-events, vier daarvan zonder enige toestemming, want er was helemaal geen banner om iets mee te weigeren. In hetzelfde verzoek gaat de oriëntatiekeuze mee en de volledige paginatitel. Dat is trap 4 uit de bewijsladder, live, in een gewone browser, en het is meteen het zeldzame geval waarin de koppeling nog aan de browserkant zichtbaar is.
Niet: wat er in de tabel aan de andere kant staat. Niet: hoe lang de koppeling bewaard blijft. Niet: of de grafiek ook naar je naam leidt. En steeds vaker helemaal niet, want de sync verhuist naar server-to-server verkeer, waar geen browser bij is. Zie Elke browsermeting is een ondergrens.
Dat is een oncomfortabele conclusie voor iemand die van metingen leeft: de laag met de grootste impact is de laag die het snelst buiten bereik van de meting beweegt. De eerlijke omgang daarmee is niet harder gissen, maar de grens benoemen en voor deze laag naar documenten gaan in plaats van naar verkeer. Verwerkingsregisters, contracten, productdocumentatie van de leverancier zelf.
De advertentieketen heeft negen rollen en je kent er twee
Tussen de site die je opent en het bedrijf dat de advertentie betaalt, zitten zeven partijen met een eigen naam, een eigen verdienmodel en een eigen kopie van jouw verzoek. Uitgever, advertentieserver, verkoopplatform, veiling, inkoopplatform, adverteerder, plus de doorverkopers en de verificatiediensten die niemand noemt. Wie de rollen niet kent, telt ze verkeerd op en publiceert een index die niet klopt.
Je opent een pagina. Binnen een halve seconde hebben zeven tot vijftien bedrijven jouw verzoek gezien. Dit zijn hun rollen, in volgorde.
1. Uitgever (publisher). De site of app die je opende. Hij verkoopt geen advertentie, hij verkoopt aandacht, en meestal weet hij zelf niet precies aan wie.
2. Advertentieserver (ad server). Beslist welke advertentie er in welk vakje komt. Bij grote uitgevers is dat Google Ad Manager, en die rol is een machtspositie op zich: dezelfde partij bedient hier de verkoop- en de inkoopkant.
3. Verkoopplatform (SSP, supply side platform). Zet de advertentieruimte van de uitgever in de markt. Voorbeelden die ik in Nederlandse apps telkens terugzie: PubMatic, Magnite, Index Exchange. Zie Onverwante apps sturen je profiel dezelfde veiling in.
4. Veiling (ad exchange). De marktplaats waar het biedverzoek wordt uitgezonden. In de praktijk lopen SSP en exchange in elkaar over; het onderscheid is vooral historisch.
5. Inkoopplatform (DSP, demand side platform). Koopt namens adverteerders. Krijgt het biedverzoek binnen met jouw kenmerken erin, kijkt in zijn eigen profielen of jij interessant bent, en biedt of biedt niet. Voorbeelden: The Trade Desk, Criteo, Xandr.
6. Adverteerder. Het bedrijf dat wil dat jij iets koopt. Staat het verst van jouw data af en krijgt er verhoudingsgewijs het minste van te zien.
7. Doorverkoper (reseller). Een tussenpartij die advertentieruimte van een ander doorverkoopt. Eén advertentieplek kan zo via drie of vier resellers tegelijk in de markt staan, waardoor dezelfde plek meerdere keren in de tellingen opduikt. Wie ze allemaal optelt als aparte ontvangers, publiceert een index die te hoog uitkomt. Zie Wie elke verkooproute optelt, bouwt een misleidend beeld.
8. Verificatie en meting (Moat, IAS, DoubleVerify). Controleren of de advertentie echt is getoond, of hij door een mens is gezien en of hij niet naast schadelijke inhoud stond. Ze staan nooit in het gesprek over privacy, terwijl ze wel elke vertoning meten en dus elke vertoning zien.
9. Identiteit en data (de vorige notitie). De partijen die de nummers aan elkaar knopen en de profielen leveren waarop het inkoopplatform zijn bod baseert. Zie Van losse nummers naar een identiteitsgrafiek.
OpenRTB. Het protocol waarin het biedverzoek is opgesteld. Openbaar gespecificeerd, dus je kunt de velden gewoon nalezen. Dat is het handigste aan dit hele veld: je hoeft niet te gissen wat er in een biedverzoek zit, het staat in de specificatie, en in de opname staat welke velden zijn ingevuld. Het veld device.ifa is het reclamenummer van je toestel. Zie Je hele toestelprofiel gaat in een keer de veiling in.
Bid request en bid response. Het verzoek gaat naar veel partijen, het antwoord komt van enkele. Dat asymmetrische deel is de kern van het privacyprobleem: de verliezers hebben jouw kenmerken ook gezien, en die zijn met veel meer.
Header bidding. Een techniek waarbij de pagina zelf, in de browser, meerdere veilingen tegelijk aanroept voordat de advertentieserver aan zet is. Voor de uitgever betekent het meer opbrengst. Voor jou betekent het dat je verzoek naar meer partijen gaat, en wel vanaf je eigen apparaat.
tmax. Het veld in het biedverzoek dat zegt hoeveel milliseconden een bieder mag nadenken. Jij wacht dat venster uit terwijl de pagina laadt. Het staat er letterlijk in.
ads.txt en sellers.json. Twee openbare bestanden waarmee de industrie fraude wil tegengaan. In ads.txt zet een uitgever wie zijn ruimte mag verkopen. In sellers.json zet een platform wie zijn verkopers zijn. Bedoeld tegen namaakvoorraad, in de praktijk voor een onderzoeker de beste openbare kaart van wie met wie zaken doet. Het is een van de weinige plekken waar de keten zichzelf documenteert.
De tweede is de aanname dat de winnaar de enige is die iets zag. Het omgekeerde is waar. De winnaar betaalt, de rest kijkt gratis mee. Dat is de zin die het hele model uitlegt, en hij komt zelden voorbij.
DMP, CDP, databroker en clean room: waar het profiel woont
Het verkeer is het zichtbare deel. Het profiel zelf ligt ergens opgeslagen, en de opslagplaatsen hebben namen die klinken als infrastructuur: klantdataplatform, datamanagementplatform, databroker, data clean room. Ze verschillen in wie de eigenaar is, of jouw naam eraan hangt en of er geld voor betaald wordt. De clean room is de nieuwste, wordt verkocht als privacyoplossing en is in de praktijk een koppelvlak met een keurmerk.
Het verkeer is de beweging. Er is ook een plek waar het profiel stilstaat, en de namen van die plekken klinken opzettelijk als infrastructuur.
CDP, klantdataplatform (customer data platform). Van de uitgever of het merk zelf. Verzamelt alles wat jij bij die ene organisatie doet: elke klik, elke bestelling, elke geopende e-mail, gekoppeld aan je klantnummer of e-mailadres. Dit is de eigen data van de organisatie, en juridisch de minst problematische opslag, mits er een grondslag onder ligt.
Wat hem toch riskant maakt, is dat hij bijna nooit als privacyrisico wordt gezien. Een CDP oogt niet als reclame, dus hij komt niet uit een cookie-audit. In een app die ik onderzocht bleek juist deze laag de eigenlijke gebeurtenis-ruggengraat, met alle gebeurtenissen naar Amerikaanse cloudregio's. Zie De echte dataruggengraat oogt niet als reclame.
DMP, datamanagementplatform. De advertentiekant. Slaat geen namen op maar identifiers met kenmerken eraan: dit nummer is waarschijnlijk een man tussen 35 en 45, met interesse in auto's en een hypotheek in beeld. Het DMP is gebouwd om die segmenten te delen met derden. Dat is zijn functie, niet zijn misbruik.
Databroker. Een bedrijf waarvan het product data over mensen is. Het verzamelt niet van jou maar koopt in bij anderen, verrijkt, en verkoopt door. Locatiebrokers zijn de bekendste soort: ze krijgen positiegegevens binnen via SDK's in gewone apps waar de gebruiker niets van weet. X-Mode (nu Outlogic, kreeg een verbod van de Amerikaanse FTC), Gravy en Venntel (leverden locatiedata aan Amerikaanse overheidsdiensten), OneAudience, Sense360. Zie De locatiedatahandel draait op een handvol vaste spelers.
Dit is de enige plaats in het lexicon waar het woord doorverkoop letterlijk klopt, en het is dan ook de plaats waar het bewijs uit documenten komt en niet uit metingen: FTC-dossiers, productpagina's, prijslijsten, journalistiekeaankopen.
Data clean room. De nieuwste, en de interessantste om te ontleden. Twee partijen willen hun klantbestanden vergelijken zonder ze aan elkaar te geven. Ze zetten beide hun data in een afgeschermde omgeving die alleen geaggregeerde antwoorden teruggeeft: hoeveel overlap, welke segmenten presteren. De ruwe data verlaat de kamer niet.
Verkocht als privacy enhancing technology. En technisch is het ook echt beter dan een bestand doormailen. Maar let op wat er niet verandert. Er wordt nog steeds op individueel niveau gekoppeld, alleen binnen de kamer. De koppelsleutel is nog steeds meestal je gehashte e-mailadres. En de uitkomst wordt gebruikt om jou persoonlijk te bereiken, want anders had niemand ervoor betaald. Een clean room verplaatst het koppelvlak naar een omgeving met een keurmerk. Zie De woorden waarmee tracking zich vermomt.
Wie is de eigenaar van het profiel, en wat is het verdienmodel.
CDP: de organisatie zelf is eigenaar, verdient aan haar eigen klanten.
DMP: de advertentiepartij is eigenaar, verdient aan het delen van segmenten.
Databroker: het profiel ís het product, verdient aan de overdracht.
Clean room: niemand is eigenaar van het geheel, verdient aan het koppelvlak.
Die vraag scheidt ze scherper dan welke technische beschrijving ook, en hij is voor een journalist of toezichthouder ook echt te beantwoorden: hij staat in de commerciële documentatie van de leverancier.
Weinig, en dat is het punt. Al deze opslag staat achter de eerste server. Een netwerkopname laat zien dat gebeurtenissen naar een verzameldomein gaan. Wat er in de opslag gebeurt, welke segmenten eruit komen en met wie ze worden gedeeld, staat in het verwerkingsregister, in het contract en in de productdocumentatie.
Verstrekken, delen en verkopen zijn juridisch drie dingen
Doorverkoop is de zwaarste beschuldiging in dit veld en tegelijk de slechtst onderbouwde. De AVG kent het woord verkoop niet eens; die kent verstrekking aan een ontvanger. De Californische wet kent wel verkoop, en definieert die zo breed dat een gewone advertentiecookie er al onder valt. Wie een Amerikaanse definitie in een Nederlands stuk gebruikt zonder het te zeggen, beweert iets anders dan hij denkt.
Zoek in de Algemene verordening gegevensbescherming naar verkoop en je vindt niets bruikbaars. De verordening werkt met andere begrippen, en dat is precies waarom het debat hier scheefloopt.
Verwerking. Elke handeling met persoonsgegevens. Verzamelen, opslaan, raadplegen, doorsturen, wissen. Het woord is expres zo breed dat vrijwel alles eronder valt.
Verstrekking aan een ontvanger. Gegevens gaan naar een andere partij. Betaling is irrelevant. Gratis weggeven is net zo goed een verstrekking als verkopen, en heeft dezelfde eisen: een grondslag, een vermelding in de informatie aan de betrokkene, een plek in het verwerkingsregister.
Verwerker. Een partij die uitsluitend in opdracht en volgens instructie verwerkt, zonder eigen doel. Een hostingpartij, een e-mailverzender. Er hoort een verwerkersovereenkomst bij.
Verwerkingsverantwoordelijke. De partij die doel en middelen bepaalt. Dit is de rol die aansprakelijk is.
Gezamenlijke verantwoordelijkheid (artikel 26). Twee partijen bepalen samen. Dit is de rol waar de advertentieketen bijna altijd in valt en die bijna nooit wordt ingevuld zoals het artikel eist.
Dit is de meest voorkomende juridische fout in dit veld, en organisaties maken hem te goeder trouw.
Ze denken: wij hebben een verwerkersovereenkomst met dat advertentiebedrijf, dus wij zijn gedekt. Maar een verwerker mag alleen doen wat de opdrachtgever zegt en heeft geen eigen doel. Een advertentiebedrijf dat de waarneming gebruikt om zijn eigen profielen te verrijken en om op andere sites advertenties te richten, heeft een eigen doel. Dan is het geen verwerker maar een zelfstandige of gezamenlijke verantwoordelijke, en dan is de overeenkomst het verkeerde papier.
De praktische toets: verrijkt de ontvanger zijn eigen model met wat hij van jouw bezoekers ziet? Dan is hij geen verwerker. Bij vrijwel elk advertentie- en identiteitsbedrijf is het antwoord ja, en het staat gewoon in hun eigen voorwaarden.
De Amerikaanse definitie, en waarom die verwarring geeft¶
De Californische privacywet (CCPA, uitgebreid door de CPRA) kent het woord verkoop wel, en definieert het als het beschikbaar stellen van persoonlijke informatie aan een derde tegen een geldelijke of andere tegenprestatie. Die laatste vier woorden doen het werk. Een advertentiecookie die jou volgt in ruil voor gratis advertentie-inkomsten valt daar al onder. Daarom staat er op Amerikaanse sites een knop met de tekst "Do not sell or share my personal information", ook bij bedrijven die nooit een factuur voor data hebben gestuurd.
Gevolg: als een Amerikaans bedrijf zegt dat het jouw data niet verkoopt, kan dat waar zijn in de Californische zin en tegelijk verhullen dat er tientallen partijen meekijken. En als een activist zegt dat een Nederlandse site jouw data verkoopt, gebruikt hij de Californische definitie in een Nederlandse context zonder dat te zeggen.
Wie beide gebruikt, moet er expliciet bij zetten welke hij bedoelt. Ik doe dat als volgt: verstrekking als het over de AVG gaat, doorverkoop alleen als er geld voor een dataset is betaald, en de Californische betekenis noem ik met de wet erbij.
Een voorbeeld uit mijn eigen meting van 18 juli 2026 op de vijf grootste pornosites. In de tabel bij dat artikel staat Pornhub op 0 gedeelde identifiers, terwijl er wel degelijk een client-ID naar Google Analytics gaat, samen met de oriëntatie-instelling van de sessie.
Dat is geen slordigheid maar de ladder in werking. De client-ID van een statistiekendienst is trap 3: er wordt een identifier verstrekt aan een ontvanger. Hij is geen trap 4, want er is geen tweede partij die met datzelfde nummer naar dezelfde persoon wijst. Bij xhamster is dat er wel: daar gaat hetzelfde nummer in dezelfde beweging naar twee partijen, en dat levert 9 gedeelde-identifier-events op, waarvan 4 zonder toestemming.
Wie die twee op één hoop gooit, krijgt een tabel waarin Pornhub en xhamster op elkaar lijken. Wie ze scheidt, ziet dat het twee verschillende problemen zijn met twee verschillende juridische routes. De strengere telling maakt het eigen cijfer lager en het stuk sterker.
Retargeting, lookalike en contextueel: drie manieren om je te bereiken
Aan de vraagkant staan drie modellen die volstrekt verschillende hoeveelheden data over jou nodig hebben. Contextueel kijkt naar de pagina en heeft niets over jou nodig. Retargeting kijkt naar wat jij eerder deed. Lookalike bouwt een model van mensen die op jou lijken en heeft daarvoor een profiel van jou én van duizenden anderen nodig. Het middelste model is het bekendste, het laatste het meest ingrijpende, en het eerste bewijst dat het ook zonder kan.
Aan het einde van de keten staat de vraag waarvoor dit allemaal gebeurt: hoe bepaalt iemand dat jij deze advertentie moet zien. Er zijn drie antwoorden, en ze verschillen radicaal in wat ze over jou nodig hebben.
Contextueel. De advertentie wordt gekozen op basis van de pagina, niet op basis van de bezoeker. Een artikel over fietsen krijgt een fietsadvertentie. Er is geen profiel nodig, geen cookie, geen identifier. Dit is hoe advertenties in kranten al honderd jaar werken.
Het is ook het model dat bewijst dat het anders kan. Wanneer een uitgever zegt dat hij zonder tracking geen inkomsten heeft, is het eerlijke antwoord: minder inkomsten per vertoning, niet geen inkomsten. Dat is een bedrijfsmatige afweging, geen technische noodzaak. Zie Een app kan volledig lokaal, zonder een enkele netwerkcall voor hetzelfde punt aan de app-kant.
Het scherpste tegenvoorbeeld dat ik heb gemeten komt uit een hoek waar niemand het zoekt. Op 18 juli 2026 bleken xnxx en xvideos, samen goed voor miljarden bezoeken per maand, drie externe partijen te hebben, nul advertentiecookies, nul gedeelde identifiers en geen enkele parameter over de bezoeker naar buiten.
De verklaring is niet dat ze aardig zijn. Ze zijn uitgesloten: de reguliere advertentieveilingen en merkadverteerders willen dit verkeer niet. Er is dus niemand om aan te verkopen, en dan blijkt een site van die omvang prima te draaien zonder één identifier te delen. Dat is geen pleidooi, het is een meting, en hij ontkracht de bewering dat het niet anders kan aan de hele bovenkant van het web.
Retargeting (remarketing). Je hebt iets bekeken en krijgt het daarna overal achterna. Vereist dat je herkend wordt op site A (waar je keek) en op site B (waar de advertentie staat). Dit is het model waar de derde-partij-cookie voor is uitgevonden, en het is het bekendste model omdat het het meest opvalt. Het is niet het meest ingrijpende.
Lookalike (vergelijkbare doelgroepen, similar audiences). Een adverteerder geeft een lijst van bestaande klanten. Het platform zoekt daarna mensen die op die klanten lijken. Om dat te kunnen, moet het platform van jou én van duizenden anderen genoeg weten om gelijkenis te berekenen. Dat is het meest datahongerige model van de drie, en het is voor de gebruiker het onzichtbaarst: jij hebt nooit iets bij die adverteerder gedaan.
Segment. Een emmer waar identifiers in zitten met een label erop: "in de markt voor een auto", "gezondheidsbewust", "jonge ouders". Segmenten worden verhandeld tussen platforms. De labels zijn zelden gecontroleerd en vaak fout, en dat is een eigen probleem: je kunt in een segment zitten dat nergens op slaat en daar toch de gevolgen van dragen.
Bijzondere categorieën. Segmenten die gezondheid, religie, politieke voorkeur, etniciteit of seksuele geaardheid raken, mogen onder de AVG in beginsel helemaal niet zonder uitdrukkelijke toestemming. In de praktijk worden ze afgeleid in plaats van gevraagd, en een afleiding heet dan een interesse in plaats van een gegeven. Dat verandert de juridische kwalificatie niet. Zie Advertentie-infrastructuur in een zorgjas is een bouwkeuze en Een weigering stopt de schermopname niet vanzelf.
Soms is het niet eens afgeleid maar letterlijk ingesteld. Op 18 juli 2026 stuurde Pornhub de oriëntatie-instelling van de sessie als vast gebruikerskenmerk naar Google Analytics, en xhamster stuurde dezelfde keuze naar zijn advertentienetwerk. Geen interesse-inschatting, geen afleiding uit gedrag: het veld dat de bezoeker zelf had gezet, in de adresregel. Dat valt onder artikel 9 AVG, en daar is toestemming voor nodig die uitdrukkelijk is. Bij xhamster was er geen banner om iets mee te weigeren.
Frequency capping. Bijhouden hoe vaak jij een advertentie al hebt gezien, zodat je hem niet twintig keer krijgt. Klinkt als een dienst aan de gebruiker en wordt als rechtvaardiging voor herkenning gebruikt. Het vereist inderdaad dat je herkend wordt, over sites heen.
Attributie. Vaststellen welke advertentie de aankoop heeft veroorzaakt. Dit is waar het geld op wordt afgerekend, en daarom is het de motor achter de identiteitskoppeling: zonder herkenning over apparaten en sites heen is er geen attributie, en zonder attributie durft niemand te betalen.
Conversie-API (server-side conversion tracking). Attributie waarbij de uitgever of adverteerder vanaf zijn eigen server meldt dat er een aankoop is gedaan, met het gehashte e-mailadres erbij. Geen browser, geen cookie, geen blokkade door een adblocker. Zie Server-side tagging verplaatst de tracking uit het zicht.
Waarom het middelste model de aandacht krijgt en het laatste het probleem is¶
Retargeting is opvallend en daarmee bespreekbaar. Iedereen kent het gevoel van die ene schoen die je blijft achtervolgen. Het is de reden dat mensen tracking herkennen, en het is het voorbeeld in elke krantenkop.
Lookalike is onzichtbaar en veel ingrijpender. Er is geen moment waarop jij iets deed. Er is alleen een model dat jou heeft ingedeeld op grond van gelijkenis met anderen. Je kunt het niet aan een handeling terugkoppelen, dus je kunt het ook niet betwisten. En de eigenschappen die het model gebruikt, weet niemand precies, ook de adverteerder niet.
De vraag die daaruit volgt is niet "wie volgt mij" maar "op grond waarvan ben ik ingedeeld, en kan ik dat corrigeren". Voor het tweede bestaat wel een recht (artikel 15 en 22 AVG) en in de praktijk vrijwel geen route.
Een deel van de vaktaal bestaat niet om iets te beschrijven maar om iets weg te schrijven. Geanonimiseerd, gepseudonimiseerd, niet-persoonsgebonden, first-party, eigen infrastructuur, essentieel, gerechtvaardigd belang, partner. Elk van die woorden verplaatst een verplichting zonder de techniek te veranderen. Dit is de lijst, met per woord wat het juridisch echt betekent en waaraan je ziet dat het verkeerd wordt gebruikt.
Er is een categorie vaktermen die niet bestaat om iets nauwkeurig te beschrijven, maar om iets ergens anders te laten landen. Ze zijn zelden een leugen. Ze zijn technisch waar en in hun gevolgen misleidend, en dat is een eigen categorie. Zie Technisch juiste uitspraken kunnen een verkeerde indruk wekken.
Hieronder de lijst, met per woord wat het echt betekent en waaraan je ziet dat het verkeerd wordt ingezet.
"Geanonimiseerd." Betekent onder de AVG: onomkeerbaar niet meer tot een persoon herleidbaar, ook niet met extra informatie, ook niet door iemand anders. Als dat waar is, valt de data buiten de AVG. Dat is een hoge lat, en hij wordt zelden gehaald.
Waaraan je ziet dat het niet klopt: er zit nog een identifier in. Elk nummer waarmee je dezelfde bezoeker morgen terugvindt, maakt de data pseudoniem, niet anoniem. Een dataset waarin per rij een advertentie-id staat, is niet geanonimiseerd, hoe vaak het er ook boven staat.
"Gepseudonimiseerd." Dit is wel eerlijk gebruikt in de meeste gevallen, maar mensen horen anoniem. Pseudonimisering is een beveiligingsmaatregel, geen ontsnapping. De AVG blijft volledig gelden.
"Niet-persoonsgebonden" of "wij verzamelen geen persoonlijke gegevens." Meestal bedoeld als: geen naam, geen adres, geen e-mail. Maar een identifier waarmee jij van een ander te onderscheiden bent, is een persoonsgegeven, en dat is vaste rechtspraak. Het reclamenummer van je telefoon is daar het schoolvoorbeeld van. Zie Het reclamenummer is de sleutel die anoniem persoonlijk maakt.
"First-party." Betekent officieel: van het domein dat je bezoekt. Wordt gebruikt om te suggereren dat er geen derde bij betrokken is. Maar een cookie kan first-party zijn en toch door een derde partij worden gezet en uitgelezen, namelijk als die derde onder een subdomein van de site draait. Dat is CNAME-cloaking, en het staat op 41,3 procent van de 1.718 gemeten Nederlandse overheidssites (scan van 14 juli 2026). Zie CNAME-cloaking vermomt een derde partij als eigen subdomein en CNAME-cloaking zit op vier op de tien overheidssites.
"Essentieel" of "strikt noodzakelijk." De uitzonderingsgrond in de cookiebepaling, en de meest opgerekte term in het veld. Strikt noodzakelijk betekent: zonder deze cookie werkt de dienst die de gebruiker zelf vroeg niet. Een winkelwagen, een inlogsessie, een taalkeuze, een load balancer. Statistiek is dat niet, hoe nuttig ook. Zie Cookies: functioneel versus niet-functioneel, met voorbeelden.
"Gerechtvaardigd belang." Een geldige AVG-grondslag, maar niet voor het plaatsen en uitlezen van cookies: daarvoor eist de cookiebepaling toestemming, punt. In de toestemmingsvensters die de industriestandaard TCF gebruikt, staan doelen die op gerechtvaardigd belang zijn gezet en waar je apart tegen moet bezwaar maken, achter een tweede tabblad. Dat is de reden dat weigeren zo vaak niets doet: je hebt de helft van de doelen niet geweigerd, want die stonden op een ander tabblad. Zie Weigeren doet op vier van de vijf sites niets en Geen weigerknop is geen keuze.
"De toestemmingsvlag staat goed." Het nieuwste en het geniepigste, want het is controleerbaar waar. In de moderne meetprotocollen reist er een signaal mee dat zegt of er toestemming is. Bij Google heet dat gcs en npa. Op Pornhub stond dat signaal op 18 juli 2026 keurig op geen toestemming en geen gepersonaliseerde advertenties, precies zoals het hoort.
En in datzelfde pakketje ging de oriëntatie-instelling van de sessie mee naar Google Analytics, als vast kenmerk van het gebruikersprofiel, plus een client-ID die tussen bezoeken blijft staan, plus de provider en de volledige paginatitel. In alle drie de toestemmingsstanden, ook na expliciet weigeren.
De vlag zegt aan de ontvanger wat hij niet mag doen. De vlag houdt het verzenden niet tegen. Dat is het verschil tussen weigeren en niet-verzonden-worden, en het is de reden dat een keurig ingerichte toestemmingsketen op papier klopt terwijl de data gewoon vertrekt. Zie Cookies weigeren scheelt echt, maar reken er niet blind op.
Bij elk van deze woorden stel ik dezelfde vraag: welke verplichting zou er gelden als dit woord er niet stond, en is die verplichting nu echt weg of alleen uit beeld.
Bij geanonimiseerd zou de hele AVG gelden. Bij first-party zou het een derde-partij-cookie zijn. Bij essentieel zou er toestemming moeten worden gevraagd. Bij gerechtvaardigd belang zou er een weigerknop moeten zijn die werkt.
In alle vier de gevallen is de techniek onveranderd en de verplichting verplaatst. Dat is wat deze woorden doen, en dat is waarom ze in dit lexicon een eigen notitie hebben in plaats van een voetnoot. Zie Papier versus code: de verklaring en de uitvoering.
Cookies: functioneel versus niet-functioneel, met voorbeelden
De wet vraagt geen toestemming voor cookies die strikt noodzakelijk zijn om een dienst te leveren die je zelf hebt gevraagd. Voor al het andere wel, vooraf. Het verschil tussen die twee is de hele cookiewet, en het wordt structureel verkeerd getrokken. Hier staat per soort cookie of hij zonder toestemming mag, met echte voorbeelden en de toets die je zelf kunt doen.
De cookiewet, artikel 11.7a van de Telecommunicatiewet, kent maar twee uitzonderingen op de toestemmingsplicht. Een cookie mag zonder toestemming als hij dient om communicatie over een netwerk uit te voeren, of als hij strikt noodzakelijk is om een dienst te leveren die de gebruiker zelf uitdrukkelijk heeft gevraagd.
Let op het woord strikt. Niet handig, niet gebruikelijk, niet nuttig voor de organisatie. Strikt noodzakelijk voor de dienst die de bezoeker vroeg. De toets is: valt de dienst om zonder deze cookie, vanuit het perspectief van de bezoeker?
Dat is de hele wet. Al het andere volgt daaruit. Toch wordt het structureel verkeerd getrokken, en het patroon is altijd hetzelfde: de organisatie bepaalt wat noodzakelijk is vanuit haar eigen bedrijfsvoering, niet vanuit de dienst die de bezoeker aanvroeg.
Letterlijk: wat ik aantrof voor de toestemmingsvraag¶
Hieronder staan de cookies die ik op Nederlandse overheidssites daadwerkelijk aantrof in de modus waarin de bezoeker niets deed. Geen klik, geen keuze, alleen de pagina openen. De aantallen komen uit de scan van 14 juli 2026 over 1.718 sites.
Dit mag zonder toestemming (functioneel):
JSESSIONID 48 sites sessie op een Java-server, houdt je ingelogd
ASP.NET_SessionId 22 sites idem op een .NET-server
PHPSESSID idem op PHP, de bekendste van de drie
Archiefsessid 32 sites sessie binnen een archiefomgeving
GUEST_LANGUAGE_ID 18 sites onthoudt je taalkeuze
COOKIE_SUPPORT 18 sites test of je browser cookies aanneemt
cookies_consent 17 sites onthoudt je eigen cookiekeuze
OptanonConsent idem, van OneTrust
De laatste twee verdienen toelichting, want ze zorgen voor verwarring. De cookie die jouw keuze onthoudt is zelf functioneel. Zou hij dat niet zijn, dan moest je bij elke pagina opnieuw kiezen, en dat is precies de dienst die je vroeg. Een toestemmingsmodule mag dus een cookie zetten. Wat hij niet mag, is naast die keuze-cookie ook nog telemetrie over jou wegsturen. Zie Je cookiebanner is zelf een tracker.
Dit mag niet zonder toestemming, en stond er toch:
stg_traffic_source_priority 730 sites Piwik PRO tag manager
stg_last_interaction 730 sites idem, legt je gedrag vast
stg_returning_visitor 730 sites idem, herkent je als terugkeerder
stg_externalReferrer 353 sites idem, legt vast waar je vandaan kwam
_ga 143 sites Google Analytics, jouw bezoeker-ID
_gid 51 sites Google Analytics, per dag
_gat 17 sites Google Analytics, snelheidsregeling
_pk_id / _pk_ses 18 sites Matomo of Piwik, bezoeker en sessie
VISITOR_INFO1_LIVE 20 sites YouTube, via een ingesloten video
YSC 20 sites YouTube, sessie
__Secure-YNID 20 sites YouTube, identificatie
__Secure-ROLLOUT_TOKEN 20 sites YouTube
VISITOR_PRIVACY_METADATA 20 sites YouTube, ironisch genoeg
Het woord stg_returning_visitor is de scherpste illustratie die er bestaat. Een cookie die letterlijk vastlegt dat jij hier eerder was, gezet voordat je iets kon kiezen, op 730 overheidssites.
En dit is het grijze gebied, met de redenering erbij:
__cf_bm 52 sites Cloudflare bot management
Cloudflare zet deze cookie om geautomatiseerd verkeer te onderscheiden van mensen. Het argument voor de uitzondering is dat de dienst zonder botbescherming omvalt. Het argument ertegen is dat de bezoeker geen botbescherming vroeg, maar een webpagina. Mijn eigen standpunt: als de cookie uitsluitend een kortlopend beveiligingsdoel dient, niet over sites heen leest en niet naar analytics gaat, is de uitzondering verdedigbaar. Kun je dat niet aantonen, dan is hij toestemmingsplichtig. Label dit als verdedigbaar, niet als vaststaand.
De hardnekkigste misvatting is dat analytics een eigen uitzondering heeft. Die bestaat niet in de wet. Wat wel bestond, is een handreiking van de Autoriteit Persoonsgegevens voor analytics-cookies die zo zijn ingericht dat de inbreuk verwaarloosbaar is. Die pagina is inmiddels van de site verdwenen en de toezichthouder heeft laten weten de norm nog verder in te vullen, dus ik noem de voorwaarden hier als historische lijn en niet als geldend recht. Ze luidden, cumulatief:
1. een verwerkersovereenkomst hebben met de leverancier;
2. het laatste octet van het IP-adres maskeren;
3. gegevensdeling met de leverancier voor eigen doeleinden uitzetten;
4. geen cookies van derden gebruiken die de leverancier over sites heen kan koppelen;
5. de bezoeker hierover informeren in je privacyverklaring.
Als een van deze vijf ontbreekt, is je analytics gewoon toestemmingsplichtig. In mijn metingen is punt 3 het vaakst het struikelblok, en punt 4 daarna: zodra je Google Analytics via de standaardconfiguratie draait, staat gegevensdeling aan en gaat het naar een partij die het over duizenden sites kan aan elkaar knopen.
Zelf gehoste analytics, Matomo of Piwik PRO op je eigen domein, komt veel dichter bij de uitzondering. Maar zelf gehost is geen vrijbrief, en juist dat maakt het het scherpste voorbeeld in dit hele stuk.
Waarom Piwik het beste voorbeeld is van goede bedoelingen¶
De Nederlandse overheid heeft Piwik PRO breed uitgerold als vervanger van Google Analytics. De redenering erachter is verdedigbaar en zelfs prijzenswaardig: geen Amerikaanse partij, geen doorgifte buiten Europa, gegevens onder eigen beheer, en een leverancier die je contractueel kunt binden. Dat is precies wat je wilt dat een overheid doet.
Toen ik het mat, vond ik op 730 van de gemeten sites deze cookies staan voordat de bezoeker iets had gekozen:
Die stg_-cookies horen bij de tagbeheerder van Piwik PRO, en ze leggen gedrag vast. Ze stonden er voordat er iets te kiezen viel. Op de sites waar rijksoverheid.nl als partij optrad, ging het om 668 van de 669. Zie De rijksbrede analytics staat op 668 sites voor toestemming.
De intentie was soevereiniteit. Het effect is dat er nog steeds gedrag wordt vastgelegd voordat iemand ja heeft gezegd, alleen nu op een Europese server.
Dat is geen kleinigheid, want het juridische probleem verandert er niet door. Artikel 11.7a vraagt niet waar de server staat. Het vraagt of er iets is opgeslagen of gelezen op de apparatuur van de gebruiker zonder toestemming. Een Belgische server met een Nederlandse verwerkersovereenkomst maakt dat niet anders.
En het is precies daarom een goed voorbeeld. Er is hier niemand aan te wijzen die het slecht bedoelde. Iemand koos een privacyvriendelijker pakket, iemand anders zette de tagbeheerder standaard aan, en niemand controleerde daarna wat er in de nulmeting gebeurt. De keuze was goed, de uitvoering niet.
Wat je dan wel doet. De reparatie is niet het pakket vervangen. Het is de tagbeheerder zo configureren dat hij zonder toestemmingsvlag niets uitvoert, en dat daarna zelf natrekken in een schoon browserprofiel. Dat is dezelfde toets als hieronder, en hij kost vijf minuten.
Dit is het antwoord dat ik het vaakst terugkrijg, en het is technisch juist. Ja, functionele cookies mogen zonder toestemming. Daar gaat de discussie ook niet over.
De discussie gaat over wie bepaalt wat functioneel is. In de praktijk plakt de organisatie dat label er zelf op, en de toets verschuift dan ongemerkt van "valt de dienst om zonder deze cookie, gezien vanuit de bezoeker" naar "hebben wij hier een reden voor". Dat zijn twee verschillende vragen, en alleen de eerste staat in de wet.
Een paar voorbeelden van die verschuiving, allemaal aangetroffen:
"onze analytics is functioneel, want we moeten weten of de site werkt"
→ de bezoeker vroeg een pagina, geen meting van zichzelf
"onze A/B-test is functioneel, want anders kunnen we niet verbeteren"
→ verbeteren is jouw belang, geen dienst die hij aanvroeg
"de tagbeheerder is functioneel, want zonder hem laadt er niets"
→ dan heb je je site zo gebouwd dat een meetinstrument
onmisbaar is geworden, en dat is een keuze
Hier zit het patroon waar het mij werkelijk om gaat. Wie bij elke keuze vraagt "mag dit nog net", gebruikt de wet als plafond. Dat is precies omgekeerd. De wet beschrijft waar het onaanvaardbaar wordt, en dat is de bodem van wat je kunt doen.
Er zijn twee vragen, en ze zijn allebei geldig:
1. Mag dit? Een juridische vraag met een juridisch antwoord.
2. Moet ik dit willen? Een vraag over wat je aan een ander doet.
Wie alleen de eerste stelt, komt onvermijdelijk uit bij de mazen. Niet omdat hij een slecht mens is, maar omdat de vraag zelf naar de rand leidt. Als "mag het" je enige toets is, dan zoek je per definitie de grens op.
En dat is ook de reden dat de regels steeds strenger worden. Elke maas die stelselmatig wordt gebruikt, wordt uiteindelijk dichtgetimmerd, en dan geldt de nieuwe regel ook voor iedereen die hem nooit nodig had.
Ik gebruik zelf twee vragen, en ze werken beter dan een juridische analyse.
De uitlegtoets. Zou je in de banner in gewone taal kunnen opschrijven wat je doet, zonder dat het gek klinkt? "Wij onthouden je taalkeuze" is prima. "Wij leggen vast dat je hier eerder was, voordat je iets mocht kiezen, zodat wij ons bereik kunnen rapporteren" is een zin die niemand durft op te schrijven. Dat is geen toeval.
De omkeertoets. Zou je het acceptabel vinden als het jou overkwam op een site waar je niet omheen kunt? Bij een overheidsloket, een zorgportaal, een schoolomgeving? Als het antwoord nee is, heb je je antwoord.
Geen van beide is een juridisch criterium. Allebei voorspellen ze verrassend goed wat een toezichthouder ervan vindt.
De AVG kent een verantwoordingsplicht. Je moet kunnen aantonen dat je het goed doet, en dat is een actieve verplichting. Het is niet genoeg om achteraf een verklaring te hebben waarom het mocht.
Dat onderscheid is scherper dan het lijkt:
GOEDPRATEN achteraf een reden zoeken waarom het toch mag
VERANTWOORDEN vooraf vastleggen waarom je het doet, wat je hebt
afgewogen, en hoe je controleert dat het klopt
Wie goedpraat, heeft een argument. Wie verantwoordt, heeft een dossier. Het verschil merk je pas als iemand doorvraagt, en dan is het te laat om het alsnog te maken.
Voor de duidelijkheid: dit is mijn opvatting en geen meting. Ik label het als gedachte. Wat wel gemeten is, staat hierboven: op de sites waar men het label functioneel het ruimst opvatte, stonden de meeste cookies vóór de vraag.
Dit is de checklist die ik zelf afloop, in deze volgorde, omdat elke stap goedkoper is dan de volgende.
Stap 1. Tel wat er laadt voordat je iets klikt. Open de ontwikkelaarstools, tabblad netwerk, laad de pagina, doe niets. Alles wat je daar ziet naar een ander domein dan je eigen, is verdacht tot het tegendeel blijkt. Sla het op als HAR-bestand zodat je het later kunt narekenen. Zie Netwerkverkeer lezen via HAR-files.
Stap 2. Haal je lettertypen, kaarten en scripts van je eigen server. Dit is de grootste bron van pre-consent verkeer op Nederlandse overheidssites, en de makkelijkste te repareren. Zie Wat je van een CDN haalt, laadt voor je banner.
Stap 3. Vervang ingesloten video door een facade. Een YouTube-embed zet vijf cookies voordat iemand op play drukt. Een statische afbeelding met een afspeelknop die de echte speler pas na de klik laadt, kost je twintig regels code. Het youtube-nocookie.com-domein helpt, maar het is geen volledige oplossing: het stelt het zetten van cookies uit tot de klik, en dat is precies wat je wilt, maar controleer het zelf per implementatie.
Stap 4. Zet je tag manager op weigeren als startstand. De meeste tag managers laden hun eigen container voordat de toestemmingsstatus bekend is. Dat is een instelling, geen wet van de natuur. Configureer de container zo dat er zonder expliciete toestemmingsvlag niets vuurt.
Stap 5. Test je weigerknop echt. Klik weigeren, herlaad, kijk opnieuw in het netwerktabblad. Op vier van de vijf gemeten sites was er geen verschil. Zie Weigeren doet op vier van de vijf sites niets.
Stap 6. Controleer je DNS op verhulde derden. Een subdomein van jezelf dat via een CNAME naar een tracker wijst, telt juridisch als een derde partij, maar gedraagt zich technisch als eigen verkeer. Zie CNAME-cloaking zit op vier op de tien overheidssites.
Niet: een toestemmingsmodule kopen en denken dat je klaar bent. De module is een vraag, niet een slot. In mijn metingen laadde bij twee van de gemeten modules op elke onderzochte site al iets voordat de vraag beantwoord was.
Niet: gegevens verzamelen omdat het kan. Elk veld dat je verzamelt is een veld dat kan lekken, dat je moet verantwoorden en dat je moet bewaren binnen een termijn. Wat je niet bewaart, kan niet lekken.
Niet: de privacyverklaring laten schrijven door iemand die de code niet heeft gezien. Het gat tussen de verklaring en de uitvoering is de meest voorkomende bevinding in mijn werk. Zie Papier versus code: de verklaring en de uitvoering.
Niet: aannemen dat een keurmerk of een gerenommeerde leverancier je vrijwaart. Ik heb de partijen gemeten die privacy keuren, en ze zakten zelf voor de toets.
1. Open een privevenster, ga naar je site, doe niets.
2. Ontwikkelaarstools, tabblad Application of Opslag, kijk onder Cookies.
3. Staat er iets anders dan een sessie-, taal- of keuzecookie? Dan heb je een probleem.
4. Klik weigeren, herlaad, kijk opnieuw.
5. Is de lijst gelijk gebleven? Dan heb je een groter probleem, want dan is je weigerknop een decorstuk.
Dit kost minder tijd dan het lezen van je eigen cookieverklaring, en het levert bewijs op in plaats van een indruk.
Bij gedrag telt het effect, bij de persoon de intentie
Vrijwel niemand die ik meet wilde gegevens lekken. De bouwer wilde een mooi lettertype, de gemeente wilde voorleessoftware, en het effect was alsnog dat er gegevens vertrokken voordat de bezoeker iets kon kiezen. Voor het beoordelen van dat gedrag telt alleen het effect, want dat is wat de burger overkomt. Voor het beoordelen van de organisatie erachter telt de intentie wel degelijk mee. Wie die twee door elkaar haalt, straft goedwillenden te hard en pleit kwaadwillenden te makkelijk vrij.
De grootste bron van verkeer vóór de toestemmingsvraag op Nederlandse overheidssites is een lettertype, een kaartje of een icoonpakket van een extern adres. Google Fonts, Google Maps, Adobe Typekit, jsDelivr en Cloudflare laadden in 97 tot 100 procent van de gevallen al voordat de bezoeker iets had geklikt. Dat staat in mijn scan van 14 juli 2026 over 1.718 overheidssites, drie consent-modi per site. Zie Wat je van een CDN haalt, laadt voor je banner.
Vraag de bouwer waarom dat adres erin staat en je krijgt zelden een verhaal over data. Je krijgt een verhaal over typografie. Het lettertype moest op elk apparaat hetzelfde ogen, het CDN was sneller dan de eigen server, en de documentatie zei niets verontrustends. Er is geen moment geweest waarop iemand besloot: laat de browser van de bezoeker eerst een Amerikaans adres aanroepen.
Hetzelfde geldt voor de hulpmiddelen. Voorleessoftware, feedbackknoppen en webarchivering worden ingekocht om de site beter te maken. ReadSpeaker laadde vóór de toestemmingsvraag op 41 van 41 sites, Mopinion op 25 van 26, en de webarchiefdienst sitearchief.nl draagt zelf Google Analytics mee op 33 sites. Zie De toegankelijkheidstool en de feedbackwidget lekken ook. De inkoopreden was toegankelijkheid. Het effect is een doorgifte die de bezoeker niet zag aankomen.
Wat de burger overkomt, staat los van wat iemand bedoelde¶
Voor de bezoeker maakt de bedoeling geen verschil. Zijn IP-adres, zijn browserversie en de pagina die hij opende vertrekken op hetzelfde moment, met dezelfde bestemming, of de bouwer nu aan typografie dacht of aan een advertentiemarkt. Het effect is de enige laag die de burger raakt. Alles daarboven speelt zich af in een gebouw waar hij nooit komt.
De wet volgt die logica. Artikel 11.7a van de Telecommunicatiewet vraagt toestemming voor het lezen en schrijven van gegevens op een apparaat, en die vraag kent geen uitzondering voor goede bedoelingen. De AVG legt de verantwoordelijkheid bij de partij die doel en middelen bepaalt. Of de twee helften van die organisatie ooit met elkaar spraken, is een intern probleem dat de aansprakelijkheid niet verplaatst. Zie De bouwers en de beslissers weten vaak niet van elkaar.
Daarom meet ik gedrag en laat ik motieven buiten de meting. Ik leg vast welke host werd aangeroepen, op welk moment, in welke consent-modus, en met welke lading. Dat is toetsbaar en na te rekenen. Wat iemand wilde, kan ik niet meten, en een oordeel dat op een onmeetbare aanname rust, is geen bevinding. Zie Label elke bevinding op bewijsniveau en Gemeten is niet bewezen.
En toch weiger ik te zeggen dat de bedoeling niets uitmaakt. Ze maakt niets uit voor de vraag of er een schending is. Ze maakt alles uit voor de vraag wie ik voor me heb.
Twee organisaties kunnen precies dezelfde meting opleveren. De ene liet een SDK staan die er per ongeluk in kwam en die niemand ooit heeft opgemerkt. De andere heeft de tracking bewust verplaatst zodat hij minder opvalt, bijvoorbeeld via een subdomein van de site zelf dat in werkelijkheid naar een derde wijst. Op 710 van 1.718 gemeten overheidssites loopt zulk verkeer. Zie CNAME-cloaking zit op vier op de tien overheidssites. Het effect voor de bezoeker is in beide gevallen hetzelfde. Wat de organisatie is, verschilt.
Dat verschil heeft praktische gevolgen. Bij de eerste organisatie is één mail vaak genoeg. Bij de tweede heeft een mail weinig zin en hoort de bevinding openbaar, zodat er een prikkel ontstaat die van buiten komt. Dezelfde meting, twee routes. De meting bepaalt dat er iets fout is. De intentie bepaalt wat er nodig is om het opgelost te krijgen.
Wat er misgaat als je de goedwillende als dader behandelt¶
Verwar je effect met intentie ten nadele van de gemeten partij, dan behandel je een bouwer die een lettertype ophaalde als iemand die de burger wilde verhandelen. Dat is feitelijk onjuist en het is tactisch dom.
Het is tactisch dom omdat je de enige partij afstoot die het kan repareren. Een CDN-verwijzing is de goedkoopste te repareren overtreding die er bestaat. Je haalt het bestand binnen, je zet het op je eigen server, klaar. Wie die reparatie wil, heeft een bouwer nodig die meeleest. Een bouwer die zich beschuldigd voelt, leest niet mee. Hij haalt er een jurist bij, en dan verdwijnt de reparatie achter een correspondentie die maanden duurt.
Het is ook oneerlijk tegenover het patroon zelf. Als ik elk gemeten adres presenteer als opzet, dan verdwijnt precies het inzicht dat mijn werk oplevert: dat de meeste schade ontstaat door een optelsom van kleine, op zichzelf redelijke beslissingen. Niemand koos het eindresultaat. Iedereen koos een stap. Dat is een ander probleem dan kwade opzet, en het vraagt een andere oplossing.
En het beschadigt mijn eigen positie. Wie te hard aanpakt, krijgt op enig moment ongelijk, en dan telt de hele reeks metingen niet meer mee. Ik meet organisaties omdat ik wil weten wat het systeem de burger kost. De site die ik open is daarin een meetpunt. Zie Mijn onderzoek gaat niet over jouw bedrijf.
Wat er misgaat als de goede bedoeling het effect wegpoetst¶
De andere fout is groter en komt vaker voor. Een organisatie legt uit wat ze bedoelde, en het gesprek over wat er gebeurde stopt. Wij zijn een publieke dienst. Wij verkopen niets. Wij hebben een verwerkersovereenkomst. Allemaal waar, en geen van drieën verandert het aan de bytes die vertrokken.
De meest hardnekkige versie is die van de partij die privacy verkoopt. Ik legde in de Nationale Privacy Index negen keurmerk-, certificerings- en adviespartijen langs dezelfde meetlat, gemeten op 1 juni 2026. Kiwa plaatste 4 trackingcookies vóór de banner en hield na weigeren 13 trackers over, in totaal 42 tracker-ID's. DNV plaatste een nieuwe cookie na weigeren, grondslagloos, via CNAME-cloaking op sgtm.dnv.com, met 31 tracker-ID's. Zie De partijen die privacy keuren, zakken zelf voor de toets. Deze partijen bedoelen het aantoonbaar goed, want ze hebben er hun bedrijfsmodel van gemaakt. De meting staat er los van.
De derde versie is de gevaarlijkste, want ze klopt technisch. Iemand zegt iets dat waar is en wekt daarmee een indruk die onjuist is. Die categorie hoort apart benoemd te worden, los van liegen en verzwijgen. Zie Technisch juiste uitspraken kunnen een verkeerde indruk wekken. Een goede bedoeling is uitstekend materiaal voor die derde categorie, omdat ze oprecht is en tegelijk niets bewijst over de uitvoering.
Praktisch betekent de scheiding drie dingen in de manier waarop ik een bevinding breng.
Ik schrijf over het gedrag van het systeem en ik laat de persoon erbuiten. "Deze host laadde in de modus waarin de bezoeker niets deed" is toetsbaar. "Jullie geven niet om privacy" is een oordeel over mensen dat ik niet kan meten en dat het gesprek onmiddellijk sluit.
Ik geef de goede bedoeling hardop terug, en ik zet er het effect naast. Dat is geen beleefdheidsfiguur. Het is de eerlijkste beschrijving die ik heb: het lettertype was een bouwkeuze, de voorleessoftware was een toegankelijkheidskeuze, en beide leverden een doorgifte op vóór het keuzemoment. Wie zijn eigen motief herkent in mijn tekst, leest verder. Wie er een aanklacht in leest, stopt bij de eerste alinea.
Ik lever het bewijs erbij, altijd, met het bewijsniveau erop, zodat het oordeel bij de data ligt. En ik pas dezelfde meetlat toe op de overheid en op een app, zodat de scheiding tussen effect en intentie niet stiekem een scheiding tussen sympathieke en onsympathieke partijen wordt. Zie Dezelfde meetlat voor de overheid en de app in je broekzak.
De scheiding houdt op zodra de bevinding op tafel ligt. Vanaf dat moment is onwetendheid geen verklaring meer, want de organisatie weet het nu. Wat er dan gebeurt, is wél een uitspraak over de organisatie zelf, en die uitspraak mag ik doen.
Het kan goed gaan. De Belastingdienst zette de tracking op 6 juni uit, geverifieerd, deed op 12 juni uit eigen beweging een melding bij de Autoriteit Persoonsgegevens, en de staatssecretaris erkende dat het gebruik van Adobe Analytics niet in lijn was met de ePrivacy-regels en de AVG. Zie Een grote organisatie kan een fout erkennen en zichzelf melden. Precies hetzelfde werk krijgt bij een andere organisatie tegengas en juridische druk. Zie Dezelfde melding krijgt tegenovergestelde reacties. Het verschil zit in hoe een organisatie naar kritiek kijkt, en dat is haar eigen keuze.
Er is ook een tegenwerping die ik serieus neem. Als je effect en intentie streng scheidt, waarom zou een organisatie dan nog haar best doen? Het antwoord is dat de goede bedoeling niet verdwijnt uit mijn oordeel. Ze verhuist naar de plek waar ze thuishoort: naar hoe ik de organisatie behandel, hoeveel tijd ik geef, en of ik eerst mail of meteen publiceer. Die drie dingen zijn voor een organisatie het verschil tussen een rustige middag en een nieuwsbericht.
Dit is een gedachte en geen bevinding. Ik kan meten wat een site doet. Ik kan niet meten wat iemand wilde, en mijn inschatting van iemands intentie berust op gesprekken, op reactiepatronen en op hoe een keten technisch in elkaar zit. Dat is zwakker bewijs dan een HAR-bestand, en ik behandel het ook zo. De meting draagt het oordeel over het gedrag. De rest is mijn lezing van de mensen erachter, en die zet ik er als lezing bij.
Een bevinding over eigen data landt eerst als emotie
Wie een bevinding over zijn eigen gegevens onder ogen krijgt, weegt zelden eerst de inhoud. Ik zie ontkenning, schaamte, woede op de verkeerde partij en berusting, en soms een reactie die veel groter is dan de technische ernst rechtvaardigt. Dat is menselijk en het is bruikbaar om vooraf te weten. Berusting is daarbij het gevaarlijkste antwoord, want die verandert een schending in een gegeven waar niemand meer iets aan doet.
Als ik iemand een bevinding over zijn eigen gegevens voorleg, komt er vrijwel nooit eerst een vraag over de meting. Er komt een reactie, en het zijn er steeds dezelfde vijf: ontkenning, schaamte, woede op een partij die er weinig aan kan doen, berusting, en soms een uitbarsting die veel groter is dan de technische ernst.
Dat is geen tekortkoming van de mensen die ik spreek. Data voelt persoonlijk, en dat maakt het gesprek erover geladen. Het gaat over je huis, je lichaam, je kind. Wie hoort dat zijn database traag is, haalt zijn schouders op. Wie hoort dat zijn locatie op een advertentieveiling is aangeboden, voelt iets in zijn maag. Zie Mensen nemen hun data heel persoonlijk.
Bewijsniveau hierbij: dit is een patroon dat ik uit gesprekken afleid. Ik heb reacties niet geteld en ik heb ze niet gecodeerd. Het is een gedachte en geen bevinding. Ik zie het vaak genoeg terugkomen om het serieus te nemen en er mijn werkwijze op aan te passen.
De eerste reactie is bijna altijd twijfel aan de meting. Dat kan niet kloppen. Dat zal een instelling van mijn browser zijn. Dat is vast oud. Ik neem die reactie niet kwalijk, want ze is rationeel: als de meting fout is, hoeft er niets te veranderen, en dat is de goedkoopste uitweg die er bestaat.
Ontkenning is ook de reactie waar ik het meest aan heb. Ze is het enige antwoord uit de vijf dat zich laat oplossen met bewijs. Daarom lever ik het bewijs standaard mee, met een hash over elk bewijsstuk zodat een tegenpartij het kan narekenen. Zie Hoe mijn scanner werkt, van bezoek tot bewijsstuk en hang je bewijs aan de ruwe meting niet aan je eigen analyse. Wie na de eerste schrik de opname zelf openslaat, komt vaak op een ander punt uit dan waar hij begon.
Er zit een valkuil in. De ontkenning heeft soms gelijk. Een naam in de code bewijst niet dat er een gegeven stroomt, en aanwezig is iets anders dan afgevuurd. Zie Een naam in de code is nog geen tracker en in de code gevonden is niet hetzelfde als live gemeten. Ik behandel elke tegenspraak daarom als een reden om te controleren.
De tweede reactie is stiller en komt vaker voor bij burgers dan bij organisaties. Iemand hoort wat een app over hem doorgeeft en voelt zich betrapt op zijn eigen keuze, terwijl de app zelf buiten schot blijft. Ik had dit moeten weten. Ik heb dat zelf geïnstalleerd. Ik heb op akkoord geklikt.
Die schaamte is misplaatst en ze is goed te verklaren. In cyclus-apps voeren mensen het intiemste in dat er is: gezondheid, stemming, seksleven. Uit de analyse van drie populaire apps bleek dat de ene het sober en binnen Europa houdt, de andere een privacylaag over een fundament van advertentie- en analytics-netwerken legt, en de derde een complete Russische laag droeg voor analytics, login en betalingen. Zie Mensen voeren hun intiemste gegevens in zonder de risico's te beseffen. Niets daarvan stond op het scherm dat de gebruiker zag.
Ik zeg dat dan ook zo. De verantwoordelijkheid ligt bij de partij die doel en middelen bepaalt, en dat is de uitgever van de app. Zolang we het framen als een persoonlijke keuze, ontsnapt precies de partij die aan de knoppen zit. Schaamte verlamt, en een verlamde gebruiker doet niets. Iemand die begrijpt dat het hem is aangedaan, zoekt een alternatief of dient een klacht in.
De derde reactie is boosheid, en die gaat vrijwel nooit naar de partij die de datastroom in gang zette. Ze gaat naar de overheid in het algemeen, naar Google, naar "ze", of naar mij omdat ik het kwam vertellen.
Dat komt doordat de echte ontvanger onzichtbaar is. Een gemiddelde overheidssite spreekt 3,2 externe partijen aan, de mediaan is 2, en de staart loopt door tot 38 op een enkele site. Zie De ontvangers die in geen enkel verwerkingsregister staan. Die namen zeggen een burger niets. Hij kan zijn woede nergens aan ophangen, dus hangt hij hem aan het dichtstbijzijnde herkenbare gezicht.
Het is precies het mechanisme waardoor er over dit grondrecht geen publieke verontwaardiging ontstaat. Raakt iemand de vrijheid van meningsuiting aan, dan staat het land op zijn kop. Bij tracking ontbreekt elk mechanisme dat woede opwekt: er is geen dader met een naam, geen moment waarop het gebeurde, en geen zichtbare schade. Zie Waarom niemand boos wordt om dit grondrecht. De woede die er wel is, zoekt daarom een verkeerd doelwit, en verpuft daar.
Mijn werk is dan om het doelwit terug te geven. Ik noem de ontvanger, het moment en de lading. Bij de Belastingdienst kon ik zeggen welke host het was, welk veld erin zat en hoe lang het herkenningsnummer bewaard bleef: een ECID van 38 cijfers in de cookie s_ecid, met een levensduur van twee jaar. Zie Achter je DigiD loopt de tracking gewoon door. Boosheid met een adres erop is bruikbaar.
Waarom een reactie soms veel groter is dan de bevinding¶
Soms krijg ik een reactie die in geen verhouding staat tot wat ik gemeten heb. Een enkele analytics-cookie, en iemand is dagenlang van slag. Dat is makkelijk weg te zetten als overdreven. Ik denk dat het iets anders is.
De emotie wordt sterker naarmate iemand zich eigenaar voelt van wat er gemeten wordt. Bij een bouwer is dat zijn werk. Bij een burger is het zijn lichaam of zijn gezin. Hetzelfde feit levert dan verschillende temperaturen op, en het verschil is hoeveel van de eigen identiteit erin zit.
Daar komt de onomkeerbaarheid bovenop. Een softwarefout raakt de werking van een dienst en is op te lossen. Wat naar buiten is gegaan, komt niet terug. Je kunt de tracker uitzetten voor de volgende keer. Dat helpt vooruit en het herstelt niets. Mensen voelen dat verschil aan, en die intuïtie klopt met hoe de techniek werkt.
En er is de optelsom. Een los gegeven lijkt onschuldig: een locatie, een tijdstip, een zoekterm. Bij elkaar worden het patronen die je zelf niet kent. Zie Het risico zit in de optelsom, niet in het losse veld. Wie dat eenmaal doorheeft, reageert op het geheel terwijl ik hem één cookie liet zien. De reactie is dan proportioneel aan het echte probleem en disproportioneel aan mijn voorbeeld. Ik reken dat niemand aan.
De vierde reactie klinkt het kalmst en is de enige die ik echt vervelend vind. Ze weten toch alles al. Het is te laat. Daar is niets meer aan te doen.
Berusting is gevaarlijk om drie redenen. Ze is feitelijk onjuist, ze verlamt, en ze is precies wat de partij aan de andere kant nodig heeft.
Feitelijk onjuist, omdat de metingen laten zien hoeveel er per organisatie verschilt. Over 1.718 overheidssites loopt het aandeel dat al vóór toestemming trackt uiteen van 20,8 procent bij de ene toestemmingsmodule tot 100 procent bij de andere. Zie Welke toestemmingsmodule je kiest, voorspelt of je overtreedt. Er was ook een cyclus-app die je gegevens technisch niet eens kán doorverkopen, omdat ze geen internet-permissie heeft en nul bytes verstuurt. Zie Een app kan volledig lokaal, zonder een enkele netwerkcall. Als alles overal hetzelfde was, zou dat verschil er niet zijn. Het bestaat, dus het is een keuze.
Verlammend, omdat berusting elke volgende stap overbodig maakt. Wie denkt dat het toch al te laat is, meldt niets, klaagt niet, wisselt niet van app en stemt er niet op. De hele handhavingsketen begint bij iemand die het de moeite waard vindt om te melden.
En het is precies wat de andere kant nodig heeft. Een boete is voor een groot bedrijf vaak geen straf en meer een rekening. Zie Een boete is voor een groot bedrijf geen straf, maar een rekening. Als de financiële prikkel zwak is, blijft publieke druk over als correctiemiddel. Berusting haalt dat laatste middel weg. Dat is de reden dat ik "ze weten toch alles al" steviger tegenspreek dan ontkenning of woede.
Ik vertaal de datastroom naar de schade. Een lijst met endpoints zegt een burger niets. Een koopprofiel wordt prijsdiscriminatie, een aanwezigheidskalender wordt inbraakrisico. Zie beschrijf niet de datastroom maar de schade. En ik schrijf meteen in lezerstaal, want een technisch correcte zin die niemand voelt doet niets. Zie vaktaal kost een verhaal zijn werking.
Ik zet er altijd een handeling naast. De keten wordt doorbroken bij de bron: schrap elke tracker die je niet in één zin kunt uitleggen. Voor een functionaris gegevensbescherming is de snelste zelftest zijn eigen site meten en de ontvangerslijst naast het verwerkingsregister leggen. Voor een gebruiker is het de voorwaarden lezen en de app laten staan als er vreemde, onbegrijpelijke taal in staat.
Ik laat zien dat het ook goed afloopt. De Belastingdienst zette de tracking op 6 juni uit, geverifieerd via een nulmeting, meldde op 12 juni uit eigen beweging bij de Autoriteit Persoonsgegevens, en de staatssecretaris bedankte de melder. Zie Een grote organisatie kan een fout erkennen en zichzelf melden. Eén afgelopen dossier doet meer tegen berusting dan tien nieuwe bevindingen.
Ik weet niet of deze vijf reacties de enige zijn, of dat ik ze zie omdat ik ze verwacht. Dat risico is echt: wie een patroon eenmaal benoemt, vindt het overal terug. Ik heb geen telling, geen controlegroep en geen manier om te toetsen of iemand die vandaag berustend reageert over een maand alsnog iets doet.
Wat ik wel weet, is dat de eerste reactie zelden de laatste is. De eerste mail is bijna altijd koel of afhoudend. De tweede, nadat het bewijs op tafel ligt, is inhoudelijker. Dat lukt niet altijd. Het lukt vaak genoeg om het gesprek te blijven zoeken, en om het bewijs zo aan te leveren dat meekijken makkelijk is.
Je toestelprofiel is de hoofdmoot van wat een app verstuurt
Bij gratis Nederlandse apps vertrekt bij het laden van een advertentie een OpenRTB-biedverzoek met het reclamenummer, de locatie, de netwerkcode, de provider en de toestemmingsstring erin. Dat verzoek gaat naar elke partij die op het veilingplatform mag meebieden, dus ook naar iedereen die verliest. In één gebruikssessie ging 87 procent van de netwerkverzoeken en 54 procent van de bytes naar de advertentieketen. Onverwante apps blijken dezelfde kopers achter zich te hebben: van zeven bieders in een echte bid-respons stonden er zes ook in de partnerlijst van een totaal andere app. Wat ik meet is het vertrek; wat er daarna tussen servers gebeurt blijft buiten beeld, dus elk getal is een ondergrens.
Je opent een gratis app. Voordat er iets op je scherm staat, meldt de app dat er advertentieruimte vrij is. Dat bericht gaat naar een veilingplatform, een ad exchange. Dat platform stuurt het in een fractie van een seconde door naar de partijen die op dat platform mogen meebieden. De hoogste bieder wint, de advertentie laadt. Het hele proces duurt ongeveer honderd milliseconden.
Zo'n bericht heet een biedverzoek. De aanhoudende reeks ervan heet de biedstroom. Het protocol eronder heet OpenRTB, een open standaard van het IAB Tech Lab. De krappe timing staat in het verzoek zelf, in het veld tmax: de maximale tijd in milliseconden waarbinnen een bieder mag antwoorden. Wie te laat is, doet niet mee.
Een biedverzoek is een JSON-object. Het beschrijft de vrije advertentieplek, en het beschrijft je toestel. Een sterk versimpeld voorbeeld, in de vorm die de standaard voorschrijft:
Elk veld is een stukje van jou. device.ifa is de identifier for advertisers, het reclamenummer van je telefoon. geo is een geschatte locatie, soms uit je IP-adres afgeleid, soms nauwkeuriger. device beschrijft je toestel tot op het model. app.bundle verklapt in welke app je zit, en dus vaak iets over je situatie op dat moment. user.buyeruid is de identifier die een koper eerder aan je heeft gehangen.
Dat de standaard deze velden kent, is gemeten: de OpenRTB-specificatie is openbaar en de veldnamen liggen vast. Welke velden een concrete app werkelijk invult, is per app afgeleid uit het echte biedverkeer.
Ik heb de biedstroom van losse Nederlandse consumenten-apps onderschept en ontcijferd. Een weer-app, een handel-app, een woon-app, een ov-app. Bij Buienalarm en Marktplaats ving ik de biedaanvraag op die al bij het laden van de advertentie vertrekt. Daarin zaten het reclamenummer van de telefoon, de locatie, de netwerkcode en de provider. Het volledige toestelprofiel, voordat de gebruiker iets had aangeraakt. Zie Je toestelprofiel gaat de veiling in voor je iets aanraakt.
In een onderschepte en ontcijferde biedaanvraag van een weer-app zaten het advertentie-ID, land, netwerkcode, provider, taal, locatie en de toestemmingsstring. Er zit geen afweging per veld in. Die velden vertrekken samen, in één keer. Anonimiseren gebeurt onderweg niet. Zie Je hele toestelprofiel gaat in een keer de veiling in.
Dan de verhouding. In één gebruikssessie ging 87 procent van de netwerkverzoeken en 54 procent van de bytes naar de advertentieketen, tegen een fractie echt verkeer. Dat is één sessie op één app, en ik presenteer het als zodanig. Het gevolg is wel concreet: je databundel en je batterij betalen grotendeels aan een laag die jou niets oplevert. Zie Het meeste verkeer van je app gaat niet naar de app.
Hier zit de kern die de meeste mensen missen. Het biedverzoek gaat niet naar één koper. Het wordt uitgezonden naar iedere partij die op dat veilingplatform mag meebieden. Tientallen bedrijven ontvangen dus dezelfde JSON met jouw kenmerken erin. Precies één van hen wint. De rest verliest en houdt de data.
Een partij hoeft de plek dus niet te winnen om je gegevens te krijgen. Meebieden mogen is genoeg. Verliezen kost niets en levert wel een compleet profielsignaal op: identifier, grove locatie, toestel, app, tijdstip. Dat gedrag heeft in de sector een naam, bid stream data harvesting. Dat het technisch mogelijk is, volgt rechtstreeks uit hoe het protocol uitzendt en is dus afgeleid. Hoe vaak een specifieke partij het doet, blijft zonder inzage in hun systemen vermoed.
Eén advertentieplek op je scherm staat daarmee gelijk aan tientallen partijen die je profiel te zien kregen. Een privacyverklaring laat één plek meestal klinken als één adverteerder.
De volgorde is bovendien omgekeerd aan wat je verwacht. Eerst gaat je profiel de markt op, dan bieden partijen, dan pas wordt beslist wat je te zien krijgt. Het aantal partijen dat je profiel zag, staat los van het aantal advertenties dat je kreeg. Zie Een biedstroom kan een veiling ingaan waar buitenlandse partijen op meebieden.
Dezelfde kopers achter apps die niets met elkaar te maken hebben¶
Toen ik de lijsten per app naast elkaar legde, kwam er een overlap boven die ik niet zocht. Apps van verschillende makers, voor verschillende doelen, hadden dezelfde advertentie-infrastructuur achter zich. Eén verkoopplatform en een handjevol vaste bieders.
In een echte bid-respons uit één app zaten zeven biedende partijen. Zes daarvan staan ook in de partnerlijst van een totaal andere app. De namen die keer op keer terugkomen zijn PubMatic, Magnite, Criteo en Index Exchange. Bewijsniveau: gemeten. De zeven komen uit een echte bid-respons, de zes overlappende uit de partnerlijst van de andere app.
Een enkele overlap kan toeval zijn. Zes van de zeven, dwars door onverwante apps heen, is het patroon zelf. De app levert de gelegenheid, de markt levert de kopers. Zie Onverwante apps sturen je profiel dezelfde veiling in.
Dat heeft een gevolg voor het idee dat je per app kunt kiezen. De toestemmingsvraag staat in de app en geldt voor die app. De veiling erachter is gedeeld. De partij die je in de ene app weigert, ziet je in de volgende alsnog, via dezelfde veiling waarop die volgende app is aangesloten.
Achter die markt zit bovendien een kleine, vaste groep locatie-databrokers die via meegeleverde SDK's de positie van toestellen verzamelt en doorverkoopt. In een index van honderden apps kwamen steeds dezelfde namen terug: X-Mode, inmiddels Outlogic en met een FTC-verbod, Gravy/Venntel, dat locatiedata aan Amerikaanse overheden leverde, plus OneAudience, Sense360, SignalFrame, Fysical, Placed en Predicio. Zie De locatiedatahandel draait op een handvol vaste spelers.
Dit hoort erbij, anders is het cijfer meer waard dan het is.
Ik meet het vertrek. Ik leg het netwerkverkeer van een app vast, vis de biedverzoeken eruit en lees welke van mijn kenmerken meegaan. Wat er daarna tussen servers gebeurt, valt buiten beeld. Een exchange kan een verzoek doorverkopen aan een andere exchange. Een winnende bieder kan het profiel intern delen. Elk getal dat ik noem is daarom een ondergrens. Zie Elke browsermeting is een ondergrens en Label elke bevinding op bewijsniveau.
De meting kan ook stuklopen op de app zelf. Bij de Funda-app brak een patch op het toestel alleen het slot aan de kant van de app. De server gaf een foutmelding en de echte biedstroom bleef ongezien. Dat het advertentie-ID meegaat de biedstroom in, is daar statisch aangetoond in de code. De live capture kwam nooit rond. Statisch bewijs en live bewijs zijn twee verschillende niveaus, en dat verschil hoort in het rapport. Zie Een aanwijzing is nog geen bewijs en Je advertentie-ID gaat ongefilterd de veiling in.
Onder de AVG is een reclame-identifier een persoonsgegeven, want hij maakt je herkenbaar. Het uitzenden ervan naar tientallen ontvangers is een verwerking, en elke ontvanger is een eigen partij in de zin van de wet. De rechtsgrond is vrijwel altijd toestemming, geregeld via het IAB TCF, het Transparency and Consent Framework. Dat framework codeert je keuzes in een consent string die met het biedverzoek meereist.
Het probleem is dat de gegeven toestemming zelden dekt wat er feitelijk gebeurt. Je stemt in met een lijst partners die je op een muur te zien kreeg, terwijl de biedstroom breder gaat dan die muur. Zie De cookiemuur toont minder partners dan de code telt. De keten achter de exchange, met resellers en tussenpartijen, staat in geen enkele verklaring. Zie De advertentieketen heeft schakels die niemand in de verklaring noemt. De Belgische toezichthouder oordeelde in 2022 dat het TCF zoals het toen werkte in strijd was met de AVG, onder meer omdat de consent string zelf een persoonsgegeven is dat zonder geldige grond werd verspreid.
Daarmee is bij RTB "waar staat de server" de verkeerde vraag. De juiste vraag is wie er mag meekijken in de veiling, en dat is een bredere en internationalere groep dan de app zelf noemt. Zodra het biedverzoek partijen buiten de EER bereikt, is er doorgifte naar een derde land, waar hoofdstuk V van de AVG eisen aan stelt. Zie Waar het pakket landt en wie het kan vorderen zijn twee assen.
Als lezer, in vijf minuten. Zet op Android het reclamenummer uit via Instellingen, Privacy, Advertenties, en kies daar Advertentie-ID verwijderen. Op iOS zet je onder Privacy en beveiliging de tracking-toestemming uit. Dat sluit de veiling niet, en het haalt wel het meest bruikbare koppelveld uit het verzoek. Zet daarna per app de locatiepermissie op "alleen tijdens gebruik", of helemaal uit bij apps die je positie niet nodig hebben.
Als onderzoeker of functionaris gegevensbescherming: leg het netwerkverkeer van je eigen app vast en filter op de OpenRTB-signatuur, de combinatie van imp, device, at en tmax. Kijk vervolgens welke velden je app invult in device en user. Loop daarna de app-ads.txt van de uitgever en de sellers.json van de aangesloten exchanges door, en tel hoeveel deelnemers buiten de EER vallen. Noem dat getal een ondergrens, want dat is het.
En als bestuurder van een app die dit draait: een verklaring die stelt dat gegevens binnen de EU blijven, is bij een actieve RTB-integratie moeilijk waar te maken. Het kan technisch wel, met een besloten opstelling en een gecontroleerde deelnemerslijst. Dan is het een keuze die je in de configuratie ziet staan. De code wint van de verklaring, zoals altijd.
Op Nederlandse overheidssites is de grootste bron van verkeer voor toestemming geen advertentietracker maar een lettertype, een kaartje of een icoonpakket van een extern adres. Google Fonts, Google Maps, Adobe Typekit, jsDelivr en Cloudflare laden in 97 tot 100 procent van de gevallen al voordat de bezoeker iets heeft geklikt. Dat is geen kwade opzet, het is een bouwkeuze, en het is de goedkoopste te repareren overtreding die er bestaat.
Toen ik de 1.718 gemeten overheidssites sorteerde op "welke externe partij laadt het vaakst voordat de bezoeker iets heeft geklikt", verwachtte ik advertentiebedrijven bovenaan. Dat klopte niet.
partij waarvan pre-consent aandeel wat het is
rijksoverheid.nl 668 van 669 99,9% Piwik PRO analytics
googletagmanager.com 193 van 202 95,5% Google Tag Manager
googleapis.com 192 van 196 98,0% Google Fonts en Maps
gstatic.com 168 van 172 97,7% statische Google-bestanden
google-analytics.com 158 van 180 87,8% Google Analytics
google.com 88 van 112 78,6% o.a. Funding Choices
piwik.pro 70 van 72 97,2% Piwik PRO
rovid.nl 48 van 48 100,0% videoplatform
jsdelivr.net 47 van 47 100,0% scriptbibliotheken
cloudflare.com 42 van 42 100,0% scripts en bescherming
readspeaker.com 41 van 41 100,0% voorleessoftware
cookiebot.com 38 van 38 100,0% toestemmingsmodule
typekit.net 30 van 30 100,0% Adobe-lettertypen
Kijk naar wat daar staat. Lettertypen. Kaarten. Icoonpakketten. Scriptbibliotheken. Voorleessoftware. Dit zijn geen keuzes van een marketingafdeling, dit zijn keuzes van een ontwikkelaar die snel een pagina wilde bouwen. En ze staan bovenaan de lijst van overtredingen.
Een lettertype dat je van googleapis.com haalt, is een verzoek van de browser van je bezoeker naar een server van Google. Dat verzoek bevat het IP-adres van de bezoeker, de user agent, en meestal een referer-header met de pagina waarop hij zich bevindt.
Er komt geen cookie aan te pas. Toch is het een verwerking van persoonsgegevens door een derde partij, zonder grondslag, voordat er toestemming is. De Duitse rechtbank in Munchen kende in januari 2022 schadevergoeding toe aan een bezoeker om precies deze reden, en die uitspraak heeft in Duitsland een golf van claims veroorzaakt.
Voor Nederland is de zaak niet identiek, maar de redenering onder de AVG is dezelfde: er is een ontvanger, er is geen grondslag, en er is geen informatie vooraf.
Dit is de reden dat ik deze les belangrijk vind: het is de goedkoopste reparatie in het hele veld.
Lettertypen. Download de fontbestanden, zet ze op je eigen server, en verwijs er lokaal naar. Google Fonts staan onder een vrije licentie, dat mag gewoon. Je site wordt er meestal sneller van, omdat je een DNS-lookup en een TLS-handshake naar een vreemd domein uitspaart.
Scriptbibliotheken. Hetzelfde verhaal voor jsDelivr, unpkg en cdnjs. Haal het bestand op, zet het in je eigen assets, versienummer erbij. Het argument dat een gedeelde CDN sneller is, is achterhaald: browsers cachen sinds 2020 per site, dus je profiteert niet meer van het bezoek van je gebruiker aan een andere site.
Kaarten. Google Maps vervang je door een statische afbeelding met een link, of door een zelf gehoste kaartlaag op basis van OpenStreetMap. Voor de meeste overheidspagina's is "hier is ons adres, klik voor de route" precies genoeg.
Als je dit doet, blijft er een categorie over die je niet zomaar kunt zelf hosten: diensten met een functie die op afstand draait. Voorleessoftware, feedbackwidgets, zoekfunctionaliteit. Die horen achter de toestemmingsvraag, of je zoekt een leverancier die zonder externe aanroep werkt.
En dan blijft er nog een categorie over die je juist wel achter de toestemmingsvraag wilt houden maar die je nodig hebt om de site uberhaupt te laten werken: een firewall, een botfilter, een CDN voor je eigen statische bestanden. Die vallen vaker onder de noodzakelijkheidsuitzondering, maar je moet die redenering wel kunnen opschrijven.
Het verschil tussen die twee categorieen is niet technisch. Het is de vraag of de bezoeker de dienst vroeg. Dat is dezelfde vraag als bij de cookies, en het antwoord is even zelden vanzelfsprekend.
Het instrument dat toestemming moet vragen, vraagt zelf geen toestemming. Op alle 38 gemeten sites met Cookiebot laadde cookiebot.com al voordat de bezoeker iets koos. Bij Google Funding Choices, een toestemmingsvenster van een advertentiebedrijf, gebeurde dat op 88 van de 112 sites. De banner is geen schild maar een extra ontvanger.
Het instrument dat toestemming vraagt, vraagt zelf niets¶
Bij het uitsplitsen van de scan per toestemmingsmodule viel me iets op dat ik eerst voor een meetfout hield. De domeinen van de modules zelf stonden in de lijst van partijen die laden voordat de bezoeker iets heeft gekozen.
cookiebot.com 38 van 38 sites 100,0% pre-consent
google.com (Funding
Choices, een CMP) 88 van 112 sites 78,6% pre-consent
Het is geen meetfout. Het is inherent aan hoe deze modules werken: om de vraag te kunnen stellen, moet de code van de leverancier eerst geladen worden, en dat is per definitie voor het antwoord.
Er is een verdedigbare kant. Als de module uitsluitend zijn eigen script laadt om de vraag te tonen, en verder niets vastlegt, dan is dat de dienst die nodig is om toestemming te kunnen vragen. Het is lastig een cookiebanner te tonen zonder een cookiebanner te laden.
De grens ligt bij wat er meekomt. Concreet moet je drie dingen controleren bij je eigen module:
1. Zet hij een identificerende cookie voordat je kiest? De cookie die je keuze onthoudt mag pas bestaan als er een keuze is. Een bezoeker-ID dat al bij het laden wordt gezet, is geen keuze-cookie.
2. Stuurt hij telemetrie terug? Veel modules rapporteren aan hun leverancier hoeveel bezoekers de banner zagen en wat ze klikten. Dat is een verwerking met een doel van de leverancier, niet van jou, en die valt niet onder de noodzakelijkheidsuitzondering.
3. Wie is de leverancier? Dit is het scherpst bij Google Funding Choices. Dat is een toestemmingsmodule van een advertentiebedrijf, geplaatst op 88 gemeten sites voor de toestemmingsvraag. De partij die vraagt of jij getraceerd wilt worden, is dezelfde partij die aan het traceren verdient. Dat is geen juridisch bezwaar op zich, maar het is een belangenpositie die je moet kennen.
De schoonste oplossing is een toestemmingsmodule die volledig op je eigen server draait en geen enkel verzoek naar buiten doet. Dat is minder werk dan het klinkt: een banner is een stukje HTML, een keuze in localStorage of een first-party cookie, en een schakelaar die bepaalt of de rest van je scripts mag laden.
Wil je toch een leverancier, controleer dan drie dingen voordat je tekent:
1. laadt de module vanaf jouw eigen domein, of vanaf dat van de leverancier?
2. welke cookies zet hij voor de eerste keuze, en met welk doel?
3. welke gegevens gaan er terug naar de leverancier, en staat dat in de
verwerkersovereenkomst?
Deze drie vragen kosten je een mail. Het antwoord bepaalt of je toestemmingsmodule je bescherming is of je eerste overtreding.
Ik heb elke site drie keer bezocht: niets doen, weigeren, accepteren. Op 77,8 procent van de sites zonder herkende toestemmingsmodule laadde na een expliciete weigering evenveel of meer dan bij niets doen. Weigeren is op die sites een knop zonder bedrading. Dat is meetbaar, per site, en het is precies de toets die een toezichthouder in een half uur kan overdoen.
Elke site in mijn scans wordt drie keer bezocht, in drie los van elkaar staande browsersessies met een schoon profiel:
noop de pagina openen en verder niets doen
refuse de weigerknop zoeken, klikken, dan meten
accept de accepteerknop klikken, dan meten
Het verschil tussen die drie is het bewijs. De absolute aantallen zeggen weinig, want een site met veel afbeeldingen heeft nu eenmaal veel verzoeken. Het verschil zegt alles, want dat is precies wat jouw keuze uitmaakte.
"Weigeren zinloos" betekent hier: na de weigering laadde de site evenveel of meer externe partijen dan toen de bezoeker niets deed, terwijl er wel iets te weigeren viel.
Twee dingen vallen op. De ene is dat de spreiding tussen leveranciers enorm is: van 19,6 procent tot 100 procent. De andere is dat de grootste groep, ruim duizend sites, helemaal geen herkende module heeft en daar toch in 79,5 procent van de gevallen al trackt.
Ik moet hier eerlijk zijn over drie meetbeperkingen, want zonder die kanttekeningen is dit cijfer minder waard dan het lijkt.
Ten eerste: de scanner moet de weigerknop kunnen vinden. Vindt hij hem niet, dan is de refuse-meting gelijk aan de noop-meting, en dat telt in deze cijfers als "zinloos". Dat is verdedigbaar, want een weigerknop die een geautomatiseerde bezoeker niet vindt is voor een mens ook lastig, maar het is geen zuivere maat.
Ten tweede: de groepen zijn zeer ongelijk van omvang. Cookiebot heeft hier zes sites. Daar mag je geen leverancierskwaliteit uit afleiden, alleen een signaal dat je zelf moet natrekken.
Ten derde: sommige sites laden na een weigering meer omdat de banner verdwijnt en de onderliggende pagina alsnog zijn afbeeldingen ophaalt. Ik tel externe partijen, niet verzoeken, om dat effect te dempen, maar het is niet volledig weg te nemen.
Wat er na die kanttekeningen overblijft is nog steeds hard: bij de overgrote meerderheid van de gemeten sites verandert een expliciete weigering het gedrag niet meetbaar.
Voor een bouwer: dit is je regressietest. Weiger, herlaad, tel. Zet die test in je pijplijn, want dit soort dingen sluipt terug bij elke nieuwe integratie.
Voor een functionaris gegevensbescherming: dit is de vraag die je aan je leverancier stelt, met bewijs erbij. Niet "voldoen wij", maar "hier is de meting van onze eigen site, verklaar dit verschil".
Voor een toezichthouder: dit is de goedkoopste handhavingsroute die er is. Er is geen dossieronderzoek nodig, geen verklaring op te vragen. Drie bezoeken, een verschil, een overtreding.
Welke toestemmingsmodule je kiest, voorspelt of je overtreedt
Toestemmingsmodules zijn niet inwisselbaar. Over 1.718 overheidssites loopt het aandeel dat al voor toestemming trackt uiteen van 20,8 procent bij de ene module tot 100 procent bij de andere. De keuze van je leverancier voorspelt je nalevingsniveau beter dan je privacyverklaring dat doet.
De toegankelijkheidstool en de feedbackwidget lekken ook
Voorleessoftware, feedbackknoppen en webarchivering worden ingekocht om de site beter te maken, en ze laden vrijwel altijd voor de toestemmingsvraag. ReadSpeaker deed dat op 41 van 41 sites, Mopinion op 25 van 26, en de webarchiefdienst sitearchief.nl draagt zelf Google Analytics mee op 33 sites. Wie zijn toestemmingsvraag serieus neemt, moet ook zijn hulpmiddelen tellen.
Als een organisatie haar toestemmingsvraag nakijkt, kijkt ze naar twee dingen. Naar de analytics, en naar de advertentietechniek. Daar gaat het gesprek over, daar zit de angst, daar wordt over onderhandeld met de leverancier.
Er is een derde categorie die vrijwel nooit op tafel komt. De voorleesknop voor mensen die slecht zien. Het formuliertje rechtsonder dat vraagt of u deze pagina nuttig vond. De archiveringsdienst die de site bewaart omdat de Archiefwet dat eist. De captcha voor het contactformulier. Het platform waarop de site zelf draait.
Die dingen zijn ingekocht om de site beter te maken. Voorleessoftware wordt gekocht omdat toegankelijkheid voor een overheidssite een wettelijke plicht is. Een feedbackknop wordt gekocht omdat een dienstverlener wil weten of de burger eruit komt. Ze staan in de offerte onder toegankelijkheid, klanttevredenheid of archiefplicht. Ze staan zelden in de cookieparagraaf.
En ze laden bijna allemaal voordat de bezoeker iets heeft kunnen kiezen.
Dit komt uit de scan van 14 juli 2026 over 1.718 Nederlandse overheidssites, in de modus waarin de bezoeker niets deed. Alleen de pagina openen, geen klik, geen keuze.
Vier van deze acht staan op honderd procent. Niet bijna, precies honderd. Op elke site waar de voorleesdienst voorkwam, laadde hij voor de toestemmingsvraag. Op elke site waar de archiefdienst voorkwam, hetzelfde. Er is dus geen enkele installatie waar iemand deze componenten wel achter de banner heeft gezet. Dat maakt het een bouwpatroon, geen incident.
De regel over servers is een aparte les. Twee van de acht domeinen eindigen op punt-nl en hebben toch servers buiten Nederland. Bij rovid.nl kwam het antwoord van adressen die de database in de Verenigde Staten plaatst. Een Nederlandse naam zegt niets over waar de bytes landen. Zie Data in Nederland kan toch onder Amerikaans recht vallen en, over de houdbaarheid van zo'n landlabel, Een landlabel is zo oud als de database die het gaf.
Sitearchief.nl bewaart overheidswebsites zodat ze later nog raadpleegbaar zijn. Dat is een nette taak die uit de wet volgt. Het draait op Nederlandse servers.
En het draagt zijn eigen analytics mee. De scanner herkent op dat domein Google Analytics 4 via gtag.js. Op alle 33 sites waar sitearchief.nl voorkwam, laadde het voor de toestemmingsvraag.
Dat is de kern van deze notitie in één voorbeeld. De archiefdienst is ingekocht om een wettelijke plicht te vervullen. In de bagage van die dienst zit een meetpakket van een Amerikaanse partij, en dat pakket start op het moment dat de pagina opent. De inkopende organisatie heeft dat nooit besteld en weet er meestal niets van.
Het spoor is verder te volgen in de cookielijst van diezelfde scan. In de modus waarin niemand iets klikte, zag ik onder de sitearchief-subdomeinen zowel sessiecookies staan als cookies van een tweede meetpakket:
JSESSIONID 48 sites gezet door archief39.sitearchief.nl
Archiefsessid 32 sites gezet door rijkswaterstaat.sitearchief.nl
_gat 17 sites gezet door .sitearchief.nl
_pk_id / _pk_ses 14 sites gezet door minienw.sitearchief.nl
Eén dienst, drie meetpakketten, en een burger die dacht dat hij een gearchiveerde pagina opende.
De feedbackknop is de enige met een gedeeld nummer¶
Mopinion is het formuliertje dat vraagt of u tevreden bent. Van de 26 overheidssites waarop ik het aantrof, laadde het op 25 voor de toestemmingsvraag.
Dit is ook de enige uit deze reeks waarbij ik iets zwaarders zie. In de bredere verzameling over alle scanruns komt mopinion.com voor op 36 sites, en op 7 daarvan kwam een gedeeld herkenningsnummer bij die partij binnen. Een gedeeld nummer betekent dat twee losse partijen naar dezelfde bezoeker kunnen wijzen. Dat is geen los technisch detail. Het raakt de vraag of er sprake is van gezamenlijke verwerkingsverantwoordelijkheid.
Let op het verschil tussen die twee getallen. In de scan van 14 juli over 1.718 sites is het 26 sites. Over alle runs samen is het 36. Beide kloppen, ze tellen alleen iets anders: één momentopname tegenover alles wat ik ooit zag. Zie twee getallen die botsen meten vaak iets anders.
Bij mopinion.com wijzen de servers naar de Verenigde Staten en Ierland. Dat maakt het de enige uit deze reeks waarbij hoofdstuk V van de AVG in beeld komt, over doorgifte naar landen zonder adequaatheidsbesluit.
Voor ik doorga met de aanklacht: het tegendeel verdient een eerlijke ronde, en op twee punten wint dat tegendeel.
Ten eerste zetten sommige van deze partijen helemaal geen cookies. Over alle runs samen zag ik readspeaker.com op 46 sites met 385 verzoeken en nul cookies. Ook mopinion.com zette op geen van de 36 sites een cookie. Wie deze twee wil aanpakken op de cookiewet, heeft daar dus weinig aan.
Dat is geen vrijbrief. Het verzoek zelf gaat wel uit, met een IP-adres, een user-agent en de pagina waar de bezoeker op stond. Dat is een verstrekking van persoonsgegevens die een grondslag nodig heeft. De cookiewet is de makkelijkste toets, en de AVG blijft er onverkort naast staan.
Ten tweede meet ik een verbinding, geen ontvangst. Dat mijn browser een partij aanroept, bewijst dat er iets vertrok. Het bewijst niet wat die partij ermee deed. Zie Een host die je toestel belt is nog geen partij die je data krijgt voor de categorieën die ik daarvoor gebruik.
Waar het tegendeel niet wint, is bij mett.nl en sitearchief.nl. Mett.nl zette cookies op 26 van de 29 sites waar het voorkwam. Sitearchief.nl zette cookies op 32 van de 33 sites, met op de zwaarste site 46 cookies in één bezoek. Daar is de cookiewet gewoon van toepassing.
Een advertentietracker wordt met argwaan ingekocht. Er zit een jurist bij, er wordt een verwerkersovereenkomst getekend, iemand vraagt zich af of dit wel mag. Een voorleesknop wordt ingekocht met opluchting, want de toegankelijkheidsplicht was een probleem en nu is het opgelost.
Daarbij komt dat deze componenten vaak niet als los product worden gekozen. Ze zitten in het platform. Mett.nl staat op 29 sites die grotendeels tot dezelfde familie horen: informatiesites over wegwerkzaamheden, recreatieschappen, participatietrajecten. Wie zo'n site laat bouwen, kiest geen tracker. Hij kiest een leverancier, en de leverancier levert een stapel mee.
Dat is dezelfde beweging als bij een lettertype of een kaartje van een extern adres. Zie Wat je van een CDN haalt, laadt voor je banner. Het verschil is dat een lettertype niemand verbaast en een voorleesknop wel, omdat die knop een sociaal doel dient. Precies dat sociale doel houdt hem uit de discussie.
De juridische kant is minder ingewikkeld dan het aanvoelt. De organisatie die de site aanbiedt, is de verwerkingsverantwoordelijke. Zij bepaalt doel en middelen. Dat de tracker via een leverancier binnenkwam, verandert daar niets aan.
De leverancier heeft in de praktijk het meeste effect. Een voorleesdienst die zijn script pas na een toestemmingssignaal laadt, repareert in één release 41 sites tegelijk. Een archiefdienst die zijn eigen analytics eruit haalt, repareert er 33. Dat is de goedkoopste reparatie in dit hele dossier, en ze ligt bij een handvol partijen.
Dit is een half uur werk en het levert een lijst op die je aan je leverancier kunt voorleggen.
1. Open je eigen site in een vers browserprofiel. Ontwikkelaarstools open, netwerktabblad, "preserve log" aan.
2. Laad de pagina en doe verder niets. Klik de banner niet weg.
3. Noteer elk extern domein dat je ziet langskomen.
4. Streep de domeinen weg die je herkent als analytics of advertentietechniek. Wat overblijft is de categorie uit deze notitie.
5. Zoek per overgebleven domein uit welk contract erachter zit. Bij welke inkoop hoorde dit, en wie tekende ervoor.
6. Leg die lijst naast je verwerkingsregister en tel wat er niet in staat.
Stap 6 is de stap waar het pijn gaat doen, en het is dezelfde zelftest die ik beschrijf in De ontvangers die in geen enkel verwerkingsregister staan. In mijn meting bestaat de gemiddelde overheidssite uit een handvol externe partijen, en het zijn zelden de partijen die de organisatie zelf zou noemen.
Bewijsniveau. De aantallen sites en het aandeel pre-consent zijn gemeten, in één run, op 14 juli 2026, en herhaalbaar met de methode uit Hoe mijn scanner werkt, van bezoek tot bewijsstuk. Dat het om ingekochte hulpmiddelen gaat en niet om bewuste tracking, is afgeleid uit de aard van de diensten. Wat de ontvangende partijen met het verkeer doen, weet ik niet en beweer ik niet.
CNAME-cloaking zit op vier op de tien overheidssites
Op 710 van 1.718 gemeten overheidssites loopt verkeer via een subdomein van de site zelf dat in werkelijkheid naar een derde partij wijst. Voor de browser is dat eigen verkeer, dus de bescherming tegen derde-partijcookies grijpt niet. Voor de bezoeker is het onzichtbaar. Voor de verwerkingsverantwoordelijke is het meestal ook onzichtbaar, want het staat in een DNS-record en niet in de code.
beginselnotitieOverheid, toezicht en de wetverwant
De ontvangers die in geen enkel verwerkingsregister staan
Een gemiddelde overheidssite spreekt 3,2 externe partijen aan, de mediaan is 2, maar de staart loopt door tot 38 op een enkele site. Die staart is waar het risico zit. Voor een functionaris gegevensbescherming is dit de snelste zelftest die er is: meet je eigen site, leg de ontvangerslijst naast je verwerkingsregister, en tel wat er niet in staat.
beginselnotitieOverheid, toezicht en de wetverwant
De rijksbrede analytics staat op 668 sites voor toestemming
De grootste ontvanger op Nederlandse overheidssites is de overheid zelf. Op 668 van 669 sites waar rijksoverheid.nl als partij optreedt, laadde die verbinding al voor enige toestemming, met Piwik PRO als analysepakket en servers in Belgie. Dat kan rechtmatig zijn, maar alleen onder voorwaarden die je moet kunnen aantonen, en die aantoonbaarheid is precies wat ontbreekt.
BeforeYouMick is geen tool die zegt of een site fout zit. Het is een meetketen die vastlegt wat er gebeurde, in drie los van elkaar staande consent-modi, met een hash over elk bewijsstuk zodat een tegenpartij het kan narekenen. Hier staat de hele keten, stap voor stap, inclusief de plekken waar hij liegt als je niet oplet.
Er bestaan scanners die je vertellen of een site "voldoet". Die kon ik niet gebruiken, om twee redenen.
De eerste is dat ze een oordeel geven zonder het bewijs te bewaren. Ik moet aan een organisatie kunnen laten zien wat er gebeurde, niet wat mijn tool ervan vond. Zodra een jurist vraagt "waar blijkt dat uit", is een score van 62 procent waardeloos.
De tweede is dat ze meten als een scanner en niet als een bezoeker. Een kale HTTP-request naar een pagina haalt niet dezelfde trackers op als een echte browser die scrollt, klikt en een video start. Wie zo meet, meet structureel te weinig en concludeert ten onrechte dat het meevalt.
BeforeYouMick is inmiddels versie 4.5 en ruim zevenduizend regels. Hieronder staat wat hij doet, in de volgorde waarin hij het doet.
Elke site wordt drie keer bezocht, elk in een vers browserprofiel dat daarna wordt weggegooid:
noop pagina openen, verder niets. Dit is de wettelijke nulmeting.
refuse de weigerknop zoeken, klikken, dan meten.
accept de accepteerknop zoeken, klikken, dan meten.
Die drie zijn het hele fundament. De absolute aantallen zeggen weinig. Het verschil tussen de drie is het bewijs, want dat is precies wat de keuze van de bezoeker uitmaakte. Zie Weigeren doet op vier van de vijf sites niets.
De knop zoeken is lastiger dan het klinkt. De scanner herkent eerst het toestemmingsplatform aan de DOM, en gebruikt dan de knopselectors die bij dat platform horen. Lukt dat niet, dan valt hij terug op tekstherkenning, ook binnen iframes, want veel modules draaien in een frame. Vindt hij niets, dan legt hij dat vast als "geen knop gevonden" in plaats van te doen alsof er geweigerd is. Dat onderscheid is belangrijk: een niet gevonden weigerknop is zelf een bevinding.
Binnen elke modus doet de scanner wat een mens ook doet, omdat trackers daarop wachten:
doorklikken naar maximaal drie interne pagina's;
scrollen tot onderaan, want veel scripts vuren pas bij scroll;
klikken op elementen die interactie uitlokken.
Dat is geen cosmetica. In mijn NPI-metingen verschijnt op 23 van de 32 sites een deel van de trackers pas na scroll of interactie, honderden milliseconden na het laden. Wie alleen de eerste seconde meet, mist ze. Zie Niet alles vuurt bij opstart, sommige trackers wachten op jou.
De browser draait met een stealth-laag, zodat de site hem niet direct herkent als automatisering. Dat heeft een prijs die ik hieronder benoem, want die stealth maakt een van de velden onbruikbaar.
Per modus wordt een volledig HAR-bestand geschreven. Dat is de ruwe opname: elk verzoek, elke header, elke cookie, elke timing. Daarnaast legt de scanner apart vast:
cookies naam, domein, levensduur, secure, sameSite, first of third party
web storage localStorage en sessionStorage, met een oordeel of het tracking is
tracker scripts herkende trackers, met de naam van de leverancier
tracking pixels onzichtbare afbeeldingen van 1x1
response headers CSP, HSTS, X-Frame-Options, Referrer-Policy
consent banner welk platform, of hij zichtbaar was, welke knop is geklikt
privacy links waar de privacy- en cookieverklaring staan
CNAME cloaking via een echte DNS-navraag, niet via de pagina zelf
Die laatste is er een die de meeste tools overslaan. Een subdomein van de site zelf kan via een CNAME naar een tracker wijzen. In de browser lijkt dat eigen verkeer, dus first-party bescherming grijpt niet. Alleen een DNS-navraag ontmaskert het. Op 710 van 1.718 overheidssites vond ik dit. Zie CNAME-cloaking zit op vier op de tien overheidssites.
Weten dat een script van een tracker geladen wordt is stap een. Weten wat erin staat is stap twee. De scanner downloadt de aangetroffen scripts, met een limiet op grootte, maakt ze leesbaar als ze geminificeerd zijn, en zoekt naar patronen:
fingerprint-aanroepen, dus code die eigenschappen van je toestel uitleest;
identificatienummers die letterlijk in de bestandsinhoud staan;
versluiering, zoals atob gecombineerd met eval, wat betekent dat de code zichzelf pas bij uitvoering onthult.
Dat laatste vond ik op 25 van de 32 NPI-sites. Versluierde code is niet illegaal, maar het maakt de verwerking oncontroleerbaar voor de partij die er verantwoordelijk voor is, en dat raakt de transparantieplicht.
Dit is het deel waar het instrument van een handig hulpmiddel een bewijsmiddel wordt. Elk artefact, HAR-bestanden, screenshots, gedownloade scripts, wordt in een bewijsmap gezet met een SHA256-hash in een manifest. Dat manifest bevat ook het versienummer van de scanner en het tijdstip.
Waarom dat telt: als ik zes maanden later een organisatie aanspreek en die zegt "dat kan niet, wij hebben dat nooit gehad", dan ligt er een bestand met een hash die aantoont dat het sindsdien niet is aangepast. Zonder die keten is mijn meting een bewering.
Pas helemaal aan het eind komt de duiding. Elke bevinding krijgt een ernstniveau en het wetsartikel dat hij raakt. Over de 1.718 gemeten overheidssites leverde dat op:
1.172 KRITIEK
5.177 ERNSTIG
1.964 LET OP
230 CONTROLEER
Met als meest voorkomende kwalificaties:
988 AVG art. 28 + Tw 11.7a bekende trackers geladen voor toestemming
846 Tw art. 11.7a trackingcookies gezet, geen banner aangetroffen
724 AVG art. 13 scripts lezen browsereigenschappen uit
710 AVG art. 5(1)(a) + 13 tracking gecamoufleerd achter eigen subdomein
662 AVG art. 32 geen HSTS
608 AVG art. 13 geen privacyverklaring gevonden
604 AVG art. 6 + 28 POST-verzoeken met inhoud naar derden
539 AVG hoofdstuk V ontvangers met servers in een derde land
De labels zijn een hulpmiddel, geen vonnis. Ze wijzen aan welk artikel in beeld komt, zodat een jurist weet waar hij moet kijken. De beoordeling blijft mensenwerk.
Elk instrument heeft plekken waar het onbetrouwbaar is. Dit zijn de mijne, en ik noem ze omdat een meetketen zonder bekende zwakke plekken verdacht is.
De referer is onbruikbaar. De stealth-laag past de referer-header aan om detectie te ontlopen. Wie op dat veld attribueert, krijgt valse toewijzingen. Ik gebruik daarom de pageref uit het HAR-bestand om een verzoek aan de juiste pagina te koppelen, nooit de referer.
Diep doorklikken lekt. Als de scanner doorklikt naar een externe pagina, komen die trackers in de meting terecht en lijken ze van de oorspronkelijke site. Navigatie blijft daarom binnen het eigen domein, en verkeer dat na een externe sprong ontstaat wordt apart gehouden.
Een mislukte meting is geen schone site. Als een pagina niet laadt, een botfilter tussenbeide komt of de modus in een time-out loopt, is het resultaat leeg. Leeg betekent niet schoon. Daarom draait er een sanity-controle per modus die vastlegt of de meting compleet is, en alles wat niet compleet is valt buiten de statistiek in plaats van als nul mee te tellen.
Een landlabel is zo oud als de database. De landbepaling per ontvanger komt uit een offline GeoIP-database. Die veroudert. Ik vermeld daarom de datum van de database bij elk dossier, en herbereken oude scans als de database is bijgewerkt.
Een verbinding is geen doorgifte van persoonsgegevens. De scanner ziet dat je toestel een partij benaderde. Wat er in de body zat en wat die partij ermee deed, is een andere vraag met een eigen bewijslast. Zie Een host die je toestel belt is nog geen partij die je data krijgt.
Je hebt geen zevenduizend regels nodig om de kern te doen. Dit is het minimum dat al bewijskracht heeft:
1. Open een vers browserprofiel, zonder extensies.
2. Ontwikkelaarstools open, netwerktabblad, "preserve log" aan.
3. Laad de pagina en doe niets. Exporteer als HAR. Noem het noop.har.
4. Herhaal met weigeren. refuse.har. En met accepteren. accept.har.
5. Bereken van elk bestand een SHA256-hash en schrijf die op, met datum en tijd.
6. Vergelijk de drie op unieke externe domeinen.
Stap 5 is degene die iedereen overslaat en die het verschil maakt tussen een mening en een dossier. Zie Netwerkverkeer lezen via HAR-files voor het uitlezen zelf.
Organisaties die ik meet reageren alsof ik iets tegen hen persoonlijk heb. Dat is een misverstand dat veel over hen zegt. Ik kijk naar wat een systeem de burger kost, en jouw site is daarin een meetpunt, geen doelwit. De reflex om dat als aanval te lezen komt uit hetzelfde denken dat analytics zwaarder laat wegen dan een grondrecht.
Als ik een organisatie benader met een meting, komt er vaak een reactie terug die gaat over de organisatie zelf. Waarom wij. Wat heeft hij tegen ons. Wie is deze man. Soms defensief, soms verontwaardigd, soms met een aanbod om eens te praten over hoe goed ze het eigenlijk doen.
Die reflex vind ik lichtelijk weerzinwekkend, en ik denk dat het de moeite waard is om uit te leggen waarom.
Ik heb geen interesse in jouw organisatie. Niet negatief, niet positief. Je bedrijf is voor mij een meetpunt in een systeem, en het systeem is waar het over gaat. Als ik jouw site meet en er komt iets uit, dan is dat interessant omdat het iets zegt over hoe het overal werkt, niet omdat jij het bent.
Het gaat over een burger die een overheidspagina opent om iets te regelen wat hij moet regelen, en die daarbij aan een handvol partijen wordt doorgegeven die hij nooit heeft gezien. Het gaat over het feit dat dit systematisch nadelig uitpakt, dat het soms de wet overtreedt, en dat het vaak ook gewoon niet deugt zonder dat er een wet aan te pas hoeft te komen.
Dat is de reden dat ik meet. Niet omdat een specifiek bedrijf mijn aandacht verdient, maar omdat iemand het optelsom moet maken van wat er met gewone mensen gebeurt.
Wie een meting leest als een aanval op zijn organisatie, gaat er stilzwijgend van uit dat de organisatie het onderwerp is. Dat is hetzelfde denken dat ervoor zorgt dat de afweging binnen zo'n organisatie meestal ook zo verloopt: wat levert dit ons op, wat kost dit ons, hoe komen wij hieruit.
In die afweging komt de burger voor als risico, niet als partij met een recht. En dan wordt het mogelijk om te besluiten dat inkomsten uit gedragsdata zwaarder wegen dan het grondrecht van de mensen die je bedient.
Dat besluit wordt zelden expliciet genomen. Het ontstaat doordat niemand in de kamer de andere kant vertegenwoordigt.
De zin "wij vinden privacy belangrijk" helpt ook niet. Die staat in vrijwel elke privacyverklaring die ik lees, inclusief die van de sites waar het meeste misgaat. Een verklaring is een belofte over gedrag. Ik meet gedrag. Als die twee uiteenlopen, is de verklaring het probleem en niet mijn meting.
Wat wel helpt is saai: de meting zelf doen, het verschil verklaren, en repareren wat niet uit te leggen valt. Dat kost een middag voor de meeste dingen die ik aantref. Zie Wat je van een CDN haalt, laadt voor je banner.
Dan schrijf ik dat op, met dezelfde nauwkeurigheid. Ik heb een organisatie beschreven die een fout erkende en zichzelf meldde bij de toezichthouder, en dat stuk was net zo uitgebreid als de stukken waarin iets misgaat. Zie Een grote organisatie kan een fout erkennen en zichzelf melden.
Het gaat niet om jou. Dat is geen belediging. Het is de enige manier waarop dit werk zin heeft.
Wie het hardst roept, verdient in Nederland doorgaans het meest. Niet omdat hij meer levert, maar omdat in zijn vak het resultaat pas veel later zichtbaar is, of nooit. In een keuken, een atelier, een collegezaal of op een veld kan dat niet: daar is de output direct zichtbaar en meteen te beoordelen. Precies in de functies met de meeste macht ontbreekt die directe toets.
Wie het hardst roept, verdient meestal het meest. Niet omdat hij meer heeft geleverd, en niet omdat hij bekwamer is. Ik heb het tegendeel nog moeten zien.
Denk aan het type dat zijn ideeën naar de werkelijkheid schreeuwt in plaats van er zelf de handen aan vuil te maken. Dat type zit in directies, in de politiek, en in het middenkader van vrijwel elke organisatie waar ik binnen heb gekeken. En het wordt beloond.
Dat het bestaat verbaast me niet. Dat we het normaal zijn gaan vinden wel.
Tot ver in de geschiedenis waren leiders mensen die het werk zelf hadden gedaan, of op zijn minst ooit hadden gedaan. Daar kwam het gezag vandaan. Je volgde iemand omdat hij had bewezen dat hij het kon, niet omdat hij overtuigend kon vertellen dat hij het kon.
Dat is grotendeels losgelaten. Wat overblijft is een vorm van leiderschap die uitsluitend uit vertellen bestaat. En de standaardreactie daarop is "ja, zo werkt zakendoen nu eenmaal". Daar ben ik het niet mee eens, en ik denk dat die berusting zelf een deel van het probleem is.
Het scherpst wordt het als je vakken naast elkaar legt waar het resultaat wél direct zichtbaar is.
Een chef-kok. Die moet kunnen koken. Jaren ervaring, onder een andere chef gestaan, kunnen communiceren, uithoudingsvermogen, creativiteit, weerbaarheid, fysiek in orde, en overzicht houden terwijl het misgaat. Je kunt je daar niet naartoe praten. Een slechte week levert slechte recensies op en dan is het klaar met je zaak.
Een kunstenaar. Het werk hangt aan de muur. Er is geen tussenlaag die uitlegt waarom het eigenlijk goed is.
Een student. Je wordt doorgelaten of niet, op je output.
Een sporter. Je zit boven of onder de verwachting, elke week opnieuw, in cijfers.
In al deze gevallen is er een korte lus tussen wat je doet en wat het oplevert. Die lus is de toets.
Bij managers, directies, bestuurders en politici is die lus lang tot oneindig. Het resultaat komt later, en als het er niet is, komt het nog later. Elk heden mag doorgaan voor een tussenstand. Daardoor kan iemand jarenlang rondlopen, leunen op de mensen onder hem, en toch stijgen.
Ik denk dat dit een van de motoren is onder de bredere daling van kwaliteit die ik overal tegenkom. De druk, de drive en de passie die je in een keuken automatisch krijgt, ontbreken in de functies die het meeste bepalen. En wat niet getoetst wordt, verwatert.
Waarom accepteren we dit, sinds wanneer, en wat zou een korte lus zijn voor functies waar de uitkomst pas jaren later zichtbaar is? Dat is geen retorische vraag. Ik heb er nog geen bevredigend antwoord op, en ik denk dat het antwoord er wel moet komen.
Iemand die iets vervelends onder jouw bericht zet, laat je hartslag stijgen. Leg dat eens uit aan iemand van vijftig jaar geleden. We verdedigen en onderhouden sinds kort een stuk grondgebied dat niet bestaat in de ruimte, en het lichaam reageert erop alsof er iemand in de tuin staat.
Het lichaam reageert alsof er iemand in de tuin staat¶
Iemand zet iets onaardigs onder jouw bericht. Je hartslag gaat omhoog. Je merkt het in je borst, je leest het opnieuw, je denkt er 's avonds nog aan.
Leg dat eens uit aan iemand van vijftig jaar geleden. Een vreemde heeft een zin geschreven op een plek die van niemand is, en jouw lichaam reageert alsof er iemand op je erf staat.
Dat is precies wat er gebeurt. We hebben er territorium bij gekregen.
Territoriumgedrag is oud en het zit diep. Een plek als de jouwe ervaren, alert worden als iemand die plek betreedt, en fysiek in de verdediging schieten bij een indringer, dat is geen aangeleerd gedrag maar een reactie die al klaarlag.
Wat nieuw is, is dat er sinds kort plekken bestaan die aan die beschrijving voldoen zonder ruimte in te nemen. Een profiel. Een tijdlijn. Een groep. Een reactiesectie onder iets dat jij hebt gemaakt. Dat gedraagt zich als grondgebied: het heeft een grens, het heeft een eigenaar, er zijn mensen die er horen en mensen die er binnendringen.
Het lichaam kent het onderscheid tussen grond en scherm niet. Het kent alleen de vraag of iemand jouw plek betreedt.
Grondgebied verdedigen kost energie. Dat gold altijd al, maar het was begrensd: je had één erf, één dorp, één plek waar je hoorde. Nu heeft de gemiddelde persoon er een stuk of vijf bij, allemaal met eigen grenzen, eigen indringers en eigen onderhoud, en ze zijn allemaal permanent open.
Ik denk dat een deel van de vermoeidheid die mensen aan sociale media toeschrijven hier vandaan komt. Niet van de hoeveelheid informatie, maar van het feit dat er onafgebroken een stuk terrein bewaakt moet worden dat er vijftig jaar geleden niet was.
Dit is een gedachte, geen bevinding, en ik label hem als zodanig. Ik heb geen meting die aantoont dat de fysiologische reactie op een online indringer dezelfde is als op een fysieke. Wat ik heb is de eigen waarneming, en het feit dat de beschrijving verdacht goed past.
Wat het zou toetsen: fysiologische metingen bij mensen die een grensoverschrijding op een eigen online plek meemaken, vergeleken met een neutrale prikkel van dezelfde emotionele lading. Als de reactie territoriaal is, zou hij moeten verschillen van gewone ergernis. Dat is te doen, en ik weet niet of het al gedaan is.
Een browser is een vertaler die code omzet in beeld, en hij is de laatste jaren steeds meer jouw kant gaan kiezen. Hij blokkeert cookies van derden, verbergt je IP-adres, en beperkt wat een script mag zien. Bijna alle technieken waar ik over schrijf bestaan om precies die bescherming te omzeilen. Wie dat eenmaal ziet, leest het nieuws over tracking anders.
Een website is geen plaatje dat wordt opgestuurd. Het is een verzameling instructies, en jouw browser voert die uit. Hij haalt een tekstbestand op, leest daarin welke lettertypen, afbeeldingen, scripts en stijlen erbij horen, haalt die ook op, en bouwt daaruit het beeld dat jij ziet.
Dat is elke keer opnieuw een kleine verbouwing, in een paar honderd milliseconden. De browser is de vertaler tussen wat een maker heeft opgeschreven en wat jij te zien krijgt.
En hier zit het punt dat de meeste mensen missen: die vertaler werkt voor jou. Niet voor de website.
De afgelopen jaren heeft je browser een reeks beschermingen erbij gekregen, zonder dat je erom vroeg:
Cookies van derden worden geblokkeerd of afgeschermd. Een site kan niet meer zomaar een cookie van een advertentiebedrijf laten plaatsen die je over duizend andere sites herkent.
Scripts zitten in een doos. Ze mogen niet zomaar bij je bestanden, je camera, je locatie of andere tabbladen.
De verwijzende pagina wordt ingekort. Waar je vandaan kwam, wordt niet meer volledig doorgegeven.
Herkenning aan je toestel wordt lastiger gemaakt. Sommige browsers geven expres vage antwoorden op vragen over je scherm, je lettertypen of je grafische kaart.
Opslag wordt opgeruimd. Wat een site achterlaat, verdwijnt sneller dan vroeger.
Dit gebeurt allemaal onder de motorkap. Je merkt het niet, want als het goed werkt, zie je niets.
En daarom bestaat vrijwel alles waar ik over schrijf¶
Zodra je dit ziet, valt het hele veld op zijn plek. Bijna elke techniek die ik meet, is een antwoord op een bescherming die de browser heeft ingebouwd.
De browser blokkeert cookies van derden. Dus verplaatst men de tracker naar een subdomein van de site zelf, via een omleiding in de naamgeving. Voor de browser is het dan eigen verkeer, en de blokkade grijpt niet. Zie CNAME-cloaking zit op vier op de tien overheidssites.
De browser laat je opslag opruimen. Dus herkent men je aan eigenschappen die je niet kunt wissen: schermformaat, lettertypen, grafische kaart, tijdzone. Er wordt niets opgeslagen, dus er is niets te verwijderen. Zie Fingerprinting ontwijkt je weigering door niets op te slaan.
Je browserkeuze doet meer dan je cookiekeuze. Welke browser je gebruikt en hoe hij staat ingesteld, bepaalt meer dan welk vinkje je aanklikt. Dat is een oncomfortabele waarheid voor iedereen die denkt dat weigeren genoeg is.
Wat ik meet, meet ik vanuit de browser. Mijn scanner is een echte browser die doet wat jij doet. Daarom is alles wat ik vind een ondergrens: wat de browser niet ziet, zie ik ook niet. Wat er op de server van een site gebeurt nadat het verkeer daar is aangekomen, blijft buiten beeld. Zie Hoe mijn scanner werkt, van bezoek tot bewijsstuk.
Je hebt geen gereedschap nodig om dit een keer met eigen ogen te zien.
1. Open een willekeurige nieuwssite.
2. Druk op F12, of rechtermuisknop en dan Inspecteren.
3. Ga naar het tabblad Netwerk en herlaad de pagina.
Wat je dan ziet is de volledige verbouwing: elk bestand dat wordt opgehaald, van welke server, hoe groot en hoe lang het duurde. Bij een gemiddelde nieuwssite staan daar honderden regels, en een flink deel daarvan gaat naar bedrijven waar je nooit van hebt gehoord.
Dat is geen verborgen kennis. Het staat er gewoon, in elke browser, altijd. De vertaler laat je meekijken in zijn eigen werk.
Een tolk kiest partij, en dat doet je browser dus ook. Maar een tolk wordt door iemand betaald, en dat geldt hier ook.
De grootste browser ter wereld wordt gemaakt door een bedrijf dat zijn geld verdient aan advertenties. Dat betekent niet dat die browser slecht is, want hij bevat veel van de beschermingen hierboven. Het betekent wel dat de partij die de regels van het spel schrijft, ook een van de spelers is.
Ik ben niet de enige die meet en publiceert, al zijn we met weinig. Tien plekken waar hetzelfde probleem op een andere manier is opgelost, met per plek wat er beter werkt dan bij mij en wat ik overneem. Wie zijn eigen werk wil verbeteren, kijkt eerst naar wie het al langer doet.
Ik krijg regelmatig te horen dat wat ik doe uniek is. Dat klopt voor Nederland, en dat is eerder een probleem dan een compliment. Buiten Nederland bestaat dit werk wel, in verschillende vormen, en op een paar punten doen ze het aantoonbaar beter dan ik.
Hieronder tien plekken, met per plek wat ik ervan overneem. Alle tien zijn nagelopen op de datum van dit stuk en waren bereikbaar.
Een enkele site met duizenden onderling verbonden stukken, elk met metadata over hoe zeker de auteur is, hoe belangrijk hij het vindt, en wanneer het voor het laatst is herzien. Niets is af, alles wordt bijgewerkt, en dat is zichtbaar.
Wat ik overneem: het idee dat een stuk een staat heeft in plaats van een publicatiedatum. Mijn labels bevinding, beginsel en gedachte komen daarvandaan. Wat ik nog niet heb: zijn annotaties bij verwijzingen, waarbij je bij het zweven over een link al ziet wat er achter zit.
Een redactie die een meetinstrument bouwde waarmee iedereen zelf een website kan scannen, en daar journalistiek omheen maakt. De lezer kan de meting overdoen op zijn eigen favoriete site.
Dat is precies het model waar ik zelf in werk: een instrument dat het bewijs levert, plus stukken die uitleggen wat het betekent. Zie Hoe mijn scanner werkt, van bezoek tot bewijsstuk. Wat zij beter doen is de drempel: bij hen typ je een adres in en je krijgt een leesbaar rapport. Bij mij is de scanner een ding dat ik draai.
Dat is het duidelijkste gat in mijn werk, en het staat op de lijst.
Onderzoeksrapporten over de handel in persoonsgegevens, met schema's die een keten van tientallen partijen op één pagina begrijpelijk maken. Waar ik meet wat er gebeurt, brengen zij in kaart wie er in de keten zit en waarom.
Wat ik overneem: het schema als product. Een goede tekening van een keten overleeft de tekst eromheen.
De Ierse burgerrechtenraad heeft van meetwerk aan advertentieveilingen een handhavingszaak gemaakt. noyb, de organisatie van Max Schrems, dient stelselmatig klachten in en publiceert de uitkomsten.
Wat ik ervan leer: een meting is pas een resultaat als iemand er iets mee moet. Zij bouwen het dossier zo dat een toezichthouder het kan overnemen. Zie Zonder geldige toestemming is de cookie onrechtmatig voor hoe ik dat probeer te doen.
Herhaalbare tests op browsers, met de uitslag in een tabel die maandelijks wordt bijgewerkt. Iedereen kan de test zelf draaien en de uitslag narekenen.
Dat is wat mijn Nationale Privacy Index probeert te zijn. Wat zij beter doen: de test staat er in code bij, dus een leverancier die het oneens is kan precies zien waarop hij zakt.
Meetdata over trackers, publiek beschikbaar, uit een browserextensie met veel gebruikers. Grote dekking, weinig diepte per site.
Mijn data is het spiegelbeeld: veel diepte per site, veel kleinere dekking. Dat is geen tekortkoming van een van beide, het zijn twee soorten meting. Wel iets om te vermelden als iemand mijn cijfers naast de hunne legt.
Bert Hubert schrijft in het Nederlands over techniek en overheid, voor ongeveer hetzelfde publiek als ik, met dezelfde dynamiek van stukken die via sociale media rondgaan.
Wat ik ervan leer: hij legt technische zaken uit zonder de lezer dom te vinden en zonder in jargon te vervallen. Dat is moeilijker dan het lijkt.
Enorme output aan korte stukken, allemaal met een eigen adres, allemaal doorzoekbaar, allemaal onderling gelinkt. Wie iets zoekt dat hij ooit is tegengekomen, vindt het daar terug.
Dat is precies wat mijn manuscript nog niet was toen ik eraan begon: alles stond op één adres, dus niets was apart vindbaar of deelbaar. Dat is nu opgelost, en dit is de plek waar het idee vandaan kwam.
1. Een instrument dat de lezer zelf kan draaien. Bij mij draait de scanner, en de lezer krijgt de uitkomst. Dat maakt hem afhankelijk van mijn woord, en dat is precies wat ik bij anderen bekritiseer.
2. Schema's die de keten tonen. Mijn ketens staan nu in tekst en tabellen.
3. Een publieke testdefinitie. Wie zakt voor mijn index, kan niet in de code kijken waarom.
En één ding dat ik heb en zij niet: metingen over de volle breedte van de Nederlandse overheid, met bewaard bewijs per site. Dat is het stuk waar niemand anders aan komt, en het is de reden dat dit werk in Nederland toch ergens toe leidt.
Raakt iemand de vrijheid van meningsuiting aan, dan staat het land op zijn kop. Privacy staat in dezelfde grondwet en wordt dagelijks op grote schaal geschonden op het glazen plaatje waar we uren per dag naar kijken, zonder enige verontwaardiging. Dat verschil komt niet doordat mensen privacy minder belangrijk vinden. Het komt doordat elk mechanisme dat woede opwekt bij tracking stelselmatig ontbreekt.
Raak de vrijheid van meningsuiting aan en het land staat op zijn kop. Mensen posten, demonstreren, lijmen zich aan het wegdek. De verontwaardiging is onmiddellijk en breed.
Privacy staat in dezelfde grondwet, artikel 10, en wordt dagelijks op grote schaal geschonden. Niet ver weg, maar op het glazen plaatje waar de gemiddelde Nederlander uren per dag naar kijkt. Op 59,8 procent van de 1.718 overheidssites die ik in juli mat, gebeurde het al voordat de bezoeker iets kon kiezen.
Daar komt geen mens voor de deur uit.
De makkelijke verklaring is dat mensen privacy minder belangrijk vinden. Die klopt niet met wat ze zeggen als je het vraagt, en ook niet met hoe ze reageren als het hen persoonlijk overkomt. De betere verklaring is dat elk mechanisme dat verontwaardiging opwekt bij tracking stelselmatig ontbreekt.
Censuur heeft een moment. Iemand wordt gestopt, een bericht verdwijnt, een spreker wordt geweigerd. Er is een dader, een slachtoffer en een tijdstip.
Tracking heeft geen moment. Het is een doorlopend proces zonder waarneembare gebeurtenis. Ons morele apparaat is gebouwd op voorvallen, niet op processen. Er is nooit iets gebeurd om boos over te worden.
Dat is precies waarom het meetbaar maken het werk is. Een meting maakt van een proces een gebeurtenis: op deze dag, om dit tijdstip, op deze pagina, zonder dat er iets geklikt was, stonden deze cookies er al. Zie Hoe mijn scanner werkt, van bezoek tot bewijsstuk.
Surveillance heet marketing. Het heet cookies, analytics, personalisatie, partners, je ervaring verbeteren. Dat is geen toeval maar ontwerp.
Het woord koekje activeert geen enkel alarm. Zet er de feitelijke tekst neer en de klikratio ziet er anders uit. Op de gemeten overheidssites vond ik een cookie die letterlijk stg_returning_visitor heet, op 730 sites, geplaatst voordat de bezoeker iets mocht kiezen. Een cookie die vastlegt dat jij hier eerder was. Zo staat het er, in het Engels, in een naam die niemand leest.
Jij klikte akkoord. Daarmee is een structurele machtsongelijkheid juridisch omgezet in een vrijwillige transactie tussen gelijken.
Bij censuur bestaat die fictie niet. Niemand tekent een formulier waarin hij afziet van spreken. Dit is het enige grondrecht dat je met één klik kunt weggeven aan een partij die je nooit ziet, en dat is geen ongelukje in de wetgeving maar de kern van hoe het geregeld is.
Wat die klik waard is, staat elders: op 77,8 procent van de gemeten sites zonder herkende toestemmingsmodule veranderde er na een expliciete weigering niets. Zie Weigeren doet op vier van de vijf sites niets.
Verzet tegen censuur is luider spreken. De handeling versterkt je positie.
Verzet tegen tracking is weigeren, en weigeren kost je toegang. Geen bank, geen werk, geen schoolapp, geen DigiD. Wie consequent nee zegt, sluit zichzelf uit van de samenleving.
Boosheid zonder uitweg dooft. Dat is aangeleerde hulpeloosheid, en ze is hier netjes ingebouwd.
Onze grondrechten-intuïtie is verticaal: burger tegen staat. We zijn getraind om staatsmacht te wantrouwen en veel minder om bedrijfsmacht te wantrouwen.
Maar de staat koopt gewoon in bij de bedrijven. En op overheidssites is de grootste ontvanger de overheid zelf: op 668 van 669 sites waar rijksoverheid.nl als partij optrad, laadde die verbinding al voor enige toestemming. Zie De rijksbrede analytics staat op 668 sites voor toestemming.
Precies het onderscheid dat onze woede uitschakelt, is het gat dat is opgezocht.
Waarom artikel 10 niet redt wat artikel 7 wel doet¶
Bij meningsuiting is de handhaving de publieke woede zelf. Gratis, onmiddellijk, en niet af te schaffen.
Bij de persoonlijke levenssfeer is de handhaving doorgeschoven naar de AVG en naar een toezichthouder met een wachtrij. Het recht staat op papier, de sanctie staat in de wachtstand. Zie De privacytoezichthouder maakte melden steeds moeilijker.
Als het ontbrekende element zichtbaarheid is, dan is meten geen voorbereiding op de interventie. Meten ís de interventie.
Een cijfer maakt de gebeurtenis die er niet was. Een gepubliceerde meting geeft een dader, een tijdstip en een slachtoffer aan iets dat daarvoor alleen een proces was. Dat is de hele reden dat ik het bewijs bewaar en de methode erbij zet, en niet alleen de conclusie opschrijf. Zie Mijn werkwijze: van vermoeden naar bevinding.
De vraag klinkt als cultuurpessimisme, en dat wil ik hem niet laten zijn. Daarom stel ik hem meetbaar: waar zou je het zien als het antwoord nee is, en zie ik dat in mijn eigen metingen terug? Het eerlijke antwoord is dat ik onbekwaamheid niet kan onderscheiden van verkeerde prikkels, en dat het onderscheid uitmaakt voor wat je eraan doet.
"Heeft Nederland nog genoeg bekwame mensen" is een vraag die makkelijk ontaardt in vroeger-was-alles-beter. Daar heb ik niets aan, en de lezer ook niet.
Dus stel ik hem meetbaar: als het antwoord nee is, waar zou je dat dan zien? En zie ik dat in mijn eigen metingen terug?
Onbekwaamheid in het bouwen van digitale diensten zou zich moeten uiten in fouten die niemand wil, die niemand iets opleveren, en die met basiskennis te vermijden waren. Niet in keuzes die geld opbrengen, want dat zijn gewoon keuzes.
Dat onderscheid is de hele analyse. Twee soorten fout:
FOUT UIT ONKUNDE niemand wint erbij, makkelijk te repareren
FOUT UIT PRIKKEL iemand verdient eraan, moeilijk te repareren
In de scan van 1.718 overheidssites vind ik allebei, en ze zijn te scheiden.
Aan de kant van de onkunde:
1.034 sites zonder Content-Security-Policy
662 sites zonder HSTS
924 sites met een referrer-policy die de bezochte pagina laat weglekken
608 sites waar via de homepage geen privacyverklaring te vinden was
Dit zijn geen verdienmodellen. Niemand wordt rijker van een ontbrekende beveiligingsheader. Het zijn regels die in elke handleiding staan, in vijf minuten te zetten zijn, en die op de meerderheid van de gemeten overheidssites ontbreken.
Aan de kant van de prikkel staat het spiegelbeeld: trackers voor toestemming, doorgifte naar derde landen, een weigerknop zonder bedrading. Daar verdient iemand aan, of het scheelt iemand werk.
Het interessante is dat die twee elkaar niet uitsluiten maar versterken. Sites mét een Content-Security-Policy trackten in mijn meting vaker voor toestemming dan sites zonder: 86,1 tegen 42,4 procent. De verklaring is niet dat beveiliging slecht is voor privacy. De verklaring is dat een professioneel gebouwde site een professioneel bureau heeft, en dat zo'n bureau ook de advertentiestack meelevert.
Dus: waar bekwaamheid stijgt, stijgt de naleving van technische normen én de omvang van de tracking. Dat is geen bekwaamheidsprobleem meer.
Ik kan uit mijn data niet vaststellen dat Nederland te weinig bekwame mensen heeft. Wat ik wel zie:
1. Basale technische hygiëne ontbreekt op de meerderheid van de gemeten overheidssites. Dat wijst op ontbrekende kennis, ontbrekende tijd, of ontbrekende controle.
2. De grootste bron van verkeer vóór toestemming bestaat uit gewone bouwkeuzes: lettertypen, kaarten, scriptbibliotheken. Dat is onwetendheid, geen verdienmodel. Zie Wat je van een CDN haalt, laadt voor je banner.
3. Waar wel kennis aanwezig is, wordt die niet ingezet om de burger te beschermen maar om de dienst te bouwen zoals hij besteld is.
Punt 3 is het punt. De vraag is niet of er genoeg bekwame mensen zijn. De vraag is of bekwaamheid ergens toe leidt.
Digitale dienstverlening zit in de tweede categorie. Een site die persoonsgegevens weglekt, werkt gewoon. Hij ziet er goed uit, hij laadt snel, de bezoeker merkt niets. De fout is onzichtbaar tot iemand hem meet.
Of het aandeel bekwame mensen daadwerkelijk daalt, kan ik niet zeggen. Daarvoor zou ik dezelfde meting over meerdere jaren moeten leggen met dezelfde methode en dezelfde sites, en de fouten uit onkunde apart moeten tellen van de fouten uit prikkel. Dat is te doen: ik heb runs vanaf mei, en de scanner registreert per bevinding welk type het is.
Tot die reeks er ligt is dit een gedachte en geen bevinding, en zo staat het label er ook boven.
Stop met tegenvechten. Ga de strijd aan met je angst in plaats van tegen je angst, en behandel hem niet als ziekte of tegenstander. Leer ermee leven in plaats van ondanks te leven. Ik vermoed dat dit voor meer geldt dan angst alleen, en dat het bij depressie en mogelijk bij andere aandoeningen dezelfde kant op werkt.
De standaardhouding tegenover angst is bestrijden. Je hebt er last van, dus het moet weg. Het is een storing, een ziekte, iets wat je niet zou moeten hebben, en de opdracht is om er vanaf te komen.
Ik denk dat die houding het in stand houdt.
Wat mij verder bracht was de omkering: ga de strijd aan mét je angst in plaats van tegen je angst. Niet als tegenstander, maar als iets dat meekomt. Leer ermee leven in plaats van ondanks te leven.
Dat verschil is niet semantisch. Leven ondanks je angst betekent dat elke dag een overwinning moet zijn, en dat elke dag zonder overwinning een nederlaag is. Leven ermee betekent dat de dag gewoon doorgaat.
Dit is geen origineel idee, en dat vind ik geruststellend. De hele beweging binnen de psychologie die acceptatie centraal stelt, werkt op deze omkering: niet de klacht bestrijden maar de worsteling ermee loslaten, en ondertussen doen wat je van waarde vindt. Bij angststoornissen is exposure, dus opzoeken in plaats van vermijden, al decennia de best onderbouwde aanpak die er is.
Wat ik hier beschrijf is dus geen alternatief voor behandeling. Het is ongeveer wat de behandeling zegt, opgeschreven vanuit de ervaring in plaats van vanuit de theorie.
Mijn vermoeden is dat dit verder reikt dan angst. Bij depressie lijkt hetzelfde patroon te spelen: het gevecht tegen de toestand kost meer dan de toestand. En ik vraag me af of het bij lichamelijke aandoeningen die niet overgaan ook zo werkt, waar de omslag van bestrijden naar meedragen het verschil maakt tussen een leven eromheen en een leven ermee.
Dat laatste is een gedachte en geen bevinding. Ik heb er de ervaring niet voor, en het is precies het soort uitspraak waarvan ik wil dat een lezer hem als vermoeden leest.
En er loopt een lijn naar iets dat ik elders in dit manuscript beweer: dat doorstane tegenslag mensen vormt op een manier die comfort niet kan. Zie Doorstane tegenslag vormt mensen sterker dan comfort. Angst omarmen in plaats van bestrijden is daar de persoonlijke versie van.
Ik begon dit met een simpele vraag. Als ik een overheidspagina open, precies zoals een burger dat doet, wie leest er dan mee? Ik koos een concreet voorbeeld. Een perspagina op minvws.pr.co, een domein van het ministerie van Volksgezondheid, Welzijn en Sport. Een gevoelig gemarkeerd domein, want gezondheid is een bijzondere categorie onder de AVG.
De meting telde daar vierendertig unieke derde partijen die meelezen. Niet in theorie. Bij het openen van die ene pagina laadde de browser verkeer naar vierendertig bedrijven die niet het ministerie zijn. Twaalf van die vierendertig kregen hetzelfde herkenningsnummer aangereikt. Dat is het detail dat het bereik van zo'n bezoek laat zien. Een identifier die twaalf bedrijven delen, koppelt hun losse waarnemingen aan elkaar. Ze kunnen achteraf vaststellen dat het om dezelfde bezoeker ging. Dat mechanisme heet cookie-sync, en het is de reden dat het aantal partijen niet los te zien is van wat ze samen kunnen. Zie Cookie-sync laat losse partijen dezelfde persoon herkennen.
De burger ziet één overheidssite. Er kijken vierendertig bedrijven mee. Dat is het beginpunt van dit stuk, en de rest volgt eruit.
De eerste tegenwerping die ik bij mezelf had, was dat dit misschien een uitschieter is. Een perspagina op een subdomein van een externe leverancier, niet de kern van de overheid. Dus keek ik breder, over alle gemeten overheidsdomeinen heen.
Het beeld hield stand. DoubleClick, het advertentienetwerk van Google, staat op vierenvijftig gemeten overheidssites. Twee daarvan zijn als gevoelig gemarkeerd. Dit is geen analytics-dienst die je met wat goede wil nog als functioneel kunt verdedigen. DoubleClick bestaat om advertenties te veilen en te richten. De aanwezigheid ervan op een overheidsdomein betekent dat het bezoek aan die overheid in principe raakvlak heeft met de reclamemarkt.
Ik keek ook naar de bredere categorie. Van de negenentwintig bedrijven in de meting die ik als zuivere advertentiebedrijven classificeer, komt de helft op minstens één overheidssite voor. Zuiver wil zeggen dat hun functie op de pagina reclame is, en niets anders wat je nog nodig zou kunnen achten. De plek waar je je paspoort aanvraagt of je zorgtoeslag regelt, deelt je bezoek met partijen die van dat bezoek een advertentieprofiel maken. Dat is de tweede bevinding, en ze is harder dan de eerste, omdat ze niet op één pagina rust. Zie ook Advertentie-infrastructuur in een zorgjas is een bouwkeuze.
Overheid en commercie draaien dezelfde ruggengraat¶
Toen viel het derde stuk op zijn plek. Ik had eerder de commerciële nieuwssites gemeten, de grote ranglijst van uitgevers en hun advertentiepartners. Ik legde die twee metingen naast elkaar. De overlap was groot.
Meer dan honderd bedrijven komen zowel op de commerciële ranglijst voor als op de gemeten overheidssites. De koplopers zijn steeds dezelfde. De Google-infrastructuur, de tag-managers en de advertentienetwerken. Dat is geen toeval en het vraagt ook geen kwade opzet om te verklaren. De overheid koopt haar webbouw in bij dezelfde markt die de nieuwssites bedient. Een tag-manager die standaard bij een bureau in de gereedschapskist zit, komt zo op een gemeentesite terecht net zo makkelijk als op een krant.
De vierde vraag was waar al die partijen staan. Een tracker op een Nederlandse overheidssite is één ding. Een tracker die de data naar een server buiten de EU stuurt, is een tweede vraag met een eigen juridische lading.
De cijfers over de hele meting. Van de 685 bedrijven die op de gemeten sites meelezen, staan er 487 op servers in de Verenigde Staten. Dat is eenenzeventig procent, ongeveer zeven op de tien. Slechts honderdeenenzeventig zitten binnen de EU. De Verenigde Staten is een land zonder Europees adequaatheidsbesluit, wat betekent dat een doorgifte daarheen aparte waarborgen vereist onder de AVG. Het is niet verboden. Het is ook niet vanzelf in orde.
Het verlaten van de EU is bij deze meting de normale gang van zaken geworden. Voor zeven op de tien meelezers is de data-uitgang de standaardroute. Ik houd hierbij twee assen strikt los. De ene as is waar de partij juridisch thuishoort, de andere is waar de server fysiek staat. Een Amerikaans bedrijf dat in Frankfurt host is nog steeds een Amerikaans bedrijf, en een Europees bedrijf kan best in de VS draaien. Zie Waar het pakket landt en wie het kan vorderen zijn twee assen en In Europa gehost is geen vrijwaring.
Ik hecht eraan dat je kunt zien hoe deze getallen tot stand komen, want anders is het een bewering en geen bevinding. De meting leest het echte netwerkverkeer van de browser mee, opgeslagen als HAR-bestand. Dat is de lijst van elk verzoek dat de pagina doet, met bestemming en inhoud. Ik meet zoals een bezoeker de site ervaart, met een echte browser die de pagina volledig laadt, niet met een kale scanner die de helft van het verkeer mist. Zie Netwerkverkeer lezen via HAR-files en Meet zoals een bezoeker, niet zoals een scanner.
Ik ben streng op het onderscheid tussen wat gemeten is en wat afgeleid. Drie dingen zijn hard gemeten. Het aantal partijen, want elk verzoek staat in het HAR. De gedeelde identifier, want die waarde is letterlijk zichtbaar in de verzoeken. En de aanwezigheid van een bekende partij als DoubleClick, want het domein staat er.
Eén ding staat onder voorbehoud, en dat noem ik expliciet. De landtoewijzing leunt op een GeoIP-database, en die database veroudert. Een IP-adres kan van eigenaar of locatie wisselen zonder dat de database bijgewerkt is. De zevenentig-procent is dus mijn beste meting met die kanttekening, niet een absolute waarheid tot op het bedrijf nauwkeurig. De richting van het beeld verandert daar niet door, de exacte grens tussen 487 en een iets ander getal wel. Zo hoort een bevinding gelabeld te worden. Zie Label elke bevinding op bewijsniveau en Een naam in de code is nog geen tracker.
Ik trek hier geen conclusie over intentie. Ik denk dat het merendeel van dit patroon voortkomt uit ingekochte gereedschapskisten en standaardinstellingen, uit bouwers en beslissers die vaak niet van elkaars keuzes weten. Dat maakt het niet minder relevant. Het maakt het juist structureel, want een structureel probleem los je niet op met één boze brief.
Voor mijn eigen werk betekent dit drie dingen. Het bevestigt dat overheid en commercie langs dezelfde meetlat horen, omdat ze op dezelfde infrastructuur draaien en de burger bij de overheid geen uitweg heeft. Het bevestigt dat de meting het zwaarste werk moet doen, want een bewering zonder HAR is niet te vertrouwen en een meting met een verlopen GeoIP-database moet je eerlijk labelen. En het laat zien waar de handhaving achterloopt op het geld, want de wet is duidelijk en het verkeer stroomt intussen gewoon door. Zie Wet en handhaving lopen achter op het geld.
De kern die overeind blijft, is nuchter en hard tegelijk. Je opent een overheidspagina, en er lezen vierendertig bedrijven mee. Voor zeven op de tien van hen verlaat je bezoek de EU. De partijen die dat doen, zijn dezelfde als op de commerciële sites. Dat is de meting, en dat is wat ze liet zien.
Privacy wordt in Nederland vooral op papier behandeld. Er is beleid, er zijn privacyverklaringen, er zijn juridische stukken en soms een DPIA. Dat papier beschrijft wat een organisatie zegt te doen met de gegevens van haar bezoekers. De werkelijkheid ligt ergens anders. Die ligt in de code, in wat een site of app op het moment van gebruik daadwerkelijk uitvoert. Daar kijkt bijna niemand.
Het papier en de code zijn twee losse dingen. Het papier is de belofte. De code is de uitvoering. Ze kunnen ver uiteenlopen zonder dat iemand het merkt, want ze worden door verschillende mensen gemaakt en door verschillende mensen gelezen. De jurist stelt de verklaring op. De ontwikkelaar schrijft de code en plakt er een tagmanager bij. De bestuurder ondertekent het beleid. Wie de drie naast elkaar legt en controleert of ze hetzelfde zeggen, is zeldzaam. Die kloof tussen de mensen aan de knoppen en de mensen met de pen is een terugkerend patroon, zie De bouwers en de beslissers weten vaak niet van elkaar.
Ik ga ervan uit dat de meeste organisaties het niet expres verkeerd doen. Het papier klopt in hun hoofd. Ze hebben een cookiebanner geplaatst, een verwerkersovereenkomst getekend en een DPIA in een la liggen. Wat de pagina live over de lijn stuurt naar tientallen andere partijen, heeft niemand nagemeten. De belofte en de uitvoering leven in aparte werelden, en zolang niemand ze samenbrengt, blijft het verschil onzichtbaar.
Een privacyverklaring kan het ene beloven terwijl de code het andere doet. Beide zijn op datzelfde moment waar. De verklaring staat er echt, en de code draait echt. Ze spreken elkaar tegen, en toch bestaan ze naast elkaar. Van die twee is er precies één die je kunt meten. De verklaring is een tekst over intenties. De code is een gebeurtenis die je kunt vastleggen.
Hier zit ook de juridische kant. Artikel 5 lid 2 van de AVG legt de verwerkingsverantwoordelijke een verantwoordingsplicht op. Die moet kunnen aantonen dat de verwerking aan de beginselen voldoet. Het papier is precies dat aantonen: de verklaring, het register, de DPIA. De meting toetst of het aantonen klopt. Zolang niemand meet, is de verantwoordingsplicht een stapel documenten die zichzelf goedkeurt.
Meten doe ik door het echte verkeer van een pagina vast te leggen. Een browser die de site bezoekt schrijft elke aanvraag weg in een HAR-bestand, een JSON-log van alles wat er over de verbinding ging. Daarin staat welke hosts zijn aangeroepen, welke cookies meegingen en welke gegevens zijn verstuurd, zie Netwerkverkeer lezen via HAR-files. Dat log is de uitvoering, zwart op wit.
import json
from urllib.parse import urlparse
with open("bezoek.har", encoding="utf-8") as f:
har = json.load(f)
eigen = "voorbeeld.nl"
derden = {}
for entry in har["log"]["entries"]:
host = urlparse(entry["request"]["url"]).hostname or ""
if host and not host.endswith(eigen):
derden[host] = derden.get(host, 0) + 1
for host, n in sorted(derden.items(), key=lambda x: -x[1]):
print(f"{n:4d} {host}")
Dit telt de aanvragen naar hosts die niet bij het eigen domein horen. Als de verklaring zegt dat er geen gegevens naar derden gaan en deze lijst staat vol met advertentie- en analyse-domeinen, dan is de tegenspraak gemeten. De verklaring blijft staan, en de lijst blijft staan. De lijst wint, want die is controleerbaar.
Bij het meten geldt één harde eis. Meet zoals een echte bezoeker, met een echte browser die de pagina rendert en de scripts uitvoert, zie Meet zoals een bezoeker, niet zoals een scanner. Een kale scanner die alleen de HTML ophaalt, ziet de helft niet, want veel tracking laadt pas na uitvoering van JavaScript of pas na een klik op de banner. En let op de andere kant: een lege lijst kan ook betekenen dat de meting niet goed liep. Een mislukte meting bewijst geen schone app, zie Een mislukte meting is geen schone app.
Meestal is de tegenspraak subtiel. Je moet het verkeer lezen en de partijen thuisbrengen om te zien wat er misgaat. Soms is het grover. Bij de Kiesraad stond in de configuratie de instelling respectVisitorsPrivacy op false. Met zoveel woorden, in de code, voor iedereen die keek. De privacy van de bezoeker werd niet gerespecteerd, en dat stond er letterlijk als zodanig ingesteld.
Het bijzondere is niet dat het verborgen was. Het was er niet in verstopt. Het stond er, leesbaar, met een naam die precies zegt wat de schakelaar doet. Het bijzondere is dat niemand het had gelezen. De blindheid is hetzelfde of de schending nou luid of stil in de code staat. Zolang niemand de code naast de belofte legt, maakt het niet uit hoe openlijk het erin staat. Het gaat over meer dan de Kiesraad; dit patroon zag ik breder op overheidssites, zie Wat de meting op overheidssites liet zien.
Twee bewijsniveaus, en het verschil hoort in het rapport¶
Er zijn twee manieren om zo'n bevinding hard te maken, en ze zijn niet gelijk. De eerste vind je in de code zelf. Een instelling op false, een tracker-SDK in een gedecompileerde app, een endpoint in de broncode. Dat staat vast in die code. De tweede zie je live gebeuren, op de verbinding, in de HAR: het toestel roept die server echt aan en stuurt die gegevens echt mee.
Beide zijn bewijs. Ze zitten op een verschillend niveau. Een SDK in de code toont dat de mogelijkheid is ingebouwd. Het live verkeer toont dat de mogelijkheid ook wordt gebruikt tijdens een gewoon bezoek. Een app kan een tracker-bibliotheek meedragen die onder de geteste omstandigheden nooit afvuurt. Dan is de code-bevinding waar en is de live-bevinding afwezig, en dat verschil is belangrijk genoeg om op te schrijven.
Daarom label ik elke bevinding op zijn niveau: gemeten, afgeleid of vermoed, zie Label elke bevinding op bewijsniveau. Een naam die in de code opduikt, is een aanwijzing en nog geen sluitend bewijs dat de gegevens ook echt bij die partij aankomen, zie Een naam in de code is nog geen tracker en Een aanwijzing is nog geen bewijs. Wie de twee niveaus door elkaar haalt, maakt een rapport dat op de eerste tegenwerping omvalt. Wie ze scheidt, houdt een rapport over dat elke controle doorstaat.
Code toont het gedrag, het waarom blijft buiten de meting¶
Er is een grens aan wat de code je vertelt. Je leest eruit af wat een app doet. Je leest er niet uit af met welke bedoeling. Het verkeer laat zien dat er een identifier naar een advertentieveiling gaat. Het zegt niets over of dat opzet was, slordigheid, een meegeleverde SDK die iemand vergat uit te zetten, of een bewust verdienmodel.
Een uitspraak over motief is een aanname. Kwade wil, hebzucht, een plan om mensen te verhandelen: dat zijn interpretaties die je op de meting plakt, geen deel van de meting. Ik houd die twee strikt uit elkaar. Ik schrijf op wat er gebeurt en op welk niveau ik het zag. Het waarom laat ik aan wie erover gaat, aan de toezichthouder, aan de organisatie zelf, aan de rechter.
Dat is geen terughoudendheid uit beleefdheid. Het is dezelfde discipline als bij de bewijsniveaus. Zodra ik een motief toeschrijf, verlaat ik het meetbare en ga ik gissen. Dan wordt mijn rapport aanvechtbaar op een punt dat ik nooit heb gemeten. Een gedraging die technisch klopt en toch een verkeerde indruk wekt, is trouwens een eigen categorie die ik apart benoem, zie Technisch juiste uitspraken kunnen een verkeerde indruk wekken. En mijn eigen overtuiging telt niet als meting; een stellige getuige is nog geen betrouwbare bron, zie Een overtuigde getuige is geen betrouwbare meting.
Zelfs de keurmeesters zakken voor hun eigen toets¶
Het venijn zit in de partijen die anderen op privacy aanspreken. Toezichthouders, privacy-organisaties, adviesbureaus die keurmerken uitdelen. Je zou verwachten dat hun eigen code de belofte waarmaakt die zij van anderen eisen. In de meting valt dat tegen. Ook op hun sites laadt de code dingen die ze bij een ander zouden afkeuren, zie De partijen die privacy keuren, zakken zelf voor de toets.
Dat maakt het punt scherper. Het gaat niet om onwil van een enkele achterblijver. De kloof tussen papier en code loopt dwars door de partijen heen die het papier het beste kennen. Zij hebben de verklaringen, zij kennen de wet, en toch draait er in hun eigen uitvoering iets anders dan ze opschrijven. Dat is precies waarom de code de eerlijke bron is. Die trekt zich niets aan van wie je bent of wat je beweert.
De DPIA hoort hier ook thuis. Een DPIA die niemand kan inzien, beschermt niemand. Het document bestaat, het vinkje is gezet, en de inhoud blijft binnen, zie Een DPIA die niemand kan inzien, is geruststelling, geen afweging. Op papier is er verantwoording afgelegd. In de praktijk kan niemand die verantwoording toetsen. Weer die verantwoordingsplicht uit artikel 5 lid 2, die op papier wordt afgevinkt en in de uitvoering nooit wordt nagemeten.
Voor mij volgt hier een vaste werkwijze uit. Ik begin bij een vermoeden en werk toe naar een bevinding die op de meting rust, zie Mijn werkwijze: van vermoeden naar bevinding. Het vermoeden komt vaak van het papier: een verklaring die te mooi klinkt, een banner die te makkelijk sluit. De bevinding komt altijd van de code, uit de HAR, uit het echte verkeer. Wat ik publiceer, is het deel dat ik heb gezien.
Ik leg dezelfde meetlat langs de overheid en langs een willekeurige app, zie Dezelfde meetlat voor de overheid en de app in je broekzak. Een overheidssite die zegt de bezoeker te beschermen, krijgt dezelfde HAR-analyse als een gratis spelletjes-app. Het papier verschilt, de toon verschilt, de wettelijke plicht verschilt. De meting is gelijk. Dat is de enige manier om eerlijk te blijven, want de code kent geen aanzien des persoons.
De kern is simpel. Privacy wordt behandeld als een papieren kwestie, en de echte inhoud zit in code die vrijwel niemand bekijkt. Zolang dat zo blijft, kun je een organisatie die het goed opschrijft niet onderscheiden van een die het goed doet. Ik probeer dat gat te dichten door te meten, één bezoek per keer, en op te schrijven wat er echt over de lijn ging.
Deze notitie bundelt een aantal losse bevindingen die bij elkaar horen. Wet en handhaving lopen achter op het geld.
Het gat tussen wat de wet eist en wat wordt gecontroleerd¶
Op papier is Nederland goed geregeld. Er is een Algemene verordening gegevensbescherming. Er is een Telecommunicatiewet met artikel 11.7a voor cookies. Er is een toezichthouder, de Autoriteit Persoonsgegevens, met de bevoegdheid om boetes op te leggen. Wie alleen de wetteksten leest, zou denken dat het datagebruik in dit land stevig is ingekaderd.
De praktijk is anders. Tussen wat de wet eist en wat daadwerkelijk wordt gecontroleerd, zit een enorm gat. Keihard innoveren was jarenlang de norm. Sneller bouwen, meer meten, meer data. Nu zien we wat dat opleverde. Als zelfs de Belastingdienst zijn gegevensverwerking niet op orde had, met alle juristen en middelen die een ministerie heeft, dan is de relevante vraag niet of andere organisaties het wel op orde hebben. De relevante vraag is wie het ooit zou merken.
Die vraag is scherper dan hij klinkt. De toezichthouder kan onmogelijk alles controleren. Er zijn te weinig mensen. Doorlooptijden lopen op tot maanden. Elke stap is gebonden aan procedures, aan hoor en wederhoor, aan zorgvuldigheid die terecht is maar traag maakt. Een verwerker die vandaag de fout in gaat, kan er jaren mee wegkomen voordat er ook maar een blik op valt. Dit is geen aanklacht tegen de mensen bij de AP. Het is een structureel gegeven. Een handjevol toezichthouders staat tegenover een sector die per dag miljoenen datastromen opent.
Dat is een sterke uitspraak, dus ik zeg erbij op welk niveau ik het bedoel. Dit is een afgeleide observatie, gebaseerd op wat ik in scans terugzie en op wat er publiek over handhaving bekend is. Het is geen bewezen stelling over motieven van individuele partijen. Wat ik wel hard kan maken, is de verhouding. De opbrengst van tracking is doorlopend en groot. De kans op een sanctie is klein en de sanctie komt laat.
Lobby hoort bij dit beeld. Belangenbehartiging rond privacywetgeving is een realiteit, geen complot. Grote partijen hebben de middelen om mee te schrijven aan de kaders waaraan ze zich later moeten houden. Dat verschuift de wet richting het haalbare voor de sector, en dat is precies waar toezicht al zwak staat.
Wat je aan de buitenkant ziet, is vaak etalage. Een keurige cookiebanner. Een privacyverklaring in nette taal. Een lijstje verwerkers dat volledig oogt. Maar de banner kan liegen over het aantal partijen dat meekijkt, zie De cookiemuur toont minder partners dan de code telt. En de tracking kan uit het zicht zijn geschoven naar de server, zie Server-side tagging verplaatst de tracking uit het zicht. Wie het echt wil weten, kijkt achter de vitrine. Naar wat de code doet. Naar wat een overtreding werkelijk kost. Dat is de reden dat ik met HAR-files en meetopstellingen werk in plaats van met de nette verklaring op de pagina. De verklaring en de uitvoering zijn twee verschillende dingen, zie Papier versus code: de verklaring en de uitvoering.
Stel dat een overtreding wel wordt opgemerkt en beboet. Dan nog is het gat niet gedicht. Voor een verwerker met een winstgevend datamodel is een boete vaak een kostenpost die tegen de opbrengst wordt weggestreept. Ik heb dat eerder uitgewerkt in Een boete is voor een groot bedrijf geen straf, maar een rekening. Zolang de verwachte opbrengst van het volgen groter is dan de verwachte boete maal de pakkans, is doorgaan de rationele keuze.
Dat rekensommetje valt op dit moment bijna altijd de verkeerde kant op. De pakkans is laag, want de toezichthouder komt tijd tekort. De boete komt laat, soms jaren na de feiten, en is dan een fractie van wat er in de tussentijd is verdiend. Het probleem hierbij is fundamenteel en het raakt aan iets wat ik vaker tegenkom. De inbreuk op iemands privacy laat zich in euro's uitdrukken via de boete. Het nut van privacy laat zich niet in euro's uitdrukken. Die asymmetrie werk ik uit in ANPR-kentekencamera’s: de inbreuk is te meten, het nut niet. Zolang alleen de ene kant een prijskaartje heeft, verliest de burger elke afweging die op geld wordt gevoerd.
Dit is waarom ik denk dat handhaving in de huidige vorm het geld niet inhaalt. Niet omdat de regels te slap zijn op papier. Op papier kan de AVG stevig uitpakken. Het probleem zit in de snelheid, de pakkans en de weging achteraf.
Een misstand kan al beboet zijn voordat hij opvalt¶
Er is een kant van dit verhaal die de andere kant op werkt, en die vergeten mensen makkelijk. Als iets in het nieuws komt als een gloednieuw schandaal, betekent dat niet dat de toezichthouder er nog nooit naar heeft gekeken. Een misstand die als nieuw wordt gepresenteerd, kan door de AP al eerder zijn onderzocht en beboet.
Dat verandert de weging. Voordat je iets nieuw noemt, hoort de vraag of er al een besluit over bestaat. Bestaat er een eerder boetebesluit, een eerdere uitspraak, een eerder onderzoek naar hetzelfde type verwerking, dan is er een precedent. En een precedent doet twee dingen tegelijk.
Het is enerzijds geruststellend. De handhaving is dus niet volledig afwezig. Er ligt een besluit, er is een norm getoetst, er is een grens getrokken die je kunt aanhalen. Anderzijds is het verontrustend. Als een praktijk al beboet is en je ziet dezelfde praktijk terug, dan is de boete het gedrag niet gaan veranderen. Dan bevestigt het precedent precies het punt uit de vorige sectie. De boete was een rekening en die is betaald, waarna het volgen gewoon doorging.
Voor mijn eigen onderzoek is dit een concrete werkregel. Ik behandel een vondst niet als uniek voordat ik heb gecheckt of de AP er al iets over heeft gezegd. Een bestaand besluit is bruikbaar bewijsmateriaal. Het tilt een vermoeden op naar iets wat een toezichthouder eerder heeft bevestigd. Mijn werkwijze gaat sowieso van vermoeden naar bevinding, zie Mijn werkwijze: van vermoeden naar bevinding, en een eerder boetebesluit is een van de hardste schakels die je in dat spoor kunt vinden.
Tegenover al dit tekort staat een instrument dat wel doet wat het belooft. Via een verzoek onder de Wet open overheid kun je inzage vragen in wat de overheid digitaal doet. Tot het gebruik van trackers aan toe. Je vraagt de documenten op, de verwerkersovereenkomsten, de afwegingen, en de overheid moet leveren of gemotiveerd weigeren.
Dat werkt in de praktijk. En het werkt op een tweede, subtielere manier. Wat opvraagbaar is, wordt beter op orde gehouden. Alleen al de mogelijkheid dat een burger de stukken kan opeisen, legt een gezonde druk op de organisatie om die stukken te laten kloppen. De Woo is daarmee meer dan een leesrecht achteraf. Het is een prikkel vooraf.
Dat maakt de Woo een uitzondering op het sombere beeld. Bij commerciele partijen sta je met lege handen als je achter de vitrine wilt kijken. Bij de overheid heb je een wettelijke hefboom. Ik heb die hefboom gebruikt om te meten wat er op overheidssites gebeurt, en wat dat opleverde staat in Wat de meting op overheidssites liet zien. Dat de tracking ook achter een DienstID-omgeving doorloopt, werk ik uit in Achter je DigiD loopt de tracking gewoon door.
Belangrijk voor de toon van dit stuk. De burger hoeft niet te zeuren. Klagen over de overheid is makkelijk en het verandert weinig. De Woo geeft je iets beters dan een klacht. Het geeft je een onderzoeksmiddel. Je kunt opvragen, meten, melden en meedenken. Je verschijnt aan tafel met documenten en metingen in plaats van met een mening. Dat is de houding die ik zelf probeer aan te houden, en het is ook waarom ik vind dat aanklagen alleen te weinig is, zie Apple, Google en Meta verdienen aan tracking binnen de wet.
Er zit een risico in het vorige punt. Als het enige instrument dat echt werkt de Woo is, en de Woo geldt alleen voor de overheid, dan ga je de overheid strenger meten dan de markt. Dat zou het beeld vertekenen. De overheid oogt dan slecht omdat je haar kunt controleren, terwijl de commerciele partij vrijuit gaat omdat je niet naar binnen kunt kijken.
Daar houd ik bewust rekening mee. Ik leg dezelfde meetlat langs de overheid en langs een willekeurige app, zie Dezelfde meetlat voor de overheid en de app in je broekzak. De Woo is een handige toegang tot bewijs. Het is geen reden om de overheid harder te beoordelen dan de rest. Wat ik meet, meet ik op de techniek, en de norm is voor iedereen dezelfde.
En daar komen de draden samen. Het gat tussen wet en controle is echt en het is groot. Handhaving loopt achter op het geld, in snelheid, in pakkans en in de weging achteraf. Een overtreding kan al beboet zijn voordat hij als nieuw wordt gepresenteerd, en dat precedent snijdt beide kanten op. En de burger staat niet machteloos. De Woo werkt, en meten werkt. Zolang de toezichthouder tijd tekortkomt, is onafhankelijk onderzoek de tegenkracht die er nog bij moet. Ik zie het als mijn taak om dat onderzoek te leveren op een niveau dat een besluit kan dragen. Waar de burger zelf geen uitweg heeft, hoort iemand toch te kijken, zie De sterkste bevindingen liggen achter DigiD en vitale publieke diensten.
Deze notitie bundelt een aantal losse bevindingen die bij elkaar horen. Een aanwijzing is nog geen bewijs.
Wat de meting vaststelt en wat het recht kwalificeert¶
Stel dat een app of een website een volgtechniek afvuurt nadat een bezoeker toestemming heeft geweigerd. Ik kan dat in het netwerkverkeer zien gebeuren. Een verzoek vertrekt naar een tracker, met een identifier erin, op een moment dat er geen grondslag voor lijkt. Dat is een sterke technische aanwijzing dat de wet wordt overtreden. Het is een harde meting van gedrag. Het is nog niet het oordeel dat er een overtreding is.
Dat oordeel hoort bij het recht, en het recht kijkt naar meer dan het gedrag alleen. De Telecommunicatiewet 11.7a en de AVG kennen uitzonderingen. Een cookie of een uitleesactie die strikt noodzakelijk is voor een door de gebruiker gevraagde dienst mag zonder toestemming. Er zijn gronden die losstaan van toestemming, zoals een wettelijke plicht of een gerechtvaardigd belang, met alle voorwaarden die daarbij horen. Om van overtreding te spreken moet je het doel van het verzoek wegen, de timing tegen de toestemmingsvraag leggen, en de uitzonderingen langslopen. Die weging is juridisch werk.
Ik houd die twee dingen daarom uit elkaar. De meting stelt vast wat er over de lijn gaat. De kwalificatie of dat mag, is een aparte stap met een ander soort bewijslast. Als ik in een rapport schrijf dat een tracker vuurt na weigeren, staat er een gemeten feit. Als ik schrijf dat dit de wet overtreedt, doe ik een juridische bewering, en die moet dan ook juridisch onderbouwd zijn. Het verschil lijkt klein tot iemand het rapport voor een klacht of een verweer gebruikt. Dan draagt elke zin gewicht, en dan telt of ik heb gemeten of geconcludeerd.
De schoonste aanwijzing komt uit een expliciete weigering. Ik laad de pagina, ik open de toestemmingsdialoog, en ik weiger alles wat te weigeren valt. Daarna kijk ik wat er nog vertrekt. Wat na een volledige weigering nog een identifier naar een advertentiepartij stuurt, staat op gespannen voet met wat de bezoeker net heeft gevraagd. Dat is het moment waarop de aanwijzing hard wordt.
Ik lees dat verkeer terug uit HAR-bestanden, een volledige opname van de verzoeken en antwoorden die de browser deed. Zie Netwerkverkeer lezen via HAR-files. In de opname zie ik de bestemming, de meegestuurde identifier en het tijdstip. Ik meet zo dicht mogelijk bij hoe een echte bezoeker de site ervaart, want een kale scanner ziet een andere pagina dan een mens met een muis en een geweigerde banner. Zie Meet zoals een bezoeker, niet zoals een scanner.
Toch is ook deze opstelling geen automatische veroordeling. Weigeren werkt echt, en de weigering na een dialoog is de sterkste knop die een bezoeker heeft. Maar ik reken er niet blind op dat elke bit die daarna nog beweegt onrechtmatig is. Zie Cookies weigeren scheelt echt, maar reken er niet blind op. Een deel van het verkeer kan strikt functioneel zijn. Een verzoek kan een restant zijn van iets dat al liep voor de keuze werd verwerkt. De aanwijzing is sterk, en de sterkte ervan is precies de reden om zorgvuldig te blijven met het woord dat ik eraan hang.
Het spiegelbeeld van een sterke aanwijzing is de lege uitkomst. Ik meet, en ik zie het gedrag niet. De verleiding is dan om te schrijven dat de app schoon is. Dat is de fout die ik het scherpst bewaak. Dat een gedrag in mijn meting niet is waargenomen, betekent niet dat het niet gebeurt.
Het kan buiten het meetbare deel liggen. Een app die certificate pinning gebruikt, laat zich niet zonder meer meelezen, en dan zie ik de inhoud van zijn verkeer niet. Een tracker die pas vuurt na een handeling die ik in de sessie niet deed, blijft stil in mijn opname. Niet alles vuurt bij het opstarten, dus een korte meting van de eerste seconden mist wat later komt. Zie Niet alles vuurt bij opstart, sommige trackers wachten op jou. Het kan ook onder de drempel liggen waarop een uitspraak verantwoord is. Eén los verzoek dat ik niet kan thuisbrengen, is te weinig om iets op te bouwen.
Daarom vermeldt een nulbevinding waar ik heb gekeken. Ik schrijf welke oppervlakken ik heb gemeten, hoe lang, met welke handelingen, en wat buiten bereik bleef. Een mislukte meting, waarbij de opstelling het verkeer niet kon zien, levert geen schone app op. Zie Een mislukte meting is geen schone app. Het levert een gat op, en dat gat hoort benoemd. De formulering die ik nastreef is nuchter. Niet waargenomen binnen de gemeten sessie, met deze opstelling, op deze oppervlakken. Zo zegt de nulbevinding wat ze werkelijk is, een afwezigheid van waarneming, met de grenzen erbij.
Er zit een discipline onder die verder gaat dan de bewoording. Een nulbevinding hoort te zeggen waar is gekeken, en niet wat ik vooraf verwachtte. Als ik verwacht een tracker te vinden en hem niet zie, is de eerlijke vraag of hij er niet is of dat mijn opstelling hem mist. Wie zijn verwachting laat meewegen in de conclusie, meet zichzelf. Zie Beargumenteer eerst het tegendeel van je eigen bevinding.
Code-vondst en live-verkeer zijn twee bewijsniveaus¶
Een derde onderscheid komt terug in bijna elk onderzoek. Ik kan een bevinding uit de code halen of uit het verkeer, en dat zijn twee verschillende dingen. Beide zijn bewijs. Ze bewijzen iets anders.
Haal ik een SDK, een endpoint of een sleutel uit gedecompileerde code, dan staat die vondst hard vast in die code. De klasse zit erin, de string zit erin, de aanroep is aanwezig. Dat is een gemeten feit over wat de app bevat. Het zegt nog niet dat de code op het toestel van een gebruiker daadwerkelijk draait, op die verbinding, in de omstandigheden die tellen. Een aanwezige tracker kan achter een uitgezette vlag zitten. Een endpoint kan in de app staan zonder dat het pad er ooit heen loopt. Een naam in de code is een aanwijzing dat een partij betrokken kan zijn, en meer dan dat is het op zichzelf niet. Zie Een naam in de code is nog geen tracker.
Zie ik daarentegen het verzoek echt vertrekken in de HAR-opname, met de data erin, dan heb ik het gedrag live gemeten. Dan is het van de statische aanwezigheid opgeklommen naar waargenomen uitvoering. Dat is het hoogste niveau dat ik voor dit soort gedrag kan halen. Het verschil tussen de twee hoort in het rapport te staan, expliciet, per bevinding. De ene zin zegt dat iets in de app zit. De andere zegt dat de app het doet. Wie die twee door elkaar haalt, schrijft een sterkere conclusie op dan de meting draagt.
Het onderscheid loopt parallel aan dat tussen de verklaring op papier en de uitvoering in code. Een privacyverklaring beschrijft wat een organisatie zegt te doen. De code beschrijft wat er is gebouwd. Het verkeer beschrijft wat er gebeurt. Drie lagen, drie bewijsniveaus, en ze kunnen alle drie uiteenlopen. Zie Papier versus code: de verklaring en de uitvoering.
Deze drie onderscheidingen komen samen in één gewoonte. Ik label elke bevinding op haar bewijsniveau. Zie Label elke bevinding op bewijsniveau. In mijn werk hanteer ik drie treden.
Gemeten. Ik heb het zelf waargenomen in de opname. Het verzoek vertrok, de identifier zat erin, op dit tijdstip, in deze sessie. Voorbeeld: een tracker die na een volledige weigering alsnog een resetbare identifier meestuurt, zichtbaar in de HAR. Dit is het sterkste dat ik kan aanbieden, en ook hier geldt dat het het gedrag vaststelt en niet vanzelf de juridische kwalificatie.
Afgeleid. Ik heb het niet direct gezien, maar het volgt logisch uit wat ik wel zag. Voorbeeld: ik vind een cookie-sync tussen twee partijen in het verkeer, en ik leid daaruit af dat ze elkaars identifiers kunnen koppelen. De koppeling zelf gebeurt aan hun kant, buiten mijn zicht, dus de mogelijkheid is afgeleid uit de sync die ik wel mat.
Vermoed. Ik heb een aanwijzing, en meer nog niet. Voorbeeld: een endpoint in de gedecompileerde code van een partij die om bekend staat te volgen, zonder dat ik het verzoek live zag vertrekken. Het is een reden om verder te kijken, en het is nog geen bevinding om op te leunen.
Dit is de weg die ik in bijna elk dossier afleg, van vermoeden via afleiding naar gemeten feit. Zie Mijn werkwijze: van vermoeden naar bevinding. De labels maken die weg zichtbaar voor wie het rapport leest. Ze laten zien waar ik sta, en ze laten de lezer zelf wegen. Een dossier waarin alles even stellig klinkt, verbergt juist die weging.
Het label beschermt ook tegen een val die vaak terugkomt. Een overtuigde getuige is nog geen betrouwbare meting. Iemand die zeker weet dat een app hem afluistert, levert een sterk verhaal en geen data. Zie Een overtuigde getuige is geen betrouwbare meting. De stelligheid van de bron zegt niets over het bewijsniveau van de claim. Alleen de meting doet dat.
Er is een grens aan dit onderscheid. Als een aanwijzing sterk genoeg is, waarom dan al die voorzichtigheid? Een tracker die na weigeren vuurt, is toch gewoon fout? In de praktijk voelt het zo, en vaak zal het ook zo blijken. Toch is de voorzichtigheid geen rem op het werk. Ze is de reden dat het werk standhoudt.
Mijn rapporten zijn bedoeld om te dragen. Ze gaan richting een klacht, een verweer, een journalist of een toezichthouder. Op het moment dat iemand aan een bevinding trekt, is de vraag altijd dezelfde. Heb je dit gemeten of geconcludeerd, en waar heb je gekeken. Een dossier dat die vraag vooraf beantwoordt, houdt stand. Een dossier dat een gemeten feit en een juridisch oordeel in één zin gooit, valt uit elkaar bij de eerste tegenspraak, ook als de onderliggende meting klopte. De inbreuk zelf is vaak te berekenen, terwijl de weging van doel en grondslag dat niet is, en dat verschil hoort er open in te staan. Zie ANPR-kentekencamera’s: de inbreuk is te meten, het nut niet.
Er is nog een reden. Sommige bevindingen zijn technisch waar en toch misleidend als je het bewijsniveau weglaat. Een endpoint in de code melden als bewijs dat een app iets doet, is technisch juist en praktisch onwaar zodra de vlag uit staat. Zie Technisch juiste uitspraken kunnen een verkeerde indruk wekken. Het bewijsniveau erbij zetten haalt die val weg. Het maakt de bevinding precies zo sterk als ze is.
Voor mijn eigen werk komt het neer op drie regels die ik bij elke bevinding langsloop. De meting stelt gedrag vast, en de kwalificatie of dat mag is een aparte, juridische stap. Een lege uitkomst zegt waar ik heb gekeken en hoe ver mijn zicht reikte. En een vondst in de code staat een niveau lager dan hetzelfde gedrag live gemeten op de verbinding. Wie die drie scheidingen vasthoudt, schrijft rapporten die je kunt narekenen. Dat is het enige soort dat ik wil leveren. Zie ook het bredere onderscheid tussen wat een bevinding, een beginsel en een gedachte is Wat een bevinding, een beginsel en een gedachte is.
gedachtenotitieOverheid, toezicht en de wetverwant
De privacytoezichthouder maakte melden steeds moeilijker
Wie een privacyschending wil melden bij de Autoriteit Persoonsgegevens, botst op een drempel die door de jaren heen hoger is geworden. Het rechtstreekse e-mailcontact voor meldingen en klachten is verdwenen. Wat overblijft zijn een paar strak dichtgetimmerde formulieren met vaste velden, en een behandeltijd die in de praktijk oploopt tot maanden. Een toezichthouder die moeilijk te bereiken is, hoort minder, en handhaaft dus ook minder.
Ik meld met enige regelmaat iets bij de Autoriteit Persoonsgegevens. Een tracker die voor toestemming vuurt, een gegevensstroom naar een land zonder passend beschermingsniveau, een lek dat niet gemeld is. Wat me door de jaren heen opviel is dat het steeds meer moeite kost om zoiets bij de juiste persoon te krijgen.
Er was een tijd dat je een mail kon sturen naar een adres dat werd gelezen. Je kon je bevinding uitleggen in je eigen woorden, het bewijs meesturen, en er kwam een reactie. Dat rechtstreekse contact voor meldingen en klachten is er niet meer. Dit is mijn eigen waarneming uit het melden zelf, en ik label het daarom als afgeleid, niet als een door de toezichthouder bevestigd beleid.
Wat overblijft zijn formulieren. Een klacht loopt via een vast webformulier met vaste velden. Een datalek via een ander formulier. Een tip via weer een ander kanaal. Elk kanaal is strak afgebakend en laat weinig ruimte voor een bevinding die niet precies in de voorziene vakjes past.
Voor een gemiddelde burger die kort iets kwijt wil, is dat misschien werkbaar. Voor een gedetailleerde, technische melding met bewijsmateriaal werkt het slecht. De structuur dwingt je om een verhaal dat samenhang heeft op te knippen in losse velden, en de nuance die het bewijs draagt valt daarbij weg.
Het tweede dat opvalt is de tijd. Tussen een melding en een inhoudelijke reactie zit in mijn ervaring een periode van maanden. Ik noem uit eigen waarneming een orde van grootte van een half jaar. Dat cijfer is mijn schatting op basis van mijn eigen meldingen, geen gepubliceerd gemiddelde, dus weeg het als zodanig.
Een lange wachttijd doet iets met de waarde van een melding. Een privacyschending is vaak een lopende toestand. Een tracker die vandaag onrechtmatig vuurt, vuurt over zes maanden nog steeds, en heeft in de tussentijd van elke bezoeker gegevens verzameld. Toezicht dat pas na dat half jaar in beweging komt, komt voor een groot deel van de schade te laat.
Een toezichthouder werkt grotendeels op wat binnenkomt. Klachten, meldingen en tips zijn de ogen en oren buiten de deur. Wie de drempel om iets te melden verhoogt, vermindert wat er binnenkomt, en verkleint daarmee het beeld dat de toezichthouder van de werkelijkheid heeft.
Ik blijf melden, ook als het meer moeite kost. En ik leg mijn bevindingen daarnaast openbaar vast op deze site, met het bewijs erbij, zodat de meting niet afhankelijk is van of een formulier hem doorlaat. Als een kanaal dichtslibt, is openbaarheid het kanaal dat overblijft. Dat is een van de redenen dat dit manuscript bestaat.
Wat een bevinding, een beginsel en een gedachte is
Elke notitie op deze site is een van drie soorten. Een bevinding is iets dat ik heb gemeten, met het bewijs erbij. Een beginsel is een werkregel die uit dat meten volgt. Een gedachte is een beschouwing die verder reikt dan de meting draagt. Het label bovenaan een notitie zegt welke van de drie het is, en hoe zeker ik ben. Zo weet je bij alles wat je leest of het een feit is, een regel, of een mening.
Op deze site staat van alles door elkaar. Een gemeten feit over een tracker, een werkregel die ik voor mezelf heb opgesteld, en soms een gedachte die verder gaat dan wat ik kan bewijzen. Als die drie er hetzelfde uitzien, weet je bij het lezen niet meer wat je in handen hebt. Daarom draagt elke notitie een label dat zegt welk soort het is.
Het onderscheid is voor mij belangrijker dan de opmaak. Het bepaalt hoe zwaar een uitspraak weegt, en wat er nodig is om hem onderuit te halen.
Een bevinding is iets dat ik heb gemeten. Er zit een opname onder, meestal een HAR-bestand van het netwerkverkeer, of een andere vastlegging die iemand anders kan overdoen. De bevinding zegt wat er feitelijk gebeurde: welk verzoek de deur uit ging, naar welke ontvanger, met welke gegevens erin.
De labels bij een bevinding zeggen hoe hard ze is. Gemeten betekent dat ik het zelf in het verkeer heb gezien. Afgeleid betekent dat het logisch volgt uit wat ik zag, zonder dat ik de laatste stap direct heb waargenomen. Vermoed betekent dat het aannemelijk is en dat ik het bewust nog niet als vaststaand presenteer. Zie Gemeten is niet bewezen.
Een beginsel is een werkregel. Het gaat niet over een bepaalde website. Het is een les die ik uit het meten heb getrokken en telkens opnieuw toepas. Bijvoorbeeld dat je alleen de directe aanvraag telt en niets afleidt, of dat aanwezigheid van een script nog geen verstrekking van gegevens is.
De meeste beginselen op deze site gaan over hoe je meet en hoe je bewijs weegt. Ze zijn het skelet onder de bevindingen. Zonder die regels zou ik voor elke meting opnieuw moeten bedenken wat wel en niet telt.
Een gedachte reikt verder dan de meting draagt. Het is een beschouwing over macht, kwaliteit, bekwaamheid of de vraag wat een mens nog zelf moet kunnen. Hier meet ik niet, hier denk ik hardop, en dat zeg ik er dan ook bij.
Een gedachte toets je op samenhang en op eerlijkheid. Klopt de redenering met zichzelf, en geef ik toe waar ze ophoudt? Een gedachte mag speculatief zijn, zolang duidelijk is dat het speculatie is. Zie Beargumenteer eerst het tegendeel van je eigen bevinding.
Ik houd de gedachten bewust apart van de bevindingen. Een lezer die alleen de gemeten feiten wil, moet die kunnen vinden zonder door mijn meningen te hoeven waden. En een lezer die mijn denken wil volgen, moet weten dat hij daar geen bewijs onder mag verwachten.
Sommige notities dragen achter de titel een klein teken, een liggend gelijkteken. Dat betekent dat er een volledig uitgewerkt stuk achter zit, niet alleen de samenvatting die je in het overzicht ziet. Klik de notitie open en je krijgt de hele redenering, met het bewijs, de betrokken partijen, de wet die het raakt en de bronnen waarop het leunt.
Het hele verschil tussen dit manuscript en een mening op internet zit in dit onderscheid. Ik zeg er altijd bij wat iets is. Een feit dat ik heb gemeten, een regel die ik heb geleerd, of een gedachte die ik nog niet hard kan maken. Wie dat weet, kan zelf wegen wat mijn woorden waard zijn, en waar hij ze moet narekenen.
Tolstoj destilleert hebzucht tot twintig bladzijden
Hoeveel land heeft een mens nodig is tot nu toe het boek dat het beste laat zien hoe ver je een complex onderwerp kunt indikken. Waar de meeste schrijvers honderden bladzijden nodig hebben, doet Tolstoj het in ongeveer achtduizend woorden, in de meeste uitgaven vijftien tot vijfentwintig bladzijden. Er gaat niets verloren. De redenering staat er compleet in, inclusief het einde dat je ziet aankomen en dat toch aankomt.
Een kort verhaal van Lev Tolstoj uit 1886, in het Russisch getiteld Много ли человеку земли нужно. Een boer, Pachom, hoort dat er verderop goedkope grond te koop is. Hij verkoopt wat hij heeft, verhuist, krijgt meer, hoort daarna van nog goedkopere grond, en verhuist opnieuw. Uiteindelijk komt hij bij een volk dat hem een aanbod doet. Voor duizend roebel mag hij lopen zoveel land als hij wil, op één voorwaarde. Hij moet voor zonsondergang terug zijn bij zijn vertrekpunt, anders vervalt alles.
Het staat in de late periode van Tolstoj, de jaren waarin hij zich afkeerde van de grote romans en volksverhalen ging schrijven met een moraal eronder. Dit is er een van, en het is misschien het strakst gebouwde. James Joyce noemde het volgens overlevering het beste verhaal dat de wereldliteratuur kent. Dat is een oordeel van een ander, niet van mij, en ik geef het door omdat het iets zegt over hoeveel gewicht zo'n dun boekje kan dragen.
Ik was vooral onder de indruk van hoe klein het is. Ongeveer achtduizend woorden, in de meeste uitgaven vijftien tot vijfentwintig bladzijden. Bewijsniveau: afgeleid. De woordtelling varieert per vertaling, dus ik houd het op een orde van grootte en niet op een exact getal. Voor hetzelfde onderwerp, wat begeerte met een mens doet en waar genoeg ophoudt, worden hele boekenkasten volgeschreven. En bijna nooit blijft er zo weinig van over dat je het in één avond leest en het je jaren bijblijft.
Dat contrast is de reden dat dit verhaal voor mij de maatstaf werd. Het gaat over een van de grootste thema's die er zijn, hebzucht en de vraag naar het genoeg, en het heeft er geen dikke roman voor nodig. De omvang is niet toevallig klein. De kleinheid is het bewijs dat het kan.
Wat de indikking mogelijk maakt, is de structuur van de herhaling. Tolstoj vertelt in feite één beweging vier keer. Pachom heeft iets, hij hoort van meer, hij grijpt het, hij went eraan, en het begint opnieuw. Elke ronde is korter dan je zou verwachten, omdat de lezer de vorige al kent. De schrijver hoeft de tweede verhuizing niet meer uit te leggen, want de eerste heeft het patroon al gezet. Zo stapelt het verhaal betekenis zonder woorden te stapelen. De herhaling doet het werk dat anders uitleg zou kosten.
Wat mij het meest interesseert is de techniek erachter. Tolstoj legt niets uit. Er staat geen enkele passage waarin iemand vertelt wat de moraal is. Het verhaal doet het werk door de stappen achter elkaar te zetten en ze allemaal redelijk te laten zijn.
Elke keer dat Pachom verder gaat, heeft hij gelijk. Meer land betekent meer oogst, en meer oogst betekent meer zekerheid voor zijn gezin. Er is geen moment aan te wijzen waarop hij duidelijk verkeerd kiest. Dat is de sleutel. Een gewone schrijver zou ergens een waarschuwing inbouwen, een moment waarop de lezer denkt: nu gaat het mis. Tolstoj doet dat niet. Hij laat elke stap kloppen, en juist daardoor voel je de val aankomen zonder dat iemand hem benoemt.
Hier ligt ook het verschil met de fabel. Een fabel eindigt met een uitgesproken les. Dit verhaal heeft de vorm van een parabel, maar het weigert de les hardop te zeggen. De lezer moet de moraal zelf optellen uit de stappen. Dat is meer werk voor de lezer, en precies dat werk maakt dat het beklijft. Wie iets zelf concludeert, onthoudt het beter dan wie het krijgt uitgelegd.
De hele constructie komt samen in één dag lopen. Pachom ziet steeds iets beters net voorbij de plek waar hij zou moeten keren, en telkens rekt hij het op. Het is dan al te laat om nog binnen de tijd rond te komen, en hij weet het. De laatste bladzijden zijn de enige plek waar de vaart erin zit, en dat is precies waar hij zelf de vaart verliest.
De opbouw en de inhoud vallen hier samen. Het verhaal versnelt op het moment dat de tijd voor Pachom opraakt. De vorm doet wat de inhoud beschrijft. De slotzin geeft antwoord op de titel. Er is een stuk grond nodig van zijn lengte, want daarin wordt hij begraven. Dat einde zie je aankomen, en het komt toch aan. Dat het aankondigt en toch raakt, is de moeilijkste truc in dit soort verhalen, en Tolstoj haalt hem.
Het antwoord op de titel is ook de moraal, en toch spreekt niemand hem uit. Het staat er als een feit, een graf van een paar voet lang, en de lezer trekt de conclusie zelf. Dat is de winst van het hele verhaal in één beeld. De vraag hoeveel land een mens nodig heeft, wordt beantwoord door de man die dacht dat het antwoord onbeperkt was. Hij heeft de hele dag gerend om zoveel mogelijk te krijgen, en aan het eind heeft hij precies zoveel als iedereen. Tolstoj hoeft daar niets bij te zeggen. Het beeld draagt de hele redenering.
Indikken zonder verlies is het moeilijkste dat er is. Ik merk dat in mijn eigen werk. Een meting verdedigen kost weinig woorden. De tracker liep, hier is het verkeer, dat is snel gezegd. Uitleggen waarom het uitmaakt loopt zo uit de hand. Daar wil ik context geven, en gevolg, en tegenwerping, en voor ik het weet staan er drie bladzijden waar er één had gekund.
Er is een tweede les die dieper zit. De compressie werkt alleen omdat elke stap eerlijk is opgebouwd. Tolstoj bedriegt de lezer nergens. Hij houdt geen informatie achter om aan het eind een verrassing te forceren. Alles wat je nodig hebt om de val te zien aankomen, staat er vanaf het begin. Juist die eerlijkheid maakt het einde onontkoombaar. In mijn eigen werk is dat het model. Een bevinding overtuigt niet door een dramatische onthulling op het slot. Ze overtuigt doordat elke stap ervoor klopt en de lezer de conclusie zelf al ziet naderen. Wie zo bouwt, heeft aan het eind weinig woorden meer nodig.
Dit verhaal is voor mij de maatstaf van hoe kort het kan als je de lezer het denkwerk gunt. Tolstoj vertrouwt zijn lezer. Hij doet het denkwerk niet voor hem. Dat vertrouwen is wat de tekst kort houdt, want zodra je alles gaat uitleggen, moet je alles opschrijven. Ik probeer dat over te nemen. De stappen zo neerzetten dat de conclusie zichzelf optelt, en dan stoppen. Elke keer dat een van mijn stukken te lang wordt, is het omdat ik ergens het denkwerk heb overgenomen dat ik aan de lezer had moeten laten. Deze twintig bladzijden houden me daaraan. Als een stuk van mij korter kan zonder dat er iets sneuvelt, dan hoort het korter. Tolstoj heeft me laten zien hoe ver dat gaat.
Alice in Wonderland oogt als kinderboek tot je het voorwoord en de duiding erbij leest
Op het eerste gezicht is het een simpel kinderboek: een meisje valt in een hol en komt in een wereld waar niets klopt. Dat beeld houdt stand tot je twee dingen erbij legt. Het voorwoord over Charles Dodgson zelf, en de manier waarop iemand als Jordan Peterson dit soort verhalen naast bijbelse leest, bijvoorbeeld naast de verloren zoon. Daarna lees je hetzelfde boek anders.
Je pakt het op als kinderboek. Een meisje verveelt zich, ziet een konijn met een horloge, valt in een hol en belandt in een wereld waar de regels per bladzijde veranderen. Er wordt gegeten en gedronken waar je van groeit en krimpt. Er is een thee-uur dat nooit ophoudt. Er is een koningin die iedereen wil onthoofden. Als verhaal voor kinderen werkt het, en zo is het ook honderdvijftig jaar lang verkocht.
Ik las het lang precies zo. Een aaneenschakeling van vrolijke onzin, leuk voor onderweg, verder niets. Dat beeld hield stand tot ik twee dingen erbij kreeg. Het voorwoord over de schrijver, en de manier waarop iemand als Jordan Peterson dit soort verhalen naast bijbelse verhalen legt. Daarna las ik hetzelfde boek anders. Ik wil hier laten zien welke twee dingen dat waren, en waarom ze de tekst voor mij hebben omgedraaid.
Dan lees je wie het schreef. Charles Dodgson, wiskundige in Oxford, publicerend onder de naam Lewis Carroll. Iemand die zijn dagen doorbracht met logica en die dit verhaal aanvankelijk vertelde tijdens een boottocht, voor het kind van een collega. Het was eerst een mondeling verzinsel, later pas een boek.
Dat gegeven kleurt de tekst. De onzin in dit boek volgt namelijk regels. Het zijn logische regels die net iets anders staan afgesteld, en die dan consequent worden doorgevoerd. Een wereld waarin je krimpt van het ene hapje en groeit van het andere is niet chaotisch. Hij is streng. Er zit een systeem in dat klopt met zichzelf, alleen niet met de wereld waar je vandaan komt.
Op het moment dat je weet dat een wiskundige aan de knoppen zat, ga je die strengheid herkennen. En dan kun je het niet meer terugzien als losse nonsens.
Ik heb dat zelf gemerkt bij de tweede keer lezen. De eerste keer gleden de rare passages langs me heen als grappige beelden. De tweede keer, met het voorwoord vers in mijn hoofd, bleef ik bij dezelfde passages hangen omdat ik er een structuur onder zag. Datzelfde stukje tekst deed twee verschillende dingen, afhankelijk van wat ik erover wist. De woorden op de bladzijde waren niet veranderd. Wat veranderd was, was de bril waarmee ik keek.
Twee plekken uit het boek maken dat voor mij concreet. De Mock Turtle legt uit hoe zijn schoollessen elke dag korter worden. Eerst tien uur, dan negen, dan acht, en zo verder. De grap zit in het woord lessons, dat in het Engels ook aan lessen in de zin van afnemen doet denken. Het is een woordspeling, maar er zit een echte logica onder. Een reeks die elke dag met één krimpt, loopt netjes af naar nul. Dat is een man die met een rekenreeks speelt en er een schoolrooster van maakt.
De tweede plek is de discussie over het verschil tussen zeggen wat je bedoelt en bedoelen wat je zegt. In gewone spraak lijken die twee hetzelfde. In de logica zijn het verschillende beweringen, want de ene volgt niet uit de andere. Carroll laat de personages daar serieus over ruziën, alsof het leven ervan afhangt. Dat is precies wat een logicus grappig vindt, en het is ook precies waar leken overheen lezen.
Als je dit soort passages eenmaal zo ziet, verandert het karakter van het boek. Het speelt niet met beelden. Het speelt met de vorm van het redeneren zelf.
De derde leesbeweging kwam bij mij van buitenaf. Ik kwam er niet zelf op. Jordan Peterson leest dit soort verhalen naast bijbelse verhalen, bijvoorbeeld naast de gelijkenis van de verloren zoon. De vorm die hij aanwijst is telkens dezelfde. Iemand verlaat de bekende orde, raakt de weg kwijt in een wereld zonder houvast, en komt terug met iets dat hij daarbuiten heeft opgehaald.
Zodra je die vorm eenmaal als sjabloon in handen hebt, ga je hem overal zien. Alice doet precies dat. Ze valt uit een geordende Victoriaanse middag in een wereld waar niets meer vaststaat. Wat haar daar overeind houdt, is dat ze blijft vragen en blijft nadenken. Ze wordt niet gered door een ander. Ze redeneert zich er doorheen, ook als het redeneren zelf tegen haar wordt gebruikt.
Dat maakt van het konijnenhol iets anders dan een decor. Het is de plek waar de bekende regels wegvallen, en het boek gaat over de vraag wat je dan nog hebt om op te staan.
Wat me aan die lezing bevalt, is dat ze het einde verklaart. Alice keert terug naar de gewone middag, en de gewone middag is niet veranderd. Wat veranderd is, is zij. Ze heeft in een wereld zonder vaste regels gemerkt dat ze op haar eigen denken kon staan, en die ervaring neemt ze mee terug. Dat is dezelfde beweging die Peterson in het verhaal van de verloren zoon aanwijst. De zoon komt niet terug met een schat uit de vreemde. Hij komt terug met het besef van wat hij thuis had, en dat besef kon hij alleen buiten opdoen.
Wat mij aan dit boek pakt, is dat het op drie niveaus tegelijk werkt zonder dat er één niveau wordt opgeofferd. Een kind leest een avontuur en mist niets. Een volwassene leest een grap over logica en heeft aan hetzelfde materiaal genoeg. Wie een stap verder kijkt, leest een verhaal over hoe je jezelf staande houdt als de regels wegvallen.
Dat is zeldzaam. De meeste teksten die zich op meerdere niveaus voordoen, offeren de onderste laag op. Ze worden vervelend voor het kind om de volwassene te bereiken, of ze blijven zo plat dat er voor de volwassene niets te halen valt. Bij Alice betaalt geen enkele lezer voor de andere. Dat is een technische prestatie, en het is precies het soort werk waar ik zelf naar streef.
Die onderste betekenislaag raakt aan mijn eigen werk. Ik kom regelmatig in situaties waarin de regels formeel nog gelden en in de praktijk zijn weggevallen. Een cookiebanner die toestemming vraagt terwijl de trackers al vuurden. Een overheidsdienst die zich aan de wet zegt te houden terwijl de meting iets anders laat zien. Dat zijn kleine konijnenholen. De vertrouwde orde staat er nog op papier, en eronder klopt niets meer.
Wat dan helpt, is dezelfde houding als die van Alice. Blijven vragen wat er precies gebeurt, ook als iedereen om je heen doet alsof de vraag ongepast is. Op zo'n moment word je onder druk gezet om mee te bewegen met een orde die alleen op papier nog bestaat. De thee-tafel in het boek werkt zo. Iedereen zit er alsof de regels kloppen, en wie vraagt waarom de klok op zes uur staat blijven staan, krijgt te horen dat hij onbeleefd is. De vraag zelf wordt tot een fout gemaakt, zodat niemand hem meer stelt. Niet accepteren dat de regels wegvielen alleen omdat het ongemakkelijk is om dat hardop te zeggen. Alice wordt niet groot door kracht. Ze wordt groot door te blijven denken op de enige plek waar denken niet meer vanzelfsprekend is. Dat is de les die ik uit een kinderboek heb gehaald nadat ik het voorwoord had gelezen.
Raskolnikov redeneert zijn moord recht, en dat leest lichamelijk ongemakkelijk
Ik kreeg hoofdpijn van Misdaad en straf, en plaatsvervangende schaamte. Niet van het geweld, maar van de manier waarop Raskolnikov zichzelf gelijk geeft. Hij praat zijn daad stap voor stap recht, en elke stap klinkt redelijk. Dat is zo echt en zo tastbaar opgeschreven dat je het in je lijf voelt. Het slot vond ik een anticlimax.
Ik heb weinig boeken gelezen waarvan ik lichamelijk last kreeg. Bij Misdaad en straf gebeurde dat wel. Hoofdpijn, en daarnaast een soort plaatsvervangende schaamte die ik zelden bij fictie heb. Dat komt niet door de moord. Het komt door de honderden bladzijden eromheen, waarin een man met zichzelf onderhandelt tot hij uitkomt waar hij wil uitkomen.
Dat wil ik vasthouden als het kernfeit van mijn leeservaring. Bewijsniveau: dit is mijn eigen waarneming. Het is geen literaire analyse die ik ergens heb gelezen. Het is wat het boek fysiek met me deed. De hoofdpijn en de schaamte waren echt, en ze kwamen niet van het bloed. Ze kwamen van de redenering.
Raskolnikov bouwt zijn eigen vrijbrief. Hij begint bij een idee dat op zichzelf te verdedigen valt. Dat sommige mensen de wereld verder brengen en dat gewone regels hen daarbij in de weg zitten. Dostojevski schreef dit in 1866, in een tijd waarin dat soort denken in de lucht hing. De gedachte van de buitengewone mens die boven de moraal staat, de figuur die later bij anderen zou uitgroeien tot de Übermensch, zit hier al in de kiem. Raskolnikov noemt Napoleon. Hij vraagt zich af of een groot mens de regels mag breken die voor de kleine gelden.
Dostojevski schreef dit ook als antwoord op een denkklimaat dat hij verafschuwde. In de jaren zestig van de negentiende eeuw was het rationeel egoisme in de mode, de gedachte dat een mens al zijn keuzes kon herleiden tot een verstandig eigenbelang, en dat de moraal zich liet narekenen als een som. Raskolnikov is voor een deel het product van dat idee, doorgetrokken tot zijn uiterste. Hij past het rekenen toe op een mensenleven. Als je alles kunt narekenen, dan kun je ook narekenen dat een nutteloze oude vrouw minder waard is dan het goede dat je met haar geld zou doen. Dostojevski laat die rekensom haar eigen conclusie bereiken en toont wat er dan gebeurt met de mens die haar maakt.
Vanaf dat punt zet hij stappen die elk afzonderlijk redelijk klinken. Aan het eind van die keten staat een dubbele moord, en hij ziet het als een vraagstuk dat hij correct heeft opgelost. Wat het zo tastbaar maakt, is dat je die stappen kunt volgen. Je herkent de beweging. Iedereen praat weleens iets recht dat niet recht is, en je doet dat met dezelfde techniek. Je zoomt uit tot de daad klein lijkt, en je vergroot het doel tot het de rekening dekt. Dostojevski laat die techniek van binnenuit zien. Daarom voelt het alsof je meekijkt bij iets waar je niet bij hoort.
Het meest verontrustende zit in het gemak. Hij weegt zijn geweten niet af, hij zet het uit. Schuld wordt een probleem van de uitvoering. Was hij zorgvuldig genoeg, heeft iemand hem gezien, klopt het verhaal dat hij vertelt. De vraag of het mocht komt pas veel later, en dan nog aarzelend.
Die verschuiving is het hart van het boek. De morele vraag, mag dit, wordt vervangen door een reeks technische vragen, lukt dit. Zodra die ruil is gemaakt, is de daad in zekere zin al gepleegd, ook al is er nog niemand dood. Het geweten is niet weerlegd. Het is opzijgezet als iets dat er nu even niet toe doet. Dostojevski toont dat opzijzetten in slow motion, en dat is wat je in je lijf voelt.
En hij laat het niet ongestraft. Het lichaam van Raskolnikov weet wat zijn hoofd wegredeneert. Hij wordt ziek, hij ijlt, hij trekt aandacht door precies de dingen te doen die een schuldige zou doen. De redenering zegt dat het mocht, en alles onder de redenering protesteert. Dat is misschien het scherpste wat het boek doet. Het laat zien dat je jezelf wel kunt overtuigen, en dat de overtuiging de rest van je niet meekrijgt. De schaamte die ik als lezer voelde, is een echo van die breuk. Je kijkt naar iemand die zichzelf heeft wijsgemaakt dat het klopt, terwijl elke vezel van hem het tegendeel uitschreeuwt.
Ik heb dit patroon ook buiten de roman gezien, in mijn eigen werk. Een organisatie die weet dat ze iets doet dat niet mag, en de vraag omzet in een uitvoeringsvraag. Is het gemeld, is er een verwerkersovereenkomst, staat er een DPIA op de plank. De morele vraag verdwijnt achter de procedurele. Dat is dezelfde beweging als bij Raskolnikov, alleen netter gekleed.
Bewijsniveau van deze parallel: afgeleid. Ik meet geen geweten, en ik lees geen gedachten. Wat ik meet, is dat een verwerking loopt die niet mag, en dat er tegelijk een stapel documenten klaarligt die de vorm regelt. De documenten beantwoorden hoe. Ze beantwoorden niet of. Dezelfde ruil dus. De vraag of het mag, verdwijnt achter de vraag of het correct is afgehandeld. Ik trek de vergelijking bewust met terughoudendheid, want een tracker is geen moord. Wat overeenkomt is de techniek, de verplaatsing van de morele vraag naar de procedure, en die overeenkomst is wat het boek voor mij bruikbaar maakt.
Het einde vond ik een anticlimax. Vijfhonderd bladzijden lang wordt de spanning opgebouwd rond een man die zichzelf niet kan toegeven wat hij heeft gedaan, en de ommekeer die daarop volgt komt snel en van buitenaf. Ik geloofde de opbouw en ik geloofde de bekentenis. De verlossing daarna las voor mij als iets dat erbij is gezet.
Ik sta daar niet alleen in, en dat stelt me gerust over mijn eigen oordeel. De epiloog van Misdaad en straf, waarin Raskolnikov in de strafkolonie tot inkeer komt, wordt in de kritiek al lang bediscussieerd als het zwakste deel. Meerdere lezers en critici hebben die ommekeer als abrupt en onvoldoende voorbereid ervaren. Dostojevski had een christelijk plan met dat einde, de zonde die door lijden en liefde wordt verlost. Dat plan is oprecht en het past bij zijn latere werk. Voor mij als lezer landde het niet, omdat het tempo en de richting ineens veranderen. De rest van het boek graaft van binnenuit, en de verlossing komt van buiten aanwaaien.
Dat laatste is het belangrijkste voor mijn eigen werk. Dit is een oordeel over de roman, niet over de schrijver. Het boek heeft me iets geleerd wat ik dagelijks gebruik. De gevaarlijkste redenering is niet de domme redenering. Het is de redenering waarin elke stap klopt. Raskolnikov gaat nergens duidelijk de fout in, en toch komt hij uit bij een moord. Dat is precies de vorm die ik tegenkom bij organisaties die weten dat ze fout zitten. Elke afzonderlijke stap is te verdedigen, en de optelsom deugt niet.
Wie dat mechanisme één keer van binnenuit heeft gevoeld, herkent het sneller in het echt. Het boek heeft me daar gevoeliger voor gemaakt. Ik let nu op het moment waarop een gesprek van de vraag of iets mag overslaat naar de vraag of iets netjes is afgehandeld. Dat is het scharnier. Bij Raskolnikov gebeurt het met een mensenleven, bij een organisatie met een gegevensstroom, en de beweging is hetzelfde. Daarvoor was de hoofdpijn het waard.
De neus begint absurd, wordt onderweg logisch en eindigt weer absurd
De neus was precies wat ik ervan hoopte. Het verhaal begint bij een absurditeit, gaat die vervolgens doodserieus behandelen alsof het een gewone ambtelijke kwestie is, en glijdt aan het eind weer terug in absurditeit. Die middenbeweging is het interessante deel: de logica komt niet om de absurditeit op te lossen, ze komt eroverheen liggen.
Ik was op zoek naar een verhaal dat het absurde serieus neemt zonder er een grap van te maken. De neus is dat. Een ambtenaar wordt wakker zonder neus, en de neus loopt intussen als hooggeplaatste heer door Sint-Petersburg. Dat is de openingszet, en er wordt verder geen woord aan vuilgemaakt. Niemand in het verhaal houdt halt om te zeggen dat dit onmogelijk is.
Gogol schreef het verhaal in 1836. Het hoort bij zijn reeks over Sint-Petersburg, de stad van ambtenaren, rangen en papieren. De hoofdpersoon is een collegiaal assessor die zichzelf graag majoor noemt, want de rang telt voor hem meer dan de mens. Dat detail is niet toevallig. Het hele verhaal draait om een wereld waarin de rang bepaalt wat je waard bent, en juist die wereld krijgt een neus te verwerken die een hogere rang heeft dan zijn eigenaar.
Die keuze van Gogol is scherp. In een standenmaatschappij groet je niet de mens, je groet de rang. En dan loopt daar een neus in een uniform van hogere rang dan de man die hem kwijt is. De eigenaar durft zijn eigen neus nauwelijks aan te spreken, want protocol is protocol. De absurditeit prikt precies waar de samenleving het gevoeligst is. Wie alles op rang bouwt, staat machteloos als de rang zich losmaakt van de mens en zijn eigen weg gaat.
Het interessante gebeurt daarna. Het verhaal begint zich te gedragen als een gewone kwestie. Er wordt een aangifte overwogen, er wordt aan een advertentie in de krant gedacht, er wordt over rang en fatsoen gesproken. De vorm is die van een ambtelijke procedure, compleet met de bijbehorende beleefdheid en traagheid. De ambtenaar loopt de loketten af alsof hij een gestolen horloge kwijt is.
Die logica komt niet om het raadsel op te lossen. Ze komt eroverheen liggen. Het absurde blijft precies even absurd, en juist doordat iedereen zich netjes gedraagt wordt zichtbaar hoe vreemd de situatie is. Het apparaat blijft draaien, ook als datgene waarover het draait nergens op slaat. De krantenman weigert de advertentie omdat zoiets de reputatie van de krant zou schaden. De agent spreekt over de neus zoals hij over een verdachte zou spreken. Iedereen doet correct zijn werk, en dat correcte werk is precies wat de scène zo scheef maakt.
Dit is de kern van de vorm die mij bijblijft. De ordelijkheid is geen tegengif tegen de waanzin. Ze is het vergrootglas. Hoe netter de procedure, hoe schriller de onmogelijkheid van waarover ze gaat. De logica dient de absurditeit in plaats van haar te bestrijden.
Aan het eind keert het verhaal terug naar waar het begon. De neus zit er weer, zonder verklaring, en het leven gaat door. Gogol schrijft er zelf een paar regels bij die erop neerkomen dat zulke dingen nu eenmaal gebeuren, en dat het toch raar is dat een schrijver zoiets kiest om over te vertellen. Dat is geen ontknoping en het wil er ook geen zijn. De verteller haalt zijn schouders op en laat je met de vraag zitten.
Precies dat schouderophalen maakt het verhaal af. Een verklaring aan het slot zou de absurditeit temmen. Ze zou zeggen: het was een droom, of een straf, of een symbool. Gogol weigert die uitweg. Hij laat de onmogelijkheid onmogelijk. De vorm sluit zoals hij opende, met iets waar geen touw aan vast te knopen is, en daartussen ligt de hele ambtelijke ernst.
Die weigering om te verklaren is een moedige keuze. De meeste vertellers willen de lezer aan het eind belonen met betekenis. Gogol houdt die beloning achter. Hij dwingt je om met de ongemakkelijke leegte te blijven zitten die je aan het begin ook al had. En juist doordat er geen moraal wordt uitgedeeld, blijft het verhaal knagen. Een verklaring zou het hebben afgesloten en opgeborgen. De weigering houdt het open, en open blijft het langer bij. Dat is een technisch inzicht over vertellen dat verder reikt dan dit ene verhaal. Wat je niet uitlegt, blijft werken in het hoofd van de lezer.
Wat mij bijblijft is de vorm: absurd, dan logisch, dan weer absurd. Dat is dezelfde vorm die ik in de praktijk tegenkom als een systeem iets onmogelijks als normaal behandelt. De procedure klopt van begin tot eind, en de uitkomst slaat nergens op. Ik zie het in de wereld die ik onderzoek voortdurend. Een toestemmingsvraag die formeel klopt en in de praktijk niets betekent. Een register dat keurig is ingevuld en niets beschermt. Een keurmerk dat aan alle eisen voldoet en niets zegt over wat er echt gebeurt.
In al die gevallen is het niet de fout in de procedure die stoort. De procedure is juist smetteloos. Wat stoort is dat de smetteloze procedure over iets onmogelijks heen ligt en het daardoor gewoon laat lijken. Gogol beschreef die beweging bijna twee eeuwen geleden in een verhaal over een verdwenen neus. De vorm is tijdloos, omdat bureaucratie tijdloos is.
Het gevaarlijke aan de middenbeweging is precies dat ze geruststelt. Zolang de vorm klopt, voelt de betrokkene zich in goede handen. Er wordt tenslotte gehandeld, er worden stappen gezet, er is een loket en een formulier. Die schijn van orde neemt de aandrang weg om de kernvraag te stellen, namelijk of het geheel ergens op slaat. De logica in het midden verdooft de argwaan. Ze houdt iedereen bezig met de juiste volgorde van de stappen, zodat niemand meer vraagt waarom de stappen worden gezet. Dat is waarom ik de neus geen grap vind om even bij weg te lachen. Het verhaal legt een reflex bloot die ik in de praktijk voortdurend tegenkom, de reflex om een nette procedure aan te zien voor een goede afloop.
Hoort hier ook een bewijsniveau. Dit is een leeservaring, geen meting. Dat het verhaal deze vorm heeft, is te controleren door het te lezen, en de literaire context rond Gogol is gepubliceerd en na te zoeken. Dat diezelfde vorm terugkomt in de systemen die ik onderzoek, is mijn eigen waarneming, afgeleid uit wat ik in de praktijk tegenkom. Ik bied het aan als een lens, niet als een bewijs.
Wat ik eraan vasthoud is een waarschuwing bij mijn eigen werk. Als een systeem mij vertelt dat alles in orde is, en elke procedure klopt, dan is dat op zichzelf geen geruststelling. De vraag blijft waar de procedure overheen ligt. De neus leert me om door de correcte vorm heen te kijken naar wat er werkelijk onder ligt.
Er is een reden dat een verhaal me dit beter bijbrengt dan een handleiding het zou doen. Een regel die zegt dat je door de vorm heen moet kijken, vergeet je. Een beeld van een ambtenaar die zijn eigen neus in een uniform de straat ziet oplopen, blijft. Als ik in de praktijk een smetteloze toestemmingsvraag of een keurig ingevuld register tegenkom, komt dat beeld vanzelf terug, en met het beeld de argwaan. Zo doet de literatuur werk dat een checklist niet doet. Ze plant een gevoel voor de scheefheid dat sneller aanslaat dan welke regel ook. Daarom lees ik dit soort verhalen naast mijn technische werk, en niet los daarvan.
Hier loop ik door de redenering waarmee ik van een vermoeden naar een publiceerbare bevinding kom. Het gereedschap laat ik buiten beschouwing, want dat is inwisselbaar. De volgorde van denken is dat niet, en juist daar zit het verschil tussen een indruk en iets dat een tegenpartij overleeft.
Dit is de vraag die ik het vaakst krijg, en meestal wordt hij gesteld als een vraag naar gereedschap. Welke tool gebruik je, welke taal, welk platform.
Het antwoord daarop is het minst interessante deel. Wat telt is de volgorde van denken. Wie die volgorde aanhoudt, komt met een browser en een notitieblok verder dan iemand met dure software en een slordige redenering.
Hieronder staat die volgorde, met bij elke stap het beslismoment. En met de plekken waar mijn eigen regels elkaar in de weg zitten, want die zijn er en ik wil ze niet wegpoetsen.
Aan het begin sta ik mezelf toe om van alles te denken. Een vermoeden hoeft nergens op te slaan. Het mag uit ergernis komen, uit een nieuwsbericht, uit een naam in een script die ik niet ken.
Dat is bewust. Een onderzoek dat pas begint bij wat al waarschijnlijk is, vindt alleen wat iedereen al vermoedde. De trechter mag aan de bovenkant wijd zijn, zolang hij aan de onderkant maar smal wordt.
Het beslismoment hier is: is dit toetsbaar. Een vermoeden dat ik niet in een meting kan omzetten, gaat de stapel op met dingen waar ik niets mee kan. Niet omdat het onwaar is, maar omdat ik er niets over kan zeggen dat een tegenpartij overleeft.
Stap twee: de meting die mijn vermoeden kan slopen¶
Nu bedenk ik de meting. En de toets die ik daarbij aanleg is niet welke meting mijn vermoeden bevestigt, maar welke meting hem onderuit kan halen.
Praktisch betekent dat drie dingen.
Ik begin in een schone omgeving. Geen geschiedenis, geen eerder gegeven toestemming, niets dat de uitkomst kleurt.
Ik meet drie keer: niets doen, weigeren, accepteren. Het verschil tussen die drie is waar de bevinding zit. Eén meting over alles heen wist juist het interessante uit.
Het beslismoment: hoe vaak meet ik. Eén keer iets niet zien is geen nulbevinding. Een partij die per bezoek een kleine kans heeft om af te vuren, mis je in één meting bijna altijd. Zie een nulbevinding wordt pas hard na genoeg metingen.
Ik heb dat aan mijn eigen data getoetst. Van de sites die in drie of meer runs zaten, 434 stuks, was het mediane verschil tussen de laagste en de hoogste meting nul. Voor het geheel is één run dus voldoende. Voor een individuele site is dat het niet: op veva.nl liep het uiteen van 4 tot 46 ontvangers, op werkenbijdefensie.nl van 13 tot 53.
Daar volgt een harde regel uit. Ik doe uitspraken over de verzameling op basis van één run. Ik spreek een individuele organisatie nooit aan op één run.
Voordat ik iets opschrijf, beredeneer ik het tegendeel. Kan dit verkeer een onschuldige verklaring hebben. Bestaat er een uitzondering in de wet die dit dekt. Is er een technische reden die ik over het hoofd zie. Zie Beargumenteer eerst het tegendeel van je eigen bevinding.
Deze stap kost de meeste tijd en levert de minste tekst op. Hij is de reden dat mijn stukken blijven staan als er tegengas komt, want de eerste drie tegenwerpingen zijn dan al in mijn hoofd geweest.
De regel die daarbij hoort: begin bij je zwakste claim. De bewering die het makkelijkst onderuitgaat, controleer je als eerste. Zie verifieer eerst wat het wankelst is. De verleiding is precies andersom, want aan je sterkste punt werk je met plezier.
En het gaat verder dan een gedachtenoefening. Als het tegendeel wint, gaat het stuk om. Op de sites die ik meet zag ik regelmatig dat een partij wel laadt en geen enkele cookie zet. Dat is een verzwakking van mijn eigen verhaal, en die hoort er dan gewoon in te staan.
Hier zit het scherpste beslismoment van de hele keten, en het is er een waar bijna niemand over schrijft.
Neem de vraag of weigeren werkt. Uit dezelfde scan over 1.718 overheidssites komen twee cijfers.
Het eerste: op 98,2 procent van alle sites laadde er na een weigering evenveel of meer dan toen de bezoeker niets deed. Dat is een spectaculair getal.
Het tweede: op de 1.011 sites waar geen toestemmingsmodule werd herkend, was het 77,8 procent.
Beide zijn juist berekend. Ze meten iets anders. Het eerste getal telt alle sites mee, inclusief de sites waar helemaal niets te weigeren viel, want daar is "evenveel als bij niets doen" de normale uitkomst. Het tweede getal kijkt naar de groep waar wel iets stond. Zie twee getallen die botsen meten vaak iets anders.
Ik publiceer het lagere. Altijd. Het is minder indrukwekkend en het overleeft een gesprek met een advocaat.
Dezelfde keuze maak ik bij het tellen van ontvangers. Wie elke host die je toestel aanraakt meetelt als ontvanger, komt veel hoger uit dan ik. Ik splits in categorieën en tel alleen wat ik kan dragen. Mijn cijfer is daardoor structureel te laag. Dat neem ik voor lief, want een bevinding die je kunt tonen is meer waard dan een bevinding die indruk maakt.
Bij een getal dat een heel argument moet dragen, gaat er nog een ronde overheen: kruisen tegen een onafhankelijke bron, hertellen, ontdubbelen, en een bandbreedte tonen. Zie een getal dat een argument draagt krijgt een ruggengraat.
Vier plekken waar mijn eigen regels botsen. Ik los ze niet op, ik hanteer ze.
Meet als een bezoeker, en klik niet door. Ik schrijf dat je moet scrollen en doorklikken, omdat volgtechniek op gedrag wacht. Ik schrijf ook dat doorklikken je meting vervuilt, omdat de trackers van andere pagina's je resultaat in lekken. Dat zijn twee tegengestelde adviezen en ze zijn allebei waar. Zie Meet zoals een bezoeker, niet zoals een scanner en doorklikken vervuilt je meting. Mijn oplossing is twee runs: de agressieve laat zien wat kan gebeuren, de schone levert de cijfers. Elegant is het niet.
Het gereedschap is inwisselbaar, en ik heb er vijf versies van gebouwd. Ik open dit stuk met de mededeling dat de tool er niet toe doet. Tegelijk is de helft van mijn lessen ontstaan doordat mijn instrument iets verkeerd deed. Wie zegt dat gereedschap niet uitmaakt, heeft er meestal nog nooit een gebouwd. De eerlijker formulering is dat de volgorde van denken zwaarder weegt dan de keuze van de tool, en dat de tool je stilletjes voorliegt zodra je hem niet kent.
Een lege map is een bevinding, en één keer niets zien is niets. Ik schrijf dat je moet publiceren wat je niet vond. Ik schrijf ook dat één nulmeting geen nulbevinding is. Zie een lege map is ook een bevinding en een nulbevinding wordt pas hard na genoeg metingen. Het verschil zit in het aantal metingen en in de bekende detectiegraad van je instrument. Een nul zonder die twee getallen erbij is een lege huls.
Ik wil de omvang laten zien, en mijn methode telt te laag. Een browsermeting ziet alleen de eerste server. Wat daarachter gebeurt, tussen servers onderling, blijft volledig buiten beeld. Zie Een browsermeting ziet alleen de eerste server. Ik publiceer dus getallen waarvan ik weet dat de werkelijkheid groter is, en ik zeg dat erbij. Dat is ongemakkelijk en het is het enige eerlijke.
Elke uitspraak krijgt een niveau. Gemeten, afgeleid, of vermoed.
Gemeten is wat in de opname staat. Afgeleid is wat ik uit een domeinnaam, een parameter of een register concludeer. Vermoed is wat ik denk dat er gebeurt, tot ik het kan laten zien. Zie Label elke bevinding op bewijsniveau.
Dat labelen is geen sier. Het dwingt me om per zin te bepalen waar de bewering vandaan komt. Een tracker-verzoek bewijst dat er data vertrekt, niet waar die belandt of wie hem inziet. En een sterke aanwijzing is nog geen overtreding: de meting stelt vast, de kwalificatie is aan het recht. Zie Gemeten is niet bewezen en een sterke aanwijzing voor een overtreding is nog niet de overtreding.
Hier hoort ook de nulbevinding die mijn mooiste hypothese sloopte. Ik dacht dat sites die hun beveiliging op orde hebben, ook zorgvuldiger omgaan met privacy. Het tegendeel bleek. Van de 684 sites met een Content Security Policy trackte 86,1 procent voor toestemming. Van de 1.034 sites zonder zo'n beleid was dat 42,4 procent.
Mijn verklaring is dat grote, professioneel gebouwde sites allebei hebben: een net ingerichte beveiliging en een volledige marketingstapel. Dat is afgeleid en geen meting. Het cijfer zelf is gemeten, en het staat in mijn stuk juist omdat het mijn eigen aanname omverwierp. Zie publiceer de nulbevinding die je mooiste hypothese sloopt.
Nog zo een. Van de 1.718 gemeten sites had er niet één geen privacyverklaring in de aggregatie, en toch trackte 59,8 procent van dat geheel al voor toestemming. Het papier zegt dus niets over de uitvoering. Zie Papier versus code: de verklaring en de uitvoering.
Wat er daarna nog moet gebeuren, en waarom dit werkt¶
Een gevoelige bevinding gaat eerst achter een link die nergens vindbaar is, zodat de betrokkene hem kan inzien voordat het publiek is. Zie eerst een geheime link dan pas de etalage.
En ik corrigeer nooit stil. Blijkt iets fout, dan staat de correctie er zichtbaar en gedateerd bij, met de oorspronkelijke tekst erbij geciteerd. Een stille aanpassing van een gepubliceerde conclusie is niet te onderscheiden van heimelijk afzwakken. Zie corrigeer nooit stil.
Wat ik niet zelf heb gemeten, bevestig ik niet, hoe goed het verhaal ook in mijn straatje past. Mijn oordeel reikt tot waar mijn meting reikt en geen stap verder. Zie wat je niet zelf hebt gemeten bevestig je niet.
Er zit in deze volgorde geen geheim. Het is traag, het is saai op de plek waar het ertoe doet, en het is volledig na te doen.
Dat laatste is het punt. Een bevinding die alleen ik kan reproduceren, is geen bevinding. Elke stap hierboven is met een gewone browser uit te voeren op een gewone avond, en dat is precies de bedoeling.
De prijs betaal ik in getallen. Mijn cijfers zijn stelselmatig lager dan wat een ruimere telling zou opleveren, mijn conclusies zijn voorzichtiger dan het materiaal soms toelaat, en mijn stukken bevatten passages waarin ik mijn eigen verhaal verzwak. Wat ik daarvoor terugkrijg is dat er tot nu toe niets is ingetrokken.
Van Duin combineerde vakken die zelden in één mens zitten: hij schreef, speelde, zong en deed het technische werk achter zijn eigen producties. Wat mij bezighoudt is niet die veelzijdigheid, maar wat de humor deed. Een land dat net uit een oorlog kwam kreeg iemand die het liet lachen, en dat lachen was geen verstrooiing maar verwerking.
André van Duin deed dingen die normaal over meerdere mensen verdeeld zijn. Hij bedacht en schreef zijn eigen materiaal, speelde het zelf, zong, en bemoeide zich met het technische werk achter de schermen. Later bleek hij ook serieus te kunnen acteren, en op hoge leeftijd vond hij zichzelf opnieuw uit als presentator van een bakprogramma dat een heel ander publiek trok.
Zo'n combinatie van maken, uitvoeren en zelf aan de knoppen zitten zie ik zelden bij één persoon. In de meeste producties is dat werk juist opgeknipt. De een schrijft, de ander speelt, een derde regisseert, een vierde zit aan de techniek. Elke schakel kent maar een deel van het geheel. Van Duin hield die schakels in één hoofd. Dat betekent dat hij de grap kon aanpassen op het moment dat hij hem speelde, en de timing kon bijstellen omdat hij wist wat de techniek aankon.
Ik herken die manier van werken. Wie het hele ambacht in één hoofd houdt, van het idee tot de uitvoering tot de laatste knop, maakt iets wat een opgeknipt team moeilijk evenaart. De verantwoordelijkheid ligt dan ook op één plek. Er is niemand om naar te wijzen als het niet werkt.
Er zit ook een prijs aan die manier van werken. Wie alles zelf doet, kan zich achter niemand verschuilen en moet elke zwakke plek in het geheel zelf dragen. De schrijver kan een matige acteur redden, en andersom. Wie beide rollen zelf speelt, heeft dat vangnet niet. Dat maakt de eis aan de vakman zwaarder. Elke schakel moet op orde zijn, want er is geen tweede hoofd dat de gaten opvangt. Dat Van Duin dat decennia volhield, zegt iets over de breedte van zijn vakmanschap.
Wat mij meer bezighoudt dan die veelzijdigheid, is wat het effect ervan was. Nederland kwam uit een oorlog en de generatie daarna droeg dat mee, vaak zonder erover te praten. Het spreken over verlies en angst zat niet in de cultuur van die jaren. Je hield je groot, je werkte door, je bouwde het land weer op. In die tijd kreeg het land iemand die het aan het lachen maakte.
Dat lachen had een functie. Voor veel mensen was het een van de weinige plekken waar het even lichter werd. Humor doet iets met verdriet wat een gesprek niet altijd voor elkaar krijgt. Het maakt het draagbaar zonder dat je het hoeft uit te leggen. Je zit in een zaal, of voor de televisie, en je lacht om iets onnozels. Voor de duur van die lach is de druk eraf. Je hoeft niemand iets te bekennen. Je hoeft je verdriet niet eens te benoemen om er even minder last van te hebben.
Dat is een oud mechanisme, en het is breder dan één land of één tijd. In veel culturen krijgt de lach een plek juist rond de dood en de rouw, bij de nabestaanden thuis, waar naast de tranen ook wordt gelachen om de overledene. De lach en het verdriet sluiten elkaar niet uit. Ze houden elkaar in evenwicht. De hofnar mocht dingen zeggen die niemand anders mocht zeggen, juist omdat het als grap was verpakt. Komedie geeft een samenleving een manier om naar haar eigen pijn te kijken zonder dat het ondraaglijk wordt. De lach opent een deur die een ernstig gesprek dichthoudt.
Er zit nog een tweede werking in. Lachen is een sociaal ding. Je lacht samen, in een zaal of aan tafel, en dat samen lachen bindt. Een generatie die zich groothield en zweeg, kon in die gedeelde lach even iets delen wat ze in woorden niet deelde. Niemand hoefde te bekennen dat het zwaar was. Toch wist iedereen in de zaal dat het zwaar was, en juist daarom kwam de lach zo hard. De grap was de vermomming waaronder de erkenning kon meeliften. Op die manier doet komedie iets wat een preek of een troostwoord niet doet. Ze laat mensen samen de last aanraken zonder dat iemand zich hoeft bloot te geven.
Van Duin bereikte daarbij een breed publiek, jong en oud, hoog en laag opgeleid. Dat is zeldzaam. Veel kunst deelt haar publiek op in wie het snapt en wie niet. Brede komedie doet het omgekeerde. Ze verzamelt mensen die verder weinig gemeen hebben rond dezelfde grap. Voor een land dat na een oorlog weer één geheel moest worden, is dat verzamelen zelf van waarde.
Hier hoort een eerlijk voorbehoud. Dat de humor van Van Duin voor een generatie als verwerking werkte, is een afgeleide bewering, geen gemeten feit. Ik heb geen onderzoek dat de rouwverwerking van naoorlogse kijkers koppelt aan zijn uitzendingen. Wat ik heb is een historische context, een bekend mechanisme uit de psychologie van humor, en de omvang van zijn publiek over decennia. Daaruit leid ik af dat het effect er was. Ik meet het niet.
Ik zet dat er expres bij, omdat ik in mijn andere werk streng ben op het verschil tussen wat ik meet en wat ik vermoed. Diezelfde streng hoort ook hier. De observatie staat, maar het bewijsniveau is dat van een goed onderbouwd vermoeden, gedragen door historische context en algemene kennis over hoe humor werkt.
Ik schrijf elders in dit manuscript dat weerstand mensen vormt en dat comfort dat verhindert. Dit is de andere kant van diezelfde gedachte. Weerstand vormt, en toch draagt niemand haar droog. Er is iets nodig om het uit te houden, en komedie is daar een van de sterkste vormen van. Zonder iets om de last te verlichten, breekt de mens onder de weerstand die hem zou moeten vormen.
We noemen komedie licht vermaak en zetten haar onderaan de ladder, onder drama en onder kunst. Ik denk dat dat een misvatting is. De ernst krijgt vanzelf status, want ernst oogt belangrijk. Komedie moet haar plek verdienen tegen het vooroordeel in dat ze niet meetelt. Maar wie een land na een oorlog aan het lachen krijgt, houdt iets overeind wat met ernst alleen niet overeind blijft. Dat is werk van het hoogste soort, ook als het eruitziet als flauwekul.
Het waarderen van dat werk vraagt om een omkering van de blik. We meten belang vaak af aan hoe zwaar iets oogt. Een tragedie oogt zwaarder dan een klucht, dus krijgt de tragedie het respect. Maar het effect op mensen loopt niet mee met dat gewicht. Een grap kan iemand een avond, of een leven, lichter maken, en de tragedie kan langs hem heen glijden. Als je op effect meet in plaats van op uiterlijk gewicht, verschuift komedie omhoog. Ik schrijf dit op omdat ik diezelfde omkering in mijn andere werk nodig heb. Wat er belangrijk uitziet en wat er werkelijk toe doet, zijn niet hetzelfde, en de gewoonte om het uiterlijk voor de zaak aan te zien, kost ons de blik op wat echt werkt.
Andre van Duin, "Ik ben gelukkig", autobiografie, 2018zijn eigen verslag van rouw naast het vak
gedachteessayBekwaamheidsfouten in code, bestuur en politiekbronnenverwant
Twintig jaar lang won werkende software van veilige software
Twintig jaar lang was de vraag of iets werkte belangrijker dan de vraag hoe het werkte. Het web moest kunnen chatten, veilig kwam later, en later kwam nooit. Daarom vind ik nog steeds overal dezelfde gaten. Niet omdat ze moeilijk zijn, maar omdat niemand betaalt voor de inbraak die niet gebeurde.
Ergens in de afgelopen twintig jaar is de vraag of iets werkt belangrijker geworden dan de vraag hoe het werkt. Het web moest kunnen chatten. Of dat veilig kon, was een vraag voor later. Er moest een betaalknop in, of die knop te misbruiken was zou nog wel blijken. Het moest in de cloud, wie er precies bij kon was iets voor de volgende sprint.
Later kwam nooit. Dat is de hele these in een zin.
Het is geen verhaal over domme mensen. De bouwers wisten het meestal wel. Het werd alleen nooit de vraag waarop ze werden afgerekend. Wie in een oplevering laat zien dat de functie draait, heeft geleverd. Wie in dezelfde oplevering laat zien dat hij drie dagen bezig is geweest met de vraag wat er gebeurt als iemand het formulier misbruikt, heeft vertraging veroorzaakt.
De verschuiving heeft in mijn eigen vak zelfs een naam gekregen voordat ze goed en wel was ingezet. Richard Gabriel schreef in 1989 het stuk dat bekend werd als The Rise of Worse Is Better: het simpele systeem dat vandaag draait verslaat het doordachte systeem dat morgen af is, omdat het eerder in handen van gebruikers ligt en zich daarna vastzet. Dat was toen een observatie over softwareontwerp. Het is intussen de grondwet van de hele sector. Nicholas Carr beschreef in The Shallows (2010) een verwante beweging bij lezers: van begrijpen naar gebruiken. Hetzelfde is met bouwen gebeurd.
Als je je afvraagt waarom ik na al die jaren nog steeds dezelfde soort bevindingen doe, is dit het antwoord. De fouten die ik vind zijn zelden ingewikkeld. Een tracker die vuurt voor de toestemming. Een instelling die op de verkeerde stand staat. Een gegeven dat naar een land gaat waar het niet heen hoort. Briljante aanvallen zijn het zelden. Het zijn open deuren.
Kijk er wat langer naar en het zijn steeds dezelfde drie soorten. De eerste is een volgorde die verkeerd staat: er gebeurt iets voordat er toestemming is. De tweede is een standaardwaarde die nooit is aangeraakt: de leverancier levert een dashboard met alles aan, en niemand heeft het uitgezet. De derde is een schakel verderop in de keten die niemand heeft nagelopen, waar het gegeven een grens over gaat die de eigenaar van de site nooit heeft bedoeld. Voor alle drie geldt dat er geen zwakke plek in de cryptografie voor nodig is. Je hebt alleen het verkeer nodig, en dat mag je gewoon meelezen in je eigen browser. Zie Netwerkverkeer lezen via HAR-files.
Ze staan open omdat het bouwen ervan werd beloond en het dichtzetten niet. De pagina laadde, de knop werkte, de demo deed het. Klaar. Dat er tegelijk een zijdeur openstond, kwam pas ter sprake toen iemand er doorheen liep, en meestal was dat niemand, en dus bleef hij open.
Onder alle losse bevindingen in dit manuscript zit dus een gedeelde oorzaak. Die oorzaak is economisch van aard. De kennis om het beter te doen lag er al, de standaarden lagen er al, en in veel gevallen lag zelfs de instelling er al, op de verkeerde stand.
Een werkende functie is zichtbaar. Je kunt hem demonstreren, verkopen, in een release zetten. Een inbraak die niet plaatsvond is onzichtbaar. Je kunt niet aantonen wat je hebt voorkomen, want het bewijs is het uitblijven van iets.
Dus wie goed werk levert aan de hoe-kant, kan zijn bijdrage nooit hard maken. Wie de functie oplevert, kan dat wel. In elke organisatie waar budget wordt verdeeld op zichtbare uitkomst, verliest de eerste stelselmatig van de tweede. Er is zelden iemand die dat besluit. De meetlat meet maar een kant op, en de rest volgt vanzelf.
Let op wat dat met mensen doet. De ingenieur die de zijdeur dichtzet levert per definitie een negatief resultaat op: er gebeurde niets. Zijn collega levert een scherm op dat je kunt laten zien aan een klant. Als dat elk kwartaal opnieuw gebeurt, hoef je niemand van kwade wil te verdenken om te voorspellen wie er over drie jaar leiding geeft en wie er is vertrokken. Zie Op IT-afdelingen beslist wie het vak nooit beoefende.
De regel zelf ontbreekt overigens niet. AVG artikel 25 eist gegevensbescherming door ontwerp en door standaardinstellingen, artikel 32 eist passende beveiliging, en artikel 11.7a van de Telecommunicatiewet eist toestemming voordat er iets op je toestel wordt gelezen of geplaatst. Het hoe is dus al twintig jaar een verplichting en niet alleen een deugd. Wat ontbreekt is iemand die het op het moment van opleveren natelt. Zie Nederland heeft een wettelijke bekwaamheidseis en toetst hem niet.
Twintig jaar lang was dit houdbaar, en dat had een simpele reden. De gaten waren er wel, maar iemand moest ze vinden. Dat kostte tijd, kennis en aandacht, en de meeste sites en apps waren te oninteressant om die aandacht te krijgen. De verdediging kon achterlopen omdat de aanval niet schaalde.
Dat is nu aan het kantelen. Wat mij een middag kost, kost een geautomatiseerd systeem seconden, en het kan het tegen duizenden doelen tegelijk doen. De open deuren zijn dezelfde gebleven, alleen loopt er nu iemand langs alle deuren in plaats van langs een paar.
Ik weet dat uit mijn eigen werk, en dat is het deel waar ik hard voor sta. Dezelfde analyse die ik eerst per site met de hand deed, draait bij mij nu geautomatiseerd over lijsten sites, in een nacht, op één machine, met middelen die iedereen kan kopen. Bewijsniveau voor mijn eigen keten: gemeten. De stap naar wat kwaadwillenden ermee doen: afgeleid, want de rekensom is dezelfde en de gereedschappen zijn openbaar.
Wat daarmee verdwijnt is een subsidie. Onbekendheid was jarenlang een gratis beveiligingslaag, betaald door de schaarste aan aandacht van aanvallers. Die schaarste is bezig te verdwijnen. De rekening van twintig jaar uitstel wordt daarmee in een keer opgeeist, en niet bij de partij die het uitstel koos.
Het scherpste voorbeeld is de sector die dit alles aanjaagt.
Op 22 juli 2026 maakte OpenAI bekend dat een van zijn systemen tijdens een test uit de afgeschermde omgeving was gebroken, het internet had bereikt en had ingebroken bij Hugging Face, een ander bedrijf in dezelfde sector. Volgens het bedrijf ging het om een combinatie van een net uitgebracht model en een nog krachtiger model dat intern werd getest. Het bedrijf noemde het een ongekend incident en zei zijn waarborgen te versterken. Alles wat ik hierover weet komt uit die eigen mededeling. Bewijsniveau: gerapporteerd door de betrokken partij, door mij niet nagemeten.
Lees dat nog eens. Een organisatie met de beste mensen, ongelimiteerde middelen en het uitdrukkelijke doel om te onderzoeken wat haar systemen kunnen, werd verrast door wat haar eigen systeem deed. De capaciteit was af. De beheersing kwam daarna.
Dat is dezelfde fout als zeep op een gaspedaal, alleen op een schaal waar de gevolgen niet bij een terugroepactie ophouden. Zie De Cybertruck is wel echte onbekwaamheid. En de hele investeringsgolf eromheen, miljarden, hele economieen, is gebouwd op het dat. Dat het werkt is bewezen. Hoe het werkt weet niemand precies, ook de makers niet, en dat wordt gepresenteerd als een tijdelijk ongemak in plaats van als de kern van het probleem.
Er is een gezonde tegenhanger, en die laat zien dat het wel kan. Met Paramant bouw ik versleuteling tegen een computer die nog niet bestaat. Dat is de omgekeerde volgorde: eerst het hoe, en dan pas de vraag of iemand er vandaag om vraagt. Zie Bouwen tegen een aanval die nog niet bestaat. Het is ook meteen duidelijk waarom die volgorde zeldzaam is. Er staat op de dag van oplevering niets tegenover.
Als de diagnose een meetprobleem is, dan is het antwoord een meting. Niet als reparatie, wel als tegenwicht: zodra het hoe een getal heeft dat naast de functie op tafel ligt, kan het meewegen in dezelfde vergadering.
Het simpelste getal dat ik ken is dit: hoeveel derde partijen worden er aangesproken voordat de bezoeker iets heeft aangeklikt. Je hebt er één opname van je eigen site voor nodig waarin je niets aanraakt.
import json
from urllib.parse import urlparse
def derden_voor_toestemming(har_pad, eigen_domein):
har = json.load(open(har_pad, encoding="utf-8"))
hosts = set()
for e in har["log"]["entries"]:
host = urlparse(e["request"]["url"]).hostname or ""
if host and not host.endswith(eigen_domein):
hosts.add(host)
return sorted(hosts)
derden = derden_voor_toestemming("niets-aanraken.har", "voorbeeld.nl")
print(f"derde partijen voor toestemming: {len(derden)}")
for h in derden:
print(" ", h)
Dat is alles. Eén getal, en de namen erachter. Zet die regel in dezelfde pijplijn die je tests draait, laat hem falen boven een afgesproken drempel, en het onzichtbare heeft een plek gekregen op het bord waar ook de functies staan.
Twee waarschuwingen horen erbij, anders meet je jezelf rijk. De eerste: meet zoals een bezoeker binnenkomt, met een echte browser en een echt scherm, want een kale scanner krijgt een andere pagina te zien. Zie Meet zoals een bezoeker, niet zoals een scanner. De tweede: nul is ook de uitkomst van een mislukte meting. Een opname die stukliep en een site die niets doet zien er in de uitvoer identiek uit, dus je moet apart vaststellen dat de meting is gelukt voordat je de nul gelooft. Zie Een mislukte meting is geen schone app.
Ik ben niet tegen techniek en ik ben niet tegen AI. Ik gebruik het zelf, elke dag, en het is buitengewoon. Mijn kritiek gaat over de volgorde waarin we het inzetten, en daar heb ik een eigen positie over opgeschreven. Zie AI hoort een versterker te zijn, geen vervanging.
Mijn bezwaar is smaller en harder. Zolang alleen het dat wordt beloond, blijft het hoe een kostenpost, en blijft iedereen die het hoe serieus neemt de partij die geld kost en niets oplevert. Ik schrijf dat niet toe aan een karakterfout van bedrijven. Het is een meetprobleem. En meetproblemen zijn op te lossen, alleen niet door de partij die er voordeel van heeft.
Daarom meet ik. Een meting repareert niets. Ze maakt het onzichtbare zichtbaar, en pas dan kan het meewegen tegen het zichtbare. Dat is ook waarom ik het bij publiceren niet laat: een bevinding zonder een betere bouwwijze ernaast blijft een klacht. Zie Apple, Google en Meta verdienen aan tracking binnen de wet.
En het is de reden dat ik hier weinig hoop vestig op de partijen die het probleem hebben veroorzaakt. Wie bouwt, bepaalt wat er gebouwd wordt, en wie afrekent, bepaalt wat er wordt gebouwd door wie er bouwt. Zie De maker en de aandeelhouder willen niet hetzelfde. Zolang die meetlat maar een kant op meet, blijft het werk aan de andere kant liggen bij mensen die het doen zonder dat iemand ervoor betaalt.
Doorstane tegenslag vormt mensen sterker dan comfort
De Bijbel zegt dat verdrukking volharding voortbrengt, en dat is geen troostpraatje maar een uitspraak over hoe mensen worden gevormd. Een kind dat binnen veilige grenzen tegenslag doorstaat, wordt een prettiger mens dan een kind dat alles voor elkaar krijgt. Dat is geen pleidooi om iemands leven te verzwaren. Het is een pleidooi om meer zelf te doen waar dat kan.
Dat tegenslag vormt is geen nieuw inzicht en geen persoonlijke vondst van mij. In de brief aan de Romeinen staat de keten kort en droog: verdrukking brengt volharding voort, volharding beproefdheid, en beproefdheid hoop. Jakobus zegt het in dezelfde geest over beproeving die standvastigheid werkt.
Wat me daaraan opvalt is dat het geen troostformule is. Het is geen belofte dat het later goed komt. Het is een bewering over volgorde: dit komt uit dat voort, en zonder dat komt het niet.
In de moderne psychologie duikt dezelfde vorm op, onder andere in het werk van Jordan Peterson, die het thema breed onder de aandacht heeft gebracht: bescherm een kind niet tegen alles, want juist in het aangaan van moeilijkheid ontstaat het vermogen om moeilijkheid aan te kunnen.
Hier moet ik meteen de belangrijkste nuance aanbrengen, anders wordt dit gevaarlijke onzin.
Het is geen rechte lijn waarbij meer lijden meer vorming geeft. Het is een omgekeerde U. Te weinig weerstand levert iemand op die bij de eerste echte tegenslag omvalt, omdat hij nooit heeft geoefend. Te veel, of te vroeg, of zonder iemand die opvangt, beschadigt en vormt niet. Dat laatste is geen mening: onderzoek naar ingrijpende jeugdervaringen laat een duidelijk verband zien met schade die decennia meegaat.
Het verschil zit in dosering en in of er iemand naast je staat. Een kind dat valt en zelf opstaat terwijl een ouder toekijkt, leert iets. Een kind dat valt en niemand heeft, leert iets heel anders.
Daarom zeg ik uitdrukkelijk niet dat je iemands leven moeilijker moet maken. Dat is de verkeerde conclusie uit een juiste waarneming, en ze wordt vaak getrokken door mensen die het op anderen toepassen en niet op zichzelf.
De praktische vertaling is veel saaier en veel kleiner: meer zelf doen waar het kan.
Zelf koken in plaats van bestellen. Zelf uitzoeken voor je het vraagt. Zelf repareren voor je vervangt. Zelf de zin nog een keer schrijven voor je hem laat schrijven. Geen van die dingen is lijden in enige serieuze zin. Het is alleen wrijving, en wrijving is precies wat er tegenwoordig systematisch uit het dagelijks leven wordt weggehaald, want elke weggenomen wrijving is een verdienmodel.
Dat is wat me eraan interesseert. Het comfort dat ons wordt verkocht is niet neutraal. Elke handeling die iemand van je overneemt, is een handeling die je niet meer oefent.
Hier komt dit samen met de rest van wat ik schrijf, en dat verraste me zelf.
Ik betoog dat je AI pas moet gebruiken als je zelf hebt leren denken, omdat het middel anders de oefening vervangt in plaats van te versterken. Ik betoog dat koken verdwijnt als een generatie het niet meer hoeft, en dat de terugweg dan dicht is. En ik betoog nu dat mensen gevormd worden door weerstand die ze zelf doorstaan.
Dat zijn niet drie standpunten. Het is een keer hetzelfde, toegepast op denken, op vaardigheid en op karakter. Vermogen ontstaat uit weerstand, en wat de weerstand wegneemt voordat ze haar werk heeft gedaan, neemt het vermogen weg.
De ongemakkelijke consequentie is dat vooruitgang en vorming elkaar deels bijten. Bijna elke verbetering in comfort haalt ergens een oefening weg. Meestal is dat winst, soms niet, en het verschil zie je pas een generatie later. Ik weet niet hoe je dat vooraf beslist. Ik weet wel dat de partij die het comfort verkoopt, die vraag nooit zal stellen.
Ik ben geen asceet en ik heb geen behoefte aan afzien om het afzien. Ik gebruik de gemakken die er zijn, deze tekst niet uitgezonderd.
Wat ik probeer is smaller: bij elke handeling die iets van me overneemt, af en toe de vraag stellen of ik het zelf nog kan. Niet uit principe, maar omdat het antwoord op een dag nee wordt zonder dat je het merkt, en dat is precies het moment waarop je het niet meer kunt kiezen.
Richard Tedeschi en Lawrence Calhoun, "Posttraumatic Growth: Conceptual Foundations", 1995het onderzoek naar groei na tegenslag, met de grenzen die de auteurs zelf noemen
Ik zie AI als alcohol of anabolen: een middel dat versterkt wat er al is. Wie eerst zelf heeft gestudeerd en nagedacht, krijgt een hefboom. Wie er als kind mee begint, krijgt een prothese voor een spier die nooit is gegroeid, en blijft intellectueel een baby. Daarom denk ik aan een ondergrens, en daarom moet ik ook uitleggen waarom dat geen ladder is die ik achter me optrek.
Ik zie AI als een genotsmiddel of een prestatiemiddel, en die vergelijking is niet badinerend bedoeld. Alcohol kent een leeftijdsgrens omdat een brein dat nog groeit er anders op reageert dan een brein dat af is. Anabolen zijn in de sport verboden omdat ze werken. Wat ze opleveren is alleen iets anders dan wat training oplevert. Ze geven het resultaat van de opbouw en slaan de opbouw over.
Bij beide is de doorslaggevende factor wat er onder ligt op het moment dat je het neemt. Het middel doet in beide gevallen hetzelfde. Het lichaam waarin het terechtkomt verschilt, en dat verschil bepaalt of je er sterker of afhankelijker uitkomt.
Hier hoort meteen een eerlijkheid bij. De schade van alcohol op een jong brein is gemeten, in longitudinaal onderzoek, met controlegroepen. Wat ik over AI en een jong brein zeg is vermoed. Ik heb geen cohort dat opgroeide met een taalmodel op zak en dat ik twintig jaar later heb nagemeten, en niemand anders heeft dat ook. De analogie is een manier om scherp te krijgen waar ik naar zou kijken, en ze is geen bewijs dat het zo werkt. Ik probeer dat onderscheid in alles wat ik schrijf overeind te houden, zie Label elke bevinding op bewijsniveau.
Versterking en vervanging zijn dezelfde handeling¶
Daar zit het onderscheid dat ik eigenlijk bedoel, en het is preciezer dan leeftijd.
Wie een vak beheerst en er AI bij pakt, krijgt een hefboom. Hij ziet wanneer het antwoord rammelt, hij weet welke vraag hij moet stellen, en hij herkent wanneer hij wordt voorgelogen. Het werk gaat sneller en zijn oordeel blijft de maat.
Wie precies dezelfde handeling doet zonder die ondergrond, krijgt iets anders terug. Er komt een antwoord uit dat goed genoeg klinkt om mee door te gaan, en er is niets om het tegen af te zetten. Dat is een prothese voor een spier die nooit is gegroeid. Het werkt, en juist daarom groeit die spier ook nooit meer.
Het venijn zit in wat er aan de buitenkant te zien is. De handeling is identiek. De uitvoer is vaak ook identiek, zeker in het begin. Het enige wat verschilt is of er iemand aan de knoppen zit die de uitvoer kan wegen, en dat is precies de eigenschap die je zelf niet kunt beoordelen als je haar mist. Een leek die een goed antwoord krijgt en een leek die een fout antwoord krijgt, ervaren hetzelfde. Deze faalvorm verbergt zichzelf. Daarom kun je er ook niet op vertrouwen dat mensen het vanzelf merken en bijsturen.
Dat is dezelfde as als bij koken en bij het ambacht. Een wasmachine neemt een taak over en er gaat niets verloren wat je node mist, want het boenen van lakens was nooit de vaardigheid waar het om ging. Een middel dat het denken zelf overneemt, neemt de oefening over waaruit dat denken ontstaat. Dat is een ander soort overname, en de vraag welke van de twee je voor je hebt is de enige die er werkelijk toe doet. Zie Een vaardigheid verdwijnt in een generatie en Twintig jaar lang won werkende software van veilige software.
Vaardigheid ontstaat uit weerstand. Je leert schrijven door vast te lopen in een zin, redeneren door een fout te maken en die zelf te vinden, en een vak door de saaie jaren waarin je nog niets kunt.
Die weerstand levert iets op wat je later niet meer terugziet als aparte kennis. Je bouwt een intern model van hoe fout eruitziet. Je weet hoe een redenering aanvoelt die net iets te glad loopt, omdat je die zelf twintig keer hebt geproduceerd en er twintig keer op bent teruggefloten. Dat model is het instrument waarmee je later de uitvoer van een machine kunt beoordelen. Het ontstaat alleen door het zelf fout te doen.
Een middel dat die weerstand wegneemt voordat ze haar werk heeft gedaan, neemt behalve het ongemak ook de vorming weg. Wie op zijn twaalfde elk opstel laat maken, krijgt betere opstellen en wordt geen betere schrijver. Wie op zijn dertigste hetzelfde doet, is een schrijver die tijd bespaart.
Zelfde handeling, zelfde middel, tegengesteld gevolg. Het enige verschil is wat er al stond.
Daarom denk ik aan een ondergrens, ergens rond de leeftijd waarop iemand een studie of een vak heeft doorlopen. Twintig is geen magisch getal. Leeftijd is een grove benadering van de vraag waar het echt om draait, namelijk of er al iets staat dat versterkt kan worden. Ik zou een precieze toets prefereren boven een leeftijd, en ik weet niet hoe die toets eruit zou zien. Zie ook Doorstane tegenslag vormt mensen sterker dan comfort.
Ik zeg er nadrukkelijk bij dat dit een denkrichting is en geen wetsvoorstel. Wat volgt zijn de drie redenen waarom ik er zelf niet gerust op ben.
In de Phaedrus laat Plato de Egyptische koning tegen de uitvinder van het schrift zeggen dat het middel vergeetachtigheid zal brengen, omdat mensen zullen vertrouwen op tekens buiten zichzelf in plaats van op wat ze van binnen dragen. Plato schreef dat bezwaar op. De ironie is meteen onderdeel van het argument.
Hetzelfde verwijt is gemaakt tegen de drukpers, tegen de rekenmachine en tegen de zoekmachine. Elke keer bleek het te somber. Ik moet aannemen dat het deze keer ook te somber kan zijn, en ik kan niet bewijzen dat het anders ligt.
Wat me van een makkelijke geruststelling weerhoudt, is dat de klacht ook nooit helemaal onwaar was. De orale geheugencultuur is wel degelijk verdwenen. Mensen die epossen van duizenden regels uit het hoofd konden reciteren zijn er niet meer, en dat is een afgeleide constatering waarvoor ik geen meting heb. Wat er gebeurde was een ruil, en de ruil bleek achteraf de moeite waard. De klacht klopte over het verlies en zat ernaast over de balans.
Als ik dat patroon serieus neem, is de vraag niet of er iets verdwijnt. Er verdwijnt iets. De vraag is wat. Het schrift nam de opslag over en liet het bewerken staan. De rekenmachine nam het uitvoeren van een algoritme over en liet het kiezen van het algoritme staan. In beide gevallen bleef de kern van het redeneren bij de mens liggen. Een taalmodel biedt zich aan voor het bewerken zelf, voor de stap waarin je uit gegevens een gedachte maakt. Of het die stap ook werkelijk overneemt of alleen versnelt, is een open vraag. Ik weet het antwoord niet en ik houd er rekening mee dat ik hier fout zit. Zie Je kunt vergeten dat je je iets herinnerde en Beargumenteer eerst het tegendeel van je eigen bevinding.
Alcohol zit in een fles die iemand moet verkopen. Er is een toonbank, een kassa en een mens die kan weigeren. Dit zit in elk apparaat, gratis, in elke browser en in elke app, en het draait desnoods lokaal op een laptop zonder dat er ooit een server aan te pas komt.
Een leeftijdsgrens die niemand kan afdwingen, blijft een wens. En de enige manier waarop je hem wel zou afdwingen, is erger dan de kwaal: identificatie bij elk model, voor elke gebruiker, elke keer. Dat is precies de infrastructuur waartegen ik in de rest van dit manuscript bezwaar maak. Een leeftijdscontrole is een identiteitscontrole met een vriendelijk gezicht, en zodra die er ligt, ligt hij er ook voor andere doelen. Zie Een resetbare identifier is alsnog een sleutel.
Daarmee valt mijn eigen voorstel in zijn hardste vorm om. Wat overblijft is de bruikbaarder vraag: hoe richt je onderwijs zo in dat de weerstand blijft bestaan terwijl het middel gewoon binnen handbereik ligt. Daar zijn wel aanknopingspunten. Beoordeel het proces in plaats van alleen het product. Laat mensen mondeling verdedigen wat ze inleverden. Zorg dat er momenten zijn waarop het gereedschap er niet is, zoals een sportschool waar de halters echt zwaar zijn. Dat verplaatst de last van een verbod naar het ontwerp van de opleiding, en dat is een last die wel te dragen valt.
Voor wie dyslectisch is, voor wie de taal niet als moedertaal spreekt, voor wie thuis geen opgeleide ouders had die de opdracht even konden uitleggen, gaat er met dit middel een deur open. Het neemt een drempel weg die vaak niets te maken heeft met de vaardigheid waar het in het vak om gaat. Spelling is niet hetzelfde als redeneren. Vloeiend Nederlands is niet hetzelfde als scherp denken. Iemand die op de eerste drempel struikelt, kwam bij de tweede nooit aan.
Een ondergrens sluit die deur precies voor de groep die haar het hardst nodig heeft. Dat is een echte kostenpost van mijn eigen standpunt en ik heb er geen oplossing voor.
Het bezwaar wijst wel ergens heen. Als het verschil zit tussen drempels die met de vaardigheid te maken hebben en drempels die dat niet doen, dan is een grens per functie logischer dan een grens per persoon. Spelling laten corrigeren is iets anders dan een argument laten bedenken. Ik zie alleen niet hoe je dat onderscheid handhaaft in een gereedschap dat beide met dezelfde knop doet, en ik wil het niet mooier voorstellen dan het is. Zie Sommige bekwaamheid zit niet in een cursus en Op IT-afdelingen beslist wie het vak nooit beoefende.
Dit blijft anders een verhaal over anderen. Dit is de regel die ik op mijn eigen werk toepas, en ze is opgeschreven zodat iemand hem kan overnemen of afwijzen.
Ten eerste: het gereedschap meet, het model interpreteert. Een scanner levert een HAR-bestand, een model leest die HAR en stelt een classificatie voor, en de classificatie geldt pas als ze terug te vinden is in de ruwe opname. Een model is in mijn werk nooit de bron van een feit. Zie Netwerkverkeer lezen via HAR-files en Een curve die getekend is door een taalmodel.
# vaste volgorde: gereedschap waarneemt, model stelt voor, ik toets terug
har = scanner.run(url) # reproduceerbare waarneming
kandidaten = model.classificeer(har) # snel, en falibel
bevestigd = [k for k in kandidaten if k.terug_te_vinden_in(har)]
Ten tweede: ik laat het alleen werk doen dat ik zelf kan controleren. Als ik de uitkomst niet kan toetsen, dan is de tijdwinst schijn en heb ik alleen mijn onwetendheid sneller opgeschreven. Dat is een harde grens die ik in de praktijk regelmatig tegenkom, en meestal betekent het dat ik eerst zelf iets moet uitzoeken voordat ik het uit handen mag geven.
Ten derde: elke bevinding krijgt een label. Gemeten, afgeleid of vermoed. Dat label is geen sier. Het dwingt me om per zin te bepalen waar de bewering vandaan komt, en het is precies de stap die een taalmodel het liefst voor me overslaat, omdat vloeiend proza geen bewijsniveaus nodig heeft om overtuigend te klinken. Zie Mijn werkwijze: van vermoeden naar bevinding.
Wat ik niet uit handen geef is het bepalen van wat ik vind, en de laatste toets voor publicatie. Dat is de spier die ik in stand wil houden. En de winst voelt zelden als vrije tijd, want de ruimte die vrijkomt gaat meteen op aan het volgende, zie AI-tijdwinst verdwijnt in opgewekte vraag, zoals bij snelwegen.
Dan het punt waar ik mezelf niet omheen kan schrijven.
Ik gebruik dit zelf, intensief, elke dag. Mijn stelling stelt precies de groep vrij waar ik zelf in val: wie de studies en de jaren al achter zich heeft. Dat is de klassieke vorm van de ladder optrekken, en het feit dat ik het oprecht denk maakt het niet minder verdacht. Mensen die profijt hebben van een regel vinden die regel opvallend vaak verstandig.
Twee dingen ter verdediging, en de lezer mag oordelen of ze volstaan. Het criterium gaat over wat er onder iemand ligt, en dat is in principe voor iedereen bereikbaar, alleen later. De ladder blijft dus staan, hij wordt trager. En ik denk dat ikzelf ook zou struikelen als dit weg zou vallen. Makkelijker leven went. Ik ben niet zo naief te denken dat ik immuun ben voor wat ik bij anderen beschrijf, en ik merk zelf dat ik sneller naar het gereedschap grijp dan een jaar geleden.
Er is een uitkomst die me ongelijk zou geven, en ik wil hem hier noemen omdat een stelling zonder die uitkomst geen stelling is. Als een generatie die hiermee opgroeit over tien jaar aantoonbaar beter redeneert, beter toetst en beter herkent wanneer een machine onzin produceert, dan klopt mijn hele redenering niet. Ik heb het dan verward met een verlies wat in werkelijkheid een verplaatsing was, net zoals de koning in de Phaedrus. Dat zou me oprecht opluchten.
Wat mij betreft is dat de eerlijkste versie van dit standpunt. Ik houd het voor waar, ik kan het niet bewijzen, en ik heb er zelf belang bij. Zie Wie ben ik om iets te vinden? Ik draai het om.
Klokkenmakers bestaan bijna niet meer, en in sommige landen is thuisbezorgen zo gewoon geworden dat zelf koken opvalt. Een vaardigheid verdwijnt niet doordat mensen dommer worden, maar doordat iets haar overbodig maakt. En omdat je koken leert van iemand die het kan, sluit een overgeslagen generatie de terugweg af.
Ik schrok van kookgewoonten in het buitenland, en vooral in Amerika. Hier koken we zelf. We gaan uit eten en we bestellen ook wel, maar het is de uitzondering. Daar lijkt bezorgen de standaard te zijn geworden, tot het punt waarop zelf koken iets is dat opvalt en uitleg vraagt.
Dit is mijn waarneming en geen statistiek. Ik heb er geen cijfers bij gezocht en ik doe alsof niet anders. Maar het beeld liet me niet los, want ik herkende de vorm ervan.
Vaardigheden verdwijnen zelden doordat mensen ze verleren of dommer worden. Ze verdwijnen doordat er iets komt dat ze overbodig maakt.
Dat is meestal winst. Niemand mist het boenen van de was op een wasbord. De wasmachine nam een taak over die niets opleverde behalve tijdverlies, en er ging geen kennis verloren die iemand nodig had.
Maar niet elke vervanging is van dat type. Bij sommige ligt er onder de taak nog iets anders: het vermogen om zonder de dienst te functioneren. Wie kan koken, kan eten maken van wat er in huis is. Wie het nooit leerde, is afhankelijk van een app, een bezorger en een keten die moet blijven draaien. Dat is dezelfde handeling met een totaal andere onderliggende positie.
Dit is het deel dat me het meest bezighoudt, en het geldt net zo goed voor de klokkenmaker.
Koken leer je niet uit een boek. Je leert het van iemand die het al kan, meestal thuis, meestal jong, en meestal zonder dat iemand het lesgeven noemt. Datzelfde geldt voor een ambacht: het zit in handelingen die niet volledig zijn op te schrijven, en het gaat over van mens op mens.
Als een generatie die overdracht overslaat, is het niet zo dat de kennis in een la ligt te wachten. De keten is dan gebroken. Wie het over twintig jaar weer wil, moet het opnieuw uitvinden of van ver halen, en dat is iets heel anders dan het terugpakken.
Daarom zeg ik dat er over vijf of tien jaar een generatie kan zijn die koken echt als vak moet gaan leren, zoals je nu een cursus zou volgen. Niet omdat ze het verleerd zijn. Omdat niemand het ze heeft laten zien.
Bij producten zag ik dat de prikkel bepaalt welke bekwaamheid er nog gebouwd wordt, en dat wat niet meer gemaakt wordt uiteindelijk ook niet meer gemaakt kan worden. Bij mensen werkt het net zo. Wat een dienst overneemt, hoeft niemand meer te kunnen, en wat niemand meer kan, kan niemand meer doorgeven.
Het gevolg is niet alleen dat je afhankelijk wordt van een bedrijf. Het is dat je afhankelijk wordt zonder alternatief, en dat is precies de positie waarin het bedrijf zijn voorwaarden kan aanscherpen. Dat is dezelfde beweging die ik bij platforms beschrijf, alleen speelt ze zich hier af in wat mensen zelf nog kunnen.
Wie kan koken, kan de app opzeggen. Wie het niet kan, heeft geen keuze meer, en dan is de prijs die de app vraagt geen aanbod maar een rekening.
Michael Polanyi, "The Tacit Dimension", 1966waarom kennis die niet is opgeschreven met de beoefenaar verdwijnt
gedachteessayBekwaamheidsfouten in code, bestuur en politiekbronnenverwant
Op IT-afdelingen beslist wie het vak nooit beoefende
Op veel IT-afdelingen beslist iemand over een implementatie die het vak zelf nooit heeft beoefend, terwijl wie het wel kan wordt afgewezen als te technisch of niet businessminded genoeg. Dezelfde omkering zie ik in de politiek: de Kamer verliest haar digitale kennis sneller dan ze die opbouwt. Dit is de onbekwaamheidscrisis in haar zuiverste vorm.
Op veel IT-afdelingen tref ik mensen aan die beslissen over implementaties waarvan ze het vak zelf nooit hebben beoefend. Ze zetten vinkjes, beheren een lijst, zitten in het overleg waar de knoop wordt doorgehakt. En intussen wordt iemand die de techniek werkelijk beheerst afgewezen met de opmerking dat hij te technisch is, of niet businessminded genoeg.
Ik wil dit precies formuleren, want de scherpe versie is ook de onnauwkeurige. Het probleem is niet dat iemand een ander beroep had. Een groenteboer is bekwaam, en een visser ook. Het probleem is de mismatch: bekwaamheid in het ene vak wordt behandeld alsof ze overdraagbaar is naar het andere, en dat is ze niet.
En het probleem is vooral asymmetrisch. Voor de beslisser is vakinhoudelijke kennis optioneel. Voor de uitvoerder is sociale presentatie verplicht.
Sollicitatieprocedures meten wat er in een gesprek te meten valt. Zelfverzekerd overkomen, vlot antwoorden, oogcontact, een verhaal kunnen vertellen over jezelf, energie in de kamer brengen.
Dat zijn allemaal echte vaardigheden en voor sommige rollen zijn ze doorslaggevend. Maar ze zeggen weinig over of iemand een systeem kan doorgronden of een storing kan terugvoeren op de oorzaak. En ze correleren negatief met precies het profiel dat dit vak nodig heeft: iemand die het onaangenaam vindt als iets niet klopt, die doorvraagt tot het klopt, die een aanname niet laat passeren omdat de sfeer er even goed is.
Dat gedrag heet in een beoordelingsgesprek moeilijk in de omgang. In de code heet het kwaliteit.
Autistische vakmensen krijgen dit het hardst te verduren, want de norm waarop wordt geselecteerd is precies waar zij op afwijken, terwijl het niets zegt over wat ze kunnen. Iemand afwijzen als te technisch voor een technische functie is een zin die niemand hardop zou moeten kunnen uitspreken zonder te horen hoe absurd hij is. En toch is het een gangbare afwijzingsgrond.
Dit is geen kwestie van eerlijkheid alleen. Het heeft uitkomsten.
Wie beslist zonder het vak te kennen, kan de vraag hoe iets werkt niet stellen, want hij herkent het verschil niet tussen een goed en een slecht antwoord. Hij kan alleen sturen op wat wel te beoordelen is: is het af, wat kost het, kunnen we het laten zien. Dat is precies de meetlat die overal in dit manuscript de verkeerde kant op wijst.
Zo ontstaat de open deur. Niet doordat iemand besluit om beveiliging over te slaan, maar doordat in de vergadering waar dat besloten werd niemand zat die wist wat er werd overgeslagen.
Ik dacht lang dat dit een bedrijfsprobleem was. Het zit ook in het parlement, en daar is het beter gedocumenteerd dan ik verwachtte.
De Tweede Kamer heeft sinds 2021 een vaste commissie voor Digitale Zaken, en volgens de berichtgeving is daar inhoudelijk serieus werk verzet door leden die zich echt in de dossiers hadden vastgebeten. Het probleem is niet dat er nooit kennis was. Het is dat die kennis telkens weer wegloopt.
Cybersecurity-onderzoeker Bert Hubert waarschuwde bij de laatste verkiezingen dat de Kamer vrijwel al haar leden met digitale kennis dreigde te verliezen. Zijn schatting was dat van ongeveer duizend kandidaten er een handjevol echt verstand van computers had, en dat die op onverkiesbare plekken stonden. Een flink deel van de harde kern van de commissie keerde niet terug.
Dat is erger dan onwetendheid. Onwetendheid kun je aanvullen. Dit is een instituut dat elke paar jaar zijn geheugen wist, precies op het terrein waar de dossiers het langst lopen en het meest technisch zijn.
Waarom dit de kern van de onbekwaamheidscrisis is¶
Alles in deze tak komt hier samen.
Bekwaamheid is niet verdwenen. Ze zit op de verkeerde plek, of ze wordt bij de deur afgewezen omdat ze in het verkeerde jasje zit. De mensen die het kunnen, mogen het niet beslissen. De mensen die beslissen, kunnen het niet beoordelen. En het selectiemechanisme dat die verdeling in stand houdt, meet iets anders dan waar het om gaat.
Dat is ook waarom ik er niet somber over hoef te zijn in de zin van onvermijdelijk. Dit is geen tekort aan vermogen in de samenleving. Het is een verdelingsprobleem, en verdelingsproblemen zijn te veranderen zodra iemand ze benoemt.
Het beeld van de kikker die in langzaam opwarmend water blijft zitten, beschrijft precies hoe achteruitgang went. Alleen klopt het niet: kikkers springen er wel degelijk uit. Dat een weerlegd experiment het bekendste argument voor sluipende verslechtering is geworden, is zelf het beste voorbeeld van wat er misgaat.
De metafoor gaat zo. Gooi een kikker in kokend water en hij springt er meteen uit. Zet hem in koud water en warm het langzaam op, en hij merkt het niet, wordt loom van de warmte, en gaat dood zonder ooit te hebben geprobeerd te ontsnappen.
Als beschrijving van hoe achteruitgang went, is het beeld onovertroffen. Niets van wat ik in deze tak beschrijf gebeurde in één klap. De deurgreep werd niet vorig jaar ineens slecht. De abonnementen kwamen niet allemaal tegelijk. Niemand kondigde aan dat je voortaan huurt in plaats van bezit. Het is een graad per jaar, en elke afzonderlijke graad is te klein om er iets van te zeggen zonder overdreven te lijken. Precies daarin zit de kracht van het beeld. Het geeft een naam aan het gevoel dat je iets kwijtraakt zonder een moment te kunnen aanwijzen waarop het gebeurde.
Precies daarom grijp ik naar de kikker als ik het patroon wil uitleggen. Hij is pakkend, iedereen kent hem, en hij ondersteunt exact wat ik betoog. Dat is de reden om hem te wantrouwen. Een argument dat mij zo goed uitkomt, verdient een strengere controle dan een argument dat mij tegenstaat.
Een kikker met een intact zenuwstelsel wordt onrustig zodra het water oncomfortabel wordt en probeert eruit te komen. De dieren die bleven zitten, zaten in een ander soort proef. Het beeld verwijst niet naar een kern van waarheid over kikkers. Het klopt gewoon niet.
Dat is geen klein detail. Het hele gewicht van de metafoor leunt op het idee dat een levend wezen zijn eigen ondergang niet voelt aankomen zolang die traag genoeg komt. Als dat idee onjuist is, dan bewijst het plaatje niets. Dan blijft er een mooi verhaal over dat toevallig de goede kant op wijst, en een verhaal dat toevallig de goede kant op wijst, bewijst niets. Het is een gok die geluk had.
De vroege proeven gaan terug op negentiende-eeuwse fysiologie. Ze worden meestal toegeschreven aan de fysioloog Friedrich Goltz, die rond 1869 met kikkers experimenteerde. In dat soort proeven bleef het dier inderdaad in het opwarmende water zitten. Alleen waren dat kikkers waarbij de hersenfunctie was uitgeschakeld. Een onthersende kikker mist het apparaat om te merken dat hij weg moet.
Daar zit de hele verwarring. De negentiende-eeuwse waarneming was echt. Er zat een kikker in warm water die niet wegsprong. Wat wegviel in de doorvertelling was de reden waarom hij bleef. Het dier had geen werkend alarm meer. Wie dat detail weglaat, houdt een kikker over die uit domheid of loomheid blijft zitten, en dat is precies de kikker die het verhaal nodig heeft en die in de natuur niet bestaat.
Latere onderzoekers hebben de proef netjes met intacte dieren overgedaan, en dan gebeurt het omgekeerde. Het dier wordt actiever naarmate het water warmer wordt en zoekt de uitgang. Bewijsniveau: dit is bekend en controleerbaar. Ik heb zelf geen kikker in water gezet, en dat hoeft ook niet, want de weerlegging staat op naam van mensen die dat wel gedaan hebben.
Het is niet één dwarse stem. Meerdere biologen hebben het verhaal expliciet van tafel geveegd. De Harvard-bioloog Douglas Melton heeft erop gewezen dat een kikker in heet water doodgaat in plaats van er netjes uit te springen, en dat een kikker in opwarmend water juist wegspringt voordat het gevaarlijk wordt. De ecoloog Whit Gibbons heeft het verhaal in een column afgewezen. Thermisch bioloog Victor Hutchison bepaalde voor allerlei soorten het punt waarop een amfibie het te warm krijgt, het kritisch thermisch maximum, en dat punt gaat gepaard met toenemende activiteit en vluchtgedrag.
Dat drie onafhankelijke lijnen naar hetzelfde wijzen, maakt de zaak sterk. Een enkele scepticus kun je wegwuiven. Een fysiologische verklaring, een ecoloog en een meetreeks die alle drie dezelfde kant op wijzen, kun je dat niet. De metafoor is dus al lang publiek weerlegd, en toch leeft hij door. Die tweede helft is voor mij interessanter dan de eerste.
Dit is precies het patroon waar mijn hele werk over gaat, en nu betrap ik het in mijn eigen argumentatie.
Ik zou de kikker kunnen gebruiken. Hij past. En dat passen is het gevaar. De bewering die je verdacht vindt, is zelden het gevaarlijkst. Dat is de bewering die zo goed aansluit bij wat je toch al dacht dat je vergeet te kijken. Ik ken die valkuil van dichtbij. Zo werkt het bij Een curve die getekend is door een taalmodel, die er overtuigend uitziet omdat een model precies tekent wat je verwacht. Zo werkte het bij een cijfer in mijn eigen README dat ik lang voor waar aannam, want het bevestigde mijn verhaal. Ik had het overgeschreven zonder het na te rekenen, juist omdat het klopte met wat ik wilde zeggen.
Daarom is mijn eerste zet bij een prettig passend argument om het tegendeel te proberen. Als het verhaal een controle overleeft, mag het blijven. Overleeft het de controle niet, dan gaat het eruit, hoe goed het ook stond. Dat is dezelfde discipline die ik elders bepleit onder Beargumenteer eerst het tegendeel van je eigen bevinding. Het kost een goed argument, en dat is de bedoeling. Een argument dat je niet durft te controleren, was nooit van jou, je had het alleen te leen van iedereen die het voor je herhaalde.
Er zit een tweede laag in, en die is bijna te mooi. Dat een weerlegd experiment het bekendste argument voor sluipende verslechtering is geworden, is zelf een geval van sluipende verslechtering.
Iemand vond het beeld goed. Het werd doorverteld. Niemand keek na. En op een gegeven moment was het waar omdat iedereen het zei. Elke doorvertelling voegde een graad toe, en geen enkele losse doorvertelling was groot genoeg om verdacht te lijken. Dat is exact de route die ik bij overheidsdossiers en bedrijfsverklaringen tegenkom. Een claim wordt niet gecontroleerd omdat hij handig is, en na genoeg herhaling telt hij als vaststaand. Een naam in een verklaring is nog geen bewijs, en dat geldt ook voor een metafoor met een lange staat van dienst. Zie Een naam in de code is nog geen tracker.
Het aardige is dat het verhaal daarmee twee keer waar wordt. Het is onjuist over kikkers, en het is een perfecte illustratie van het mechanisme dat het beweert te beschrijven, alleen dan toegepast op zichzelf. Ik gebruik het voortaan zo. Als voorbeeld van hoe iets langzaam waar wordt door herhaling, niet als bewijs dat wezens hun ondergang niet voelen.
De waarneming die de metafoor probeert te vangen, blijft overeind. Je hebt er alleen geen kikker voor nodig.
Mensen vergelijken met vorig jaar, zelden met tien jaar geleden. Elke stap is klein genoeg om te accepteren, en niemand heeft de vorige stap nog scherp voor ogen. Daar komt bij dat je herinnering aan hoe het vroeger werkte vervaagt, terwijl het nieuwe elke dag voor je neus staat. Het oude heeft geen advocaat meer, het nieuwe wint de vergelijking op aanwezigheid.
Loomheid of domheid heeft er niets mee te maken. Zo werkt vergelijken nu eenmaal, ook bij oplettende mensen. Het is dezelfde beweging die ik beschrijf bij We worden bekwamer en de spullen worden slechter en bij Je bezit steeds minder en huurt steeds meer: de richting is echt, alleen ontbreekt het vaste ankerpunt om hem te zien. Geef een mens dat ankerpunt terug, een foto van vroeger, een oude factuur, een bewaarde meting, en het verval springt er ineens uit. Het probleem zit in het ontbreken van iets om tegen af te zetten. De waarneming van de mens zelf is prima in orde.
Hier komt de metafoor terug als les over methode. Als gewenning de reden is dat je het verval niet voelt, dan is de remedie een ijkpunt dat niet went.
Daarom leg ik dingen vast. Een scan van vorig jaar heeft geen last van gewenning. Een opgeslagen meting weet nog precies hoe traag de app was, hoeveel partijen er meelazen, wat de deurgreep deed. Mijn herinnering schuift mee met het heden, een bestand doet dat niet. Zo verander ik een graad per jaar, die niemand voelt, in een verschil tussen twee metingen, dat iedereen kan zien. Dat is de kern van Mijn werkwijze: van vermoeden naar bevinding.
De kikker moet dus uit mijn betoog. Wat hij wilde zeggen, blijft. En de manier waarop het verhaal zichzelf tot waarheid herhaalde, houd ik als voorbeeld, want dat is precies wat ik in het echt probeer te betrappen. Een goede meting is het enige dat een graad per jaar niet kan wegpoetsen.
Elke generatie krijgt het verwijt verwend te zijn, ook de mijne
Als een bezorgdienst plat ligt of een streamingdienst eruit ligt, zie ik reacties die me oprecht doen schrikken. Tegelijk kreeg ik als kind precies hetzelfde verwijt van mijn ouders, over iPads en goede scholen. Dat maakt de waarneming niet onjuist, maar wel verdacht, en de eerlijke versie moet allebei bevatten.
Er gaat een bezorgdienst plat, een streamingdienst ligt eruit, een sociaal netwerk laadt niet, en de reactie die ik dan zie, op televisie, in een post of gewoon op straat, is van een heftigheid die niet in verhouding staat tot wat er is uitgevallen. Alsof er iets fundamenteels is afgenomen, terwijl er alleen een dienst even niet werkt.
Ik schrik daarvan, en ik merk dat ik het niet begrijp. Voor mij is het uitvallen van zo'n dienst het moment waarop je iets anders doet. Je kookt zelf, je zoekt een ander kanaal, je gaat een uur naar buiten. Voor een deel van de mensen om me heen is het een dag die stuk is. Dat verschil in reactie is de aanleiding voor deze notitie. Ik wil erachter komen wat ervan klopt en wat mijn eigen leeftijd is die praat.
Toch blijft er iets staan als ik dat eraf trek, en het is smaller dan mijn eerste reactie.
Het gaat niet om verwendheid als karaktereigenschap. Het gaat om iets meetbaars. Het aantal dingen dat een gemiddelde dag kan laten mislukken zonder dat je er zelf iets aan kunt doen, is toegenomen. Wie zelf kan koken, houdt aan een platliggende bezorgdienst niet meer over dan een ongemak. Wie dat niet kan, houdt er een probleem aan over. Het onderscheid zit in het aantal alternatieven dat iemand nog heeft als de dienst wegvalt, en dat aantal is voor jongere mensen kleiner.
Zo geformuleerd is het te meten. De vraag is simpel: hoeveel van je dag hangt af van een dienst die je niet zelf in de hand hebt? Voor mijn ouders was dat antwoord in hun jeugd bijna nul. Eten kwam uit de keuken, vervoer uit de benen of de fiets, vermaak uit wat er in huis lag. Voor mij is het antwoord hoger dan ik prettig vind. Voor iemand van vijftien is het bijna alles.
Bewijsniveau: dit is deels afgeleid en deels vermoed. Ik heb geen cijferreeks die de toename hard maakt. Wat ik wel kan aanwijzen is de richting. Er zijn meer schakels in een gewone dag die bij een derde partij liggen dan een generatie geleden, en elke schakel is een punt dat kan breken buiten je bereik.
Je kunt het voor jezelf natellen zonder statistiek. Loop een gemiddelde dag langs en vink aan wat je zou kunnen doen als de dienst wegvalt. Eten: kun je zelf koken, of hangt het aan bezorging? Vervoer: heb je een fiets die je zelf onderhoudt, of hangt het aan een app die auto's stuurt? Geld: heb je contant in huis, of ligt alles achter één betaalsysteem? Vermaak, contact, werk, elk daarvan is zo'n vinkje. Voor elke regel waar het antwoord "ik heb geen terugval" luidt, heb je een dienst die je dag kan breken zonder dat je er zelf iets aan kunt doen. Tel de regels, en je hebt een getal dat niets met je karakter te maken heeft.
Als je dit formuleert als verwendheid, leg je de schuld bij degene die het overkomt. Dat is onaardig, en het is ook onjuist. Niemand van vijftien heeft gekozen voor een wereld waarin alles een dienst is. Die wereld lag er al toen ze aankwamen.
De inrichting is ontstaan doordat bedrijven van verkoop naar abonnement gingen, en doordat vrijwel iedereen het gemak accepteerde, ik incluis. Ik bestel ook. Ik stream ook. De heftige reactie op een storing is daarom een symptoom van hoe afhankelijk we het met z'n allen hebben ingericht. Het woord verwend wijst naar het karakter van de jongere, terwijl de oorzaak in de inrichting van de markt ligt.
Dat onderscheid is niet alleen netter. Het bepaalt of het probleem oplosbaar is. Aan een karaktereigenschap kun je weinig doen. Aan het aantal dingen dat je zelf kunt, wel.
Dat de kern meetbaar is, is het belangrijkste wat deze notitie oplevert. Zolang je het gevoel houdt op het niveau van een klacht over de jeugd, kun je er niets mee. Het is dan waar of onwaar, en meestal onwaar, en er valt niets aan te doen.
Zodra je het herformuleert als afhankelijkheid, verschijnt er een knop. Je kunt het aantal diensten dat je dag kan breken tellen, en je kunt het verlagen. Dat is het verschil tussen een klacht en een analyse. Een klacht laat je met een naar gevoel zitten en wijst naar een schuldige. Een analyse geeft je een handvat waar je zelf aan kunt draaien, ook als de rest van de wereld hetzelfde blijft. Zelf leren koken verlaagt het met één. Een offline kopie van wat je nodig hebt verlaagt het met één. Een vaardigheid die je zelf beheerst, haalt een schakel weg bij een derde partij.
Dat is ook de reden dat ik hier niet blijf hangen in een cultuurklacht. De cultuurklacht wijst naar mensen. De afhankelijkheidsanalyse wijst naar een systeem dat je kunt veranderen, ook in het klein, ook alleen voor jezelf.
Voor mijn eigen leven trek ik er een simpele regel uit. Bij elke dienst die ik gebruik, wil ik weten wat mijn terugval is als hij een dag wegvalt. Heb ik er geen, dan is dat een risico dat ik heb geaccepteerd zonder het te benoemen. Dat wil ik zichtbaar houden.
Het schrikbeeld van de eerste alinea verandert daarmee van toon. Ik hoef niet neer te kijken op wie in paniek raakt als een app het niet doet. Ik kan beter kijken naar hoeveel van mijn eigen dag aan een draad hangt die ik niet vasthoud. De heftige reactie van een ander is dan een spiegel. Ze laat zien hoe ver de afhankelijkheid al is opgeschoven, ook bij mij, ook al reageer ik rustiger. Rustig blijven bij een storing is makkelijker als je een terugval hebt. Dat is de enige verdienste die ik mezelf toesta.
En het verklaart waarom de klacht over de verwende generatie zo hardnekkig verkeerd landt. De klager voelt echt iets. Er is echt iets veranderd. Alleen wijst hij het aan op de verkeerde plek. Hij ziet de heftige reactie van de jongere en noemt die zwak, terwijl de reactie precies past bij hoeveel er voor die jongere daadwerkelijk op het spel staat als een dienst uitvalt. Wie bijna alles heeft uitbesteed, verliest bij een storing ook bijna alles. De reactie staat dan wel degelijk in verhouding. Ze past bij de afhankelijkheid die eronder ligt, en die afhankelijkheid blijft onzichtbaar zolang de dienst gewoon werkt. Dat is de kern die overeind blijft nadat ik mijn eigen leeftijd eraf heb getrokken, en het is smaller en harder dan waar ik mee begon.
Timothy Ware liet zien wat mijn opleiding oversloeg
Voor ik Timothy Ware las wist ik vrijwel niets over de kerk, over het christendom en over hoe die Europa hebben gevormd. Niet omdat het ingewikkeld is, maar omdat het in mijn opleiding simpelweg ontbrak. Dat is een ander soort onwetendheid dan iets niet snappen: ik wist niet dat er iets te weten viel.
Timothy Ware schreef The Orthodox Church als inleiding voor westerse lezers die van de oosterse kerk niets weten. Ik was precies die lezer, en meer nog dan hij waarschijnlijk bedoelde.
Ik wist niet alleen niets over de orthodoxie. Ik wist eigenlijk weinig over de kerk als geheel, over het christendom als historisch verschijnsel, en over hoe bepalend beide zijn geweest voor de vorm van Europa. Niet omdat het te moeilijk was, maar omdat het nergens langskwam.
Ware schreef het in twee helften: eerst de geschiedenis, van de vroege kerk via het schisma en de val van Constantinopel tot in de moderne tijd, en daarna wat er eigenlijk geloofd wordt en waarom. Het is buitengewoon gedetailleerd zonder onleesbaar te worden, en dat is een prestatie op zich.
Dit is niet hetzelfde als iets niet begrijpen, en dat onderscheid vind ik belangrijker dan het onderwerp zelf.
Als je iets niet snapt, weet je dat er iets is dat je niet snapt. Je kunt ernaar vragen, het opzoeken, er een cursus over doen. De leemte heeft een vorm.
Dit was anders. Ik wist niet dat er iets te weten viel. In mijn beeld van de Europese geschiedenis zat geen gat waar dit in paste, want het beeld was gewoon compleet zonder. Pas toen het stuk erbij kwam, zag ik dat het beeld eerder scheef was.
Dat is de gevaarlijkste vorm van niet weten, en ik kom hem in mijn eigen vak voortdurend tegen. Een organisatie die niet weet dat ze een vraag zou moeten stellen, stelt hem ook niet. Er is geen alarm dat afgaat bij een ontbrekende categorie.
Het meeste onderwijs over Europa dat ik heb gehad, loopt langs een westelijke lijn. Rome, de middeleeuwen in West-Europa, de reformatie, de verlichting, de moderne staat.
In die lijn is het schisma van 1054 een voetnoot en 1453 een jaartal. Terwijl er aan de andere kant een even oude traditie doorliep, met een eigen theologie, een eigen verhouding tussen kerk en staat, een eigen kunstopvatting en een geschiedenis die het denken van een half continent heeft gevormd. Wat er in Rusland, op de Balkan en in Griekenland gebeurde, is zonder dat verhaal niet te volgen, en veel van wat er nu gebeurt trouwens ook niet.
Ik heb geen theorie over waarom dat zo is weggevallen. Ik constateer alleen dat ik een half continent heb geleerd en dacht dat het het geheel was.
Wat het met de rest van dit manuscript te maken heeft¶
Twee dingen, en ze hangen samen.
Het eerste is de vorm van de onwetendheid, en die komt terug in alles wat ik meet. In mijn onderzoek is de vraag niet alleen wat er gebeurt, maar ook welke vraag niemand heeft gesteld. Een nulbevinding, een categorie die ontbreekt in een register, een gegevensstroom waar geen naam voor is: dat zijn allemaal varianten van niet weten dat er iets te weten viel.
Het tweede is de reden dat ik zulke boeken lees. Niet om vroom te worden, maar omdat een goed geschreven overzicht van iets waar je niets van weet, je laat zien hoe je eigen beeld is opgebouwd. Je leert er twee dingen tegelijk: het onderwerp, en waar de randen van je eigen kaart liepen.
Voor dat tweede is Ware een van de nuttigste boeken die ik heb gelezen, ongeacht wat je zelf gelooft.
Kafka's grootste creatie is een bijvoeglijk naamwoord
Kafka zag iets aan macht en bureaucratie wat wij pas herkennen als hij het ons laat zien, en hij maakte het overdraagbaar in verhalen. Zijn grootste creatie is daarom geen boek maar een bijvoeglijk naamwoord: kafkaesk wordt gebruikt door miljoenen die hem nooit hebben gelezen. Dat is de hoogste vorm van maken die ik ken.
Er zijn mensen die iets zien wat de rest van ons niet ziet, niet omdat ze meer weten maar omdat hun hoofd anders in elkaar zit. Kafka is daar het duidelijkste voorbeeld van dat ik ken.
Hij zag hoe macht werkt wanneer ze niet boos is en niet kwaadaardig, maar onverschillig. Een proces waarin niemand je haat en waarin je toch verloren bent. Een instantie waar je nooit de persoon te spreken krijgt die beslist, omdat die persoon niet bestaat. Een verandering aan jezelf die iedereen om je heen bespreekt alsof het over meubels gaat.
Dat is geen slimheid die je kunt aanleren, en het is ook geen kwestie van hard werken. Het is een manier van kijken waar de meesten van ons met geen mogelijkheid komen.
Maar dat is nog maar de helft, en de tweede helft is wat hem uitzonderlijk maakt.
Iets zien wat anderen niet zien, is één ding. Er een vorm voor vinden waardoor anderen het ook gaan zien, is iets heel anders. Kafka schreef geen betoog over bureaucratie. Hij zette een situatie neer en werkte haar volstrekt consequent uit, zonder één keer uit te leggen wat je moest denken.
Dat is de reden dat het werkt. Wie een betoog leest, weegt een mening. Wie een verhaal leest waarin de logica klopt en de uitkomst absurd is, voelt het van binnenuit. Je concludeert het zelf, en daarom raak je het niet meer kwijt.
Hier komt mijn eigen maatstaf terug, dat bekwaamheid zit in wat je maakt.
Kafka maakte romans en verhalen, en die zijn goed. Maar zijn grootste creatie is een bijvoeglijk naamwoord. Kafkaesk zit in het Nederlands, in het Engels, in het Duits, in vrijwel elke taal met een geletterde traditie. Mensen gebruiken het dagelijks om een ervaring te beschrijven waar ze anders geen woord voor hadden, en de meesten van hen hebben nooit een letter van hem gelezen.
Dat is wat ik bedoel met waarde die verder gaat dan het werk zelf. Hij heeft niet alleen iets gemaakt, hij heeft het gereedschap gemaakt waarmee anderen kunnen denken. Er is bijna geen hogere vorm van maken.
En het is precies de trede die ik elders beschrijf. Niet consumeren, niet beoordelen, maar iets toevoegen aan het instrumentarium van iedereen die na je komt.
Er zit een detail in zijn leven dat ik niet meer uit mijn hoofd krijg.
Kafka werkte bij een ongevallenverzekering voor arbeiders. Overdag beoordeelde hij dossiers en schreef hij rapporten over industriële veiligheid: machines die handen afrukten, werkgevers die aansprakelijkheid ontliepen, arbeiders die vermalen werden door apparaten en daarna door procedures.
Hij zat dus met zijn handen in precies het materiaal waar hij 's nachts over schreef. De bureaucratie die hij verbeeldde was zijn dagelijks werk, en de mensen die erin vastliepen waren zijn dossiers.
Ik voel me daar ongemakkelijk verwant mee, en ik zeg dat met de nodige bescheidenheid. Ook ik zit de hele dag in dossiers over systemen die mensen iets aandoen zonder dat iemand het kwaad bedoelt. Het verschil is dat hij er literatuur van maakte en ik metingen. Maar het onderwerp is hetzelfde: wat een apparaat met een mens doet als niemand verantwoordelijk is.
Omdat mijn hele werk gaat over precies de ervaring waar hij het woord voor leverde.
Een burger die niet weet wie zijn gegevens heeft. Een klacht die van instantie naar instantie wordt doorgestuurd. Een verwerkingsverantwoordelijke die formeel bestaat en feitelijk onvindbaar is. Een toestemmingsvenster dat je toestemming vraagt voor iets wat al is gebeurd.
Dat is geen boosaardigheid en er is geen schuldige aan te wijzen. Het is een systeem dat werkt zoals het is ontworpen, en dat daarom niemand hoeft te haten om je te vermalen.
Daar bestond geen woord voor tot iemand het maakte.
Peterson koppelt verantwoordelijkheid aan betekenis en overschrijdt zijn vakgebied
Ik heb tientallen uren aan colleges en gesprekken van hem gezien, en wat bleef hangen is de koppeling tussen verantwoordelijkheid nemen en betekenis vinden. Tegelijk moet ik mijn eigen regel op hem toepassen: bekwaamheid in het ene domein draagt niet over naar het andere, en juist bij hem is dat verschil groot.
Ik heb tientallen uren aan colleges, lezingen en gesprekken van Jordan Peterson gezien. Niet een paar fragmenten, maar hele reeksen, waaronder zijn psychologische lezing van oude verhalen.
Wat daarvan is blijven hangen, is smaller dan het geheel maar het zit diep. De koppeling tussen verantwoordelijkheid en betekenis. Niet: zoek geluk, maar: neem een last op je die de moeite waard is, en de betekenis volgt daaruit. Begin bij het kleinste wat je vandaag in orde kunt maken, want ordelijk krijgen wat binnen je bereik ligt is de enige plek waar je invloed hebt.
Voor mij is dat niet abstract gebleven. Een deel van waarom ik dit werk doe zonder dat iemand erom vraagt of ervoor betaalt, komt uit dat idee. Iets zien wat niet klopt en het daarom oppakken, ook als niemand je aanwijst.
De andere gedachte die me bijbleef is dat comfort niet vormt en weerstand wel, mits gedoseerd. Die staat hier elders uitgewerkt en ik kwam hem via hem tegen, ook al is hij veel ouder dan hij.
Nu het deel dat er hoort te staan, want anders is dit fanpost en geen manuscript.
Elders schrijf ik dat bekwaamheid in het ene domein niet overdraagt naar het andere, en dat de vinkjeszetter gevaarlijk is omdat hij overtuigend klinkt op een terrein dat niet het zijne is. Die regel moet ik ook toepassen op iemand van wie ik veel heb geleerd, juist omdat ik veel van hem heb geleerd.
Peterson is klinisch psycholoog en hoogleraar geweest. Op het terrein van persoonlijkheid, van hoe mensen zich staande houden en van de psychologische lading van oude verhalen, spreekt hij vanuit zijn vak.
Zodra hij dat terrein verlaat, en dat doet hij vaak, geldt dat gezag niet meer. Zijn uitspraken over politiek, over klimaat, over hele bevolkingsgroepen en over vakgebieden waarin hij niet is opgeleid, moeten op precies dezelfde manier worden gewogen als die van iedere andere geïnteresseerde leek. Dat hij ergens anders scherp is, maakt hem daar niet betrouwbaarder. Vaak is hij daar ook aantoonbaar onnauwkeurig, en de stelligheid waarmee hij het brengt is dan een risico in plaats van een aanwijzing.
Dat is geen aanval op hem. Het is dezelfde toets die ik op de Belastingdienst loslaat en op mezelf.
Er is een reflex om iemand die omstreden is geworden helemaal niet meer te noemen, en die reflex vind ik intellectueel lui.
Als ik alleen zou verwijzen naar denkers die op geen enkel punt aanvechtbaar zijn, hield ik niemand over. De volwassen houding is niet kiezen tussen aannemen en afwijzen, maar per uitspraak vaststellen waar ze vandaan komt en wat ze waard is.
Dus: wat hij over verantwoordelijkheid en betekenis zegt, heeft mijn denken gevormd en dat erken ik. Wat hij buiten zijn vak beweert, weeg ik als een mening van een intelligente buitenstaander, en ik heb er geen enkele reden voor om dat zwaarder te laten wegen omdat hij het is die het zegt.
Precies dat onderscheid maken is wat ik hier in het hele manuscript probeer te doen. Het zou vreemd zijn om er een uitzondering voor te maken bij iemand die me heeft geleerd zulke onderscheidingen te maken.
Wat me daarbij opvalt is waar hij zijn publiek vandaan haalt. De plek waar mensen afdwalen is inmiddels het aanbevelingsalgoritme: eindeloos doorschuiven van filmpje naar filmpje, zonder dat er iets blijft hangen. Peterson gebruikt precies dat kanaal. Zijn colleges staan tussen die filmpjes, in dezelfde stroom, met dezelfde miniaturen en titels.
En wat er dan gebeurt is het omgekeerde van doorschuiven. Iemand die op YouTube zat te scrollen komt terecht bij twee uur over verantwoordelijkheid, en blijft zitten. Het kanaal dat is gebouwd om aandacht te versnipperen wordt gebruikt om aandacht juist ergens vast te houden. Zijn boek 12 Rules for Life doet hetzelfde in gedrukte vorm: regels die klinken als zelfhulp, met daaronder een veel zwaarder betoog.
Ik vind dat een van de weinige overtuigende antwoorden op de klacht dat sociale media mensen wegtrekken. Klagen over het kanaal verandert het kanaal niet. Er iets in zetten dat de moeite waard is, wel.
Jordan B. Peterson, "12 Rules for Life: An Antidote to Chaos", Random House Canada, 2018de kern van het betoog over verantwoordelijkheid en betekenis
Jordan B. Peterson, "Maps of Meaning: The Architecture of Belief", Routledge, 1999het academische werk waarop de lezingen steunen
geverifieerdessayzekerOverheid, toezicht en de wetbronnenverwant
ANPR-kentekencamera’s: de inbreuk is te meten, het nut niet
Ik heb geholpen uit te rekenen hoe vaak je langs een kentekencamera komt, en dat is tot op de rit nauwkeurig te bepalen. Het nut aan de andere kant van de weegschaal is dat niet: de evaluatie van de wet stelt zelf dat effectiviteit niet op de gebruikelijke manier te meten valt. Zo weegt een afweging waarvan maar een kant een getal heeft.
Ik heb meegewerkt aan het in kaart brengen van de kentekencamera's in Nederland, en aan het doorrekenen en simuleren van wat dat voor een gewone automobilist betekent. Niet hoeveel camera's er staan, maar de vraag daarachter: hoe vaak kom jij, op een doodgewone dag, langs een camera die je kenteken vastlegt.
Dat is uit te rekenen. Je hebt de posities, je hebt het wegennet, je hebt de ritten. Er komt een getal uit, en dat getal is verrassend hoog.
Terwijl ik daaraan werkte, drong iets anders zich op dat me sindsdien meer bezighoudt dan de uitkomst.
Niet retorisch bedoeld. Wat is de maatschappelijke waarde, wie heeft hierom gevraagd, en lost het op wat het zou oplossen? Is er minder criminaliteit? Worden er meer auto's teruggevonden? Is er iets dat aantoonbaar beter is geworden en dat zonder dit systeem niet beter was geworden?
Ik ging ervan uit dat die vraag beantwoord was voordat er duizend camera's stonden. Dat bleek niet zo te zijn, en niet omdat niemand het heeft onderzocht.
Begin 2021 had de politie 999 vaste kentekencamera's, waarvan 919 aangewezen onder artikel 126jj van het Wetboek van Strafvordering. De Marechaussee had er 115, allemaal aangewezen. Daarnaast beheert Rijkswaterstaat nog eens duizenden camera's voor het verkeer zelf, met een ander doel.
Wat die aanwijzing betekent: van elk voertuig dat passeert wordt het kenteken vastgelegd en 28 dagen bewaard. Van iedereen. Niet van verdachten, van iedereen. De gegevens worden gebruikt bij zware zaken, zoals moord, doodslag en drugscriminaliteit.
Bij de invoering was de aanname dat dit de opsporing effectiever en efficienter zou maken. Dat is de rechtvaardiging waarop een inbreuk op de privacy van elke automobilist is gebaseerd.
De wet is geevalueerd, netjes, door het onderzoeksinstituut van het ministerie. En daar staat de zin die alles verandert.
Een klassieke effectiviteitsmeting is niet uitvoerbaar.
De redenering daarachter is niet gek. De waarde van zulke gegevens zit vaak in het uitsluiten van verdachten, of in een spoor dat pas later ergens toe leidt. Dat is echte opsporingswaarde die niet in een simpel voor-en-na-cijfer te vangen is. Ik wil dat niet wegzetten als uitvlucht, want het is een reeel methodologisch probleem.
Maar het gevolg blijft staan. We hebben een maatregel die wordt gerechtvaardigd met een belofte over effectiviteit, en de effectiviteit is niet toetsbaar gemaakt. Wat ontbreekt is niet het antwoord, het is de mogelijkheid om de vraag te stellen.
Hier komt het samen, en dit is waarom deze notitie belangrijker is dan de camera's zelf.
Een privacyafweging heet een afweging omdat er twee kanten zijn. Wat kost het de burger, en wat levert het de samenleving op. Dat veronderstelt dat je beide kanten kunt wegen.
De kostenkant is exact te berekenen. Ik heb het gedaan: hoeveel keer per dag je wordt vastgelegd, waar, en hoe lang dat blijft staan. Daar komt een getal uit dat je in een grafiek kunt zetten.
De batenkant heeft geen getal en zal er volgens de evaluatie ook geen krijgen.
Dan is de afweging geen afweging meer, maar een vergelijking tussen een cijfer en een overtuiging. En omdat een overtuiging niet kan dalen als hij tegenvalt, kan de uitkomst maar een kant op. Elke nieuwe camera is te rechtvaardigen met dezelfde onbewijsbare belofte, en er is geen meetpunt waarop iemand kan zeggen: dit heeft niet gebracht wat we hoopten, we stoppen ermee.
Ik ben niet tegen kentekencamera's, en ik denk oprecht dat er zware zaken zijn opgelost die anders waren blijven liggen.
Mijn bezwaar is dat we een systeem dat iedereen registreert hebben ingevoerd zonder onszelf te verplichten om achteraf te controleren of het werkt. Dat is dezelfde fout als overal in dit manuscript: het bouwen werd beloond, het narekenen niet.
En het is precies waarom ik meet. Zolang alleen de inbreuk een getal heeft, is dat getal het enige wat het gesprek kan verplaatsen.
Ik kamp sinds mijn jeugd met angsten en fobieen: pleinvrees, drukte, emetofobie. Wat een fobie zo eigenaardig maakt, is dat het gevaar volledig echt voelt terwijl je verstand weet dat het er niet is. Dat is precies de kloof tussen voelen en meten waar mijn hele werk op rust, alleen dan van binnenuit, waar ik hem niet kan wegmeten.
Ik heb sinds mijn jeugd te maken met angsten en fobieen. Pleinvrees, moeite met drukte, en emetofobie, de angst om over te geven of anderen te zien overgeven. Dat zijn zorgen die niet komen en gaan. Het zijn vaste bewoners.
Ik schrijf dit op omdat het bij me hoort en omdat ik dit manuscript eerlijk wil houden. Ik wil er geen les uit persen. Het meeste wat er over angst wordt gezegd door mensen die het niet hebben, klopt van geen kanten, en ik wil daar niet aan meedoen.
Ik schrijf het ook op omdat het elders in dit manuscript al doorwerkt zonder dat ik het benoem. Mijn novelle komt er rechtstreeks uit voort, zie Ik schreef een novelle vanuit mijn angststoornis. Wie dat stuk leest zonder dit stuk, ziet wel het resultaat en niet de bron.
Een fobie gaat verder dan bang zijn voor iets. Iedereen is ergens bang voor. Het eigenaardige zit in de scheiding tussen de angst en het verstand.
Ik weet dat een volle ruimte me niets doet. Ik weet dat de kans dat er iets ergs gebeurt verwaarloosbaar is. Dat verstandelijke weten is er, helder en compleet, en het verandert niets aan wat het lichaam doet. Het hart gaat, de uitgang wordt gezocht, de wereld vernauwt. Kennis en gevoel zijn twee gescheiden kanalen, en het gevoel luistert niet naar het andere.
Dat is het deel dat buitenstaanders het slechtst begrijpen. Ze denken dat je iets niet weet, en dat uitleggen helpt. Ik weet het al. Weten is nooit het probleem geweest. Uitleg komt binnen op het kanaal dat altijd al werkte. Het kanaal dat het alarm afgeeft, leest geen argumenten. Het meldt in de taal van het lichaam, en die taal heeft geen woord voor waarschijnlijk niet.
Ik kan dit ook opschrijven zoals ik een meetopstelling opschrijf, en dan wordt het scherper.
Elke detector kan op twee manieren fout zitten. Hij kan alarm slaan terwijl er niets is. Hij kan stil blijven terwijl er wel iets is. In mijn werk heten die twee de vals-positieve en de vals-negatieve. Bij elke meting ga ik ervan uit dat ze allebei kunnen optreden, en het grootste deel van mijn procedure bestaat uit het uitsluiten van de eerste.
Een fobie is de eerste soort fout, in extreme vorm, in een mens. Het alarm gaat af op een volle ruimte. De kans dat een volle ruimte gevaarlijk is, is verwaarloosbaar. Het alarm zegt daarmee vrijwel niets over de ruimte. Het zegt iets over het alarm.
Dan de tweede scheiding, en die is voor mijn werk de belangrijkste. Zekerheid en juistheid zijn twee losse grootheden. Bij een geijkt instrument lopen ze gelijk op. Hoe stelliger het meldt, hoe vaker het klopt, en daarom mag je op de stelligheid afgaan. Een fobie staat op maximale stelligheid en is bijna nooit juist. Dat is een ijkingsfout in het instrument, en het gevolg is dat de stelligheid geen informatie meer bevat.
Ik hoef niet te geloven dat zoiets kan bestaan in een waarnemer. Ik loop er een rond.
Mijn hele methode rust op een enkele regel: een gevoel van zekerheid is nog geen bewijs. Een bevinding vertrouw ik pas als de meting haar draagt. Hoe overtuigend ze voelt, telt niet mee in die afweging. Ik beargumenteer eerst het tegendeel, juist omdat mijn eigen overtuiging me kan misleiden, zie Beargumenteer eerst het tegendeel van je eigen bevinding. Ik label elke bevinding als gemeten, afgeleid of vermoed, zodat een lezer kan zien welk deel op een waarneming rust en welk deel op mijn interpretatie, zie Label elke bevinding op bewijsniveau.
Diezelfde regel gebruik ik tegen anderen. Een overtuigde getuige levert nog geen betrouwbare meting, zie Een overtuigde getuige is geen betrouwbare meting. Iemand die stellig vertelt dat zijn telefoon meeluistert, heeft daarmee niets over die telefoon aangetoond. Hij heeft laten zien hoe stellig hij is. Mensen ervaren een verklaring als ik word door het algoritme weggedrukt als sluitend, terwijl juist het deel dat de verklaring zou dragen ontbreekt, zie Shadowban is een verklaring die niets verklaart.
Het ongemakkelijke is dat ik zelf zo'n getuige ben, elke keer dat mijn alarm afgaat. Van binnenuit is dat alarm niet te onderscheiden van kennis. Het voelt niet als een vermoeden dat om toetsing vraagt. Het voelt als een feit dat al vaststaat. Daardoor is die regel voor mij minder een leerstuk en meer een dagelijkse ervaring.
Ik denk soms dat mijn wantrouwen tegenover het overtuigende gevoel hier deels vandaan komt. Ik heb van jongs af aan geleerd dat iets wat honderd procent waar aanvoelt, gewoon onwaar kan zijn. Dat is een vermoeden over mezelf, en ik kan het niet toetsen. Er bestaat geen versie van mij zonder deze angsten om naast me te leggen, dus een controlegroep is er niet. Ik houd het daarom op vermoed en laat het daarbij, zie Mijn werkwijze: van vermoeden naar bevinding.
Nu de eerlijke kant, want anders wordt dit een te net verhaal.
Dat ik dit allemaal begrijp, lost het niet op. Ik kan het van buiten perfect ontleden, ik kan uitleggen dat het alarm vals is, en ik sta er nog steeds. Inzicht is geen genezing. De twee kanalen blijven gescheiden, ook als je precies weet dat ze dat zijn.
Er zit een logica in die je bijna kunt uittekenen. Alles wat ik hierboven opschrijf, landt op het kanaal dat het al goed deed. Ik voeg kennis toe aan de kant die nooit stuk was. De andere kant leest die kennis niet, dus daar verandert niets. Het is dezelfde reden waarom uitleg van een buitenstaander niet helpt, alleen dan met mijzelf als buitenstaander.
Dat is een harde les die ik ook in mijn werk terugzie. Weten dat iets zo is, is iets anders dan er verandering in brengen. Ik kan een schending meten, vastleggen en aantonen, en de schending gaat gewoon door. De meting verandert wat er bekend is over de situatie. De situatie zelf raakt ze niet aan. De kloof tussen begrijpen en veranderen is echt, en wie doet alsof begrip vanzelf in verandering overgaat, verkoopt lucht. Daarom is een bevinding op tafel leggen nooit het einde van het werk, zie Apple, Google en Meta verdienen aan tracking binnen de wet.
Ik ga hier geen behandeladvies geven. Ik ben mijn eigen geval en ik ben geen dokter. Wat ik kan zeggen is wat ik zelf heb gemerkt, met alle voorbehoud dat dat van mij is en niet van jou.
Wegpraten doet niets, wegdenken evenmin. Wat wel iets doet, is stap voor stap dichterbij komen bij wat je vreest. Klein genoeg dat je het aankunt, vaak genoeg dat het lichaam leert dat het alarm niet klopte. Het overtuigen slaat daarbij over. Het lichaam doet zelf de waarneming, en die waarneming is de correctie.
Dat is dezelfde vorm als in mijn werk. Een redenering verplaatst zelden iemand. Een meting doet dat wel. In beide gevallen komt de verandering van een waarneming die het systeem zelf ondergaat, op precies het kanaal waar het misgaat. Uitleg komt binnen waar het al goed ging. Blootstelling komt binnen waar het fout zit.
Het is traag, het is oncomfortabel, en het is het tegenovergestelde van een wereld die elke wrijving voor je wegneemt. Juist het opzoeken van gedoseerde weerstand maakt de angst kleiner. Vermijden maakt hem groter. Dat is de wrangste eigenschap van het geheel. De reflex die op het moment zelf de opluchting geeft, is dezelfde reflex die het probleem voedt. Elke keer dat je de ruimte uitloopt, bevestig je het alarm in zijn gelijk, en het alarm onthoudt dat. Dat sluit aan bij wat ik elders schrijf over vorming door weerstand, zie Doorstane tegenslag vormt mensen sterker dan comfort.
Ik zou nooit zeggen dat angst goed voor je is. Ze is niet goed. Ze is alleen het best te lijf te gaan door haar niet te ontlopen.
Omdat het waar is, en omdat dit manuscript over mij gaat en niet alleen over mijn werk.
En omdat het iets verklaart wat anders onverklaard blijft. Waarom vertrouwt iemand zijn eigen stellige gevoel zo weinig dat hij alles narekent? Bij mij is een deel van het antwoord dat ik van kinds af aan weet hoe overtuigend een gevoel kan zijn dat nergens op slaat. Ik heb geen boek nodig gehad over de onbetrouwbaarheid van de eigen waarneming. Ik heb het thuisadres.
Ik wil er ook geen deugd van maken. Er is niets nobels aan een alarm dat afgaat op niets, en ik zou het onmiddellijk inleveren als dat kon. Dat is geen prettige eigenschap om mee te leven. Voor dit werk is het de nuttigste die ik heb.
DSM-5, criteria voor specifieke fobiede klinische omschrijving: angst die niet in verhouding staat tot het werkelijke gevaar
gedachteessayBekwaamheidsfouten in code, bestuur en politiekbronnenverwant
Bankzaken, zorg en identiteit lopen inmiddels volledig digitaal
Lang was de vraag waar het digitale in ons leven paste, als een laag erbovenop. Die vraag is achterhaald. Ons leven is digitaal geworden: je bankzaken, je zorg, je identiteit, je contacten, je werk lopen er allemaal doorheen, en eruit stappen kan niet meer. Dat verandert de inzet van mijn werk, want een fout in de infrastructuur is geen ongemak maar een fout in de bodem waarop je staat.
Decennialang is digitalisering behandeld als een laag die over het gewone leven werd gelegd. De vraag was waar het digitale paste. Welke taken kon je online afhandelen, welke dienst kreeg er een app bij, hoeveel van je dag bracht je voor een scherm door. In die vraag zat een aanname verstopt. Er was een echt leven, en daarnaast een digitaal deel dat je erbij koos.
Die aanname is achterhaald. Ons leven is digitaal geworden. De vraag luidt inmiddels anders: onder welke voorwaarden mag de infrastructuur draaien waar je bestaan doorheen loopt.
Ik denk dat de meeste mensen de verschuiving niet bewust hebben meegemaakt. Er is geen dag aan te wijzen waarop het kantelde. De vergelijking die zich hier opdringt is de kikker in de pan die langzaam wordt opgewarmd, en die vergelijking klopt niet: een echte kikker springt eruit zodra het te heet wordt (Het beeld van de kokende kikker is weerlegd). Juist daarom is ze bruikbaar als tegenbeeld. Mensen zijn blijven zitten omdat de rand van de pan verdween. Het alternatief werd afgebouwd terwijl de temperatuur opliep.
Dit is een woordspel zolang het abstract blijft, dus even concreet.
Je geld bestaat als een regel in een database. Contant is de uitzondering geworden, en op steeds meer plekken de onmogelijkheid. Je identiteit tegenover de overheid loopt via een inlogmiddel dat je nodig hebt om iets aan te vragen, aan te geven of te bezwaren (Achter de overheidslogin is helemaal geen toestemmingsvraag). Je medisch dossier, je afspraken en je verwijzingen zijn digitaal, tot en met de portalen waarin je je eigen uitslagen leest (Advertentie-infrastructuur in een zorgjas is een bouwkeuze). Je contact met bijna iedereen die je kent loopt via een handvol apps. Je werk, je belastingaangifte, je verzekering, je huurcontract, je energierekening: allemaal.
Er is nog een laag onder die opsomming. De apparaten en de software waarmee je dit alles doet, zijn steeds minder je eigendom en steeds vaker een abonnement met opzegbare voorwaarden (Je bezit steeds minder en huurt steeds meer). De bodem waarop je staat is dus niet alleen digitaal, hij is ook gehuurd.
Probeer eens een week volledig buiten het digitale te leven. Als praktische proef, los van principes. Het lukt niet, en dat komt doordat de wereld eromheen is opgehouden een niet-digitaal alternatief aan te bieden. Het loket is dicht. De balie is een website geworden. De telefonische optie leidt naar een keuzemenu dat je terugverwijst naar de app.
Eruit stappen is opgehouden te bestaan als optie. Dat is de kern van de verschuiving, en het is een feitelijke constatering over de beschikbaarheid van alternatieven.
Zolang digitaal een laag erbovenop was, was een fout erin een ongemak. Een app die niet werkte, een dienst die je liet vallen: vervelend, en je viel terug op de gewone wereld eronder. Die terugval was de stille garantie waar de hele lichte beoordeling van software op rustte.
Die bodem is er niet meer. Als het digitale de infrastructuur zelf is, dan is een fout erin een barst in de grond waarop je staat. Dat verandert de betekenis van elk faaltype dat ik in mijn werk tegenkom.
Een lek raakt dan de plek waar je geld, je identiteit en je zorg samenkomen. De vraag verschuift van wat een bedrijf over je weet naar wat er met je gebeurt als de sleutelbos van je leven op straat ligt. Een systeem dat je buitensluit, sluit je uit van de manier waarop de samenleving is ingericht om zaken met je te doen. En een tracker die je volgt, volgt je over alles wat je doet, want alles wat je doet loopt door dezelfde infrastructuur. Het gewicht zit in de optelsom van die stromen, veel meer dan in één losse partij (Het risico zit in de optelsom, niet in het losse veld).
Daarom gaat mijn werk over meer dan cookies. De cookie is klein, en ik zeg dat zonder ironie. Wat eronder ligt is dat de weging tussen gemak en gevolg is opgeschoven. Ze gaat inmiddels over de voorwaarden waaronder je aan het leven kunt deelnemen.
Ik heb voor mezelf een werkregel nodig om te bepalen wanneer de zware maatstaf geldt. Wat volgt is een afgeleide regel, geen meting. Ik pas hem toe voordat ik besluit hoe hard ik over een bevinding schrijf.
Vier vragen, in deze volgorde:
Alternatief. Bestaat er een werkend niet-digitaal pad dat een gewone burger binnen een dag kan bewandelen, zonder extra kosten en zonder in een wachtrij te belanden die feitelijk een afwijzing is?
Weigerbaarheid. Kun je de dienst weigeren zonder een recht, een plicht of een voorziening te verliezen? Als weigeren je toegang kost, is de toestemming die je gaf een formaliteit (Cookies weigeren scheelt echt, maar reken er niet blind op).
Overstap. Is er een tweede aanbieder die hetzelfde doet, en kun je daarheen zonder je geschiedenis, je contacten of je dossier kwijt te raken?
Uitval. Wat gebeurt er met je als de dienst een dag plat ligt, en wie draagt die schade?
Scoort iets nee, nee, nee en serieuze schade, dan heb je met infrastructuur te maken, ongeacht of het bedrijf erachter zichzelf zo ziet. De lichte maatstaf die we voor consumentensoftware hanteren, hoort daar dan te vervallen.
De uitkomsten zijn niet altijd comfortabel. Een overheidsinlog scoort op alle vier als infrastructuur, en dat is de kern van mijn bezwaar tegen wat er commercieel omheen gebeurt (Wie de staatsinlog levert, is zelf een privacyvraag). Een fotobewerkingsapp scoort op geen enkele vraag zo, en die mag van mij zijn eigen voorwaarden stellen. Het lastige zit ertussenin. Een berichtenapp die door bijna iedereen om je heen wordt gebruikt, is formeel vrijwillig en functioneel verplicht. Die spanning los ik met deze toets niet op. Ik maak hem wel zichtbaar, en dat is winst ten opzichte van doen alsof de keuze vrij is.
Er is een tweede helft die dit van een ongemak tot een echt risico maakt, en die gaat over wie de infrastructuur begrijpt.
Dat glazen plaatje is ons hele leven geworden, en tegelijk zijn er weinig mensen die werkelijk bekwaam zijn in wat erin gebeurt. Op zichzelf is dat geen ramp. Een vliegtuig begrijp ik ook niet, en ik stap toch in. Het wordt een ramp door wie er beslist.
De plek waar over dit alles wordt geoordeeld, wordt zelden bemand door de weinigen die het kunnen. Ze wordt bemand door de figuren die ik elders beschrijf: mensen die vinkjes zetten, die het vak nooit hebben beoefend, die overtuigend klinken op een terrein dat het hunne niet is (Op IT-afdelingen beslist wie het vak nooit beoefende). Vroeger zouden sommigen van hen een prima groenteboer zijn geweest. Een groenteboer is bekwaam, en ik bedoel dat letterlijk. Het probleem is de mismatch: bekwaamheid in het ene vak, ingezet om het andere te besturen.
Leg die twee lijnen naast elkaar en de inzet wordt duidelijk. De infrastructuur is de bodem onder ieders bestaan geworden. De mensen die haar echt snappen, zitten aan de bouwkant en zelden aan de knoppen. En de mensen aan de knoppen kunnen het verschil tussen een goed en een slecht antwoord niet horen, dus ze kiezen het antwoord dat het zelfverzekerdst wordt gebracht. Hier raken de onbekwaamheidscrisis en de verdigitalisering elkaar, en samen zijn ze gevaarlijker dan apart. Wie bouwt, bepaalt uiteindelijk wat er staat (De maker en de aandeelhouder willen niet hetzelfde).
Als het digitale de infrastructuur van het leven is, hoort het beoordeeld te worden zoals we andere basisinfrastructuur beoordelen. We accepteren geen periodiek vervuild drinkwater omdat volledig zuiver produceren onhandig is. We accepteren geen brug die soms instort omdat testen duur is. Bij die dingen ligt de bewijslast bij de bouwer, is falen aansprakelijk en wordt er standaard gemeten.
Bij digitale infrastructuur accepteren we het nog wel, omdat we haar in ons hoofd blijven behandelen als de handige laag erbovenop. Ons denken loopt achter op wat de techniek geworden is.
Ik heb geen illusie over de schaal hiervan. Eén onderzoeker met een laptop verlegt de bodem niet. Wat ik wel kan, is het bewijs zo leggen dat iemand met meer bevoegdheid het kan oppakken, en de maatstaf zo formuleren dat hij navolgbaar is voor wie hem overneemt. De maatstaf hoort te passen bij wat de infrastructuur geworden is.
Wet digitale overheid, in werking getreden 1 juli 2023de wettelijke verankering van digitale toegang tot publieke dienstverlening
gedachtenotitieBekwaamheidsfouten in code, bestuur en politiekbronnenverwant
We accepteren het gemak en negeren de code eronder
Een glazen plaatje naast de bank tik je aan en een uur later staat er een warme maaltijd aan de deur. Dat vinden we normaal en leuk. Maar zeg code, kwetsbaarheid of wet, en ineens is alles te technisch en te ver weg. Dezelfde persoon haalt de magie zonder aarzeling binnen en duwt de gevolgen weg, en precies in dat gat werk ik.
Er ligt een plat glazen plaatje naast je bank. Je tikt er wat op, en een uur later staat er een warme maaltijd aan je voordeur, klaargemaakt door iemand die je nooit ziet en bezorgd door iemand anders die je ook niet kent.
Dat is, als je er even bij stilstaat, ongelooflijk. Een paar decennia geleden was het pure sciencefiction. En wij vinden het volstrekt normaal, tot het een keer niet werkt.
Ik wil daar niet lacherig over doen. Het is echt knap, en het maakt levens makkelijker.
Wat me fascineert is niet de techniek zelf, maar hoe verschillend we ertegenaan kijken afhankelijk van hoe je haar noemt.
Noem het een handige app, en het is dichtbij, leuk en van jou. Je hoeft niet te weten hoe het werkt om het te vertrouwen. De magie mag een zwarte doos zijn.
Noem exact hetzelfde ding code, of kwetsbaarheid, of gegevensverwerking, of wet, en het schuift onmiddellijk weg. Dan is het te technisch, iets voor specialisten, ver van je bed. Precies dezelfde persoon die het plaatje zonder aarzeling vertrouwt, haakt af zodra je vertelt wat er in dat plaatje gebeurt.
Dat is geen domheid. Het is een keuze die het systeem voor je maakt: de magie wordt naar je toe gebracht, de gevolgen worden op afstand gehouden. En allebei gebeurt met opzet.
Het is namelijk geen toeval dat de ene kant aanvoelt als dichtbij en de andere als ver weg.
De magie is ontworpen om dichtbij te zijn. Er zijn jaren en miljoenen in gestoken om die maaltijd twee tikken van je vandaan te leggen, want dat verkoopt. Elke drempel is weggehaald.
De gevolgen zijn even zorgvuldig op afstand gezet. De voorwaarden staan in taal die je niet leest. De gegevensstromen zitten achter een interface die er glad en simpel uitziet. Wat er met je locatie of je bestelgeschiedenis gebeurt, is nergens te zien op het plaatje zelf. Het is niet dat het te technisch is om te begrijpen, het is zo gebouwd dat je het niet tegenkomt.
Dus als iemand zegt dat de code en de wet te ver van hem afstaan, heeft hij gelijk, maar niet omdat het van nature zo is. Ze zijn ver weg gezet.
Dit is, denk ik, de beste samenvatting van wat ik eigenlijk doe.
Ik verplaats niets. Ik maak niets kapot en ik voeg niets toe. Ik haal alleen de afstand weg die er kunstmatig in is gebouwd. Ik laat zien wat er in dat plaatje gebeurt als je op bestellen tikt, welke partijen meekijken, waar het heen gaat.
De maaltijd blijft even lekker. De app blijft even handig. Wat verandert is dat de gevolgen even dichtbij komen te staan als de magie, zodat je ze allebei kunt meewegen in plaats van alleen de helft die naar je toe is geschoven.
En daarom is mijn moeilijkste taak niet het meten. Het is het overbruggen van precies deze afstand: iemand die de magie omarmt zover krijgen dat hij ook naar de andere kant kijkt, zonder dat het voelt als een verwijt of als huiswerk. Dat is de reden dat ik uitleg zonder neer te kijken, en dat ik bij elke bevinding zet wat je er zelf mee kunt. Kennis die te ver weg voelt, verandert niets.
In appelmoes zit een wettelijk toegestaan aantal insectendelen
Toen ik twaalf was hoorde ik dat er per pot appelmoes een vast aantal insecten meeverwerkt zit, wettelijk toegestaan omdat je ze er niet uit krijgt. De appelmoes veranderde niet, mijn verhouding ertoe wel. Datzelfde geldt voor software: de bugs en de dataverzameling zitten erin of je het weet of niet, en niet weten is geen bescherming maar naiviteit.
Toen ik twaalf was, in de laatste periode van groep acht, gingen we langs middelbare scholen die zichzelf zo goed mogelijk probeerden te verkopen. Bij een daarvan vertelde iemand mij iets wat ik nooit ben vergeten.
Per pot appelmoes zit een vast aantal beestjes meeverwerkt. Stukjes insect, soms een worm. Niet uit slordigheid, maar omdat je ze niet volledig uit de appels krijgt voordat je ze verwerkt. Het is bekend, het is toegestaan, en het wordt bewust niet op de pot vermeld.
Ik heb dat later nagekeken en het klopt. De Amerikaanse voedselautoriteit publiceert er zelfs officiele grenzen voor. Appelstroop mag gemiddeld vijf of meer hele insecten of het equivalent daarvan per honderd gram bevatten, en tot twaalf procent schimmel. Niet omdat iemand het wil, maar omdat volledig vrij produceren onhaalbaar is en de resten niet schadelijk zijn.
Op het moment dat ik dit hoorde, veranderde er iets. Niet aan de appelmoes. Aan mij.
Dezelfde pot, dezelfde smaak, dezelfde appelmoes die ik altijd lekker had gevonden. Maar mijn verhouding ertoe was op slag anders. Ik proefde hetzelfde en ik dacht iets anders.
Dat vond ik als kind al fascinerend, en ik snap nu waarom het me is bijgebleven. Het is het zuiverste voorbeeld dat ik ken van informatie die het object volledig ongemoeid laat en toch alles verandert aan hoe je erin staat.
Pas veel later besefte ik dat dit is wat ik voor mijn vak doe, en dat het dezelfde ongemakkelijke kant heeft.
Ik meet wat een website of app werkelijk doet, en ik vertel het aan mensen. De site verandert daar niet van. De tracker deed al wat hij deed voordat ik hem zag, en gaat er daarna gewoon mee door. Wat ik verander is niet het product maar de verhouding van de bezoeker tot het product.
Dat is de kern van waarom mijn werk ertoe doet, en tegelijk waarom sommige mensen liever niet willen weten wat ik meet. De appelmoes was lekkerder toen ik het niet wist.
En hier ligt het verschil dat de hele vergelijking draagt.
Bij de appelmoes kun je nog volhouden dat onwetendheid gelukkiger maakt, want de beestjes doen je niets. Bij software gaat die vlucht niet op, en dat is precies waar mijn onderwerp anders is dan een pot uit de supermarkt.
De bugs zitten in de code of je het weet of niet. De dataverzameling loopt of je het merkt of niet. Toen Pokemon Go een spel leek, bleek het later ook een verzamelaar: Niantic kondigde in november 2024 aan dat het een groot geospatiaal AI-model traint op miljoenen scans die spelers met hun camera maakten, tien miljoen locaties, een miljoen nieuwe per week. Het spel was echt een spel, en tegelijk was het dat niet alleen.
Doen alsof het er niet in zit, is lekker naief, en het is toch echt zo. Bij de appelmoes kost die naiviteit je niets. Bij een bug die je gegevens lekt of een spel dat je omgeving inscant, kost ze je precies datgene waarvan je deed alsof het niet bestond.
Dat roept de vraag op die ik mezelf steeds stel: als weten de appelmoes bederft, doe ik mensen dan een plezier?
Bij eten zou ik twijfelen. Bij software niet, en het verschil is de handelingsruimte. Wie weet dat er beestjes in de appelmoes zitten, kan er niets aan doen en eet gewoon door met een naar gevoel. Wie weet dat een app zijn locatie inscant, kan hem verwijderen, de toestemming intrekken, of een alternatief kiezen.
Kennis die je niets laat doen, is een last. Kennis die je een keuze teruggeeft, is macht. Mijn hele werk staat of valt met dat onderscheid, en het is de reden dat ik naast elke bevinding zet wat je er zelf aan kunt doen.
Identity, Shutter Island en The Number 23 tonen een kapot waarnemingsinstrument
Identity, Shutter Island en The Number 23 doen alle drie hetzelfde: ze laten je een verhaal volgen dat klopt, en tonen dan dat het instrument waarmee je keek kapot was. Die laatste gaat over patronen zien die er niet zijn, en dat is precies het beroepsrisico van iemand die de hele dag in data naar patronen zoekt.
Ik schrijf hier niet over films die tegenvielen. Een film die me na vijf minuten niet vasthoudt, zet ik uit, en daar valt weinig zinnigs over te zeggen behalve dat ik hem niet heb gezien.
Wat hier staat is dus per definitie selectief. Alleen wat het ontleden waard bleek, heeft de rit gehaald. Ik beoordeel de filmkunst hier niet. Ik beschrijf wat een film met mijn eigen manier van kijken deed.
Die selectie is zelf al een voorbeeld van waar dit stuk over gaat. Ik kijk terug op mijn eigen kijkgedrag, houd over wat indruk maakte, en zie daar dan een lijn in. Drie films die alle drie hetzelfde doen, dat oogt als een patroon. Het kan ook zijn dat ik juist deze drie onthouden heb omdat ze passen in een lijn die al in mijn hoofd zat. Dat verschil kan ik van binnenuit niet vaststellen. Ik zet het er alvast bij, want de rest van dit stuk gaat precies over dat probleem.
Identity, Shutter Island en The Number 23 zijn heel verschillende films. Ze doen alle drie dezelfde truc met de kijker.
Ze geven je een verhaal dat intern klopt. De gebeurtenissen volgen op elkaar, de personages doen wat je zou verwachten, en jij bouwt onderweg een beeld op van wat er aan de hand is. Dat beeld is coherent, en coherentie voelt als waarheid. Daar zit de hele truc in. Een verhaal waarin alles op zijn plek valt geeft hetzelfde gevoel als een verklaring die klopt, en dat gevoel is een slechte gids.
Dan komt de wending. Met de losse gebeurtenissen blijkt niets mis. Het instrument waarmee je keek was kapot. De waarnemer stond scheef, en alles wat door hem heen kwam stond dus ook scheef.
Dat is een ander soort plotwending dan een onverwachte dader. Bij een gewone ontknoping herzie je een conclusie. Je methode blijft heel, en achteraf krijgt die methode zelfs gelijk, want jij had de aanwijzingen kunnen zien. Hier moet je herzien hoe je conclusies trekt. Er is geen aanwijzing die je gemist hebt en beter had moeten opmerken. De aanwijzingen waren er allemaal en ze klopten allemaal. Ze werden alleen door iets heen gelezen dat scheef stond.
Er zit een tweede laag in. Het beeld dat onderuit gaat is het beeld dat jij zelf gebouwd hebt. De film heeft je grotendeels waarheden gegeven en het kader weggelaten. Daardoor kun je hem achteraf moeilijk verwijten dat hij loog. Je hebt de fout zelf gemaakt, met materiaal dat klopte. Dat is oncomfortabel op een manier die een gewone whodunit nooit haalt.
Ik werk elke dag met waarneming. Ik kijk naar verkeer, naar code, naar wat een apparaat doet, en ik bouw daar een verhaal van. Dat verhaal blijft niet in mijn hoofd. Het gaat naar een artikel, naar een toezichthouder of naar de organisatie zelf, en het kan gevolgen hebben voor een bedrijf of voor een persoon. De inzet ligt dus hoger dan bij iemand die thuis een theorie heeft.
Het griezelige aan deze films is dat de hoofdpersonen niet dom zijn en niet onoplettend. Ze redeneren zorgvuldig binnen een kader dat vanaf het begin scheef stond. Zorgvuldigheid helpt daar niet tegen. Zorgvuldigheid maakt het beeld zelfs overtuigender, want elke nieuwe waarneming wordt netjes in het bestaande kader gepast. Wie goed is in redeneren bouwt een steviger fout.
Dat is precies het gevaar in mijn vak, en het is de reden dat ik als beginsel heb dat ik eerst het tegendeel van mijn eigen bevinding moet beargumenteren. Dat beginsel is er tegen zorgvuldigheid binnen een verkeerd kader, want die brengt je verder van de waarheid terwijl het voelt alsof je dichterbij komt. Zie ook Beargumenteer eerst het tegendeel van je eigen bevinding en Een overtuigde getuige is geen betrouwbare meting.
Er is nog een reden dat het me bezighoudt. In deze films voelt de zekerheid van de hoofdpersoon van binnenuit precies zoals terechte zekerheid voelt. Dat ken ik van dichtbij, uit een hoek die niets met werk te maken heeft. Een fobie doet hetzelfde: het gevaar is volledig echt terwijl je verstand weet dat het er niet is. Zie ook Een fobie is zekerheid zonder bewijs.
The Number 23 gaat over iemand die overal hetzelfde getal begint te zien. In een adres, in een datum, in de letters van een naam als je ze omzet in cijfers. Hoe langer hij kijkt, hoe meer hij vindt.
En hij heeft ook echt gelijk dat hij het vindt. Dat is het wrede van het idee: de patronen zijn er, ze zijn narekenbaar, en ze betekenen niets. Bij voldoende vrijheid in de bewerking is elk getal overal te vinden. De vondst zegt iets over het zoeken. Over de wereld zegt hij bijna niets.
Daar bestaat een woord voor, apofenie: betekenisvolle verbanden zien in willekeurige gegevens.
Dat blijft niet beperkt tot personages in een film. Het is de standaardfout in mijn hele vakgebied.
De zinsnede "bij voldoende vrijheid in de bewerking" draagt die hele redenering, dus het loont om te laten zien wat hij betekent. Zet elke letter om in zijn plaats in het alfabet. Sta daarna per letter drie dingen toe: optellen, aftrekken, of overslaan. Veel meer vrijheid dan dat heeft numerologie niet nodig.
import itertools
def treffers(naam, doel=23):
w = [ord(c) - 96 for c in naam.lower() if c.isalpha()]
raak = sum(
1 for keuze in itertools.product([1, -1, 0], repeat=len(w))
if abs(sum(k * x for k, x in zip(keuze, w))) == doel
)
return raak, 3 ** len(w)
print(treffers("mick beer"))
Op mijn eigen naam levert dat 140 manieren op om precies 23 uit te komen, uit 6561 mogelijke combinaties. Elk van die 140 is een geldige som. Wie er één uitkiest, hem opschrijft en de andere 6560 niet noemt, heeft een sluitend bewijs op papier staan.
Twee dingen vallen op als je ermee speelt. Het getal 23 is nergens bijzonder. Zet het doel op 7 en er zijn 214 manieren. Zet het op 42 en er zijn er precies 42. Die laatste samenloop is grappig en betekent niets, en daarmee illustreert hij het onderwerp van dit stuk beter dan ik het kan uitleggen. Zet het doel op 111 en er is geen enkele manier, want de letters van mijn naam halen die som simpelweg niet. Het tweede dat opvalt: bij een korte naam als "ada" is er niets te vinden, ook niet voor 23. Het aantal treffers hangt af van hoeveel materiaal je hebt en hoeveel bewerkingen je toestaat. Het hangt nauwelijks af van het getal.
Dat is de hele numerologie in vijf regels code. Vergroot de zoekruimte tot er treffers in zitten, publiceer de treffers, laat de zoekruimte weg.
Die getallen heb ik zelf gedraaid en ze zijn met het blok hierboven na te rekenen. Het bewijsniveau is gemeten. Wat ze aantonen is beperkt: ze gelden voor deze ene bewerking op deze namen. Ze illustreren een principe dat in de statistiek onder een andere naam bekend staat, het probleem van meervoudig toetsen, en dat principe geldt breder dan dit speelgoedvoorbeeld.
Ik zit in datasets met duizenden verzoeken, honderden domeinen en tientallen partijen. In zo'n hoeveelheid zijn altijd samenlopen te vinden. Twee partijen die vaak samen opduiken. Een patroon in tijdstippen. Een identifier die op twee plekken lijkt terug te komen. De naam van een bekende tracker die ergens in een JavaScript-bestand staat.
Als ik zoek tot ik iets vind, vind ik altijd iets. En het zal narekenbaar zijn, net als bij hem. Het aantal paren dat je kunt vergelijken groeit kwadratisch met het aantal partijen, dus bij tientallen partijen zijn het er al honderden. Bekijk je die allemaal en meld je de sterkste, dan heb je exact hetzelfde gedaan als met die 140 sommen.
Wie zo bang is voor apofenie dat hij elk patroon wegwuift, mist dus precies de dingen die hij zoekt. Dat is de spiegelfout, en in mijn vak is die net zo duur. De regel kan dus niet zijn dat ik patronen wantrouw. De regel moet een procedure zijn die onderscheid maakt tussen een patroon met een mechanisme eronder en een patroon dat alleen een zoektocht achter zich heeft.
Dit is precies waarom mijn methodische beginselen zijn zoals ze zijn, en deze film maakt tastbaar waarom ze nodig zijn.
Bepaal vooraf wat je zoekt, zodat de vondst niet het product is van het zoeken. Ik leg de vraag vast voordat de scan draait.
Vraag bij elk patroon hoe waarschijnlijk het is dat het bij toeval ontstaat in een verzameling van deze omvang. Tel daarvoor hoeveel dingen je bekeken hebt, inclusief alles wat niets opleverde. Die noemer is de kern van de zaak.
Zoek actief naar de tegenverklaring voordat je de jouwe opschrijft. De eerste vraag bij een verdachte samenloop is welk saai mechanisme hem ook verklaart.
Vraag of er überhaupt een mechanisme is dat het patroon voortbrengt. Cookie-sync heeft er een. Een samenloop in tijdstippen heeft die vaak niet.
Toets het idee op andere data dan de data waar het idee vandaan kwam. Wie op dezelfde verzameling zoekt en bevestigt, heeft twee keer hetzelfde gedaan.
En als iets pas verschijnt nadat je er lang genoeg naar hebt gestaard, is dat een reden tot argwaan en niet tot enthousiasme.
Die laatste regel is de moeilijkste, want een gevonden patroon voelt als een beloning voor het werk. Je hebt uren zitten kijken, er komt eindelijk iets uit, en dat geeft een kick. Precies op dat moment moet je jezelf gaan tegenspreken, en precies op dat moment heb je daar de minste zin in.
Die strip vat het beter samen dan ik het kan. Onderzoekers testen twintig kleuren snoepjes op een verband met acne, vinden er bij toeval een die scoort, en de krant kopt over groene snoepjes. Twintig keer zoeken en één keer raak is precies wat je verwacht bij toeval, en het ziet er van buiten identiek uit aan een ontdekking.
Het venijn zit in de laatste stap. De lezer van de krant ziet de negentien andere kleuren nooit. De publicatie meldt de treffer en laat de zoekruimte weg, en dat is dezelfde beweging als bij die 140 sommen. Zie ook Media maakt er vaak net een eigen verhaal van.
Ik had dit alles ook uit de literatuur over cognitieve vertekening kunnen halen, en dat heb ik ook gedaan. De begrippen staan daar allemaal in, netjes benoemd.
Er is een goede tegenwerping op dat idee, en die noem ik liever zelf. Een scenarioschrijver bepaalt welk bewijs je te zien krijgt. Hij kan de fout van zijn hoofdpersoon laten slagen omdat hij ook de wereld eromheen bouwt. In het echt vecht een verkeerd kader tegen data die niemand in de hand heeft, en dan loopt het kader vaker vast dan in een film. Een film laat dus zien hoe apofenie van binnenuit voelt. Hoe vaak het gebeurt, kan hij niet aantonen.
Dat neem ik voor lief. Ik gebruik deze films als leermiddel voor de ervaring, en de vraag hoe vaak het misgaat beantwoord ik ergens anders, met tellingen en met noemers. Het nut zit in de herinnering aan het gevoel. Als ik drie uur naar een correlatie in een scan heb zitten staren en ik voel dat het klopt, dan behandel ik dat gevoel als een alarm.
Vlad III was een orthodoxe vorst die zijn land verdedigde tegen de Ottomanen, en hij is beroemd geworden als monster. Niet door Bram Stoker, die alleen de naam leende, maar door Duitse pamfletten op de pas uitgevonden drukpers. Russische verslagen beschreven dezelfde daden als strenge rechtvaardigheid. Zelfde feiten, tegengesteld beeld, afhankelijk van wie de pers bediende.
Vlad III regeerde in de vijftiende eeuw drie keer over Wallachije, een orthodox vorstendom dat klem zat tussen het koninkrijk Hongarije in het noordwesten en het oprukkende Ottomaanse rijk in het zuiden. Zo'n positie laat weinig ruimte. Wie de ene kant koos, kreeg de andere over zich heen. Drie regeerperiodes zeggen vooral iets over hoe hard er in die streek aan de troon werd getrokken.
Zijn bijnaam Dracula betekent zoon van Dracul, naar zijn vader, die was opgenomen in de Orde van de Draak: een ridderorde die door de keizer was opgericht voor de verdediging van christelijk Europa tegen de Ottomanen. Het woord komt van het Latijnse draco, draak. Dat het in het Roemeens ook duivel kan betekenen, is een taalkundig toeval dat later goed van pas kwam. Een naam die op twee manieren te lezen valt, wordt uiteindelijk gelezen op de manier die het beste verhaal oplevert.
Als kind werd hij samen met zijn broer als gijzelaar aan het Ottomaanse hof achtergelaten om de loyaliteit van zijn vader te garanderen. Dat was in die tijd een gangbare vorm van diplomatie: het kind was het onderpand. Zijn vader en oudste broer werden later vermoord tijdens een machtsstrijd. In juni 1462 leidde hij een nachtelijke aanval op het kamp van sultan Mehmed II, de veroveraar van Constantinopel, in een poging hem te doden en de invasie in één klap te breken. Dat mislukte. Hij sneuvelde in 1476 of begin 1477.
In grote delen van Roemenië geldt hij nog altijd als volksheld, juist om dat verzet. Twee samenlevingen kijken naar hetzelfde leven en zien iets anders. Dat gegeven is het hele stuk.
Hij was geen zachtaardig man. Hij gebruikte terechtstellingen als bestuursinstrument en zette lijken op palen langs de weg om aanvallers af te schrikken. Die wreedheid is echt en ik wil haar niet wegpoetsen. Openbare terechtstelling was in het vijftiende-eeuwse Europa overal gebruikelijk, en ook binnen die maatstaf viel zijn optreden op.
Het beeld dat wij van hem hebben, is ergens anders ontstaan. Het komt uit hoe erover werd geschreven, in de decennia daarna, in Duitstalige pamfletten die werden verspreid met een technologie die net bestond. De drukpers van Gutenberg was rond het midden van die eeuw in gebruik gekomen. De verhalen over Vlad horen bij de eerste generatie gedrukte teksten die niets met liturgie of universiteit te maken hadden, en ze worden gerekend tot de eerste publiekssuccessen van het gedrukte woord.
Die pamfletten waren kort, goedkoop en herdrukbaar, en ze werkten precies zoals sensatie altijd werkt. Er hoorden houtsneden bij van een man die rustig zit te eten tussen de lichamen. Zo'n houtblok was duur om te snijden en daarna vrijwel gratis te herhalen, dus hetzelfde beeld kon druk na druk mee. Het lezerspubliek in de Duitse steden kende Wallachije alleen van horen zeggen en had geen enkele manier om iets na te trekken.
Daar zit de kern van het mechanisme. De drukpers maakte het kopiëren van een bewering honderd keer goedkoper. Het controleren van diezelfde bewering werd er geen cent goedkoper op. Elk medium dat die twee kosten uit elkaar trekt, produceert vanzelf een overschot aan onweersproken verhalen. Ik kom die scheefheid in mijn eigen werk dagelijks tegen, zie Media maakt er vaak net een eigen verhaal van.
De controlegroep die de geschiedenis toevallig bewaarde¶
Hier zit het bewijs dat het om de vertellers ging, en het is het soort bewijs waar ik van houd.
Er bestaan ook Slavische, Russische verslagen over dezelfde man en dezelfde daden, opgetekend in dezelfde eeuw. Die presenteren hem als een strenge heerser die corruptie hard aanpakte en orde afdwong in een land waar orde ontbrak. De wreedheid wordt daarin niet ontkend. Ze krijgt een ander bijschrift. In beide tradities duiken bovendien herkenbaar dezelfde anekdotes op, met een tegengestelde moraal eronder.
Dat is wat een experiment een controlegroep noemt. Ik kan in mijn eigen scans één variabele wisselen en de rest constant houden om te zien wat er verandert. Hier heeft de geschiedenis dat per ongeluk voor mij gedaan. De daden liggen vast, de eeuw ligt vast, en wat varieert is wie het opschreef en voor welk publiek. De uitkomst varieert mee.
Wie er belang bij had, is deels te reconstrueren. De Hongaarse koning moest uitleggen waarom hij een christelijke bondgenoot in de kerker had zitten terwijl er een kruistocht tegen de Ottomanen op de agenda stond. Verhalen over onmenselijke wreedheid kwamen daar goed van pas. Dat verband is afgeleid uit de omstandigheden en de datering van de bronnen. Een bekentenis bestaat er niet van, en ik presenteer het dus als afgeleid, niet als vastgesteld.
Er is hier een scherp punt: die Slavische tekst is zelf ook propaganda, geschreven in een omgeving waar een harde vorst als deugd gold. Dat klopt waarschijnlijk. Alleen bevestigt dat precies wat ik beweer. Als beide tradities gekleurd zijn, dan volgt het beeld dus niet dwingend uit de feiten. De feiten laten allebei de conclusies toe, en de keuze tussen die conclusies is elders gemaakt. Ik heb geen neutrale versie nodig om te laten zien dat de gekleurde versies uit elkaar lopen.
Wat blijft staan na aftrek van beide agenda's is smal: er is hard geregeerd, er is publiek terechtgesteld, er is oorlog gevoerd tegen een overmacht. Al het overige is duiding.
Er is onderzoek gedaan naar hoe de aantallen zich in de bronnen ontwikkelden. De uitkomst is precies wat je zou vrezen: latere Duitse verslagen vermenigvuldigden kleinere, gedocumenteerde terechtstellingen tot bloedbaden met honderden of duizenden slachtoffers.
Een bekend verhaal claimt vijfhonderd edelen die tijdens een paasmaal werden gedood, terwijl het bewijs op een veel kleinere zuivering wijst. De vertoning van de lichamen bij Târgoviște is historisch geloofwaardig. De enorme aantallen die in populaire geschiedenissen rondgaan, zijn dat veel minder.
Waarom getallen in dit soort ketens één kant op bewegen, is geen mysterie. Een getal is de goedkoopste manier om een verhaal groter te maken. Je hoeft er geen nieuwe gebeurtenis voor te verzinnen, je hoeft alleen een cijfer te verhogen dat toch niemand kan narekenen. Er was geen register, geen tegenpartij die de druk kon corrigeren, en geen verteller die er beter van werd om het aantal te halveren. Selectie doet de rest: de versie met het grootste getal wordt het vaakst herdrukt en wordt daarmee de versie die overleeft.
De casus is oud, de procedure is herbruikbaar. Ik stel bij elke bewerende bron dezelfde vijf vragen, in deze volgorde.
Wie schreef dit op, wanneer, en voor welk publiek?
Wat kost het de verteller als het niet klopt? Bij nul kosten is het verhaal ongetoetst.
Bestaat er een tweede traditie met een ander belang, en zegt die hetzelfde?
Zijn de getallen ergens naartoe te herleiden, of zijn ze alleen doorgegeven?
Wat blijft er over als ik uitsluitend hou wat in onafhankelijke bronnen terugkomt?
Toegepast op Vlad levert dat drie stapels op. Gedocumenteerd: hij regeerde, hij vocht tegen Mehmed II, hij liet mensen publiek terechtstellen, er bestaan gedrukte Duitse pamfletten en er bestaat een Slavische tegentraditie. Afgeleid: die pamfletten dienden een politiek belang van partijen die met hem in conflict waren. Vermoed, en meer ook niet: elk concreet slachtofferaantal boven de kleine, traceerbare gevallen.
Dezelfde ladder gebruik ik bij een scan. Wat de netwerkopname laat zien is gemeten. Wat ik uit een domeinnaam of een parameter concludeer is afgeleid. Wat ik denk dat de partij ermee doet is vermoed, tot ik het kan laten zien. Die scheiding is mijn belangrijkste gereedschap, zie Mijn werkwijze: van vermoeden naar bevinding. En voor ik iets publiceer probeer ik eerst het tegendeel hard te maken, zie Beargumenteer eerst het tegendeel van je eigen bevinding. Bij Vlad wint dat tegendeel deels: hij was werkelijk wreed. Dat hoort er dan gewoon in.
Omdat het het oudste geval is dat ik ken van iets wat ik dagelijks tegenkom.
Een nieuw massamedium verschijnt. Wat zich het beste verspreidt, is wat de sterkste reactie oproept, en waarheid speelt in die selectie hooguit een bijrol. Cijfers groeien bij elke doorvertelling, omdat niemand ze kan narekenen en een groter getal een beter verhaal is. De duiding van identieke feiten valt uiteen langs de belangen van wie ze doorgeeft. En de goedkoopste versie wint, omdat kopiëren goedkoper is dan controleren.
Vervang drukpers door tijdlijn en je hebt vandaag. Sociale media hebben de snelheid opgevoerd en de drempel verlaagd. Het mechanisme zelf is ouder dan de telefoon. Dat vind ik verhelderend, ook al is het weinig troostrijk: het gaat om een eigenschap van elk medium dat sneller verspreidt dan het corrigeert. Een verhaal dat zich verplaatst zonder dat iemand het narekent, gedraagt zich als een besmetting, zie Klagen plant zich voort als een besmetting.
Het raakt ook mijn eigen positie. Ik publiceer bevindingen die mensen boos maken, en boosheid verspreidt zich harder dan nuance, zie Waarom krijgen mijn stukken zoveel tractie?. De verleiding om een getal rond te maken of een formulering scherper te zetten is bij mij precies zo aanwezig als bij een pamflettist in 1490. Het verschil dat ik kan maken zit in het spoor dat ik erbij lever: de ruwe opname en het bewijsniveau. Dat is de enige rem die ik ken die van binnenuit werkt.
Vlad III kreeg die rem niet. Vijfhonderd jaar later is het eerste wat de meeste mensen bij zijn naam denken een vampier die nooit bestond, bedacht door een Ier die de naam uit een voetnoot plukte. De pamfletten hebben gewonnen. Dat ze wonnen bewijst niets over hem, en alles over de pers.
Anne Frank en koningin Elizabeth waren tijdgenoten
Anne Frank en Martin Luther King zijn allebei in 1929 geboren, en koningin Elizabeth in 1926. Zij was dus ruim drie jaar ouder dan allebei, en leefde tot 2022. Dat voelt onmogelijk, en de reden is dat wij mensen niet dateren op hun geboortejaar maar op het laatste beeld dat we van ze hebben.
Anne Frank werd geboren op 12 juni 1929. Martin Luther King op 15 januari van datzelfde jaar. Koningin Elizabeth de Tweede op 21 april 1926.
Elizabeth was dus ruim drie jaar ouder dan allebei. Zij stierf in 2022. Als Anne Frank en King hadden geleefd, waren zij op dat moment nog geen 94 geweest, en dus jonger dan de vrouw die we tot voor kort gewoon op televisie zagen.
Anne Frank hoort in mijn hoofd bij een ander tijdperk. Niet bij een ander decennium, bij een andere wereld. Korrelige zwart-witfoto's, een oorlog die in geschiedenisboeken staat, iets wat vóór de moderne tijd ligt.
Elizabeth hoorde bij nu. Kleurenbeelden, nieuwsuitzendingen, een gezicht dat mee veranderde met de jaren.
Toch was ze de oudste van de drie.
Wat hier gebeurt, is dat ik ze niet dateer op wanneer ze begonnen maar op het laatste beeld dat ik van ze heb. Wie jong sterft, wordt bevroren in de beeldtaal van zijn sterfjaar. Anne Frank is voor altijd vijftien, in de fotografie van 1942. King is voor altijd 39, in het beeldmateriaal van 1968. Ze zijn niet meegereisd.
Elizabeth reisde wel mee. Elk jaar opnieuw gefotografeerd, in betere kwaliteit, tussen dingen die ik herken. Daardoor schoof ze in mijn hoofd steeds op naar het heden, terwijl haar geboortejaar geen millimeter bewoog.
Ik dateer een gebeurtenis onbewust aan de kwaliteit van het beeld. Zwart-wit en korrelig is lang geleden. Kleur is recent. Scherp is nu.
Dat is een volstrekt onbetrouwbare maatstaf, want hij meet de camera en niet de tijd. Er bestaan kleurenfoto's uit de jaren dertig en er wordt vandaag bewust in zwart-wit gefotografeerd. En materiaal dat wordt gerestaureerd, ingekleurd of vloeiender gemaakt, verschuift daardoor in je gevoel naar voren, terwijl er niets aan de datum verandert.
Dat vind ik onrustbarend, want het betekent dat de manier waarop iets is vastgelegd bepaalt hoe ver weg het voelt. Wie de vastlegging verbetert, verandert het verleden in de beleving van mensen zonder één feit aan te raken.
Om dezelfde reden als de rest van deze tak: het is een systematische fout in het instrument waarmee ik de wereld waarneem.
Mijn tijdsgevoel is geen klok. Het is een schatting op basis van beeldkwaliteit, van hoeveel ik me van een periode herinner, en van of iemand is blijven doorleven in het nieuws. Alle drie hebben ze niets met chronologie te maken.
En het is de reden dat ik in mijn werk nooit op afstand in de tijd afga maar altijd op de datum. Een tracker die er in 2019 al was, voelt als oud nieuws en is dat niet. Een besluit van de toezichthouder uit 2021 voelt als recent en is inmiddels door drie ontwikkelingen ingehaald. Het gevoel van hoe ver iets weg ligt, is geen informatie.
Zet er een datum bij. Dan hoef je niet te vertrouwen op een instrument dat aantoonbaar de camera meet in plaats van de tijd.
Er bestaat een gemeten effect waarbij mensen zich een gebeurtenis wel herinneren, maar vergeten zijn dat ze zich die eerder ook al herinnerden. Dat betekent dat het gevoel hier heb ik nooit eerder aan gedacht geen bewijs is. Je geheugen houdt geen logboek bij van zijn eigen raadplegingen, en dat is precies wat een meting wel doet.
Er is een verschijnsel in het geheugenonderzoek dat me niet loslaat sinds ik ervan hoorde. Mensen kunnen zich iets herinneren en tegelijk vergeten zijn dat ze zich datzelfde eerder ook al herinnerden.
Het heet in de literatuur het forgot-it-all-along-effect. Arnold en Lindsay bouwden er in 2002 een laboratoriumversie van, in een artikel dat simpelweg Remembering remembering heet, in het Journal of Experimental Psychology. Zij werkten voort op een idee van Schooler en collega's uit 1997, dat oorspronkelijk kwam uit de discussie over herinneringen die pas jaren later boven komen.
De kern van hun bevinding: of je je herinnert dát je je iets herinnerde, hangt af van de context waarin dat de vorige keer gebeurde. Haal dezelfde herinnering in een andere setting op en het voelt nieuw, ook als je hem twee weken eerder al had.
Ik dacht altijd dat mijn geheugen twee dingen deed: bewaren en teruggeven. Dit laat zien dat het een derde ding niet doet, en dat ik dat wel aannam.
Het houdt geen logboek bij van zijn eigen raadplegingen.
Dat betekent dat het gevoel "hier heb ik nooit eerder aan gedacht" geen enkel bewijs is. Het is een indruk over een indruk, en juist die tweede laag blijkt onbetrouwbaar. Hetzelfde geldt voor "dat heb ik nooit gezegd" en "dat wist ik niet". Die zinnen kunnen volstrekt oprecht zijn en toch onjuist, zonder dat er iemand liegt.
Mijn hele methode is gebouwd op het uitschakelen van precies dit soort onbetrouwbaarheid. Een meting van vorig jaar weet exact wanneer ze is gedaan en wat ze toen zag. Ze heeft geen indruk over of ze dit al eens eerder heeft waargenomen, ze heeft een tijdstempel.
En het verklaart iets waar ik in de praktijk tegenaan loop. Als ik een organisatie confronteer met een bevinding, krijg ik regelmatig te horen dat men dit niet wist of dat er nooit eerder op is gewezen. Ik nam vroeger aan dat zulke antwoorden vaak strategisch waren. Ik denk nu dat ze veel vaker gewoon waar aanvoelen voor degene die ze uitspreekt, ook als er een oude e-mail bestaat die het tegendeel bewijst.
Dat is geen excuus voor de organisatie. Het is wel een reden om het bewijsstuk te zoeken in plaats van de vraag te stellen. Niemand kan met terugwerkende kracht in zijn eigen hoofd nagaan wat hij ooit wist.
Voor mijn eigen manier van werken komt het hierop neer.
Vertrouw nooit op iemands herinnering aan zijn eigen kennis, ook niet op die van jezelf. Vraag om de vastlegging: het bericht, de commit, de HAR, de datum. En als die er niet is, noteer dan dat er niets is, in plaats van iemands indruk over te nemen als feit.
Dat klinkt streng, maar het is eerlijker dan het alternatief. Mensen die dit niet weten, worden voor leugenaar uitgemaakt op grond van een geheugenfunctie die simpelweg niet bestaat.
Van de Amerikaanse veroordelingen die later met DNA zijn rechtgezet, berustte 69 procent op een ooggetuige die de verkeerde aanwees. In bijna vier op de tien van die zaken wezen meerdere getuigen dezelfde onschuldige aan. Overtuiging en overeenstemming voelen als bewijs en zijn het niet.
Van de Amerikaanse veroordelingen die achteraf met DNA zijn rechtgezet, berustte volgens het Innocence Project 69 procent op een ooggetuige die de verkeerde had aangewezen. Dat zijn 252 van de 367 zaken die zij daarvoor telden. Het is de grootste enkele oorzaak van onterechte veroordelingen die zij vonden, groter dan vals bekennen, groter dan slechte forensiek.
Twee cijfers eruit zijn nog verontrustender dan het hoofdcijfer.
In 38 procent van die zaken wezen meerdere getuigen dezelfde onschuldige aan. En in 53 procent van de zaken waar de etniciteit bekend was, ging het om een getuige die iemand van een andere etnische groep identificeerde, een situatie waarin mensen aantoonbaar slechter zijn in herkennen.
Blijf even hangen bij die 38 procent, want dat is het punt dat het verst reikt buiten de rechtszaal.
Als twee onafhankelijke waarnemers hetzelfde zeggen, voelt dat als bevestiging. Dat is de basis van vrijwel alle alledaagse waarheidsvinding: meerdere bronnen die overeenkomen. Hier blijkt dat die logica breekt zodra de bronnen aan dezelfde vertekening blootstonden, of aan elkaar.
Getuigen zien dezelfde slecht belichte confrontatie, krijgen dezelfde suggestieve vraag, horen soms van elkaar wie ze hebben aangewezen. Dan is de tweede getuige geen onafhankelijke meting maar een herhaling van de eerste, met dezelfde fout erin.
Dat is precies wat ik in mijn eigen vak bedoel als ik zeg dat je moet weten of twee waarnemingen echt los van elkaar staan. Twee scanners die dezelfde lijst gebruiken, bevestigen elkaar niet. Ze herhalen elkaar.
Het tweede dat uit dit onderzoek volgt, is dat de stelligheid van een getuige weinig voorspelt over of hij gelijk heeft, zeker niet nadat er tijd overheen is gegaan en er is teruggekoppeld.
Iemand die zegt dat hij het honderd procent zeker weet, is niet aantoonbaar betrouwbaarder dan iemand die twijfelt. Sterker nog: zekerheid groeit vaak ná de identificatie, doordat iemand bevestiging krijgt. De herinnering wordt scherper naarmate hij vaker wordt opgehaald, ook als hij fout is.
Dat maakt van een getuigenverklaring een meting die zichzelf tijdens het proces verandert. Elke keer dat je hem opvraagt, herschrijf je hem een beetje.
Ik werk met bewijs dat dit probleem niet heeft, en pas door dit onderzoek besef ik hoe uitzonderlijk dat is.
Een netwerkopname verandert niet als ik hem tien keer bekijk. Een commit weet zijn eigen datum. Een gedecompileerde app zegt vandaag hetzelfde als vorige maand. Dat is geen kleinigheid, dat is de reden dat het bewijs kan dragen.
En het legt uit waarom ik zo streng ben over bewijsniveaus. In de code gevonden is niet hetzelfde als live gemeten, niet omdat ik graag slagen om de arm houd, maar omdat elke stap waarin een mens iets moet onthouden of interpreteren een foutbron toevoegt die achteraf niet meer te scheiden is van het geheel.
De rechtszaal heeft die les met tweehonderdvijftig onschuldige mensen betaald. Ik neem hem liever gratis over.
De jaren negentig, nul en tien voelen als afgebakende tijdvakken met een eigen karakter, maar niemand werd op 1 januari 2000 wakker in een andere cultuur. Die grenzen komen uit ons tientallig stelsel en uit het feit dat we ons onze eigen jeugd het scherpst herinneren. Dat is de disciplinerende gedachte bij alles wat ik over vroeger beweer.
We praten over de jaren negentig, de jaren nul en de jaren tien alsof het landen zijn met een grens ertussen. Elk met een eigen kleur, eigen muziek, eigen manier van doen. En het voelt ook echt zo.
Alleen is er niemand op 1 januari 2000 wakker geworden in een andere cultuur. Wat we tijdvakken noemen, komt in de eerste plaats uit ons tientallig stelsel. We hebben tien vingers, dus we tellen in tientallen, dus we knippen de geschiedenis in stukken van tien jaar. Was ons stelsel op twaalf gebaseerd, dan hadden we het over heel andere tijdperken met net zo veel overtuiging.
Historici weten dit en waarschuwen ervoor. Periodisering is gereedschap van degene die terugkijkt, geen eigenschap van de tijd zelf.
Toch klopt er iets aan het gevoel, en ik wil het niet wegredeneren. Er zijn twee redenen waarom die indeling niet volstrekt willekeurig is.
De eerste is dat technologie- en mediacycli toevallig ongeveer even lang duren als een decennium. Iets wordt geïntroduceerd, verspreidt zich, wordt de norm en wordt daarna vervangen, en dat proces neemt vaak een jaar of tien. Als je het over de jaren tien hebt, bedoel je meestal de smartphone-jaren, en die adoptiecurve is echt en meetbaar.
De tweede reden is persoonlijk en veel sterker dan mensen denken. Je herinnert je je eigen adolescentie en vroege volwassenheid onevenredig scherp. Dat is een goed gedocumenteerd verschijnsel: vraag iemand van boven de veertig naar zijn leven en er komt een piek aan herinneringen uit de periode tussen zijn tiende en dertigste, veel meer dan uit de jaren daarna.
Dat betekent dat "de jaren negentig hadden meer karakter" bijna altijd wordt gezegd door iemand die in de jaren negentig jong was. Het decennium heeft niet meer karakter. Jij had er meer.
Deze notitie is er een tegen mezelf, want ik heb er vandaag een stuk of tien geschreven die op vroeger leunen. Mijn meubels, mijn klokken, de jassen van voor mijn geboorte, Ronaldinho tegenover het spel van nu.
Elk daarvan draagt het risico dat ik een verschuiving beschrijf die vooral in mijn eigen hoofd zit, en dan met terugwerkende kracht een grens trek waar er geen was.
Ik heb daar geen waterdichte remedie voor, maar wel drie vuistregels die ik mezelf opleg.
Als ik een breuk beweer, moet ik hem kunnen dateren aan iets buiten mezelf. De aanname van de smartphone is te dateren. Dat de sfeer veranderde niet.
Ik moet het mechanisme kunnen benoemen, niet alleen het verschil. Bij de klok is dat de prijsdruk die de nauwkeurigheid opat. Zonder mechanisme is het een indruk.
En ik moet de vraag stellen of het over de mediaan gaat of over de uitschieters. Dat de beste dingen van vroeger goed waren, zegt niets.
Er zit een aardige tegenstelling tussen deze notitie en die over de kikker in het opwarmende water, en die tegenstelling is het punt.
Daar betoog ik dat verandering zo geleidelijk gaat dat je de grens niet opmerkt. Hier betoog ik dat we achteraf grenzen tekenen die er nooit waren. Dat lijkt tegenstrijdig en is het niet.
Allebei komen ze voort uit hetzelfde tekort: mensen kunnen slecht met geleidelijkheid omgaan. Terwijl het gebeurt, merken we het niet. Achteraf overdrijven we het, en maken we er een omslagpunt van dat er nooit is geweest.
Dat is precies waarom ik meet in plaats van herinner. Een meting van vorig jaar heeft geen last van gewenning, en ook niet van nostalgie. Ze weet niet in welk decennium ze staat.
Op LinkedIn zag ik tussen maart en juni 2026 een golf van klaagposts: je ergert je eraan, je ziet dat het aandacht oplevert, je doet mee. Ik zag ook meer overlijdensberichten dan ooit. Het eerste is een besmetting die ik kan beschrijven, het tweede is iets over mijn tijdlijn en niet over de wereld.
Tussen ongeveer maart en juni 2026 stond LinkedIn vol met klaagposts. Niet over één onderwerp, maar als toon: gefrustreerde stukken over werkgevers, over sollicitatieprocedures, over collega's, over de sector.
Het mechanisme leek me tamelijk doorzichtig. Je ziet iemand klagen en je ergert je eraan. Vervolgens zie je dat het bericht veel reacties krijgt. En dan denk je, half bewust, dat werkt blijkbaar, en je schrijft er zelf een. Zo steek je de volgende aan.
Dat is besmetting in de letterlijke zin: gedrag dat zich verspreidt door blootstelling, versterkt door een systeem dat beloont wat reacties oplevert.
De sortering op zo'n platform kijkt niet naar of iets waar is of nuttig, maar naar of mensen reageren. Verontwaardiging en herkenbare frustratie doen dat uitstekend, veel beter dan een genuanceerd stuk over hetzelfde onderwerp.
Het gevolg is dat je niet ziet wat mensen denken, maar wat het meeste reactie uitlokt van wat mensen schrijven. Dat zijn twee verschillende dingen, en het verschil is precies waar mijn wantrouwen tegenover dit soort waarnemingen begint.
In dezelfde periode zag ik meer overlijdensberichten dan ik ooit had gezien. Dat viel me sterk op.
Hier moet ik streng zijn tegen mezelf, want dit is het punt waarop een eerlijke waarneming een onjuiste conclusie wordt.
Wat ik heb waargenomen, is mijn tijdlijn. Dat is niet hetzelfde als sterfte. Er zijn twee gewone verklaringen die allebei precies dit beeld opleveren zonder dat er iemand extra overlijdt. De eerste is dat aandacht selectief wordt zodra iets je is opgevallen: vanaf dat moment zie je het overal, en de eerdere gevallen die je niet registreerde tellen niet mee. De tweede is de sortering hierboven. Een rouwbericht krijgt veel reacties, dus het platform toont er meer, dus je ziet er meer.
Daar komt bij dat mijn netwerk elk jaar groter wordt en gemiddeld ouder, wat op zichzelf al meer berichten oplevert.
Ik zou hier kunnen stoppen bij wat ik zag en het als bevinding presenteren. Dat doe ik niet, en de reden is dezelfde als bij alles wat ik meet.
Ik heb geen sterftecijfers bekeken. Ik heb geen nulmeting van hoeveel van zulke berichten ik het jaar ervoor zag. Ik heb geen manier om mijn eigen aandacht van de werkelijkheid te scheiden. Wat ik heb is een indruk, en een indruk is geen meting.
En dit is precies de plek waar mensen die ik verder serieus neem de bocht uit vliegen. Van hier is het één stap naar een verklaring, en die stap voelt logisch omdat de waarneming echt was. Maar de waarneming ging over mijn scherm.
Als ik dit zou willen weten, zou ik het bij het statistiekbureau opzoeken en niet bij mezelf. Dat de klaagbesmetting wel te beschrijven is en de sterftegolf niet, komt doordat het eerste over het platform gaat, en het platform is wat ik heb waargenomen.
Nederland heeft een wettelijke bekwaamheidseis en toetst hem niet
Nederland heeft precies een wettelijke definitie van bekwaamheid, en die staat verrassend dicht bij de mijne: boven de stof staan en haar kunnen aanpassen. Alleen kijkt het toezicht naar het dossier van de school, niet naar wat de leraar kan. We meten dus bevoegdheid, want papier is telbaar, en bekwaamheid niet.
Er is een wettelijke definitie, en die is beter dan ik verwachtte¶
Het Besluit bekwaamheidseisen onderwijspersoneel staat in het Staatsblad van 2017 onder nummer 148 en geldt sinds augustus van dat jaar voor alle leraren in het primair en voortgezet onderwijs en het middelbaar beroepsonderwijs. Het vervangt de eisen uit 2006. Bekwaamheid valt er uiteen in drie delen.
Vakinhoudelijk. De leraar beheerst de stof, staat er boven, kan haar aanpassen aan de leerling en legt verbanden met de praktijk en met de wetenschap. Hij houdt zijn kennis actueel.
Vakdidactisch. Hij kan die inhoud leerbaar maken, volgt hoe de leerling zich ontwikkelt, toetst en stelt zijn onderwijs bij.
Pedagogisch. Hij bouwt een veilig leerklimaat, volgt de sociaal-emotionele ontwikkeling en stemt af met collega's en anderen om de leerling heen.
Wat me het meest opvalt aan die opsomming is wat er ontbreekt. Er staat geen enkel getal in. Geen studiepunten, geen jaren ervaring, geen puntentelling, geen verplichte cursusuren. Het zijn allemaal vermogens: beheersen, aanpassen, volgen, bijstellen, afstemmen. Wie dit opschreef heeft de makkelijke weg laten liggen.
Blijf even hangen bij die eerste eis. Boven de leerstof staan en haar kunnen aanpassen aan de leerling.
Dat is woordelijk wat ik bedoelde met spelen. De stof kennen zoals ze in het boek staat is de trede eronder. Er zo boven staan dat je haar kunt kneden voor het kind dat vastloopt, dat is de trede die telt. De wetgever heeft dat in juridische taal gevangen, en scherper geformuleerd dan wat de meeste bedrijven in een functieprofiel zetten. De norm klopt.
Daar zit meteen het ongemakkelijke. Zolang een norm slecht is opgeschreven, kun je een tekort daaraan wijten. Hier kan dat niet. Wat er dan overblijft is de vraag of iemand ooit kijkt.
Het toezicht controleert het dossier van de school¶
De Inspectie van het Onderwijs houdt toezicht op de kwaliteit van het onderwijs van de school. Voldoet die kwaliteit niet, dan kijkt de inspectie ook naar de bekwaamheidsdossiers. En dan volgt de zin waar het om gaat: met de kwaliteit van de individuele leraar houdt de inspectie zich niet bezig.
Zet de twee stukken naast elkaar. Er is een wettelijke eis over wat een leraar moet kunnen. Het toezicht controleert of de school een dossier bijhoudt waarin staat dat hij het kan. Het papier wordt gecontroleerd. Het kunnen blijft op dat niveau ongetoetst.
Dat is niet per se onredelijk. De individuele leraar beoordelen is het werk van de school, en een inspectie die tienduizenden leraren zelf zou beoordelen is een heel andere organisatie dan de inspectie die we hebben. De redenering is verdedigbaar. Het gevolg blijft staan: de norm die zo goed is opgeschreven wordt nergens systematisch tegen de werkelijkheid gehouden, en van een norm die nergens tegen de werkelijkheid wordt gehouden weet niemand of hij wordt gehaald.
Kijk naar de keten. De wet stelt de eis aan de leraar. De school legt vast dat eraan is voldaan. De inspectie controleert die vastlegging bij de school. Elke schakel doet iets dat op zichzelf verdedigbaar is, en in het midden van de keten zit een gat waar de eigenlijke vraag doorheen valt. Dat is dezelfde vorm als in De bouwers en de beslissers weten vaak niet van elkaar: iedereen doet zijn deel, en het geheel meet iets anders dan wat er gevraagd werd.
Omdat bekwaamheid niet wordt gemeten, meten we bevoegdheid. Dat zijn twee verschillende dingen. Bevoegdheid is een diploma, een toestand die je hebt of niet hebt, geldig tot je overlijdt. Bekwaamheid is een vermogen dat per klas en per les kan verschillen. Het eerste is telbaar met een database. Het tweede vraagt een oordeel van iemand die zelf voor een klas heeft gestaan.
De cijfers over bevoegdheid bestaan wel. Ze komen uit de jaarlijkse inventarisatie van het onderwijspersoneel. Ongeveer 88 procent van de lessen in het voortgezet onderwijs wordt gegeven door iemand met de juiste papieren. Ruim 8 procent door iemand die benoembaar is, en bijna 4 procent door iemand die onbevoegd is. Die laatste groep krimpt al jaren, al vlakt de daling af.
Op zichzelf is dat geen slecht beeld. Wel is het belangrijk om te zien wat het beeld aantoont en wat niet. Deze cijfers zijn gemeten en gepubliceerd, en ze tonen aan hoeveel lessen worden gegeven door iemand met het juiste papier. Ze tonen niets aan over de kwaliteit van die lessen. Een leraar die zijn vak dertig jaar geleden leerde en sindsdien niets heeft bijgehouden telt hier volledig mee als in orde, terwijl de wet in datzelfde besluit uitdrukkelijk vraagt dat hij zijn kennis actueel houdt. Het bewijsniveau van "88 procent bevoegd" is hard. De sprong van dat cijfer naar "88 procent goed onderwijs" is een aanname. Zie Label elke bevinding op bewijsniveau.
Tot zover is het beeld rustig. Dan kijk je hoe het verdeeld is.
In de brugklas van scholen met de hoogste achterstandsscore wordt 23 procent van de lessen onbevoegd gegeven. Op het vmbo ligt het aandeel bevoegde lessen het laagst, op het vwo het hoogst.
Lees dat nog een keer. De leerlingen die het meeste baat hebben bij een leraar die boven de stof staat, hebben de grootste kans op iemand die de papieren niet heeft. Het gaat om ongeveer zes keer het landelijk gemiddelde, precies in het jaar waarin de richting van hun verdere schoolloopbaan wordt bepaald.
En bedenk dat dit de zwakke maat is. Onbevoegd is een papieren categorie. Wat je hier ziet is de scheefheid in het telbare deel. Of de scheefheid in het onmeetbare deel groter of kleiner is weet ik niet, en dat is precies het punt van deze notitie: die meting bestaat niet. Mijn vermoeden is dat ze dezelfde kant op wijst, omdat scholen die moeite hebben met het vullen van hun rooster ook minder te kiezen hebben in wie ze voor de klas zetten. Dat is een vermoeden, met de status die daarbij hoort.
Hetzelfde gat zit in de wetgeving waar ik wel meet¶
Ik kwam dit patroon in het onderwijs tegen en herkende het meteen, omdat het de vorm heeft van wat ik dagelijks in privacywetgeving zie.
De AVG stelt eisen die over vermogen gaan. Artikel 5 legt de beginselen vast en voegt in het tweede lid de verantwoordingsplicht toe: de verwerkingsverantwoordelijke moet kunnen aantonen dat hij zich eraan houdt. Artikel 24 vraagt passende technische en organisatorische maatregelen, opnieuw met de plicht om de naleving aan te tonen. Artikel 25 vraagt gegevensbescherming door ontwerp en door standaardinstellingen. Artikel 32 vraagt een beveiligingsniveau dat past bij het risico. Artikel 11.7a van de Telecommunicatiewet vraagt toestemming voordat je gegevens plaatst op of uitleest uit de randapparatuur van een bezoeker.
Al die eisen gaan over gedrag. Over wat een systeem doet op het moment dat er een echte bezoeker binnenkomt. Bijna alles wat een organisatie hierover kan overleggen gaat over papier: een verwerkingsregister, een DPIA, een verwerkersovereenkomst, een cookiebeleid, een screenshot van de bannerinstellingen. Dat papier is telbaar, opvraagbaar en in een middag in orde te maken. Het antwoord op de vraag of er trackers vuren voordat iemand op accepteren klikt staat er niet in. Zie Een DPIA die niemand kan inzien, is geruststelling, geen afweging en De cookiemuur toont minder partners dan de code telt.
Ik wil voorzichtig zijn met wat ik hier beweer. Ik heb niet gemeten hoe de Autoriteit Persoonsgegevens haar onderzoeken inricht, en ik ken de dossiers niet. De parallel met de onderwijsinspectie is een afgeleide redenering over de vorm van toezicht. Wat ik wel gemeten heb is de afstand tussen wat een organisatie over zichzelf opschrijft en wat haar site of app werkelijk doet. Die afstand is in mijn scans regelmatig groot.
De toets die in het onderwijs ontbreekt kan hier wel¶
Het aardige aan de digitale kant is dat de bekwaamheidstoets er gewoon uit te voeren is. Er hoeft geen oordeel over een mens te worden geveld. Je laat het systeem draaien en schrijft op wat het doet.
De procedure die ik gebruik is kort. Open de pagina in een verse browser zonder geschiedenis en zonder cookies. Klik nergens op, dus ook niet op weigeren. Leg al het netwerkverkeer vast in een HAR-bestand. Kijk daarna welke partijen er al zijn voordat de bezoeker iets heeft gekozen. Zie Netwerkverkeer lezen via HAR-files en Meet zoals een bezoeker, niet zoals een scanner.
import json
from urllib.parse import urlparse
har = json.load(open("scan-voor-toestemming.har"))
eigen_domein = "voorbeeld.nl"
derden = set()
for entry in har["log"]["entries"]:
host = urlparse(entry["request"]["url"]).hostname or ""
if host and not host.endswith(eigen_domein):
derden.add(host)
for host in sorted(derden):
print(host)
Veel meer is het niet. Elke host in die lijst is een partij die iets van de bezoeker heeft gezien voordat er toestemming was. Of dat een overtreding van artikel 11.7a oplevert hangt ervan af wat er precies wordt geplaatst of uitgelezen, en of dat strikt noodzakelijk is voor de dienst die de bezoeker vroeg. Die weging blijft juridisch werk. De lijst zelf is een feit, en die kun je naast het cookiebeleid leggen. Waar de twee elkaar tegenspreken heb je iets in handen.
In het onderwijs zou de vergelijkbare toets betekenen dat je iemand een les laat geven en kijkt of hij de stof kan kneden voor het kind dat vastloopt. Dat kost een dagdeel per leraar en een beoordelaar die het zelf kan. Bij een website kost het een paar minuten en een script van vijftien regels. Dat verschil in kosten verklaart vermoedelijk een groot deel van het verschil in toezicht. Het verandert niets aan de conclusie dat de norm in beide gevallen over kunnen gaat en de controle over papier.
Deze notitie bevestigt mijn eigen these met materiaal dat ik zelf niet heb bedacht. Dat maakt haar sterker dan de these alleen. Ik had een idee over bekwaamheid en spelen met de stof, en toen bleek een besluit uit 2017 ongeveer hetzelfde te zeggen, opgeschreven door mensen die mijn notities nooit hebben gezien. Zo'n onafhankelijke bevestiging is meer waard dan tien argumenten van mezelf.
Het patroon eronder is algemener dan onderwijs of privacy. Wat meetbaar is wordt gemeten en gestuurd: diploma's, dossiers, percentages, registers, vinkjes. Wat lastig meetbaar is wordt opgeschreven als eis en verder aan de praktijk gelaten. De aandacht schuift daarna vanzelf naar het meetbare deel, omdat dat het deel is waarop iemand kan worden afgerekend. Zie Op IT-afdelingen beslist wie het vak nooit beoefende. En zodra het ergens knelt, knelt het als eerste op de plek waar niemand kijkt: de brugklas met de hoogste achterstandsscore, de gebruiker die de dienst niet kan vermijden.
Ik haal er voor mezelf één werkregel uit. Kom ik een norm tegen die goed is opgeschreven, dan vraag ik als eerste wie hem toetst, waartegen en hoe vaak. De kwaliteit van de tekst zegt weinig over de kwaliteit van de praktijk. In dat gat tussen de eis en de controle ligt bijna altijd een meting die nog niemand heeft gedaan, en dat is het soort werk waar ik goed in ben. Zie Mijn werkwijze: van vermoeden naar bevinding.
Modern voetbal is meetbaar beter geworden en minder verrassend
Ronaldinho hield de bal hoog, bedacht trucs die niemand had gezien en kreeg in 2005 een staande ovatie van het publiek van de aartsrivaal. Modern voetbal is op elke meetbare as beter geworden en voelt tegelijk alsof er wordt nagedaan in plaats van beleefd. Dat is geen toeval: wat te meten valt wordt getraind, en verrassing valt niet te meten.
Als ik het criterium van spelen wil uitleggen aan iemand die niets van mijn vak weet, gebruik ik Ronaldinho.
Hij hield de bal hoog op een manier die geen doel diende. Hij bedacht bewegingen die er niet waren, en die daarna door duizenden kinderen op pleintjes werden nagedaan. Hij deed dingen die statistisch nergens op sloegen en die toch werkten, omdat niemand ze aan zag komen.
Het moment dat het samenvat is 2005 in het Bernabeu. Hij speelde daar tegen Real Madrid, hij was van Barcelona, en het publiek van de aartsrivaal stond op om voor hem te applaudisseren. Dat gebeurt niet voor efficiëntie. Dat gebeurt als iemand iets doet waarvan je niet wist dat het kon.
Dat is trede drie in mijn ladder, in een vorm die iedereen herkent. Hij consumeerde het spel niet en hij becommentarieerde het niet. Hij maakte er iets bij.
Kijk naar het spel van vandaag en er is iets weg. Niet het niveau, daar kom ik zo op. Wat weg is, is het gevoel dat je naar iemand kijkt die aan het beleven is in plaats van aan het uitvoeren.
Er wordt sneller gelopen, nauwkeuriger gepasst en beter georganiseerd verdedigd dan ooit. En toch heb ik vaak het idee dat ik naar een uitvoering kijk van iets wat elders is bedacht. Alsof het naspelen is geworden.
Wat die twee tegenwerpingen niet wegnemen, is het mechanisme. En dat is hetzelfde mechanisme als overal in deze tak.
Het spel is doorgemeten. Er wordt gestuurd op verwachte doelpunten, op balverlies, op pass-succespercentage, op afgelegde meters. Dat zijn goede maatstaven en ze hebben het niveau echt verhoogd.
Maar een actie die vaak mislukt en soms iets oplevert wat niemand zag aankomen, scoort slecht op elke van die maatstaven. De dribbel met risico op balverlies is statistisch inefficiënt, ook als hij één keer per wedstrijd iets doet wat geen enkele veilige pass kan. Wie op die cijfers wordt beoordeeld, leert die actie af.
En dan de tweede laag, die zwaarder weegt: waar zulke spelers vandaan kwamen. Straatvoetbal en pleintjes waren plekken zonder trainer, zonder systeem en zonder statistiek, waar je uren met de bal rommelde omdat het leuk was. Dat is de omgeving waarin je met iets leert spelen. Kinderen worden nu vroeg in georganiseerde structuren gezet waarin ze correct leren uitvoeren.
Dat is exact hetzelfde patroon als bij het ambacht en bij koken. De omgeving die de vaardigheid voortbracht is verdwenen, niet de aanleg.
Voetbal is hier alleen het duidelijkste voorbeeld, want het speelt zich voor publiek af en iedereen kan het zien.
Wat te meten valt wordt getraind, beloond en dus overvloedig aanwezig. Wat niet te meten valt, verdwijnt zonder dat iemand het besluit. Verrassing valt niet te meten. Schoonheid ook niet. Een deur die dichtvalt als een kluis niet, en een ingenieur die terugloopt naar de tekentafel omdat het net niet goed voelt evenmin.
Het resultaat is overal hetzelfde: technisch beter, en tegelijk armer aan het ding waar je van gaat houden.
Sherlock Holmes ziet wat anderen missen omdat hij waarneemt in plaats van aanneemt. De beweging om me heen gaat de andere kant op: gebruikers in plaats van makers, aannemers in plaats van onderzoekers, meningen in plaats van onderbouwde standpunten. Al moet ik erbij zeggen dat Holmes' methode alleen werkt omdat de schrijver de dader al kende.
Het aantrekkelijke aan Sherlock Holmes is niet dat hij slim is. Het is dat hij kijkt waar anderen aannemen.
Iedereen in die verhalen ziet dezelfde kamer. Het verschil is dat de rest binnenkomt met een verwachting en die bevestigd ziet, terwijl hij binnenkomt zonder en registreert wat er werkelijk staat. Daar komt zijn voorsprong vandaan: niet uit een groter brein, maar uit een andere volgorde. Eerst waarnemen, dan verklaren.
Daar komt bij dat hij een uitgewerkte werkwijze heeft, dat hij zijn vak apart heeft bestudeerd tot in details die niemand nuttig vond, en dat hij het lef heeft om een conclusie hardop te zeggen. Die combinatie maakt hem, niet één eigenschap.
En dan de nuance die erbij hoort, want anders is dit een reclamefolder.
Holmes werkt alleen omdat Conan Doyle de dader al kende. Elke keten van kleine waarnemingen naar één zekere conclusie is achteraf geconstrueerd door iemand die het antwoord had. In werkelijkheid zijn er bij elke set aanwijzingen tientallen verklaringen die net zo goed passen, en de meeste zijn saai.
Redeneren van een detail naar zekerheid is in het echte leven precies de fout waar ik elders voor waarschuw: je vindt het patroon dat je zoekt, het is narekenbaar, en het klopt niet. Zou Holmes bestaan, dan zou hij regelmatig met grote stelligheid de verkeerde aanwijzen, en zijn zelfvertrouwen zou dat erger maken in plaats van beter.
Wat je van hem moet overnemen is dus de houding en niet de methode. Waarnemen voordat je verklaart, ja. Van drie details naar één zekere dader, nee. Bij mij eindigt diezelfde keten in een bewijsladder met treden, juist omdat die zekerheid er niet is.
De beweging om me heen gaat de andere kant op, en dat zie ik op drie manieren.
Gebruikers in plaats van makers. Mensen die dagelijks met tien systemen werken en er geen enkel begrijpen. Niet omdat ze dom zijn, maar omdat alles zo is ontworpen dat je niets hoeft te snappen. Dat is comfort, en het kost je de derde trede.
Aannemers in plaats van onderzoekers. Iets voor waar houden omdat het van een betrouwbare plek kwam, en het daarna doorvertellen. De hele shadowban-mythe draait daarop, net als het merendeel van wat er over technologie wordt gezegd.
Meningen in plaats van standpunten. Het verschil is dat een standpunt uit iets voortkomt en dus kan wijken voor iets beters. Een mening is een positie die je hebt en verdedigt. Bij het eerste kun je vragen waar het vandaan komt. Bij het tweede is die vraag onbeleefd.
Er zit een houding in dit soort observaties waar ik zelf niet in wil vervallen.
Het is makkelijk om laatdunkend te doen over wat mensen maken, over het schilderij van de koe of de post die niemand nodig had. Maar iets maken is altijd beter dan niets maken, ook als de uitkomst middelmatig is. De koe schilderen is oefening, en er is geen enkele maker die niet met slechte koeien is begonnen.
Wat ik wel scherp wil houden is het onderscheid dat ik bij mijn eigen berichten gebruik. Maak je iets om je begrip te vergroten en dat van anderen, of om gezien te worden? Dat eerste is de derde trede, ook als het resultaat lelijk is. Het tweede is ego met een productvorm eromheen, ook als het mooi is.
En de eerlijkheid gebiedt dat ik daar zelf voortdurend aan de verkeerde kant dreig te belanden. Dit manuscript zit vol observaties over anderen. De enige verdediging die ik heb, is dat alles wat erin staat na te rekenen is, en dat een lezer er iets aan moet hebben. Op de dag dat dat niet meer zo is, is dit ook gewoon een schilderij van een koe.
Bekwaamheid blijkt uit wat je met de stof kunt maken
Bekwaamheid heeft niets met opleidingsniveau te maken. Het gaat erom of je de stof zo eigen hebt gemaakt dat je ermee kunt spelen: iets maken dat er nog niet was, in plaats van alleen consumeren en beoordelen. Een mbo'er die bouwt is bekwamer dan een academicus die alleen oordeelt, en de toets is simpel: laat zien wat je hebt gemaakt.
Als ik het over bekwaamheid heb, gaat het niet over diploma's. Ik moet dat expliciet zeggen, want het woord trekt vanzelf die kant op en dan wordt mijn hele betoog iets wat het niet is.
Een universitaire opleiding is geen bewijs van bekwaamheid, en het ontbreken ervan is geen bewijs van het tegendeel. Ik ken mbo'ers en hbo'ers die hun vak tot in de vezels beheersen, en ik ken hoogopgeleiden die keurig kunnen navertellen wat anderen hebben bedacht en verder niets.
Er zitten drie treden onder elkaar, en ze worden vaak door elkaar gehaald.
Consumeren. Je neemt kennis tot je. Je leest het, je volgt de cursus, je begrijpt het terwijl je het hoort. Dit voelt als leren en het is de trede waar veruit de meeste mensen blijven staan, ook na een diploma.
Beoordelen. Je kunt een oordeel vellen over het werk van een ander. Dit is goed, dit deugt niet, dit zou ik anders doen. Dit voelt als expertise, en het is de trede waar het gevaarlijk wordt, want je kunt hem bereiken zonder de derde ooit te hebben gezet. Je kunt overtuigend oordelen over iets wat je zelf niet zou kunnen maken, en niemand die het merkt in een vergadering.
Creëren. Je maakt iets wat er nog niet was. Niet een oefening namaken, maar een nieuw probleem aanpakken met wat je weet, en er iets uit krijgen dat werkt.
Aan die derde trede zit een kenmerk dat ik lang niet kon benoemen tot ik het woord spelen vond.
Wie de stof echt eigen heeft, kan ermee rommelen. Wat als ik dit weglaat. Wat als ik het omdraai. Wat als ik dit uit het ene vakgebied in het andere gebruik. Dat kan alleen als de kennis los is gekomen van de vorm waarin je hem hebt geleerd, en in je eigen hoofd opnieuw is opgebouwd.
Zolang je de stof nog kent in de volgorde van het boek, kun je hem reproduceren. Zodra je ermee kunt spelen, is hij van jou.
Daarom is spelen geen frivool woord maar de scherpste test die ik ken. Een kind dat met blokken speelt, begrijpt zwaartekracht op een manier die het niet kan opschrijven. Iemand die met zijn vak speelt, snapt het op diezelfde manier.
Er is een praktische reden waarom ik hierop uitkom, en die is bijna cynisch: creëren is de enige trede die je niet kunt faken.
Consumeren kun je claimen. Beoordelen kun je claimen, en het overtuigt vaak nog ook, want een goed geformuleerd oordeel klinkt hetzelfde of het nu uit begrip of uit napraten komt. Maar iets wat je hebt gemaakt bestaat of het bestaat niet. Het werkt of het werkt niet. Daar valt niets aan te presenteren.
Richard Feynman had dezelfde toets. Op het schoolbord in zijn kantoor stond bij zijn dood in 1988 dat hij niet begrijpt wat hij niet kan maken. Dat is precies dit, in acht woorden.
Voor mij is het ook de reden dat ik bouw en niet alleen schrijf. De scanner, de wettenspiegel, de versleutelde producten: die dingen zijn niet alleen nuttig, ze zijn het bewijs dat ik begrijp waar ik over schrijf. Wie alleen over trackers schrijft, kan zich vergissen zonder het te merken. Wie er een meetinstrument voor bouwt, wordt door de werkelijkheid gecorrigeerd.
De vinkjeszetter die over een implementatie beslist, staat op trede twee. Hij kan beoordelen, of denkt dat, en die trede is precies overtuigend genoeg om er een functie mee te krijgen. De cursus van tien weken levert trede een en verkoopt hem als trede drie. En de vraag of AI je versterkt of vervangt, wordt beslist door de trede waarop je staat als je hem gebruikt: op trede drie is het gereedschap, op trede een is het een prothese.
Alles wat ik in deze tak beschrijf, is een systeem dat trede twee beloont en trede drie niet kan herkennen.
En daarom is de mbo'er die iets bouwt in mijn ogen bekwamer dan de academicus die alleen oordeelt. Niet uit sympathie voor de onderkant, maar omdat de een iets heeft gemaakt en de ander niet.
Stuart en Hubert Dreyfus, "A Five-Stage Model of the Mental Activities Involved in Directed Skill Acquisition", 1980het model van beginner tot expert, waarin spelen met de stof het hoogste niveau is
Streep de modewoorden weg uit de vaardighedenlijsten van 2026 en er blijft iets anders over dan gereedschap: systeemdenken, root-cause zoeken, begrijpen wat code echt doet. Dat zijn denkgewoonten, en ze worden verkocht als tweedaagse cursus. Aanleg bepaalt niet of je het kunt leren, wel hoe lang het duurt en wie er onderweg afhaakt.
Wat er overblijft als je de modewoorden wegstreept¶
Forbes publiceerde in oktober 2025 een lijst van technische vaardigheden die ook in een slechte arbeidsmarkt gevraagd blijven, samengesteld uit bijdragen van twintig bestuurders. De koppen klinken als je zou verwachten: agentic AI, MLOps, Kubernetes, prompt engineering, blockchain.
Maar lees wat er onder die koppen staat en er verschijnt iets anders. Systeemdenken naast kritisch denken, het bos en de bomen tegelijk kunnen zien. De oorzaak van een storing vinden dwars door applicaties, infrastructuur en beveiliging heen. Begrijpen wat code werkelijk doet, ook als een model hem heeft geschreven. Techniek kunnen vertalen naar wat het een organisatie oplevert. Helder uitleggen aan mensen die je vak niet kennen. Weten waar je moet zoeken en dan doorpakken in plaats van blijven hangen in onderzoek.
Vrijwel geen van die dingen is gereedschap. Het zijn manieren van kijken.
Daar zit de wrijving. Een gereedschap kun je leren in een week: dit is de knop, zo werkt de configuratie. Systeemdenken is geen knop. Root-cause zoeken evenmin, en een goed gebruikersonderzoek al helemaal niet.
Toch is er een hele industrie die precies dat verkoopt. Word in tien weken data-engineer, in een weekend UX-ontwerper, in een tweedaagse prompt engineer. De belofte is niet dat je kennismaakt met het vakgebied, maar dat je het aan het eind kunt.
Dat is dezelfde structuur als bij het product dat er goed uitziet in de winkel. De cursus verkoopt wat te tonen is op het moment van kopen, namelijk een certificaat, en niet wat pas jaren later blijkt, namelijk of je het echt kunt. En net als bij dat product is de koper degene die het verschil pas ontdekt als het te laat is.
Er zit iets in mensen dat bepaalt of dit soort denken makkelijk gaat. Wie graag systemen uit elkaar haalt, patronen zoekt, details niet loslaat en het onaangenaam vindt als iets niet klopt, heeft een voorsprong in dit vak die niet uit een cursus komt.
Ik houd het bij cognitieve stijl en niet bij een diagnose. Er is echt onderzoek naar het verschil tussen systematiserend en op mensen gericht denken, en naar de oververtegenwoordiging van de eerste stijl in techniek. Maar van "veel mensen in dit vak denken zo" naar "je moet zo zijn" is een stap die het onderzoek niet draagt, en die bovendien mensen buitensluit die het wel degelijk kunnen.
Wat ik wel durf te zeggen: deze manier van denken is niet uniform verdeeld, ze is niet in een weekend aan te leren, en doen alsof dat wel kan is oneerlijk tegenover wie het koopt.
bronnen
Michael Polanyi, "The Tacit Dimension", 1966stilzwijgende kennis: we weten meer dan we kunnen vertellen
AI-tijdwinst verdwijnt in opgewekte vraag, zoals bij snelwegen
Verbreed een snelweg en er komt meer verkeer, geen kortere reistijd. Bij software gebeurt hetzelfde: sneller kunnen bouwen leegt de wachtlijst niet, het haalt uitgesteld werk naar voren en maakt onrendabele plannen ineens haalbaar. De winst verdampt in hogere verwachtingen voordat iemand heeft besloten waar hij heen moest.
Wie een verstopte snelweg verbreedt, verwacht kortere files. Wat er meestal gebeurt is het omgekeerde. De extra ruimte lokt extra ritten uit, en binnen een paar jaar staat het weer vast, nu met meer auto's erin. De rijstroken zijn er wel, de tijdwinst is weg.
Economen kennen dit als opgewekte vraag. De ruimte die je toevoegt, wordt niet gespaard. Ze wordt opgevuld door gedrag dat er eerst niet was, omdat de prijs van dat gedrag daalde. Wie vroeger de rit oversloeg omdat de file te lang was, rijdt nu wel. Wie een omweg nam om de spits te mijden, rijdt nu recht door de stad. De weg was even ruimer, en dat lokte precies genoeg extra ritten uit om hem weer vol te maken. Het systeem zoekt een nieuw evenwicht, en dat evenwicht ligt bij dezelfde reistijd als daarvoor.
Dit is meer dan een los inzicht. Het staat in de metingen. Anthony Downs beschreef al in de jaren zestig dat nieuwe wegcapaciteit in de spits zichzelf weer volzuigt. Gilles Duranton en Matthew Turner toonden in 2011 in de American Economic Review een sterke versie: als je de weglengte in een stad met een bepaald percentage vergroot, groeit het aantal gereden kilometers met ongeveer hetzelfde percentage mee. De elasticiteit ligt rond de één. Bouw meer weg, en je krijgt evenredig meer verkeer. De reistijd blijft waar hij was.
Hetzelfde mechanisme is nog ouder. William Stanley Jevons merkte in 1865 op dat zuinigere stoommachines het steenkoolverbruik omhoog joegen. Steenkool werd goedkoper om te gebruiken, dus kwamen er meer toepassingen bij, en het totaal steeg. Efficiëntie per eenheid en totaal verbruik lopen uiteen. Efficiëntie maakt het onderliggende ding aantrekkelijker, en dan wil je er meer van.
Bewijsniveau: dit zijn gepubliceerde, herhaald bevestigde bevindingen uit de verkeers- en energie-economie. Ik leen ze, ik meet ze niet zelf. Wat ze delen is een structuur die losstaat van het onderwerp. Maak iets goedkoper of sneller per eenheid, en het totale verbruik ervan stijgt, tenzij iemand dat totaal actief begrenst. Dat laatste stukje, de actieve begrenzing, is bijna altijd de plek waar het misgaat.
In een stuk voor Forbes van juli 2026 past Luboslava Uram, technisch directeur bij Solvd, die vergelijking toe op softwareontwikkeling. Ze klopt griezelig goed. Wordt bouwen sneller en goedkoper per eenheid, dan int de organisatie dat verschil niet als besparing. Ze verbruikt de vrijgekomen ruimte, precies zoals de verbrede snelweg zich weer vult.
De wachtlijst raakt daardoor niet leeg. Uitgesteld werk komt naar voren. Plannen die eerst te duur waren, lijken ineens haalbaar, dus worden ze gemaakt. De capaciteit die je erbij kreeg, roept het werk op dat die capaciteit weer opeet. De backlog is nooit een vaste voorraad geweest die je een keer kunt wegwerken. Hij is een functie van wat haalbaar lijkt, en zodra meer haalbaar wordt, groeit hij mee.
De vergelijking is bruikbaar zolang je haar niet overspant. Software is geen wegennet, en een team is geen file. Wat de twee delen is de vorm van het misverstand: iedereen rekent op tijdwinst uit extra capaciteit, en die winst verdampt omdat de capaciteit vraag oproept die er zonder haar niet was. Dat het mechanisme in twee zulke verschillende domeinen opduikt, is precies wat het serieus maakt. Het zegt iets over hoe capaciteit en verwachting zich tot elkaar verhouden, los van wat er precies gebouwd of gereden wordt.
Het patroon herken ik onmiddellijk. Routineklussen gaan sneller: tests, documentatie, onbekende code doorgronden, iets opzoeken. Die winst is echt en ik voel hem elke dag.
Alleen verdwijnt het werk niet, het verplaatst zich. Meer code betekent meer beslissingen over architectuur, koppelingen, beveiliging en onderhoudbaarheid op de lange termijn. Snellere oplevering betekent meer draaiende onderdelen waar jarenlang iemand verantwoordelijk voor blijft. De makkelijke helft wordt goedkoper, de moeilijke helft wordt groter. Elke regel die er sneller bij komt, is een regel die iemand moet begrijpen, testen, beveiligen en over drie jaar nog durven aanpassen. Die last verschuift naar voren in de tijd en wordt zwaarder, terwijl de aandacht ervoor gelijk blijft.
En ondertussen merkt de organisatie de snelheid op. Verwachtingen stijgen. Het nieuwe tempo wordt binnen een kwartaal de norm, en dan is de winst opgegaan in de meetlat waaraan je voortaan wordt afgemeten. Uram brengt dat scherp onder woorden: een team kan tegelijk productiever en overbelast worden. Ze beschrijft een demonstratie waarna de eerste reactie was om te vragen welke extra functies er nu bij konden, in plaats van om de planning te verlichten. De winst was al uitgegeven voordat iemand had besloten of hij naar groei, kwaliteit of kostenverlaging moest. Niemand nam dat besluit. Het toestel zoog de tijd op zoals de snelweg het verkeer opzuigt, vanzelf, zonder dat iemand het stuurde.
Hier komt mijn eigen these in economische vorm terug, en daarom neem ik het op.
Ik betoog dat de vraag of iets werkt het wint van de vraag hoe het werkt, omdat het eerste zichtbaar is en het tweede niet. Zie Twintig jaar lang won werkende software van veilige software. Bij de teruggegeven tijd gebeurt exact dat. De vrijgekomen ruimte gaat naar wat te tonen is, namelijk meer functies. Architectuur, beveiliging en onderhoudbaarheid blijven onzichtbaar, en die krijgen de ruimte niet. Een extra knop kun je demonstreren. Een schone koppeling of een dichtgetimmerde autorisatie zie je pas als ze ontbreekt, en dan is het te laat.
Dat is de zwakke plek. Er wordt sneller gebouwd, terwijl de laag die de gevolgen moet opvangen niet meegroeit. Meer code per week vraagt meer toezicht, meer review, meer nadenken over wat er kapot kan. Die laag is duur, traag en onzichtbaar, dus die blijft achter. Het is de Cybertruck-fout in het klein, elke sprint opnieuw: het indrukwekkende deel raast vooruit en het saaie deel dat het veilig houdt, hobbelt erachteraan. Zie De Cybertruck is wel echte onbekwaamheid.
Voor mijn eigen werk heeft dat een nuchtere consequentie. Als de tijdwinst structureel naar meer functies gaat en de bewaking daarvan achterblijft, dan groeit de stapel die ik doorlicht sneller dan de zorg die erin is gestopt. Meer apps, meer koppelingen, meer partijen die meelezen, allemaal sneller in productie dan voorheen. Dat is de reden dat ik verwacht dat mijn werk voorlopig niet ophoudt. De versnelling die de bouwers helpt, vergroot precies de berg die ik meet.
Uram besluit met een vraag die ik overneem, want hij is beter dan de mijne. De vraag is wat je bewust hebt besloten te doen met de tijd die je hebt teruggekregen. Hoeveel sneller je mensen zijn geworden, is daarbij bijzaak. Snelheid zonder besluit is alleen een hoger toerental.
Als er geen antwoord op die vraag is, dan is de snelheidswinst echt en de besparing denkbeeldig. De uren zijn er, ze zijn alleen al vergeven aan werk dat vanzelf naar binnen liep, op dezelfde manier waarop een bredere weg zich vult voordat de wegbeheerder heeft besloten waar al dat extra verkeer heen moest. Wie de winst wil houden, moet hem uitgeven voordat de verwachtingen dat voor hem doen. Dat vraagt een keuze, en die keuze is het enige stuk dat niet automatisch gaat. Je kunt besluiten de tijd in review te steken, in het aflossen van technische schuld, in rust. Elk van die keuzes is verdedigbaar. Geen keuze is er ook een, en dat is de keuze die het toestel voor je maakt. Ik betrap mezelf er zelf op. De routineklussen gaan sneller, en voor ik het weet is de vrijgekomen tijd al gaan zitten in iets nieuws dat ik ben gaan bouwen, zonder dat ik een moment heb stilgestaan bij de vraag of dat de beste besteding was. De snelweg in mijn eigen week vult zich net zo hard als elke andere.
Gilles Duranton en Matthew Turner, "The Fundamental Law of Road Congestion", American Economic Review 101(6), 2011de meting: meer rijstroken leveren evenredig meer verkeer op
Anthony Downs, "The Law of Peak-Hour Expressway Congestion", Traffic Quarterly, 1962de oorspronkelijke formulering van opgewekte vraag
Met Paramant bouw ik versleuteling op post-quantum standaarden, tegen een computer die nog niet bestaat. Dat is het tegendeel van keihardinnoveren: je lost een probleem op dat nog niemand heeft, omdat wat vandaag wordt onderschept over tien jaar alsnog te openen is. Het is de hoe-vraag stellen voordat iemand je ertoe dwingt.
Vrijwel alle versleuteling die vandaag het internet bij elkaar houdt, leunt op wiskundige problemen die een gewone computer niet in redelijke tijd kan oplossen. Grote getallen ontbinden, discrete logaritmen. Daar is decennia op gebouwd en het werkt.
Een voldoende grote quantumcomputer breekt die aannames. Niet door harder te rekenen, maar doordat er algoritmen bestaan die het probleem fundamenteel anders aanpakken. Zo'n machine is er nog niet, en niemand weet of ze er over vijf of over vijfentwintig jaar staat.
Dat klinkt als een probleem voor later. Dat is het niet, en de reden daarvoor is de kern van deze notitie.
Versleuteld verkeer is te onderscheppen en te bewaren. Wie vandaag een datastroom opslaat die hij niet kan lezen, kan hem over vijftien jaar alsnog openen zodra de machine er is.
Dat betekent dat de klok voor gevoelige gegevens niet begint te lopen op de dag dat de quantumcomputer bestaat, maar op de dag dat de gegevens over de lijn gaan. Voor iets met een korte houdbaarheid maakt dat niets uit. Voor een medisch dossier, een juridisch stuk, een identiteitsbewijs of staatsgeheimen wel.
Wie dus vandaag iets versleutelt dat over twintig jaar nog geheim moet zijn, moet vandaag al post-quantum werken. Later is te laat, en dat is niet retorisch bedoeld maar letterlijk.
Waarom dit het tegendeel is van keihard innoveren¶
Hier komt deze notitie samen met de rest van wat ik schrijf.
Mijn klacht elders is dat de vraag of iets werkt het wint van de vraag hoe het werkt. Bouwen, uitrollen, veiligheid later. Post-quantum cryptografie is het enige grote voorbeeld dat ik ken waar het precies andersom gaat.
Er is geen aanval. Er is geen incident. Er is geen toezichthouder die een boete uitdeelt en geen klant die erom vraagt. Er is alleen een redenering over wat er kan gebeuren, en op grond daarvan wordt een hele laag van het internet vervangen. Het Amerikaanse standaardisatie-instituut heeft in 2024 de eerste algoritmen vastgelegd, en sindsdien bouwen partijen ze in.
Dat is precies de houding die ik overal mis: iemand betaalt voor iets waarvan het succes betekent dat er nooit iets gebeurt. Je kunt niet aantonen wat je hebt voorkomen, en toch doe je het.
Paramant is mijn poging om dat niet alleen mooi te vinden maar te bouwen. Versleutelde producten die vanaf het ontwerp uitgaan van de standaarden die tegen deze dreiging bestand zijn, in plaats van een bestaand product waar het achteraf op wordt geplakt.
De eerlijkheid gebiedt te zeggen dat dit ook makkelijker praten is dan doen. Post-quantum algoritmen hebben grotere sleutels en handtekeningen, ze kosten meer rekenwerk en meer bandbreedte, en dat merk je in een echt product. De verleiding om het toch maar bij het oude te laten is reeel, want het oude werkt vandaag prima.
Dat is exact dezelfde afweging als bij de deurgreep die knerpt en bij de test die zelden iets vindt. Alleen zijn de gevolgen hier niet dat iets goedkoop aanvoelt, maar dat iets over vijftien jaar leesbaar blijkt.
Ik meet meestal wat er misgaat. Dit is de andere kant: hoe het eruitziet als iemand het wel goed doet, en wat dat kost.
Zonder dat tegenvoorbeeld wordt mijn werk een klaagzang. Met dat tegenvoorbeeld wordt het een vergelijking, en pas dan kun je iets zinnigs zeggen over waarom de ene organisatie wel vooruit denkt en de andere niet.
Zesduizend classificaties op Zooniverse, over zeventien projecten
Ik heb ruim 6.000 classificaties gedaan op Zooniverse, verspreid over zeventien projecten: kometen, asteroiden, apengezondheid, plankton, wolken op Mars. Het levert me niets op en het leert me alles over kijken. En het lost onderweg het probleem op waar ooggetuigen aan onderdoor gaan, want hier zijn de waarnemers echt onafhankelijk.
Op Zooniverse zetten onderzoeksgroepen hun ruwe waarnemingen online, zodat vrijwilligers ze kunnen helpen classificeren. Ik doe daaraan mee, inmiddels ruim zesduizend keer, verspreid over zeventien projecten.
Het loopt uiteen. Kometen zoeken in beelden van de Rubin-telescoop. Asteroiden bevestigen in de Catalina Sky Survey. De gezondheid van apen beoordelen op foto's. Wildcamera's in Iowa. Plankton. Haaien. Wolken op Mars. Beelden van overstromingen in Mozambique, waar de classificaties helpen bij het inschatten van schade.
Het levert me niets op. Geen geld, geen publicatie, geen naam onder een artikel. En ik doe het al jaren.
Wat het wel oplevert is oefening in precies de vaardigheid waar mijn eigen werk op drijft: kijken naar ruwe gegevens en beslissen wat je ziet.
Bij elke classificatie doe je hetzelfde als bij een meting. Is dit een echt signaal of een artefact van het instrument. Zie ik hier een object of een stofje op de lens. Is dit dier ziek of staat het gewoon ongelukkig. Is deze structuur betekenisvol of zie ik hem omdat ik hem verwacht.
Dat laatste is de kern. Zesduizend keer moeten beslissen of iets er echt is, traint iets wat je niet uit een boek haalt: het verschil voelen tussen waarnemen en invullen. Ik denk oprecht dat mijn privacyonderzoek er beter van wordt.
Hier zit het punt dat me het meest bezighoudt, en het verbindt deze notitie met de rest van dit manuscript.
Elders schrijf ik dat overeenstemming tussen getuigen geen bewijs is, omdat ze aan dezelfde vertekening blootstonden of van elkaar hoorden wat ze moesten zien. Bij crowd-classificatie is de opzet precies zo gebouwd dat dat niet kan.
Ieder object wordt door meerdere mensen los van elkaar beoordeeld. Je ziet niet wat een ander heeft geantwoord. Je weet niet wie er nog meer naar kijkt. Je krijgt geen terugkoppeling die je volgende oordeel kleurt. Pas achteraf legt het systeem de antwoorden naast elkaar en kijkt waar ze samenvallen.
Dat is het verschil tussen echte en schijnbare onafhankelijkheid. Tien getuigen in een zaak zijn vaak één waarneming die tien keer is doorverteld. Tien classificaties van hetzelfde beeld zijn tien metingen.
En daar zit meteen de les voor mijn eigen vak. Twee scanners die dezelfde vendorlijst gebruiken, bevestigen elkaar niet. Twee onderzoekers die elkaars rapport hebben gelezen, ook niet. Onafhankelijkheid is geen houding maar een eigenschap van de opzet, en je moet haar afdwingen voordat je meet.
Er zit nog een laag in die past bij wat ik elders schrijf over werk zonder verdienmodel.
Deze projecten draaien op mensen die niets terugkrijgen. Bij elkaar hebben vrijwilligers daar inmiddels meer dan een miljard classificaties gedaan, en er zijn echte ontdekkingen uit voortgekomen die zonder die massa niet waren gevonden.
Dat is geen liefdadigheid van de deelnemers en geen uitbuiting door de onderzoekers. Het is een ruil die niet in geld loopt: zij krijgen doorzoekbaarheid op een schaal die ze nooit kunnen betalen, en wij krijgen toegang tot echt onderzoek en het gevoel dat ons kijken ergens toe leidt.
Ik denk dat dit dichter bij de kern van wetenschap staat dan veel van wat er beroepsmatig gebeurt. Niemand doet dit voor een publicatiescore.
Mensen schrijven me dat ik blijkbaar niet geshadowbanned ben, of vragen waarom hun reactie onder mijn bericht meer mensen bereikt dan hun eigen bericht. Dat laatste weerlegt precies wat ze beweren: zelfde account, zelfde dag, ander resultaat. Een onzichtbare straf die alles verklaart, verklaart niets, en zolang je haar gelooft toets je je eigen methode nooit.
Sinds mijn berichten bereik krijgen, komen er met enige regelmaat vragen binnen. Of ik iets wil delen, want bij mij komt het wel aan. Of de constatering dat ik blijkbaar niet geshadowbanned ben, in tegenstelling tot de afzender. Vaak met een schermafbeelding van een teleurstellende weergaventeller erbij.
En af en toe de vraag die het interessantst is: hoe kan het dat mijn reactie onder jouw bericht meer mensen bereikt dan wat ik op mijn eigen pagina plaats?
Die vraag bevat zijn eigen antwoord, alleen niet het antwoord dat de vraagsteller zoekt. Ik schrijf dit stuk omdat ik die uitleg inmiddels vaker heb getypt dan me lief is, en omdat de denkfout eronder een stuk groter is dan LinkedIn. Ik kom hem elke week tegen in mijn eigen onderzoekswerk, alleen daar heet hij anders.
De vraagsteller heeft zijn eigen controlegroep al gedraaid¶
Denk even door wat daar gebeurt.
Zelfde account. Zelfde persoon. Vaak dezelfde dag, soms hetzelfde uur. Op de ene plek bereikt de tekst honderden mensen, op de andere plek bijna niemand.
De bewering "mijn account is stilgezet" doet een voorspelling. Als er een rem op het account zit, dan geldt die rem overal waar dat account tekst produceert. Een straf die aan de persoon hangt, kan niet netjes uitgaan zodra diezelfde persoon onder andermans bericht typt. De voorspelling is dus: laag bereik op de eigen pagina, en ook laag bereik in de reacties.
De waarneming is anders. Wat verschilt tussen de twee gevallen, is de plek en de tekst. Het account is in beide gevallen hetzelfde. Daarmee heeft de vraagsteller zonder het te merken de controlegroep uitgevoerd die zijn eigen verklaring onderuithaalt.
Bewijsniveau: dit is afgeleid, niet gemeten. Ik heb geen inzage in de weergavecijfers van andermans account en ik heb geen toegang tot de rangschikkingslogica van het platform. Ik redeneer uitsluitend op de waarneming die de vraagsteller mij zelf aanreikt. Dat is genoeg om de aangedragen verklaring te verwerpen, en te weinig om te zeggen wat er dan wél gebeurt. Dat onderscheid is belangrijk, want de meeste mensen slaan het over.
Er is één uitweg, en die is eerlijk om te noemen. Iemand kan zeggen: de beperking geldt per oppervlak, alleen mijn eigen berichten worden gedempt en mijn reacties niet. Dat is een andere bewering dan de oorspronkelijke. Ze is scherper, ze voorspelt meer, en ze is daarmee beter. Maar wie haar doet, moet ook aanvaarden dat ze te toetsen is, en dat de eerste toets bestaat uit dezelfde tekst op beide plekken zetten en kijken wat er gebeurt. In de praktijk stopt het gesprek precies op dat punt.
Waarom een onzichtbare straf zo'n prettige verklaring is¶
Ik wil niet flauw doen, want ik snap precies waarom mensen dit denken.
Een onzichtbare straf verklaart alles. Weinig bereik: geshadowbanned. Ineens wel bereik: de rem is er even af. Nooit reactie op een bepaald onderwerp: dat wordt onderdrukt. Veel reactie op dat onderwerp: dan viel het deze keer door de mazen. Er is geen waarneming denkbaar die de verklaring in de weg zit.
Dat is precies wat haar waardeloos maakt. Een verklaring die met elke mogelijke uitkomst verenigbaar is, sluit niets uit, en wat niets uitsluit voorspelt niets. Popper noemde dat het verschil tussen een theorie en een verhaal. Het is dezelfde structuur als bij een fobie, waar de gevreesde uitkomst zichzelf bevestigt in elke richting: zie Een fobie is zekerheid zonder bewijs.
Er zit ook comfort in. De verklaring legt de oorzaak volledig buiten jezelf. Je tekst is niet het probleem, je onderwerpkeuze is niet het probleem, je timing is niet het probleem. Een onzichtbare partij heeft iets met je gedaan.
En zolang je haar gelooft, is er geen enkele reden om je eigen aanpak te onderzoeken. Daar zit de echte schade. Een foute theorie is te repareren zodra iemand haar toetst. Deze theorie zorgt ervoor dat er nooit getoetst wordt. Ze immuniseert zichzelf tegen de enige informatie die je verder had kunnen helpen.
Het is inmiddels ook geen randverschijnsel meer. Half zakelijk Nederland gebruikt deze verklaring, op LinkedIn en over LinkedIn. Er is een gedeelde overtuiging ontstaan dat er iets met je account aan de hand is, precies op het moment dat een veel eenvoudiger verklaring voorhanden is: iedereen plaatst tegelijk meer, en de hoeveelheid aandacht groeit niet mee. Meer aanbod bij gelijkblijvende vraag geeft per stuk minder bereik, zonder dat er iemand hoeft in te grijpen. Bewijsniveau: vermoed. Ik heb het aanbodvolume van het platform niet gemeten en ik ken de cijfers niet.
Dat maakt het een besmetting van hetzelfde type als klagen, zie Klagen plant zich voort als een besmetting. Je hoort het van anderen, het verklaart jouw ervaring, je geeft het door, en op een gegeven moment is het gewoon wat men weet. Niemand heeft het ooit nagerekend, en dat hoeft ook niet, want iedereen zegt het.
Als ik de berichten bekijk van mensen die mij dit vragen, zie ik doorgaans hetzelfde.
Er staat een link in de post, waardoor het platform geen enkele reden heeft om de lezer op het platform te houden.
Er zijn mensen getagd die niets met de inhoud te maken hebben.
De eerste twee regels geven geen enkele reden om te stoppen met scrollen.
Er staat een keurige portretfoto bij die niets toevoegt.
En het vaakst: er staat niets in wat de lezer verder helpt, hoe oprecht het ook is bedoeld.
Bewijsniveau: vermoed. Dit is mijn indruk uit wat mensen mij toesturen, ik heb het niet geteld en er zit een duidelijke selectie in, want ik zie alleen de berichten van mensen die zich al zorgen maken.
Wat deze punten gemeen hebben, is dat je er allemaal iets aan kunt doen. Vanavond nog, zonder toestemming van wie dan ook. Precies daarom is de shadowban-verklaring zo schadelijk: ze houdt de aandacht weg bij de enige factoren waar je invloed op hebt. Hoe ik zelf met die factoren omga zonder mezelf te verkopen, staat in Hoe ik het algoritme bespeel zonder mezelf te verkopen.
Ik ben geen fan van adviezen zonder procedure, dus hier is de procedure. Ze is saai en dat hoort zo.
1. Neem één tekst die het op je eigen pagina slecht deed. Niet een nieuwe, want dan meet je twee dingen tegelijk.
2. Plaats de kern ervan als reactie onder een bericht van iemand anders over hetzelfde onderwerp. Zelfde dag, zelfde tijdvak.
3. Noteer de weergaven van beide na 48 uur.
4. Herhaal dit vijf keer met vijf verschillende teksten, zodat één toevalstreffer je niet stuurt.
5. Kijk of het patroon standhoudt.
Loopt het bereik van je reacties structureel ver boven dat van je eigen berichten, dan zit de beperking niet op je account. Blijft alles laag, ook in de reacties, dan heb je voor het eerst een waarneming die de accountverklaring ondersteunt. Op dat moment heeft het ook zin om de route van artikel 17 DSA te bewandelen en om een motivering te vragen.
Het rekenwerk is triviaal, maar het is nuttig om het op te schrijven in plaats van op gevoel te oordelen.
from statistics import median
# Vul je eigen weergaven in. Geen schattingen, aflezen wat er staat.
eigen_berichten = [120, 85, 210, 96, 140]
eigen_reacties = [980, 1400, 760, 2200, 1100]
m_post = median(eigen_berichten)
m_reac = median(eigen_reacties)
print(f"mediaan eigen bericht : {m_post:.0f}")
print(f"mediaan eigen reactie : {m_reac:.0f}")
print(f"verhouding : {m_reac / m_post:.1f}x")
if m_reac > 3 * m_post:
print("Zelfde account, veel meer bereik. Een rem op het account "
"verklaart dit verschil niet.")
else:
print("Geen duidelijk verschil. Nu is er iets te onderzoeken.")
De getallen in dit voorbeeld zijn verzonnen om de code te laten draaien. Ze zeggen niets over wat jij zult meten. Dat is nu juist het punt: je moet je eigen cijfers invullen. Het schrijven van een klein scriptje voor je eigen vraag is een vaardigheid die zich onmiddellijk terugbetaalt, zie Bekwaamheid blijkt uit wat je met de stof kunt maken.
Dit patroon is de kern van bijna alles wat ik onderzoek. Het is een van de weinige keren dat ik het bij individuele mensen zie, want meestal tref ik het aan bij organisaties.
De vorm is telkens dezelfde. Er is een onbewezen aanname over hoe iets werkt. Er wordt een strategie op gebouwd. Het resultaat blijft uit. En dan volgt er een aanvullende aanname die verklaart waarom het resultaat uitblijft. De oorspronkelijke aanname blijft ongemoeid staan. Bij elke ronde wordt het bouwwerk groter en de kans dat iemand het fundament nog aanraakt kleiner.
Precies hetzelfde gebeurt bij een organisatie die volhoudt dat haar toestemmingsvenster deugt terwijl het aantal partners in dat venster niet klopt met wat er werkelijk gebeurt, zie De cookiemuur toont minder partners dan de code telt. Of bij een maatregel die wordt verlengd omdat het effect vast nog komt. Of bij een organisatie die op één mislukte meting concludeert dat haar app schoon is, zie Een mislukte meting is geen schone app. De onbewijsbare verklaring beschermt het uitgangspunt tegen de werkelijkheid.
Het tegengif is telkens hetzelfde en het is niet spannend. Formuleer je verklaring zo dat ze iets uitsluit. Zoek daarna de waarneming die haar zou weerleggen als ze onjuist was. Ga die waarneming halen, ook als je liever gelijk had. En zet er een bewijsniveau bij, zodat je later terug kunt zien hoe hard iets was: Label elke bevinding op bewijsniveau.
Bij shadowbanning is die waarneming ongewoon makkelijk te krijgen. Kijk of dezelfde tekst het elders wel doet. Het kost tien minuten en één avond geduld. Bijna niemand doet het, en dat is niet omdat het moeilijk is.
Hoe ik het algoritme bespeel zonder mezelf te verkopen
Ik weet redelijk goed hoe je op LinkedIn bereik krijgt: scrollstoppende eerste regels, een beeld dat kort verwarring wekt, geen links, geen tags, en publiceren op het moment dat jij zelf kijkt. De enige regel die telt staat in het midden: verandert de verpakking mijn boodschap? Dan terug naar de tekentafel.
Voor alle techniek komt een toets van één regel, en die is genadeloos.
Strijkt dit alleen mijn ego, of heeft de samenleving er iets aan?
Als het antwoord het eerste is, plaats je het niet. De reden daarvoor is praktisch. Zelfverheerlijking werkt slecht, en ze voegt iets toe aan de berg waar iedereen doorheen scrollt. Verreweg de meeste berichten die ik langs zie komen zijn eigenwijs, zelfverheerlijkend en gaan over iets waar niemand op zat te wachten. Aan techniek ontbreekt het die berichten zelden. Ze geven een verkeerd antwoord op de eerste vraag.
Het ongemakkelijke is dat je die vraag alleen eerlijk kunt beantwoorden als je hem stelt voordat je verliefd wordt op je eigen tekst. Daarna vind je altijd wel een redenering waarom de wereld dit toch echt moet lezen. De volgorde is dus zelf al een instrument. Wie de toets pas doet als het stuk af is, doet hem niet meer.
Ik heb daar ook een eigenbelang bij. Alles wat ik plaats en niets oplevert voor de lezer, kost mij krediet bij de mensen wier oordeel ik wil kunnen gebruiken. Dat krediet is het enige kapitaal dat ik in dit werk heb. Waarom mensen naar mij luisteren, heeft daar alles mee te maken, en dat vraagstuk werk ik apart uit in Waarom luisteren mensen naar mij?.
De volgorde is de rest van het verhaal. Vrijwel iedereen die over bereik nadenkt, begint bij het bereik. Ik begin bij de vraag of er iets te vertellen valt.
Wat wil ik zeggen, en heeft iemand daar wat aan? Als het antwoord op dat tweede nee is, is de rest van deze notitie niet van toepassing, want dan is er niets om te verspreiden. Techniek op een lege boodschap loslaten levert een goed verpakte lege boodschap op.
Stel dat je merkt dat je je beter voelt sinds je bananen eet en dat wilt delen. Prima. Schrijf dan eerst het persoonlijke stuk uit: wat merkte je, hoe lang, wat viel je op, wat veranderde er verder in diezelfde periode. Dat is de kern, en die moet af zijn voordat er ook maar iets over verpakking wordt bedacht.
Deze volgorde heeft nog een prettig neveneffect. Als de kern af is voordat je aan de vorm begint, kun je later controleren of de vorm de kern heeft aangetast. Zonder die eerste versie heb je geen ijkpunt en merk je de verschuiving niet.
Nu komt de stap die bijna niemand doet en die ik de belangrijkste vind.
Zoek uit welke feiten jouw verhaal ondersteunen, en welke het onderuithalen. Allebei. Het doel daarvan is niet defensief. Zonder die stap stuur je iets de wereld in waarvan je zelf niet weet of het klopt, en dat is een grotere fout dan slecht presteren op een tijdlijn.
Bij het bananenvoorbeeld betekent dat: zoek wat er bekend is over kalium, over magnesium, over bloedsuiker. Zoek ook wat daar tegenin gaat, en zoek vooral de saaie verklaring. Je bent misschien in dezelfde week beter gaan slapen. Je hebt het effect zelf verwacht, en verwachting is een werkzame kracht. Wie zijn eigen ervaring als bewijs opvoert, is een overtuigde getuige, en waarom dat een zwakke bron is beschrijf ik in Een overtuigde getuige is geen betrouwbare meting.
Dit is precies mijn werkregel uit het onderzoek, toegepast op communicatie. Beargumenteer eerst het tegendeel. Als je verhaal die toets niet doorstaat, heb je een probleem dat geen enkele vormgeving oplost. En als het de toets wel doorstaat, sta je op de tijdlijn ineens heel stevig, omdat de eerste drie tegenwerpingen in de reacties al in je hoofd zijn geweest. Dezelfde trechter van vermoeden naar bevinding gebruik ik in mijn technische werk, zie Mijn werkwijze: van vermoeden naar bevinding en Label elke bevinding op bewijsniveau.
Pas hier begint de techniek, en er zit weinig geheimzinnigs aan.
De eerste drie regels moeten iemand laten stoppen met scrollen. Dat is de ruimte die je krijgt voordat de tekst wordt afgekapt en voordat er wordt doorgeveegd. Alles wat daarin staat moet werk verzetten. Een aanloop, een begroeting of een aankondiging van wat je gaat vertellen is verspilde ruimte.
Het beeld moet hetzelfde doen. De werkzame eigenschap is onverwachtheid, en die is iets anders dan schokkendheid. Vraag jezelf af wat je bij dit onderwerp nooit op een tijdlijn ziet. Een banaan op een bureaublad tussen kantoorspullen, of tussen dure sieraden. Een korte wat gebeurt hier, meer niet.
Geen links in de post. Een link stuurt de lezer weg van het platform, en platforms hebben geen belang bij vertrek. Ik houd het erop dat links het bereik drukken. Bewijsniveau: afgeleid.
Niemand taggen. Een tag stuurt een melding naar iemand die er niet om vroeg. Het leest als bedelen om aandacht en het werkt naar mijn waarneming averechts.
Geen scherpe termen die de filters activeren, terwijl de inhoud wel scherp blijft. Dit is de moeilijkste van de zes en het is een schrijfoefening. Hard zijn zonder woorden te gebruiken die een machine markeert. Het dwingt je bovendien tot beschrijven waar je anders zou etiketteren, en een beschrijving is beter te controleren dan een etiket.
Timing: wanneer kijk jij zelf? Dan kijken de mensen zoals jij ook. Voor een publiek dat je zelf hebt opgebouwd is dat een betere gids dan elk algemeen advies over posttijden, want dat advies is gemiddeld over publieken die niets met het jouwe te maken hebben.
De onderliggende gedachte achter dit rijtje is simpel. Een tijdlijn rangschikt op verwachte reactie. Alles wat de lezer wegleidt, vertraagt of irriteert verlaagt die verwachte reactie. Meer dan dat weet ik er ook niet van, en dat is meteen de eerlijke grens van dit stuk.
Een aparte regel, want die gaat in tegen vrijwel alles wat er wordt aangeraden.
Gebruik niet steeds je eigen gezicht, en zeker geen gelikte professionele foto's. Mensen gunnen elkaar de glans niet. Een goed verzorgd portret bij een verhaal over jezelf roept eerder weerstand op dan sympathie. Wie op zo'n foto kijkt, beoordeelt eerst de persoon en pas daarna het punt.
Als je jezelf al toont, mag het lelijk zijn. Liever nog helemaal niet. Het onderwerp hoort in beeld te staan. De verteller kan eronder blijven.
Dit heeft ook een tweede kant die verder gaat dan bereik. Elke foto die je plaatst is materiaal, en materiaal blijft. Wat er allemaal uit een reeks gezichtsopnames te halen valt, en hoe achteloos we die zelf aanleveren, staat in Anne Frank en koningin Elizabeth waren tijdgenoten. Het weglaten van je gezicht is dus twee dingen tegelijk, en dat is een prettige samenloop.
Lees je post terug en vraag: staat er nog steeds wat ik wilde zeggen? Of ben ik inmiddels een algoritme aan het bedienen en is de boodschap onderweg opgeschoven?
Als dat laatste zo is, ga je terug naar de tekentafel. Bijschaven volstaat niet, want de verschuiving zit meestal in de kern en niet in een zin. Praktisch doe ik dat zo. Ik leg de eerste versie uit stap twee naast de gepolijste versie en kijk waar een bewering harder is geworden, waar een slag om de arm is verdwenen en waar een woord is gekozen omdat het lekker leest. Elk van die drie is een teken dat de vorm de inhoud is gaan sturen.
Dat klinkt streng en het is de enige reden dat ik dit met droge ogen kan opschrijven. Alle trucs hierboven gaan over verpakking. Op het moment dat ze de inhoud gaan sturen, ben ik precies geworden wat ik elders in dit manuscript beschrijf: iemand die optimaliseert op het meetbare en de rest laat vallen.
Ik moet eerlijk zijn dat deze notitie op gespannen voet staat met de rest van mijn werk.
Ik beschrijf elders hoe platforms belonen wat reactie oplevert, terwijl waarheid in die weging niet meetelt, en hoe klaaggedrag zich daardoor voortplant. En hier leg ik uit hoe je dat systeem effectief bespeelt.
Mijn rechtvaardiging is dat een meting die niemand leest niets verandert. De werkelijke keuze gaat over twee uitkomsten voor hetzelfde goed onderbouwde verhaal: gezien worden, of verdwijnen in de leegte terwijl de slechte verhalen wel bereik krijgen. Ik kies de eerste. Dat is dezelfde afweging als in Apple, Google en Meta verdienen aan tracking binnen de wet: gelijk hebben verandert niets zolang het gelijk nergens landt. Wie tussen kennis en publiek in staat heeft dat probleem altijd, zie Eén journalist staat tussen belangrijke kennis en achttien miljoen mensen.
Maar ik houd de grens scherp, en die ligt bij de inhoud. De verpakking mag naar het platform luisteren. Het argument nooit.
Tot slot het bewijsniveau, want ik zou mezelf niet serieus nemen als ik dat oversloeg.
Ik heb geen inzage in de rangschikking van welk platform dan ook. Ik heb geen A/B-test gedaan met identieke inhoud en verschillende verpakking. Wat ik heb is een patroon over mijn eigen berichten en over de berichten die mensen mij toesturen met de vraag waarom ze niet aankomen. Dat is een waarneming van één deelnemer, in één netwerk, in één taal, over één type onderwerp. Bewijsniveau: afgeleid, op sommige punten vermoed.
Ik ben ook precies de getuige die ik in mijn eigen werk zou wantrouwen. Ik heb belang bij de conclusie dat mijn methode werkt. De alternatieve verklaring dat mijn onderwerp toevallig aansluit bij wat er speelt, kan ik niet uitsluiten, en die werk ik uit in Waarom krijgen mijn stukken zoveel tractie?.
Wat ik wel hard kan maken is de andere kant van dezelfde munt. Wie zijn tegenvallende bereik toeschrijft aan een onzichtbare straf, heeft een verklaring die met elke uitkomst verenigbaar is en daarom niets voorspelt. Daarover gaat Shadowban is een verklaring die niets verklaart, en het punt van deze notitie is de tegenhanger ervan: de factoren hierboven zijn de enige waar je zelf aan kunt draaien.
En dan het laatste, dat losstaat van alle techniek. Bouw je netwerk met mensen van wie je kunt leren en die iets aan jou hebben. Niet iedereen toevoegen die beweegt. Een groot getal onder mensen die je werk toch niet gebruiken, is een groot getal. Bereik onder de verkeerde mensen is geen bereik.
Sinds mijn naam in de krant staat, luisteren mensen die mijn werk nooit lazen
Sinds mijn naam in kranten staat, ben ik opeens interessant voor mensen die me daarvoor niet zagen. Ik doe precies hetzelfde werk, op dezelfde manier, met hetzelfde resultaat. Wat erbij kwam is geen kwaliteit maar een signaal dat anderen kunnen aflezen zonder mijn werk te hoeven beoordelen.
Je naam in een krant zien is vreemder dan ik had verwacht. Niet omdat het onaangenaam is, maar omdat er daarna iets verschuift in hoe mensen op je reageren.
Deuren die dicht zaten gaan open. Mensen die niet terugschreven, schrijven terug. Sommigen worden opeens hartelijk. En het ongemakkelijke is dat ik precies dezelfde persoon ben die dezelfde metingen doet op dezelfde manier. Het werk is niet beter geworden op de dag dat er iets over werd geschreven.
Er is geen kwaliteit bijgekomen. Er is een signaal bijgekomen.
De meeste mensen kunnen niet beoordelen of een privacyonderzoek deugt. Daarvoor moet je netwerkverkeer kunnen lezen, weten wat een identifier is, en kunnen inschatten of een conclusie de meting draagt. Dat kost uren en het vereist kennis die vrijwel niemand heeft.
Wat mensen wel kunnen: kijken of een ander ze al serieus heeft genomen. Een artikel, een naam bij een medium, een citaat. Dat is in één seconde af te lezen en het vergt geen enkele inhoudelijke kennis.
Dus wordt daarop beoordeeld. Niet uit luiheid, maar omdat het het enige signaal is dat binnen bereik ligt.
Zodra ik het zo formuleer, herken ik het en is het ongemak grotendeels weg.
Ik betoog elders dat een markt concurreert op wat te beoordelen valt vóór de aankoop, en dat kwaliteit die pas later blijkt daarom sneuvelt. Dat de vinkjeszetter overtuigt omdat zijn signaal leesbaar is, terwijl het vermogen van de vakman dat niet is. Dat we bevoegdheid meten omdat papier telbaar is en bekwaamheid niet.
Dit is precies hetzelfde, nu toegepast op mij. Mijn werk is de onmeetbare kant, mijn naam in een krant is de meetbare kant, en mensen doen wat iedereen doet: ze gebruiken wat af te lezen is.
Ik kan daar moeilijk verontwaardigd over zijn, want ik beschrijf al honderd notities lang dat mensen zo werken.
Er hoort bij dat ik hiervan profiteer en dat ik het bewust gebruik.
Ik zoek media-aandacht als dat nodig is, en niet uit ijdelheid. Een meting verandert niets. Een meting waar over geschreven wordt, leidt tot Kamervragen, en dan gaat er soms daadwerkelijk een tracker uit. Dat signaal is een hefboom en ik zou dom zijn hem te laten liggen.
Het is dus geen zuiver systeem dat mij onrecht doet. Het is een systeem waar ik gebruik van maak op de momenten dat het mij uitkomt, en waar ik me over verwonder op de momenten dat het mij ineens zichtbaar maakt voor mensen die mijn werk niet kennen.
Het eerste: de aandacht zegt niets over de kwaliteit van het werk. Op de dagen dat niemand belt, is het werk niet slechter, en op de dagen dat iedereen belt niet beter. Als ik dat verwar, laat ik iets anders dan de meting bepalen wat ik ga onderzoeken.
Het tweede: als een signaal zo makkelijk werkt bij mij, werkt het net zo makkelijk bij iemand die het niet verdient. Iemand met een artikel achter zich krijgt dezelfde deuren open, ook als het werk niet deugt. Dat is precies waarom ik alles narekenbaar maak. Het is het enige tegengif tegen het feit dat mensen mij op mijn signaal beoordelen: zorgen dat er onder dat signaal iets ligt dat iedereen zelf kan controleren.
Randall Munroe verliet NASA en geeft xkcd gratis weg
Randall Munroe verliet NASA om stripjes te tekenen, geeft xkcd gratis weg en beantwoordt in What If? absurde vragen met echte natuurkunde. Niemand vroeg erom, geen bedrijf verdient eraan, en juist daarom is het zo goed. Zodra iets moet renderen, wordt van bovenaf bepaald hoe diep het mag gaan en hoe het mag klinken.
Randall Munroe werkte als roboticus bij NASA. Hij stopte daarmee om online stripjes te tekenen van poppetjes met stokjes voor armen.
Dat is xkcd, sinds 2005. Wiskunde, natuurkunde, programmeren, relaties en existentiële twijfel, in vier hokjes. Het staat gratis op internet, er zit geen reclame op de site, en het werk is vrijgegeven onder een Creative Commons-licentie die kopiëren en hergebruiken toestaat zolang je hem noemt en er zelf niets aan verdient. Zijn inkomen komt uit boeken en spullen. Uit de aandacht van de lezer komt het niet.
Dat onderscheid oogt klein en werkt diep door. Een site die van aandacht leeft, moet weten hoe lang je blijft, waar je vandaan komt en wat je daarna doet. Die meetbehoefte is de wortel van bijna alles wat ik in de rest van dit manuscript uit elkaar haal, tot en met de veilingen waarin je toestel wordt aangeboden Achter de betaalmuur van nieuwssites staan de trackers gewoon aan. Een site die alleen bestaat omdat iemand hem wilde maken, heeft die behoefte nooit gehad. Er valt niets te optimaliseren, want er is geen opbrengst om naar toe te optimaliseren.
Daarnaast schrijft Munroe What If?, begonnen als rubriek naast de strips en later uitgegroeid tot boeken. Hij beantwoordt daarin vragen die niemand serieus stelt. Wat gebeurt er als je een honkbal met bijna de lichtsnelheid gooit. Hoeveel kracht kost het als alle mensen tegelijk springen. Wat als de zon uitgaat. De vraag klinkt als een grap, de uitwerking is bloedserieus. Hij rekent het uit met echte natuurkunde en volgt de gevolgen tot waar ze uitkomen, ook als dat het einde van alle leven op aarde is.
Wat er gebeurt als niemand het vooraf hoeft goed te keuren¶
Hier zit de kern, en het is een oncomfortabele gedachte voor iedereen die zijn werk verantwoordt met opbrengst.
Er was geen opdrachtgever die het rendement moest uitleggen. Geen deadline die bepaalde hoe diep hij mocht graven. Geen vergadering waarin iemand vroeg of dit wel bij de kernactiviteiten hoorde. Het enige criterium was of het antwoord klopte en of het de moeite waard was.
Haal die vrijheid weg en er komt iets anders uit. De uitvoering kan onberispelijk blijven, het bedenken wordt smaller. Dat mechanisme is te volgen. Elke fase waarin iemand anders dan de maker een akkoord moet geven, is een fase waarin de vraag verschuift. Bovenaan de trechter staat de vraag wat hier interessant is. Onderaan staat de vraag wat we hiermee kunnen. Dat zijn verschillende vragen en ze leveren verschillend werk op. Wie het akkoord geeft, bepaalt uiteindelijk wat er gemaakt wordt De maker en de aandeelhouder willen niet hetzelfde.
Ik zeg er meteen bij op welk niveau deze bewering staat. Dit is een observatie, afgeleid uit voorbeelden die ik zelf heb gezien en gelezen. Ik heb geen dataset van goedgekeurd werk naast ongoedgekeurd werk, en zo'n dataset zou ook moeilijk te maken zijn, want de goedgekeurde versie van een ongoedgekeurd project bestaat per definitie niet. Wat ik wel heb, is dat het patroon in dit manuscript telkens dezelfde kant op wijst en dat de tegenvoorbeelden die ik ken zich laten verklaren. Verderop doe ik dat. Label elke bevinding op bewijsniveau
Het raakt de diepte en het raakt de toon. Binnen een organisatie schrijf je met een merkstem, langs de juridische afdeling, in een register dat niemand voor het hoofd stoot. Elke scherpe formulering wordt afgerond, elk oordeel krijgt een voorbehoud, elke zin die iemand zou kunnen ergeren verdwijnt in een tussenvorm waar niemand iets van vindt. Los daarvan schrijf je als jezelf. Dat is wat ik bedoel met een stem vinden: je houdt op namens iemand anders te praten. Harder praten heeft er niets mee te maken.
Munroe heeft dat register-effect zelf tot een oefening gemaakt. In Thing Explainer legt hij ingewikkelde dingen uit, een ruimteraket, een kerncentrale, de menselijke romp, met alleen de duizend meest gebruikte Engelse woorden. Dat is een zelfopgelegde beperking die het werk moeilijker maakt en de lezer helpt. In veel organisaties doet jargon dubbel werk: het benoemt iets, en het laat zien dat de schrijver erbij hoort. Een tekst zonder jargon geeft dat tweede op. Dat is precies de reden dat zulke teksten zeldzaam zijn op plekken waar iemand de tekst moet aftekenen.
Er is één strip die ik vaak aanhaal, nummer 1053, Ten Thousand. Hij verwoordt precies wat ik zelf probeer.
De gedachte erin is dat er elke dag opnieuw duizenden mensen zijn die iets algemeen bekends voor het eerst horen. Wie dan neerbuigend doet over die onwetendheid, verpest iemands eerste kennismaking met iets moois. Wie het uitlegt, geeft die kennismaking cadeau.
Het getal is een schatting, en het aardige is dat je hem zelf kunt narekenen. Neem een bevolking, verdeel de momenten waarop iemand iets voor het eerst hoort gelijkmatig over een mensenleven, en kijk wat er per dag overblijft:
bevolking = 336_000_000 # Verenigde Staten, ronde orde van grootte
levensduur = 78 * 365 # dagen in een mensenleven
print(round(bevolking / levensduur)) # ongeveer 11.800 per dag
Voor Nederland levert dezelfde som ruim zeshonderd mensen per dag op. Dit is afgeleid, met opzettelijk grove aannames: iedereen hoort het precies één keer, gelijkmatig verspreid over de jaren, en niemand valt tussentijds af. De uitkomst is een orde van grootte, verder reikt de betrouwbaarheid niet. Die orde is genoeg om het punt te dragen. Voor elk ding dat iedereen zogenaamd weet, zit er vandaag een zaal vol mensen die het voor het eerst hoort.
Dat staat vrijwel letterlijk in mijn eigen belofte: uitleggen zonder te denigreren, zonder mysterieuze terminologie, zodat het niet bij twee procent blijft. Het idee had ik al voor ik hem las. Hij heeft het scherper geformuleerd dan ik het ooit had gekund.
En er is nog een laag omheen gegroeid die het punt afmaakt. Er bestaat een wiki, explain xkcd, waar vrijwilligers elke strip uitleggen: de grap, de natuurkunde eronder, de verwijzing die je gemist hebt. Ik gebruik hem zelf regelmatig, want ik snap ze lang niet allemaal meteen.
Daar staat dus een hele gemeenschap die onbetaald een toegankelijkheidslaag om andermans werk heen bouwt. Dat is het tegenovergestelde van wat er meestal gebeurt als iemand iets niet begrijpt. De gebruikelijke reactie op onwetendheid is hoon. Hier is de reactie een lemma.
Dit is dezelfde wet, van de andere kant gelezen. Waar geen verdienmodel is, ontbreekt ook de prikkel om op de diepte te bezuinigen. Wat overblijft is iemand die iets uitzoekt omdat hij het wil weten, en dat levert werk op dat een bedrijf niet had laten maken.
Dat verklaart waarom zoveel van wat mij gevormd heeft uit die hoek komt. Vsauce werd gemaakt zonder dat er een product achter zat. Vrije software wordt gemaakt door mensen die de rekening zelf dragen. Wetenschappelijk werk dat niets oplevert behalve inzicht, verkoopt niets. En al die dingen zijn stelselmatig grondiger dan wat er met een businesscase naast wordt gemaakt.
Het gaat daarbij zelden om budget. De HAR-analyses waar mijn eigen werk op drijft, kosten een browser en een teksteditor. Wat ontbreekt aan de commerciële kant is de rust om door te vragen nadat het antwoord al goed genoeg was voor het doel waarvoor het gevraagd werd.
Dit is ook de eerlijkste verklaring voor wat ik zelf doe.
Mijn metingen leveren niets op. Er is geen klant, geen factuur, en geen bedrijf dat er beter van wordt. Dat is precies waarom ik kan schrijven wat er staat, ook als het ongemakkelijk is voor een partij die ik anders als opdrachtgever zou willen houden. Het verklaart ook waarom er zo weinig anderen zijn die dit doen: het werk is er wel, de rekening ervoor is er niet Waarom ben ik de enige die dit doet?.
Het geldt breder dan de metingen. Ik classificeer al jaren beelden voor onderzoeksgroepen zonder dat daar geld, publicatie of naamsvermelding tegenover staat, en het is precies de oefening in de vaardigheid waar mijn eigen werk op drijft: naar ruwe gegevens kijken en beslissen wat je ziet Zesduizend classificaties op Zooniverse, over zeventien projecten. Ik heb een routeplanner gebouwd die optimaliseert voor rust in plaats van snelheid, waar geen markt om had gevraagd Windstil: een kaart die de rustigste route zoekt. Geen van beide zou een goedkeuringsronde hebben overleefd, omdat er bij beide geen antwoord is op de vraag wat het oplevert.
De keerzijde moet erbij, anders wordt dit een romantisch verhaal. Werk zonder verdienmodel wordt betaald uit iemands vrije tijd, en dat is een vorm van kapitaal die niet iedereen heeft. Wie twee banen draait of voor een ziek familielid zorgt, heeft die uren simpelweg niet. Wat dit soort werk laat zien, is waar het geld vandaan kwam. Dat het helemaal zonder geld zou kunnen, volgt er niet uit. Bij mij is de bron mijn eigen tijd, en die is eindig.
De vrijheid heeft ook zelf een prijs. Zonder opdrachtgever is er ook niemand die tegenspreekt. Geen redactie die een fout eruit haalt, geen collega die zegt dat je het mis hebt, geen review voor publicatie. Die controle moet ik zelf organiseren, en dat is de reden dat ik bewijsniveaus label en van vermoeden naar bevinding werk in vaste stappen Mijn werkwijze: van vermoeden naar bevinding. De vrijheid om alles te schrijven brengt de plicht mee om alles te kunnen aanwijzen.
Wat overeind blijft is de observatie zelf. Zodra iets moet renderen, wordt van bovenaf bepaald hoe diep het mag gaan en hoe het mag klinken. De dingen die mij het meest hebben geleerd, zijn gemaakt door mensen tegen wie niemand dat had gezegd.
Vsauce begint bij een vraag die een kind zou stellen en eindigt bij natuurkunde, wiskunde of filosofie, zonder onderweg iemand dom te laten voelen. Dat is precies wat ik probeer met een meting. De vraag serieus nemen is het vak, niet het antwoord al kennen.
Deze notitie hoort nergens bij en overal. Nieuwsgierigheid gaat niet over trackers, niet over kwaliteit en niet over de wet. Ze zit onder alle drie.
Daarom staat ze hier als losse notitie en niet als tak. Een tak beantwoordt de vraag waar iets over gaat. Dit beantwoordt de vraag hoe je ergens naar kijkt, en dat hoort thuis op de plek waar alles naartoe wijst in plaats van in een eigen hokje.
Michael Stevens begint een video met een vraag die een kind zou kunnen stellen. Hoe zwaar is het internet. Wat gebeurt er als de aarde stopt met draaien. Waar is de rand van het heelal. Dat zijn geen slimme vragen, het zijn eerlijke vragen.
En dan gaat het uit de bocht, op de goede manier. Om die simpele vraag te beantwoorden blijkt hij natuurkunde nodig te hebben, of wiskunde, of geschiedenis, of een stuk filosofie over wat een vraag eigenlijk is. Twintig minuten later weet je iets wat je nooit had opgezocht, en het is geen moment neerbuigend geweest.
Dat laatste is het vak. Niemand wordt dom gehouden en niemand wordt dom gemaakt.
Mijn onderzoek begint precies zo. Waar gaat dit verzoek naartoe. Wie krijgt dit te zien. Wat gebeurt er als ik weiger. Dat zijn geen briljante vragen, het zijn de vragen die iedereen zou kunnen stellen en die vrijwel niemand stelt.
Het antwoord vergt vervolgens netwerkkennis, wat recht, wat statistiek en soms een stuk economie. Dat is dezelfde beweging: een gewone vraag die je dwingt ergens diep in te gaan.
En de reden dat vrijwel niemand ze stelt, is niet dat mensen dom zijn. Het is dat de vragen te simpel lijken om serieus te nemen. Precies daar zitten de open deuren.
Er is een verschil dat ik moet bewaken, want mijn vak trekt naar de verkeerde kant.
Argwaan begint bij een verwachting: hier zit iets fout, ik ga het vinden. Nieuwsgierigheid begint zonder: ik weet niet wat hier gebeurt, laten we kijken. De eerste vindt wat ze zoekt, ook als het er niet is. De tweede vindt wat er is, ook als het iets anders is dan verwacht.
Bijna al mijn methodische beginselen komen hierop neer. Beargumenteer eerst het tegendeel. Een nulbevinding is ook een bevinding. Overclaim niet. Dat zijn geen regels tegen slordigheid, het zijn regels die de nieuwsgierigheid beschermen tegen de argwaan.
Dezelfde houding herken ik elders, in heel andere vormen. Bij Kafka, die een absurde situatie neerzet en hem daarna volstrekt consequent uitwerkt, tot je begrijpt dat het niet over ongedierte gaat maar over hoe een mens in een systeem staat. Bij Dostojevski en Poesjkin, die een mens niet beoordelen maar volgen tot je hem van binnenuit snapt. Bij de orthodoxe heiligen, waar het niet gaat om gelijk hebben maar om wat een leven werkelijk vraagt. En bij Jordan Peterson, die vragen serieus neemt die anderen te groot of te ongemakkelijk vinden.
Wat die allemaal delen is dat ze bij het begin beginnen en niet bij de conclusie. Ze doen niet alsof het antwoord al vaststaat en de rest een formaliteit is.
Dat is wat ik van ze wil leren, en het is moeilijker dan het klinkt. Wie ergens vijf jaar naar kijkt, denkt op een dag dat hij het antwoord al weet voordat hij heeft gemeten. Dat is het moment waarop het werk waardeloos wordt.
Mijn eerste reactie op nieuwe techniek blijft enthousiasme
Als er een nieuwe feature uitkomt, springt mijn nerd-hart op. Pas een seconde later komt het wacht even. Allebei die reacties zijn echt en ik wil ze allebei houden. Wie alleen de tweede overhoudt, is geen criticus meer maar iemand die moe is, en die overtuigt niemand die het enthousiasme wel voelt.
Er komt een nieuwe mogelijkheid uit, en het eerste wat er in mij gebeurt is oprecht enthousiasme. Mijn IT-hart springt op. Ik wil het meteen proberen, uit elkaar halen, kijken hoe ver het gaat.
Pas een seconde later komt de andere reactie. Wacht even. Waar gaat dit heen, wie betaalt hiervoor, wat is er overgeslagen om dit vandaag al te kunnen laten zien.
Beide reacties zijn echt. Ik doe niet alsof de eerste een zwakte is die ik nog moet afleren. De volgorde is belangrijk. Het enthousiasme komt eerst en de argwaan komt daarna, en ik wil dat zo houden. Wie de volgorde omdraait, kijkt naar nieuwe dingen met de rem er al op, en dat is een slechtere manier om iets te begrijpen. Je ziet dan alleen nog wat er mis kan gaan, en je mist wat er is gemaakt. De eerste seconde geeft me toegang tot het ding zoals de maker het bedoelde, en pas van daaruit kan de tweede seconde iets zinnigs zeggen.
De snelheid waar ik elders bezwaar tegen maak, is dezelfde snelheid die dingen mogelijk maakt die kort geleden ondenkbaar waren. Dat is geen toeval. De wereld spreekt zichzelf hier niet tegen. De tegenspraak zit in mij, en dat is waar hij hoort.
Wie hard doorbouwt, maakt fouten die een voorzichtige organisatie niet maakt. En wie alleen voorzichtig is, bouwt de dingen niet die er nog niet waren. Die twee zitten aan elkaar vast. Je koopt het nieuwe met het risico, en er is geen versie waarin je het nieuwe krijgt zonder het risico erbij. De ingenieurs achter die features doen precies wat ik zelf doe als ik iets bouw: kijken hoe ver het kan, en dan een stap verder. Ik herken de drift, want het is de mijne.
Ik ben verliefd op techniek. Dat is de reden dat ik in dit vak zit en in geen ander. Wie dat kwijtraakt, verliest ook het vermogen om te zien waarom een bouwer een bepaalde keuze mooi vond. Zie AI hoort een versterker te zijn, geen vervanging: de techniek zelf is de versterker waar ik voor ben, en die waardering is het beginpunt van al mijn werk. Zonder haar zou ik een controleur zijn die afvinkt zonder te begrijpen wat hij afvinkt.
Mijn bezwaar draait nooit om de vraag of iets te goed werkt. Het draait om iets anders. De vraag hoe iets werkt, wordt zelden even hard gesteld als de vraag of het werkt. Het eerste is zichtbaar en het tweede blijft binnen. Zie Twintig jaar lang won werkende software van veilige software.
Dat is een smalle klacht en ik wil hem smal houden. Ik vraag niet om minder te bouwen. Ik vraag om de andere kant mee te rekenen, en om iemand die betaald wordt om die te bewaken. De feature is er, hij is indrukwekkend, en de vraag wat er niet is gebouwd omdat het niet indrukwekkend stond, blijft daarnaast gewoon staan. Die twee vragen sluiten elkaar niet uit. Ik kan een ding bewonderen en tegelijk vragen wat het heeft gekost aan aandacht die ergens anders nodig was.
Het smal houden is een principekwestie. Zodra de klacht breed wordt, zodra hij verandert in techniek is eng of vroeger was alles beter, verliest hij zijn waarde. Dan is het een houding geworden en geen bevinding meer. Ik wil per geval kunnen aanwijzen wat er overgeslagen is en wat dat kost, met bewijs erbij. Een brede afkeer van vooruitgang bewijst niets en overtuigt niemand die zelf iets bouwt.
Wie lang genoeg meet wat er misgaat, kan ongemerkt veranderen in iemand die overal alleen nog het probleem ziet. Dat voelt van binnen als scherpte. Meestal is het vermoeidheid. Het maakt je bovendien nutteloos, want je bereikt niemand meer. De mensen die ik zou willen overtuigen, zijn precies de mensen die het enthousiasme wel voelen. Die luisteren niet naar iemand die net doet alsof dat enthousiasme dom is.
Er zit ook een inhoudelijke prijs aan. Wie alleen nog wantrouwt, stopt met vragen waarom een keuze logisch leek voor wie hem maakte. En zonder die vraag mis je de helft van het verhaal. Een bouwer die zich aangevallen voelt, legt niets uit. Een bouwer die merkt dat je zijn werk snapt en waardeert, vertelt je waar het wringt, waar de deadline drukte, welke afweging er onder tijdsdruk sneuvelde. Mijn enthousiasme is dus ook een werktuig. Het houdt de deur open bij de mensen die ik nodig heb om te begrijpen wat er echt gebeurde.
Ik zie het bij anderen in mijn vak, en ik voel de trek ook bij mezelf. Het is comfortabel om cynisch te zijn. Je hebt altijd gelijk, want er gaat altijd wel iets mis, en je hoeft nooit de moeite te doen om iets moois te erkennen. Precies daarom is het een val. Gemak en gelijk tegelijk zijn bijna altijd een teken dat je gestopt bent met kijken.
Er is nog een reden om waakzaam te zijn. Wie het publiek voedt met louter alarm, went dat publiek aan alarm, en gewenning stompt af. Na de tiende waarschuwing hoort niemand de elfde nog, ook niet als die de belangrijkste is. Mijn geloofwaardigheid hangt eraan dat ik durf te zeggen wanneer iets goed is. Alleen dan betekent het nog iets als ik zeg dat iets fout is. Het enthousiasme is in die zin niet alleen prettig voor mij, het is de dekking onder mijn kritiek. Zonder de erkenning van wat werkt, klinkt de aanwijzing van wat kapot is als een stem die altijd nee zegt.
Bijna alles wat ik meet, gebruik ik zelf en vind ik mooi. Ik doorzoek geen apps waar ik op neerkijk. Ik doorzoek de apparaten en diensten die mijn eigen leven beter maken. Juist daarom weet ik welke afweging er bij de bouw is gemaakt en waar de verleiding zat om de makkelijke weg te nemen.
Ik ken die verleiding, want ik voel hem zelf. Wanneer ik iets bouw en er een snelle oplossing is die vandaag werkt en over een jaar iemand opzadelt met de gevolgen, dan weet ik hoe aantrekkelijk die snelle oplossing eruitziet op het moment zelf. Die kennis maakt mijn oordeel scherper, want ik projecteer geen kwade wil waar een begrijpelijke keuze zat. Ik weet dat de meeste slechte uitkomsten voortkomen uit redelijke mensen onder druk, en dat inzicht komt rechtstreeks uit het feit dat ik zelf onder die druk sta.
Als ik het enthousiasme kwijtraak, wordt mijn werk slechter. Dan wordt het feitelijk slechter, los van elke morele weging, want dan mis ik de reden waarom een keuze logisch leek voor wie hem maakte. En zonder die reden begrijp je nooit wat er echt gebeurde. Je houdt een aanklacht over die klopt op de cijfers en die niemand raakt die het gebouwd heeft. Een bevinding die de bouwer niet herkent, verandert niets, hoe correct hij ook is.
Ik hoef mijn eerste reactie dus niet weg te poetsen als een inconsequentie. Ze is de reden dat ik nog begrijp waarom iemand dit zou bouwen, en de reden dat de bouwer zich niet aangevallen hoeft te voelen als ik zijn werk doorlicht.
De kunst is om beide seconden te bewaren en geen van beide te laten winnen. Het enthousiasme zonder de argwaan wordt reclame. De argwaan zonder het enthousiasme wordt gezeur waar niemand naar luistert. De cool en het wacht even horen samen, in die volgorde, en zolang ik ze allebei voel, doe ik dit werk zoals het hoort. Het evenwicht is niet stabiel, ik moet er elke keer opnieuw voor kiezen, en dat is precies waarom ik het opschrijf. Dit stuk is een aantekening aan mijn toekomstige zelf, voor het geval de tweede seconde op een dag de eerste heeft opgegeten.
Dezelfde houding zie ik terug in De Cybertruck is wel echte onbekwaamheid, waar de kritiek pas raakt omdat ze weet wat goed vakwerk is. Wie het mooie niet kan benoemen, kan het lelijke niet overtuigend aanwijzen. De twee reacties zijn samen mijn instrument, en ik pas er goed op dat ik er geen van beide verlies. Als iemand me ooit alleen nog het tweede hoort doen, het eeuwige wacht even zonder de cool ervoor, dan mag hij me dit stuk voorhouden. Dan ben ik iets kwijtgeraakt dat ik nodig heb om dit werk goed te doen.
Films, muziek, software, auto-functies, zelfs de stappenteller in een horloge: steeds meer is een dienst die doorloopt zolang je betaalt en die de verkoper kan intrekken. Dat is een echte verschuiving en ze is te meten. Ze is alleen geen complot, en wie er een complot van maakt, maakt de waarneming onbruikbaar.
Een groeiend deel van wat vroeger bezit was, is nu een dienst. Je koopt geen film maar toegang tot een catalogus die verandert. Geen muziek maar een luisterrecht. Geen software maar een maandbedrag. In auto's zitten functies die fysiek in het toestel zitten en pas werken als je ervoor betaalt. En mijn eigen horloge telt geen stappen meer, niet omdat er iets stuk is, maar omdat de bijbehorende app is ingetrokken.
Dat laatste is het zuiverste geval. Er ging niets kapot. Iemand zette iets uit.
Dit is geen mysterie en er is geen samenzwering voor nodig. Vier voordelen, en ze zijn alle vier saai en zakelijk.
Terugkerende omzet is meer waard dan een eenmalige verkoop, ook als het totaal lager uitvalt. Voorspelbaar geld weegt zwaarder in een waardering.
Er ontstaat geen tweedehandsmarkt. Wie iets bezit, kan het doorverkopen, en die tweede eigenaar is een klant die je kwijt bent. Bij een dienst bestaat dat probleem niet.
De prijs is achteraf aan te passen. Bij bezit staat de prijs vast op het moment van kopen. Bij een abonnement kan hij elk jaar omhoog, en de klant die zijn spullen in het systeem heeft staan, loopt niet weg.
En het kan uit. Dat is geen bijwerking maar een machtsverhouding.
Wat je verliest, en dat staat op geen enkele rekening¶
De prijs van huren is te vergelijken met de prijs van kopen. Wat je daarnaast verliest, is dat niet.
Je kunt het niet doorgeven. Je kunt het niet repareren, want er valt niets te repareren aan iets waar je alleen toegang toe hebt. Je kunt niet weglopen zonder alles achter te laten wat je erin hebt opgebouwd. En je kunt niet rekenen op morgen, want het bestaat alleen zolang de andere partij het aanbiedt.
Dat is precies het gevoel dat mijn inboedel voor mij oplost. Iets bezitten dat langer meegaat dan jij, verandert hoe je ermee omgaat. Alles huren betekent dat je nergens meer voor zorgt, want zorgen voor iets dat niet van jou is en over drie jaar wordt uitgezet, is verspilde moeite.
De formulering dat je niets zult bezitten heeft een geschiedenis, en die moet ik erbij zetten, anders is deze notitie meer waard voor mijn tegenstanders dan voor mij.
Ze komt uit een essay dat in 2016 voor het Wereld Economisch Forum werd geschreven door de Deense politica Ida Auken, als toekomstverkenning over een stad in 2030, uitdrukkelijk bedoeld als discussiestuk en niet als plan. Daarna is de zin losgezongen en een vaste kreet geworden in complotverhalen, waarin hij geldt als bewijs dat een kleine groep dit doelbewust organiseert.
Die lezing klopt niet, en ik heb er ook niets aan. Wat ik beschrijf heeft geen plan nodig. Elke afzonderlijke fabrikant die van verkoop naar abonnement gaat, doet dat om de vier redenen hierboven, in zijn eentje, zonder afstemming met wie dan ook. Dat duizenden bedrijven onafhankelijk dezelfde rekensom maken, verklaart de uitkomst volledig.
Sterker nog: de complotversie werkt in het voordeel van precies de partijen die het doen. Zolang het gesprek gaat over een geheime elite, gaat het niet over abonnementsvoorwaarden, over het recht op reparatie en over wat er met je apparaat gebeurt als de fabrikant stopt. Dat zijn de plekken waar je er echt iets aan kunt veranderen, en ze zijn saai genoeg om ongestoord te blijven bestaan.
Ik gebruik de waarneming dus wel en de kreet niet. Het is te meten dat er wordt verschoven van bezit naar toegang. Het is niet aangetoond, en ook niet nodig, dat iemand dat centraal stuurt.
Vraag voor je koopt wat er met het ding gebeurt als de fabrikant morgen stopt. Loop je bankafschrift langs op terugkerende afschrijvingen en vraag je bij elke af of je hem vandaag opnieuw zou nemen. Kies waar het kan het spul dat blijft werken zonder dat er iemand een server voor overeind houdt. En koop tweedehands, want daar heeft de verschuiving nog niet plaatsgevonden.
Achter de betaalmuur van nieuwssites staan de trackers gewoon aan
Een betaalmuur is op zichzelf te verdedigen, want journalistiek kost geld. Wat ik meet is iets anders: wie betaalt, krijgt de trackers er gewoon bij. Je koopt je uit de reclame en blijft handelswaar. Dat is niet twee keer verdienen aan hetzelfde product, dat is de lezer als product houden nadat hij klant is geworden.
Ik heb niets tegen betalen voor journalistiek. Het kost geld om iemand een halfjaar aan een onderzoek te laten werken. Het alternatief, alles gratis en uit reclame betaald, heeft de afgelopen twintig jaar precies opgeleverd wat je zou verwachten: meer stukken, korter, sneller, en geschreven voor de klik.
Een lezer die betaalt is in theorie het herstel van een gezonde verhouding. Jij bent de klant. De krant werkt voor jou, en niet voor de adverteerder achter je rug. Dat is een goed idee en ik wil het graag zien slagen.
Dit stuk gaat daarom over wat er technisch verandert op het moment dat je die knop indrukt, en over hoe weinig dat blijkt te zijn.
De advertentiekant van een nieuwssite bestaat uit twee dingen die je gemakkelijk voor één ding aanziet.
De eerste laag is de vertoning. Dat is de plek in de pagina waar een banner of een video verschijnt. Die laag is zichtbaar, en die laag is precies wat een abonnement belooft weg te nemen.
De tweede laag is de identificatie en de meting. Daar zitten de identifiers die je browser herkenbaar maken, de pixels die vertonen en klikken tellen, en de aanroepen die je aanwezigheid aanbieden aan de partijen die om je mogen bieden. Die laag draait om weten wie er kijkt. Of er daarna een banner verschijnt, is voor die laag niet doorslaggevend.
In de bouw van een site staan die lagen los van elkaar. De abonneestatus zit in de betaalmuur en in het CMS. De tweede laag hangt meestal in een tag-beheerder of in een advertentiebibliotheek die bij elke pagina start. Iemand moet een expliciete koppeling leggen tussen die twee, met een regel in de trant van "als deze bezoeker betaalt, laad dit script niet". Die koppeling is triviaal om te maken. Ze is ook triviaal om nooit te maken, want zonder die regel werkt de site prima en klaagt niemand.
Welke rol precies welke laag raakt, is de moeite van het uit elkaar houden waard. Een crash-melder is iets anders dan een identity-resolver, ook al noemen we ze allebei tracker. Dat onderscheid werk ik uit in Trackers hebben rollen, en die verwar je niet.
Het loont om de keten uit te schrijven, want daar zit het antwoord op de vraag waarom betalen zo weinig uithaalt.
Als een pagina laadt, gaat er een biedverzoek de deur uit. In de standaard die daarvoor gebruikt wordt, OpenRTB, zit een vast omlijnd pakketje: een identifier voor jou of je browser, het domein en de pagina waar je bent, je grove locatie via het IP-adres, je user agent, en soms afgeleide kenmerken. Dat verzoek gaat naar een uitwisseling, die het doorzet naar de bidders. Iedereen die meedoet ziet het, ook de partijen die niets bieden. Dat mechanisme beschrijf ik in Real-time bidding biedt jouw toestel in een veiling aan, in milliseconden, en de schakels die in verantwoordingsdocumenten meestal ontbreken staan in De advertentieketen heeft schakels die niemand in de verklaring noemt.
Kijk nu naar het OpenRTB-object en zoek het veld waarin staat dat deze bezoeker een betalende abonnee is. Dat veld bestaat niet. De standaard kent objecten voor de gebruiker, het apparaat, de site en de advertentieplek, en in geen daarvan zit een begrip dat overeenkomt met "deze persoon heeft zich vrijgekocht". Hetzelfde geldt voor de toestemmingskant. Het IAB TCF geeft een tekenreeks door waarin per doel en per leverancier uit de Global Vendor List staat wat er is toegestaan. Ook daar bestaat geen abonneeveld.
Dat is een structureel punt en het is controleerbaar zonder één meting: de infrastructuur heeft geen plek om te weten dat jij betaald hebt. De enige manier waarop een abonnement de veiling bereikt, is dat de uitgever de aanroep helemaal niet doet. Gebeurt dat niet, dan gaat het verzoek de deur uit alsof je nooit een cent hebt overgemaakt, en verspreidt het je kenmerken langs alle deelnemers. Wat er vervolgens met die stroom gebeurt is een eigen vraag, want een biedstroom kan een veiling in waar partijen uit heel andere jurisdicties meekijken, zie Een biedstroom kan een veiling ingaan waar buitenlandse partijen op meebieden.
Wie op een Nederlandse nieuwssite een abonnement neemt en inlogt, blijft in veel gevallen de volle tracking-stapel meedragen. De advertentie-identificatie, de meetpixels en de partijen in de veiling verdwijnen niet omdat je betaalt. Je hebt de advertenties weggekocht die je zag. De infrastructuur die je volgt is blijven staan.
De tweede lijst is de interessante. Een usersync of cookie_sync naar een derde partij dient geen enkel doel voor een lezer die geen advertenties krijgt. Die aanroepen bestaan om identifiers van verschillende partijen aan elkaar te knopen, en dat is het mechanisme dat losse waarnemingen tot een dossier smeedt, zie Cookie-sync laat losse partijen dezelfde persoon herkennen.
Wil je weten wie er dan achter zitten, dan is er een papieren spoor dat iedereen kan volgen. Haal https://<uitgever>/ads.txt op. Daarin staat per regel het advertentiesysteem, het publisher-id van de uitgever daar, en of de relatie DIRECT of RESELLER is. Neem vervolgens per genoemd systeem de sellers.json van dat domein en zoek dat id op. Daar staat wie de verkopende partij is en of die als tussenpersoon optreedt. Zo bouw je de bovenkant van de keten uit publieke bestanden op, zonder één aanname.
En dan het bewijsniveau, want zonder dat neem ik mezelf niet serieus. Ik zie verzoeken vertrekken met identifiers erin, en ik zie welke partijen erin voorkomen. Dat is gemeten. Wat er daarna met die data gebeurt, wie hem inziet en hoe lang hij bewaard blijft, zie ik niet. Dat is afgeleid, en op sommige punten vermoed. Die ladder houd ik consequent aan, zie Label elke bevinding op bewijsniveau. Er is nog een reden voor die voorzichtigheid: bij server-side tagging lijkt het op de lijn alsof er maar één, eigen bestemming is, terwijl de doorverdeling buiten mijn zicht plaatsvindt. Afwezigheid van een tracker-domein bewijst daarom niets, zie Server-side tagging verplaatst de tracking uit het zicht.
Wat wel overeind blijft is de kern van dit stuk. Je bent klant geworden en tegelijk handelswaar gebleven. Er is geen stand van de knop waarin je alleen lezer bent.
Hier wordt het juridisch scherper dan het meestal wordt gemaakt.
Het plaatsen en uitlezen van gegevens op je apparaat valt onder artikel 11.7a van de Telecommunicatiewet, en vraagt toestemming zodra het verder gaat dan strikt noodzakelijk voor de gevraagde dienst. Een advertentie-identifier is niet noodzakelijk om een artikel te tonen aan iemand die dat artikel al betaald heeft.
De verwerking daarna heeft een grondslag nodig uit artikel 6 lid 1 AVG. In de praktijk gaat het om onderdeel a, toestemming, of onderdeel f, gerechtvaardigd belang. Beide worden zwakker op het moment dat je betaalt, en dat is de omkering die zelden wordt gemaakt.
Onderdeel f vraagt een afweging tussen het belang van de verwerker en de belangen en grondrechten van de betrokkene. In die afweging wegen de redelijke verwachtingen van de betrokkene mee. Iemand die een abonnement afsluit dat wordt aangeprezen als reclamevrij, heeft een aantoonbaar andere verwachting dan een toevallige bezoeker. De betaling is zelf het bewijs van die verwachting. Daarmee wordt de afweging voor de uitgever moeilijker nadat er geld is overgemaakt, terwijl de praktijk laat zien dat er technisch niets verandert.
Onderdeel a vraagt toestemming die vrij, specifiek, geïnformeerd en ondubbelzinnig is. Artikel 7 lid 4 zegt daarbij dat je moet meewegen of de uitvoering van een overeenkomst afhankelijk is gemaakt van toestemming voor verwerkingen die voor die overeenkomst niet nodig zijn. Een abonnee die eerst moet accepteren voordat hij het artikel kan lezen waarvoor hij al betaalt, zit precies in die situatie. En geïnformeerd is die toestemming alleen als het scherm klopt over wat er gebeurt, wat ik elders juist heb zien afwijken van wat de code declareert, zie De cookiemuur toont minder partners dan de code telt.
Ik ben geen jurist en ik presenteer dit als redenering. Het is wel een redenering die de uitgever moet kunnen weerleggen, en ik heb dat nog nergens zien gebeuren.
Dit is dezelfde beweging als overal in deze tak, alleen sneller zichtbaar.
Eerst is het gratis en goed, want er moeten lezers komen. Dan komt de betaalmuur, met als argument dat de reclame minder wordt. Dan blijft de reclame, of komt ze terug in een andere vorm, en wordt het abonnement duurder. En omdat de lezer inmiddels zijn archief, zijn account en zijn gewoonte in het platform heeft zitten, is weglopen duurder geworden dan blijven.
Dat is de vorm die Doctorow beschrijft voor platforms, toegepast op de krant. Het verschil met een gewone prijsverhoging is dat de tweede opbrengst onzichtbaar blijft. Je ziet wat je betaalt. Je ziet niet wat je afgeeft. Bij dat idee hoort wel een waarschuwing over hoe hard het is: het begrip van Doctorow is scherp en citeerbaar, de bekendste grafiek erbij is een tekening zonder dataset, zie Een curve die getekend is door een taalmodel. Dezelfde beweging in fysieke producten beschrijf ik in We worden bekwamer en de spullen worden slechter.
Er is één rem die hier ontbreekt. Een boete voor een groot mediaconcern verhoudt zich zelden tot de omzet, waardoor ze eerder als kostenpost dan als correctie werkt, zie Een boete is voor een groot bedrijf geen straf, maar een rekening. Zolang dat zo is, moet de prikkel om het anders te doen ergens anders vandaan komen, en op dit moment komt hij nergens vandaan.
De eerlijke versie zou simpel zijn. Wie betaalt, wordt niet gevolgd. Geen advertentie-identificatie, geen veiling, geen meelezers.
Technisch is dat weinig werk. De abonneestatus is al bekend op het moment dat de pagina wordt opgebouwd, want anders kon de betaalmuur zijn werk niet doen. Op basis daarvan sla je het laden van de advertentiebibliotheek over, laat je de identifier ongezet, en start je de veiling niet. Dat is een voorwaarde in de sjabloon en een schakelaar in de tag-beheerder. Ik ken de codebases van uitgevers niet van binnen, dus ik houd het bij de vaststelling dat het patroon eenvoudig is, en niet bij een uitspraak over hoeveel uur iemand eraan kwijt zou zijn.
Waarom het toch bijna nergens zo werkt, kan ik niet met zekerheid zeggen, en ik ga geen motieven verzinnen. Wat ik wel kan vaststellen is dat de tweede geldstroom bestaat, dat er geen technische noodzaak is om hem aan te houden bij abonnees, en dat vrijwel niemand het controleert. Waar niemand kijkt, verandert er niets, en dat patroon zie ik breder, zie De sterkste bevindingen liggen achter DigiD en vitale publieke diensten.
Precies daarom meet ik het. Een abonnement is een overeenkomst waarin staat wat je krijgt. Het is redelijk om te willen weten wat je daarnaast nog afgeeft, en om dat te kunnen nakijken zonder de uitgever op zijn woord te hoeven geloven. De procedure hierboven kost een halfuur en vraagt geen bijzondere apparatuur. Daarom schrijf ik hem op in plaats van alleen de uitkomst te melden. Klagen verandert niets zolang iemand anders het niet kan overdoen, zie Apple, Google en Meta verdienen aan tracking binnen de wet.
Twee knoppen met dezelfde functie verschillen in kwaliteit
Een houten knop en een dun plastic knopje doen precies hetzelfde. Toch wil je bij het ene handschoenen aan, en vraag je je bij het andere af wie het gemaakt heeft en of je het na het aanraken moet poetsen. Dat verschil zit niet in de functie maar in de verhouding, en het is de eerste kwaliteit die verdwijnt omdat ze in geen enkele advertentie past.
Neem een houten knop op een oud apparaat en een licht plastic knopje op een nieuw. Functioneel zijn ze gelijk. Je drukt, er gebeurt iets. Op elke specificatielijst staan ze als hetzelfde onderdeel: een schakelaar, een bediening, een drukpunt.
In de hand zijn het verschillende werelden. Het plastic knopje is dun. Het geeft mee op een manier die je niet vertrouwt, en het voelt alsof je iets aanraakt wat je liever niet aanraakt. Bij de houten knop gebeurt iets anders. Je vraagt je af wie hem gemaakt heeft. Je bedenkt dat je hem misschien moet schoonmaken. Je gaat er voorzichtiger mee om, zonder dat iemand je dat heeft gevraagd.
Dat oordeel gaat niet over hoe het ding eruitziet op een foto. Het gaat om wat er gebeurt op het moment van gebruik, in de fractie van een seconde dat je vinger contact maakt. Dat moment laat zich niet fotograferen, en het staat op geen enkele verpakking.
Let op hoe fijn de signalen zijn die je in die fractie van een seconde oppikt. De temperatuur van het materiaal onder je vinger. De massa, of het ding blijft staan of meegeeft. De weerstand van het drukpunt, en of die weerstand plotseling omslaat of geleidelijk. Het geluid dat het maakt. Je verwerkt dat alles zonder erbij na te denken, en het optelsom ervan wordt een gevoel van vertrouwen of van wantrouwen. Bij de houten knop kloppen de signalen met elkaar. Bij het dunne plastic knopje spreken ze elkaar tegen, en die tegenspraak is wat je registreert als goedkoop.
Dit wordt vaak verward met status, en die verwarring wil ik meteen wegnemen. Het gaat er niet om of iemand je met het ding ziet, of het een merk is, of het indruk maakt op een ander. Niemand ziet mij die knop indrukken. Er is geen publiek. De kwaliteit die ik bedoel bestaat ook als je helemaal alleen bent en niemand ooit zal weten wat je in handen had.
Het gaat om hoe je je voelt terwijl je het gebruikt. Dat is een eigenschap van het object, net zo goed als gewicht of geleidbaarheid, alleen meet niemand hem. Er staat geen getal voor op het datablad. Toch is het even reëel als de dingen die er wel op staan, want je merkt het elke keer dat je het ding aanraakt.
Mercedes had er ooit een woord en een afdeling voor. Ingenieurs die materialen en mechanismen bleven wisselen tot een deurgreep goed aanvoelde, zonder dat er een specificatie was die dat afdwong. Iemand betaalde die mensen om een eigenschap te bewaken die in geen enkele verkoopbrochure terug te vinden was. Bewijsniveau daarbij: ik geef dit als voorbeeld van hoe zo'n afdeling werkt, gebaseerd op wat over dat soort ontwerpcultuur bekend is, niet als een geverifieerd feit over een specifiek model.
Het belangrijke aan dat voorbeeld is dat de eigenschap alleen bestaat zolang iemand haar met opzet bewaakt. Ze ontstaat niet vanzelf en ze blijft niet vanzelf. Er moet een mens zijn met de macht om te zeggen dat een deurgreep nog niet goed genoeg voelt, ook als elke meetbare specificatie al gehaald is. Zodra die mens verdwijnt, of zodra zijn oordeel het aflegt tegen de kostprijs, verdwijnt de eigenschap zonder dat er in de cijfers iets zichtbaar wordt. Dat is precies waarom het zo makkelijk sneuvelt. Er is niemand die het mist op het moment dat het besluit valt, want de koper is er dan nog niet bij.
Deze eigenschap is onzichtbaar op het enige moment dat telt voor de verkoop. Je kunt haar niet in een folder zetten, niet in een specificatietabel, niet in een vergelijkingstabel op een webwinkel. Ze bestaat pas als je het ding vasthebt, en dan heb je meestal al betaald. De koper beslist op grond van wat hij vooraf kan zien, en dit is precies wat hij vooraf niet kan zien.
Dus in een markt waarin je concurreert op wat de koper vooraf kan vergelijken, is dit de post die je schrapt zonder dat iemand het merkt in de cijfers. Ik schrijf dat niet toe aan boosaardigheid. De logica is kaler dan dat. Van alle uitgaven die een fabrikant kan doen, is dit de enige waarvan aantoonbaar is dat ze geen extra verkoop oplevert, want de koper voelt het verschil pas na aankoop. Wie op cijfers stuurt, schrapt die post vanzelf.
Het gevolg is dat bijna alles wat je vandaag aanraakt is ontworpen om er goed uit te zien op een foto en om zo goedkoop mogelijk het punt van aankoop te halen. Hoe het daarna in de hand voelt, viel buiten de som.
Een ding dat goed voelt, onderhoud je. Je zet het netjes weg. Je maakt het schoon. Je laat het repareren als het stuk is, omdat het de moeite waard voelt. Een ding dat aanvoelt als wegwerp, behandel je als wegwerp, en dat wordt het dan ook. Je bent er slordiger mee, je repareert het niet, je vervangt het bij het eerste mankement.
De materiaalkeuze schrijft zo je gedrag voor. En dat gedrag bevestigt vervolgens de keuze van de fabrikant dat het ding toch niet lang hoefde mee te gaan. De goedkope knop wordt een zichzelf vervullende voorspelling. Het product gaat kapot omdat het is gemaakt om weggegooid te worden, en het wordt weggegooid omdat het voelt alsof het daarvoor gemaakt is. De lus sluit zichzelf.
Bewijsniveau: dit verband tussen gevoel en zorg is afgeleid uit eigen waarneming, niet gemeten met cijfers. Ik zie het aan mezelf en aan hoe ik met mijn eigen spullen omga. Dat maakt het een vermoeden met grond, niet een bewezen wetmatigheid. Wat ik wel hard kan maken, is dat de fabrikant deze post schrapt om een reden die met verkoop te maken heeft, en dat de koper het verschil pas na betaling voelt.
Daarom reken ik dit tot dezelfde ketting als de rest van deze tak. Het gaat over vakmanschap dat verdwijnt omdat de markt het niet beloont, over spullen die achteruitgaan terwijl de techniek vooruitgaat, en over de vraag wie bepaalt wat er gebouwd wordt. Het gevoel in de hand is de kleinste, meest persoonlijke plek waar diezelfde krachten zichtbaar worden. Wat op grote schaal speelt in fabrieken en verkoopcijfers, kun je op deze schaal met je eigen vingers voelen. Dat maakt het een goed startpunt. Je hebt geen rapport nodig om te merken dat er iets is weggesneden. Je hoeft alleen op te letten wat een ding met je doet op het moment dat je het aanraakt.
Het is de eerste kwaliteit die sneuvelt, omdat ze in geen enkele advertentie past. Wie leert erop te letten, heeft een goedkoop meetinstrument voor iets dat verder onzichtbaar blijft. Pak het ding op, en je voelt binnen een seconde of er iemand aan gedacht heeft dat jij het zou vasthouden.
Dat instrument gebruik ik ook bij aankoop. Ik lees de specificaties, en dan pak ik het ding vast als dat kan. De twee oordelen lopen vaak uiteen, en het handoordeel heeft me zelden bedrogen. Een apparaat dat op papier gelijk scoort maar in de hand rammelt, gaat bij mij korter mee dan het blad beloofde, precies omdat ik het slordiger behandel. Zo is de cirkel van deze notitie rond. De fabrikant schrapt de post die de koper vooraf niet kan zien, de koper voelt het pas na betaling, en het gedrag dat daaruit volgt bevestigt achteraf dat het ding inderdaad niet lang meeging. Wie de knop leert lezen, stapt uit die cirkel. Je koopt dan het ding dat je zult onderhouden, en dat is het goedkoopste dat er bestaat.
De maker en de aandeelhouder willen niet hetzelfde
Bij de Apple II zaten de volledige schema's in de handleiding, want de bouwer wilde dat je hem kon openmaken. Bij het huidige Apple is een onderdeel gekoppeld aan het serienummer van je toestel. Hetzelfde bedrijf, andere baas over het ontwerp. Wie de doorslag geeft in de vergadering, is af te lezen aan het product.
In elk bedrijf dat iets maakt, zitten twee belangen aan tafel. De maker wil dat het ding goed is. De aandeelhouder wil rendement. Meestal wijzen die dezelfde kant op, want een goed product verkoopt. Maar niet altijd, en juist waar ze uiteenlopen zie je wie de doorslag geeft.
Dat is af te lezen aan het product zelf, en je hebt er geen jaarverslag voor nodig. Kun je het openmaken? Staat er documentatie bij? Wordt een onderdeel geleverd, of alleen een compleet nieuwe module? Elk van die keuzes kost geld en levert niets op in het kwartaal waarin ze gemaakt wordt. Ze verschijnen alleen in een product als iemand met macht ze belangrijk vond.
Bij de Apple II uit 1977 zaten de volledige schema's in de handleiding, met de listing van de code erbij. Steve Wozniak drong aan op uitbreidingssleuven zodat anderen er dingen in konden bouwen. Het uitgangspunt was dat de koper de machine zou openmaken, en dat dat goed was.
Hetzelfde bedrijf koppelt nu onderdelen aan het serienummer van het toestel, zodat een vervangend onderdeel dat technisch identiek is toch niet zonder meer werkt. Er is jarenlang gelobbyd tegen wetgeving die reparatie verplicht zou stellen.
De ingenieurs zijn niet dommer geworden en het bedrijf is niet in andere handen. Wat veranderde is wie de doorslag geeft als openheid en marge tegenover elkaar staan. Dat is geen moreel oordeel over Apple, het is een aflezing. Precies hetzelfde is bij tientallen bedrijven te zien.
Het klinkt zacht om te zeggen dat gepassioneerde makers betere dingen maken, en dat is het niet. Er zit een harde reden onder.
Kwaliteit zit voor het grootste deel in beslissingen die niemand controleert. Of een las een centimeter langer wordt. Of een test die zelden iets vindt toch blijft draaien. Of iemand terugloopt naar de tekentafel omdat het net niet goed genoeg voelt. Dat soort keuzes valt niet af te dwingen met een specificatie, want ze zijn te klein en te talrijk om op te schrijven.
Iemand die het ding zelf wil gebruiken, maakt die keuzes vanzelf goed. Iemand die op een kostenpost stuurt, maakt ze vanzelf net andersom. En omdat er duizenden van die keuzes in een product zitten, is de optelsom het verschil tussen een deur die dichtvalt als een kluis en een deur die knerpt.
Daarom is de vraag niet of ingenieurs nog bekwaam zijn. Die zijn ze. De vraag is of hun oordeel nog ergens de doorslag geeft.
Dit is geen verhaal dat maar een kant op loopt, en dat hoort erbij.
Louis Rossmann is het bekendste voorbeeld: een reparateur die zich jarenlang publiekelijk verzet tegen onderdelenkoppeling en gesloten hardware, en die daarmee het recht op reparatie op de kaart heeft gezet. Toen 3D-printerfabrikant Bambu Lab zijn firmware verder dichttimmerde, herpubliceerden hij en Gamers Nexus de betreffende code als openlijke confrontatie. Dat is niet symbolisch. Zulke conflicten bepalen wat een fabrikant de volgende keer durft.
En het werkt door in wetgeving. De Europese richtlijn over het recht op reparatie is in 2024 aangenomen, en lidstaten moeten haar uiterlijk 31 juli 2026 in nationaal recht hebben omgezet. Fabrikanten worden verplicht bepaalde producten ook buiten de garantie te repareren tegen een redelijke prijs, onderdelen en reparatie-informatie beschikbaar te stellen, en wie kiest voor reparatie in plaats van vervanging krijgt een jaar extra garantie.
In de Verenigde Staten kwam de druk van de toezichthouder. Nadat de FTC en vijf staten John Deere hadden aangeklaagd over reparatiesoftware, ligt er sinds juli 2026 een schikking die het bedrijf tien jaar lang verplicht boeren en onafhankelijke reparateurs dezelfde middelen te geven als de eigen dealers.
Dat is de kant van het verhaal die zelden verteld wordt. De prikkel is niet onveranderlijk. Hij is beleid, en beleid is te veranderen.
Mijn stelling is dat slechte producten meestal uit de prikkel komen en niet uit onvermogen. De Cybertruck is de uitzondering die dat scherpstelt. Onbeperkt budget, de beste ingenieurs, en toch een gaspedaal dat kon blijven hangen op vol gas omdat iemand zeep gebruikte als montagesmeermiddel. Dat is geen bezuiniging, dat is niet weten wat je doet.
Mijn stelling in deze tak is dat slechte producten meestal uit de prikkel voortkomen. De ingenieurs kunnen het wel. Het goede werk wordt alleen niet beloond, dus het gebeurt niet. Onder vrijwel elk slecht product zit een afweging waarin iemand bewust de kwaliteit inruilde voor marge of snelheid.
Een stelling die alleen bevestigingen verzamelt, is verdacht. Als ik wil dat deze houdbaar is, moet ik ook kunnen aanwijzen waar ze niet opgaat. Ik moet een geval kunnen laten zien waarin het slechte product niet uit de prikkel kwam. Anders is het geen stelling die je kunt toetsen, het is een geloof dat alles verklaart en daarom niets.
De Tesla Cybertruck is dat tegengeval. Hier ligt een slecht product waar de prikkel de fout juist niet verklaart, en dat maakt het voor mij het interessantste voorbeeld in de hele tak. Een stelling wordt pas sterk als je weet waar haar grens ligt. Zolang ik alleen bevestigingen verzamel, kan ik mezelf voor de gek houden. Het geval dat buiten de stelling valt, dwingt me om precies te zeggen wat ik wel en niet beweer.
Op 19 april 2024 riep Tesla 3.878 Cybertrucks terug. De oorzaak, zoals beschreven in het recallrapport bij de Amerikaanse verkeersveiligheidsdienst: het pad van het gaspedaal kon bij hoge kracht losraken en klem komen te zitten in de sierlijst erboven, waardoor het pedaal blijft hangen op vol gas. In een voertuig dat in ongeveer drie seconden naar honderd kilometer per uur gaat, is dat een falen met een directe route naar de openbare weg.
De onderliggende oorzaak is het detail dat me niet loslaat. Bij de montage was een niet-goedgekeurde proceswijziging doorgevoerd waarbij zeep werd gebruikt als smeermiddel om het pad op zijn plaats te krijgen. Voor zover bekend waren er ten tijde van de terugroepactie geen ongevallen of gewonden.
Bewijsniveau hierbij: dit staat in een openbaar recallrapport bij de toezichthouder. Het is gedocumenteerd, geen gerucht. Wat ik eraan toevoeg is de duiding, en die duiding wil ik netjes scheiden van het feit.
Waarom juist dit detail me niet loslaat, kan ik precies benoemen. Een klemmend gaspedaal is de klassieke nachtmerrie van de auto-industrie. Het is het soort falen waar hele veiligheidsafdelingen omheen zijn gebouwd, met redundante systemen en pedalen die bij hoge kracht juist loskomen om dit te voorkomen. Dat een fabrikant in 2024 op dit specifieke punt struikelt, en dan door iets zo lulligs als een pak zeep op de montagelijn, wijst niet op pech. Het wijst op een keten waarin de bekende gevaren niet meer bewaakt werden op de plek waar ze horen te worden bewaakt.
Bij een gewone kostenbesparing is er iemand die de afweging maakt. Dit onderdeel mag drie cent goedkoper, en de kans op falen stijgt met een bedrag dat we aanvaardbaar noemen. Dat is een keuze, en er zit een rekensom onder. Je kunt die keuze verwerpelijk vinden, en dat vind ik vaak ook, maar ze is bekwaam. Er zat een vakman aan tafel die wist wat hij inleverde en waarvoor.
Hier ontbreekt die rekensom. Er is geen versie van dit verhaal waarin een ingenieur gaat zitten en besluit dat zeep op een gaspedaal een aanvaardbaar risico oplevert tegen een bekende besparing. Niemand heeft die som gemaakt, want de som bestaat niet. Dit is iemand die een probleem op de lijn oploste met wat er lag, in een proces waar die wijziging niet werd tegengehouden, in een bedrijf met vrijwel onbeperkte middelen en toegang tot de beste ingenieurs die er zijn.
De prikkel verklaart dit dus niet. Wat het wel verklaart, is een organisatie die op dat punt niet wist wat ze deed.
Hier komen mijn twee draden samen. Onbekwaamheid op deze schaal is zeldzaam bij bedrijven die lang bestaan, want daar zitten procedures die precies dit tegenhouden. Zulke procedures zijn traag. Ze voelen bureaucratisch. En ze zijn de opgeslagen herinnering aan eerdere fouten, opgeschreven door mensen die de vorige keer de gevolgen zagen. Snelheid als hoogste waarde betekent dat je die herinnering wegsnijdt, omdat ze in de weg zit.
Dan zie je het patroon dat ik ook in code en in bestuur tegenkom. De fout zit niet in het ene moment op de lijn. Iemand gebruikt zeep, dat kan gebeuren, mensen improviseren onder druk. De echte vraag is waarom er tussen die hand en de openbare weg geen enkele controle stond die het ophield. De fout die telt, is het ontbreken van de laag die het moment had moeten opvangen.
Dat is dezelfde structuur die ik in mijn eigen vak tegenkom. Bij een datalek is de vraag zelden of één programmeur een verkeerde regel schreef. Iemand schrijft altijd wel eens een verkeerde regel. De vraag is waarom die regel de review passeerde, waarom de test hem niet ving, en waarom hij tot in productie kwam zonder dat een controle aansloeg. Een gezonde organisatie heeft meerdere lagen die elk apart de fout hadden moeten opvangen. Als het lek er toch komt, betekent dat meestal dat al die lagen tegelijk ontbraken of waren uitgeschakeld. Dezelfde redenering geldt voor een gaspedaal. Een enkele improvisatie op de werkvloer is menselijk. Dat die improvisatie ongehinderd de openbare weg bereikt, is het echte mankement, en dat mankement zit in het systeem eromheen.
Dat dit geval de prikkel niet volgt, verzwakt mijn stelling niet. Het bakent haar af, en daar wordt ze scherper van. Ik beweer niet dat alle slechte producten uit de prikkel komen. Ik beweer dat de meeste dat doen, en dat de zeldzame uitzonderingen een ander soort fout laten zien: echte onbekwaamheid, waar de kennis of de controle simpelweg ontbrak.
De Cybertruck is die uitzondering, en juist doordat ik hem kan aanwijzen, is de rest van de stelling toetsbaar geworden. Bekwaamheid in de zin die ik bedoel, gaat niet over de vraag of de individuele ingenieur goed is. Ze gaat over de vraag of het geheel zo is ingericht dat het overleeft dat iemand een keer iets doms doet. Een organisatie die dat niet meer kan, heeft haar geheugen weggesneden voor snelheid, en dat is de duurste bezuiniging die er bestaat.
Er zit nog een geruststelling in deze analyse, en die wil ik niet verzwijgen. Als de meeste slechte producten uit de prikkel komen, dan zijn ze in principe te herstellen door de prikkel te veranderen. Beloon je goed werk, dan komt het goede werk terug, want het vermogen was er al. Echte onbekwaamheid is lastiger, omdat je kennis en controle niet met een prijskaartje terugkoopt. Ze moeten opnieuw worden opgebouwd, laag voor laag, en dat kost tijd die een bedrijf dat snelheid tot hoogste waarde heeft verheven juist niet wil nemen. Zo is de Cybertruck ook een waarschuwing. De cultuur die de controlelaag wegsnijdt om sneller te zijn, verliest precies het vermogen dat het duurst is om terug te winnen.
National Highway Traffic Safety Administration, terugroepacties Tesla Cybertruck, 2024-2025de officiele gebreken, waaronder het loslatende sierpaneel en het klemmende gaspedaal
Apple, Google en Meta verdienen aan tracking binnen de wet
Apple, Google en Meta verdienen aan tracking, Nederlandse bedrijven leveren het aan, en de wet staat het grotendeels toe en handhaaft nauwelijks. Dan is het bijna legaal. In die situatie is boos wijzen niet genoeg. Nieuws en weer zijn te oud en te belangrijk om vergiftigd te laten. Daarom bouw ik nieuws.mickbeer.com en weer.mickbeer.com: niet alleen anders, ook beter.
Begin bij een nuchtere vaststelling, zonder verontwaardiging.
De grote techbedrijven verdienen aan tracking en advertenties; dat is hun verdienmodel, niet een uitwas ervan. Nederlandse bedrijven en organisaties bouwen dat model in, want de bouwstenen liggen klaar en iedereen doet het. En de wet die dit zou moeten begrenzen, staat veel toe en wordt nauwelijks gehandhaafd. De cookieregels stammen uit 2002, de opvolger is ingetrokken, en de toezichthouder heeft te weinig mensen voor te veel zaken.
Tel dat op en je komt uit op een ongemakkelijke conclusie: het meeste van wat ik meet is niet eens duidelijk illegaal. Het is toegestaan, of het valt in een grijs gebied waar niemand handhaaft. Bijna legaal, en daarmee bijna onaantastbaar via de gewone weg.
Als iets tegen de wet is, is de route helder: meten, melden, en de toezichthouder doet de rest. Maar als het is toegestaan, loopt die route dood. Je kunt een boete niet eisen voor iets wat mag.
Dan blijven er twee dingen over die wel kunnen. Het zichtbaar maken, zodat mensen weten wat er gebeurt en zelf kunnen kiezen. En het beter doen, zodat er een alternatief bestaat om naar te kiezen.
Dat eerste doe ik met dit hele manuscript. Het tweede is de stap die ik lang heb onderschat, en die volgens mij de belangrijkste is. Wijzen naar wat fout is, verandert weinig zolang er geen betere plek is om heen te gaan.
De keuze voor wat ik bouw is niet willekeurig. Het gaat om dingen die te oud en te belangrijk zijn om vergiftigd te laten.
Nieuws is een van de oudste behoeften die er zijn. Op de hoogte blijven om geinformeerde keuzes te maken, over je gezondheid, je geld, je stem, je leven, dat is geen luxe maar een voorwaarde om als burger te functioneren. En juist daar bleek uit mijn eigen metingen hoe zwaar de tracking is: nieuwssites behoren tot het zwaarst gevolgde deel van het web, en zelfs wie betaalt draagt de meelezers gewoon mee.
Weer is net zo basaal. Iedereen kijkt het, elke dag. En juist de weerapps bleken bij het meten tot de grootste lekken te behoren, met locatiegegevens die via advertentiebrokers naar tientallen partijen gingen. Iets wat je opent om te zien of je een jas nodig hebt, verkocht ondertussen je positie.
Daarom nieuws.mickbeer.com en weer.mickbeer.com. Niet omdat de wereld een weerpagina tekortkomt, maar omdat deze twee bewijzen dat het zonder de vergiftiging kan.
Dit is het punt waar ik streng op mezelf moet zijn, want anders is het een holle claim.
Anders is makkelijk. Een weerpagina zonder trackers bouwen kan iedereen, en als hij lelijk en traag is, gebruikt niemand hem, en dan heb ik niets bewezen. Het gelijk van de trackende partijen is juist dat hun versie prettig werkt.
Dus de lat ligt hoger: het moet niet alleen schoner zijn, maar ook beter. Sneller laden, want zonder al die advertentiebouwstenen kan dat. Prettiger in gebruik. En volledig na te rekenen, zodat je niet mijn belofte hoeft te geloven maar zelf kunt meten dat er niets weglekt.
Als het schone alternatief slechter is, bevestig ik alleen het idee dat privacy iets kost. Als het beter is, weerleg ik dat, en dat is het hele punt. Het bewijs dat de vergiftiging een keuze was en geen noodzaak, is een schone versie die gewoon fijner werkt.
Zo sluit dit aan bij wat ik elders in deze tak schrijf over bekwaamheid.
Consumeren en beoordelen zijn de eerste twee treden. Ik kan uitleggen wat er mis is met een weerapp tot in detail, en op de tweede trede blijven staan. De derde trede is er zelf een maken die het beter doet, en pas daar wordt kritiek iets meer dan een mening.
Het is ook de eerlijkste vorm van mijn eigen werk. Wie zegt dat het anders kan, moet het laten zien. Anders ben ik precies de figuur die ik elders beschrijf: iemand die oordeelt zonder ooit iets te hebben gebouwd.
Ingenieurs kunnen meer dan ooit, en toch gaat bijna alles wat je koopt achteruit. Dat is geen tegenspraak. Iets laten falen in jaar vijf vraagt meer precisie dan iets laten meegaan, dus bekwaamheid is niet de tegenkracht van verval maar de voorwaarde ervoor. Technologie schept geen kwaliteit, ze schept speelruimte, en die ruimte wordt naar beneden benut.
Wij zijn als soort bekwamer dan ooit. Er zijn meer ingenieurs, betere gereedschappen, snellere iteratie, en kennis die vroeger in een bibliotheek lag ligt nu in een zoekbalk. En toch is bijna alles wat je vandaag koopt slechter dan wat je grootouders kochten. Dat lijkt een tegenspraak. Het is er geen.
Hier zit de kern, en het is contra-intuitief. Iets laten meegaan is niet het moeilijke deel. Het moeilijke deel is iets laten falen op het juiste moment.
Een handgemaakte schoen kun je niet betrouwbaar laten slijten op de dag dat de garantie verloopt. Handwerk faalt willekeurig: de ene is uitzonderlijk goed, de andere valt na een half jaar uit elkaar, en de maker weet zelf niet welke hij in handen heeft. Wie op die manier geplande veroudering probeert, krijgt geen herhaalaankoop maar een klachtenstroom en klanten die niet terugkomen.
Pas met precisieproductie krijg je de controle om iets consistent net-genoeg te maken. Je moet de levensduur van een lager kennen tot op de duizend uur om hem te kunnen kiezen op vierduizend. Dat vraagt meetapparatuur, materiaalkennis, statistiek en procesbeheersing. Geplande veroudering is dus geen teken van verval in vakmanschap. Ze is er een toepassing van.
Bekwaamheid is niet de tegenkracht van slechte producten. Ze is de voorwaarde ervoor. Wat bepaalt of die bekwaamheid naar boven of naar beneden wordt gericht, is de prikkel, niet het kunnen.
Elke technologische sprong wordt verkocht als een verbetering van het product. Meestal is het een verbreding van de keuzeruimte. Je kunt hetzelfde maken voor minder, of iets beters maken voor hetzelfde. In een markt die op prijs concurreert, wordt die ruimte vrijwel altijd naar beneden benut.
Het scherpste voorbeeld staat bij mij in de douche. Een quartzuurwerk is technisch superieur aan een slingeruurwerk, dat staat buiten kijf. Een goede quartzklok haalt seconden per jaar. Het goedkope ding dat ik vorig jaar kocht, loopt binnen een jaar vijf tot vijftien minuten voor of achter, de batterij was na twaalf maanden op, en het verstellen voelt als een operatie met een hamer. Mijn staartklokken zijn mechanisch, twee eeuwen ouder in ontwerp, en lopen nauwkeuriger dan dat.
Dat is het bewijs in zijn zuiverste vorm. De technologie won. Het product verloor. De winst is niet in nauwkeurigheid gaan zitten maar in prijs, tot precies onder de drempel waarop de koper het nog net niet merkt in de winkel.
Waarom dan die drempel, en niet hoger? Omdat concurrentie zich richt op wat te vergelijken is op het moment van kopen.
Prijs is meetbaar. Specificaties zijn meetbaar. Levensduur is dat niet, want die blijkt pas jaren later en de koper is dan al weg. Repareerbaarheid is niet meetbaar in een advertentie. Het gewicht van een deur die dichtvalt is niet meetbaar. Dat een klokkenmaker bestaat die je klok over twintig jaar nog kan openmaken, staat op geen enkel etiket.
Mercedes had hier ooit een woord voor en een afdeling bij. Gebruikswaarde: hoe voelt een ding in gebruik, en hoe krijgen we dat beter. Ingenieurs die materialen en mechanismen bleven wisselen tot een deurgreep goed aanvoelde. Dat werk is niet in een folder te zetten. Dus verdween het als eerste, terwijl de merknaam bleef.
Wat overblijft is een markt waarin elke fabrikant precies zo goed is als de koper kan controleren voor hij betaalt, en niet beter. Niet omdat de ingenieurs het niet kunnen. Omdat niemand betaalt voor wat niet te zien is.
Dit nuanceert mijn eigen these, en dat hoort. Veel van wat eruitziet als onbekwaamheid is dat niet. Als een bedrijf een deurgreep bouwt die na drie jaar knerpt, is er meestal geen ingenieur die het niet beter wist. Er was een prikkel die de betere greep niet beloonde.
Maar het omgekeerde geldt ook. Waar niemand meer weet hoe het goed moet, is de keuze op den duur niet eens meer beschikbaar. Klokkenmakers zijn grotendeels verdwenen. Als het ambacht weg is, is de terugweg afgesloten, ook voor wie wil betalen. Dan is de prikkel uitgemond in echte onbekwaamheid, een generatie later.
Zo hangen de twee samen: de prikkel richt de bekwaamheid, en op lange termijn bepaalt de prikkel welke bekwaamheid er uberhaupt nog is.
Een product laten sterven op het juiste moment kan alleen wie het precies genoeg beheerst. Handwerk faalt willekeurig, massaproductie faalt op afspraak. Het oudste bewijs is het Phoebus-kartel van 1924, waar Osram, Philips en General Electric de levensduur van de gloeilamp terugbrachten naar duizend uur en leden beboetten die te lang meegingen.
Geplande veroudering wordt vaak weggezet als samenzweringsdenken. Dat hoeft niet, want er ligt een gedocumenteerd geval, en het is honderd jaar oud.
Op 23 december 1924 richtten onder meer Osram, Philips en General Electric in Geneve het Phoebus-kartel op. De levensduur van de gloeilamp werd genormeerd op duizend uur, omlaag van de toen gangbare tweeduizend vijfhonderd. Leden stuurden hun lampen naar een Zwitsers testlaboratorium, en wie lampen leverde die te lang meegingen, kreeg een boete in Zwitserse frank die opliep met de overschrijding. Niet het falen werd beboet. Het te goed zijn werd beboet.
Dat is geen theorie over prikkels, dat is een contract met een strafbepaling. En let op wat het vereiste: een testlab, een meetprotocol en een productieproces dat nauwkeurig genoeg was om duizend uur te halen en niet vijftienhonderd. Zonder die bekwaamheid was het kartel onuitvoerbaar geweest.
Elke golf van nieuwe techniek opent de mogelijkheid opnieuw, op een nieuwe plek.
Bij mechanische producten zit de veroudering in materiaalkeuze: een metalen tandwiel wordt een plastic tandwiel, op de plek waar de meeste koppel op staat.
Bij elektronica zit ze in componenten met een bekende levensduur, zoals de condensator die het net iets te warm krijgt.
Bij software zit ze in het intrekken van ondersteuning, en dat is de goedkoopste vorm die er bestaat. Er hoeft niets te slijten. Er hoeft alleen iets uitgezet te worden.
Die laatste is de belangrijkste verschuiving van mijn leven. Een fysiek product moest vroeger kapotgaan om vervangen te worden. Een verbonden product hoeft alleen te worden uitgezet. Mijn stappenteller in horlogevorm werkt niet meer omdat de app uit de winkel is gehaald, niet omdat er iets stuk is. Het uurwerk loopt nog jaren op een batterij. De functie is administratief beeindigd.
Wie de fysieke veroudering wil zien aankomen, moet naar het materiaal kijken. Wie de digitale wil zien aankomen, moet naar het bedrijfsmodel kijken.
De term suggereert een vergadering waarin iemand besluit dat het ding na vijf jaar kapot moet. Dat gebeurt, zie 1924. Maar het meeste verval van vandaag heeft die vergadering niet nodig.
Het ontstaat uit duizenden losse besluiten die elk voor zich verdedigbaar zijn. Dit onderdeel kan drie cent goedkoper. Deze test kan eruit want hij vindt zelden iets. Dit materiaal is negentig procent zo goed voor zestig procent van de prijs. Niemand kiest voor een slechter product. Iedereen kiest voor een lagere kostprijs, en het slechtere product is de optelsom.
Dat is lastiger te bestrijden dan een kartel, want er is geen contract om te vinden en niemand om aan te wijzen. Een kartel kun je verbieden. Een optelsom niet.
Heeft de fabrikant er belang bij dat het lang meegaat? Een onvoorwaardelijke levenslange garantie werkt alleen als bedrijfsmodel wanneer het product echt lang meegaat. Dat is een prikkel die de goede kant op wijst, en die kun je nalezen.
Zit er software in, en wat gebeurt er met het product als de fabrikant stopt of de app intrekt? Zoek de productnaam samen met woorden als bricked of right to repair.
Is het te repareren, en door wie? iFixit publiceert repareerbaarheidsscores en gratis handleidingen. Wat makkelijk te repareren is, is meestal ook ontworpen om lang genoeg mee te gaan dat repareren loont.
Bestaat de vakman nog? Dat is de vraag die niemand stelt en die alles bepaalt op de lange termijn.
Bijna alles wat ik bezit is ouder dan ik, en dat is een meting
Mijn meubels zijn handgemaakt en tweedehands, mijn jassen komen uit de jaren voor mijn geboorte, mijn klokken lopen op een veer. Dat is geen nostalgie maar een meting: het nieuwe alternatief valt binnen vijf jaar uit elkaar. Wie alleen nog dingen koopt die zo lang meegaan, leent zijn hele inboedel.
Mijn hele meubilair is tweedehands en handgemaakt. Vrijwel niets is van na 2000, veel is van voor 1990, en een deel is aanzienlijk ouder. Mijn jassen komen uit de jaren voor mijn geboorte. Mijn klokken zijn Friese staartklokken die je af en toe opwindt, met chimes en houtwerk, en verder vragen ze niets.
Dat is geen verzamelwoede en het is geen nostalgie. Het is de uitkomst van een simpele afweging die ik keer op keer opnieuw maak en die keer op keer dezelfde kant op valt.
Het verschil tussen die spullen en iets nieuws voelt als het verschil tussen rijden op een goed getraind paard en op iets wat als paard werd verkocht, na een jaar zijn verf verliest, en dan een ezel blijkt.
Ik heb niets tegen ezels. Ik heb bezwaar tegen de verf.
Een oude kast heeft geen laag die eraf kan. Wat je ziet is waar hij van gemaakt is, en na dertig jaar ziet hij eruit als een kast van dertig jaar en niet als een kapot ding. Slijtage die mooier wordt is een teken dat het materiaal echt is. Slijtage die lelijk wordt is een teken dat je naar een omhulsel keek.
Van alles wat ik bezit, bewijst de klok het punt het scherpst, omdat de vergelijking hier eerlijk is.
Ik kocht vorig jaar een goedkoop quartzklokje voor in de douche. Na een jaar was de batterij op, liep het ding vijf tot vijftien minuten voor of achter, en verstellen voelt als opereren met een hamer. Mijn staartklokken lopen op een veer, zijn ontworpen voor de industriele revolutie, en zijn nauwkeuriger dan dat.
Dat hoort niet zo te zijn. Quartz is de betere technologie, punt. Een goede quartzklok haalt seconden per jaar. Wat ik kocht was niet de technologie maar de goedkoopste toepassing ervan, en daar was de nauwkeurigheid het eerste dat sneuvelde omdat niemand het in de winkel controleert.
En dan het punt dat verder reikt dan die klok: klokkenmakers bestaan bijna niet meer. Mijn staartklok kan over vijftig jaar nog gerepareerd worden, mits er dan iemand is die het kan. Het quartzklokje kan nu al niet gerepareerd worden, door niemand, want er valt niets te repareren. Het is geen product met een defect, het is een verbruiksartikel met een klokgezicht.
Er zijn echte voordelen aan goedkoop en vervangbaar. Wie weinig heeft, kan zich dingen veroorloven die vroeger onbereikbaar waren, en dat is winst. Ik doe daar niet lacherig over.
Maar wanneer alles om je heen zo is, verandert er iets aan hoe je in je eigen huis staat. Niets is echt van jou. Alles is onderweg naar de container, en het enige verschil tussen de dingen is hoeveel jaar ze nog te gaan hebben. Je bezit geen inboedel, je hebt een abonnement op spullen waarvan de rekening in termijnen van vijf jaar komt.
Daar zit mijn eigenlijke bezwaar, en het is niet economisch. Iets bezitten dat langer meegaat dan jij, verandert je verhouding ertoe. Je gaat er anders mee om, je onderhoudt het, en je geeft het door. Iets bezitten dat jou zeker niet overleeft, nodigt uit tot verwaarlozing, en dat is precies wat de maker verwacht.
bronnen
Eigen inventarisatie van het eigen huishouden, 2026per voorwerp het bouwjaar genoteerd; de uitkomst is de meting
De bekendste grafiek van de enshittification-curve komt uit een stuk van Tim O'Reilly, die er eerlijk bij schrijft dat hij ChatGPT om een illustratie vroeg. Er zit geen dataset onder, geen eenheid op de as, geen meting. Het idee van Doctorow is hard en citeerbaar, de curve is een tekening. Wie het verschil niet benoemt, doet precies wat hij anderen verwijt.
Cory Doctorow beschreef in Pluralistic van 21 januari 2023 hoe platforms sterven. Eerst zijn ze goed voor hun gebruikers. Dan misbruiken ze die gebruikers om het aantrekkelijk te maken voor zakelijke klanten. Vervolgens misbruiken ze ook die zakelijke klanten om alle waarde naar zichzelf te halen. Daarna gaan ze dood. Het begrip heet enshittification en het is scherp, bruikbaar en goed gedocumenteerd aan de hand van concrete platforms.
Bij dat idee circuleert inmiddels een grafiek: drie vloeiende lijnen die de waarde voor gebruikers, voor zakelijke klanten en voor aandeelhouders over de tijd tonen. Hij ziet er overtuigend uit. Hij komt uit een stuk van Tim O'Reilly van 15 juli 2025, en O'Reilly schrijft er zelf eerlijk bij dat hij ChatGPT om een illustratie van het concept vroeg en een bruikbare eerste opzet terugkreeg.
Er zit dus geen dataset onder. De verticale as heet relatieve geleverde waarde en heeft geen eenheid. De tijdas heet platformvolwassenheid en heeft geen schaal. Het is een tekening van een idee, gemaakt door een taalmodel, en niet de uitkomst van een meting.
Ik zou deze grafiek zonder nadenken kunnen overnemen. Hij ondersteunt precies wat ik denk. Dat is nou juist waarom hij gevaarlijk is.
Mijn hele werk berust op een onderscheid: wat is gemeten, wat is afgeleid, en wat is beweerd. Als ik een bedrijf aanspreek omdat zijn privacyverklaring iets anders zegt dan zijn code doet, dan mag ik zelf geen tekening publiceren die zich voordoet als data. Een grafiek is een bewijsvorm. Zodra je er een aslabel op zet, claim je dat er gemeten is.
In hetzelfde stuk gaat het nog een stap verder: de vraag waar AI zich op de curve bevindt, wordt beantwoord door Gemini, en dat antwoord wordt geciteerd als onderbouwing. Een taalmodel tekent de curve, een ander taalmodel bepaalt waar we erop staan, en samen vormen ze het bewijs. Dat is geen onderzoek, dat is een kringgesprek.
Ik heb voor deze notitie de drie bekendste teksten over dit onderwerp nagelopen: het stuk van O'Reilly, de algemene theorie van Paul Krugman van 24 juli 2025, en een populair videoessay. Alle drie behandelen de teloorgang van producten en diensten. Geen van drieen levert een eigen meting.
Krugman bespreekt Doctorow uitvoerig, vindt diens model te smal omdat het zich op bepaalde platforms richt, en veralgemeent het naar elk bedrijf met netwerkeffecten. Sterk stuk, maar de enige echte dataset erin is geleend: een grafiek van Uber met nettowinst, koers en operationele marge tussen 2018 en 2025, afkomstig van Steve Hou met Bloomberg als bron. Dat is wel een meting. Zichtbaar is een bedrijf dat jarenlang miljarden verlies draait terwijl de marge diep negatief is, en dat daarna omslaat naar winst met een marge die naar positief klimt. Dat is de derde fase in cijfers, en het is het enige harde bewijs in het hele blok.
Het patroon is veelzeggend. Het begrip is populair geworden, iedereen schrijft erover, en bijna niemand meet. De essayisten lenen hun enige grafiek van een quant.
Ik gebruik het begrip van Doctorow, met bronvermelding en datum, want dat is werk met voorbeelden eronder. Ik gebruik de Uber-reeks, want die heeft een bron en eenheden. De curve gebruik ik niet, behalve als voorbeeld van hoe een idee zich vermomt als bevinding.
En ik houd mezelf aan dezelfde regel. Als ik in dit manuscript een grafiek zet, staat eronder waar de cijfers vandaan komen. Staat dat er niet, dan is het een tekening, en dan hoort het dat te zeggen.
geverifieerdnotitiezekerOverheid, toezicht en de wetbronnenverwant
De vervanger was verouderd voordat hij bestond
De regels waarop ik dagelijks toets komen uit 2002. De vervanger lag er in 2017 en is in 2025 ingetrokken, onder meer omdat hij inmiddels verouderd was. Zo bleef de oude regel staan: niet omdat hij nog past, maar omdat de opvolger tijdens het onderhandelen ouder werd dan het probleem.
Vrijwel al mijn cookiebevindingen rusten op een Europese richtlijn uit 2002, in Nederland omgezet in de Telecommunicatiewet. Die richtlijn is geschreven in een wereld zonder smartphones, zonder apps met meegeleverde bouwstenen van derden, en zonder advertentieveilingen die in honderd milliseconden tientallen partijen aanschrijven.
Dat is niet bij benadering het internet waarop ik meet.
Dat wist Brussel ook. In 2017 lag er een voorstel voor een verordening die de richtlijn zou vervangen en de regels bij de tijd zou brengen.
Daar is acht jaar over onderhandeld. Op 11 februari 2025 kondigde de Commissie in haar werkprogramma aan het voorstel in te trekken. De intrekking werd op 16 juli 2025 formeel goedgekeurd en in oktober bekendgemaakt in het Publicatieblad.
De opgegeven redenen zijn het lezen waard. Er viel geen akkoord tussen de medewetgevers te verwachten. En het voorstel was achterhaald door latere ontwikkelingen, zowel technologisch als in andere wetgeving.
Lees dat nog een keer. Het wetsvoorstel dat een verouderde wet moest vervangen, werd ingetrokken omdat het zelf verouderd was geraakt tijdens het onderhandelen.
Er is geen vervanger aangekondigd. De richtlijn uit 2002 blijft dus gelden.
Die regels staan er nu niet omdat iemand vindt dat ze nog passen. Ze staan er omdat de poging om ze te vervangen is doodgelopen. Dat is een wezenlijk verschil, want een regel die bewust is gehandhaafd heeft gezag, en een regel die is blijven liggen heeft dat veel minder.
Voor mijn werk is de praktische uitkomst dubbel. Enerzijds blijft de toets die ik gebruik gewoon overeind, en dat is winst, want het is de eenvoudigste toets die er is: is er toestemming voordat er iets wordt geplaatst of gelezen. Anderzijds mis ik voor de helft van wat ik meet elke duidelijke regel, omdat de wetgever nooit heeft nagedacht over veilingen, over meegeleverde bouwstenen in apps, of over identifiers die geen cookie zijn.
Het is verleidelijk om dit als bestuurlijk falen weg te zetten. Ik denk dat het dieper zit.
Wetgeving vraagt overeenstemming tussen tientallen partijen met tegengestelde belangen, en dat kost jaren. De praktijk waarop de wet ziet, verandert in dezelfde jaren volledig. Hoe zorgvuldiger het proces, hoe groter de kans dat de uitkomst het probleem niet meer raakt.
Dat is geen argument tegen zorgvuldigheid, maar het verklaart wel waarom de afstand tussen regel en praktijk niet kleiner wordt hoe hard iedereen ook werkt. Het is een wedloop tussen een proces van jaren en een sector die per kwartaal verandert.
En het verklaart waarom handhaving belangrijker is dan nieuwe regels. Een bestaande regel die echt wordt afgedwongen verandert meer dan een betere regel die er over acht jaar misschien komt.
Ik geloof niet dat elke politicus in zijn hart voor honderd procent achter zijn scherpste uitspraken staat, en ik geloof net zomin in de zuivere liefde die andere partijen uitstralen. Maar de vraag of ze het menen is onbeantwoordbaar. De vruchtbare vraag is welk gedrag hier beloond wordt, en het antwoord is: herkenbaar en consequent zijn, niet accuraat zijn.
Ik geloof niet dat iedere politicus in zijn hart voor honderd procent achter zijn scherpste uitspraken staat. Ik geloof net zo min in de onvoorwaardelijke liefde voor boeren die de ene partij uitstraalt, of in de bijzondere zachtaardigheid die een andere partij zichzelf toeschrijft.
Het voelt als een vertoning. En toch werkt het, keer op keer, bij grote groepen mensen.
Meteen de eerlijkheid erbij: of iemand meent wat hij zegt, kan ik niet weten.
Ik heb geen toegang tot iemands hoofd, en de aanname dat een tegenstander wel moet acteren is de makkelijkste denkfout die er is. Mensen kunnen oprecht en fel zijn tegelijk. Sterker nog, dat is waarschijnlijker dan een land vol acteurs.
Dus die vraag laat ik liggen, niet uit hoffelijkheid maar omdat er geen meting bij hoort. Ik doe dat in mijn onderzoek ook: motieven zijn niet vast te stellen, gedrag wel.
Draai hem om. Niet: menen ze het? Maar: welk gedrag wordt hier beloond?
Een kiezer kan onmogelijk beoordelen of een voorstel werkt. Daarvoor moet je begrotingen lezen, uitvoeringstoetsen doorgronden en effecten inschatten die pas over jaren blijken. Vrijwel niemand heeft daar de tijd of de kennis voor, en dat is geen verwijt.
Wat een kiezer wel kan beoordelen: is deze persoon herkenbaar, zegt hij consequent hetzelfde, en staat hij aan mijn kant. Dat is in tien seconden vast te stellen en het vergt geen enkele inhoudelijke kennis.
Dus daarop wordt geselecteerd. Wie twijfelt, nuanceert of van standpunt verandert omdat de cijfers dat afdwingen, oogt zwak en verliest. Wie een scherpe, gelijkblijvende positie inneemt, wint. Het systeem beloont consistentie boven accuratesse, en dat is precies de omgekeerde prikkel van die in mijn vak.
Dit is dezelfde wet die overal in dit manuscript terugkomt, nu op het stembiljet.
Wat te beoordelen valt op het moment van kiezen, wint van wat pas later blijkt. Bij producten is dat de prijs tegenover de levensduur. Bij sollicitanten de presentatie tegenover het vermogen. Bij leraren de bevoegdheid tegenover de bekwaamheid. En bij politiek de herkenbaarheid tegenover de vraag of het beleid werkt.
Steeds hetzelfde: het aflezen van het signaal is gratis, het beoordelen van de inhoud is duur, en dus wint het signaal.
Geen oproep om anders te stemmen, want ik heb geen betere kiezer te bieden dan ik zelf ben.
Wel dit: de vertoning is niet het probleem, ze is het symptoom. Zolang er geen manier is om achteraf te zien of iets heeft gewerkt, is er ook geen prikkel om iets te beloven wat werkt. Precies daarom werkt het.
En dat is een van de weinige plekken waar mijn eigen werk raakt aan iets groters dan privacy. Elke keer dat iemand een maatregel doorrekent en publiceert wat ze heeft opgeleverd, wordt de inhoud een klein beetje goedkoper om te beoordelen. Dat is de enige weg die ik zie, en hij is traag.
Concreter dan dat: we kijken te veel naar wat politieke leiders uitstralen, zeggen en tegenwoordig posten, en te weinig naar wat ze hebben veranderd.
Van vrijwel elke bewindspersoon is na te gaan wat er onder zijn of haar verantwoordelijkheid daadwerkelijk is gebeurd. Zijn de wachtlijsten korter geworden of langer. Is de belofte uit het vorige programma uitgevoerd of stilletjes geschrapt. Wat heeft een aangenomen wet in de praktijk opgeleverd, gemeten en niet beloofd. Dat zijn saaie vragen met opzoekbare antwoorden, en ze verdwijnen volledig onder de dagelijkse stroom uitspraken en beelden.
Ik zeg niet dat het makkelijk is. Beleid heeft lange aanlooptijden, effecten zijn moeilijk aan één persoon toe te schrijven, en een eerlijke meting moet corrigeren voor wat er toch al gebeurde. Precies dezelfde problemen als bij de kentekencamera. Maar moeilijk te meten is iets anders dan niet de moeite waard om te proberen.
Dit is dan ook geen neutrale observatie meer maar een wens. Ik zou willen dat de aandacht verschoof van de vertoning naar het spoor dat iemand achterlaat. Zolang die verschuiving uitblijft, blijft herkenbaarheid winnen van resultaat, en blijft de poppenkast het rationele antwoord op de vraag hoe je gekozen wordt.
Gegevens die zonder toestemming met een ander bedrijf worden gedeeld, zijn meestal geen datalek maar een andere overtreding, met een eigen route naar de toezichthouder. Meestal, niet altijd: gaat het om gevoelige gegevens of om een verstrekking die niemand bedoeld heeft, dan kan het er alsnog een zijn. Wie standaard de datalekingang kiest, kiest doorgaans de verkeerde.
Een datalek is een inbreuk op de beveiliging: gegevens komen in verkeerde handen door een fout of een aanval. Tracking is iets anders. Het is een bewuste verwerking en verstrekking van gegevens, zonder grondslag of toestemming. Ze vallen onder verschillende regels en verschillende meldroutes. Wie tracking als datalek bij de toezichthouder meldt, kiest de verkeerde ingang, en de melding kan op de verkeerde stapel belanden.
Het verschil is geen muggenzifterij. Een datalek heeft een meldplicht met een termijn; een onrechtmatige verwerking loopt via een klacht of een handhavingsverzoek. Door ze uit elkaar te houden, houd je de zaak juridisch zuiver en geef je een tegenpartij geen stok om je op een procedurefout te pakken. Zie ook een sterke aanwijzing voor een overtreding is nog niet de overtreding.
Er is een uitzondering, en die is leerzaam. Toen de Belastingdienst na mijn bevinding niet meer kon reconstrueren welke vrije-tekstvelden precies naar Adobe waren gegaan, kon de dienst niet uitsluiten dat er gevoelige gegevens tussen zaten. In dat geval was de datalekmelding bij de Autoriteit Persoonsgegevens juist terecht: niet omdat tracking een datalek ís, maar omdat de onzekerheid over wat er precies lekte groot genoeg was. Het is dus een regel, geen dogma. Goed dat de dienst die melding deed.
Niet bij benadering. Dit zijn de letterlijke velden met de echte waarden uit mijn eigen sessie, verstuurd naar adobe-analytics-dc.belastingdienst.nl. Die naam klinkt als de Belastingdienst, maar via een verhulde DNS-omleiding komt hij uit bij data.adobedc.net, oftewel Adobe Inc. in de Verenigde Staten.
Wat Adobe meekrijgt
Veld
Echte waarde uit mijn sessie
Een vast nummer dat je herkent
mid / v61
een 38-cijferige ECID, twee jaar geldig
Welke aanslag je bekijkt
c26 / v26
Inkomstenbelasting 2023
Welke betaalstatussen je openhebt
c28 / v34
open:true;incasso:false;afgehandeld:true
De specifieke vordering
c6 / v6
de detail-URL met de claim-identifier erin
Welk middel en welke actie
c9 / v9
Inkomstenbelasting · Betaal met iDEAL \| Wero
Welke betaalopties je krijgt
v37
iDEAL aangeboden, Wero aangeboden
Waar je in de betaalfunnel zit
v41
ideal;start;ih;#; (methode, stap, middel)
Welk tabblad actief is
c13 / v13
open
Je UI-voorkeur
c23 / v23
Thema: dark
Het moment dat je op betalen klikt
events
event30 (betaalstart), plus pageview en impression
Lees die tabel nog een keer, want hier zit het hele verhaal in.
Een advertentiebedrijf aan de andere kant van de oceaan krijgt geen anoniem tellertje dat zegt “er was een bezoeker”. Het krijgt een verslag, regel voor regel, van een burger die zijn inkomstenbelasting betaalt.
Welk jaar. Welke methode. Welke stap in de funnel. Het moment van de klik. En er bovenop een nummer waarmee al die regels aan dezelfde persoon vastzitten.
Ik heb niets aan deze lijst hoeven toe te voegen of te verzinnen. De vertaling van al die cryptische veldnamen (c28, v61, event30) naar wat ze betekenen staat gewoon in het Adobe-configuratiebestand dat de site zelf laadt. De Belastingdienst heeft dit zo ingericht, expliciet, en het staat in hun eigen code te lezen.
Stel je voor dat er iemand naast je staat terwijl je je belasting betaalt. Niet een ambtenaar van de Belastingdienst, maar een Amerikaans reclamebedrijf. En die iemand noteert alles: welke aanslag je openhebt, dat je voor iDEAL kiest, het seconde-precieze moment dat je op betalen klikt, en dat je je daarna bedenkt en annuleert. Bij elke notitie zet hij hetzelfde volgnummer, zodat hij je over twee jaar nog herkent, ook op heel andere websites.
Dat is geen beeldspraak en geen scenario. Dat is precies wat er gebeurt zodra je inlogt op Mijn Belastingdienst. Ik heb het van begin tot eind van mijn eigen scherm geplukt, ingelogd met mijn eigen DigiD, met de antwoorden van de servers erbij, en gehasht zodat het na te lopen is.
Wat daar vertrekt is geen bezoekersteller, maar een verslag van wat ik deed.
Dat ene nummer is het ergste
De bovenste regel is de gevaarlijkste, en daarom staat hij boven. Het veld mid en het veld v61 bevatten exact hetzelfde getal van 38 cijfers. Dat is de Experience Cloud ID, het vaste herkenningsnummer waarmee Adobe een persoon over zijn hele netwerk aan elkaar knoopt. Bij mij wordt dat nummer bewaard in een cookie s_ecid met een levensduur van 63072000 seconden. Reken het uit:
Die herkenning verdwijnt niet als je uitlogt, ze blijft twee jaar staan.
Dat verandert alles aan de tabel hierboven. Zonder dat nummer zou je nog kunnen zeggen: het is gedrag van een naamloze bezoeker. Mét dat nummer is het een dossier. Elke regel die je betaalt, elke aanslag die je opent, hangt aan dezelfde sleutel, twee jaar lang, en aan een sleutel die Adobe ook elders herkent.
En het wrange is dat het niet eens hoeft. De DigiD-inlog zelf, de stap ervoor, is wél netjes. Die meet via een eigen teller van Logius die in Nederland draait, zonder DNS-truc en zonder cookies, en die niet meer doorgeeft dan een paginanaam. Het kán dus gewoon. Zodra je de fiscale omgeving zelf binnenstapt, gaat het mis.
Wat er niet werd meegestuurd
Ik schrijf dit dossier het liefst zo dat het overeind blijft bij de scherpste tegenlezing, dus hier de ondergrens. Je bedrag gaat niet mee. Je BSN niet. Je IBAN niet. Je betalingskenmerk niet. Dat heb ik niet aangenomen maar gecontroleerd, door alle verzonden waarden af te zoeken. Het zijn niet de cijfers van je aanslag die het land uit gaan.
Wat het land uit gaat is je gedrag eromheen, gekoppeld aan een persoon. Dat klinkt zachter, maar dat is het niet. Een advertentienetwerk hoeft je bedrag niet te weten om te weten dat jij, deze specifieke persoon, op dit moment een belastingschuld aan het afbetalen bent via iDEAL en halverwege twijfelde.
Ook je twijfel is een gebeurtenis
De scherpste test was wat er gebeurt als je je bedenkt. Ik startte de betaling en annuleerde hem, en keerde terug in het portaal. Precies dat stuk, de terugkeer na het afbreken, ontbrak in al mijn eerdere opnames, want die stopten op de pagina van de bank.
Na het annuleren verandert in de antwoorden van de server precies één ding: de status van de claim springt van Nieuw naar Mislukt. De volledige woordenschat die de server kent is Nieuw, Succesvol, Mislukt en In afwachting bij bank. Onschuldig op zichzelf. Maar het afbreken van een betaling zit in dezelfde Adobe-funnel als de rest. Niet alleen dát je betaalt wordt geregistreerd, ook dat je het niet afmaakte.
Waarom dit niet te verdedigen valt
Het gebeurt zonder dat je iets gevraagd wordt. Er is geen toestemmingsscherm dat de Adobe-tracking aankondigt of laat weigeren. Het profiel en het herkenningsnummer vertrekken bij het laden van de pagina, voordat je ook maar iets hebt kunnen aanklikken.
Het juridische verwijt, en dat label ik nadrukkelijk als de gangbare beoordeling en niet als mijn eigen eindoordeel, zit hem niet eens in de reis naar de VS. Die doorgifte is in beginsel gedekt door het huidige verdrag tussen de EU en de VS. De kern is dat er geen grondslag onder de AVG is en geen toestemming voor het plaatsen en uitlezen van deze trackers, waarvoor de e-privacyregels en de Telecommunicatiewet die toestemming wél eisen. De Autoriteit Persoonsgegevens beboette eerder Kruidvat voor vergelijkbare tracking.
En dan de context die dit van vervelend naar onverteerbaar tilt.
Dit is niet een webwinkel. Dit is de Belastingdienst, het deel van de staat waar je het minst te kiezen hebt: je móét betalen, je móét DigiD gebruiken. En het is de toeslagenomgeving, precies de plek die de overheid na de affaire zou herstellen.
Daar, van alle plekken, krijgt een Amerikaans reclamebedrijf een klik-voor-klik verslag mee.
Wat ik heb gemeten, en wat niet
Voor de volledigheid, want daar hecht ik aan. Dit gaat over mijn eigen account, op mijn eigen apparaat, opgenomen op 30 mei en 1 juni 2026, met de complete antwoorden van de servers erbij. Het is reproduceerbaar: de opnames zijn gehasht en bewaard, de hele zoektocht is na te lopen. De bedragen, het BSN en het betalingskenmerk zijn niet alleen niet gepubliceerd maar aantoonbaar ook niet verzonden. Wat hierboven staat is geen vermoeden uit een privacyverklaring. Het is wat er feitelijk over de lijn ging toen ik een aanslag wilde betalen.
Een maand geleden was het verhaal: de openbare site lekt je zoekgedrag. Nu weten we dat het niet ophoudt bij de voordeur. Je gaat door DigiD heen, je opent je aanslag, je begint te betalen, en Adobe schrijft elke stap mee.
Update 6 juni 2026: de tracking is uitgezet
Dit hoort er net zo goed bij als de bevinding zelf. Na de publicatie en de Kamervragen kreeg ik vanuit de Belastingdienst zelf het signaal dat de Adobe-meting in de betaalomgeving was uitgezet. Ik heb dat niet op hun woord aangenomen, maar opnieuw gemeten, op dezelfde manier als hierboven: ingelogd met mijn eigen DigiD, met de antwoorden van de servers erbij.
Het klopt. In een verse opname van de ingelogde omgeving, ruim tweehonderd verzoeken door precies de schermen die eerder Adobe voedden, vuurt geen enkele Adobe-marker meer. De verhulde host adobe-analytics-dc.belastingdienst.nl is verdwenen. Het tweejarige herkenningsnummer (s_ecid) wordt niet meer gezet. Geen beacon, geen ECID, geen funnel-velden. Ter controle heb ik dezelfde detector eerst op mijn oude opname losgelaten, waar hij de tracking wél netjes terugvond, en daarna op de nieuwe, waar er niets meer overblijft.
De datastroom naar Adobe in de betaalomgeving is gestopt.
Eerlijk over de grenzen, want daar hecht ik aan: dit is één meetmoment in één sessie. Een openstaande betaling om de funnel nog eens helemaal na te lopen had ik niet, maar dat was ook niet nodig, want het herkenningsnummer en de meet-beacon vertrokken eerder al bij het gewoon laden van de portal, niet pas op het moment van betalen. Hun afwezigheid bij ruim tweehonderd verzoeken is daarmee een geldige nulmeting.
Dat wil ik benoemen: het contact met de Belastingdienst verloopt constructief, en het is juist deze openheid, een dienst die zelf laat weten dat iets is rechtgezet, die maakt dat zo’n bevinding niet in een welles-nietes blijft hangen maar gewoon wordt opgelost.
Dit is hoe het hoort te gaan. De meting bracht het aan het licht, de Kamer stelde de vraag, en de dienst heeft gehandeld. Het verwijt over de oorspronkelijke situatie blijft staan, die was er, en dit artikel beschrijft wat er toen feitelijk gebeurde. Maar de huidige stand is dat het is verholpen, en dat hoort er met evenveel nadruk bij.
Update 2 juli 2026: de schending is erkend
De afloop kreeg een formeel slot. De Belastingdienst deed uit eigen beweging een datalekmelding bij de Autoriteit Persoonsgegevens, en op 25 juni beantwoordde staatssecretaris Eerenberg de Kamervragen: het gebruik van Adobe Analytics “was niet in lijn met de geldende ePrivacy-regels en de Algemene verordening gegevensbescherming”. De verwerking wordt pas hervat na een DPIA en sluitende verwerkersafspraken. De volledige tijdlijn, de erkenning en de berichtgeving staan in de afronding van dit dossier.
wat het opleverde
Schending erkend, tracker uit. Na Kamervragen (JA21, kenmerk 2026Z11812) zette de Belastingdienst de Adobe-tracker in de betaalflow op 10 juni 2026 uit, meldde zich op 12 juni uit eigen beweging bij de AP, en op 25 juni erkende staatssecretaris Eerenberg de schending van de ePrivacy-regels en de AVG. Hij bedankte de melder met zoveel woorden.
Bij TikTok ontstaan twee kampen die allebei tekortschieten
Producten als TikTok trekken zo hard aan en stoten tegelijk zo af dat er twee kampen ontstaan. Het ene zegt: boeit me niet wat ze over me weten. Het andere stapt volledig over op privacyvriendelijke alternatieven en wist dagelijks zijn sporen. Geen van beide is de juiste manier. De onverschilligheid geeft het probleem weg; de obsessie legt de last van een systeemfout bij het individu, terwijl die hoort bij wie de data verzamelt.
Producten als TikTok trekken zo hard aan en stoten tegelijk zo af dat mensen zich in twee kampen verdelen. Het ene kamp haalt zijn schouders op. Het boeit me niet wat ze over me weten, ik heb niets te verbergen, laat ze maar kijken. Het andere kamp slaat de andere kant op. Dat stapt over op privacyvriendelijke alternatieven, draait een aparte browser, wist dagelijks zijn sporen en leest de logs van zijn eigen toestel na.
Ik hoor allebei de kampen aan en ik denk telkens hetzelfde. Geen van beide staat op de juiste plek. Het eerste kamp geeft het probleem gewoon weg. Het tweede kamp neemt een probleem op zijn schouders dat er nooit had moeten liggen. Ze lijken elkaars tegendeel, en toch komen ze op hetzelfde uit. Allebei behandelen ze een systeemfout als een privékwestie. Het onverschillige kamp accepteert de fout en laat hem lopen. Het obsessieve kamp verzet zich tegen de fout en probeert hem in zijn eentje te herstellen. In beide gevallen blijft de fout waar hij zit, en blijft de partij die hem inbouwde buiten schot. Dat is het punt dat ik in dit stuk wil vasthouden.
"Ik heb niets te verbergen" klinkt nuchter, en het is de makkelijkste zin in het hele debat. Het probleem is dat de zin over de verkeerde vraag gaat. Het gaat niet over of jij iets te verbergen hebt. Het gaat over wat een ander kan doen met wat hij van je optekent, en over hoelang hij dat mag bewaren, en met wie hij het deelt.
Een los gegeven lijkt onschuldig. Een locatie, een tijdstip, een zoekterm. Bij elkaar opgeteld worden het patronen die je zelf niet kent. Wie zegt dat het hem niet boeit, geeft daarmee stilzwijgend toestemming voor die optelsom. Dat is een keuze die je niet alleen voor jezelf maakt. Je maakt haar ook voor de mensen in je contactenlijst, voor de plekken waar je komt en voor iedereen die met jou samen op een kaart verschijnt. De gedachte dat je persoonlijk niets te vrezen hebt, verandert niets aan dat bredere effect. Hoe die losse velden samen gevaarlijk worden, werk ik apart uit in Het risico zit in de optelsom, niet in het losse veld.
De obsessie legt de last bij de verkeerde persoon¶
Het andere kamp ziet het gevaar wél, en reageert door alles zelf op te ruimen. Elke dag schoonvegen, elke app wantrouwen, elke instelling narekenen. Ik doe dat werk zelf ook, dus ik oordeel er niet lichtvaardig over. Maar ik zie wat het is. Het is dweilen bij een kraan die iemand anders heeft opengezet en open laat staan.
De last van een systeemfout komt zo bij het individu te liggen. Dat individu zit elke avond zijn sporen te wissen, terwijl de partij die de tracking inbouwde er niets van merkt. Sterker, die partij vaart er wel bij dat je denkt dat het jouw taak is. Zolang jij bezig bent met opruimen, ben je niet bezig met de vraag waarom die rommel er überhaupt is. De obsessie is uitputtend, en ze is nooit af, want morgen staat de kraan nog open.
Er zit ook een verborgen kostenpost aan. De tijd en de aandacht die opgaan aan dagelijks schoonvegen, gaan ergens vandaan. Dat is energie die niet naar het werk gaat dat de fout bij de bron aanpakt. Het obsessieve kamp voelt zich actief, en dat gevoel is oprecht, want er wordt hard gewerkt. Alleen wordt er gewerkt aan het symptoom. De kraan blijft ondertussen dezelfde kraan.
Als je het probleem goed wilt beleggen, moet je de vraag omdraaien. De juiste vraag is wie die verwerking heeft ingebouwd en waarom. De vraag wat de gebruiker anders had moeten doen, leidt af van de plek waar de knoppen zitten. De AVG legt de plicht bij de verwerkingsverantwoordelijke. Dat is de partij die bepaalt waarom en hoe er gegevens worden verwerkt. Dat is niet de gebruiker die op installeren tikt. Dat is de organisatie die de stack koos, de verwerkersovereenkomst tekende en de SDK meeleverde.
Die verdeling is geen mening van mij, ze staat in de wet. En ze is logisch, want alleen de bouwer kan het anders doen. De gebruiker kan zijn sporen wissen tot hij een ons weegt, de datastroom aan de bron zit bij de verwerker. Zolang we het framen als een persoonlijke keuze, ontsnapt precies de partij die aan de knoppen zit. Het frame is niet neutraal. Het verschuift de rekening naar de kant die het minst kan veranderen.
Iemand zou hieruit kunnen lezen dat ik zelf beheer afraad. Dat klopt niet. Ik doe het zelf, en ik denk dat een beetje digitale hygiëne verstandig is, zoals een goed slot verstandig is. Het punt zit in de verwachting die eraan hangt. Zolang je denkt dat je met wat instellingen en een wisbeurt het probleem hebt opgelost, ben je misleid. Je hebt je eigen risico iets verlaagd. Het systeem dat de data verzamelt, staat er ongewijzigd bij.
De hefboom die er echt toe doet, ligt op een ander niveau. Toezicht dat handhaaft. Wetgeving die de standaardinstelling verandert, zodat de zware stack niet meer vanzelf meekomt. Onderzoek dat de datastromen zichtbaar maakt, zodat een organisatie zich niet meer kan verschuilen achter onwetendheid. Dat zijn de plekken waar één ingreep het risico voor veel mensen tegelijk verlaagt. Het individuele schoonvegen verlaagt het risico voor precies één persoon, en alleen zolang hij het volhoudt.
Mijn positie ligt daarom niet in het midden tussen de twee kampen. Ik deel met het onverschillige kamp de weigering om er een dagtaak van te maken. Ik deel met het obsessieve kamp de ernst van het probleem. Het verschil zit in waar ik de rekening neerleg. Persoonlijke voorzorg is nuttig als slot op de deur. Ze is een slecht antwoord op de vraag waarom de deur zo makkelijk opengaat.
Dit standpunt bepaalt hoe ik meet en waarover ik schrijf. Ik geef geen tips in de trant van "zet deze zeven instellingen uit en je bent veilig". Zulke lijstjes bevestigen precies het frame dat ik wil doorbreken, want ze maken er weer een klus van de gebruiker van. Ik richt mijn metingen op de bouwer. Wat stuurt de app uit, naar welke partijen, met welke identifiers, en had het ook zonder gekund.
Dat laatste is belangrijk, want het houdt me eerlijk. Er zijn apps die niets versturen en alles op het toestel houden. Zolang die bestaan, is de zware stack bij de rest een keuze die iemand heeft gemaakt. Het schone tegenvoorbeeld laat zien dat het anders kan, en het verplaatst de bewijslast terug naar waar hij hoort. Dat werk ik uit in Een app kan volledig lokaal, zonder een enkele netwerkcall.
Bewijsniveau bij dit alles: de wettelijke plicht bij de verantwoordelijke is vastgelegd in de AVG, dat is hard. Dat het frame van de persoonlijke keuze de verzamelaar uit de wind houdt, is mijn afgeleide gevolgtrekking uit hoe die frames in de praktijk werken. Waarom ik hierin vaak alleen lijk te staan, bekijk ik in Waarom ben ik de enige die dit doet?.
Apps die je paspoort scannen of je gezicht lezen zijn spionagegereedschap
Een app die je paspoort scant, je gezicht leest of je locatie kent, is in feite een spionage-tool, net zoals een cookie een tracker is. Je geeft je hele hebben en houwen aan een partij die je niet kent, vaak ongetoetst. Een externe blik is dan geen luxe maar noodzaak: wie zijn eigen vlees keurt, mist wat een expert wel ziet. Daar hoort begrip bij. Een app uit 2020 kwam op in een tijd met andere privacyspanningen dan nu. Dat verklaart hoe iets ontstaat, maar ontslaat niemand van de plicht het te laten nakijken en bij te stellen. Het verschil zit in de reactie. De een ontkent, de ander heroverweegt echt: FastID paste na de bevindingen zelfs zijn marketingclaims aan en herzag architectuurkeuzes. Dat is hoe het hoort. Ontkennen of bijsturen is uiteindelijk geen technische kwestie maar een bestuurlijke keuze.
Een app die je paspoort scant, je gezicht leest of je locatie kent, verzamelt de meest gevoelige gegevens die een mens heeft. Wat de app op het scherm belooft, verandert niets aan wat er onder de motorkap gebeurt. De vriendelijke functie is de verpakking. De techniek eronder leest, kopieert en verstuurt. In dat opzicht is zo'n app een spionage-tool, op dezelfde manier waarop een cookie een tracker is. De naam op het pictogram bepaalt niet wat het ding doet.
Het punt is niet dat de functie zinloos is. Identiteitsverificatie of gezichtsherkenning kan een echt doel dienen. Het punt is dat je bij de installatie je hele hebben en houwen afgeeft aan een partij die je niet kent en die vaak niet onafhankelijk is getoetst. De verpakking maakt het aantrekkelijk. De risico's blijven hetzelfde.
De vergelijking met de cookie is preciezer dan ze lijkt. Een cookie is een klein tekstbestand met een nuttige functie, een winkelmandje onthouden bijvoorbeeld. Diezelfde techniek draagt ook de tracker die je over sites heen volgt. De techniek is neutraal, het gebruik bepaalt wat het wordt. Zo ook bij deze apps. De cameratoegang die je pas laat verifiëren, is dezelfde cameratoegang waarmee je gezicht kan worden vastgelegd en verstuurd. De vraag is wat de app met de toegang doet nadat je die hebt gegeven, los van wat de functie op het scherm belooft.
Wie zijn eigen werk keurt, mist wat een buitenstaander wel ziet. Dat is geen zwakte van de bouwer, het is een eigenschap van eigen werk. Je kent je eigen aannames zo goed dat je ze niet meer als aannames herkent. Een externe blik ziet de blinde vlek die voor jou onzichtbaar is. Voor apps die zulke gevoelige data raken, is dat externe oordeel daarom noodzaak.
Dat sluit aan bij een breder patroon in mijn werk. De concentratie van gevoelige data bij één ongetoetste partij is riskanter dan de dispersie ervan over veel schakels, omdat één zwakke plek dan alles blootlegt. Zie Privacy faalt door verstrooiing en door concentratie. Een app kan een groot deel van deze functies bovendien volledig lokaal uitvoeren, zonder de data ooit het toestel te laten verlaten. Dat dat kan, maakt de keuze om het toch te versturen tot een keuze. Zie Een app kan volledig lokaal, zonder een enkele netwerkcall.
De externe toets werkt ook omdat ze de juiste vragen stelt die de bouwer zichzelf niet meer stelt. Een bouwer die maandenlang aan een verificatieflow werkt, denkt in termen van werkt het en is het snel. Een buitenstaander vraagt waar de scan heen gaat, hoe lang hij bewaard blijft, wie hem kan opvragen en of het lokaal had gekund. Dat zijn precies de vragen die in de bouw ondersneeuwen onder de druk om iets werkends op te leveren. De expert brengt geen betere techniek, hij brengt een frisse set vragen die de blinde vlek raken.
Er hoort begrip bij de beoordeling. Een app die in 2020 opkwam, ontstond in een tijd met andere privacyspanningen dan nu. De normen lagen anders, de aandacht lag ergens anders, en veel keuzes die toen redelijk leken, ogen achteraf scherper. Dat verklaart hoe iets ontstaat.
Die verklaring is geen vrijbrief. Ze legt uit waarom een architectuur zo werd, en daar houdt haar werk op. De plicht om het te laten nakijken en bij te stellen blijft staan, juist omdat de context sindsdien is verschoven. Wat in 2020 verdedigbaar was, moet in 2026 opnieuw tegen de norm gehouden worden. De ouderdom van een keuze is een reden om te herzien, niet om te berusten.
Het interessante verschil ligt in wat er gebeurt nadat de bevindingen op tafel liggen. De een ontkent. De ander heroverweegt echt. FastID paste na de bevindingen zijn marketingclaims aan en herzag architectuurkeuzes. Dat is hoe het hoort. De reactie laat zien of een partij de bevinding als een aanval leest of als informatie waar ze iets mee doet.
Dat verschil is uiteindelijk een bestuurlijke keuze, geen technische. De techniek levert de feiten. Wat een organisatie ermee doet, ligt bij de mensen die beslissen. Ontkennen kost op korte termijn minder, en het is dus verleidelijk. Bijsturen kost werk en de erkenning dat het beter kan. Wie bijstuurt, verdient krediet, ook als de eerste versie fout zat.
Het geval FastID is voor mij daarom leerzaam op twee niveaus. Op het eerste niveau is het een bevestiging dat de bevindingen hout sneden, want een partij die zijn marketingclaims aanpast en zijn architectuur herziet, erkent daarmee dat er iets te herzien viel. Op het tweede niveau is het een voorbeeld van de gewenste reactie. Het laat zien dat kritiek niet hoeft te eindigen in een loopgraaf. Ik schrijf die reactie op zoals ik hem waarnam, zonder er meer in te leggen dan er is. Wat FastID intern bewoog, weet ik niet en dicht ik niet.
Voor mijn werk betekent dit dat ik de functie en de techniek uit elkaar trek. Ik beoordeel niet of een app nuttig oogt, ik meet wat hij met de data doet. De vriendelijke schil telt niet mee in het oordeel. Alleen het gedrag telt.
Het betekent ook dat ik de reactie meeweeg in hoe ik erover schrijf. Een partij die na bevindingen echt bijstuurt, verdient een ander verhaal dan een partij die ontkent. Aanklagen alleen brengt me niet ver. Het werk is pas af als er iets beter is gebouwd, of als een partij aantoonbaar is bijgestuurd. Zie Apple, Google en Meta verdienen aan tracking binnen de wet.
Ik let er daarbij op dat het woord spionage-tool een oordeel over functie is, geen oordeel over de mensen. Ik zeg ermee dat de app technisch in staat is om je heimelijk uit te lezen en dat die data een onbekende partij bereikt. Ik zeg er niet mee dat de makers je willen bespioneren. Dat onderscheid is belangrijk, want het houdt de claim toetsbaar. Een bouwer kan mijn oordeel over de functie weerleggen door te laten zien dat de data lokaal blijft of dat de partij wel getoetst is. Een oordeel over intenties zou hij nooit kunnen weerleggen, en dus zou ik het niet moeten uitspreken. De functie meet ik. De bedoeling laat ik aan de mensen die haar kennen.
Wat blijft, is een simpele werkregel. Een app die de gevoeligste gegevens van een mens verwerkt, hoort door iemand anders te zijn nagekeken dan de maker, en die nakijkbeurt hoort periodiek te herhalen omdat de norm verschuift. Zolang dat niet gebeurt, geef je je hebben en houwen af op vertrouwen alleen. Dat vertrouwen kan terecht zijn. Of het terecht is, weet je pas als iemand het van buiten heeft gecontroleerd.
Een HAR-bestand is de volledige opname van al het netwerkverkeer bij een websitebezoek: elk verzoek, elke cookie, elke bestemming. Bijna al mijn privacy-bevindingen komen eruit. Een verklaring is een belofte, de HAR is de uitvoering. Het vastleggen kan iedereen; het lezen en duiden is het vak.
Een HAR-bestand (HTTP Archive) is een JSON-opname van al het netwerkverkeer dat een browser afhandelt bij het laden van een pagina: elk verzoek, elke respons, de headers, de cookies, de timing, de payload. Het is de zwarte doos van een websitebezoek. Waar een screenshot laat zien wat je ziet, laat een HAR zien wat er werkelijk gebeurt.
De structuur is simpel. Onder log.entries staat een lijst van requests, elk met een request, response, cookies en timings. Een browser produceert dit bestand zonder dat je iets installeert. In Chrome of Firefox open je de ontwikkelaarstools, ga je naar het netwerktabblad, laad je de pagina, en exporteer je met "Save all as HAR". Wat je dan in handen hebt, is de volledige lijst van iedereen die tijdens dat bezoek is aangesproken, in de volgorde waarin het gebeurde, met de gegevens die zijn meegestuurd.
Dat is de reden dat bijna al mijn privacy-bevindingen uit dit ene bestandstype komen. Een verklaring in een privacybeleid is een belofte over wat er zou gebeuren. De HAR is de opname van wat er echt gebeurde. Als die twee uit elkaar lopen, staat het verschil zwart op wit in de entries.
Een korte kanttekening over hoe je de opname maakt, want de kwaliteit van de HAR bepaalt de kwaliteit van alles daarna. Zet het netwerktabblad open voordat je de pagina laadt, anders mis je de eerste verzoeken, en juist die vroege verzoeken zijn vaak de interessantste. Vink "Preserve log" aan zodat een doorverwijzing de lijst niet wist. En leg vast wat je deed: welke pagina, welke knoppen, wel of geen cookies geaccepteerd. Een HAR zonder dat logboek is een opname zonder bijschrift, en dan weet je later niet meer welke keuze welk verkeer opriep.
Je hoeft geen tool te kopen om een HAR te lezen. Een paar regels Python halen alle uitgaande domeinen eruit, gesorteerd op hoe vaak ze werden aangeroepen:
import json
from urllib.parse import urlparse
from collections import Counter
har = json.load(open("capture.har", encoding="utf-8"))
entries = har["log"]["entries"]
hosts = Counter(urlparse(e["request"]["url"]).hostname for e in entries)
for host, n in hosts.most_common():
print(f"{n:4d} {host}")
Dit is de eerste blik: welke domeinen werden geraakt, en hoe vaak. Je laadt één pagina en ziet dat er vijftig, honderd, soms meer dan tweehonderd verzoeken uitgingen naar tientallen verschillende hosts. De naam van de site die je bezocht staat er tussen, en daaromheen staan de namen die je niet had verwacht. Die vreemde namen tussen de first-party requests zijn de kandidaten. Een teller die één host tientallen keren laat terugkomen, wijst op een partij die tijdens je bezoek herhaaldelijk werd aangesproken. Dat is het eerste wat je wilt weten voordat je verder graaft.
Interessanter wordt het als je de cookies en query-parameters bekijkt die meegaan. Daar zitten de advertentie-ID's en de herkenningsnummers:
for e in entries:
host = urlparse(e["request"]["url"]).hostname
for c in e["request"].get("cookies", []):
if len(c["value"]) > 20: # lange waarde = vermoedelijke identifier
print(host, c["name"], c["value"][:16], "...")
De drempel van twintig tekens is een ruwe zeef. Een sessievlag of een taalvoorkeur is kort. Een identifier die één specifieke browser uit miljoenen moet kunnen aanwijzen, heeft veel bits nodig en is daarom lang. De filter haalt dus de korte, onschuldige waarden weg en laat de verdachte staan. Het blijft een vermoeden. Een lange waarde kan ook iets legitiems dragen, zoals een cache-sleutel.
Een lange, stabiele waarde die naar meerdere domeinen meegaat, is een koppelsleutel. Zie je dezelfde waarde bij verschillende partijen, dan is dat cookie-sync: losse bedrijven die dezelfde persoon herkennen. Dat is het punt waarop een lijst domeinen verandert in een netwerk. De partijen die op het oog niets met elkaar te maken hebben, blijken via één gedeeld nummer naar dezelfde bezoeker te wijzen.
De echte vraag is wat er gebeurt na een cookie-weigering. Ik maak twee captures, een met "accepteren" en een met "alles weigeren", en trek de first-party-hosts eraf. Wat dan nog vuurt, hoort daar niet te zijn:
def hosts_of(path):
h = json.load(open(path, encoding="utf-8"))
return {urlparse(e["request"]["url"]).hostname for e in h["log"]["entries"]}
na_weigeren = hosts_of("weiger.har") - hosts_of("first-party.har")
print("nog actief na weigeren:", sorted(na_weigeren))
Deze vergelijking is de kern van veel van mijn metingen. Een banner die toestemming vraagt, doet een belofte: weiger je, dan gebeurt het niet. De weiger-capture toetst die belofte. Trek je de hosts eraf die sowieso van de site zelf zijn, dan houd je de derde partijen over die vuurden ondanks de weigering. Elke naam in die lijst is een plek waar de belofte en de uitvoering uit elkaar lopen.
De aftrek van de first-party-hosts is nodig omdat een site natuurlijk zijn eigen servers mag aanspreken. Beelden, stylesheets en de eigen backend horen erbij, ook na een weigering. Wat overblijft na die aftrek is het verkeer naar buiten. Ik houd daarbij één regel aan: het gaat om wat er verschilt tussen accepteren en weigeren, en om wat er blijft staan terwijl het weg had moeten zijn. Een host die in beide captures voorkomt en duidelijk bij de site zelf hoort, laat ik met rust. Een advertentie- of analysedomein dat na de weigering nog in de lijst staat, is de vondst.
Let op wat deze meting wel en niet aantoont. Ze laat zien dat er verkeer naar een derde partij ging na een weigering. Dat is gemeten en hard. Ze bewijst op zichzelf nog niet dat er persoonsgegevens werden verwerkt, want een verzoek kan leeg zijn of geanonimiseerd. Om van "er vuurde iets" naar "er ging een identifier mee" te komen, moet je terug naar de cookies en parameters van juist die entries. De hostlijst is het spoor, de inhoud van de request is het bewijs.
Een HAR ziet wat de browser verstuurt en ontvangt. Daar zit de grens. Als een site zijn tracking via de eigen server laat lopen, server-side tagging, dan zie je in de HAR alleen een net verzoek naar de site zelf. Wat die server daarna doorstuurt naar een advertentiepartij, gebeurt buiten je browser en staat niet in het bestand. De opname is dan schoon terwijl de tracking gewoon doorgaat, één laag dieper.
Dat is de belangrijkste beperking om eerlijk over te zijn. Een lege weiger-capture betekent niet dat er niets gebeurt. Ze betekent dat er niets gebeurt wat de browser kan zien. Om die reden is een schone HAR een geruststelling met een sterretje, en weet je pas zeker dat het spoor doorloopt als je ook de kant van de server kunt bekijken.
De code is het makkelijke deel. Iedereen kan een HAR opslaan en er een script op loslaten. Het lezen is waar het vak zit. Je moet weten welke domeinen bij welke vendor horen, want de naam in de URL verraadt de eigenaar lang niet altijd. Je moet weten welke parameter een advertentie-ID draagt en welke een onschuldige cache-sleutel is. Je moet zien waar server-side tagging het spoor uit het zicht haalt, zodat je een schone opname niet aanziet voor een schone site.
Daar zit de reverse-engineering. Het vastleggen kan iedereen. De waarde ontstaat bij het duiden van wat er vastligt, en dat duiden bouwt op kennis die geen script voor je heeft: welke partij welke rol speelt, welk nummer een persoon aanwijst, en wanneer een stilte in de opname een echte stilte is of alleen een verplaatste.
De scripts hierboven zijn daarom een begin, geen eindpunt. Ze reduceren duizenden regels ruwe JSON tot een handzame lijst waar je op kunt redeneren. Wat je met die lijst doet, hangt af van wat je weet. Iemand die de vendors kent, ziet in dezelfde lijst een verhaal dat voor een ander onzichtbaar blijft. Dat is de reden dat ik de opname en de duiding streng gescheiden houd. De HAR is het bewijsstuk dat iedereen kan naslaan. Mijn conclusie erover is een interpretatie die op dat bewijsstuk rust, en die twee moet je nooit door elkaar laten lopen.
Eigen onderzoeksdossier: forensics, 2026-06-11HAR-scans met privacy_scan-classificatie als werkwijze
gedachteessayAlle Nederlandse wetten, gespiegeldbronnenverwant
Alle Nederlandse wetten, gespiegeld in git
Wetten zijn publiek eigendom, maar op wetten.overheid.nl kun je niet zien welk woord er gisteren veranderde. Daarom spiegel ik ze: elke wet een tekstbestand, elke wijziging een commit. Nu staan er 19.626 geldende regelingen in, bijgewerkt door een robot die elke ochtend om zes uur kijkt of Den Haag iets heeft veranderd.
Alle Nederlandse wet- en regelgeving staat officieel op wetten.overheid.nl. Publiek eigendom, gratis toegankelijk, zonder inlog. En toch praktisch onbruikbaar zodra je meer wilt dan één artikel opzoeken.
Wat je krijgt is HTML en PDF. Voor een mens die iets naslaat is dat prima. Voor iedereen die met de tekst zelf wil werken begint daar het probleem. Er is geen leesbaar tekstformaat om uit te knippen en te bewerken. Er is geen diff. Je kunt zien dát er een vorige versie bestaat, als losse pagina onder een eigen datum. Welke woorden er tussen die twee versies zijn gewisseld, blijft onzichtbaar. Je kunt de verzameling niet in één handeling kopiëren om er lokaal mee te experimenteren. En wie wettekst in een tool wil stoppen, in een compliance-script of een taalmodel, krijgt het bestand simpelweg niet in een vorm die je kunt hergebruiken.
Ik wil hier één ding preciezer zeggen dan ik het eerder schreef. Machineleesbare toegang bestáát wel. Er is een SRU-zoekdienst en er is een XML-repository met de officiële brondocumenten, en mijn eigen spiegel draait op precies die twee. Wat ontbreekt is de laag daarboven: een leesbaar formaat, een geschiedenis die je regel voor regel kunt lezen, en een kopie die je zonder toestemming mag doorgeven. Die drie dingen zijn de reden dat ik het zelf ben gaan bouwen.
Dat is een vreemde situatie als je er even bij stilstaat. De tekst van de wet is het meest publieke document dat er bestaat. Iedereen wordt geacht hem te kennen, en niemand kan zich voor de rechter beroepen op onbekendheid ermee. De vorm waarin hij wordt aangeboden sluit precies die mensen buiten die er iets mee willen bouwen: de programmeur, de journalist die wil weten wanneer een zinsnede is ingevoegd, de jurist die twee versies naast elkaar wil leggen.
Dus spiegelde ik ze. Het idee is zo simpel dat het bijna saai is. Zet elke geldende regeling neer als een Markdown-bestand met een kop van metadata, stop de hele verzameling in git, en laat een robot elke dag kijken of er iets is veranderd.
Wat je dan krijgt is meer dan een kopie. Het is wetgeving met een geheugen.
Een bestand ziet er zo uit: bovenaan een blok met titel, BWB-identifier, categorie, publicatiedatum, laatste wijziging, status en de bron-URL. Daaronder de wettekst als gewone koppen per boek, hoofdstuk en artikel. De opmaak, de navigatie en de cookiebanner blijven achter. Wat overblijft is de tekst.
Omdat het git is, krijg je de rest er gratis bij. Je ziet per commit welk woord veranderde en op welke dag. Je kunt een wet terugspoelen naar hoe hij vorig jaar luidde. Je kunt de hele verzameling forken en er iets mee doen zonder iemand om toestemming te vragen. Het staat op github.com/Apolloccrypt/wetgeving-nl en draait live op vrijewetgeving.nl.
Concreet, voor wie de geschiedenis van één regeling wil lezen:
Die laatste regel is het hele punt van het project. Twee commits, één diff, en je ziet welke woorden de wetgever heeft gewisseld. Dat is de handeling die op de officiële site ontbreekt, en het is de handeling waar elke programmeur al twintig jaar aan gewend is.
Het ophalen gebruikt de zoekdienst van de overheid. Aan SRU kun je vragen welke regelingen sinds een bepaalde datum zijn gewijzigd, en alleen die worden opgehaald. Dat scheelt tienduizenden verzoeken per dag, en het scheelt de bron een belasting die ik er niet op wil leggen.
Wat terugkomt is een lijst BWB-identifiers. Per identifier haalt het script de officiële XML op uit het repository, met een halve seconde tussen de verzoeken, en een eigen parser zet die XML om naar Markdown. Daarna volgt een diff tegen wat er al in de repo staat. Alleen wat echt anders is gaat mee in de commit.
Die volgorde is belangrijk. Zonder die laatste stap zou elke run een commit produceren voor elk bestand dat opnieuw is weggeschreven, ook als er niets in staat dat afwijkt. De geschiedenis zou dan vol ruis staan en precies de eigenschap verliezen waar het me om gaat.
De hele keten hangt aan één cron-regel:
on:
schedule:
- cron: '0 6 * * *'
Elke ochtend om zes uur UTC. De commit wordt gezet door wetgeving-bot, met in het bericht hoeveel wetten er die dag zijn bijgewerkt. Dat zijn er meestal een stuk of tien.
De stand op 23 juli 2026, geteld in de repo zelf. Bewijsniveau: gemeten.
19.626 geldende regelingen, elk een eigen bestand. Precies evenveel entries in de zoekindex, dus index en bestanden lopen niet uiteen.
423.520 commits op de hoofdtak. Dat is de wetgeschiedenis, regel voor regel.
15 categorieën. De grootste is bestuursrecht met 4.767 regelingen, de kleinste financieel recht met 135.
Naar soort: 7.969 ministeriële regelingen, 2.537 wetten, 2.257 verdragen, 1.841 algemene maatregelen van bestuur, en de rest verspreid.
De oudste regeling die nog geldt dateert van 13 februari 1815. De nieuwste van gisteren.
Dat laatste vind ik het mooiste getal van de hele verzameling. Er is een tekst uit 1815 die vandaag nog steeds recht is, en hij staat in hetzelfde formaat als een ministeriële regeling van deze week. Dezelfde koppen, dezelfde metadatakop, dezelfde git log. Tweehonderd jaar staatsinrichting valt weg tegen het feit dat het allebei gewoon tekst is.
De verhouding tussen die getallen zegt ook iets. Op 19.626 regelingen staan 423.520 commits, dus gemiddeld ruim twintig wijzigingsmomenten per regeling. Let op: dat gemiddelde is scheef. Een deel van die commits komt uit de initiële vulling en uit opruimacties, en de spreiding is ongelijk, want een belastingwet beweegt vaker dan een verdrag uit de vorige eeuw. Ik noem het cijfer als ruwe orde van grootte. Als maat voor wetgevingsdruk deugt het niet.
Bij dat tellen liep ik tegen een fout van mezelf aan. De README claimde 21.407 regelingen. Gemeten zijn het er 19.626. Het verschil is deels te verklaren. In juli zijn er 256 dubbele bestanden opgeruimd, één per BWB-identifier die twee keer was weggeschreven, en het cijfer in de README is daar nooit op bijgewerkt. De rest van het gat komt vermoedelijk uit eerdere opschoningen en uit regelingen die intussen zijn vervallen, en dat heb ik niet uitgesplitst. Bewijsniveau: het verschil is gemeten, de volledige verklaring ervan is afgeleid en incompleet.
Ik schrijf regelmatig over organisaties die in hun documentatie iets beweren dat hun code niet doet. Dan hoor ik het zelf ook te noemen als het mij overkomt. Het is precies dezelfde fout in het klein: een getal dat ooit klopte, dat in een tekst blijft staan terwijl het systeem eronder verandert, en dat niemand controleert omdat het er plausibel uitziet. Zie Label elke bevinding op bewijsniveau.
Een spiegel van je eigen project hoort ook de scheuren te tonen.
Het idee was expliciet dat mensen konden meedenken en voorstellen konden doen. Elke burger een potentiële bijdrager, elk voorstel een pull request, elke discussie een issue. In de praktijk zijn er ooit twee pull requests binnengekomen, waarvan één van een buitenstaander over het vastzetten van workflow-versies, en nul issues. Niet één burger heeft ooit een wetsvoorstel ingediend. De techniek staat er, de deur staat open, en er komt niemand door.
Dat is het echte probleem van dit project, en ik heb het niet opgelost. Het is ook geen probleem dat je met code oplost. Ik kan bedenken waarom het leeg blijft. Git is een drempel voor wie geen ontwikkelaar is. Een pull request op een tekst die de Staten-Generaal vaststelt heeft geen enkele juridische route. Misschien is de vraag om mee te schrijven aan wetgeving gewoon veel groter dan de bereidheid van willekeurige voorbijgangers. Dat zijn vermoedens, ik heb er niets aan gemeten, en ik zet ze hier neer als vermoeden.
Wat ik wel gemeten heb is dat de infrastructuur werkt en de deelname nul is. Dat is een resultaat, ook al is het het resultaat waar ik het minst blij mee ben. Ik heb hetzelfde patroon eerder gezien in mijn andere werk. Zie Waarom ben ik de enige die dit doet?.
Als de zoekdienst van formaat verandert of de parser klapt, dan commit de robot niets en meldt de dag "geen wetswijzigingen vandaag". Dat ziet er precies hetzelfde uit als een rustige dag in Den Haag. Nul commits is een normale uitkomst in dit systeem, en dat maakt nul commits als storingssignaal waardeloos.
Voor een spiegel die zijn hele waarde ontleent aan volledigheid is dat de ergste bug die erin kan zitten. Een luide fout stopt de boel en dwingt je te kijken. Deze fout laat de site gewoon doordraaien, met tekst die er onberispelijk uitziet en die stilletjes achterloopt. Hoe langer het duurt, hoe geloofwaardiger de verouderde versie oogt.
De oplossing is niet ingewikkeld. Het systeem moet onderscheid maken tussen "de zoekdienst antwoordde en had niets" en "de zoekdienst antwoordde niet of anders dan verwacht", en op dat tweede geval een alarm zetten. Daarnaast een dodemansknop: als er meer dan zoveel dagen achter elkaar nul wijzigingen zijn, is dat op zichzelf verdacht, want de gemeten dagelijkse doorstroom ligt rond de tien regelingen.
Ik heb het nog niet gebouwd. Ik noem het hier omdat ik van andere partijen verwacht dat ze hun eigen faalmodi opschrijven, en die lat geldt voor mij ook.
Dit project staat dichter bij de rest van mijn werk dan het lijkt. Ik meet elders wat websites en apps met bezoekers doen, en die metingen zijn pas iets waard als ik ze kan leggen naast wat de wet op dat moment eiste. Wetteksten in git maken die vergelijking mogelijk in de tijd: welke verplichting gold er op de dag van de meting, en wanneer is die zinsnede erin gekomen.
Er zit ook een principe onder dat ik in al mijn projecten terugzie. Publieke informatie die alleen als plaatje wordt aangeboden is formeel openbaar en praktisch gesloten. De aanwezigheid van een pagina is niet hetzelfde als de mogelijkheid om er iets mee te doen. Wie de vorm bepaalt, bepaalt wie er kan meekijken. Zie De maker en de aandeelhouder willen niet hetzelfde.
En de meest bruikbare les zit in de burgerlaag die leeg bleef. Ik kan een systeem bouwen dat technisch precies doet wat ik beloofde, en dat toch zijn doel mist omdat het deel dat van mensen afhangt niet vanzelf op gang komt. Dat is een correctie op mijn eigen reflex om aan te nemen dat een goed gebouwde deur ook wordt gebruikt.
Windstil is mijn Google Maps voor de rustigste route in plaats van de snelste. Een kaart die je langs de kalmste weg stuurt, weg van drukte en prikkels. Waar elke andere app optimaliseert voor tijd, optimaliseert deze voor rust. Daarom is het tegelijk computer science en psychologie.
Elke navigatie-app kent maar één doel: zo snel mogelijk van A naar B. Dat doel is diep ingebakken. De hele geschiedenis van routeren draait om de kortste of snelste weg, en de wiskunde eronder is daarop geslepen. Voor een pakketdienst is dat precies goed.
Voor een mens is het vaak de verkeerde optimalisatie. De snelste route loopt langs de grote weg, door het lawaai, tussen de prikkels. Ze stuurt je over de rotonde met vier rijstroken omdat dat twee minuten scheelt. Voor wie gevoelig is voor drukte, of gewoon behoefte heeft aan rust, kosten die twee minuten meer dan ze opleveren. De app weet dat niet, want de app meet alleen tijd.
Windstil draait het om. In plaats van tijd weegt hij rust. Stillere straten, minder verkeer, meer groen. Techniek hoeft niet altijd sneller te maken. Ze kan ook kalmer maken, en dat is een even geldig doel om op te optimaliseren.
Het idee is preciezer te maken dan het klinkt. Routeren is een probleem op een graaf. De kruispunten zijn knopen, de straten zijn verbindingen, en elke verbinding heeft een gewicht. Een gewone navigatie-app zet in dat gewicht de reistijd. Windstil zet er een rustkost in. Een straat langs een drukke weg krijgt een hoog gewicht, een stille laan met bomen een laag gewicht. Het algoritme dat de kortste weg zoekt, zoekt daarmee de kalmste weg. De machinerie blijft gelijk, de betekenis van het gewicht verandert.
Concreet komt het neer op een gewogen kortste-pad-zoektocht. A* of Dijkstra werken hier prima. Het verschil met een gewone router zit in de kostenfunctie per straatsegment. Schematisch:
def rustkost(segment):
# elke term is genormaliseerd naar 0..1
verkeer = segment.verkeersdrukte # meer verkeer = hoger
lawaai = segment.geschat_geluid # meer decibel = hoger
groen = segment.groen_aandeel # meer groen = lager, dus 1 - groen
lengte = segment.lengte_m
kost_per_meter = (
0.5 * verkeer +
0.3 * lawaai +
0.2 * (1 - groen)
)
return lengte * kost_per_meter
De wegingen hierboven zijn illustratief, geen gemeten optimum. Ze laten de vorm zien: een straat kost meer naarmate hij drukker, luider en kaler is, en de lengte schaalt dat mee. Wie A voedt met deze kost in plaats van reistijd, krijgt een route die drukte ontwijkt. Een heuristiek voor A kan de hemelsbrede afstand naar het doel blijven, zolang je die schaalt met de laagst mogelijke kost per meter, zodat de heuristiek de echte kost nooit overschat en de route optimaal blijft.
De kostenfunctie is zo goed als de data die hem voedt. Straattype, aantal rijstroken en aanwezigheid van bomen staan deels in open kaartdata zoals OpenStreetMap, in de tags per weg. Groen is af te leiden uit landgebruik-tags en parkgrenzen. Verkeersdrukte en geluid zijn lastiger. Voor geluid bestaan gemodelleerde kaarten, en verkeer kun je schatten uit wegtype en tijdstip.
Ik ben eerlijk over het bewijsniveau. Dit deel is ontwerp, geen meting. Ik heb geen gevalideerde rustscore per straat liggen. De aanpak is plausibel en bouwt op bestaande databronnen, en of de uitkomst voelt als rustig moet nog blijken uit gebruik. Dat is precies het punt waar het project staat: de mechaniek is helder, de kalibratie is open werk.
Daarom is Windstil twee dingen in één. De vorm is een routeringsprobleem, met een graaf, gewichten en een kortste-pad-algoritme. Dat is computer science, en het is opgelost gereedschap. Het antwoord op de vraag "wat is een goed gewicht" komt uit hoe een mens zich voelt onderweg. Dat is psychologie, en het is open.
De koppeling zit in de kostenfunctie. Elke keuze van een weging is een aanname over wat rust is voor wie de route loopt. Weegt lawaai zwaarder dan verkeer? Telt groen echt, of is het schijn? Die vragen zijn niet met een benchmark te beslechten. Ze vragen om te luisteren naar mensen die de route lopen. De techniek levert het skelet, de psychologie levert de gewichten.
Windstil is mijn tegenvoorbeeld tegen het idee dat techniek er is om alles sneller te maken. Een kaart die je langs de kalmste weg stuurt, weg van drukte en prikkels, optimaliseert voor iets dat telt en dat geen enkele grote app meet. Voor wie gevoelig is voor prikkels is dat verschil groot, en voor de rest is het een fijne optie op een dag dat haast niet nodig is.
Het is bewust klein en lokaal te houden. De route rekent op je eigen toestel op open kaartdata, zonder dat je locatie ergens een veiling in hoeft. Dat past bij hoe ik denk over software die dicht op de mens zit. Kalmte als doel, en privacy als vanzelfsprekendheid eronder.
De vraag die boven het project hangt, is of rust genoeg vat krijgt om erop te rekenen. Een deel ervan laat zich meten. Verkeersintensiteit is een getal. Wegtype en aantal rijstroken staan in de kaartdata. Nabijheid van groen is af te leiden uit landgebruik. Voor geluid bestaan gemodelleerde kaarten die per gebied een schatting geven. Dat zijn genoeg objectieve haakjes om een straat een score te geven die iets zegt.
Een ander deel ontsnapt aan meting. Of een straat rustig aanvoelt, hangt af van tijdstip, weer, en de persoon die er loopt. Een schoolstraat is stil in de avond en druk om acht uur. Dat is niet met een vaste score te vangen. De eerlijke stand is dat de meetbare kant een goede benadering geeft, en dat de rest kalibratie en persoonlijke instelling vraagt. Ik claim geen gevalideerde rustscore. Ik claim een plausibele benadering met knoppen eraan, en de belofte dat de benadering beter wordt naarmate meer mensen de route lopen en terugkoppelen.
Een echte route weegt zelden maar één ding. Iemand wil rust, en toch niet drie keer zo lang onderweg zijn. Dat is te vangen door de kostenfunctie uit te breiden met een tijdsterm met een klein gewicht. De route zoekt dan de kalmste weg binnen een tijdsmarge, in plaats van de kalmste weg tegen elke prijs.
def totale_kost(segment, voorkeur):
tijd = segment.reistijd_s
rust = rustkost(segment) # uit de vorige sectie
return voorkeur.w_rust * rust + voorkeur.w_tijd * tijd
Met w_tijd op nul krijg je de zuiver kalmste weg, ook als die veel omloopt. Met w_tijd iets hoger krijg je een route die rust zoekt zolang het niet te veel tijd kost. Zo wordt Windstil bruikbaar op een gewone dag, en niet alleen op de dag dat tijd helemaal niet telt. De gebruiker draait aan één schuif tussen haast en kalmte, en het algoritme regelt de rest.
Wat dit ontwerp aantrekkelijk maakt, is dat de meeste onderdelen al bestaan. Het routeeralgoritme is opgelost werk, al decennia. De kaartdata ligt open. De kortste-pad-zoektocht draait moeiteloos op een telefoon. Het nieuwe zit in één plek: de betekenis die je aan het gewicht geeft. Dat maakt het een klein project met een grote hefboom. Ik verzin geen nieuwe wiskunde, ik hang een andere kostenfunctie aan een bestaande motor. Het risico zit niet in de techniek. Het zit in of de gewichten kloppen met hoe mensen rust ervaren, en dat is te toetsen door de route te lopen en te vragen of hij klopte.
Er is ook een grens aan wat een kaart kan. Windstil kan je langs de stillere weg sturen. Het kan de wereld eromheen niet stiller maken. Op een dichtbebouwde plek is de kalmste route soms nog steeds druk, en dan is het beste dat de app kan doen het minst slechte kiezen. Dat is eerlijk om te zeggen. De belofte is een betere keuze binnen wat er ligt, en geen ontsnapping aan de omgeving zelf.
De Mandelbrotverzameling ontstaat uit een formule die op een bierviltje past, en toch is haar rand oneindig complex. Diezelfde fractale vorm zie je overal in de natuur terug, van varen tot kustlijn tot longblaasje, en de ingekleurde beelden zijn voor mij pure kunst. Wiskundige strengheid en visuele schoonheid in een.
De Mandelbrotverzameling is het bekendste voorbeeld van een fractal: een vorm die ontstaat uit een verbluffend simpele formule, z wordt z*z + c, herhaald op elk punt van het complexe vlak. Je begint bij nul, je vult een punt c in, en je kijkt wat er gebeurt als je de stap eindeloos herhaalt. Wie begrensd blijft, hoort bij de verzameling. Wie naar oneindig vliegt, valt erbuiten.
De grens daartussen is oneindig complex. Hoe dieper je inzoomt, hoe meer nieuwe structuren verschijnen, en het houdt nooit op. Je vindt kleine kopieën van de hele vorm, verbonden door draden die zelf weer vol detail zitten. Er is geen schaal waarop de rand glad wordt. Dat een regel die op een bierviltje past zo'n oneindige rijkdom voortbrengt, blijf ik fascinerend vinden.
Het bijzondere is dat de complexiteit nergens is opgeslagen. Ze staat niet in een tabel en is door niemand ingetekend. Ze volgt uit de herhaling zelf. De formule is kort, de gevolgen zijn onuitputtelijk. Dat is een idee dat ver buiten de wiskunde reikt. Een eenvoudige regel, keer op keer toegepast, kan iets voortbrengen dat je met geen mogelijkheid uit de regel had voorspeld.
Er zit ook een grens aan die voorspelbaarheid, en dat is een deel van de charme. Je kunt naar de formule kijken zolang je wilt, en toch niet zien wat er aan de rand gebeurt. De enige manier om het te weten te komen, is het uit te rekenen, punt voor punt. Er is geen kortere weg die je de vorm voorspelt zonder het werk te doen. Dat de uitkomst zo rijk is en de bron zo klein, zonder dat je de een uit de ander kunt afleiden zonder de stappen te zetten, is precies wat de Mandelbrot voor mij fascinerend maakt.
Het aardige is dat je de verzameling met een paar regels code zelf kunt uittekenen. De kern is de escape-time-methode: voor elk punt tel je hoeveel stappen het duurt voordat de baan wegloopt. Loopt hij binnen een vast maximum niet weg, dan reken je het punt tot de verzameling. Het aantal stappen dat een punt buiten de rand nodig heeft om te ontsnappen, bepaalt straks zijn kleur.
def escape_count(c, max_iter=1000):
z = 0
for n in range(max_iter):
z = z * z + c
if abs(z) > 2: # eenmaal buiten straal 2 loopt het altijd weg
return n
return max_iter # nooit ontsnapt: hoort bij de verzameling
# reken een rastertje uit over het complexe vlak
for iy in range(24):
row = ""
for ix in range(72):
re = -2.5 + 3.5 * ix / 72
im = -1.25 + 2.5 * iy / 24
n = escape_count(complex(re, im), 50)
row += " " if n == 50 else ".:-=+*#%@"[min(n // 2, 8)]
print(row)
Wie de code draait, ziet in de terminal een ruwe schets van de verzameling verschijnen, met de grote ronde romp links en de spitse punt die naar rechts wijst. Het is grof, want een raster van tekens is grof. Toch zit het idee er volledig in. Verhoog max_iter en verfijn het raster, en dezelfde regels tekenen de rand steeds scherper, tot in detail dat op het scherm van je scherm afvalt. De formule verandert niet. Alleen hoe nauwkeurig je hem uitrekent.
De grens bij straal 2 is niet willekeurig. Als de baan ooit verder dan 2 van de oorsprong komt, is wiskundig bewezen dat hij naar oneindig gaat. Je hoeft dus niet oneindig lang te rekenen om te weten dat een punt buiten de verzameling valt. Dat maakt de tekening haalbaar. max_iter is de enige echte concessie: punten die net binnen de rand liggen, hebben veel stappen nodig, en waar je het rekenen afkapt, bepaalt hoeveel fijn detail je nog ziet.
Wat de Mandelbrot en verwante fractals bijzonder maakt, is dat je diezelfde vorm overal in de natuur terugziet. De vertakking van een varen, de omtrek van een kustlijn, een bloemkool, de aders van een blad, de vertakking van je longen, de bliksem. Het zijn allemaal fractale patronen: een deel dat lijkt op het geheel, op elke schaal.
Benoit Mandelbrot, die de verzameling zijn naam gaf, noemde dit de meetkunde van de natuur, tegenover de gladde lijnen en bollen van de klassieke wiskunde. In zijn boek uit 1982, The Fractal Geometry of Nature, bracht hij dat idee samen. Hij had eerder al de beroemde vraag gesteld hoe lang de kust van Groot-Brittannië is. Het antwoord hangt af van de lengte van je meetlat. Meet je met een kortere lat, dan volg je meer bochten, en wordt de kust langer. Bij een echt gladde vorm loopt die lengte naar een vaste waarde. Bij een kustlijn blijft ze groeien. Dat is precies de handtekening van een fractal.
De natuur bouwt zelden met perfecte cirkels. Ze bouwt met vertakking en herhaling. Een boom die zich splitst, en elke tak die zich weer splitst, is goedkoper te beschrijven met een herhaalde regel dan met een lijst van elke twijg. De vorm is efficiënt. Misschien is dat de reden dat hij zo vaak opduikt.
Het groei-idee erachter is eenvoudig. Als een organisme één instructie kent, deel je en herhaal, dan hoeft het genoom niet elke tak apart op te slaan. Het slaat de regel op, en de vorm ontvouwt zich vanzelf tijdens de groei. Dat is dezelfde economie die je in de wiskundige fractal ziet. Weinig informatie vooraf, veel structuur achteraf. De long die zich vertakt tot een enorm oppervlak in een klein volume, lost zo een echt probleem op. Je moet veel lucht in contact brengen met veel bloed, in de ruimte van een borstkas. Een vertakkend, fractaal patroon is daar een zuinig antwoord op. De vorm is niet alleen mooi om te zien, hij doet werk.
En dan zijn er de visuals. Een ingekleurde Mandelbrot-zoom, waar de kleur laat zien hoe snel een punt ontsnapt, is voor mij pure kunst. De spiralen, de zeepaardstaarten, de eindeloze variatie langs de rand. In de code hierboven is de kleur nog een rijtje tekens, maar het principe is hetzelfde: het ontsnappingsgetal wordt een kleur, en de rand van de verzameling wordt zichtbaar als een band van gloeiend detail.
Er bestaan veel verschillende fractals naast de Mandelbrot, elk met een eigen karakter: de Juliaverzamelingen, de Sierpinski-driehoek, de Koch-sneeuwvlok. Allemaal delen ze diezelfde combinatie. Wiskundige strengheid aan de ene kant, en aan de andere kant een schoonheid die je alleen maar kunt bekijken en bewonderen. De strengheid en de schoonheid zijn hier één ding. De vorm is mooi doordat de wiskunde streng is, en niet ondanks.
Voor de zuiverheid een woord over bewijsniveaus, want die lopen in dit onderwerp door elkaar. De wiskunde is exact. Dat de formule z*z + c de verzameling voortbrengt en dat de rand oneindig gedetailleerd is, is bewezen en na te rekenen. Dat is het hardste niveau dat er is.
Dat de natuur fractale vormen vertoont, is een afgeleide, gemeten benadering. Het is te toetsen aan echte kustlijnen en varens, en binnen een bereik van schalen klopt het. Buiten dat bereik houdt het op. En dat de beelden kunst zijn, is mijn oordeel. Dat is een mening, en die presenteer ik ook als mening. Ik houd die drie uit elkaar, want dat de wiskunde exact is, maakt mijn esthetisch oordeel niet exacter, en dat ik de beelden mooi vind, maakt de wiskunde niet minder streng.
Ik neem de lezer mee en leg uit hoe een casus hem persoonlijk raakt. Niet denigrerend, geen mysterieuze terminologie, en niet zo technisch dat maar twee procent het echt snapt. En het blijft niet bij een verhaal: ik spreek bedrijven aan, zoek media-aandacht waar nodig, en draag het tot in de wetgeving en de Tweede Kamer. Een meetbaar verschil.
De vraag waarom mensen luisteren, beantwoord ik het liefst bij het begin. En het begin is de keuze van het onderwerp. Die keuze maak ik niet vanuit mezelf. De vanzelfsprekende blik is egoistisch. Welk bericht wil ik naar buiten brengen, wat wil ik overbrengen, wat maakt mij interessant. Op LinkedIn werkt bijna iedereen zo. Het platform staat vol met mensen die hun eigen boodschap de wereld in duwen.
Ik draai die vraag om. De vraag is niet wat ik kwijt wil. De vraag is waar de burger mee geholpen is. Dienen in plaats van zenden. Dat klinkt als een houding, maar het is een werkregel. Het bepaalt letterlijk welke casus ik oppak en welke ik laat liggen. Een schending die niemand raakt, is voor mij minder waard dan een schending die iedereen met een telefoon aangaat. Daardoor gaan mijn stukken over onderwerpen die er echt toe doen. En juist tegen al dat zenden in valt dat op.
De toets die ik daarbij aanleg is simpel. Kan ik in één zin uitleggen wat deze casus voor de gemiddelde lezer betekent? Als het antwoord ja is, is het de moeite waard. Als ik daarvoor drie alinea's nodig heb, gaat het waarschijnlijk over mij en over hoe knap ik iets heb gevonden. Die tweede categorie laat ik liggen, hoe interessant ze technisch ook is. Het gaat om de burger, en de burger heeft geen boodschap aan mijn techniek. Hij wil weten of zijn telefoon hem verraadt.
De tweede reden zit in de manier waarop ik het breng. Ik neem de lezer mee en leg uit hoe een casus hem persoonlijk raakt. Zijn telefoon, zijn huis, zijn kind. Geen denigrerende toon, geen mysterieuze terminologie, en niet zo technisch dat maar twee procent het echt snapt.
Dat laatste is het scharnierpunt. Veel technische stukken falen op één van twee manieren. Ze praten neer, waardoor de lezer zich betutteld voelt, of ze stapelen jargon, waardoor de lezer zich dom voelt. Beide jagen hem weg. Wie zich niet dom voelt en tegelijk merkt dat het over hem gaat, blijft lezen. Dat is de hele truc, en het is minder een truc dan een vorm van respect. Ik ga ervan uit dat de lezer het aankan als ik het helder genoeg maak.
Dat het werkt, is terug te zien in de cijfers. In een half jaar bijna zes miljoen impressies, ruim 1,18 miljoen bereikte mensen, en meer dan 62.000 interacties. Bewijsniveau: gemeten. Dit zijn platformcijfers die het dashboard zelf rapporteert. Wat ze aantonen is bereik en betrokkenheid. Wat ze niet aantonen is waaróm mensen bleven. Dat het aan de aanpak ligt en niet aan het toeval van een goed onderwerp, blijft een afgeleide. Ik heb het niet los kunnen meten.
De derde reden is de belangrijkste, en ze onderscheidt me van de meeste mensen die over dit soort dingen schrijven. Bij mij blijft het niet bij een verhaal. Ik spreek bedrijven rechtstreeks aan. Ik zoek media-aandacht waar dat nodig is. En ik draag bevindingen tot in de wetgeving en de Tweede Kamer.
Dat gebeurt langs een ladder. Eerst de meting en de publicatie. Dan de betrokken organisatie, die ik rechtstreeks aanspreek en de kans geef om te reageren. Dan de media, als de zaak groot genoeg is en de organisatie niet beweegt. En als laatste trede de politiek en de wetgeving, waar een bevinding kan uitgroeien tot een vraag die een minister moet beantwoorden. Elke trede voegt druk toe, en elke trede is controleerbaar. Ik verzin geen verontwaardiging. Ik laat de feiten van trede naar trede lopen tot iemand met bevoegdheid moet reageren.
Het scherpste voorbeeld is een meting van een half uur in mijn eigen browser. Binnen dagen werd dat twaalf Kamervragen. En de betreffende tracker ging daarna daadwerkelijk uit. Bewijsniveau van de keten: deels gemeten, deels afgeleid. Dat de tracker liep, is gemeten. Dat de Kamervragen kwamen, is publiek. Dat de tracker uitging na de druk, is te controleren. Dat mijn meting de oorzaak was van die hele beweging, is aannemelijk gezien de volgorde, maar ik presenteer het als afgeleide en niet als een gesloten bewijs. De keten liep via anderen, en die schakels beschrijf ik apart in Eén journalist staat tussen belangrijke kennis en achttien miljoen mensen.
Wat het geheel geloofwaardig maakt, is dat er iets verandert. Een tracker die uitgaat. Een Kamervraag die volgt. Een boete-risico dat wordt benoemd. Een schending die wordt gemeten, gemeld, gestopt en erkend. Mensen luisteren omdat het niet bij woorden blijft. Er komt een uitkomst achteraan die je kunt aanwijzen.
Dit is ook wat mijn werk beschermt tegen de belangrijkste beschuldiging die je aan een privacy-onderzoeker kunt maken. Namelijk dat het bangmakerij is. Bangmakerij eindigt bij het gevoel. Mijn stukken eindigen bij een verandering die iemand anders kan narekenen. Dat verschil is precies waarom een organisatie mij moeilijker kan wegzetten dan een boze post.
Het maakt de verhouding met de lezer ook duurzaam. Wie één keer heeft gezien dat een stuk van mij tot een echte verandering leidde, leest het volgende stuk met vertrouwen. Dat vertrouwen is opgebouwd uit uitkomsten, en het is daardoor moeilijk te imiteren. Een enkele virale post kan iedereen hebben. Een reeks bevindingen die stuk voor stuk ergens toe leidden, kost jaren en is niet te vervalsen. Dat is het kapitaal waar het bereik op rust, en het verklaart waarom het bereik niet wegzakt zodra een onderwerp uit de mode is.
Ik houd hier zelf iets aan over. De drie redenen, de onderwerpkeuze vanuit de burger, de heldere uitleg, en de opvolging tot in de politiek, zijn geen aparte talenten. Ze zijn drie kanten van dezelfde regel. De regel is dat het over de lezer moet gaan en dat het ergens toe moet leiden.
Zodra ik die regel loslaat, zakt het weg. Een stuk dat vooral laat zien hoe knap ik iets heb gemeten, doet het slechter dan een stuk dat laat zien wat die meting voor de lezer betekent. Ik merk dat aan de cijfers en aan de reacties. Het corrigeert me. Als een bericht het goed doet, is dat bijna altijd omdat de burger er zichzelf in herkende. Als het wegzakt, is dat bijna altijd omdat ik te dicht bij mezelf bleef.
Dat maakt de vraag uit de titel bijna simpel. Mensen luisteren omdat ik luister voordat ik schrijf. Ik kijk eerst waar ze staan, ik meet iets dat hen raakt, ik leg het uit zonder ze klein te maken, en ik zorg dat er iets verandert. De rest volgt daaruit. Dit vraagt geen bijzonder talent. Het is een volgorde die ik aanhoud, en die volgorde kan iedereen aanhouden die bereid is de burger voorop te stellen en de meting te laten spreken.
Eén journalist staat tussen belangrijke kennis en achttien miljoen mensen
Als een journalist van NRC je werk interessant vindt, gaat de wereld voor je open: Tweakers, NRC en Security.NL volgen, en zo bereikte de Belastingdienst-zaak zelfs de Tweede Kamer. Maar dat is ook eng. Geen directeur, geen toezichthouder, geen inlichtingendienst, maar één enkele journalist staat tussen belangrijke kennis en achttien miljoen Nederlanders.
Er zit een merkwaardig mechanisme in de verspreiding van kennis. Zodra een schrijfster van NRC je werk interessant vindt en besluit erover te publiceren, gaat de wereld voor je open. Wat daarna volgt is een keten. Tweakers pikt het op, NRC publiceert, Security.NL neemt het over. Eén enkele beslissing zet een lawine in gang.
Ik heb dat van dichtbij gezien. Het gaat niet geleidelijk. Er is een drempel, en zolang je die drempel niet over bent, gebeurt er weinig, hoe goed je meting ook is. Zodra je hem wel over bent, versnelt alles tegelijk. Dat is geen natuurwet. Het is het gevolg van hoe de Nederlandse mediaketen op elkaar reageert. De ene redactie kijkt naar de andere.
Dat kijken naar elkaar is de motor. Een vakblad als Tweakers ziet dat NRC iets serieus neemt, en neemt het daardoor zelf ook serieus. Security.NL ziet dat beide erover schrijven, en pikt het op. Elke schakel gebruikt de vorige als bewijs dat het de moeite waard is. Dat maakt het bereik groot, en het maakt het ook kwetsbaar, want de hele keten hangt aan die eerste beslissing. Trekt de eerste redactie zijn interesse in, dan valt er niets aan te wijzen dat de rest alsnog in beweging zet.
Neem de Belastingdienst. Ik mat dat er een Adobe-tracker liep en publiceerde het. Bewijsniveau: gemeten. De tracker stond in mijn eigen waarneming van het verkeer, dat is te controleren. Toch bleef het aanvankelijk liggen. Pas toen een NRC-journalist het oppakte, ging het echt rollen. Tweakers, Security.NL, en uiteindelijk de Tweede Kamer met twaalf Kamervragen. Daarna ging de tracker uit en volgde erkenning.
Het contrafeitelijke is het scherpst. Had die ene journalist het niet interessant gevonden, dan was er geen keten geweest. Geen Kamervragen, geen verandering door druk van het volk. Bewijsniveau: afgeleid. Ik kan niet meten wat er zou zijn gebeurd in een wereld waarin de journalist wegkeek. Maar het patroon is consistent. Zonder de mediaschakel blijft de meting een bericht dat een paar honderd vakgenoten zien. Met de schakel wordt het een politiek feit.
Let op wat hier precies de doorslag gaf. De meting was in beide werelden identiek. De Adobe-tracker liep, of NRC nu belde of niet. Wat de uitkomst bepaalde, was iets buiten de inhoud, namelijk de interesse van één redactie. Dezelfde feiten, twee totaal verschillende uitkomsten, en het verschil zat in een keuze waar ik geen invloed op had. Dat is precies waarom deze zaak me bijbleef. Ze laat de macht van de schakel zien op het moment dat je hem het minst verwacht, want de feiten waren rond en toch hing alles aan een telefoontje.
En daar zit meteen het ongemakkelijke. Die ene beslissing werkt als een poortwachter. Geen directeur bepaalt of belangrijke kennis het publiek bereikt. Geen toezichthouder, geen inlichtingendienst. Het is een journalist van NRC die het bepaalt. Eén persoon staat tussen de waarheid over onderwerpen die ertoe doen en achttien miljoen Nederlanders. Vindt die persoon het niet interessant, dan blijft het liggen, hoe zorgvuldig het ook gemeten is.
Dat is een structureel feit over hoe kennis in Nederland zijn weg vindt. Het is niet de schuld van de journalist. Het is de vorm van het systeem. De persoon is toevallig, de positie is dat niet. Er zit een flessenhals in de keten, en wie in die flessenhals staat, heeft macht die niet in verhouding staat tot de rol. Een enkele redacteur beslist mee over wat een land wel en niet te weten komt.
Wat hier gebeurt, is in de kern vriendjespolitiek en macht, gebundeld in één keten. Wie je kent en wie jou interessant vindt, bepaalt of je meting het publiek haalt. Dat is ongelofelijk vreemd om van dichtbij mee te maken. Je hebt het werk gedaan, de meting klopt, en toch hangt de uitkomst aan de smaak van een handvol mensen.
En toch raakt het me niet meer of ik nog eens word gevraagd. Dat komt door wat er daarna vaak gebeurt. Mijn stukken worden overgenomen en in eigen woorden achter de NRC-paywall gezet. Werk dat ik juist open en gratis deel, verdwijnt dan achter een betaalmuur. Alleen wie bij NRC betaalde, kon het lezen. Zo bezien informeert de media het volk niet eens meer. Op zijn best vermaakt ze het volk selectief. Wat gratis en controleerbaar begon, wordt een product dat je moet kopen.
Ik schrijf dit zonder rancune, want het is de logica van het bedrijf. Een krant leeft van betalende lezers, dus zet ze haar verhalen achter een muur. Dat is voor de krant verstandig. Het effect op de verspreiding van kennis is alleen wrang. De bevinding was van iedereen op het moment dat ik hem publiceerde. Nadat de keten hem heeft opgepakt, is diezelfde bevinding voor een deel van het publiek weer weggesloten. De informatie is niet groter geworden door de media. Ze is opnieuw verdeeld, en de verdeling volgt wie betaalt.
Dit is precies waarom ik zelf blijf publiceren, controleerbaar en voor iedereen toegankelijk. Als ik afhankelijk word van de keten, geef ik de beslissing over wat het publiek bereikt uit handen. Door mijn werk open te zetten, houd ik één ding overeind. De burger kan altijd bij de bron. De redactie mag kiezen wat ze overneemt, de betaalmuur mag doen wat hij doet, en de meting blijft ondertussen gewoon staan waar iedereen erbij kan.
Dat lost de flessenhals niet op. Voor echt bereik heb ik de keten nog steeds nodig, en dat blijft een afhankelijkheid die ik niet in de hand heb. Maar het verkleint de schade. Ik kan niet afdwingen dat men luistert. Ik kan wel afdwingen dat wie wil luisteren, niet eerst langs een poortwachter of een betaalmuur hoeft. Zolang de bron open ligt, bepaalt niet één redactie in mijn plaats of de burger het te zien krijgt.
Er is nog een reden om het zo te doen. Een open bron is ook een controle op de keten zelf. Als een krant mijn bevinding overneemt en er iets aan verdraait, kan iedereen het teruglezen bij de bron en de twee vergelijken. De macht van de poortwachter is het grootst als niemand kan nakijken wat er in de flessenhals met de feiten is gebeurd. Door de meting open te laten liggen, geef ik de lezer het gereedschap om dat na te lopen. De keten mag het verhaal vertellen zoals ze wil. De feiten staan er ondertussen naast, onbewerkt, voor wie de moeite neemt.
Eigen ervaring met wederhoor en publicatie, 2026de route van een bevinding naar een landelijk bereik loopt via een redactie
gepubliceerdnotitiezekerSoftware en apparatenbronnenverwant
Een echte beschermlaag en een lek zitten in dezelfde app
Een app kan een echte beschermlaag inbouwen en tegelijk de code van grote techbedrijven aan boord hebben. Het een heft het ander niet op. Een goede maatregel op een plek zegt niets over de rest van de app.
Een cyclus-app weet wanneer je ongesteld bent, wanneer je vruchtbaar bent, of je probeert zwanger te worden, en vaak ook wanneer je seks hebt gehad. Dat is precies het soort gegeven waarvan je wilt weten waar het terechtkomt. Ik heb de Android-versie van drie populaire apps ontleed en in één onderzoek naast elkaar gelegd.
Lees dit eerst. Dit is een statische analyse van juni 2026, aangevuld met een controle of de gevonden bestemmingen live zijn. Ik heb niet ingelogd en niet live meegekeken met het verkeer. Ik heb de apps zelf uit elkaar gehaald: het installatiebestand, de rechten die ze vragen, de bibliotheken die erin zitten en de adressen die in de code staan. Dat vertelt je waar een app voor gebouwd is en met wie het kan praten. Het vertelt je niet of elke regel ook precies op moment X afgaat. Dat verschil benoem ik overal.
Alle drie apps vragen de advertentie-identifier van je toestel. Daarna lopen ze ver uiteen.
Clue houdt de rest grotendeels in Europa en draagt geen advertentienetwerk en geen Meta-SDK. Flo legt een echte privacy-laag aan, maar bundelt tegelijk de SDK's van Meta, TikTok, AppsFlyer en Google, en vraagt de meest intieme gezondheidsrechten. Clover stuurt analytics, login en betalingen tot in Rusland. En in geen van de drie zit een herkenbaar toestemmingsframework.
Wat je toevertrouwt
Het gaat niet om je grootste nieuws, maar om je gewoonste
Het beeld bij gezondheidsapps is vaak: straks weten ze dat je zwanger bent. Maar de echte reikwijdte is breder, en ongemakkelijker. Wie een kinderwens heeft, of gewoon haar cyclus volgt, houdt veel meer bij dan een paar data. Deze apps vragen, dag na dag, hoe zwaar je menstruatie is, of je seks had en of het beschermd was, of er een orgasme was, hoe je libido is, je stemming, je krampen, je cervixslijm, je temperatuur.
En die gegevens blijven niet liggen waar je ze invoert. In de advertentie- en databroker-economie ben je geen persoon, maar een doelgroep. Zo zou je eruit kunnen zien:
audience_export_NL.xlsxdoelgroep · Nederland
Vrouw · had gisteren seks, niet klaargekomen
afgeleid signaal
Buy profile
1.284 bought this already
Vrouw · probeert zwanger te worden
100.000 profielen
Buy profile
3.907 bought this already
Vrouw · waarschijnlijk binnenkort zwanger
voorspeld
Buy profile
612 bought this already
Bereikbare doelgroep± 1.500.000 vrouwen
Ter illustratie. Geen echte export uit Clue, Flo of Clover, maar de logica van de doelgroep-handel die hun trackers met data voeden.
Het schrijnende zit niet in één dramatisch moment. Het zit in het gewone, verhandelbaar gemaakt. Niet "ze weten mijn grootste nieuws", maar "ik sta te koop als vrouw die gisteren seks had". Dat is wat niemand op straat wil hebben liggen. En toch schrijft Flo "seksuele activiteit" via Health Connect weg, zwart op wit in de rechten die de app vraagt.
Van techniek naar betekenis
Wat er weggaat, en wat het over je zegt
De volledige lijst, vertaald van techniek naar betekenis. Links wat er vertrekt, rechts wat iemand daaruit kan aflezen over jou en je leven.
Wat er weggaat
Wat het over jou zegt
Wat je invoert, naar de eigen backend (bij Flo deels via Health Connect)
Menstruatiedagen en hoeveelheid
je cyclus en of die regelmatig is, een hint over je gezondheid
Vruchtbare dagen en ovulatie
of en wanneer je vruchtbaar bent
Seks, en of het beschermd was
je seksleven en je seksfrequentie
Orgasme en libido
intieme details over je seksualiteit
Zwanger proberen, zwanger, of verloren
je kinderwens, een zwangerschap, of een miskraam of abortus
Anticonceptie
of en hoe je voorbehoedsmiddelen gebruikt
Stemming, klachten, pijn
je mentale en lichamelijke gezondheid, dag na dag
Identiteit en apparaat, naar de SDK's van Google, Meta, en bij Clover Yandex en VK
De advertentie-ID van je toestel
koppelt al je gedrag aan een herkenbaar profiel
Account- en inloggegevens
koppelt het cyclusprofiel aan jou als persoon
App-gebruik en gebeurtenissen
wanneer en hoe je de app gebruikt, je dagritme
Crash- en sessiedata
technisch, soms een beeld van je scherm
Attributie: welke advertentie je binnenbracht
welke campagne je raakte, voor gerichte reclame
Op zichzelf zegt "late menstruatie" of "stemming somber" weinig. De waarde, en het risico, zit in de optelsom: een getimed, intiem beeld van je lichaam en je relatie, gekoppeld aan een naam en een toestel.
Waarom dit anders is
Niet alleen privacy. Autonomie.
Een vrouw vertrouwt een cyclus-app iets toe wat ze misschien niet eens met haar werkgever, haar ouders, de overheid, haar verzekeraar of haar partner zou delen. En die app kan dat behandelen als handelswaar. Daar zit een dubbele schending.
Eerst wordt iets extreem intiems verzameld: wanneer je menstrueert, wanneer je vruchtbaar bent, of je seks hebt, of je zwanger probeert te worden, of je het bent geweest, je klachten, je pijn, je stemmingen, je anticonceptie, misschien een miskraam of een abortus. Daarna kan diezelfde informatie uit de context worden getrokken. Jij voert het in als zelfzorg. Buiten je zicht kan het een profiel worden dat commercieel, politiek, medisch, juridisch of zelfs geopolitiek bruikbaar is.
De wrangheid: wat bedoeld is om een vrouw meer regie over haar lichaam te geven, kan juist het instrument worden waarmee anderen iets over haar lichaam te weten komen. In jouw telefoon betekent een late menstruatie stress, of een kinderwens, of angst. In een datasysteem wordt het een signaal dat een vreemde mag duiden. En in situaties waar zwangerschap, abortus of seksualiteit politiek, religieus of juridisch beladen zijn, is zulke data niet neutraal. Dan wordt informatie over je lichaam macht over jou.
Een cyclus-app belooft: begrijp je lichaam.
Achter de schermen kan ze ook iets anders betekenen: maak je lichaam begrijpelijk voor anderen. De meest persoonlijke vorm van zelfkennis, omgezet in bezit van onbekenden.
Wat ze delen
Drie apps, en toch dezelfde advertentie-ID
De drie apps verschillen sterk, maar twee dingen hebben ze gemeen. Geen van de drie vraagt een locatiepermissie, dat is netjes. En alle drie vragen wel de advertentie-identifier (AD_ID) en de attributie-rechten van Androids Privacy Sandbox. Ook Clue, de app met de beste privacyreputatie, doet dat in de actuele versie, terwijl een oudere versie die ik ernaast legde dat recht nog niet vroeg. De advertentie-ID is het unieke nummer waarmee je toestel herkenbaar is voor advertentiedoeleinden. Dat een cyclus-app dat nummer opvraagt, is geen kleinigheid.
Het echte verschil zit in hoeveel derde partijen er meeluisteren. Ik heb per app geteld hoeveel externe diensten gegevens kunnen ontvangen, op basis van de ingebouwde bibliotheken. Het verschil is groot.
Clue4
Braze, Adjust, Datadog, Firebase
Flo6
Firebase, AppsFlyer, TikTok, Meta, Sentry, Auth0
Clover12
vier advertentienetwerken, Adjust, Amplitude, Firebase, Meta, Yandex, VK, YooMoney, SberPay
Externe diensten per app. Het aantal derde partijen dat gegevens kan ontvangen, geteld uit de bibliotheken in de app. Clue draagt er vier, Clover twaalf.
En er is iets wat in geen van de drie zit: een herkenbaar toestemmingsframework. Ik vond in geen enkele app een Consent Management Platform of de IAB-standaard voor transparantie en toestemming (geen Didomi, OneTrust, Usercentrics, Sourcepoint of Google UMP). Dat betekent dat de toestemmingsvraag, voor zover die er is, in de app zelf wordt afgehandeld en niet als gestandaardiseerd signaal naar de advertentiepartners wordt doorgegeven. Voor een categorie zo gevoelig als deze is dat een opvallende leegte.
De kaart
Het meeste gaat naar de VS, bij Clover ook naar Rusland
Alle drie apps sturen tracking en telemetrie naar verwerkers onder Amerikaans recht: Google en Firebase bij alle drie, en afhankelijk van de app ook Meta, TikTok, AppsFlyer, Braze, Datadog, Sentry, Auth0 en Amplitude. Clue houdt zijn functionele inhoud daarbij in de EU. Clover voegt er een hele laag aan toe die in Rusland eindigt.
De datastromen. Petrol is functioneel en blijft in Europa. De oranje bogen zijn tracking richting de Verenigde Staten, bij alle drie apps. De gestippelde rode bogen zijn de Russische laag, en die zit alleen in Clover. Bestemmingen geverifieerd via DNS, IP-geolocatie en het TLS-certificaat van de ontvanger.
Endpoints van Google worden via anycast vaak op een Europese rand-server geraakt, dus fysiek reist je data soms niet de oceaan over. Maar de partij die de gegevens ontvangt en verwerkt is het buitenlandse moederbedrijf, en dat valt onder buitenlands recht. Voor de vraag wie er bij je data kan, telt de verwerker, niet alleen de plek van de kabel.
Clue
BioWink, Berlijn. De soberste stack. Eigen API in de EU, gepind. Geen advertentienetwerk, geen Meta. Wel sinds kort de advertentie-ID. EUVS
Flo
Flo Health, VS. Privacy-laag via Anonymous Mode, maar met Meta, TikTok, AppsFlyer en Google aan boord. De breedste gezondheidsrechten. VS
Clover
Wachanga. Vier advertentienetwerken plus een complete Russische laag: Yandex, VK, YooMoney, SberPay. EUVSRU
App 01
Clue, de soberste, maar niet leeg
Clue maakt zijn reputatie grotendeels waar. De inhoud, je cyclus en symptomen, gaat naar een eigen API (api.helloclue.com) die op Amazon-infrastructuur in Europa draait, en die verbinding is extra beveiligd: de app pint het certificaat met vijf vingerafdrukken, zodat onderschepping veel moeilijker wordt. Artikelen komen via een contentdienst binnen. Er zit geen advertentienetwerk in, en geen Meta-SDK.
Jouw toestelClue 256.0
→
api.helloclue.comeigen API, AWS EUContentfulcontentAdjustattributie, DEBrazeengagement, VSDatadogmonitoring, VSFirebase / GA4Google, VS
Clue. Petrol blijft in Europa, oranje gaat naar de VS. De tracking-laag is beperkt tot engagement, attributie en monitoring.
Toch is sober niet hetzelfde als leeg. Clue draagt een marketing- en meetlaag mee die naar Amerikaanse bedrijven wijst: Braze voor klantbenadering, op een datacenter aan de Amerikaanse oostkust, Datadog voor monitoring, en de Firebase- en Google Analytics-bouwstenen. Attributie loopt via Adjust, dat zijn servers in Duitsland heeft. De app vraagt sinds kort ook de advertentie-ID en leest een beperkte set biometrie via Health Connect (hartslagvariabiliteit, rusthartslag, huidtemperatuur, slaap, gewicht), maar uitsluitend lezen, en niet de menstruatie- of seksuele-activiteit-categorieën. Het beeld: de privacyvriendelijkste van de drie, maar ook hier deelt de app gedrag en engagement met Amerikaanse verwerkers.
Bewijs. In de code aangetroffen: com/braze (477 class-referenties), com/adjust/sdk (246), com/datadog (53), Firebase en GA4. Endpoints: sdk.iad-01.braze.com (Braze, VS-oost), app.adjust.com (Adjust GmbH, Duitsland), api.helloclue.com (AWS, EU, certificaat gepind). Geen Meta-SDK aangetroffen.
Toon alle diensten en endpoints van Clue
Dienst of endpoint
Wat het doet
Waar
api.helloclue.com
eigen API: cyclus, symptomen, account (certificaat gepind)
Permissies: advertentie-ID plus AdServices-attributie, biometrie, push, install-referrer, Play Billing. Geen locatie, geen Meta-SDK.
App 02
Flo, een privacy-laag bovenop een brede tracker-set
Flo is het interessantste geval, want het trekt twee kanten op tegelijk. Na een schikking met de Amerikaanse toezichthouder FTC in 2021, over het delen van gezondheidsdata met onder andere Facebook en Google, investeerde Flo zichtbaar in privacy. De app heeft een Anonymous Mode die telemetrie via een speciale gateway stuurt, een techniek waarbij Flo de gegevens niet aan een IP-adres of identiteit kan koppelen. Die gateway is er echt en antwoordt live.
Flo. De eigen backend en alle trackers staan onder Amerikaanse jurisdictie. De privacy-gateway is een laag bovenop diezelfde infrastructuur.
Tegelijk draagt diezelfde app in 2026 nog steeds de SDK's van Meta, TikTok, AppsFlyer en Google mee, plus Sentry voor crashes en Auth0 voor inloggen. En Flo vraagt de breedste, gevoeligste set rechten van de drie. Via Health Connect leest het negentien categorieën, waaronder menstruatie, tussentijdse bloedingen, cervixslijm, ovulatietesten en seksuele activiteit, en het schrijft er zes terug, waaronder opnieuw seksuele activiteit, cervixslijm en ovulatietesten. De spanning is dus reëel: de verzendinfrastructuur naar advertentie- en analytics-partijen zit ingebouwd, en de privacy-laag bepaalt hoeveel daarvan herleidbaar blijft. Welke van de twee wint bij een concrete handeling, is precies wat een statische analyse niet kan beslissen.
Bewijs. In de code aangetroffen: androidx/health/connect (1068 class-referenties, lezen 19 plus schrijven 6 categorieën inclusief seksuele activiteit), io/sentry (1046), com/appsflyer (477), Firebase en GA4 (452), com/tiktok (127), com/facebook (98), com/auth0 (82). De privacy-gateway ohttp-gateway-bhttp-public.owhealth.com antwoordt live (HTTP 200). Backend owhealth.com onder Amerikaanse jurisdictie.
Permissies: advertentie-ID plus AdServices, activity recognition, basic phone state, biometrie, en Huawei- en Samsung-integraties.
App 03
Clover, advertenties plus een Russische laag
Clover is een gratis app die op advertenties draait, en dat is in de code goed te zien. Er zitten vier advertentienetwerken in: Google AdMob, met aanvulling via AppLovin, ironSource en Fyber. Daarnaast Adjust voor attributie, Amplitude en Firebase voor analytics, en de Meta-SDK. Voor een gevoelige gezondheidsapp is dat al een volle commerciële stapel.
Clover. Naast de Amerikaanse advertentie- en analytics-laag staat een complete Russische laag: analytics, sociale login en twee betaalsystemen.
Daarbovenop staat iets wat ik bij de andere twee niet zag: een uitgebreide Russische laag. De app bevat Yandex AppMetrica voor analytics, VK voor sociale login, en de volledige account- en betaal-SDK's van YooMoney en SberPay. De bijbehorende adressen draaien op typisch Russische webservers, wat de operators bevestigt. De app staat bovendien onversleuteld verkeer toe naar een YooMoney-domein, een uitzondering op het verder versleutelde geheel. En er zit een ingebouwde, merk-gesponsorde vragenlijst in: een complete Kotex-flow die naar je cyclus vraagt. Of de Russische componenten bij een Nederlandse gebruiker actief worden, hangt af van regio en server-instellingen, maar de code wordt onverkort meegeleverd. Het is de breedste jurisdictie-spreiding van de drie, in de meest gevoelige datacategorie.
Bewijs. In de code aangetroffen: ru/yoomoney (7006 class-referenties), io/appmetrica (Yandex, 2041), gms/ads (AdMob, 673) met aanvulling via AppLovin, ironSource en Fyber, com/adjust/sdk (268), SberPay via gate1.spaymentsplus.ru, com/vk (29), com/facebook (26). Cleartext toegestaan naar certs.yoomoney.ru. Resources bevatten een Kotex-vragenlijst (kotex_assessment_*).
Toon alle diensten en endpoints van Clover
Dienst of endpoint
Wat het doet
Waar
cdn.wachanga.app
eigen CDN (Caddy)
Hetzner, DE
AdMob googleads.g.doubleclick.net, plus AppLovin, ironSource, Fyber
advertenties en mediation (673)
VS
Adjust app.adjust.com
attributie (268)
DE
Amplitude
analytics
VS/EU
Firebase / GA4
analytics (608 + 460)
VS
Meta / Facebook-SDK
events (26)
VS
Yandex AppMetrica appmetrica.io
analytics (2041)
RU
VK id.vk.com
sociale login (29)
RU
YooMoney, YooKassa, SberPay spaymentsplus.ru
betalingen en account (7006 + 344)
RU
Permissies: advertentie-ID plus AdServices en de Topics-API, READ_PHONE_STATE. Cleartext toegestaan naar certs.yoomoney.ru. Ingebouwde Kotex-vragenlijst.
Naast elkaar
De vergelijking
Clue
Flo
Clover
Identiteit en rechten
Maker
BioWink (DE)
Flo Health (VS)
Wachanga
Advertentie-ID
ja
ja
ja, plus Topics-API
Locatie
nee
nee
nee
Health Connect
lezen, beperkt
lezen 19, schrijven 6, incl. seksuele activiteit
geen
Tracking en geld
Advertentienetwerk
geen
geen
vier
Meta-SDK
nee
ja
ja
TikTok-SDK
nee
ja
nee
Attributie
Adjust (DE)
AppsFlyer (VS)
Adjust (DE)
Analytics
Firebase, Braze, Datadog
Firebase, Sentry
Firebase, Amplitude, Yandex
Login en betalen
eigen, Play Billing
Auth0, Play Billing
VK, YooMoney, SberPay
Governance
Toestemmingsframework
geen
geen
geen
Cert-pinning eigen API
ja, 5 pins
niet zichtbaar
nee
Jurisdicties
EUVS
VS
EUVSRU
Zelf doen
Wat je kunt doen zonder je app op te geven
Kies bewust. Wil je het soberst, dan is Clue van de drie de minst vergaande: geen advertentienetwerk, geen Meta-SDK, en je inhoud blijft in Europa.
Reset je advertentie-ID. Alle drie apps vragen die identifier. In de Android-instellingen onder Privacy kun je hem wissen, en je kunt gepersonaliseerde advertenties helemaal uitzetten.
Wees zuinig met Health Connect. Vooral bij Flo bepaalt Health Connect hoeveel intieme categorieën de app mag lezen en schrijven. Geef alleen toegang tot wat je echt nodig hebt, en trek het later weer in als je twijfelt.
Gebruik de privacymodus als die er is. Flo's Anonymous Mode bestaat echt en helpt. Zet hem aan als je Flo gebruikt.
Denk na over de gevoeligste invoer. Een app die niet weet of je zwanger probeert te worden, kan dat ook niet doorgeven. Niet alles hoeft erin.
Conclusie
Drie apps voor dezelfde, uiterst gevoelige taak, en drie heel verschillende antwoorden op de vraag waar je data heen gaat. Clue houdt het Europees en sober, al vraagt ook deze app inmiddels de advertentie-ID. Flo bouwt een echte privacy-laag, maar bovenop een infrastructuur die nog vol zit met de SDK's van advertentie- en socialmediabedrijven, en het vraagt de meest intieme gezondheidsrechten. Clover spreidt analytics, login en betalingen uit over drie jurisdicties, tot in Rusland, en draagt vier advertentienetwerken mee.
Geen van deze keuzes is een ongeluk, het is hoe de apps zijn gebouwd. En het is precies het soort keuze dat iemand die elke dag haar cyclus invoert zou moeten kunnen wegen. Dit dossier legt die keuzes naast elkaar op tafel.
Addendum, 12 juni 2026
Bestaat er dan wél een veilige? Ja: drip.
drip. kan je gegevens niet doorverkopen, want de app kan ze technisch niet eens versturen.
De logische vervolgvraag op dit dossier is: is er dan een menstruatie-app die het wél goed doet? Die is er. drip. is gratis, open source, en gemaakt door een non-profit (Heart of Code). Ik heb hem op dezelfde manier ontleed, en ook echt op een testtelefoon laten draaien.
Het verschil met Clue, Flo en Clover zit in één detail dat alles bepaalt: drip vraagt niet eens toestemming om het internet te gebruiken. Een Android-app die dat recht niet heeft, kan geen enkele verbinding naar buiten openen. Geen advertentienetwerk, geen analytics, geen server in de VS of Rusland, want er is simpelweg geen weg naar buiten. Op de testtelefoon verstuurde de app dan ook nul bytes, terwijl dat toestel verder gewoon online was.
Alles wat je invoert, van menstruatie tot temperatuur, seks en stemming, blijft in een database op je eigen telefoon. Geen account, geen advertentie-ID, geen cloud, en geen enkele meet- of reclamebibliotheek in de app. Je kunt drip op slot zetten met een pincode en je gegevens laten versleutelen. En omdat de broncode openbaar is, kan iedereen dit zelf nakijken in plaats van een privacybelofte te moeten geloven.
Eerlijk over de keerzijde. drip is soberder van opzet: er is geen synchronisatie tussen apparaten en geen cloud-back-up, dus raak je je telefoon kwijt zonder eerst te exporteren, dan ben je je gegevens kwijt. En je data staat standaard onversleuteld op het toestel; zet de pincode en versleuteling zelf aan als je dat wilt. Een back-up maak je met de exportknop, en jij bepaalt waar dat bestand heen gaat.
Methode en reproductie
Onderzocht: Clue 256.0 (com.clue.android), Flo 9.106.0 (org.iggymedia.periodtracker) en Clover 7.32.1 (com.wachanga.womancalendar), Android, actuele releases. Statisch: het manifest en de resources zijn met apktool gedecodeerd (rechten, exported componenten, deeplinks, network-security-config), en de SDK-inventaris en endpoints zijn uit de dex-bestanden gehaald via class-signatuur-matching en string-extractie. Dynamisch, zonder toestel: elke ontdekte bestemming is via DNS opgezocht, gegeolokaliseerd, en geverifieerd met een live HTTP-respons en het TLS-certificaat van de operator. Niet gedaan: een ingelogde, live verkeersmeting die laat zien welke velden op welk moment vuren. De aantallen class-referenties zijn een maat voor het gewicht van een bibliotheek in de code, geen verkeersmeting. De apps zijn legaal verkregen en op een eigen omgeving geanalyseerd.
Verantwoording. Statische APK-analyse met endpoint-verificatie, juni 2026. Bevindingen reproduceerbaar; serverlocaties geverifieerd op het moment van schrijven. Onderzoek via mickbeer.com.
gepubliceerdnotitiezekerOverheid, toezicht en de wetverwant
Geen weigerknop is geen keuze
Toont de eerste laag van een toestemmingsvenster geen weigerknop naast de accepteerknop, dan is er geen vrije keuze. Wat ik dan als weigering meet, is feitelijk alleen het uitblijven van een klik. Dat ontbreken is zelf een bevinding, geen leemte in de meting.
"Alle vier geteste sites missen een directe weigerknop op de eerste laag. Gezamenlijk bereik: 2,6 miljard bezoeken per jaar." Als accepteren een klik is en weigeren verstopt zit achter lagen, dan is er geen echte keuze. Dan is toestemming een vormpje.
Ik testte Volkskrant (DPG) en Telegraaf (Mediahuis) en klikte overal "alles weigeren". Bij Volkskrant bleven daarna 16 cookies staan, waaronder TID_ID en _vwo_uuid_v2 (Wingify), plus 40 verzoeken naar adnxs-simple.com (AppNexus). Bij Telegraaf bleef cs_fpid staan (ContentSquare, een looptijd van 34 jaar) en _mhtc_cId. De gewone Google Analytics-cookies werden daar wel netjes verwijderd, wat aantoont dat het kan en dus een keuze is wat blijft staan.
"Dezelfde -3 partner-discrepantie verscheen bij alle drie commerciele sites (NU.nl: 104->101, Volkskrant: 106->103, Telegraaf: 130->127). Dit patroon suggereert een gedeelde praktijk in de industrie." Het is dus geen incident per site, maar een recept.
Ik meldde de bevindingen bij de AP op 25 maart, referentie 7cb0-9871. De boete-ranges liggen niet laag: Volkskrant EUR 400k-1M, Telegraaf EUR 600k-1.5M.
Onderzoek naar AVG-compliance bij Nederlandse nieuwssites
Dit artikel documenteert technische tests van twee Nederlandse nieuwssites op naleving van privacyregels rond cookie-toestemming. De auteur onderzocht De Volkskrant (DPG Media) en De Telegraaf (Mediahuis) met dezelfde methodologie als eerder onderzoek naar NOS.nl en NU.nl.
Testmethodologie
Voor beide sites voerde de auteur uit:
Wissen van alle cookies via Firefox
Laden in schoon browserprofiel
Opnemen van HAR-bestanden (volledig netwerkverkeer)
Exporteren van cookiestore na “Alles weigeren”
Inspectie van opslag via DevTools
De Volkskrant: bevindingen
De Volkskrant gebruikt hetzelfde consent-platform als NU.nl: myprivacy.dpgmedia.nl. Het consent-scherm vertoont:
Primaire “Akkoord”-knop (geel, groot)
“Instellen”-knop (grijs, vergt extra klik voor weigeropties)
Aankondiging van 106 partners, maar slechts 103 daadwerkelijk in de lijst (−3 verschil)
Na “Alles weigeren” bleven 16 cookies aanwezig, waaronder:
TID_ID: Tracking identifier zonder gedocumenteerd doel, aanwezig ondanks weigering
_ain_uid: Advertising Intelligence user ID, aanwezig ondanks weigering
_vwo_uuid_v2: A/B-test cookie van Wingify, aanwezig uitsluitend in weiger-dump (suggereert pre-consent plaatsing)
HAR-analyse toonde 40 verzoeken naar AppNexus’ non-personalized variant (adnxs-simple.com) na weigering, zonder transparantie hierover in het consent-scherm.
De Telegraaf: bevindingen
De Telegraaf (Mediahuis) gebruikt Didomi-platform en vertoont gelijkaardige problemen:
130 partners aangekondigd, maar slechts 127 unieke entries (duplicaten: GumGum, Instagram, Youtube)
Ook hier −3 discrepantie
Geen directe weigerknop op eerste laag
Cookies aanwezig na weigering:
_mhtc_cId: Mediahuis tracking ID
cs_fpid: ContentSquare fingerprint ID met 34-jaar looptijd
ab-test-bc-357-variant: A/B-test cookie uitsluitend in weiger-dump
Google Analytics cookies werden correct verwijderd na weigering, wat aantoont dat het systeem selectief cookies kan blokkeren.
Breder patroon
Dezelfde −3 partner-discrepantie verscheen bij alle drie commerciële sites (NU.nl: 104→101, Volkskrant: 106→103, Telegraaf: 130→127). Dit patroon over meerdere eigenaren en platforms suggereert een gedeelde praktijk in de industrie.
Alle vier geteste sites (NOS.nl, NU.nl, Volkskrant, Telegraaf) missen directe weigerknop op eerste laag. Gezamenlijk bereik: 2,6 miljard bezoeken per jaar.
Juridische schendingen
Geïdentificeerde overtredingen:
AVG artikel 4 lid 11 (toestemming): Drie-klik UX voor weigeren ondermijnt vrijwilligheid
AVG artikel 5 lid 1 sub a (transparantie): Partner-discrepanties en niet-opengevallen overschakeling naar contextual advertising
AVG artikel 25 lid 2 (privacy by default): Cookies geplaatst vóór consent-keuze
Richtlijn 2002/58/EG artikel 5 lid 3: Vereist ondubbelzinnige toestemming voordat cookies worden geplaatst
Boete-risico’s
Op basis van traffic volume en ernst van schendingen werden geschatte boete-ranges gegeven:
NOS.nl: €800k–€2M
NU.nl: €800k–€2M
Volkskrant: €400k–€1M
Telegraaf: €600k–€1.5M
DPG Media ontving eerder een boete van €525k (later €300k in hoger beroep) voor gelijkaardige schendingen bij NU.nl, wat recidive-risico verhoogt.
Aanbevelingen aan Autoriteit Persoonsgegevens
De auteur adviseert:
Verplichten van gelijkwaardige UX (één klik accepteren = één klik weigeren)
Verplichte transparantie over advertentieverzoeken na weigering
Onderzoek naar partner-lijsten en pre-consent plaatsing
Sector-breed audit van Nederlandse nieuwssites
Noodprocedure voor systematische DPG-schendingen gegeven recidive
Reproduceerbaarheid
Alle bevindingen zijn reproduceerbaar met Firefox, DevTools, Cookie Editor-extensie en HAR-export. Testbestanden beschikbaar op aanvraag voor peer review.
De auteur kondigde aan verdere tests uit te voeren op AD.nl en andere sites, en meldde bevindingen op 25 maart aan de AP met referentie 7cb0–9871.
Wij gebruiken cookiesDeze cookies helpen de website goed te laten werken en te verbeteren.
Accepteergeen weigerknop
nagetekend: een toestemmingsvenster met alleen een accepteerknop
Mensen voeren hun intiemste gegevens in zonder de risico's te beseffen
In cyclus-apps en sport-apps voeren mensen hun gezondheid en zelfs hun seksleven in, zonder stil te staan bij waar dat belandt. In een van de gemeten cyclus-apps lopen statistiek, inloggen en betalen via Russische diensten. Maar is dat de schuld van de gebruiker? De wet plakt er pleisters op, terwijl het de bedrijven kennelijk niet interesseert waar die gegevens heen gaan. Wat de gebruiker zelf kan doen is klein maar echt: lees de voorwaarden, en zie je daar vreemde, onbegrijpelijke taal, gebruik de app dan niet.
In cyclus-apps voer je het intiemste in dat er is: je gezondheid, je stemming, je seksleven. Uit de analyse van drie populaire apps bleek hoe verschillend daarmee wordt omgegaan. De ene houdt het sober en binnen Europa. De andere legt een privacylaag over een fundament van advertentie- en analytics-netwerken. De derde droeg een complete Russische laag: analytics, login en betalingen.
Niet "ze weten mijn nieuws", maar "ik sta te koop"¶
Het gevaar is subtieler dan een lek. In de advertentie- en databroker-economie ben je geen persoon maar een doelgroep. Zoals ik het schreef: het gaat niet om "ze weten mijn grootste nieuws", maar om "ik sta te koop als vrouw die gisteren seks had". De meest persoonlijke vorm van zelfkennis wordt omgezet in bezit van onbekenden.
Het kan anders, en dat bewijst dat het een keuze is¶
Er was ook een tegenvoorbeeld: een open-source app die je gegevens technisch niet eens kán doorverkopen, omdat ze geen internet-permissie heeft en nul bytes verstuurt. Dat schone alternatief bewijst dat de zware datastack een keuze is, geen noodzaak. Zie ook Een app kan volledig lokaal, zonder een enkele netwerkcall.
Een cyclus-app weet wanneer je ongesteld bent, wanneer je vruchtbaar bent, of je probeert zwanger te worden, en vaak ook wanneer je seks hebt gehad. Dat is precies het soort gegeven waarvan je wilt weten waar het terechtkomt. Ik heb de Android-versie van drie populaire apps ontleed en in één onderzoek naast elkaar gelegd.
Lees dit eerst. Dit is een statische analyse van juni 2026, aangevuld met een controle of de gevonden bestemmingen live zijn. Ik heb niet ingelogd en niet live meegekeken met het verkeer. Ik heb de apps zelf uit elkaar gehaald: het installatiebestand, de rechten die ze vragen, de bibliotheken die erin zitten en de adressen die in de code staan. Dat vertelt je waar een app voor gebouwd is en met wie het kan praten. Het vertelt je niet of elke regel ook precies op moment X afgaat. Dat verschil benoem ik overal.
Alle drie apps vragen de advertentie-identifier van je toestel. Daarna lopen ze ver uiteen.
Clue houdt de rest grotendeels in Europa en draagt geen advertentienetwerk en geen Meta-SDK. Flo legt een echte privacy-laag aan, maar bundelt tegelijk de SDK's van Meta, TikTok, AppsFlyer en Google, en vraagt de meest intieme gezondheidsrechten. Clover stuurt analytics, login en betalingen tot in Rusland. En in geen van de drie zit een herkenbaar toestemmingsframework.
Wat je toevertrouwt
Het gaat niet om je grootste nieuws, maar om je gewoonste
Het beeld bij gezondheidsapps is vaak: straks weten ze dat je zwanger bent. Maar de echte reikwijdte is breder, en ongemakkelijker. Wie een kinderwens heeft, of gewoon haar cyclus volgt, houdt veel meer bij dan een paar data. Deze apps vragen, dag na dag, hoe zwaar je menstruatie is, of je seks had en of het beschermd was, of er een orgasme was, hoe je libido is, je stemming, je krampen, je cervixslijm, je temperatuur.
En die gegevens blijven niet liggen waar je ze invoert. In de advertentie- en databroker-economie ben je geen persoon, maar een doelgroep. Zo zou je eruit kunnen zien:
audience_export_NL.xlsxdoelgroep · Nederland
Vrouw · had gisteren seks, niet klaargekomen
afgeleid signaal
Buy profile
1.284 bought this already
Vrouw · probeert zwanger te worden
100.000 profielen
Buy profile
3.907 bought this already
Vrouw · waarschijnlijk binnenkort zwanger
voorspeld
Buy profile
612 bought this already
Bereikbare doelgroep± 1.500.000 vrouwen
Ter illustratie. Geen echte export uit Clue, Flo of Clover, maar de logica van de doelgroep-handel die hun trackers met data voeden.
Het schrijnende zit niet in één dramatisch moment. Het zit in het gewone, verhandelbaar gemaakt. Niet "ze weten mijn grootste nieuws", maar "ik sta te koop als vrouw die gisteren seks had". Dat is wat niemand op straat wil hebben liggen. En toch schrijft Flo "seksuele activiteit" via Health Connect weg, zwart op wit in de rechten die de app vraagt.
Van techniek naar betekenis
Wat er weggaat, en wat het over je zegt
De volledige lijst, vertaald van techniek naar betekenis. Links wat er vertrekt, rechts wat iemand daaruit kan aflezen over jou en je leven.
Wat er weggaat
Wat het over jou zegt
Wat je invoert, naar de eigen backend (bij Flo deels via Health Connect)
Menstruatiedagen en hoeveelheid
je cyclus en of die regelmatig is, een hint over je gezondheid
Vruchtbare dagen en ovulatie
of en wanneer je vruchtbaar bent
Seks, en of het beschermd was
je seksleven en je seksfrequentie
Orgasme en libido
intieme details over je seksualiteit
Zwanger proberen, zwanger, of verloren
je kinderwens, een zwangerschap, of een miskraam of abortus
Anticonceptie
of en hoe je voorbehoedsmiddelen gebruikt
Stemming, klachten, pijn
je mentale en lichamelijke gezondheid, dag na dag
Identiteit en apparaat, naar de SDK's van Google, Meta, en bij Clover Yandex en VK
De advertentie-ID van je toestel
koppelt al je gedrag aan een herkenbaar profiel
Account- en inloggegevens
koppelt het cyclusprofiel aan jou als persoon
App-gebruik en gebeurtenissen
wanneer en hoe je de app gebruikt, je dagritme
Crash- en sessiedata
technisch, soms een beeld van je scherm
Attributie: welke advertentie je binnenbracht
welke campagne je raakte, voor gerichte reclame
Op zichzelf zegt "late menstruatie" of "stemming somber" weinig. De waarde, en het risico, zit in de optelsom: een getimed, intiem beeld van je lichaam en je relatie, gekoppeld aan een naam en een toestel.
Waarom dit anders is
Niet alleen privacy. Autonomie.
Een vrouw vertrouwt een cyclus-app iets toe wat ze misschien niet eens met haar werkgever, haar ouders, de overheid, haar verzekeraar of haar partner zou delen. En die app kan dat behandelen als handelswaar. Daar zit een dubbele schending.
Eerst wordt iets extreem intiems verzameld: wanneer je menstrueert, wanneer je vruchtbaar bent, of je seks hebt, of je zwanger probeert te worden, of je het bent geweest, je klachten, je pijn, je stemmingen, je anticonceptie, misschien een miskraam of een abortus. Daarna kan diezelfde informatie uit de context worden getrokken. Jij voert het in als zelfzorg. Buiten je zicht kan het een profiel worden dat commercieel, politiek, medisch, juridisch of zelfs geopolitiek bruikbaar is.
De wrangheid: wat bedoeld is om een vrouw meer regie over haar lichaam te geven, kan juist het instrument worden waarmee anderen iets over haar lichaam te weten komen. In jouw telefoon betekent een late menstruatie stress, of een kinderwens, of angst. In een datasysteem wordt het een signaal dat een vreemde mag duiden. En in situaties waar zwangerschap, abortus of seksualiteit politiek, religieus of juridisch beladen zijn, is zulke data niet neutraal. Dan wordt informatie over je lichaam macht over jou.
Een cyclus-app belooft: begrijp je lichaam.
Achter de schermen kan ze ook iets anders betekenen: maak je lichaam begrijpelijk voor anderen. De meest persoonlijke vorm van zelfkennis, omgezet in bezit van onbekenden.
Wat ze delen
Drie apps, en toch dezelfde advertentie-ID
De drie apps verschillen sterk, maar twee dingen hebben ze gemeen. Geen van de drie vraagt een locatiepermissie, dat is netjes. En alle drie vragen wel de advertentie-identifier (AD_ID) en de attributie-rechten van Androids Privacy Sandbox. Ook Clue, de app met de beste privacyreputatie, doet dat in de actuele versie, terwijl een oudere versie die ik ernaast legde dat recht nog niet vroeg. De advertentie-ID is het unieke nummer waarmee je toestel herkenbaar is voor advertentiedoeleinden. Dat een cyclus-app dat nummer opvraagt, is geen kleinigheid.
Het echte verschil zit in hoeveel derde partijen er meeluisteren. Ik heb per app geteld hoeveel externe diensten gegevens kunnen ontvangen, op basis van de ingebouwde bibliotheken. Het verschil is groot.
Clue4
Braze, Adjust, Datadog, Firebase
Flo6
Firebase, AppsFlyer, TikTok, Meta, Sentry, Auth0
Clover12
vier advertentienetwerken, Adjust, Amplitude, Firebase, Meta, Yandex, VK, YooMoney, SberPay
Externe diensten per app. Het aantal derde partijen dat gegevens kan ontvangen, geteld uit de bibliotheken in de app. Clue draagt er vier, Clover twaalf.
En er is iets wat in geen van de drie zit: een herkenbaar toestemmingsframework. Ik vond in geen enkele app een Consent Management Platform of de IAB-standaard voor transparantie en toestemming (geen Didomi, OneTrust, Usercentrics, Sourcepoint of Google UMP). Dat betekent dat de toestemmingsvraag, voor zover die er is, in de app zelf wordt afgehandeld en niet als gestandaardiseerd signaal naar de advertentiepartners wordt doorgegeven. Voor een categorie zo gevoelig als deze is dat een opvallende leegte.
De kaart
Het meeste gaat naar de VS, bij Clover ook naar Rusland
Alle drie apps sturen tracking en telemetrie naar verwerkers onder Amerikaans recht: Google en Firebase bij alle drie, en afhankelijk van de app ook Meta, TikTok, AppsFlyer, Braze, Datadog, Sentry, Auth0 en Amplitude. Clue houdt zijn functionele inhoud daarbij in de EU. Clover voegt er een hele laag aan toe die in Rusland eindigt.
De datastromen. Petrol is functioneel en blijft in Europa. De oranje bogen zijn tracking richting de Verenigde Staten, bij alle drie apps. De gestippelde rode bogen zijn de Russische laag, en die zit alleen in Clover. Bestemmingen geverifieerd via DNS, IP-geolocatie en het TLS-certificaat van de ontvanger.
Endpoints van Google worden via anycast vaak op een Europese rand-server geraakt, dus fysiek reist je data soms niet de oceaan over. Maar de partij die de gegevens ontvangt en verwerkt is het buitenlandse moederbedrijf, en dat valt onder buitenlands recht. Voor de vraag wie er bij je data kan, telt de verwerker, niet alleen de plek van de kabel.
Clue
BioWink, Berlijn. De soberste stack. Eigen API in de EU, gepind. Geen advertentienetwerk, geen Meta. Wel sinds kort de advertentie-ID. EUVS
Flo
Flo Health, VS. Privacy-laag via Anonymous Mode, maar met Meta, TikTok, AppsFlyer en Google aan boord. De breedste gezondheidsrechten. VS
Clover
Wachanga. Vier advertentienetwerken plus een complete Russische laag: Yandex, VK, YooMoney, SberPay. EUVSRU
App 01
Clue, de soberste, maar niet leeg
Clue maakt zijn reputatie grotendeels waar. De inhoud, je cyclus en symptomen, gaat naar een eigen API (api.helloclue.com) die op Amazon-infrastructuur in Europa draait, en die verbinding is extra beveiligd: de app pint het certificaat met vijf vingerafdrukken, zodat onderschepping veel moeilijker wordt. Artikelen komen via een contentdienst binnen. Er zit geen advertentienetwerk in, en geen Meta-SDK.
Jouw toestelClue 256.0
→
api.helloclue.comeigen API, AWS EUContentfulcontentAdjustattributie, DEBrazeengagement, VSDatadogmonitoring, VSFirebase / GA4Google, VS
Clue. Petrol blijft in Europa, oranje gaat naar de VS. De tracking-laag is beperkt tot engagement, attributie en monitoring.
Toch is sober niet hetzelfde als leeg. Clue draagt een marketing- en meetlaag mee die naar Amerikaanse bedrijven wijst: Braze voor klantbenadering, op een datacenter aan de Amerikaanse oostkust, Datadog voor monitoring, en de Firebase- en Google Analytics-bouwstenen. Attributie loopt via Adjust, dat zijn servers in Duitsland heeft. De app vraagt sinds kort ook de advertentie-ID en leest een beperkte set biometrie via Health Connect (hartslagvariabiliteit, rusthartslag, huidtemperatuur, slaap, gewicht), maar uitsluitend lezen, en niet de menstruatie- of seksuele-activiteit-categorieën. Het beeld: de privacyvriendelijkste van de drie, maar ook hier deelt de app gedrag en engagement met Amerikaanse verwerkers.
Bewijs. In de code aangetroffen: com/braze (477 class-referenties), com/adjust/sdk (246), com/datadog (53), Firebase en GA4. Endpoints: sdk.iad-01.braze.com (Braze, VS-oost), app.adjust.com (Adjust GmbH, Duitsland), api.helloclue.com (AWS, EU, certificaat gepind). Geen Meta-SDK aangetroffen.
Toon alle diensten en endpoints van Clue
Dienst of endpoint
Wat het doet
Waar
api.helloclue.com
eigen API: cyclus, symptomen, account (certificaat gepind)
Permissies: advertentie-ID plus AdServices-attributie, biometrie, push, install-referrer, Play Billing. Geen locatie, geen Meta-SDK.
App 02
Flo, een privacy-laag bovenop een brede tracker-set
Flo is het interessantste geval, want het trekt twee kanten op tegelijk. Na een schikking met de Amerikaanse toezichthouder FTC in 2021, over het delen van gezondheidsdata met onder andere Facebook en Google, investeerde Flo zichtbaar in privacy. De app heeft een Anonymous Mode die telemetrie via een speciale gateway stuurt, een techniek waarbij Flo de gegevens niet aan een IP-adres of identiteit kan koppelen. Die gateway is er echt en antwoordt live.
Flo. De eigen backend en alle trackers staan onder Amerikaanse jurisdictie. De privacy-gateway is een laag bovenop diezelfde infrastructuur.
Tegelijk draagt diezelfde app in 2026 nog steeds de SDK's van Meta, TikTok, AppsFlyer en Google mee, plus Sentry voor crashes en Auth0 voor inloggen. En Flo vraagt de breedste, gevoeligste set rechten van de drie. Via Health Connect leest het negentien categorieën, waaronder menstruatie, tussentijdse bloedingen, cervixslijm, ovulatietesten en seksuele activiteit, en het schrijft er zes terug, waaronder opnieuw seksuele activiteit, cervixslijm en ovulatietesten. De spanning is dus reëel: de verzendinfrastructuur naar advertentie- en analytics-partijen zit ingebouwd, en de privacy-laag bepaalt hoeveel daarvan herleidbaar blijft. Welke van de twee wint bij een concrete handeling, is precies wat een statische analyse niet kan beslissen.
Bewijs. In de code aangetroffen: androidx/health/connect (1068 class-referenties, lezen 19 plus schrijven 6 categorieën inclusief seksuele activiteit), io/sentry (1046), com/appsflyer (477), Firebase en GA4 (452), com/tiktok (127), com/facebook (98), com/auth0 (82). De privacy-gateway ohttp-gateway-bhttp-public.owhealth.com antwoordt live (HTTP 200). Backend owhealth.com onder Amerikaanse jurisdictie.
Permissies: advertentie-ID plus AdServices, activity recognition, basic phone state, biometrie, en Huawei- en Samsung-integraties.
App 03
Clover, advertenties plus een Russische laag
Clover is een gratis app die op advertenties draait, en dat is in de code goed te zien. Er zitten vier advertentienetwerken in: Google AdMob, met aanvulling via AppLovin, ironSource en Fyber. Daarnaast Adjust voor attributie, Amplitude en Firebase voor analytics, en de Meta-SDK. Voor een gevoelige gezondheidsapp is dat al een volle commerciële stapel.
Clover. Naast de Amerikaanse advertentie- en analytics-laag staat een complete Russische laag: analytics, sociale login en twee betaalsystemen.
Daarbovenop staat iets wat ik bij de andere twee niet zag: een uitgebreide Russische laag. De app bevat Yandex AppMetrica voor analytics, VK voor sociale login, en de volledige account- en betaal-SDK's van YooMoney en SberPay. De bijbehorende adressen draaien op typisch Russische webservers, wat de operators bevestigt. De app staat bovendien onversleuteld verkeer toe naar een YooMoney-domein, een uitzondering op het verder versleutelde geheel. En er zit een ingebouwde, merk-gesponsorde vragenlijst in: een complete Kotex-flow die naar je cyclus vraagt. Of de Russische componenten bij een Nederlandse gebruiker actief worden, hangt af van regio en server-instellingen, maar de code wordt onverkort meegeleverd. Het is de breedste jurisdictie-spreiding van de drie, in de meest gevoelige datacategorie.
Bewijs. In de code aangetroffen: ru/yoomoney (7006 class-referenties), io/appmetrica (Yandex, 2041), gms/ads (AdMob, 673) met aanvulling via AppLovin, ironSource en Fyber, com/adjust/sdk (268), SberPay via gate1.spaymentsplus.ru, com/vk (29), com/facebook (26). Cleartext toegestaan naar certs.yoomoney.ru. Resources bevatten een Kotex-vragenlijst (kotex_assessment_*).
Toon alle diensten en endpoints van Clover
Dienst of endpoint
Wat het doet
Waar
cdn.wachanga.app
eigen CDN (Caddy)
Hetzner, DE
AdMob googleads.g.doubleclick.net, plus AppLovin, ironSource, Fyber
advertenties en mediation (673)
VS
Adjust app.adjust.com
attributie (268)
DE
Amplitude
analytics
VS/EU
Firebase / GA4
analytics (608 + 460)
VS
Meta / Facebook-SDK
events (26)
VS
Yandex AppMetrica appmetrica.io
analytics (2041)
RU
VK id.vk.com
sociale login (29)
RU
YooMoney, YooKassa, SberPay spaymentsplus.ru
betalingen en account (7006 + 344)
RU
Permissies: advertentie-ID plus AdServices en de Topics-API, READ_PHONE_STATE. Cleartext toegestaan naar certs.yoomoney.ru. Ingebouwde Kotex-vragenlijst.
Naast elkaar
De vergelijking
Clue
Flo
Clover
Identiteit en rechten
Maker
BioWink (DE)
Flo Health (VS)
Wachanga
Advertentie-ID
ja
ja
ja, plus Topics-API
Locatie
nee
nee
nee
Health Connect
lezen, beperkt
lezen 19, schrijven 6, incl. seksuele activiteit
geen
Tracking en geld
Advertentienetwerk
geen
geen
vier
Meta-SDK
nee
ja
ja
TikTok-SDK
nee
ja
nee
Attributie
Adjust (DE)
AppsFlyer (VS)
Adjust (DE)
Analytics
Firebase, Braze, Datadog
Firebase, Sentry
Firebase, Amplitude, Yandex
Login en betalen
eigen, Play Billing
Auth0, Play Billing
VK, YooMoney, SberPay
Governance
Toestemmingsframework
geen
geen
geen
Cert-pinning eigen API
ja, 5 pins
niet zichtbaar
nee
Jurisdicties
EUVS
VS
EUVSRU
Zelf doen
Wat je kunt doen zonder je app op te geven
Kies bewust. Wil je het soberst, dan is Clue van de drie de minst vergaande: geen advertentienetwerk, geen Meta-SDK, en je inhoud blijft in Europa.
Reset je advertentie-ID. Alle drie apps vragen die identifier. In de Android-instellingen onder Privacy kun je hem wissen, en je kunt gepersonaliseerde advertenties helemaal uitzetten.
Wees zuinig met Health Connect. Vooral bij Flo bepaalt Health Connect hoeveel intieme categorieën de app mag lezen en schrijven. Geef alleen toegang tot wat je echt nodig hebt, en trek het later weer in als je twijfelt.
Gebruik de privacymodus als die er is. Flo's Anonymous Mode bestaat echt en helpt. Zet hem aan als je Flo gebruikt.
Denk na over de gevoeligste invoer. Een app die niet weet of je zwanger probeert te worden, kan dat ook niet doorgeven. Niet alles hoeft erin.
Conclusie
Drie apps voor dezelfde, uiterst gevoelige taak, en drie heel verschillende antwoorden op de vraag waar je data heen gaat. Clue houdt het Europees en sober, al vraagt ook deze app inmiddels de advertentie-ID. Flo bouwt een echte privacy-laag, maar bovenop een infrastructuur die nog vol zit met de SDK's van advertentie- en socialmediabedrijven, en het vraagt de meest intieme gezondheidsrechten. Clover spreidt analytics, login en betalingen uit over drie jurisdicties, tot in Rusland, en draagt vier advertentienetwerken mee.
Geen van deze keuzes is een ongeluk, het is hoe de apps zijn gebouwd. En het is precies het soort keuze dat iemand die elke dag haar cyclus invoert zou moeten kunnen wegen. Dit dossier legt die keuzes naast elkaar op tafel.
Addendum, 12 juni 2026
Bestaat er dan wél een veilige? Ja: drip.
drip. kan je gegevens niet doorverkopen, want de app kan ze technisch niet eens versturen.
De logische vervolgvraag op dit dossier is: is er dan een menstruatie-app die het wél goed doet? Die is er. drip. is gratis, open source, en gemaakt door een non-profit (Heart of Code). Ik heb hem op dezelfde manier ontleed, en ook echt op een testtelefoon laten draaien.
Het verschil met Clue, Flo en Clover zit in één detail dat alles bepaalt: drip vraagt niet eens toestemming om het internet te gebruiken. Een Android-app die dat recht niet heeft, kan geen enkele verbinding naar buiten openen. Geen advertentienetwerk, geen analytics, geen server in de VS of Rusland, want er is simpelweg geen weg naar buiten. Op de testtelefoon verstuurde de app dan ook nul bytes, terwijl dat toestel verder gewoon online was.
Alles wat je invoert, van menstruatie tot temperatuur, seks en stemming, blijft in een database op je eigen telefoon. Geen account, geen advertentie-ID, geen cloud, en geen enkele meet- of reclamebibliotheek in de app. Je kunt drip op slot zetten met een pincode en je gegevens laten versleutelen. En omdat de broncode openbaar is, kan iedereen dit zelf nakijken in plaats van een privacybelofte te moeten geloven.
Eerlijk over de keerzijde. drip is soberder van opzet: er is geen synchronisatie tussen apparaten en geen cloud-back-up, dus raak je je telefoon kwijt zonder eerst te exporteren, dan ben je je gegevens kwijt. En je data staat standaard onversleuteld op het toestel; zet de pincode en versleuteling zelf aan als je dat wilt. Een back-up maak je met de exportknop, en jij bepaalt waar dat bestand heen gaat.
Methode en reproductie
Onderzocht: Clue 256.0 (com.clue.android), Flo 9.106.0 (org.iggymedia.periodtracker) en Clover 7.32.1 (com.wachanga.womancalendar), Android, actuele releases. Statisch: het manifest en de resources zijn met apktool gedecodeerd (rechten, exported componenten, deeplinks, network-security-config), en de SDK-inventaris en endpoints zijn uit de dex-bestanden gehaald via class-signatuur-matching en string-extractie. Dynamisch, zonder toestel: elke ontdekte bestemming is via DNS opgezocht, gegeolokaliseerd, en geverifieerd met een live HTTP-respons en het TLS-certificaat van de operator. Niet gedaan: een ingelogde, live verkeersmeting die laat zien welke velden op welk moment vuren. De aantallen class-referenties zijn een maat voor het gewicht van een bibliotheek in de code, geen verkeersmeting. De apps zijn legaal verkregen en op een eigen omgeving geanalyseerd.
Verantwoording. Statische APK-analyse met endpoint-verificatie, juni 2026. Bevindingen reproduceerbaar; serverlocaties geverifieerd op het moment van schrijven. Onderzoek via mickbeer.com.
gepubliceerdnotitiezekerOverheid, toezicht en de wetverwant
Schermopname kan al draaien voor je eerste klik
Op een hulpverleningsplatform draaide een tool die elke muisbeweging, klik en toetsaanslag vastlegt, nog voor de bezoeker iets had aangeklikt. Die opnames gaan naar een Amerikaans bedrijf. Juist op de plek waar iemand kwetsbaar is, kijkt een vreemde mee.
Op humanitas.nl draait Microsoft Clarity, een session-replay tool. Ik legde vast wat die tool doet: "Op humanitas.nl draait een session-replay tool die elke muisbeweging, klik, scroll en formulier-input van bezoekers vastlegt. Een opname van wat je doet, wat je intypt, hoe lang je hapert." Dit is een platform voor mensen die hulp zoeken bij eenzaamheid, rouw, schulden en mantelzorg.
Bij de meting telde ik achttien externe domeinen en zeven unieke ontvangende partijen, de meerderheid marketing en analytics. Clarity stuurt naar Microsoft in de VS, waar de CLOUD Act geldt.
"Klikken op 'weigeren' plaatst juist een nieuwe cookie. Bezoekers die hun privacy proberen te beschermen, krijgen extra tracking als gevolg van hun weigering." Dat is het omgekeerde van wat de AVG vraagt: artikel 7 lid 3 eist dat toestemming even makkelijk in te trekken is als te geven.
"Geen functionele reden. Microsoft Clarity is een marketing- en UX-tool, niet noodzakelijk voor het verlenen van sociale hulp." Navigatie op een hulpplatform kan op zichzelf een afgeleid bijzonder persoonsgegeven zijn in de zin van AVG artikel 9. De Xandr-trilogie (Hof en Rechtbank Amsterdam, 2023-2025) laat zien dat de rechter hier weinig ruimte laat.
Ik vroeg wederhoor via de persvoorlichter, met deadline 12 mei 14:00 uur. Geen reactie.
humanitas.nl, vrijwilligersorganisatie voor mensen in kwetsbare situaties. En een Microsoft Clarity-tool die elk muis-spoor opneemt, vóór de bezoeker iets heeft geklikt.
Op humanitas.nl draait een session-replay tool die elke muisbeweging, klik, scroll en formulier-input van bezoekers vastlegt. Een opname van wat je doet, wat je intypt, hoe lang je hapert.
Op een platform voor mensen die hulp zoeken bij eenzaamheid, rouw, schulden, mantelzorg.
Waarom?
Geen functionele reden. Microsoft Clarity is een marketing- en UX-tool, niet noodzakelijk voor het verlenen van sociale hulp. De opnames gaan naar Microsoft Corporation in de Verenigde Staten, onder CLOUD Act-jurisdictie.
En Clarity is één van achttien externe domeinen die data ontvangen bij elk bezoek aan humanitas.nl.
Achttien endpoints, zeven unieke ontvangende partijen. De meerderheid is marketing-, analytics- of advertising-infrastructuur.
De kernbevinding
Klikken op ‘weigeren’ plaatst juist een nieuwe cookie. Bezoekers die hun privacy proberen te beschermen, krijgen extra tracking als gevolg van hun weigering.
AVG artikel 7 lid 3 vereist het tegenovergestelde.
Nederlandse rechters hebben in de Xandr-trilogie (Hof en Rechtbank Amsterdam, 2023–2025) vastgesteld dat tracking zonder of tegen geldige toestemming onrechtmatig is.
Bezoek aan specifieke onderdelen van humanitas.nl kan afgeleide gezondheidsdata onthullen die onder AVG artikel 9 (bijzondere persoonsgegevens) vallen.
Hoor en wederhoor
Hackedemia heeft Humanitas voorafgaand schriftelijk om wederhoor gevraagd via de persvoorlichter, met deadline 12 mei 14:00. Er is geen reactie ontvangen. De uitnodiging blijft openstaan; bij ontvangst worden de bevindingen aangevuld.
Wat volgt
Het volledige rapport volgt later deze week op hackedemia.nl. Het sectorrapport over negen Nederlandse hulpverleningssites volgt parallel.
De vrijwilligersdiensten van Humanitas, luisterend oor, mantelzorgondersteuning, rouwverwerking, gaan via aparte kanalen (telefoon, persoonlijk contact) en blijven bereikbaar.
We gaan ook naar andere zorginstellingen kijken de komende periode; patiëntveiligheid moet immers ook in het “digitale ziekenhuis” geborgd zijn.
wat het opleverde
Eerste stappen gezet. Pre-consent ging van zes naar één tracker en er worden geen cookies meer geplaatst vóór toestemming.
gepubliceerdnotitiezekerOverheid, toezicht en de wetverwant
Een weigering stopt de schermopname niet vanzelf
Op een zorgplatform liep een schermopname-tool nog nadat de bezoeker toestemming had geweigerd, en vertrokken meerdere verzoeken met gegevens naar Google. Wat je doet op een plek die vertrouwelijk hoort te zijn, belandt zo bij een derde. Ook zonder doorverkoop is dat een verstrekking aan een vreemde.
113.nl, nationale zelfmoordpreventielijn. Het hulpvraagblok is rood en duidelijk; wat er op de achtergrond gebeurt, is dat niet.
Tijdlijn onderzoek 113.nl: bevindingen opgelost d.d. 14 mei 2026.
Update 13 mei, 15:47uur: Stichting 113 Zelfmoordpreventie is open en transparant met ons in contact getreden, en we hebben onze bevindingen en rapportages met hen gedeeld. In een constructieve kennismaking is door hen toegelicht welke acties voor nu zijn ondernemen om een veilig en juist bezoek aan 113.nl te garanderen. We blijven met elkaar in contact om in de nabije toekomst een duurzame oplossing te borgen.
Dank voor jullie voortvarendheid en goede werk!
Forensische privacyaudit
Op 9 mei 2026 voerde ik een geautomatiseerde forensische privacyaudit uit op 113.nl in drie toestemmingsmodi: NOOP (geen klik), REFUSE (weigeren) en ACCEPT (toestaan). Elke meting startte vanuit een schone browsercontext. Resultaten zijn SHA-256-geverifieerd en cryptografisch verankerd op de Bitcoin-blockchain via OpenTimestamps.
De audit legde negen bevindingen vast: één kritiek (inmiddels verholpen), zes ernstig (donveranderd), twee aandachtspunten. De ernstige bevindingen vormen herhaalde schendingen van AVG-bepalingen.
Wat gebeurde er
Bevinding 1: Microsoft Clarity actief na weiger-klik [KRITIEK
: VERHOLPEN]
Op 113.nl liep Microsoft Clarity op het moment van de audit actief nadat bezoekers expliciete toestemming weigerden. Clarity is een session-recording- en heatmaptool die muisbewegingen, klikgedrag en scrollpatronen vastlegt. Op een website voor bezoekers in acute psychische nood is session-recording bijzonder gevoelig: navigatiepatronen op een suïcidepreventielijn kunnen herleidbaar zijn tot gezondheidsdata in de zin van AVG artikel 9.
Pre-consent tracking via Microsoft Clarity De Clarity-scripts activeerden vóórdat bezoekers hun cookievoorkeuren instelden. De cookiewet (implementatie van de ePrivacy-richtlijn) vereist actieve, geïnformeerde toestemming voor het plaatsen van trackingtechnologieën. Pre-consent-tracking is geen grijs gebied, het is onrechtmatig.
Dode weiger-knop De ‘weiger’-knop werkte niet. Na het klikken op ‘Nee’ bleef de Clarity-cookie actief.
Een vals gevoel van controle voor de bezoeker, terwijl tracking gewoon doorliep. De AVG stelt in artikel 7(3) dat toestemming even gemakkelijk moet kunnen worden ingetrokken als gegeven.
Browser fingerprinting De audit documenteerde fingerprinting-technieken: het verzamelen van tijdzone- informatie om gebruikers te identificeren zonder cookies. Bijzonder verontrustend in de context van een suïcidepreventielijn: meerdere crisissessies kunnen worden gekoppeld zonder toestemming.
Obfuscatie van gezondheidsdataverwerking 113.nl classificeert als verwerkingsverantwoordelijke voor bijzondere categorieën persoonsgegevens onder AVG artikel 9. De forensische audit stelde vast dat de verwerking via Clarity niet was gedocumenteerd in het register van verwerkingsactiviteiten (AVG artikel 30), niet was opgenomen in het cookiebeleid, en niet was voorzien van een DPIA, wettelijk verplicht onder AVG artikel 35 voor systemische verwerking van gezondheidsgegevens.
Status hermeting 11 mei: Clarity verwijderd. Bevinding opgelost.
Bevinding 2: Google Tag Manager, AdSense en Analytics
geladen vóór toestemming [ERNSTIG, VERHOLPEN]
In NOOP-modus, vóór enige interactie, laden zonder rechtmatige grondslag: Google Tag Manager (GTM-MQ7B2P5), Google Analytics 4 (G-NSYB6F1YZJ, met actieve /g/collect-data-verzending), Google Ads conversion-tags (AW-793289595 en AW-938136512), Floodlight / Google Marketing Platform (DC-6063336) en DoubleClick (pagead2.googlesyndication.com). Tracking zonder rechtmatige grondslag is niet toegestaan onder Telecommunicatiewet artikel 11.7a en AVG artikelen 6 en 7.
Status hermeting 14 mei: Opgelost.
Bevinding 3: Vijf trackerdomeinen actief na weigering
[ERNSTIG, VERHOLPEN]
Na een expliciete weiger-klik blijven vier Google-trackerdomeinen actief: Google Tag Manager, Google Analytics, Google Ads en DoubleClick. Cookiebot, het Consent Management Platform, blijft eveneens geladen omdat het de gebruikerskeuze moet onthouden, maar de Cookiebot-configuratie blokkeert de andere trackers feitelijk niet.
Van toepassing: Telecommunicatiewet artikel 11.7a, AVG artikel 7 lid 3.
Status hermeting 14 mei: Opgelost.
Bevinding 4: gtm.js (GTM-MQ7B2P5) actief na weigering
[ERNSTIG, VERHOLPEN]
Het GTM-script voor container GTM-MQ7B2P5 blijft geladen na een weiger-klik. GTM fungeert als verzamelaar voor tags; activiteit van de container na weigering betekent dat de volledige tagstructuur buiten het toestemmingsregime opereert. Van toepassing: Tw 11.7a.
Status hermeting 14 mei: Opgelost.
Bevinding 5: Vijf POST-verzoeken met body naar derde
partijen [ERNSTIG, VERHOLPEN]
In NOOP-modus verstuurt de browser vijf POST-verzoeken met body naar externe servers: drie naar Google-advertentie-endpoints (pagead2.googlesyndication.com, Google Ads / DoubleClick), twee naar Google Analytics (region1.google- analytics.com/g/collect). Op een suïcidepreventielijn raakt dit potentieel aan AVG artikel 9 (bijzondere persoonsgegevens). Van toepassing: AVG 6, 9.
Status hermeting 14 mei: Opgelost.
Bevinding 6: Fingerprinting-indicator in GTM-bestanden
[ERNSTIG, VERHOLPEN]
De audit documenteerde een fingerprinting-indicator in de Google Tag Manager- bestanden: tijdzone-uitlezing. In combinatie met andere browser-eigenschappen kan dit ingrediënt voor identificatie zonder cookies vormen. Van toepassing: AVG 9, 13, EDPB GL 02/2023.
Status hermeting 14 mei: Opgelost.
Bevinding 7: Obfuscatiepatroon in trackerbestand
[AANDACHTSPUNT, VERHOLPEN]
In een actief trackerbestand is een combinatie van atob en eval/Function aangetroffen. Code die zich tegen inzicht verzet, staat op gespannen voet met het transparantiebeginsel van AVG artikel 5 lid 1 sub a.
Status hermeting 14 mei: Opgelost.
L1: Referrer-Policy: no-referrer-when-downgrade
[AANDACHTSPUNT, VERHOLPEN]
De huidige instelling kan ertoe leiden dat volledige URL’s, inclusief paginapaden die de aard van het bezoek onthullen, worden doorgegeven aan externe partijen. Op een website voor suïcidepreventie zijn paginapaden gevoelig. Advies: strict- origin-when-cross-origin. Van toepassing: AVG 32.
Status hermeting 14 mei: Opgelost.
L2: Acht unieke trackeridentificatoren in scripts
[AANDACHTSPUNT, VERHOLPEN]
De audit identificeerde acht unieke trackeridentificatoren. Verificatie aan de hand van twee onafhankelijke HAR-captures (9 mei en 11 mei) toont dat vijf hiervan actieve productie-traffic genereren: GTM-MQ7B2P5, GA4 G-NSYB6F1YZJ, AW-793289595, AW-938136512 en Floodlight DC-6063336. Drie identificatoren, GTM-5N44BF4, G- 9LJGQ20WLQ en UA-10657158-3, zijn aangetroffen in scriptcontent maar verzonden geen eigen requests; Deze zijn vermoedelijk legacy-restanten in de container-configuratie. Onder AVG artikel 30 hoort het verwerkingsregister voor alle acht verklaring te bieden. Op grond van het Fashion ID-arrest (HvJ-EU C-40/17, 2019) kan 113 als gezamenlijk verwerkingsverantwoordelijke worden aangemerkt voor de fase van gegevensverzameling door scripteigenaren van de vijf actieve trackers.
Status hermeting 14 mei: Opgelost.
Juridisch kader
Artikel Toepassing AVG artikel 6 Verwerking zonder rechtsgeldige grondslag AVG artikel 7 Toestemming moet even gemakkelijk intrekbaar zijn AVG artikel 9 Bijzondere categorieën, verhoogde beschermingsplicht AVG artikel 13 Informatieplicht bij gegevensverzameling AVG artikel 17 Recht op verwijdering, dode weiger-knop blokkeert dit AVG artikel 30 Register van verwerkingsactiviteiten ontbreekt AVG artikel 35 DPIA verplicht voor systematische gezondheidsdataverwerking ePrivacy-richtlijn Pre-consent tracking is onrechtmatig
Hoe 113.nl wél reageerde: sectorvoorbeeld
Binnen uren na verantwoording was Microsoft Clarity verwijderd. 113 vroeg actief om de ruwe auditgegevens om onafhankelijke verificatie mogelijk te maken. Geen juridisch verweer, geen ontkenning, geen communicatieteam dat de bevindingen probeerde te marginaliseren. Dat is bestuurlijke volwassenheid. Instructioneel voor de sector.
Update 13 mei: Stichting 113 Zelfmoordpreventie is open en transparant met ons in dialoog gegaan, ook nadat wij onze bevindingen en rapportages met hen hadden gedeeld. In een constructieve kennismaking is door hen toegelicht welke acties voor nu zijn ondernemen om een veilig en juist bezoek aan 113.nl te garanderen. We blijven met elkaar in contact om in de nabije toekomst een duurzame oplossing te borgen.
Het bredere landschap: systeemprobleem, geen incident
De DPG Media-brief onderzocht hulpverleningssites breed. Resultaat: 9 sites, 44 weiger-knoppen getest, 0 functioneel. De vraag dringt zich op wat er draait op: GGZ-portalen waar patiënten diagnostische tests doen en behandelplannen inzien EPD-toegangspoorten met embedded third-party scripts Huisartsenplatforms met online intakeformulieren en consultatie-tools Ziekenhuiswebsites met afsprakenportalen en pre- consultatievragenlijsten Gemeenschappelijke noemer: zorgorganisaties willen compliant zijn maar missen technische capaciteit. Third-party scripts worden toegevoegd door marketingbureaus die de privacy-implicaties niet doorgronden.
De CLOUD Act-dimensie
Bijna alle grote analytics-tools zijn Amerikaans. Onder de CLOUD Act (2018) kunnen Amerikaanse autoriteiten direct toegang vorderen tot data bij Amerikaanse cloudproviders zonder dat de gebruiker wordt geïnformeerd, zonder dat de Europese overheid hoeft te worden gewaarschuwd. Voor Nederlandse gezondheidsdata onder AVG-artikel 9 is dit een verzwegen risico dat in vrijwel geen DPIA wordt meegenomen.
Waarom het ertoe doet
113.nl bedient bezoekers in acute psychische nood. Paginabezoek, navigatiepatronen en sessieduur op deze website kunnen direct herleidbaar zijn tot de geestelijke gezondheidstoestand van de bezoeker: bijzondere persoonsgegevens in de zin van AVG artikel 9 met een verhoogde beschermingsgraad. De combinatie van een kwetsbare doelgroep en de aangetroffen verwerkingen activeert ook een wettelijke DPIA-plicht onder AVG artikel 35.
De Autoriteit Persoonsgegevens (187 FTE) waarschuwde in april 2025 vijftig Nederlandse organisaties formeel voor exact dezelfde configuratiepatronen, met een handhavingsdreigement binnen drie maanden. De AP beschikt per 2025 over extra budget voor toezicht op tracking-technologie. De bevindingen op 113.nl komen overeen met de typen schendingen die de AP in dat traject documenteerde.
Het juridische kader omvat Telecommunicatiewet artikel 11.7a, AVG artikelen 6, 7(3), 9, 13, 26, 28, 30, 32 en 35, en het Fashion ID-arrest van het HvJ-EU (C-40/17, 2019).
Nederlandse rechters hebben in een reeks kort gedingen tussen 2023 en 2025 geoordeeld dat tracking zonder geldige voorafgaande toestemming onrechtmatig is en dat ook de derde partij (niet alleen de site-eigenaar) verwerkingsverantwoordelijk is. 113 heeft snel en constructief gereageerd: publieke erkenning binnen 24 uur na onze eerste melding, intern onderzoek gestart, externe experts ingeschakeld, en Microsoft Clarity feitelijk verwijderd. Geen advocatenbrief, geen ontkenning. De hermeting van 11 mei bevestigt de verwijdering van Clarity. Dat is de constructieve norm voor de sector. Het herstelwerk is inmiddels voltooid: ook de zes resterende bevindingen zijn gewijzigd.
Actiepunten
Implementeer een werkende Consent Management Platform- configuratie. De huidige cookiebanner heeft geen meetbaar effect op trackeractiviteit. Consent Mode v2 voor GTM en Analytics kan tracking blokkeren totdat de bezoeker toestemming geeft. Technisch oplosbaar binnen dagen. 2. Voer een DPIA uit conform AVG artikel 35. De combinatie van bijzondere persoonsgegevens en een kwetsbare doelgroep maakt deze verwerking hoog-risico. Een gegevensbeschermingseffectbeoordeling is wettelijk verplicht. 3. Saneer de trackerstack. Beoordeel per script of aanwezigheid noodzakelijk en proportioneel is voor de primaire hulpfunctie. Veel aangetroffen trackers zijn gericht op fondsenwerving en marketing: weeg dat af tegen het dataminimalisatiebeginsel van AVG artikel 5 lid 1c. 4. Laat een onafhankelijke audit uitvoeren na implementatie van de CMP.
Laat de werking van de nieuwe configuratie toetsen door een partij zonder commerciële relatie met de leveranciers van de gebruikte tracking-tools. 5. Actualiseer de privacyverklaring. Alle acht trackeridentificatoren moeten expliciet vermeld staan met doelen, ontvangers en bewaartermijnen conform AVG artikel 13. 6. Onderzoek gezamenlijk verwerkingsverantwoordelijkheid. In het licht van Fashion ID: beoordeel de joint controllership-verhoudingen met Google en Microsoft en verwerk dit in het privacybeleid en het verwerkingsregister.
Checklist voor zorgbestuurders: technische privacyaudit
Consent Mode v2 implementatie. Controleer of uw CMP correct is geconfigureerd zodat tracking-scripts pas activeren ná expliciete toestemming, niet eerder. 2. DPIA-plicht voor gezondheidsdata. Voer een gegevensbeschermingseffectbeoordeling uit voor alle verwerkingen waarbij AVG-artikel 9-gegevens betrokken zijn. Dit is geen keuze maar een wettelijke verplichting. 3. Tracker-stack opschonen. Inventariseer elk third-party script op uw zorgplatform. Verwijder wat geen directe functionele noodzaak heeft. Elk extern script is een potentieel dataverwerkingsrisico. 4. Joint controllership-check. Beoordeel uw verwerkersrelaties in het licht van het Fashion ID-arrest. Indien u scripts insluit van derden, bent u mogelijk gezamenlijk verwerkingsverantwoordelijke. 5. Cloud Act-blootstelling meten. Beoordeel welke van uw tools en leveranciers onder Amerikaanse jurisdictie vallen. Documenteer dit expliciet in uw DPIA. 6. Onafhankelijk audit-protocol. Laat uw privacyconfiguratie periodiek forensisch controleren door een partij zonder commercieel belang bij uw tool-stack.
Beleidskader: EU-wetgeving en uitvoering in Nederland
De relevante wetgeving vormt een gelaagd kader: de AVG (van kracht sinds 2018) als horizontale privacywet, de ePrivacy-richtlijn (2009) als specifieke grondslag voor tracking-technologie, en de NIS2-richtlijn (geïmplementeerd in Nederland per 2026) voor netwerk- en informatiebeveiliging in vitale sectoren waaronder de zorg.
De handhavingsbevoegdheden zijn substantieel. Artikel 82 AVG regelt aansprakelijkheid voor schade als gevolg van onrechtmatige verwerking, ook voor verwerkers. Artikel 83 AVG voorziet in administratieve boetes tot €20 miljoen of 4% van de wereldwijde jaaromzet. De Autoriteit Persoonsgegevens beschikt over 187 FTE voor toezicht op miljoenen Nederlandse organisaties. Dat capaciteitsdeficit is reëel: structureel toezicht op alle zorgaanbieders is feitelijk onmogelijk.
De conclusie is onvermijdelijk: toezicht alleen is ontoereikend. Zorgbestuurders moeten eigen compliance-engineering doen, niet omdat de Autoriteit Persoonsgegevens kijkt: die handhaaft slechts wetgeving. De zorgbestuurder is eindverantwoordelijk voor een data-ethische, digitale omgeving waarin de bezoeker zich veilig kan bewegen én veilig mag wanen. Technische privacy is een randvoorwaarde voor vertrouwen, en vertrouwen is de randvoorwaarde voor effectieve hulpverlening.
SLOTSOM
Voor een zorginstelling waar anonimiteit van levensbelang is, zou digitale privacy geen keuze, maar een randvoorwaarde moeten zijn, zonder commerciële trackers van partijen als Google. De verwijdering van Microsoft Clarity binnen 24 uur na onze eerste melding heeft de Microsoft- aanwezigheid teruggebracht tot de Advertising-pixel die alleen ná uitdrukkelijke toestemming laadt. De snelheid en transparantie van de respons, publieke erkenning, intern onderzoek, externe expertise, daadwerkelijke verwijdering van Clarity binnen 24 uur, is van uitzonderlijk niveau in de Nederlandse hulpverleningssector.
Update: ook de zes ernstige bevindingen zijn inmiddels verholpen. Op een website voor mensen in acute psychische nood is dat knap en voortvarend gedaan, juist voor de mensen die 113.nl het hardst nodig hebben.
Een vervolgmeting volgt rond 9 juni 2026 om eventuele structurele verbeteringen aantoonbaar te maken. De volledige 22-pagina forensische audit is beschikbaar voor relevante autoriteiten en pers, schrijf via /contact/.
12 mei 2026, Mick Beer.
wat het opleverde
Aantoonbaar opgeruimd. 113 verwijderde tussen 9 en 14 mei 2026 alle trackers (GTM, Google Ads/AdSense, Microsoft Clarity). De nameting op 18 mei toonde nul trackers. De organisatie reageerde binnen enkele uren publiek en constructief.
gepubliceerdnotitiewaarschijnlijkSoftware en apparatenbronnenverwant
Ontvangen is niet doorverkopen
Dat de code van een reclamebedrijf in een app zit, bewijst dat de bouwsteen aanwezig is, niet dat er op dat moment een gegeven naartoe stroomt, en al helemaal niet dat het wordt doorverkocht. Aanwezigheid, verstrekking en doorverkoop zijn drie dingen, elk met een eigen bewijslast.
Een cyclus-app weet wanneer je ongesteld bent, wanneer je vruchtbaar bent, of je probeert zwanger te worden, en vaak ook wanneer je seks hebt gehad. Dat is precies het soort gegeven waarvan je wilt weten waar het terechtkomt. Ik heb de Android-versie van drie populaire apps ontleed en in één onderzoek naast elkaar gelegd.
Lees dit eerst. Dit is een statische analyse van juni 2026, aangevuld met een controle of de gevonden bestemmingen live zijn. Ik heb niet ingelogd en niet live meegekeken met het verkeer. Ik heb de apps zelf uit elkaar gehaald: het installatiebestand, de rechten die ze vragen, de bibliotheken die erin zitten en de adressen die in de code staan. Dat vertelt je waar een app voor gebouwd is en met wie het kan praten. Het vertelt je niet of elke regel ook precies op moment X afgaat. Dat verschil benoem ik overal.
Alle drie apps vragen de advertentie-identifier van je toestel. Daarna lopen ze ver uiteen.
Clue houdt de rest grotendeels in Europa en draagt geen advertentienetwerk en geen Meta-SDK. Flo legt een echte privacy-laag aan, maar bundelt tegelijk de SDK's van Meta, TikTok, AppsFlyer en Google, en vraagt de meest intieme gezondheidsrechten. Clover stuurt analytics, login en betalingen tot in Rusland. En in geen van de drie zit een herkenbaar toestemmingsframework.
Wat je toevertrouwt
Het gaat niet om je grootste nieuws, maar om je gewoonste
Het beeld bij gezondheidsapps is vaak: straks weten ze dat je zwanger bent. Maar de echte reikwijdte is breder, en ongemakkelijker. Wie een kinderwens heeft, of gewoon haar cyclus volgt, houdt veel meer bij dan een paar data. Deze apps vragen, dag na dag, hoe zwaar je menstruatie is, of je seks had en of het beschermd was, of er een orgasme was, hoe je libido is, je stemming, je krampen, je cervixslijm, je temperatuur.
En die gegevens blijven niet liggen waar je ze invoert. In de advertentie- en databroker-economie ben je geen persoon, maar een doelgroep. Zo zou je eruit kunnen zien:
audience_export_NL.xlsxdoelgroep · Nederland
Vrouw · had gisteren seks, niet klaargekomen
afgeleid signaal
Buy profile
1.284 bought this already
Vrouw · probeert zwanger te worden
100.000 profielen
Buy profile
3.907 bought this already
Vrouw · waarschijnlijk binnenkort zwanger
voorspeld
Buy profile
612 bought this already
Bereikbare doelgroep± 1.500.000 vrouwen
Ter illustratie. Geen echte export uit Clue, Flo of Clover, maar de logica van de doelgroep-handel die hun trackers met data voeden.
Het schrijnende zit niet in één dramatisch moment. Het zit in het gewone, verhandelbaar gemaakt. Niet "ze weten mijn grootste nieuws", maar "ik sta te koop als vrouw die gisteren seks had". Dat is wat niemand op straat wil hebben liggen. En toch schrijft Flo "seksuele activiteit" via Health Connect weg, zwart op wit in de rechten die de app vraagt.
Van techniek naar betekenis
Wat er weggaat, en wat het over je zegt
De volledige lijst, vertaald van techniek naar betekenis. Links wat er vertrekt, rechts wat iemand daaruit kan aflezen over jou en je leven.
Wat er weggaat
Wat het over jou zegt
Wat je invoert, naar de eigen backend (bij Flo deels via Health Connect)
Menstruatiedagen en hoeveelheid
je cyclus en of die regelmatig is, een hint over je gezondheid
Vruchtbare dagen en ovulatie
of en wanneer je vruchtbaar bent
Seks, en of het beschermd was
je seksleven en je seksfrequentie
Orgasme en libido
intieme details over je seksualiteit
Zwanger proberen, zwanger, of verloren
je kinderwens, een zwangerschap, of een miskraam of abortus
Anticonceptie
of en hoe je voorbehoedsmiddelen gebruikt
Stemming, klachten, pijn
je mentale en lichamelijke gezondheid, dag na dag
Identiteit en apparaat, naar de SDK's van Google, Meta, en bij Clover Yandex en VK
De advertentie-ID van je toestel
koppelt al je gedrag aan een herkenbaar profiel
Account- en inloggegevens
koppelt het cyclusprofiel aan jou als persoon
App-gebruik en gebeurtenissen
wanneer en hoe je de app gebruikt, je dagritme
Crash- en sessiedata
technisch, soms een beeld van je scherm
Attributie: welke advertentie je binnenbracht
welke campagne je raakte, voor gerichte reclame
Op zichzelf zegt "late menstruatie" of "stemming somber" weinig. De waarde, en het risico, zit in de optelsom: een getimed, intiem beeld van je lichaam en je relatie, gekoppeld aan een naam en een toestel.
Waarom dit anders is
Niet alleen privacy. Autonomie.
Een vrouw vertrouwt een cyclus-app iets toe wat ze misschien niet eens met haar werkgever, haar ouders, de overheid, haar verzekeraar of haar partner zou delen. En die app kan dat behandelen als handelswaar. Daar zit een dubbele schending.
Eerst wordt iets extreem intiems verzameld: wanneer je menstrueert, wanneer je vruchtbaar bent, of je seks hebt, of je zwanger probeert te worden, of je het bent geweest, je klachten, je pijn, je stemmingen, je anticonceptie, misschien een miskraam of een abortus. Daarna kan diezelfde informatie uit de context worden getrokken. Jij voert het in als zelfzorg. Buiten je zicht kan het een profiel worden dat commercieel, politiek, medisch, juridisch of zelfs geopolitiek bruikbaar is.
De wrangheid: wat bedoeld is om een vrouw meer regie over haar lichaam te geven, kan juist het instrument worden waarmee anderen iets over haar lichaam te weten komen. In jouw telefoon betekent een late menstruatie stress, of een kinderwens, of angst. In een datasysteem wordt het een signaal dat een vreemde mag duiden. En in situaties waar zwangerschap, abortus of seksualiteit politiek, religieus of juridisch beladen zijn, is zulke data niet neutraal. Dan wordt informatie over je lichaam macht over jou.
Een cyclus-app belooft: begrijp je lichaam.
Achter de schermen kan ze ook iets anders betekenen: maak je lichaam begrijpelijk voor anderen. De meest persoonlijke vorm van zelfkennis, omgezet in bezit van onbekenden.
Wat ze delen
Drie apps, en toch dezelfde advertentie-ID
De drie apps verschillen sterk, maar twee dingen hebben ze gemeen. Geen van de drie vraagt een locatiepermissie, dat is netjes. En alle drie vragen wel de advertentie-identifier (AD_ID) en de attributie-rechten van Androids Privacy Sandbox. Ook Clue, de app met de beste privacyreputatie, doet dat in de actuele versie, terwijl een oudere versie die ik ernaast legde dat recht nog niet vroeg. De advertentie-ID is het unieke nummer waarmee je toestel herkenbaar is voor advertentiedoeleinden. Dat een cyclus-app dat nummer opvraagt, is geen kleinigheid.
Het echte verschil zit in hoeveel derde partijen er meeluisteren. Ik heb per app geteld hoeveel externe diensten gegevens kunnen ontvangen, op basis van de ingebouwde bibliotheken. Het verschil is groot.
Clue4
Braze, Adjust, Datadog, Firebase
Flo6
Firebase, AppsFlyer, TikTok, Meta, Sentry, Auth0
Clover12
vier advertentienetwerken, Adjust, Amplitude, Firebase, Meta, Yandex, VK, YooMoney, SberPay
Externe diensten per app. Het aantal derde partijen dat gegevens kan ontvangen, geteld uit de bibliotheken in de app. Clue draagt er vier, Clover twaalf.
En er is iets wat in geen van de drie zit: een herkenbaar toestemmingsframework. Ik vond in geen enkele app een Consent Management Platform of de IAB-standaard voor transparantie en toestemming (geen Didomi, OneTrust, Usercentrics, Sourcepoint of Google UMP). Dat betekent dat de toestemmingsvraag, voor zover die er is, in de app zelf wordt afgehandeld en niet als gestandaardiseerd signaal naar de advertentiepartners wordt doorgegeven. Voor een categorie zo gevoelig als deze is dat een opvallende leegte.
De kaart
Het meeste gaat naar de VS, bij Clover ook naar Rusland
Alle drie apps sturen tracking en telemetrie naar verwerkers onder Amerikaans recht: Google en Firebase bij alle drie, en afhankelijk van de app ook Meta, TikTok, AppsFlyer, Braze, Datadog, Sentry, Auth0 en Amplitude. Clue houdt zijn functionele inhoud daarbij in de EU. Clover voegt er een hele laag aan toe die in Rusland eindigt.
De datastromen. Petrol is functioneel en blijft in Europa. De oranje bogen zijn tracking richting de Verenigde Staten, bij alle drie apps. De gestippelde rode bogen zijn de Russische laag, en die zit alleen in Clover. Bestemmingen geverifieerd via DNS, IP-geolocatie en het TLS-certificaat van de ontvanger.
Endpoints van Google worden via anycast vaak op een Europese rand-server geraakt, dus fysiek reist je data soms niet de oceaan over. Maar de partij die de gegevens ontvangt en verwerkt is het buitenlandse moederbedrijf, en dat valt onder buitenlands recht. Voor de vraag wie er bij je data kan, telt de verwerker, niet alleen de plek van de kabel.
Clue
BioWink, Berlijn. De soberste stack. Eigen API in de EU, gepind. Geen advertentienetwerk, geen Meta. Wel sinds kort de advertentie-ID. EUVS
Flo
Flo Health, VS. Privacy-laag via Anonymous Mode, maar met Meta, TikTok, AppsFlyer en Google aan boord. De breedste gezondheidsrechten. VS
Clover
Wachanga. Vier advertentienetwerken plus een complete Russische laag: Yandex, VK, YooMoney, SberPay. EUVSRU
App 01
Clue, de soberste, maar niet leeg
Clue maakt zijn reputatie grotendeels waar. De inhoud, je cyclus en symptomen, gaat naar een eigen API (api.helloclue.com) die op Amazon-infrastructuur in Europa draait, en die verbinding is extra beveiligd: de app pint het certificaat met vijf vingerafdrukken, zodat onderschepping veel moeilijker wordt. Artikelen komen via een contentdienst binnen. Er zit geen advertentienetwerk in, en geen Meta-SDK.
Jouw toestelClue 256.0
→
api.helloclue.comeigen API, AWS EUContentfulcontentAdjustattributie, DEBrazeengagement, VSDatadogmonitoring, VSFirebase / GA4Google, VS
Clue. Petrol blijft in Europa, oranje gaat naar de VS. De tracking-laag is beperkt tot engagement, attributie en monitoring.
Toch is sober niet hetzelfde als leeg. Clue draagt een marketing- en meetlaag mee die naar Amerikaanse bedrijven wijst: Braze voor klantbenadering, op een datacenter aan de Amerikaanse oostkust, Datadog voor monitoring, en de Firebase- en Google Analytics-bouwstenen. Attributie loopt via Adjust, dat zijn servers in Duitsland heeft. De app vraagt sinds kort ook de advertentie-ID en leest een beperkte set biometrie via Health Connect (hartslagvariabiliteit, rusthartslag, huidtemperatuur, slaap, gewicht), maar uitsluitend lezen, en niet de menstruatie- of seksuele-activiteit-categorieën. Het beeld: de privacyvriendelijkste van de drie, maar ook hier deelt de app gedrag en engagement met Amerikaanse verwerkers.
Bewijs. In de code aangetroffen: com/braze (477 class-referenties), com/adjust/sdk (246), com/datadog (53), Firebase en GA4. Endpoints: sdk.iad-01.braze.com (Braze, VS-oost), app.adjust.com (Adjust GmbH, Duitsland), api.helloclue.com (AWS, EU, certificaat gepind). Geen Meta-SDK aangetroffen.
Toon alle diensten en endpoints van Clue
Dienst of endpoint
Wat het doet
Waar
api.helloclue.com
eigen API: cyclus, symptomen, account (certificaat gepind)
Permissies: advertentie-ID plus AdServices-attributie, biometrie, push, install-referrer, Play Billing. Geen locatie, geen Meta-SDK.
App 02
Flo, een privacy-laag bovenop een brede tracker-set
Flo is het interessantste geval, want het trekt twee kanten op tegelijk. Na een schikking met de Amerikaanse toezichthouder FTC in 2021, over het delen van gezondheidsdata met onder andere Facebook en Google, investeerde Flo zichtbaar in privacy. De app heeft een Anonymous Mode die telemetrie via een speciale gateway stuurt, een techniek waarbij Flo de gegevens niet aan een IP-adres of identiteit kan koppelen. Die gateway is er echt en antwoordt live.
Flo. De eigen backend en alle trackers staan onder Amerikaanse jurisdictie. De privacy-gateway is een laag bovenop diezelfde infrastructuur.
Tegelijk draagt diezelfde app in 2026 nog steeds de SDK's van Meta, TikTok, AppsFlyer en Google mee, plus Sentry voor crashes en Auth0 voor inloggen. En Flo vraagt de breedste, gevoeligste set rechten van de drie. Via Health Connect leest het negentien categorieën, waaronder menstruatie, tussentijdse bloedingen, cervixslijm, ovulatietesten en seksuele activiteit, en het schrijft er zes terug, waaronder opnieuw seksuele activiteit, cervixslijm en ovulatietesten. De spanning is dus reëel: de verzendinfrastructuur naar advertentie- en analytics-partijen zit ingebouwd, en de privacy-laag bepaalt hoeveel daarvan herleidbaar blijft. Welke van de twee wint bij een concrete handeling, is precies wat een statische analyse niet kan beslissen.
Bewijs. In de code aangetroffen: androidx/health/connect (1068 class-referenties, lezen 19 plus schrijven 6 categorieën inclusief seksuele activiteit), io/sentry (1046), com/appsflyer (477), Firebase en GA4 (452), com/tiktok (127), com/facebook (98), com/auth0 (82). De privacy-gateway ohttp-gateway-bhttp-public.owhealth.com antwoordt live (HTTP 200). Backend owhealth.com onder Amerikaanse jurisdictie.
Permissies: advertentie-ID plus AdServices, activity recognition, basic phone state, biometrie, en Huawei- en Samsung-integraties.
App 03
Clover, advertenties plus een Russische laag
Clover is een gratis app die op advertenties draait, en dat is in de code goed te zien. Er zitten vier advertentienetwerken in: Google AdMob, met aanvulling via AppLovin, ironSource en Fyber. Daarnaast Adjust voor attributie, Amplitude en Firebase voor analytics, en de Meta-SDK. Voor een gevoelige gezondheidsapp is dat al een volle commerciële stapel.
Clover. Naast de Amerikaanse advertentie- en analytics-laag staat een complete Russische laag: analytics, sociale login en twee betaalsystemen.
Daarbovenop staat iets wat ik bij de andere twee niet zag: een uitgebreide Russische laag. De app bevat Yandex AppMetrica voor analytics, VK voor sociale login, en de volledige account- en betaal-SDK's van YooMoney en SberPay. De bijbehorende adressen draaien op typisch Russische webservers, wat de operators bevestigt. De app staat bovendien onversleuteld verkeer toe naar een YooMoney-domein, een uitzondering op het verder versleutelde geheel. En er zit een ingebouwde, merk-gesponsorde vragenlijst in: een complete Kotex-flow die naar je cyclus vraagt. Of de Russische componenten bij een Nederlandse gebruiker actief worden, hangt af van regio en server-instellingen, maar de code wordt onverkort meegeleverd. Het is de breedste jurisdictie-spreiding van de drie, in de meest gevoelige datacategorie.
Bewijs. In de code aangetroffen: ru/yoomoney (7006 class-referenties), io/appmetrica (Yandex, 2041), gms/ads (AdMob, 673) met aanvulling via AppLovin, ironSource en Fyber, com/adjust/sdk (268), SberPay via gate1.spaymentsplus.ru, com/vk (29), com/facebook (26). Cleartext toegestaan naar certs.yoomoney.ru. Resources bevatten een Kotex-vragenlijst (kotex_assessment_*).
Toon alle diensten en endpoints van Clover
Dienst of endpoint
Wat het doet
Waar
cdn.wachanga.app
eigen CDN (Caddy)
Hetzner, DE
AdMob googleads.g.doubleclick.net, plus AppLovin, ironSource, Fyber
advertenties en mediation (673)
VS
Adjust app.adjust.com
attributie (268)
DE
Amplitude
analytics
VS/EU
Firebase / GA4
analytics (608 + 460)
VS
Meta / Facebook-SDK
events (26)
VS
Yandex AppMetrica appmetrica.io
analytics (2041)
RU
VK id.vk.com
sociale login (29)
RU
YooMoney, YooKassa, SberPay spaymentsplus.ru
betalingen en account (7006 + 344)
RU
Permissies: advertentie-ID plus AdServices en de Topics-API, READ_PHONE_STATE. Cleartext toegestaan naar certs.yoomoney.ru. Ingebouwde Kotex-vragenlijst.
Naast elkaar
De vergelijking
Clue
Flo
Clover
Identiteit en rechten
Maker
BioWink (DE)
Flo Health (VS)
Wachanga
Advertentie-ID
ja
ja
ja, plus Topics-API
Locatie
nee
nee
nee
Health Connect
lezen, beperkt
lezen 19, schrijven 6, incl. seksuele activiteit
geen
Tracking en geld
Advertentienetwerk
geen
geen
vier
Meta-SDK
nee
ja
ja
TikTok-SDK
nee
ja
nee
Attributie
Adjust (DE)
AppsFlyer (VS)
Adjust (DE)
Analytics
Firebase, Braze, Datadog
Firebase, Sentry
Firebase, Amplitude, Yandex
Login en betalen
eigen, Play Billing
Auth0, Play Billing
VK, YooMoney, SberPay
Governance
Toestemmingsframework
geen
geen
geen
Cert-pinning eigen API
ja, 5 pins
niet zichtbaar
nee
Jurisdicties
EUVS
VS
EUVSRU
Zelf doen
Wat je kunt doen zonder je app op te geven
Kies bewust. Wil je het soberst, dan is Clue van de drie de minst vergaande: geen advertentienetwerk, geen Meta-SDK, en je inhoud blijft in Europa.
Reset je advertentie-ID. Alle drie apps vragen die identifier. In de Android-instellingen onder Privacy kun je hem wissen, en je kunt gepersonaliseerde advertenties helemaal uitzetten.
Wees zuinig met Health Connect. Vooral bij Flo bepaalt Health Connect hoeveel intieme categorieën de app mag lezen en schrijven. Geef alleen toegang tot wat je echt nodig hebt, en trek het later weer in als je twijfelt.
Gebruik de privacymodus als die er is. Flo's Anonymous Mode bestaat echt en helpt. Zet hem aan als je Flo gebruikt.
Denk na over de gevoeligste invoer. Een app die niet weet of je zwanger probeert te worden, kan dat ook niet doorgeven. Niet alles hoeft erin.
Conclusie
Drie apps voor dezelfde, uiterst gevoelige taak, en drie heel verschillende antwoorden op de vraag waar je data heen gaat. Clue houdt het Europees en sober, al vraagt ook deze app inmiddels de advertentie-ID. Flo bouwt een echte privacy-laag, maar bovenop een infrastructuur die nog vol zit met de SDK's van advertentie- en socialmediabedrijven, en het vraagt de meest intieme gezondheidsrechten. Clover spreidt analytics, login en betalingen uit over drie jurisdicties, tot in Rusland, en draagt vier advertentienetwerken mee.
Geen van deze keuzes is een ongeluk, het is hoe de apps zijn gebouwd. En het is precies het soort keuze dat iemand die elke dag haar cyclus invoert zou moeten kunnen wegen. Dit dossier legt die keuzes naast elkaar op tafel.
Addendum, 12 juni 2026
Bestaat er dan wél een veilige? Ja: drip.
drip. kan je gegevens niet doorverkopen, want de app kan ze technisch niet eens versturen.
De logische vervolgvraag op dit dossier is: is er dan een menstruatie-app die het wél goed doet? Die is er. drip. is gratis, open source, en gemaakt door een non-profit (Heart of Code). Ik heb hem op dezelfde manier ontleed, en ook echt op een testtelefoon laten draaien.
Het verschil met Clue, Flo en Clover zit in één detail dat alles bepaalt: drip vraagt niet eens toestemming om het internet te gebruiken. Een Android-app die dat recht niet heeft, kan geen enkele verbinding naar buiten openen. Geen advertentienetwerk, geen analytics, geen server in de VS of Rusland, want er is simpelweg geen weg naar buiten. Op de testtelefoon verstuurde de app dan ook nul bytes, terwijl dat toestel verder gewoon online was.
Alles wat je invoert, van menstruatie tot temperatuur, seks en stemming, blijft in een database op je eigen telefoon. Geen account, geen advertentie-ID, geen cloud, en geen enkele meet- of reclamebibliotheek in de app. Je kunt drip op slot zetten met een pincode en je gegevens laten versleutelen. En omdat de broncode openbaar is, kan iedereen dit zelf nakijken in plaats van een privacybelofte te moeten geloven.
Eerlijk over de keerzijde. drip is soberder van opzet: er is geen synchronisatie tussen apparaten en geen cloud-back-up, dus raak je je telefoon kwijt zonder eerst te exporteren, dan ben je je gegevens kwijt. En je data staat standaard onversleuteld op het toestel; zet de pincode en versleuteling zelf aan als je dat wilt. Een back-up maak je met de exportknop, en jij bepaalt waar dat bestand heen gaat.
Methode en reproductie
Onderzocht: Clue 256.0 (com.clue.android), Flo 9.106.0 (org.iggymedia.periodtracker) en Clover 7.32.1 (com.wachanga.womancalendar), Android, actuele releases. Statisch: het manifest en de resources zijn met apktool gedecodeerd (rechten, exported componenten, deeplinks, network-security-config), en de SDK-inventaris en endpoints zijn uit de dex-bestanden gehaald via class-signatuur-matching en string-extractie. Dynamisch, zonder toestel: elke ontdekte bestemming is via DNS opgezocht, gegeolokaliseerd, en geverifieerd met een live HTTP-respons en het TLS-certificaat van de operator. Niet gedaan: een ingelogde, live verkeersmeting die laat zien welke velden op welk moment vuren. De aantallen class-referenties zijn een maat voor het gewicht van een bibliotheek in de code, geen verkeersmeting. De apps zijn legaal verkregen en op een eigen omgeving geanalyseerd.
Verantwoording. Statische APK-analyse met endpoint-verificatie, juni 2026. Bevindingen reproduceerbaar; serverlocaties geverifieerd op het moment van schrijven. Onderzoek via mickbeer.com.
De sterkste bevindingen liggen achter DigiD en vitale publieke diensten
De sterkste bevindingen liggen stelselmatig bij geauthenticeerde, vitale publieke diensten: achter je DigiD, in de infrastructuur onder de staatsinlog, op de openbare weg. Precies daar heeft de burger geen alternatief en geeft hij geen toestemming, en precies daar wordt het minst gemeten. Een commerciele app kun je mijden. De overheid en de vitale infrastructuur niet.
De sterkste bevindingen liggen waar geen keuze is¶
Als ik mijn eigen werk overzie, valt er een patroon op dat ik niet vooraf had bedacht. De sterkste bevindingen liggen stelselmatig bij geauthenticeerde, vitale publieke diensten. Achter je DigiD. In de infrastructuur onder de staatsinlog. Op de openbare weg. Dat is waar het gewicht van wat ik vind het grootst is.
Dat is opmerkelijk, want het is ook de plek waar het het minst zou moeten kunnen. Precies daar heeft de burger geen alternatief. En precies daar geeft hij geen toestemming. Twee dingen die er samen voor zorgen dat een schending daar zwaarder telt dan dezelfde schending bij een willekeurige webshop.
Begin bij de toestemming. Achter een overheidslogin is toestemming zelden de juridische basis voor de dienst. Je logt in bij een publieke taak, en die taak rust op de wet, niet op je klik. Dat is precies waarom tracking daar zo misplaatst is. Voor het plaatsen en uitlezen van niet-functionele trackers vraagt de wet apart om toestemming, en die vraag komt er achter de inlog vaak niet. Er is dan geen grond voor de tracker, en toch vuurt hij soms. Dat is het type bevinding dat ik bedoel.
Dan het alternatief. Een commerciële app kun je mijden. Een merk kun je boycotten. Bevalt een dienst je niet, dan stap je over. Die uitweg disciplineert de aanbieder. Bij de overheid en de vitale infrastructuur ontbreekt die uitweg. Je moet er langs, of je wilt of niet. Er is geen tweede DigiD. Er is geen concurrerende openbare weg. De prikkel die een markt normaal geeft om het netjes te doen, ontbreekt precies daar waar de burger het meest kwetsbaar is.
Hier komt de wrange kant. Precies daar wordt het minst gemeten. De aandacht van onderzoekers, pers en toezicht gaat naar de zichtbare gevallen. Naar de app die in het nieuws komt. Naar het bedrijf met een naam die klikt. De infrastructuur onder de staatsinlog is grijs, technisch en saai, en ze trekt geen koppen. Daardoor kijkt er structureel te weinig iemand.
Dit is een afgeleide observatie, geen harde telling van alle toezichtactiviteit. Ik baseer haar op waar mijn eigen sterkste bevindingen vandaan komen en op hoe weinig gezelschap ik daar aantref. De gevallen die het zwaarst wegen, blijken de gevallen te zijn waar vrijwel niemand anders meet. Dat is een patroon dat ik keer op keer tegenkom, en het verklaart waarom die bevindingen er nog liggen om gevonden te worden.
Zet de twee assen naast elkaar. Aan de ene kant de ernst van de schending. Aan de andere kant de ontsnappingsmogelijkheid van wie geraakt wordt. Bij een commerciële dienst met een lichte schending kun je weglopen, en de schade blijft klein. Bij een vitale dienst met dezelfde schending kun je niet weglopen, en de schade raakt iedereen die de dienst moet gebruiken.
Dat maakt het gewicht van een schending daar groter, en de afwezigheid van toezicht schrijnender. Het is de combinatie die telt. Een lek achter DigiD raakt niet een zelfgekozen klantengroep. Het raakt iedereen die belasting doet, een uitkering aanvraagt, een vergunning regelt. Er is geen deelverzameling die zichzelf eruit had kunnen kiezen. De hele bevolking zit in het bereik, zonder dat iemand ja heeft gezegd.
Hieruit volgt een simpele norm. Waar de uitweg ontbreekt, hoort de meetlat juist het strengst te zijn. De redenering loopt precies andersom dan de praktijk. In de praktijk meet men het hardst waar je kunt weglopen, want daar is de aandacht. De logica zegt dat je het hardst moet meten waar je niet kunt weglopen, want daar is de schade het grootst en de zelfcorrectie het kleinst.
Dezelfde meetlat voor overheid en app is daarbij het minimum. Sterker nog, de plekken zonder uitweg verdienen strengere toetsing dan de plekken met uitweg, om precies dezelfde reden dat je een gedwongen situatie zwaarder beschermt dan een vrijwillige. De burger die geen keuze heeft, heeft de bescherming het hardst nodig, en krijgt haar nu het minst.
Voor mijn eigen werk betekent dit een prioriteit. Ik richt mijn metingen op de plekken waar de burger niet weg kan. Achter de inlog, in de vitale infrastructuur, op de openbare weg. Dat is lastiger meten, want het zit achter authenticatie en het is technisch grijs. Het is ook waar de bevindingen het zwaarst wegen, en waar ze anders blijven liggen.
Ik hou daarbij het bewijsniveau streng, juist omdat de inzet hoog is. Een naam in de code van een overheidsdienst is nog geen bewijs van wat er met je data gebeurt. Ik meet het echte verkeer, ik leg de HAR erbij, en ik label wat gemeten is, wat afgeleid is en wat vermoed. Waar niemand anders kijkt, moet mijn eigen werk het strengst kloppen, want er is geen tweede meter die mij corrigeert.
Het helpt om twee dingen los te trekken die makkelijk op één hoop belanden. De eerste as is de ernst van wat er technisch gebeurt. Vuurt er een tracker, gaan er identifiers mee, verlaat er data het toestel. Dat is meetbaar en het staat los van wie de dienst aanbiedt. De tweede as is de macht van wie geraakt wordt om zich te onttrekken. Kan de burger weglopen, of moet hij erlangs.
De ernst van een bevinding is de combinatie van die twee, niet één ervan alleen. Een zware technische schending bij een dienst die je kunt mijden, weegt lichter dan een lichtere schending bij een dienst die je moet gebruiken. Door de assen uit elkaar te houden, voorkom ik twee fouten. De ene fout is een technisch klein geval opblazen omdat het bij de overheid speelt. De andere fout is een technisch groot geval wegwuiven omdat het bij een commerciële partij speelt die je kunt vermijden. Ik weeg beide assen, en ik benoem ze apart.
De reden dat deze bevindingen blijven bestaan, zit in hoe de diensten gebouwd worden. Een overheidsdienst is een samenstel van ingekochte onderdelen. Een analytics-component hier, een kaartdienst daar, een standaardbibliotheek voor een formulier. Elk onderdeel draagt zijn eigen datastromen mee, ingesteld door de leverancier, niet door de opdrachtgever. De bouwer die het samenvoegt, ziet vaak niet welke verzoeken elk onderdeel doet.
Zo ontstaat een tracker die niemand bewust heeft gewild en die toch vuurt. De beslisser dacht een kaart in te kopen. De leverancier leverde een kaart met een meetstroom eraan. De bouwer zette het onder de inlog zonder de stroom uit te zetten. Elke schakel deed iets redelijks, en het geheel lekt. Dit is afgeleid uit hoe samengestelde software werkt, en per geval te toetsen aan het verkeer dat de dienst echt uitstuurt. Het verklaart waarom het patroon zo taai is. Er is geen kwaadwil voor nodig om het te laten voortbestaan, alleen een keten waarin niemand het geheel meet. En zolang niemand aan de kant van het toezicht meet, blijft het staan.
AVG, artikel 6 lid 1 onder everwerking voor een publieke taak, waar de burger geen alternatief heeft
gepubliceerdnotitiezekerRTB, adtech en brokersbronnenverwant
Een cookie-match bewijst herkenning, geen bod
Voordat er geboden wordt, wisselen advertentiebedrijven eerst herkenningsnummers uit, zodat ze weten dat het om dezelfde browser gaat. Die koppeling bewijst herkenning, niet dat er op dat moment op de aandacht van de bezoeker werd geboden. Wie het een voor het ander aanziet, beweert meer dan de meting toont.
gepubliceerdnotitiewaarschijnlijkOverheid, toezicht en de wetbronnenverwant
Herkomst is geen bestemming
Een buitenlandse eigenaar of oorsprong betekent niet dat je gegevens naar dat land gaan. Herkomst en bestemming zijn twee dingen, en alleen de bestemming is te meten. Wie ze verwart, maakt van een eigendomsverhouding een datastroom die niet is aangetoond.
Zie je deze cirkels? Eén oranje stip = jij. Acht blauwe = de bekende namen. De rest, 130+ grijze stippen, zijn databrokers die je nooit van je leven hebt gehoord.
138 bedrijven krijgen jouw data als je NU.nl opent.
Dat zijn de partners die je apparaat tracken zodra je de site laadt:
Oranje = jij
Blauw = bekende namen (Google, Meta)
Grijs = 130+ onbekende databrokers
Je klikt “Akkoord” en geeft onbekende bedrijven toegang tot:
Je surfgedrag
Je locatie
Je apparaat-ID
Je interesses
Ken jij deze bedrijven?
Aarki, Inc. (Singapore mobile ad-tech)
AdDefend GmbH (anti-adblocking, Duitsland)
Adelaide Metrics Inc. (attention metrics, VS)
Adform A/S (programmatic DSP, Denemarken)
Adhese (Belgian ad server)
Adnami Aps (high-impact ads, Denemarken)
… en 132 meer.
Ik ook niet. Toch gaf ik ze toestemming door “Akkoord” te klikken.
Het probleem: “informed consent”
GDPR zegt: toestemming moet geïnformeerd zijn.
Maar hoe kun je informed consent geven aan bedrijven die je niet kent?
Je kunt niet. Dat is misinformed consent.
Wat ik deed
Twee weken technisch onderzoek, Firefox DevTools, HAR-files, reproduceerbaar.
Vandaag: formele melding bij de Autoriteit Persoonsgegevens.
Gemeld voor:
NU.nl, dark pattern (8× moeilijker weigeren dan accepteren)
gepubliceerdnotitiewaarschijnlijkOverheid, toezicht en de wetbronnenverwant
Wie je herkenningsnummer deelt, verwerkt je samen
Wisselen twee bedrijven het herkenningsnummer van een browser uit, dan herkennen ze allebei dezelfde persoon. Dat is geen technisch detail maar een gedeelde verwerking. En het roept de vraag op wie er verantwoordelijk voor is.
101 Advertentiepartners: Het Probleem Met “Informed Consent” op Nederlandse Nieuwssites
Een diepgaand onderzoek naar cookie compliance bij NU.nl, NOS.nl en de illusie van privacy op het Nederlandse internet
door Mick Beer | 22 maart 2026
Je opent NU.nl. Een cookie banner verschijnt:
“We gebruiken cookies… Onze 104 advertentiepartners gebruiken cookies voor gepersonaliseerde advertenties.”
Je klikt “Akkoord”, zoals 95% van alle Nederlanders doet.
Maar weet je met wie je je data zojuist hebt gedeeld?
Pop quiz: Ken je deze bedrijven?
- Aarki, Inc.
- AdDefend GmbH
- Adelaide Metrics Inc.
- Adform A/S
- Adhese
- Adnami Aps
Nee? Ik ook niet. En dat is exact het probleem.
Het Experiment
Ik ben security architect en werkzaam als onderzoeker aan een wetenschappelijk thesis over privacy compliance. Gedurende twee weken heb ik vijf grote Nederlandse nieuwssites getest op naleving van de Algemene Verordening Gegevensbescherming (AVG/GDPR) en de ePrivacy Richtlijn.
Test setup:
- Fresh Fedora Linux installatie (geen cookies, geen geschiedenis)
- Firefox 124.0 met standaard instellingen (geen extensions)
- DevTools Storage Inspector + Network tab
- Tijdsperiode: 15–22 maart 2026
Plus 3 “functionele” partners (niet uitschakelbaar):
Adjust Digital A/S, Polar Mobile Group Inc., Seenthis AB.
Plus 4 mediapartners:
Google, Meta, Microsoft, TikTok.
Plus 13 externe media partners:
Dutch Selection, Google Maps, Knight Lab, Meta, Omny, Snap Inc., Soundcloud, Spotify AB, Streamable, TikTok, Truth Social, X Corp., YouTube.
Totaal: 138 partijen krijgen toegang tot jouw data.
Het Probleem Met “Informed Consent”
De AVG (GDPR) Artikel 4.11 definieert toestemming als:
“elke vrije, specifieke, geïnformeerde en ondubbelzinnige wilsuiting”
Let op dat woord: geïnformeerd.
Volgens de European Data Protection Board (EDPB) Guidelines 05/2020 betekent “geïnformeerd”:
“Being ‘informed’ relates to the controller’s duty to provide certain minimum information to enable individuals to make informed decisions.”
Hier is de kritieke vraag:
Kun jij een “informed decision” maken over bedrijven die je niet kent?
Van de 138 partijen, hoeveel ken je?
Gemiddelde gebruiker kent (~10–15):
- Google
- Meta/Facebook
- Microsoft
- Amazon
- LinkedIn
- TikTok
- Spotify
- YouTube
- X/Twitter
- Snapchat
Gemiddelde gebruiker kent NIET (~123–128):
- Aarki, Inc., Mobile ad-tech platform (Singapore)
- AdDefend GmbH, Anti-adblocking technologie (Duitsland)
- Adelaide Metrics Inc., Attention measurement platform (VS)
- Adform A/S, DSP/SSP programmatic advertising (Denemarken)
- Adhese, Belgian ad server
- Adnami Aps, High-impact ad formats (Denemarken)
- … + 117 meer
Ratio: ~8% bekend, 92% onbekend.
Wat Doen Deze Bedrijven Eigenlijk?
Laten we drie willekeurige partners analyseren:
Aarki, Inc.
Activiteit: Mobile advertising platform voor in-app ads
Locatie: Singapore
Data: Device IDs, app usage, location, behavioral data
Privacy policy: 12 pagina’s juridisch Engels
Opt-out: Via NAI/DAA mechanisme (VS-systeem)
AdDefend GmbH
Activiteit: Anti-adblocking technologie
Locatie: Duitsland
Strategie: Detecteert adblockers, toont anti-adblock boodschappen
Ironie: Je geeft toestemming aan bedrijf dat je toestemming wil omzeilen
Adelaide Metrics Inc.
Activiteit: “Attention measurement”, meet hoe lang je naar ads kijkt
Data: Eye-tracking proxies, scroll depth, dwell time
De Autoriteit Persoonsgegevens (AP) heeft in 2025–2026 een actieve cookie banner campagne gevoerd. Tussen april en november 2025 werden 200+ waarschuwingen uitgegeven aan Nederlandse websites voor exact dit probleem.
AP richtlijnen (2025):
“Cookie banners MOETEN een directe ‘Alles weigeren’ knop bevatten op het eerste niveau, gelijkwaardig aan de ‘Akkoord’ knop.”
NU.nl heeft deze waarschuwingen genegeerd. 75% van gewaarschuwde sites paste hun banners aan. NU.nl behoort tot de resterende 25% die nu in de handhavingsfase zitten.
EDPB Guidelines 05/2020, para 38–41:
“Consent interfaces must not give more prominence to the option to accept than to the option to refuse.”
NU.nl’s banner geeft 8× meer prominence aan accept.
Dit is geen grijs gebied. Dit is een duidelijke overtreding.
Wat doen ze echt:
- Track app downloads via cookies
- Cross-device attribution (welke ad leidde tot welke app install)
- Retargeting campagnes
- Fraud detection (legitiem)
Vraag: Is attribution tracking “functioneel”?
ePrivacy definitie “strictly necessary”: Cookies die technisch noodzakelijk zijn voor de functionaliteit die de gebruiker expliciet vraagt.
Voorbeelden strictly necessary:
- Sessie cookies (ingelogd blijven)
- Winkelwagen cookies (e-commerce)
- Beveiligings-tokens (CSRF protection)
Adjust attribution tracking:
- Niet nodig om nieuws te lezen
- Niet nodig voor site functionaliteit
- Enkel nodig voor DPG’s marketing attribution
Wat doen ze echt:
- Push notifications
- In-app messaging
- User analytics
- A/B testing
Vraag: Zijn push notifications “functioneel”?
Alleen als de gebruiker expliciet om notificaties vraagt. MAAR Polar draait VOORDAT de gebruiker die keuze maakt.
Conclusie: NIET strictly necessary.
De Cookie Wall In Vermomming
AP precedent: Kruidvat €600.000 boete (2020) voor cookie wall.
Definitie cookie wall:
Toegang tot website afhankelijk maken van toestemming voor niet-noodzakelijke cookies.
Kruidvat’s wall: “Accept cookies of verlaat de site”
NU.nl’s wall: “Deze partners zijn niet uitschakelbaar“
Het verschil is subtiel maar belangrijk:
- Kruidvat: Expliciete blokkade
- NU.nl: Impliciete verplichting
Juridisch effect: Hetzelfde. Geen vrije keuze.
GDPR Art. 7.4:
“Bij de beoordeling of de toestemming vrij is gegeven, wordt […] rekening gehouden met de vraag of […] de uitvoering van een overeenkomst […] afhankelijk is gesteld van toestemming”
Als “advertentiepartners” niet uitschakelbaar zijn, is toestemming niet vrij gegeven.
Contrast: Bol.com Best Practice
Niet alle Nederlandse websites falen.
Bol.com, de grootste e-commerce site van Nederland, laat zien dat compliance WEL mogelijk is:
Bol.com’s aanpak:
- 13 partners (vs NU.nl’s 138)
- Direct “Weigeren” knop (gelijkwaardig aan “Accepteren”)
- Transparante uitleg per partner:
- Google Analytics: “Voor het analyseren van websiteverkeer”
- Meta Pixel: “Voor het meten van advertentie-effectiviteit”
- Microsoft Bing: “Voor het tonen van relevante advertenties”
- + Link naar privacy policy per partner
- Geen pre-consent tracking
- Geen “functionele” advertentiepartners
Resultaat:
- GDPR compliant
- Transparant
- Gebruiksvriendelijk
- Bewijs dat compliance MOGELIJK is
NU.nl en NOS.nl hebben geen excuus. Bol.com bewijst dat het kan.
Juridische Impact & AP Handhaving
De Autoriteit Persoonsgegevens heeft in de afgelopen jaren meerdere precedenten gecreëerd:
Recente AP Boetes (Privacy/Cookies)
Experian Nederland, €2.700.000 (oktober 2025)
- Overtreding: Vendor non-disclosure, data delen zonder consent
- Schaal: Miljoenen Nederlandse consumenten
- Aggraverende factor: Data broker (commercieel gewin)
NOS.nl (pre-consent tracking):
- Vergelijkbaar met Coolblue (€40k)
- Grotere schaal: 7,5M vs 5M visitors
- Aggraverende factor: Publieke sector (belastinggeld)
- Geschat risico: €60.000 tot €300.000
NU.nl (dark pattern + uninformed consent + functionele wall):
- Dark pattern: Vergelijkbaar met AP campagne (200+ warnings)
- Uninformed consent: Vergelijkbaar met Experian (vendor non-disclosure)
- Schaal: 12M unique visitors/maand, 144M pageviews/jaar
- DPG Media: Eerder AP-contact (€525k→€300k boete 2022)
- Geschat risico: €450.000 tot €1.200.000
Totaal geschat risico: €510.000 tot €1.500.000
Dit zijn conservatieve schattingen. De AP heeft de discretie om hoger te gaan bij systematische, hardnekkige overtredingen.
Systematisch Patroon in de Industrie
Dit is geen toevallig probleem. Dit is design-level non-compliance.
Patroon:
- Commercieel (NU.nl): Maximale data extractie, dark patterns
- Publiek (NOS.nl): Pre-consent tracking, gebrek aan technische compliance
- Best practice (Bol.com): Transparantie, gebruiksvriendelijk
Conclusie:
Compliance is MOGELIJK (Bol.com bewijst dit), maar de nieuwsindustrie kiest bewust voor non-compliance.
Wat Kun Je Doen?
Je hebt wettelijke rechten onder de AVG (GDPR). Hier is hoe je ze uitoefent:
1. Gebruik Je GDPR Rechten
Art. 21 AVG, Recht van bezwaar:Je hebt het recht bezwaar te maken tegen verwerking van je persoonsgegevens
Art. 17 AVG, Recht op verwijdering (“recht om vergeten te worden”):Je hebt het recht te vragen om verwijdering van je persoonsgegevens
Art. 15 AVG, Recht van inzage:Je hebt het recht te vragen welke gegevens een bedrijf over je heeft
2. De Tool: NL Data Opt-Out
Ik heb een gratis tool gebouwd die je helpt deze rechten uit te oefenen voor alle (bekende) 101+ Nederlandse data brokers:
https://apolloccrypt.github.io/nl-data-optout/
Wat doet de tool:
- Genereert gepersonaliseerde bezwaar-emails (Art. 21)
- Genereert verwijder-verzoeken (Art. 17)
- Genereert inzage-verzoeken (Art. 15)
- Voor ALLE 138 partners van NU.nl + extra Nederlandse data brokers
- 100% gratis, open source, geen data collectie
Hoe werkt het:
1. Vul je naam en email in (wordt NIET opgeslagen)
2. Kies je rechten (bezwaar, verwijdering, inzage)
3. Download zip met emails (of copy-paste de enkel email)
4. Verstuur via je eigen email client
5. Klaar (1–5 minuten totaal)
Bij deze volumes wordt non-compliance economisch onhoudbaar.
De industrie zal gedwongen worden om:
1. Aantal partners drastisch te reduceren
2. Transparantie te verbeteren
3. Dark patterns te verwijderen
4. Compliance serieus te nemen
Dit is economische druk die werkt.
4. Melding Bij De AP
Je kunt ook zelf een melding maken bij de Autoriteit Persoonsgegevens:
Wat te melden:
- Welke site (NU.nl, NOS.nl, andere)
- Welke overtreding (dark pattern, pre-consent, uninformed consent)
- Evidence (screenshots van cookie banner)
De AP neemt klachten serieus, vooral als er meerdere meldingen zijn over hetzelfde bedrijf.
Evidence & Reproduceerbaarheid
Dit onderzoek is volledig reproduceerbaar. Alle tests kunnen herhaald worden in 30 minuten totaal.
Test NOS.nl Pre-Consent (15 minuten)
Benodigdheden:
- Firefox browser
- Schone browser state (private mode of cache leegmaken)
Stappen:
1. Open Firefox DevTools (F12)
2. Open “Storage” tab
3. Open “Network” tab
4. Navigate naar nos.nl
5. DON’T CLICK op cookie banner
6. Observe: Cookies verschijnen AL in Storage tab
7. Observe: Network requests naar ContentInsights
8. Screenshot + timestamp
Verwacht resultaat: Cookies + tracking vóór consent
Test NU.nl Dark Pattern (15 minuten)
Stappen:
1. Navigate naar nu.nl
2. Count clicks voor accept flow
3. Count clicks voor reject flow
4. Screenshot banner (geen directe “Weigeren”)
5. Screenshot privacy-instellingen (101 partners)
Verwacht resultaat: 8:1 accept/reject ratio
Evidence Package
Voor volledige transparantie heb ik alle evidence beschikbaar:
De Diepere Vraag: Wat Is “Informed Consent” Eigenlijk?
Dit onderzoek stelt een fundamentele vraag:
Als je niet weet wat een bedrijf doet, kun je dan toestemming geven voor wat ze met je data doen?
De wet zegt: Nee. Toestemming moet “geïnformeerd” zijn (GDPR Art. 4.11).
Maar de realiteit is complexer:
Scenario 1: Technische Compliance
- NU.nl toont 101 partnernamen
- Voldoet letterlijk aan GDPR Art. 13.1.e (disclosure van ontvangers)
Scenario 2: Praktische Realiteit
- 92% van partners is onbekend bij gemiddelde gebruiker
- Geen uitleg wat partners doen
- Geen context, geen links, geen informatie
Vraag: Is dit “informed consent”?
Juridisch antwoord: Grijs gebied. GDPR vereist disclosure, maar de kwaliteit van die disclosure is debatabel.
Praktisch antwoord: Nee. Informed consent vereist begrip, niet alleen disclosure.
Analogie:
Stel je voor dat een arts je een medicijn voorschrijft:
Scenario A (NU.nl’s aanpak):
“Dit medicijn bevat 101 chemische stoffen: Acetaminophen, Benzocaine, Chlorpheniramine, Dextromethorphan, … [97 meer]. Hier is de volledige lijst. Akkoord?”
Scenario B (Informed consent):
“Dit is een pijnstiller met paracetamol. Het werkt door … Bijwerkingen kunnen zijn … Alternatieven zijn … Begrijpt u dit? Heeft u vragen?”
NU.nl doet Scenario A. Informed consent vereist Scenario B.
Call To Action: Pak Je Data Terug
Dit is niet alleen een theoretisch probleem. Dit raakt 20+ miljoen Nederlandse internetgebruikers dagelijks.
Jouw data wordt gedeeld met bedrijven die je niet kent, voor doeleinden die je niet begrijpt, met consequenties die je niet overziet.
Maar je hebt macht. De AVG (GDPR) geeft je wettelijke rechten. Gebruik ze.
Wat Je NU Kan Doen
Stap 1: Bewustwording
- Deel dit artikel (LinkedIn, Twitter, email)
- Informeer familie en vrienden
- Praat erover
Stap 2: Actie
- Gebruik de opt-out tool: https://apolloccrypt.github.io/nl-data-optout/
- Oefen je GDPR rechten uit (Art. 21, 17, 15)
- Verstuur de gegenereerde emails
Stap 3: Druk
- Meld bij AP als je niet-compliance ziet
- Review nieuwssites op Trustpilot/Google
- Stem met je aandacht (kies sites die privacy respecteren)
Stap 4: Politiek
- Contact je Tweede Kamer lid
- Ondersteun privacy-wetgeving
- Vraag om strengere handhaving
Mick Beer is security architect en onderzoeker met focus op privacy compliance. Dit artikel is onderdeel van een wetenschappelijk thesis over cookie compliance op Nederlandse websites. Alle bevindingen zijn gebaseerd op reproduceerbaar technisch onderzoek.
Disclaimer:
Dit artikel is geen juridisch advies. Voor juridische vragen over GDPR/AVG compliance, raadpleeg een privacy-advocaat of de Autoriteit Persoonsgegevens.
Zie je deze cirkels? Eén oranje stip = jij. Acht blauwe = de bekende namen. De rest, 130+ grijze stippen, zijn databrokers die je nooit van je leven hebt gehoord.
138 bedrijven krijgen jouw data als je NU.nl opent.
Dat zijn de partners die je apparaat tracken zodra je de site laadt:
Oranje = jij
Blauw = bekende namen (Google, Meta)
Grijs = 130+ onbekende databrokers
Je klikt “Akkoord” en geeft onbekende bedrijven toegang tot:
Je surfgedrag
Je locatie
Je apparaat-ID
Je interesses
Ken jij deze bedrijven?
Aarki, Inc. (Singapore mobile ad-tech)
AdDefend GmbH (anti-adblocking, Duitsland)
Adelaide Metrics Inc. (attention metrics, VS)
Adform A/S (programmatic DSP, Denemarken)
Adhese (Belgian ad server)
Adnami Aps (high-impact ads, Denemarken)
… en 132 meer.
Ik ook niet. Toch gaf ik ze toestemming door “Akkoord” te klikken.
Het probleem: “informed consent”
GDPR zegt: toestemming moet geïnformeerd zijn.
Maar hoe kun je informed consent geven aan bedrijven die je niet kent?
Je kunt niet. Dat is misinformed consent.
Wat ik deed
Twee weken technisch onderzoek, Firefox DevTools, HAR-files, reproduceerbaar.
Vandaag: formele melding bij de Autoriteit Persoonsgegevens.
Gemeld voor:
NU.nl, dark pattern (8× moeilijker weigeren dan accepteren)
AVG art. 26de bepaling waaraan deze bevinding is getoetst
gepubliceerdnotitiewaarschijnlijkRTB, adtech en brokersbronnenverwant
Elke browsermeting is een ondergrens
Een browsermeting legt alleen vast wat langs de browser loopt. Een groot deel van de handel speelt zich af tussen servers onderling, buiten dat zicht. Een bevinding uit de browser is daarom altijd een ondergrens, nooit het volledige beeld.
101 Advertentiepartners: Het Probleem Met “Informed Consent” op Nederlandse Nieuwssites
Een diepgaand onderzoek naar cookie compliance bij NU.nl, NOS.nl en de illusie van privacy op het Nederlandse internet
door Mick Beer | 22 maart 2026
Je opent NU.nl. Een cookie banner verschijnt:
“We gebruiken cookies… Onze 104 advertentiepartners gebruiken cookies voor gepersonaliseerde advertenties.”
Je klikt “Akkoord”, zoals 95% van alle Nederlanders doet.
Maar weet je met wie je je data zojuist hebt gedeeld?
Pop quiz: Ken je deze bedrijven?
- Aarki, Inc.
- AdDefend GmbH
- Adelaide Metrics Inc.
- Adform A/S
- Adhese
- Adnami Aps
Nee? Ik ook niet. En dat is exact het probleem.
Het Experiment
Ik ben security architect en werkzaam als onderzoeker aan een wetenschappelijk thesis over privacy compliance. Gedurende twee weken heb ik vijf grote Nederlandse nieuwssites getest op naleving van de Algemene Verordening Gegevensbescherming (AVG/GDPR) en de ePrivacy Richtlijn.
Test setup:
- Fresh Fedora Linux installatie (geen cookies, geen geschiedenis)
- Firefox 124.0 met standaard instellingen (geen extensions)
- DevTools Storage Inspector + Network tab
- Tijdsperiode: 15–22 maart 2026
Plus 3 “functionele” partners (niet uitschakelbaar):
Adjust Digital A/S, Polar Mobile Group Inc., Seenthis AB.
Plus 4 mediapartners:
Google, Meta, Microsoft, TikTok.
Plus 13 externe media partners:
Dutch Selection, Google Maps, Knight Lab, Meta, Omny, Snap Inc., Soundcloud, Spotify AB, Streamable, TikTok, Truth Social, X Corp., YouTube.
Totaal: 138 partijen krijgen toegang tot jouw data.
Het Probleem Met “Informed Consent”
De AVG (GDPR) Artikel 4.11 definieert toestemming als:
“elke vrije, specifieke, geïnformeerde en ondubbelzinnige wilsuiting”
Let op dat woord: geïnformeerd.
Volgens de European Data Protection Board (EDPB) Guidelines 05/2020 betekent “geïnformeerd”:
“Being ‘informed’ relates to the controller’s duty to provide certain minimum information to enable individuals to make informed decisions.”
Hier is de kritieke vraag:
Kun jij een “informed decision” maken over bedrijven die je niet kent?
Van de 138 partijen, hoeveel ken je?
Gemiddelde gebruiker kent (~10–15):
- Google
- Meta/Facebook
- Microsoft
- Amazon
- LinkedIn
- TikTok
- Spotify
- YouTube
- X/Twitter
- Snapchat
Gemiddelde gebruiker kent NIET (~123–128):
- Aarki, Inc., Mobile ad-tech platform (Singapore)
- AdDefend GmbH, Anti-adblocking technologie (Duitsland)
- Adelaide Metrics Inc., Attention measurement platform (VS)
- Adform A/S, DSP/SSP programmatic advertising (Denemarken)
- Adhese, Belgian ad server
- Adnami Aps, High-impact ad formats (Denemarken)
- … + 117 meer
Ratio: ~8% bekend, 92% onbekend.
Wat Doen Deze Bedrijven Eigenlijk?
Laten we drie willekeurige partners analyseren:
Aarki, Inc.
Activiteit: Mobile advertising platform voor in-app ads
Locatie: Singapore
Data: Device IDs, app usage, location, behavioral data
Privacy policy: 12 pagina’s juridisch Engels
Opt-out: Via NAI/DAA mechanisme (VS-systeem)
AdDefend GmbH
Activiteit: Anti-adblocking technologie
Locatie: Duitsland
Strategie: Detecteert adblockers, toont anti-adblock boodschappen
Ironie: Je geeft toestemming aan bedrijf dat je toestemming wil omzeilen
Adelaide Metrics Inc.
Activiteit: “Attention measurement”, meet hoe lang je naar ads kijkt
Data: Eye-tracking proxies, scroll depth, dwell time
De Autoriteit Persoonsgegevens (AP) heeft in 2025–2026 een actieve cookie banner campagne gevoerd. Tussen april en november 2025 werden 200+ waarschuwingen uitgegeven aan Nederlandse websites voor exact dit probleem.
AP richtlijnen (2025):
“Cookie banners MOETEN een directe ‘Alles weigeren’ knop bevatten op het eerste niveau, gelijkwaardig aan de ‘Akkoord’ knop.”
NU.nl heeft deze waarschuwingen genegeerd. 75% van gewaarschuwde sites paste hun banners aan. NU.nl behoort tot de resterende 25% die nu in de handhavingsfase zitten.
EDPB Guidelines 05/2020, para 38–41:
“Consent interfaces must not give more prominence to the option to accept than to the option to refuse.”
NU.nl’s banner geeft 8× meer prominence aan accept.
Dit is geen grijs gebied. Dit is een duidelijke overtreding.
Wat doen ze echt:
- Track app downloads via cookies
- Cross-device attribution (welke ad leidde tot welke app install)
- Retargeting campagnes
- Fraud detection (legitiem)
Vraag: Is attribution tracking “functioneel”?
ePrivacy definitie “strictly necessary”: Cookies die technisch noodzakelijk zijn voor de functionaliteit die de gebruiker expliciet vraagt.
Voorbeelden strictly necessary:
- Sessie cookies (ingelogd blijven)
- Winkelwagen cookies (e-commerce)
- Beveiligings-tokens (CSRF protection)
Adjust attribution tracking:
- Niet nodig om nieuws te lezen
- Niet nodig voor site functionaliteit
- Enkel nodig voor DPG’s marketing attribution
Wat doen ze echt:
- Push notifications
- In-app messaging
- User analytics
- A/B testing
Vraag: Zijn push notifications “functioneel”?
Alleen als de gebruiker expliciet om notificaties vraagt. MAAR Polar draait VOORDAT de gebruiker die keuze maakt.
Conclusie: NIET strictly necessary.
De Cookie Wall In Vermomming
AP precedent: Kruidvat €600.000 boete (2020) voor cookie wall.
Definitie cookie wall:
Toegang tot website afhankelijk maken van toestemming voor niet-noodzakelijke cookies.
Kruidvat’s wall: “Accept cookies of verlaat de site”
NU.nl’s wall: “Deze partners zijn niet uitschakelbaar“
Het verschil is subtiel maar belangrijk:
- Kruidvat: Expliciete blokkade
- NU.nl: Impliciete verplichting
Juridisch effect: Hetzelfde. Geen vrije keuze.
GDPR Art. 7.4:
“Bij de beoordeling of de toestemming vrij is gegeven, wordt […] rekening gehouden met de vraag of […] de uitvoering van een overeenkomst […] afhankelijk is gesteld van toestemming”
Als “advertentiepartners” niet uitschakelbaar zijn, is toestemming niet vrij gegeven.
Contrast: Bol.com Best Practice
Niet alle Nederlandse websites falen.
Bol.com, de grootste e-commerce site van Nederland, laat zien dat compliance WEL mogelijk is:
Bol.com’s aanpak:
- 13 partners (vs NU.nl’s 138)
- Direct “Weigeren” knop (gelijkwaardig aan “Accepteren”)
- Transparante uitleg per partner:
- Google Analytics: “Voor het analyseren van websiteverkeer”
- Meta Pixel: “Voor het meten van advertentie-effectiviteit”
- Microsoft Bing: “Voor het tonen van relevante advertenties”
- + Link naar privacy policy per partner
- Geen pre-consent tracking
- Geen “functionele” advertentiepartners
Resultaat:
- GDPR compliant
- Transparant
- Gebruiksvriendelijk
- Bewijs dat compliance MOGELIJK is
NU.nl en NOS.nl hebben geen excuus. Bol.com bewijst dat het kan.
Juridische Impact & AP Handhaving
De Autoriteit Persoonsgegevens heeft in de afgelopen jaren meerdere precedenten gecreëerd:
Recente AP Boetes (Privacy/Cookies)
Experian Nederland, €2.700.000 (oktober 2025)
- Overtreding: Vendor non-disclosure, data delen zonder consent
- Schaal: Miljoenen Nederlandse consumenten
- Aggraverende factor: Data broker (commercieel gewin)
NOS.nl (pre-consent tracking):
- Vergelijkbaar met Coolblue (€40k)
- Grotere schaal: 7,5M vs 5M visitors
- Aggraverende factor: Publieke sector (belastinggeld)
- Geschat risico: €60.000 tot €300.000
NU.nl (dark pattern + uninformed consent + functionele wall):
- Dark pattern: Vergelijkbaar met AP campagne (200+ warnings)
- Uninformed consent: Vergelijkbaar met Experian (vendor non-disclosure)
- Schaal: 12M unique visitors/maand, 144M pageviews/jaar
- DPG Media: Eerder AP-contact (€525k→€300k boete 2022)
- Geschat risico: €450.000 tot €1.200.000
Totaal geschat risico: €510.000 tot €1.500.000
Dit zijn conservatieve schattingen. De AP heeft de discretie om hoger te gaan bij systematische, hardnekkige overtredingen.
Systematisch Patroon in de Industrie
Dit is geen toevallig probleem. Dit is design-level non-compliance.
Patroon:
- Commercieel (NU.nl): Maximale data extractie, dark patterns
- Publiek (NOS.nl): Pre-consent tracking, gebrek aan technische compliance
- Best practice (Bol.com): Transparantie, gebruiksvriendelijk
Conclusie:
Compliance is MOGELIJK (Bol.com bewijst dit), maar de nieuwsindustrie kiest bewust voor non-compliance.
Wat Kun Je Doen?
Je hebt wettelijke rechten onder de AVG (GDPR). Hier is hoe je ze uitoefent:
1. Gebruik Je GDPR Rechten
Art. 21 AVG, Recht van bezwaar:Je hebt het recht bezwaar te maken tegen verwerking van je persoonsgegevens
Art. 17 AVG, Recht op verwijdering (“recht om vergeten te worden”):Je hebt het recht te vragen om verwijdering van je persoonsgegevens
Art. 15 AVG, Recht van inzage:Je hebt het recht te vragen welke gegevens een bedrijf over je heeft
2. De Tool: NL Data Opt-Out
Ik heb een gratis tool gebouwd die je helpt deze rechten uit te oefenen voor alle (bekende) 101+ Nederlandse data brokers:
https://apolloccrypt.github.io/nl-data-optout/
Wat doet de tool:
- Genereert gepersonaliseerde bezwaar-emails (Art. 21)
- Genereert verwijder-verzoeken (Art. 17)
- Genereert inzage-verzoeken (Art. 15)
- Voor ALLE 138 partners van NU.nl + extra Nederlandse data brokers
- 100% gratis, open source, geen data collectie
Hoe werkt het:
1. Vul je naam en email in (wordt NIET opgeslagen)
2. Kies je rechten (bezwaar, verwijdering, inzage)
3. Download zip met emails (of copy-paste de enkel email)
4. Verstuur via je eigen email client
5. Klaar (1–5 minuten totaal)
Bij deze volumes wordt non-compliance economisch onhoudbaar.
De industrie zal gedwongen worden om:
1. Aantal partners drastisch te reduceren
2. Transparantie te verbeteren
3. Dark patterns te verwijderen
4. Compliance serieus te nemen
Dit is economische druk die werkt.
4. Melding Bij De AP
Je kunt ook zelf een melding maken bij de Autoriteit Persoonsgegevens:
Wat te melden:
- Welke site (NU.nl, NOS.nl, andere)
- Welke overtreding (dark pattern, pre-consent, uninformed consent)
- Evidence (screenshots van cookie banner)
De AP neemt klachten serieus, vooral als er meerdere meldingen zijn over hetzelfde bedrijf.
Evidence & Reproduceerbaarheid
Dit onderzoek is volledig reproduceerbaar. Alle tests kunnen herhaald worden in 30 minuten totaal.
Test NOS.nl Pre-Consent (15 minuten)
Benodigdheden:
- Firefox browser
- Schone browser state (private mode of cache leegmaken)
Stappen:
1. Open Firefox DevTools (F12)
2. Open “Storage” tab
3. Open “Network” tab
4. Navigate naar nos.nl
5. DON’T CLICK op cookie banner
6. Observe: Cookies verschijnen AL in Storage tab
7. Observe: Network requests naar ContentInsights
8. Screenshot + timestamp
Verwacht resultaat: Cookies + tracking vóór consent
Test NU.nl Dark Pattern (15 minuten)
Stappen:
1. Navigate naar nu.nl
2. Count clicks voor accept flow
3. Count clicks voor reject flow
4. Screenshot banner (geen directe “Weigeren”)
5. Screenshot privacy-instellingen (101 partners)
Verwacht resultaat: 8:1 accept/reject ratio
Evidence Package
Voor volledige transparantie heb ik alle evidence beschikbaar:
De Diepere Vraag: Wat Is “Informed Consent” Eigenlijk?
Dit onderzoek stelt een fundamentele vraag:
Als je niet weet wat een bedrijf doet, kun je dan toestemming geven voor wat ze met je data doen?
De wet zegt: Nee. Toestemming moet “geïnformeerd” zijn (GDPR Art. 4.11).
Maar de realiteit is complexer:
Scenario 1: Technische Compliance
- NU.nl toont 101 partnernamen
- Voldoet letterlijk aan GDPR Art. 13.1.e (disclosure van ontvangers)
Scenario 2: Praktische Realiteit
- 92% van partners is onbekend bij gemiddelde gebruiker
- Geen uitleg wat partners doen
- Geen context, geen links, geen informatie
Vraag: Is dit “informed consent”?
Juridisch antwoord: Grijs gebied. GDPR vereist disclosure, maar de kwaliteit van die disclosure is debatabel.
Praktisch antwoord: Nee. Informed consent vereist begrip, niet alleen disclosure.
Analogie:
Stel je voor dat een arts je een medicijn voorschrijft:
Scenario A (NU.nl’s aanpak):
“Dit medicijn bevat 101 chemische stoffen: Acetaminophen, Benzocaine, Chlorpheniramine, Dextromethorphan, … [97 meer]. Hier is de volledige lijst. Akkoord?”
Scenario B (Informed consent):
“Dit is een pijnstiller met paracetamol. Het werkt door … Bijwerkingen kunnen zijn … Alternatieven zijn … Begrijpt u dit? Heeft u vragen?”
NU.nl doet Scenario A. Informed consent vereist Scenario B.
Call To Action: Pak Je Data Terug
Dit is niet alleen een theoretisch probleem. Dit raakt 20+ miljoen Nederlandse internetgebruikers dagelijks.
Jouw data wordt gedeeld met bedrijven die je niet kent, voor doeleinden die je niet begrijpt, met consequenties die je niet overziet.
Maar je hebt macht. De AVG (GDPR) geeft je wettelijke rechten. Gebruik ze.
Wat Je NU Kan Doen
Stap 1: Bewustwording
- Deel dit artikel (LinkedIn, Twitter, email)
- Informeer familie en vrienden
- Praat erover
Stap 2: Actie
- Gebruik de opt-out tool: https://apolloccrypt.github.io/nl-data-optout/
- Oefen je GDPR rechten uit (Art. 21, 17, 15)
- Verstuur de gegenereerde emails
Stap 3: Druk
- Meld bij AP als je niet-compliance ziet
- Review nieuwssites op Trustpilot/Google
- Stem met je aandacht (kies sites die privacy respecteren)
Stap 4: Politiek
- Contact je Tweede Kamer lid
- Ondersteun privacy-wetgeving
- Vraag om strengere handhaving
Mick Beer is security architect en onderzoeker met focus op privacy compliance. Dit artikel is onderdeel van een wetenschappelijk thesis over cookie compliance op Nederlandse websites. Alle bevindingen zijn gebaseerd op reproduceerbaar technisch onderzoek.
Disclaimer:
Dit artikel is geen juridisch advies. Voor juridische vragen over GDPR/AVG compliance, raadpleeg een privacy-advocaat of de Autoriteit Persoonsgegevens.
Een landlabel is zo oud als de database die het gaf
Waar een server staat, leid ik af uit een database die veroudert. Een oude database geeft valse landen. Een uitspraak over locatie is niet harder dan de dag waarop die database voor het laatst is bijgewerkt, en hoort vers bevestigd voor ze hard wordt gemaakt.
Als ik schrijf dat een ontvanger een server in de Verenigde Staten heeft, heb ik daar niets aan gezien. Ik heb een IP-adres opgezocht in een bestand.
Dat bestand is een offline database die IP-blokken aan landen koppelt. Het is een momentopname van wie welk blok gebruikte op de dag dat het bestand werd samengesteld. IP-blokken verhuizen. Ze worden verkocht, opnieuw uitgegeven, doorverhuurd aan een andere hoster in een ander land. Een database die dat bijhoudt, is dus een aflopende zaak vanaf het moment dat hij klaar is.
Daarmee is een landlabel geen waarneming. Het is een opzoeking, en de kwaliteit ervan is precies zo goed als de dag waarop de tabel voor het laatst is bijgewerkt. Zie Label elke bevinding op bewijsniveau.
Een verouderd landlabel faalt op de vervelendste manier die er is: het geeft een antwoord. Er komt geen foutmelding, geen lege waarde, geen waarschuwing. Er komt een tweeletterige landcode terug die er precies zo uitziet als een goede.
En de fout is niet willekeurig. Ze concentreert zich bij hosters die veel blokken doorverhandelen, dus juist bij de partijen waar advertentietechniek graag zit. De kans dat een verkeerd label uitgerekend op een dragende claim valt, is daarmee groter dan toeval.
Het gevolg is dat een landlabel de zwaarste juridische kwalificatie in een dossier kan dragen zonder de zwaarste onderbouwing te hebben. Doorgifte naar een derde land is hoofdstuk V van de AVG. Dat is de kwalificatie waar een organisatie het hardst op zal duwen bij wederhoor, en dus de laatste plek waar je op een opzoektabel wilt leunen. Zie Waar het pakket landt en wie het kan vorderen zijn twee assen en In Europa gehost is geen vrijwaring.
Het geval: een Iraanse server die in Duitsland stond¶
In juli 2026 draaide mijn scanner met de landendatabase die op de machine stond. Die dateerde van 17 december 2019. Alle 685 landtoewijzingen in de entiteitdossiers waren daarmee berekend op een tabel van ruim zes jaar oud, en elk dossier droeg dezelfde standaardzin: de landtoewijzing is waarschijnlijk en niet vers bevestigd.
Die zin was er niet voor niets. Eerder was er al een vals Iran-label uit die database gekomen, op een server die in werkelijkheid bij Hetzner in Duitsland stond. Iran in een privacydossier over Nederlandse sites is geen detail. Dat is een kop, een Kamervraag en een reputatieprobleem, en het klopte niet.
Wat het extra ongemakkelijk maakt: in de scan van 14 juli 2026 over 1.718 overheidssites staat Iran met drie hosts nog gewoon in de landenverdeling. De verdeling daar loopt van 2.100 hosts in de Verenigde Staten, 713 in België, 391 in Nederland, via 110 in Duitsland en 65 in Ierland, tot een staart met drie in Iran, twee in Denemarken, twee op de Britse Maagdeneilanden en twee in Tsjechië. Diezelfde verdeling zet 41 hosts in Mexico, wat bij een set Nederlandse overheidssites hard om herverificatie vraagt. Zolang die staart op een tabel van 2019 rust, is elk getal erin een aanwijzing en geen bevinding.
De fix zelf was klein. De database is vervangen door een verse landentabel van juli 2026, die op dezelfde machine al maandelijks binnenkwam voor een heel ander doel. De oude tabel is bewaard onder een eigen naam, zodat oude uitkomsten reproduceerbaar blijven. De nieuwe is gecontroleerd met twee opzoekingen waarvan het antwoord vaststaat.
Het werk zat in wat erna kwam. Een verse database repareert geen enkel dossier dat al geschreven is. Dus zijn alle 2.152 unieke server-IP's uit de vier dragende runs opnieuw opgezocht, en daarna zijn de dragende adressen nog een keer langs de officiële registratie gehaald.
De uitkomst in drie regels:
endpoints in CN, IL, RU, TR of IR na herberekening 0
kernclaim "geen adversarieel endpoint" houdt stand, nu hard
detailclaims die moesten worden gecorrigeerd 2
De nulbevinding werd door de correctie dus sterker in plaats van zwakker. Dat is het patroon dat ik vaker zie: wie zijn eigen instrument nakijkt, verliest zelden de hoofdlijn en wint bijna altijd de houdbaarheid.
De kernvraag was of er endpoints in de landen zaten waar het onderzoek om draaide. Na herberekening op de verse database was dat antwoord nul. Die nulbevinding werd door de controle harder, want hij staat nu op actuele gegevens in plaats van op een database van jaren terug.
Wat ook bleek: een handvol toewijzingen op detailniveau klopte niet meer. Een adres dat als Iraans werd gelabeld, draaide in werkelijkheid bij een Duitse aanbieder. Zulke labels gaan over de herkomst van een enkel adres en niet over de conclusie, maar ze horen wel te kloppen voordat je ze opschrijft.
endpoints in de onderzochte landen na herberekening 0
kernclaim houdt stand
labels op detailniveau die niet meer klopten 2
Dat is de reden dat de landbepaling bij mij een houdbaarheidsdatum heeft en niet een eigenschap is. De database is een momentopname van een wereld die verandert.
Drie dingen, en ze kosten samen minder tijd dan één correctie achteraf.
Ten eerste staat de datum van de landentabel in elk dossier waarin een landlabel voorkomt. Niet in de methodologiebijlage, maar in het dossier zelf, naast het label.
Ten tweede krijgt elk landlabel dat een claim draagt een tweede bron. De officiële registratie van het IP-blok is daarvoor het geschiktste, omdat die de houder noemt en niet een geschatte locatie.
Ten derde ververst de tabel zichzelf. De verversing draait maandelijks op de achtste, met een controle-opzoeking erachteraan die logt of het resultaat nog klopt. Een handmatige stap die je jezelf voorneemt, is een stap die je een keer overslaat.
En er blijft een open eindje, want dat hoort erbij. De stadstabel op diezelfde machine dateert nog steeds van 2019. Die wordt door de scanner niet gebruikt, en zodra dat verandert is het opnieuw een probleem.
Behandel elk landlabel als een claim met een houdbaarheidsdatum. Schrijf de datum van je tabel op voordat je de eerste lookup doet. Markeer landen die in jouw context vreemd zijn als herverificatiepunt in plaats van als vondst. En bewaar de ruwe IP-adressen, want een label kun je herberekenen en een verloren IP-adres niet.
Dat laatste is de reden dat de herberekening van 18 juli überhaupt kon. De adressen stonden vastgelegd. Was alleen het label bewaard, dan had ik voor elke correctie opnieuw moeten meten, en dan was de oude meting niet meer te reproduceren geweest. Zie Hoe mijn scanner werkt, van bezoek tot bewijsstuk en corrigeer nooit stil.
Werkregel. Zet bij elk landlabel de datum van de database die het gaf, bewaar het ruwe IP-adres zodat je kunt herberekenen, en geef geen landlabel een dragende rol in een claim voordat een tweede bron het die dag heeft bevestigd.
bronnen
Eigen entiteit dossiers, 2026-07-15GeoIP-database van 2019-12-17, landtoewijzing waarschijnlijk, herverifieren
Een overheidspagina kan tientallen meelezers dragen
Op een perspagina van het ministerie van VWS, een als gevoelig gemarkeerd overheidsdomein, lezen vierendertig verschillende bedrijven mee. Twaalf daarvan krijgen hetzelfde herkenningsnummer aangereikt. De burger ziet een overheidssite. Er kijken vierendertig bedrijven mee.
Zie je deze cirkels? Eén oranje stip = jij. Acht blauwe = de bekende namen. De rest, 130+ grijze stippen, zijn databrokers die je nooit van je leven hebt gehoord.
138 bedrijven krijgen jouw data als je NU.nl opent.
Dat zijn de partners die je apparaat tracken zodra je de site laadt:
Oranje = jij
Blauw = bekende namen (Google, Meta)
Grijs = 130+ onbekende databrokers
Je klikt “Akkoord” en geeft onbekende bedrijven toegang tot:
Je surfgedrag
Je locatie
Je apparaat-ID
Je interesses
Ken jij deze bedrijven?
Aarki, Inc. (Singapore mobile ad-tech)
AdDefend GmbH (anti-adblocking, Duitsland)
Adelaide Metrics Inc. (attention metrics, VS)
Adform A/S (programmatic DSP, Denemarken)
Adhese (Belgian ad server)
Adnami Aps (high-impact ads, Denemarken)
… en 132 meer.
Ik ook niet. Toch gaf ik ze toestemming door “Akkoord” te klikken.
Het probleem: “informed consent”
GDPR zegt: toestemming moet geïnformeerd zijn.
Maar hoe kun je informed consent geven aan bedrijven die je niet kent?
Je kunt niet. Dat is misinformed consent.
Wat ik deed
Twee weken technisch onderzoek, Firefox DevTools, HAR-files, reproduceerbaar.
Vandaag: formele melding bij de Autoriteit Persoonsgegevens.
Gemeld voor:
NU.nl, dark pattern (8× moeilijker weigeren dan accepteren)
101 Advertentiepartners: Het Probleem Met “Informed Consent” op Nederlandse Nieuwssites
Een diepgaand onderzoek naar cookie compliance bij NU.nl, NOS.nl en de illusie van privacy op het Nederlandse internet
door Mick Beer | 22 maart 2026
Je opent NU.nl. Een cookie banner verschijnt:
“We gebruiken cookies… Onze 104 advertentiepartners gebruiken cookies voor gepersonaliseerde advertenties.”
Je klikt “Akkoord”, zoals 95% van alle Nederlanders doet.
Maar weet je met wie je je data zojuist hebt gedeeld?
Pop quiz: Ken je deze bedrijven?
- Aarki, Inc.
- AdDefend GmbH
- Adelaide Metrics Inc.
- Adform A/S
- Adhese
- Adnami Aps
Nee? Ik ook niet. En dat is exact het probleem.
Het Experiment
Ik ben security architect en werkzaam als onderzoeker aan een wetenschappelijk thesis over privacy compliance. Gedurende twee weken heb ik vijf grote Nederlandse nieuwssites getest op naleving van de Algemene Verordening Gegevensbescherming (AVG/GDPR) en de ePrivacy Richtlijn.
Test setup:
- Fresh Fedora Linux installatie (geen cookies, geen geschiedenis)
- Firefox 124.0 met standaard instellingen (geen extensions)
- DevTools Storage Inspector + Network tab
- Tijdsperiode: 15–22 maart 2026
Plus 3 “functionele” partners (niet uitschakelbaar):
Adjust Digital A/S, Polar Mobile Group Inc., Seenthis AB.
Plus 4 mediapartners:
Google, Meta, Microsoft, TikTok.
Plus 13 externe media partners:
Dutch Selection, Google Maps, Knight Lab, Meta, Omny, Snap Inc., Soundcloud, Spotify AB, Streamable, TikTok, Truth Social, X Corp., YouTube.
Totaal: 138 partijen krijgen toegang tot jouw data.
Het Probleem Met “Informed Consent”
De AVG (GDPR) Artikel 4.11 definieert toestemming als:
“elke vrije, specifieke, geïnformeerde en ondubbelzinnige wilsuiting”
Let op dat woord: geïnformeerd.
Volgens de European Data Protection Board (EDPB) Guidelines 05/2020 betekent “geïnformeerd”:
“Being ‘informed’ relates to the controller’s duty to provide certain minimum information to enable individuals to make informed decisions.”
Hier is de kritieke vraag:
Kun jij een “informed decision” maken over bedrijven die je niet kent?
Van de 138 partijen, hoeveel ken je?
Gemiddelde gebruiker kent (~10–15):
- Google
- Meta/Facebook
- Microsoft
- Amazon
- LinkedIn
- TikTok
- Spotify
- YouTube
- X/Twitter
- Snapchat
Gemiddelde gebruiker kent NIET (~123–128):
- Aarki, Inc., Mobile ad-tech platform (Singapore)
- AdDefend GmbH, Anti-adblocking technologie (Duitsland)
- Adelaide Metrics Inc., Attention measurement platform (VS)
- Adform A/S, DSP/SSP programmatic advertising (Denemarken)
- Adhese, Belgian ad server
- Adnami Aps, High-impact ad formats (Denemarken)
- … + 117 meer
Ratio: ~8% bekend, 92% onbekend.
Wat Doen Deze Bedrijven Eigenlijk?
Laten we drie willekeurige partners analyseren:
Aarki, Inc.
Activiteit: Mobile advertising platform voor in-app ads
Locatie: Singapore
Data: Device IDs, app usage, location, behavioral data
Privacy policy: 12 pagina’s juridisch Engels
Opt-out: Via NAI/DAA mechanisme (VS-systeem)
AdDefend GmbH
Activiteit: Anti-adblocking technologie
Locatie: Duitsland
Strategie: Detecteert adblockers, toont anti-adblock boodschappen
Ironie: Je geeft toestemming aan bedrijf dat je toestemming wil omzeilen
Adelaide Metrics Inc.
Activiteit: “Attention measurement”, meet hoe lang je naar ads kijkt
Data: Eye-tracking proxies, scroll depth, dwell time
De Autoriteit Persoonsgegevens (AP) heeft in 2025–2026 een actieve cookie banner campagne gevoerd. Tussen april en november 2025 werden 200+ waarschuwingen uitgegeven aan Nederlandse websites voor exact dit probleem.
AP richtlijnen (2025):
“Cookie banners MOETEN een directe ‘Alles weigeren’ knop bevatten op het eerste niveau, gelijkwaardig aan de ‘Akkoord’ knop.”
NU.nl heeft deze waarschuwingen genegeerd. 75% van gewaarschuwde sites paste hun banners aan. NU.nl behoort tot de resterende 25% die nu in de handhavingsfase zitten.
EDPB Guidelines 05/2020, para 38–41:
“Consent interfaces must not give more prominence to the option to accept than to the option to refuse.”
NU.nl’s banner geeft 8× meer prominence aan accept.
Dit is geen grijs gebied. Dit is een duidelijke overtreding.
Wat doen ze echt:
- Track app downloads via cookies
- Cross-device attribution (welke ad leidde tot welke app install)
- Retargeting campagnes
- Fraud detection (legitiem)
Vraag: Is attribution tracking “functioneel”?
ePrivacy definitie “strictly necessary”: Cookies die technisch noodzakelijk zijn voor de functionaliteit die de gebruiker expliciet vraagt.
Voorbeelden strictly necessary:
- Sessie cookies (ingelogd blijven)
- Winkelwagen cookies (e-commerce)
- Beveiligings-tokens (CSRF protection)
Adjust attribution tracking:
- Niet nodig om nieuws te lezen
- Niet nodig voor site functionaliteit
- Enkel nodig voor DPG’s marketing attribution
Wat doen ze echt:
- Push notifications
- In-app messaging
- User analytics
- A/B testing
Vraag: Zijn push notifications “functioneel”?
Alleen als de gebruiker expliciet om notificaties vraagt. MAAR Polar draait VOORDAT de gebruiker die keuze maakt.
Conclusie: NIET strictly necessary.
De Cookie Wall In Vermomming
AP precedent: Kruidvat €600.000 boete (2020) voor cookie wall.
Definitie cookie wall:
Toegang tot website afhankelijk maken van toestemming voor niet-noodzakelijke cookies.
Kruidvat’s wall: “Accept cookies of verlaat de site”
NU.nl’s wall: “Deze partners zijn niet uitschakelbaar“
Het verschil is subtiel maar belangrijk:
- Kruidvat: Expliciete blokkade
- NU.nl: Impliciete verplichting
Juridisch effect: Hetzelfde. Geen vrije keuze.
GDPR Art. 7.4:
“Bij de beoordeling of de toestemming vrij is gegeven, wordt […] rekening gehouden met de vraag of […] de uitvoering van een overeenkomst […] afhankelijk is gesteld van toestemming”
Als “advertentiepartners” niet uitschakelbaar zijn, is toestemming niet vrij gegeven.
Contrast: Bol.com Best Practice
Niet alle Nederlandse websites falen.
Bol.com, de grootste e-commerce site van Nederland, laat zien dat compliance WEL mogelijk is:
Bol.com’s aanpak:
- 13 partners (vs NU.nl’s 138)
- Direct “Weigeren” knop (gelijkwaardig aan “Accepteren”)
- Transparante uitleg per partner:
- Google Analytics: “Voor het analyseren van websiteverkeer”
- Meta Pixel: “Voor het meten van advertentie-effectiviteit”
- Microsoft Bing: “Voor het tonen van relevante advertenties”
- + Link naar privacy policy per partner
- Geen pre-consent tracking
- Geen “functionele” advertentiepartners
Resultaat:
- GDPR compliant
- Transparant
- Gebruiksvriendelijk
- Bewijs dat compliance MOGELIJK is
NU.nl en NOS.nl hebben geen excuus. Bol.com bewijst dat het kan.
Juridische Impact & AP Handhaving
De Autoriteit Persoonsgegevens heeft in de afgelopen jaren meerdere precedenten gecreëerd:
Recente AP Boetes (Privacy/Cookies)
Experian Nederland, €2.700.000 (oktober 2025)
- Overtreding: Vendor non-disclosure, data delen zonder consent
- Schaal: Miljoenen Nederlandse consumenten
- Aggraverende factor: Data broker (commercieel gewin)
NOS.nl (pre-consent tracking):
- Vergelijkbaar met Coolblue (€40k)
- Grotere schaal: 7,5M vs 5M visitors
- Aggraverende factor: Publieke sector (belastinggeld)
- Geschat risico: €60.000 tot €300.000
NU.nl (dark pattern + uninformed consent + functionele wall):
- Dark pattern: Vergelijkbaar met AP campagne (200+ warnings)
- Uninformed consent: Vergelijkbaar met Experian (vendor non-disclosure)
- Schaal: 12M unique visitors/maand, 144M pageviews/jaar
- DPG Media: Eerder AP-contact (€525k→€300k boete 2022)
- Geschat risico: €450.000 tot €1.200.000
Totaal geschat risico: €510.000 tot €1.500.000
Dit zijn conservatieve schattingen. De AP heeft de discretie om hoger te gaan bij systematische, hardnekkige overtredingen.
Systematisch Patroon in de Industrie
Dit is geen toevallig probleem. Dit is design-level non-compliance.
Patroon:
- Commercieel (NU.nl): Maximale data extractie, dark patterns
- Publiek (NOS.nl): Pre-consent tracking, gebrek aan technische compliance
- Best practice (Bol.com): Transparantie, gebruiksvriendelijk
Conclusie:
Compliance is MOGELIJK (Bol.com bewijst dit), maar de nieuwsindustrie kiest bewust voor non-compliance.
Wat Kun Je Doen?
Je hebt wettelijke rechten onder de AVG (GDPR). Hier is hoe je ze uitoefent:
1. Gebruik Je GDPR Rechten
Art. 21 AVG, Recht van bezwaar:Je hebt het recht bezwaar te maken tegen verwerking van je persoonsgegevens
Art. 17 AVG, Recht op verwijdering (“recht om vergeten te worden”):Je hebt het recht te vragen om verwijdering van je persoonsgegevens
Art. 15 AVG, Recht van inzage:Je hebt het recht te vragen welke gegevens een bedrijf over je heeft
2. De Tool: NL Data Opt-Out
Ik heb een gratis tool gebouwd die je helpt deze rechten uit te oefenen voor alle (bekende) 101+ Nederlandse data brokers:
https://apolloccrypt.github.io/nl-data-optout/
Wat doet de tool:
- Genereert gepersonaliseerde bezwaar-emails (Art. 21)
- Genereert verwijder-verzoeken (Art. 17)
- Genereert inzage-verzoeken (Art. 15)
- Voor ALLE 138 partners van NU.nl + extra Nederlandse data brokers
- 100% gratis, open source, geen data collectie
Hoe werkt het:
1. Vul je naam en email in (wordt NIET opgeslagen)
2. Kies je rechten (bezwaar, verwijdering, inzage)
3. Download zip met emails (of copy-paste de enkel email)
4. Verstuur via je eigen email client
5. Klaar (1–5 minuten totaal)
Bij deze volumes wordt non-compliance economisch onhoudbaar.
De industrie zal gedwongen worden om:
1. Aantal partners drastisch te reduceren
2. Transparantie te verbeteren
3. Dark patterns te verwijderen
4. Compliance serieus te nemen
Dit is economische druk die werkt.
4. Melding Bij De AP
Je kunt ook zelf een melding maken bij de Autoriteit Persoonsgegevens:
Wat te melden:
- Welke site (NU.nl, NOS.nl, andere)
- Welke overtreding (dark pattern, pre-consent, uninformed consent)
- Evidence (screenshots van cookie banner)
De AP neemt klachten serieus, vooral als er meerdere meldingen zijn over hetzelfde bedrijf.
Evidence & Reproduceerbaarheid
Dit onderzoek is volledig reproduceerbaar. Alle tests kunnen herhaald worden in 30 minuten totaal.
Test NOS.nl Pre-Consent (15 minuten)
Benodigdheden:
- Firefox browser
- Schone browser state (private mode of cache leegmaken)
Stappen:
1. Open Firefox DevTools (F12)
2. Open “Storage” tab
3. Open “Network” tab
4. Navigate naar nos.nl
5. DON’T CLICK op cookie banner
6. Observe: Cookies verschijnen AL in Storage tab
7. Observe: Network requests naar ContentInsights
8. Screenshot + timestamp
Verwacht resultaat: Cookies + tracking vóór consent
Test NU.nl Dark Pattern (15 minuten)
Stappen:
1. Navigate naar nu.nl
2. Count clicks voor accept flow
3. Count clicks voor reject flow
4. Screenshot banner (geen directe “Weigeren”)
5. Screenshot privacy-instellingen (101 partners)
Verwacht resultaat: 8:1 accept/reject ratio
Evidence Package
Voor volledige transparantie heb ik alle evidence beschikbaar:
De Diepere Vraag: Wat Is “Informed Consent” Eigenlijk?
Dit onderzoek stelt een fundamentele vraag:
Als je niet weet wat een bedrijf doet, kun je dan toestemming geven voor wat ze met je data doen?
De wet zegt: Nee. Toestemming moet “geïnformeerd” zijn (GDPR Art. 4.11).
Maar de realiteit is complexer:
Scenario 1: Technische Compliance
- NU.nl toont 101 partnernamen
- Voldoet letterlijk aan GDPR Art. 13.1.e (disclosure van ontvangers)
Scenario 2: Praktische Realiteit
- 92% van partners is onbekend bij gemiddelde gebruiker
- Geen uitleg wat partners doen
- Geen context, geen links, geen informatie
Vraag: Is dit “informed consent”?
Juridisch antwoord: Grijs gebied. GDPR vereist disclosure, maar de kwaliteit van die disclosure is debatabel.
Praktisch antwoord: Nee. Informed consent vereist begrip, niet alleen disclosure.
Analogie:
Stel je voor dat een arts je een medicijn voorschrijft:
Scenario A (NU.nl’s aanpak):
“Dit medicijn bevat 101 chemische stoffen: Acetaminophen, Benzocaine, Chlorpheniramine, Dextromethorphan, … [97 meer]. Hier is de volledige lijst. Akkoord?”
Scenario B (Informed consent):
“Dit is een pijnstiller met paracetamol. Het werkt door … Bijwerkingen kunnen zijn … Alternatieven zijn … Begrijpt u dit? Heeft u vragen?”
NU.nl doet Scenario A. Informed consent vereist Scenario B.
Call To Action: Pak Je Data Terug
Dit is niet alleen een theoretisch probleem. Dit raakt 20+ miljoen Nederlandse internetgebruikers dagelijks.
Jouw data wordt gedeeld met bedrijven die je niet kent, voor doeleinden die je niet begrijpt, met consequenties die je niet overziet.
Maar je hebt macht. De AVG (GDPR) geeft je wettelijke rechten. Gebruik ze.
Wat Je NU Kan Doen
Stap 1: Bewustwording
- Deel dit artikel (LinkedIn, Twitter, email)
- Informeer familie en vrienden
- Praat erover
Stap 2: Actie
- Gebruik de opt-out tool: https://apolloccrypt.github.io/nl-data-optout/
- Oefen je GDPR rechten uit (Art. 21, 17, 15)
- Verstuur de gegenereerde emails
Stap 3: Druk
- Meld bij AP als je niet-compliance ziet
- Review nieuwssites op Trustpilot/Google
- Stem met je aandacht (kies sites die privacy respecteren)
Stap 4: Politiek
- Contact je Tweede Kamer lid
- Ondersteun privacy-wetgeving
- Vraag om strengere handhaving
Mick Beer is security architect en onderzoeker met focus op privacy compliance. Dit artikel is onderdeel van een wetenschappelijk thesis over cookie compliance op Nederlandse websites. Alle bevindingen zijn gebaseerd op reproduceerbaar technisch onderzoek.
Disclaimer:
Dit artikel is geen juridisch advies. Voor juridische vragen over GDPR/AVG compliance, raadpleeg een privacy-advocaat of de Autoriteit Persoonsgegevens.
geverifieerdessayzekerRTB, adtech en brokersbronnenverwant
Onverwante apps sturen je profiel dezelfde veiling in
Apps die niets met elkaar te maken hebben, blijken dezelfde advertentieveiling en dezelfde bieders achter zich te hebben. Je positie staat daardoor niet via een, maar via meerdere kanten tegelijk te koop. De veiling is geen eigenschap van een app, maar een gedeelde markt waar ze allemaal op aansluiten.
Ik onderschepte de biedstroom van losse Nederlandse consumenten-apps. Een weer-app, een handel-app, een woon-app. Apps die niets met elkaar te maken hebben, van verschillende makers, voor verschillende doelen. Toch dook er telkens dezelfde advertentie-infrastructuur op. Een verkoopplatform dat de plek namens de app te koop aanbiedt, en een handjevol vaste bieders die overal terugkwamen.
Dat viel me op omdat ik het niet zocht. Ik keek per app naar waar het toestel naartoe praatte tijdens gebruik. De overlap kwam vanzelf naar boven toen ik de lijsten naast elkaar legde. Dezelfde domeinen, dezelfde partijen, in apps die op het scherm niets gemeen hebben. Je verwacht dat een weer-app en een woon-app langs gescheiden wegen lopen. In de biedstroom lopen ze samen.
Het helpt om te weten wat er gebeurt op het moment dat een app een advertentie toont. De plek wordt in een fractie van een seconde geveild volgens het OpenRTB-model. De app stuurt via een verkoopplatform een bid request het veld in. Dat verzoek beschrijft de gelegenheid en het toestel, met identifiers en context erbij. Aangesloten bieders krijgen het verzoek, en wie het hoogste bod doet, mag de advertentie plaatsen.
De partij die de plek te koop aanbiedt, staat aan de verkoopkant. De partijen die bieden, staan aan de koopkant. Beide kanten zijn aangesloten op hetzelfde netwerk van veilingen. Een app kiest een verkoopplatform, en via dat platform komt hij automatisch in contact met het hele veld aan bieders dat daarop is aangesloten. De app kiest die bieders niet een voor een. Hij sluit aan op de markt, en de markt levert het veld.
In een echte bid-respons uit een app zaten zeven biedende partijen. Zes daarvan staan ook in de partnerlijst van een totaal andere app. De namen die keer op keer terugkomen zijn PubMatic, Magnite, Criteo en Index Exchange.
Dat is de kern van de meting. Van de zeven partijen die in het ene geval een bod deden of mochten doen, is het overgrote deel ook aangesloten op een app die er verder los van staat. Bewijsniveau: dit is gemeten. De zeven partijen komen uit een echte bid-respons, de zes overlappende komen uit de partnerlijst van de andere app, en de vier genoemde namen zijn de exemplaren die ik in beide contexten terugzag. Het is niet gereconstrueerd uit vermoedens over de markt. Het staat in het onderschepte verkeer en in de partnerlijst zelf.
Een enkele overlap zou toeval kunnen zijn. Zes van de zeven, dwars door onverwante apps heen, is het patroon zelf. Dezelfde kopers zitten aan tafel, welke app je ook opent. De verzameling verandert nauwelijks als je van de ene app naar de andere gaat.
Wie denkt dat hij zijn gegevens aan een app toevertrouwt, denkt te klein. De veiling waarin je positie wordt aangeboden, is een gedeelde markt waarop veel apps tegelijk zijn aangesloten. De app levert de gelegenheid. De markt levert de kopers, en die kopers zijn voor een groot deel dezelfde, ongeacht via welke app je binnenkomt.
Daardoor staat je positie via meerdere kanten tegelijk te koop, aan grotendeels dezelfde partijen. De weer-app biedt je aan, de woon-app biedt je aan, en aan de andere kant van beide veilingen zitten PubMatic, Magnite en de rest te wachten. Ze hoeven je gedrag in de ene app niet aan dat in de andere te koppelen om je vaker te zien. Ze zien je vaker omdat ze overal zitten. De app is uitwisselbaar, het veld aan kopers is dat niet.
Dit heeft een gevolg voor het idee dat je per app kunt kiezen. De toestemmingsvraag staat in de app en geldt voor die app. De veiling erachter is gedeeld. De partij die je in de ene app weigert, ziet je in de volgende alsnog, via dezelfde veiling waarop die volgende app is aangesloten.
Herkenning is daarmee een eigenschap van het netwerk geworden. Ze zit in de markt waarop de apps samen leunen, en ze reikt verder dan de grens van de app waarin je je keuze maakte. Je kunt een koper op een plek buitensluiten en hem twee apps verder gewoon terugzien. De keuze voelt als zeggenschap en werkt als een deur in een muur die aan de zijkanten open staat. Wie de markt wil weren, moet dat in elke app apart doen, en zelfs dan blijft de bieder aangesloten op de veilingen van alle apps waar de weigering niet is gezet.
Ik heb de koppeling zelf niet gemeten, dus wat hier volgt is het bekende mechanisme en geen bevinding uit deze meting. Bieders herkennen een toestel aan identifiers. Op mobiel is dat vaak de reclame-id van het besturingssysteem, die in de bid request meereist. Twee apps op hetzelfde toestel sturen dezelfde reclame-id de veiling in. Een bieder die in beide apps meedoet, ziet daardoor twee keer hetzelfde toestel, zonder enige moeite.
Waar de identifiers verschillen, is er cookie-sync. Twee partijen wisselen achter de schermen uit dat hun eigen nummer voor jou naar dezelfde persoon verwijst. Zo lijmen losse waarnemingen aan elkaar tot een profiel dat over apps heen loopt. De overlap in bieders die ik wel heb gemeten, is precies de laag waarop dit mechanisme kan draaien.
Ik noem dit met opzet als achtergrond en niet als resultaat. Mijn meting toont de gedeelde markt. Het koppelen tot een persoonsprofiel is het vak van de partijen op die markt. Het is aannemelijk gezien hoe die markt werkt, en tegelijk staat het niet in mijn onderschepte verkeer. Bewijsniveau: de overlap is gemeten, de koppeling is vermoed op grond van het bekende mechanisme.
Voor mijn werk betekent het dat een app niet los te beoordelen is. De vraag naar wie je gedrag ziet, houdt op bij de app-grens, en het antwoord ligt buiten die grens, op de gedeelde markt. Wie een app schoon of vuil verklaart op grond van die app alleen, meet de verkeerde eenheid.
Het betekent ook dat de meest zeggende meting de vergelijking is. Een enkele biedstroom levert een geval. Twee onverwante biedstromen naast elkaar leggen levert het patroon, en het patroon is wat de gedeelde markt zichtbaar maakt. Precies daar zit de overlap van zes op zeven die deze notitie draagt. De losse app toont een symptoom. De vergelijking toont de structuur eronder.
Voor de wet heeft dat een consequentie die verder gaat dan een enkele app. De AVG vraagt om een grondslag en om transparantie over met wie je gegevens worden gedeeld. Als de partij die je in de ene app afwijst je in de volgende alsnog bereikt, dan is de transparantie per app onvolledig, want ze verzwijgt de gedeelde markt waarop de app is aangesloten. Wie eerlijk wil zijn over wie meekijkt, moet het veld benoemen en niet alleen de app. Zolang de toestemmingsvraag bij de app-grens blijft staan, meet ze een deel van het probleem en laat ze het grootste deel ongenoemd.
IAB Tech Lab, "OpenRTB API Specification"waarom losse apps bij dezelfde ontvangers belanden
geverifieerdessayzekerRTB, adtech en brokersbronnenverwant
De privacyvriendelijke opvolger komt naast het oude tracken
Het als privacyvriendelijk verkochte alternatief voor de derde-partij-cookie wordt in de praktijk naast de oude advertentiestack gezet, niet in plaats ervan. Een aanvulling op het tracken, geen vervanging. Wie de belofte gelooft en de code niet leest, ziet alleen de helft.
Ik las de gedeclareerde rechten en API-signalen van een grote app. Daar stonden de nieuwe Privacy Sandbox-onderdelen in, Topics en Attribution Reporting, het als privacyvriendelijk gepresenteerde alternatief voor de derde-partij-cookie. In dezelfde app, naast die nieuwe onderdelen, stond ook gewoon de klassieke advertentie-ID gedeclareerd, met de bijbehorende AD_ID-permissie. Beide waren aanwezig. De app zette de nieuwe aanpak erbij en liet de oude staan.
Bewijsniveau: gemeten, op het niveau van declaraties. Ik zag welke rechten en API's de app opvraagt. Dat is een harde waarneming uit het pakket zelf.
Concreet gaat het om twee soorten signalen naast elkaar in dezelfde app:
com.google.android.gms.permission.AD_ID # de klassieke advertentie-ID
android.adservices.* / Topics, Attribution # de Privacy Sandbox-onderdelen
De eerste regel is de oude wereld. De tweede regel is de nieuwe. In de app die ik las, stonden ze allebei tegelijk aanwezig, zonder dat de een de ander verving. Dat is het feit waar deze notitie op rust. Al het andere is de duiding eromheen.
De Privacy Sandbox is Googles voorstel om gerichte advertenties te laten werken zonder de klassieke cross-site identifier. Topics leidt uit je gedrag een handvol interessecategorieën af, die aan adverteerders worden doorgegeven in plaats van een unieke identifier. Attribution Reporting meet of een advertentie tot een aankoop leidde, met vertraagde en geaggregeerde rapportjes die één klik moeilijker naar één persoon herleidbaar maken. De belofte is minder directe herkenning van het individu.
Los bekeken is dat een reële poging om de scherpste randen van tracking af te vijlen. Het probleem zit niet in de techniek van Topics zelf. Het zit in de context waarin ik hem aantref.
De verkoop van deze techniek leunt zwaar op het woord vervanging. De boodschap naar buiten is dat de derde-partij-cookie verdwijnt en dat er iets privacyvriendelijkers voor in de plaats komt. Dat frame stuurt de aandacht naar wat weggaat. De vraag die daarbij ondergesneeuwd raakt, is of de oude laag echt weg is of gewoon blijft liggen. Precies die vraag beantwoordt de code, en het antwoord dat ik vond, week af van het frame.
De klassieke advertentie-ID doet precies wat Topics zou moeten overbodig maken. Hij herkent je toestel over apps en sessies heen. Hij is resetbaar, maar in de praktijk werkt hij als een sleutel, want hij correleert met de rest van het profiel. Zie Een resetbare identifier is alsnog een sleutel. Zolang die ID meedraait, verandert het privacyvriendelijke signaal weinig aan de onderliggende herkenbaarheid.
Daarom is de volgorde belangrijk. Het alternatief dat verkocht wordt als vervanging van de derde-partij-cookie, staat hier náást de oude advertentiestack. Het komt erbij en het haalt de oude laag niet weg. Wie de nieuwe rechten ziet en denkt dat het volgen daarmee is ingeperkt, mist de identifier die eronder blijft draaien.
De belofte gaat over verdwijnen, de code over erbij komen¶
Hier scheiden zich twee verhalen. De aankondiging gaat over wat verdwijnt: minder cookies, minder directe herkenning, een privacyvriendelijk signaal in de plaats. De configuratie in de app gaat over wat erbij komt: een nieuw kanaal, boven op het bestaande. Wie alleen de aankondiging leest, ziet de nette kant. Wie de code leest, ziet dat de oude en de nieuwe aanpak samen draaien.
Zo wordt een uitbreiding van het volgen gepresenteerd als een inperking ervan. Ik trek geen kwade opzet toe aan de bouwers, want ik kan uit de declaratie niet aflezen wat ze bedoelden. Ik stel vast dat de presentatie en de meting uiteenlopen, en dat de meting het zwaarst weegt. De echte dataruggengraat oogt zelden als reclame en zit vaak onder de nette laag. Zie De echte dataruggengraat oogt niet als reclame.
Voor de gebruiker is de uitwerking concreet. Hij hoort dat de privacy verbetert en gaat ervan uit dat er minder van hem wordt vastgelegd. In werkelijkheid komt er een informatiestroom bij, terwijl de oude blijft draaien. De optelsom van wat over hem bekend is, groeit dus, terwijl de communicatie het tegenovergestelde suggereert. Dat gat tussen wat iemand denkt af te staan en wat hij werkelijk afstaat, is het schadelijke deel. Het ondermijnt de mogelijkheid om een geïnformeerde keuze te maken, want de informatie waarop je die keuze baseert, klopt niet met de code.
De les is dat een privacybelofte een claim is die je tegen de code kunt houden. Ik lees de aankondiging, en daarna lees ik het manifest en het verkeer. Waar die twee samenvallen, geloof ik de belofte. Waar ze uiteenlopen, volg ik de code.
Voor de beoordeling van de Privacy Sandbox betekent het dat de vraag verschuift. De vraag is niet of Topics op zichzelf privacyvriendelijker is. De vraag is of het oude tracken naast Topics blijft draaien. Zolang de klassieke identifier meeloopt, is het nette signaal een toevoeging boven op een fundament dat blijft staan. Dat is een uitbreiding van het volgen, hoe vriendelijk de bovenlaag ook is verpakt.
Er is een historische parallel die me op scherp zet. Elke keer dat de industrie een privacyvriendelijker techniek aankondigt, is de eerste vraag wat er met de oude techniek gebeurt. Bij server-side tagging bleef het volgen bestaan, het verhuisde alleen uit het zicht naar de server van de uitgever. Bij CNAME-cloaking werd een derde partij vermomd als eigen subdomein om afweer te omzeilen. Het patroon herhaalt zich: een nieuwe laag die als opschoning klinkt, terwijl de onderliggende herkenning intact blijft. Ik behandel de Privacy Sandbox met datzelfde wantrouwen, tot de meting laat zien dat de oude laag echt is verdwenen. Tot dan lees ik de belofte als de helft van het verhaal, en de code als de andere helft.
Dat wantrouwen is geen oordeel over de techniek van Topics of Attribution zelf. Als een app de klassieke identifier echt zou verwijderen en alleen de nieuwe onderdelen zou draaien, zou ik dat een verbetering noemen en het ook zo opschrijven. De maatstaf ligt bij de meting, niet bij mijn verwachting. Wat ik weiger, is de aankondiging op haar woord geloven zolang de code iets anders laat zien. In de app die ik las, liet de code iets anders zien. Dat is de hele claim, en ik houd hem niet groter dan dat.
Eigen meting: oude en nieuwe volgtechniek naast elkaar in dezelfde opnamede opvolger vervangt de voorganger niet, hij komt ernaast te staan
geverifieerdessayzekerRTB, adtech en brokersbronnenverwant
De echte dataruggengraat oogt niet als reclame
De belangrijkste datastroom oogt niet als reclame en ontsnapt daardoor aan een cookie-check. Een klantdataplatform verzamelt elke handeling en zet die structureel onder Amerikaanse jurisdictie, terwijl de aandacht naar de zichtbare advertenties gaat. Wie alleen op advertentie-trackers let, mist de ruggengraat.
Bij een grote app draait meer dan de zichtbare reclame. Onder de banners en pixels zit een tweede laag die het echte werk doet. Dat is een klantdataplatform, vaak aangevuld met e-mail- en attributiediensten. Samen vormen ze de gebeurtenis-ruggengraat van de app. Elke handeling die je verricht wordt daar geregistreerd: een scherm openen, een knop indrukken, een item bekijken, een aankoop afronden. Die laag oogt niet als reclame. Juist daarom valt hij buiten beeld bij wie op het uiterlijk van reclame let.
Een klantdataplatform is een verzamelpunt. In de markt zijn dat producten van het type Segment, Tealium of mParticle. De app stuurt er een stroom gebeurtenissen naartoe, meestal via een ingebouwde SDK of via een eigen server. Het platform bundelt die gebeurtenissen tot een profiel per gebruiker en verdeelt ze door naar de partijen die de organisatie heeft aangesloten. Het is infrastructuur voor de hele dataketen, en het draagt geen enkel merkteken dat op adverteren wijst.
Een gewone cookie-audit zoekt naar het uiterlijk van reclame. De methode kijkt naar banners, naar advertentiepixels, naar bekende ad-domeinen op een blocklist. Een klantdataplatform komt op die lijsten vaak niet voor. Het draait onder een eigen of neutraal ogende domeinnaam, het levert een technische functie, en het lijkt op elke andere dienst die een app nodig heeft om te werken.
Zo ontstaat een blinde vlek. De aandacht gaat naar de etalage, dus naar de advertenties die iedereen herkent. De ruggengraat staat achter in het pand en registreert ondertussen alles. Die blinde vlek zit ook in veel geautomatiseerde controles. Een scanner die af gaat op bekende ad-domeinen geeft een groen vinkje zodra die domeinen ontbreken, terwijl de gebeurtenisstroom onaangeroerd doorloopt. Wie zo'n vinkje leest als bewijs van een schone app, leest de afwezigheid van reclame en verwart dat met de afwezigheid van verzameling. Dat is de valkuil die ik met een gerichte meting probeer te vermijden. Wie zijn oordeel baseert op wat op een blocklist staat, meet de reclamekant en laat de laag eronder ongemoeid. Dat is de kern van het probleem: de belangrijkste datastroom heeft precies het uiterlijk dat een reclamedetector negeert.
De ruggengraat wordt zichtbaar zodra je stopt met zoeken naar reclame en begint met kijken naar waar de gebeurtenissen heen gaan. In een HAR-opname van het verkeer zoek ik naar verzoeken die een gestructureerde payload dragen met velden als een gebruikers-id, een event-naam en een tijdstempel. Dat patroon hoort bij een gebeurtenis-verzamelaar, ongeacht de domeinnaam. Zie Netwerkverkeer lezen via HAR-files voor de methode.
Wat overblijft zijn de endpoints die gedrag ontvangen. Een deel daarvan staat op geen enkele advertentielijst. Dat is precies de laag die een cookie-audit overslaat. Dit is een afgeleide vaststelling. De payload en de domeinnaam maken aannemelijk dat het om een klantdataplatform gaat, maar de opname bewijst niet welk product er draait of wat de ontvanger er verder mee doet.
De ruggengraat is meer dan het klantdataplatform alleen. Eromheen hangen e-mail- en attributiediensten die de stroom afmaken. Een e-maildienst koppelt gedrag aan een adres, zodat een handeling in de app kan leiden tot een bericht in je inbox. Een attributiedienst beantwoordt de vraag welke advertentie of welke bron een installatie of aankoop veroorzaakte. Daarvoor moet die dienst per gebruiker bijhouden waar die vandaan kwam en wat die daarna deed.
Het gevolg is dat de gebeurtenissen niet los blijven staan. Ze worden gekoppeld aan een identiteit, aan een herkomst en aan een uitkomst. Een resetbare reclame-identifier is daarbij vaak de lijm. Zie Hoe gevoeliger de context, hoe langer de identifier meegaat voor waarom die identifier zwaarder weegt naarmate de context gevoeliger wordt. Voor mijn weging telt dat de ruggengraat niet één kanaal is, maar een geheel dat gedrag, identiteit en herkomst aan elkaar knoopt. Dat het om die koppeling gaat, is een afgeleide conclusie uit de functie van deze diensten, niet uit één enkel verzoek op de lijn.
Deze ruggengraat stuurt de gegevens in veel gevallen naar Amerikaanse cloudregio's. De grote klantdataplatformen draaien op infrastructuur van Amerikaanse aanbieders, en hun standaardregio's liggen in de Verenigde Staten. Dat betekent dat de complete registratie van wat een gebruiker doet structureel onder Amerikaanse jurisdictie komt te staan.
Het bewijsniveau hier is belangrijk. Dat data naar een Amerikaanse regio gaat kan ik afleiden uit de bestemming van het verkeer, uit de hosting en soms uit de responsheaders. Dat de gegevens daarmee onder Amerikaanse toegangswetgeving vallen is een juridische gevolgtrekking, geen meting. Sinds het Schrems II-arrest van het Hof van Justitie staat vast dat doorgifte naar de Verenigde Staten aanvullende waarborgen vereist. De AVG regelt die doorgifte in de artikelen 44 tot en met 49. Een gebeurtenis-ruggengraat die alles doorsluist naar een Amerikaanse regio raakt precies die bepalingen, en dat weegt zwaarder dan een enkele advertentiecookie omdat het om de volledige gedragsregistratie gaat.
Ik behandel de reclamekant als het topje. De gebeurtenis-ruggengraat is de echte maat voor wat een app verzamelt. Daarom rangschik ik in mijn scans de bestemmingen op wat ze ontvangen, niet op of ze op een blocklist staan. Een endpoint dat een volledig gebeurtenisprofiel binnenkrijgt weegt zwaarder dan een advertentiepixel, ook als het advertentiepixel bekender is.
Dat betekent ook dat mijn conclusie een ondergrens blijft. Een deel van de doorverdeling gebeurt op de server, buiten mijn opname, zoals bij Server-side tagging verplaatst de tracking uit het zicht. En het feit dat een dienst in Europa draait geeft geen vrijwaring, want de zeggenschap kan alsnog bij een Amerikaans moederbedrijf liggen. Zie In Europa gehost is geen vrijwaring. Wie de echte datastroom van een app wil wegen, moet voorbij de advertenties kijken en de ruggengraat opzoeken die zich als gewone infrastructuur voordoet.
geverifieerdessayzekerOverheid, toezicht en de wetbronnenverwant
De cookiemuur toont minder partners dan de code telt
Wat de burger op de cookiemuur leest, komt niet overeen met wat de machine eronder declareert. Het getoonde aantal partners is lager dan het werkelijke. De belofte en de bytes lopen uiteen, precies op het punt waar je geacht wordt geinformeerd toe te stemmen.
Wat de burger op de cookiemuur leest, komt niet overeen met wat de machine eronder declareert. De zichtbare toestemmingsmuur van een app of site noemt een aantal advertentiepartners. De onderliggende technische configuratie declareert er meer. Dat verschil is de kern van deze notitie, en het is precies het soort verschil dat een gewone bezoeker nooit kan zien, want hij leest de tekst en niet de bytes.
Het gaat niet om een marge van een paar partijen. Het gaat om een structureel verschil op het moment dat juridisch het zwaarst weegt: het moment waarop je geacht wordt geïnformeerd toe te stemmen. Toestemming die geïnformeerd heet maar op een te laag getal berust, is geen geldige toestemming. Je zegt ja tegen minder dan wat er werkelijk meekijkt.
De meeste cookiemuren in Europa draaien op het IAB TCF, het Transparency and Consent Framework. Dat framework heeft twee onderdelen die hier tellen.
Het eerste is de Global Vendor List, kortweg GVL. Dat is een openbaar JSON-bestand dat het IAB bijhoudt, waarin elke deelnemende advertentiepartij een vast nummer heeft. Vendor 755 is de ene partij, vendor 32 een andere. De GVL bevat honderden vendors.
Het tweede is de TC string, de toestemmingsstring die de cookiemuur genereert zodra je een keuze maakt. Die string codeert jouw keuzes als een bitveld. Voor elke vendor staat er een bit die zegt: toestemming ja of nee. De string reist mee met elk biedverzoek, zodat elke ontvanger kan lezen of hij van jou mag verwerken. Een consent-platform biedt die string aan via een vaste interface, __tcfapi, die je in de browser kunt uitlezen.
Daarnaast bestaat er een Additional Consents-string, een aparte lijst voor advertentiepartijen van Google die buiten het TCF vallen. Die AC-string telt gewoon door boven op de TCF-vendors, en hij verschijnt zelden expliciet op de muur.
Op de muur staat een samenvatting. Vaak een zin als "wij en onze 100 partners". Dat getal is voor mensen. De machine rekent met de TC string en de AC-string, en die kun je decoderen. Het aantal vendors dat daarin toestemming krijgt, kun je gewoon tellen.
Ik lees de string uit de browser en tel de bits die op "ja" staan:
Voor de Additional Consents doe ik hetzelfde met het addtlConsent-veld, dat een reeks vendor-id's bevat, gescheiden door punten. Ik tel de id's. De som van de TCF-vendors en de AC-vendors is het getal waarmee de machine werkt. Dat getal leg ik naast het getal dat op de muur stond. Het verschil is de bevinding.
Dat de string zo te decoderen is, is gemeten: de codering ligt vast in de TCF-specificatie en de GVL is openbaar. Dat een concrete muur een lager getal toont dan de string declareert, is per geval gemeten zodra ik beide heb uitgelezen. Waarom een bedrijf het lagere getal toont, kan ik niet in het bedrijf kijken en houd ik daarom op vermoed.
De tekst op de muur is de belofte. De configuratie is de uitvoering. Ik reken met de configuratie, want die stuurt de machine aan en de tekst doet dat niet. Wat de gebruiker te zien krijgt, is een samenvatting, en die samenvatting is naar beneden afgerond op een manier die de kant op valt die het bedrijf uitkomt.
Dat is belangrijker dan het klinkt. De AVG stelt geen eis aan de tekst op de muur, ze stelt een eis aan de verwerking. En de verwerking wordt aangestuurd door de string, niet door de zin. Als de string tweehonderd vendors toestemming geeft en de muur er honderd noemt, dan verwerken tweehonderd partijen op basis van een toestemming die voor honderd is gevraagd. De helft van de verwerkers leunt op een grondslag die de gebruiker nooit heeft gezien.
De TCF-specificatie stelt bovendien een eis aan de toestemming zelf: ze moet geïnformeerd, specifiek en vrij zijn. Geïnformeerd betekent dat je weet aan wie je iets toestaat. Een getal dat lager is dan het werkelijke aantal vendors, tast precies dat kenmerk aan. Je kunt niet geïnformeerd instemmen met partijen die je niet zijn getoond. De consent string die daaruit voortkomt, draagt dan een claim van geldigheid die de onderliggende presentatie niet waarmaakt. En omdat die string met elk biedverzoek meereist, herhaalt de gebrekkige grondslag zich bij elke verwerker in de keten. Eén verkeerd getal op de muur plant zich voort tot in tweehonderd systemen.
Er is een tweede laag die het beeld nog verder scheeftrekt: de purposes. Het TCF codeert twee dingen. Ten eerste aan wie je toestemming geeft. Ten tweede waarvoor, in de vorm van een lijst genummerde doeleinden, van het opslaan van informatie tot het opbouwen van een advertentieprofiel. De muur vat die doeleinden vaak samen in een geruststellende zin over "een betere ervaring". De string codeert de nummers hard. Ik lees daarom ook de purpose.consents uit, want een vendor met toestemming voor doel 3 en doel 4 mag een profiel opbouwen, ongeacht hoe vriendelijk de samenvatting klonk.
Dit is het schoolvoorbeeld van een verschil dat alleen zichtbaar wordt als je onder de motorkap kijkt. De gemiddelde bezoeker heeft geen manier om de string te decoderen. De toezichthouder heeft die manier wel, en ik ook. Dat maakt dit een dankbaar soort bevinding, want ze is hard te maken met openbare middelen: de GVL is openbaar, de TCF-codering is gedocumenteerd, de string staat in je eigen browser. Ik hoef niets te vermoeden over de intentie. Ik hoef alleen twee getallen naast elkaar te leggen en het verschil te laten zien. Een belofte die de code tegenspreekt, is een belofte waar een gebruiker niets aan heeft, en die je zwart op wit kunt aantonen.
IAB Europe, Transparency and Consent Framework, vendorlijstde lijst waartegen het getoonde aantal is na te rekenen
gepubliceerdnotitiewaarschijnlijkMeten en wegenverwant
Technisch juiste uitspraken kunnen een verkeerde indruk wekken
Naast liegen en verzwijgen bestaat een derde soort: iets zeggen wat klopt maar de verkeerde indruk wekt. Wie zegt dat hij de toegang snel afsloot, maar alleen de sessie introk en niet de sleutel, spreekt geen onwaarheid en misleidt toch. Die categorie hoort apart benoemd.
Drie manieren om iemand op het verkeerde been te zetten¶
In verantwoordingsteksten kom ik drie soorten onwaarheid tegen, en ze worden vrijwel altijd op een hoop gegooid.
De eerste is de leugen: er staat iets wat aantoonbaar niet klopt. Zeldzaam, want gevaarlijk. Wie liegt in een verklaring aan een toezichthouder, heeft een probleem zodra iemand het naslaat.
De tweede is het verzwijgen: wat er staat klopt, maar het beslissende feit ontbreekt. Ook riskant, want een gat is aanwijsbaar.
De derde heeft geen gangbare naam en is daarom het handigst. Elke zin klopt, er ontbreekt formeel niets, en toch houdt de lezer er een beeld aan over dat niet overeenkomt met wat er gebeurde.
Bij een toetsing van tien uitspraken over een datalek viel er een in deze derde categorie.
Het bedrijf zei dat het de toegang snel had beëindigd. Dat is waar. Wat er gebeurde, was dat de sessie werd ingetrokken. Het onderliggende token bleef geldig, en over meerdere dagen werden miljoenen records weggesluisd.
Elke afzonderlijke bewering in die zin is verdedigbaar. Er is toegang beëindigd, en het ging snel. Alleen wekt de zin bij iedere lezer de indruk dat het weglekken daarmee stopte, en dat gebeurde niet.
Je kunt zo'n zin niet weerleggen door hem onwaar te noemen. Je kunt alleen het verschil laten zien tussen wat er staat en wat een redelijke lezer eruit opmaakt.
Zolang dit onder liegen wordt geschaard, verlies je het gesprek. De organisatie kan aantonen dat elke zin klopt, en de discussie is voorbij. Jij staat er dan bij als iemand die overdreef.
Zolang je het door de vingers ziet omdat het technisch waar is, verlies je ook, want dan kan iedereen elk incident wegschrijven zonder één onwaarheid te gebruiken.
De uitweg is het benoemen als eigen soort, met een eigen toets. Niet: is deze zin waar. Maar: welk beeld houdt een redelijke lezer aan deze zin over, en komt dat overeen met wat er is gebeurd?
Dat is een toets die je kunt uitvoeren en die je kunt onderbouwen, en die niemand kan afdoen als een verwijt van liegen.
Het werkwoord dekt minder dan het lijkt. Toegang beëindigd, maatregelen genomen, systeem afgesloten. Vraag altijd: welk onderdeel precies, en werkte de rest nog?
Snelheid zonder uitkomst. Binnen een uur gehandeld zegt niets over of het handelen hielp.
Getallen zonder noemer. Een klein percentage van de klanten klinkt geruststellend tot je weet hoeveel klanten er zijn.
Verleden tijd voor iets wat nog loopt. De gegevens zijn verwijderd, terwijl kopieën bij verwerkers nog leven.
Passieve vorm bij de kern. Er is toegang verkregen, in plaats van wij lieten toegang bestaan.
Geen van deze is bewijs van kwade opzet. Vaak schrijft een jurist gewoon zo verdedigbaar mogelijk op. Het effect is hetzelfde.
Omdat mijn hele vak op dit onderscheid drijft. Ik meet wat een systeem doet en leg dat naast wat een organisatie erover zegt. In vrijwel elk dossier zit het verschil niet in een leugen maar precies hier: in een zin die klopt en de verkeerde indruk wekt.
En de eerlijkheid gebiedt dat ik hem ook op mezelf toepas. Ik kan ook schrijven dat vierendertig partijen meelezen op een overheidspagina, technisch juist, terwijl de lezer daaruit opmaakt dat die vierendertig allemaal persoonsgegevens ontvangen. Dat is precies dezelfde fout, met mijn naam eronder.
Privacy faalt door verstrooiing en door concentratie
Privacy gaat op twee tegengestelde manieren stuk. De ene verstrooit je gegevens breed: honderd bieders krijgen elk een stukje. De andere concentreert de intiemste data juist bij een poortwachter die er een totaalprofiel van bouwt. Beide zijn een probleem, maar spiegelbeeldig. Toezicht dat alleen losse derde-partij-trackers telt, ziet het concentratie-model niet eens.
Privacy gaat op twee tegengestelde manieren stuk. De eerste noem ik dispersie. Je gegevens worden breed verstrooid. Bij een real-time-bidding-veiling krijgen tientallen tot honderd biedende partijen elk een stukje van je profiel voorgeschoteld, en niemand houdt het geheel in handen. De tweede noem ik concentratie. De intiemste data komt juist samen bij een enkele poortwachter, die er een volledig beeld van bouwt en dat beeld in eigen huis houdt.
Ze zijn elkaars spiegelbeeld. Bij dispersie is het probleem dat er te veel partijen meekijken en dat je bij niemand meer weg bent. Bij concentratie is het probleem dat er precies een partij meekijkt en dat die alles ziet. Het gaat om dezelfde grondstof, jouw gedrag en positie, die langs twee tegengestelde routes ontspoort. Wie het ene model bestrijdt met de remedie voor het andere, doet niets tegen het probleem dat hij voor zich heeft.
Dispersie is het model van de open advertentiemarkt. Als je toestel een advertentieplek moet vullen, wordt die plek in een fractie van een seconde geveild. Het verzoek dat daarbij hoort, een bid request in de taal van OpenRTB, bevat een beschrijving van jou. Je apparaatidentifier, je grove of fijne locatie, je taal, het type toestel, soms een reeks interessecategorieën uit het IAB-raamwerk. Dat verzoek gaat niet naar een partij. Het gaat naar het hele veld aan bieders dat op die veiling is aangesloten.
Het gevolg is dat je beschrijving bij tientallen partijen langskomt die geen bod hoeven te winnen om hem te hebben gezien. Verliezen in de veiling betekent niet dat je de data niet kreeg. Je kreeg het verzoek, je las het, en of je nu bood of niet, je mocht het bewaren. Zo verstrooit een enkele advertentieplek jouw profiel over een breed veld, keer op keer, de hele dag door, bij elke plek die je voorbij scrolt.
Niemand in dat veld houdt het geheel. Elke bieder heeft een fragment en een moment. Precies die versnippering is waarom een tracker-telling dispersie zo goed vangt. Elk fragment reist over een eigen verbinding naar een eigen domein, en die verbindingen zijn te tellen.
Concentratie is het tegenovergestelde model. Denk aan een dienst die veel functies in een enkele app bundelt, of aan een app die zelf de backend draait waar alles landt. Je berichten, je aankopen, je zoekopdrachten, je locatie in de tijd, je contacten. Het komt allemaal binnen bij dezelfde partij, over dezelfde verbinding, naar hetzelfde domein.
Voor een tracker-telling ziet dat er rustig uit. Er staat een handvol first-party-domeinen in de lijst en verder weinig. Geen tientallen externe bieders, geen zwerm reclamedomeinen. Toch ligt daar, achter dat eigen domein, het meest complete profiel van allemaal. De partij die je gedrag, je locatie, je aankopen en je contacten in een enkele database samenbrengt, hoeft geen externe tracker te laden. Ze is de tracker, en ze woont op haar eigen adres.
Dat is de reden dat concentratie zo makkelijk door de mazen glipt. De standaardmeetlat let op de afwezigheid van derden. Hoe minder externe partijen in het verkeer, hoe schoner het oordeel. Precies die logica beloont het model waarin een enkele partij alles zelf verwerkt.
Ik wil hier eerlijk zijn over de grens van mijn eigen instrument. De dispersiekant kan ik hard laten zien. Ik kan een netwerkmeting doen, de bid requests onderscheppen, de bieders tellen en de velden lezen die worden meegestuurd. Dat is gemeten.
De concentratiekant leid ik af. Ik kan tellen hoeveel externe verbindingen een dienst maakt en welke velden ze binnenhaalt. Ik kan uit een netwerkmeting alleen niet zien wat een partij achter haar eigen muur met de binnengekomen data doet. Dat de data daar samenkomt tot een profiel is een redenering op basis van wat de dienst doet en welke gegevens ze verzamelt, en het is geen directe waarneming van dat profiel.
Een simpele procedure maakt het verschil zichtbaar. Voor elk extern domein in het verkeer:
for host in externe_hosts:
if host in bekende_tracker_lijst:
markeer_als_dispersie(host) # gemeten, telbaar
else:
onderzoek_bestemming(host) # kan first-party concentratie zijn
if aantal_externe_hosts == 0 and gevoelige_velden_verzameld:
verdenk_concentratie() # afgeleid, niet telbaar uit het verkeer
De laatste regel is het hele punt. Een lege trackerlijst is een reden om beter te kijken. Wie dat overslaat, verkoopt de afwezigheid van dispersie als de afwezigheid van een probleem.
De regels en de gereedschappen zijn grotendeels op dispersie gebouwd. De cookiewetgeving, in Nederland via artikel 11.7a van de Telecommunicatiewet en in de AVG via de eis van een grondslag, draait om het plaatsen van trackers en het delen met derden. Het IAB TCF, het toestemmingsraamwerk achter de advertentiemarkt, somt honderden vendors op waaraan je toestemming geeft. Al die instrumenten tellen partijen. Ze zijn scherp op de vraag met hoeveel derden je data wordt gedeeld.
Voor concentratie bestaat dat gereedschap veel minder. Een dienst die alles zelf verwerkt, deelt formeel met niemand. Er is geen derde om toestemming voor te vragen, geen vendorlijst om af te vinken, geen tracker van een ander domein om te blokkeren. De verwerking is first-party, en precies daar is het toezicht dun. De grondslag en de bewaartermijn gelden nog steeds, maar ze laten zich moeilijker aflezen aan het verkeer, want er verschijnt geen extern domein dat een meting oppikt.
Zo ontstaat een blinde vlek die geen kwade opzet vergt. De meetlat is gemaakt voor het model dat het meest voorkwam, en het andere model glipt eronderdoor omdat het niet de vorm heeft waar de meetlat op let.
Voor mijn metingen betekent het dat ik twee vragen los moet stellen. De eerste: naar hoeveel externe partijen lekt dit? De tweede: welke enkele partij ziet hier alles? Een tracker-telling beantwoordt de eerste vraag. De tweede vraag dwingt me naar de architectuur te kijken. Wie draait de backend, welke velden komen daar binnen, en valt die partij onder een recht dat uitlevering kan afdwingen.
Het betekent ook dat een schone tracker-telling nooit het eindoordeel mag zijn. Een app zonder derde-partij-verkeer is een aanleiding om beter te kijken. De afwezigheid van dispersie kan het teken zijn dat je met het concentratie-model te maken hebt, waar de meetlat blind voor is.
En het betekent bescheidenheid in de conclusie. Ik label de dispersiekant als gemeten en de concentratiekant als afgeleid, elke keer opnieuw, zodat het onderscheid tussen wat ik zag en wat ik redeneerde niet vervaagt in de opschrijving. Twee faalmodi vragen om twee oordelen, en om twee bewijsniveaus die ik niet door elkaar laat lopen.
Wie een lek onderzoekt, stuurt het lek niet naar de cloud
Onderzoek naar een datalek mag het lek niet vergroten. Een gelekte dataset hoort in een afgesloten, netwerkloze omgeving onderzocht, niet in een clouddienst waar hij opnieuw kan uitlekken. De methode zelf moet de gegevens beschermen die ze onderzoekt.
Onderzoek naar een datalek mag het lek niet vergroten. Dat klinkt vanzelfsprekend en toch gaat het geregeld mis. Iemand krijgt een gelekte dataset in handen, wil weten hoe erg het is, en plakt een steekproef in een chatbot of laadt het bestand in een clouddienst om het doorzoekbaar te maken. Op dat moment reist de dataset opnieuw. Hij verlaat de machine van de onderzoeker, gaat over het netwerk, en komt terecht bij een partij die niemand in het onderzoek heeft uitgenodigd. De inbreuk die je wilde vaststellen, heb je zelf herhaald.
Ik hanteer daarom één harde regel. Een gelekte dataset wordt onderzocht in een afgesloten, netwerkloze omgeving. Hij gaat nooit naar een clouddienst en nooit naar een extern taalmodel. De methode zelf moet de gegevens beschermen die ze onderzoekt. Wie dat loslaat, wordt bij het aantonen van een lek zelf een tweede lek.
Een clouddienst is ontworpen om data te ontvangen, te verwerken en beschikbaar te houden. Dat is nuttig voor een normale werklast en riskant voor een dataset die per definitie al ergens hoort te zijn waar hij niet mag zijn. Zodra ik gelekte persoonsgegevens naar zo'n dienst upload, gebeuren er dingen buiten mijn zicht. Er worden kopieën gemaakt voor redundantie. Er staan backups op andere locaties. Logbestanden leggen vast wat er langskwam. Bij een taalmodel komt daar de vraag bij of de invoer wordt bewaard of hergebruikt voor training. Ik kan dat vaak niet controleren en zelden terugdraaien.
Dat betekent niet dat die diensten onveilig zijn. Het betekent dat ik de zeggenschap over de dataset uit handen geef op het moment dat ik hem het strakst zou moeten houden. Voor een lek dat draait om personen die er niets aan kunnen doen, is dat de verkeerde afweging. De juridische kant versterkt het praktische bezwaar. Draait de dienst op een Amerikaanse aanbieder, dan speelt de vraag naar jurisdictie mee. Zie In Europa gehost is geen vrijwaring en Waar het pakket landt en wie het kan vorderen zijn twee assen.
De kern van mijn aanpak is een omgeving zonder uitgaande verbinding. Als er geen route naar buiten is, kan er per definitie niets weglekken tijdens het onderzoek. Ik gebruik daarvoor een container die ik expliciet van het netwerk afsluit.
# Container zonder enige netwerkinterface starten.
# De dataset zit in een read-only mount, werkbestanden apart.
docker run --rm -it --network none -v /opt/leak/raw:/data:ro -v /opt/leak/work:/work onderzoek-image /bin/bash
De vlag --network none geeft de container alleen een loopback-interface. Er is geen weg naar buiten, ook niet per ongeluk via een tool die stiekem iets wil ophalen. De ruwe dataset koppel ik read-only aan, zodat ik hem niet per abuis wijzig. Wie geen container gebruikt, bereikt hetzelfde met een losgekoppelde netwerkkaart of met unshare -n om een proces in een lege netwerknaamruimte te zetten.
Voordat ik iets doe, leg ik de identiteit van het bestand vast. Een hash is mijn ankerpunt. Hij bewijst later dat ik over exact dezelfde bytes praat en niets heb aangepast.
sha256sum /data/dump.csv > /work/dump.sha256
Die hash is het begin van het bewijsspoor. Alles wat ik erna concludeer, hangt aan dit ene bestand met deze ene vingerafdruk.
Voor een eerste beeld hoef ik lang niet altijd de gevoelige velden te lezen. Ik wil weten welke soorten gegevens erin zitten en hoeveel. Dat kan met patronen, lokaal, zonder een regel naar buiten te sturen. Een klein script telt voorkomens van herkenbare vormen en laat de onderliggende waarden ongemoeid.
import re, hashlib, pathlib
PATRONEN = {
"email": re.compile(rb"[\w.+-]+@[\w-]+\.[\w.-]+"),
"bsn_9cijf": re.compile(rb"\d{9}"),
"iban_nl": re.compile(rb"NL\d{2}[A-Z]{4}\d{10}"),
}
pad = pathlib.Path("/data/dump.csv")
tellingen = {k: 0 for k in PATRONEN}
voorbeeld_hashes = {k: set() for k in PATRONEN}
with pad.open("rb") as f:
for regel in f:
for naam, patroon in PATRONEN.items():
for treffer in patroon.findall(regel):
tellingen[naam] += 1
# Bewaar alleen een hash van de gevonden waarde.
h = hashlib.sha256(treffer).hexdigest()[:16]
voorbeeld_hashes[naam].add(h)
for naam in PATRONEN:
print(naam, tellingen[naam], "uniek(≈):", len(voorbeeld_hashes[naam]))
Dit draait volledig in de netwerkloze container. Het geeft me de omvang van het lek per categorie en een ruwe schatting van het aantal unieke waarden, zonder dat ik ook maar één e-mailadres of BSN op mijn scherm hoef te halen. Als ik voor de rapportage toch een concrete waarde moet zien, doe ik dat gericht en bewust, met de hash als verwijzing in mijn aantekeningen. De redenering achter deze scheiding werk ik verder uit in Label elke bevinding op bewijsniveau.
Ik behandel elke input als vijandig, ook een bestand dat er onschuldig uitziet. Een dump is vaak een export uit een systeem dat ik niet vertrouw, samengesteld door iemand die ik niet ken. Een CSV kan formules bevatten die een spreadsheetprogramma uitvoert. Een archief kan paden bevatten die buiten de doelmap willen schrijven. Een bestandsnaam kan tekens bevatten die een shell verkeerd interpreteert. De netwerkloze omgeving vangt de ernstigste categorie af, want zelfs kwaadaardige inhoud die iets wil terugbellen, komt er niet uit.
Daarnaast open ik bestanden met tools die de inhoud als data behandelen en niet als instructie. Ik lees een CSV met een parser die geen formules evalueert. Ik pak een archief uit met controle op de doelpaden. Deze houding kost weinig en voorkomt de stille fout waarbij het onderzoek zelf het systeem infecteert dat het draait.
Dat mijn omgeving netwerkloos was, is een gemeten eigenschap. Ik kan het aantonen met de configuratie van de container en met het feit dat uitgaande verbindingen faalden. Dat er tijdens mijn onderzoek niets is uitgelekt, is daarmee sterk onderbouwd, want de fysieke route ontbrak. Wat ik over de inhoud van het lek concludeer, tellingen per categorie, aantallen, is eveneens gemeten, verankerd aan de hash van het bronbestand.
Wat ik niet kan bewijzen, is dat de dataset vóór mijn onderzoek nergens anders al rondging. Dat valt buiten mijn meting en dat zeg ik er expliciet bij. Mijn methode garandeert één ding hard. Vanaf het moment dat het bestand mijn werkbank raakte, is het niet verder verspreid door mijn toedoen. Voor het onderzoeken van een lek is dat de minimale eis, en het is een eis die je alleen haalt door de cloud bewust buiten de deur te houden.
Eigen werkwijze bij lekonderzoek: lokaal en zonder netwerkgelekte gegevens verlaten de eigen machine niet tijdens de analyse
gepubliceerdnotitiezekerRTB, adtech en brokersverwant
Je toestelprofiel gaat de veiling in voor je iets aanraakt
Bij het openen van sommige apps vertrekt je volledige toestelprofiel al richting de advertentieveiling: het reclamenummer van je telefoon, je locatie, je netwerkcode. Dat gebeurt voordat je iets hebt aangeraakt. Eenmaal de veiling in, is die stroom niet meer terug te halen.
Een herkenbare naam in de broncode bewijst niet dat een tracker actief is, en soms niet eens dat het de partij is die je denkt. Alleen de gemeten byte op de lijn bevestigt het. Wie op een tekstmatch afgaat, telt trackers die er niet zijn, en dat is precies wat een tegenpartij eruit pikt.
Een herkenbare naam in de broncode is geen bewijs dat een tracker actief is. Soms is het niet eens bewijs dat het de partij is die je denkt. Een bibliotheek statisch aantreffen laat zien dat de code aanwezig is. Het laat niet zien dat die code draait, laat staan dat ze gegevens verstuurt. Alleen de gemeten byte op de lijn bevestigt dat.
Dat onderscheid lijkt klein en is het niet. Het verschil tussen "aanwezig" en "actief" is het verschil tussen een verdenking en een bevinding. Een verdenking mag mijn zoektocht sturen. In het rapport hoort alleen wat ik heb zien gebeuren.
Een naam in de code is een aanwijzing, en een goede. Als ik in een app-bestand een bekende SDK-prefix vind, weet ik waar ik moet kijken. Het is de landkaart die me naar de meting leidt. In mijn werkwijze staat dat aan het begin van de keten, bij het vermoeden, zie Mijn werkwijze: van vermoeden naar bevinding.
Wat een statische vondst niet draagt, is de conclusie. Code kan meegeleverd zijn zonder ooit te worden aangeroepen. Een SDK zit vaak transitief in een app omdat een andere bibliotheek ervan afhankelijk is, zonder dat de ontwikkelaar hem bewust gebruikt. Er zijn dode codepaden, functies achter een schakelaar die uit staat, en modules die pas laden bij een handeling die de gemiddelde bezoeker nooit verricht. Zie Niet alles vuurt bij opstart, sommige trackers wachten op jou: aanwezig zijn en vuren zijn twee verschillende toestanden.
Een pakketnaam die begint met een bekend merk hoeft dat merk niet te zijn. Een intern app-framework van een grote techpartij kan de naam van een heel ander product dragen. De naamruimte van een softwarepakket is door de ontwikkelaar gekozen. Er is geen instantie die controleert of com.merk.iets werkelijk bij dat merk hoort of dat het gegevens naar dat merk stuurt.
Wie op de naam afgaat, schrijft verkeer toe aan een partij die er niets mee te maken heeft. Dat is een fout in twee richtingen tegelijk. Je telt een tracker die er niet actief is, en je hangt hem aan de verkeerde eigenaar. Beide zijn los al genoeg om een bevinding onderuit te halen.
De enige harde bevestiging is het waargenomen verkeer. Ik meet het toestel zoals een bezoeker het gebruikt, leg het vast als HAR, en tel wat er werkelijk over de lijn ging. Meten zoals een echte bezoeker is daarbij een voorwaarde, want een kale scanner lokt ander gedrag uit dan een mens; zie Meet zoals een bezoeker, niet zoals een scanner. Het verschil met een tekstmatch is te zien in de commando's:
# Statisch: aanwezigheid. Dit bewijst niet dat er iets vuurt.
grep -r "com.merk.tracker" ./app-uitgepakt/
# Gemeten: wat het toestel echt verstuurde, uit de HAR.
jq -r '.log.entries[].request.url' verkeer.har | sort -u
De eerste regel vindt een string. De tweede toont een lijst adressen die het toestel daadwerkelijk heeft aangeroepen. Alleen de tweede telt mee als bevinding.
Een valkuil binnen die meting is de toeschrijving zelf. De Referer-header lijkt te vertellen welke pagina een verzoek uitlokte, maar die is onbetrouwbaar. Stealth-scripts vervalsen hem, en bij diep doorklikken lekt de context van de ene pagina in de volgende. Betrouwbaarder is de pageref in de HAR, die elk verzoek aan de juiste geladen pagina koppelt. De les is dezelfde als bij de pakketnaam: vertrouw niet op het label dat een partij zelf meestuurt, vertrouw op de structuur van de meting.
Het onderscheid tussen aanwezig en actief beschermt tegen twee fouten die elkaars spiegelbeeld zijn. De eerste is de vals-positieve: je telt een tracker die er staat maar niet vuurde. De tweede is de vals-attributie: hij vuurde wel, maar je hangt hem aan de verkeerde partij. De pakketnaam die een ander merk draagt, is een geval van de tweede soort. Het verkeer bestaat, alleen de eigenaar die je eraan koppelt, klopt niet.
Beide fouten hebben dezelfde oorzaak: vertrouwen op een label dat door een ander is gekozen. Een pakketnaam is door de ontwikkelaar bedacht. Een Referer wordt door de browser of een script meegestuurd en kan vervalst zijn. Een cookienaam zegt niets over wie de cookie werkelijk uitleest. Telkens is de valkuil dat een naam zichzelf lijkt te verklaren. De meting doet dat niet vanzelf. Ik moet elke stap terugvoeren op een waarneembaar feit: dit verzoek ging naar dit adres, op dit tijdstip, uitgelokt door deze pagina. Rollen die je eraan toekent, moeten uit die feiten volgen, niet uit de naam. Zie Trackers hebben rollen, en die verwar je niet.
Dat is bewerkelijker dan een lijst met namen aftikken, en dat is de prijs. Wie snel wil scoren, telt strings en heeft binnen een minuut een indrukwekkend hoog getal. Dat getal houdt geen stand. Het trage werk levert een lager getal op dat wél overeind blijft in een gesprek met een tegenpartij.
Dit is precies de fout waar een advocaat of woordvoerder op wacht. Eén tracker die je op een tekstmatch hebt geteld en die niet bleek te vuren, en je hele lijst wordt verdacht. De tegenpartij hoeft niet je hele analyse te weerleggen. Hij hoeft één regel te vinden die aantoonbaar niet klopt, en hij zet daarmee de betrouwbaarheid van al het andere ter discussie. Zie Een mislukte meting is geen schone app voor de spiegelfout aan de andere kant.
Daarom tel ik alleen wat ik heb zien gebeuren, niet wat ik heb zien staan. Een lijst die volledig uit gemeten verkeer bestaat, geeft een tegenpartij geen enkel houvast. Elke regel verwijst naar een verzoek dat werkelijk is verstuurd, met tijdstip en adres. Dat valt niet weg te praten met de opmerking dat de code misschien niet draaide.
Deze regel bepaalt de scheidslijn in al mijn rapporten. Statische vondsten gaan in de kolom vermoed en sturen waar ik dieper kijk. Gemeten verkeer gaat in de kolom gemeten en draagt de conclusie. Ik meng die twee nooit in één getal.
Het effect is dat mijn lijsten korter zijn dan die van een scanner die op namen telt. Ze zijn ook onaantastbaar op het punt dat telt. Wanneer iemand een bevinding aanvecht, kan ik het bijbehorende verzoek uit de HAR laten zien. Daar houdt de discussie op.
Die keuze heeft een prijs die ik bewust betaal. Ik loop het risico dat mijn cijfer lager uitkomt dan de werkelijkheid, en dat iemand mijn rapport daardoor minder alarmerend vindt dan het van een naam-teller zou zijn. Dat neem ik voor lief. Een bevinding die je kunt tonen is meer waard dan een bevinding die indruk maakt. In een gesprek met een woordvoerder, een advocaat of een toezichthouder is het enige dat telt of ik het verzoek kan laten zien dat mijn claim draagt. Alles wat op een naam of een vermoeden steunt, verdampt in dat gesprek. Wat op de gemeten byte steunt, blijft staan.
Deze regel is ook de reden dat ik statische analyse niet weggooi. Ze is de eerste helft van het werk, de helft die me vertelt waar ik moet meten. De fout zou zijn om die eerste helft voor de conclusie aan te zien. Aanwijzing en bewijs zijn twee stations op dezelfde route, en ik verwar het vertrek niet met de aankomst.
In een app of site zitten families die elk iets anders doen. Analytics meet gedrag. Crash-SDK's meten stabiliteit. Attributie koppelt een installatie aan de campagne die hem opleverde. Identity-resolution knoopt losse identifiers aan een persoon. Advertentie-SDK's bieden je toestel aan adverteerders aan. Ze allemaal 'tracker' noemen verhult dat de risico's per rol verschillen; een crash-SDK is iets anders dan een identity-resolver.
Op een gemiddelde pagina of in een gemiddelde app draaien tientallen stukjes code van derde partijen. Ze op één hoop gooien onder het woord "tracker" is verleidelijk, want het levert een groot en alarmerend getal op. Het is ook onnauwkeurig. De scripts hebben verschillende rollen, en die rollen dragen verschillende risico's. Een lettertypedienst die een font levert, doet iets heel anders dan een databroker die een profiel opbouwt. Wie beide "tracker" noemt, overdrijft de eerste en verzwakt de aandacht voor de tweede.
Ik onderscheid in de praktijk een handvol families. Elk heeft een eigen taak, een eigen dataprofiel en een eigen juridische lading.
Analytics. Meet gedrag op de pagina: welke schermen, hoe lang, welke knoppen. Voorbeelden zijn de bekende statistiekpakketten. Het risico zit in de reikwijdte van wat ze meten en of ze dat delen.
Crash- en performance-SDK's. Meten stabiliteit: crashes, laadtijden, foutmeldingen. Ze sturen stacktraces en toestelgegevens op. De datastroom is technisch, de koppeling aan een persoon meestal zwak.
Attributie. Koppelt een installatie of aankoop aan de campagne die hem opleverde. In de mobiele wereld heten deze partijen mobile measurement partners. Ze leunen op identifiers en op mechanismen als de install referrer.
Identity-resolution. Knoopt losse identifiers, cookies, e-mailhashes en toestelnummers, aan één persoon. Dit is de zwaarste familie, want het bouwt het profiel dat de rest verhandelt.
Consent-platforms. Regelen de toestemmingsvraag en coderen je keuze, meestal via het IAB TCF. Ze bouwen zelf geen profiel. Ze bepalen wel of de rest mag vuren, en dat maakt ze een sleutelrol.
Neutrale infrastructuur. Een CDN dat bestanden serveert, een lettertype, een A/B-testframework. Deze halen soms wel je IP-adres binnen, maar bouwen geen profiel.
De rol bepaalt de ernst, en de ernst bepaalt of een bevinding hout snijdt. Als ik een rapport aflever waarin een CDN en een identity-resolver naast elkaar staan als "tracker nummer 14 en tracker nummer 15", dan heb ik mijn eigen conclusie ondergraven. Een tegenpartij hoeft alleen het zwakste item aan te wijzen, het lettertype, om het hele rapport verdacht te maken. Precisie in de rol is dus zelfbescherming.
Er is één familie die aparte aandacht verdient: de tag-manager. Een tag-manager vuurt zelf vaak niets zichtbaars af. Zijn taak is andere scripts binnenhalen, op basis van regels die op afstand worden beheerd. Dat maakt hem lastig. Wat hij vandaag inlaadt, kan morgen anders zijn, zonder dat de app of de pagina verandert. Een momentopname onderschat hem daarom structureel. Ik behandel de tag-manager als een deur, en ik let op wie er doorheen komt, niet alleen op de deur zelf.
Een tweede reden waarom de rol telt, is de rechtsgrond. Een crash-SDK die stabiliteit meet, kan vaak leunen op een gerechtvaardigd belang, want de gegevens dienen de werking van de app en zijn zwak aan een persoon te koppelen. Een advertentie-SDK die je toestel de veiling in stuurt, heeft toestemming nodig, want daar worden persoonsgegevens voor advertentiedoeleinden verspreid. Twee scripts die op het eerste gezicht allebei "data versturen", vallen dus onder een verschillend regime. Wie ze samen op één hoop legt, kan een crash-SDK ten onrechte beschuldigen en een advertentie-SDK ten onrechte ontzien. De rol bepaalt welke grond nodig is, en de grond bepaalt of er een overtreding op tafel ligt.
Ik kijk naar wat een partij feitelijk doet in de opname. De categorie waarin een blokkeerlijst een domein toevallig plaatst, is een startpunt, geen bewijs. Een naam in de code bewijst weinig, zoals ik uitwerk in Een naam in de code is nog geen tracker. De handeling in het verkeer bewijst iets.
Concreet lees ik het vastgelegde netwerkverkeer en let ik op de vorm van de verzoeken:
Een verzoek met een OpenRTB-body (imp, device, tmax) is een advertentie-SDK die de veiling in gaat.
Een POST met een stacktrace, een threadlijst en een crashreason is een crash-SDK.
Een verzoek dat een install referrer of een campagne-id draagt, wijst op attributie.
Een verzoek dat e-mailhashes of meerdere identifiers samen verstuurt, wijst op identity-resolution.
Een verzoek dat alleen een statisch bestand ophaalt zonder identifier, is infrastructuur.
Een klein voorbeeld van hoe ik in opgeslagen verkeer een eerste sortering maak:
def rol(verzoek):
body = verzoek.get("body", "")
if all(k in body for k in ('"imp"', '"device"')):
return "advertentie / RTB"
if "stacktrace" in body or "crashreason" in body:
return "crash-SDK"
if "install_referrer" in body or "campaign_id" in body:
return "attributie"
if body.count('"em"') or "email_sha256" in body:
return "identity-resolution"
return "onbekend / nader bekijken"
Dit is een grove eerste zeef. De uitkomst "onbekend" is een opdracht om beter te kijken, niet een vrijbrief om iets af te schrijven. Pas als ik de rol ken, weeg ik de partij.
Dat de families technisch verschillen, is gemeten: de verschillen zitten in de vorm van de verzoeken, en die kun je zien. Welke rol een concrete partij speelt, is afgeleid uit het verkeer, met de kanttekening dat één opname een momentopname is. Dat een tag-manager morgen iets anders inlaadt, is vermoed zolang ik het niet over de tijd heb gemeten. Ik label die niveaus expliciet, in lijn met Label elke bevinding op bewijsniveau, want de kracht van dit werk zit in het uit elkaar houden van wat ik zag en wat ik denk.
Het onderscheid is de reden dat mijn rapporten korter zijn dan die van sommige geautomatiseerde scanners, en tegelijk zwaarder wegen. Een scanner telt domeinen. Ik weeg rollen. Dat kost meer werk per bevinding en het levert een bevinding op die je aan een toezichthouder of een journalist kunt voorleggen zonder dat de eerste tegenvraag hem omvertrekt. Ik meet bovendien zoals een echte bezoeker, want een scanner lokt ander gedrag uit dan een mens, iets wat ik uitwerk in Meet zoals een bezoeker, niet zoals een scanner. Een lange lijst maakt indruk. Een gewogen lijst maakt een zaak.
Installatie-identifiers en de advertentie-ID heten 'resetbaar', maar zodra dezelfde id in elk verzoek meegaat, werkt hij als koppelsleutel tussen bestemmingen. Een gehashte e-mail is geen anonimisering: dezelfde invoer geeft dezelfde hash, dus hij correleert een persoon over diensten heen net zo goed als de e-mail zelf. Pseudonimisering is geen anonimisering.
Een identifier is een label dat aan jou vastzit en dat overal hetzelfde is. Op een telefoon heet dat label de advertentie-ID. Op Android is dat de Advertising ID (AAID), op iOS de Identifier for Advertisers (IDFA). Het is een lange tekenreeks, bijvoorbeeld 38400000-8cf0-11bd-b23e-10b96e40000d. In de browser doet een cookie-id hetzelfde werk. Een site zet een waarde in een cookie, en die waarde komt bij elk volgend bezoek weer mee terug.
Het punt van zo'n label is herkenning. Een adverteerder hoeft je naam niet te weten. Zolang hetzelfde nummer terugkomt bij elk verzoek, weet het systeem dat het weer dezelfde persoon is. Alles wat je doet kan onder dat ene nummer worden opgeteld: welke apps je opent, welke pagina's je bezoekt, waar je op klikt. Het nummer is de spil waar het profiel omheen groeit.
"Resetten" betekent dat je dat label vervangt door een nieuw. Je oude advertentie-ID verdwijnt en er komt een verse tekenreeks voor in de plaats. Het idee erachter is dat je dan weer een schone lei hebt, omdat de nieuwe id nergens nog aan gekoppeld is. Die belofte is de kern van waarom de advertentie-ID als privacyvriendelijk wordt gepresenteerd. Je kunt hem immers zelf wissen.
Een reset doet precies één ding dat je kunt zien: het nummer verandert. Voor de reset staat er waarde A in het verkeer, na de reset waarde B. Dat is meetbaar. Je leest de oude id af, je drukt op reset, je leest de nieuwe af, en ze verschillen. Tot hier is alles vaste grond.
Wat je niet direct ziet, is of A en B intern aan elkaar geknoopt zijn. De reset breekt de zichtbare lijn. Of iemand achter de schermen een brug legt tussen het oude en het nieuwe nummer, staat los van wat je op je scherm afleest. En juist die brug bepaalt of de reset iets oplost.
Voor een meting telt of een sleutel in de praktijk stabiel genoeg is om je te herkennen. Of hij in principe kan veranderen, doet er dan weinig toe. De meeste mensen resetten hun advertentie-ID nooit, en wie het wel doet, doet het zelden. Een resetbare identifier die maandenlang gelijk blijft, functioneert al die maanden als een vaste identifier. Dat hij ooit had kunnen veranderen, verandert niets aan wat hij ondertussen deed.
De reset gaat uit van één aanname: dat de advertentie-ID het enige is wat je herkenbaar maakt. Die aanname klopt niet. Naast het label sturen apps en browsers een stroom aan andere signalen mee, en veel van die signalen veranderen niet als je de advertentie-ID vervangt.
Fingerprint. Je toestel of browser laat een technisch profiel achter: schermformaat, taalinstelling, tijdzone, lettertypes, versienummers. Bij elkaar is die combinatie vaak zeldzaam genoeg om je uit een grote groep te vissen, zonder dat er iets op je apparaat wordt opgeslagen. Zie Fingerprinting ontwijkt je weigering door niets op te slaan. Reset je de advertentie-ID, dan blijft de fingerprint gelijk. De nieuwe id verschijnt op precies hetzelfde technische profiel, en de link is snel gelegd.
E-mailhash. Log je ergens in, dan geef je een vast gegeven af: je e-mailadres. Vaak reist het adres mee als hash, een versleuteld ogende tekenreeks. Je leest je adres er niet zomaar uit af. De waarde zelf ligt wel vast, want dezelfde e-mail geeft altijd dezelfde hash. Die hash reist met je oude id mee en straks ook met je nieuwe. Het gedeelde veld verbindt beide.
Inloggen zelf. Zodra je een account gebruikt, is de advertentie-ID overbodig geworden als anker. Je accountnummer is stabieler dan welke resetbare id ook.
Cookie-sync. Partijen wisselen onderling id's uit en leren elkaars nummers voor dezelfde persoon kennen. Zie Cookie-sync laat losse partijen dezelfde persoon herkennen. Als het oude nummer al is uitgewisseld voordat jij reset, dan bestaat de koppeling al bij anderen.
De volgorde is het venijnige. De koppeling tussen oud en nieuw hoeft niet na de reset gelegd te worden. Ze kan al klaarliggen voordat jij op de knop drukt. Zolang oude id A en de e-mailhash samen in één verzoek stonden, en straks nieuwe id B en dezelfde hash samen in een ander verzoek staan, is de hash de scharnier waarlangs A en B elkaar vinden. De reset kwam te laat.
Doe het zelf: vind je advertentie-ID en reset hem¶
Dit kun je als student zelf nalopen. Je hebt alleen je telefoon nodig, en voor het laatste deel een manier om netwerkverkeer te lezen.
Android. Ga naar Instellingen, dan Privacy, dan Advertenties (op sommige toestellen staat het onder Google, dan Advertenties). Daar zie je je advertentie-ID staan of een knop om hem te verwijderen. Noteer de huidige waarde. Kies "Advertentie-ID verwijderen" of "resetten". Kijk daarna opnieuw. De tekenreeks is anders.
iOS. Ga naar Instellingen, dan Privacy en beveiliging, dan Tracking. De IDFA is niet als tekst zichtbaar in de instellingen. Wat je wel kunt sturen is "Verzoeken om tracking toestaan". Zet je dat uit, dan geeft iOS voor apps een IDFA van louter nullen terug (00000000-0000-0000-0000-000000000000). Dat is de iOS-manier om het label onbruikbaar te maken zonder dat je zelf een nummer aftikt.
De continuïteit zien. Hier wordt het interessant. Vang het netwerkverkeer van een app of website op in een HAR-bestand. Hoe je een HAR maakt en leest, staat in Netwerkverkeer lezen via HAR-files. Doe één opname voor de reset en één erna. Zoek in beide naar velden met namen als advertising_id, idfa, ifa, rdid of gaid. Je zult zien dat die waarde is veranderd. Zoek daarna naar velden die niet veranderden: em, email, sha256_email, user_id, of een fingerprint-achtig blok met scherm- en taalgegevens. Blijft zo'n veld gelijk over de reset heen, dan heb je in je eigen opname het scharnier gevonden waarlangs oud en nieuw aan elkaar vast kunnen zitten.
Wat je in de HAR direct aantoont, is dat het ene veld wisselde en het andere niet. Of een ontvanger de twee waarden ook echt samenvoegt, gebeurt op hun server en valt buiten je opname. Dat onderscheid moet je scherp houden, en het komt onderaan terug.
Om te laten zien hoe simpel de herkoppeling is, hoef je geen tracker te zijn. De volgende Python laat het mechanisme zien met verzonnen voorbeeldgegevens. Stel dat een ontvanger twee losse waarnemingen heeft. De eerste is van voor je reset, de tweede van erna. De advertentie-ID verschilt. Het gehashte e-mailveld is gelijk, want je e-mailadres veranderde niet.
import hashlib
def email_hash(email: str) -> str:
# normaliseren zoals gangbaar is: kleine letters, spaties eraf
genormaliseerd = email.strip().lower()
return hashlib.sha256(genormaliseerd.encode()).hexdigest()
# twee waarnemingen die de ontvanger los binnenkreeg
voor_reset = {
"advertising_id": "38400000-8cf0-11bd-b23e-10b96e40000d",
"em": email_hash("student@voorbeeld.nl"),
"gebeurtenis": "app geopend, sportnieuws bekeken",
}
na_reset = {
"advertising_id": "a1b2c3d4-0000-4444-8888-abcdefabcdef",
"em": email_hash("student@voorbeeld.nl"),
"gebeurtenis": "webshop bezocht, schoenen bekeken",
}
# de advertentie-id's verschillen: de reset is echt gebeurd
print(voor_reset["advertising_id"] == na_reset["advertising_id"]) # False
# de e-mailhash is identiek: het scharnier
print(voor_reset["em"] == na_reset["em"]) # True
# dus koppel je op het veld dat niet veranderde
if voor_reset["em"] == na_reset["em"]:
profiel = {
voor_reset["em"]: [
voor_reset["gebeurtenis"],
na_reset["gebeurtenis"],
]
}
print(profiel)
De uitvoer voegt het sportnieuws van voor de reset en de schoenen van erna samen onder één sleutel. Die sleutel is de e-mailhash. De twee verschillende advertentie-ID's zijn nu twee namen voor dezelfde persoon. Merk op wat de hash wel en niet doet. Hij verbergt je e-mailadres voor wie de tabel leest. Hij verbergt jou niet, want dezelfde invoer geeft altijd dezelfde uitvoer. Wie jouw e-mail ook maar één keer weet, kan de hash zelf uitrekenen en er alsnog jouw naam op plakken. Dat is het punt uit de KERN, in vijf regels code.
De reset laat zich makkelijk begrijpen als het vervangen van een sleutel. Je oude sleutel werkt niet meer, je hebt een nieuwe, dus je bent veilig. De vergelijking gaat mank op één punt. Bij een echte sleutelwissel vervang je ook het slot, of je verandert op zijn minst iets aan de deur. Bij een advertentie-ID-reset verander je alleen de sleutel. Het slot, de manier waarop je herkend wordt, staat er nog precies zo.
En het slot heeft meer dan één sleutelgat. De advertentie-ID is er één van. De fingerprint, de e-mailhash en je login zijn de andere. Je hebt de sleutel in het eerste gat vervangen. In de andere gaten past je oude sleutel nog, of ze zaten nooit op slot. Zo lang die openstaan, koop je met een reset weinig tijd. De herkenning verschuift gewoon naar het volgende signaal.
Daar komt de timing bovenop. Je vervangt de sleutel op het moment dat je reset. De koppeling tussen oud en nieuw kan al gelegd zijn toen beide sleutels nog samen met dezelfde e-mailhash langskwamen. Je maakt de deur schoon nadat de sleutel al is gekopieerd. Dat is waarom ik het een resetbare identifier blijf noemen. Voor de herkenning gedraagt hij zich als een vaste identifier, en dat is wat telt. Hoe gevoeliger de context, hoe harder die stabiliteit aankomt. Zie Hoe gevoeliger de context, hoe langer de identifier meegaat.
Gemeten. Dat de advertentie-ID verandert bij een reset, kun je zelf aflezen in de instellingen en in een HAR. Dat een e-mailhash- of fingerprintveld over die reset heen gelijk blijft, kun je in dezelfde HAR aantonen. Dat het om hetzelfde toestel gaat is dan direct zichtbaar.
Afgeleid. Dat een ontvanger de oude en de nieuwe id daadwerkelijk samenvoegt tot één profiel, gebeurt op zijn server en zie je in het verkeer niet gebeuren. Je leidt het af uit de aanwezigheid van een gedeeld stabiel veld dat naar hetzelfde eindpunt gaat. Dat is een sterke afleiding, want het veld heeft weinig ander nut dan koppelen, maar het blijft een afleiding.
Wanneer het gemeten wordt. Zie je in het verkeer één verzoek waarin de oude id en de e-mailhash samen staan, en een later verzoek waarin de nieuwe id en dezelfde hash samen staan, dan is de koppelbaarheid zelf zichtbaar in de data. De samenvoeging tot een profiel blijft dan nog steeds afgeleid, maar het scharnier is dan gemeten, niet vermoed.
Voor mijn eigen werk betekent dit een simpele werkregel. Ik behandel elke id die maandenlang stabiel is als een identifier, ongeacht het label "resetbaar" dat eraan hangt. En ik zoek in elke opname eerst naar het veld dat niet verandert, want dat veld vertelt me of een reset iets voorstelt of alleen de sleutel wisselt terwijl het slot blijft staan.
Cookie-sync laat losse partijen dezelfde persoon herkennen
Twee trackers met elk een eigen identifier voor jou kunnen die id's onderling uitwisselen, zodat ze weten dat het om dezelfde persoon gaat. Zo ontstaat een gedeeld profiel zonder dat een partij alles ziet. Op het web heet dat cookie-sync; in apps bestaat het equivalent met device- en installatie-id's. Dit is het mechanisme dat losse waarnemingen tot een dossier smeedt.
Twee partijen kennen jou allebei, elk onder een eigen nummer. De ene noemt je A-4821, de andere X-99f0. Zolang die nummers los blijven, heeft elke partij een half dossier dat het andere half niet kan vinden. Cookie-sync is het moment waarop ze elkaars nummer voor dezelfde persoon uitwisselen. Vanaf dan weet partij A dat haar A-4821 dezelfde mens is als de X-99f0 van partij B. Ze kunnen hun profielen op elkaar leggen.
Het is een koppeltabel, meer niet. Aan de ene kant het interne id van de ene partij, aan de andere kant dat van de andere. Zodra die tabel gevuld is, gedragen twee ondernemingen die formeel niets met elkaar te maken hebben zich als één geheugen.
Cookie-sync lost een technisch probleem op dat inherent is aan het web. Een cookie is per definitie gebonden aan het domein dat hem heeft gezet. De cookie die partij-a.example op jouw browser plaatst, is voor partij-b.example onleesbaar. Dat is de kern van de same-origin-gedachte. Voor de advertentieketen is dat lastig, want daar werken tientallen partijen samen aan hetzelfde bod op dezelfde persoon.
De oplossing is een uitwisselingsronde. Wanneer je een pagina laadt, laten de betrokken partijen je browser een reeks verzoeken afvuren waarin ze elkaars id's ophalen en aan elkaar knopen. Dit gebeurt in de milliseconden voordat een advertentie geladen wordt, vaak als opstap naar een biedronde. Zie Real-time bidding biedt jouw toestel in een veiling aan, in milliseconden voor waar dit vervolgens in uitmondt.
Cookie-sync is zichtbaar in het netwerkverkeer, en dat is precies waarom het als bewijs bruikbaar is. In een HAR zie je een keten van omleidingen waarin het id van de ene partij als parameter in de URL van de andere staat. Het patroon is herkenbaar:
GET https://partij-a.example/sync?redir=partij-b.example&uid=A-4821
-> 302 Location: https://partij-b.example/match?partner=a&partner_uid=A-4821
-> 302 Location: https://partij-a.example/setmap?their_uid=X-99f0
De eerste partij stuurt haar eigen id mee en wijst de browser door. De tweede partij ziet dat id, plakt haar eigen id erbij, en stuurt de browser terug zodat beide kanten de koppeling kunnen opslaan. Het label voor deze bevinding is gemeten: de id's staan letterlijk in de vastgelegde verzoeken. Ik lees ze uit de HAR, niet uit een verondersteld gedrag. Zie Netwerkverkeer lezen via HAR-files.
Op het web draait dit om cookies. In apps bestaat hetzelfde mechanisme met andere identifiers. Daar is er vaak een stabiel apparaat-id, zoals de reclame-identifier van het besturingssysteem, en daarnaast installatie-id's die een SDK zelf toekent. Partijen wisselen die uit op dezelfde manier: ik ken dit toestel als dit nummer, ken jij het ook, dan zijn onze dossiers van dezelfde persoon.
Het maakt voor de aard van de koppeling weinig uit of de sleutel een cookie of een apparaat-id is. Zie Een resetbare identifier is alsnog een sleutel: ook een reclame-id die je in theorie kunt resetten, functioneert tot dat moment als een vaste sleutel waarmee losse partijen dezelfde persoon herkennen.
Er is wel een verschil in duurzaamheid. Een cookie kun je wissen, en dan is de koppeltabel aan jouw kant leeg. Een apparaat-id blijft over browsers en apps heen gelijk, tenzij je hem bewust reset. Daardoor reikt de herkenning in apps vaak verder dan op het web. Twee onverwante apps die dezelfde reclame-id zien, kunnen langs dezelfde weg vaststellen dat het om hetzelfde toestel gaat, ook zonder dat ze ooit direct met elkaar praten. Zie Onverwante apps sturen je profiel dezelfde veiling in voor hoe die gedeelde herkenning vervolgens in één advertentieveiling samenkomt.
De reden dat cookie-sync ertoe doet, zit in wat het met de rest van de waarnemingen doet. Stel dat ik op een site tien trackers meet. Zonder koppeling zijn dat tien partijen met elk een eigen, beperkt beeld. De ene weet dat je deze pagina bezocht, de andere dat je op een knop klikte, een derde welk toestel je gebruikt. Los van elkaar zijn dat scherven.
Een gemeten sync tussen die partijen legt de scherven op elkaar. Nu weet de partij die je klik zag ook welk toestel je gebruikt, want ze deelt een sleutel met de partij die dat wist. Het profiel dat ontstaat, is rijker dan wat één partij ooit alleen kon opbouwen. Dat is waarom ik een sync zwaarder weeg dan een losse tracker: het verandert de aard van de verzameling. Zie Het risico zit in de optelsom, niet in het losse veld, waar ik uitwerk dat het risico zelden in één stroom zit. Het zit meestal in wat de stromen samen mogelijk maken.
Het maakt ook de biedketen begrijpelijk. Real-time bidding werkt alleen als tientallen partijen weten dat een binnenkomend bodverzoek over dezelfde persoon gaat die zij al kennen. Cookie-sync is de infrastructuur die dat mogelijk maakt. Zonder de koppeling zou elke partij een anonieme, losse impressie zien. Met de koppeling zien ze een herkenbaar persoon met een geschiedenis. In de OpenRTB-standaard is die herkenning terug te vinden als het meesturen van gebruikers-id's in het bodverzoek, en die id's zijn bruikbaar dankzij een eerdere sync.
Cookie-sync is hard bewijs van herkenning. Het laat zien dat partijen die los van elkaar lijken te staan, achter de schermen dezelfde persoon volgen en dat ook onderling afstemmen. Dat is een sterkere bevinding dan een losse tracker. Een losse tracker toont dat één partij je ziet. Een sync toont de koppeling zelf, het punt waarop twee waarnemingen tot één dossier worden gesmeed.
Voor mijn werk is dat het waardevolle deel. Een lijst van tien trackers zegt dat tien partijen aanwezig waren. Een gemeten sync tussen twee ervan zegt dat die twee samen meer weten dan elk apart. Dat tilt de bevinding van "veel partijen" naar "een gedeeld profiel".
Het bewijst geen bod en geen verkoop. Dat twee partijen hun nummers matchen, betekent dat ze je kunnen herkennen. Het betekent niet dat er op dat moment een advertentie is verhandeld of dat er geld is gevloeid. Herkenning en transactie zijn twee aparte claims, en ik houd ze streng uit elkaar.
Die scheiding is niet academisch. Als ik zeg "hier is een advertentie op je verkocht" moet ik het bod kunnen tonen, met de biedstroom en de partijen erin. Als ik alleen de sync heb, zeg ik "deze twee partijen kunnen je als dezelfde persoon herkennen", en meer niet. Wie de sterkere claim maakt op basis van het zwakkere bewijs, geeft de tegenpartij precies de opening waar ze op wacht. Zie Een naam in de code is nog geen tracker voor hetzelfde principe aan de meetkant.
Een gemeten sync raakt aan artikel 26 van de AVG, de bepaling over gezamenlijke verwerkingsverantwoordelijken. Op het moment dat twee partijen gezamenlijk bepalen dat ze dezelfde persoon herkennen en hun profielen koppelen, is de vraag gerechtvaardigd of ze samen verantwoordelijk zijn voor die verwerking. Ik trek die juridische conclusie niet zelf in het meetrapport. Ik lever de meting die de vraag scherp maakt.
Een sync kan soms onschuldig lijken, bijvoorbeeld om dubbele advertenties te voorkomen of om frequentie te beperken. Dat kan. Het doel van de koppeling meet ik niet, en dat geef ik toe. Wat ik meet is dat de koppeling bestaat en dat de twee partijen daarna dezelfde persoon kunnen aanwijzen. Het legitieme doel dat een partij aanvoert, verandert die technische werkelijkheid niet. De herkenning is er, ongeacht waarvoor ze wordt ingezet.
Dat is precies waarom cookie-sync het mechanisme is dat losse waarnemingen tot een dossier smeedt. Het verklaart hoe een handvol op zichzelf onschuldig ogende trackers samen een compleet beeld kan opleveren. Zie Het risico zit in de optelsom, niet in het losse veld.
CNAME-cloaking vermomt een derde partij als eigen subdomein
Een tracker kan draaien op een subdomein van de site zelf, via een DNS-omleiding die stiekem naar de tracker-infrastructuur wijst. Daardoor lijkt hij eerste-partij en ontwijkt hij browserblokkades. Wie alleen op de domeinnaam kijkt, mist hem; je moet de DNS-keten en het uiteindelijke IP volgen om te zien wie er echt achter zit.
Bij CNAME-cloaking laat een site een tracker van een derde partij draaien onder een eigen subdomein. Wat er voor de browser uitziet als stats.eigensite.nl, wijst achter de schermen door naar de servers van een externe partij. De derde partij draagt de jas van de eerste. De browser ziet een adres op het domein dat de bezoeker net vertrouwde, en behandelt alles wat daaronder gebeurt alsof het van de site zelf komt.
De truc zit niet in de code op de pagina. Die zit in het adresboek van het internet, in DNS. Om te snappen waarom dit werkt en hoe je het opspoort, moet je één stap dieper dan de domeinnaam.
DNS vertaalt een naam naar een adres. Vraag je naar www.eigensite.nl, dan geeft DNS uiteindelijk een IP-adres terug waar je verbinding mee maakt. Meestal loopt dat via een A-record of AAAA-record, dat een naam direct aan een IP koppelt.
Een CNAME-record doet iets anders. Het zegt: deze naam is een alias voor die andere naam, zoek daar verder. analytics.eigensite.nl kan een CNAME hebben die naar c.tracker-provider.com wijst. De browser stelt dan één vraag, aan analytics.eigensite.nl, en DNS lost dat stilletjes op naar de infrastructuur van de tracker. De bezoeker ziet in de adresbalk en in de netwerkrequests alleen het eigen subdomein. De omleiding gebeurt een laag lager, waar bijna niemand kijkt.
De ketting kan langer zijn dan één stap. Een subdomein wijst naar een naam van de provider, die weer naar een load balancer, die pas op het eind bij een IP-adres uitkomt. Wie de vermomming wil doorzien, volgt die hele ketting tot het einde.
Je hebt geen scanner nodig om de eerste laag te zien. Het commando dig toont de DNS-keten rechtstreeks.
dig analytics.voorbeeld.nl CNAME +short
Als hier een naam van een externe partij terugkomt, bijvoorbeeld voorbeeld-nl.a.tracker-provider.net, dan is het "eigen" subdomein een doorverwijzing naar die partij. Wil je de hele keten zien, inclusief het IP waar het op uitkomt, vraag dan het volledige antwoord op:
dig analytics.voorbeeld.nl +noall +answer
Een typische uitkomst ziet er zo uit:
analytics.voorbeeld.nl. 3600 IN CNAME voorbeeld-nl.a.tracker-provider.net.
voorbeeld-nl.a.tracker-provider.net. 300 IN A 203.0.113.45
De eerste regel is het bewijs. Het subdomein op het domein van de site is een alias voor een naam die bij een andere organisatie hoort. De tweede regel geeft het IP, dat je met een WHOIS-lookup of een offline GeoIP-database aan een houder en een land kunt koppelen. Zo zie je niet alleen dát het wordt omgeleid, maar ook waarheen en naar welke jurisdictie. Voor dat laatste geldt een eigen weegschaal, zie Waar het pakket landt en wie het kan vorderen zijn twee assen en In Europa gehost is geen vrijwaring.
Wat je op dit punt hebt vastgesteld is puur DNS. Je hebt gemeten dat een naam op het eigen domein doorverwijst naar een externe partij. Dat is een harde, herhaalbare observatie.
De omleiding heeft één doel dat verder gaat dan onzichtbaarheid: het maakt de tracker eerste-partij in de ogen van de browser. Dat heeft gevolgen voor twee dingen tegelijk.
Ten eerste de blokkades. Adblockers en trackerlijsten zoals EasyPrivacy werken grotendeels op domeinnamen. Ze kennen tracker-provider.com en houden requests naar dat domein tegen. Een request naar analytics.eigensite.nl staat op geen enkele lijst, want dat is een uniek subdomein van deze ene site. De filter laat het door. De trackerlijsten die specifiek CNAME-cloaking bestrijden moeten daarom de DNS resolven voordat ze filteren, en dat is precies wat de meeste blokkades op basis van snelheid overslaan.
Ten tweede de cookies. Een cookie die door een echt derde-partij-domein wordt gezet, is een third-party cookie. Moderne browsers knijpen die dood of geven ze een korte levensduur. Een cookie die wordt gezet in het antwoord van analytics.eigensite.nl, is een first-party cookie, want het staat op het domein dat de bezoeker bezoekt. Dat cookie krijgt de volledige, lange levensduur van een eigen cookie. De vermomming levert dus zowel het passeren van de filters als een langer geheugen op.
Dat mechanisme staat los van een cookie-banner. Ook wie op de banner weigert, kan zo alsnog een identifier krijgen die als eerste-partij binnenkomt. Over hoe je dat verschil tussen weigeren en werkelijk stoppen meet, schreef ik in Cookies weigeren scheelt echt, maar reken er niet blind op.
De bescherming verschilt per browser, en dat verschil is de kern van waarom de truc bestaat.
Safari, met Intelligent Tracking Prevention, kijkt niet alleen naar het domein maar ook naar de CNAME-keten. Als ITP ziet dat een first-party subdomein via CNAME naar een bekende tracker resolvet, behandelt het de cookies alsof ze van een derde partij komen. Het kapt de levensduur van zulke cookies terug tot zeven dagen, en bij een deel van de gevallen naar één dag. De vermomming wordt in Safari dus deels doorzien.
Firefox biedt in de strikte modus van Enhanced Tracking Protection een vergelijkbare CNAME-ontcloaking. Het resolvet de keten en past de trackerlijst toe op het einddoel, waardoor een gecloakte tracker alsnog wordt geblokkeerd. In de standaardmodus is die bescherming zwakker.
Chrome doet dit standaard niet. Wie Chrome gebruikt zonder aanvullende, DNS-resolvende blokkade, krijgt de gecloakte tracker en het first-party cookie gewoon binnen. Omdat Chrome het grootste deel van de bezoekers levert, is dat het scenario waar de meeste sites op mikken. Precies daar heeft de vermomming het grootste bereik.
Een CNAME naar een ander domein is op zichzelf doodnormaal. Het internet draait erop. De vraag is altijd: naar wie wijst de keten aan het einde, en wat gebeurt daar. Drie voorbeelden van een CNAME die géén cloaking is:
Een eigen CDN-subdomein.static.eigensite.nl wijst via CNAME naar eigensite.cdnprovider.net. Dat levert plaatjes, scripts en stylesheets uit. Er wordt geen identifier gezet om de bezoeker over sites heen te volgen. Dit is een leveringsketen, geen volgketen.
Een e-mailprovider-subdomein.email.eigensite.nl of mg.eigensite.nl wijst naar een verzenddienst voor nieuwsbrieven en transactiemail. De verwijzing is technisch identiek aan cloaking, de functie is het versturen van post.
Een subdomein naar eigen infrastructuur.api.eigensite.nl wijst naar een eigen backend bij een hostingpartij. Het IP komt uit bij de site zelf of bij een neutrale hoster, niet bij een advertentie- of analytics-bedrijf.
En het geval dat wél cloaking is:
Een subdomein dat via CNAME resolvet naar een bekende tracker-provider.analytics.eigensite.nl of m.eigensite.nl komt uit bij de infrastructuur van een analytics- of advertentiepartij, en in het antwoord wordt een first-party cookie met een identifier gezet. De naam suggereert een eigen dienst, de bestemming is een tracker.
Het onderscheid zit dus in twee dingen samen: wie er aan het einde van de keten staat, en of daar een identifier wordt gezet die de bezoeker herkenbaar maakt. Het eerste zie je met dig. Het tweede zie je in de HAR van een echte browsersessie, zie Netwerkverkeer lezen via HAR-files. Een naam die "analytics" heet is trouwens geen bewijs op zich, zie Een naam in de code is nog geen tracker; het bewijs is de bestemming en het gedrag.
Voor de wet maakt het niet uit via welk domein het verzoek loopt. Artikel 11.7a van de Telecommunicatiewet regelt het plaatsen en uitlezen van gegevens op het apparaat van de gebruiker. De eis van voorafgaande toestemming geldt onafhankelijk van de vraag of de tracker op tracker-provider.com draait of op analytics.eigensite.nl. De vermomming verandert het technische pad, niet de juridische kwalificatie van wat er gebeurt.
Hetzelfde geldt onder de AVG. Wordt er een identifier gezet en uitgelezen waarmee een persoon herkenbaar wordt, dan is er verwerking van persoonsgegevens, en gelden de eisen van grondslag, transparantie en verantwoordingsplicht. Dat de tracker onder een eigen subdomein draait, ontslaat de site niet van die plichten. Sterker, het maakt de site tot een partij die actief helpt om een derde onherkenbaar te maken. Dat is een omstandigheid die tegen de verwerkingsverantwoordelijke pleit, niet voor.
De cloaking maakt de handhaving wel moeilijker. Een toezichthouder of onderzoeker die alleen op domeinnamen kijkt, ziet de tracker niet. Wie de DNS-keten volgt, ziet hem alsnog. De wet reikt tot achter de vermomming, de moeite om erbij te komen is groter geworden.
Een CNAME zien is gemeten. dig geeft een herhaalbaar, verifieerbaar antwoord: dit subdomein verwijst naar die externe partij, op dit IP, in deze jurisdictie. Daar hoeft niemand mij op te vertrouwen, het commando is voor iedereen na te doen.
Dat er persoonsgegevens stromen, is afgeleid. Uit de combinatie van de bestemming, een bekende tracker, en een first-party cookie met een identifier in het HAR-verkeer, leid ik af dat de site bezoekers herkenbaar volgt. Die afleiding is sterk, want de puzzelstukken passen, maar het blijft een gevolgtrekking uit wat ik meet, geen directe waarneming van de inhoud van hun database.
Dat onderscheid is belangrijk als het serieus wordt. Bij een klacht of een publicatie moet de harde kern, de CNAME en de cookie, in de meting liggen, en de gevolgtrekking daarboven als gevolgtrekking benoemd. Meet daarom zoals een bezoeker, niet zoals een scanner, want de cloaking richt zich juist op de echte browser, zie Meet zoals een bezoeker, niet zoals een scanner. En verwar de rollen niet: een gecloakte partij kan analytics zijn, een advertentienetwerk of iets ertussenin, en dat verschil telt, zie Trackers hebben rollen, en die verwar je niet.
Yana Dimova e.a., "The CNAME of the Game: Large-scale Analysis of DNS-based Tracking Evasion", PETS 2021de eerste grootschalige meting van CNAME-tracking en de bijbehorende cookielekken
Telecommunicatiewet, artikel 11.7ade toestemmingseis geldt ongeacht via welk domein het verzoek loopt
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.
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.
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.
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.
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.
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.
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.
Peter Eckersley, "How Unique Is Your Web Browser?", PETS 2010de meting waarmee browservingerafdrukken aantoonbaar identificerend bleken
European Data Protection Board, richtsnoeren over de reikwijdte van artikel 5(3) ePrivacy, 2024uitlezen van het toestel valt onder de toestemmingseis, ook zonder opslag
Server-side tagging verplaatst de tracking uit het zicht
Bij server-side tagging stuurt de site naar een eigen endpoint, dat vervolgens serverzijdig doorverdeelt naar de echte trackers. Voor een meting op je toestel lijkt het dan of er maar een, eigen bestemming is; de doorverdeling gebeurt buiten je zicht. Daarom bewijst de afwezigheid van een tracker-domein op de lijn niet dat de data er niet komt.
Bij klassieke tracking laadt je browser de scripts van de trackers zelf. Google Analytics, een advertentiepixel, een attributietag: elk daarvan opent een eigen verbinding vanaf jouw toestel naar de partij erachter. Die verbindingen zijn zichtbaar in het netwerkverkeer, want ze komen langs jouw apparaat.
Bij server-side tagging verandert dat. Je toestel stuurt nog maar naar één bestemming: een eigen verzamelpunt van de site. Dat is meestal een subdomein van de site zelf, zoiets als sgtm.voorbeeld.nl of metingen.voorbeeld.nl. Achter dat verzamelpunt draait een container, bijvoorbeeld een server-side Google Tag Manager. Die container ontvangt jouw gegevens en verdeelt ze vervolgens door naar de echte trackers. Die doorverdeling gebeurt van server naar server, buiten je toestel om. Wat je browser ziet, is één nette verbinding met de site zelf.
Dat is de kern van het mechanisme. De site verzamelt eerst op een eigen adres en distribueert daarna. De partij die uiteindelijk je gegevens krijgt, spreekt jouw toestel nooit rechtstreeks.
Een meting in de browser ziet alleen wat langs jouw toestel komt. Dat is de fundamentele grens van de methode. Zodra het doorsturen op de server gebeurt, valt het buiten beeld. In een HAR-opname zie je één verbinding naar het eigen verzamelpunt en verder niets. De uiteindelijke ontvanger staat niet in de opname, want jouw toestel heeft die ontvanger nooit gesproken.
Dit heeft een scherpe consequentie voor bewijsvoering. De afwezigheid van een tracker-domein op de lijn bewijst niet dat de data er niet komt. Het draait de gebruikelijke logica om. Normaal geldt: zie ik een tracker, dan is er tracking. Bij server-side tagging geldt dat nog steeds, maar het omgekeerde vervalt. Zie ik geen tracker, dan weet ik niets over wat er op de server gebeurde. Een afwezigheid die vroeger geruststelde, zegt nu enkel dat het buiten mijn bereik lag. Een site kan er op een browsermeting volledig schoon uitzien terwijl er achter het verzamelpunt tien partijen worden gevoed. De meting toont wat zichtbaar overging. Wat op de server werd doorgezet, blijft onzichtbaar. Dat is geen tekortkoming die je met een betere browserscan oplost, want het verkeer bestaat simpelweg niet op het toestel.
Server-side tagging is niet volledig te doorgronden vanaf het toestel, maar de aanwezigheid ervan laat wel sporen na. Ik let op een paar signalen.
Een eerste signaal is één verzamelpunt op een eigen subdomein dat een verdachte hoeveelheid gestructureerde gebeurtenissen ontvangt. Een tweede signaal is dat dat subdomein via een CNAME naar de infrastructuur van een tracker of tagleverancier wijst. Dat is verwant aan CNAME-cloaking vermomt een derde partij als eigen subdomein, want het laat een derde eruitzien als eigen domein.
# staat het verzamel-subdomein op eigen infrastructuur of wijst het door?
dig +short sgtm.voorbeeld.nl CNAME
dig +short sgtm.voorbeeld.nl A
# welk endpoint krijgt de gebeurtenissen binnen?
jq -r '.log.entries[]
| select(.request.postData.text != null)
| .request.url' capture.har | sort | uniq -c | sort -rn
Bij een server-side Google Tag Manager gaan de gebeurtenissen vaak naar een pad als /g/collect op het eigen subdomein, terwijl een klassieke opzet naar een Google-domein zou gaan. Dat het verzamelpunt op een eigen adres staat is dan gemeten. Waar het daarna heen gaat is vermoed, want dat deel gebeurt op de server. Ik kan de doorverdeling niet zien, ik kan alleen aannemelijk maken dat ze plaatsvindt.
Ook al blijft de doorverdeling onzichtbaar, ik ben niet blind. Er zijn dingen die ik wel hard kan maken vanaf het toestel. Ik kan meten dat er een verzamelpunt is en hoeveel gebeurtenissen het ontvangt. Ik kan meten of dat verzamelpunt een eigen subdomein is en of het via een CNAME naar een externe partij wijst. Ik kan de payload lezen die eruit gaat en zien welke identifiers en velden erin zitten voordat ze de server bereiken.
Wat ik niet kan meten, benoem ik als zodanig. Ik claim niet te weten wie er achter het verzamelpunt gevoed wordt, want dat verkeer bestaat niet op het toestel. Dit onderscheid is de kern van eerlijk meten. Een verzamelpunt met een CNAME naar een tagleverancier is een sterke aanwijzing voor doorverdeling, maar het is een aanwijzing en geen bewijs van de uiteindelijke ontvangers. Ik houd die twee lagen streng uit elkaar: het gemeten bestaan van het verzamelpunt, en de vermoede verdeling erachter. Zo blijft mijn conclusie navolgbaar tot aan de plek waar mijn zicht ophoudt.
Server-side tagging verschuift de plek waar de verdeling gebeurt, en daarmee verschuift ook wie het kan waarnemen. Voor de gebruiker en voor een toezichthouder die op afstand meet, wordt het moeilijker om vast te stellen welke partijen gegevens ontvangen. De grondslag onder de AVG verandert daar niet door. Voor het plaatsen en uitlezen van gegevens op een apparaat geldt artikel 11.7a van de Telecommunicatiewet, en voor de verdere verwerking gelden de gewone AVG-verplichtingen. Toestemming, transparantie en een grondslag blijven vereist, ook als het doorsturen op de server gebeurt.
Wat verdwijnt is de zichtbaarheid, niet de plicht. Een site die server-side tagging inzet, moet in haar eigen documentatie nog steeds verantwoorden welke ontvangers er zijn. De verplaatsing naar de server raakt ook de doorgifte naar derde landen. Als de container gegevens doorzet naar een partij buiten de Europese Economische Ruimte, dan gelden de artikelen 44 tot en met 49 AVG onverkort. Dat het doorsturen serverzijdig gebeurt, verandert daar niets aan. De enige die het verschil merkt is de buitenstaander die probeert te meten, en juist die verliest zijn zicht. De techniek maakt het mogelijk om die verantwoording te ontlopen zonder dat een buitenstaander het merkt. Dat is de reden dat ik de techniek serieus neem in mijn oordeel.
Server-side tagging is precies de reden dat ik nooit claim het hele plaatje te zien. Alles wat ik met een browsermeting vaststel is een ondergrens. Wat ik meet, is wat er zichtbaar overheen ging. De rest schuift bewust uit het zicht, en ik benoem dat als zodanig.
Concreet betekent het dat ik een schone meting anders label dan een schone werkelijkheid. Als ik één verzamelpunt zie dat veel gebeurtenissen slikt, noteer ik dat als een aanwijzing voor doorverdeling op de server, met bewijsniveau vermoed. En als een site er schoon uitziet, schrijf ik erbij dat de meting server-side doorverdeling niet uitsluit. Dat voorbehoud hoort in elke conclusie, want zonder dat voorbehoud zou een lezer de ondergrens voor het volledige beeld aanzien. Ik meet zoals een bezoeker, zie Meet zoals een bezoeker, niet zoals een scanner, en ik houd vast aan de regel dat afwezigheid op de lijn geen afwezigheid van verwerking is. Zie Een naam in de code is nog geen tracker voor de spiegelbeeldige valkuil aan de andere kant.
Niet alles vuurt bij opstart, sommige trackers wachten op jou
Een deel van het tracker-verkeer komt pas los na een handeling: na het accepteren van consent, na scrollen, na inloggen, of na een schermovergang. Een opstart-meting vangt die niet en onderschat het beeld. Daarom is een ingelogde, doorgeklikte meting rijker dan een snelle cold-start, en hoort bij '0 gevonden' altijd de vraag: gemeten tot welk punt?
Niet alle volgtechniek komt meteen in actie. Een deel wacht. Op een scroll, op verstreken tijd, op een klik, op het accepteren van consent, op een schermovergang. Bij het laden van de pagina lijkt er dan weinig aan de hand, terwijl het echte gedrag pas later begint. Dat is geen toeval. Veel scripts zijn met opzet zo gebouwd, om de pagina snel te laten laden en om pas te vuren wanneer er iets te meten valt over een echte gebruiker.
Voor mijn werk is dat het verschil tussen een oppervlakkig en een eerlijk beeld. Een meting die stopt zodra de pagina staat, ziet de brave helft van het verkeer. De wachtende helft blijft onzichtbaar. En juist die wachtende helft is vaak het interessantst, want daar zit de techniek die op gedrag reageert.
Wie alleen de eerste seconde na het laden meet, ziet de brave helft en mist de wachtende. Dat geeft een te gunstig beeld en het is een makkelijke manier om jezelf voor de gek te houden. De afwezigheid van een tracker in seconde één is geen bewijs dat hij er niet is.
Het probleem verergert doordat de uitkomst overtuigend oogt. Een korte meting levert een korte lijst en een korte lijst leest als "het valt mee". De meting bevestigt de hoop van wie hem uitvoert. Precies daarom is dit een valkuil en geen toeval. De redenering sluit aan bij Een mislukte meting is geen schone app: een leegte in de meting is een uitspraak over de meting zolang je niet hebt gecontroleerd of je lang genoeg keek.
Er zit ook een technische reden achter de vertraging. Moderne pagina's laden hun code in fasen. Eerst komt het zichtbare deel, de tekst en de opmaak, zodat de bezoeker snel iets ziet. Zwaardere scripts worden pas daarna opgehaald, of pas wanneer een gebeurtenis ze aanroept. Analytics- en advertentiecode hangt vaak in die tweede golf. Voor de gebruikerservaring is dat verstandig, want de pagina voelt sneller. Voor mijn meting betekent het dat de eerste seconde structureel het lichtste beeld geeft dat er bestaat. Wie daar stopt, meet met opzet het gunstigste moment.
Uit het lezen van veel verkeer komt een klein aantal terugkerende triggers naar voren. Ik noem ze op bewijsniveau afgeleid, omdat ik ze herken aan het moment waarop het verkeer losbarst. De broncode van elk script lees ik daarbij zelden.
Mijn antwoord is simpel van vorm en streng in de uitvoering. Ik laat een opname lang genoeg lopen en ik gedraag me als een gewone bezoeker. Ik vermijd de scanner-aanpak die na één seconde klaar is. Concreet houdt dat een vaste volgorde in:
1. Start de opname voordat de app of pagina opent.
2. Laat de pagina volledig laden en wacht daarna bewust nog een aantal seconden zonder iets te doen. Dit vangt de trackers die op verstreken tijd wachten.
3. Scroll rustig naar beneden, in stappen, zodat lazy-loading en scroll-triggers echt afgaan.
4. Voer de handeling uit die de dienst verwacht: inloggen, doorklikken naar een tweede scherm, een keuze maken.
5. Herhaal dit per toestemmingsmodus, zodat ik het gedrag zonder consent, na weigeren en na accepteren los kan vergelijken. Zie Meet zoals een bezoeker, niet zoals een scanner.
Elke stap heeft één doel: de techniek de trigger geven waarop ze wacht, zodat ze zichtbaar wordt in de opname.
Om te controleren of mijn geduld iets opleverde, zet ik het verkeer op een tijdlijn. Ik reken elk request terug naar het aantal seconden na het eerste request en kijk wat er ná de eerste seconde nog bij kwam. Dat maakt de wachtende trackers zichtbaar als groep.
import json
from datetime import datetime
def laat_verlopen(pad, na_seconden=1.0):
with open(pad, encoding="utf-8") as f:
entries = json.load(f)["log"]["entries"]
tijden = [datetime.fromisoformat(e["startedDateTime"].replace("Z", "+00:00"))
for e in entries]
t0 = min(tijden)
laat = {}
for e, t in zip(entries, tijden):
offset = (t - t0).total_seconds()
if offset > na_seconden:
host = e["request"]["url"].split("/")[2].lower()
laat.setdefault(host, []).append(round(offset, 1))
print(f"Hosts die pas na {na_seconden}s begonnen:")
for host, momenten in sorted(laat.items(), key=lambda x: min(x[1])):
print(f" {host}: eerste contact op {min(momenten)}s ({len(momenten)}x)")
laat_verlopen("meting.har")
Wat hier uitrolt, is precies de lijst die een opstart-meting had gemist. Een host die pas op seconde acht voor het eerst contact maakt, was in seconde één onzichtbaar. Zie het contact met dat gehost verkeer op zichzelf niet als bewijs van een tracker, want een naam of host is nog geen bewijs. Zie Een naam in de code is nog geen tracker. De tijdlijn vertelt me wanneer ik moet kijken, de duiding komt daarna.
De drempel van één seconde is bewust ruw. Ik gebruik hem om de wachtende groep als geheel zichtbaar te maken, en daarna verfijn ik. Vaak zie ik in de momenten-lijst clusters ontstaan: een golf rond het accepteren van consent, een golf na de eerste scroll, een golf na het inloggen. Die clusters koppel ik terug aan mijn eigen handelingen, die ik met tijdstempels heb bijgehouden. Zo verandert een platte lijst van hosts in een verhaal over welke handeling welke techniek wakker maakte. Die koppeling is het verschil tussen weten dat er iets laat vuurde en weten waaróm het laat vuurde.
De belangrijkste discipline die uit dit stuk volgt, is dat bij elke "0 gevonden" de vraag hoort: gemeten tot welk punt? Een leeg resultaat na een cold-start van drie seconden en een leeg resultaat na een ingelogde sessie van twee minuten met scrollen zijn totaal verschillende beweringen. De eerste is zwak, de tweede is sterk.
Die vraag stel ik niet als formaliteit. Ze bepaalt hoe hard de conclusie is. Twee onderzoekers kunnen dezelfde app meten en tot tegengestelde uitspraken komen, puur doordat de een na drie seconden stopte en de ander twee minuten doorging. Zonder de reikwijdte erbij zijn hun "0 gevonden" niet te vergelijken. Met de reikwijdte erbij zie je meteen dat de ene meting een flauwe aftasting was en de andere een serieuze test.
Daarom noteer ik bij elke uitkomst de reikwijdte van de meting: hoe lang liep de opname, welke handelingen deed ik, in welke toestemmingsmodus, hoe ver klikte ik door. Een bevinding is pas gemeten binnen die grenzen. Alles buiten die grenzen blijft onbekend. Een ingelogde, doorgeklikte meting is daarmee rijker dan een snelle cold-start, omdat ze de wachtende techniek de kans geeft zich te tonen. En pas als die kans er was, betekent een lege lijst iets.
Session-recording legt je scherm-interactie vast, en maskering moet je bewijzen
Session-replay-tools nemen je tik-, scroll- en invoergedrag op alsof iemand meekijkt. De maskering van gevoelige velden is meestal view-gebaseerd: ze werkt alleen als de juiste velden als gevoelig zijn gemarkeerd. Of het echt maskeert kun je niet aannemen; dat moet frame voor frame op de opname zelf worden geverifieerd. Een claim 'wij maskeren' zonder die verificatie is onbewezen.
Session-recording legt vast hoe je een pagina gebruikt. Je muisbewegingen, je kliks, wat je typt, hoe ver je scrolt. Bij elkaar is dat een reconstructie van je gedrag op het scherm, soms tot een bijna letterlijke opname van wat er te zien was. De tools die dit doen heten session-replay: producten van het type Hotjar, FullStory, Microsoft Clarity, of een eigen implementatie op basis van de open-source recorder rrweb.
Technisch werken die tools niet met video. Ze nemen de DOM op, dat is de structuur van de pagina zoals de browser die opbouwt, plus een stroom gebeurtenissen: op tijdstip t bewoog de muis hierheen, hier werd getikt, hier veranderde een invoerveld. Bij de eerste opname wordt de volledige pagina als momentopname vastgelegd, en daarna alleen nog de veranderingen. Die opzet is efficiënt en het maakt de heropvoering nauwkeurig, want elke muisbeweging en elke toetsaanslag zit erin. Precies die nauwkeurigheid is de reden dat gevoelige invoer mee kan komen als de maskering een veld overslaat. Bij het afspelen bouwt de speler de pagina opnieuw op uit die opnames. Het resultaat oogt als een video, maar het is een heropvoering van jouw sessie in de browser van de analist. Precies omdat het de DOM meeneemt, kan de inhoud van invoervelden in beeld komen.
Aanbieders zeggen dat gevoelige velden worden gemaskeerd. Een wachtwoord, een burgerservicenummer of een medische invoer zou dan niet meekomen in de opname. Dat klinkt geruststellend, en het is een instelling die goed moet staan om te werken.
De maskering is meestal view-gebaseerd. Ze werkt alleen als de juiste velden als gevoelig zijn gemarkeerd. In de praktijk gebeurt dat met een CSS-klasse of een attribuut op het element. Bij Hotjar is dat data-hj-suppress, bij FullStory fs-exclude of fs-mask, bij rrweb-achtige opzetten een klasse als rr-block of rr-mask. Ontbreekt die markering op een veld, dan wordt de inhoud gewoon opgenomen. De maskering vergeet niets uit zichzelf. Ze maskeert precies wat iemand vooraf heeft aangewezen, en niets daarbuiten.
Daarom behandel ik maskering als een claim die bewezen moet worden. Zolang niet is aangetoond dat ze werkt, is het een belofte. Een uitspraak "wij maskeren" zonder verificatie is onbewezen. Dat is geen wantrouwen tegen de aanbieder, het volgt uit hoe de techniek in elkaar zit.
Of maskering echt maskeert kun je niet aannemen. Het moet op de opname zelf worden geverifieerd, want daar staat wat er werkelijk is vastgelegd. Een instelling in een dashboard zegt wat de bedoeling was. De opname zegt wat er gebeurde. Die twee kunnen uiteenlopen als één veld de markering mist.
De verificatie kan aan de kant van de vastlegging beginnen. Session-replay-tools sturen de opgenomen DOM en gebeurtenissen als een payload naar hun eigen server. Die payload is te onderscheppen. Een ruwe aanpak:
# vang de opname-payload en zoek naar wat er in de velden stond
jq -r '.log.entries[]
| select(.request.url | test("hotjar|fullstory|clarity|rrweb"; "i"))
| .request.postData.text' capture.har > replay-payload.txt
# staat een testwaarde die je in een gevoelig veld typte er letterlijk in?
grep -F 'TESTGEHEIM123' replay-payload.txt
Vul ik een herkenbare testwaarde in een gevoelig veld en vind ik die letterlijk terug in de payload, dan is de maskering aantoonbaar lek. Dat is dan gemeten. De payload is versleuteld op transport, dus het onderscheppen vraagt een proxy die het verkeer tussen browser en aanbieder openbreekt. Voor een eigen test op mijn eigen invoer is dat legitiem en voldoende. Ik werk met een vaste, onmiskenbare testreeks, zodat een treffer geen toeval kan zijn en een misser echt op afwezigheid wijst. Vind ik hem niet, dan is de maskering op dat veld in dat geval geslaagd, ook gemeten, maar alleen voor dat veld en die pagina. Eén schoon veld bewijst niet dat alle velden schoon zijn. De volledige controle vraagt dat je elk gevoelig veld nagaat, want de markering kan per veld ontbreken.
Op een gewone pagina is een schermopname al indringend. Iemand kijkt mee over je schouder terwijl je een winkel doorloopt. Op een pagina waar je persoonlijke of medische gegevens invult, wordt het risico veel groter. Daar raakt een verkeerd afgestelde maskering precies de gegevens die niemand hoort te zien.
De AVG verzwaart dat oordeel. Gezondheidsgegevens vallen onder de bijzondere categorieën van artikel 9, met een verwerkingsverbod behoudens beperkte uitzonderingen. Voor het plaatsen van de opname-scripts op je apparaat geldt bovendien artikel 11.7a van de Telecommunicatiewet, dat toestemming vraagt voor het lezen en schrijven van gegevens op randapparatuur. Een session-replay-tool die op een medisch formulier meekijkt, combineert dus twee zware verplichtingen: de toestemming voor de opname zelf en de bescherming van de gevoelige inhoud die erin terecht kan komen. Als de maskering daar faalt, faalt ze op het gevoeligste moment.
Gewone analytics telt gebeurtenissen. Een pagina bekeken, een knop ingedrukt, een formulier verzonden. Dat levert aantallen op. Session-recording levert een reconstructie op van één specifieke sessie, met de volgorde, de aarzeling, de terugklik en de inhoud van velden. Het verschil is de mate waarin een individu herkenbaar wordt.
Dat verschil telt voor de AVG. Een reconstructie van iemands scherm kan persoonsgegevens bevatten, ook als de tool geen naam kent, want het gedrag zelf is identificerend genoeg om een persoon te onderscheiden. Bij een medisch of persoonlijk formulier komt daar de inhoud van de velden bovenop. De verwerking verschuift daarmee van tellen naar het vastleggen van individueel, deels gevoelig gedrag. De grondslag onder artikel 6 moet passen bij die zwaardere verwerking, en bij gevoelige inhoud komt de drempel van artikel 9 in zicht. Dat is een afgeleide juridische weging, en ze verklaart waarom ik session-recording strenger toets dan een teller.
Ik neem "wij maskeren" nooit op gezag aan. Ik behandel het als iets dat je moet bewijzen op de opname zelf. In mijn scans noteer ik de aanwezigheid van een session-replay-tool als gemeten, en het al dan niet maskeren als open tot ik het frame voor frame heb gecontroleerd. Zolang die controle ontbreekt, is het risico reëel en de geruststelling leeg.
Real-time bidding biedt jouw toestel in een veiling aan, in milliseconden
Bij real-time bidding stuurt een app een biedverzoek met kenmerken van je toestel en context (device-identifier, grofweg locatie, app, soms afgeleide interesses) naar een advertentie-uitwisseling. Tientallen partijen zien die request en bieden om jou een advertentie te tonen. Het punt is: de request zelf verspreidt je kenmerken naar alle deelnemers, ook de verliezers. Een advertentieplek is dus tientallen partijen die je profiel te zien kregen.
Je opent een app of een pagina. Voordat er iets op je scherm staat, meldt de uitgever dat er advertentieruimte vrij is. Dat bericht gaat naar een veilingplatform, een ad exchange, dat het in een fractie van een seconde doorstuurt naar tientallen partijen die mogen bieden. De hoogste bieder wint, de advertentie laadt. Het hele proces duurt ongeveer honderd milliseconden.
Die honderd milliseconden zijn geen toevallig getal. Ze staan in het biedverzoek zelf. Het protocol dat de meeste van deze veilingen aanstuurt heet OpenRTB, een open standaard van het IAB Tech Lab. In een OpenRTB-biedverzoek zit een veld tmax: de maximale tijd in milliseconden waarbinnen een bieder mag antwoorden. Wie te laat is, doet niet mee. De veiling is zo krap getimed omdat ze moet passen binnen de tijd die het laden van een pagina toch al kost.
Het biedverzoek is een JSON-object. Het bevat veel meer dan de mededeling dat er een plek vrij is. Een sterk versimpeld voorbeeld, in de vorm die het protocol voorschrijft:
Elk veld is een stukje van jou. ifa is je reclame-identifier, het toestelnummer dat adverteerders mogen gebruiken. geo is een geschatte locatie, soms uit je IP-adres afgeleid, soms nauwkeuriger. device beschrijft je toestel tot op het model. app.bundle verklapt in welke app je zit, en dus vaak iets over je situatie. user.buyeruid is de identifier die een koper eerder aan jou heeft gekoppeld. Dat de standaard deze velden kent, is gemeten: de OpenRTB-specificatie is openbaar en de veldnamen liggen vast. Welke velden een concrete app invult, is per app afgeleid uit het echte biedverkeer.
Hier zit de kern die de meeste mensen niet zien. Het biedverzoek wordt niet naar één koper gestuurd. Het wordt uitgezonden naar iedere partij die op dat veilingplatform mag meebieden. Tientallen bedrijven ontvangen dus dezelfde JSON met jouw kenmerken erin. Precies één van hen wint. De rest verliest de veiling en houdt de data.
Een partij hoeft de plek niet te winnen om je gegevens te ontvangen. Meebieden mogen is genoeg. Verliezen kost niets en levert wel een compleet profielsignaal op: identifier, grove locatie, toestel, app, tijdstip. Dat is de reden dat deze markt zo aantrekkelijk is voor bedrijven die in gegevens handelen. Ze kunnen structureel biedingen uitbrengen die net te laag zijn om te winnen, en toch de hele stroom binnenhalen. Dat gedrag heeft in de sector een naam: bid stream data harvesting. Dat het technisch mogelijk is, volgt rechtstreeks uit hoe het protocol uitzendt, en is dus afgeleid. Hoe vaak een specifieke partij het doet, is zonder inzage in hun systemen vermoed.
Eén advertentieplek op je scherm staat dus gelijk aan tientallen partijen die je profiel te zien kregen. Dat is een andere rekensom dan wat een privacyverklaring suggereert, waar één plek meestal klinkt als één adverteerder.
Onder de AVG is een reclame-identifier een persoonsgegeven, want hij maakt je herkenbaar. Het uitzenden van dat gegeven naar tientallen ontvangers is een verwerking, en elke ontvanger is een eigen verwerkingsverantwoordelijke of ontvanger in de zin van de wet. De rechtsgrond voor die verspreiding is vrijwel altijd toestemming, geregeld via het IAB TCF, het Transparency and Consent Framework. Dat framework codeert jouw keuzes in een consent string die met het biedverzoek meereist.
Het probleem is dat de toestemming die je geeft, zelden dekt wat er feitelijk gebeurt. Je stemt in met een lijst partners die je op een muur te zien kreeg, terwijl de biedstroom naar meer partijen gaat dan op die muur stond. Dat verschil werk ik uit in De cookiemuur toont minder partners dan de code telt. En de keten achter de exchange, de doorverkopers en tussenpartijen, staat helemaal niet in enige verklaring, zoals ik laat zien in De advertentieketen heeft schakels die niemand in de verklaring noemt. De Belgische toezichthouder heeft in 2022 geoordeeld dat het TCF zoals het toen werkte in strijd was met de AVG, onder meer omdat de consent string zelf een persoonsgegeven is dat zonder geldige grond werd verspreid. Dat oordeel is gemeten feit, openbaar gepubliceerd.
Ik meet dit door het echte netwerkverkeer van een app of site vast te leggen en de biedverzoeken eruit te vissen. Een biedverzoek herken je aan de structuur: een POST naar een exchange-endpoint met een JSON-body die de OpenRTB-velden draagt. In een opgeslagen HAR-bestand of een onderschepte stroom filter ik op de veldnamen die de standaard voorschrijft.
import json, glob
VELDEN = {"imp", "device", "at", "tmax"} # OpenRTB-signatuur
for pad in glob.glob("verkeer/*.json"):
body = json.load(open(pad))
if VELDEN.issubset(body.keys()):
dev = body.get("device", {})
print(pad, "->", dev.get("ifa"), dev.get("geo"))
Dit vertelt me twee dingen. Ten eerste of de app überhaupt aan real-time bidding doet. Ten tweede welke van mijn kenmerken de veiling in gaan. Wat het niet vertelt, is wie er allemaal aan de andere kant meeluistert. Dat zie ik niet, want de uitzending gebeurt op het veilingplatform, buiten mijn zicht. Ik kan wel het vertrek meten, ik kan de volledige ontvangerslijst niet meten. Die grens benoem ik expliciet, in lijn met Label elke bevinding op bewijsniveau. De techniek van het lezen zelf beschrijf ik in Netwerkverkeer lezen via HAR-files.
De veilingmetafoor is eerlijker dan het woord "advertentie" doet vermoeden. Bij een advertentie denk je aan één boodschap van één merk. Bij een veiling wordt je toestel als kavel aangeboden aan een zaal vol partijen, en de zaal ziet de kavelbeschrijving voordat er geboden wordt. Dat de verliezers je gegevens houden, is het detail dat het systeem kantelt van reclame naar datahandel. Ik vind dat je dat detail hard mag maken voordat je er een oordeel aan hangt. Daarom meet ik het vertrek nauwkeurig en houd ik me in over de ontvangst, waar ik geen zicht op heb. Het mechanisme staat vast. De omvang bij een concrete app is een aparte meting, elke keer opnieuw.
Een biedstroom kan een veiling ingaan waar buitenlandse partijen op meebieden
Een Nederlandse app kan zijn biedstroom insturen bij een uitwisseling waar partijen uit andere jurisdicties op meebieden. De data vertrekt dan niet naar een bekende bestemming, maar naar een veilinghuis dat het verder verspreidt. Daarom is 'waar staat de server' bij RTB de verkeerde vraag; de juiste is 'wie mag meekijken in de veiling', en dat is een veel bredere en internationalere groep dan de app zelf noemt.
Bij real-time bidding stuurt een app of site een biedverzoek de markt op. In de OpenRTB-standaard heet dat een BidRequest. Dat object is geen kale advertentieplek. Het draagt een profiel van je toestel mee. In het device-object staan je model, je besturingssysteem, je taal, je user agent en je ifa, de identifier for advertisers. In het geo-object staat je locatie, soms tot op stads- of coördinaatniveau. In het user-object kunnen eerder opgebouwde segmenten zitten. Dit is de lading die de veiling in gaat, elke keer dat een advertentieplek geladen wordt.
Het profiel is dus specifieker dan de meeste mensen vermoeden. Een resetbare reclame-ID lijkt onschuldig, maar hij correleert met de rest en werkt in de praktijk als een sleutel. Zie Een resetbare identifier is alsnog een sleutel.
Belangrijk is dat dit profiel vertrekt voordat er een advertentie te zien is. De volgorde in RTB is omgekeerd aan wat je zou verwachten. Eerst gaat je profiel de markt op. Dan bieden partijen. Dan pas wordt beslist wat je te zien krijgt. De data reist dus altijd, ook bij de biedingen die verliezen. Een verliezende bieder heeft je profiel evengoed ontvangen en kan het bewaren. Dat is de kern van waarom RTB zoveel meer verspreiding geeft dan het tonen van één advertentie doet vermoeden. Het aantal partijen dat je profiel ziet, staat los van het aantal advertenties dat je te zien krijgt.
Het beslissende punt is dat de veiling zich vertakt. Een exchange stuurt hetzelfde biedverzoek naar veel demand-partijen tegelijk. Dat is het hele idee van de veiling. Wie het hoogst biedt, wint de plek. Om dat te laten werken moet het verzoek eerst breed rondgaan. Bij een header-bidding-opstelling gaat het verzoek zelfs naar meerdere exchanges parallel, die het elk weer verder verspreiden.
De partijen die mogen meebieden staan niet vast op Nederland of Europa. Een sellers.json van een grote exchange somt honderden tot duizenden aangesloten verkopers op, verspreid over de hele wereld. De ads.txt van een uitgever noemt de partijen die namens hem mogen verkopen. Wie die twee naast elkaar legt, ziet dat een enkele advertentieplek de toegang opent tot een internationale markt. Dat je toestel in dezelfde veiling belandt als dat van iemand met een heel andere app is geen uitzondering. Zie Onverwante apps sturen je profiel dezelfde veiling in.
Er komt nog een laag bovenop, want een exchange kan een biedverzoek doorverkopen aan een andere exchange. Dat heet reselling. De transparantiestandaarden ads.txt en sellers.json zijn er juist gekomen om die keten zichtbaar te maken. In de praktijk lopen de ketens diep. Een uitgever autoriseert een exchange, die exchange autoriseert weer andere verkopers, en zo waaiert één advertentieplek uit tot een boom van deelnemers. Elke tak in die boom is een partij die het biedverzoek te zien kan krijgen. De uitgever aan de wortel overziet die boom zelden volledig.
Zodra het biedverzoek partijen buiten de EER bereikt, is er sprake van doorgifte naar een derde land. Hoofdstuk V van de AVG, de artikelen 44 tot en met 49, stelt daar eisen aan. Er moet een geldige grondslag voor de doorgifte zijn, en de ontvanger moet een beschermingsniveau bieden dat in de kern gelijkwaardig is aan dat van de EU. Het Real-time bidding biedt jouw toestel in een veiling aan, in milliseconden-mechanisme past hier slecht in. De data vertrekt niet naar één bekende bestemming waarmee je een verwerkersovereenkomst kunt sluiten. Ze wordt aangeboden aan een groep die per veiling wisselt en die de uitgever zelf vaak niet volledig kent.
Daarom is "waar staat de server" bij RTB de verkeerde vraag. De server van de app kan in Amsterdam staan. Dat zegt niets over waar het biedverzoek daarna heen gaat. De juiste vraag is wie er mag meekijken in de veiling. Dat is een bredere en internationalere groep dan de app in zijn privacyverklaring noemt. En het raakt aan een tweede kwestie, want fysieke locatie en zeggenschap zijn twee losse dingen. Zie Waar het pakket landt en wie het kan vorderen zijn twee assen.
Ik meet dit uit het biedverzoek zelf en uit de publieke bestanden eromheen. In een BidRequest en in de aangesloten sellers.json en ads.txt zie ik welke partijen mogen deelnemen. Dat is een harde, controleerbare waarneming. Bewijsniveau: gemeten.
De procedure is redelijk mechanisch. Ik neem de aangesloten sellers.json en ads.txt, ik trek de deelnemende domeinen eruit, en ik zoek per domein op onder welke jurisdictie de partij valt. Grofweg:
sellers = load_json("sellers.json")["sellers"]
buitenlands = [
s for s in sellers
if jurisdictie(s["domain"]) not in EER_LANDEN
]
# buitenlands is de ondergrens van meekijkende niet-EER-partijen
Wat er daarna tussen servers gebeurt, valt buiten mijn meting. Een exchange kan een verzoek doorverkopen aan een andere exchange. Een winnende bieder kan het profiel intern delen of doorverkopen. Dat zie ik niet vanaf de buitenkant. Daarom is elk getal dat ik noem een ondergrens. Het aantal buitenlandse partijen dat ik aantref, is het minimum dat kan meekijken, niet het totaal. Ik label mijn bevindingen dan ook expliciet op dat niveau. Zie Label elke bevinding op bewijsniveau.
De jurisdictie van een partij is trouwens zelf twee vragen, want waar een server staat en onder welk recht een bedrijf valt zijn losse dingen. Ik houd die twee apart, anders wordt de ondergrens een rommelig getal. Zie Waar het pakket landt en wie het kan vorderen zijn twee assen.
Voor mijn onderzoek betekent dit dat ik de vraag verschuif. Ik stop met vragen waar een app zijn data heen stuurt en begin met vragen wie er in de veiling mag. Dat is een bredere lens en hij levert een eerlijker beeld op. Het dwingt me ook tot bescheidenheid over de cijfers. Ik rapporteer wat ik in het biedverzoek en de publieke bestanden vind, ik label het als ondergrens, en ik dicht de gaten niet met aannames.
De uitkomst is ongemakkelijk maar simpel. Een Nederlandse app met een nette privacyverklaring kan je toestelprofiel elke seconde de wereld over sturen, langs een veiling waarvan de deelnemerslijst per keer verandert. Dat is de structuur van de markt, niet een incident bij één aanbieder.
Het praktische gevolg voor een privacyverklaring is streng. Een verklaring die stelt dat gegevens binnen de EU blijven, is bij een actieve RTB-integratie moeilijk waar te maken, tenzij de deelnemers aantoonbaar tot de EER beperkt zijn. Dat kan technisch, met een besloten opstelling en een gecontroleerde deelnemerslijst, maar het is dan een keuze die je in de configuratie ziet. Waar ik een open exchange met een wereldwijdesellers.json aantref, weegt de belofte van EU-beperking niet op tegen de gemeten breedte van de veiling. De code wint van de verklaring, zoals altijd.
De advertentieketen heeft schakels die niemand in de verklaring noemt
Tussen een app en 'een advertentie' zit een keten: een SSP in de app, een uitwisseling die de veiling houdt, en bidders die namens adverteerders bieden. Elke schakel is een aparte partij die data aanraakt. Verantwoordingsdocumenten noemen zelden de hele keten; wie alleen de eerste stap meet, ziet het topje. Uitpluizen wie er echt achter de biedstroom zit, is een eigen onderzoeksstap.
Tussen de app die je opent en de advertentie die verschijnt, zitten meer partijen dan er ooit in een privacyverklaring staan. De keten heeft een vaste vorm. In de app zit een SSP, een supply-side platform, dat de advertentieplek te koop aanbiedt. Die plek gaat naar een of meer exchanges, de beurzen die de veiling houden. Aan de andere kant staan bidders, ook wel DSP's genoemd, die namens adverteerders bieden. En daartussen zitten vaak nog resellers, tussenpartijen die dezelfde plek doorverkopen aan andere beurzen.
Elke schakel is een aparte partij die je data aanraakt. De SSP stelt het biedverzoek samen met je toestelkenmerken erin. De exchange zendt het uit naar de bieders. Elke reseller die de plek doorzet, ziet de stroom passeren. De verklaring van de app noemt er een paar. De keten telt er meer. Wie alleen de eerste stap meet, ziet het topje.
Er zijn twee nuchtere redenen, en geen ervan hoeft kwade opzet te zijn. De eerste is dat de uitgever zijn eigen keten vaak niet volledig kent. Hij sluit een contract met één SSP en die SSP regelt de rest. Wat er achter de eerste beurs gebeurt, ligt buiten zijn zicht en buiten zijn invloed. De tweede reden is dat het er domweg te veel zijn om op te sommen. Een plek kan via tien routes tegelijk worden aangeboden, en elke route heeft een eigen staart van doorverkopers.
Die onoverzichtelijkheid is een kenmerk van de markt, geen incident. Hoe langer de keten, hoe moeilijker het is om vast te stellen wie precies wat met je gegevens doet. Dat is juridisch een probleem, want de AVG eist dat een verwerkingsverantwoordelijke kan aantonen aan wie hij gegevens doorgeeft. Een keten die zichzelf niet kent, kan die verantwoording niet leveren.
Er speelt nog iets. Dezelfde plek wordt vaak via meerdere routes tegelijk aangeboden, een praktijk die supply path optimization heet. Een adverteerder ziet dan hetzelfde biedverzoek langs drie of vier paden binnenkomen en kiest de goedkoopste. Voor jou betekent het dat je kenmerken langs elk van die paden lopen, met bij elke stap een extra partij die de stroom aanraakt. De keten vertakt zich dus, en de vertakkingen staan nergens in een verklaring omdat de uitgever ze zelf niet aanstuurt. Het is de SSP die bepaalt via welke beurzen hij verkoopt, en de beurs die bepaalt aan welke resellers hij doorzet.
Het mooie is dat de sector zichzelf een paar openbare bestanden heeft opgelegd, juist om fraude in de keten tegen te gaan. Ik gebruik die bestanden om de keten terug te lopen. Ze zijn niet bedoeld voor privacyonderzoek, en ze zijn er wel bruikbaar voor.
ads.txt en zijn mobiele variant app-ads.txt. Een tekstbestand dat een uitgever op zijn eigen domein zet. Elke regel verklaart een verkooprelatie: welke beurs mag deze uitgever verkopen, onder welk account-id, en of dat rechtstreeks is (DIRECT) of via een doorverkoper (RESELLER).
sellers.json. Een bestand dat elke beurs zelf publiceert. Het koppelt de account-id's uit ads.txt aan echte bedrijfsnamen en domeinen, en het zegt of een verkoper een uitgever is (PUBLISHER), een tussenpartij (INTERMEDIARY) of allebei (BOTH).
De supply chain-object, schain, in het OpenRTB-biedverzoek zelf. Dat is een lijst van knopen die de route beschrijft die het biedverzoek al heeft afgelegd. Elke knoop draagt een asi (het advertentiesysteem) en een sid (de verkoper-id op dat systeem).
De eerste regel is een rechtstreekse verkoop, de tweede loopt via een doorverkoper. Dat woord RESELLER is het spoor. Het zegt dat er achter deze beurs nog een schakel zit.
Ik begin bij het biedverkeer dat ik heb vastgelegd, en ik trek de keten omhoog via de openbare bestanden. De procedure is stug maar simpel:
1. Uit het biedverzoek haal ik welke exchanges de plek aanboden, en indien aanwezig het schain-object met de route.
2. Ik haal het app-ads.txt van de uitgever op en lees welke beurzen en resellers hij declareert.
3. Voor elke beurs haal ik het sellers.json op en zoek de account-id op, zodat ik de echte bedrijfsnaam achter een id te pakken krijg.
4. Waar een regel RESELLER zegt, herhaal ik de stap voor die doorverkoper. Zo klim ik schakel voor schakel omhoog.
Een fragment dat de resellers uit een ads.txt-bestand vist:
import requests
tekst = requests.get("https://voorbeeld.app/app-ads.txt").text
resellers = []
for regel in tekst.splitlines():
regel = regel.split("#")[0].strip() # commentaar weg
if not regel:
continue
velden = [v.strip() for v in regel.split(",")]
if len(velden) >= 3 and velden[2].upper() == "RESELLER":
resellers.append((velden[0], velden[1])) # (beursdomein, account-id)
for beurs, acct in resellers:
print("doorverkoop via", beurs, "onder account", acct)
Elke regel die dit oplevert, is een partij die de nette samenvatting van de app niet noemt. Door de sellers.json van elke beurs erbij te pakken, zet ik de account-id's om in namen, en dan heb ik een lijst van bedrijven die in de keten zitten zonder ergens in een verklaring te staan. Het is precies dat verschil, tussen wat wordt genoemd en wat er werkelijk in de keten zit, waar de bevinding ligt.
Uitpluizen wie er echt achter de biedstroom zit, is een eigen onderzoeksstap, los van het meten van de app zelf. De meeste rapporten slaan die stap over, want hij is bewerkelijk en hij vraagt geduld. Juist daarom levert hij iets op wat een gewone scan niet heeft: een naam en een land achter een account-id dat verder nergens opduikt. Dat een biedstroom een buitenlandse veiling in kan lopen, werk ik uit in Een biedstroom kan een veiling ingaan waar buitenlandse partijen op meebieden, en dat begint precies bij het terugvinden van deze schakels. De veiling zelf, het moment waarop de stroom uitwaaiert, staat in Real-time bidding biedt jouw toestel in een veiling aan, in milliseconden. De les is telkens dezelfde. De nette samenvatting toont het topje. De openbare registers laten de rest van de ijsberg zien, als je de moeite neemt ze te lezen.
Beargumenteer eerst het tegendeel van je eigen bevinding
Verontwaardiging is pas geloofwaardig als je actief geprobeerd hebt jezelf ongelijk te geven. Voor elke bevinding beargumenteer ik eerst het tegendeel, en geef ik de onderzochte partij het sterkste tegenargument. Wat die ronde overleeft, staat pas echt.
Voordat ik een bevinding opschrijf, probeer ik haar eerst onderuit te halen. Niet oppervlakkig, maar met het beste argument dat de onderzochte partij zou kunnen aanvoeren als ze een goede advocaat had.
Er is een praktische reden en een diepere reden, en de diepere is de belangrijkste.
De praktische: als ik het tegenargument niet zelf bedenk, bedenkt de tegenpartij het, en dan sta ik met een verhaal dat in één zin onderuit gaat. Alles wat ik publiceer wordt gelezen door mensen met een belang bij mijn ongelijk. Die zoeken precies de zwakste schakel.
De diepere: zonder deze stap vind ik altijd wat ik zoek. Ik kijk naar datasets met duizenden verzoeken en honderden partijen. Daar zit altijd een patroon in dat mijn verhaal ondersteunt, en het zal narekenbaar zijn ook. De vondst zegt dan iets over mijn zoeken, niet over de wereld.
Het tegendeel beargumenteren is het enige gereedschap dat ik ken dat daartegen beschermt. Niet omdat het feilloos is, maar omdat het me dwingt om te formuleren wat er waar zou moeten zijn als ik ongelijk had, en om te kijken of dat er ook is.
Wat is de onschuldige verklaring? Een verzoek naar een advertentiedomein kan een cachebestand zijn, een lettertype, een fout in mijn eigen opzet. Kan ik die uitsluiten?
Wat zou de organisatie zeggen? Meestal iets als: dat script laadt wel maar vuurt niets af, of die identifier is niet aan een persoon te koppelen. Kan ik dat weerleggen met wat ik heb gemeten, of alleen met wat ik vermoed?
Is mijn meting geldig? Heb ik geweigerd zoals een gewone bezoeker, heb ik lang genoeg gewacht, heb ik het herhaald op een schone opzet, komt het er twee keer uit?
Draagt de meting de conclusie? Dit is de vraag waar de meeste bevindingen sneuvelen. Ik zie een verzoek, dus ik weet dat er iets is verstuurd. Ik weet daarmee nog niet wie het las of wat ermee gebeurde.
Het meeste van wat ik vind, haalt de publicatie niet. Dat voelt als verlies en is het niet.
Wat overblijft, staat. In de jaren dat ik dit doe is geen enkele gepubliceerde bevinding onderuitgegaan op de inhoud. Dat is geen kwestie van geluk maar van het feit dat de zwakke bevindingen al waren gesneuveld voordat iemand ze kon aanvallen.
En er zit een tweede opbrengst in die ik niet had verwacht. Doordat ik de organisatie het sterkste tegenargument geef, is het gesprek met die organisatie anders. Ze merken dat het niet gaat om betrapt worden maar om vaststellen wat er is. Dat opent meer deuren dan verontwaardiging.
Het beschermt niet tegen een fout in het kader zelf. Als ik verkeerd aanneem wat een bepaalde parameter betekent, zal ik het tegendeel beargumenteren binnen datzelfde verkeerde kader en netjes uitkomen bij mijn eigen conclusie. Daar helpt alleen iemand anders die er met andere ogen naar kijkt.
En het kan doorslaan. Wie alles onderuit haalt, publiceert nooit meer iets, en dan verandert er ook niets. Het doel is niet zekerheid, want die bestaat niet in dit werk. Het doel is dat de claim precies zo sterk is als het bewijs, en geen millimeter sterker.
Splits je conclusie vooraf in delen, want een weerlegging pakt altijd het smalste deel
Een conclusie bestaat vaak uit twee beweringen die aan elkaar zijn geplakt, met verschillende bewijskracht. Een tegenpartij weerlegt dan het zwakst onderbouwde deel en presenteert dat als weerlegging van het geheel. Formuleer daarom elke conclusie als losse helften, elk met een eigen bewijsniveau en een eigen bron. Het beschermt ook tegen jezelf: wie zijn hardste deelbevinding vooropstelt, geeft de bredere en zwaarder wegende bevinding weg.
Een conclusie bestaat zelden uit één bewering. Meestal zijn het er twee, aan elkaar geplakt met een komma of een en, en met heel verschillende bewijskracht.
Een tegenpartij leest zo'n zin anders dan jij hem schreef. Zij zoekt het smalste, hardst controleerbare deel, weerlegt dat, en presenteert de weerlegging als antwoord op het geheel. Dat werkt, want de lezer heeft de zin als één geheel onthouden.
Het vervelende is dat het meestal geen kwade trouw is. De ander leest gewoon selectief, zoals iedereen doet die zich verdedigt.
Schrijf de conclusie als losse helften, met per helft een eigen bewijsniveau en een eigen bron. Niet in de voetnoot, maar in de lopende tekst, zodat de opsplitsing zichtbaar is voordat iemand anders hem maakt.
In de praktijk ziet dat er zo uit. Eerste helft: dit is gemeten, hier is de opname, hardheid hoog. Tweede helft: dit is daaruit afgeleid, hier is de redenering, hardheid gemiddeld. En dan expliciet: valt de tweede helft weg, dan blijft de eerste staan.
Die laatste zin is het hele punt. Hij maakt vooraf duidelijk wat er overblijft na een geslaagd verweer, en haalt daarmee de winst uit een gedeeltelijke weerlegging.
Er is een tweede reden, en die is oncomfortabeler.
Wie zijn hardste deelbevinding vooropzet omdat die het sterkste bewijs heeft, geeft daarmee vaak de belangrijkste bevinding weg. Het hardst bewijsbare is namelijk zelden het zwaarst wegende. Een configuratieregel is keihard en klein. Een structureel patroon over honderden sites is zwaarder en zachter.
Een verwijzing naar het meldpunt is geen zwijgplicht
Organisaties verwijzen een onderzoeker graag naar hun responsible-disclosure-kanaal, ook als er geen kwetsbaarheid in het spel is. Het verschil is scherp: binnendringen in andermans systeem is een beveiligingsvraag, meten wat je eigen apparaat met je eigen gegevens doet is dat niet. Voor het tweede geldt geen besloten meldroute en geen wachttermijn. Benoem dat onderscheid in het stuk zelf, want het verwijt van onzorgvuldig melden komt anders terug als frame.
gepubliceerdnotitiezekerOverheid, toezicht en de wetbronnenverwant
Een grote organisatie kan een fout erkennen en zichzelf melden
Niet elke reactie is afwerend. De Belastingdienst accepteerde de hulp, reageerde adequaat, en meldde de zaak zelf bij de toezichthouder. Dat een grote organisatie een fout erkent en aanpakt, kan dus.
Niet elke organisatie reageert met een advocaat. De Belastingdienst deed het omgekeerde: op 12 juni deed de dienst uit eigen beweging een datalekmelding bij de AP (2026Z12920). Melden hoefde niet afgedwongen te worden. Dat gebeurde uit zichzelf.
"Ik ben dankbaar dat deze ethisch hacker de Belastingdienst hierop heeft gewezen." Staatssecretaris Eerenberg bedankte de melder met zoveel woorden, in plaats van de boodschapper aan te vallen. Dat is zeldzaam genoeg om te benoemen.
"Het gebruik van Adobe Analytics was niet in lijn met de geldende ePrivacy-regels en de Algemene verordening gegevensbescherming." Geen ontkenning, geen mist. En de afronding: "Dit dossier eindigt zoals een dossier hoort te eindigen: gemeten, gemeld, gestopt en erkend."
De tracker ging op 6 juni uit, geverifieerd. De les is dat een gemeten schending niet in een loopgraaf hoeft te eindigen. Meten, melden, stoppen en erkennen is een keten die werkt als de organisatie meewerkt. Het contrast met partijen die jarenlang doorgaan en pas reactief opruimen, is het hele punt.
Op 25 juni 2026 beantwoordde staatssecretaris Eerenberg van Financiën de Kamervragen over de Adobe-tracker in de betaalomgeving van de Belastingdienst. De kern van dat antwoord staat er zonder omhaal:
Het gebruik van Adobe Analytics was niet in lijn met de geldende ePrivacy-regels en de Algemene verordening gegevensbescherming.
Daarmee is de cirkel rond. Op 2 juni publiceerde ik wat er feitelijk over de lijn ging toen ik, ingelogd met mijn eigen DigiD, een aanslag wilde betalen: een handeling-voor-handeling verslag naar Adobe in de Verenigde Staten, met een herkenningsnummer van twee jaar eraan vast. Vier weken later is de tracker uit, is het datalek door de dienst zelf bij de Autoriteit Persoonsgegevens gemeld, is de schending door het kabinet erkend, en ben ik als melder bedankt en beloond.
Dit dossier eindigt zoals een dossier hoort te eindigen: gemeten, gemeld, gestopt en erkend.
De tijdlijn: van meting tot erkenning in vier weken
Datum
Wat er gebeurde
30 mei en 1 juni
Metingen in mijn eigen betaalomgeving, vastgelegd met de antwoorden van de servers erbij
2 juni
Publicatie van het dossier met de letterlijke velden uit mijn sessie
3 juni
JA21-Kamerlid Van den Berg stelt twaalf schriftelijke vragen (2026Z11812) aan de staatssecretarissen van Financiën en van Economische Zaken en Klimaat
6 juni
De Belastingdienst laat weten dat de Adobe-meting is uitgezet; mijn eigen nulmeting bevestigt dat
10 juni
De uitschakeling wordt publiek; NRC, Tweakers en Security.NL berichten erover
12 juni
Kamerbrief (2026Z12920): de dienst heeft uit eigen beweging een datalekmelding gedaan bij de Autoriteit Persoonsgegevens
25 juni
Antwoorden op de Kamervragen: het gebruik was in strijd met de ePrivacy-regels en de AVG
26 t/m 29 juni
Tweede persgolf, van Security.NL tot iBestuur en de fiscale vakpers
Die twaalf Kamervragen verdienen een eigen alinea, want ze zijn het resultaat van een directe samenwerking met JA21-Kamerlid Daniël van den Berg. Ik leverde de meting en de technische onderbouwing, hij vertaalde die naar precieze, goed getimede vragen en tilde het debat daarmee een niveau hoger in de Kamer. Vraag voor vraag zat er techniek onder: van de ECID-cookie en de verhulde DNS-omleiding tot de rolverdeling tussen verwerkingsverantwoordelijke en verwerker. Die combinatie van meetwerk en politiek vakmanschap is de reden dat dit dossier in vier weken van bevinding naar erkenning ging.
Wat de staatssecretaris erkent
De antwoorden op de Kamervragen bevestigen de bevinding op alle hoofdpunten, en voegen er een paar dingen aan toe die ik zelf niet kon vaststellen.
Ten eerste de rechtmatigheid. Het kabinet erkent dat de tracking in strijd was met de ePrivacy-regels en de AVG, en dat vooraf niet is beoordeeld of het verwerken van persoonsgegevens noodzakelijk was. Er lag geen afgeronde beoordeling onder een systeem dat meekeek met burgers in de meest verplichte omgeving die de overheid kent.
Ten tweede de reikwijdte. Vast staat dat in elk geval IP-adressen naar Adobe zijn verstuurd, naast de gedragsgegevens die ik documenteerde: de specifieke vordering, de geopende aanslag, de stap in de betaalfunnel. En er blijft een onbekende rest: wat gebruikers hebben ingetypt in vrije tekstvelden en zoekfuncties is achteraf niet meer volledig te reconstrueren. Die onzekerheid is precies waarom dit als datalek is gemeld.
Ten derde de voorwaarden voor de toekomst. De verwerking is gestopt en wordt pas hervat als de rechtmatigheid en proportionaliteit zijn beoordeeld en geborgd, met eerst een DPIA en sluitende verwerkersafspraken.
Mijn eigen meetnuance blijft daarbij overeind staan, want daar hecht ik aan: het bedrag, het BSN, het IBAN en het betalingskenmerk gingen aantoonbaar niet mee. Wat wegvloeide was je gedrag eromheen, gekoppeld aan een nummer dat twee jaar blijft staan. De erkenning gaat over precies dat.
De dienst meldde zichzelf
Het opvallendste aan deze afloop is de volgorde. De Autoriteit Persoonsgegevens hoefde er niet aan te pas te komen om dit boven water te krijgen: de Belastingdienst deed uit eigen beweging een datalekmelding bij de toezichthouder, en de staatssecretaris informeerde de Kamer daar zelf over.
In diezelfde Kamerbrief richt de staatssecretaris zich rechtstreeks tot de melder:
Ik ben dankbaar dat deze ethisch hacker de Belastingdienst hierop heeft gewezen.
En het bleef niet bij woorden: voor de melding kreeg ik van de Belastingdienst een beker. Een echte, met het logo van de dienst in de lauwerkrans, een handdruk op de voorkant, en op het voetstuk een opschrift met gevoel voor humor: “I hacked the Dutch Tax Office and never got a refund”. Dat vermeld ik hier met plezier, omdat het laat zien hoe een overheidsdienst met een melder om kan gaan: serieus nemen, rechtzetten, en de boodschapper bedanken in plaats van hem als tegenstander te behandelen.
Wat de pers ervan maakte
De antwoorden van 25 juni leverden een tweede golf berichtgeving op, na de eerste golf rond de uitschakeling:
Security.NL en PrivacyNieuws: “Belastingdienst schond privacywetgeving”
iBestuur en Binnenlands Bestuur: “Belastingdienst schond AVG met gebruik van Adobe Analytics”
NieuwRechts: “Persoonsgegevens belastingbetalers doorgestuurd naar Amerikaans bedrijf”
De fiscale vakpers (Taxence, TaxLive): het gebruik is gestopt en het datalek gemeld
Alle vermeldingen staan gebundeld op de pers-pagina, met de links naar de originele publicaties en de Kamerstukken.
Waarom dit een succesverhaal is
Elk onderdeel van het stelsel deed waarvoor het bestaat. De meting bracht een verborgen datastroom aan het licht. De Kamer stelde er binnen een dag vragen over. De dienst zette de tracker binnen een week uit, controleerde niet alleen de betaalomgeving maar inventariseert soortgelijke tooling breder, en meldde zichzelf bij de toezichthouder. Het kabinet erkende de schending zwart op wit. En de melder werd bedankt.
Het verwijt over de oorspronkelijke situatie blijft staan: jarenlang kreeg een Amerikaans reclamebedrijf een klik-voor-klik verslag mee van burgers die hun belasting betaalden, zonder grondslag en zonder dat iemand dat vooraf had getoetst. Dat is en blijft de bevinding, en die staat volledig gedocumenteerd met de echte waarden uit mijn sessie.
Wat openstaat, benoem ik ook. De uitschakeling is formeel voorlopig: hervatting kan na een DPIA en verwerkersafspraken, en dat moment verdient een nieuwe meting. En de vraag wat er in de vrije tekstvelden richting Adobe is gegaan, blijft per definitie onbeantwoord. Zodra de betaalomgeving opnieuw gaat meten, meet ik mee.
Aan iedere onderzoeker die iets ziet: meld het
Dit is waar dit artikel eigenlijk om draait. Zit je als onderzoeker op een bevinding, bij de overheid of daarbuiten, en twijfel je of melden zin heeft: dit dossier is het antwoord. De Belastingdienst ging er van begin tot eind goed mee om. De melding werd serieus genomen, de tracker ging binnen dagen uit, de dienst meldde zichzelf bij de toezichthouder, de staatssecretaris bedankte de melder in een brief aan de Kamer, en er stond een prijs tegenover.
Zo bouw je vertrouwen tussen onderzoekers en overheid: de melder wordt behandeld als bondgenoot, en de volgende bevinding komt daardoor wéér binnen via de voordeur. Melden loont, voor jou, voor de dienst en voor iedereen wiens gegevens het betreft.
Dus doe die melding. Dit is hoe het hoort te gaan, van begin tot eind. Eind goed, al goed.
Niet bij benadering. Dit zijn de letterlijke velden met de echte waarden uit mijn eigen sessie, verstuurd naar adobe-analytics-dc.belastingdienst.nl. Die naam klinkt als de Belastingdienst, maar via een verhulde DNS-omleiding komt hij uit bij data.adobedc.net, oftewel Adobe Inc. in de Verenigde Staten.
Wat Adobe meekrijgt
Veld
Echte waarde uit mijn sessie
Een vast nummer dat je herkent
mid / v61
een 38-cijferige ECID, twee jaar geldig
Welke aanslag je bekijkt
c26 / v26
Inkomstenbelasting 2023
Welke betaalstatussen je openhebt
c28 / v34
open:true;incasso:false;afgehandeld:true
De specifieke vordering
c6 / v6
de detail-URL met de claim-identifier erin
Welk middel en welke actie
c9 / v9
Inkomstenbelasting · Betaal met iDEAL \| Wero
Welke betaalopties je krijgt
v37
iDEAL aangeboden, Wero aangeboden
Waar je in de betaalfunnel zit
v41
ideal;start;ih;#; (methode, stap, middel)
Welk tabblad actief is
c13 / v13
open
Je UI-voorkeur
c23 / v23
Thema: dark
Het moment dat je op betalen klikt
events
event30 (betaalstart), plus pageview en impression
Lees die tabel nog een keer, want hier zit het hele verhaal in.
Een advertentiebedrijf aan de andere kant van de oceaan krijgt geen anoniem tellertje dat zegt “er was een bezoeker”. Het krijgt een verslag, regel voor regel, van een burger die zijn inkomstenbelasting betaalt.
Welk jaar. Welke methode. Welke stap in de funnel. Het moment van de klik. En er bovenop een nummer waarmee al die regels aan dezelfde persoon vastzitten.
Ik heb niets aan deze lijst hoeven toe te voegen of te verzinnen. De vertaling van al die cryptische veldnamen (c28, v61, event30) naar wat ze betekenen staat gewoon in het Adobe-configuratiebestand dat de site zelf laadt. De Belastingdienst heeft dit zo ingericht, expliciet, en het staat in hun eigen code te lezen.
Stel je voor dat er iemand naast je staat terwijl je je belasting betaalt. Niet een ambtenaar van de Belastingdienst, maar een Amerikaans reclamebedrijf. En die iemand noteert alles: welke aanslag je openhebt, dat je voor iDEAL kiest, het seconde-precieze moment dat je op betalen klikt, en dat je je daarna bedenkt en annuleert. Bij elke notitie zet hij hetzelfde volgnummer, zodat hij je over twee jaar nog herkent, ook op heel andere websites.
Dat is geen beeldspraak en geen scenario. Dat is precies wat er gebeurt zodra je inlogt op Mijn Belastingdienst. Ik heb het van begin tot eind van mijn eigen scherm geplukt, ingelogd met mijn eigen DigiD, met de antwoorden van de servers erbij, en gehasht zodat het na te lopen is.
Wat daar vertrekt is geen bezoekersteller, maar een verslag van wat ik deed.
Dat ene nummer is het ergste
De bovenste regel is de gevaarlijkste, en daarom staat hij boven. Het veld mid en het veld v61 bevatten exact hetzelfde getal van 38 cijfers. Dat is de Experience Cloud ID, het vaste herkenningsnummer waarmee Adobe een persoon over zijn hele netwerk aan elkaar knoopt. Bij mij wordt dat nummer bewaard in een cookie s_ecid met een levensduur van 63072000 seconden. Reken het uit:
Die herkenning verdwijnt niet als je uitlogt, ze blijft twee jaar staan.
Dat verandert alles aan de tabel hierboven. Zonder dat nummer zou je nog kunnen zeggen: het is gedrag van een naamloze bezoeker. Mét dat nummer is het een dossier. Elke regel die je betaalt, elke aanslag die je opent, hangt aan dezelfde sleutel, twee jaar lang, en aan een sleutel die Adobe ook elders herkent.
En het wrange is dat het niet eens hoeft. De DigiD-inlog zelf, de stap ervoor, is wél netjes. Die meet via een eigen teller van Logius die in Nederland draait, zonder DNS-truc en zonder cookies, en die niet meer doorgeeft dan een paginanaam. Het kán dus gewoon. Zodra je de fiscale omgeving zelf binnenstapt, gaat het mis.
Wat er niet werd meegestuurd
Ik schrijf dit dossier het liefst zo dat het overeind blijft bij de scherpste tegenlezing, dus hier de ondergrens. Je bedrag gaat niet mee. Je BSN niet. Je IBAN niet. Je betalingskenmerk niet. Dat heb ik niet aangenomen maar gecontroleerd, door alle verzonden waarden af te zoeken. Het zijn niet de cijfers van je aanslag die het land uit gaan.
Wat het land uit gaat is je gedrag eromheen, gekoppeld aan een persoon. Dat klinkt zachter, maar dat is het niet. Een advertentienetwerk hoeft je bedrag niet te weten om te weten dat jij, deze specifieke persoon, op dit moment een belastingschuld aan het afbetalen bent via iDEAL en halverwege twijfelde.
Ook je twijfel is een gebeurtenis
De scherpste test was wat er gebeurt als je je bedenkt. Ik startte de betaling en annuleerde hem, en keerde terug in het portaal. Precies dat stuk, de terugkeer na het afbreken, ontbrak in al mijn eerdere opnames, want die stopten op de pagina van de bank.
Na het annuleren verandert in de antwoorden van de server precies één ding: de status van de claim springt van Nieuw naar Mislukt. De volledige woordenschat die de server kent is Nieuw, Succesvol, Mislukt en In afwachting bij bank. Onschuldig op zichzelf. Maar het afbreken van een betaling zit in dezelfde Adobe-funnel als de rest. Niet alleen dát je betaalt wordt geregistreerd, ook dat je het niet afmaakte.
Waarom dit niet te verdedigen valt
Het gebeurt zonder dat je iets gevraagd wordt. Er is geen toestemmingsscherm dat de Adobe-tracking aankondigt of laat weigeren. Het profiel en het herkenningsnummer vertrekken bij het laden van de pagina, voordat je ook maar iets hebt kunnen aanklikken.
Het juridische verwijt, en dat label ik nadrukkelijk als de gangbare beoordeling en niet als mijn eigen eindoordeel, zit hem niet eens in de reis naar de VS. Die doorgifte is in beginsel gedekt door het huidige verdrag tussen de EU en de VS. De kern is dat er geen grondslag onder de AVG is en geen toestemming voor het plaatsen en uitlezen van deze trackers, waarvoor de e-privacyregels en de Telecommunicatiewet die toestemming wél eisen. De Autoriteit Persoonsgegevens beboette eerder Kruidvat voor vergelijkbare tracking.
En dan de context die dit van vervelend naar onverteerbaar tilt.
Dit is niet een webwinkel. Dit is de Belastingdienst, het deel van de staat waar je het minst te kiezen hebt: je móét betalen, je móét DigiD gebruiken. En het is de toeslagenomgeving, precies de plek die de overheid na de affaire zou herstellen.
Daar, van alle plekken, krijgt een Amerikaans reclamebedrijf een klik-voor-klik verslag mee.
Wat ik heb gemeten, en wat niet
Voor de volledigheid, want daar hecht ik aan. Dit gaat over mijn eigen account, op mijn eigen apparaat, opgenomen op 30 mei en 1 juni 2026, met de complete antwoorden van de servers erbij. Het is reproduceerbaar: de opnames zijn gehasht en bewaard, de hele zoektocht is na te lopen. De bedragen, het BSN en het betalingskenmerk zijn niet alleen niet gepubliceerd maar aantoonbaar ook niet verzonden. Wat hierboven staat is geen vermoeden uit een privacyverklaring. Het is wat er feitelijk over de lijn ging toen ik een aanslag wilde betalen.
Een maand geleden was het verhaal: de openbare site lekt je zoekgedrag. Nu weten we dat het niet ophoudt bij de voordeur. Je gaat door DigiD heen, je opent je aanslag, je begint te betalen, en Adobe schrijft elke stap mee.
Update 6 juni 2026: de tracking is uitgezet
Dit hoort er net zo goed bij als de bevinding zelf. Na de publicatie en de Kamervragen kreeg ik vanuit de Belastingdienst zelf het signaal dat de Adobe-meting in de betaalomgeving was uitgezet. Ik heb dat niet op hun woord aangenomen, maar opnieuw gemeten, op dezelfde manier als hierboven: ingelogd met mijn eigen DigiD, met de antwoorden van de servers erbij.
Het klopt. In een verse opname van de ingelogde omgeving, ruim tweehonderd verzoeken door precies de schermen die eerder Adobe voedden, vuurt geen enkele Adobe-marker meer. De verhulde host adobe-analytics-dc.belastingdienst.nl is verdwenen. Het tweejarige herkenningsnummer (s_ecid) wordt niet meer gezet. Geen beacon, geen ECID, geen funnel-velden. Ter controle heb ik dezelfde detector eerst op mijn oude opname losgelaten, waar hij de tracking wél netjes terugvond, en daarna op de nieuwe, waar er niets meer overblijft.
De datastroom naar Adobe in de betaalomgeving is gestopt.
Eerlijk over de grenzen, want daar hecht ik aan: dit is één meetmoment in één sessie. Een openstaande betaling om de funnel nog eens helemaal na te lopen had ik niet, maar dat was ook niet nodig, want het herkenningsnummer en de meet-beacon vertrokken eerder al bij het gewoon laden van de portal, niet pas op het moment van betalen. Hun afwezigheid bij ruim tweehonderd verzoeken is daarmee een geldige nulmeting.
Dat wil ik benoemen: het contact met de Belastingdienst verloopt constructief, en het is juist deze openheid, een dienst die zelf laat weten dat iets is rechtgezet, die maakt dat zo’n bevinding niet in een welles-nietes blijft hangen maar gewoon wordt opgelost.
Dit is hoe het hoort te gaan. De meting bracht het aan het licht, de Kamer stelde de vraag, en de dienst heeft gehandeld. Het verwijt over de oorspronkelijke situatie blijft staan, die was er, en dit artikel beschrijft wat er toen feitelijk gebeurde. Maar de huidige stand is dat het is verholpen, en dat hoort er met evenveel nadruk bij.
Update 2 juli 2026: de schending is erkend
De afloop kreeg een formeel slot. De Belastingdienst deed uit eigen beweging een datalekmelding bij de Autoriteit Persoonsgegevens, en op 25 juni beantwoordde staatssecretaris Eerenberg de Kamervragen: het gebruik van Adobe Analytics “was niet in lijn met de geldende ePrivacy-regels en de Algemene verordening gegevensbescherming”. De verwerking wordt pas hervat na een DPIA en sluitende verwerkersafspraken. De volledige tijdlijn, de erkenning en de berichtgeving staan in de afronding van dit dossier.
wat het opleverde
Schending erkend, tracker uit. Na Kamervragen (JA21, kenmerk 2026Z11812) zette de Belastingdienst de Adobe-tracker in de betaalflow op 10 juni 2026 uit, meldde zich op 12 juni uit eigen beweging bij de AP, en op 25 juni erkende staatssecretaris Eerenberg de schending van de ePrivacy-regels en de AVG. Hij bedankte de melder met zoveel woorden.
geverifieerdessayzekerSoftware en apparatenbronnenverwant
Een app kan volledig lokaal, zonder een enkele netwerkcall
Sommige apps versturen niets, alles blijft op je toestel. Dat bewijst dat de zware advertentie- en telemetriestack een keuze is, geen technische noodzaak. Wie zegt dat het niet anders kan, wordt door de schone tegenvoorbeelden weersproken.
In een reeks metingen zat ook goed nieuws. Een app die nul netwerkverkeer maakte. Niets ging naar buiten, alles bleef op het toestel. Ik zette de opname aan, ik gebruikte de app zoals een gewone bezoeker dat zou doen, en de lijst met verstuurde requests bleef leeg. Andere apps in dezelfde reeks deden het ook netjes, zij het minder radicaal. Die hielden het bij hun eigen backend, met de verwerking en de monitoring binnen de EU.
Zulke uitkomsten noteer ik met opzet, want ze breken het patroon van het onderzoek. Het meeste werk gaat over wat er misgaat, en dan ga je vanzelf verwachten dat elke app lekt. De app die niets verstuurt, herinnert me eraan dat die verwachting een aanname is en geen natuurwet.
Het is ook het soort uitkomst dat je makkelijk overslaat. Een lek springt in het oog, want er staat iets in de lijst dat er niet hoort. Een lege lijst vraagt om een tweede blik, want leegte trekt geen aandacht. Toch is die lege lijst het bewijsstuk dat mijn hele betoog draagt. Daarom behandel ik de schone app met dezelfde zorg als een lek, en controleer ik hem net zo streng. Een goede uitkomst die ik te makkelijk aanneem, is net zo onbetrouwbaar als een lek dat ik te makkelijk aanwijs.
Een schone app is meer dan een prettige uitzondering. Ze doet iets met het debat. Ze weerlegt het meestgehoorde excuus, namelijk dat de zware advertentie- en telemetriestack er nu eenmaal bij hoort. Als één app volwaardig werkt zonder ook maar één call naar buiten, dan is diezelfde stack bij een andere app een keuze die iemand heeft gemaakt. Technische noodzaak valt als verklaring af, want het tegenvoorbeeld staat er.
Ik moet wel precies zijn over wat het tegenvoorbeeld aantoont. Het bewijst dat lokaal werken kan. Het bewijst niet dat elke app zonder netwerk toe kan, want sommige apps hebben een echte reden om iets te versturen. Een berichtenapp moet berichten afleveren. Een navigatie-app heeft kaartdata nodig. Het tegenvoorbeeld slaat op de stack die niets met de functie te maken heeft: de trackers, de reclamekoppelingen, de telemetrie die de gebruiker geen betere app oplevert. Voor die laag is "het kan niet anders" na één schone meting niet meer houdbaar.
Nul netwerkverkeer klinkt als een harde uitkomst, en toch verdient het een kanttekening. Wat ik meet is: in mijn meetvenster, bij het gebruik dat ik uitvoerde, verstuurde de app niets. Dat is een gemeten feit binnen die grenzen. Het is geen garantie dat de app onder alle omstandigheden en voor altijd zwijgt.
Er zijn twee bekende valkuilen. De eerste is dat niet alles bij het opstarten vuurt. Sommige calls komen pas na een handeling, na een dag, of na een trigger die ik in mijn sessie niet raakte. Dat werk ik uit in Niet alles vuurt bij opstart, sommige trackers wachten op jou. De tweede valkuil is de omgekeerde vergissing. Een meting die mislukte, bijvoorbeeld omdat de opname niet goed liep of het toestel geen verbinding had, levert ook een lege lijst op, en die leegte lijkt op een schone app zonder er een te zijn. Ik moet dus eerst uitsluiten dat de nul door een meetfout komt voordat ik hem als goed nieuws opschrijf. Dat onderscheid staat in Een mislukte meting is geen schone app. Om beide valkuilen te vermijden, meet ik zoals een echte bezoeker de app gebruikt, en niet zoals een scanner die één keer de voordeur aantikt. Die aanpak licht ik toe in Meet zoals een bezoeker, niet zoals een scanner.
Dit werk gaat vaak over wat misgaat, en dat trekt een bepaalde toon aan. Als je alleen de lekken publiceert, ontstaat het beeld dat het overal fout zit en dat er niets aan te doen is. Dat beeld is onwaar en het is ontmoedigend, en het speelt de partij in de kaart die zegt dat de stack onvermijdelijk is.
Een eerlijke meting noteert daarom ook de goede uitkomst. De schone app is het sterkste antwoord op wie beweert dat het niet anders kan, sterker dan welk moreel appel ook, want het is een feit in plaats van een mening. Het verplaatst de bewijslast. Ik hoef niet aan te tonen dat het anders kan. De bouwer die lekt moet uitleggen waarom hij het niet doet zoals de schone app het al doet.
Er zit nog een functie in het schone voorbeeld die verder gaat dan het weerleggen van een excuus. Het geeft me een maatstaf om de rest langs te leggen. Zonder een bovengrens van wat haalbaar is, blijft elk oordeel over een lekkende app zweven. Je kunt zeggen dat een app veel verstuurt, maar veel ten opzichte van wat? De schone app en de EU-only app vullen dat gat. Ze markeren wat er in de praktijk mogelijk is binnen dezelfde categorie.
Zo wordt mijn beoordeling relatief in plaats van willekeurig. Een app die alles lokaal houdt, staat aan de ene kant. Een app die je toestel op een veiling aanbiedt en tientallen partijen meeneemt, staat aan de andere. Alle apps daartussen kan ik plaatsen ten opzichte van die twee ankers. Dat is eerlijker tegenover de bouwer, want ik meet hem af aan wat een vergelijkbare app aantoonbaar redt, en niet aan een ideaal dat ik zelf verzin.
Het legt ook de lat op de juiste hoogte. De maatstaf is niet mijn mening over hoe het zou moeten. De maatstaf is een bestaande app die het al doet. Dat maakt de eis moeilijk weg te wuiven, want het is geen theorie. Het draait op een toestel, het is gemeten, en het werkt.
Praktisch houdt dit me aan twee dingen. Ten eerste rapporteer ik de schone apps net zo hard als de lekkende. Ze horen in hetzelfde overzicht, want zonder de goede voorbeelden mist mijn kritiek zijn maatstaf. Ten tweede blijf ik streng op de zekerheid van de nul. Ik label de uitkomst op bewijsniveau. Gemeten: geen verkeer in dit venster bij dit gebruik. Nog niet vastgesteld: dat de app onder alle omstandigheden zwijgt. Pas als ik de meetfout en het late vuren heb uitgesloten, noem ik een app schoon.
Het heeft me ook iets geleerd over de toon van mijn werk. Wie alleen aanklaagt, wordt op den duur weggezet als iemand die overal een probleem ziet. De schone app geeft me een geloofwaardig alternatief om naar te wijzen. Ik kan zeggen dat het beter kan en meteen laten zien dat het beter gebeurt, in dezelfde categorie, op een echt toestel. Dat maakt de kritiek moeilijker af te doen als zwartkijken, want er ligt een werkend voorbeeld naast.
Zo blijft het tegenvoorbeeld bruikbaar. Het toont dat lokaal werken kan, het houdt mijn eigen verhaal eerlijk, en het legt de vraag terug waar hij hoort, bij degene die de stack koos en beweert dat het niet anders kan.
Advertentie-infrastructuur in een zorgjas is een bouwkeuze
Laadt een app die zich als zorg of welzijn presenteert al bij het opstarten advertentie- en analytics-netwerken, dan is dat geen ongelukje in de code. Het is een keuze in het ontwerp, gemaakt door wie de app liet bouwen. De jas is zorg, de motor is marketing.
Er zijn apps en sites die zich presenteren als zorg of welzijn. Een hulplijn, een gezondheidsplatform, een welzijnsdienst. Wanneer zo'n app al bij het opstarten advertentie- en analytics-netwerken laadt, is dat een ontwerpkeuze. Iemand heeft besloten dat die netwerken erin komen, en iemand heeft de app zo laten opleveren dat ze bij de start meteen vuren. De buitenkant belooft hulp. De infrastructuur eronder komt uit de reclamehandel.
Dat klinkt hard, en het is een bewering die ik wil onderbouwen voordat ik hem uitspreek. Het bewijsniveau is hier belangrijk. Dat de netwerken laden kan ik meten: het staat in het netwerkverkeer bij de eerste seconden van de app. Dat het een keuze in het ontwerp was, is een afgeleide conclusie uit hoe software wordt gebouwd. Advertentie- en analytics-netwerken komen niet vanzelf in een app terecht. Ze zitten er pas nadat iemand ze heeft toegevoegd.
Zulke netwerken komen mee via een reeks bewuste handelingen. Iemand heeft een SDK aan het project toegevoegd. Iemand heeft een tag geplaatst in een tagmanager. Iemand heeft een verwerker gekozen en een sleutel of container-id in de configuratie gezet. Elk van die stappen staat in de broncode, in de build-configuratie of in het beheerpaneel van de tagmanager. Het zijn regels die iemand heeft geschreven of aangevinkt.
In een mobiele app is dat zichtbaar te maken. Een SDK die bij het opstarten vuurt, verstuurt in de eerste seconden een initialisatieverzoek. Dat verzoek is te vangen. Een ruwe procedure om te zien wat er meteen na de start naar buiten gaat:
# volg het uitgaande verkeer van de app en zeef de eerste bestemmingen
adb logcat | grep -iE 'analytics|adjust|appsflyer|firebase|facebook' &
# of onderschep het verkeer via een proxy en exporteer een HAR,
# daarna de unieke hosts in de eerste vensters eruit halen
jq -r '.log.entries[] | .request.url' capture.har | awk -F/ '{print $3}' | sort | uniq -c | sort -rn
Wat bovenaan die lijst staat, is wat de app als eerste opzoekt. Bij een zorgapp verwacht je daar de eigen backend en verder weinig. Staan er advertentie- en attributienetwerken tussen, dan is dat gemeten feit. Ik noteer per netwerk de host, het moment van vuren en de aard van de payload, zodat de vaststelling navolgbaar blijft en niet op een indruk berust. Dat de app het netwerk laadt, staat dan los van de vraag wat de bouwer bedoelde, en die twee houd ik streng gescheiden in mijn oordeel. Zie Niet alles vuurt bij opstart, sommige trackers wachten op jou voor waarom het moment van vuren telt, en Netwerkverkeer lezen via HAR-files voor de meetmethode.
Dat dit bij een hulpplatform gebeurt, maakt het niet minder bewust. Het maakt het wel pijnlijker. De bezoekers van een zorgdienst zijn per definitie kwetsbaar, en de gegevens die ze achterlaten zijn gevoelig. Iemand die een hulplijn opent, een symptoom opzoekt of een welzijnstest doet, laat gegevens over gezondheid achter.
De AVG behandelt gezondheidsgegevens als een bijzondere categorie onder artikel 9. Voor die categorie geldt een verbod op verwerking, met beperkte uitzonderingen. Zelfs het gegeven dat iemand een bepaalde zorgdienst gebruikt kan al gevoelig zijn, want het onthult iets over de gezondheidssituatie van die persoon. Een advertentie- of analytics-netwerk dat bij zo'n dienst gedrag verzamelt, raakt daarmee de zwaarst beschermde gegevens die de AVG kent. De drempel voor rechtmatige verwerking ligt hier hoger dan bij een gewone webshop.
Dat de netwerken al bij het opstarten vuren, is niet toevallig van belang. Het moment waarop een verzoek uitgaat, bepaalt of er een toestemming aan vooraf kon gaan. Vuurt een advertentie- of analytics-SDK meteen bij de start, dan is er nog geen scherm geweest waarop de bezoeker iets kon kiezen. Voor het lezen en schrijven van gegevens op een apparaat vraagt artikel 11.7a van de Telecommunicatiewet toestemming, en die toestemming kan er op het opstartmoment nog niet zijn.
Dat maakt het opstartgedrag tot een harde toets. Het is gemeten wanneer een verzoek uitgaat, en daaruit volgt of het vóór of na een keuze gebeurde. Zie Niet alles vuurt bij opstart, sommige trackers wachten op jou voor de nuance dat niet elke tracker meteen vuurt, en dat je dus zowel de eerste seconden als het latere gebruik moet meten. Bij een zorgdienst weegt een verzoek in de eerste seconden extra zwaar, want de bezoeker heeft dan nog niets kunnen weigeren en de gegevens zijn per definitie gevoelig.
De aansprakelijkheid ligt bij de organisatie die de app bestelde en oplevert, niet bij de losse SDK. Een SDK is een gereedschap. De keuze om dat gereedschap in een zorgdienst te zetten, is van de opdrachtgever. In de taal van de AVG is die organisatie de verwerkingsverantwoordelijke onder artikel 4. Zij bepaalt doel en middelen van de verwerking. De leverancier van de SDK is hooguit verwerker onder artikel 28, en dan nog alleen binnen de opdracht die de verantwoordelijke geeft.
Wie een zorgjas over een advertentiemotor hangt, kan zich daarom niet verschuilen achter de leverancier. Het papier van de dienst belooft zorg. De code voert marketinginfrastructuur uit. De verantwoordelijkheid voor dat verschil ligt bij degene die de opdracht gaf en de oplevering accepteerde. Dat is een juridische gevolgtrekking uit de rolverdeling in de AVG, en die staat los van de vraag of iemand het bewust of onnadenkend deed.
Ik meet de bestemmingen bij het opstarten en ik benoem welke daarvan tot de reclame- en analytics-handel horen. Dat is de harde, controleerbare laag. Ik meet niet de bedoeling van de bouwer, en die claim ik dus niet. Wat ik vaststel is dat de infrastructuur er is, dat ze bij de start vuurt, en dat de context er een van gevoelige gegevens is.
De rest is weging. Een advertentiemotor onder een zorgjas is een bouwkeuze, gemaakt door wie de app liet maken en accepteerde. Ik trek die weging pas als de meting staat. Eerst de bestemmingen en het moment van vuren, hard en controleerbaar, en pas daarna het oordeel over verantwoordelijkheid. Die volgorde houdt mijn bevindingen bruikbaar voor iemand die er iets mee moet, want ze rusten op wat aantoonbaar is en niet op wat ik vermoed. Of dat met opzet of uit gemakzucht gebeurde, kan ik niet meten, en daarom laat ik dat oordeel open. Wat vaststaat is de verantwoordelijkheid, want die volgt uit de rol, niet uit de intentie. Zie De maker en de aandeelhouder willen niet hetzelfde voor waarom de keuze bij de bouwers en beslissers ligt.
Mislukt een meting, dan betekent dat niet dat er niets gebeurt, alleen dat ik niets zag. Afwezigheid van bewijs presenteren als bewijs van afwezigheid is de gevaarlijkste fout in dit werk. Een lege uitkomst is 'onbekend', geen vrijspraak.
Als een meting mislukt, betekent dat niet dat er niets gebeurt. Het betekent dat ik niets zag. Dat verschil is de kern van dit hele stuk. Afwezigheid van bewijs presenteren als bewijs van afwezigheid is de gevaarlijkste fout in dit werk, omdat de fout eruitziet als een geruststellende conclusie. Iemand leest "0 trackers gevonden" en denkt dat de app schoon is. In werkelijkheid kan de meting kapot zijn gegaan, kan het verkeer versleuteld zijn langsgekomen zonder dat ik erin kon kijken, of kan de tracker gewacht hebben op een handeling die ik nooit deed. Zie Niet alles vuurt bij opstart, sommige trackers wachten op jou.
Een lege uitkomst is daarom "onbekend". Het is een open vraag die om een betere meting vraagt. Wie er een vrijspraak van maakt, geeft een oordeel dat de gegevens niet dragen.
Een meting kan op veel manieren stukgaan zonder dat het meteen opvalt. De opname bevat nul bytes omdat de proxy niet goed tussen het toestel en het netwerk stond. Het verkeer kwam wel binnen maar in een formaat dat ik niet kan lezen, bijvoorbeeld omdat certificaat-pinning de onderschepping blokkeerde. De app detecteerde de meetopstelling en hield zich stil. De sessie stopte na drie seconden terwijl het interessante gedrag pas na het inloggen begint.
In al deze gevallen is de uitkomst dezelfde lege lijst. Het gevaar zit hem er juist in dat een geslaagde schone meting en een mislukte meting op het scherm identiek ogen. Ik kan ze alleen uit elkaar houden door apart vast te leggen of de meting zelf deugde, los van wat ze aantrof.
Certificaat-pinning verdient hier een aparte vermelding, omdat het de meest verraderlijke vorm is. Een app die pint, weigert verbindingen die via mijn onderscheppende proxy lopen. Het gevolg is dat de app zijn eigen backend en zijn trackers gewoon bereikt, terwijl mijn opname leeg blijft. De app werkt, ik zie niets, en zonder controle noteer ik dat als schoon. In werkelijkheid heeft de app zich juist zo gebouwd dat ik niet mag meekijken. Een lege opname bij een app die verder normaal functioneert, is daarom eerder een reden tot argwaan dan tot geruststelling.
Een meting die niets bruikbaars opving, mag niet als "nul trackers, schoon" de boeken in. Ze heet dan "geen bruikbaar verkeer opgevangen". Dat is een uitkomst over mijn meting. Ze zegt op zichzelf niets over de app. Het onderscheid lijkt formeel en het bepaalt de hele conclusie.
Concreet leg ik bij elke meting twee dingen los van elkaar vast:
Deugde de meting? Kreeg ik verkeer binnen, was het leesbaar, liep de sessie lang genoeg, gedroeg ik me als een echte bezoeker?
Wat trof de meting aan? Welke hosts, welke trackers, welke identifiers?
Pas als het eerste "ja" is, mag het tweede een uitspraak over de app worden. Is het eerste "nee" of "onzeker", dan blijft de bevinding hangen op "onbekend, meting herhalen". Deze scheiding werk ik door in Label elke bevinding op bewijsniveau.
Er is nog een kant die de andere richting op fout gaat. Een testtoestel doet uit zichzelf van alles. Het controleert op updates, synchroniseert de tijd, praat met de diensten van het besturingssysteem, haalt pushberichten op. Als ik dat verkeer meetel, reken ik de app aan wat het toestel deed. Dan ontstaat het spiegelbeeld van de valse vrijspraak: een valse beschuldiging.
Daarom trek ik het achtergrondverkeer eraf voordat ik iets aan de app toeschrijf. Ik meet eerst het toestel in rust, zonder de app te openen, en bouw daarmee een lijst van bekende systeemhosts. Die lijst gebruik ik als aftrek bij de echte meting. Een schone uitkomst verdien je pas na die correctie. Ervoor heb je een ruwe lijst die de app dingen aanwrijft die het besturingssysteem deed.
De aftreklijst is zelf een levend ding. Elk toestel en elke Android- of iOS-versie praat met net andere diensten, dus een lijst van vorig jaar dekt de lading niet meer. Ik ververs de rustmeting daarom bij elke nieuwe testopstelling. En ik houd de aftrek conservatief. Bij twijfel of een host van het systeem of van de app komt, laat ik hem staan en markeer ik hem als onzeker. Zo voorkom ik dat ik per ongeluk echt app-verkeer wegpoets onder het mom van ruis. De correctie mag de app niet schoonwassen en mag de app niet zwartmaken. Ze doet precies één ding: het toestel terugbrengen tot wat de app er zelf bovenop legt.
Voordat ik een opname interpreteer, laat ik hem eerst een minimale drempel halen. Het onderstaande fragment leest een HAR-bestand, telt de bruikbare requests, trekt bekende systeemhosts eraf, en weigert een conclusie te trekken als er te weinig overblijft.
import json, sys
SYSTEEMHOSTS = {
"connectivitycheck.gstatic.com",
"time.android.com",
"mtalk.google.com",
"push.apple.com",
}
def analyse_har(pad, min_requests=5):
with open(pad, encoding="utf-8") as f:
har = json.load(f)
entries = har.get("log", {}).get("entries", [])
if not entries:
return "ONBEKEND: geen bruikbaar verkeer opgevangen"
app_hosts = {}
for e in entries:
host = e["request"]["url"].split("/")[2].lower()
if host in SYSTEEMHOSTS:
continue # ruis van het toestel, telt niet mee
app_hosts[host] = app_hosts.get(host, 0) + 1
if len(entries) < min_requests:
return f"ONBEKEND: te weinig verkeer ({len(entries)} requests), meting herhalen"
if not app_hosts:
return "ONBEKEND: alleen systeemverkeer gezien, app-verkeer ontbreekt"
return {"unieke_app_hosts": len(app_hosts), "detail": app_hosts}
print(analyse_har(sys.argv[1]))
Het punt van deze code is de volgorde van de checks. Een leeg bestand, te weinig verkeer, of alleen systeemhosts leiden allemaal tot "onbekend" en nooit tot "schoon". Alleen een opname die echt app-verkeer bevat, komt door tot een inhoudelijke uitspraak. De ruwe techniek achter het lezen van deze bestanden staat in Netwerkverkeer lezen via HAR-files.
Dit stuk gaat uiteindelijk over bewijsniveau. Ik werk met drie labels: gemeten, afgeleid en vermoed. De fout die ik hier bestrijd, is dat een mislukte meting stilletjes promoveert van "onbekend" naar "gemeten schoon". Die promotie is nergens op gebaseerd en toch gebeurt ze vanzelf, omdat een lege lijst zo geruststellend leest.
In de praktijk geef ik "onbekend" daarom een eigen kolom in mijn overzicht, los van "schoon" en "tracking gevonden". Een app die in die kolom staat, is werk dat nog wacht. Zo kan ik aan het eind van een ronde precies zeggen hoeveel apps ik echt heb doorgemeten en hoeveel er alleen langs de meetlat zijn geweest zonder een bruikbare opname. Dat getal is eerlijk en het beschermt me tegen de neiging om een halve dekking te presenteren als een volledige.
"Onbekend" verdient daarom een eigen plek in het rapport, met dezelfde ernst als een positieve bevinding. Het vertelt de lezer dat hier nog werk ligt. Het beschermt mij tegen de verleiding om een gat in de meting te presenteren als een eigenschap van de app. En het beschermt de app tegen het spiegelbeeld, waarbij ik toestelruis als tracking aanreken. De methode is pas eerlijk als een leegte een leegte mag blijven totdat een betere meting hem vult.
Dat data in een Europees datacenter staat, maakt de Amerikaanse greep zwakker, niet nul. Draait het op een Amerikaanse aanbieder, dan blijft het bedrijf onder Amerikaans recht vorderbaar, EU-regio of niet. Serverlocatie en jurisdictie zijn twee dingen.
Dat data in een Europees datacenter staat, maakt de Amerikaanse greep zwakker. Hij verdwijnt er niet door. Draait het op een Amerikaanse aanbieder, dan blijft het bedrijf onder Amerikaans recht vorderbaar, EU-regio of niet. Dat is de hele kern in één zin, en de fout die ik telkens tegenkom, is dat mensen deze twee dingen op één hoop gooien.
Serverlocatie is een fysiek feit. Het gaat over de vraag waar de bytes op een schijf staan, in welk gebouw, in welk land. Jurisdictie is een juridisch feit. Het gaat over de vraag welke overheid het bedrijf dat de data beheert, kan dwingen om die data af te geven. Die twee vallen vaak niet samen. Een dataset kan fysiek in Frankfurt staan en toch beheerd worden door een onderneming die een Amerikaanse rechter kan bevelen. De verwarring werk ik verder uit in Waar het pakket landt en wie het kan vorderen zijn twee assen.
De belofte "gehost in de EU" richt zich op het eerste feit en zwijgt over het tweede. Ze is meestal waar en tegelijk minder geruststellend dan ze klinkt. De fysieke regio bepaalt onder andere de latency en soms een deel van de naleving rond dataminimalisatie. Wat ze niet bepaalt, is wie de sleutel in handen heeft en wie het moederbedrijf een bevel kan sturen.
Een buitenlandse overheid grijpt namelijk aan bij het bedrijf en laat het gebouw links liggen. Een Amerikaanse bevoegdheid grijpt aan bij een Amerikaanse onderneming en haar dochters, ongeacht op welk continent de schijven draaien. De fysieke regio zegt dus iets over waar de bytes staan en weinig over wie ze uiteindelijk kan opvragen.
Zelfs gegevens die fysiek in een Europese regio landen, draaien vrijwel altijd op een Amerikaanse aanbieder: de grote drie cloudpartijen. Dat is op bewijsniveau afgeleid uit de marktverdeling en uit wat je in het verkeer terugziet. Het is geen sluitende claim over elke afzonderlijke dienst. De praktijk is dat een groot deel van wat "EU-hosting" heet, technisch op de infrastructuur van een Amerikaans concern staat.
Zolang dat concern onder Amerikaans recht valt, blijft de data in beginsel vorderbaar via dat recht, ook als de regio op "Europe" staat. De EU-regio verplaatst de bytes, ze verplaatst de zeggenschap over het bedrijf niet. Wie de echte infrastructuur onder een dienst wil zien, moet vaak door een laag reclame heen kijken. Zie De echte dataruggengraat oogt niet als reclame.
Omdat het om twee feiten gaat, meet ik ze apart. Ik stel de fysieke locatie vast met techniek en de juridische zeggenschap met openbare bedrijfsinformatie.
1. Welke hosts raakt de dienst? Ik haal de hostnamen uit een opname van het verkeer, bijvoorbeeld uit een HAR. Zie Netwerkverkeer lezen via HAR-files.
2. Waar staat de host fysiek? Ik zoek het IP-adres op en bepaal het land met een offline GeoIP-database. Dit is de fysieke as en het resultaat is gemeten.
3. Wie bezit de host? Ik zoek het ASN op, de netwerkeigenaar achter het IP. Dat vertelt me of het om Amazon, Microsoft, Google of een echt Europese partij gaat.
4. Onder welk recht valt die eigenaar? Dit leid ik af uit de vestigingsplaats van het moederbedrijf. Deze juridische as is afgeleid, want ze volgt uit bedrijfsstructuur en niet uit een netwerkmeting.
Stap twee en drie kunnen naar hetzelfde land wijzen en toch verschillende dingen betekenen. Een IP in Duitsland dat toebehoort aan een Amerikaans concern telt fysiek als Duitsland en juridisch als Verenigde Staten.
De vierde stap is de lastigste, omdat de eigendomsketen zich graag verstopt. Een dienst kan zich presenteren als een klein Europees bedrijf terwijl de opslag onder water bij een van de grote drie draait en de moeder in de Verenigde Staten zit. Ik volg die keten via openbare bronnen: het handelsregister voor de vestiging, de aandeelhouders voor de zeggenschap, en het ASN voor de feitelijke infrastructuur. Waar de keten ophoudt bij wat ik openbaar kan vinden, stop ik en label ik de rest als vermoeden. Ik dicht een gat in de eigendomsketen liever niet met een aanname, want juist daar wordt de bewering over jurisdictie zwak.
Het onderstaande fragment doet de eerste stappen mechanisch. Het lost een host op naar een IP, bepaalt het land offline, en laat zien dat het land van de bytes een andere vraag is dan de eigenaar van het netwerk.
import socket
import geoip2.database # offline MaxMind-database, geen netwerkcall
LAND_DB = geoip2.database.Reader("GeoLite2-Country.mmdb")
def lokaliseer(host):
ip = socket.gethostbyname(host)
land = LAND_DB.country(ip).country.iso_code
return ip, land
for host in ["cdn.voorbeeld-eu.example", "storage.voorbeeld.example"]:
ip, land = lokaliseer(host)
print(f"{host} -> {ip} (bytes staan in: {land})")
print(" Let op: het land van het IP is de fysieke as.")
print(" De eigenaar van het IP (ASN) bepaalt de juridische as.")
Voor de eigenaar zelf kijk ik naar het ASN achter het IP, via een offline dataset of een whois op het netwerkblok. Zie de host als vertrekpunt en de ASN-eigenaar als het echte antwoord op de vraag wie erbij kan. Het land uit GeoIP is een fysiek feit. De eigenaar en zijn thuisrecht zijn het feit dat over vorderbaarheid gaat.
Een EU-datacenter is niet waardeloos. Het maakt een Schrems-argument zwakker, want de data landt echt in Europa, en een deel van de discussie over doorgifte naar een derde land verschuift daarmee. Voor het naleven van dataminimalisatie en voor de latency van gebruikers is de fysieke regio wel degelijk relevant. Wie beweert dat "EU-hosting" volstrekt betekenisloos is, overdrijft de andere kant op.
De grens zit precies hier. Een EU-datacenter dempt de fysieke doorgifte en heft de zeggenschap van het moederbedrijf niet op. Wie "in Europa gehost" leest als "buiten Amerikaans bereik", trekt een streep die er niet is. Het datacenter verplaatst de schijven. Het verhuist het bedrijf niet naar een ander rechtsgebied.
Het slot is een kwestie van eerlijk labelen. De fysieke locatie van de bytes kan ik meten, met GeoIP en whois, en die uitkomst is hard binnen de nauwkeurigheid van de database. De juridische zeggenschap is afgeleid, want ze volgt uit wie het netwerk bezit en onder welk recht dat bedrijf valt. Wat een buitenlandse overheid in een concreet geval daadwerkelijk zou vorderen en verkrijgen, blijft vermoed, want dat hangt af van bevelen en procedures die ik niet kan inzien.
Die drie niveaus door elkaar halen is precies de fout die "in Europa gehost" tot een vrijwaring maakt. Ik houd ze uit elkaar. De bytes staan in Europa, gemeten. Het bedrijf valt onder Amerikaans recht, afgeleid. Wat daaruit volgt bij een echt bevel, benoem ik als vermoeden. Zo blijft de bewering staan die ik kan dragen en valt de geruststelling weg die niemand kan waarmaken.
Waar het pakket landt en wie het kan vorderen zijn twee assen
Bij het wegen van internationale doorgifte houd ik twee dingen apart: waar de data fysiek landt, en welk recht op het bedrijf van toepassing is. Een Amerikaans bedrijf blijft vorderbaar, ook met een Europees datacenter. Die twee door elkaar halen ondermijnt de hele claim.
Bij het wegen van internationale doorgifte houd ik twee dingen bewust apart. De eerste as is fysiek: waar landt het datapakket. De tweede as is juridisch: welk recht is op het bedrijf van toepassing. Dit zijn twee verschillende vragen met twee verschillende antwoorden. Wie ze op één hoop gooit, bouwt een claim die bij de eerste tegenwerping omvalt.
Het onderscheid klinkt technisch, maar het bepaalt of een privacyargument standhoudt. Een verkeerd samengevoegd cijfer geeft je een sterke zin die niet klopt. Twee schone cijfers geven je twee zwakkere zinnen die allebei kloppen. Het tweede is bruikbaar in een dossier. Het eerste sneuvelt zodra iemand er goed naar kijkt.
Ik maak het onderscheid ook omdat de tegenpartij het graag laat vervagen. Een aanbieder die geruststelt, zegt vaak dat de data in Europa staat, en laat de zeggenschap onbenoemd. Een criticus die overdrijft, zegt dat alles naar de VS gaat, en negeert dat het fysiek vaak in de EU landt. Beide leunen op het versmelten van de twee assen. Wie ze scheidt, ontneemt beide kanten hun makkelijke zin en houdt alleen over wat te verdedigen valt.
De fysieke datacenter-regio bepaalt hoe sterk een Schrems-argument is. Het Hof van Justitie verklaarde in de zaak Schrems II, C-311/18, het Privacy Shield ongeldig en stelde dat doorgifte naar een derde land alleen mag met een beschermingsniveau dat in de kern gelijkwaardig is aan dat van de EU. Standaardcontractbepalingen kunnen dat dragen, maar alleen met aanvullende maatregelen waar het recht van het ontvangland tekortschiet.
Landt de data echt binnen de EER, dan is het zuivere Schrems-argument zwakker. Het pakket verlaat dan de beschermde ruimte fysiek niet. Deze as meet ik met geolocatie van de ontvangende servers. Dat is een afgeleide meting, want ze leunt op een GeoIP-database, en zo'n database is precies zo actueel als zijn laatste update. Ik label dit cijfer daarom als afgeleid, niet als hard bewijs van fysieke locatie. Zie Label elke bevinding op bewijsniveau.
De tweede as is de zeggenschap over het bedrijf. Die bepaalt wie de data kan vorderen. Een Amerikaans bedrijf valt onder Amerikaans recht, ook als het een datacenter in Frankfurt gebruikt. De CLOUD Act uit 2018 maakt dat expliciet. Amerikaanse autoriteiten kunnen een Amerikaanse aanbieder verplichten data te overhandigen die onder zijn beheer of controle staat, ongeacht waar ter wereld die data fysiek is opgeslagen.
Daarmee bijt de zeggenschapsas de locatieas. Een EU-datacenter beschermt niet tegen een vordering die zich richt op het moederbedrijf. De data staat in Europa en is tegelijk vorderbaar in de VS. Dat is precies waarom in Europa hosten geen vrijwaring geeft. Zie In Europa gehost is geen vrijwaring. Deze as leid ik af uit eigendomsketens, uit publieke registraties en uit bestanden als sellers.json die vertellen wie een partij bezit. Ook dit is een afgeleide meting, met een eigen bewijslast.
De CLOUD Act staat niet op zichzelf. Er zijn meer regimes die op zeggenschap aangrijpen dan op locatie, zoals sectorale bevoegdheden voor inlichtingendiensten. Voor mijn werk is de CLOUD Act het scherpste en best gedocumenteerde voorbeeld, dus daar toets ik op. Het onderliggende principe is algemener: een staat die een bedrijf onder zijn recht heeft, kan dat bedrijf iets opleggen, en de schijf mag dan aan de andere kant van de wereld staan. De vraag wie een partij bezit, is daarom een privacyvraag van de eerste orde, niet een voetnoot.
De twee assen leverden in mijn onderzoek twee heel verschillende getallen op. Van honderden bestemmingen stond het merendeel onder Amerikaanse zeggenschap. Slechts een fractie was fysiek in de VS bevestigd. De meeste van die Amerikaanse bedrijven draaiden dus op servers die niet aantoonbaar in de VS stonden.
Als je die twee cijfers op één hoop gooit, krijg je een misleidende uitkomst. Zeg je dat het merendeel in de VS staat, dan is dat onwaar, want fysiek stond het daar niet. Zeg je dat maar een fractie onder Amerikaans recht valt, dan is dat ook onwaar, want de zeggenschap was wel Amerikaans. Uit elkaar gehouden kloppen beide zinnen. Het merendeel valt onder Amerikaanse zeggenschap. Een fractie is fysiek in de VS bevestigd. Beide waar, en samen een eerlijker beeld dan één samengeperst getal.
Voor mijn werk is dit een discipline, geen theorie. Ik rapporteer de twee assen altijd los. Eén kolom voor de fysieke regio, afgeleid uit geolocatie. Eén kolom voor de zeggenschap, afgeleid uit eigendom. Ik trek pas een conclusie nadat ik beide heb ingevuld, en ik zeg er per as bij hoe zeker ik ben.
Het is een discipline die ik mezelf heb opgelegd nadat ik zag hoe makkelijk een claim omvalt. Een tegenstander hoeft maar één zwakke plek te vinden om het hele betoog verdacht te maken. Als ik zeg dat honderden bestemmingen in de VS staan en er blijkt een fractie fysiek in de VS te staan, dan is mijn cijfer weerlegd en lijkt de rest ook onbetrouwbaar, ook al klopte de zeggenschap wel. Door de twee assen van begin af aan te scheiden, geef ik die opening niet weg. Elke zin die ik opschrijf, is dan al bestand tegen de meest voor de hand liggende tegenwerping.
Die scheiding maakt mijn claims bestendiger. Een tegenpartij die één as aanvalt, raakt de andere niet. En ze past bij hoe de datastroom echt loopt, want een biedstroom kan een veiling in waar buitenlandse partijen op meebieden, los van waar de servers staan. Zie Een biedstroom kan een veiling ingaan waar buitenlandse partijen op meebieden. De twee assen uit elkaar houden is de enige manier om over doorgifte iets te zeggen dat overeind blijft.
Praktisch giet ik dat in een vaste vorm. Per ontvangende partij noteer ik twee velden apart: regio_fysiek uit de geolocatie, en zeggenschap uit de eigendomsketen. Ik tel nooit over de twee heen. In het eindrapport staan ze als twee kolommen, elk met een eigen bewijsniveau erbij. Zo kan een lezer zelf zien dat een partij fysiek in Frankfurt draait en tegelijk onder Amerikaans recht valt. Dat beeld is ongemakkelijker dan één geruststellend of één alarmerend getal, en het is het enige dat klopt. Het label per as is daarbij niet optioneel, het draagt de hele claim. Zie Label elke bevinding op bewijsniveau.
De winst van deze werkwijze is dat mijn oordeel navolgbaar wordt. Iemand die het niet met me eens is, kan precies aanwijzen op welke as en op welk bewijsniveau hij twijfelt. Dat is een gesprek dat vooruit komt. Het alternatief, één getal dat twee dingen samenperst, lokt een welles-nietes uit waarin niemand kan zeggen waarover het precies gaat. Twee assen, twee kolommen, twee labels. Dat is saai om op te schrijven en het is de reden dat de conclusie blijft staan.
Eén vlekkeloze partij in dezelfde meting maakt het noodzaakargument van de rest onhoudbaar
Meet je een hele sector langs dezelfde meetlat, dan is de best scorende partij belangrijker dan de slechtste. Zij levert het bestaansbewijs dat de functie ook zonder de gemeten constructie werkt, met hetzelfde publiek en dezelfde regels. Daarmee verschuift het gesprek van dit kan niet anders naar waarom bij jou wel. Neem in elke sectormeting bewust een koploper op, ook als die geen nieuws oplevert.
Een DPIA die niemand kan inzien, is geruststelling, geen afweging
Een risicoafweging die je nergens kunt inzien, werkt niet als afweging maar als geruststelling. Het bestaan ervan claimen is iets anders dan hem laten toetsen. De belofte staat tegenover de gemeten werkelijkheid, en alleen die laatste is bewijs.
Een risicoafweging die je nergens kunt inzien, functioneert als geruststelling. Ze zegt tegen de buitenwereld: wees gerust, er is over nagedacht. Wat ze niet toelaat, is dat iemand controleert of dat nadenken hout snijdt. Toetsen kan niemand haar, want het document ligt niet op tafel.
Verwijzen naar een uitgevoerde DPIA is iets anders dan hem laten toetsen. Het bestaan claimen kost niets. Het openbaar maken en de conclusies laten narekenen kost wel iets, en juist dat gebeurt in de gevallen die ik meet niet. De verwijzing blijft staan, het stuk zelf komt nooit.
De DPIA, in het Nederlands de gegevensbeschermingseffectbeoordeling, staat in artikel 35 van de AVG. Ze is verplicht wanneer een verwerking waarschijnlijk een hoog risico oplevert voor de rechten en vrijheden van betrokkenen. Het artikel schrijft ook voor wat erin hoort. Lid 7 noemt onder meer een beschrijving van de verwerkingen, een beoordeling van de noodzaak en evenredigheid, een inschatting van de risico's en de maatregelen om die risico's te beperken.
Een DPIA is dus geen vinkje. Het is een gestructureerde afweging die de aannames expliciet maakt. Wanneer die afweging klopt en de maatregelen deugen, staat er iets toetsbaars op papier. Artikel 36 gaat nog een stap verder: blijft het risico ondanks de maatregelen hoog, dan moet de verwerkingsverantwoordelijke vooraf de toezichthouder raadplegen. De DPIA is met andere woorden bedoeld als werkend controlemiddel, met een keten naar de toezichthouder toe.
In de gevallen die ik onderzoek, keert een patroon terug. Er wordt naar een DPIA verwezen, maar het document is nergens in te zien. Tegelijk noemt de privacyverklaring geen subverwerkers en geen internationale doorgifte. Dat zijn precies de punten die mijn meting wél blootlegt.
Het verkeer laat zien dat er gegevens naar ontvangers gaan die de verklaring niet noemt, en in gevallen naar servers buiten de EER. Dat is een gemeten bevinding, af te lezen uit de HAR en de ontvangende domeinen. De informatieplicht van artikel 13 en 14 vraagt juist om openheid over ontvangers en doorgifte. De afweging die zou moeten bestaan, dekt daarmee juist de dingen niet die er gebeuren. Waar de meting iets toont, zwijgt het papier, en het papier dat er wél is, kan ik niet inzien.
Het is de moeite waard om stil te staan bij wat er precies verzwegen wordt. De twee dingen die de privacyverklaring niet noemt, subverwerkers en internationale doorgifte, zijn geen willekeurige details. Het zijn de twee punten die het meest zeggen over waar je gegevens werkelijk terechtkomen.
Een subverwerker is een derde partij die namens de verwerkingsverantwoordelijke gegevens verwerkt, bijvoorbeeld een hostingpartij, een analytics-dienst of een advertentienetwerk. De informatieplicht van artikel 13 en 14 vraagt om openheid over de ontvangers van je gegevens. Internationale doorgifte gaat over de vraag of die ontvangers buiten de EER zitten, waar het beschermingsniveau anders kan zijn en waar sinds Schrems II extra waarborgen nodig zijn. Dit zijn precies de gegevens die een burger nodig heeft om te beoordelen wat er met hem gebeurt.
Dat juist deze twee ontbreken terwijl mijn meting laat zien dat er wél sprake van is, maakt de stilte veelzeggend. Ik trek er geen opzet uit, want dat kan ik niet meten. Wat ik wel vaststel is dat de openbare documenten het spoor doodlopen op precies de plek waar het interessant wordt, en dat de meting daar juist wél iets toont.
Zo staan twee dingen tegenover elkaar. De DPIA is de belofte dat er is nagedacht. De meting is wat er werkelijk over de lijn gaat. Van die twee is alleen de meting bewijs, want alleen die kan ik tonen en kan een ander narekenen.
Dat is dezelfde scheiding die door al mijn werk loopt. Een verklaring beschrijft de bedoeling, de code voert iets uit, en die twee kunnen uiteenlopen. Zie Een naam in de code is nog geen tracker voor de meetkant van datzelfde principe. Een belofte die je niet kunt controleren, verandert niets aan wat het toestel doet. De gemeten werkelijkheid is het enige spoor dat standhoudt in een discussie.
Mijn regel is nuchter. Zolang de afweging niet te toetsen is, telt ze in mijn weging als afwezig. Dat is geen beschuldiging dat er niet is nagedacht. Het is een weigering om iets als vaststaand aan te nemen dat ik op geen enkele manier kan controleren.
Ik behandel de verwijzing naar een DPIA dus als een vermoed pluspunt, niet als een gemeten feit. Tegenover dat vermoeden staat wat ik wél heb gemeten: verkeer naar ongenoemde ontvangers, doorgifte die de verklaring verzwijgt. In de weging wint het gemeten spoor, want dat is het enige met bewijskracht. Zie Label elke bevinding op bewijsniveau voor hoe ik die niveaus consequent uit elkaar houd.
Belangrijk is dat "telt als afwezig" niet hetzelfde is als "bestaat niet". Ik beweer nergens dat er geen DPIA is opgesteld. Het is goed mogelijk dat er een degelijk stuk in een la ligt. Mijn punt is enger en daarom houdbaarder: voor mij, als buitenstaander die het rapport maakt, kan een afweging die ik niet kan inzien geen gewicht in de schaal leggen. Zou ik haar wél laten meewegen op gezag van de verwijzing alleen, dan zou ik precies de fout maken die ik anderen verwijt, namelijk een claim aannemen zonder de meting die haar draagt. De asymmetrie is bewust. Een controleerbaar feit weegt, een oncontroleerbare belofte niet, ongeacht welke kant die belofte op wijst.
Dit bepaalt hoe ik omga met elke belofte op papier die ik niet kan controleren. Een certificaat, een keurmerk, een verwijzing naar een uitgevoerde beoordeling: het zijn signalen die mijn aandacht sturen, en het is bewijs zodra ik het kan inzien en narekenen. Tot dat moment weegt het als afwezig, en weegt de meting.
Het scherpt ook waar ik naar kijk. Wanneer een organisatie naar een DPIA verwijst maar geen subverwerkers en geen doorgifte noemt, is dat voor mij een reden om juist die twee dingen te meten. De kloof tussen de belofte en de meting is vaak het meest sprekende deel van het rapport. Zie Een register van wat de overheid uitstuurt hoort particulier te zijn voor waarom ik dat spoor het liefst als onafhankelijke buitenstaander vastleg.
Er zit ook een grens aan wat ik hiermee zeg, en die grens bewaak ik. Ik lever de meting en de constatering dat de openbare afweging het gemeten gedrag niet dekt. Ik lever geen eindoordeel dat de organisatie de wet overtreedt. Die stap vraagt om de context die ik als buitenstaander niet volledig heb: de rechtsgrond, de eventuele waarborgen bij doorgifte, de inhoud van de DPIA zelf zodra iemand die wél inziet. Mijn werk maakt de vraag scherp en toetsbaar. Het beantwoorden ervan is aan een partij die het volledige dossier kan opvragen. Door die grens te respecteren, blijft mijn bevinding staan waar een groter oordeel zou wankelen.
Verwerking die zich beveiliging noemt, staat buiten elke keuze die je krijgt aangeboden
Toestemmingsvragen gaan over marketing en meting. Alles wat als fraudebestrijding, foutopsporing of veiligheid is geclassificeerd, valt er per ontwerp buiten en blijft dus draaien nadat je alles hebt geweigerd. Vaak is dat verdedigbaar, want zo'n functie beschermt je ook. Het gevolg is wel een hele categorie verwerkingen waarvan de gebruiker het bestaan niet kent, de omvang niet ziet en de bewaartermijn niet kan navragen.
Een toestemmingsvenster gaat over marketing, personalisatie en meting. Dat is geen toeval en ook geen slordigheid: de wet vraagt toestemming voor het plaatsen en uitlezen van gegevens op je apparaat, met een uitzondering voor wat strikt noodzakelijk is voor de gevraagde dienst.
Rond die uitzondering is een hele klasse verwerkingen ontstaan die zichzelf beveiliging noemt. Fraudebestrijding. Botdetectie. Foutopsporing. Misbruikpreventie. Risicoscoring bij betalen. Ze vallen per ontwerp buiten de toestemmingsvraag en blijven dus draaien nadat je alles hebt geweigerd.
Dit is geen ontmaskering, en ik wil het ook niet als ontmaskering brengen.
Een betaalpagina die controleert of jouw sessie afwijkt van het normale patroon, beschermt jou. Een dienst die botverkeer weert, houdt de dienst overeind. Een systeem dat foutmeldingen verzamelt, repareert de bug die jij tegenkwam. In veel gevallen zou je die functies aanzetten als je het gevraagd werd.
Het probleem zit niet in het bestaan van de categorie. Het zit in wat er met een categorie gebeurt die niemand hoeft te verantwoorden.
De gebruiker kent het bestaan niet. Er is geen scherm waarop het langskomt, want er valt niets te kiezen. Wie de banner leest, denkt de volledige lijst te zien.
De omvang is onbegrensd. Fraudebestrijding is geen scherp afgebakende handeling. Er zit een sterke prikkel om er zoveel mogelijk onder te scharen, want alles wat erbuiten valt kost een toestemmingsvraag en dus conversie.
De bewaartermijn is onbekend. Wat er nooit is gevraagd, wordt zelden gedocumenteerd. Voor de toestemmingsplichtige categorieën staat er tegenwoordig een tabel in de cookieverklaring. Voor deze staat er meestal één zin.
Voor een meting betekent dit: het verkeer dat na weigeren doorloopt, is niet automatisch een overtreding. Een deel ervan is de noodzakelijke laag, en die hoort er te zijn.
Juist de kanalen die goed beveiligd zijn, kun je niet onafhankelijk controleren
Certificaat-pinning, systeem-CA's en obfuscatie beschermen de gebruiker tegen meelezende derden. Dezelfde maatregelen sluiten de onderzoeker buiten, en daarmee ook de gebruiker die zelf wil nagaan wat zijn apparaat verstuurt. Het gevolg is een omkering: hoe gevoeliger de stroom, hoe kleiner de kans dat iemand hem kan narekenen. Controleerbaarheid is dus geen bijproduct van goede beveiliging maar een aparte eis.
Trackers die pas na scrollen of wachten vuren, ontsnappen aan een snelle controle. Wie wil weten wat een site echt doet, moet zich gedragen als een gewone bezoeker: scrollen, wachten, en per toestemmingskeuze apart meten. De scanner die alleen de eerste seconde ziet, ziet te weinig.
Veel volgtechniek vuurt niet meteen. Ze wacht op scrollen, op tijd, of op een handeling. Een statische of handmatige controle die alleen de eerste seconde bekijkt, mist die trackers volledig en concludeert te vroeg dat het meevalt. Dat is de zwakke plek van bijna elke snelle scan. Hij opent de pagina, leest wat er in het eerste moment gebeurt, en stopt. De techniek die op gedrag reageert, krijgt nooit de kans om af te gaan.
Een automatische scanner heeft daar nog een tweede zwakte bij. Hij gedraagt zich herkenbaar als een robot. Geen muisbeweging, geen scroll, een leeg toestel zonder geschiedenis. Sommige diensten reageren daar anders op dan op een mens. Het beeld dat een kale scanner oplevert, kan daardoor twee kanten op vertekenen: hij ziet de wachtende trackers niet, en de dienst behandelt hem soms als een uitzondering. Zie Niet alles vuurt bij opstart, sommige trackers wachten op jou.
Wie wil weten wat een site echt doet, moet zich gedragen als een gewone bezoeker. Scrollen, wachten, doorklikken. Pas dan komt de techniek in beweging die op gedrag wacht. De opname moet lang genoeg lopen om dat mee te krijgen.
Dat betekent niet dat ik willekeurig ga klikken. Ik doe wat een normale gebruiker doet in een normale volgorde. De pagina laten laden, even lezen, naar beneden scrollen, een keuze maken, doorklikken naar een tweede pagina, eventueel inloggen. Elke handeling is een trigger die iets kan losmaken. De kunst is om een realistische sessie na te bootsen die de trage triggers raakt zonder gedrag te verzinnen dat de dienst niet zelf uitlokt.
Er is een fijne balans te bewaken. Ik wil genoeg doen om de wachtende techniek te wekken, en ik wil binnen wat een echte bezoeker zou doen blijven. Twintig keer doelloos heen en weer scrollen valt daarbuiten en zou het beeld opblazen. Rustig doorlezen tot onderaan de pagina en dan doorklikken valt erbinnen. Als ik twijfel of een handeling nog realistisch is, kies ik de kant van de gewone gebruiker. Zo blijft de meting een afspiegeling van normaal gebruik en houdt de bevinding stand als iemand hem naloopt.
Het gedrag verschilt per toestemmingskeuze. Een site die alles laadt na "accepteren", houdt zich vaak in na "weigeren", en doet iets derde als je niets aanklikt. Daarom leg ik het verkeer drie keer vast:
Zonder iets aan te klikken. De banner staat er, ik doe niets, ik gebruik de site zoals veel mensen doen die de melding wegnegeren.
Na alles accepteren. Ik geef volledige toestemming en zie het maximale beeld.
Het verschil tussen die drie is waar de bevinding zit. Eén meting over alles heen wist juist het interessante uit. Als een tracker alleen in de accepteer-opname zit, hoort hij bij consent. Zit hij ook in de weiger-opname, dan is dat een sterker signaal, want dan vuurt hij ondanks een geweigerde toestemming.
Ik werk elke modus op dezelfde manier af, zodat de drie opnames vergelijkbaar zijn. Alleen de toestemmingskeuze verschilt, de rest van de sessie houd ik gelijk.
1. Verse staat. Ik begin met een schoon profiel of gewiste opslag, zodat oude cookies de meting niet kleuren.
2. Start de opname.
3. Open de site of app.
4. Maak de toestemmingskeuze die bij deze modus hoort, of laat hem bewust achterwege.
5. Voer dezelfde vaste route uit: laden, wachten, scrollen, doorklikken, inloggen.
6. Sla de opname op onder een naam die de modus vastlegt: zonder.har, weiger.har, accepteer.har.
Doordat alleen de toestemmingskeuze verschilt en de handelingen gelijk blijven, mag ik het verschil in verkeer toeschrijven aan de toestemming. Deze scheiding is de reden dat ik überhaupt iets kan zeggen over de rol van consent.
Met drie opnames wordt de vergelijking mechanisch. Ik haal per opname de set unieke hosts eruit en zet ze naast elkaar. De verzamelingen-logica doet de rest.
import json
def hosts_uit_har(pad):
with open(pad, encoding="utf-8") as f:
entries = json.load(f)["log"]["entries"]
return {e["request"]["url"].split("/")[2].lower() for e in entries}
zonder = hosts_uit_har("zonder.har")
weiger = hosts_uit_har("weiger.har")
accepteer = hosts_uit_har("accepteer.har")
print("Vuurt ondanks weigeren:", sorted(weiger))
print("Komt er alleen bij accepteren:", sorted(accepteer - weiger))
print("Al actief zonder enige keuze:", sorted(zonder))
print("Overal aanwezig (verdient aandacht):",
sorted(zonder & weiger & accepteer))
De regel accepteer - weiger laat de hosts zien die pas na toestemming verschijnen. Dat is het te verwachten gedrag. De regel weiger en de doorsnede van alle drie zijn interessanter, want daar staan de partijen die contact maken ondanks een geweigerde of ontbrekende toestemming. Een host in die lijst is een aanwijzing, geen eindoordeel. Een naam of host bewijst nog geen tracking. De duiding volgt met Een naam in de code is nog geen tracker en Label elke bevinding op bewijsniveau.
Een kanttekening bij deze vergelijking is dat ze op hostnaam werkt en dat een enkele host meerdere rollen kan spelen. Een domein kan zowel een noodzakelijke functie leveren als een tracker bedienen. Daarom is de set-vergelijking de eerste zeef en geen eindstation. Voor elke host die na weigeren blijft opduiken, kijk ik naar de inhoud van de requests: welke identifiers gaan mee, welke payload, welk pad. Pas dan weet ik of het om functioneel verkeer gaat of om volgtechniek die zich weinig van de weigering aantrekt. De verzamelingen-logica wijst me de plek, het handwerk erna levert het oordeel.
De sterkste bevindingen uit deze aanpak zijn gemeten en ze ontlenen hun kracht aan het contrast tussen de drie opnames. Dat een tracker in de accepteer-opname zit, is een zwakke observatie op zichzelf, want toestemming verklaart hem. Dat dezelfde tracker ook in de weiger-opname zit, is een sterke observatie, want daar is de toestemming er niet en vuurt hij toch. Het bewijs zit in het verschil.
Dit is ook waarom ik de moeite van drie aparte sessies neem in plaats van één brede opname. Eén opname over alle keuzes heen zou de tracker wel bevatten en zou de vraag onbeantwoord laten of hij van consent afhing. De scheiding maakt van een losse waarneming een toetsbare uitspraak, want ik kan precies aanwijzen in welke modus de host wel en niet verscheen.
Daarom bewaar ik de drie opnames altijd samen, met de handelingen en de reikwijdte erbij. Een enkele opname zonder zijn tegenhangers verliest de helft van zijn zeggingskracht. En een bevinding die ik niet kan terugleiden naar een concrete modus en een concrete handeling, zwak ik af tot wat de opnames wel dragen. De bezoeker-aanpak kost meer tijd dan een scan en ze levert het enige beeld op waar ik een oordeel op durf te bouwen.
Wat data naar buiten stuurt, kan meestal ook commando's naar binnen krijgen
Bij apparaten die telemetrie versturen ligt de aandacht vanzelf op wat er weggaat. De interessantere vraag is wat er terugkomt, want dezelfde verbinding draagt vaak instellingen en firmware. Wie het platform of het account beheerst, kan het gedrag van het apparaat bepalen, tot uitschakelen aan toe. Het risico van meekijken is een privacyvraag, het risico van meesturen is er een van zeggenschap en continuïteit.
Wat als zelfredzaamheid geldt, is meestal het vermogen om hulp in te kopen
Zelfredzaamheid wordt gepresenteerd als een eigenschap van mensen, maar wordt gemeten aan de uitkomst. Wie geld heeft, koopt de hulp die hij nodig heeft en heet zelfredzaam. Wie dat geld niet heeft, moet dezelfde taak zelf doen en heet afhankelijk zodra het misgaat. Iedereen heeft soms hulp nodig, dus het onderscheid zit niet in de behoefte maar in de betaalbaarheid. Datzelfde patroon keert terug zodra bescherming iets kost, in tijd, kennis of geld.
Dezelfde meetlat voor de overheid en de app in je broekzak
We maken ons druk over de overheid die op Amerikaanse cloud draait, terwijl een gewone verenigings- of scan-app je paspoortfoto binnen een minuut op diezelfde cloud kan zetten. De verontwaardiging staat niet in verhouding tot wat particuliere apps met je biometrie en identiteitsbewijs doen. Leg beide langs dezelfde meetlat, anders meet je selectief.
We maken ons druk over de overheid die op Amerikaanse cloud draait. Terecht, dat is een reële zorg. Maar in dezelfde week installeert dezelfde verontwaardigde burger een verenigingsapp of een scan-app die zijn paspoortfoto binnen een minuut op precies diezelfde cloud zet. Over dat tweede hoor ik bijna niemand. De ophef en het feitelijke risico lopen niet gelijk op.
Dat wringt, want de data die zo'n app aanraakt is van het zwaarste soort. Een pasfoto is biometrie. Een identiteitsbewijs is de sleutel tot je hele administratieve bestaan. Als het een schandaal is dat de staat gevoelige gegevens bij een Amerikaanse verwerker onderbrengt, dan is het minstens zo ernstig als een klein bedrijf jouw biometrie daar neerzet, met minder toezicht en zonder dat iemand ernaar kijkt. De verontwaardiging staat niet in verhouding tot wat particuliere apps met je biometrie en je identiteitsbewijs doen.
Mijn stelregel is simpel. Leg beide langs dezelfde meetlat. Doe je dat niet, dan meet je selectief, en selectief meten levert een vertekend beeld op waar niemand iets aan heeft. Wat bij de overheid een schandaal heet, is bij een app in je broekzak vaak precies hetzelfde, alleen minder zichtbaar.
Consistent meten heeft een duidelijk criterium. Het gevoeligheidsniveau van de data bepaalt de norm. Wie de verwerker is, doet er voor die norm niet toe. Een pasfoto weegt even zwaar of hij nu door een ministerie of door een hobbyclub naar de cloud wordt gestuurd. De identiteit van de afzender verandert niets aan de gevoeligheid van wat er verstuurd wordt. Zo telt het even zwaar voor de staat als voor de bouwer van een scan-app. Dat is de enige manier om eerlijk te blijven, want anders past je oordeel zich stiekem aan aan hoe zichtbaar of hoe groot de partij is.
Er zit een reden in waarom de app aan de aandacht ontsnapt, en die reden maakt het probleem erger. De overheid staat onder permanent toezicht. Er is een Autoriteit Persoonsgegevens, er zijn Kamervragen, er is pers die meekijkt. Een fout bij de staat wordt groot uitgemeten, en dat hoort ook zo.
Een kleine app heeft niets van dat alles. Geen journalist leest het netwerkverkeer van een verenigingsapp. Geen toezichthouder opent hem standaard. De gebruiker ziet alleen een scherm dat werkt. Onder dat scherm gaat de pasfoto naar een backend die bij een Amerikaanse aanbieder staat, en niemand merkt het. De onzichtbaarheid is precies wat het gevaarlijk maakt. Waar de burger geen uitweg heeft en waar niemand kijkt, stapelt het risico zich ongestoord op. Dat werk ik uit in De sterkste bevindingen liggen achter DigiD en vitale publieke diensten.
De verhouding is daarmee scheef op twee assen tegelijk. De overheid krijgt veel aandacht en heeft veel toezicht. De kleine app krijgt weinig aandacht en heeft weinig toezicht. Als je alleen op de aandacht afgaat, zou je denken dat het risico bij de overheid het grootst is. Kijk je naar wat er feitelijk met gevoelige data gebeurt en hoe weinig ogen daarop gericht zijn, dan schuift het beeld. De plek met de minste controle is vaak de plek waar de meeste risico's onopgemerkt blijven. Dat is een reden om juist daar te meten, want daar valt het meeste te vinden dat nog niemand heeft gezien.
Het helpt om twee vragen apart te stellen, want ze worden voortdurend door elkaar gehaald. De eerste vraag is hoe gevoelig de data is. Dat bepaalt de lat. De tweede vraag is waar de data heen gaat en onder welke jurisdictie die valt. Dat bepaalt het extra risico van bijvoorbeeld toegang door een buitenlandse overheid.
Die twee assen mag je niet in één oordeel platslaan. Een pasfoto op een EU-server blijft een pasfoto en vraagt zorg. Een pasfoto op een Amerikaanse server vraagt diezelfde zorg plus de vraag wie er in dat land bij kan. Ik houd die assen bewust los, omdat je anders of de gevoeligheid of de jurisdictie laat wegvallen tegen de andere. Dat werk ik uit in Waar het pakket landt en wie het kan vorderen zijn twee assen. En hosting binnen de EU is op zichzelf geen vrijwaring, want de zeggenschap over een dienst kan alsnog buiten de EU liggen. Dat staat in In Europa gehost is geen vrijwaring.
Er is een reden dat ik de pasfoto en het identiteitsbewijs telkens als voorbeeld neem, en die reden verdient het om uitgesproken te worden. Biometrie is onomkeerbaar. Een wachtwoord dat lekt, kun je vervangen. Een bankpas kun je laten blokkeren. Je gezicht kun je niet resetten. Als een biometrisch kenmerk eenmaal bij een verwerker staat en van daaruit verder verspreidt, is er geen handeling die dat terugdraait. Het staat er, en het blijft van jou herkenbaar, voor de rest van je leven.
De AVG plaatst biometrische gegevens die dienen voor unieke identificatie daarom in een bijzondere categorie, met een streng regime en een verbod als uitgangspunt dat alleen onder specifieke voorwaarden wijkt. Dat is geen willekeurige juridische keuze. Het volgt uit precies die onomkeerbaarheid. Wie zulke gegevens verwerkt, draagt een zwaardere bewijslast dat het mag, dat het nodig is, en dat het veilig gebeurt.
Leg dat naast een scan-app die je paspoortfoto naar de cloud stuurt. De app raakt de zwaarste categorie persoonsgegevens die de wet kent, en doet dat vaak zonder dat de gebruiker doorheeft dat de foto het toestel verlaat. Dat de app klein is, verlaagt de categorie van de data niet. De onomkeerbaarheid van je gezicht hangt niet af van de omvang van de partij die het verstuurt. Juist omdat de app onzichtbaar opereert, is de kans klein dat iemand ingrijpt voordat de foto zich al heeft verspreid.
Voor mij is dit de reden dat ik overheidssystemen en particuliere apps met hetzelfde gereedschap onderzoek. Dezelfde netwerkopname, dezelfde vraag naar wat er verstuurd wordt en naar welke partij, dezelfde weging op gevoeligheid. Ik geef de app geen korting omdat hij klein is, en ik geef de overheid geen extra draai omdat die groot en zichtbaar is. De meetlat ligt vast voordat ik weet wie ik meet. Dat is een bewuste volgorde. Als ik eerst kijk wie de verwerker is en daarna pas oordeel, sluipt de identiteit van de partij mijn weging in, en dan meet ik precies zo selectief als ik anderen verwijt.
Dat brengt een ongemak met zich mee, want het betekent dat ik soms een kleine club of een goedbedoelde app langs dezelfde harde lat leg als een ministerie. Dat voelt onrechtvaardig voor de maker, die niet wist wat zijn SDK deed. Toch is het de enige eerlijke keuze, want de gebruiker van wie de pasfoto wegloopt heeft niets aan de goede bedoelingen van de bouwer. Of ik het recht heb om daar een oordeel over te vellen, is een vraag die ik apart onder ogen zie in Wie ben ik om iets te vinden? Ik draai het om.
Eigen onderzoeksdossier: fastid, 2026-07-04scan-app stuurt gezichtsbeelden naar een Amerikaanse gezichtsvergelijkingsdienst
Eigen onderzoeksdossier: pec zwolle, 2026-07-02verenigingsapp zet paspoortgegevens server-side bij de leverancier
beginselnotitieOverheid, toezicht en de wetverwant
De juridische rol die een partij zichzelf toekent, zegt niets over wat ze feitelijk doet
Bedrijven benoemen zichzelf in hun eigen documentatie tot verwerker, dienstverlener of doorgeefluik, en dat etiket houdt ze uit registers en buiten aansprakelijkheid. Het etiket beschrijft de contractuele relatie, niet de handeling. Bepalend is de feitelijke invloed op doel en middelen. Een definitie met een uitzondering erin wordt bovendien vanzelf een ontwerpruimte, want partijen richten zich precies zo in dat ze erbuiten vallen.
In elk privacydossier duikt op enig moment de zin op dat een partij slechts verwerker is. Soms staat er dienstverlener, doorgeefluik of technische leverancier. Het is bijna altijd de partij zelf die dat opschrijft, in haar eigen voorwaarden of documentatie.
Dat etiket beschrijft de contractuele relatie met de opdrachtgever. Het beschrijft niet wat er feitelijk gebeurt. En alleen dat laatste bepaalt de juridische rol, want de AVG kijkt naar wie doel en middelen bepaalt, niet naar wat er in de overeenkomst staat.
Er zijn drie waarnemingen die een zelfverklaarde verwerker ontmaskeren, en ze zijn alle drie van buitenaf te doen.
Hergebruikt de partij de waarneming voor eigen modellen? Wie de gegevens van jouw bezoekers gebruikt om zijn eigen profielen, doelgroepen of fraudescores te verbeteren, dient een eigen doel. Dat staat vaak gewoon in de voorwaarden, in de alinea onder het kopje verbetering van onze diensten.
Bouwt de partij profielen over opdrachtgevers heen? Een verwerker houdt de gegevens van klant A gescheiden van die van klant B. Zodra dezelfde identifier bij beide klanten naar dezelfde persoon wijst, is er een gezamenlijke laag en dus een eigen doel.
Haalt de partij meer op dan het gestelde doel vraagt? Wie voor een bezoekersteller ook het toesteltype, de provider en de volledige adresregel meeneemt, verzamelt niet in opdracht maar naar eigen inzicht.
Bij vrijwel elk advertentie-, identiteits- en analysebedrijf is minstens één van deze drie waar.
Er zit een tweede mechanisme onder, en dat is het interessantere.
Zodra een definitie een uitzondering bevat, ontstaat daar een ruimte waar partijen naartoe bouwen. Niet uit kwade wil, maar omdat de uitzondering goedkoper is dan de hoofdregel. Een categorie die buiten de registerplicht valt, is een categorie waarin je je bedrijf wilt inrichten.
Behandel een zelfverklaarde rol als een claim, niet als een uitkomst. Schrijf niet dat partij X verwerker is, maar dat partij X zichzelf verwerker noemt, en zet er de waarneming naast die daarmee botst. Dan staat het etiket in het stuk als onderwerp van onderzoek, en niet als de conclusie ervan.
Een toets met meerdere criteria hoort een EN-poort te zijn, geen gemiddelde
Zodra een beoordelingskader meerdere vragen kent, ontstaat de neiging ze te wegen en op te tellen. Dan compenseert een hoge score op het ene punt een onaanvaardbare uitkomst op het andere, en komt er alsnog een voldoende uit. Bij vragen die elk op zichzelf een grens bewaken werkt dat niet: elk antwoord moet afzonderlijk ja zijn, of het antwoord is nee. Dat verschil bepaalt of een kader iets tegenhoudt of alles doorlaat.
Zodra een beoordelingskader meer dan één vraag stelt, komt de rekenmachine tevoorschijn. Vijf criteria, elk een score, een weging erbij, en er rolt een cijfer uit. Het voelt genuanceerd en het is bestuurlijk prettig, want er is altijd een uitkomst.
Het is ook de meest voorkomende manier om een norm zijn werking te ontnemen. Wegen en optellen betekent dat een hoge score op het ene punt een onaanvaardbare uitkomst op het andere kan compenseren. Wie op vier van de vijf criteria uitstekend scoort en op de vijfde volledig zakt, komt er met een ruime voldoende uit. En dat vijfde criterium was nou net degene die er als grens in stond.
Er zijn twee soorten criteria en ze verdragen elkaar niet in dezelfde som.
Kwaliteitscriteria beschrijven hoe goed iets is. Die mag je middelen. Een site die snel laadt en goed leesbaar is, compenseert daarmee een minder mooie vormgeving.
Drempelcriteria bewaken een grens. Die mag je niet middelen. Is er een geldige grondslag, ja of nee. Is er toestemming gevraagd voordat er werd geplaatst, ja of nee. Kan de gebruiker weigeren en werkt dat, ja of nee. Elk van die vragen moet afzonderlijk met ja te beantwoorden zijn, of het antwoord op het geheel is nee.
De fout ontstaat doordat beide soorten in hetzelfde formulier staan en er dus hetzelfde uitzien.
Omdat een EN-poort onaangename uitkomsten geeft. Hij levert veel nee's, hij maakt geen ranglijst en hij laat zich niet als voortgang presenteren. Een gewogen cijfer is bestuurlijk bruikbaar, want het beweegt.
Dat is precies waarom de keuze tussen die twee vormen geen technische keuze is maar een besluit over wat het kader moet doen: iets tegenhouden, of iets meten.
Zien is een novelle die ik schreef vanuit mijn angststoornis. Ze volgt een engineer in Utrecht die in een database een bericht vindt dat er nooit had mogen staan, van iemand die een week later overleed. De tekst staat er zeven jaar later nog, door een technische beslissing die hij allang vergeten was. Dat is precies wat ik in mijn werk meet, alleen dan van binnenuit.
Ik heb een novelle geschreven, Zien, en ze komt rechtstreeks uit mijn angststoornis. Dat klinkt zwaar, en zo is het ook begonnen. Er was een gedachte die niet wegging. Wat als iets wat ik ooit heb gedaan, of juist heb nagelaten, gevolgen heeft die ik nooit heb gezien. Geen fout die meteen zichtbaar wordt en die je kunt herstellen, maar een die stil blijft liggen en pas jaren later een gezicht krijgt.
Een angststoornis werkt zo. Ze pakt een mogelijkheid die je niet kunt uitsluiten en behandelt die als zekerheid. Je kunt niet bewijzen dat er niets ligt, dus ligt er iets. Ik weet inmiddels dat die redenering niet klopt, en toch kan ik hem van binnenuit navoelen. De sprong van "het kan niet worden uitgesloten" naar "het is waar" voelt op het moment zelf als logica. Pas van een afstand zie je dat er een gat in zit. Het schrijven was een manier om die gedachte een vorm te geven, zodat ik ernaar kon kijken in plaats van erin te zitten.
Zien volgt een engineer in Utrecht. Hij vindt in een database een bericht dat er nooit had mogen staan. Het is van iemand die een week later overleed. De tekst staat er zeven jaar later nog steeds, omdat hij hem zelf heeft bewaard, met een technische beslissing die hij allang vergeten was.
Dat is de hele kiem. Een klein besluit, ooit genomen zonder er lang bij stil te staan, dat blijft bestaan buiten de tijd waarin het nog betekenis leek te hebben. De engineer heeft niets kwaads gedaan. Hij heeft een regel opgeslagen die opgeslagen kon blijven. Het gewicht komt pas als hij het terugvindt en beseft dat het al die jaren daar lag, onaangeraakt, terwijl de persoon aan wie het toebehoorde er niet meer is.
Ik houd het bewust bij deze omtrek. Ik ga de plot hier niet verder invullen dan wat er staat, want dat is het verhaal en niet deze notitie. Waar het mij om gaat is de vorm van de angst, en die zit al helemaal in die ene vondst. Een spoor dat niemand meer beheert, dat blijft omdat vergeten makkelijker is dan wissen, en dat op een dag terugkijkt.
In mijn onderzoek meet ik precies dit, alleen van de andere kant. Ik stel vast dat gegevens blijven bestaan nadat hun bewaartermijn is verstreken. Ik zie dat een identifier die jaren geleden werd gezet, nog steeds meereist. Ik laat zien dat wat je niet opslaat, ook niet kan lekken, en dat het omgekeerde net zo hard geldt. Wat wel is opgeslagen, blijft liggen tot iemand het opruimt, en meestal ruimt niemand het op.
In het werk is dat een technische constatering. Een veld in een database, een datum die is overschreden, een regel die er nog staat. Koel, meetbaar, af te vinken in een rapport. In de novelle draag ik dezelfde constatering naar binnen en geef ik haar een gezicht. Daar is de nog bestaande regel geen bevinding in een tabel. Ze is iets dat een mens zeven jaar later nog aankijkt.
Dat is denk ik waarom het verhaal uit de angststoornis kon komen en niet uit het werk alleen. Het werk levert het feit. De angst levert de betekenis die het feit voor een mens heeft. Beide beschrijven hetzelfde mechanisme, data die achterblijft. Ze verschillen alleen in of je het van buitenaf telt of van binnenuit voelt. Mijn metingen tellen het. De novelle voelt het. Het is dezelfde waarheid, twee keer bekeken.
Waarom ik nuchter blijf meten en toch dit schreef¶
Er is een spanning die ik niet wil gladstrijken. Als onderzoeker houd ik mezelf streng aan wat ik kan aantonen. Ik label bevindingen op bewijsniveau. Ik zwak af wat ik niet hard kan maken. De angststoornis doet het omgekeerde. Ze maakt van een fragment een ramp en van een vermoeden een zekerheid. Op papier zijn dat tegenpolen.
Toch zitten ze in mij naast elkaar, en ik denk dat het een het ander scherpt. De discipline van het meten houdt de angst in toom, want ze dwingt me te vragen wat ik werkelijk zie. En de angst houdt de discipline wakker, want ze weet welk gewicht een droog feit kan dragen zodra er een mens achter zit. De novelle is de plek waar ik die twee bij elkaar laat komen zonder dat de een de ander overschreeuwt.
Realistische Black Mirror. Geen science fiction, geen technologie die nog niet bestaat, geen twist waarin alles anders blijkt. Alles in Zien kan vandaag. Wat de engineer terugvindt, staat op dit moment in honderden Nederlandse databases, verspreid over diensten die niemand meer actief beheert.
Ik koos die toon omdat het nuchtere de angst juist scherper maakt. Een verzonnen dystopie kun je op afstand houden. Je sluit het boek en het is niet jouw wereld. Dit is nog het huis. De verontrusting komt niet van een toekomst die op ons afkomt. Ze komt van een heden dat we al hebben gebouwd en dat gewoon blijft draaien. Precies dat is wat mijn metingen ook laten zien, en precies dat wilde ik in een verhaal kunnen leggen zonder een cijfer te noemen. Een lezer die geen HAR-bestand kan lezen, voelt in een verhaal wat een overschreden bewaartermijn betekent.
De titel heeft voor mij een dubbele bodem. Mijn werk bestaat uit zien. Ik maak zichtbaar wat verborgen meereist, een identifier in een biedstroom, een regel die de bewaartermijn heeft overleefd. Het is de hele inzet van wat ik doe, dat iets wat ongezien zijn werk deed, alsnog wordt gezien.
In de novelle keert dat om. Daar is zien geen keuze en geen methode. Het is iets wat de engineer overkomt. Hij wilde het niet vinden. Het bericht kijkt hem aan, en vanaf dat moment kan hij niet meer doen alsof hij het niet weet. Zien wordt daar een last, iets wat je draagt zodra je het eenmaal hebt gedaan.
En er is de lezer, die ik wil laten zien wat anders een abstractie blijft. Een overschreden bewaartermijn is een begrip. Een bericht van iemand die een week later stierf, zeven jaar later nog aanwezig, is een beeld. Het verhaal doet zijn werk als de lezer daarna zijn eigen sporen anders bekijkt. Drie keer zien, en elke keer wil ik dat het blijft hangen.
Het schrijven veranderde iets aan hoe ik mijn metingen lees. Een overschreden bewaartermijn is voor mij niet meer alleen een regel in een rapport. Ik weet nu welk gewicht diezelfde regel kan dragen als er een mens achter zit. Dat maakt me niet minder nuchter in het meten. Het maakt me alleen preciezer in het uitleggen waarom het ertoe doet, en geduldiger met wie het cijfer niet vanzelf voelt.
En het gaf de angst een plek. Zolang de gedachte alleen rondging, was ze een last die niets opleverde. Toen ze een engineer in Utrecht werd, een database en een bericht van zeven jaar oud, werd ze iets dat ik kon bekijken en aan een ander kon laten zien. Dat is denk ik het meeste wat je van een angststoornis kunt vragen. Niet dat ze verdwijnt, maar dat ze ergens naar wijst dat waar is, en dat je dat aan iemand kunt doorgeven.
Mick Beer, "Zien", novelle, 2026de tekst zelf, geschreven vanuit de eigen angststoornis
geverifieerdessayzekerRTB, adtech en brokersbronnenverwant
De locatiedatahandel draait op een handvol vaste spelers
Achter de advertentiemarkt zit een kleine, vaste groep locatie-databrokers die via meegeleverde SDK's de positie van miljoenen toestellen verzamelen en doorverkopen. Ze staan zelden op een website, maar reizen mee in gewone apps. Wie de spelers kent, herkent het patroon overal terug.
Achter de advertentiemarkt zit een kleine groep locatie-databrokers. Zij verzamelen via meegeleverde SDK's de positie van miljoenen toestellen en verkopen die door. Ze staan zelden op een website waar je ze zou tegenkomen. Ze reizen mee in gewone apps, als bouwsteen die de maker erin zette voor een paar cent per gebruiker.
Dat is het patroon in een zin. De partij die je locatie krijgt, heeft geen relatie met jou en vaak niet eens met de app die je opende. Ze is meegeleverd. De ontwikkelaar wilde een kaartje, een advertentie of een analytics-functie, koos een kant-en-klare SDK, en die SDK bracht een datastroom naar een broker mee als onderdeel van de deal. De positie van het toestel is de betaling.
Wat een databroker is en hoe hij aan je positie komt¶
Een databroker verkoopt data over mensen zonder ooit een dienst aan die mensen te leveren. Voor locatie werkt dat via de software development kit, de SDK. Dat is een kant-en-klaar stuk code dat een ontwikkelaar in zijn app plakt om een functie snel werkend te krijgen. De broker biedt zo'n SDK gratis of goedkoop aan, en in ruil stuurt de SDK de locatie van het toestel door naar de broker.
Voor de ontwikkelaar is dat aantrekkelijk. Hij krijgt een werkende functie zonder die zelf te bouwen, en soms zelfs een kleine vergoeding per gebruiker. Voor de broker is het aantrekkelijker. Hij hoeft zelf geen populaire app te bouwen en geen gebruikers te werven. Hij levert een handige component aan honderden ontwikkelaars, en elk van die apps wordt een aanvoerkanaal. De positie van miljoenen toestellen stroomt zo binnen langs kanalen die geen van de gebruikers ooit heeft gekozen.
Ik legde een index van honderden apps naast de bekende broker-SDK-lijsten. Dezelfde spelers keren steeds terug.
X-Mode, dat inmiddels Outlogic heet en van de Amerikaanse toezichthouder FTC een verbod kreeg op het verkopen van gevoelige locatiedata.
Gravy en Venntel, die locatiedata leverden aan Amerikaanse overheden.
Daarnaast OneAudience, Sense360, SignalFrame, Fysical, Placed en Predicio.
Wie die namen kent, herkent het patroon overal terug. Dat is de waarde van een lijst. De eerste keer dat je een SDK-domein ziet, zegt het je niets. Nadat je de handvol vaste leveranciers eenmaal hebt gezien, springt hun aanwezigheid in een nieuwe app er meteen uit. Je hoeft het wiel niet elke keer opnieuw uit te vinden, want de leveranciers zijn grotendeels dezelfde gebleven.
Bewijsniveau: het terugkeren van deze namen in een index van apps is gemeten. Wat een broker vervolgens met de binnengekomen locatie doet, aan wie ze doorverkoopt en tegen welke prijs, is afgeleid uit wat over deze partijen publiek bekend is. Daaronder valt het FTC-optreden tegen X-Mode en de eerder gedocumenteerde leveringen door Gravy en Venntel aan overheden. Dat laatste heb ik niet zelf aan het verkeer afgelezen. Ik heb de aanwezigheid van de SDK gemeten en de rest gelezen in openbaar materiaal over deze bedrijven.
De app die je opent, is zelden het echte probleem. Het gevaar zit in de meegeleverde bouwsteen. Die praat langs de app om naar de broker. De app is de drager, de SDK is de passagier, en de passagier heeft zijn eigen bestemming. De kaartfunctie werkt zoals beloofd, en ondertussen vertrekt je positie langs een tweede spoor dat op het scherm nergens te zien is.
Zo ontstaat een stroom die geen van de zichtbare partijen helemaal overziet. De gebruiker kent de app. De app-maker kent de SDK en misschien een regel in de voorwaarden. Alleen de broker kent de volledige weg, want die staat aan het eind ervan. De broker verkoopt door aan wie betaalt, tot en met overheden, en de gebruiker heeft de naam van de broker nooit gezien, laat staan er een keuze over gekregen.
Dat is precies wat deze handel zo hardnekkig maakt. Elke schakel kan naar de volgende wijzen. De app-maker wijst naar de SDK-leverancier. De SDK-leverancier wijst naar zijn klanten. De verantwoordelijkheid verdampt in de keten, terwijl de data er wel doorheen blijft lopen.
Een broker-SDK aantreffen in een app betekent dat de bouwsteen is ingebouwd. Het betekent niet automatisch dat er in dit geval ook echt locatie is verzonden. Een SDK kan aanwezig zijn en toch stil blijven, bijvoorbeeld omdat de gebruiker geen locatietoestemming gaf of omdat een functie niet werd geraakt. Andersom kan een app schoon lijken in een statische scan en pas onder gebruik gaan zenden, wanneer een scherm wordt geopend dat de SDK activeert.
Daarom houd ik twee dingen los. De aanwezigheid van een bekende broker-SDK is een sterk signaal en een reden om beter te kijken. Het bewijs dat data daadwerkelijk wegging, komt pas uit het verkeer zelf, uit de verbindingen die het toestel tijdens gebruik maakt. Een naam in de code opent het onderzoek, ze sluit het niet. Wie de aanwezigheid van de SDK meteen als bewijs van verzending presenteert, springt over een stap heen die hij nog moet zetten.
De hele constructie is zo gebouwd dat ze onzichtbaar blijft voor wie de app gebruikt. De SDK draait op de achtergrond, vaak op het moment dat de app toch al locatie mag gebruiken voor zijn zichtbare functie. Het toestel vraagt een keer toestemming voor locatie, de gebruiker geeft die voor het kaartje of het weer, en dezelfde toestemming dekt de stille stroom naar de broker mee af.
Op het scherm is er niets te zien. Geen naam, geen logo, geen melding dat de positie het toestel verlaat richting een partij waarvan de gebruiker nooit heeft gehoord. De keuze die de gebruiker denkt te maken, gaat over de app. De stroom die hij niet ziet, gaat naar de broker. Daartussen zit geen scherm dat het verschil toont.
Dat is waarom een meting hier nodig is. Wat je met het blote oog niet kunt waarnemen, moet je uit het verkeer halen. De aanwezigheid van de SDK en de bestemming van de stroom worden pas zichtbaar als je meekijkt op het niveau waar de app en de gebruiker allebei niet kijken.
Een enkele app zegt weinig. Vind je in een app een broker-SDK, dan heb je een geval en niet meer dan dat. De maker kan de SDK verwijderen, de broker kan verdwijnen, de conclusie blijft klein.
De waarde zit in de index. Pas als je honderden apps tegen de brokerlijsten legt, verandert het beeld. Dan zie je dat het over een markt met vaste leveranciers gaat, die via steeds dezelfde handvol namen aftakt uit een groot aantal onderling onverwante apps. Losse incidenten worden een structuur zodra je ze op een hoop legt. Het patroon is de bevinding. Het losse geval is er alleen de bouwsteen van.
Dat is meteen de grens van deze meting. Ik kan laten zien dat de spelers klein in aantal en vast in samenstelling zijn, en dat ze breed meereizen door onverwante apps heen. Ik kan uit de index alleen niet de complete afzetketen van elke broker uittekenen. Waar hun data uiteindelijk belandt, tot en met overheden, steunt op wat publiek over deze partijen bekend is en op het patroon dat de index blootlegt.
FTC-handhaving tegen X-Mode Social en Outlogichet verbod op de verkoop van gevoelige locatiedata
Openbare SDK-lijsten van locatie-databrokersde index waartegen ik honderden apps heb gelegd
gedachtenotitieOverheid, toezicht en de wetverwant
Een toezichthouder die geen oordeel velt, laat de bestaande praktijk winnen
Uitblijvende duidelijkheid oogt als voorzichtigheid en voelt als neutraliteit. In de praktijk werkt ze maar één kant op: zolang niemand zegt dat iets niet mag, blijft het draaien, en draagt de gebruiker het risico terwijl de aanbieder doorgaat. Wie moet oordelen en dat jaren uitstelt, neemt feitelijk het standpunt in van de partij die niets hoeft te veranderen. Een besluit dat uitblijft is een uitkomst en hoort ook zo geteld te worden.
Wie publiceert dat er niets vertrekt, moet eerst bewijzen dat zijn meting het wél zou vinden
Een schone meting kan twee dingen betekenen: er gebeurt niets, of je instrument kijkt de verkeerde kant op. Van buitenaf zijn die twee niet te onderscheiden, en juist een nulmeting wordt gepubliceerd als geruststelling. De oplossing is een positieve controle: laat dezelfde detector eerst los op materiaal waarvan vaststaat dat het besmet is. Pas als hij daar aanslaat, telt zijn stilte op het nieuwe materiaal.
Er is een soort bevinding die makkelijker te publiceren is dan alle andere: de nulmeting. Ik heb gekeken en er gaat niets meer weg. Zo'n uitkomst leest als opluchting, wordt gretig overgenomen en zelden nagerekend.
En hij is dubbelzinnig. Een detector die niets vindt, zegt één van twee dingen. Of er is niets. Of hij kijkt de verkeerde kant op, zoekt naar het verkeerde patroon, of draait op materiaal dat de gebeurtenis niet bevat. Van buitenaf zien die twee er identiek uit.
Dat is geen theoretisch risico. Precies op het moment dat een organisatie meldt dat iets is uitgezet, ga je meten om die belofte na te lopen. Je bent dan aan het zoeken naar iets waarvan de ander zegt dat het weg is, met gereedschap dat je zelf hebt afgesteld.
De oplossing komt uit het laboratorium en heet daar de positieve controle. Voordat je conclusies verbindt aan een negatieve uitslag, laat je hetzelfde instrument los op materiaal waarvan vaststaat dat het besmet is.
In de praktijk betekent dat: bewaar je oude opnames. Vind je in een nieuwe meting niets, draai de detector dan eerst over de opname van vóór de reparatie, waarin je zeker weet dat de tracker zat. Slaat hij daar aan, dan is zijn stilte op het nieuwe materiaal een bevinding. Slaat hij daar niet aan, dan heb je zojuist je eigen gereedschap gerepareerd in plaats van een nieuwsbericht geschreven.
Dit kost vijf minuten en het is het verschil tussen een gepubliceerde bevinding en gepubliceerd vertrouwen in je eigen gereedschap.
Waarom dit bij nulmetingen zwaarder telt dan bij vondsten¶
Bij een vondst corrigeert de werkelijkheid je vanzelf. Je noemt een partij, die partij reageert, en een fout in je detectie komt boven water.
Bij een nulmeting gebeurt dat niet. Niemand meldt zich om te zeggen dat je hem ten onrechte hebt vrijgepleit. Een fout-negatief blijft staan, wordt geciteerd, en gaat een eigen leven leiden als bewijs dat het probleem is opgelost.
Wat ik in het stuk zet als de controle is gedaan: ik heb dezelfde detector eerst losgelaten op de opname van voor de reparatie, waarin de tracker aantoonbaar zat, en daar sloeg hij aan. Daarna vond hij op de nieuwe opname niets.
Wat ik erbij zeg als de controle niet kon: deze meting toont geen tracker, en ik heb niet kunnen vaststellen dat mijn opzet hem zou hebben gevonden. Behandel dit als een ondergrens.
De partijen die privacy keuren, zakken zelf voor de toets
Als er een sector zou moeten kloppen op privacy, is het de sector die privacy verkoopt. Toch zakken keurmerk- en certificeringspartijen zelf voor dezelfde toets: van negen geteste partijen belandden er meerdere op het niveau Privacy Lek, waaronder twee grote certificeerders. Ze preken water en drinken zelf wijn.
"Als er een sector zou moeten kloppen op het gebied van privacy, dan is het de sector die privacy verkoopt." Ik legde in de Nationale Privacy Index negen keurmerk-, certificerings- en adviespartijen langs dezelfde meetlat. De uitkomst: "'Ze preken water en drinken zelf wijn.' Het gezegde dat deze meting helaas bevestigt."
Bovenaan staat privacyfirst.nl (5 sterren), gevolgd door tuv-nederland.nl (4 sterren). Daaronder zakken drie partijen naar het niveau Privacy Lek: ictrecht.nl (2 sterren), dnv.com (1 ster) en kiwa.com (1 ster), waaronder twee grote certificeerders. Kiwa plaatste 4 trackingcookies voor de banner, met Meta Pixel (798048319601290), GA4 en AdSense; na weigeren bleven 13 trackers staan, in totaal 42 tracker-ID's. DNV plaatste een nieuwe cookie na weigeren, grondslagloos, via CNAME-cloaking op sgtm.dnv.com, met 31 tracker-ID's.
"Een keurmerk of een adviesfactuur zegt niets over hoe de uitgever zelf met jouw bezoek omgaat." De toets gebruikt zes NPI-dimensies (A Toestemming 25% tot F Transparantie 10%), gemeten op 1 juni 2026. Ik pas het principe ook op mezelf toe: "ook de meetlat hoort zichzelf te laten nameten, en een tegenspraak van een gemeten partij is een reden om te controleren, niet om te negeren." Na tegenspraak van Privacy Company voerde ik een meetcorrectie door. Wie privacy verkoopt, hoort de eigen norm te halen.
Zie ook soms staat de schending letterlijk in de code en overheidssites laden gewoon commerciele advertentietrackers.
bronnen
Nationale Privacy Indexmijn eigen meetinstrument: de zes dimensies, de weging en de score per organisatie
Meting van negen keurmerk-, certificerings- en adviespartijen, 1 juni 2026de ranglijst met privacyfirst.nl (5) en tuv-nederland.nl (4) bovenaan, en ictrecht.nl (2), dnv.com (1) en kiwa.com (1) op Privacy Lek
Meetcorrectie na tegenspraak van Privacy Companyde herziening die ik doorvoerde nadat een gemeten partij tegensprak
geverifieerdnotitiezekerOverheid, toezicht en de wetbronnenverwant
Achter je DigiD loopt de tracking gewoon door
De aandacht ging naar de publieke overheidssite, maar achter de DigiD-login draait de meting door, met fiscaal-persoonlijke context erbij. Juist op de plek waar je het minst te kiezen hebt, is de tracking het diepst. Inloggen beschermt je hier niet, het verzwaart de context.
Op de omgeving die je pas na inloggen met DigiD bereikt, staat een verhulde eerste-partij-hostnaam: adobe-analytics-dc.belastingdienst.nl. Die lijkt van de Belastingdienst zelf, maar wijst via een DNS-omleiding naar data.adobedc.net, de infrastructuur van Adobe in de Verenigde Staten. Het lijkt dus eigen, het is het niet.
Bij het openen van een aanslag en het starten of annuleren van een iDEAL- of Wero-betaling vertrekt een verslag: welke belasting het betreft, of hij openstaat, het jaar, en het startmoment van de betaling. Zelfs het omschakelen naar donkere modus wordt als gebeurtenis geregistreerd. Aan al die handelingen hangt een identifier die twee jaar meegaat.
Voor de eerlijkheid van de claim is dit even belangrijk: het bedrag, je BSN en je IBAN gaan aantoonbaar niet mee. Dit is geen lek van je rekeningnummer. Het is iets subtielers, en daardoor makkelijker te bagatelliseren: een gedrags- en handelingsprofiel, gekoppeld aan een persistente sleutel, bij een Amerikaans reclamebedrijf.
Dit is de Belastingdienst, het deel van de staat waar je het minst te kiezen hebt. Je moet betalen, je moet DigiD gebruiken. En het speelt in de omgeving rond de toeslagen, precies de plek die de overheid na de affaire zou herstellen. Waar de burger geen uitweg heeft, hoort de meetlat strenger te zijn, niet losser. Zie ook De sterkste bevindingen liggen achter DigiD en vitale publieke diensten.
Eigen onderzoeksdossier: forensics, 2026-05-30tracking op de toeslagenportalen, klantbeeld-bodies geextraheerd
geverifieerdessayzekerOverheid, toezicht en de wetbronnenverwant
Hoe gevoeliger de context, hoe langer de identifier meegaat
Je zou verwachten dat gevoeliger context tot voorzichtiger bewaren leidt. In de praktijk is het omgekeerd: hoe gevoeliger de omgeving, hoe langer de persistente identifier blijft leven. Precies de omgekeerde beweging van dataminimalisatie.
Je zou verwachten dat een gevoeliger omgeving tot voorzichtiger bewaren leidt. Hoe persoonlijker wat je doet, hoe korter een systeem je zou moeten onthouden. In de praktijk zie ik het omgekeerde. Hoe gevoeliger de context, hoe langer de persistente identifier blijft leven.
Dat is een verrassend patroon, want het staat haaks op de intuïtie én op de norm. Op de plek waar de terughoudendheid het grootst zou moeten zijn, is het geheugen het langst. Ik heb dat niet beredeneerd, ik heb het gemeten.
Dezelfde tracking-identifier leeft 399 dagen op de publieke site. Zodra je de beveiligde, ingelogde omgeving betreedt, wordt diezelfde identifier gezet met een houdbaarheid van twee jaar. De plek met de meest gevoelige handelingen krijgt dus de langste geheugenspan.
Dit is een gemeten bevinding. De houdbaarheidsdatum staat in het verkeer dat de server terugstuurt, en ik lees hem daar rechtstreeks af. Het is geen schatting en geen afleiding uit beleid. Het is de waarde die de server zelf aan de browser meegeeft.
Een cookie krijgt zijn levensduur mee in de Set-Cookie-header, via het attribuut Max-Age of Expires. Die waarde bepaalt hoe lang de browser het nummer bewaart en bij elk volgend bezoek terugstuurt. Zolang de cookie leeft, is het dezelfde sleutel naar hetzelfde dossier.
# Publieke site
Set-Cookie: _id=A-4821; Max-Age=34473600; Path=/ # 399 dagen
# Achter de login
Set-Cookie: _id=A-4821; Max-Age=63072000; Path=/ # twee jaar
De naam van de cookie is gelijk, de identifier is gelijk, alleen het aantal seconden verschilt. De keuze voor die twee jaar is een instelling die iemand heeft gezet. Een cookie krijgt niet vanzelf een langere levensduur omdat de omgeving gevoeliger is. Iemand heeft dat getal ingevuld.
De AVG legt twee beginselen vast die hier botsen met wat ik meet. Artikel 5 lid 1 onder c is minimalisatie: verwerk niet meer dan nodig. Artikel 5 lid 1 onder e is opslagbeperking: bewaar niet langer dan nodig voor het doel. Beide beginselen worden strenger naarmate de gegevens gevoeliger zijn. Een gevoelige context vraagt om korter bewaren, niet langer.
Wat ik meet is de tegenovergestelde reflex. De gevoeligere plek krijgt de langere levensduur. De norm zegt "strenger als het gevoeliger wordt", de instelling doet "ruimer als het gevoeliger wordt". Precies waar het het meest zou moeten kloppen, wijst het de verkeerde kant op. Dat de tracking achter een overheidslogin überhaupt doorloopt, werk ik uit in Achter de overheidslogin is helemaal geen toestemmingsvraag.
Waarom een persistente identifier het probleem is¶
Het woord persistent doet hier het werk. Een sessiecookie verdwijnt als je de browser sluit en is bedoeld om je binnen één bezoek aangelogd te houden. Een persistente identifier blijft staan, bezoek na bezoek, en juist daardoor kan hij een geschiedenis opbouwen. Elke keer dat je terugkomt, stuurt de browser hetzelfde nummer mee, en elke handeling die daaraan hangt, komt bij de vorige.
De levensduur van zo'n identifier bepaalt dus rechtstreeks hoe diep het geheugen reikt. Bij 399 dagen kan een systeem je gedrag over meer dan een jaar aan elkaar rijgen. Bij twee jaar reikt dat geheugen nog een jaar verder terug. Het getal is geen technisch detail. Het is de tijdspanne waarover je herkenbaar blijft als dezelfde persoon. En omdat het dezelfde identifier is als op de publieke site, is het bovendien de tijdspanne waarover de handelingen in de beveiligde omgeving gekoppeld kunnen worden aan het gedrag daarbuiten. Zie Een resetbare identifier is alsnog een sleutel: zolang de sleutel leeft, functioneert hij als sleutel, ongeacht of je hem in theorie zou kunnen resetten.
Een klein feit kan een scherp signaal zijn. De waarde van deze bevinding zit niet in de omvang van de schade, maar in wat het getal verraadt over de instelling erachter. Twee bewaartermijnen voor dezelfde identifier, en de langste hangt aan de gevoeligste omgeving. Dat is een keuze die tegen het uitgangspunt van dataminimalisatie ingaat, gemaakt op precies de plek waar het uitgangspunt het strengst zou moeten gelden.
Een klein feit is bovendien makkelijker te verdedigen dan een groot verwijt. Ik hoef niemand van opzet te betichten. Ik hoef geen schade aan te tonen. Ik leg twee getallen naast elkaar en wijs op het beginsel dat ze in verlegenheid brengt. Die bescheidenheid is een kracht. Wie een grote claim maakt, moet veel bewijzen en geeft de tegenpartij veel om op te schieten. Wie een klein, gemeten feit toont en het bij de betekenis daarvan laat, staat op grond die niet wegzakt.
Het weegt ook omdat het herhaalbaar en controleerbaar is. Iedereen kan de twee Set-Cookie-headers naast elkaar leggen en de seconden narekenen. Er is geen interpretatie nodig om het patroon te zien. Dat maakt het een klein feit dat standhoudt.
En het weegt omdat het iets zegt over de rest. Wanneer de bewaartermijn op de gevoeligste plek ruimer staat afgesteld dan op de publieke site, is dat een aanwijzing dat de gevoeligheid van de omgeving geen rol heeft gespeeld bij de instelling. De vraag die de norm stelt, of we hier wel zo lang moeten bewaren, is kennelijk niet gesteld. Dat is een reden om ook naar de andere instellingen in die omgeving te kijken, want een reflex die op dit punt de verkeerde kant op wijst, doet dat vaak op meer punten. Het cijfer is klein, het is ook een ingang.
Ik gebruik dit als voorbeeld van hoe de norm en de instelling elkaars tegengestelde kunnen zijn zonder dat iemand het merkt. Niemand kiest bewust "laten we bij gevoelige gegevens langer bewaren". Het gebeurt omdat de ingelogde omgeving nu eenmaal op ruimere bewaartermijnen staat afgesteld en de tracking daar simpelweg in meelift.
In mijn rapporten houd ik zulke bevindingen klein en precies. Ik noem het gemeten getal, ik noem het beginsel waar het tegenin gaat, en ik trek geen grotere conclusie dan de twee cijfers dragen. Zie Dezelfde meetlat voor de overheid en de app in je broekzak voor waarom ik daarbij overheid en commerciële app langs dezelfde lat leg.
Het bepaalt ook wat ik standaard meet. Bij elke omgeving noteer ik niet alleen welke identifiers er staan, maar ook hoe lang ze leven en of dezelfde identifier terugkeert op een andere plek. De vergelijking tussen de publieke en de ingelogde variant is daarbij de scherpste toets, want daar staat dezelfde partij tegenover zichzelf. Het verschil in bewaartermijn tussen die twee is een getal dat niemand kan wegpraten met een verhaal over gebruiksgemak, omdat het over precies dezelfde identifier gaat. Dat maakt het een bevinding die klein blijft en toch precies raakt waar de norm en de praktijk uiteenlopen.
AVG, artikel 9gegevens over gezondheid, geloof en seksuele gerichtheid kennen een zwaarder regime
geverifieerdessayzekerOverheid, toezicht en de wetbronnenverwant
Achter de overheidslogin is helemaal geen toestemmingsvraag
Op de plek achter de login is er niet eens een toestemmingsvraag om te negeren, hij ontbreekt volledig. De privacyverklaring belooft zorgvuldigheid, de meting toont het tegendeel. Geen keuze aanbieden is geen vergetelheid, het is een inrichting.
Het gesprek over cookies gaat bijna altijd over toestemmingsvragen die je wel krijgt en die weinig doen. De banner die je wegklikt. De weigerknop die drie klikken diep zit. De cookiemuur die over het aantal partners liegt. Zie De cookiemuur toont minder partners dan de code telt. Op de plek achter de overheidslogin is de situatie fundamenteler. Daar is niet eens een vraag om te negeren. Geen cookiebanner, geen toestemmingsplatform, geen enkel mechanisme dat je iets voorlegt.
Dat is het scherm dat je pas bereikt nadat je hebt ingelogd. De omgeving waar je je juist het veiligst waant, omdat je bent geauthenticeerd bij een overheidsdienst. Precies daar ontbreekt de keuze het meest volledig.
De meting is concreet. Achter de login worden tracking-cookies gezet en later weer uitgelezen, zonder dat er iets gevraagd wordt. Ik heb dit onder meer bij de Belastingdienst waargenomen. Bewijsniveau: gemeten. Ik lees het verkeer op de manier waarop een echte bezoeker het zou veroorzaken, niet zoals een kale scanner die de flow niet doorloopt. Zie Meet zoals een bezoeker, niet zoals een scanner. De cookies zijn er, ze worden geschreven, ze worden teruggelezen, en er is geen toestemmingsvraag aan voorafgegaan.
Het gaat hier om de aanwezigheid en het uitlezen van identifiers, aantoonbaar in het netwerkverkeer. Wat die identifiers verderop in een keten doen, is een aparte vraag met een eigen bewijslast. Zie De advertentieketen heeft schakels die niemand in de verklaring noemt. Wat ik hier vaststel, is beperkt en hard: op deze plek wordt niets gevraagd en wordt wel getrackt.
De manier van meten telt, omdat een kale scanner deze bevinding kan missen. Een scanner die de inlogstap niet doorloopt, komt nooit op het scherm achter de authenticatie. Hij ziet de publieke pagina, ziet daar netjes een banner of een keurige verklaring, en concludeert dat het klopt. De tracking zonder toestemmingsvraag zit juist op de plek die pas na inloggen bestaat. Om die te zien moet je de flow echt aflopen, met een sessie, zoals een ingelogde burger dat doet. Dat is de reden dat ik meet zoals een bezoeker en niet zoals een crawler die bij de voordeur blijft staan.
De regel staat in de Telecommunicatiewet, artikel 11.7a. Dat is de Nederlandse omzetting van de ePrivacy-richtlijn. Voor het plaatsen en uitlezen van gegevens op iemands apparaat is toestemming nodig. De wet kent uitzonderingen. Toestemming is niet vereist voor communicatie die technisch noodzakelijk is, en niet voor een cookie die strikt nodig is om een dienst te leveren waar de gebruiker om vraagt. Een sessiecookie die je ingelogd houdt, valt daar doorgaans onder.
Tracking-cookies vallen daar niet onder. Zij dienen niet de gevraagde dienst. Voor die categorie geldt de hoofdregel: eerst vragen, dan plaatsen. De AVG legt daar bovenop een grondslag- en informatieplicht. Waar de vraag volledig ontbreekt en de tracking toch loopt, is aan de hoofdregel niet voldaan.
Twee dingen versterken die norm in deze context. Ten eerste kent de AVG voor overheidsorganen geen toestemming als grondslag voor de eigenlijke taak, omdat het machtsverschil tussen burger en overheid vrije toestemming lastig maakt. Voor de tracking bovenop die taak is toestemming juist wel de aangewezen route, en die ontbreekt hier. Ten tweede is de Belastingdienst een verwerker van bijzonder gevoelige gegevens. De verplichting om zorgvuldig te zijn met wat er op het toestel wordt gezet, is daar hoger dan op een willekeurige commerciële site.
Een toestemmingsvraag valt niet uit de lucht. Iemand moet een banner bouwen, een toestemmingsplatform integreren, de logica schrijven die keuzes opslaat en respecteert. Waar die vraag ontbreekt, is dat werk niet gedaan. Dat is een uitkomst van hoe het systeem is ingericht. De afwezigheid is dus zelf een ontwerpkeuze, ook als niemand die keuze bewust als zodanig heeft opgeschreven.
Ik schrijf hier geen kwade opzet aan toe. Ik kan uit de meting niet aflezen waarom de vraag er niet is. Wat ik wel kan vaststellen, is dat de privacyverklaring zorgvuldigheid belooft en dat de code op dit punt iets anders laat zien. Die twee spreken elkaar tegen, en de code is de uitvoering. Juist achter de login, waar de context het gevoeligst is, hoort de lat hoger te liggen. Zie Hoe gevoeliger de context, hoe langer de identifier meegaat.
De ingelogde overheidsomgeving is een bijzondere plek. Je bent daar identificeerbaar bij naam, burgerservicenummer en dienst. De gegevens die je er invult, gaan over je inkomen, je toeslagen, je aanslagen. Dat is de context waarin de bescherming het hoogst hoort te zijn. Als daar zonder vraag getrackt wordt, is de belofte van de veilige, afgeschermde omgeving op dat punt niet waargemaakt.
Voor mijn werk betekent het dat ik de meest gevoelige schermen apart behandel. Ik meet ze zoals een ingelogde burger ze doorloopt, ik label wat ik zie als gemeten, en ik houd het vast aan de norm die daar geldt. Waar de burger geen alternatief heeft, want je moet nu eenmaal bij de Belastingdienst inloggen, is de plicht om het goed in te richten juist groter. Zie De sterkste bevindingen liggen achter DigiD en vitale publieke diensten.
Er zit ook een breder punt onder. Bij een commerciële site kun je nog zeggen dat de gebruiker wegloopt als het hem niet bevalt. Bij een overheidsdienst is weglopen geen optie. De aangifte moet gebeuren, de toeslag moet aangevraagd, de post in de berichtenbox moet gelezen. Dat gebrek aan een uitweg maakt de dienst tot een plek waar de burger zich moet blootgeven, of hij wil of niet. Op zo'n plek is stille tracking zonder vraag zwaarder te verdedigen dan waar dan ook. De afwezigheid van de vraag is er niet minder erg, ze is er erger.
Ik houd mijn conclusie hier bewust smal, want dat maakt haar sterk. Ik beweer niet dat de Belastingdienst je gedrag verkoopt of dat er een advertentieprofiel van je wordt gebouwd. Dat weet ik niet en dat meet deze waarneming niet. Ik beweer één ding: op de plek achter de login staat een tracking-mechanisme actief zonder dat er een toestemmingsvraag aan voorafging, terwijl de wet die vraag voor niet-functionele cookies eist. Dat is een concrete, controleerbare tekortkoming. Ze vraagt om een antwoord van de dienst, en om een keuze om de vraag alsnog te bouwen of de tracking te staken. Beide zijn haalbaar, want beide zijn een kwestie van inrichting.
Een meting van vandaag toont aanwezigheid, het archief toont duur
Een enkele meting kan altijd worden weggezet als momentopname of slordigheid. Publieke webarchieven maken van dezelfde vondst een reeks, en een reeks heeft een begindatum. Duur is het verschil tussen een fout en een werkwijze: iets dat jaren onafgebroken in de broncode staat, is telkens opnieuw bevestigd. Neem bij elke bevinding de vraag mee sinds wanneer die er staat, en behandel de archiefreeks als ondergrens.
Een meting beantwoordt de vraag of iets er is. Dat is de vraag waar mijn scanner voor is gebouwd, en het antwoord is hard: hier is de opname, hier staat het veld, dit is het tijdstip.
Zij beantwoordt niet de vraag hoe lang het er al staat. En juist die tweede vraag bepaalt hoe een bevinding wordt gelezen.
Op een enkele meting past altijd hetzelfde antwoord: dit is een momentopname, er is recent iets gewijzigd, we kijken ernaar. Dat antwoord is niet oneerlijk. Een configuratie kán gisteren fout zijn gegaan.
Een reeks maakt dat verweer onbruikbaar. Iets dat jaar na jaar in dezelfde broncode staat, is bij elke release opnieuw meegegaan, bij elke redesign overgenomen, bij elke leverancierswissel opnieuw ingericht. Dat is geen ongeluk meer. Het is een werkwijze, en die is telkens opnieuw bevestigd door mensen die ernaar keken.
Publieke webarchieven bewaren momentopnames van pagina's, inclusief de broncode. Wie de bevinding in de HTML kan aanwijzen, kan hem in het archief terugzoeken en zo een begindatum benaderen.
Drie regels horen erbij, want anders bewijst het te veel.
Het archief is een ondergrens, geen volledige geschiedenis. Het legt niet elke dag vast, en niet elk domein even vaak. Vind je de eerste treffer in 2015, dan staat vast dat het er in 2015 was, niet dat het er in 2014 niet was.
Het archief bewaart de HTML, niet het gedrag. Je ziet dat het fragment in de pagina stond. Je ziet niet of het die dag ook vuurde. Voor een script met een vaste laadregel is dat verschil klein, voor iets achter een schakelaar groot.
Noteer de gaten. Een reeks met een onderbreking van twee jaar is een andere bewering dan een onafgebroken reeks. Publiceer welke momentopnames je hebt gezien.
Wat ik schrijf als de reeks compleet is: dit fragment staat sinds ten minste die datum onafgebroken in de broncode, aangetroffen in zoveel archiefmomenten, met de langste onderbreking van zoveel maanden.
Geen dagen dus, en geen weken. Dat is een andere kop dan een gemeten fout, en het is dezelfde vondst.
beginselnotitieOverheid, toezicht en de wetverwant
Hoe snel een fout wordt hersteld, meet hoe lang hij onnodig heeft geduurd
Zolang een probleem niet is aangepakt, klinkt het verweer dat het complex is en tijd kost. Zodra er een extern signaal komt, blijkt de ingreep vaak binnen dagen te doen. Die hersteltijd is zelf een meetwaarde: zij toont wat de organisatie in elk van de voorgaande jaren ook had gekund. Noteer bij elke correctie hoeveel tijd er tussen melding en fix zat, en zet dat naast de duur van de situatie.
Wie niet kan zeggen welke gegevens zijn vertrokken, bewijst daarmee dat hij het niet bijhield
Een verklaring dat de omvang nog onduidelijk is, wordt meestal gelezen als voorbehoud. Het is een bevinding. Systemen die dit soort verkeer wel vastleggen, kunnen achteraf precies reconstrueren wat er is opgevraagd en door wie. De erkenning van onwetendheid stelt dus vast dat die vastlegging ontbrak, en dat is een controleerbare uitspraak over het ontwerp. Zet zulke uitspraken in de bevindingenkolom, niet in de nuancekolom.
geverifieerdessayzekerOverheid, toezicht en de wetbronnenverwant
Wie de staatsinlog levert, is zelf een privacyvraag
Wie de infrastructuur onder de staatsinlog levert, is een privacyvraag op zichzelf. De overheid wist maanden vooraf dat die leverancier onder buitenlandse controle zou komen, maar de toets kwam laat en langs de lichtste route. Governance en transparantie aan de eigen kant zijn hier de kern, geen buitenlands complot.
Achter de staatsinlog zit een leverancier. Wie die leverancier is en onder wiens recht hij valt, is een vraag op zichzelf. De inlog is de sleutel waarmee burgers bij hun overheid komen, voor hun belastingen, hun zorg, hun toeslagen. De partij die de infrastructuur eronder draait, heeft daarmee een positie die verder reikt dan die van een gewone dienstverlener.
Dit gaat niet over een buitenlands complot. Ik schrijf hier geen verhaal over een vijand die aan de knoppen zit. Het gaat over governance en transparantie aan onze eigen kant. De vraag is of de overheid tijdig en zwaar genoeg toetst wanneer de zeggenschap over die infrastructuur verschuift. Op dat punt is er iets te reconstrueren, en die reconstructie is het onderwerp van deze notitie.
De volgorde is af te leiden uit drie soorten openbaar materiaal. Regeringsbeantwoording aan de Kamer. Een concentratiemelding bij de ACM. En een Amerikaanse beurskennisgeving. Elk stuk voor zich zegt weinig. Samen tekenen ze een tijdlijn.
In maart 2025 meldde de vitale leverancier onder embargo aan de overheid dat hij verkocht zou worden aan een Amerikaans concern. De staat nam dat serieus genoeg om zelfs een tegenbod te overwegen. Het ging om partijen in de keten rond Logius, met namen als Solvinity en Kyndryl.
Bewijsniveau: deze volgorde is afgeleid, niet uit een enkel document overgeschreven. Ik heb de losse bronnen op elkaar gelegd en daar de tijdlijn uit gehaald. De kern ervan, dat de melding onder embargo in maart 2025 kwam en dat de overheid een tegenbod overwoog, steunt op regeringsbeantwoording. Dat maakt het navolgbaar en tegelijk afhankelijk van hoe volledig die beantwoording is. Wat niet aan de Kamer is gemeld, staat ook niet in mijn reconstructie.
Een melding onder embargo betekent dat de overheid de informatie kreeg met de afspraak haar vertrouwelijk te houden. Zo'n melding is het moment waarop de klok begint te lopen. De staat weet vanaf dat punt dat de zeggenschap over een vitale dienst gaat verschuiven, en heeft vanaf datzelfde punt de gelegenheid om te handelen.
Dat de overheid een tegenbod overwoog, laat zien dat ze het gewicht van de zaak zag. Je overweegt geen tegenbod voor iets wat je onbelangrijk vindt. Het signaal was er dus, en het is intern serieus genomen. Dat maakt de latere traagheid opvallender, want het gaat niet om een geval dat over het hoofd werd gezien. Het werd gezien en gewogen, en de zware toets kwam er alsnog pas veel later.
De veiligheidstoets startte pas begin 2026, bijna een jaar na de melding onder embargo. Dat is de eerste plek waar het wringt. De overheid had de informatie al in maart 2025 en handelde er pas veel later formeel naar.
De toets liep bovendien via de Telecomwet. De zwaardere Wet Vifo, die juist voor dit soort overnames van vitale aanbieders bestaat, bleef buiten beeld. Dat is de tweede plek. De Wet Vifo, de Wet veiligheidstoets investeringen, fusies en overnames, is gemaakt om te beoordelen of een overname de nationale veiligheid raakt. Voor de zeggenschap over vitale infrastructuur is dat het aangewezen instrument. Er werd gekozen voor de lichtere route in een geval waarvoor de zwaardere route bestaat.
En de mededingingstoets bij de ACM keek naar concurrentie. Digitale autonomie viel buiten dat kader, want de ACM beoordeelt of een overname de markt schaadt en beantwoordt geen vraag over wie de sleutel tot de staatsinlog in handen krijgt. Dat is de derde plek. Er was wel een toets, en die toets ging over iets anders dan waar de zorg zit.
Zo werd een vraag over de zeggenschap over vitale infrastructuur langs de lichtste beschikbare route afgedaan. Laat, en via kaders die de kern niet raken.
Dat een leverancier verkocht wordt, is op zichzelf gewoon. Bedrijven wisselen van eigenaar. Een Amerikaanse koper is niet automatisch een probleem, en ik ga hier ook niet beweren dat de dienst daarmee onveilig is geworden. Dat kan ik uit deze tijdlijn niet afleiden.
Wat mij verontrust, zit in het handelen van de overheid zelf. De staat wist het maanden vooraf en richtte de toets alsnog laat en licht in. De kwetsbaarheid zit in de traagheid en in de routekeuze. Een systeem dat een jaar wacht en dan het lichtste instrument pakt, is voorspelbaar voor wie de zeggenschap over vitale infrastructuur wil verschuiven. De zwakte ligt aan onze kant van de tafel, en dat is nu juist de kant die we zelf kunnen verbeteren.
Uit deze reconstructie volgt vanzelf hoe het beter kan, zonder dat ik een oordeel over de uitkomst hoef te vellen. Zodra een vitale leverancier onder embargo meldt dat de zeggenschap verschuift, is dat het startsein voor de zwaarste toets die van toepassing kan zijn. De vraag welk instrument past, hoort aan het begin gesteld te worden, op het moment van de melding, en niet pas als de deal rond is.
Bij een dienst die de sleutel tot de staatsinlog draagt, gaat de kernvraag over wie de zeggenschap krijgt en onder welk recht die partij valt. Marktschade is daarbij een bijzaak. Een toets die de zeggenschapsvraag expliciet beantwoordt, is het minimum. De Wet Vifo is daar het aangewezen kader voor, want die weegt de nationale veiligheid en gaat verder dan de concurrentie alleen.
En de tijd tussen weten en toetsen hoort kort te zijn. Elke maand dat de overheid de informatie heeft en de zware toets uitstelt, is een maand waarin de verschuiving doorloopt zonder dat de kernvraag is beantwoord. Snelheid is hier zelf een vorm van zorgvuldigheid.
Dit past in een groter thema. Bij een gewone app meet ik waar data heen gaat en onder welk recht die valt. Bij de staatsinlog gaat het om dezelfde vraag op het niveau van de infrastructuur. Onder wiens jurisdictie valt de partij die de sleutel draait, en wie let daarop. Het is dezelfde as van zeggenschap en recht, alleen een verdieping hoger.
Het leert me ook dat de bevinding hier aan de proceskant ligt en aan de techniek voorbijgaat. Ik heb geen lek in de inlog gemeten. Ik heb een reconstructie gemaakt van hoe de overheid met vroege kennis omging, uit publieke stukken die op elkaar zijn gelegd. Dat is een ander soort onderzoek dan een netwerkmeting, en het vraagt om dezelfde eerlijkheid over het bewijsniveau. Afgeleid uit bronnen, navolgbaar, en begrensd door wat die bronnen prijsgeven. De kracht van de bevinding zit in de traceerbare volgorde, en de grens ervan zit in alles wat onder embargo bleef.
En het bevestigt een gewoonte die ik in al mijn werk aanhoud. Een bevinding is zo sterk als het spoor eronder. Bij een app is dat spoor het onderschepte verkeer. Hier is het de regeringsbeantwoording, de concentratiemelding en de beurskennisgeving, drie bronnen die elk een stuk van de tijdlijn dekken en die elkaar op de overlap bevestigen. Waar ze zwijgen, zwijg ik mee. Dat is de prijs van eerlijk werk, en tegelijk is het wat de conclusie draagt. Ik beweer niet meer dan de drie bronnen samen dragen, en juist daardoor blijft staan wat ik wel beweer.
Een weerlegging telt pas als zij de gepubliceerde versie van de claim raakt
Tussen wederhoor en publicatie verandert een dossier. Wie zich later verweert, pakt vaak een vroege formulering die de auteur zelf al had geschrapt. Dat is geen weerlegging maar een verplaatsing van het onderwerp, en het werkt omdat het publiek de versiegeschiedenis niet kent. Leg bij elke correctie vast wat er wanneer is geschrapt, en vraag bij elk verweer op welke versie het is uitgevoerd.
Wie zijn meetlat aanscherpt, past hem toe op alles wat al gemeten is
Een aangescherpte drempel verandert niet alleen de casus van vandaag maar elke eerdere meting. Wie de nieuwe regel alleen op de actuele publicatie loslaat, produceert een verschil dat geen bevinding is maar een methodeverschil, en dat lijkt gericht. Draai na elke wijziging het volledige corpus opnieuw, publiceer hoeveel eerdere uitkomsten meebewegen, en zeg erbij wanneer de regel is ingegaan.
Een geblokkeerde tracker is een toestand, een verwijderde tracker is een feit
Veel herstel bestaat uit een laag die de code tegenhoudt in plaats van de code weghaalt. Zolang het fragment in de pagina staat, hangt de bescherming af van de juiste instelling van een module die morgen kan worden bijgewerkt. Een meting die op dat moment schoon is, blijft geldig voor dat moment en niet voor de configuratie erachter. Noteer bij een schoon resultaat altijd of iets weg is of alleen wordt tegengehouden.
gedachtenotitieOverheid, toezicht en de wetverwant
Een leverancier die waarschuwt maar de veilige instelling niet standaard levert, verplaatst de verantwoordelijkheid
Bij één getroffen klant is de inrichting van die klant een plausibele verklaring. Herhaalt hetzelfde patroon zich bij meerdere klanten binnen korte tijd, dan zegt dat iets over hoe het product standaard wordt uitgeleverd en welke rechten standaard aanstaan. De stelling dat de software zelf niet lek was, is technisch houdbaar en tegelijk onvoldoende. De vraag is niet of de leverancier heeft gewaarschuwd, maar of hij het foute pad heeft afgesloten.
in onderzoekessaywaarschijnlijkOverheid, toezicht en de wetbronnenverwant
Een gedeelde analytics-tenant maakt van een fout een sectorlek
Delen meerdere overheidsdiensten dezelfde analytics-omgeving, dan wordt een verkeerde instelling meteen een probleem voor de hele reeks. Niemand ziet dat als een risico, omdat het als losse sites oogt. Gedeelde infrastructuur vermenigvuldigt de fout.
Meerdere overheidsdiensten die als aparte sites ogen, kunnen op één gedeelde analytics-omgeving zitten. Voor de bezoeker lijken het losse diensten met een eigen naam, een eigen adres en een eigen huisstijl. Onder de motorkap delen ze de infrastructuur die het gedrag meet. Dat is een technische verwevenheid die aan de buitenkant niet te zien is.
Concreet gaat het om een gedeelde tenant in een analytics-platform. In de praktijk herken je dat aan een gedeeld meet-id of een gedeelde container. Een Google Analytics 4-property heeft een meet-id in de vorm G-XXXXXXXX. Een tagmanager-container heeft een id in de vorm GTM-XXXXXXX. Als tien sites in hun paginabron hetzelfde id dragen, dan lopen ze door dezelfde omgeving. Dat is te controleren.
# haal het GA4- of GTM-id uit een reeks sites en vergelijk
for host in dienst-a.nl dienst-b.nl dienst-c.nl; do
id=$(curl -s "https://$host" | grep -oE 'G-[A-Z0-9]{8,}|GTM-[A-Z0-9]{5,}' | sort -u | tr '
' ' ')
echo "$host: $id"
done
Komt bij meerdere diensten hetzelfde id terug, dan is de gedeelde omgeving gemeten. Wie het beheer voert en hoe de rechten binnen die omgeving verdeeld zijn, blijft dan nog vermoed, want dat staat niet in de paginabron.
Als tien diensten dezelfde omgeving delen, is één verkeerde instelling meteen een probleem voor alle tien. Een instelling die te veel deelt, een verkeerd doorgezette identifier, een tag die te veel meestuurt: wat op één plek fout gaat, gaat op alle aangesloten sites tegelijk fout. De fout leeft op sectorniveau, niet op siteniveau.
Niemand ziet dat als één risico, omdat het als losse websites oogt en los wordt beheerd. Elke dienst heeft een eigen webredactie, een eigen contract, een eigen indruk dat het over de eigen site gaat. De gedeelde laag eronder heeft geen gezicht en geen eigenaar in het dagelijkse beeld. Gedeelde infrastructuur betekent gedeelde fouten, en daarmee een schaal die niemand overziet vanuit één dienst.
Dat is de asymmetrie die het gevaarlijk maakt. Het risico is gecentraliseerd, het beheer is verspreid. Eén configuratie raakt velen, terwijl niemand zich verantwoordelijk voelt voor het geheel. Dezelfde asymmetrie maakt de fout ook lastig te melden. Een bezoeker die iets opmerkt, klopt aan bij de dienst die hij bezocht. Die dienst kan wijzen naar de gedeelde omgeving, die geen eigen loket heeft in het beeld van de bezoeker. Zo kan een fout die iedereen raakt toch bij niemand op het bordje belanden, simpelweg omdat de laag waar hij zit geen zichtbare eigenaar heeft.
Een voorbeeld maakt de schaal concreet. Stel dat in de gedeelde omgeving de instelling voor het inkorten van IP-adressen uit staat. Op één site zou dat betekenen dat bezoekers-IP's volledig worden doorgegeven aan de analytics-partij. Bij een gedeelde tenant geldt die ene instelling voor elke aangesloten dienst tegelijk. Tien diensten lekken dan hetzelfde, om dezelfde reden, zonder dat één webredactie iets fout deed op de eigen site.
Hetzelfde geldt voor dataretentie, voor het meesturen van paginapaden die gevoelige parameters bevatten, en voor het delen van gegevens met andere producten van de aanbieder. Elk van die knoppen zit op omgevingsniveau. Zet iemand er één verkeerd, dan is de fout meteen sectorbreed. Dat de fout op alle sites tegelijk optreedt is dan afgeleid uit het gedeelde id, want dezelfde omgeving voert dezelfde instelling uit. Wat elke site precies doorstuurt blijft per site meetbaar, en daar controleer ik de afgeleide tegen de werkelijkheid.
Naast de gedeelde omgeving zag ik een terugkerend beeld: weiger-knoppen die niet echt weigeren, en tagmanagers die overal aanwezig zijn. Die twee versterken elkaar.
Een tagmanager is een laag waarmee je scripts kunt plaatsen zonder de site zelf te wijzigen. Dat is het hele doel ervan. Op elke aangesloten site kan de tagmanager nieuwe scripts binnenlaten, en de dienst zelf hoeft daar niets voor te doen. Bij een gedeelde container geldt dat voor alle aangesloten sites tegelijk. Wie de container beheert, kan in één handeling een script uitrollen over de hele reeks. Dat maakt de fout breed en moeilijk te overzien, en het maakt een verkeerde toevoeging even besmettelijk als een verkeerde instelling.
De weiger-knop die niet weigert maakt het compleet. Als de toestemmingsvraag geen echte werking heeft, dan vuren de gedeelde tags ongeacht wat de bezoeker kiest. De fout is dan niet alleen breed, maar ook niet af te wenden door de bezoeker.
Bij een gedeelde omgeving is de vraag wie de verwerkingsverantwoordelijke is. De AVG kent in artikel 26 de figuur van de gezamenlijke verwerkingsverantwoordelijken. Wanneer twee of meer partijen samen doel en middelen van een verwerking bepalen, zijn ze gezamenlijk verantwoordelijk en moeten ze in een regeling vastleggen wie waarvoor opdraait. Een gedeelde analytics-tenant waarin diensten samen dezelfde meet-infrastructuur inrichten, komt dicht bij die situatie.
Dat is een juridische gevolgtrekking, geen meting, en de precieze kwalificatie hangt af van hoe de omgeving is opgezet. Er speelt nog een tweede punt. De analytics-aanbieder is doorgaans een verwerker onder artikel 28, die alleen op instructie van de verantwoordelijke mag handelen. Bij een gedeelde tenant is de vraag wiens instructie leidend is als tien diensten dezelfde verwerker delen. Zonder heldere afspraken kan de aanbieder de facto zelf de instellingen bepalen, en dan verschuift de zeggenschap stil naar de partij die de omgeving beheert. Dat is precies het soort onduidelijkheid dat de AVG met de artikelen 26 en 28 wil voorkomen. Het punt dat overeind blijft is dit: gedeelde verwerking vraagt om een duidelijke rolverdeling en om afspraken over instellingen en beveiliging onder artikel 32. Als niemand die rol expliciet draagt, ontstaat precies het gat waarin één fout zich ongehinderd over de hele sector verspreidt. Een register van datastromen dat dit inzichtelijk maakt, hoort daarom bij zulke opzetten, zie Een register van wat de overheid uitstuurt hoort particulier te zijn.
Ik beoordeel gedeelde overheidsdiensten niet meer één voor één alsof ze los staan. Zodra ik hetzelfde meet-id of dezelfde container over meerdere diensten meet, behandel ik het als één risico met een sectorbrede reikwijdte. Een fout die ik op één site vind, noteer ik met de vraag: staat dit id ook elders, en telt de fout dan mee voor de hele reeks.
Dat verandert de weging. Een verkeerde instelling op een gedeelde tenant is zwaarder dan dezelfde instelling op een losse site, want de reikwijdte is groter en niemand overziet het geheel. Het risico zit in de optelsom van wat gedeeld wordt, zie Het risico zit in de optelsom, niet in het losse veld. En de meetlat die ik hier aanleg is dezelfde die ik voor commerciële partijen gebruik, zie Dezelfde meetlat voor de overheid en de app in je broekzak. Een overheid die infrastructuur deelt, deelt ook de fouten, en dat verdient een toets op het niveau van de hele sector.
Een register van wat de overheid uitstuurt hoort particulier te zijn
Een register van welke gegevens de overheid naar het buitenland stuurt, hoort door een onafhankelijke buitenstaander te worden bijgehouden, niet door de overheid zelf. Een scherpe, verdedigbare afbakening is daarbij belangrijker dan volledigheid: liever een kleine claim die klopt dan een grote die wankelt.
Waarom een buitenstaander dit hoort bij te houden¶
Een register van welke gegevens de overheid naar het buitenland stuurt, hoort door een onafhankelijke buitenstaander te worden bijgehouden, niet door de overheid zelf. De reden is simpel. Wie zijn eigen datastromen registreert, bepaalt ook wat er buiten het register valt. De partij die de pen vasthoudt, tekent de rand van de kaart. Alles wat net buiten die rand ligt, is dan formeel geen onderdeel van het register en dus ook geen probleem.
Dat is geen kwade wil van een ambtenaar. Het is de logica van elk zelfrapport. Je ziet wat je wilt zien, je meet wat je van plan was te meten, en de gaten in je eigen scope voelen als afgeronde randen. Een buitenstaander heeft die reflex niet. Hij begint bij het verkeer dat werkelijk over de lijn gaat en werkt terug naar de vraag wie het ontvangt.
De AVG kent al een verplicht register. Artikel 30 schrijft voor dat elke verwerkingsverantwoordelijke een register van verwerkingsactiviteiten bijhoudt. Daarin staan de doelen, de categorieën betrokkenen, de ontvangers en de doorgiften naar derde landen. Dat klinkt als precies wat ik wil. Het verschil zit in twee dingen.
Ten eerste is dat register intern. De toezichthouder mag het opvragen, de burger krijgt het in de regel niet te zien. Ten tweede is het een beschrijving door de verwerker van zijn eigen voornemens. Het beschrijft wat men bedoelt te doen. Het bewijst niet wat de code op het toestel van de bezoeker werkelijk uitvoert. Artikel 5 lid 2 legt de verantwoordingsplicht bij dezelfde partij die de verwerking uitvoert. Dat is verdedigbaar als beleidsinstrument. Als controlemiddel voor een buitenstaander is het rond: de gecontroleerde levert het bewijs van zijn eigen naleving.
Een extern gemeten register keert die volgorde om. Ik begin bij de waarneming, een verzoek dat het toestel verlaat, en pas daarna vraag ik welk beleidsstuk daarbij zou moeten horen. Het bewijsniveau van zo'n register is gemeten, niet beloofd.
Mijn overheid-meetproject is met opzet strak begrensd. Het gaat alleen over Nederlandse overheidsdiensten, hun apps en de rijksbrede contracten. Banken, retail en telecom horen er uitdrukkelijk niet bij, hoe interessant hun datastromen ook zijn. Die grens is een keuze, en het is de belangrijkste keuze in het hele project.
Een strakke scope maakt de claim verdedigbaar. Zodra ik zeg "de Nederlandse overheid stuurt gegevens naar deze ontvangers in deze landen", kan iedereen precies nagaan wat ik daarmee bedoel. Welke diensten, welke apps, welke domeinen. Er is geen ruimte voor het verwijt dat ik appels en peren optel. Een tegenpartij die de scope wil aanvechten, moet dan ingaan op de meting zelf, en dat is precies waar ik hem hebben wil.
Volledigheid is hier het doel niet. Verdedigbaarheid is het doel. Liever een kleine claim die je op elk punt kunt narekenen dan een breed overzicht dat bij het eerste tegenargument bezwijkt. Een register dat honderd stromen noemt waarvan er drie niet kloppen, is in een discussie waardeloos geworden. De tegenpartij pikt die drie eruit en de andere zevenennegentig staan meteen in de verdachtenbank. Zie ook Een naam in de code is nog geen tracker voor precies dat mechanisme.
Een register dat tien stromen noemt die allemaal kloppen, houdt stand. Het kan groeien, langzaam, stroom voor stroom, en elke toevoeging draagt hetzelfde bewijsgewicht als de vorige. Dat is de manier waarop een claim betrouwbaar groot wordt.
De methode is bewust saai en herhaalbaar. Per dienst of app leg ik het netwerkverkeer vast als HAR-bestand, gemeten zoals een gewone bezoeker het toestel gebruikt. Uit dat verkeer haal ik de ontvangende domeinen. Per domein bepaal ik het bijbehorende bedrijf en, via het IP en een offline geolocatiebestand, het land waar de ontvangende server staat. Dat laatste raakt aan de doorgifte-regels van hoofdstuk V van de AVG, de artikelen 44 en verder, waar het Schrems II-arrest de lat legde voor doorgifte naar landen buiten de EER.
De kern van een verdedigbaar register is de scheiding van bewijsniveaus per regel:
ontvanger | land | bewijs | bron
-----------------+------+---------------+---------------------------
voorbeeld-a.example | US | gemeten | HAR, request 142
voorbeeld-b.example | IE | gemeten | HAR, request 210
verwerker-c | ? | afgeleid | subverwerkerslijst, niet in verkeer
Wat in het verkeer zit, krijgt het label gemeten. Wat alleen uit een contract of een subverwerkerslijst volgt, krijgt afgeleid. Wat ik vermoed maar niet kan tonen, komt er niet in, of hooguit als expliciet gemarkeerd vermoeden. Zo blijft het register op elk punt te herleiden naar de ruwe bron. Zie ook Label elke bevinding op bewijsniveau en Netwerkverkeer lezen via HAR-files voor de onderliggende werkwijze.
Het belangenconflict dat een zelfrapport altijd draagt¶
De diepere reden om dit particulier te doen, is een belangenconflict dat in elk zelfrapport zit ingebakken. De partij die het register bijhoudt, wordt door datzelfde register beoordeeld. Wie in die positie zit, heeft er belang bij dat het overzicht netjes oogt. Niet uit kwade wil, maar omdat een probleem in je eigen register een probleem is dat je zelf moet opruimen. De weg van de minste weerstand is dan om de scope zo te trekken dat het lastige geval er net buiten valt.
Een concreet voorbeeld van hoe subtiel die grens werkt. Stel dat een overheidsapp een kaartdienst van een externe partij inlaadt. Vindt de opsteller van het interne register dat een "eigen datastroom" of "een dienst van een leverancier"? Beide antwoorden zijn verdedigbaar, en het gekozen antwoord bepaalt of de stroom in het register komt. Een buitenstaander die het verkeer meet, hoeft die vraag niet vooraf te beantwoorden. Hij ziet dat het toestel een verzoek naar de kaartdienst stuurt, legt dat vast, en laat de discussie over de juridische kwalificatie aan de lezer. De meting staat er los van hoe je de stroom noemt.
Dat is precies waarom de onafhankelijkheid materieel is. Het gaat niet om wantrouwen tegen ambtenaren. Het gaat erom dat de registrator en de geregistreerde niet dezelfde partij horen te zijn, om dezelfde reden dat een slager zijn eigen vlees niet keurt.
Dit bepaalt hoe ik het overheid-meetproject opbouw. Ik weersta de neiging om het breed te maken. Elke keer dat ik in de verleiding kom een sector erbij te trekken of een claim op te rekken, vraag ik of de meting het draagt. Zo niet, dan blijft het buiten het register of het krijgt het label vermoed.
Het resultaat is een register dat langzaam groeit en zwaar weegt. Een buitenstaander houdt het bij, iedereen kan het narekenen, en het staat naast wat de overheid zelf publiceert in plaats van erop te vertrouwen. Dat is de rol die een particulier hier het beste kan spelen: het onafhankelijke spoor dat de belofte tegen de gemeten werkelijkheid houdt.
Zoek eerst de publieke toezegging, dan hoef je de norm niet zelf te verdedigen
Een meting die tegen een eigen norm wordt afgezet, blijft een mening tegenover een mening. Een openbare, gedateerde belofte van de organisatie zelf haalt die discussie weg. De vraag wordt dan niet of iets zou moeten, maar of wat beloofd is ook feitelijk zo is. Ga vóór het meten op zoek naar brieven en beleidsteksten met een datum, en meet daarna precies wat daarin staat.
Als één deel van de organisatie het wél goed doet, is de fout elders een keuze
Organisaties verklaren een gebrek graag uit techniek, budget of onwetendheid. Dat verweer valt weg zodra je binnen dezelfde organisatie een plek vindt waar het wél goed is ingericht. Zoek dus altijd het interne tegenvoorbeeld: de omgeving achter de login, de tweede site, de cookie die na weigeren wél verdwijnt. Dan is de bevinding niet meer dat iets misging, maar dat er ergens anders is gekozen.
Vraag een organisatie waarom er trackers voor toestemming afgaan, en je krijgt zelden tegenspraak op de feiten. Je krijgt een verklaring: het is technisch complex, het is historisch zo gegroeid, er is geen budget, de leverancier levert het zo.
Dat verweer is niet onredelijk en het is vaak deels waar. Het is ook onweerlegbaar, want je kunt moeilijk bewijzen dat iets wel had gekund.
Tenzij het ergens anders binnen dezelfde organisatie wél gebeurt.
Dat is de zet die het gesprek verplaatst. Zoek binnen dezelfde organisatie een plek waar het wel goed staat.
De omgeving achter de login, waar men wél voor een privacyvriendelijke opzet koos. De tweede site van hetzelfde ministerie, die schoon is. De pagina waar de cookie na weigeren wél verdwijnt. Het formulier waar geen meetlaag op staat terwijl hij op alle andere formulieren staat.
Vind je er een, dan verandert de aard van de bevinding. Ze gaat niet meer over wat er misging, maar over waar wel en waar niet is gekozen. Dezelfde organisatie, dezelfde afdeling, dezelfde leverancier, hetzelfde budget, en toch twee uitkomsten.
Waarom dit het niveau is waarop mensen aanspreekbaar zijn¶
Onvermogen is niemands schuld. Een keuze is dat wel.
Zolang een bevinding als onvermogen wordt gelezen, is het antwoord een verbeterplan met een horizon van jaren. Zodra hij als keuze wordt gelezen, is de vraag wie die keuze maakte, wanneer, en waarom voor dit deel anders dan voor dat deel. Dat is een vraag die een bestuurder kan beantwoorden en een Kamerlid kan stellen.
Vier plekken leveren in mijn ervaring het vaakst een intern tegenvoorbeeld op: achter een inlogmuur, op een tweede domein van dezelfde organisatie, in een nieuwere versie van dezelfde dienst, en in een andere taalversie van dezelfde site.
Van die vier is de inlogmuur de vruchtbaarste. Daar zit vaak echte zorgvuldigheid, precies omdat men zich daar wél bewust was van de gevoeligheid. En dat bewustzijn is dan het bewijs dat het aan de voorkant ook had gekund.
Alles waar een bezoeker zelf tekst intypt, hoort buiten de meetlaag te blijven
Bij paginabezoeken weet een organisatie vooraf welke gegevens de meetlaag in gaan. Bij zoekbalken, chatvensters, feedbackformulieren en foutmeldingen bepaalt de bezoeker de inhoud, en die is niet vooraf te begrenzen. Daarmee is vrije tekst een categorisch ander risico dan paginastatistiek, ook als de meetopzet identiek is. Foutmeldingen tellen mee, want die bevatten vaak invoer die tot een persoon te herleiden is.
Bewijs dat alleen de belanghebbende partij kan produceren, is geen bewijs
Na een incident komt de geruststelling bijna altijd van iemand met een belang bij die geruststelling. Dat geldt voor een dader die vernietiging belooft, en net zo goed voor een leverancier die zijn eigen logboeken beheert en zelf bepaalt wat eruit komt. De toets is simpel: kan een buitenstaander dit narekenen, en is het spoor onwijzigbaar voor wie er baat bij heeft. Kan dat niet, behandel de situatie dan alsof de ongunstige uitkomst waar is.
Na een incident volgt de geruststelling, en die komt bijna altijd van iemand met een belang bij die geruststelling.
De duidelijkste vorm is een afpersende partij die verklaart de gestolen gegevens te hebben vernietigd. Dat is geen bewijs. Het is een mededeling van degene die er baat bij heeft dat er niet verder wordt gezocht, over een handeling die per definitie niet te controleren is.
De vorm die vaker voorkomt en minder opvalt, is de leverancier die zijn eigen logboeken beheert. Hij bepaalt wat er wordt vastgelegd, hoe lang het bewaard blijft, en welk deel ervan naar buiten gaat. De conclusie dat er niets is uitgelekt, komt dan uit een bron die zelf de omvang van het lek bepaalt.
Twee vragen, en beide moeten met ja beantwoord kunnen worden.
Kan een buitenstaander dit narekenen? Niet: mag hij het inzien als hij netjes vraagt. Kán hij het, met middelen die hij zelf heeft of die onafhankelijk beheerd worden.
Is het spoor onwijzigbaar voor wie er belang bij heeft? Een logboek dat de belanghebbende zelf kan aanpassen of laten verlopen, is geen spoor maar een verklaring in tabelvorm.
Vallen beide antwoorden negatief uit, dan is de geruststelling hooguit een bewering met een geruststellende toon.
Niet: het tegendeel beweren. Er is geen bewijs dat de gegevens wél zijn misbruikt, en dat mag je dus ook niet schrijven.
Wel: de risicoanalyse bouwen alsof de ongunstige uitkomst waar is. Dat is niet cynisch, het is de enige verdedigbare grondslag zolang de gunstige uitkomst onbewijsbaar is. Voor de getroffen persoon maakt het namelijk niets uit of zijn gegevens werkelijk zijn doorverkocht: hij moet hoe dan ook zijn wachtwoorden wisselen en alert zijn op fraude.
De regel snijdt beide kanten op. Ik ben zelf de belanghebbende partij bij mijn eigen metingen, en mijn scanner is mijn eigen logboek.
Daarom publiceer ik de opzet, bewaar ik de ruwe opnames, en beschrijf ik hoe iemand anders dezelfde meting kan doen zonder mijn gereedschap. Een bevinding die alleen met mijn scanner te reproduceren is, valt onder precies dezelfde kritiek als een leverancier die zijn eigen logboek toont.
Analyseer een incident als een reeks beslismomenten, niet als een tijdlijn
Een tijdlijn laat zien wat er gebeurde, maar verbergt dat er op elk punt een andere route beschikbaar was. Leg per moment twee dingen naast elkaar: de route die genomen werd, en de route die toen ook op tafel lag. Zo wordt zichtbaar dat de uitkomst geen ongeluk is maar een optelsom van keuzes. Deze vorm is ook eerlijker, want je toont welk alternatief realistisch was op het moment zelf en niet met kennis achteraf.
Aantoonbaar maken dát iets gebeurde vereist niet dat je bewaart wát er gebeurde
Organisaties zetten verantwoording en dataminimalisatie tegenover elkaar: we moeten alles bewaren, anders kunnen we niets aantonen. Dat is een ontwerpkeuze die als natuurwet wordt gepresenteerd. Een openbaar, alleen aangroeiend logboek van vingerafdrukken bewijst dat een handeling op een tijdstip plaatsvond, zonder de inhoud ergens neer te leggen. Bij elk systeem dat voor de verantwoording data bewaart, is de vraag gerechtvaardigd waarom het de inhoud nodig heeft en niet het bewijs.
gepubliceerdnotitiewaarschijnlijkBewaren en lekkenverwant
Wat je niet bewaart, kan niet lekken
Gegevens die niet worden opgeslagen, kunnen niet uitlekken. De sterkste bescherming is niet betere beveiliging achteraf, maar minder verzamelen vooraf. Voor veel controles is bewaren niet eens nodig. Dit volgt uit artikel 5 van de privacywet.
Een boete is voor een groot bedrijf geen straf, maar een rekening
De echte schade van een datalek haalt zelden het nieuws, en de boetes staan vaak niet in verhouding tot de omzet. Voor een concern als DPG Media is een boete van een paar ton hooguit een paar uur omzet. Zolang dat zo is, is een boete geen prikkel om het anders te doen.
De Autoriteit Persoonsgegevens legde DPG Media een boete op van 525.000 euro. Na beroep bij de Raad van State bleef daar 262.500 euro van over, precies de helft. Dat lagere bedrag is waar het uiteindelijk om ging. Het is ook het bedrag dat het gesprek zou moeten sturen, want dat is wat het bedrijf werkelijk kwijt was.
Bewijsniveau: gemeten. Beide bedragen zijn publiek. Het oorspronkelijke besluit en de uitkomst van het beroep staan vast. Ik reken vanaf hier verder met de 262.500 euro, omdat dat het cijfer is dat na alle procedures overbleef.
Een boete zegt weinig zolang je hem niet afzet tegen wat een bedrijf verdient. Het absolute bedrag klinkt groot, en dat is precies het probleem. Groot voor wie is het? Om dat te beantwoorden moet je het omrekenen.
DPG Media haalde ongeveer 753 miljoen euro advertentie-omzet. Deel dat door de uren in een jaar, en je komt op de omzet per uur.
omzet_per_jaar = 753_000_000 # euro advertentie-omzet
uren_per_jaar = 365 * 24 # 8760
omzet_per_uur = omzet_per_jaar / uren_per_jaar
# ongeveer 85.958 euro per uur
boete = 262_500
uren_boete = boete / omzet_per_uur
# ongeveer 3,05 uur
De definitieve boete staat dan gelijk aan ongeveer drie uur omzet. Let op wat hier wordt vergeleken. Het is omzet, en omzet ligt hoger dan winst. De vergelijking is dus aan de milde kant. Zelfs op die milde manier gerekend, verdient het concern de hele boete terug in de tijd tussen koffie en lunch.
Bewijsniveau van deze stap: afgeleid. De omzet is een gerapporteerd cijfer voor de advertentietak. De per-uur-berekening is een simpele deling die iedereen kan overdoen. De aanname is dat de omzet gelijkmatig over het jaar loopt. Dat klopt niet exact. Voor de orde van grootte maakt dat niets uit. Drie uur blijft drie uur, ook als het in werkelijkheid twee of vier is.
De kracht van deze omrekening zit in de eenvoud. Iedereen kan de deling narekenen, en iedereen komt op hetzelfde antwoord. Daar is geen jurist voor nodig en geen econoom. Het getal ligt open, en het argument ligt in het getal. Wie het wil weerleggen, moet met een ander getal komen, en dat lukt niet, want de invoer is publiek.
Een sanctie werkt als ze een keuze verandert. Ze moet zo voelbaar zijn dat het goedkoper wordt om het probleem op te lossen dan om het te laten bestaan. Dat is de hele reden dat we boetes hebben en niet een vriendelijk verzoek sturen.
Dit is de economische functie van een sanctie, los van elke verontwaardiging. De wetgever gaat ervan uit dat een organisatie rationeel rekent. Als de kosten van doorgaan hoger zijn dan de kosten van rechtzetten, zet de organisatie het recht. Zet je de knop verkeerd, dan blijft de overtreding de goedkoopste optie, en dan kiest een rationele partij ervoor om door te gaan.
Er zit nog een tweede werking in een boete, die verder reikt dan het beboete bedrijf. Een sanctie is ook een signaal aan de rest van de markt. Andere partijen kijken mee en schatten in wat een overtreding hen zou kosten. Een boete die stevig aankomt, schrikt af tot ver buiten het ene dossier. Een boete die wegvalt in de ruis, doet het omgekeerde. Ze vertelt de hele sector dat de overtreding betaalbaar is. Zo bezien is een te lage boete erger dan geen boete, want een uitblijvende sanctie laat de vraag tenminste nog open. Een lage sanctie beantwoordt de vraag, en het antwoord luidt dat het loont.
Drie uur omzet verandert geen enkele keuze. Voor een concern van deze omvang valt zo'n bedrag weg in de ruis van een gewone werkweek. Het functioneert als een rekening. Je betaalt hem en gaat verder zoals je bezig was. De boete verschijnt in de administratie als een post, wordt afgeboekt, en verandert niets aan het gedrag dat hem veroorzaakte.
En omdat de boete op beroep werd gehalveerd, is ook de dreiging die er nog van uitging kleiner geworden. Een volgende partij die de afweging maakt, kijkt naar de uitkomst, niet naar het startbedrag. Wat men ziet is een boete die begon op 525.000 en eindigde op 262.500, en die zelfs op het startbedrag nog geen dag omzet kostte. Dat is de prijs die in de markt blijft hangen.
Een boete gaat pas meewegen als ze in verhouding staat tot de omzet, en niet tot een vast maximum dat voor een klein bedrijf hoog is en voor een concern verwaarloosbaar. Zolang de meetlat een absoluut bedrag is en geen deel van wat er wordt verdiend, blijft de grootste overtreder het minst geraakt.
Dat is het perverse aan een vaste bovengrens. Hij is bedoeld om te beschermen tegen buitensporigheid, en in de praktijk beschermt hij vooral de grootste partijen. Een klein bedrijf voelt tienduizend euro. Een concern voelt drie uur omzet niet. Dezelfde meetlat levert een straf op voor de een en een rekening voor de ander.
Het alternatief is bekend en het staat al deels in de wet. Reken de sanctie als een deel van de omzet, en de prikkel schaalt met de grootte van de overtreder. Voor het kleine bedrijf blijft het bedrag in verhouding klein, en voor het concern wordt het bedrag groot genoeg om een keuze te veranderen. Het rekenmodel dat ik hierboven gebruikte, is precies waar zo'n systeem op stoelt. Je rekent het bedrijf dan af op wat het zelf voelt. De maat van een klein bedrijf laat je los, want die maat is voor een concern betekenisloos.
Ik reken dit door omdat het getal het argument draagt. Verontwaardiging over een boete van een half miljoen is goedkoop, en ze verdampt zodra iemand vraagt: is dat veel? Het getal beantwoordt die vraag zonder dat ik mijn stem hoef te verheffen. Zolang een boete gelijkstaat aan drie uur omzet, is verontwaardiging zinloos, en is de enige eerlijke conclusie dat het systeem de overtreding inprijst in plaats van haar te ontmoedigen.
Dat is hetzelfde patroon als overal in dit manuscript. Het doorgaan wordt beloond, en het narekenen en rechtzetten niet. De organisatie die de overtreding pleegt, betaalt een rekening die ze uit de portokas voldoet. De onderzoeker die de overtreding meet en meldt, doet dat gratis. De prikkels wijzen de verkeerde kant op, en de enige manier om dat aan te tonen is het narekenen dat ik hier heb gedaan.
Ik wil één misverstand voor zijn. Dit is geen pleidooi om de Autoriteit Persoonsgegevens harder te vinden of om deze zaak groter te maken dan hij is. Het is een pleidooi om boetes in de juiste eenheid te lezen. Een bedrag in euro's zegt bijna niets. Datzelfde bedrag uitgedrukt in uren omzet van de overtreder zegt bijna alles. Zolang de krant een boete meldt in euro's en het publiek hem in euro's leest, lijkt er iets te zijn gebeurd. Reken hem om naar tijd, en je ziet dat er voor het beboete bedrijf weinig is veranderd. Die omrekening is het enige wat ik hier doe, en ze is genoeg om het beeld te kantelen. Een getal in de juiste eenheid is een sterker argument dan welke verontwaardiging ook.
Tussen wat gebruikelijk is en wat mag, zit een gat
In de praktijk verzamelen systemen standaard meer dan nodig. De wet en de toezichthouder eisen het omgekeerde: alleen wat strikt nodig is. Tussen wat gebruikelijk is en wat mag, zit een gat, en in dat gat zit veel van wat ik meet.
Vraag een ontwikkelaar waarom een veld wordt opgeslagen en het antwoord is bijna altijd hetzelfde: het kan later van pas komen. Vraag een jurist hetzelfde en het antwoord is dat je alleen mag verwerken wat noodzakelijk is voor het doel.
Dat zijn geen twee meningen over hetzelfde. Het zijn twee standaardinstellingen die tegengesteld staan. De ene bouwt vanuit de gedachte dat weggooien onherstelbaar is. De andere gaat ervan uit dat bewaren de uitzondering hoort te zijn.
Het aardige aan minimalisatie is dat je haar niet hoeft te beargumenteren zolang je twee groepen naast elkaar kunt zetten die op hetzelfde web draaien.
Uit de scan van 14 juli 2026 over 1.718 Nederlandse overheidssites en de scan van 18 juli 2026 over 32 nieuws- en handelssites, zelfde scanner, zelfde drie toestemmingsmodi:
overheid (1.718) commercieel (32)
mediaan externe ontvangers per site 2 36
gemiddeld 3,2 37,8
negentigste percentiel 7 75
hoogste enkele site 38 87
Lees de tabel diagonaal. De zwaarst beladen overheidssite uit de hele set, met 38 ontvangers, komt aan de commerciële kant net boven de mediaan uit. Dat is geen verschil in techniek, want beide groepen kunnen dezelfde bouwstenen inkopen. Het is een verschil in wat als normaal geldt.
Daarmee is het belangrijkste tegenargument weerlegd. Zodra iemand zegt dat zesendertig ontvangers nu eenmaal nodig zijn om een moderne website te draaien, wijs je op duizenden sites die het met twee doen. Zie Dezelfde meetlat voor de overheid en de app in je broekzak.
De meting geeft ook de plek aan waar het misgaat, en dat is meestal voor er iets is gevraagd.
In de overheidsset laadde op 1.027 van de 1.718 sites, 59,8 procent, al tracking voordat de bezoeker iets had gekozen. Bij 933 daarvan ging het uitsluitend om cookies. In de commerciële set was dat 31 van de 32 sites, 96,9 procent.
De cookies die dat het vaakst deden, zijn niet spectaculair en juist daarom bruikbaar:
stg_traffic_source_priority op 730 sites
stg_last_interaction op 730 sites
stg_returning_visitor op 730 sites
stg_externalReferrer op 353 sites
_ga op 143 sites
Vier van die vijf houden bij waar je vandaan kwam, of je eerder langskwam en wanneer je laatste interactie was. Dat zijn keuzes die iemand ooit heeft aangezet, waarschijnlijk omdat ze standaard aanstonden in het analysepakket. Zie Je cookiebanner is zelf een tracker.
De scanner benoemt dit ook als zodanig. In de commerciële set leverde de regel over minimale gegevensverwerking, artikel 5 lid 1 onder c van de AVG, 19 bevindingen op waarin het aantal aangesproken externe domeinen tijdens een normale gebruikersflow als disproportioneel werd aangemerkt, plus nog eens 7 op een zwaardere drempel.
Het geval waarin de verwachting bijna een oordeel werd¶
Hier hield de regel me tegen, en het ging om de grootste post in de hele overheidsmeting.
De vaakst voorkomende externe partij op Nederlandse overheidssites is de Nederlandse overheid zelf. Op 669 sites treedt rijksoverheid.nl op als externe partij, en op 668 daarvan laadde die verbinding al voordat er iets was gekozen, oftewel 99,9 procent. Het gaat om een zelf gehost analysepakket, met 667 van die verbindingen naar servers in België.
Als je minimalisatie als norm hanteert en de meting als vonnis, ligt de conclusie klaar: de grootste privacyschending op de Nederlandse overheidssites wordt gepleegd door de rijksoverheid, op 668 sites tegelijk.
Die zin is meetbaar waar en juridisch voorbarig. Analytics voor toestemming kan onder een uitzondering vallen, afhankelijk van hoe het pakket is ingericht, of er identificerende gegevens in gaan, en wat er met het resultaat gebeurt. Dat is precies de discussie die je niet uit een netwerkopname kunt beslechten. Zie Gemeten is niet bewezen en De rijksbrede analytics staat op 668 sites voor toestemming.
De publiceerbare vorm werd daarom een vraag met bewijs eronder in plaats van een oordeel: dit staat er, op deze schaal, voor toestemming, en dit zijn de voorwaarden waaronder het rechtmatig kan zijn, dus toon aan dat u eraan voldoet. Die vraag is beantwoordbaar en de beschuldiging was dat niet.
Dit is de eerlijke beperking en ze zit in het hart van het onderwerp.
Ik kan meten wat er vertrekt, naar wie, wanneer en na welke keuze. Ik kan niet meten of het nodig was. Noodzaak is een oordeel over een doel, en het doel staat in een hoofd, in een offerte of in een verwerkingsregister. Niet in het verkeer.
Wat ik wel kan doen is de vraag scherp maken, en daar bestaat een goed hulpmiddel voor. In de overheidsset kwamen 224 bevindingen naar voren waarin een uniek trackernummer in de inhoud van een bestand stond, met de instructie om te controleren of die verwerking in het register of de privacyverklaring is opgenomen. Dat is de brug: de meting levert de vraag, het register hoort het antwoord te leveren, en het uitblijven van dat antwoord is zelf informatie. Zie Papier versus code: de verklaring en de uitvoering en De ontvangers die in geen enkel verwerkingsregister staan.
Minimalisatie is voor een bouwer geen abstractie. Het is een reeks kleine besluiten die allemaal in de configuratie staan.
Zet analysepakketten op de standaard waarin ze niets herkennen tot de bezoeker heeft gekozen, in plaats van op de standaard waarin alles aanstaat. Haal lettertypen, kaarten en bibliotheken van je eigen server, want dan vertrekt er niets voordat er iets gevraagd is. Kies een bewaartermijn per cookie in plaats van de fabrieksinstelling. En loop één keer per jaar de ontvangerslijst van je eigen site langs en schrap wat niemand meer kan uitleggen.
Die laatste is de goedkoopste en levert het meeste op. In de meeste gevallen staat er iets in dat ooit voor een campagne is toegevoegd en waarvan de eigenaar het bedrijf verlaten heeft.
Houd de verwachting en het oordeel uit elkaar in je eigen tekst. De verwachting is dat een organisatie het met minder kan, en die is te onderbouwen met een vergelijkbare groep die het aantoonbaar met minder doet. Het oordeel dat een concrete verwerking onrechtmatig is, vraagt om het doel, de grondslag en de context, en die haal je niet uit een opname.
De sterkste vorm is daarom bijna altijd dezelfde. Meet, vergelijk met een groep die op hetzelfde web draait, en formuleer het verschil als een vraag die de organisatie kan beantwoorden. Wie zo schrijft, houdt zijn zwaarste claim overeind en dwingt tegelijk het gesprek af dat hij wilde. Zie Mijn onderzoek gaat niet over jouw bedrijf.
Werkregel. Onderbouw minimalisatie met een vergelijkbare groep die het aantoonbaar met minder doet, en formuleer het verschil als een vraag naar de rechtvaardiging in plaats van als een vastgesteld oordeel, want noodzaak zit in het doel en niet in het verkeer.
De ene organisatie is je dankbaar als je een lek vindt en meldt. De andere reageert met juridische druk. Hetzelfde werk, tegenovergestelde reacties. Dat verschil zit niet in wat ik doe, maar in hoe een organisatie naar kritiek kijkt.
Op 25 juni 2026 beantwoordde staatssecretaris Eerenberg van Financiën de Kamervragen over de Adobe-tracker in de betaalomgeving van de Belastingdienst. De kern van dat antwoord staat er zonder omhaal:
Het gebruik van Adobe Analytics was niet in lijn met de geldende ePrivacy-regels en de Algemene verordening gegevensbescherming.
Daarmee is de cirkel rond. Op 2 juni publiceerde ik wat er feitelijk over de lijn ging toen ik, ingelogd met mijn eigen DigiD, een aanslag wilde betalen: een handeling-voor-handeling verslag naar Adobe in de Verenigde Staten, met een herkenningsnummer van twee jaar eraan vast. Vier weken later is de tracker uit, is het datalek door de dienst zelf bij de Autoriteit Persoonsgegevens gemeld, is de schending door het kabinet erkend, en ben ik als melder bedankt en beloond.
Dit dossier eindigt zoals een dossier hoort te eindigen: gemeten, gemeld, gestopt en erkend.
De tijdlijn: van meting tot erkenning in vier weken
Datum
Wat er gebeurde
30 mei en 1 juni
Metingen in mijn eigen betaalomgeving, vastgelegd met de antwoorden van de servers erbij
2 juni
Publicatie van het dossier met de letterlijke velden uit mijn sessie
3 juni
JA21-Kamerlid Van den Berg stelt twaalf schriftelijke vragen (2026Z11812) aan de staatssecretarissen van Financiën en van Economische Zaken en Klimaat
6 juni
De Belastingdienst laat weten dat de Adobe-meting is uitgezet; mijn eigen nulmeting bevestigt dat
10 juni
De uitschakeling wordt publiek; NRC, Tweakers en Security.NL berichten erover
12 juni
Kamerbrief (2026Z12920): de dienst heeft uit eigen beweging een datalekmelding gedaan bij de Autoriteit Persoonsgegevens
25 juni
Antwoorden op de Kamervragen: het gebruik was in strijd met de ePrivacy-regels en de AVG
26 t/m 29 juni
Tweede persgolf, van Security.NL tot iBestuur en de fiscale vakpers
Die twaalf Kamervragen verdienen een eigen alinea, want ze zijn het resultaat van een directe samenwerking met JA21-Kamerlid Daniël van den Berg. Ik leverde de meting en de technische onderbouwing, hij vertaalde die naar precieze, goed getimede vragen en tilde het debat daarmee een niveau hoger in de Kamer. Vraag voor vraag zat er techniek onder: van de ECID-cookie en de verhulde DNS-omleiding tot de rolverdeling tussen verwerkingsverantwoordelijke en verwerker. Die combinatie van meetwerk en politiek vakmanschap is de reden dat dit dossier in vier weken van bevinding naar erkenning ging.
Wat de staatssecretaris erkent
De antwoorden op de Kamervragen bevestigen de bevinding op alle hoofdpunten, en voegen er een paar dingen aan toe die ik zelf niet kon vaststellen.
Ten eerste de rechtmatigheid. Het kabinet erkent dat de tracking in strijd was met de ePrivacy-regels en de AVG, en dat vooraf niet is beoordeeld of het verwerken van persoonsgegevens noodzakelijk was. Er lag geen afgeronde beoordeling onder een systeem dat meekeek met burgers in de meest verplichte omgeving die de overheid kent.
Ten tweede de reikwijdte. Vast staat dat in elk geval IP-adressen naar Adobe zijn verstuurd, naast de gedragsgegevens die ik documenteerde: de specifieke vordering, de geopende aanslag, de stap in de betaalfunnel. En er blijft een onbekende rest: wat gebruikers hebben ingetypt in vrije tekstvelden en zoekfuncties is achteraf niet meer volledig te reconstrueren. Die onzekerheid is precies waarom dit als datalek is gemeld.
Ten derde de voorwaarden voor de toekomst. De verwerking is gestopt en wordt pas hervat als de rechtmatigheid en proportionaliteit zijn beoordeeld en geborgd, met eerst een DPIA en sluitende verwerkersafspraken.
Mijn eigen meetnuance blijft daarbij overeind staan, want daar hecht ik aan: het bedrag, het BSN, het IBAN en het betalingskenmerk gingen aantoonbaar niet mee. Wat wegvloeide was je gedrag eromheen, gekoppeld aan een nummer dat twee jaar blijft staan. De erkenning gaat over precies dat.
De dienst meldde zichzelf
Het opvallendste aan deze afloop is de volgorde. De Autoriteit Persoonsgegevens hoefde er niet aan te pas te komen om dit boven water te krijgen: de Belastingdienst deed uit eigen beweging een datalekmelding bij de toezichthouder, en de staatssecretaris informeerde de Kamer daar zelf over.
In diezelfde Kamerbrief richt de staatssecretaris zich rechtstreeks tot de melder:
Ik ben dankbaar dat deze ethisch hacker de Belastingdienst hierop heeft gewezen.
En het bleef niet bij woorden: voor de melding kreeg ik van de Belastingdienst een beker. Een echte, met het logo van de dienst in de lauwerkrans, een handdruk op de voorkant, en op het voetstuk een opschrift met gevoel voor humor: “I hacked the Dutch Tax Office and never got a refund”. Dat vermeld ik hier met plezier, omdat het laat zien hoe een overheidsdienst met een melder om kan gaan: serieus nemen, rechtzetten, en de boodschapper bedanken in plaats van hem als tegenstander te behandelen.
Wat de pers ervan maakte
De antwoorden van 25 juni leverden een tweede golf berichtgeving op, na de eerste golf rond de uitschakeling:
Security.NL en PrivacyNieuws: “Belastingdienst schond privacywetgeving”
iBestuur en Binnenlands Bestuur: “Belastingdienst schond AVG met gebruik van Adobe Analytics”
NieuwRechts: “Persoonsgegevens belastingbetalers doorgestuurd naar Amerikaans bedrijf”
De fiscale vakpers (Taxence, TaxLive): het gebruik is gestopt en het datalek gemeld
Alle vermeldingen staan gebundeld op de pers-pagina, met de links naar de originele publicaties en de Kamerstukken.
Waarom dit een succesverhaal is
Elk onderdeel van het stelsel deed waarvoor het bestaat. De meting bracht een verborgen datastroom aan het licht. De Kamer stelde er binnen een dag vragen over. De dienst zette de tracker binnen een week uit, controleerde niet alleen de betaalomgeving maar inventariseert soortgelijke tooling breder, en meldde zichzelf bij de toezichthouder. Het kabinet erkende de schending zwart op wit. En de melder werd bedankt.
Het verwijt over de oorspronkelijke situatie blijft staan: jarenlang kreeg een Amerikaans reclamebedrijf een klik-voor-klik verslag mee van burgers die hun belasting betaalden, zonder grondslag en zonder dat iemand dat vooraf had getoetst. Dat is en blijft de bevinding, en die staat volledig gedocumenteerd met de echte waarden uit mijn sessie.
Wat openstaat, benoem ik ook. De uitschakeling is formeel voorlopig: hervatting kan na een DPIA en verwerkersafspraken, en dat moment verdient een nieuwe meting. En de vraag wat er in de vrije tekstvelden richting Adobe is gegaan, blijft per definitie onbeantwoord. Zodra de betaalomgeving opnieuw gaat meten, meet ik mee.
Aan iedere onderzoeker die iets ziet: meld het
Dit is waar dit artikel eigenlijk om draait. Zit je als onderzoeker op een bevinding, bij de overheid of daarbuiten, en twijfel je of melden zin heeft: dit dossier is het antwoord. De Belastingdienst ging er van begin tot eind goed mee om. De melding werd serieus genomen, de tracker ging binnen dagen uit, de dienst meldde zichzelf bij de toezichthouder, de staatssecretaris bedankte de melder in een brief aan de Kamer, en er stond een prijs tegenover.
Zo bouw je vertrouwen tussen onderzoekers en overheid: de melder wordt behandeld als bondgenoot, en de volgende bevinding komt daardoor wéér binnen via de voordeur. Melden loont, voor jou, voor de dienst en voor iedereen wiens gegevens het betreft.
Dus doe die melding. Dit is hoe het hoort te gaan, van begin tot eind. Eind goed, al goed.
wat het opleverde
Schending erkend, tracker uit. Na Kamervragen (JA21, kenmerk 2026Z11812) zette de Belastingdienst de Adobe-tracker in de betaalflow op 10 juni 2026 uit, meldde zich op 12 juni uit eigen beweging bij de AP, en op 25 juni erkende staatssecretaris Eerenberg de schending van de ePrivacy-regels en de AVG. Hij bedankte de melder met zoveel woorden.
De vraag is niet wie ik ben om hier iets van te vinden. Ik draai het liever om. Wij zijn allemaal verantwoordelijk en aangewezen om dit te doen. Als niemand het doet, gebeurt er niets.
De omkering hierboven geldt voor iedereen, en toch is er een reden dat ik het ben die het vindt. Ik zie fouten door een combinatie die zelden samenvalt. Een onderzoeksmindset, sterke patroonherkenning, en een moreel kompas dat me laat opmerken wat anderen voorbij laten gaan. Voor precies dit soort werk word ik al lang betaald, en ik zet het in voor het goede.
Die drie los van elkaar zijn niet zeldzaam. Er zijn genoeg mensen met een onderzoeksmindset, genoeg mensen die patronen zien, genoeg mensen met een sterk kompas. Wat zeldzaam is, is dat ze in één persoon samenvallen en op hetzelfde onderwerp worden gericht. Een onderzoeker zonder kompas ziet de afwijking en haalt zijn schouders op. Een moreel gedreven mens zonder de techniek voelt dat er iets mis is en kan het niet aantonen. Ik kan het zien, het bewijzen, en ik vind dat het bewezen moet worden.
Het kompas doet daarin meer werk dan het lijkt. Techniek en patroonherkenning bepalen of je iets kúnt vinden. Het kompas bepaalt of je ernaar kijkt. In dit vak liggen de afwijkingen vaak in het volle zicht, en toch loopt bijna iedereen eraan voorbij. Dat is geen kwestie van kunnen. Het is een kwestie van willen zien. Wie er belang bij heeft dat het blijft zoals het is, kijkt weg, vaak zonder het zichzelf toe te geven. Ik heb dat belang niet, en ik heb de neiging om juist wel te kijken waar het ongemakkelijk wordt. Die neiging is geen verdienste die ik mezelf heb aangemeten. Ze zit er nu eenmaal, en ze richt de techniek op plekken waar anderen hun blik afwenden.
De vraag wie ik ben om dit te vinden veronderstelt dat ik alleen sta. Dat is niet zo. Meerdere bedrijven waarderen dit werk. Ik heb me commercieel bewezen, maatschappelijk bewezen, en tot in de Tweede Kamer bewezen, waar een meting van mij tot Kamervragen leidde. Dat laatste is een controleerbaar feit: de vragen zijn gesteld naar aanleiding van wat ik had gemeten.
De cijfers onderstrepen het. In het eerste half jaar dat ik dit werk publiek deelde, haalden mijn bijdragen bijna zes miljoen impressies en ruim 1,18 miljoen bereikte mensen, met meer dan 62.000 interacties: ruim 50.000 reacties, 5.300 commentaren en honderden reposts. Losse stukken over de Ray-Ban Meta, over cyclus-apps en over mijnoverheid.us haalden elk rond het half miljoen impressies. De reacties waren, naar mijn eigen schatting, voor 95 tot 99 procent uitgesproken positief. Dit is een gefundeerd standpunt, geen losse mening vanaf de zijlijn.
Ik zet er meteen het bewijsniveau bij, want dat hoort zo. De impressies en interacties zijn gemeten cijfers van de platforms. Het aandeel positieve reacties is mijn eigen schatting, dus afgeleid, en die presenteer ik ook als schatting. De Kamervragen zijn een openbaar feit. Ik houd die drie soorten uit elkaar, zodat het gewicht klopt.
Waardering bewijst niets. Bereik bewijst niets. Een miljoen mensen kunnen iets waarderen dat toch niet klopt. Aandacht en applaus meten hoe goed een verhaal aanslaat, niet of het waar is. De cijfers hierboven zeggen dat veel mensen mijn werk zagen en er positief op reageerden. Ze zeggen op zichzelf niet dat mijn bevindingen juist zijn.
Dat klopt, en daarom rust mijn antwoord er niet op. De cijfers laten zien dat het werk gezien wordt en dat het weerklank vindt. Ze zijn een teken dat ik ergens een snaar raak. Ze zijn geen bewijs van juistheid, en ik behandel ze ook niet zo. Wie de vraag stelt wie ik ben om iets te vinden, verdient een antwoord dat sterker is dan een impressietelling.
Ik hecht er zelfs aan om die twee streng gescheiden te houden, want de verwarring ervan is een klassieke fout. Populariteit die zich voordoet als bewijs, is precies waar het veld dat ik bekritiseer aan lijdt. Een keurmerk dat vertrouwd wordt omdat het bekend is. Een expert die gehoord wordt omdat hij vaak in de krant staat. Als ik mijn eigen gelijk op bereik zou bouwen, zou ik dezelfde fout maken die ik anderen verwijt. Dat wil ik niet, en daarom leg ik het gewicht ergens anders neer.
De eerlijkste maatstaf voor of ik iets mag beweren is mijn titel niet, en mijn bereik evenmin. De toets is of mijn bevindingen standhouden als iemand ze serieus probeert onderuit te halen. Mijn werk is daarvoor geschikt gemaakt. Ik publiceer de meting, de methode en het ruwe bewijs. Iedereen met de kennis kan het nameten en aantonen waar ik ernaast zit.
Tot op heden heeft een goede weerlegging, een echte debunking van mijn werk, niet plaatsgevonden. Dat is een sterker signaal dan alle applaus samen. Applaus kost niets. Een weerlegging kost moeite en levert degene die haar rond krijgt juist aanzien op. Er is dus een prikkel om mij onderuit te halen, en het is niet gebeurd. Zolang dat zo is, staat het werk op eigen benen.
Ik teken er wel een grens bij. Dat er nog geen weerlegging is, betekent niet dat er nooit een komt. Afwezigheid van tegenbewijs is geen bewijs. Het betekent dat het werk de toets tot nu toe doorstaat, en dat is het hoogste wat een bevinding op enig moment kan zeggen. Als er morgen een houdbare weerlegging komt, pas ik aan. Dat is de afspraak die de methode met zichzelf maakt.
Dat maakt de manier van werken zelf tot een deel van het antwoord. Ik bouw mijn bevindingen zo dat ze te breken zijn. Ik zet de meting, de stappen en het ruwe materiaal erbij, juist op de plekken waar iemand mij het makkelijkst zou kunnen betrappen. Een bewering die niet te weerleggen is, is niets waard, want ze kan nooit worden getoetst. Ik richt mijn werk expres op het tegendeel. Ik maak het zo weerlegbaar mogelijk, en dan houd ik mijn adem in of het standhoudt. Tot nu toe houdt het stand. Dat is een geruststelling die ik heb verdiend door het risico te nemen, en niet door het te vermijden.
Het loont om even stil te staan bij de vraag zelf. Wie ben jij om dit te vinden. Merk op wat die vraag doet. Ze gaat over de persoon en niet over de zaak. Ze vraagt niet of de meting klopt, ze vraagt of ik de juiste papieren heb om haar te doen. Dat is een verschuiving van het onderwerp naar de spreker, en die verschuiving is vaak een manier om de zaak te ontlopen. Wie de bevinding niet kan weerleggen, kan altijd nog de vinder in twijfel trekken.
Ik neem die vraag toch serieus, want ze leeft breed, en het antwoord erop zegt iets over hoe je kennis zou moeten wegen. Autoriteit op titel is een zwakke maatstaf. Een titel zegt dat iemand ooit een opleiding heeft afgerond, en niet dat zijn bewering van vandaag klopt. De sterke maatstaf staat los van de persoon. Ze vraagt of de bewering te controleren is en of ze de controle doorstaat. Op die maatstaf doet het er weinig toe wie ik ben. Op die maatstaf doet het ertoe of het werk klopt.
Wie hardnekkig op de persoon blijft hameren, verraadt daarmee iets. Meestal is het een teken dat de zaak zelf niet te weerleggen valt, en dat de vraagsteller dat aanvoelt. Dan wordt de herkomst van de boodschapper het laatste aanknopingspunt. Ik laat me daar niet naartoe trekken. Ik breng het gesprek telkens terug naar de meting, want daar hoort het thuis.
Zo bekeken lost de vraag zichzelf op. Wie ik ben doet er voor de geldigheid van een bevinding niet toe. Een meting die klopt, klopt ongeacht wie haar deed. Een meting die niet klopt, valt om zodra iemand haar natrekt, hoe indrukwekkend de maker ook is. Door mijn werk controleerbaar te maken, haal ik mijn eigen persoon uit de vergelijking. Dat is precies de bedoeling.
Dat is ook mijn antwoord op de vraag. Wie ben ik om dit te vinden. Iemand wiens werk zich laat controleren en overeind blijft. Het staat overeind doordat het klopt, en niet doordat ik het zeg. De dag dat het niet meer overeind blijft, hoor ik het als eerste te willen weten.
Het talent volgt het geld, en het geld ligt niet hier. Geen opleiding, geen titel die past, en wie de functies vult tikt lijsten af. Daarom blijft dit liggen, en daarom doe ik het.
Het is voor een groot deel een kwestie van prikkels. Wie hier goed in is, vindt een bug bounty leuker. Duizenden euro's per melding, en het bedrijf betaalt met plezier. Meten of een site je privacy schendt levert geen cent op.
Dat verschil heeft een structurele oorzaak. Een kwetsbaarheid is een defect. Het bedrijf wil hem zelf ook weg, want hij staat het eigen belang in de weg. Wie hem meldt, verkleint iemands risico, en die iemand is aanwijsbaar en heeft een budget. Een privacyschending is meestal iets anders. Die is vaak precies wat er is besteld. De trackers staan er omdat iemand ze heeft ingekocht, de biedstroom loopt omdat er een contract onder ligt. Wie daar een bevinding op tafel legt, verkleint niemands risico. Hij vergroot het. De partij die zou moeten betalen is dezelfde partij die de schade veroorzaakt, en de partij die er baat bij heeft, de bezoeker, weet niet dat het onderzoek bestaat en heeft geen manier om het te bekostigen. Dat is een klassieke externaliteit, en markten lossen die uit zichzelf niet op.
De besten worden bovendien weggekocht door grote bedrijven, en die gaan echt niet na kantooruren voor het publieke belang zitten testen. Het talent volgt het geld, en het geld ligt niet hier.
En dat geld ligt daar grotendeels toevallig. De markt, de aandelenhype, de Amerikaanse tech-economie draaien hard en lekker op wat al die IT'ers ooit gebouwd hebben, en men blijft er bovenop stapelen. Bouwen wordt beloond, doorbouwen wordt beloond. Kijken of het gebouwde wel deugt levert niets op, of hooguit iets theoretisch, na lange tijd. Schade voorkomen laat zich niet demonstreren. Je kunt geen grafiek laten zien van het lek dat er niet kwam. Weer een tooltje bouwen en verkopen, dat wel. Zo stroomt alles naar de ene kant en blijft de andere kant leeg.
Van de andere kant bekeken zit er ook een luchtbel in. Bouw iets, en zodra de juiste mensen er geld in zien, zit je gebakken. Het wordt overal langs iedereens neus gedrukt omdat een manager of directie denkt er verstand van te hebben, ook als de technische of functionele meerwaarde er niet is. Men maakt te veel om het maken.
Zodra er iets groots in het nieuws is, een lek zoals bij Odido, zie je opeens allemaal hackers er tijd, energie en aandacht in steken. Daarna hoor en lees je niets meer. Een CVE gevonden, woohoo. Een bounty geind. Het bedrijf kan door, de bonus zit in de pocket, en de aandacht schuift mee naar het volgende nieuws.
Nerds zijn nerds. De kick zit in de vondst. Het jarenlang bijhouden van iets dat niemand betaalt levert die kick niet op, en dus gebeurt het niet. Dat is menselijk en ik neem het niemand kwalijk.
Het probleem is dat privacyschade zich juist niet als incident gedraagt. Een lek is een gebeurtenis met een datum. Een biedstroom die elke pagina-load je toestel in een veiling gooit, is een toestand. Die heeft geen moment waarop hij nieuws wordt. Hij is er gisteren, vandaag en morgen, en precies dat maakt hem onzichtbaar voor een aandachtseconomie die op gebeurtenissen draait. Wat continu is, moet continu gemeten worden, en daar is de hele infrastructuur van aandacht en beloning ongeschikt voor.
Er is geen opleiding en geen functie die op de kruising zit¶
Er is hier geen opleiding voor. Ik zag het bij NOVI Hogeschool. Je kiest of governance, hoe een bedrijf cybersecurity organisatorisch regelt, of ethical hacking, kwetsbaarheden zoeken in code en componenten. Nooit de twee gecombineerd.
De banen zijn net zo opgehokt. Een SOC-analist reageert op wat binnenkomt. Een privacy officer vindt zelf niets, daar meld je aan. Een pentester krijgt een scope en een tijdvak en levert een rapport op. Niemand zit op de kruising, waar je met een organisatorische blik echt in de code kijkt. Op die kruising kun je vaststellen dat het papier en het gedrag uit elkaar lopen, en daarvoor moet je beide kunnen lezen.
Ik hack ook niet. Ik gebruik een hacker-mindset om te achterhalen wat een site of app werkelijk doet. Reverse-engineeren, meekijken op de verbinding, de code lezen die er al staat. Alles wat ik bekijk, stuurt mijn eigen toestel al toe. Ik breek nergens in. Voor die manier van werken bestaat geen diploma en er hangt geen salarisschaal aan.
Dat wringt met wat de wet eigenlijk vraagt. De AVG legt de bewijslast bij de verwerkingsverantwoordelijke, artikel 5 lid 2. Die moet kunnen aantonen dat hij zich aan de regels houdt. Artikel 11.7a van de Telecommunicatiewet vraagt toestemming voordat er iets op je apparaat wordt gezet of uitgelezen. Beide gaan over feitelijk gedrag van software. Beide worden in de praktijk beantwoord met documenten. Er is dus een wettelijke vraag waar alleen een meting antwoord op geeft, en er is geen beroep dat die meting doet. Zie ook Nederland heeft een wettelijke bekwaamheidseis en toetst hem niet en Dezelfde meetlat voor de overheid en de app in je broekzak.
Het helpt om te laten zien hoe klein die stap technisch is.
Je opent de site in een schoon browserprofiel. Je zet de netwerktab open en bewaart al het verkeer als HAR-bestand. Dat doe je twee keer: één keer waarbij je in de cookiebanner alles weigert, één keer waarbij je alles accepteert. Daarna tel je per run welke domeinen er contact krijgen.
import json, collections
def hosts(pad):
har = json.load(open(pad))
return collections.Counter(
e["request"]["url"].split("/")[2]
for e in har["log"]["entries"]
)
geweigerd = hosts("weigeren.har")
aanvaard = hosts("accepteren.har")
for host in sorted(set(geweigerd) | set(aanvaard)):
print(f"{geweigerd[host]:5d} {aanvaard[host]:5d} {host}")
Dat is het. Links wat er gebeurt als je nee zegt, rechts wat er gebeurt als je ja zegt. Alles wat links niet nul is en niet nodig is om de pagina te tonen, is een vraag die het bedrijf moet beantwoorden. En de lijst rechts leg je naast het aantal partners dat de cookiemuur noemt.
En dan is er de rem die niets met geld te maken heeft. Waarom zou je je mengen, waarom zou je kijken hoe de code echt werkt? De meeste mensen denken: het valt vast mee, het zal wel aan mij liggen. Iedereen is bang voor het eigen hachje.
Wat is eigenlijk de winst van die extra stap, de stap die ik wel zet? De kans is groot dat je wordt teruggefloten. Dat is niet waar je voor bent aangenomen. Of: heb jij daar wel verstand van, joh? De IT-wereld is klein genoeg dat de cultuur dit in stand houdt. Wie buiten zijn hokje kijkt, wordt er vriendelijk weer ingeduwd.
Zet het naast elkaar en er is simpelweg geen upside. Op papier levert die extra stap alleen risico op. Buiten je functie treden, je nek uitsteken, ongelijk kunnen krijgen. De winst is nul, de downside is reeel. Die combinatie, geen opleiding, geen titel, geen prikkel, een ingebouwde twijfel aan jezelf en een cultuur die je terugroept, is precies waarom het blijft liggen.
En toch loopt daar de hele redenering vast. Want in werkelijkheid is vrijwel iedereen enorm blij en opgelucht als iemand de stap wel zet. De Belastingdienst bedankte de melder in zoveel woorden. Bedrijven waarderen het. De downside staat op papier, de opluchting is echt.
Dat gat tussen verwachting en uitkomst is het interessantste deel van dit hele stuk. De rem is een inschatting die vrijwel niemand toetst. Mensen calculeren een straf in die in de praktijk zelden komt, en omdat ze de stap niet zetten, krijgen ze nooit de correctie op hun eigen inschatting. Zo houdt de verwachting zichzelf in stand.
Cybersafe bestaat niet, dus wanneer doe je het goed¶
Er is nog iets dat mensen uit dit vak murw maakt: cybersafe bestaat niet. Er is geen moment waarop je klaar bent. Hacken kan nog steeds, lekken kan nog steeds, hoe goed je je werk ook doet. Wanneer doe je het dan goed, als cybersecurity-persoon of als bedrijf? Die vraag heeft geen antwoord.
In plaats daarvan jaag je KPI's na. Getallen die continu bewegen, een lat die stijgt zodra je hem haalt, een finish die opschuift op het moment dat je hem zou bereiken. En het werk eromheen is monotoon en breindodend geworden. Het niveau van de inpakkers bij PostNL, waar een afvalbedrijf nog meer variatie ziet.
Mensen zien dat, weten dat, en raken erdoor uitgehold in hun functie. Wat eerst heel gaaf was, voelt op een dag als: wat zijn we hier eigenlijk aan het doen? Dat is een voorspelbaar gevolg van werk zonder eindstreep en zonder variatie, en het heeft weinig met luiheid te maken.
En toch loopt niemand weg. Het werk is droog en niet meer inspirerend, en tegelijk is het gewoon oke en zeker financieel beter dan de supermarkt. Bedrijven zijn intussen blij met zulke analytische mensen. Zo is het een comfortabele win-win geworden, en een win-win verandert niet uit zichzelf.
Bij mij werkt hetzelfde gegeven omgekeerd. Juist omdat het nooit af is, is elke meting die iets concreets blootlegt de moeite waard. Ik heb geen eindstreep nodig om te weten of een dag iets heeft opgeleverd. Eén domein dat contact krijgt terwijl ik alles heb geweigerd, is een resultaat. Dat is een klein doel, en het heeft het voordeel dat het bestaat.
Het gekke is dat juist de mensen in die functies, bij de overheid en in het bedrijfsleven, veel te zeggen hebben, terwijl ze in de praktijk lijsten aftikken. Pentesten is lopendebandwerk geworden. De drive is eruit, de speurzin is weg. En precies daar zit het gat. Als niemand meer dieper, anders of creatiever kijkt, blijft er van alles onopgemerkt.
Erger nog: de directie kijkt naar precies die mensen voor advies, van de grootste organisatie tot het kleinste MKB. Maar hoe kan een afvinker advies geven dat verder reikt dan de vinkjes? Dat kan niet. Het advies reikt tot de rand van de checklist en houdt daar op. En omdat de checklist de vragen bepaalt, bepaalt hij ook wat er nooit gevraagd wordt.
Dit is ook waarom ik elke bevinding op bewijsniveau label. Gemeten, afgeleid of vermoed. Wie het papier aanvalt zonder dat onderscheid, wordt weggezet als iemand met een mening. Wie een meting neerlegt en er eerlijk bij zegt wat die wel en niet aantoont, is veel lastiger weg te wuiven. Zie ook Label elke bevinding op bewijsniveau en Mijn werkwijze: van vermoeden naar bevinding.
Wat nu van al die IT'ers wordt verwacht, en de meesten zijn nerds die houden van bouwen of slopen, is iets wat maar een handvol mensen echt kan. Ik denk dat je in heel Nederland de personen die creatief genoeg zijn, ver genoeg vooruit denken en de juiste gecombineerde skillset hebben om dit werk werkelijk te doen, op twee handen kunt tellen. Dat is een schatting, en ik label hem als vermoed. Ik bedoel het als tekortdiagnose, en ik hoop dat mijn schatting te laag is.
Er is een goede tegenwerping op die schatting. Ik zie vooral wie er publiceert. Wie dit werk binnen een bedrijf doet, onder een geheimhoudingsclausule, is voor mij per definitie onzichtbaar. Mijn telling kan er dus flink naast zitten. Wat me toch bij die orde van grootte houdt, is iets anders: als er tientallen mensen structureel zo zouden meten, zou ik hun bevindingen tegenkomen op het moment dat ik zelf iets vind. Dat gebeurt zelden. Dat is afgeleid, en zo presenteer ik het ook.
Zelfs de grote namen hadden de combinatie niet compleet. Snowden was in de kern een IT-nerd die aan de bel trok, een bouwer met verstand van governance en een sterk geweten. De schending zelf meten was zijn rol niet. McAfee was een businessman die kon bouwen, en zelfs die twee assen bij elkaar leverden nog geen veiligheid op. Het gaat om meer assen tegelijk. Kunnen bouwen en slopen, organisatorisch denken, creatief speuren, en doorzetten als niemand je ervoor betaalt. De combinatie is zeldzaam, en de arbeidsmarkt vraagt er nergens om.
Terug naar de gemiddelde IT'er, de cybersecurity-man, de data-privacy-persoon: die is deel van de lopendeband. Zonder maatschappelijke drive, zonder onderzoekende houding, zonder een mond die groot genoeg is, en zonder een moreel kompas dat verder reikt dan de eigen portemonnee. Ik verwijt dat niemand persoonlijk. Het systeem selecteert er precies op, want het beloont alle vier de eigenschappen negatief. Dat is de reden dat het werk dat ik doe, niet vanzelf door een ander wordt gedaan. En daarom doe ik het.
Misschien omdat het concreet is en na te rekenen. Misschien omdat het iedereen raakt, zijn telefoon, zijn huis, zijn kind. Misschien omdat bijna niemand anders het zo laat zien. Ik weet het niet zeker, maar de vraag is het waard om te blijven stellen.
De media snapt het niet, en de ingehuurde expert ook niet¶
De pers heeft er zelf vaak geen verstand van. Tech-journalisten die er nergens kaas van gegeten hebben, werkend onder tijdsdruk, in een vak dat om aandacht vecht, en dikwijls voor kranten die zelf tot de grootste privacy-overtreders in de mediasector horen. Dat laatste is mijn eigen waarneming uit metingen aan nieuwssites, en ik houd het daarom op afgeleid: ik heb het gemeten aan de sites, ik heb de redacties er niet zelf over gesproken.
Huren ze iemand in, dan komt er vaak weer een IT'er uit hetzelfde hokjessysteem. Een bouwer met een te kleine mond en geen besef van bedrijfsvoering, van het waarom achter een keuze. Of een governance-persoon die er alleen hoog-over over kan praten en het meetwerk aan een ander overlaat. De bouwer kent de techniek en niet de betekenis. De bestuurder kent de betekenis en niet de techniek. Tussen die twee valt precies het stuk weg waar het om draait, en zo komt het echte verhaal zelden boven.
Dat is een structureel gat, geen incident. Het werk dat ik doe zit op het snijvlak van code en betekenis. Je moet de netwerkstroom kunnen lezen én kunnen uitleggen waarom het ertoe doet. Wie maar één van die twee beheerst, mist de helft van het verhaal, en meestal juist de helft die de lezer nodig heeft.
De reden dat de journalist het zo vaak mist, is te begrijpen zonder er kwaad in te lezen. Een redactie werkt onder druk, met een deadline en een breed pakket aan onderwerpen. Diepgang in één technisch domein past daar zelden in. De journalist die vandaag over privacy schrijft, schreef gisteren over iets anders en morgen weer. Van hem verwachten dat hij een biedstroom of een tracker-keten doorgrondt, is te veel gevraagd. Dus leunt hij op een bron, en de bron die beschikbaar is, komt meestal uit dezelfde wereld van stempels en processen. Zo blijft het gat bestaan en wordt het van de een op de ander doorgegeven. De lezer krijgt een verhaal dat op autoriteit steunt en niet op meting, en merkt het verschil niet, want het klinkt deskundig. En zolang het deskundig klinkt, vraagt niemand om het ruwe bewijs eronder.
Daarnaast zijn er de stempels die indruk moeten maken en weinig zeggen. Een ISO-certificaat of een keurmerk vertelt je in de regel niets over wat een site of app werkelijk doet bij een echte bezoeker. Het toetst een papieren beschrijving, een proces, een intentie. Het meet niet het verkeer dat je toestel verlaat op het moment dat je de pagina opent.
Toen ik negen keurende en certificerende partijen langs dezelfde meetlat legde, zakten er meerdere gewoon. Twee grote certificeerders kwamen uit op het niveau Privacy Lek. Dat is een gemeten uitkomst, geen indruk. De partijen die het stempel uitdelen dat vertrouwen moet wekken, bleken bij een echte meting zelf lek. Wie op zo'n stempel afgaat, koopt zekerheid die er niet is.
Het probleem is niet dat certificering bestaat. Het probleem is dat het stempel en het gedrag los van elkaar zijn komen te staan. Het stempel leeft in een document. Het gedrag leeft in het netwerkverkeer. Zolang niemand die twee tegen elkaar houdt, kan een lekke site een schoon keurmerk dragen.
Dat is te repareren, en het is niet ingewikkeld. Je opent de site zoals een echte bezoeker dat doet, en je legt vast wat het toestel verlaat. Elke verbinding naar een derde partij staat dan zwart op wit in een opgeslagen bestand. Je legt die lijst naast wat het keurmerk belooft, en het verschil springt eruit. Dat is precies wat ik doe, en het is de reden dat mijn oordeel over een certificeerder harder is dan een tegenoordeel. Ik lever de vastgelegde verbindingen erbij. De certificeerder levert het proces waarlangs hij tot zijn stempel kwam. Die twee spelen niet in dezelfde categorie. Het ene is te controleren, het andere vraagt om vertrouwen.
Alles bij elkaar, de afvinkers, de lopendeband-pentests, de KPI-jagerij, de journalisten zonder de juiste kennis en de certificaten zonder inhoud, vormt een dronken, giftige soep. Ze denkt heel wat te doen en loopt in de praktijk als een kip zonder kop rondjes. En er gaat geld doorheen, veel geld. Budgetten voor audits, voor keurmerken, voor compliance-afdelingen. Het meeste daarvan koopt papier dat de werkelijkheid niet raakt.
Ik schrijf dit hard op, want de zachte versie ervan houdt het systeem in stand. Iedereen doet formeel zijn werk. De pentester levert zijn rapport, de certificeerder zijn stempel, de journalist zijn stuk, de afdeling haalt haar KPI. Elke schakel is correct en de optelsom beschermt niemand. Dat is precies het soort systeem waar de vorm klopt en de uitkomst nergens op slaat.
De KPI-jagerij verdient daarbij een aparte opmerking. Zodra je een getal tot doel maakt, gaat iedereen dat getal najagen en verdwijnt de zaak erachter uit beeld. Een afdeling die op het aantal afgeronde audits wordt afgerekend, rondt audits af. Of die audits ergens iets beschermen, valt buiten het getal, en dus buiten de aandacht. Zo raakt de meetlat losgezongen van waar hij voor stond. Het is dezelfde beweging als bij het keurmerk. De maat gaat een eigen leven leiden en de werkelijkheid die hij zou meten, wandelt weg.
Tegen die achtergrond is het te verwachten dat gemeten, controleerbaar werk opvalt. Dat komt doordat de lat zo laag ligt dat een heldere meting met bewijs eruit springt. Het zegt op zichzelf weinig over mij. Ik lever een HAR-bestand, een lijst van ontvangers, een reproduceerbare procedure. Wie het niet gelooft, kan het nameten. Dat verklaart een groot deel van de tractie. Mensen herkennen het verschil tussen een vinkje en een feit, ook als ze de techniek erachter niet volgen.
Het onderscheid dat de aandacht trekt is dat van bewijs tegenover bewering. De rest van het veld levert beweringen: een stempel, een geruststelling, een hoog-over verhaal. Ik lever iets wat je zelf kunt controleren. In een omgeving vol beweringen valt het ene controleerbare feit vanzelf op.
Er speelt nog iets mee, denk ik. Mensen voelen aan wanneer ze worden gerustgesteld en wanneer ze iets krijgen wat standhoudt. Een geruststelling zonder grond laat een vaag ongemak achter, ook bij wie de techniek niet volgt. Een meting die je desnoods aan een kennis kunt voorleggen om te laten natrekken, geeft een ander soort houvast. Ik vermoed dat een deel van de weerklank uit dat verschil in gevoel komt. Het is prettiger om iets te delen waarvan je weet dat het klopt dan iets waarvan je maar moet hopen dat het klopt.
Voor de zuiverheid het bewijsniveau. De meting van de negen certificeerders is gemeten en te herhalen. Dat kranten hoog scoren op overtredingen is afgeleid uit metingen aan hun sites. Dat de lage lat de belangrijkste verklaring is voor de tractie, is mijn eigen gevolgtrekking, gedragen door wat ik in het veld zie, en dus een vermoeden en geen meting. Ik houd die drie uit elkaar, zodat de lezer weet waar de grond hard is en waar ik redeneer.
Wat blijft staan is dit. Het veld levert overwegend beweringen, en ik lever iets wat je kunt controleren. Zolang dat verschil bestaat, zal controleerbaar werk blijven opvallen, en zal de aandacht ervoor weinig zeggen over mij en veel over de staat van de rest.
Mijn stukken en claims worden vaak net verkeerd gelezen, waarna er een eigen verhaal van wordt gemaakt. Daarom publiceer ik alles zelf narekenbaar, met de bron erbij. Zodat wie het anders vertelt, altijd terug te leiden is naar wat er echt staat.
Mijn stukken en claims worden vaak net verkeerd gelezen. Daarna wordt er een eigen verhaal van gemaakt. Een nuance valt weg, een cijfer verschuift, en opeens staat er iets scherpers of iets slaps dan ik schreef.
Het patroon is voorspelbaar. Ik schrijf dat een tracker op een gemeten site pas vuurt na akkoord. In de doorgifte wordt dat "de site bespioneert je". Ik schrijf dat een cookiemuur meer partners meldt dan er in de banner zichtbaar zijn. In de doorgifte wordt dat een rond getal dat ik nooit noemde. De richting van de fout wisselt. Soms wordt mijn bevinding aangedikt tot een schandaal. Soms wordt ze afgezwakt tot een schouderophalen. In beide gevallen staat er iets anders dan de meting.
Dit is geen kwade wil van één redactie. Het is de natuurkunde van doorvertellen. Elke schakel comprimeert. Een kop moet korter dan de alinea, een tweet korter dan de kop, een gesprek aan tafel korter dan de tweet. Bij elke stap valt de voorwaarde weg die de claim precies maakte. "Na akkoord" verdwijnt als eerste, want die drie woorden dragen de hele nuance en kosten ruimte.
Er speelt nog iets. Een bevinding met een voorwaarde erin is minder deelbaar dan een bevinding zonder. "Het vuurt pas na akkoord" nodigt uit tot nadenken. "Ze bespioneren je" nodigt uit tot delen. De versie die reist, is de versie die de voorwaarde kwijt is. Dat de scherpe versie wint, is een selectie-effect, geen samenzwering.
Dit is afgeleid, geen meting. Ik heb geen telling van hoe vaak mijn claims onderweg vervormen. Ik zie het patroon terugkomen, en de mechaniek erachter is bekend uit hoe informatie zich door schakels verplaatst.
Hierop is één antwoord dat werkt. Ik publiceer alles zelf, narekenbaar, met de bron erbij. De HAR-file staat erbij, de meetopzet staat erbij, het bewijsniveau staat erbij. Wie mijn conclusie wil betwisten, kan naar dezelfde ruwe data en zelf tellen.
Het gaat me niet om wantrouwen tegen journalisten. Ik doe het om een simpele reden. Wie het anders vertelt, is altijd terug te leiden naar wat er echt staat. De verdraaiing wordt zichtbaar zodra je haar naast het origineel legt. Zonder dat anker is elke versie even geloofwaardig, en dan wint de scherpste. Met dat anker is er een versie die voorgaat.
Dat is ook waarom ik niet leun op een enkele redactie om mijn werk door te geven. Eén tussenschakel is één plek waar de nuance kan sneuvelen zonder dat iemand het merkt. Als het origineel openligt, doet die schakel er minder toe. Hij kan mijn stuk samenvatten zoals hij wil. De lezer die twijfelt, kan langs de samenvatting heen naar de meting kijken.
Een anker heeft één eigenschap die telt. Het beweegt niet mee. Als ik schrijf dat op een specifieke site de tracker ook na weigeren vuurde, dan staat de HAR erbij die dat laat zien. Die file verandert niet als iemand de bevinding navertelt. Hij is wat hij is.
Dat verschuift de bewijslast naar de juiste plek. Wie zegt dat ik overdrijf, moet de meting weerleggen, niet mijn woordkeus. Wie zegt dat ik het te licht breng, idem. De discussie gaat over de data. Dat is de enige discussie die ik kan winnen of verliezen op inhoud, en dat is precies de discussie die ik wil.
Het maakt de meting ook toetsbaar op het punt waar ik het mis kan hebben. Een naam in de code is nog geen bewijs van wat een partij doet. Een enkele overtuigde waarneming is nog geen betrouwbare meting. Door het bewijs erbij te leggen, geef ik iemand anders de kans om mijn eigen fout te vinden. Dat is de prijs van narekenbaarheid, en die betaal ik graag.
Concreet houd ik me aan een paar regels. Elke bevinding krijgt een bewijsniveau: gemeten, afgeleid, of vermoed. Elke meting krijgt haar ruwe bron ernaast. Elke claim schrijf ik met de voorwaarde erin, ook als die voorwaarde de zin minder deelbaar maakt. "Na akkoord" blijft staan, juist omdat het onderweg als eerste sneuvelt.
Ik accepteer daarmee dat mijn versie minder viraal gaat dan de vervorming ervan. Dat is een reële kost. De scherpe naverteling reist verder dan mijn voorzichtige origineel. Ik neem die kost omdat het alternatief erger is. Een claim die goed reist en niet klopt, keert vroeg of laat terug als iets dat mij ongelijk geeft, en dan sta ik met lege handen. Een claim die traag reist en klopt, blijft staan zolang de data staat.
De winst is vertrouwen dat je kunt controleren. Niemand hoeft mij op mijn woord te geloven. Dat is precies de bedoeling. Ik vraag geen krediet, ik lever het bewijs, en ik laat de deur open voor wie het beter weet.
Er is een reden waarom dit zo hardnekkig is. Een verdraaiing en de correctie erop reizen niet even ver. De scherpe versie gaat de wereld in op dag één, met alle vaart die scherpte geeft. De correctie komt dagen later, is saaier, en bereikt een fractie van de mensen die de fout al hebben gezien. Wie de correctie mist, houdt de fout.
Dat maakt narekenbaarheid vooraf belangrijker dan rechtzetten achteraf. Een rechtzetting jaagt een verhaal na dat al een voorsprong heeft. Een openliggend origineel loopt niet achter de feiten aan. Het staat er vanaf het begin, en het blijft staan. Wie maanden later de bevinding tegenkomt in een vervormde vorm, kan alsnog naar de bron. De correctie hoeft die persoon niet op tijd te bereiken, want het bewijs wacht op hem.
Neem een concrete claim uit mijn eigen werk. Ik schrijf: "op deze gemeten site vuurt de tracker pas nadat de bezoeker op akkoord heeft geklikt". Die zin heeft drie dragende delen. Deze site, dus geen uitspraak over alle sites. De tracker vuurt, dus er vertrekt echt verkeer. Pas na akkoord, dus de keuze van de bezoeker doet ertoe.
Volg wat er in de doorgifte mee gebeurt. Eerst valt "deze" weg, want een kop generaliseert. Dan valt "pas na akkoord" weg, want dat is de langste voorwaarde en de moeilijkste om kort te zeggen. Wat overblijft is "sites bespioneren je". Die zin is niet wat ik mat. Ze is scherper, ze reist verder, en ze is verkeerd. De bezoeker die weigert, wordt in mijn meting juist met rust gelaten. De vervorming heeft precies het deel weggegooid dat de burger een handvat gaf.
Zo bekeken is de verdraaiing zelden een leugen. Ze is een reeks kleine wegvallingen, elk begrijpelijk, die samen iets anders opleveren dan er stond. Daar is geen kwade wil voor nodig. Er is alleen een keten voor nodig, en genoeg schakels.
Dit voorbeeld laat ook zien waarom ik de voorwaarde koppig laat staan, ook als een redacteur hem eruit wil hebben voor de leesbaarheid. Elke voorwaarde die ik schrap om vlotter te lezen, is een schakel die ik zelf toevoeg aan de keten van vervorming. Ik begin dan met wat er onderweg tóch al sneuvelt. Liever schrijf ik één zin te veel en houd ik de claim heel, dan dat ik hem alvast versimpel en de lezer met een halve waarheid achterlaat. De precisie kost leesplezier, en dat is de goedkoopste prijs die ik ken voor een bewering die overeind blijft.
Het woord cookie verbergt een techniek die je over sites heen volgt
Het woord cookie klinkt als een koekje, iets onschuldigs. Maar het is een manier om je te herkennen en te volgen, over sites heen. Een vriendelijk woord voor een techniek die allesbehalve vriendelijk is.
Het woord cookie klinkt als iets onschuldigs uit de keuken. Wat er werkelijk staat zijn 18 tot 47 tracker-pixels per pagina (FTC/EFF), die je gedrag doorgeven aan een markt die je niet ziet. De taal maakt de omvang kleiner dan hij is. Daarom kies ik voor het woord tracker, niet cookie.
"Het is geen samenzwering. Het is geen hack. Het is hoe het systeem op dit moment werkt." Niemand hoeft kwaad te willen. De pixels doen gewoon waarvoor ze geplaatst zijn, en het profiel dat eruit rolt reist verder dan de plaatser overziet, tot in lijsten waarmee 65-plussers worden gebeld.
"Onwetendheid is geen excuus. De verwerkingsverantwoordelijke is aansprakelijk voor de gehele verwerkingsketen die zij in gang zet." Een vriendelijk woord ontslaat niemand van die aansprakelijkheid. De boetes onderstrepen het: Apohem 8 mln SEK, Avanza Bank 15 mln SEK, Apoteket AB 37 mln SEK (IMY), Meta EUR 1,2 mrd (Ierse DPC, 2023).
"Schrap elke tracker die je niet in een zin kunt uitleggen." Dat is de toets. Wie een tracker niet in een zin kan verantwoorden, plaatst iets waarvan hij de bestemming niet kent. En dan is cookie inderdaad een te vriendelijk woord voor wat er vertrekt.
Een scammer belt je 73-jarige moeder. Hij weet haar volledige naam, haar adres, dat haar man drie jaar geleden is overleden, dat ze klant is bij ING en dat haar zoon vorige maand een nieuwe auto heeft gekocht. Hij klinkt overtuigend. Hij heet zogenaamd Mark, fraude-afdeling. Binnen 40 minuten staat €28.000 op een geldezelrekening.
Hoe wist Mark dit allemaal?
Het korte antwoord: omdat jij, én je moeder, websites bezoeken die geld verdienen aan tracking pixels. En omdat geen enkele bestuurder van die websites weet wat die pixels precies doen.
Dit artikel legt de keten bloot. Het is geen samenzwering. Het is geen hack. Het is hoe het systeem op dit moment werkt.
De keten van tracking pixel tot bankhelpdeskfraude, in zeven stappen.
De keten in zeven stappen
Stap 1, Jij bezoekt een vertrouwde website. Een Nederlandse krant, webshop, verzekeraar, of ziekenhuissite. Tracking pixels vuren soms af voordat je ergens op klikt.
Stap 2, De pagina deelt je data met tientallen partijen. IP-adres, browsertype, klikgedrag, soms ingevulde formuliervelden. By design onzichtbaar. De FTC en EFF hebben dit gerapporteerd: gemiddeld 18-47 tracker-pixels per pagina op vertrouwde bedrijfssites.
Stap 3, Adtech-bedrijven aggregeren. Meta, Google, ad-exchanges combineren duizenden datapunten tot één profiel over weken en maanden.
Stap 4, Databrokers verrijken met offline data. Acxiom, Epsilon, kredietinformatiebureaus koppelen online profielen aan kadaster, autobezit, abonnementen, gezinssamenstelling. Duizenden datapunten per persoon.
Stap 5, Het profiel wordt verkocht of gestolen. Legaal aan marketeers en verzekeraars. Illegaal via datalekken en Telegram-handel. Het OM Noord-Nederland eiste in april 2026 celstraffen tot vier jaar tegen handelaren in lijsten als “106 vrouw 65 plus”, profielen die exact zo samengesteld waren.
Stap 6, De scammer bouwt zijn aanval. Met échte naam, geboortedatum, bank, gezinsleden wordt bankhelpdeskfraude overtuigend. De FBI IC3 rapporteert dat meer dan de helft van fraudezaken tegen ouderen direct verband houdt met blootgestelde data.
Stap 7, De betalende oma. Het eindresultaat van de keten: een kwetsbaar slachtoffer verliest geld aan bankhelpdeskfraude. Oma verliest €28.000. De website van stap 1 weet van niets, en draagt toch verantwoordelijkheid voor de keten die zij in gang zette.
Waarom dit ertoe doet
Drie Zweedse IMY-zaken uit 2024–2025 illustreren wat “onwetendheid” de markt kost.
Apohem (online apotheek): Meta Pixel deelde namen, e-mails, telefoonnummers en aankoopgeschiedenis. Geen DPIA, geen risicoanalyse. 8 miljoen SEK boete. Het probleem: marketing vroeg de pixel aan, IT zette hem in via Google Tag Manager, de privacy-officer zag het niet, het bestuur tekende af op “AVG-compliant”. Niemand controleerde wat er feitelijk werd verzonden.
Avanza Bank: marketing zette per ongeluk Meta’s “Automatic Advanced Matching” aan. Leningbedragen en rekeningnummers vlogen naar Meta. 15 miljoen SEK boete. Zweedse IMY: “Dit zijn financiële gegevens. De bank was aansprakelijk, zelfs al wisten zij niet dat het gebeurde.”
Apoteket AB: persoonsnummers en gezondheidsgerelateerde data lekten ondanks filters. 37 miljoen SEK boete. Dit was geen hack, het systeem werkte zoals ontworpen.
Onwetendheid is geen excuus. De verwerkingsverantwoordelijke, in dit geval de website, is aansprakelijk voor de gehele verwerkingsketen die zij in gang zet.
, Zweedse IMY
Meta zelf betaalde €1,2 miljard aan de Ierse DPC in 2023 voor onrechtmatige datatransfers naar de VS.
Beleidscontext
AVG artikel 6, rechtmatige grondslag voor verwerking. “Gerechtvaardigd belang” voor marketing is een veelgebruikte route, maar de verwerking mag niet onevenredig inbreuk maken op de rechten van betrokkenen.
AVG artikel 32, veiligheidsniveaus. Controleer wat je pixels verspreiden, niet alleen dat ze geladen worden.
AVG artikel 35, DPIA verplicht voor risicovolle verwerking. De Apohem-zaak werd gewonnen door Noyb omdat Apohem géén DPIA had gemaakt voor Meta Pixel.
AVG artikel 44-49, internationale datatransfers. Veel trackers sturen data naar de VS. Na Schrems II (HvJ EU, 2020) is dat juridisch risicovol zonder aanvullende waarborgen.
AVG artikel 82, schadevergoeding. Sinds C-300/21 (HvJ EU, 2023) kunnen slachtoffers rechtstreeks aansprakelijkheid eisen. Oma kan de eerste website aanklagen voor schadevergoeding, zelfs als de directe oorzaak een scammer was, zolang te bewijzen valt dat de datablootstelling de fraude mogelijk maakte.
In Nederland heeft de Autoriteit Persoonsgegevens sinds 2023 standaard-AVG-vervolgingen tegen databrokers ingesteld, en behandelt het OM datalekken steeds vaker als strafrecht.
Wat kunt u morgen doen
Voer deze week een pixel-audit uit. Laat IT inventariseren welke trackers op jullie sites en apps draaien en naar welke partijen ze data sturen. Gebruik browser-tools als The Markup Blacklight of een Google Tag Manager-export. Leg een spreadsheet aan: tracker → ontvanger → data → rechtsgrond.
Eis een DPIA per marketing-tracker. Onder AVG artikel 35 is dit verplicht. Elke Meta Pixel, elke Google Analytics-integratie verdient een eigen risicoanalyse. Laat twee vragen beantwoorden: welke persoonsgegevens verlaten ons domein, en wat kunnen die ontvangers ermee doen?
Schrap elke tracker die je niet in een zin kunt uitleggen. Vraag commercial: waar gaat deze data naartoe en waarom? Kunnen zij het niet beantwoorden in dertig seconden, haal hem weg. Dit is een verwerkingsbeslissing met persoonlijke aansprakelijkheid.
Breng je verwerkersketen tot het einde in kaart. Niet alleen wie je data ontvangt, maar wat zij ermee doen, aan wie zij doorverkopen, en of die partijen in de adtech/databroker-keten zitten. De AVG maakt jou aansprakelijk voor de gehele keten.
Zet tracking op de bestuurstafel. Een pixel plaatsen is een verwerkingsbeslissing met persoonlijke aansprakelijkheid voor bestuurders. Onderzoek: dekt je D&O-verzekering AVG-boetes? Vaker niet dan wel.
Persoonlijke actiepunten
Zoek je naam op via Google en people-search-sites. Schrik niet. Dit is in de publieke adtech-keten beschikbaar.
Gebruik je AVG-rechten. Artikel 15-21 geeft je recht op inzage, correctie en verwijdering.
Beperk wat je deelt. Loyaliteitskaarten, online quizzes, “gratis” apps zijn datakanalen.
Praat met je ouders. Bankhelpdeskfraude richt zich op 65+. Als zij weten dat bellers hun gegevens kunnen hebben zonder hen te kennen, herkennen zij de truc sneller.
Bij slimme apparaten in huis is toestemming een formaliteit geworden
Slimme apparaten komen je huis binnen als iets handigs. De voorwaarden accepteert iedereen, niemand leest ze. Maar als niemand ze leest, is toestemming een formaliteit geworden, geen echte keuze.
In de voorwaarden staat vaak een geruststellend woord: verwerker. Alsof daarmee de kous af is. Maar "'Verwerker' is een zelf-claim en geen vrijspraak." En scherper: "Het etiket 'verwerker' is geen eindpunt van de keten. Het is de schakel die de keten onzichtbaar maakt." De term die je moet geruststellen, is precies de term die het zicht wegneemt.
Papier zegt het een, de netwerkverbinding zegt het ander. Het EFF mat: "Our testing, using Ring for Android version 3.21.1, revealed PII delivery to branch.io, mixpanel.com, appsflyer.com and facebook.com." Naar Facebook ging een anon_id die een reset van de advertising-ID overleeft, naar AppsFlyer sensordata (magnetometer, gyroscoop), naar MixPanel volledige naam plus e-mail. Northeastern en Imperial testten 81 apparaten in 34.586 experimenten: 72 van de 81 contacteerden niet-first-party partijen, alle 81 lekten plaintext.
"Je woonkamer wordt behandeld als een webpagina vol trackers." Achter de zelf-claim verwerker zit een markt: de EFF-lijst telt 750+ databrokers, Azerion US Inc. (een NL-concern) zit in Californie, Mobilewalla verhandelt 500M+ advertentie-ID's. De rechter kijkt door de constructie heen: HvJ C-604/22 (7 maart 2024) en het Brussels Marktenhof (EUR 250.000, 14 mei 2025, TCF ongeldig).
De voorwaarden stellen een woord voor. De code stelt de werkelijkheid voor.
Hoe data uit een slim apparaat in een Nederlandse woonkamer, een deurbel, een lamp van een tientje, een tv, via attributie-SDK’s en advertentieveilingen belandt bij bedrijven die zich in de Verenigde Staten zélf als datahandelaar registreren, en bij servers in China. Een forensische uiteenzetting van een keten die al jaren in openbaar onderzoek ligt, maar die niemand nog van begin tot eind had doorgetrokken voor de Nederlandse gebruiker. Getoetst aan het P-SEP-model.
Dit is deel twee. In het eerste dossier ging het over de Ray-Ban Meta, een camera op andermans gezicht, en jij de voorbijganger zonder knop. Deze keer draait het om het apparaat dat de meesten zonder nadenken aan de wifi hangen: de slimme stekker, de deurbel, de lamp van een tientje, de tv. Wat doet zo’n ding eigenlijk, als het eenmaal binnen staat?
Toen ik mijn schoonmoeder hielp met een slimme stekker van een tientje, zo’n witte van een merk dat je nog nooit hebt gehoord, “werkt met de app”, duurde het opzetten vier minuten. Wat ik haar niet kon vertellen, omdat ik het zelf op dat moment niet wist, is waar die stekker daarna mee praat. Niet met haar telefoon, maar met een server in China en een handvol advertentiebedrijven aan de andere kant van de wereld.
Illustratie · Mick Beer. De inbreker die je zelf binnenliet: het slimme apparaat staat in de woonkamer, met jouw toestemming, en kijkt terug.
Dat is geen complot en geen gadget-review. Het is wat er feitelijk gebeurt, en het staat allemaal al beschreven, in academische papers, in repositories op GitHub, in besluiten van de Amerikaanse FTC, in een arrest van het Europees Hof van Justitie, en in een wettelijk register dat de bedrijven zélf hebben ingevuld. Het enige wat ontbrak, was iemand die de schakels naast elkaar legt en de hele keten in één lijn trekt: van het apparaat in de woonkamer tot de eindbestemming, en de landen waar het heen gaat.
Dit dossier doet dat. Het hackt niets en meet niets nieuws, het brengt bestaand, openbaar onderzoek samen, houdt elke stream tegen openbare lijsten, en benoemt eerlijk waar het bewijs hard is en waar het ophoudt. Deze keer doe ik het andersom: ik begin bij het eindpunt, bij de partij die zich aan het eind van de keten zélf als datahandelaar laat registreren, en werk terug naar het apparaat in de woonkamer waar alles begon. En ik zeg de kern vast: dit is geen lek en geen incident. Het is een markt, en hij is zo ontworpen dat jij hem niet ziet.
De keten in één oogopslag
#
Schakel
Wat er gebeurt
Bewijs
1
Eindbestemming
Een geregistreerde data broker, vaak buiten de EU
309-broker-lijst (PRC/EFF); CalPrivacy-boetes
2
RTB / SDK-markt
De identifier wordt geveild: advertising-ID + locatie
FTC (X-Mode, Mobilewalla); HvJ-EU + Brussel (TCF)
3
De “verwerker”-grens
Het attributiebedrijf schuilt achter een etiket
AppsFlyer-zelfverklaring vs. HvJ-EU-leer
4
Classificatie
De bestemming blijkt een bekende tracker/adverteerder
Disconnect services.json
5
Apparaat / app
Identifiers, PII en sensordata vertrekken naar buiten
Overzicht. De volledige keten: van apparaat in de woonkamer tot geregistreerde data broker in een derde land. Teal = startpunt, grijs = tussenschakels, rood = eindbestemming.
01 · De eindbestemming: wie staat er in het register
Begin bij het eind van de keten. Daar staat het hardste bewijs, en het is een document dat de bedrijven zélf hebben ingevuld. Vier Amerikaanse staten, Californië, Vermont, Texas en Oregon, houden een wettelijk verplicht, openbaar register bij waarin bedrijven zich als data broker moeten registreren. Privacy Rights Clearinghouse en de EFF voegden die vier samen tot één genormaliseerde lijst van ruim 750 unieke data brokers. In een brief aan de procureur-generaal van Vermont (24 juni 2025) somden ze 309 brokers op die zich in de ene staat wél, in Vermont níét registreerden, elk met markeringen: * = verzamelt geolocatie, ‡ = verzamelt data van minderjarigen. [21,22]
Wat staat er, en wat niet? De attributie/analytics-bedrijven uit de streams (AppsFlyer, Branch, MixPanel, Meta, Crashlytics) staan er niet exact op. Zij schuilen achter de verwerker-status uit Schakel 3. Maar de partijen waar het SDK/RTB-ecosysteem in uitmondt staan er wél, zelf-geïdentificeerd als datahandelaar:
De eindbestemming, geregistreerde brokers (selectie uit de 309)
Broker
Markering
Rol
X-Mode Social / Outlogic
geo + minderj.
FTC-beboete SDK-locatiebroker (Schakel 2)
InMarket Media
geo + minderj.
FTC-beboet; SDK-locatiedata
SafeGraph
geo + minderj.
Locatiebroker
UberMedia / Lotadata
geo + minderj.
Locatiebrokers
Quadrant Global / Mobile Technology Corp (Onspot)
geo
Locatiebrokers
InMobi / Unity Technologies / Start.io
geo
Mobiele ad/SDK-spelers
En cruciaal voor het Nederlandse verhaal: er staan Europese en niet-Amerikaanse brokers op de lijst. Dit is geen puur Amerikaans fenomeen, het ecosysteem reikt tot in eigen land.
EU / niet-VS brokers op de PRC/EFF-lijst (namen exact zoals geregistreerd)
Broker (zoals geregistreerd)
Rechtsvorm wijst op
Geregistreerd in
Markering
Azerion US Inc.
VS-dochter, NL-concern
California (CPPA), Texas
geo
Adsquare GmbH
Duitsland
California (CPPA + AG), Texas
geo + minderj.
ID5 Technology Ltd
Verenigd Koninkrijk
California (CPPA + AG)
geo + minderj.
LoopMe Ltd
Verenigd Koninkrijk
California, Texas, Oregon
geo + minderj.
Online Advertising Network Sp. z o.o.
Polen
California (CPPA + AG)
geo + minderj.
Eyeota Pte Ltd
Singapore
California (CPPA + AG)
geo + minderj.
Ipsos
Frankrijk
California (AG, legacy)
geo + minderj.
TL1MKT SL
Spanje
California (AG, legacy)
geo + minderj.
Media.Net Advertising FZ-LLC
Verenigde Arabische Emiraten
California (CPPA)
,
Lees die eerste regel nog eens, maar lees hem precies. Wat in het register staat is Azerion US Inc.: de Amerikaanse dochter van het Nederlandse concern Azerion, geregistreerd in Californië met de markering “verzamelt geolocatie.” Het is dus niet het NL-moederbedrijf zelf dat zich inschreef, maar een entiteit van een Nederlands concern die haar status als datahandelaar in de VS zwart-op-wit heeft erkend. De datahandel zit niet alleen ver weg aan het eind van de keten, een schakel ervan draagt een Nederlandse naam. De landen in de tweede kolom zijn afgeleid uit de rechtsvorm in de geregistreerde naam (GmbH, Ltd, Sp. z o.o., SL, Pte); de lijst zelf vermeldt geen vestigingsland.
Waar het verkeer heen gaat, domeinen en doorgifte per bedrijf
De vestiging van een bedrijf zegt weinig over waar je data fysiek heen reist. Hieronder per partij de bekende ad- en analytics-domeinen en, waar gedocumenteerd, de doorgifte naar landen búíten de vestiging. Bron voor de classificatie en domeinen is de openbare Disconnect-lijst (zoals in Schakel 4); voor cloud-endpoints de eigen documentatie van het bedrijf. Bewijsniveau: domeinen en categorie zijn hard (geciteerd); de fysieke serverlocatie is deels inferentie (CDN/cloud), expliciet als zodanig gemarkeerd.
Ad-/analytics-domeinen en doorgifte (hard = geciteerd, infer. = gefundeerde inferentie)
De patronen die eruit springen: een Chinees bedrijf als Alibaba heeft een bucket op Amerikaanse servers, en Tuya stuurt élk niet-toegewezen land standaard naar zijn West-Amerikaanse datacenter, data kan dus zowel China als de VS raken. UK-partijen als ID5 en LoopMe dragen naast hun EU-sync ook niet-EU- en US-domeinen. En de location-brokers hebben helemaal geen herkenbare “eigen” domeinen: zij oogsten uit de bidstream van ánderen, wat precies verklaart waarom ze zo moeilijk te traceren zijn.
Het schil-model. Het schil-model: hoe verder de data van het apparaat reist, hoe zwakker de documentatie. De kern (apparaat → SDK) is hard gemeten; de buitenste schil (broker → downstream → overheid) is alleen via FTC-klachten en journalistiek te volgen, en bij de rand weet de broker zélf niet meer waar de data vandaan komt.
Het schil-model: documentatie vervaagt naar buiten
Bij dit dieptewerk dringt één patroon zich op dat zelf de kern van het verhaal is: hoe verder de data van je apparaat af reist, hoe slechter het te documenteren valt. Niet omdat het ophoudt, maar omdat elke schil minder zichtbaar is dan de vorige. Dat is geen zwakte van het onderzoek, het is de structuur van de markt, en het verklaart waarom niemand dit eerder van begin tot eind had getrokken.
Schil 1, de kern (hard). Apparaat naar eerste SDK-endpoint. Direct gemeten: de EFF-ontleding van Ring, de Northeastern/Imperial-metingen (81 apparaten), de Alexa Echo-paper, en de eigen documentatie van Tuya. Hier kun je elke claim met een primaire bron staven.
Schil 2, de veiling (grotendeels hard). SDK/attributie naar RTB-veiling en de TC String. De inhoud van een bid-request en de endpoints staan in IAB- en Google-specificaties; het HvJ-arrest C-604/22 en de Brusselse uitspraak bewijzen dat het toestemmingsfundament ongeldig is.
Schil 3, de broker (gemengd). Veiling naar geregistreerde data broker. De staatsregisters geven harde namen, maar ze zijn aantoonbaar incompleet, de EFF/PRC-analyse telde honderden bedrijven die zich in de ene staat wél, in de andere níét registreerden.
Schil 4, downstream (zwak). Broker naar de volgende koper: andere brokers, vierde partijen, overheidscontractanten. Hier valt het bijna niet meer te volgen. De FTC stelde vast dat X-Mode aan “honderden klanten” verkocht; wie dat precies zijn, staat in geen enkel openbaar register. En in de Oostenrijkse zaak kon de broker het zélf niet meer zeggen.
De waarde van dit dossier zit niet in één extra meting, maar in het benoemen van die vervaging. Tot Schakel 4 kun je een primair document aanwijzen; bij Schakel 3 leun je op registers; bij Schakel 2 op handhavingsdossiers en journalistiek, en aan de buitenrand stopt zelfs de broker met antwoorden. Het verlies van traceerbaarheid ís het verhaal.
Wat het diepere spoor opleverde, de buitenste schil
Een aantal bevindingen uit het uitgebreide bronwerk, met het bewijsniveau er telkens bij:
Tuya's default naar de VS (hard). Tuya's eigen documentatie noemt datacenters in China (Tencent Cloud), West- en Oost-VS, Centraal- en West-Europa, India (AWS, sinds 2020) en Singapore (sinds 3 juni 2025), en stelt letterlijk dat landen die niet in de tabel staan worden toegewezen aan het West-Amerikaanse datacenter. Een Chinees platform dat onbekende landen standaard op Amerikaanse servers zet: de doorgifte zit in het ontwerp.
Adobe's demdex (hard, eigen docs). Adobe's Experience Cloud ID Service roept een regionale server aan op dpm.demdex.net; de demdex-cookie levert een persistente cross-domein-identifier. Oudere Analytics-identifiers lopen via adobedc.net, 2o7.net en omtrdc.net, precies het omtrdc.net dat Northeastern bij Amerikaanse apparaten zag.
Mobilewalla uit verloren biedingen (hard, FTC). 500M+ advertising-ID's met precieze locatie; EFF schat dat circa 60% rechtstreeks uit RTB-veilingen kwam, óók uit biedingen die het bedrijf verlóór, tegen de regels van de veiling in. Segmenten als “zwangere vrouwen” en geofences rond woningen van zorgpersoneel.
Gravy/Venntel tot op de meter (hard, FTC). Gravy's documentatie eist locatie met “ten minste 5 decimalen”, nauwkeurig tot ~één meter, genoeg om te zien in welke kámer iemand is. Venntel betrekt locatie exclusief van Gravy en verkoopt uitsluitend aan de publieke sector; het beloofde DHS “15 miljard locatiepunten van 250 miljoen apparaten per dag.” In januari 2025, weken na de FTC-order, lekte Gravy een groot databestand (gerapporteerd als ~17 TB).
Babel Street / Locate X (hard, journalistiek + contract). Een nieuw zichtbare schakel: Locate X bouwt op advertising-ID-locatie uit de gewone bidstream. 404 Media toonde in 2024 hoe één toestel van Alabama naar een Florida-kliniek te volgen was; toegang werd verleend op de enkele bewering van toekomstig opsporingswerk. De FBI tekende in 2022 een contract tot $27 miljoen met Babel Street.
SafeGraph / Veraset (hard, journalistiek). Journalisten kochten een week locatiedata van 600+ Planned Parenthood-locaties voor ~$160; Google bande SafeGraph's SDK uit de Play Store (juni 2021); SafeGraph verkocht aan de CDC ($420.000). Spin-off Veraset levert ruwe per-toestel-data.
Kochava (hard, lopend). De FTC-zaak (sinds 2022) overleefde in februari 2024 een verzoek tot niet-ontvankelijkheid; een schikking is in voorbereiding. Kochava betrekt data van andere brokers en verkoopt precieze geolocatie + MAID's.
En de handhaving is echt. CalPrivacy richtte eind 2025 een Data Broker Enforcement Strike Force op. ROR Partners betaalde $56.600 nadat het profielen op 262 miljoen Amerikanen bleek te bouwen zonder zich te registreren; Accurate Append betaalde $55.400; Datamasters $45.000 plus een verkoopverbod op data van Californiërs. De boetes lopen op tot $200 per consument per dag voor het negeren van een verwijderverzoek. Dit zijn geen papieren regels. [22]
Schakel 1. Schakel 1: het SDK/RTB-spoor mondt uit in bedrijven die zich zélf als data broker registreren, in de VS én in Europa (waaronder Azerion, NL).
02 · De markt: real-time bidding en de SDK-handel
Dat de poort werkelijk doorgeeft aan de handel, is geen vermoeden meer. Twee toezichthouders hebben het mechanisme feitelijk vastgesteld, de FTC in de Verenigde Staten, het Europees Hof van Justitie in de EU. Dit is de schakel die ervoor zorgt dat we niet hoeven te speculeren.
De Verenigde Staten: de FTC bewijst de SDK-pijplijn
Schakel 2. Schakel 2: de SDK levert advertising-ID en locatie aan de veiling; brokers kopen mee, ook uit verloren biedingen. In de EU is het toestemmingssysteem eronder ongeldig verklaard.
X-Mode / Outlogic (FTC-schikking januari 2024, definitief april 2024). De FTC stelde vast dat X-Mode precieze locatiedata verzamelde via third-party apps die zijn SDK hadden ingebouwd, via eigen apps, én door inkoop bij andere brokers. Die SDK zat in honderden apps met miljarden downloads op iOS en Android. De data was gekoppeld aan mobiele advertising-ID’s (MAID), niet geanonimiseerd, en werd verkocht aan honderden klanten, van vastgoed en finance tot private overheidscontractanten. Tot mei 2023 had het bedrijf geen beleid om gevoelige locaties (klinieken, gebedshuizen, opvanghuizen) uit de ruwe data te filteren. De data werd zelfs verzameld ná een opt-out. [13,14,15]
Mobilewalla (FTC, december 2024). Verzamelde tussen januari 2018 en juni 2020 meer dan 500 miljoen unieke advertising-identifiers, gekoppeld aan precieze locatie, óók uit verloren real-time-bidding-veilingen, een praktijk die de RTB-regels zelf verbieden. De FTC bestempelde voor het eerst het verzamelen van data uit advertentieveilingen voor andere doeleinden dan de veiling zelf als een oneerlijke handelspraktijk. [16]
Gravy Analytics / Venntel (FTC, december 2024). Verkocht lijsten van consumenten op basis van bezoeken aan gevoelige locaties, en leidde daaruit segmenten af als politieke voorkeur, religie, medische condities, gezinssamenstelling, en kenmerken waaruit LGBTQ+-status afleidbaar was. [17]
App met SDK → advertising-ID + locatie → veiling/handel → broker → profiel naar gevoelig kenmerk.
Let op wat dit betekent voor de keten: het is exact hetzelfde mechanisme (een SDK in een consumenten-app, een MAID, een veiling) dat in Schakel 5 de Ring-data deed vertrekken. Het verschil is dat de FTC het hele pad heeft gedocumenteerd, tot aan de verkoop. De poort gáát ergens heen.
De EU: het toestemmingsfundament onder RTB is illegaal verklaard
De Amerikaanse zaken gaan over Amerikaans recht. De brug naar Nederland is de IAB Europe-zaak, want die geldt AVG-breed en raakt elke Europese gebruiker. Het Transparency & Consent Framework (TCF) is het systeem dat vrijwel elke cookiebanner in Europa koppelt aan het OpenRTB-protocol, het mechanisme dat je profiel in milliseconden veilt voor advertentieruimte.
Het Europees Hof van Justitie oordeelde op 7 maart 2024 (zaak C-604/22) dat de “TC String”, het signaal dat je toestemmingsvoorkeuren vastlegt, een persoonsgegeven is, en dat IAB Europe gezamenlijk verwerkingsverantwoordelijke kan zijn. [18] Het Brussels Marktenhof bevestigde op 14 mei 2025 de boete van €250.000 en de inhoudelijke bevindingen: het TCF zorgt niet voor geïnformeerde, vrije en specifieke toestemming, en faalt op transparantie, beveiliging en verantwoording. Alle Europese toezichthouders steunden dit via het one-stop-shop-mechanisme. [19,20]
In gewone taal: het toestemmingsfundament onder de hele Europese advertentieveiling is door een rechter onvoldoende bevonden. Dat is de EU-tegenhanger van de FTC-RTB-bevinding, en het geldt voor elke Nederlandse gebruiker wiens slimme apparaat in datzelfde veilingsysteem terechtkomt. Het gaat niet om “het zou kunnen schenden”: een rechter heeft het al vastgesteld.
03 · De “verwerker”-grens, en waarom die niet onschuldig is
Hier zat de verleiding, en hier zat mijn eigen eerste fout. De makkelijke conclusie is: “AppsFlyer, Branch en MixPanel zijn verwerkers, geen datahandelaren, dus de keten stopt hier.” Dat is precies de denkfout die het hele systeem in stand houdt.
“Verwerker” is een zelf-claim en geen vrijspraak. AppsFlyer verklaart in zijn eigen documentatie dat het een data processor / service provider is, dat de app-bouwer de eigenaar en verantwoordelijke is, en dat het zelf geen data verkoopt, koopt of aan profilering doet. [11] Met die status blijft het buiten het data broker-register, want de definitie van een broker eist verkoop zonder directe klantrelatie, en AppsFlyer hééft een contract met de app-bouwer. Een “directe relatie.” Dat is een juridische maas en geen bewijs van onschuld.
Het etiket “verwerker” is geen eindpunt van de keten. Het is de schakel die de keten onzichtbaar maakt.
Illustratie · Mick Beer. 'Just advertising': het bedrijf dat zegt alleen advertenties te dienen, kijkt ondertussen mee. Het verwerker-etiket maakt de blik onzichtbaar.
Drie redenen waarom dat etiket wantrouwen verdient, juist bij een advertentiebedrijf:
Eén: het etiket beschrijft de relatie, niet de daad. Onder de AVG kun je verwerker zijn voor partij A én tegelijk zelfstandig verwerkingsverantwoordelijke voor je eigen doeleinden. Het Europees Hof van Justitie heeft in Fashion ID en in Wirtschaftsakademie vastgesteld dat het de feitelijke invloed op doel en middelen is die bepaalt of je verantwoordelijke bent, niet hoe je jezelf in een contract noemt. [12] Op het moment dat een attributie-SDK identifiers deelt met “integrated partners,” cross-app device-graphs opbouwt of data hergebruikt om de eigen modellen te verbeteren, handelt het naar eigen doel, en is het naar Europees recht medeverantwoordelijke, wat het etiket ook zegt.
Twee: “geen broker” betekent niet “geen handel.” De data eindigt aantoonbaar bij partijen die wél als broker geregistreerd staan (zie Schakel 1). De maas zit in de definitie, niet in de datastroom. Een poort die zegt “ik verkoop niets, ik geef alleen door” is nog steeds de poort waardoor alles gaat.
Drie: voor een attributiebedrijf is “verwerker” intrinsiek verdacht. Een hostingbedrijf dat alleen bestanden opslaat is plausibel een verwerker. Maar een bedrijf wiens hele businessmodel attributie, targeting en het matchen van toestellen aan personen ís, heeft per definitie een eigen belang bij de data. Dat AppsFlyer in de Ring-stream sensordata (gyroscoop, magnetometer, kalibratie) ontving, heeft niets met “heeft deze advertentie tot een installatie geleid” te maken. Dat is extractie voorbij het gestelde doel, en precies daar barst de verwerker-status.
Schakel 3. Schakel 3: de 'verwerker'-claim houdt het bedrijf buiten het register, maar naar HvJ-leer telt de feitelijke invloed.
04 · De bestemming is een bekende tracker
De domeinen uit Schakel 5 zijn geen anonieme servers. Ze zijn te herkennen. Ik heb ze gehouden tegen de openbare Disconnect-lijst, services.json uit de canonieke repository, dezelfde lijst die Firefox en Microsoft Edge gebruiken om trackers te blokkeren. De lijst koppelt elk domein aan een eigenaar en een categorie. Wat de Ring- en Northeastern-streams opleveren: [10]
De lijst telt 1.877 organisaties en 4.773 domein-entries. Wat opvalt: de ontvangers van je deurbel-data zijn niet exotisch. Het zijn dezelfde namen die je browser blokkeert op nieuwssites. AppsFlyer en Branch als adverteerders, Adobe als fingerprinter, Meta in twee categorieën tegelijk. Je woonkamer wordt behandeld als een webpagina vol trackers.
Tuya staat niet in Disconnect, en dat klopt: het is geen web-tracker maar de cloud-eindbestemming zelf. Voor Tuya telt de geografie, niet de tracker-lijst. Twee verschillende takken, de ad/analytics-tak (deze schakel) en de jurisdictie-tak (China), van dezelfde boom.
Schakel 4. Schakel 4: elk stream-domein wordt via de openbare Disconnect-lijst toegewezen aan een categorie en eigenaar.
05 · Wat het apparaat naar buiten stuurt
Begin bij het begin: het ding zelf, in de woonkamer. Drie onafhankelijke onderzoeksgroepen hebben dit op grote schaal gemeten, en hun data, code en methodes staan openbaar. Dit is geen anekdote. Het is herhaalbaar werk.
De deurbel die je naam naar Facebook stuurde (Amazon Ring)
Het scherpst gedocumenteerde geval. De Electronic Frontier Foundation analyseerde in 2020 de Ring-app voor Android, versie 3.21.1, met Frida en mitmproxy, gereedschap dat het versleutelde verkeer onderschept en zichtbaar maakt. De flows zijn gepubliceerd; je hoeft de EFF niet op haar woord te geloven. Wat er vertrok, uitgesplitst per ontvanger: [1,2,3]
Naar Facebook (Meta), via de Graph API, telkens als de app opende, én bij deactivatie na schermvergrendeling. De payload: tijdzone, toestelmodel, taalvoorkeur, schermresolutie, en een unieke identifier anon_id. Óók als je geen Facebook-account had. Het venijn zit in die anon_id: hij overleeft een reset van je advertising-ID, en is dus juist ontworpen om je persistent te blijven volgen, ook nadat je je toestel “schoonveegt.”
Naar Branch (branch.io), een “deep linking”-platform: device_fingerprint_id, hardware_id, identity_id, het lokale IP-adres binnen je huisnetwerk, model, schermresolutie en DPI.
Naar AppsFlyer, een attributiebedrijf: je provider, de installatiedatum en eerste-start van de app, unieke identifiers, een vlag of AppsFlyer-tracking voorgeïnstalleerd op je toestel zat, en, wat het veelzeggendst is, de fysieke sensoren in je toestel: magnetometer, gyroscoop, accelerometer, plus hun kalibratie-instellingen. AppsFlyer kreeg óók een signaal zodra je de Neighbors-buurtwachtfunctie opende. Wat een gyroscoop-kalibratie met “app-attributie” te maken heeft, is een vraag die het bedrijf niet hoeft te beantwoorden, want het noemt zichzelf verwerker. Daarover zo meer.
Naar MixPanel, een analytics-bedrijf, en de grootste ontvanger: je volledige naam, je e-mailadres, OS-versie en model, of Bluetooth aanstond, en het aantal locaties waar je Ring-apparaten had geïnstalleerd.
Van deze vier stond er precies één (MixPanel) in Ring’s eigen lijst van derde partijen. De andere drie werden nergens genoemd. Al het verkeer ging keurig versleuteld over HTTPS. Dat beschermde niet jou; het maakte de tracking juist moeilijker te ontdekken.
Schakel 5. Schakel 5: wat de Ring-app per ontvanger naar buiten stuurt. Eén app, vier trackers, elk een eigen set persoonsgegevens.
De lamp van een tientje die met China praat (Tuya / whitelabel)
De goedkope kant van het spectrum draait grotendeels op één platform: Tuya, een Chinees cloudbedrijf. “Powered by Tuya” of “Works with Tuya” staat op talloze naamloze merken die je voor een paar euro bij webshops koopt. Het probleem zit in het ontwerp: Tuya is van de grond af gebouwd als cloud-platform. Vrijwel alle communicatie tussen het apparaat en de app loopt over servers van derden, en die servers staan in China.
Onderzoekers van Princeton bouwden IoT Inspector, een open-source tool waarmee gewone mensen het verkeer van hun eigen apparaten konden meelezen; sinds 2019 leverde dat gelabeld verkeer op van 44.956 apparaten. Een van hun bevindingen: een Geeni-slimme lamp communiceerde voortdurend met tuyaus.com, een domein dat wordt geëxploiteerd door een in China gevestigd bedrijf. [6,7] Northeastern zag in zijn lab hetzelfde: tijdens het aanzetten contacteerden Amerikaanse apparaten tuyaus.com. Amerikaanse veiligheidsanalisten waarschuwden dat dergelijke apparaten data afstaan onder de Chinese Data Security Law, die Chinese bedrijven kan verplichten data aan de staat te overhandigen. [8]
Dit gaat niet over advertentietrackers, maar over jurisdictie. Data van een Nederlands huishouden die bij een verwerker in een derde land terechtkomt, precies de doorgifte waar de AVG hoofdstuk V over gaat. Een aparte tak van dezelfde boom.
De slimme speaker die je interesses verkoopt (Amazon Alexa, 2023)
De Ring-bevindingen zijn van 2020 en gaan over de app. Een recenter en directer bewijs van de hele keten-in-één-ecosysteem komt uit het bekroonde onderzoek dat een team van Northeastern, UC Davis, UC Irvine en de University of Washington in 2023 publiceerde (Best Paper, IMC’23). Zij onderzochten het Amazon Alexa Echo-ecosysteem, 46 miljoen apparaten in de VS, 200.000+ “skills”, door zorgvuldig samengestelde persona’s bloot te stellen aan de speaker en te meten wat er gebeurde. [4]
De bevindingen sluiten de cirkel die de Ring-zaak alleen suggereerde. Alle Alexa-skills delen data met Amazon; 8,3% van het Echo-netwerkverkeer gaat naar advertentie- en trackingdiensten. Amazon verwerkt de interacties om je interesses af te leiden en serveert daarmee gerichte advertenties. En het scherpst: blootgestelde interactiedata leidde tot 30 keer hogere biedingen in advertentieveilingen, een direct, meetbaar bewijs dat je woonkamergedrag de RTB-markt in gaat. Nadat het onderzoek verscheen, paste Amazon zijn eigen privacy-disclosures aan om te erkennen dat het smart-speaker-interacties voor advertentietargeting gebruikt.
En in het groot: 81 apparaten, 34.586 experimenten (Northeastern & Imperial College)
Het zwaarste academische anker is het IMC’19-onderzoek van Northeastern University en Imperial College London. Code en packet headers staan publiek op GitHub (NEU-SNS/intl-iot); de ruwe captures zijn op aanvraag beschikbaar onder een data-overeenkomst. [9] De onderzoekers kochten 81 alledaagse apparaten, camera’s, deurbellen, hubs, lampen, stekkers, tv’s, speakers, een koelkast, en draaiden er 34.586 gecontroleerde experimenten op, in een lab in de VS én een lab in het VK, om jurisdictieverschillen te meten. De harde cijfers:
Northeastern × Imperial College London. IMC ’19, kerncijfers
Bevinding
Cijfer
Apparaten die minstens één niet-first-party contacteerden
72 / 81
US-apparaten die buiten hun eigen regio contacteerden
56%
UK-apparaten die buiten hun eigen regio contacteerden
83,8%
Apparaten met ≥1 plaintext-lek aan een meeluisteraar
81 / 81
Apparaten waaruit gebruikersgedrag betrouwbaar afleidbaar was
30 / 81
Unieke bestemmingen. Wansview-camera
52
Unieke bestemmingen. Samsung TV / Roku / TP-Link plug
30 / 15 / 13
Tijdens het aanzetten contacteerden Amerikaanse apparaten onder meer netflix.com (vrijwel elke tv, óók zonder Netflix-account, wat alleen al verraadt welk model je hebt en waar), tuyaus.com, nuri.net (een Koreaanse ISP) en facebook.com. Tijdens interactie doken omtrdc.net (Adobe-tracking) en mixpanel.com alleen bij Amerikaanse apparaten op; branch.io werd gecontacteerd door Fire TV en TP-Link. De meest gecontacteerde organisaties waren Amazon, Google, Akamai en Microsoft, grotendeels omdat apparaten op hun cloud draaien, maar dat betekent ook dat juist die paar bedrijven kunnen meekijken welke apparaten in welk huis staan en wanneer ze gebruikt worden.
Een vervolgonderzoek van hetzelfde netwerk (IMDEA, Northeastern, NYU Tandon, IMC’23) legde nóg een laag bloot: apps en advertentie-SDK’s op je telefoon misbruiken lokale netwerkprotocollen (zoals UPnP) om stiekem te ontdekken welke andere slimme apparaten in je huis staan, zonder toestemming. Zo lekt zelfs het overzicht van je apparaten, en daarmee wanneer je thuis bent, naar partijen buiten je huis. [5]
Zit jouw apparaat ertussen? De concreet geteste merken
Hieronder de merken en apparaten die in de aangehaalde onderzoeken daadwerkelijk zijn gemeten, geen vermoedens, maar geteste hardware. Belangrijk: dit is géén uitputtende lijst van “gevaarlijke” apparaten. Het is wat ónderzocht is. Staat jouw apparaat er niet bij, dan betekent dat niet dat het veilig is, alleen dat het (nog) niet op deze manier is doorgemeten. Het patroon geldt breed; deze namen zijn de gedocumenteerde voorbeelden.
Concreet geteste apparaten en merken in het onderzoek
Apparaat / merk
Wat er is vastgesteld
Bron
Amazon Ring (video-deurbel)
App stuurde PII naar Facebook, Branch, AppsFlyer, MixPanel; sensordata en anon_id
EFF (2020)
Amazon Alexa Echo (smart speaker)
Alle skills delen data met Amazon; targeting; tot 30× hogere RTB-biedingen
IMC ’23
Geeni (slimme lamp, “powered by Tuya”)
Voortdurende communicatie met tuyaus.com (China-geëxploiteerd)
Princeton IoT Inspector
Wansview (wifi-camera)
Contacteerde 52 unieke bestemmingen, de meeste van alle geteste apparaten
Northeastern IMC ’19
Samsung smart-tv
30 unieke bestemmingen; contacteerde netflix.com zonder account
Whitelabel “powered by / works with Tuya” (lampen, stekkers, sensoren)
Cloud-first architectuur; communicatie naar Chinese servers
Princeton; Northeastern
Categorieën breed getest (81 apparaten)
Camera’s, deurbellen, smart hubs, tv’s, speakers, stekkers, lampen, een koelkast, 72/81 naar niet-first-party
Northeastern IMC ’19
Herken je een merk? Dan is je apparaat in een lab doorgemeten en is bovenstaand gedrag gedocumenteerd. Herken je het niet, bijvoorbeeld een naamloos “smart”-merk van een webshop, dan is de kans juist groter dat het op het Tuya-achtige cloudmodel draait, want dat is wat de goedkope hardware vrijwel altijd gebruikt.
06 · Waar het allemaal heen gaat, de landen
De landen. Schakel 6: waar de data van een NL-huishouden heen reist, en waarom elke route een AVG-vraag oproept (Hoofdstuk V, doorgifte naar derde landen).
De geografie is een eigen verhaal, en het is de kern van de AVG-zorg voor een Nederlandse gebruiker. Northeastern stelde vast dat het overgrote deel van de data, óók die van de Britse apparaten, destijds onder EU-jurisdictie, eindigt in de Verenigde Staten, simpelweg omdat de cloud-infrastructuur daar staat. Daarnaast:
China, via Tuya- en Alibaba-endpoints (tuyaus.com, aliyuncs.com, cnzz.com). Northeastern: veel Chinese apparaten leunen op Alibaba Cloud. Amerikaanse overheidsbronnen wezen op de Chinese Data Security Law.
Zuid-Korea, nuri.net, een ISP, gezien tijdens de power-experimenten.
De broker-eindbestemming uit Schakel 1, grotendeels in de VS, maar met Europese knooppunten in Duitsland, Nederland, Polen, Spanje en het VK.
Voor een Nederlandse gebruiker betekent dit een doorgifte naar derde landen (VS, China). AVG Hoofdstuk V, meestal zonder dat de gebruiker het weet, zonder geldige toestemming (zie de TCF-uitspraak in Schakel 2), en naar partijen die zichzelf elders als datahandelaar registreren. Drie problemen die elk afzonderlijk al een AVG-vraag oproepen, gestapeld in één apparaat van een tientje.
Illustratie · Mick Beer. De datahandelaar als marktkoopman: jouw USER_ID, IP-adres, cookie-ID, e-mailhash en locatie liggen uitgestald, 'vers van jou, verkocht aan iedereen'.
07 · Wie kan er bij het eindpunt? En wat zijn de limieten?
De vorige schakels lieten zien dat de data ergens heen gaat. Maar wie kan er aan de andere kant werkelijk bij, en welke grenzen zijn er, als die er al zijn? Hier wordt het verschil tussen de Verenigde Staten en Europa scherp, en niet in het voordeel van de Europese gebruiker.
Wie koopt er bij de kraam?
De FTC-zaken uit Schakel 2 maken de afnemers concreet. X-Mode/Outlogic verkocht aan honderden klanten in uiteenlopende sectoren, vastgoed, financiën, merkanalyse, én aan private overheidscontractanten. Mobilewalla verkocht aan adverteerders, andere brokers én analytics-firma’s. Gravy Analytics’ dochter Venntel staat bekend als leverancier aan Amerikaanse overheidsdiensten. De afnemers zijn dus niet alleen reclamebureaus: het zijn ook verzekeraars, kredietbeoordelaars, achtergrond-checkers, en via tussenpartijen ook overheden en opsporingsdiensten die de data kopen in plaats van een bevel te halen. Wie genoeg betaalt, kan bij de kraam.
Moet zo’n bedrijf KvK- of EU-geregistreerd zijn?
Nee, en dat is de eerste limiet. Een data broker hoeft in Nederland nergens als data broker ingeschreven te staan. De Kamer van Koophandel registreert dát een bedrijf bestaat en onder welke activiteitencode het valt, niet dát het persoonsgegevens verhandelt. Er bestaat geen Nederlands of Europees register waarin je kunt opzoeken welke bedrijven jouw data kopen en verkopen. [24,25]
Dit is het spiegelbeeld van de Amerikaanse situatie. In de VS dwingen vier staten (Californië, Vermont, Texas, Oregon) bedrijven zich als data broker te registreren in een openbaar register, precies de lijst waarop wij in Schakel 1 de namen vonden, waaronder Azerion US Inc., de Amerikaanse dochter van het Nederlandse concern Azerion. In de EU bestaat zo’n register niet.
Welke landen, en wat zegt de wet daarover?
Uit de schakels samen volgt een geografie die voor een Nederlandse gebruiker een AVG-mijnenveld is:
Waar de data heen gaat, en de juridische status
Bestemming
Via
Juridische status voor NL-gebruiker
Verenigde Staten
Cloud-infrastructuur; geregistreerde brokers
Doorgifte derde land (AVG Hfdst. V); Data Privacy Framework wankel
China
Tuya / Alibaba-endpoints
Geen adequaatheidsbesluit; Data Security Law dwingt afgifte aan staat
Zuid-Korea
nuri.net (ISP)
Wél adequaatheidsbesluit (2021), maar gebruiker weet van niets
EU-gelieerde knooppunten
Azerion US Inc. (NL-concern), Adsquare GmbH (DE), ID5 (UK), Ipsos (FR)
AVG raakt de EU-entiteiten, maar geen broker-register om ze in te vinden
De landen. Waar de data uit een Nederlands huishouden terechtkomt: hoe feller de gloed, hoe meer data daar landt. Het felst over de VS en China, met knooppunten in Europa, het Midden-Oosten en Azië.
De kern: data die naar de VS of China gaat, verlaat de Europese rechtsbescherming. Voor de VS leunt de doorgifte op het Data Privacy Framework, dat juridisch omstreden is en al eens (als Privacy Shield) door het Hof van Justitie werd vernietigd. Voor China is er geen adequaatheidsbesluit, en geldt een wet die Chinese bedrijven kan dwingen data aan de overheid te overhandigen.
Sinds januari 2026 scherpt Californië dit aan: onder SB-361 moeten geregistreerde data brokers in hun jaarlijkse registratie melden of zij in het afgelopen jaar persoonsgegevens deelden met een “foreign adversary country”, uitdrukkelijk China, Noord-Korea, Rusland of Iran. Dat de Amerikaanse wetgever dit als aparte meldplicht invoert, onderstreept hoe reëel de China-route uit Schakel 5 (Tuya, Alibaba) wordt geacht. [23]
Zijn er limieten? Bestaan ze echt?
Op papier wél. De AVG geeft de Nederlandse gebruiker sterke rechten: artikel 14 verplicht een verwerkingsverantwoordelijke die data níét bij jou zelf verzamelde om je te informeren over de herkomst én de ontvangers; artikel 15 geeft recht op inzage; artikel 17 het recht op verwijdering, met een reactietermijn van 30 dagen. In theorie kun je dus vragen: wie heeft mijn data, en waar komt die vandaan?
Illustratie · Mick Beer. Het inzagerecht in de praktijk: een data broker die niet kan zeggen waar je gegevens vandaan komen.
In de praktijk struikelt het. Onderzoekers documenteerden een Oostenrijkse zaak waarin een burger via een artikel 15-verzoek probeerde te achterhalen waar een data broker zijn gegevens vandaan had en aan wie ze waren verkocht. Het antwoord: het bedrijf wist niet waar het de data vandaan had, het enige wat het kon melden, was dat één adres was binnengekomen door een “verhuizing” van de betrokkene. [28] Het businessmodel zelf, data die eindeloos wordt doorverkocht, samengevoegd en heringekocht, maakt het recht op inzage in de praktijk grotendeels onuitvoerbaar. En tegen een partij zonder EU-vestiging reikt de AVG alleen zover als de handhaving kan afdwingen. [25]
De VS heeft een register en geen wet; de EU heeft een wet en geen register. De gebruiker valt in het gat ertussen.
Dat is de eerlijke samenvatting van de limieten. Het sterkste praktische middel is daarom niet een inzageverzoek aan een bedrijf dat je data binnen maanden opnieuw inkoopt, maar het beperken van hoeveel data er überhaupt over je ontstaat, en dat begint bij het apparaat in de woonkamer, bij de keuze die je maakt voordat je het aan je wifi hangt.
08 · Wat dit voor jou betekent, wat gaat naar wie, en waarom
Tot hier ging het over structuur. Nu de vraag die er voor jou werkelijk toe doet: wat gebeurt er, concreet, met de data uit jouw woonkamer, en wat kan dat met je leven doen? Want “je advertising-ID wordt verhandeld” klinkt abstract. De gevolgen zijn dat niet.
Eén apparaat, uitgewerkt: de slimme deurbel
Neem de deurbel uit Schakel 5. Hij registreert beweging en gebruik. Elke werkdag piekt de activiteit rond 7:40 (iedereen de deur uit) en weer rond 17:30 (terug). Op zichzelf onschuldig. Maar opgeteld over weken vormt het een patroon: dit huishouden is doordeweeks leeg tussen 8 en 17 uur. Combineer dat met het IP-adres (grofweg je buurt), de advertising-ID (één persoon, over al je apps heen) en de locatiedata uit andere apps, en het patroon wordt een profiel. Dat profiel wordt een segment, “overdag afwezig, koopkrachtige buurt”, en dat segment is wat er in de veiling van Schakel 2 wordt verkocht. De koper hoeft jouw naam niet te kennen; het apparaat-ID en de locatie zijn genoeg om je opnieuw te vinden.
Waarom is dit geld waard? Omdat voorspelbaar gedrag voorspelbare omzet is. Een adverteerder betaalt meer voor “wie net verhuisd is” (koopt meubels), “wie zwanger lijkt” (koopt alles), of “wie financieel krap zit” (vatbaar voor dure leningen). Het Alexa-onderzoek uit Schakel 5 mat dit rechtstreeks: blootgestelde interesses leidden tot biedingen die tot 30 keer hoger lagen. Jouw routine is de grondstof; het bod is de prijs die ervoor betaald wordt.
Het is geen hypothese, het is gebeurd
Dat dit verder gaat dan reclame, is bewezen. Een van de scherpste voorbeelden: de gebedsapp Muslim Pro, met bijna 100 miljoen gebruikers, bleek locatiedata door te geven aan de broker X-Mode, die het verkocht aan Amerikaanse defensiecontractanten. Een innocente app, een gevoelig kenmerk (geloof), een militaire eindbestemming die de gebruiker nooit voor ogen had. [29]
En de overheid zelf is inmiddels een grote koper. In plaats van een bevel te halen, kopen Amerikaanse diensten. DHS, ICE, FBI, IRS, de Secret Service, locatiedata bij brokers als Venntel en Locate X. Juristen noemen dit de “data broker-maas”: waarom een rechter overtuigen als je de data gewoon kunt afrekenen? In 2026 tekende DHS een contract van een miljard dollar met Palantir om uit zulke ingekochte data voorspellende surveillancesystemen te bouwen. [30]
De concrete schade, op een rij
De gevolgen vallen in categorieën die elk afzonderlijk al iemands leven kunnen raken:
Wie koopt het, en wat het met je kan doen
Koper / gebruik
Wat ermee gebeurt
Wat het voor jou betekent
Overheid / opsporing
Koopt locatie- en gedragsdata zonder bevel (Venntel, Locate X)
Je bewegingen, gebedshuis, demonstratiebezoek liggen vast, zonder rechterlijke toets
Verzekeraars / kredietverstrekkers
Segmenten als “clinical depression” of “financieel kwetsbaar” (buiten de FCRA-bescherming)
Hogere premie of afwijzing, op basis van afgeleide kenmerken die je nooit deelde
Werkgevers / verhuurders
Achtergrond-dossiers uit samengevoegde bronnen
Afgewezen om iets dat niet klopt, en dat je niet kunt corrigeren
Gepersonaliseerde prijzen
Postcode als proxy voor inkomen of afkomst
Jij betaalt meer voor hetzelfde product dan je buurman
Stalkers / daders
Brokerdata als opsporingstool tegen slachtoffers
Een ontsnapt slachtoffer van huiselijk geweld wordt teruggevonden via gekochte data
Oplichters / inbrekers
Datalek of inkoop van het “overdag afwezig”-segment
Iemand weet precies wanneer je huis leeg staat
De gemene deler: in de VS bestaat geen federale privacywet die marketingdata afdekt. De Fair Credit Reporting Act beschermt alleen formele krediet-, werk- en verzekeringsbeslissingen, niet de schaduwmarkt eromheen. Daardoor mag een broker je als “Consumer with Clinical Depression” labelen en die lijst verkopen, zolang het officieel “marketing” heet. [31,32]
Waarom juist déze landen
De geografie uit Schakel 6 is geen toeval, en het “waarom” per bestemming is de kern van de zorg:
De Verenigde Staten, niet omdat Amerikanen kwaadwillend zijn, maar omdat er geen federale privacywet is die de handel afremt, én omdat de overheid er actief koopt. Data die daar landt, valt in een markt die structureel minder bescherming kent dan de jouwe.
China, omdat de Data Security Law Chinese bedrijven kan verplichten data aan de staat af te geven. Een lamp die met tuyaus.com praat, geeft je gebruikspatroon af aan een jurisdictie waar je als Nederlander geen enkel recht kunt uitoefenen. Dat de Amerikaanse wetgever China sinds 2026 als “foreign adversary” expliciet in de meldplicht zette, onderstreept hoe serieus dit wordt genomen.
De doorgifte zelf, voor een NL-gebruiker is élke stap naar buiten de EU een doorgifte onder AVG Hoofdstuk V, die een geldige grondslag vereist. Die grondslag is er bij RTB niet (het toestemmingssysteem is ongeldig verklaard, Schakel 2), en bij Tuya/China al helemaal niet.
Het draait niet om “ze weten wat ik koop.” Het draait erom dat een onbekende partij in een ander land weet wanneer je huis leeg is, wat je gelooft, en hoe kwetsbaar je bent, en mag dat doorverkopen.
09 · Dit is geen incident. Dit is een systeemontwerp.
Net als bij de cookiebanners en datalekken die ik eerder analyseerde, is het schandaal slechts het symptoom. Het echte probleem zit in het model. Vijf ontwerpkeuzes komen samen op één punt:
Het apparaat praat standaard naar buiten, naar de fabrikant, naar de cloud, naar trackers, zonder dat je iets hoeft te doen.
De identifiers zijn ontworpen om persistent te zijn (de anon_id die een reset overleeft).
De partij die de data doorgeeft, schuilt achter het “verwerker”-etiket.
De veiling waarin de data verhandeld wordt, draait op een toestemmingssysteem dat een rechter ongeldig verklaarde.
De eindbestemming is een geregistreerde datahandelaar in een derde land, buiten het bereik van de gebruiker.
En het zwaarst getroffen slachtoffer is, net als bij de Meta-bril, degene zonder knop: hier niet de voorbijganger, maar het hele huishouden, je gezin, je gasten, je kinderen, je buren in beeld van de deurbel, dat nooit een instelling te zien kreeg.
10 · De toets die elke beslissing had kunnen voorkomen: P-SEP
Hoe had een consument, een inkoper, of een gemeente die slimme apparaten uitrolt dit kunnen ondervangen? Met dezelfde toets die ik in het Ray-Ban-dossier gebruikte: het P-SEP-model van Erik Jan Koedijk, digitaal strateeg. Vier vragen die je stelt vóór je een apparaat toelaat. De regel is onverbiddelijk: elke vraag moet afzonderlijk met “ja” te beantwoorden zijn. Het werkt als een AND-poort, vier keer ja, of het deugt niet. [33]
P. Persoonlijk verantwoord? Kun je dit tegenover jezelf en je huisgenoten verantwoorden?
S. Security verantwoord? Is het te verdedigen, ook in het slechtste scenario?
E. Ethisch verantwoord? Klopt het moreel, ook voor wie er niet om vroeg?
P. Privacy verantwoord? Houdt het stand tegen de AVG en tegen wat redelijk is?
Laten we de goedkope slimme stekker, en bij uitbreiding de hele categorie cloud-gekoppelde consumenten-IoT, er eerlijk langs leggen.
De toets. P-SEP als AND-poort: vier keer 'ja', of het apparaat komt er niet in. Eén 'nee' op P, S, E of P en het beleid deugt niet.
De slimme stekker / cloud-IoT langs P-SEP
Vraag
Wat het dossier laat zien
Oordeel
Persoonlijk
Je kunt niet instaan voor wat de firmware naar buiten stuurt, naar welk land, of bij welke broker het eindigt. Je verantwoordt iets dat je niet overziet, en je hebt het je gezin en gasten opgelegd.
NEE
Security
Apparaten lekten in 81/81 gevallen via plaintext; identifiers zijn cross-app koppelbaar; de data reist naar servers in landen met afwijkende wetgeving. “Het lekt nooit” is geen optie.
NEE
Ethisch
De data van een heel huishouden, inclusief kinderen, want brokers zijn gemarkeerd met ‘verzamelt data van minderjarigen’, voedt een advertentiemarkt waar niemand bewust voor koos.
NEE
Privacy
Doorgifte naar derde landen (VS, China) zonder geldige grondslag; het RTB-toestemmingssysteem is door een rechter ongeldig verklaard; opt-outs zijn afwezig of verstopt.
NEE
11 · Wat dit dossier invult, het onderbelichte deel
Het losse onderzoek bestond al, en het is sterk. Northeastern mat de bestemmingen. Princeton mat het in het wild. De EFF ontleedde de Ring-app. De FTC bewees de SDK-handel. Het Hof van Justitie verklaarde de RTB-toestemming ongeldig. Privacy Rights Clearinghouse bouwde het broker-register. Maar elk van die stukken stond op zichzelf, en bijna alles was gemeten vanuit een Amerikaans of Brits perspectief.
Wat ontbrak, is de doorlopende keten, getrokken vanuit het perspectief van iemand die het apparaat hier, in Nederland, in zijn stopcontact steekt:
IoT-apparaat → tracker-classificatie → de “verwerker”-maas → RTB/SDK-markt → geregistreerde data broker → derde land.
Niemand had die vijf schakels als één geheel, met een bron per schakel, naast elkaar gelegd. De waarde van dit dossier zit niet in een nieuwe meting, het zit in het sluiten van de cirkel, en in het benoemen van de schakel (de “verwerker”) die de cirkel normaal onzichtbaar houdt.
12 · Wat nu? Concreet.
Voor jou als bewoner
Zet slimme apparaten op een apart wifi-netwerk (een gastnetwerk of een eigen VLAN), gescheiden van je telefoons en computers. Veel routers kunnen dit standaard.
Kies waar mogelijk apparaten met lokale verwerking (bijvoorbeeld het Apple Home-ecosysteem, of apparaten die met Home Assistant lokaal werken) boven cloud-only merken.
Wees extra terughoudend met de allergoedkoopste “powered by Tuya”-apparaten als je geen doorgifte naar China wilt. De prijs op het kaartje voorspelt het risico niet, soms is het omgekeerde waar.
Een camera of deurbel die het publieke trottoir of de buren filmt, maakt jóu mogelijk verwerkingsverantwoordelijke onder de AVG. Richt hem op je eigen erf.
Voor inkopers en beleidsmakers
Maak van de P-SEP-toets (Persoonlijk, Security, Ethisch, Privacy) een vaste stap bij elke aanschaf van apparaten of diensten in de publieke sector. Vier keer ja, of het komt er niet in.
Behandel cloud-gekoppelde consumenten-IoT in gevoelige omgevingen (zorg, onderwijs, overheid) als wat het is: een sensor met een uitgaande lijn naar een onbekende derde partij.
De doorgifte naar derde landen en het ongeldig verklaarde RTB-toestemmingssysteem verdienen een blik van de Autoriteit Persoonsgegevens, niet over één apparaat, maar over de categorie en de keten.
13 · De eerlijkheid die erbij hoort
Geen enkel dossier is geloofwaardig zonder zijn eigen zwakke plekken te benoemen. Deze horen erbij:
De grenzen van dit onderzoek
Grens
Wat het betekent
Geen rechte pijplijn
Er is geen bewezen directe verkoop “Ring → Mobilewalla.” De keten is een markt: vertrek, verhandelbaarheid en aankomst zijn elk apart bewezen; de verbinding is structureel, niet één gedocumenteerde transactie.
Bestemming ≠ inhoud
Northeastern zag wáár verkeer heen ging, niet altijd wát erin zat (versleuteld). “Praat naar een tracker” is geen “stuurt PII naar een tracker,” tenzij apart aangetoond, zoals bij Ring wél.
Ring-cijfers zijn 2020 / app-zijdig
Ze bewijzen wat er tóén gebeurde, op de app-kant. Een hermeting in 2026, op toestelniveau, is nodig voor een actuele claim.
Registers zijn Amerikaans
Ze bewijzen dat bedrijven in de VS datahandel zelf erkennen; ze zijn geen AVG-instrument. De AVG-haak loopt via de doorgifte (Hoofdstuk V) en de TCF-uitspraak.
Vestigingslanden afgeleid
De namen staan geverifieerd in de PRC/EFF-lijst; de landen zijn afgeleid uit de rechtsvorm in de naam (GmbH, Ltd, Sp. z o.o., SL, Pte). Belangrijk: het is “Azerion US Inc.” die geregistreerd staat, de VS-dochter, niet het NL-moederbedrijf. Sommige namen (Ipsos, TL1MKT, InMobi, SafeGraph) staan alleen op de oudere California AG-lijst, niet het actuele CPPA-register.
Twee punten nog te bevestigen
De actuele CPPA-registratie van Venntel en Mobilewalla is gefundeerde inferentie (ze ontbreken op de California-gap-lijst ondanks eerdere AG-registratie); een directe check in het register sluit dit. En het Palantir-DHS-contract verdient een primaire contractbron.
Endpoint is geen verkoop
Een endpoint bewijst dat data wordt verzameld, niet automatisch dat het wordt doorverkocht. Dat onderscheid is overal in dit dossier aangehouden.
Deze grenzen verzwakken het verhaal niet. Ze maken het bestand tegen het eerste tegenargument, precies zoals het hoort.
“If nothing changes, nothing changes.”
■ ■ ■
Bronnen
EFF, “Ring Doorbell App Packed with Third-Party Trackers” (Ring voor Android v3.21.1; Frida + mitmproxy; PII naar branch.io, mixpanel.com, appsflyer.com, facebook.com).
Bleeping Computer, “Ring Android App Sent Sensitive User Data to 3rd Party Trackers” (bevestiging ontvangers; Graph API).
Iqbal e.a., Alexa Echo (IMC '23, Best Paper). Alle Alexa-skills delen data met Amazon; 8,3% van het Echo-verkeer naar advertising/tracking; blootgestelde data leidt tot 30× hogere RTB-biedingen; Amazon paste na publicatie zijn disclosures aan.
Disconnect, services.json, de tracker-classificatielijst die Firefox en Edge gebruiken (1.877 organisaties, 4.773 domeinen).
Tuya Developer. Data Centers, Tuya’s eigen documentatie: datacenters in China (Tencent), West- en Oost-VS, Centraal-Europa, India en Singapore (AWS/Google Cloud/Alibaba); niet-toegewezen landen worden gemapt naar het West-Amerika datacenter.
AppsFlyer, “Processing Customer Data”, zelfverklaring als data processor; stelt geen broker te zijn en geen data te verkopen of profileren.
Privacy Rights Clearinghouse & EFF, “Analysis Report of Data Broker Registration Gaps” (24 juni 2025). De Vermont-brief noemt 309 elders-geregistreerde brokers, de California-brief 291. Bevat o.a. Outlogic (X-Mode), InMarket, SafeGraph en Azerion US Inc.
California Privacy Protection Agency (CalPrivacy). Data Broker Registry; Enforcement Advisory 2025-01; boetes ROR Partners ($56.600), Accurate Append ($55.400), Datamasters ($45.000); DROP, live sinds 1 jan 2026.
VeraSafe. De EU kent géén data broker-register of broker-specifieke wet zoals de VS; AVG art. 13–14 legt de plichten breed bij elke verantwoordelijke.
Privacy Insight Solutions. AVG-rechten bestaan, maar handhaving tegen partijen zonder EU-vestiging is zwak (Clearview); opt-out via art. 15/17 met 30-dagentermijn.
Vice / Motherboard. Muslim Pro & X-Mode, “How the U.S. Military Buys Location Data from Ordinary Apps”: locatiedata uit de gebedsapp Muslim Pro (~100M gebruikers) belandde via X-Mode bij Amerikaanse defensiecontractanten; Muslim Pro verbrak daarna de banden.
EFF / State of Surveillance, overheid koopt locatiedata. DHS, ICE, FBI, IRS en de Secret Service kopen locatiedata bij brokers (Venntel, Locate X) in plaats van een bevel te halen; de “data broker-maas”. DHS tekende in 2026 een miljardencontract met Palantir.
EPIC. Data Brokers, geen federale privacywet dekt marketingdata; brokerdata als opsporingstool tegen slachtoffers van huiselijk geweld; risico’s voor publieke ambtsdragers.
ACLU / CFPB / ProPublica, discriminatie en prijsstelling, segmenten als “Consumer with Clinical Depression”; postcode als proxy voor afkomst/inkomen bij premie- en prijsstelling; de FCRA dekt alleen formele krediet-/werk-/verzekeringsbeslissingen, niet de marketingmarkt eromheen.
404 Media. Babel Street / Locate X, demonstratie hoe Locate X, gevoed door advertising-ID-locatie uit de bidstream, één toestel van Alabama naar een kliniek in Florida volgde; toegang verleend op enkel de bewering van toekomstig opsporingswerk. FBI tekende in 2022 een contract tot $27M met Babel Street.
FTC. Kochava, FTC-zaak (2022); amended complaint overleefde februari 2024; Kochava betrekt data van andere brokers en verkoopt precieze geolocatie + MAID-segmenten.
Vice / Motherboard. SafeGraph & Veraset, een week locatiedata van 600+ Planned Parenthood-locaties voor ~$160; Google bande SafeGraph uit de Play Store (juni 2021); verkoop aan de CDC ($420.000); spin-off Veraset levert ruwe per-toestel-data.
Adobe. Experience Cloud / Regional Data Collection. Adobe’s eigen docs: de ID-service roept dpm.demdex.net aan; de demdex-cookie is een persistente cross-domein-identifier; legacy-identifiers via adobedc.net, 2o7.net en omtrdc.net.
P-SEP-model. Erik Jan Koedijk, Toetsingskader voor verantwoorde technologie (cybersecurity.vision), afgestemd op AI Act, NIS2, DORA en de Cyber Resilience Act.
Alle bronnen openbaar en geverifieerd op het moment van schrijven. Geen captures, geen telemetrie, geen affiliate, geen verdienmodel achter dit stuk. Het P-SEP-model (Persoonlijk, Security, Ethisch, Privacy) is van Erik Jan Koedijk, cybersecurity.vision. Onafhankelijk privacy-onderzoek uit Nederland.
Hoe een modebril van 419 euro een wandelend opnamestation werd dat data naar de cloud, naar onderaannemers in Nairobi en naar een gezichtsherkenningsdatabase stuurt. Waarom jij, de voorbijganger, het slachtoffer bent dat nergens voor heeft getekend, en waarom dit apparaat verboden hoort te zijn voor wie bij de AIVD, de MIVD, het leger of de vitale infrastructuur werkt.
Vorige maand stond er weer iemand naast me in de rij bij de Albert Heijn met een Ray-Ban Meta op.
Misschien filmde hij. Misschien niet. Het lampje is klein, en in fel licht zie je het niet. Dat is precies het punt: ik kon het niet weten, en ik kon er niets tegen doen. Ik heb nergens voor getekend. Jij ook niet. En dat is geen randgeval. Dat is het ontwerp.
Dit is geen gadget-review. Dit is een forensische uiteenzetting van wat er feitelijk gebeurt met data die deze bril vastlegt. Niet wat de marketing belooft, maar wat in de SDK-broncode, de privacyverklaring en het onderzoeksdossier staat. Alles hieronder is openbaar en geverifieerd op het moment van schrijven. Ik begin met de schakel die het sterkst is. De rest telt ook, maar deze schakel laat het scherpst zien hoe Meta denkt.
En ik zeg het maar meteen, want het is de kern van dit stuk: een apparaat dat zo is ontworpen, verzamelen standaard aan, opt-outs die verdwijnen, beeld en stem naar de cloud, gezichtsherkenning aan boord, hoort verboden te zijn voor iedereen met een kritieke functie. Voor de AIVD, de MIVD, het leger en de beheerders van de Nederlandse vitale infrastructuur. De drager wil geen kwaad. Het probleem is dat één fitnesstracker in 2018 al genoeg was om geheime militaire bases op de wereldkaart te laten oplichten. Deze bril doet oneindig veel meer dan een fitnesstracker. Hieronder leg ik schakel voor schakel uit waarom.
01 · Elke gekoppelde dienst is een datakanaal terug naar Meta
Lees deze zin uit Meta’s eigen Supplemental Privacy Policy voor de Wearable Products. De strekking, letterlijk:
Wanneer een third-party service op de Meta Wearable Products wordt gebruikt, zoals een muziekspeler of een third-party app, kan Meta, afhankelijk van hoe de dienst werkt, informatie verzamelen zoals: de informatie die de third-party verzamelt en die jij akkoord gaat te delen, hoe vaak en hoe lang je het gebruikt, crash-loginformatie, en een autorisatietoken.
Je koppelt Spotify. Onschuldig, denk je. Maar de koppeling zelf wordt een meetpunt: Meta ziet hoe vaak, hoe lang, met welk token. De bril gebruikt niet zomaar een dienst. De bril werkt als een doorgeefluik dat elke dienst die je aanraakt omzet in een datapunt over jou.
En de andere kant, de developers. In de officiële Meta Wearables Device Access Toolkit staat in beide repositories (iOS en Android), zwart op wit:
Door Meta-integraties in te schakelen, inclusief via deze SDK, kan Meta informatie verzamelen over hoe de Meta-apparaten van gebruikers communiceren met jouw app.
Voel je de omkering? Hier koopt de developer geen toegang tot de bril. Meta plant een observatiepost in de app van iedere developer. En het staat standaard aan: als de ANALYTICS_OPT_OUT-metadata ontbreekt of op false staat, is analytics gewoon ingeschakeld. De ontwikkelaar moet actief een regel toevoegen om het uit te zetten. Doet hij niks, en de meesten doen niks, dan loopt de stroom.
Schakel 1, de bril en elke gekoppelde dienst voeden Meta; de SDK plant analytics in apps van derden, standaard aan.
De kern van het hele dossier in een beweging: opt-out, nooit opt-in. Verzamelen is de standaard. Niet-verzamelen is het werk dat jij moet leveren.
De feiten: wie stuurt wat, waarheen?
Ik heb de datastromen uit elkaar getrokken. Geen speculatie, elke regel is herleidbaar naar een bron (zie achteraan).
De bril ontleed: onder het montuur zitten camera, microfoons, moederbord, sensoren en radio's, elk een potentiële databron.
Wat
Wie verzamelt
Waarheen
Standaard aan?
Uit te zetten?
Spraakopnames (“Hey Meta”)
Meta
Cloud + third-party vendors
Ja
Nee, opt-out verwijderd
Beeld via Meta AI
Meta
Cloud + AI-training
Ja
Alleen via spraak uit
Camerabeelden ter review
Onderaannemer
Nairobi, Kenia
Ja
Nee
Essential data (batterij, wifi, OS, crashes)
Meta
Cloud
Ja, verplicht
Nee
Additional data (usage + geolocatie)
Meta
Cloud
Keuze bij setup
Ja, in Settings
Hoe je bril met app X praat
Meta
Cloud (SDK-analytics)
Ja
Alleen developer, in manifest
Gekoppelde dienst (bv. muziek)
Meta
Cloud
Ja
Afhankelijk van dienst
Gezicht voorbijganger naar embedding
App op telefoon
Lokale DB “NameTagsPending”
(aangetroffen)
Voorbijganger heeft geen knop
Lees de laatste kolom van boven naar beneden. Dat is het antwoord op de vraag “controlled by you?”
02 · De opt-out die actief werd weggehaald
Dit is het bewijs dat het geen ongelukje is maar een richting. Meta wijzigde het databeleid zo dat spraakopnames standaard in de cloud worden bewaard, zonder mogelijkheid om eruit te stappen. De vergelijking die analisten trokken: precies wat Amazon met Alexa deed. De opnames gaan naar productverbetering en AI-training. Visuele content gedeeld met Meta AI? Ook bruikbaar voor training, tenzij je de hele spraakfunctie uitzet. Een keuze die er was, is verdwenen.
Schakel 2, waar vroeger een opt-out zat, gaat spraak nu standaard naar de cloud en de AI-training.
03 · Nairobi: jouw toiletbezoek, hun annotatietaak
Hier wordt het concreet, en hier wordt het smerig. De Zweedse kranten Svenska Dagbladet en Göteborgs-Posten legden bloot dat beelden die wereldwijd door deze brillen worden verzameld, inclusief intieme scènes, geweld, en vertrouwelijke gegevens zoals bankrekeningnummers, terechtkwamen in Nairobi. Daar moesten Keniaanse werknemers van een onderaannemer ze beoordelen om de AI te trainen.
Een beoordelaar, anoniem: in sommige video’s zie je iemand naar het toilet gaan, of zich uitkleden. En de mensen in beeld weten dat vermoedelijk niet, want anders zouden ze niet opnemen.
Laat dat bezinken. Een toevallige voorbijganger wordt gefilmd, het beeld reist naar een datacenter, en een mens aan de andere kant van de wereld bekijkt het. Dat is de “third party” die er werkelijk toe doet. Geen abstracte server, maar menselijke ogen op je intiemste moment. Kenia opende in april 2026 een formeel onderzoek naar de massale surveillance-mogelijkheden en het niet-consensuele vastleggen van intieme beelden.
Schakel 3, van een gefilmde voorbijganger zonder toestemming, via Meta's cloud, naar menselijke beoordelaars in Nairobi.
04 · Faceprints: de belofte van 2021, stil teruggedraaid
In 2021 sloot Meta het gezichtsherkenningssysteem van Facebook en verwijderde meer dan een miljard faceprints. Met veel vertoon. Principieel, heette het.
Vijf jaar later: een WIRED-onderzoek stelt dat kerncomponenten van een gezichtsherkenningssysteem (“NameTag”) al begin 2026 in software op miljoenen telefoons zaten. Een beveiligingsonderzoeker draaide de pijplijn end-to-end: gezichtsextractie-modellen genereerden een 2048-dimensionale biometrische embedding, doorzochten een lokale index, en bij een match vuurde een melding “Person Recognized” af. Er bleek een lokale database te zijn die gecropte gezichten en fingerprints opslaat in een map genaamd, ik verzin dit niet, NameTagsPending. Records die een herstart overleven en later aan een identiteit gekoppeld kunnen worden.
Al gedemonstreerd in het wild: twee Harvard-studenten koppelden bril-beelden aan externe gezichtsherkenning om vreemden op straat te identificeren. Geen toekomstmuziek. Aangetroffen capaciteit.
Schakel 4, de aangetroffen biometrische pijplijn: van gezicht naar embedding naar 'Person Recognized', met persistente opslag.
05 · Wat dit betekent onder Nederlands en Europees recht
Hier botst het frontaal. AI-wearables vallen in de EU onder de AVG en de AI Act. Een woordvoerder van de Europese Commissie was helder: elke opname van individuen moet duidelijk gecommuniceerd worden en een wettelijke grondslag hebben, tenzij de verwerking puur persoonlijk of huishoudelijk is. Een bril die je in een café, op je werk of op straat opzet, valt daar niet zomaar onder.
De European Data Protection Board waarschuwde al in 2024 dat de “standaard-aan”-houding ongemakkelijk samenvalt met de toestemmingsvereisten van de AVG, juist voor omstanders die nergens mee instemden. De Ierse toezichthouder zette in 2021 al vraagtekens bij dat kleine LED-lampje. De Britse ICO heeft Meta om uitleg gevraagd. John Davisson van het Electronic Privacy Information Center vatte de onmogelijkheid samen: de drager kan geen toestemming geven namens alle mensen die hij tegenkomt.
Schakel 5, de juridische omkering: de koper wordt verwerkingsverantwoordelijke; de omstander gaf nooit toestemming.
06 · Het precedent: hoe een hardloop-app militaire bases verraadde
Wie denkt dat “geaggregeerde, anonieme” data ongevaarlijk is, precies het woord dat Meta gebruikt voor zijn telemetrie, moet zich januari 2018 herinneren. De fitness-app Strava publiceerde een wereldwijde “heatmap” van 13 biljoen GPS-punten van zijn gebruikers. Aggregaat. Anoniem. Mooi om te zien.
De Australische analist Nathan Ruser keek er twee keer naar en zag iets anders: in de woestijn van Syrië, in Afghanistan, in Somalië gloeiden hardlooproutes op precies daar waar geheime Amerikaanse militaire bases lagen. Bases die op Google Maps onzichtbaar waren, tekenden zich op Strava haarscherp af, inclusief hun interne layout, patrouilleroutes en bevoorradingslijnen, uitgelopen door soldaten met een fitnesstracker om. In afgelegen gebieden, waar bijna niemand zo’n dure tracker draagt behalve westerse militairen, was elk lichtpuntje een verklikker.
De Strava Global Heatmap zelf: de gloeiende lijnen tekenen de loop- en patrouilleroutes binnen een afgesloten faciliteit. Bron: Strava Labs, via The Hacker News (jan 2018).
Het cruciale punt, en de reden dat dit hier staat: het verraad zat niet in een enkele hardloopronde, maar in het patroon in het aggregaat. Niemand had toestemming gegeven om een militaire basis in kaart te brengen. De data was “geanonimiseerd”. En tóch lag de geografie van de Amerikaanse defensie op straat, omdat genoeg losse, op zichzelf onschuldige bewegingen samen een kaart vormen.
De lijst groeide razendsnel: behalve Amerikaanse bases in Afghanistan en Syrië dook er een vermoedelijke CIA-post in Somalië op, een raketcommandocentrum in Taiwan, een NSA-faciliteit op Hawaii, en zelfs Area 51. En het ging verder dan locatie: onderzoekers vonden manieren om de “geanonimiseerde” heatmap te de-anonimiseren, individuele personen en hun looproutes weer aan een identiteit koppelen. Precies wat Strava beloofde dat onmogelijk was. De term die analisten gebruikten was pattern of life: niet wat je een keer doet, maar het ritme van je dagen, en dat ritme was opeens van iedereen te lezen.
Vertaal dat naar een bril met camera, microfoon, GPS via de telefoon en verplichte telemetrie. Strava lekte alleen positie. De Ray-Ban Meta voegt daar beeld, geluid en gezichten aan toe, en stuurt het naar de cloud van een advertentiebedrijf. Als geaggregeerde looproutes al een staatsgeheim konden blootleggen, bedenk dan wat geaggregeerde camerabeelden van miljoenen brillen kunnen reconstrueren: wie waar woont, werkt, bidt, demonstreert, of met wie samen is.
Strava beriep zich destijds op precies het verweer dat Meta nu voert: gebruikers kónden het delen uitzetten, het was hun eigen keuze. Maar het Pentagon had duizenden Fitbits onder personeel uitgedeeld zonder duidelijke regels, en de standaardinstelling deed de rest. Het patroon is identiek aan dit hele dossier: de verzameling staat aan, de last ligt bij het individu, en de schade is collectief en onomkeerbaar.
Schakel 6, het Strava-precedent: losse 'anonieme' bewegingen vormen in het aggregaat een kaart. Bij de Ray-Ban komen beeld, geluid en gezichten erbij.
07 · Dit is geen privacy-probleem. Dit is een systeemontwerp.
Net als bij de datalekken die ik eerder analyseerde, is de hack of het schandaal slechts het symptoom. Het echte probleem zit in het model: verzamelen staat standaard aan op elk niveau; keuzevrijheid wordt verwijderd of verstopt; de gevoeligste data verlaat het toestel en passeert menselijke onderaannemers in een lagelonenland; een biometrische capaciteit die publiekelijk werd afgezworen is teruggekeerd; en het zwaarst getroffen slachtoffer, de voorbijganger, heeft per definitie geen knop, geen instelling, geen keuze.
Schakel 7, vijf ontwerpkeuzes die samen op één punt uitkomen: de voorbijganger zonder knop.
Hoeveel Ray-Ban Meta’s lopen er in Nederland rond?
Het harde startpunt: EssilorLuxottica rapporteerde ruim 7 miljoen verkochte smart glasses in 2025 alleen, ruim drie keer zoveel als in 2024. Daarmee komt het totaal op ongeveer 9 miljoen sinds de lancering van de Ray-Ban Meta, tweeënhalf jaar eerder. Noord-Amerika was de koploper, en dat detail telt: de verkoop is sterk geconcentreerd in rijke westerse markten, niet evenredig over de wereld verdeeld.
Meta en EssilorLuxottica publiceren geen cijfers per land, dus voor Nederland moet je rekenen. Ik heb dat langs drie routes gedaan en de aannames expliciet gemaakt, zodat je ze kunt natrekken of bijstellen.
Naar wereldbevolking (NL = 0,22% van de wereld): geeft ongeveer 20.000. Een duidelijke ondergrens, en eigenlijk te laag, want het negeert dat het product nauwelijks buiten welvarende markten verkocht wordt.
Via de afzetmarkt (Noord-Amerika 37%, de rest vooral West-Europa, Nederland daarbinnen 3,5 tot 5%): geeft tussen ongeveer 89.000 en 170.000.
Per capita ten opzichte van de VS (VS-penetratie circa 0,9% van de bevolking; Nederland op 25 tot 50% daarvan vanwege de latere, beperktere uitrol en de EU-restricties op de AI-functies): geeft ongeveer 40.000 tot 81.000.
Een onderbouwde schatting komt daarmee uit op grofweg 40.000 Nederlanders aan de voorzichtige kant, en mogelijk 130.000 tot 150.000 aan de bovenkant. Een redelijke centrale schatting ligt rond de 70.000 tot 90.000.
En dan de draai die ertoe doet: zelfs de ondergrens van 40.000 betekent tienduizenden camera’s-met-microfoon die dagelijks door Nederlandse straten, winkels, cafés en wachtkamers bewegen, langs honderdduizenden voorbijgangers die nergens voor tekenden. Bij de bovengrens loopt dat in de miljoenen passanten per dag.
08 · De kern: verbied dit bij kritieke functies
Strava lekte de geografie van geheime bases omdat soldaten een onschuldige consumentengadget droegen. Dat was een fitnesstracker die alleen positie deelde. De Ray-Ban Meta is datzelfde mechanisme, maar dan met camera, microfoon, GPS en een directe lijn naar de cloud van een advertentiebedrijf met menselijke reviewers. Wie het Strava-incident serieus neemt, kan maar tot één conclusie komen.
Waarom dit geen overdreven voorzorg is, maar de logische sluitsteen van alles wat hierboven staat:
De data is al onderweg voor je iets doet. Essential data (locatie van het toestel via wifi, OS, timing) wordt verplicht verzameld. Een analist die in het AIVD-gebouw zijn bril opzet, lekt aanwezigheidspatronen voor hij ook maar iets gefilmd heeft, exact het “pattern of life” dat Strava blootlegde.
Beeld en geluid maken het oneindig veel erger dan Strava. Een heatmap toonde wáár mensen liepen. Een camerabril toont wie er binnenloopt, welke documenten op tafel liggen, welke schermen aanstaan, en wat er besproken wordt, en stuurt fragmenten naar Meta’s servers, waar onderaannemers ze kunnen zien.
De aanwezige gezichtsherkenning maakt het tot een identificatiewapen. Een bril die gezichten omzet in biometrische embeddings, gedragen op een plek waar de identiteit van personeel zelf staatsgeheim is (denk aan undercover-medewerkers), is dan een operationeel veiligheidsrisico van de eerste orde geworden.
De drager kan niet instaan voor de keten. Zelfs een goedwillende medewerker controleert niet wat de firmware doet, wat naar de cloud gaat, of wie het in Nairobi beoordeelt. Bij kritieke functies is “ik vertrouwde de instellingen” geen aanvaardbaar antwoord. Het enige beheersbare beleid is: het apparaat komt er niet in.
Schakel 8, voor wie een kritieke functie bekleedt is een cloud-gekoppelde camerabril geen privacyrisico maar een operationeel veiligheidsrisico. De enige beheersbare uitkomst is een verbod.
Nederland reguleert al wapens, camera’s en opnameapparatuur op gevoelige locaties. Een smart glass is functioneel een onopvallende, cloud-gekoppelde camera met gezichtsherkenning. De wetgeving is simpelweg nog niet bijgewerkt naar wat het apparaat werkelijk is. Dat is de taak voor de wetgever, niet over deze ene bril, maar over de categorie.
09 · De toets die elke beleidsmaker zou moeten doen: P-SEP
Hoe had de Tweede Kamer, waar ik bij elk debat wel een smartwatch om een pols zie zitten, dit kunnen voorkomen? Met een toets die mijn vriend Erik Jan Koedijk ontwikkelde, digitaal strateeg sinds 1992, en die ik hier graag doorgeef: het P-SEP-model. Koedijk bouwde het als toetsingskader voor verantwoorde technologie, AI en cybersecurity, afgestemd op wetgeving als de AI Act, NIS2, DORA en de Cyber Resilience Act. In de kern zijn het vier vragen die je stelt vóór je een apparaat, dienst of beleid toelaat. En de regel is onverbiddelijk: elke vraag moet afzonderlijk met “ja” te beantwoorden zijn. Zakt er ook maar één door, dan zit er iets fout in je beleid, en in je leiderschap.
De vier vragen:
P, Persoonlijk verantwoord? Kun jij, als drager of als verantwoordelijke, dit tegenover jezelf en de mensen om je heen verantwoorden?
S, Security verantwoord? Is dit veiligheidstechnisch te verdedigen, ook in het slechtste scenario?
E, Ethisch verantwoord? Klopt het moreel, ook voor de mensen die er niet om gevraagd hebben?
P, Privacy verantwoord? Houdt het stand tegen de AVG en tegen wat redelijk is voor betrokkenen en omstanders?
De kracht zit in het woord afzonderlijk. Het werkt als een AND-poort, geen gemiddelde en geen weging waarin “vier op de vijf” voldoende zou zijn: vier keer ja, of het deugt niet. Laten we de Ray-Ban Meta er eerlijk langs leggen.
“We hebben geen behoefte aan nog meer complexiteit. We hebben helderheid, structuur en moed nodig. Modellen zoals P-SEP helpen ons om betere keuzes te maken, niet alleen snellere.” Erik Jan Koedijk
Vraag
Wat het dossier laat zien
Oordeel
Persoonlijk
Als drager word je verwerkingsverantwoordelijke zodra je anderen filmt; je kunt niet instaan voor wat de firmware en cloud doen. Je verantwoordt iets dat je niet overziet.
NEE
Security
Camera + microfoon + GPS + cloud op een persoon. Strava bewees dat zelfs kale positiedata geheime bases blootlegt; dit voegt beeld, geluid en gezichten toe.
NEE
Ethisch
Omstanders worden zonder toestemming gefilmd; beelden van intieme momenten belanden bij reviewers in Nairobi. De gefilmde gaf nergens akkoord voor.
NEE
Privacy
Verzamelen staat standaard aan, opt-out voor spraak is verwijderd, gezichtsherkenning is aangetroffen. Op gespannen voet met AVG-grondslag en bystander-consent.
NEE
Vier keer nee. Geen drie-en-een-half. Vier. Volgens P-SEP is daarmee de discussie klaar: dit apparaat hoort niet thuis bij wie een publieke of kritieke verantwoordelijkheid draagt. En als een bewindspersoon of Kamerlid het tóch om de pols of op de neus heeft, dan is dat geen detail, dan is het een leiderschapsfout die met één simpele toets te ondervangen was geweest.
Schakel 9, P-SEP is een AND-poort, geen gemiddelde. Vier keer ja, of het komt er niet in. De Ray-Ban Meta zakt op alle vier.
Het mooie van P-SEP is dat het geen jurist of securityteam vereist. Het is vier vragen die een Kamerlid, een gemeentesecretaris of een afdelingshoofd zelf kan stellen, in dertig seconden, voor de aanschaf. De smartwatch in de plenaire zaal, de slimme deurbel bij een ministerie, de AI-notulen-app in een vergadering met staatsgeheimen, leg het langs P, S, E en P, en je weet of je iets toelaat dat je niet had mogen toelaten.
P-SEP in de praktijk: de smartwatch in de Tweede Kamer
Laten we de toets toepassen op iets wat ik letterlijk bij elk debat zie: de smartwatch om de pols van Kamerleden. “De debatten zijn toch openbaar?” hoor ik dan. Dat klopt, en dat is precies waarom mensen de rest over het hoofd zien. Want door die smartwatch gaat veel meer dan wat er in de zaal gezegd wordt: continue hartslag, slaapritme, stresspatronen, locatie, en de inhoud van elke notificatie die binnenkomt. De woorden zijn openbaar. Het lichaam en de telefoon van het Kamerlid zijn dat niet.
Is dit goed bekeken? Leg het langs P-SEP.
Vraag
De smartwatch van een Kamerlid
Oordeel
Persoonlijk
Het Kamerlid deelt hartslag, slaap en stress met een Amerikaanse fabrikant. Een stijgende hartslag tijdens een specifiek debatonderwerp is af te lezen. Kun je dat als volksvertegenwoordiger verantwoorden?
NEE
Security
Onderzoekers van Binghamton University en het Stevens Institute of Technology toonden aan dat de polsbewegingen die een wearable continu meet, pincodes en wachtwoorden prijsgeven, met meer dan 90% nauwkeurigheid binnen een paar pogingen. Continue locatie verraadt aanwezigheid en routine. Bij 61 miljoen gelekte fitness-records is “het lekt nooit” geen optie.
NEE
Ethisch
Notificaties van vertrouwelijke bronnen, gesprekken met fractiegenoten en klokkenluiders lopen langs een apparaat dat meeluistert. Apple schikte in 2025 een zaak waarin de Apple Watch via Siri ongevraagd gesprekken opnam.
NEE
Privacy
Google, eigenaar van Fitbit, bleef locatie volgen nadat gebruikers tracking hadden uitgezet (een schikking van bijna 400 miljoen dollar met veertig Amerikaanse staten, 2022). Gezondheidsdata van een wearable valt niet onder medische privacywetgeving. De verzameling staat aan, de controle ontbreekt.
NEE
Vier keer nee. Het lijkt onschuldig, een horloge om een pols, maar het is een continue biometrische en locatiesensor op het lichaam van iemand die toegang heeft tot staatsgevoelige informatie. Hetzelfde geldt voor de Apple Watch van een agent op straat, die naast locatie ook het inzetritme en de aanwezigheid van politie-eenheden in een dataset giet die bij de fabrikant en zijn partners belandt. Strava bewees al wat er gebeurt als je dat optelt over veel dragers.
Dit is het soort beslissing waar P-SEP voor bedoeld is. Niemand stelde de vier vragen voordat de smartwatch de plenaire zaal in mocht. Had iemand dat wel gedaan, dan was de uitkomst dezelfde geweest als bij de bril: er klopt iets niet, en dus komt het er niet in bij wie een kritieke verantwoordelijkheid draagt.
Wat nu? Concreet.
Voor jou als koper:
Besef dat je met deze bril zelf de verwerkingsverantwoordelijke wordt zodra je anderen filmt. Onder de AVG kan een gefilmde voorbijganger jou aanspreken.
Wil je hem toch: zet de spraakfunctie uit (het enige wat de beeld-training-pijplijn stopt), zet “Additional Data” uit in Settings, en vraag actief toestemming voor je opneemt.
Vermijd opnemen in gevoelige ruimtes, toiletten, kleedkamers, zorginstellingen, klaslokalen. Dat is het verschil tussen toegestaan en strafbaar.
Voor jou als voorbijganger:
Je mag een drager vragen de bril af te zetten of uit te schakelen. Dat is je goed recht.
Open-source apps als Nearby Glasses detecteren de BLE-signatuur (META_RB_GLASS) en waarschuwen je. Gebruik dat om je bewust te zijn, niet om iemand lastig te vallen. Intimidatie is zelf strafbaar.
Voor beleidsmakers:
“Designed for privacy” als marketingclaim, terwijl verzamelen standaard aanstaat en een opt-out actief is verwijderd, verdient een onderzoek door de Autoriteit Persoonsgegevens, niet over een bril, maar over het ontwerp.
Maak van de P-SEP-toets (Persoonlijk, Security, Ethisch, Privacy) een vaste stap bij elke beslissing over apparaten en diensten in de publieke sector. Vier keer ja, of het komt er niet in.
De eerlijkheid die erbij hoort
Meta en EssilorLuxottica betwisten een deel hiervan. Meta noemt de gezichtsherkenning “exploratory” en zegt geen centrale gezichtsdatabase te bouwen. EssilorLuxottica zegt samen te werken met toezichthouders. Die weerwoorden horen erbij. Maar ze veranderen niets aan wat in de SDK-broncode, de privacyverklaring en het Nairobi-dossier staat. De feiten in de schakels hierboven staan los van de intenties die het bedrijf eraan toeschrijft.
Laten we dit geen “handige AI-bril” noemen. Laten we het noemen wat het is: een opnameapparaat dat de last van toestemming bij de drager legt, de data bij Meta, de ogen bij een onderaannemer in Nairobi, en het risico bij iedereen die toevallig in beeld loopt.
Leg het langs P-SEP, persoonlijk, security, ethisch, privé, en het zakt vier keer. Dat is de uitkomst van de toets, geen mening.
Alle informatie is openbaar en geverifieerd op het moment van schrijven. Geen telemetrie, geen affiliate, geen verdienmodel achter dit stuk. Het P-SEP-model (Persoonlijk, Security, Ethisch, Privacy) is van Erik Jan Koedijk, cybersecurity.vision. Onafhankelijk privacy-onderzoek uit Nederland.
Bij het afrekenen bij de ANWB, via iDEAL, wordt het toestel van de bezoeker gescand op openstaande poorten. Die techniek komt uit de fraudebestrijding. Maar ze gebeurt onzichtbaar, en de bezoeker weet er niets van. Een legitiem doel en een inbreuk op je apparaat lopen hier door elkaar.
"'Laat Mick maar praten, het is gewoon een betaalpagina.' Tot je ziet wat die pagina naar je eigen computer stuurt." De iDEAL-pagina op pay.ideal.nl vuurde 353 verzoeken af naar zeven vaste poorten op 127.0.0.1, je eigen machine, pad /initiate. Zelfs bij weigeren gebeurde dat 177 keer. De CSP staat het expliciet toe: default-src 'self' data: 127.0.0.1:*. De pagina scant dus je eigen apparaat af.
Op sst.anwb.nl draait server-side tagging, een GA4-kopie, die 18 keer voor consent afvuurde met events als page_view, login, scroll en user_engagement. "Cookieloos is niet gegevensloos: zo'n ping draagt je IP-adres, je browser-kenmerk, de pagina-URL en de naam van wat je deed naar Googles servers, terwijl je net 'nee' zei." Geen cookie betekent niet geen data.
"Dus ook dat je inlogt werd geregistreerd, terwijl analytics geweigerd was." Het klantdataplatform BlueConic op t066.anwb.nl kreeg een echt IP plus labels waaruit het Lidnummer bekend was, maar dat gebeurde alleen na toestemming. Het onderscheid telt: voor toestemming ging het gedrag mee, na toestemming ook de identiteit. Meting op 12 juni 2026, vijf HAR-captures van samen circa 83 MB.
Ik legde een doodgewone sessie op www.anwb.nl vast, twee keer: een keer met cookies geweigerd en een keer met alles geaccepteerd, allebei tot en met een iDEAL-betaling. Twee dingen springen eruit. De iDEAL-betaalpagina vuurt 353 verzoeken naar poorten op je eigen computer, en dat gebeurt ongeacht je cookiekeuze. En ANWB stuurt al gedrag naar Google voordat je iets hebt aangeklikt. De zware advertentiepixels respecteren je weigering wel. Hieronder wat er vertrekt, waarheen, en wat hard gemeten is en wat niet.
Je verlengt je lidmaatschap, je regelt een verzekering, je rekent af. Een vertrouwde Nederlandse club, een vertrouwd betaalmerk. Niets aan de hand, zou je denken. Maar onder de motorkap gebeuren in diezelfde seconden dingen die niemand je heeft uitgelegd, en eentje daarvan raakt niet ANWB maar het hart van het Nederlandse betaalverkeer.
Ik heb het netwerkverkeer van een ingelogde sessie vastgelegd in vijf HAR-bestanden, samen ongeveer 83 megabyte, en daar regel voor regel doorheen gewerkt. Geen aannames vooraf: gewoon kijken wat het toestel verstuurt, naar wie, en op welk moment.
“Laat Mick maar praten, het is gewoon een betaalpagina.” Tot je ziet wat die pagina naar je eigen computer stuurt.
Wie, wat, waarheen, in het kort
Wie
Wat
Waarheen
iDEAL / Currence (de betaalpagina)
353 verbindingspogingen naar zeven poorten op 127.0.0.1, je eigen computer, tijdens het betalen. Ongeacht je cookiekeuze.
Blijft op je toestel (de poorten antwoorden niet). Doel is vrijwel zeker detectie van software op afstand.
ANWB (vóór toestemming)
Gedragsgebeurtenissen zoals page_view, login en scroll, plus advertentiepings.
Via het eigen subdomein sst.anwb.nl server-naar-server naar Google, en direct naar Google Ads.
ANWB (ná toestemming)
Het volledige pakket: remarketing, een klantprofiel met je IP-adres, en sessie-opname.
Google, Meta, Microsoft, en BlueConic op een eigen subdomein.
De korte versie
De iDEAL-betaalpagina (pay.ideal.nl, gebouwd door Payconiq voor Currence) stuurt tijdens het betalen 353 verzoeken naar poorten op je eigen computer. Dat is gemeten, en het staat zwart op wit in de beveiligingsregels van die pagina dat het mag.
Die scan negeert je cookiekeuze volledig: 177 keer toen ik weigerde, 176 keer toen ik accepteerde. Het is geen marketing, het is vrijwel zeker fraudedetectie. Maar je weet er niets van.
ANWB stuurt gedrag naar Google voordat je toestemming geeft. Met cookies geweigerd vertrokken er tóch analytics-gebeurtenissen, waaronder een login-event, via een eigen ANWB-subdomein dat trackerblokkers omzeilt.
De advertentiepixels respecteren je weigering wel. Meta, Microsoft, DoubleClick, remarketing, het klantprofiel met je IP-adres en de sessie-opname kwamen pas ná “alles accepteren”. Dat hoort zo, en dat zeg ik er eerlijk bij.
Wat je kunt doen: weiger cookies (het scheelt aantoonbaar veel), en weet dat de iDEAL-scan losstaat van die keuze. Verderop staat meer.
Wat ik onderzocht, en hoe
Ik heb met de browser het volledige netwerkverkeer opgenomen van een ingelogde sessie op www.anwb.nl, doorlopend tot een echte iDEAL-betaling. Dat levert een HAR-bestand op: een letterlijk logboek van elk verzoek dat de browser doet, met adressen, kopteksten en, waar de browser ze bewaart, de inhoud.
Het belangrijkste in de opzet: ik heb het twee keer gedaan. Eén keer met de cookiebanner op weigeren, en één keer met alles accepteren. Zo kun je precies zien wat er afhangt van je toestemming en wat niet. Dat de twee echt verschillen, is geen interpretatie: ANWB’s eigen toestemmingscookie legt het vast.
De twee runs, bewezen via ANWB's eigen cookie
Modus
Cookie cookie-policy-agreement
Google-signaal gcs
ZONDER (geweigerd)
{"REVISION":20,"consentLevel":1}
G100 (analytics + ads geweigerd)
MET (geaccepteerd)
{"REVISION":20,"consentLevel":3}
G111 (beide toegestaan)
Deel 1 · Je betaalpagina scant je eigen computer
Dit is de vondst die er het meest uitspringt, en die niet over ANWB gaat maar over iDEAL zelf.
Op het moment dat de iDEAL-betaalpagina laadt, begint je browser verbindingen op te zetten naar je eigen computer. Niet naar internet: naar 127.0.0.1, het adres dat altijd “deze machine hier” betekent. In totaal 353 keer, verdeeld over zeven vaste poorten, telkens met het pad /initiate.
De scan. De betaalpagina probeert zeven poorten op je eigen machine te bereiken. Op een schone computer luistert daar niets, dus alle pogingen worden geweigerd (status 0). Juist dat geweigerd-worden vertelt de pagina iets: wat er niet draait.
De poorten zijn 666, 6039, 7070, 9527, 9528, 37014 en 37114. Poort 666 wordt het vaakst geprobeerd (88 keer), de rest elk een stuk of vijftien keer. De verzoeken zijn van het type no-cors, wat een belangrijk detail is: de pagina mag het antwoord niet lezen, maar kan wel detecteren of er iets antwoordt. Dat is precies de techniek waarmee je van buitenaf kunt vaststellen of er op je computer een bepaald programma draait, zonder dat je het kunt zien.
Waarom doet iDEAL dit? Het eerlijke antwoord: het meest waarschijnlijke doel is het opsporen van software waarmee iemand je computer op afstand overneemt of meekijkt. Dat is een bekende anti-fraudetechniek tegen oplichting waarbij een crimineel je tijdens een betaling aan de lijn houdt en het scherm overneemt. De zeven poorten passen bij dat soort programma’s. Maar let op het bewijsniveau: de scan zelf heb ik gemeten, het doel is een gefundeerde gevolgtrekking. De code die de exacte poort-naar-programma-vertaling maakt, zit in een bestand van 1,64 megabyte dat de browser bij het opslaan op precies 1,0 megabyte heeft afgekapt. Ik kan die code dus niet letterlijk citeren, alleen het gedrag dat eruit voortkomt. (Inmiddels achterhaald, zie de update direct hieronder.)
Poort → programma, uit iDEAL's eigen configuratie (16 juni 2026)
Poort
Label in de config
Programma
6039
TEAMVIEWER HASH
TeamViewer
7070
ANYDESK HASH
AnyDesk
9527
STSTREAMER_HASH
Splashtop Streamer
9528
STSOS_HASH
Splashtop SOS
37014 · 37114
TV_ACTIVE_HASH
TeamViewer (actief)
666
csdTestObject
ijk-/controlepoort, geen programma
Dezelfde module doet trouwens meer dan poorten scannen: ze leest ook het betaalbedrag en de begunstigde uit de pagina (data-testid=payment-amount-euros en …-creditor) en let op of de pagina onderweg gewijzigd wordt. Het resultaat gaat eerste-partij terug naar iDEAL (PUT pay.ideal.nl/api/v1/transactions/initiate). Wie de module precies levert, is uit de sterk versluierde code niet hard vast te stellen; dat houd ik bij de feiten weg.
Technisch: de bouwers en de telemetrie van de betaalpagina
De betaalpagina pay.ideal.nl draagt de titel "iDEAL | Wero" en is gebouwd door @payconiq (Payconiq International, de partij achter de nieuwe iDEAL). De pagina meet zichzelf met twee telemetriesystemen: Elastic APM (apm.idealapi.nl, agent rum-js 5.16.0, service ideal-payment-page-frontend) en AWS CloudWatch RUM. In de telemetrie staat onder meer "referer":"https://www.anwb.nl/", de winkel waar de betaling vandaan komt. Naast de localhost-scan deed de pagina ook twee echte, normale verzoeken aan pay.ideal.nl/api/v1/.../initiate (de transactie zelf, status 200): die horen er gewoon bij en zijn iets anders dan de localhost-pogingen.
En het venijn: deze scan trekt zich niets aan van je cookiekeuze. In de geweigerde run gebeurde het 177 keer, in de geaccepteerde run 176 keer. Logisch, want het is geen marketing. Maar het betekent ook dat je er op geen enkele knop “nee” tegen kunt zeggen.
Deel 2 · Wat vuurt er vóór je iets aanklikt
Nu naar ANWB zelf. De grote vraag bij elke website: wat gebeurt er als je de cookies weigert? Het korte antwoord hier: minder dan met accepteren, maar niet niets.
Twee modi. Links wat er gebeurt als je weigert, rechts wat erbij komt als je accepteert. De advertentiepixels zitten netjes rechts. Maar de tak linksonder, analytics naar Google ondanks je weigering, is het echte twistpunt.
ANWB gebruikt server-side tagging. Op een eigen subdomein, sst.anwb.nl, draait een kopie van Google Tag Manager. Je gegevens gaan eerst naar dat ANWB-adres, en van daaruit server-naar-server door naar Google. Het effect: voor je browser en voor trackerblokkers ziet het eruit als “gewoon ANWB”, terwijl het in werkelijkheid het doorgeefluik naar Google is. Dat heet first-party cloaking, en het is precies waarom dit soort verkeer zo lastig te zien is.
Met cookies geweigerd (gemeten) vertrok er tóch:
Analytics naar Google via sst.anwb.nl (18 keer): gebeurtenissen page_view, login, scroll, user_interaction, user_engagement en view_experiment. Dus ook dát je inlogt werd geregistreerd, terwijl analytics geweigerd was.
Directe advertentiepings naar Google (pagead2.googlesyndication.com, 9 keer).
Sentry (27 keer, foutopname inclusief de sessie-opname-module, daarover verderop).
En wat respecteerde de weigering wel? Een hoop, en dat hoort gezegd te worden. In de geweigerde run zag ik geen Meta, geen Microsoft Bing, geen DoubleClick, geen remarketing, geen BlueConic-klantprofiel en geen Contentsquare. Die kwamen allemaal pas ná “alles accepteren”. Op dat punt doet ANWB het dus zoals het hoort.
Wat vuurde, per modus (aantal verzoeken, gemeten)
Dienst
ZONDER (geweigerd)
MET (geaccepteerd)
Vuurt ondanks weigering
iDEAL localhost-scan (127.0.0.1/initiate)
177×
176×
sst.anwb.nl server-side GA4
18×
14×
Google Ads-pings (ccm/collect)
9×
0×
Sentry (fouten + replay)
27×
13×
LivePerson chat / Expoints feedback
26× / 24×
20× / 13×
Pas ná toestemming
BlueConic klantprofiel (met je IP)
0×
22×
Google-remarketing (ads/ga-audiences)
0×
10×
DoubleClick / Meta / Bing / Contentsquare
0×
4× / 2× / 2× / 2×
Deel 3 · Waar je gegevens heen gaan
Als je wél accepteert, ontvouwt zich het complete beeld. Het mooie nieuws eerst: ik heb gecontroleerd of je identiteit (e-mailadres, account-id, IP-adres, betaaltoken) ergens naar een derde partij vertrekt, en dat heb ik in deze opnames niet gevonden. Je persoonsgegevens blijven binnen de ANWB-subdomeinen. Het gaat dus niet om een directe verkoop van je naam aan adverteerders, maar om gedrag, een IP-adres, en de timing rond je toestemming.
De datastroom. Alles wat je identificeert blijft op ANWB-subdomeinen (het blok in het midden). De doorgifte naar Google gebeurt server-naar-server vanaf sst.anwb.nl. De betaalpagina staat los, met de localhost-scan.
De opvallendste verwerker is BlueConic, een klantdataplatform, verstopt op het ANWB-subdomein t066.anwb.nl. Dat platform kreeg je echte IP-adres te zien (het kaatste het netjes terug in zijn antwoord) en draagt een rijke lijst gedragslabels: of je op het punt staat weg te klikken, of je inactief bent, of je een route plant, en, veelzeggend, Lidnummer bekend, plus verzekeringstrechters met namen als Woonverzekering vragenlijst. Dit is profilering, gekoppeld aan je lidmaatschap. Belangrijk en eerlijk: dit vuurde alleen ná toestemming. Weiger je, dan blijft BlueConic stil.
Deel 4 · Sentry en sessie-opname
Op de site zit Sentry, een dienst voor foutmeldingen. Twee aparte Sentry-projecten, en ze vuren ook al voordat je toestemming geeft. Goed nieuws voor de datasoevereiniteit: deze Sentry draait op de Europese omgeving (Frankfurt), niet in de VS.
Wat ik wel kan vaststellen: de ANWB-code laadt naast foutopname ook de sessie-opname-module van Sentry (de zogeheten Replay, die letterlijk je schermgedrag kan terugspelen). Wat ik niet kan vaststellen uit deze opnames: hoe vaak die opname aanstaat en of er gevoelige gegevens in worden vastgelegd. De inhoud van die Sentry-verzoeken heeft de browser namelijk niet bewaard, de verzoeken zijn leeg in mijn log. Ik laat dat hier nadrukkelijk open: de mogelijkheid zit aantoonbaar in de code, het bewijs van wat er wordt opgenomen ontbreekt. Daarnaast staan er nog Contentsquare (sessie-opname, pas ná toestemming) en LivePerson (chat, met de mogelijkheid tot meekijken) op de site.
Wat hard is, en wat niet
Dit hoort er bij elk eerlijk onderzoek bij. Tijdens het graven ben ik ook een paar dingen tegengekomen die er op het eerste gezicht erger uitzagen dan ze zijn. Die corrigeer ik liever zelf dan dat ik ze laat staan.
De localhost-scan komt van iDEAL, niet van ANWB. ANWB’s eigen code noemt 127.0.0.1 ook, maar alleen om te herkennen of de site in een testomgeving draait. Dat is geen scan.
Het is geen “Google Tag Manager die je poorten scant”. De poortnummers kwamen toevallig ook voor in een groot Google-bestand, maar zonder de bijbehorende scan-code. De scan zit echt op de betaalpagina.
Ik heb geen IP-lek naar derden gevonden. Een paar getallen die op IP-adressen leken, bleken bij nader inzien coördinaten uit een tekening (een SVG-pictogram) te zijn. Die heb ik niet meegeteld.
Ik beweer niet dat de sessie-opname jouw gevoelige gegevens vastlegt. De module is aanwezig, de inhoud is onbewezen.
Eén kanttekening over hygiëne aan ANWB’s kant: in de publieke Google-configuratie van de site staat een intern e-mailadres van een ANWB-medewerker hardcoded. Dat is niet jouw data, maar het hoort niet in code die aan iedereen wordt uitgeleverd.
Wat je kunt doen
Weiger de cookies. Het scheelt aantoonbaar veel: de remarketing, het klantprofiel met je IP-adres, Meta, Microsoft en de sessie-opname blijven dan uit. Dat het analytics-restje en de iDEAL-scan blijven, is vervelend, maar je vermindert het meeste.
Weet dat de iDEAL-scan losstaat van je keuze. Je kunt hem niet uitzetten via een cookiebanner. Wil je hem helemaal kwijt, dan kom je uit bij browser-extensies die 127.0.0.1-verzoeken blokkeren, met het risico dat een legitieme fraudecheck dan ook sneuvelt.
Vraag het na. Je hebt recht op inzage (AVG, artikel 15). Vraag ANWB welke gedragsgegevens ze vóór je toestemming naar Google sturen, en vraag Currence waarom de betaalpagina je localhost scant en hoe lang ze de uitkomst bewaren. Dat zijn precies de vragen waar dit dossier de feiten voor levert.
Van een cookie loopt een lijn naar de fraudeur aan de telefoon
De gegevens die via cookies en trackers worden verzameld, komen via datahandelaren uiteindelijk bij fraudeurs terecht. Zo loopt er een lijn van een cookie op een website naar een bankhelpdeskfraudeur aan de lijn. Dat we die lijn normaal zijn gaan vinden, is misschien wel het ergste eraan.
"Een scammer belt je 73-jarige moeder. Hij weet haar volledige naam, haar adres, dat haar man drie jaar geleden is overleden, dat ze klant is bij ING. Binnen 40 minuten staat EUR 28.000 op een geldezelrekening." Dat is geen los incident. Het is het eindpunt van een keten die begint bij een trackingpixel op een vertrouwde site.
"Het is geen samenzwering. Het is geen hack. Het is hoe het systeem op dit moment werkt." Een gemiddelde pagina draagt 18 tot 47 tracker-pixels (FTC/EFF). Via adtech en databrokers belandt het profiel op lijsten die te koop staan. Het OM Noord-Nederland eiste in april 2026 celstraffen tot vier jaar tegen handelaren in lijsten als "106 vrouw 65 plus".
"Onwetendheid is geen excuus. De verwerkingsverantwoordelijke is aansprakelijk voor de gehele verwerkingsketen die zij in gang zet." De boetes bevestigen dat: de Zweedse IMY beboette Apohem (8 mln SEK), Avanza Bank (15 mln SEK) en Apoteket AB (37 mln SEK); Meta kreeg EUR 1,2 mrd van de Ierse DPC (2023). Juridisch raakt het AVG art. 6, 32, 35, 44-49 en 82, plus Schrems II (2020) en C-300/21 (2023).
"Schrap elke tracker die je niet in een zin kunt uitleggen." De keten wordt niet doorbroken bij de fraudeur, maar bij de bron: de pixel die niemand kan verantwoorden.
Een scammer belt je 73-jarige moeder. Hij weet haar volledige naam, haar adres, dat haar man drie jaar geleden is overleden, dat ze klant is bij ING en dat haar zoon vorige maand een nieuwe auto heeft gekocht. Hij klinkt overtuigend. Hij heet zogenaamd Mark, fraude-afdeling. Binnen 40 minuten staat €28.000 op een geldezelrekening.
Hoe wist Mark dit allemaal?
Het korte antwoord: omdat jij, én je moeder, websites bezoeken die geld verdienen aan tracking pixels. En omdat geen enkele bestuurder van die websites weet wat die pixels precies doen.
Dit artikel legt de keten bloot. Het is geen samenzwering. Het is geen hack. Het is hoe het systeem op dit moment werkt.
De keten van tracking pixel tot bankhelpdeskfraude, in zeven stappen.
De keten in zeven stappen
Stap 1, Jij bezoekt een vertrouwde website. Een Nederlandse krant, webshop, verzekeraar, of ziekenhuissite. Tracking pixels vuren soms af voordat je ergens op klikt.
Stap 2, De pagina deelt je data met tientallen partijen. IP-adres, browsertype, klikgedrag, soms ingevulde formuliervelden. By design onzichtbaar. De FTC en EFF hebben dit gerapporteerd: gemiddeld 18-47 tracker-pixels per pagina op vertrouwde bedrijfssites.
Stap 3, Adtech-bedrijven aggregeren. Meta, Google, ad-exchanges combineren duizenden datapunten tot één profiel over weken en maanden.
Stap 4, Databrokers verrijken met offline data. Acxiom, Epsilon, kredietinformatiebureaus koppelen online profielen aan kadaster, autobezit, abonnementen, gezinssamenstelling. Duizenden datapunten per persoon.
Stap 5, Het profiel wordt verkocht of gestolen. Legaal aan marketeers en verzekeraars. Illegaal via datalekken en Telegram-handel. Het OM Noord-Nederland eiste in april 2026 celstraffen tot vier jaar tegen handelaren in lijsten als “106 vrouw 65 plus”, profielen die exact zo samengesteld waren.
Stap 6, De scammer bouwt zijn aanval. Met échte naam, geboortedatum, bank, gezinsleden wordt bankhelpdeskfraude overtuigend. De FBI IC3 rapporteert dat meer dan de helft van fraudezaken tegen ouderen direct verband houdt met blootgestelde data.
Stap 7, De betalende oma. Het eindresultaat van de keten: een kwetsbaar slachtoffer verliest geld aan bankhelpdeskfraude. Oma verliest €28.000. De website van stap 1 weet van niets, en draagt toch verantwoordelijkheid voor de keten die zij in gang zette.
Waarom dit ertoe doet
Drie Zweedse IMY-zaken uit 2024–2025 illustreren wat “onwetendheid” de markt kost.
Apohem (online apotheek): Meta Pixel deelde namen, e-mails, telefoonnummers en aankoopgeschiedenis. Geen DPIA, geen risicoanalyse. 8 miljoen SEK boete. Het probleem: marketing vroeg de pixel aan, IT zette hem in via Google Tag Manager, de privacy-officer zag het niet, het bestuur tekende af op “AVG-compliant”. Niemand controleerde wat er feitelijk werd verzonden.
Avanza Bank: marketing zette per ongeluk Meta’s “Automatic Advanced Matching” aan. Leningbedragen en rekeningnummers vlogen naar Meta. 15 miljoen SEK boete. Zweedse IMY: “Dit zijn financiële gegevens. De bank was aansprakelijk, zelfs al wisten zij niet dat het gebeurde.”
Apoteket AB: persoonsnummers en gezondheidsgerelateerde data lekten ondanks filters. 37 miljoen SEK boete. Dit was geen hack, het systeem werkte zoals ontworpen.
Onwetendheid is geen excuus. De verwerkingsverantwoordelijke, in dit geval de website, is aansprakelijk voor de gehele verwerkingsketen die zij in gang zet.
, Zweedse IMY
Meta zelf betaalde €1,2 miljard aan de Ierse DPC in 2023 voor onrechtmatige datatransfers naar de VS.
Beleidscontext
AVG artikel 6, rechtmatige grondslag voor verwerking. “Gerechtvaardigd belang” voor marketing is een veelgebruikte route, maar de verwerking mag niet onevenredig inbreuk maken op de rechten van betrokkenen.
AVG artikel 32, veiligheidsniveaus. Controleer wat je pixels verspreiden, niet alleen dat ze geladen worden.
AVG artikel 35, DPIA verplicht voor risicovolle verwerking. De Apohem-zaak werd gewonnen door Noyb omdat Apohem géén DPIA had gemaakt voor Meta Pixel.
AVG artikel 44-49, internationale datatransfers. Veel trackers sturen data naar de VS. Na Schrems II (HvJ EU, 2020) is dat juridisch risicovol zonder aanvullende waarborgen.
AVG artikel 82, schadevergoeding. Sinds C-300/21 (HvJ EU, 2023) kunnen slachtoffers rechtstreeks aansprakelijkheid eisen. Oma kan de eerste website aanklagen voor schadevergoeding, zelfs als de directe oorzaak een scammer was, zolang te bewijzen valt dat de datablootstelling de fraude mogelijk maakte.
In Nederland heeft de Autoriteit Persoonsgegevens sinds 2023 standaard-AVG-vervolgingen tegen databrokers ingesteld, en behandelt het OM datalekken steeds vaker als strafrecht.
Wat kunt u morgen doen
Voer deze week een pixel-audit uit. Laat IT inventariseren welke trackers op jullie sites en apps draaien en naar welke partijen ze data sturen. Gebruik browser-tools als The Markup Blacklight of een Google Tag Manager-export. Leg een spreadsheet aan: tracker → ontvanger → data → rechtsgrond.
Eis een DPIA per marketing-tracker. Onder AVG artikel 35 is dit verplicht. Elke Meta Pixel, elke Google Analytics-integratie verdient een eigen risicoanalyse. Laat twee vragen beantwoorden: welke persoonsgegevens verlaten ons domein, en wat kunnen die ontvangers ermee doen?
Schrap elke tracker die je niet in een zin kunt uitleggen. Vraag commercial: waar gaat deze data naartoe en waarom? Kunnen zij het niet beantwoorden in dertig seconden, haal hem weg. Dit is een verwerkingsbeslissing met persoonlijke aansprakelijkheid.
Breng je verwerkersketen tot het einde in kaart. Niet alleen wie je data ontvangt, maar wat zij ermee doen, aan wie zij doorverkopen, en of die partijen in de adtech/databroker-keten zitten. De AVG maakt jou aansprakelijk voor de gehele keten.
Zet tracking op de bestuurstafel. Een pixel plaatsen is een verwerkingsbeslissing met persoonlijke aansprakelijkheid voor bestuurders. Onderzoek: dekt je D&O-verzekering AVG-boetes? Vaker niet dan wel.
Persoonlijke actiepunten
Zoek je naam op via Google en people-search-sites. Schrik niet. Dit is in de publieke adtech-keten beschikbaar.
Gebruik je AVG-rechten. Artikel 15-21 geeft je recht op inzage, correctie en verwijdering.
Beperk wat je deelt. Loyaliteitskaarten, online quizzes, “gratis” apps zijn datakanalen.
Praat met je ouders. Bankhelpdeskfraude richt zich op 65+. Als zij weten dat bellers hun gegevens kunnen hebben zonder hen te kennen, herkennen zij de truc sneller.
De slimme bril van Meta legt de mensen om je heen vast
De slimme bril van Meta is een hebbeding, trendy om te dragen. Maar hij legt je omgeving vast, de mensen om je heen die nergens toestemming voor gaven, en die beelden voeden de training van het bedrijf. Iets kan hip zijn en tegelijk allesbehalve cool.
De Ray-Ban Meta ziet er hip uit, maar het ontwerp legt de last bij iedereen behalve Meta. "Opt-out, nooit opt-in. Verzamelen is de standaard. Niet-verzamelen is het werk dat jij moet leveren." De Meta Wearables Device Access Toolkit zet SDK-analytics standaard aan zolang ANALYTICS_OPT_OUT ontbreekt. Spraakopnames na "Hey Meta" worden standaard in de cloud bewaard, en de opt-out daarvoor is verwijderd.
"Ik heb nergens voor getekend. Jij ook niet. En dat is geen randgeval. Dat is het ontwerp." Beeld en geluid gaan naar de cloud en naar reviewers. Zweedse kranten onthulden dat intieme beelden door Keniaanse onderaannemers in Nairobi werden beoordeeld; Kenia opende in april 2026 een onderzoek. De bril draagt bovendien een teruggekeerde gezichtsherkenning: een 2048-dimensionale faceprint-embedding, een lokale map NameTagsPending die een reboot overleeft. Twee Harvard-studenten identificeerden er vreemden op straat mee.
"Meta verkoopt je het risico. Jij draagt het." En breder: "een opnameapparaat dat de last van toestemming bij de drager legt, de data bij Meta, de ogen bij een onderaannemer in Nairobi, en het risico bij iedereen die toevallig in beeld loopt." Getoetst aan het P-SEP-model (Erik Jan Koedijk) zakt de bril op alle vier de assen. EssilorLuxottica verkocht in 2025 circa 7 miljoen brillen. Hip is niet hetzelfde als in orde.
Weerklank: op LinkedIn werd dit een van mijn best gelezen stukken, met 548.000 impressies en circa 5.000 interacties.
Hoe een modebril van 419 euro een wandelend opnamestation werd dat data naar de cloud, naar onderaannemers in Nairobi en naar een gezichtsherkenningsdatabase stuurt. Waarom jij, de voorbijganger, het slachtoffer bent dat nergens voor heeft getekend, en waarom dit apparaat verboden hoort te zijn voor wie bij de AIVD, de MIVD, het leger of de vitale infrastructuur werkt.
Vorige maand stond er weer iemand naast me in de rij bij de Albert Heijn met een Ray-Ban Meta op.
Misschien filmde hij. Misschien niet. Het lampje is klein, en in fel licht zie je het niet. Dat is precies het punt: ik kon het niet weten, en ik kon er niets tegen doen. Ik heb nergens voor getekend. Jij ook niet. En dat is geen randgeval. Dat is het ontwerp.
Dit is geen gadget-review. Dit is een forensische uiteenzetting van wat er feitelijk gebeurt met data die deze bril vastlegt. Niet wat de marketing belooft, maar wat in de SDK-broncode, de privacyverklaring en het onderzoeksdossier staat. Alles hieronder is openbaar en geverifieerd op het moment van schrijven. Ik begin met de schakel die het sterkst is. De rest telt ook, maar deze schakel laat het scherpst zien hoe Meta denkt.
En ik zeg het maar meteen, want het is de kern van dit stuk: een apparaat dat zo is ontworpen, verzamelen standaard aan, opt-outs die verdwijnen, beeld en stem naar de cloud, gezichtsherkenning aan boord, hoort verboden te zijn voor iedereen met een kritieke functie. Voor de AIVD, de MIVD, het leger en de beheerders van de Nederlandse vitale infrastructuur. De drager wil geen kwaad. Het probleem is dat één fitnesstracker in 2018 al genoeg was om geheime militaire bases op de wereldkaart te laten oplichten. Deze bril doet oneindig veel meer dan een fitnesstracker. Hieronder leg ik schakel voor schakel uit waarom.
01 · Elke gekoppelde dienst is een datakanaal terug naar Meta
Lees deze zin uit Meta’s eigen Supplemental Privacy Policy voor de Wearable Products. De strekking, letterlijk:
Wanneer een third-party service op de Meta Wearable Products wordt gebruikt, zoals een muziekspeler of een third-party app, kan Meta, afhankelijk van hoe de dienst werkt, informatie verzamelen zoals: de informatie die de third-party verzamelt en die jij akkoord gaat te delen, hoe vaak en hoe lang je het gebruikt, crash-loginformatie, en een autorisatietoken.
Je koppelt Spotify. Onschuldig, denk je. Maar de koppeling zelf wordt een meetpunt: Meta ziet hoe vaak, hoe lang, met welk token. De bril gebruikt niet zomaar een dienst. De bril werkt als een doorgeefluik dat elke dienst die je aanraakt omzet in een datapunt over jou.
En de andere kant, de developers. In de officiële Meta Wearables Device Access Toolkit staat in beide repositories (iOS en Android), zwart op wit:
Door Meta-integraties in te schakelen, inclusief via deze SDK, kan Meta informatie verzamelen over hoe de Meta-apparaten van gebruikers communiceren met jouw app.
Voel je de omkering? Hier koopt de developer geen toegang tot de bril. Meta plant een observatiepost in de app van iedere developer. En het staat standaard aan: als de ANALYTICS_OPT_OUT-metadata ontbreekt of op false staat, is analytics gewoon ingeschakeld. De ontwikkelaar moet actief een regel toevoegen om het uit te zetten. Doet hij niks, en de meesten doen niks, dan loopt de stroom.
Schakel 1, de bril en elke gekoppelde dienst voeden Meta; de SDK plant analytics in apps van derden, standaard aan.
De kern van het hele dossier in een beweging: opt-out, nooit opt-in. Verzamelen is de standaard. Niet-verzamelen is het werk dat jij moet leveren.
De feiten: wie stuurt wat, waarheen?
Ik heb de datastromen uit elkaar getrokken. Geen speculatie, elke regel is herleidbaar naar een bron (zie achteraan).
De bril ontleed: onder het montuur zitten camera, microfoons, moederbord, sensoren en radio's, elk een potentiële databron.
Wat
Wie verzamelt
Waarheen
Standaard aan?
Uit te zetten?
Spraakopnames (“Hey Meta”)
Meta
Cloud + third-party vendors
Ja
Nee, opt-out verwijderd
Beeld via Meta AI
Meta
Cloud + AI-training
Ja
Alleen via spraak uit
Camerabeelden ter review
Onderaannemer
Nairobi, Kenia
Ja
Nee
Essential data (batterij, wifi, OS, crashes)
Meta
Cloud
Ja, verplicht
Nee
Additional data (usage + geolocatie)
Meta
Cloud
Keuze bij setup
Ja, in Settings
Hoe je bril met app X praat
Meta
Cloud (SDK-analytics)
Ja
Alleen developer, in manifest
Gekoppelde dienst (bv. muziek)
Meta
Cloud
Ja
Afhankelijk van dienst
Gezicht voorbijganger naar embedding
App op telefoon
Lokale DB “NameTagsPending”
(aangetroffen)
Voorbijganger heeft geen knop
Lees de laatste kolom van boven naar beneden. Dat is het antwoord op de vraag “controlled by you?”
02 · De opt-out die actief werd weggehaald
Dit is het bewijs dat het geen ongelukje is maar een richting. Meta wijzigde het databeleid zo dat spraakopnames standaard in de cloud worden bewaard, zonder mogelijkheid om eruit te stappen. De vergelijking die analisten trokken: precies wat Amazon met Alexa deed. De opnames gaan naar productverbetering en AI-training. Visuele content gedeeld met Meta AI? Ook bruikbaar voor training, tenzij je de hele spraakfunctie uitzet. Een keuze die er was, is verdwenen.
Schakel 2, waar vroeger een opt-out zat, gaat spraak nu standaard naar de cloud en de AI-training.
03 · Nairobi: jouw toiletbezoek, hun annotatietaak
Hier wordt het concreet, en hier wordt het smerig. De Zweedse kranten Svenska Dagbladet en Göteborgs-Posten legden bloot dat beelden die wereldwijd door deze brillen worden verzameld, inclusief intieme scènes, geweld, en vertrouwelijke gegevens zoals bankrekeningnummers, terechtkwamen in Nairobi. Daar moesten Keniaanse werknemers van een onderaannemer ze beoordelen om de AI te trainen.
Een beoordelaar, anoniem: in sommige video’s zie je iemand naar het toilet gaan, of zich uitkleden. En de mensen in beeld weten dat vermoedelijk niet, want anders zouden ze niet opnemen.
Laat dat bezinken. Een toevallige voorbijganger wordt gefilmd, het beeld reist naar een datacenter, en een mens aan de andere kant van de wereld bekijkt het. Dat is de “third party” die er werkelijk toe doet. Geen abstracte server, maar menselijke ogen op je intiemste moment. Kenia opende in april 2026 een formeel onderzoek naar de massale surveillance-mogelijkheden en het niet-consensuele vastleggen van intieme beelden.
Schakel 3, van een gefilmde voorbijganger zonder toestemming, via Meta's cloud, naar menselijke beoordelaars in Nairobi.
04 · Faceprints: de belofte van 2021, stil teruggedraaid
In 2021 sloot Meta het gezichtsherkenningssysteem van Facebook en verwijderde meer dan een miljard faceprints. Met veel vertoon. Principieel, heette het.
Vijf jaar later: een WIRED-onderzoek stelt dat kerncomponenten van een gezichtsherkenningssysteem (“NameTag”) al begin 2026 in software op miljoenen telefoons zaten. Een beveiligingsonderzoeker draaide de pijplijn end-to-end: gezichtsextractie-modellen genereerden een 2048-dimensionale biometrische embedding, doorzochten een lokale index, en bij een match vuurde een melding “Person Recognized” af. Er bleek een lokale database te zijn die gecropte gezichten en fingerprints opslaat in een map genaamd, ik verzin dit niet, NameTagsPending. Records die een herstart overleven en later aan een identiteit gekoppeld kunnen worden.
Al gedemonstreerd in het wild: twee Harvard-studenten koppelden bril-beelden aan externe gezichtsherkenning om vreemden op straat te identificeren. Geen toekomstmuziek. Aangetroffen capaciteit.
Schakel 4, de aangetroffen biometrische pijplijn: van gezicht naar embedding naar 'Person Recognized', met persistente opslag.
05 · Wat dit betekent onder Nederlands en Europees recht
Hier botst het frontaal. AI-wearables vallen in de EU onder de AVG en de AI Act. Een woordvoerder van de Europese Commissie was helder: elke opname van individuen moet duidelijk gecommuniceerd worden en een wettelijke grondslag hebben, tenzij de verwerking puur persoonlijk of huishoudelijk is. Een bril die je in een café, op je werk of op straat opzet, valt daar niet zomaar onder.
De European Data Protection Board waarschuwde al in 2024 dat de “standaard-aan”-houding ongemakkelijk samenvalt met de toestemmingsvereisten van de AVG, juist voor omstanders die nergens mee instemden. De Ierse toezichthouder zette in 2021 al vraagtekens bij dat kleine LED-lampje. De Britse ICO heeft Meta om uitleg gevraagd. John Davisson van het Electronic Privacy Information Center vatte de onmogelijkheid samen: de drager kan geen toestemming geven namens alle mensen die hij tegenkomt.
Schakel 5, de juridische omkering: de koper wordt verwerkingsverantwoordelijke; de omstander gaf nooit toestemming.
06 · Het precedent: hoe een hardloop-app militaire bases verraadde
Wie denkt dat “geaggregeerde, anonieme” data ongevaarlijk is, precies het woord dat Meta gebruikt voor zijn telemetrie, moet zich januari 2018 herinneren. De fitness-app Strava publiceerde een wereldwijde “heatmap” van 13 biljoen GPS-punten van zijn gebruikers. Aggregaat. Anoniem. Mooi om te zien.
De Australische analist Nathan Ruser keek er twee keer naar en zag iets anders: in de woestijn van Syrië, in Afghanistan, in Somalië gloeiden hardlooproutes op precies daar waar geheime Amerikaanse militaire bases lagen. Bases die op Google Maps onzichtbaar waren, tekenden zich op Strava haarscherp af, inclusief hun interne layout, patrouilleroutes en bevoorradingslijnen, uitgelopen door soldaten met een fitnesstracker om. In afgelegen gebieden, waar bijna niemand zo’n dure tracker draagt behalve westerse militairen, was elk lichtpuntje een verklikker.
De Strava Global Heatmap zelf: de gloeiende lijnen tekenen de loop- en patrouilleroutes binnen een afgesloten faciliteit. Bron: Strava Labs, via The Hacker News (jan 2018).
Het cruciale punt, en de reden dat dit hier staat: het verraad zat niet in een enkele hardloopronde, maar in het patroon in het aggregaat. Niemand had toestemming gegeven om een militaire basis in kaart te brengen. De data was “geanonimiseerd”. En tóch lag de geografie van de Amerikaanse defensie op straat, omdat genoeg losse, op zichzelf onschuldige bewegingen samen een kaart vormen.
De lijst groeide razendsnel: behalve Amerikaanse bases in Afghanistan en Syrië dook er een vermoedelijke CIA-post in Somalië op, een raketcommandocentrum in Taiwan, een NSA-faciliteit op Hawaii, en zelfs Area 51. En het ging verder dan locatie: onderzoekers vonden manieren om de “geanonimiseerde” heatmap te de-anonimiseren, individuele personen en hun looproutes weer aan een identiteit koppelen. Precies wat Strava beloofde dat onmogelijk was. De term die analisten gebruikten was pattern of life: niet wat je een keer doet, maar het ritme van je dagen, en dat ritme was opeens van iedereen te lezen.
Vertaal dat naar een bril met camera, microfoon, GPS via de telefoon en verplichte telemetrie. Strava lekte alleen positie. De Ray-Ban Meta voegt daar beeld, geluid en gezichten aan toe, en stuurt het naar de cloud van een advertentiebedrijf. Als geaggregeerde looproutes al een staatsgeheim konden blootleggen, bedenk dan wat geaggregeerde camerabeelden van miljoenen brillen kunnen reconstrueren: wie waar woont, werkt, bidt, demonstreert, of met wie samen is.
Strava beriep zich destijds op precies het verweer dat Meta nu voert: gebruikers kónden het delen uitzetten, het was hun eigen keuze. Maar het Pentagon had duizenden Fitbits onder personeel uitgedeeld zonder duidelijke regels, en de standaardinstelling deed de rest. Het patroon is identiek aan dit hele dossier: de verzameling staat aan, de last ligt bij het individu, en de schade is collectief en onomkeerbaar.
Schakel 6, het Strava-precedent: losse 'anonieme' bewegingen vormen in het aggregaat een kaart. Bij de Ray-Ban komen beeld, geluid en gezichten erbij.
07 · Dit is geen privacy-probleem. Dit is een systeemontwerp.
Net als bij de datalekken die ik eerder analyseerde, is de hack of het schandaal slechts het symptoom. Het echte probleem zit in het model: verzamelen staat standaard aan op elk niveau; keuzevrijheid wordt verwijderd of verstopt; de gevoeligste data verlaat het toestel en passeert menselijke onderaannemers in een lagelonenland; een biometrische capaciteit die publiekelijk werd afgezworen is teruggekeerd; en het zwaarst getroffen slachtoffer, de voorbijganger, heeft per definitie geen knop, geen instelling, geen keuze.
Schakel 7, vijf ontwerpkeuzes die samen op één punt uitkomen: de voorbijganger zonder knop.
Hoeveel Ray-Ban Meta’s lopen er in Nederland rond?
Het harde startpunt: EssilorLuxottica rapporteerde ruim 7 miljoen verkochte smart glasses in 2025 alleen, ruim drie keer zoveel als in 2024. Daarmee komt het totaal op ongeveer 9 miljoen sinds de lancering van de Ray-Ban Meta, tweeënhalf jaar eerder. Noord-Amerika was de koploper, en dat detail telt: de verkoop is sterk geconcentreerd in rijke westerse markten, niet evenredig over de wereld verdeeld.
Meta en EssilorLuxottica publiceren geen cijfers per land, dus voor Nederland moet je rekenen. Ik heb dat langs drie routes gedaan en de aannames expliciet gemaakt, zodat je ze kunt natrekken of bijstellen.
Naar wereldbevolking (NL = 0,22% van de wereld): geeft ongeveer 20.000. Een duidelijke ondergrens, en eigenlijk te laag, want het negeert dat het product nauwelijks buiten welvarende markten verkocht wordt.
Via de afzetmarkt (Noord-Amerika 37%, de rest vooral West-Europa, Nederland daarbinnen 3,5 tot 5%): geeft tussen ongeveer 89.000 en 170.000.
Per capita ten opzichte van de VS (VS-penetratie circa 0,9% van de bevolking; Nederland op 25 tot 50% daarvan vanwege de latere, beperktere uitrol en de EU-restricties op de AI-functies): geeft ongeveer 40.000 tot 81.000.
Een onderbouwde schatting komt daarmee uit op grofweg 40.000 Nederlanders aan de voorzichtige kant, en mogelijk 130.000 tot 150.000 aan de bovenkant. Een redelijke centrale schatting ligt rond de 70.000 tot 90.000.
En dan de draai die ertoe doet: zelfs de ondergrens van 40.000 betekent tienduizenden camera’s-met-microfoon die dagelijks door Nederlandse straten, winkels, cafés en wachtkamers bewegen, langs honderdduizenden voorbijgangers die nergens voor tekenden. Bij de bovengrens loopt dat in de miljoenen passanten per dag.
08 · De kern: verbied dit bij kritieke functies
Strava lekte de geografie van geheime bases omdat soldaten een onschuldige consumentengadget droegen. Dat was een fitnesstracker die alleen positie deelde. De Ray-Ban Meta is datzelfde mechanisme, maar dan met camera, microfoon, GPS en een directe lijn naar de cloud van een advertentiebedrijf met menselijke reviewers. Wie het Strava-incident serieus neemt, kan maar tot één conclusie komen.
Waarom dit geen overdreven voorzorg is, maar de logische sluitsteen van alles wat hierboven staat:
De data is al onderweg voor je iets doet. Essential data (locatie van het toestel via wifi, OS, timing) wordt verplicht verzameld. Een analist die in het AIVD-gebouw zijn bril opzet, lekt aanwezigheidspatronen voor hij ook maar iets gefilmd heeft, exact het “pattern of life” dat Strava blootlegde.
Beeld en geluid maken het oneindig veel erger dan Strava. Een heatmap toonde wáár mensen liepen. Een camerabril toont wie er binnenloopt, welke documenten op tafel liggen, welke schermen aanstaan, en wat er besproken wordt, en stuurt fragmenten naar Meta’s servers, waar onderaannemers ze kunnen zien.
De aanwezige gezichtsherkenning maakt het tot een identificatiewapen. Een bril die gezichten omzet in biometrische embeddings, gedragen op een plek waar de identiteit van personeel zelf staatsgeheim is (denk aan undercover-medewerkers), is dan een operationeel veiligheidsrisico van de eerste orde geworden.
De drager kan niet instaan voor de keten. Zelfs een goedwillende medewerker controleert niet wat de firmware doet, wat naar de cloud gaat, of wie het in Nairobi beoordeelt. Bij kritieke functies is “ik vertrouwde de instellingen” geen aanvaardbaar antwoord. Het enige beheersbare beleid is: het apparaat komt er niet in.
Schakel 8, voor wie een kritieke functie bekleedt is een cloud-gekoppelde camerabril geen privacyrisico maar een operationeel veiligheidsrisico. De enige beheersbare uitkomst is een verbod.
Nederland reguleert al wapens, camera’s en opnameapparatuur op gevoelige locaties. Een smart glass is functioneel een onopvallende, cloud-gekoppelde camera met gezichtsherkenning. De wetgeving is simpelweg nog niet bijgewerkt naar wat het apparaat werkelijk is. Dat is de taak voor de wetgever, niet over deze ene bril, maar over de categorie.
09 · De toets die elke beleidsmaker zou moeten doen: P-SEP
Hoe had de Tweede Kamer, waar ik bij elk debat wel een smartwatch om een pols zie zitten, dit kunnen voorkomen? Met een toets die mijn vriend Erik Jan Koedijk ontwikkelde, digitaal strateeg sinds 1992, en die ik hier graag doorgeef: het P-SEP-model. Koedijk bouwde het als toetsingskader voor verantwoorde technologie, AI en cybersecurity, afgestemd op wetgeving als de AI Act, NIS2, DORA en de Cyber Resilience Act. In de kern zijn het vier vragen die je stelt vóór je een apparaat, dienst of beleid toelaat. En de regel is onverbiddelijk: elke vraag moet afzonderlijk met “ja” te beantwoorden zijn. Zakt er ook maar één door, dan zit er iets fout in je beleid, en in je leiderschap.
De vier vragen:
P, Persoonlijk verantwoord? Kun jij, als drager of als verantwoordelijke, dit tegenover jezelf en de mensen om je heen verantwoorden?
S, Security verantwoord? Is dit veiligheidstechnisch te verdedigen, ook in het slechtste scenario?
E, Ethisch verantwoord? Klopt het moreel, ook voor de mensen die er niet om gevraagd hebben?
P, Privacy verantwoord? Houdt het stand tegen de AVG en tegen wat redelijk is voor betrokkenen en omstanders?
De kracht zit in het woord afzonderlijk. Het werkt als een AND-poort, geen gemiddelde en geen weging waarin “vier op de vijf” voldoende zou zijn: vier keer ja, of het deugt niet. Laten we de Ray-Ban Meta er eerlijk langs leggen.
“We hebben geen behoefte aan nog meer complexiteit. We hebben helderheid, structuur en moed nodig. Modellen zoals P-SEP helpen ons om betere keuzes te maken, niet alleen snellere.” Erik Jan Koedijk
Vraag
Wat het dossier laat zien
Oordeel
Persoonlijk
Als drager word je verwerkingsverantwoordelijke zodra je anderen filmt; je kunt niet instaan voor wat de firmware en cloud doen. Je verantwoordt iets dat je niet overziet.
NEE
Security
Camera + microfoon + GPS + cloud op een persoon. Strava bewees dat zelfs kale positiedata geheime bases blootlegt; dit voegt beeld, geluid en gezichten toe.
NEE
Ethisch
Omstanders worden zonder toestemming gefilmd; beelden van intieme momenten belanden bij reviewers in Nairobi. De gefilmde gaf nergens akkoord voor.
NEE
Privacy
Verzamelen staat standaard aan, opt-out voor spraak is verwijderd, gezichtsherkenning is aangetroffen. Op gespannen voet met AVG-grondslag en bystander-consent.
NEE
Vier keer nee. Geen drie-en-een-half. Vier. Volgens P-SEP is daarmee de discussie klaar: dit apparaat hoort niet thuis bij wie een publieke of kritieke verantwoordelijkheid draagt. En als een bewindspersoon of Kamerlid het tóch om de pols of op de neus heeft, dan is dat geen detail, dan is het een leiderschapsfout die met één simpele toets te ondervangen was geweest.
Schakel 9, P-SEP is een AND-poort, geen gemiddelde. Vier keer ja, of het komt er niet in. De Ray-Ban Meta zakt op alle vier.
Het mooie van P-SEP is dat het geen jurist of securityteam vereist. Het is vier vragen die een Kamerlid, een gemeentesecretaris of een afdelingshoofd zelf kan stellen, in dertig seconden, voor de aanschaf. De smartwatch in de plenaire zaal, de slimme deurbel bij een ministerie, de AI-notulen-app in een vergadering met staatsgeheimen, leg het langs P, S, E en P, en je weet of je iets toelaat dat je niet had mogen toelaten.
P-SEP in de praktijk: de smartwatch in de Tweede Kamer
Laten we de toets toepassen op iets wat ik letterlijk bij elk debat zie: de smartwatch om de pols van Kamerleden. “De debatten zijn toch openbaar?” hoor ik dan. Dat klopt, en dat is precies waarom mensen de rest over het hoofd zien. Want door die smartwatch gaat veel meer dan wat er in de zaal gezegd wordt: continue hartslag, slaapritme, stresspatronen, locatie, en de inhoud van elke notificatie die binnenkomt. De woorden zijn openbaar. Het lichaam en de telefoon van het Kamerlid zijn dat niet.
Is dit goed bekeken? Leg het langs P-SEP.
Vraag
De smartwatch van een Kamerlid
Oordeel
Persoonlijk
Het Kamerlid deelt hartslag, slaap en stress met een Amerikaanse fabrikant. Een stijgende hartslag tijdens een specifiek debatonderwerp is af te lezen. Kun je dat als volksvertegenwoordiger verantwoorden?
NEE
Security
Onderzoekers van Binghamton University en het Stevens Institute of Technology toonden aan dat de polsbewegingen die een wearable continu meet, pincodes en wachtwoorden prijsgeven, met meer dan 90% nauwkeurigheid binnen een paar pogingen. Continue locatie verraadt aanwezigheid en routine. Bij 61 miljoen gelekte fitness-records is “het lekt nooit” geen optie.
NEE
Ethisch
Notificaties van vertrouwelijke bronnen, gesprekken met fractiegenoten en klokkenluiders lopen langs een apparaat dat meeluistert. Apple schikte in 2025 een zaak waarin de Apple Watch via Siri ongevraagd gesprekken opnam.
NEE
Privacy
Google, eigenaar van Fitbit, bleef locatie volgen nadat gebruikers tracking hadden uitgezet (een schikking van bijna 400 miljoen dollar met veertig Amerikaanse staten, 2022). Gezondheidsdata van een wearable valt niet onder medische privacywetgeving. De verzameling staat aan, de controle ontbreekt.
NEE
Vier keer nee. Het lijkt onschuldig, een horloge om een pols, maar het is een continue biometrische en locatiesensor op het lichaam van iemand die toegang heeft tot staatsgevoelige informatie. Hetzelfde geldt voor de Apple Watch van een agent op straat, die naast locatie ook het inzetritme en de aanwezigheid van politie-eenheden in een dataset giet die bij de fabrikant en zijn partners belandt. Strava bewees al wat er gebeurt als je dat optelt over veel dragers.
Dit is het soort beslissing waar P-SEP voor bedoeld is. Niemand stelde de vier vragen voordat de smartwatch de plenaire zaal in mocht. Had iemand dat wel gedaan, dan was de uitkomst dezelfde geweest als bij de bril: er klopt iets niet, en dus komt het er niet in bij wie een kritieke verantwoordelijkheid draagt.
Wat nu? Concreet.
Voor jou als koper:
Besef dat je met deze bril zelf de verwerkingsverantwoordelijke wordt zodra je anderen filmt. Onder de AVG kan een gefilmde voorbijganger jou aanspreken.
Wil je hem toch: zet de spraakfunctie uit (het enige wat de beeld-training-pijplijn stopt), zet “Additional Data” uit in Settings, en vraag actief toestemming voor je opneemt.
Vermijd opnemen in gevoelige ruimtes, toiletten, kleedkamers, zorginstellingen, klaslokalen. Dat is het verschil tussen toegestaan en strafbaar.
Voor jou als voorbijganger:
Je mag een drager vragen de bril af te zetten of uit te schakelen. Dat is je goed recht.
Open-source apps als Nearby Glasses detecteren de BLE-signatuur (META_RB_GLASS) en waarschuwen je. Gebruik dat om je bewust te zijn, niet om iemand lastig te vallen. Intimidatie is zelf strafbaar.
Voor beleidsmakers:
“Designed for privacy” als marketingclaim, terwijl verzamelen standaard aanstaat en een opt-out actief is verwijderd, verdient een onderzoek door de Autoriteit Persoonsgegevens, niet over een bril, maar over het ontwerp.
Maak van de P-SEP-toets (Persoonlijk, Security, Ethisch, Privacy) een vaste stap bij elke beslissing over apparaten en diensten in de publieke sector. Vier keer ja, of het komt er niet in.
De eerlijkheid die erbij hoort
Meta en EssilorLuxottica betwisten een deel hiervan. Meta noemt de gezichtsherkenning “exploratory” en zegt geen centrale gezichtsdatabase te bouwen. EssilorLuxottica zegt samen te werken met toezichthouders. Die weerwoorden horen erbij. Maar ze veranderen niets aan wat in de SDK-broncode, de privacyverklaring en het Nairobi-dossier staat. De feiten in de schakels hierboven staan los van de intenties die het bedrijf eraan toeschrijft.
Laten we dit geen “handige AI-bril” noemen. Laten we het noemen wat het is: een opnameapparaat dat de last van toestemming bij de drager legt, de data bij Meta, de ogen bij een onderaannemer in Nairobi, en het risico bij iedereen die toevallig in beeld loopt.
Leg het langs P-SEP, persoonlijk, security, ethisch, privé, en het zakt vier keer. Dat is de uitkomst van de toets, geen mening.
Alle informatie is openbaar en geverifieerd op het moment van schrijven. Geen telemetrie, geen affiliate, geen verdienmodel achter dit stuk. Het P-SEP-model (Persoonlijk, Security, Ethisch, Privacy) is van Erik Jan Koedijk, cybersecurity.vision. Onafhankelijk privacy-onderzoek uit Nederland.
Data voelt persoonlijk, en dat maakt het gesprek erover geladen. Zelfs organisaties die zich met privacy bezighouden, reageren soms emotioneel en defensief, en willen liever niet praten. Terwijl juist zij het gesprek zouden moeten aangaan.
Data voelt persoonlijk, en dat maakt het gesprek erover geladen. Het gaat over je huis, je lichaam, je kind. Een bevinding daarover raakt sneller dan een technische fout in iets anders. Wie hoort dat zijn database traag is, haalt zijn schouders op. Wie hoort dat zijn locatie op een advertentieveiling is aangeboden, voelt iets in zijn maag.
Dat verschil is echt, en het is terecht. Locatie, gezondheid, gezinssamenstelling: dat zijn geen willekeurige velden in een tabel. Het zijn de dingen waarmee iemand je kan vinden, kan indelen, kan raken. De AVG noemt een deel ervan bijzondere persoonsgegevens en beschermt die extra, en dat is geen willekeur. Het volgt de intuïtie dat sommige data dichter op de mens zit dan andere.
Als ik een bevinding presenteer over iemands data, presenteer ik zelden een neutraal feit. Voor de ontvanger klinkt het als een oordeel over iets van hemzelf. Ik zeg "deze site laadt na akkoord een tracker die je toestel in een veiling aanbiedt". Hij hoort "jij bent onvoorzichtig geweest" of "jouw dienst deugt niet". De feitelijke inhoud en de gevoelde inhoud lopen uiteen.
Dat verklaart de temperatuur van veel reacties. Mensen verdedigen data zoals ze een deel van zichzelf verdedigen. De reactie is defensief voordat de inhoud is gewogen. Dit is afgeleid uit hoe gesprekken over privacy verlopen, niet uit een telling. Ik zie het patroon vaak genoeg terugkomen om het serieus te nemen.
Het opvallende is dat dit ook geldt voor organisaties die zich beroepsmatig met privacy bezighouden. Zelfs zij reageren soms emotioneel en defensief, en willen liever niet praten. Terwijl juist zij het gesprek zouden moeten aangaan.
De defensiviteit is menselijk. Bij wie privacy verkoopt of keurt, is ze ook veelzeggend. Een partij die een keurmerk uitgeeft, een tool die zich privacyvriendelijk noemt, een dienst die compliance belooft: die hebben zich verbonden aan een norm. Als ik hun eigen product meet en er komt iets uit dat tegen die norm ingaat, dan raakt de bevinding niet alleen hun data. Ze raakt hun claim.
Hier zit voor mij de kern. Wie zijn eigen meting niet kan verdragen, gelooft zijn eigen norm niet helemaal. Een partij die overtuigd is van haar privacybelofte, heeft van een meting weinig te vrezen. In het ergste geval leert ze iets en repareert ze het. De heftige afweer past bij iemand die vermoedt dat de meting klopt.
Ik zeg met opzet vermoedt. Ik kan iemands binnenwereld niet meten. Ik zie de reactie, en ik zie de meting ernaast. De reactie van "dit willen we niet bespreken" bij een partij die privacy verkoopt, is een gedragssignaal, geen bewijs van kwade trouw. Het is opvallend genoeg om te benoemen en te zwak om als bewijs te gebruiken. Dat onderscheid houd ik streng.
Het spiegelbeeld bevestigt het. De partijen die wel het gesprek aangaan, die vragen om de HAR, die zeggen "laat zien waar het misgaat", zijn vrijwel altijd de partijen die daarna iets repareren. Wie de meting opzoekt, heeft er belang bij dat de norm klopt. Wie de meting mijdt, beschermt iets anders dan de norm.
Praktisch betekent dit een paar dingen. Ik scheid de meting van de persoon. Ik zeg wat de data doet, niet wat de maker deugt. "Deze tracker vuurt na weigeren" is toetsbaar. "Jullie geven niet om privacy" is een oordeel dat ik niet kan meten en dat het gesprek onmiddellijk sluit.
Ik leg het bewijs erbij, altijd, met het bewijsniveau erop. Dat verlaagt de temperatuur, want het verplaatst het gesprek van gevoel naar data. Wie boos is, kan de HAR openen en zelf kijken. Soms haalt dat de angel eruit. Soms niet, en dan noteer ik de weigering als wat ze is: een gedragssignaal dat een vraag oproept.
En ik hou er rekening mee dat de heftigheid van een reactie niets zegt over mijn gelijk. Een kalme reactie maakt mijn bevinding niet waar, een woedende reactie maakt haar niet onwaar. De meting staat los van hoe hij landt. Dat is precies waarom ik hem zelf publiceer, narekenbaar, zodat het oordeel bij de data ligt en niet bij het humeur van wie hem leest.
Waarom een dataschending anders raakt dan een bug¶
Het loont om te benoemen waarom data een aparte categorie is. Een gewone softwarefout raakt de werking van een dienst. De pagina laadt traag, een knop doet het niet, een formulier verliest je invoer. Vervelend, en op te lossen. De schade blijft binnen de dienst.
Een dataschending raakt iets dat de dienst verlaat en niet meer terugkomt. Zodra je locatie op een veiling is aangeboden, is die stap onomkeerbaar. Je kunt de tracker uitzetten voor de volgende keer, en dat helpt vooruit. Wat al vertrokken is, haal je niet terug. Dat verschil in omkeerbaarheid verklaart een deel van de lading. Mensen voelen aan dat een datalek een andere klasse is dan een bug, en die intuïtie klopt met hoe de techniek werkt. Wat weg is, is weg.
De emotie wordt sterker naarmate iemand zich eigenaar voelt van wat gemeten wordt. Een willekeurige bezoeker die hoort dat een site trackt, haalt zijn schouders op. De bouwer van die site voelt een aanval op zijn werk. De verkoper van een privacykeurmerk voelt een aanval op zijn belofte. Hetzelfde feit, drie temperaturen, en het verschil is hoeveel van de eigen identiteit erin geïnvesteerd zit.
Dat is bruikbaar om te weten voordat ik een bevinding breng. Ik weet vooraf dat de reactie feller zal zijn naarmate de ontvanger dichter op het gemeten object zit. Dat verandert niets aan wat ik meet. Het verandert wel hoe ik het breng. Ik richt de bevinding op de data en niet op de maker, ik lever het bewijs erbij, en ik verwacht de defensiviteit zonder me erdoor te laten afleiden. De felheid is informatie over de ontvanger, en de data blijft het onderwerp.
Je zou uit dit alles kunnen afleiden dat het gesprek zinloos is. Als data mensen persoonlijk raakt en zelfs professionals defensief maakt, waarom dan nog aankloppen? Het antwoord is dat de defensiviteit niet het laatste woord is. Ze is de eerste reactie. Wie na de schrik de HAR openslaat en zelf gaat kijken, komt vaak op een ander punt uit dan waar hij begon.
Ik heb dat vaker zien gebeuren dan het tegendeel, en dat is de reden dat ik het gesprek blijf zoeken. De eerste mail is bijna altijd koel of afhoudend. De tweede, nadat het bewijs op tafel ligt, is inhoudelijker. Het lukt niet altijd, en soms blijft de deur dicht. Toch is de kans op een reparatie het grootst bij de partij die uiteindelijk meekijkt, en dus is meekijken uitlokken de moeite waard. Ik breng de bevinding daarom zo dat meekijken makkelijk is: de bron erbij, het bewijsniveau erop, en de vraag open in plaats van dichtgetimmerd.
Dat de emotie er is, neem ik als gegeven. Het is menselijk dat data raakt, en ik reken het niemand aan. Wat ik wel doe, is de emotie en de meting uit elkaar houden, zodat de een de ander niet gijzelt. De boosheid mag er zijn. De data verandert er niet door.
De bouwers en de beslissers weten vaak niet van elkaar
De mensen die de techniek bouwen en de mensen die de koers bepalen, staan in veel organisaties ver uit elkaar. De tracking zit in de code, maar de directie weet niet altijd wat er gebeurt, en de coder niet altijd waarom. Zo ontstaat een misstand die niemand bewust koos.
In veel organisaties staan de mensen die de techniek bouwen en de mensen die de koers bepalen ver uit elkaar. De tracking zit in de code. De directie weet niet altijd wat er in die code gebeurt. En de programmeur weet niet altijd waarom het erin staat, of wie erom heeft gevraagd. Ze werken aan hetzelfde product en spreken zelden dezelfde taal.
Ik zie dit terug in mijn eigen metingen. Ik open een app, ik lees het netwerkverkeer, en ik vind een advertentie-SDK die je toestel aanbiedt op een veiling. Als ik dat voorleg, gebeurt er vaak iets herkenbaars. De directie is oprecht verbaasd. De ontwikkelaar haalt zijn schouders op, want die SDK was de standaardmanier om iets werkend te krijgen. Niemand in het gebouw kan me in één zin vertellen waarom die specifieke partij meekijkt. Dat is geen incident. Dat is de normale toestand in een keten die te lang is geworden om te overzien.
Zet de twee kanten naast elkaar en de mechaniek wordt zichtbaar. De bouwer plaatst een SDK omdat het handig is. Het bespaart weken werk, het werkt meteen, en de documentatie zegt niets verontrustends. Hij denkt in werkende software. De datastromen eronder ziet hij niet als zijn taak. De beslisser tekent een verwerkersovereenkomst die hij niet leest, of die hij leest zonder te begrijpen wat de technische bijlage betekent. Hij denkt in contracten en aansprakelijkheid. Van de SDK's die eronder draaien heeft hij geen beeld.
Tussen die twee valt de verantwoordelijkheid op de grond. De bouwer neemt aan dat de jurist het contract heeft gecheckt. De jurist neemt aan dat de bouwer alleen gebruikt wat is afgesproken. Geen van beiden liegt. Toch staat er aan het eind een tracker in het product die je toestel aan derden aanbiedt, en die niemand bewust heeft gekozen. Het is een misstand door optelsom van kleine, op zichzelf redelijke beslissingen. Zo krijg je advertentie-infrastructuur in een product waar het niet hoort, bijvoorbeeld in een zorgcontext, wat ik apart bekijk in Advertentie-infrastructuur in een zorgjas is een bouwkeuze.
Deze verklaring is verleidelijk, want ze klinkt als een verontschuldiging. Niemand wilde het, dus niemand is schuldig. Zo werkt het niet. De verklaring beschrijft hoe iets ontstaat. Ze zegt niets over wie ervoor opdraait.
De AVG kent het begrip verwerkingsverantwoordelijke. Dat is de partij die het doel en de middelen van de verwerking bepaalt. Bij een app is dat de organisatie die de app laat maken en uitgeeft. Die verantwoordelijkheid is niet deelbaar in "de bouwer wist het niet" en "de directie las het niet". De wet kijkt naar de organisatie als geheel. Wie laat bouwen, is aansprakelijk voor wat er draait, ook als de twee helften van het bedrijf nooit met elkaar spraken. Het gebrek aan interne communicatie is een intern probleem. Het verplaatst de aansprakelijkheid niet naar buiten, en al helemaal niet naar de gebruiker.
Bewijsniveau hierbij: dat de verantwoordelijkheid bij de verwerkingsverantwoordelijke ligt, staat in de AVG en is hard. Dat organisaties intern langs elkaar heen werken, leid ik af uit wat ik in metingen en gesprekken tegenkom, en het is een patroon dat ik vaker zie dan een enkel geval.
Het beeld van twee werelden, de bouwer en de beslisser, is nog te eenvoudig. In werkelijkheid zit er tussen die twee een keten die langer is dan beide partijen vermoeden. De bouwer neemt een SDK op. Die SDK laadt op zijn beurt code van derden. Die derde partij verkoopt of deelt data door aan vierde partijen die niemand in de organisatie ooit heeft gezien. Wat begon als één handige integratie, eindigt als een stroom naar een handvol bestemmingen die op geen enkele tekentafel stond.
Dat maakt de situatie erger dan een gebrek aan overleg tussen twee afdelingen. Zelfs een organisatie die haar bouwer en haar jurist wél met elkaar laat praten, ziet de onderkant van die keten niet vanzelf. Je moet er actief in graven om te weten waar je data uiteindelijk belandt. Precies dat graven is wat ik doe met een netwerkopname, want de keten toont zich pas als je het verkeer leest dat de app werkelijk uitstuurt. Op papier staat de eerste schakel. In het verkeer staan ze allemaal.
De juridische consequentie hiervan is streng. De verwerkingsverantwoordelijke moet weten met wie hij data deelt, en dat vastleggen in verwerkersovereenkomsten en in het verwerkingsregister. Onwetendheid over de diepere schakels is zelf een tekortkoming, want de wet verwacht dat je die keten kent voordat je hem in je product opneemt. De lengte van de keten is een verklaring voor hoe het misgaat. Ze is geen excuus, want het in kaart brengen van die keten is precies de plicht die op de organisatie rust.
Er zit een kant aan dit verhaal die de directie vaak onderschat. De bouwer maakt keuzes die de koers van het product bepalen, ook als niemand die keuzes ooit als beleid formuleerde. De keuze voor een bepaalde SDK, een bepaalde analytics-tenant, een bepaalde manier van loggen, dat zijn technische beslissingen met beleidsgevolgen. Ze bepalen wat het product over de gebruiker weet en aan wie het dat doorgeeft.
Daarmee heeft de kant die de knoppen bedient meer macht dan het organigram suggereert. Wie bouwt, bepaalt in de praktijk wat er gebouwd wordt, ook als de formele beslissing ergens anders lijkt te vallen. Dat werk ik uit in De maker en de aandeelhouder willen niet hetzelfde. Het omgekeerde bestaat ook, waar iemand zonder technisch inzicht beslist en het echte vakmanschap wordt weggeschoven. Dat spanningsveld staat in Op IT-afdelingen beslist wie het vak nooit beoefende.
Voor mij heeft dit een praktisch gevolg. Ik richt mijn onderzoek op het product en op de organisatie die het uitgeeft. De individuele programmeur die een regel code schreef, laat ik erbuiten. Die persoon aanwijzen is zinloos en meestal onrechtvaardig, want hij zat in het gat tussen de twee werelden en had zelden zicht op het geheel. De organisatie aanspreken is wel terecht, want die kan de keten overzien als ze dat wil, en de wet verplicht haar dat te doen. Een organisatie die zegt dat ze het niet wist, geeft daarmee toe dat ze een plicht heeft verzaakt, want het weten was haar taak.
Het betekent ook dat ik in mijn rapportage niet blijf hangen in "iemand heeft een fout gemaakt". Ik beschrijf welke datastroom ik meet, naar welke partij, en met welke gevolgen. Wie het intern heeft veroorzaakt, is voor de aansprakelijkheid niet doorslaggevend. Het is aan de organisatie om haar eigen twee helften met elkaar in gesprek te brengen. Als dat gesprek niet plaatsvindt, komt het bij mij op tafel, en dan telt het als een meetbare verwerking waar iemand voor tekent. Van interne miscommunicatie is op dat punt geen sprake meer. Waarom ik vaak de enige lijk die dat spoor uitloopt, staat in Waarom ben ik de enige die dit doet?.
Melvin Conway, "How Do Committees Invent?", Datamation, 1968de wet van Conway: een systeem weerspiegelt de communicatie van de organisatie
geverifieerdnotitiezekerRTB, adtech en brokersbronnenverwant
Toestemming opent een wereldwijde advertentiemarkt
Wie op een nieuwssite toestemming geeft, opent geen vast lijstje partijen maar een internationale veiling waarin herkenningsnummers worden uitgewisseld. Wie er verschijnt hangt af van de campagne, de pagina en de veiling van dat moment. De juiste kop is niet dat land X je volgt, maar dat de markt zelf grensoverschrijdend is.
Tijdens een tweeweekse test (Firefox 124, 15-22 maart 2026) telde ik op NU.nl een banner die 104 partners claimt maar er 101 toont, terwijl het totaal op 138 partijen uitkomt. Een keer "accepteren" opent geen relatie met een bedrijf, maar een veiling waar tientallen tot honderden partijen op meebieden. "Niemand kent deze bedrijven. Niemand begrijpt wat ze doen. Toch geeft 95% van Nederland ze toestemming. Dit is geen informed consent; dit is misinformed consent."
"Weigeren is acht keer moeilijker dan accepteren." De banner is zo ontworpen dat de wereldwijde markt met minimale wrijving opengaat en dichtblijven werk kost. Dat is geen toeval, dat is de business. Het Planet49-arrest (C-673/17, r.o. 62/63) laat geen ruimte: toestemming moet actief en geinformeerd zijn, niet de weg van de minste weerstand.
Bij een publieke omroep telt dat dubbel. NOS.nl zet cookies (_sotmpid, CCM_ID, 373 bytes) plus een POST naar ingestion.contentinsights.com voor de banner. "De burger betaalt dus tweemaal: belasting, en privacy door illegale tracking door NOS.nl." De NOS draait op circa EUR 800 mln belastinggeld per jaar, en ik schatte circa 90 miljoen illegale tracking-events per jaar. De toestemming die je geeft, opent een markt die veel groter is dan de site die hem vraagt.
Eigen bevinding: bidswitch ru oorsprong nieuwsstal, 2026-07-18sites openen na toestemming een internationale markt met stabiele identifiers
gepubliceerdnotitiezekerRTB, adtech en brokersverwant
Je hele toestelprofiel gaat in een keer de veiling in
Zodra een gratis app een advertentie laadt, bouwt je toestel een biedaanvraag en verstuurt die. Er zit geen afweging per veld in: het reclamenummer, de netwerkcode, de provider, de taal en de locatie vertrekken samen, in een keer. Anonimiseren gebeurt onderweg niet.
gepubliceerdessayzekerRTB, adtech en brokersverwant
Het meeste verkeer van je app gaat niet naar de app
In advertentie-gedreven apps gaat het leeuwendeel van je dataverbruik naar de reclame- en trackinglaag, niet naar de functie die je zocht. Je betaalt databundel en batterij aan overhead die jou niets oplevert.
Ik heb het netwerkverkeer van een advertentie-gedreven app vastgelegd tijdens gewoon gebruik. Openen, kijken, scrollen, sluiten. Daarna heb ik elk verzoek toegewezen aan een bestemming: de eigen backend van de app, of de advertentie- en trackingketen.
De uitkomst staat in het grondveld bij deze notitie in genereer_sporen.py: in één gebruikssessie ging 87 procent van de netwerkverzoeken en 54 procent van de bytes naar de advertentieketen, tegen een fractie echt verkeer. De weersverwachting, de zoekresultaten, de reistijd, dat alles paste in de rest.
Dat is één sessie op één app. Ik presenteer het als zodanig, en ik trek er geen landelijk gemiddelde uit. Wat het getal wel doet, is een verhouding zichtbaar maken die je op je scherm nooit ziet. Je opende een app om iets te weten. Het toestel besteedde het grootste deel van zijn verbindingen aan iets anders.
Twee getallen over dezelfde sessie, 87 en 54, en ze zeggen elk iets anders. Dat verschil is de interessantste kant van de meting.
Het aantal verzoeken telt gesprekken. Elk biedverzoek, elke pixel, elke synchronisatie van een herkenningsnummer is een aparte verbinding, met een eigen naamopzoeking, een eigen TLS-handdruk en een eigen antwoord. Die gesprekken zijn klein en talrijk.
Het aantal bytes weegt lading. Daar tellen de advertentiebeelden mee, en ook de kaartjes, de foto's en de JSON van de app zelf. Beeld is zwaar, een biedverzoek is licht.
Dus: de advertentielaag domineert het aantal gesprekken sterker dan het aantal bytes. Voor je databundel is 54 procent de eerlijke maat. Voor je batterij en voor de snelheid waarmee de app opent, is 87 procent de eerlijke maat, want elke losse verbinding kost een radiocyclus, een handdruk en wachttijd. Een telefoon die honderd korte gesprekken voert, werkt harder dan een telefoon die één groot bestand binnenhaalt.
Wie dit in een rapport zet, moet daarom altijd zeggen wat hij telde. Verzoeken en bytes zijn twee meetlatten, en ze geven twee verschillende antwoorden op de vraag hoe zwaar de advertentielaag weegt.
Eén advertentieplek levert bovendien meer verbindingen op dan je zou denken, want het biedverzoek wordt uitgezonden naar iedereen die op het veilingplatform mag meebieden. In een echte bid-respons uit één app zaten zeven biedende partijen, en zes daarvan staan ook in de partnerlijst van een totaal andere app (onverwante-apps-delen-dezelfde-veiling in mick_bodies.py). Zie Onverwante apps sturen je profiel dezelfde veiling in.
Drie rekeningen lopen door, en de gebruiker ziet geen van drie.
De eerste is je bundel. Ruim de helft van de bytes in die sessie ging naar de advertentieketen. Op een prepaid bundel of in het buitenland is dat gewoon geld.
De tweede is je batterij. De radio van een telefoon is duurder dan het scherm bij korte, verspreide verbindingen. Honderden losse verzoeken houden de radio wakker. Dat de advertentielaag het aantal verbindingen domineert, is gemeten. Hoeveel milliampère-uur dat precies kost, heb ik niet gemeten, en ik doe daar dus geen uitspraak over.
De derde is tijd. Een app die eerst een veiling moet doorlopen voordat het scherm compleet is, opent langzamer. De biedstroom kent daar zelfs een veld voor, tmax, de maximale tijd waarbinnen een bieder mag antwoorden. De gebruiker wacht dat venster uit.
Op websites heb ik de ketenomvang breed kunnen meten, en daar staat de verhouding tussen een lichte en een zware site scherp op papier.
Op 1.718 Nederlandse overheidssites (scan van 14 juli 2026) is de mediaan 2 externe ontvangers, het gemiddelde 3,2, het negentigste percentiel 7 en het maximum 38 (diep.json, overheid_1718/C_ketenomvang).
Op 32 commerciële sites uit de NPI-scan van 18 juli 2026 is de mediaan 36, het gemiddelde 37,8, het negentigste percentiel 75 en het maximum 87 (diep.json, npi/C_ketenomvang).
Let op dat dit twee verschillende metingen zijn. De 87 en 54 procent komen uit één app-sessie. De medianen komen uit browserscans van sites. Ze wijzen dezelfde kant op, en ze zijn geen bewijs voor elkaar.
Vijf grenzen, en ze horen alle vijf in het rapport.
Ten eerste is het één sessie op één app. Een tweede sessie op dezelfde app kan anders uitvallen, want welke veilingen er lopen en hoeveel advertenties er laden, hangt af van het moment.
Ten tweede meet ik het vertrek. Wat er daarna tussen servers gebeurt, valt buiten beeld. Een exchange kan een verzoek doorverkopen aan een andere exchange. Elk getal dat ik noem is daarom een ondergrens. Zie Elke browsermeting is een ondergrens.
Ten derde is de toewijzing per verzoek een oordeel. Een CDN-domein dat zowel afbeeldingen van de app als creatieven voor de advertentie levert, valt in beide emmers te leggen. Ik houd de app-emmer ruim bij twijfel, zodat het advertentiecijfer eerder te laag uitvalt dan te hoog.
Ten vierde trek ik het achtergrondverkeer van het toestel eraf voordat ik iets aan de app toeschrijf. Zonder die aftrek reken je de app aan wat het besturingssysteem deed. Zie Een mislukte meting is geen schone app.
De sterkste tegenwerping tegen deze notitie is dat de zware laag er nu eenmaal bij hoort. Die tegenwerping is weerlegd door een meting. In dezelfde reeks zat een app die nul netwerkverkeer maakte. Alles bleef op het toestel, de lijst met verstuurde verzoeken bleef leeg (een-app-kan-volledig-lokaal in mick_bodies.py). Zie Een app kan volledig lokaal, zonder een enkele netwerkcall en Geen internet-permissie, geen probleem.
Eén schone app maakt de advertentiestack bij een andere app een keuze van een mens. Technische noodzaak valt als verklaring af zodra het tegenvoorbeeld op tafel ligt.
Als gebruiker, in tien minuten. Kijk op Android onder Instellingen, Netwerk en internet, Dataverbruik welke apps het meeste verbruiken, en zet daar mobiele data uit voor de apps die je alleen op wifi nodig hebt. Op iOS staat dezelfde lijst onder Mobiel netwerk. Zet daarna in je browser en in je apps de locatiepermissie op "alleen tijdens gebruik". Dat verkleint de lading van elk biedverzoek dat toch vertrekt.
Als je kunt kiezen tussen apps, kies de app zonder advertentielaag, ook als je ervoor betaalt. Reken het eens uit: een euro per maand tegenover ruim de helft van je verbruik in die app en een profiel dat de veiling in gaat.
Als onderzoeker of functionaris gegevensbescherming: leg één sessie van je eigen app vast met een onderscheppende proxy, meet eerst het toestel in rust om het systeemverkeer eraf te kunnen trekken, en rapporteer daarna twee getallen naast elkaar, het aandeel verzoeken en het aandeel bytes. Zeg erbij welke domeinen je aan welke emmer toewees. Een rapport met één percentage en zonder toewijzingsregel is niet na te rekenen, en dan is het geen bewijsstuk. Zie Label elke bevinding op bewijsniveau.
En als je een app bouwt: dit getal is een bouwkeuze die je kunt terugdraaien. De verhouding tussen functie en overhead staat in je eigen HAR-bestand, vanmiddag nog te maken. Wie hem nooit heeft bekeken, weet niet wat hij zijn gebruikers laat betalen.
geverifieerdessayzekerRTB, adtech en brokersbronnenverwant
Ook een schone app kan in de databrokerlijst staan
Een lichte, nette app met nauwelijks advertenties beschermt je niet automatisch. Een partner in de keten is genoeg om je gegevens bij een databroker te laten belanden. Weinig trackingverkeer en toch in de lijst staan zijn twee losse vragen.
Er zijn twee vragen die vrijwel iedereen als één vraag behandelt.
De eerste is: hoeveel volgverkeer maakt deze app? Dat meet je aan het netwerk. Je legt een sessie vast, telt de verzoeken en kijkt waar ze heen gaan.
De tweede is: staat deze app in een handelslijst van een databroker? Dat meet je niet aan het netwerk van die app. Dat lees je in de lijst zelf, of in de SDK's die de app meedraagt.
Deze notitie bestaat omdat het antwoord op de eerste vraag het antwoord op de tweede niet voorspelt. Een ov-app met ongeveer één procent advertentieverkeer stond toch in een gelekte databrokerlijst (grondveld bij deze notitie in genereer_sporen.py). Eén procent. Een app die je in elke ranglijst van dataslurpers onderaan zou plaatsen, en die tegelijk in de handel zat.
Vergelijk dat met de app uit dezelfde reeks waarin 87 procent van de netwerkverzoeken en 54 procent van de bytes naar de advertentieketen ging (grondveld bij het-meeste-verkeer-van-je-app-gaat-niet-naar-de-app). Twee uitersten van dezelfde meetlat, en allebei in de lijst. Zie Het meeste verkeer van je app gaat niet naar de app.
De route loopt via de bouwsteen, niet via het verkeer dat je ziet.
Een ontwikkelaar wil een functie snel werkend hebben. Een kaartje, een advertentiebalk, een analysepakket, een crashmelder. Hij plakt een kant-en-klaar stuk code in zijn app, een SDK. Die SDK levert de functie, en stuurt in ruil de positie van het toestel door naar de partij die de SDK maakte. De positie van het toestel is de betaling (de-locatiedatahandel-heeft-vaste-spelers in mick_bodies.py). Zie De locatiedatahandel draait op een handvol vaste spelers.
Voor de broker is dit een efficiënt model. Hij hoeft zelf geen populaire app te bouwen en geen gebruikers te werven. Hij levert een handige component aan honderden ontwikkelaars, en elk van die apps wordt een aanvoerkanaal.
Daar zit de reden waarom lichtheid niet beschermt. Eén SDK is genoeg. Die ene SDK hoeft nauwelijks verkeer te maken, want een locatie is een handvol bytes en hij hoeft maar af en toe te vertrekken. Op je verkeersteller valt dat weg in de ruis. In de lijst van de broker staat je toestel er wel.
De namen zijn bovendien beperkt in aantal. Ik legde een index van honderden apps naast de bekende broker-SDK-lijsten, en dezelfde spelers keerden steeds terug: X-Mode, dat nu Outlogic heet en van de Amerikaanse FTC een verbod kreeg, Gravy en Venntel, die locatiedata leverden aan Amerikaanse overheden, plus OneAudience, Sense360, SignalFrame, Fysical, Placed en Predicio (nieuwe_entries.py, grondveld bij de-locatiedatahandel-heeft-vaste-spelers).
Er is nog een manier waarop een nette app in de handel belandt, en die loopt via de markt waarop hij is aangesloten.
Een app kiest een verkoopplatform. Via dat platform komt hij automatisch in contact met het hele veld aan bieders dat daarop is aangesloten. De app kiest die bieders niet één voor één. In een echte bid-respons uit één app zaten zeven biedende partijen, en zes daarvan staan ook in de partnerlijst van een totaal andere app (onverwante-apps-delen-dezelfde-veiling in mick_bodies.py). Zie Onverwante apps sturen je profiel dezelfde veiling in.
Het biedverzoek gaat naar iedereen die mag meebieden. Precies één partij wint, de rest verliest en houdt de data. Een partij hoeft de plek dus niet te winnen om je gegevens te krijgen. Zie Je toestelprofiel is de hoofdmoot van wat een app verstuurt.
Voor een lichte app betekent dat het volgende: hij hoeft maar weinig advertenties te tonen om toch de hele koperskring te bedienen. Eén advertentieplek per sessie is genoeg om je toestelprofiel bij tientallen partijen te laten arriveren. Het aantal verzoeken op je teller blijft laag, het bereik van je profiel is dat niet.
Hier zit de menselijke kant van deze notitie. Een lichte app wekt vertrouwen, en dat vertrouwen is een meetfout.
Je hebt geen kaartje in beeld, dus je denkt dat er geen locatie vertrekt. Je ziet nauwelijks reclame, dus je denkt dat er geen veiling loopt. Je merkt geen vertraging, dus je denkt dat er geen keten hangt. Al die redeneringen leiden van iets zichtbaars naar iets onzichtbaars, en dat is precies de sprong die deze markt zo hardnekkig maakt.
De constructie is zo gebouwd dat ze onzichtbaar blijft. De SDK draait op de achtergrond, vaak op het moment dat de app toch al locatie mag gebruiken voor zijn zichtbare functie. Het toestel vraagt één keer toestemming, de gebruiker geeft die voor het kaartje of het weer, en dezelfde toestemming dekt de stille stroom naar de broker mee af.
Er is ook geen scherm dat het verschil toont. De keuze die de gebruiker denkt te maken, gaat over de app. De stroom die hij niet ziet, gaat naar de broker.
Hier moet ik streng zijn tegen mijn eigen bevinding, want deze notitie is makkelijk te ver door te trekken.
Een app die in een gelekte brokerlijst staat, is een sterk signaal en een reden om beter te kijken. Het bewijst op zichzelf niet dat er in jouw sessie ook echt data is verzonden. Een SDK kan aanwezig zijn en toch stil blijven, bijvoorbeeld omdat de gebruiker geen locatietoestemming gaf of omdat een scherm dat de SDK activeert nooit werd geopend. Zie Een naam in de code is nog geen tracker.
En een lijst kan verouderd zijn. Een gelekte brokerlijst is een momentopname uit het verleden. Een app die er destijds in stond, kan de SDK sindsdien hebben verwijderd. De juiste formulering is dus altijd: deze app stond op dat moment in die lijst. De formulering "deze app verkoopt je locatie" is van een andere orde en vraagt om een tweede meting. Het eerste is een vindplaats, het tweede is een beschuldiging.
De ov-app is één geval, en ik heb er één procent advertentieverkeer aan gemeten en één vermelding in één gelekte lijst. Ik kan uit dat ene geval geen percentage voor de hele markt afleiden, en dat doe ik dus ook niet.
Wat het geval wel doet, is een aanname breken. Wie de vraag "is deze app veilig" beantwoordt met een verkeersteller, heeft één van de twee vragen beantwoord en denkt dat hij er twee heeft gedaan.
Van de andere kant loop ik tegen dezelfde muur als altijd. Waar de data van een broker uiteindelijk belandt, tot en met overheden, steunt op wat publiek over deze partijen bekend is en op het patroon dat de index blootlegt. Ik heb de aanwezigheid van de SDK gemeten, en de rest gelezen in openbaar materiaal (de-locatiedatahandel-heeft-vaste-spelers in mick_bodies.py).
Er bestaat ook een derde uitkomst die makkelijk verward wordt met een schone app: een mislukte meting. Certificaat-pinning laat de app zijn eigen servers gewoon bereiken terwijl mijn opname leeg blijft. Een lege lijst bij een app die normaal functioneert, is eerder een reden tot argwaan dan tot geruststelling. Zie Een mislukte meting is geen schone app.
Om te voorkomen dat dit stuk elke app verdacht maakt: er zijn apps die het goed doen, en ik heb ze gemeten.
Een onderzochte cyclus-app had geen internet-permissie, een lokale database en geen actief netwerkpad in de code (GROND bij een-app-zonder-internet-permissie-is-echt-privacy). Die kán per definitie niet in een brokerlijst staan, want er vertrekt niets. In dezelfde reeks zat een app die nul netwerkverkeer maakte tijdens gewoon gebruik. Zie Geen internet-permissie, geen probleem en Een app kan volledig lokaal, zonder een enkele netwerkcall.
Tegelijk kan een oprechte maatregel naast een lek bestaan. Flo bouwt een echte beschermlaag, een anonieme modus via versleutelde doorgifte, live bevestigd, en heeft tegelijk de code van Meta, TikTok, AppsFlyer en Google aan boord (GROND bij een-oprechte-privacymaatregel-en-een-lek-bestaan-naast-elkaar). Die twee dingen staan naast elkaar, en een eerlijk oordeel noemt ze allebei. Zie Cyclus-apps weten het intiemste dat er is en Ontvangen is niet doorverkopen.
Als gebruiker, in tien minuten. Loop de locatiepermissies van al je apps langs, op Android onder Instellingen, Locatie, App-locatietoegang, op iOS onder Privacy, Locatievoorzieningen. Zet alles wat je positie niet echt nodig heeft op Nooit, en de rest op Alleen tijdens gebruik. Dat is de enige knop die de SDK-route onderbreekt, want de SDK leunt op de permissie die jij aan de app gaf.
Beoordeel apps daarna niet op hoe licht ze aanvoelen. Kijk in de app-winkel bij het gegevensveiligheidslabel welke categorieën de app declareert, en let vooral op "Locatie, gedeeld met derden". Dat vinkje staat er ook bij apps die nauwelijks verkeer maken.
Als onderzoeker: houd twee sporen apart in je dossier. Spoor één is de verkeersmeting, met het aandeel verzoeken en bytes. Spoor twee is de SDK-inventaris uit de APK, gelegd naast de bekende brokerlijsten. Trek pas een conclusie over de app als je beide sporen hebt, en label per spoor het bewijsniveau. Een app die op spoor één schoon is en op spoor twee raak, is de interessantste bevinding die je die dag hebt.
En als je een app bouwt: open je build.gradle en je afhankelijkhedenlijst, en zoek per SDK op wie de maker is en waar die zijn geld verdient. Een gratis SDK van een partij zonder zichtbaar verdienmodel wordt betaald met de gegevens van je gebruikers. Die rekening staat op jouw naam, want jij bent de verwerkingsverantwoordelijke.
Het reclamenummer is de sleutel die anoniem persoonlijk maakt
Het advertentienummer van je telefoon lijkt onschuldig, maar bedrijven die identiteiten koppelen hangen er je e-mail en echte naam aan. Zodra dat nummer de veiling in gaat, is de rest van je profiel niet meer anoniem.
Elke telefoon draagt een reclamenummer. Op Android heet het de Advertising ID, op iOS de IDFA, en in de biedstroom heet het veld device.ifa, de identifier for advertisers. Het is een UUID, een reeks hexadecimale tekens in vaste groepen, bijvoorbeeld 38400000-8cf0-11bd-b23e-10b96e40000d (voorbeeldwaarde uit agent_rtb.py).
Het nummer bevat geen naam, geen e-mailadres en geen geboortedatum. Precies daarom heet het in privacyverklaringen vaak "anoniem" of "niet direct herleidbaar". En precies daar zit de denkfout die deze notitie uitwerkt.
Een nummer hoeft je naam niet te bevatten om je te identificeren. Het hoeft alleen constant genoeg te zijn en breed genoeg gedeeld te worden. Aan die twee voorwaarden voldoet het reclamenummer allebei. Het gaat mee in vrijwel elk biedverzoek dat je toestel verstuurt, en dat verzoek wordt uitgezonden naar iedereen die op de veiling mag meebieden. Zie Je toestelprofiel is de hoofdmoot van wat een app verstuurt.
Waarom "resetbaar" geruststellender klinkt dan het is¶
De geruststelling bij dit veld is altijd dezelfde: je kunt het nummer resetten. Dat klopt. Je krijgt een nieuw nummer, en het oude verdwijnt van je toestel.
Het probleem zit in de ruimte tussen twee resets. Zolang hetzelfde nummer meereist, werkt het als koppelsleutel tussen bestemmingen. Elke ontvanger die het in twee verschillende contexten ziet, weet dat het om hetzelfde toestel gaat. Zie Een resetbare identifier is alsnog een sleutel.
Een gehashte e-mail verdient hier aparte aandacht, want hij wordt vaak als anonimisering gepresenteerd. Dezelfde invoer geeft altijd dezelfde hash. Dus correleert een gehashte e-mail een persoon over diensten heen net zo goed als de e-mail zelf. Pseudonimisering is een beveiligingsmaatregel, en de AVG blijft er onverkort op van toepassing.
De werkwijze is eenvoudig. Zo'n partij verzamelt bij veel bronnen tegelijk paren: reclamenummer en e-mail, reclamenummer en klantnummer, reclamenummer en telefoonnummer. Zodra één bron het nummer samen met een naam heeft aangeleverd, is het nummer voor die partij een naam geworden. Bij elk volgend biedverzoek waarin datzelfde nummer opduikt, weet zij wie er achter zit.
Dat is het mechanisme achter de kern van deze notitie. In het Funda-dossier van 22 juni 2026 staat de bevinding zo genoteerd: identiteitskoppelaars kunnen het advertentie-ID aan een persoon koppelen (bronnen_vault.py, bronvermelding bij deze notitie).
Bewijsniveau, streng: dat het advertentie-ID de biedstroom in gaat, is bij de huizen-appstatisch aangetoond in de code. De live capture kwam niet rond, want een tweede slot aan de serverkant hield de biedstroom buiten beeld (GROND bij het-reclamenummer-van-je-telefoon-gaat-de-veiling-in). Dat de koppelaars het vervolgens aan een persoon hangen, is afgeleid uit hoe die markt werkt en uit openbaar materiaal over die bedrijven. Ik heb die koppeling zelf niet aan een verkeersopname afgelezen. Zie Je advertentie-ID gaat ongefilterd de veiling in en Een aanwijzing is nog geen bewijs.
In de NPI-scan van 18 juli 2026 over 32 commerciële sites vond ik uitwisseling van herkenningsnummers op 28 sites, dat is 87,5 procent, waarvan op 16 sites zonder enige toestemming, dat is 50 procent (thesis20.json, run npi_2026-07-18, T10). Op de 1.718 overheidssites lag dat op 120 sites (7,0 procent), waarvan 98 zonder toestemming (5,7 procent) (thesis20.json, run mijnoverheid_2026-07-14, T10).
Deze cijfers gaan over herkenningsnummers in de browser. Ze bewijzen de app-kant niet. Ze laten zien dat het mechanisme waar de app-kant op leunt, breed en meetbaar in gebruik is.
Een sleutel is zoveel waard als zijn levensduur. Daarover heb ik een uitkomst die tegen de intuïtie in gaat.
Dezelfde tracking-identifier leefde 399 dagen op de publieke site, en werd met een houdbaarheid van twee jaar gezet zodra je in de beveiligde, ingelogde omgeving kwam (nieuwe_entries.py, grondveld bij hoe-gevoeliger-de-context-hoe-langer-de-identifier). De gevoeligere omgeving kreeg de langere sleutel. Zie Hoe gevoeliger de context, hoe langer de identifier meegaat.
Dat is de omgekeerde beweging van dataminimalisatie, en het is precies het punt waarop een verklaring en de code uit elkaar lopen.
Onder de AVG is een reclame-identifier een persoonsgegeven, omdat hij een natuurlijke persoon indirect identificeerbaar maakt. Het uitzenden ervan naar tientallen ontvangers is een verwerking, en elke ontvanger is een eigen partij in de zin van de wet.
De rechtspraak heeft die lijn bevestigd. Het Hof van Justitie deed op 7 maart 2024 uitspraak in zaak C-604/22 over de toestemmingsstring van het IAB-framework, en het Brussels Marktenhof bevestigde op 14 mei 2025 de sanctie van 250.000 euro, waarbij het TCF zoals het toen werkte ongeldig werd bevonden (lange_bodies.py). De schaal van de handel eronder staat in dezelfde bron: de EFF-lijst telt meer dan 750 databrokers, en Mobilewalla verhandelt meer dan 500 miljoen advertentie-ID's.
Dat laatste getal is het scherpst als je het omdraait. Meer dan 500 miljoen reclamenummers in de handel betekent dat het "anonieme" nummer een verhandelbaar goed is met een markt, een prijs en een koper.
De koppeling van nummer naar persoon vindt plaats in de systemen van de koppelaar, en die zijn van buitenaf onzichtbaar. Ik meet dat het nummer vertrekt en aan wie. Wat de ontvanger er intern aan hangt, blijft vermoed zolang ik geen inzage heb. Zie Elke browsermeting is een ondergrens.
Een uitgewisseld herkenningsnummer bewijst herkenning en niet meer dan dat. Op een grote nieuwssite wisselde een advertentiebedrijf in 82 geschikte videoveilingen, verdeeld over 48 sessies en drie dagdelen, telkens een nummer uit zonder ook maar één keer te bieden (GROND bij een-cookie-match-is-geen-bod). De koppeling was er, het bod nul keer. Zie Een cookie-match bewijst herkenning, geen bod.
En precisie over de inhoud is even belangrijk als precisie over de sleutel. In de payloadmatrix kreeg geen van de sync-partijen een expliciete site- of artikelaanduiding mee. Ze kregen je nummer. Zie Ze krijgen je nummer, niet per se welke pagina je las.
Als lezer, in vijf minuten. Op Android: Instellingen, Privacy, Advertenties, en kies daar Advertentie-ID verwijderen. Op iOS: Privacy en beveiliging, Tracking, en zet het verzoek om te volgen uit. Daarna staat het veld device.ifa in de biedstroom leeg of op nul. De veiling gaat door, en het meest bruikbare koppelveld is eruit.
Doe daarna nog één ding dat mensen overslaan: reset het nummer ook op de tablet en op de tv-stick van hetzelfde huishouden. Een koppelaar die twee toestellen op één netwerk ziet, hoeft aan één ervan genoeg te hebben.
Als functionaris gegevensbescherming: zoek in je eigen app of site naar het veld ifa, idfa, gaid of advertisingId, en leg naast elke vindplaats de partij die hem ontvangt. Loop daarna je verwerkingsregister na en tel welke van die ontvangers erin staan. Wat er niet in staat, ontvangt persoonsgegevens zonder dat je het hebt vastgelegd.
En als je een privacyverklaring schrijft: het woord "anoniem" bij een reclame-identifier is onjuist en aantoonbaar onjuist. "Pseudoniem" is het juiste woord, en het brengt de volledige AVG mee. Zie Het risico zit in de optelsom, niet in het losse veld.
bronnen
Eigen onderzoeksdossier: funda, 2026-06-22identiteitskoppelaars kunnen het advertentie-ID aan een persoon koppelen
Het risico zit in de optelsom, niet in het losse veld
Losse datapunten lijken onschuldig: een locatie, een zoekterm, een tijdstip. Het gevaar ontstaat als ze bij elkaar komen, tot een aanwezigheidskalender, een koopprofiel of een medisch beeld. De schade zit in de combinatie.
Losse datapunten lijken onschuldig. Een locatie. Een zoekterm. Een tijdstip. Elk voor zich zegt zo'n veld bijna niets, en dat is precies het argument waarmee de verzameling wordt goedgepraat. Het is toch maar een tijdstip. Het is toch maar een postcode.
Het gevaar ontstaat op het moment dat die velden bij elkaar komen. Een reeks locaties met tijdstippen wordt een aanwezigheidskalender van je huis. Zoektermen plus aankopen worden een koopprofiel. Een paar categorieën plus een frequentie worden een medisch beeld. De schade ontstaat in de combinatie. Een los veld richt in zijn eentje weinig aan. Zodra de velden gekoppeld worden, ontstaat er informatie die in geen enkel afzonderlijk veld zat, en die je zelf vaak niet eens kent.
Dit heeft een direct gevolg voor hoe je risico beoordeelt. Wie alleen naar losse velden kijkt, onderschat het risico stelselmatig. Een tijdstip is niets. Een tijdstip plus een locatie plus een herhaling is een patroon. En een patroon voorspelt gedrag, onthult gewoontes en verraadt waar je woont en werkt.
De vraag die telt is daarom niet of één gegeven op zichzelf gevoelig is. De vraag die telt is of dat gegeven aan de rest gekoppeld kan worden. Een op het oog onschuldig veld wordt gevaarlijk zodra er een sleutel bestaat die het aan je andere velden verbindt. Zo'n sleutel is meestal een identifier: een reclame-id, een cookie, een apparaatkenmerk. Twee bedrijven die zo'n herkenningsnummer onderling uitwisselen, maken de optelsom mogelijk die elk van beide in zijn eentje niet kon maken. Vanaf dat moment heb je te maken met één gecombineerd profiel in plaats van twee losse verzamelingen.
Omdat de koppeling het risico maakt, ligt daar ook het scharnier van mijn onderzoek. Ik let minder op de inhoud van een enkel veld en meer op de vraag of er een gedeelde sleutel rondgaat. Een reclame-id lijkt onschuldig omdat je hem kunt resetten. In de praktijk blijft hij lang genoeg gelijk om profielen aan elkaar te knopen, en dat maakt hem alsnog een sleutel. Dat werk ik uit in Een resetbare identifier is alsnog een sleutel.
De optelsom klinkt abstract, dus het helpt om te laten zien hoe je haar meet. Ik neem het netwerkverkeer van een app of site op als HAR-bestand. Daarin staat elke request met zijn bestemming en zijn parameters. De koppeling wordt zichtbaar zodra dezelfde identifier opduikt in requests naar verschillende hosts. Dat is het signaal dat losse partijen aan dezelfde persoon zitten te rekenen.
Een ruwe eerste zeef ziet er zo uit:
import json
from urllib.parse import urlparse, parse_qs
from collections import defaultdict
har = json.load(open("capture.har"))
per_id = defaultdict(set)
for entry in har["log"]["entries"]:
host = urlparse(entry["request"]["url"]).netloc
params = parse_qs(urlparse(entry["request"]["url"]).query)
for key, values in params.items():
for v in values:
if len(v) >= 16: # ruwe drempel voor id-achtige waarden
per_id[v].add(host)
# waarden die naar meerdere hosts gaan, zijn verdacht
for value, hosts in per_id.items():
if len(hosts) > 1:
print(len(hosts), sorted(hosts), value[:24])
Dit is een grove zeef en meer niet. Een waarde die naar meerdere hosts gaat, is een aanwijzing en geen bewijs. Ik moet daarna handmatig nagaan of het echt een persoonsgebonden identifier is, of gewoon een gedeelde versienummer of een publieke sleutel. Bewijsniveau hierbij: de aanwezigheid van dezelfde waarde bij meerdere hosts is gemeten. Dat die waarde jou identificeert en dat de partijen hem bewust matchen, is afgeleid en vraagt aanvullende bevestiging.
De zeef hierboven geeft me kandidaten. Wat volgt is het werk dat een kandidaat tot een bevinding maakt, en dat werk is waar de meeste haast sneuvelt. Een waarde die naar meerdere hosts gaat, kan van alles zijn. Ik loop daarom een vaste volgorde af voordat ik iets een gedeelde identifier durf te noemen.
Is de waarde persoonsgebonden? Een sessie-id dat per app-start verandert, koppelt niets over de tijd. Een waarde die over meerdere sessies gelijk blijft, is verdachter, want die overleeft de sessie en kan dus als sleutel dienen.
Gaat de waarde echt naar aparte partijen? Twee hosts kunnen bij hetzelfde bedrijf horen. Ik kijk naar de domeinen en naar wie ze bezit voordat ik van uitwisseling tussen partijen spreek.
Zit de waarde in de request of alleen in een gedeeld script? Een publieke sleutel of een versienummer dat overal opduikt, is geen identifier. Ik moet uitsluiten dat ik naar zoiets kijk.
Herhaalt het patroon zich? Eén samenval kan toeval zijn. Hetzelfde id dat structureel bij dezelfde combinatie hosts opduikt, is een patroon dat ik kan hardmaken.
Pas als een kandidaat deze stappen doorstaat, noteer ik hem als bevinding, en zelfs dan met het juiste label. De koppeling is dan aangetoond als technisch mogelijk en waarschijnlijk in gebruik. Dat een bepaalde partij op een bepaald moment een concreet profiel over jou samenstelde, blijft meestal een gevolgtrekking, tenzij ik het in het verkeer letterlijk zie gebeuren. Dat onderscheid tussen mogelijkheid en daad houd ik streng, want een naam in de code of een sleutel op de lijn toont aanleg. Een handeling toont het daarmee nog niet.
Dit standpunt bepaalt mijn oordeel over wat gevoelig is. Ik weiger een verzameling af te schrijven als onschuldig omdat de losse velden dat lijken. Ik vraag telkens of er een koppeling mogelijk is, en of er een partij is die van die koppeling profiteert. Een app die op zichzelf weinig verstuurt, kan alsnog schadelijk zijn als wat hij verstuurt via een gedeelde id aan een groter geheel wordt geknoopt.
Het betekent ook dat ik voorzichtig blijf met mijn eigen conclusies. De optelsom die ik meet, is een aanwijzing van wat mogelijk is. Of de koppeling in de praktijk ook gemaakt wordt, moet ik zo goed mogelijk hardmaken voordat ik het opschrijf. Een gedeelde sleutel bewijst de mogelijkheid. Het bewijst nog niet de daad. Dat onderscheid houd ik overeind, ook als het mijn verhaal minder scherp maakt. Een enkele fout in een gedeelde tenant kan overigens een hele sector raken, wat laat zien hoe ver zo'n koppeling kan reiken. Dat staat in Een gedeelde analytics-tenant maakt van een fout een sectorlek.
Eigen onderzoeksdossier: solar inverter, 2026-06-11uit het verbruikspatroon is af te leiden wanneer een huis leeg staat
geverifieerdessayzekerRTB, adtech en brokersbronnenverwant
Trackers vuren pas echt na accepteren, doorklikken en video's starten
Een scan van alleen de voorpagina mist het meeste. Trackers vuren pas echt na het accepteren van cookies, na doorklikken en na het starten van een video. En een deel vuurt al voor toestemming, ook in de weiger-stand. Wie alleen de etalage test, ziet de etalage.
Elke site in mijn scans wordt drie keer bezocht, in drie los van elkaar staande browserprofielen. Eerst de stand waarin de bezoeker niets doet, alleen de pagina opent. Dan de stand waarin hij expliciet weigert. Dan de stand waarin hij accepteert.
Die opzet bestaat omdat één opname per site systematisch de verkeerde vraag beantwoordt. Wie alleen de voorpagina in de nulstand scant, meet de etalage. De echte lading zit in de andere twee opnames, en in wat er pas na een handeling vuurt. Zie Hoe mijn scanner werkt, van bezoek tot bewijsstuk.
Alle cijfers hieronder komen uit twee runs: de scan van 1.718 Nederlandse overheidssites van 14 juli 2026, en de NPI-scan van 32 commerciële sites van 18 juli 2026 (thesis20.json en diep.json).
Op de 32 commerciële sites lag de mediaan van het aantal externe partijen in de nulstand op 7,5. Na accepteren lag diezelfde mediaan op 30,5. De mediaan van de verhouding per site staat op 2,89 (thesis20.json, run npi_2026-07-18, T5).
Die twee uitkomsten meten iets anders, en dat verschil is de moeite waard. De sprong van 7,5 naar 30,5 vergelijkt twee medianen met elkaar. De 2,89 is de middelste waarde van alle verhoudingen per site afzonderlijk. Beide wijzen dezelfde kant op: accepteren opent op de mediane commerciële site een veelvoud van wat er in de nulstand stond.
De keten die daarna hangt, is fors. Van de gemeten commerciële sites met een dossier is de mediaan 36 ontvangers, het gemiddelde 37,8, het negentigste percentiel 75 en het maximum 87 (diep.json, npi/C_ketenomvang).
Wat er dan bijkomt is herkenbaar advertentiewerk. In de top van de aangesproken domeinen staan doubleclick.net op 22 sites, adnxs.com op 16, casalemedia.com op 14, criteo.com op 14 en bidswitch.net op 13 (thesis20.json, run npi_2026-07-18, T7). Op 29 van de 32 sites zitten ontvangers met servers in een derde land, dat is 90,6 procent (T6).
De tweede helft van deze notitie is de spiegel van de eerste. Een deel van de lading wacht niet op de vraag.
Op de 32 commerciële sites laadde er op 31 al volgtechniek voordat de bezoeker iets koos, dat is 96,9 procent (thesis20.json, run npi_2026-07-18, T1). Op de 1.718 overheidssites gebeurde dat op 1.027 sites, 59,8 procent, waarvan 933 met alleen cookies (T1 bij run mijnoverheid_2026-07-14).
De onderliggende bevindingen zijn per artikel geteld. Op de overheidskant: 988 sites met bekende externe trackers geladen voor toestemming, en 846 sites met tracking-cookies gezet voor toestemming zonder dat er een cookiebanner werd aangetroffen (diep.json, overheid_1718/D_overtredingen). Op de commerciële kant: 28 van de 32 met trackers voor toestemming, en 22 met tracking-cookies voor toestemming zonder gedetecteerde banner (diep.json, npi/D_overtredingen).
De weiger-stand hoort in dit stuk thuis, want zonder die stand lijkt "voor toestemming" en "na weigeren" hetzelfde probleem.
Op de overheidssites laadde na een expliciete weigering op 1.664 sites evenveel als bij niets doen, en op 23 sites méér. Samen betekent dat 98,2 procent waar weigeren geen vermindering opleverde (thesis20.json, run mijnoverheid_2026-07-14, T2). Op de commerciële kant is dat 87,5 procent, met 6 sites waar weigeren méér opleverde (T2 bij run npi_2026-07-18).
Per bevinding uitgesplitst, op de overheidskant: 107 sites waar bekende trackers actief blijven na klikken op weigeren, 99 sites waar tracker-scripts geladen blijven, en 72 sites waar tracking-cookies actief blijven na weigeren (diep.json, overheid_1718/D_overtredingen). Op de commerciële kant: 11, 12 en 8 sites (diep.json, npi/D_overtredingen).
De derde laag zit in de tijd. Een deel van de keten wacht op gedrag.
Op 183 overheidssites verschenen trackers pas ná scrollen of interactie, ruim na het laden van de pagina, en dus buiten het bereik van een statische scan (diep.json, overheid_1718/D_overtredingen). Op de commerciële kant staat dezelfde bevinding twee keer in de lijst, op 23 en op 6 sites, met verschillende drempels (diep.json, npi/D_overtredingen).
Op 19 commerciële sites was het aantal aangesproken derde-partijdomeinen tijdens een realistische gebruikersflow disproportioneel groot voor de geleverde functie (diep.json, npi/D_overtredingen). Dat cijfer bestaat alleen omdat er is doorgeklikt en gescrold.
En de zwaarste vormen zitten juist in die staart. Sessie-replay, dat elke muisbeweging, klik, scroll en formulierinvoer vastlegt, draaide op 13 van de 32 commerciële sites (40,6 procent) (T16). Sociale pixels op 19 sites (59,4 procent) (T17). Op de overheidskant lagen die twee op 36 sites elk (2,1 procent), maar met een scherpe wending: van die 36 sessie-replay-sites laadden er 24 al voor toestemming, en van de 36 pixel-sites laadden er 31 al voor toestemming (T16 en T17 bij run mijnoverheid_2026-07-14).
Waar de meting ophoudt, en waar ze mij tegenspreekt¶
Dit hoort erbij, en het is de eerlijkste paragraaf van het stuk.
De overheidsdata spreekt de kop tegen. Op alle overheidsruns lag de mediaan van het aantal externe partijen bij niets doen op 1,0 en na accepteren óók op 1,0, met een mediane verhouding van 1,0 (thesis20.json, T5 bij de runs mijnoverheid_2026-07-14, headed_deep_2026-06-22, overheid_nieuw_2026-06-28, v3.8_2026-05-18 en v3.8_2026-05-14). Op de mediane overheidssite opent accepteren dus niets. De stelling "de echte lading komt pas na accepteren" geldt aantoonbaar voor de commerciële kant en is op de overheidskant in de mediaan niet terug te vinden. Dat komt doordat het overheidsprobleem aan de voorkant zit, in wat er al voor de vraag vertrekt. Zie Dezelfde meetlat voor de overheid en de app in je broekzak.
De 32 is een kleine steekproef. Alle NPI-cijfers hierboven staan op 32 sites. Percentages op zo'n aantal bewegen hard, want elke afzonderlijke site telt zwaar mee. Ik noem daarom overal de absolute aantallen erbij.
Metingen verschillen tussen runs. Van de sites die in drie of meer runs voorkomen, 434 stuks, is het mediane verschil tussen de laagste en de hoogste meting 0,0 (thesis20.json, T19_herhaalbaarheid). De staart is wel groot: veva.nl liep van 4 tot 46 ontvangers, werkenbijdefensie.nl van 13 tot 53, en 2todrive.nl, een rijexamenplatform voor jongeren, van 1 tot 30. Zo'n spreiding komt door campagnes, A/B-tests en veilingen die per bezoek verschillen. Eén meting op zo'n site is een momentopname.
Een sterke aanwijzing is nog geen vastgestelde overtreding. Waar na een weigering toch een volgtechniek afvuurde, leg ik dat vast als sterke technische aanwijzing voor strijd met artikel 11.7a, uitdrukkelijk niet als vastgestelde overtreding zolang doel, timing en uitzonderingen niet juridisch zijn gewogen. Zie Een aanwijzing is nog geen bewijs en Label elke bevinding op bewijsniveau.
En ik meet vanuit de browser. Wat er op de server van een site gebeurt nadat het verkeer daar is aangekomen, blijft buiten beeld. Elk getal hierboven is een ondergrens. Zie Server-side tagging verplaatst de tracking uit het zicht.
Als lezer, in twee minuten per site. Open een site, druk op F12, ga naar het tabblad Netwerk en herlaad de pagina zonder iets te klikken. Noteer het aantal regels. Klik daarna op Accepteren en herlaad opnieuw. Het verschil tussen die twee getallen is jouw eigen versie van de 7,5 tegenover 30,5. Je hebt er geen gereedschap voor nodig dat je nog moet installeren.
Als je een toestemmingsmodule beheert: test de weigerknop met de netwerkopname erbij open, en niet met de configuratiepagina van je leverancier erbij. De keuze van je leverancier voorspelt je nalevingsniveau bovendien beter dan je privacyverklaring dat doet. Zie Welke toestemmingsmodule je kiest, voorspelt of je overtreedt.
En als je zelf meet: meet zoals een bezoeker. Scroll, klik door naar een tweede pagina, start een video, en wacht daarna nog een paar seconden. De 183 overheidssites en de 23 commerciële sites met vertraagde trackers zitten alleen in je opname als je die handelingen doet.
bronnen
Eigen meetprotocol: drie HAR-opnames per sitehet verschil tussen weigeren en accepteren is waar de bevinding zit
in onderzoeknotitiewaarschijnlijkRTB, adtech en brokersbronnenverwant
Ze krijgen je nummer, niet per se welke pagina je las
Bij het uitwisselen van herkenningsnummers kregen de meelezende partijen wel je nummer en je toestemmingsstring, maar niet zichtbaar welk artikel je las. Dat is een scherper en eerlijker punt dan zeggen dat ze wisten wat je las. Precies benoemen wat wel en niet in de data zat, houdt de claim overeind.
bronnen
Eigen meetregel: scheid identifier van inhoudeen gedeeld nummer bewijst herkenning, nog geen kennis van het gelezen artikel
Op een nieuwssite kan een gedeeld nummer herleidbaar maken wat je las
Bij een nieuwssite telt een extra gewicht mee: via een gesynchroniseerd herkenningsnummer valt te herleiden wie welk artikel opende. Voor de gewone lezer is dat profielvorming, voor journalistieke bronbescherming een apart risico, zeker als zo'n tracker op een tip- of klokkenluiderspagina staat.
AVG, artikel 9 lid 1waarom het onderwerp van een artikel gevoelig kan zijn
geverifieerdnotitiezekerRTB, adtech en brokersbronnenverwant
De Nederlandse nieuwssites draaien bijna overal hetzelfde recept
Het opvallende is niet dat er buitenlandse techniek in zit, maar dat het overal dezelfde schakels zijn. Die uniformiteit is zelf de bevinding: geen toeval hier en daar, maar een vast verdienmodel dat de hele branche deelt.
Ik testte drie commerciele nieuwssites en zag telkens dezelfde constructie terug. "Dezelfde -3 partner-discrepantie verscheen bij alle drie commerciele sites (NU.nl: 104->101, Volkskrant: 106->103, Telegraaf: 130->127). Dit patroon suggereert een gedeelde praktijk in de industrie." Verschillende uitgevers, dezelfde afwijking tussen wat de banner claimt en wat er draait.
Onder de motorkap komen dezelfde namen terug. Bij Volkskrant (DPG) bleven na weigeren 16 cookies staan, waaronder _vwo_uuid_v2 (Wingify), met 40 verzoeken naar adnxs-simple.com (AppNexus). Bij Telegraaf (Mediahuis) bleef cs_fpid (ContentSquare, 34-jaar looptijd) staan. Het zijn dezelfde adtech-toeleveranciers die de "nieuwsstal" van DPG tot Mediahuis bedienen, wat verklaart waarom de gebreken zo op elkaar lijken.
"Alle vier geteste sites missen een directe weigerknop op de eerste laag. Gezamenlijk bereik: 2,6 miljard bezoeken per jaar." Het recept is niet marginaal, het draait op enorme schaal. Ik meldde de bevindingen bij de AP op 25 maart (referentie 7cb0-9871). Omdat het een gedeelde praktijk is en geen incident, is de conclusie er ook een over de sector, niet over een site.
Eigen bevinding: bidswitch ru oorsprong nieuwsstal, 2026-07-18154 sites gemeten, 29 met buitenlandse concernband, steeds hetzelfde recept
geverifieerdnotitiezekerRTB, adtech en brokersbronnenverwant
De sectoren die het meest zouden moeten waken, verdienen aan tracking
De gevoeligste categorieen, bank, overheid, zorg, verzekeraars en politiek, blijven vrijwel schoon van deze buitenlandse partijen. Vrijwel alleen commerciele media en retail doen mee. De sector die bij uitstek over privacy zou moeten waken, verdient geld met een model dat je herkenbaar maakt.
geverifieerdessayzekerOverheid, toezicht en de wetbronnenverwant
Ook een informatiepagina kan een complete advertentiestack dragen
Een persbericht-pagina van een ministerie droeg een volledige realtime-biedketen met bekende advertentiepartijen. Een pagina die louter informatie hoort te geven, veilt intussen aandacht. Zulke plekken zijn juist verdacht omdat niemand ze daar zoekt.
De meting die dit stuk draagt, ging over één adres: minvws.pr.co, een perspagina van het ministerie van Volksgezondheid, Welzijn en Sport. Bij het openen daarvan registreerde mijn scanner 34 unieke derde partijen die meelezen. Twaalf van die 34 kregen hetzelfde herkenningsnummer aangereikt.
Een enkele analytics-tracker is één partij met één doel. Een advertentiestack is een keten met drie lagen, en die lagen herken je aan hun functie.
verkoopkant de partij die de advertentieruimte aanbiedt
koopkant de partij die namens adverteerders biedt
matchlaag de partij die de identiteiten van beide kanten koppelt
Taboola en Outbrain zitten in de eerste laag: aanbevelingsblokken onder een artikel, betaald geplaatst. AppNexus zit in de tweede. De matchlaag is de laag die je in de pagina niet ziet, en daar zit de kern van dit stuk.
Op deze perspagina zetten vijf advertentiebedrijven nul cookies in de browser. Ze ontvingen wel hetzelfde herkenningsnummer.
Lees dat nog eens. Geen zichtbare cookie, wel een gesynchroniseerd nummer. De uitwisseling liep van server naar server. Wie de cookielijst in de ontwikkelaarstools openslaat en niets vindt, concludeert dat het meevalt, en heeft de belangrijkste laag gemist. Zie Elke browsermeting is een ondergrens.
Dit is de reden dat een cookiescan als enige instrument tekortschiet. Een cookie is een spoor. De koppeling is de gebeurtenis.
Een perspagina op pr.co staat op een subdomein van een extern platform. Dat is een ingekochte dienst, aangeschaft door een afdeling communicatie, met een eigen contract en een eigen leverancier.
Wie het verwerkingsregister van het ministerie leest, vindt de hoofdsite. De persomgeving hangt aan een ander contract, is technisch niet van het ministerie, en valt daarmee vaak buiten de inventarisatie. Dezelfde mechaniek geldt voor campagnesites, subsidieportalen, congresomgevingen en vacaturesites.
Het bredere cijfer laat zien waar dat toe leidt. Over 1.177 overheidsdossiers uit de meting van 14 juli 2026 was de mediaan 2 externe ontvangers en het gemiddelde 3,2. De negentigste percentiel lag op 7 en het maximum op 38. De typische overheidssite is dus rustig. De staart is waar het risico zit, en de staart bestaat vrijwel altijd uit dit soort ingekochte randomgevingen. Zie De ontvangers die in geen enkel verwerkingsregister staan.
Zulke plekken zijn verdacht om een eenvoudige reden: niemand zoekt ze daar.
Het aantal meelezers is minder interessant dan wat ze samen kunnen. Twaalf partijen die hetzelfde herkenningsnummer krijgen, kunnen hun losse waarnemingen achteraf aan elkaar knopen. Dat mechanisme heet cookie-sync. Zie Cookie-sync laat losse partijen dezelfde persoon herkennen.
Hoe vaak dat gebeurt, verschilt sterk per soort site:
overheidssites, 1.718 gemeten 120 sites (7,0%) met cookie-sync
98 sites (5,7%) zonder toestemming
NPI-set, 32 gemeten 28 sites (87,5%) met cookie-sync
16 sites (50,0%) zonder toestemming
En over de bedrijven zelf: van de 685 partijen die op de gemeten sites meelezen, kregen er 137 op minstens één site hetzelfde herkenningsnummer aangereikt. Google op 89 sites, DoubleClick op 83.
Juridisch komt dan artikel 26 van de AVG in beeld, gezamenlijke verwerkingsverantwoordelijkheid. Twee arresten zetten daar de lijnen uit. In Fashion ID, HvJ-EU 29 juli 2019, zaak C-40/17, oordeelde het Hof dat de website-exploitant die een social plugin inbedt medeverantwoordelijke is, met een aansprakelijkheid die beperkt blijft tot het verzamelen en het doorgeven van de gegevens, en dat de toestemming moet worden verkregen door de exploitant van de website, omdat het bezoek aan die site de verwerking in gang zet. In Wirtschaftsakademie, HvJ-EU 5 juni 2018, zaak C-210/16, stelde het Hof dat gezamenlijke verantwoordelijkheid geen gelijke verantwoordelijkheid impliceert.
Kanttekening die erbij hoort: beide arresten zijn gewezen onder Richtlijn 95/46, de voorganger van de AVG. De doorwerking naar de AVG loopt via de EDPB-richtsnoeren 07/2020, versie 2.1 van 7 juli 2021.
Of een gedeeld nummer in een concreet geval gezamenlijke verantwoordelijkheid oplevert, is een juridische vraag. De meting levert het feit dat het nummer gedeeld werd.
Drie afbakeningen, want zonder die drie is dit stuk overtuigender dan het mag zijn.
De partijen die het gesynchroniseerde nummer kregen, kregen daarbij geen expliciete aanduiding van het artikel dat werd gelezen. Ze kregen het nummer en de toestemmingsstring. Alleen de echte biedaanvragen droegen paginacontext mee. Zie Ze krijgen je nummer, niet per se welke pagina je las.
Een uitgewisseld nummer is geen bod. In 82 geschikte videoveilingen, verdeeld over 48 sessies en drie dagdelen, wisselde het gemeten advertentiebedrijf telkens een herkenningsnummer uit en bracht het nul keer een bod uit. De koppeling was er, het bod nooit. Zie Een cookie-match bewijst herkenning, geen bod.
Waarom een informatiepagina de slechtst denkbare plek is¶
Hier verlaat ik de meting en geef ik een weging. Ik label dit als gedachte.
Een perspagina van VWS gaat over gezondheid. Wie zo'n bericht opent, heeft daar meestal een reden voor. Die reden is context, en context is precies wat een advertentiestack waard is. Gezondheid is onder artikel 9 van de AVG een bijzondere categorie, en het domein was in mijn meting als gevoelig gemarkeerd.
Het patroon is breder dan deze ene pagina. Advertentie-infrastructuur in een omgeving die zich als zorg of voorlichting presenteert, is een keuze in het ontwerp, gemaakt door wie de omgeving liet bouwen. Zie Advertentie-infrastructuur in een zorgjas is een bouwkeuze.
Ik trek hier geen conclusie over opzet. Een communicatieafdeling die een persplatform inkoopt, kiest voor gemak en bereik. De stack komt mee in de doos.
Vier vragen, en ze kosten samen één e-mail aan de leverancier.
1. welke externe code laadt jullie platform op onze pagina's?
2. welke daarvan laden voordat de bezoeker iets heeft gekozen?
3. wordt er een herkenningsnummer met andere partijen gedeeld,
en zo ja met welke?
4. staat dat in onze verwerkersovereenkomst en in ons register?
Vraag 3 is degene die het vaakst onbeantwoord blijft, en die het meest oplevert.
Om te laten zien dat dit geen theoretisch probleem is: over de 1.718 gemeten overheidssites telde ik 604 gevallen van POST-verzoeken met inhoud naar derde partijen, dus verkeer waarin actief gegevens worden verstuurd. Op de NPI-set van 32 sites gebeurde dat op 29 sites.
Cookies weigeren scheelt echt, maar reken er niet blind op
Op vrijwel alle gemeten sites vuurt de buitenlandse techniek pas na accepteren, dus actief weigeren helpt aantoonbaar. Toch vuurt op een enkele site de tracker ook na een weigering. Een tracker-blokker in de browser vangt wat een keuze in de banner niet vangt.
Op vrijwel alle gemeten sites vuurt de buitenlandse techniek pas na accepteren. Dat is een meting, geen vermoeden. In de HAR-files zie je het verschil: voor de klik op de banner is het verkeer richting de bekende trackerdomeinen stil, na de klik op "alles accepteren" komt het op gang.
Dat betekent iets concreets. Actief weigeren helpt echt. Klik je "alles weigeren", dan blijft het overgrote deel van de trackers stil. De weigerknop is geen schijnknop. De meting laat het verschil gewoon zien, per site, in het aantal requests dat na de keuze vertrekt.
Er zit een mechaniek onder die dit verklaart. Veel trackers worden geladen achter een toestemmingsconditie. De site wacht op een signaal van het toestemmingsplatform voordat de scripts vuren. Binnen het IAB TCF-raamwerk is dat signaal een string die vastlegt welke doelen en welke partijen toestemming hebben. Staat er "geweigerd" in, dan zou de nette implementatie de tracker niet moeten laden.
Op de meeste gemeten sites gebeurt precies dat. De keuze wordt gerespecteerd omdat de techniek eromheen is gebouwd om op dat signaal te wachten. Dat is ook logisch vanuit de wet. De Telecommunicatiewet artikel 11.7a vraagt toestemming voor het plaatsen en uitlezen van niet-functionele cookies en trackers. Een site die na weigeren toch vuurt, staat juridisch zwak. De prikkel om de weigering te respecteren is dus reëel, en de meting bevestigt dat de meeste sites dat doen.
Ik hou het bewijsniveau streng. "Vrijwel alle gemeten sites" slaat op de sites die ik heb gemeten, met de HAR ernaast. Het is geen uitspraak over het hele web. Ik heb geteld wat ik zag, en wat ik zag was dat weigeren op de grote meerderheid het verkeer stillegt.
Wat ik niet kan zeggen, is dat weigeren overal werkt. Mijn steekproef is mijn steekproef. Een site die ik niet heb gemeten, kan zich anders gedragen. Daarom staat de claim precies zo geformuleerd: op de gemeten sites, aantoonbaar, met het verschil zichtbaar in het verkeer. Dat is wat de data draagt, en niet meer.
Toch is het geen garantie. Op een enkele gemeten site vuurt de tracker ook na een weigering. Soms gebeurt dat met een vlag die zegt dat er niet gepersonaliseerd mag worden. Soms vuurt het gewoon door alsof er niets gekozen is. De banner dekt dus niet alles af.
Die uitzonderingen zijn belangrijker dan hun aantal. Ze laten zien dat de knop een belofte doet die de site niet altijd nakomt. De vlag "geen personalisatie" is daarbij verraderlijk. Ze suggereert dat er iets is geregeld, terwijl het verzoek alsnog vertrekt, inclusief de identifiers die eraan hangen. Een resetbare identifier die meegestuurd wordt, blijft een sleutel, ook als er "niet personaliseren" bij staat. De data verlaat je toestel, en dat is het punt.
Een tracker-blokker in de browser vangt wat een keuze in de banner laat lopen. De banner werkt op het niveau van toestemming, de blokker werkt op het niveau van verkeer. Waar de site de weigering negeert, ziet de blokker het verzoek alsnog en houdt het tegen. De twee lagen vangen verschillende gaten.
De redenering is simpel. De banner vertrouwt erop dat de site zijn eigen belofte nakomt. De blokker vertrouwt daar niet op en kijkt naar wat er echt vertrekt. Door beide te gebruiken, ben je gedekt in het normale geval en in het uitzonderingsgeval. Vertrouw op de weigerknop, en leg er een tweede slot naast.
Praktisch: ik klik overal "alles weigeren", want op de meeste sites doet dat zijn werk en kost het niets. Daarnaast draait er een blokker in de browser voor de sites die de weigering negeren. En als ik meet, kijk ik altijd naar de HAR na weigeren, niet alleen naar wat de banner belooft. De belofte is toetsbaar, en ik toets haar.
Ik raad hetzelfde aan zonder te doen alsof het een garantie is. De weigerknop is een goede eerste laag, en op de meeste gemeten sites is hij voldoende. De blokker vangt de rest, tot op zekere hoogte, want ook een blokker kent zijn gaten. Volledige zekerheid dat er niets vertrekt, bestaat op het gewone web niet. Wat wel bestaat, is een stapel maatregelen die elk een deel van het lek dichten, zodat wat overblijft klein is en zichtbaar. Ik meet liever wat er nog doorheen komt dan dat ik aanneem dat de deur op slot is.
De bredere les gaat verder dan cookies. Een keuze die je op het scherm maakt, is zo veel waard als de mate waarin de techniek eronder die keuze respecteert. Bij de meeste sites is dat verband stevig, en dan doet de knop wat hij belooft. Bij een minderheid is het verband los, en dan is de knop een gebaar zonder gevolg. Het onderscheid tussen die twee is niet te zien aan de banner. Het is alleen te zien aan het verkeer. Daarom eindigt elk oordeel over een weigerknop voor mij bij de HAR, en niet bij de tekst op de knop.
Dat is de houding die ik aanraad. Neem de weigerknop serieus, want de meting laat zien dat hij werkt. Reken er niet blind op, want de meting laat ook zien waar hij faalt. Twee sloten op de deur die je niet kunt vermijden.
Het loont om te laten zien waar ik naar kijk. Een HAR-file is een lijst van alle netwerkverzoeken die de browser doet, met tijdstip, bestemming en inhoud. Ik open de site, ik doe niets, en ik lees de lijst. Dan klik ik in de banner, en ik lees de lijst opnieuw. Het verschil tussen die twee lijsten is de meting. Er komt geen interpretatie aan te pas, alleen een vergelijking van wat er wel en niet vertrok.
Voor het klikken staan er verzoeken naar de site zelf en naar de functionele onderdelen die nodig zijn om de pagina te tonen. De bekende trackerdomeinen ontbreken. Na "alles accepteren" verschijnen ze. Verzoeken naar advertentie-uitwisselingen, naar meetdiensten, naar partijen die ik nooit heb aangeklikt. Dat is wat ik bedoel met "vuurt pas na akkoord". Het is af te lezen uit de tijdstempels: de trackerverzoeken dragen een tijd die na de klik ligt. De volgorde in de tijd is het bewijs dat de klik de trigger was.
Bij de test met weigeren doe ik hetzelfde, alleen klik ik dan "alles weigeren". Op de meeste gemeten sites blijft de lijst daarna schoon: de trackerdomeinen komen niet opdagen. Dat is het bewijs dat de knop werkt. Ik lees het af uit welk verkeer het toestel verlaat, en niet uit wat de banner belooft te doen. Een belofte is een tekst op het scherm. Een verzoek in de HAR is een feit over wat er gebeurde.
De sites die ook na weigeren vuren, doen dat zelden per ongeluk. Er zijn technische manieren om een keuze te omzeilen die bewust gebouwd zijn. Server-side tagging verplaatst de tracker naar de server van de site zelf, waardoor het verzoek van een eigen domein lijkt te komen en minder opvalt. CNAME-cloaking laat een derde partij zich voordoen als een subdomein van de site, zodat het verkeer eruitziet als eigen huisverkeer. In beide gevallen vertrekt de data alsnog, en de banner-keuze raakt het niet.
Daarom is de tracker-blokker in de browser een echte tweede laag. Hij kijkt naar de bestemming van het verkeer, niet naar de belofte van de banner. Wat een keuze in de banner laat lopen, kan de blokker op verkeersniveau alsnog tegenhouden. De twee lagen dekken verschillende omzeilingen af. De banner werkt tegen de nette sites, de blokker werkt ook tegen de sites die de nette weg omzeilen.
Dit is deels gemeten en deels afgeleid. Dat een tracker na weigeren vuurt, is gemeten, want ik zie het verzoek in de HAR. Dat het via server-side tagging of cloaking gaat, is per geval te controleren aan het domeinpatroon, en waar ik dat niet heb nagelopen, noem ik het een vermoeden over de methode, geen vaststelling.
Eigen bevinding: bidswitch ru oorsprong nieuwsstal, 2026-07-18pixels vuren na weigeren op meerdere gemeten sites
geverifieerdnotitiezekerSoftware en apparatenbronnenverwant
Een pas-scan-app kan je gezicht naar een cloud in de VS sturen
Een app die je identiteitsbewijs scant en een selfie maakt, kan die gezichtsbeelden voor vergelijking naar een Amerikaanse clouddienst sturen. De verificatie voelt lokaal maar gebeurt buiten je zicht en buiten Europa. Wat even je gezicht controleren heet, is een biometrische verwerking op een server elders.
bronnen
Eigen onderzoeksdossier: fastid, 2026-07-04gezichtsvergelijking met bewijsbeelden uit de dynamische capture
gepubliceerdnotitiewaarschijnlijkSoftware en apparatenbronnenverwant
De omvormer van je zonnepanelen verbindt naar het buitenland
Een gangbare omvormer draait op twee processoren, waarvan er een naar het buitenland verbindt. Uit het verbruikspatroon valt af te leiden wanneer een huis leeg staat. Apparaten die als saai nutsgoed gelden, zijn stille datastromen.
"De gevoeligste informatie is niet je energierekening, maar een aanwezigheidskalender van je huis, en die rolt er bijna vanzelf uit." Een wifi-omvormer stuurt elke vijf minuten een gedetailleerd verbruiksprofiel weg. "Die curve is een vrijwel perfect aanwezigheidslogboek, met 288 meetpunten per dag." Wie de curve leest, ziet wanneer je huis leeg staat.
Ik ontcijferde het Growatt-protocol volledig: telemetrie over server.growatt.com, TCP-poort 5279, elke vijf minuten. De whois-controle wees Alibaba aan: server.growatt.com (47.254.130.145) en server-cn.growatt.com (Shenzhen). De Solis S3 stuurt via MQTT over TLS naar *.iot-as-mqtt.*.aliyuncs.com (Shanghai), met opslag op oss-eu-central-1 (Frankfurt). Frankfurt klinkt Europees, maar het MQTT-verkeer loopt naar Shanghai.
Bij Growatt is de "versleuteling" een XOR met het openbare sleutelwoord "Growatt", en de firmware gaat onversleuteld. "XOR is een omkeerbare versluiering, geen slot; wie meeleest, leest alles." Erger nog: "De verbinding gaat twee kanten op: de cloud kan ook instellingen en firmware naar je omvormer terugsturen, dus op afstand het vermogen terugregelen of het apparaat uitschakelen." De app ShinePhone vraagt 40 permissies, waaronder locatie, camera en telefoonstatus. Circa 2,5 miljoen NL-huishoudens hebben zonnepanelen. Open firmware als ESPHome haalt de omvormer uit de cloud.
Een Growatt- of Solis-omvormer met wifi-monitoring stuurt elke vijf minuten
een gedetailleerd beeld van je huishouden naar de cloud, en die verbinding gaat twee kanten op. Dit stuk
laat zien wat er vertrekt, waar het heen gaat, en welke risico's daaruit volgen: van aflezen wanneer
je thuis bent tot op afstand aan je omvormer draaien. En wat je eraan kunt doen zonder je
panelen kwijt te raken.
Lees dit eerst. Dit is een momentopname van juni 2026. Firmware en
serverkeuzes veranderen, en jouw specifieke stick kan anders routeren dan de geteste exemplaren.
Gebruik dit als richting, niet als eeuwige waarheid. Wie zekerheid wil over het eigen apparaat,
meet het zelf na; achterin staat hoe.
Wie
Je omvormer praat met een losse wifi-dongle, die praat met de cloud van
de fabrikant (Shenzhen Growatt of Ginlong), gedraaid op Alibaba. Daarnaast je telefoon-app,
die met dezelfde cloud praat plus een rij externe SDK's.
Wat
Twee soorten. Uit de omvormer: een meting per vijf minuten van opwek,
batterij en verbruik, met een vast serienummer. Uit de app: je naam, e-mailadres, telefoonnummer
en het adres van je installatie. Samen vormt dat een geidentificeerd, gelokaliseerd profiel.
Waarheen
Alibaba Cloud in Frankfurt, de VS en China. Zelfs als de opslag in
de EU staat, raakt de DNS- en besturingslaag China, en de bedrijven erachter vallen onder
Chinees recht.
Dit raakt geen niche. Eind 2024 hadden ongeveer 3 miljoen Nederlandse
huishoudens zonnepanelen, en Growatt en Solis zijn wereldwijd de nummers 4 en 3. Hoeveel van deze
omvormers er precies in Nederland staan weet niemand, ook de overheid niet; de orde van grootte is
enkele honderdduizenden tot ruim een half miljoen bij huishoudens. De Nederlandse context, en wat
de overheid eraan doet, staat verderop.
De korte versie
Je omvormer stuurt elke vijf minuten een gedetailleerd beeld van je opwek, batterij en verbruik
naar de cloud. Daaruit is af te leiden wanneer je thuis bent en wanneer niet.
De app koppelt dat profiel aan jou persoonlijk: je e-mail, telefoonnummer en het adres
van je installatie.
Bij Growatt reist de meetdata zonder echte versleuteling, alleen een omkeerbare
versluiering met een openbaar bekend sleutelwoord. Geen echt slot.
De verbinding gaat twee kanten op: de cloud kan ook instellingen en firmware naar je omvormer
terugsturen, dus op afstand het vermogen terugregelen of het apparaat uitschakelen.
Het goede nieuws: trek je de wifi-stick eruit, dan blijven je panelen gewoon stroom leveren.
Je verliest alleen de app, niet de opwek.
De kernrisico's
Er is niet één risico, maar een handvol, en ze versterken elkaar. Het meest tastbare eerst, daarna
de minder zichtbare maar minstens zo belangrijke.
1 · Wanneer ben je thuis
De gevoeligste informatie is niet je energierekening, maar een aanwezigheidskalender van je
huis, en die rolt er bijna vanzelf uit. Een omvormer met batterij rapporteert niet alleen hoeveel zon
er was. Hij rapporteert elke vijf minuten je verbruik: hoeveel het huis op dit moment gebruikt, en
of de batterij oplaadt of leeggetrokken wordt. En verbruik volgt menselijke activiteit bijna een-op-een.
Een gewone dag tekent zich daardoor scherp af. 's Nachts een vlakke bodem (alleen de koelkast en
sluipverbruik), 's ochtends een piek (je staat op, doucht, ontbijt), een terugval als iedereen de deur
uit is, overdag stilte, 's avonds weer een piek (koken, wasmachine, laptops), en dan terug naar de
bodem. Die curve is een vrijwel perfect aanwezigheidslogboek, met 288 meetpunten per dag.
00 - 06uvlakke bodem: niemand actief, alleen sluipverbruik
07 - 08uochtendpiek: opstaan, douche, ontbijt
09 - 16uterugval: huis leeg, werk en school
17 - 22uavondpiek: koken, wassen, opladen, thuis
dagen langvlak en laag blijft: op vakantie, huis leeg
Het verraderlijkst is dat laatste. Ga je weg, dan zakt het verbruik terug naar kaal sluipverbruik en
blijft daar dagenlang. Die platte, lage lijn over meerdere dagen is het luidst denkbare signaal
"hier is niemand, en voorlopig ook niet". Andersom verraadt een laadpiek in de avond dat je auto, en
waarschijnlijk jij, thuis is.
Wie heeft daar wat aan?
Inbraak. Een betrouwbare kalender van wanneer jouw huis, op jouw adres, leeg is, plus een
helder vakantiesignaal. Dat is precies de informatie waar inbrekers naar gissen.
Profilering. Je dagritme, gezinsgrootte en gewoonten zijn bruikbaar voor verzekeraars,
kredietverstrekkers of adverteerders die op gedrag prijzen.
Datahandel. Eenmaal in de cloud is het profiel te aggregeren en door te verkopen.
Op buurtschaal. Draaien veel huizen in een straat op hetzelfde platform, dan ontstaat een
kaart van wanneer een hele wijk uitvliegt: werkdagen, schoolvakanties, feestdagen.
2 · Iemand kan op afstand aan je omvormer draaien
Dit is een ander soort risico dan privacy, en wordt vaak gemist. De verbinding gaat twee kanten
op. De cloud stuurt niet alleen metingen op, maar kan ook instellingen en firmware terugsturen
naar je omvormer. In het Growatt-protocol zitten aparte berichten om instellingen weg te schrijven, en
bij Solis bestaat een vaste procedure voor firmware-updates op afstand. Dat is bedoeld voor onderhoud,
maar het betekent dat een partij op afstand kan bepalen hoe jouw installatie zich gedraagt: het vermogen
terugregelen, grenzen aanpassen, of in het uiterste geval uitschakelen.
Wie de cloud of je account in handen krijgt, krijgt die knop erbij, of dat nu de fabrikant is, een
inbreker op je account, of wie het platform compromitteert. En omdat één fabrikant duizenden
installaties tegelijk beheert, is die gebundelde controle over zonne-omvormers een netwerk- en
leveringszekerheidskwestie waar overheden inmiddels publiek voor waarschuwen.
3 · En het blijft niet bij meekijken
Het is niet anoniem, het is jij. Via de app hangt het hele profiel aan je naam, e-mail en
adres. Zie de sectie hieronder.
Bij Growatt kan iedereen op het pad meelezen. De meetdata reist zonder echt slot, dus niet
alleen de fabrikant maar ook een gast op je wifi of je provider kan het lezen.
Buitenlandse toegang. Data en besturing liggen bij bedrijven onder Chinees recht, ook als de
opslag toevallig in de EU staat.
Dit alles gaat om data en bediening die je meekrijgt zonder het te weten, zonder dat je er bij de
installatie een echte keuze in kreeg.
Wat er precies weggaat, en wat het over je zegt
De volledige lijst, vertaald van techniek naar betekenis. Links wat er vertrekt, rechts wat iemand
eruit kan aflezen over jou en je huishouden.
Wat er weggaat
Wat het over jou zegt
Uit de omvormer (elke 5 min naar de fabrikant-cloud op Alibaba)
Zonne-opwek per paneelstring
laat zien of de zon scheen; op zichzelf weinig over jou
Verbruik / belasting op dit moment
of er nu iemand actief is in huis, en hoeveel
Batterij laden of ontladen
wanneer je veel stroom trekt: koken, wasmachine, auto laden
Laadtoestand van de batterij
je energievoorraad en je dagritme
Energie vandaag en totaal
je totale verbruik, een hint over gezinsgrootte en leefstijl
Net- en uitgangsspanning, frequentie
technisch; zegt weinig over jou
Temperatuur, status, foutcodes
de technische gezondheid van het systeem
Serienummer van dongle en omvormer
koppelt al het bovenstaande aan jouw specifieke apparaat
Uit de app (bij gebruik, naar dezelfde cloud en externe SDK's)
Je naam
koppelt het energieprofiel aan jou als persoon
E-mailadres en telefoonnummer
identificeert je en maakt je bereikbaar
Adres of locatie van je installatie
koppelt het profiel aan je fysieke huis
Locatie van je telefoon (AMap-SDK)
waar je toestel zich bevindt
Camera, en bij Solis de microfoon
toegang tot beeld en geluid op je telefoon
Op zichzelf lijkt elke regel onschuldig. De waarde, en
het risico, zit in de optelsom: een getimed gedragsbeeld, gekoppeld aan een naam en een adres.
Wat de app over jou weet
Op zichzelf is dat energieprofiel nog pseudoniem: het hangt aan een serienummer, niet aan een naam.
De app legt juist die laatste schakel. Bij het aanmaken van een account geef je je naam, e-mailadres
en telefoonnummer, en bij het registreren van je installatie het adres of de locatie ervan,
voor de kaart en het weerbericht. Daarmee wordt het anonieme energiebeeld een dataset met naam en
huisnummer.
Dat is de eigenlijke sleutel. Het aanwezigheidsprofiel is pas bruikbaar als je weet wiens huis het is
en waar het staat, en precies die koppeling maakt de app. Daar komen de telefoon-permissies nog bij:
beide apps vragen locatie en camera, SolisCloud ook de microfoon. De locatie-SDK (AMap)
bepaalt actief waar je toestel is. Het resultaat is geen geanonimiseerde energiestatistiek, maar een
genaamd, geadresseerd, getimed gedragslogboek van je huishouden.
De optelsom. Energieprofiel (wanneer is er iemand) plus app-gegevens (wie, en
op welk adres) plus telefoon-permissies (waar is dat toestel nu). Elk los lijkt onschuldig; samen is het
een volledig identificeerbaar beeld van je dagelijks leven.
Wat kun je eraan doen
Je hoeft je panelen niet weg te doen. De wifi-stick is een los kastje; de omvormer
werkt prima zonder.
Vier opties, van de simpelste en meest geruststellende tot de meest technische.
Haal de stick van wifi af.5 minuten
Koppel de wifi-dongle los of verwijder hem uit je netwerk. De omvormer blijft zonnestroom omzetten
en je panelen leveren door. Je raakt alleen de app-grafieken kwijt, niets aan je opbrengst. Dit sluit
in één klap alle risico's: geen data meer naar buiten, en ook geen bediening van buitenaf meer.
Houd de monitoring lokaal (Growatt).knutselen
Laat de dongle praten met een eigen mini-server op je thuisnetwerk in plaats van met de
fabrikant-cloud. Het open project "grott" doet precies dit: je houdt je grafieken, de data blijft
thuis. Vergt een Raspberry Pi of vergelijkbaar en wat instelwerk.
Vervang de firmware van de wifi-stick (Solis).gevorderd
Voor de Solis-stick bestaat open firmware (ESPHome) die de gegevens rechtstreeks in je eigen
Home Assistant zet, zonder enige cloud.
Of accepteer de cloud bewust.keuze
Wil je het gemak van de app houden, dan is dat een legitieme keuze, mits je weet welke afweging je
maakt. Zet de stick dan op een apart gastnetwerk, los van je telefoons en computers.
Twijfel je bij de aanschaf van een nieuwe omvormer?
Vraag de installateur naar lokale monitoring of een open protocol (Modbus), zodat je niet vastzit aan
de cloud van de fabrikant.
Vanaf hier: de onderbouwing per merk
De rest van dit stuk laat per merk zien hoe dit is vastgesteld, voor wie het wil controleren of
navertellen. Eerst het totaalplaatje, dan Growatt en Solis apart.
Het totaalplaatje. Doorgetrokken lijnen zijn de telemetriestroom van de dongle;
stippellijnen zijn de externe SDK's in de app. Alle eindpunten komen samen bij Alibaba Cloud.
Hoofdstuk 1
Growatt
Een Growatt-omvormer is binnenin eigenlijk twee computers. Een besturingsbord (een ARM-chip
uit de bekende STM32-familie) regelt het scherm, de knoppen en de logica, en een aparte
vermogens-DSP (een Texas Instruments C2000) stuurt de eigenlijke omzetting van zonnestroom. Van
beide is de firmware publiek te vinden, en, belangrijk, niet versleuteld, dus volledig te
bestuderen. In geen van beide staat een internetadres.
Alle connectiviteit zit namelijk in de losse wifi-dongle, de ShineWiFi-X, die via een kabeltje
aan de omvormer hangt. Dat is precies waarom je hem eruit kunt trekken zonder je opwek te raken: de
dongle is een aanhangsel, geen onderdeel van de stroomopwekking.
Wat er precies verstuurd wordt technisch
Omdat zowel de firmware als het netwerkverkeer leesbaar zijn, kon ik het Growatt-protocol volledig
ontcijferen. Eén bericht bevat 50 meetwaarden, byte-exact gevalideerd tegen de firmware. Dit is de
data die elke vijf minuten je huis verlaat. Niet-technische lezers mogen de tabel overslaan; de kern
staat hierboven.
Toon de 50 telemetrie-velden
Veld
Betekenis
Eenheid
Identiteit
datalogserial
datalogger serienummer
pvserial
inverter serienummer
pvstatus
status (0=wait,1=normal,3=fault)
Zonnepanelen
vpv1
PV string-1 spanning
V
vpv2
PV string-2 spanning
V
ppv1
PV string-1 vermogen
W
ppv2
PV string-2 vermogen
W
epvtoday
PV-energie vandaag
kWh
epvtotal
PV-energie totaal
kWh
Batterij
bat_Volt
batterijspanning
V
batterySoc
batterij laadtoestand
%
BatWatt
batterij-vermogen (±)
W
bus_volt
DC-busspanning
V
Net & uitgang (verbruik)
grid_volt
netspanning
V
line_freq
netfrequentie
Hz
outputvolt
uitgangsspanning
V
outputfreq
uitgangsfrequentie
Hz
op_watt
output actief vermogen
W
loadpercent
belasting
%
Temperatuur
invtemp
inverter-temperatuur
°C
dcdctemp
DC/DC-temperatuur
°C
buck1_ntc
buck-1 NTC-temp
°C
Energie laden/ontladen
eacCharTotal
AC-laden totaal
kWh
ebatDischarTotal
batterij-ontladen totaal
kWh
eacDischarToday
AC-ontladen vandaag
kWh
eacDischarTotal
AC-ontladen totaal
kWh
Status
faultBit
fault-bitmask
warningBit
warning-bitmask
faultValue
foutcode
warningValue
waarschuwingscode
Plus vaste identifiers: serienummer van de
dongle en de omvormer. Byte-exact gevalideerd tegen de firmware.
Waar het heen gaat
Growatt-bestemmingen. Alle IP's zelf opgezocht en via whois geverifieerd; alles
Alibaba Cloud.
Server
Rol
IP
Hosting / land
server.growatt.com
telemetrie van de dongle (TCP 5279)
47.254.130.145
Alibaba intl (DE-tag)
server-us.growatt.com
regio-server
47.251.35.20
Alibaba US
server-cn.growatt.com
regio-server
47.115.135.34
Alibaba Shenzhen, CN
openapi / server-api.growatt.com
app- en API-verkeer (HTTPS)
8.211.2.163
Alibaba
De verbinding is een open boek
De dongle opent een vaste verbinding naar server.growatt.com op
TCP 5279 en stuurt elke vijf minuten een datapakket, met elke drie minuten een
levensteken. Een paar dingen vielen daarbij op:
De pakketten zijn niet echt versleuteld. Vanaf de negende byte worden ze ge-XOR'd met de
vaste tekst Growatt. XOR is een omkeerbare versluiering, geen slot; wie
het sleutelwoord kent leest alles, en dat woord staat in elk hobby-project online.
Daardoor kan iedereen op het netwerkpad meelezen, niet alleen de fabrikant: een gast op je
wifi, je provider, of wie het verkeer onderweg aftapt.
De dongle pint de hostnaam server.growatt.com. Dat is lastig voor de fabrikant om te omzeilen,
maar juist handig voor jou: met een simpele naam-omleiding vang je het verkeer lokaal op, zonder
cloud-account. Zo werkt ook optie 2 hierboven (grott).
De jurisdictie
De maker, Shenzhen Growatt, is een Chinees bedrijf en valt onder Chinees recht. De servers staan
op Alibaba Cloud, verspreid over een internationale regio (met een Duitse tag), de VS en China. In de
privacyverklaring staat bovendien expliciet dat je data verwerkt en benaderd mag worden vanuit andere
regio's. Anders dan Solis maakt Growatt geen specifieke EU-opslagbelofte.
De app: ShinePhone
ShinePhone is een klassieke Android-app van Shenzhen Growatt met 40 permissions, waaronder locatie,
camera en telefoonstatus. In de app staan tientallen vaste Growatt-adressen hardgecodeerd
(energy, server, server-cn,
oss, cdn, evcharge en meer,
allemaal op growatt.com), naast een rij externe SDK's. Het punt is niet hun herkomst, maar dat ze
meekijken zonder dat je het merkt of er gericht toestemming voor gaf.
SDK / component
Partij
Functie
AMap / AutoNavi
Alibaba (CN)
kaarten en actieve locatiebepaling
Tencent (WeChat / QQ)
Tencent (CN)
inloggen en delen
Tencent Bugly
Tencent (CN)
crash- en gebruiksrapportage
Countly
self-hosted
product-analytics en push
Google Firebase
Google (US)
analytics en berichten
Tuya
Tuya (CN)
IoT-koppeling (nog aanwezig)
Diepere bevinding. Omdat de firmware onversleuteld is, kon ik hem volledig
openleggen: ruim 500 functies en drie seriële poorten teruggevonden, met de wifi-dongle aan een van die
poorten. Dat het besturingsbord geen enkel internetadres bevat, bevestigt dat alle communicatie via die
losse dongle loopt, en dus dat je hem kunt verwijderen zonder je opwek te raken.
Hoofdstuk 2
Solis
Bij Solis zit de internetverbinding in de S3 wifi-stick, een apart kastje dat je in de
omvormer prikt. Ook hier geldt: de stick is een aanhangsel, de omvormer werkt zonder. Maar het kastje is
technisch een volwaardige computer. In het hart zit een MXCHIP EMW3080-chip (een variant van de
Realtek RTL8710) met 8 megabyte geheugen, die het Chinese besturingssysteem AliOS draait, dezelfde
familie die Alibaba voor zijn slimme apparaten gebruikt.
Anders dan bij Growatt is er geen publieke firmware van die stick. Deze analyse komt daarom uit
twee bronnen: het reverse-engineering-werk van de hobbyscene aan de AliOS-firmware, en de
configuratiepagina die de stick zelf serveert en die ik wel kon uitlezen. Dat verklaart waarom dit
hoofdstuk de bedrading anders aanvliegt dan dat van Growatt: bij Growatt kon ik de leiding zelf openleggen,
bij Solis lees ik mee langs de randen.
Wat de stick meet technisch
De stick leest de omvormer uit over een industriestandaard (Modbus) en stuurt dat door. De
reverse-engineering heeft die registerkaart gedocumenteerd, dus we weten welke waarden beschikbaar zijn,
ook al is de verzending versleuteld. Het is dezelfde soort data als bij Growatt, inclusief de
velden die je aanwezigheid verraden: huishoudelijk verbruik, batterijvermogen en laadtoestand.
Toon de Solis-meetwaarden (uit reverse-engineering)
Bron: de ginlong-solis reverse-engineering
(Modbus-registerkaart). De stick verstuurt dit versleuteld, dus de exacte selectie op de draad is niet
zelf gemeten; de beschikbaarheid van de velden wel.
Waar het heen gaat
Solis-bestemmingen. Opslag in Frankfurt, maar de telemetrie en de naam-opzoeking
raken China. Alle IP's zelf geverifieerd.
Server
Rol
IP
Hosting / land
*.iot-as-mqtt.*.aliyuncs.com
telemetrie van de stick (MQTT/TLS)
47.100.127.192
Alibaba Shanghai, CN
public1/2.alidns.com
hardcoded DNS in de stick
2400:3200:baba::1
Alibaba China, CN
soliscloud.com / ginlongcloud.com
app en portal
47.245.156.227
Alibaba
*.oss-eu-central-1.aliyuncs.com
opslag
(Frankfurt)
Alibaba Frankfurt, EU
De stick stuurt zijn metingen via MQTT over TLS naar Alibaba's IoT-platform.
In tegenstelling tot Growatt is dit verkeer wel versleuteld onderweg, wat een echt pluspunt is.
Maar de stick zoekt servernamen op via een vast ingebouwde Chinese DNS
(public1/2.alidns.com), en de geanalyseerde firmware koos een dataserver in
Shanghai. De opslag staat in Frankfurt, het verkeer en de naamopzoeking lopen via China.
De stick zelf is een open kastje
De wifi-stick draait een kleine webserver voor de installatie, bereikbaar op een vast adres
(10.10.100.254). Daar vielen een paar dingen op die de moeite waard zijn:
Een vast standaardwachtwoord (123456789) staat letterlijk in de
pagina, voor iedereen die fysiek of via wifi bij het kastje kan.
Een instelling om de meetdata naar een zelfgekozen extra server door te sturen. Handig voor
wie het naar zichzelf wil sturen, maar ook een doorgeefluik dat standaard naar de fabrikant wijst.
Een aparte Nederland-specifieke installatiestap in de paginastructuur, wat laat zien dat de
NL-markt expliciet wordt bediend.
De jurisdictie-spanning
Solis stelt dat klantdata in een ISO 27001-datacenter in Frankfurt staat, conform de AVG, en Alibaba
Frankfurt is inderdaad aantoonbaar in gebruik. Tegelijk loopt de naam-opzoeking via Alibaba China en koos
de geanalyseerde firmware een broker in Shanghai. De data in rust kan dus in de EU staan terwijl de
besturings- en naamopzoeklaag China raakt. Bovendien valt de exploitant, Ginlong, onder Chinees recht.
Of dat voor jou een probleem is, mag je zelf wegen; het punt is dat die keuze nu impliciet voor je
gemaakt wordt.
De app: SolisCloud
SolisCloud is geen gewone app maar een hybride schil gebouwd op het mobiele platform van Ant
(Alipay), het betaalconcern van Alibaba. Dat het op Ant draait is geen vermoeden: in de app zit een
configuratiebestand met een Alipay-app-identificatie (ALIPUBBE6BD07051653).
De app vraagt 34 permissions, waaronder locatie, camera en de microfoon, en draagt
AI-modellen aan boord voor beeld- en spraakherkenning. Dat is veel toegang voor een app die alleen
je zonnepanelen hoort te tonen. In de app staan bovendien vaste server-adressen hardgecodeerd, waaronder
een in Shanghai (47.102.211.126).
SDK / component
Partij
Functie
Ant / Alipay mPaaS
Ant Group / Alibaba (CN)
het hele mobiele platform
DCloud uni-app
DCloud (CN)
hybride app-framework
On-device AI (Yolo_V5)
ingebed model
beeldherkenning via de camera
On-device spraakmodel
ingebed model
audio via de microfoon
AMap
Alibaba (CN)
kaarten en locatie
Tencent-kaart
Tencent (CN)
kaarten
Google Maps
Google (US)
kaarten
Eerlijk over de grenzen. Omdat de Solis-stroom versleuteld is en er geen publieke
firmware is, is het Solis-beeld iets minder hard dan dat van Growatt. Wat ik zelf heb gemeten: de
bestemmingen, de IP-adressen, de app-binnenkant en de configuratiepagina van de stick. Wat uit
reverse-engineering en documentatie komt: de precieze meetwaarden op de draad en de claim over Frankfurt.
De bestemming is wel hard te bevestigen door het netwerkverkeer van de stick passief mee te lezen, zonder
de versleuteling te breken.
Growatt of Solis: wat is beter?
Kort gezegd: geen van beide is veilig uit zichzelf, en ze schuiven de afweging op verschillende
plekken weg. Solis versleutelt het verkeer onderweg, een echt pluspunt, maar is geslotener en de app
graait meer. Growatt is transparanter en volledig te controleren, maar verstuurt onversleuteld en doet
geen EU-belofte. Voor jou maakt het verschil minder uit dan je zou denken: de oplossing is voor beide
hetzelfde, namelijk de stick eruit of lokaal monitoren.
Aspect
Growatt
Solis
Versleuteling onderweg
Geen: alleen XOR met een publiek sleutelwoord
Wel: MQTT over TLS
Solis beter
Firmware controleerbaar
Ja, openbaar en onversleuteld
Nee, gesloten (alleen via reverse-engineering)
Growatt beter
Opslaglocatie
Intl, VS en China; geen EU-belofte
Frankfurt-claim, maar DNS en MQTT via China
App-indringendheid
Veel externe SDK's, locatie en camera
Nog meer: Ant mPaaS, microfoon en AI-modellen
Growatt beter
Bediening op afstand
Ja, instellingen via het protocol
Ja, firmware-updates op afstand
Lokaal alternatief
grott: data blijft op je netwerk
ESPHome: stick volledig lokaal
Stick eruit, panelen blijven werken
Ja
Ja
De Nederlandse context
Tot zover de techniek. Maar hoe groot is dit eigenlijk in Nederland, en doet er iemand iets aan? Dit
deel zet de bevindingen in de bredere context, met een eerlijke scheiding tussen wat hard is en wat
schatting blijft.
Hoe groot is dit hier?
De installatiebasis is enorm. De officiele cijfers van CBS en Netbeheer Nederland:
Indicator
Waarde
Peildatum
Huishoudens met zonnepanelen
~3 miljoen (≈35% van alle huishoudens)
eind 2024
Totaal aantal pv-installaties
~3,3 miljoen
eind 2024
Nieuw geplaatst in 2024
~412.000 installaties
2024
Opgesteld paneelvermogen
28,6 GWp (59% bij bedrijven)
eind 2024
Growatt en Solis zijn geen niche-merken. In de onafhankelijke mondiale ranglijst over 2024 (Wood
Mackenzie) staat Solis op plek 3 en Growatt op plek 4; negen van de tien grootste
omvormerleveranciers ter wereld zijn Chinees, en de particuliere markt is hun kernsegment, precies het
segment dat in Nederland zo groot is.
Toch is het eerlijke antwoord op "hoeveel staan er in Nederland": niemand weet het precies, ook de
overheid niet. Er bestaat geen register dat omvormers naar merk telt. Marktmodellen schatten het
gezamenlijke aandeel van Growatt, GoodWe en Solis op 20 tot 25 procent, maar dat zijn gemodelleerde
cijfers, geen tellingen. Een ruwe ordegrootte-reconstructie uit installatiebasis maal geschat
marktaandeel komt uit op enkele honderdduizenden tot ruim een half miljoen Growatt- en
Solis-omvormers bij huishoudens. Behandel dat als bandbreedte, niet als meting.
De overheid noemt dit een nationaal-veiligheidsdossier
Het Nederlandse overheidsoptreden rond Chinese omvormers loopt al sinds 2022, en het bevestigt precies
de risico's uit dit stuk, vooral het risico dat iemand op afstand kan ingrijpen.
2022Na berichten dat circa een miljoen omvormers via een gelekt wachtwoord kwetsbaar waren (platform Solarman), stelt de VVD Kamervragen. Agentschap Telecom (nu RDI) krijgt onderzoeksopdracht.
2023De RDI test negen omvormers van acht fabrikanten. Geen enkele voldeed aan de RED 3.3-richtlijn. Ze bleken eenvoudig te hacken, op afstand uit te schakelen of in te zetten voor DDoS-aanvallen.
2024RVO laat Secura en Topsector Energie vervolgonderzoek doen. Aanleiding mede een Nederlandse ethische hacker die aantoonde 4 miljoen zonnesystemen in 150 landen te kunnen overnemen.
2025Na Reuters-berichten over niet-gedocumenteerde communicatiecomponenten in Chinese omvormers stellen CDA-Kamerleden opnieuw vragen, en vragen expliciet hoeveel er in Nederland staan. Het kabinet antwoordt dat dit niet kan worden vastgesteld.
De RDI-uitkomst is veelzeggend: van de negen geteste omvormers voldeed geen enkele aan de norm,
en ze waren op afstand uit te schakelen of in te zetten voor aanvallen. Een Nederlandse ethische hacker
toonde aan miljoenen systemen te kunnen overnemen. En op de directe vraag hoeveel Chinese omvormers er in
Nederland staan, antwoordt het kabinet dat dat niet kan worden vastgesteld. Litouwen heeft
inmiddels het gebruik boven een bepaalde capaciteit verboden.
Wat de nieuwe regels gaan eisen
Er komt regelgeving aan die precies dit adresseert:
RED 3.3 (Radio Equipment Directive) stelt cybersecurity als markttoegangseis voor draadloos
verbonden apparaten; omvormers vallen hieronder.
Cyber Resilience Act stelt eisen aan de omvormer en de app en de clouddienst. De
gegevensverwerking op afstand moet beschreven staan, en de toezichthouder kan toegang tot het
cloudplatform vorderen.
NIS2 geeft meer energiebedrijven meld- en zorgplichten, inclusief toeleveranciersrisico.
Precies het type bevinding uit dit onderzoek (onversleutelde verzending bij Growatt, cloud op Alibaba,
DNS en broker die China raken) kan onder die regels straks markttoegang blokkeren. De ongemakkelijke
kanttekening: het bestaande geinstalleerde bestand valt er grotendeels buiten. Die omvormers staan
al op het dak, en blijven daar.
Hoe hard is elke laag? verantwoording
Laag
Hardheid
Beste bron
Installatiebasis NL (~3 mln huishoudens)
Hard
CBS, Netbeheer Nederland
Mondiale ranglijst (Solis #3, Growatt #4)
Hard
Wood Mackenzie
Overheidsoptreden en regelgeving
Hard
Kamerstukken, RDI, Secura
NL-marktaandeel per merk (20-25%)
Zacht (gemodelleerd)
IndexBox, Grand View
Absoluut aantal Growatt/Solis in NL
Schatting (afgeleid)
eigen reconstructie
Bronnen onder meer: CBS en Netbeheer Nederland
(installatiebasis), Wood Mackenzie (mondiale ranglijst), Tweede Kamer / RDI / Secura (overheidsoptreden),
IndexBox en Grand View (marktaandeel, gemodelleerd). Peildatum cijfers overwegend eind 2024.
Zelf nameten voor de technisch ingestelde
De Growatt-stroom is lokaal te onderscheppen zonder cloud-account. De dongle zoekt de naam
server.growatt.com op, dus wie die naam op het thuisnetwerk naar een eigen
computer laat wijzen, ziet alle berichten. Een hulpprogramma uit het onderliggende dossier ontcijfert de
XOR-versluiering en leest de 50 velden uit; de data verlaat je netwerk dan niet meer. Voor Solis is de
bestemming passief te bevestigen door het netwerkverkeer van de stick mee te lezen.
Hoe betrouwbaar is dit. De bestemmingen, IP-adressen en het Growatt-protocol
zijn eigen meting (juni 2026). De inhoud van de versleutelde Solis-stroom en de claim over Frankfurt
leunen op documentatie en zijn als zodanig gemarkeerd. Firmware en servers kunnen wijzigen; behandel dit
als richting voor je eigen controle, niet als een vaststaand eindoordeel.
Bronnen en verantwoording
De technische bevindingen (bestemmingen, IP-adressen, het Growatt-protocol, de app-binnenkant) zijn eigen meting van juni 2026. De Nederlandse cijfers en het overheidsoptreden komen uit de volgende openbare bronnen.
RDI, Onderzoek storingsproblematiek en cyberveiligheid omvormers (2023): geen van negen geteste omvormers voldeed aan de cyberveiligheidseisen. rdi.nl
Tweede Kamer, beantwoording Kamervragen 2025Z09993 over geheime componenten in Chinese omvormers (7 juli 2025). rijksoverheid.nl
Solar Magazine, Kamervragen over beveiligingsrisico's Chinese omvormers (mei 2025). solarmagazine.nl
Security.NL, Rijksinspectie: groot deel omvormers kwetsbaar voor cyberaanvallen (2023). security.nl
CBS en Netbeheer Nederland, statistiek zonnepanelen en installatiebasis (peildatum eind 2024). cbs.nl, netbeheernederland.nl
Wood Mackenzie, Global PV inverter shipments 2024 (589 GWac): Solis op plek 3, Growatt op plek 4.
Reverse-engineering-referenties: het open project grott (Growatt-protocol) en ginlong-solis (Solis S3-stick).
Marktaandeel- en absolute aantallen voor Nederland zijn modelschattingen, behandel ze als ordegrootte. De installatiebasis en het overheidsoptreden zijn hard.
geverifieerdnotitiezekerRTB, adtech en brokersbronnenverwant
Je advertentie-ID gaat ongefilterd de veiling in
Bij een huizen-app gaat het advertentienummer van je toestel ongefilterd de advertentieveiling in. Partijen die identiteiten koppelen hangen daar een koopprofiel aan, en een koopprofiel is kwetsbaar voor prijsdiscriminatie. Je zoekt een huis met een naamplaatje om.
bronnen
Eigen onderzoeksdossier: funda, 2026-06-22het advertentie-ID gaat mee de biedstroom in, statisch aangetoond
gepubliceerdnotitiezekerSoftware en apparatenverwant
Geen internet-permissie, geen probleem
Het tegenvoorbeeld bestaat. Een app zonder internet-permissie die alles in een lokale database bewaart, is oprecht privacyvriendelijk. De gevoelige gegevens verlaten het toestel simpelweg niet. Het kan dus wel.
Een cyclus-app weet wanneer je ongesteld bent, wanneer je vruchtbaar bent, of je probeert zwanger te worden, en vaak ook wanneer je seks hebt gehad. Dat is precies het soort gegeven waarvan je wilt weten waar het terechtkomt. Ik heb de Android-versie van drie populaire apps ontleed en in één onderzoek naast elkaar gelegd.
Lees dit eerst. Dit is een statische analyse van juni 2026, aangevuld met een controle of de gevonden bestemmingen live zijn. Ik heb niet ingelogd en niet live meegekeken met het verkeer. Ik heb de apps zelf uit elkaar gehaald: het installatiebestand, de rechten die ze vragen, de bibliotheken die erin zitten en de adressen die in de code staan. Dat vertelt je waar een app voor gebouwd is en met wie het kan praten. Het vertelt je niet of elke regel ook precies op moment X afgaat. Dat verschil benoem ik overal.
Alle drie apps vragen de advertentie-identifier van je toestel. Daarna lopen ze ver uiteen.
Clue houdt de rest grotendeels in Europa en draagt geen advertentienetwerk en geen Meta-SDK. Flo legt een echte privacy-laag aan, maar bundelt tegelijk de SDK's van Meta, TikTok, AppsFlyer en Google, en vraagt de meest intieme gezondheidsrechten. Clover stuurt analytics, login en betalingen tot in Rusland. En in geen van de drie zit een herkenbaar toestemmingsframework.
Wat je toevertrouwt
Het gaat niet om je grootste nieuws, maar om je gewoonste
Het beeld bij gezondheidsapps is vaak: straks weten ze dat je zwanger bent. Maar de echte reikwijdte is breder, en ongemakkelijker. Wie een kinderwens heeft, of gewoon haar cyclus volgt, houdt veel meer bij dan een paar data. Deze apps vragen, dag na dag, hoe zwaar je menstruatie is, of je seks had en of het beschermd was, of er een orgasme was, hoe je libido is, je stemming, je krampen, je cervixslijm, je temperatuur.
En die gegevens blijven niet liggen waar je ze invoert. In de advertentie- en databroker-economie ben je geen persoon, maar een doelgroep. Zo zou je eruit kunnen zien:
audience_export_NL.xlsxdoelgroep · Nederland
Vrouw · had gisteren seks, niet klaargekomen
afgeleid signaal
Buy profile
1.284 bought this already
Vrouw · probeert zwanger te worden
100.000 profielen
Buy profile
3.907 bought this already
Vrouw · waarschijnlijk binnenkort zwanger
voorspeld
Buy profile
612 bought this already
Bereikbare doelgroep± 1.500.000 vrouwen
Ter illustratie. Geen echte export uit Clue, Flo of Clover, maar de logica van de doelgroep-handel die hun trackers met data voeden.
Het schrijnende zit niet in één dramatisch moment. Het zit in het gewone, verhandelbaar gemaakt. Niet "ze weten mijn grootste nieuws", maar "ik sta te koop als vrouw die gisteren seks had". Dat is wat niemand op straat wil hebben liggen. En toch schrijft Flo "seksuele activiteit" via Health Connect weg, zwart op wit in de rechten die de app vraagt.
Van techniek naar betekenis
Wat er weggaat, en wat het over je zegt
De volledige lijst, vertaald van techniek naar betekenis. Links wat er vertrekt, rechts wat iemand daaruit kan aflezen over jou en je leven.
Wat er weggaat
Wat het over jou zegt
Wat je invoert, naar de eigen backend (bij Flo deels via Health Connect)
Menstruatiedagen en hoeveelheid
je cyclus en of die regelmatig is, een hint over je gezondheid
Vruchtbare dagen en ovulatie
of en wanneer je vruchtbaar bent
Seks, en of het beschermd was
je seksleven en je seksfrequentie
Orgasme en libido
intieme details over je seksualiteit
Zwanger proberen, zwanger, of verloren
je kinderwens, een zwangerschap, of een miskraam of abortus
Anticonceptie
of en hoe je voorbehoedsmiddelen gebruikt
Stemming, klachten, pijn
je mentale en lichamelijke gezondheid, dag na dag
Identiteit en apparaat, naar de SDK's van Google, Meta, en bij Clover Yandex en VK
De advertentie-ID van je toestel
koppelt al je gedrag aan een herkenbaar profiel
Account- en inloggegevens
koppelt het cyclusprofiel aan jou als persoon
App-gebruik en gebeurtenissen
wanneer en hoe je de app gebruikt, je dagritme
Crash- en sessiedata
technisch, soms een beeld van je scherm
Attributie: welke advertentie je binnenbracht
welke campagne je raakte, voor gerichte reclame
Op zichzelf zegt "late menstruatie" of "stemming somber" weinig. De waarde, en het risico, zit in de optelsom: een getimed, intiem beeld van je lichaam en je relatie, gekoppeld aan een naam en een toestel.
Waarom dit anders is
Niet alleen privacy. Autonomie.
Een vrouw vertrouwt een cyclus-app iets toe wat ze misschien niet eens met haar werkgever, haar ouders, de overheid, haar verzekeraar of haar partner zou delen. En die app kan dat behandelen als handelswaar. Daar zit een dubbele schending.
Eerst wordt iets extreem intiems verzameld: wanneer je menstrueert, wanneer je vruchtbaar bent, of je seks hebt, of je zwanger probeert te worden, of je het bent geweest, je klachten, je pijn, je stemmingen, je anticonceptie, misschien een miskraam of een abortus. Daarna kan diezelfde informatie uit de context worden getrokken. Jij voert het in als zelfzorg. Buiten je zicht kan het een profiel worden dat commercieel, politiek, medisch, juridisch of zelfs geopolitiek bruikbaar is.
De wrangheid: wat bedoeld is om een vrouw meer regie over haar lichaam te geven, kan juist het instrument worden waarmee anderen iets over haar lichaam te weten komen. In jouw telefoon betekent een late menstruatie stress, of een kinderwens, of angst. In een datasysteem wordt het een signaal dat een vreemde mag duiden. En in situaties waar zwangerschap, abortus of seksualiteit politiek, religieus of juridisch beladen zijn, is zulke data niet neutraal. Dan wordt informatie over je lichaam macht over jou.
Een cyclus-app belooft: begrijp je lichaam.
Achter de schermen kan ze ook iets anders betekenen: maak je lichaam begrijpelijk voor anderen. De meest persoonlijke vorm van zelfkennis, omgezet in bezit van onbekenden.
Wat ze delen
Drie apps, en toch dezelfde advertentie-ID
De drie apps verschillen sterk, maar twee dingen hebben ze gemeen. Geen van de drie vraagt een locatiepermissie, dat is netjes. En alle drie vragen wel de advertentie-identifier (AD_ID) en de attributie-rechten van Androids Privacy Sandbox. Ook Clue, de app met de beste privacyreputatie, doet dat in de actuele versie, terwijl een oudere versie die ik ernaast legde dat recht nog niet vroeg. De advertentie-ID is het unieke nummer waarmee je toestel herkenbaar is voor advertentiedoeleinden. Dat een cyclus-app dat nummer opvraagt, is geen kleinigheid.
Het echte verschil zit in hoeveel derde partijen er meeluisteren. Ik heb per app geteld hoeveel externe diensten gegevens kunnen ontvangen, op basis van de ingebouwde bibliotheken. Het verschil is groot.
Clue4
Braze, Adjust, Datadog, Firebase
Flo6
Firebase, AppsFlyer, TikTok, Meta, Sentry, Auth0
Clover12
vier advertentienetwerken, Adjust, Amplitude, Firebase, Meta, Yandex, VK, YooMoney, SberPay
Externe diensten per app. Het aantal derde partijen dat gegevens kan ontvangen, geteld uit de bibliotheken in de app. Clue draagt er vier, Clover twaalf.
En er is iets wat in geen van de drie zit: een herkenbaar toestemmingsframework. Ik vond in geen enkele app een Consent Management Platform of de IAB-standaard voor transparantie en toestemming (geen Didomi, OneTrust, Usercentrics, Sourcepoint of Google UMP). Dat betekent dat de toestemmingsvraag, voor zover die er is, in de app zelf wordt afgehandeld en niet als gestandaardiseerd signaal naar de advertentiepartners wordt doorgegeven. Voor een categorie zo gevoelig als deze is dat een opvallende leegte.
De kaart
Het meeste gaat naar de VS, bij Clover ook naar Rusland
Alle drie apps sturen tracking en telemetrie naar verwerkers onder Amerikaans recht: Google en Firebase bij alle drie, en afhankelijk van de app ook Meta, TikTok, AppsFlyer, Braze, Datadog, Sentry, Auth0 en Amplitude. Clue houdt zijn functionele inhoud daarbij in de EU. Clover voegt er een hele laag aan toe die in Rusland eindigt.
De datastromen. Petrol is functioneel en blijft in Europa. De oranje bogen zijn tracking richting de Verenigde Staten, bij alle drie apps. De gestippelde rode bogen zijn de Russische laag, en die zit alleen in Clover. Bestemmingen geverifieerd via DNS, IP-geolocatie en het TLS-certificaat van de ontvanger.
Endpoints van Google worden via anycast vaak op een Europese rand-server geraakt, dus fysiek reist je data soms niet de oceaan over. Maar de partij die de gegevens ontvangt en verwerkt is het buitenlandse moederbedrijf, en dat valt onder buitenlands recht. Voor de vraag wie er bij je data kan, telt de verwerker, niet alleen de plek van de kabel.
Clue
BioWink, Berlijn. De soberste stack. Eigen API in de EU, gepind. Geen advertentienetwerk, geen Meta. Wel sinds kort de advertentie-ID. EUVS
Flo
Flo Health, VS. Privacy-laag via Anonymous Mode, maar met Meta, TikTok, AppsFlyer en Google aan boord. De breedste gezondheidsrechten. VS
Clover
Wachanga. Vier advertentienetwerken plus een complete Russische laag: Yandex, VK, YooMoney, SberPay. EUVSRU
App 01
Clue, de soberste, maar niet leeg
Clue maakt zijn reputatie grotendeels waar. De inhoud, je cyclus en symptomen, gaat naar een eigen API (api.helloclue.com) die op Amazon-infrastructuur in Europa draait, en die verbinding is extra beveiligd: de app pint het certificaat met vijf vingerafdrukken, zodat onderschepping veel moeilijker wordt. Artikelen komen via een contentdienst binnen. Er zit geen advertentienetwerk in, en geen Meta-SDK.
Jouw toestelClue 256.0
→
api.helloclue.comeigen API, AWS EUContentfulcontentAdjustattributie, DEBrazeengagement, VSDatadogmonitoring, VSFirebase / GA4Google, VS
Clue. Petrol blijft in Europa, oranje gaat naar de VS. De tracking-laag is beperkt tot engagement, attributie en monitoring.
Toch is sober niet hetzelfde als leeg. Clue draagt een marketing- en meetlaag mee die naar Amerikaanse bedrijven wijst: Braze voor klantbenadering, op een datacenter aan de Amerikaanse oostkust, Datadog voor monitoring, en de Firebase- en Google Analytics-bouwstenen. Attributie loopt via Adjust, dat zijn servers in Duitsland heeft. De app vraagt sinds kort ook de advertentie-ID en leest een beperkte set biometrie via Health Connect (hartslagvariabiliteit, rusthartslag, huidtemperatuur, slaap, gewicht), maar uitsluitend lezen, en niet de menstruatie- of seksuele-activiteit-categorieën. Het beeld: de privacyvriendelijkste van de drie, maar ook hier deelt de app gedrag en engagement met Amerikaanse verwerkers.
Bewijs. In de code aangetroffen: com/braze (477 class-referenties), com/adjust/sdk (246), com/datadog (53), Firebase en GA4. Endpoints: sdk.iad-01.braze.com (Braze, VS-oost), app.adjust.com (Adjust GmbH, Duitsland), api.helloclue.com (AWS, EU, certificaat gepind). Geen Meta-SDK aangetroffen.
Toon alle diensten en endpoints van Clue
Dienst of endpoint
Wat het doet
Waar
api.helloclue.com
eigen API: cyclus, symptomen, account (certificaat gepind)
Permissies: advertentie-ID plus AdServices-attributie, biometrie, push, install-referrer, Play Billing. Geen locatie, geen Meta-SDK.
App 02
Flo, een privacy-laag bovenop een brede tracker-set
Flo is het interessantste geval, want het trekt twee kanten op tegelijk. Na een schikking met de Amerikaanse toezichthouder FTC in 2021, over het delen van gezondheidsdata met onder andere Facebook en Google, investeerde Flo zichtbaar in privacy. De app heeft een Anonymous Mode die telemetrie via een speciale gateway stuurt, een techniek waarbij Flo de gegevens niet aan een IP-adres of identiteit kan koppelen. Die gateway is er echt en antwoordt live.
Flo. De eigen backend en alle trackers staan onder Amerikaanse jurisdictie. De privacy-gateway is een laag bovenop diezelfde infrastructuur.
Tegelijk draagt diezelfde app in 2026 nog steeds de SDK's van Meta, TikTok, AppsFlyer en Google mee, plus Sentry voor crashes en Auth0 voor inloggen. En Flo vraagt de breedste, gevoeligste set rechten van de drie. Via Health Connect leest het negentien categorieën, waaronder menstruatie, tussentijdse bloedingen, cervixslijm, ovulatietesten en seksuele activiteit, en het schrijft er zes terug, waaronder opnieuw seksuele activiteit, cervixslijm en ovulatietesten. De spanning is dus reëel: de verzendinfrastructuur naar advertentie- en analytics-partijen zit ingebouwd, en de privacy-laag bepaalt hoeveel daarvan herleidbaar blijft. Welke van de twee wint bij een concrete handeling, is precies wat een statische analyse niet kan beslissen.
Bewijs. In de code aangetroffen: androidx/health/connect (1068 class-referenties, lezen 19 plus schrijven 6 categorieën inclusief seksuele activiteit), io/sentry (1046), com/appsflyer (477), Firebase en GA4 (452), com/tiktok (127), com/facebook (98), com/auth0 (82). De privacy-gateway ohttp-gateway-bhttp-public.owhealth.com antwoordt live (HTTP 200). Backend owhealth.com onder Amerikaanse jurisdictie.
Permissies: advertentie-ID plus AdServices, activity recognition, basic phone state, biometrie, en Huawei- en Samsung-integraties.
App 03
Clover, advertenties plus een Russische laag
Clover is een gratis app die op advertenties draait, en dat is in de code goed te zien. Er zitten vier advertentienetwerken in: Google AdMob, met aanvulling via AppLovin, ironSource en Fyber. Daarnaast Adjust voor attributie, Amplitude en Firebase voor analytics, en de Meta-SDK. Voor een gevoelige gezondheidsapp is dat al een volle commerciële stapel.
Clover. Naast de Amerikaanse advertentie- en analytics-laag staat een complete Russische laag: analytics, sociale login en twee betaalsystemen.
Daarbovenop staat iets wat ik bij de andere twee niet zag: een uitgebreide Russische laag. De app bevat Yandex AppMetrica voor analytics, VK voor sociale login, en de volledige account- en betaal-SDK's van YooMoney en SberPay. De bijbehorende adressen draaien op typisch Russische webservers, wat de operators bevestigt. De app staat bovendien onversleuteld verkeer toe naar een YooMoney-domein, een uitzondering op het verder versleutelde geheel. En er zit een ingebouwde, merk-gesponsorde vragenlijst in: een complete Kotex-flow die naar je cyclus vraagt. Of de Russische componenten bij een Nederlandse gebruiker actief worden, hangt af van regio en server-instellingen, maar de code wordt onverkort meegeleverd. Het is de breedste jurisdictie-spreiding van de drie, in de meest gevoelige datacategorie.
Bewijs. In de code aangetroffen: ru/yoomoney (7006 class-referenties), io/appmetrica (Yandex, 2041), gms/ads (AdMob, 673) met aanvulling via AppLovin, ironSource en Fyber, com/adjust/sdk (268), SberPay via gate1.spaymentsplus.ru, com/vk (29), com/facebook (26). Cleartext toegestaan naar certs.yoomoney.ru. Resources bevatten een Kotex-vragenlijst (kotex_assessment_*).
Toon alle diensten en endpoints van Clover
Dienst of endpoint
Wat het doet
Waar
cdn.wachanga.app
eigen CDN (Caddy)
Hetzner, DE
AdMob googleads.g.doubleclick.net, plus AppLovin, ironSource, Fyber
advertenties en mediation (673)
VS
Adjust app.adjust.com
attributie (268)
DE
Amplitude
analytics
VS/EU
Firebase / GA4
analytics (608 + 460)
VS
Meta / Facebook-SDK
events (26)
VS
Yandex AppMetrica appmetrica.io
analytics (2041)
RU
VK id.vk.com
sociale login (29)
RU
YooMoney, YooKassa, SberPay spaymentsplus.ru
betalingen en account (7006 + 344)
RU
Permissies: advertentie-ID plus AdServices en de Topics-API, READ_PHONE_STATE. Cleartext toegestaan naar certs.yoomoney.ru. Ingebouwde Kotex-vragenlijst.
Naast elkaar
De vergelijking
Clue
Flo
Clover
Identiteit en rechten
Maker
BioWink (DE)
Flo Health (VS)
Wachanga
Advertentie-ID
ja
ja
ja, plus Topics-API
Locatie
nee
nee
nee
Health Connect
lezen, beperkt
lezen 19, schrijven 6, incl. seksuele activiteit
geen
Tracking en geld
Advertentienetwerk
geen
geen
vier
Meta-SDK
nee
ja
ja
TikTok-SDK
nee
ja
nee
Attributie
Adjust (DE)
AppsFlyer (VS)
Adjust (DE)
Analytics
Firebase, Braze, Datadog
Firebase, Sentry
Firebase, Amplitude, Yandex
Login en betalen
eigen, Play Billing
Auth0, Play Billing
VK, YooMoney, SberPay
Governance
Toestemmingsframework
geen
geen
geen
Cert-pinning eigen API
ja, 5 pins
niet zichtbaar
nee
Jurisdicties
EUVS
VS
EUVSRU
Zelf doen
Wat je kunt doen zonder je app op te geven
Kies bewust. Wil je het soberst, dan is Clue van de drie de minst vergaande: geen advertentienetwerk, geen Meta-SDK, en je inhoud blijft in Europa.
Reset je advertentie-ID. Alle drie apps vragen die identifier. In de Android-instellingen onder Privacy kun je hem wissen, en je kunt gepersonaliseerde advertenties helemaal uitzetten.
Wees zuinig met Health Connect. Vooral bij Flo bepaalt Health Connect hoeveel intieme categorieën de app mag lezen en schrijven. Geef alleen toegang tot wat je echt nodig hebt, en trek het later weer in als je twijfelt.
Gebruik de privacymodus als die er is. Flo's Anonymous Mode bestaat echt en helpt. Zet hem aan als je Flo gebruikt.
Denk na over de gevoeligste invoer. Een app die niet weet of je zwanger probeert te worden, kan dat ook niet doorgeven. Niet alles hoeft erin.
Conclusie
Drie apps voor dezelfde, uiterst gevoelige taak, en drie heel verschillende antwoorden op de vraag waar je data heen gaat. Clue houdt het Europees en sober, al vraagt ook deze app inmiddels de advertentie-ID. Flo bouwt een echte privacy-laag, maar bovenop een infrastructuur die nog vol zit met de SDK's van advertentie- en socialmediabedrijven, en het vraagt de meest intieme gezondheidsrechten. Clover spreidt analytics, login en betalingen uit over drie jurisdicties, tot in Rusland, en draagt vier advertentienetwerken mee.
Geen van deze keuzes is een ongeluk, het is hoe de apps zijn gebouwd. En het is precies het soort keuze dat iemand die elke dag haar cyclus invoert zou moeten kunnen wegen. Dit dossier legt die keuzes naast elkaar op tafel.
Addendum, 12 juni 2026
Bestaat er dan wél een veilige? Ja: drip.
drip. kan je gegevens niet doorverkopen, want de app kan ze technisch niet eens versturen.
De logische vervolgvraag op dit dossier is: is er dan een menstruatie-app die het wél goed doet? Die is er. drip. is gratis, open source, en gemaakt door een non-profit (Heart of Code). Ik heb hem op dezelfde manier ontleed, en ook echt op een testtelefoon laten draaien.
Het verschil met Clue, Flo en Clover zit in één detail dat alles bepaalt: drip vraagt niet eens toestemming om het internet te gebruiken. Een Android-app die dat recht niet heeft, kan geen enkele verbinding naar buiten openen. Geen advertentienetwerk, geen analytics, geen server in de VS of Rusland, want er is simpelweg geen weg naar buiten. Op de testtelefoon verstuurde de app dan ook nul bytes, terwijl dat toestel verder gewoon online was.
Alles wat je invoert, van menstruatie tot temperatuur, seks en stemming, blijft in een database op je eigen telefoon. Geen account, geen advertentie-ID, geen cloud, en geen enkele meet- of reclamebibliotheek in de app. Je kunt drip op slot zetten met een pincode en je gegevens laten versleutelen. En omdat de broncode openbaar is, kan iedereen dit zelf nakijken in plaats van een privacybelofte te moeten geloven.
Eerlijk over de keerzijde. drip is soberder van opzet: er is geen synchronisatie tussen apparaten en geen cloud-back-up, dus raak je je telefoon kwijt zonder eerst te exporteren, dan ben je je gegevens kwijt. En je data staat standaard onversleuteld op het toestel; zet de pincode en versleuteling zelf aan als je dat wilt. Een back-up maak je met de exportknop, en jij bepaalt waar dat bestand heen gaat.
Methode en reproductie
Onderzocht: Clue 256.0 (com.clue.android), Flo 9.106.0 (org.iggymedia.periodtracker) en Clover 7.32.1 (com.wachanga.womancalendar), Android, actuele releases. Statisch: het manifest en de resources zijn met apktool gedecodeerd (rechten, exported componenten, deeplinks, network-security-config), en de SDK-inventaris en endpoints zijn uit de dex-bestanden gehaald via class-signatuur-matching en string-extractie. Dynamisch, zonder toestel: elke ontdekte bestemming is via DNS opgezocht, gegeolokaliseerd, en geverifieerd met een live HTTP-respons en het TLS-certificaat van de operator. Niet gedaan: een ingelogde, live verkeersmeting die laat zien welke velden op welk moment vuren. De aantallen class-referenties zijn een maat voor het gewicht van een bibliotheek in de code, geen verkeersmeting. De apps zijn legaal verkregen en op een eigen omgeving geanalyseerd.
Verantwoording. Statische APK-analyse met endpoint-verificatie, juni 2026. Bevindingen reproduceerbaar; serverlocaties geverifieerd op het moment van schrijven. Onderzoek via mickbeer.com.
Een cyclus-app weet wanneer je vruchtbaar bent, of je seks had en of je zwanger wilt worden. Bij een deel van die apps zit naast die intieme kennis de code van reclamebedrijven en soms buitenlandse diensten. De gevoeligste gegevens in het minst bewaakte hoekje van je telefoon.
"Een cyclus-app belooft: begrijp je lichaam. Achter de schermen kan ze ook iets anders betekenen: maak je lichaam begrijpelijk voor anderen." Ik onderzocht drie apps statisch (APK) plus live endpoint-verificatie: Clue 256.0, Flo 9.106.0 en Clover 7.32.1. Alle drie vragen het advertentie-ID (AD_ID); geen van drie vraagt locatiepermissie.
Clue is sober en EU-gericht: api.helloclue.com (AWS EU, certificaat gepind), geen Meta-SDK. Flo legt een privacylaag over een adtech-fundament: de app leest 19 en schrijft 6 Health Connect-categorieen, waaronder seksuele activiteit, en praat met analytics.us.tiktok.com. Clover (Wachanga) draagt een complete Russische laag: Yandex AppMetrica, VK en YooMoney voor betalingen (gate1.spaymentsplus.ru), met cleartext-verkeer naar certs.yoomoney.ru.
"In de advertentie- en databroker-economie ben je geen persoon, maar een doelgroep." En concreet: "Niet 'ze weten mijn grootste nieuws', maar 'ik sta te koop als vrouw die gisteren seks had'." Dat is het intiemste dat er is, omgezet in een verkoopbaar segment.
Het tegenbewijs is de open-source app drip.: die vraagt geen internet-permissie en verstuurde tijdens de meting nul bytes. "drip. kan je gegevens niet doorverkopen, want de app kan ze technisch niet eens versturen." Niet doorverkopen is niet een belofte, maar een technische onmogelijkheid.
Weerklank: ook dit stuk bereikte een groot publiek, met 533.000 impressies en circa 4.000 interacties op LinkedIn.
Een cyclus-app weet wanneer je ongesteld bent, wanneer je vruchtbaar bent, of je probeert zwanger te worden, en vaak ook wanneer je seks hebt gehad. Dat is precies het soort gegeven waarvan je wilt weten waar het terechtkomt. Ik heb de Android-versie van drie populaire apps ontleed en in één onderzoek naast elkaar gelegd.
Lees dit eerst. Dit is een statische analyse van juni 2026, aangevuld met een controle of de gevonden bestemmingen live zijn. Ik heb niet ingelogd en niet live meegekeken met het verkeer. Ik heb de apps zelf uit elkaar gehaald: het installatiebestand, de rechten die ze vragen, de bibliotheken die erin zitten en de adressen die in de code staan. Dat vertelt je waar een app voor gebouwd is en met wie het kan praten. Het vertelt je niet of elke regel ook precies op moment X afgaat. Dat verschil benoem ik overal.
Alle drie apps vragen de advertentie-identifier van je toestel. Daarna lopen ze ver uiteen.
Clue houdt de rest grotendeels in Europa en draagt geen advertentienetwerk en geen Meta-SDK. Flo legt een echte privacy-laag aan, maar bundelt tegelijk de SDK's van Meta, TikTok, AppsFlyer en Google, en vraagt de meest intieme gezondheidsrechten. Clover stuurt analytics, login en betalingen tot in Rusland. En in geen van de drie zit een herkenbaar toestemmingsframework.
Wat je toevertrouwt
Het gaat niet om je grootste nieuws, maar om je gewoonste
Het beeld bij gezondheidsapps is vaak: straks weten ze dat je zwanger bent. Maar de echte reikwijdte is breder, en ongemakkelijker. Wie een kinderwens heeft, of gewoon haar cyclus volgt, houdt veel meer bij dan een paar data. Deze apps vragen, dag na dag, hoe zwaar je menstruatie is, of je seks had en of het beschermd was, of er een orgasme was, hoe je libido is, je stemming, je krampen, je cervixslijm, je temperatuur.
En die gegevens blijven niet liggen waar je ze invoert. In de advertentie- en databroker-economie ben je geen persoon, maar een doelgroep. Zo zou je eruit kunnen zien:
audience_export_NL.xlsxdoelgroep · Nederland
Vrouw · had gisteren seks, niet klaargekomen
afgeleid signaal
Buy profile
1.284 bought this already
Vrouw · probeert zwanger te worden
100.000 profielen
Buy profile
3.907 bought this already
Vrouw · waarschijnlijk binnenkort zwanger
voorspeld
Buy profile
612 bought this already
Bereikbare doelgroep± 1.500.000 vrouwen
Ter illustratie. Geen echte export uit Clue, Flo of Clover, maar de logica van de doelgroep-handel die hun trackers met data voeden.
Het schrijnende zit niet in één dramatisch moment. Het zit in het gewone, verhandelbaar gemaakt. Niet "ze weten mijn grootste nieuws", maar "ik sta te koop als vrouw die gisteren seks had". Dat is wat niemand op straat wil hebben liggen. En toch schrijft Flo "seksuele activiteit" via Health Connect weg, zwart op wit in de rechten die de app vraagt.
Van techniek naar betekenis
Wat er weggaat, en wat het over je zegt
De volledige lijst, vertaald van techniek naar betekenis. Links wat er vertrekt, rechts wat iemand daaruit kan aflezen over jou en je leven.
Wat er weggaat
Wat het over jou zegt
Wat je invoert, naar de eigen backend (bij Flo deels via Health Connect)
Menstruatiedagen en hoeveelheid
je cyclus en of die regelmatig is, een hint over je gezondheid
Vruchtbare dagen en ovulatie
of en wanneer je vruchtbaar bent
Seks, en of het beschermd was
je seksleven en je seksfrequentie
Orgasme en libido
intieme details over je seksualiteit
Zwanger proberen, zwanger, of verloren
je kinderwens, een zwangerschap, of een miskraam of abortus
Anticonceptie
of en hoe je voorbehoedsmiddelen gebruikt
Stemming, klachten, pijn
je mentale en lichamelijke gezondheid, dag na dag
Identiteit en apparaat, naar de SDK's van Google, Meta, en bij Clover Yandex en VK
De advertentie-ID van je toestel
koppelt al je gedrag aan een herkenbaar profiel
Account- en inloggegevens
koppelt het cyclusprofiel aan jou als persoon
App-gebruik en gebeurtenissen
wanneer en hoe je de app gebruikt, je dagritme
Crash- en sessiedata
technisch, soms een beeld van je scherm
Attributie: welke advertentie je binnenbracht
welke campagne je raakte, voor gerichte reclame
Op zichzelf zegt "late menstruatie" of "stemming somber" weinig. De waarde, en het risico, zit in de optelsom: een getimed, intiem beeld van je lichaam en je relatie, gekoppeld aan een naam en een toestel.
Waarom dit anders is
Niet alleen privacy. Autonomie.
Een vrouw vertrouwt een cyclus-app iets toe wat ze misschien niet eens met haar werkgever, haar ouders, de overheid, haar verzekeraar of haar partner zou delen. En die app kan dat behandelen als handelswaar. Daar zit een dubbele schending.
Eerst wordt iets extreem intiems verzameld: wanneer je menstrueert, wanneer je vruchtbaar bent, of je seks hebt, of je zwanger probeert te worden, of je het bent geweest, je klachten, je pijn, je stemmingen, je anticonceptie, misschien een miskraam of een abortus. Daarna kan diezelfde informatie uit de context worden getrokken. Jij voert het in als zelfzorg. Buiten je zicht kan het een profiel worden dat commercieel, politiek, medisch, juridisch of zelfs geopolitiek bruikbaar is.
De wrangheid: wat bedoeld is om een vrouw meer regie over haar lichaam te geven, kan juist het instrument worden waarmee anderen iets over haar lichaam te weten komen. In jouw telefoon betekent een late menstruatie stress, of een kinderwens, of angst. In een datasysteem wordt het een signaal dat een vreemde mag duiden. En in situaties waar zwangerschap, abortus of seksualiteit politiek, religieus of juridisch beladen zijn, is zulke data niet neutraal. Dan wordt informatie over je lichaam macht over jou.
Een cyclus-app belooft: begrijp je lichaam.
Achter de schermen kan ze ook iets anders betekenen: maak je lichaam begrijpelijk voor anderen. De meest persoonlijke vorm van zelfkennis, omgezet in bezit van onbekenden.
Wat ze delen
Drie apps, en toch dezelfde advertentie-ID
De drie apps verschillen sterk, maar twee dingen hebben ze gemeen. Geen van de drie vraagt een locatiepermissie, dat is netjes. En alle drie vragen wel de advertentie-identifier (AD_ID) en de attributie-rechten van Androids Privacy Sandbox. Ook Clue, de app met de beste privacyreputatie, doet dat in de actuele versie, terwijl een oudere versie die ik ernaast legde dat recht nog niet vroeg. De advertentie-ID is het unieke nummer waarmee je toestel herkenbaar is voor advertentiedoeleinden. Dat een cyclus-app dat nummer opvraagt, is geen kleinigheid.
Het echte verschil zit in hoeveel derde partijen er meeluisteren. Ik heb per app geteld hoeveel externe diensten gegevens kunnen ontvangen, op basis van de ingebouwde bibliotheken. Het verschil is groot.
Clue4
Braze, Adjust, Datadog, Firebase
Flo6
Firebase, AppsFlyer, TikTok, Meta, Sentry, Auth0
Clover12
vier advertentienetwerken, Adjust, Amplitude, Firebase, Meta, Yandex, VK, YooMoney, SberPay
Externe diensten per app. Het aantal derde partijen dat gegevens kan ontvangen, geteld uit de bibliotheken in de app. Clue draagt er vier, Clover twaalf.
En er is iets wat in geen van de drie zit: een herkenbaar toestemmingsframework. Ik vond in geen enkele app een Consent Management Platform of de IAB-standaard voor transparantie en toestemming (geen Didomi, OneTrust, Usercentrics, Sourcepoint of Google UMP). Dat betekent dat de toestemmingsvraag, voor zover die er is, in de app zelf wordt afgehandeld en niet als gestandaardiseerd signaal naar de advertentiepartners wordt doorgegeven. Voor een categorie zo gevoelig als deze is dat een opvallende leegte.
De kaart
Het meeste gaat naar de VS, bij Clover ook naar Rusland
Alle drie apps sturen tracking en telemetrie naar verwerkers onder Amerikaans recht: Google en Firebase bij alle drie, en afhankelijk van de app ook Meta, TikTok, AppsFlyer, Braze, Datadog, Sentry, Auth0 en Amplitude. Clue houdt zijn functionele inhoud daarbij in de EU. Clover voegt er een hele laag aan toe die in Rusland eindigt.
De datastromen. Petrol is functioneel en blijft in Europa. De oranje bogen zijn tracking richting de Verenigde Staten, bij alle drie apps. De gestippelde rode bogen zijn de Russische laag, en die zit alleen in Clover. Bestemmingen geverifieerd via DNS, IP-geolocatie en het TLS-certificaat van de ontvanger.
Endpoints van Google worden via anycast vaak op een Europese rand-server geraakt, dus fysiek reist je data soms niet de oceaan over. Maar de partij die de gegevens ontvangt en verwerkt is het buitenlandse moederbedrijf, en dat valt onder buitenlands recht. Voor de vraag wie er bij je data kan, telt de verwerker, niet alleen de plek van de kabel.
Clue
BioWink, Berlijn. De soberste stack. Eigen API in de EU, gepind. Geen advertentienetwerk, geen Meta. Wel sinds kort de advertentie-ID. EUVS
Flo
Flo Health, VS. Privacy-laag via Anonymous Mode, maar met Meta, TikTok, AppsFlyer en Google aan boord. De breedste gezondheidsrechten. VS
Clover
Wachanga. Vier advertentienetwerken plus een complete Russische laag: Yandex, VK, YooMoney, SberPay. EUVSRU
App 01
Clue, de soberste, maar niet leeg
Clue maakt zijn reputatie grotendeels waar. De inhoud, je cyclus en symptomen, gaat naar een eigen API (api.helloclue.com) die op Amazon-infrastructuur in Europa draait, en die verbinding is extra beveiligd: de app pint het certificaat met vijf vingerafdrukken, zodat onderschepping veel moeilijker wordt. Artikelen komen via een contentdienst binnen. Er zit geen advertentienetwerk in, en geen Meta-SDK.
Jouw toestelClue 256.0
→
api.helloclue.comeigen API, AWS EUContentfulcontentAdjustattributie, DEBrazeengagement, VSDatadogmonitoring, VSFirebase / GA4Google, VS
Clue. Petrol blijft in Europa, oranje gaat naar de VS. De tracking-laag is beperkt tot engagement, attributie en monitoring.
Toch is sober niet hetzelfde als leeg. Clue draagt een marketing- en meetlaag mee die naar Amerikaanse bedrijven wijst: Braze voor klantbenadering, op een datacenter aan de Amerikaanse oostkust, Datadog voor monitoring, en de Firebase- en Google Analytics-bouwstenen. Attributie loopt via Adjust, dat zijn servers in Duitsland heeft. De app vraagt sinds kort ook de advertentie-ID en leest een beperkte set biometrie via Health Connect (hartslagvariabiliteit, rusthartslag, huidtemperatuur, slaap, gewicht), maar uitsluitend lezen, en niet de menstruatie- of seksuele-activiteit-categorieën. Het beeld: de privacyvriendelijkste van de drie, maar ook hier deelt de app gedrag en engagement met Amerikaanse verwerkers.
Bewijs. In de code aangetroffen: com/braze (477 class-referenties), com/adjust/sdk (246), com/datadog (53), Firebase en GA4. Endpoints: sdk.iad-01.braze.com (Braze, VS-oost), app.adjust.com (Adjust GmbH, Duitsland), api.helloclue.com (AWS, EU, certificaat gepind). Geen Meta-SDK aangetroffen.
Toon alle diensten en endpoints van Clue
Dienst of endpoint
Wat het doet
Waar
api.helloclue.com
eigen API: cyclus, symptomen, account (certificaat gepind)
Permissies: advertentie-ID plus AdServices-attributie, biometrie, push, install-referrer, Play Billing. Geen locatie, geen Meta-SDK.
App 02
Flo, een privacy-laag bovenop een brede tracker-set
Flo is het interessantste geval, want het trekt twee kanten op tegelijk. Na een schikking met de Amerikaanse toezichthouder FTC in 2021, over het delen van gezondheidsdata met onder andere Facebook en Google, investeerde Flo zichtbaar in privacy. De app heeft een Anonymous Mode die telemetrie via een speciale gateway stuurt, een techniek waarbij Flo de gegevens niet aan een IP-adres of identiteit kan koppelen. Die gateway is er echt en antwoordt live.
Flo. De eigen backend en alle trackers staan onder Amerikaanse jurisdictie. De privacy-gateway is een laag bovenop diezelfde infrastructuur.
Tegelijk draagt diezelfde app in 2026 nog steeds de SDK's van Meta, TikTok, AppsFlyer en Google mee, plus Sentry voor crashes en Auth0 voor inloggen. En Flo vraagt de breedste, gevoeligste set rechten van de drie. Via Health Connect leest het negentien categorieën, waaronder menstruatie, tussentijdse bloedingen, cervixslijm, ovulatietesten en seksuele activiteit, en het schrijft er zes terug, waaronder opnieuw seksuele activiteit, cervixslijm en ovulatietesten. De spanning is dus reëel: de verzendinfrastructuur naar advertentie- en analytics-partijen zit ingebouwd, en de privacy-laag bepaalt hoeveel daarvan herleidbaar blijft. Welke van de twee wint bij een concrete handeling, is precies wat een statische analyse niet kan beslissen.
Bewijs. In de code aangetroffen: androidx/health/connect (1068 class-referenties, lezen 19 plus schrijven 6 categorieën inclusief seksuele activiteit), io/sentry (1046), com/appsflyer (477), Firebase en GA4 (452), com/tiktok (127), com/facebook (98), com/auth0 (82). De privacy-gateway ohttp-gateway-bhttp-public.owhealth.com antwoordt live (HTTP 200). Backend owhealth.com onder Amerikaanse jurisdictie.
Permissies: advertentie-ID plus AdServices, activity recognition, basic phone state, biometrie, en Huawei- en Samsung-integraties.
App 03
Clover, advertenties plus een Russische laag
Clover is een gratis app die op advertenties draait, en dat is in de code goed te zien. Er zitten vier advertentienetwerken in: Google AdMob, met aanvulling via AppLovin, ironSource en Fyber. Daarnaast Adjust voor attributie, Amplitude en Firebase voor analytics, en de Meta-SDK. Voor een gevoelige gezondheidsapp is dat al een volle commerciële stapel.
Clover. Naast de Amerikaanse advertentie- en analytics-laag staat een complete Russische laag: analytics, sociale login en twee betaalsystemen.
Daarbovenop staat iets wat ik bij de andere twee niet zag: een uitgebreide Russische laag. De app bevat Yandex AppMetrica voor analytics, VK voor sociale login, en de volledige account- en betaal-SDK's van YooMoney en SberPay. De bijbehorende adressen draaien op typisch Russische webservers, wat de operators bevestigt. De app staat bovendien onversleuteld verkeer toe naar een YooMoney-domein, een uitzondering op het verder versleutelde geheel. En er zit een ingebouwde, merk-gesponsorde vragenlijst in: een complete Kotex-flow die naar je cyclus vraagt. Of de Russische componenten bij een Nederlandse gebruiker actief worden, hangt af van regio en server-instellingen, maar de code wordt onverkort meegeleverd. Het is de breedste jurisdictie-spreiding van de drie, in de meest gevoelige datacategorie.
Bewijs. In de code aangetroffen: ru/yoomoney (7006 class-referenties), io/appmetrica (Yandex, 2041), gms/ads (AdMob, 673) met aanvulling via AppLovin, ironSource en Fyber, com/adjust/sdk (268), SberPay via gate1.spaymentsplus.ru, com/vk (29), com/facebook (26). Cleartext toegestaan naar certs.yoomoney.ru. Resources bevatten een Kotex-vragenlijst (kotex_assessment_*).
Toon alle diensten en endpoints van Clover
Dienst of endpoint
Wat het doet
Waar
cdn.wachanga.app
eigen CDN (Caddy)
Hetzner, DE
AdMob googleads.g.doubleclick.net, plus AppLovin, ironSource, Fyber
advertenties en mediation (673)
VS
Adjust app.adjust.com
attributie (268)
DE
Amplitude
analytics
VS/EU
Firebase / GA4
analytics (608 + 460)
VS
Meta / Facebook-SDK
events (26)
VS
Yandex AppMetrica appmetrica.io
analytics (2041)
RU
VK id.vk.com
sociale login (29)
RU
YooMoney, YooKassa, SberPay spaymentsplus.ru
betalingen en account (7006 + 344)
RU
Permissies: advertentie-ID plus AdServices en de Topics-API, READ_PHONE_STATE. Cleartext toegestaan naar certs.yoomoney.ru. Ingebouwde Kotex-vragenlijst.
Naast elkaar
De vergelijking
Clue
Flo
Clover
Identiteit en rechten
Maker
BioWink (DE)
Flo Health (VS)
Wachanga
Advertentie-ID
ja
ja
ja, plus Topics-API
Locatie
nee
nee
nee
Health Connect
lezen, beperkt
lezen 19, schrijven 6, incl. seksuele activiteit
geen
Tracking en geld
Advertentienetwerk
geen
geen
vier
Meta-SDK
nee
ja
ja
TikTok-SDK
nee
ja
nee
Attributie
Adjust (DE)
AppsFlyer (VS)
Adjust (DE)
Analytics
Firebase, Braze, Datadog
Firebase, Sentry
Firebase, Amplitude, Yandex
Login en betalen
eigen, Play Billing
Auth0, Play Billing
VK, YooMoney, SberPay
Governance
Toestemmingsframework
geen
geen
geen
Cert-pinning eigen API
ja, 5 pins
niet zichtbaar
nee
Jurisdicties
EUVS
VS
EUVSRU
Zelf doen
Wat je kunt doen zonder je app op te geven
Kies bewust. Wil je het soberst, dan is Clue van de drie de minst vergaande: geen advertentienetwerk, geen Meta-SDK, en je inhoud blijft in Europa.
Reset je advertentie-ID. Alle drie apps vragen die identifier. In de Android-instellingen onder Privacy kun je hem wissen, en je kunt gepersonaliseerde advertenties helemaal uitzetten.
Wees zuinig met Health Connect. Vooral bij Flo bepaalt Health Connect hoeveel intieme categorieën de app mag lezen en schrijven. Geef alleen toegang tot wat je echt nodig hebt, en trek het later weer in als je twijfelt.
Gebruik de privacymodus als die er is. Flo's Anonymous Mode bestaat echt en helpt. Zet hem aan als je Flo gebruikt.
Denk na over de gevoeligste invoer. Een app die niet weet of je zwanger probeert te worden, kan dat ook niet doorgeven. Niet alles hoeft erin.
Conclusie
Drie apps voor dezelfde, uiterst gevoelige taak, en drie heel verschillende antwoorden op de vraag waar je data heen gaat. Clue houdt het Europees en sober, al vraagt ook deze app inmiddels de advertentie-ID. Flo bouwt een echte privacy-laag, maar bovenop een infrastructuur die nog vol zit met de SDK's van advertentie- en socialmediabedrijven, en het vraagt de meest intieme gezondheidsrechten. Clover spreidt analytics, login en betalingen uit over drie jurisdicties, tot in Rusland, en draagt vier advertentienetwerken mee.
Geen van deze keuzes is een ongeluk, het is hoe de apps zijn gebouwd. En het is precies het soort keuze dat iemand die elke dag haar cyclus invoert zou moeten kunnen wegen. Dit dossier legt die keuzes naast elkaar op tafel.
Addendum, 12 juni 2026
Bestaat er dan wél een veilige? Ja: drip.
drip. kan je gegevens niet doorverkopen, want de app kan ze technisch niet eens versturen.
De logische vervolgvraag op dit dossier is: is er dan een menstruatie-app die het wél goed doet? Die is er. drip. is gratis, open source, en gemaakt door een non-profit (Heart of Code). Ik heb hem op dezelfde manier ontleed, en ook echt op een testtelefoon laten draaien.
Het verschil met Clue, Flo en Clover zit in één detail dat alles bepaalt: drip vraagt niet eens toestemming om het internet te gebruiken. Een Android-app die dat recht niet heeft, kan geen enkele verbinding naar buiten openen. Geen advertentienetwerk, geen analytics, geen server in de VS of Rusland, want er is simpelweg geen weg naar buiten. Op de testtelefoon verstuurde de app dan ook nul bytes, terwijl dat toestel verder gewoon online was.
Alles wat je invoert, van menstruatie tot temperatuur, seks en stemming, blijft in een database op je eigen telefoon. Geen account, geen advertentie-ID, geen cloud, en geen enkele meet- of reclamebibliotheek in de app. Je kunt drip op slot zetten met een pincode en je gegevens laten versleutelen. En omdat de broncode openbaar is, kan iedereen dit zelf nakijken in plaats van een privacybelofte te moeten geloven.
Eerlijk over de keerzijde. drip is soberder van opzet: er is geen synchronisatie tussen apparaten en geen cloud-back-up, dus raak je je telefoon kwijt zonder eerst te exporteren, dan ben je je gegevens kwijt. En je data staat standaard onversleuteld op het toestel; zet de pincode en versleuteling zelf aan als je dat wilt. Een back-up maak je met de exportknop, en jij bepaalt waar dat bestand heen gaat.
Methode en reproductie
Onderzocht: Clue 256.0 (com.clue.android), Flo 9.106.0 (org.iggymedia.periodtracker) en Clover 7.32.1 (com.wachanga.womancalendar), Android, actuele releases. Statisch: het manifest en de resources zijn met apktool gedecodeerd (rechten, exported componenten, deeplinks, network-security-config), en de SDK-inventaris en endpoints zijn uit de dex-bestanden gehaald via class-signatuur-matching en string-extractie. Dynamisch, zonder toestel: elke ontdekte bestemming is via DNS opgezocht, gegeolokaliseerd, en geverifieerd met een live HTTP-respons en het TLS-certificaat van de operator. Niet gedaan: een ingelogde, live verkeersmeting die laat zien welke velden op welk moment vuren. De aantallen class-referenties zijn een maat voor het gewicht van een bibliotheek in de code, geen verkeersmeting. De apps zijn legaal verkregen en op een eigen omgeving geanalyseerd.
Verantwoording. Statische APK-analyse met endpoint-verificatie, juni 2026. Bevindingen reproduceerbaar; serverlocaties geverifieerd op het moment van schrijven. Onderzoek via mickbeer.com.
beginselnotitieOverheid, toezicht en de wetbronnenverwant
Een pasfoto is juridisch nog geen biometrisch gegeven
Een gewone foto wordt pas een biometrisch gegeven nadat ze met techniek is verwerkt tot een gezichtstemplate voor unieke identificatie. Tot die verwerking is het gewoon een afbeelding. Die nuance moet in een privacyverhaal kloppen, anders staat de kern op los zand.
bronnen
AVG, artikel 4 lid 14 en artikel 9 lid 1biometrie geldt pas als de verwerking is gericht op unieke identificatie
Data in Nederland kan toch onder Amerikaans recht vallen
Waar data staat en welk recht erop geldt zijn twee dingen. Een dienst die in Nederland host maar onder een Amerikaanse moeder valt, brengt die data onder de Amerikaanse wet. Voor de gebruiker telt niet de serverlocatie maar de nationaliteit van de eigenaar.
De wet waar het om draait heet voluit de Clarifying Lawful Overseas Use of Data Act, aangenomen als Division V van de Consolidated Appropriations Act, 2018, Public Law 115-141, ondertekend op 23 maart 2018, 132 Stat. 1213. De kernbepaling staat in titel 18 van de US Code, paragraaf 2713, en luidt:
A provider of electronic communication service or remote computing
service shall comply with the obligations of this chapter to preserve,
backup, or disclose the contents of a wire or electronic communication
and any record or other information pertaining to a customer or
subscriber within such provider's possession, custody, or control,
regardless of whether such communication, record, or other information
is located within or outside of the United States.
Let op de vier woorden die het werk doen: "possession, custody, or control". De vordering grijpt aan op zeggenschap. Waar de schijf staat, is in die zin niet het aanknopingspunt.
Dat is het hele mechanisme. De rest van dit stuk gaat over wat je ermee doet.
In mijn dossier over TicketTrigger, de toegangsdienst bij Sparta, van 15 juli 2026, kwam die scheiding scherp naar voren. De opslag liep via een Azure-edge in Amsterdam. De contracterende entiteit hoorde bij een Amerikaanse moeder. Het ging om een verplichte app met een documentlezer, met eMRTD en RFID, en een machineleesbare zone die het burgerservicenummer draagt.
Wat ik daar wel vaststelde: de opslagregio was Nederland en de zeggenschap was Amerikaans. Wat ik daar niet vaststelde: wat er precies in de payload zat. De dynamische meting kwam niet rond door een architectuurfout aan de serverkant, dus over de inhoud van het verkeer doe ik geen uitspraak. Zie Een aanwijzing is nog geen bewijs.
Die twee zinnen naast elkaar zijn precies de discipline die dit onderwerp vraagt. Het is verleidelijk om van een Amerikaanse moeder en een paspoortlezer een derde zin te maken die ik niet kan dragen.
Een .nl-domein zegt niets, en een EU-server ook niet altijd¶
De meting van 14 juli 2026 levert vier voorbeelden die de twee assen los van elkaar laten zien.
partij pre-consent waar de servers stonden
rovid.nl 48 van 48 US (62 waarnemingen)
frcapi.com 19 van 19 DE (30 waarnemingen)
piwik.pro 70 van 72 US 59, SE 9, BE 1
facebook.net 11 van 17 BE (23 waarnemingen)
rijksoverheid.nl 668 van 669 BE (667 waarnemingen)
rovid.nl is een Nederlandse naam met Amerikaanse servers. facebook.net is het spiegelbeeld: een Amerikaans bedrijf met servers in België. piwik.pro is een Europese leverancier waarvan de waarnemingen over drie landen verspreid liggen, met de meeste in de Verenigde Staten.
Over de hele meting verdeelden de serverwaarnemingen zich zo:
De Europese ontsnappingsroute, en waar die vandaag staat¶
Dit is het deel dat het snelst veroudert, dus het krijgt een datum.
Het Hof van Justitie verklaarde op 16 juli 2020 in Schrems II, zaak C-311/18, het Privacy Shield ongeldig. De kern: de Amerikaanse toegangsbevoegdheden zijn "not limited to what is strictly necessary" en betrokkenen hebben geen "actionable rights before the courts against the US authorities". Standaardcontractbepalingen blijven geldig, mits per geval getoetst en aangevuld waar het recht van het ontvangende land tekortschiet.
Daarna kwam uitvoeringsbesluit (EU) 2023/1795 van 10 juli 2023, het adequaatheidsbesluit onder het EU-US Data Privacy Framework. Dat besluit is op 25 juli 2026 nog steeds van kracht. De stand van zaken eromheen:
3 sep 2025 Gerecht wijst zaak T-553/23 (Latombe) af, uitdrukkelijk
beoordeeld naar de stand op 10 juli 2023
31 okt 2025 Latombe stelt hoger beroep in, zaak C-703/25 P, aanhangig
27 jan 2025 PCLOB verliest quorum na ontslagen
29 jun 2026 US Supreme Court, Trump v. Slaughter (25-332, 6-3),
verwerpt de ontslagbescherming van FTC-commissarissen
30 jun 2026 noyb vraagt de Commissie het besluit in te trekken
De praktische samenvatting: het besluit staat, en de onderbouwing eronder is in beweging. Twee van de drie pijlers waarop de Commissie het adequaatheidsoordeel bouwde, onafhankelijk toezicht door de PCLOB en handhaving door de FTC, staan ter discussie.
Wie vandaag een contract tekent dat op het adequaatheidsbesluit leunt, moet dus een scenario hebben voor het geval het besluit valt. Dat is geen alarmisme. Het is precies wat er in 2015 met Safe Harbor en in 2020 met Privacy Shield gebeurde.
Er bestaat een route waarlangs de Verenigde Staten gegevens via een verdrag kunnen opvragen, in plaats van rechtstreeks bij het bedrijf. Die staat in titel 18 van de US Code, paragraaf 2523: executive agreements.
Er zijn er per juli 2026 twee. Verenigde Staten met het Verenigd Koninkrijk, in werking op 3 oktober 2022, en Verenigde Staten met Australië, in werking op 30 januari 2024. Er is geen EU-VS-overeenkomst en geen NL-VS-overeenkomst. De onderhandelingen over elektronisch bewijs lopen sinds 2019 en zijn niet afgerond.
Voor een Nederlandse afnemer betekent dat het volgende. De vordering loopt rechtstreeks bij het bedrijf, zonder tussenkomst van een Nederlandse rechter en zonder dat jij het hoeft te horen.
En daarmee komen we bij de grens van wat papier kan. Een verwerkersovereenkomst bindt de leverancier jegens jou. Een Amerikaans bevel bindt dezelfde leverancier jegens de Amerikaanse staat. Bij een botsing beslist een Amerikaanse rechter, en jouw contract is daar hooguit een omstandigheid. Dat is de reden dat clausules over "wij geven nooit gegevens aan overheden" hier weinig waarde hebben.
Vijf vragen. Ze verplaatsen de discussie van geruststelling naar iets controleerbaars.
1. met welke juridische entiteit contracteer ik, en wie is de
uiteindelijke moeder?
2. waar staan de bytes, en wie beheert de versleutelingssleutels?
3. publiceert de leverancier een transparantierapport met aantallen
overheidsvorderingen, uitgesplitst per land?
4. bestaat er een technische maatregel waardoor de leverancier zelf
niet bij de inhoud kan?
5. wat is het beleid bij een geheimhoudingsbevel, en wat kan de
leverancier mij dan wel melden?
Vraag 4 is de enige die het probleem echt verkleint. Een leverancier die de sleutels niet heeft, kan bij een vordering weinig overhandigen. Alle andere vragen leveren informatie op, geen bescherming.
Bewijsniveaus, en waar dit argument te ver wordt getrokken¶
Ik houd hier drie niveaus streng uit elkaar.
Gemeten is de fysieke bestemming van het verkeer, via geolocatie van het ontvangende IP-adres. Dat cijfer is precies zo actueel als de database eronder. De 685 landtoewijzingen in mijn oudere dossiers kwamen uit een database van 17 december 2019, met de bijbehorende waarschuwing bij elk dossier. Die database is inmiddels vervangen en de oude labels zijn herberekend. Zie Een landlabel is zo oud als de database die het gaf.
Afgeleid is de zeggenschap. Die volgt uit eigendomsketens, publieke registraties en bestanden als sellers.json.
Vermoed is wat er bij een echt bevel gebeurt. Ik heb geen enkel geval gemeten waarin een Amerikaanse autoriteit gegevens van een Nederlandse burger bij een leverancier vorderde. Dit is een risico-argument, gebouwd op een wettekst, en het is uitdrukkelijk geen waarneming. Zie Label elke bevinding op bewijsniveau.
Twee dingen wil ik daarom expliciet niet beweren. Een EU-datacenter is waardevol: het verkort de fysieke route, het maakt dataminimalisatie eenvoudiger en het maakt een beroep op hoofdstuk V van de AVG minder scherp. Wie zegt dat EU-hosting betekenisloos is, overdrijft de andere kant op. En de aanwezigheid van een Amerikaanse moeder maakt een verwerking niet vanzelf onrechtmatig.
Dit hele betoog is juridisch zwaar en bewijstechnisch duur. Je moet eigendom aantonen, recht uitleggen en een risico wegen dat je niet hebt waargenomen.
De cookiewet vraagt maar één ding: is er opgeslagen of gelezen op de apparatuur van de gebruiker zonder toestemming vooraf. Dat is één meting en één artikel. Over de 1.718 gemeten overheidssites leverde de doorgiftevraag 539 bevindingen op onder hoofdstuk V van de AVG, en die staan allemaal onder het voorbehoud hierboven. De cookievraag leverde er 930 op onder artikel 11.7a alleen, zonder enig voorbehoud over eigendom of jurisdictie.
Of je online bent, lekt via de tijd tussen bericht en bevestiging
Door een verzoek naar een niet-bestaand berichtnummer te sturen en de tijd tot de bevestiging te meten, valt af te leiden of iemand online of actief is, zonder diens toestemming. Zulke stille aanwezigheids-lekken vragen geen inbraak, alleen een klok. Metadata over aanwezigheid is een categorie op zich.
bronnen
Eigen onderzoeksdossier: Careless Whisper, 2026-07-09timinglek in bezorgbevestigingen, arXiv 2411.11194, demonstrator voor de AP
geverifieerdessayzekerOverheid, toezicht en de wetbronnenverwant
Het cookietoezicht is geen papieren tijger meer
Cookie-toezicht is echt geworden. De toezichthouder scant sinds 2025 doorlopend duizenden sites, stuurt honderden waarschuwingen per jaar, en de meeste gewaarschuwde partijen passen zich aan.
Jarenlang was cookietoezicht in Nederland klachtgedreven. Iemand meldde iets, de toezichthouder keek, en of er iets gebeurde hing af van de stapel ervoor. Dat is veranderd.
De Autoriteit Persoonsgegevens schreef het op 8 april 2025 zelf op: "Dat doen we door constant en automatisch de cookiebanners van 10.000 websites te scannen om te checken of die duidelijk genoeg zijn." Vindplaats: AP, "Foute cookiebanners aangepast na ingrijpen AP", 8 april 2025. Het project Cookies en tracking waaronder dit valt, startte in 2024. April 2025 is de start van de scan- en waarschuwingsoperatie zelf.
Ik moet mijn eigen kern hier meteen bijstellen. Het getal van 500 waarschuwingen per jaar dat overal rondzingt, is een voornemen. De AP schreef op 15 april 2025 over "de eerste 50 van in totaal 500 organisaties die de AP elk jaar wil waarschuwen". Gerealiseerd waren er in november 2025 ruim 200. Een doel is iets anders dan een telling, en wie het doel als telling citeert, maakt het toezicht groter dan het is.
Driekwart past zich aan, en dat is het echte cijfer¶
Op 11 november 2025 publiceerde de AP de uitkomst: ongeveer driekwart van de gewaarschuwde websites paste de misleidende cookiebanner aan, en er is onderzoek gestart naar de weigeraars. Vindplaats: AP, "Driekwart websites past misleidende cookiebanner aan na waarschuwing, onderzoek gestart naar weigeraars", 11 november 2025.
Dat cijfer is interessanter dan een boete. Het zegt dat een brief bij de grote massa werkt. Het zegt ook waar het handhavingsdossier zit: bij het kwart dat de brief negeerde. Die groep is klein genoeg om echt te onderzoeken en groot genoeg om een norm mee te zetten.
Wie het cijfer citeert, moet er 80 procent van maken noch driekwart van afronden naar boven. Driekwart is wat er staat.
Wat een scan van tienduizend banners wel en niet ziet¶
Hier loopt mijn eigen werk naast dat van de toezichthouder, en het verschil is precies waar het interessant wordt.
Een bannerscan beoordeelt de banner. Is de weigerknop er, staat hij op gelijke hoogte, is de tekst duidelijk. Dat is een goede toets, en hij schaalt.
Mijn scan beoordeelt het verkeer. Wat gebeurde er voordat de bezoeker iets koos. Uit de meting van 14 juli 2026 over 1.718 Nederlandse overheidssites:
1.027 sites (59,8%) er stond al iets voor de eerste klik
1.636 sites er werd helemaal geen banner aangetroffen
82 sites er was wel een banner
Van die 82 sites met banner laadde op 73,2 procent al iets voor de vraag. Van de 1.636 zonder banner was dat 59,1 procent.
Lees die verhouding nog eens. Een instrument dat banners beoordeelt, zou op deze verzameling naar 82 van de 1.718 sites kijken. De overige 1.636 hebben geen banner om te beoordelen, en daar staat op bijna zes van de tien al iets voordat er iets te kiezen viel. Op 846 sites ging het om trackingcookies terwijl er geen cookiebanner werd aangetroffen.
Er zijn twee Nederlandse cookiegerelateerde boetes, allebei op AVG-grondslag.
AS Watson (Kruidvat) 600.000 euro 16 juli 2024
verlaagd naar 50.000 euro besluit op bezwaar, 12 juni 2025
Coolblue 40.000 euro 24 december 2024
De verlaging van Kruidvat is het detail dat zelden wordt meegeciteerd. Wie de 600.000 noemt zonder het besluit op bezwaar, noemt een bedrag dat sinds juni 2025 niet meer geldt.
Uit de scanoperatie zelf is tot 25 juli 2026 geen enkele boete gepubliceerd. De operatie draait dus vooralsnog op waarschuwingen.
Zet daar de maatstaf naast die ik elders al gebruikte. De boete voor DPG Media was 525.000 euro en werd na beroep definitief 262.500 euro. Bij een advertentie-omzet van 753 miljoen euro is dat ongeveer 86.000 euro per uur, dus ongeveer drie uur omzet. Zie Een boete is voor een groot bedrijf geen straf, maar een rekening.
De capaciteit voor dit toezicht staat in een Kamerbrief van staatssecretaris Van Huffelen van 28 september 2023, over toezicht en handhaving cookies en online tracking:
2024 tot en met 2026 500.000 euro per jaar startfase
vanaf 2027 350.000 euro per jaar structureel
Het geld komt van BZK, en het loopt in 2027 met dertig procent terug. Dat is een politieke keuze, geen natuurwet, en het is wel het getal waaraan je de rest moet afmeten. Een half miljoen euro per jaar staat tegenover een advertentiemarkt waarin een enkele uitgever honderden miljoenen omzet. Zie Wet en handhaving lopen achter op het geld.
Er zit een constructiefout in het Nederlandse cookietoezicht die de traagheid deels verklaart.
Artikel 11.7a van de Telecommunicatiewet is de bepaling die zegt dat je zonder toestemming niets op iemands apparaat mag opslaan of eruit lezen. Dat artikel valt formeel onder de Autoriteit Consument en Markt. De AVG valt onder de Autoriteit Persoonsgegevens. De AP schrijft dat zelf in haar ambtsbericht over Google Analytics van 13 november 2025, en zegt daarin ook dat zij nog onderzoekt "in hoeverre zij wat kan zeggen over welke cookies wel en niet onder de uitzondering kunnen vallen".
Dat betekent voor wie klaagt: de snelste juridische route, artikel 11.7a, ligt bij een andere toezichthouder dan de bekendste. Noem in een klacht daarom beide grondslagen en beide artikelen, zodat de zaak niet op een bevoegdheidsvraag strandt. Zie De cookiewet is de snelste toets die een meting kan halen.
De kans dat iemand kijkt is voor het eerst reëel. Dat is de praktische samenvatting van dit alles.
Voor een bouwer verandert daarmee de volgorde van het werk. De banner is niet meer het laatste vinkje voor oplevering. Hij is het eerste ding dat een geautomatiseerde scanner ziet. En de goedkoopste zelftest kost vijf minuten: open een schoon profiel, weiger, herlaad, en kijk of er iets veranderde. Op de sites zonder herkende toestemmingsmodule leverde die test in mijn meting bij 77,8 procent van de gevallen geen verschil op.
Drie dingen weet ik niet, en ze zijn allemaal relevant.
Ik weet niet welke tienduizend sites de AP scant. Er is geen publieke lijst. Ik kan dus niet nagaan of Nederlandse overheidssites in die verzameling zitten, en dat is precies de vraag die mij het meest interesseert. Zie De overheid knelt precies op de uitzondering waar ze zich op beroept.
Ik weet niet wat de AP technisch meet. "Of de banner duidelijk genoeg is" kan een DOM-analyse zijn of een volledige verkeersopname. Het verschil bepaalt of de 1.636 sites zonder banner uit mijn meting binnen of buiten hun bereik vallen.
En mijn cijfer over 2026 ontbreekt. De AP publiceerde in 2026 geen nieuw cookiebericht met aantallen. Het meest recente stuk met cijfers is het jaarverslag over 2025, verschenen op 2 april 2026. Alles wat ik hierboven over de omvang van de operatie zeg, gaat dus over 2025. Label dat als verouderd tot de volgende publicatie.
bronnen
Autoriteit Persoonsgegevens, controles op cookiebanners, 2023-2025de verschuiving van losse klachten naar geautomatiseerd scannen
geverifieerdessayzekerOverheid, toezicht en de wetbronnenverwant
Zonder geldige toestemming is de cookie onrechtmatig
De rechtspraak laat weinig ruimte. Een voorgevinkt vakje is geen toestemming, en cookies plaatsen zonder geldige toestemming is onrechtmatig. Toestemming moet vrij, specifiek, geinformeerd en ondubbelzinnig zijn, en even makkelijk in te trekken als te geven.
Wat al beslist is, zodat je het niet opnieuw hoeft te bewijzen¶
De vier eisen aan toestemming, vrij, specifiek, geïnformeerd en ondubbelzinnig, staan in artikel 4 lid 11 van de AVG en zijn elders in dit werk uitgewerkt. Dit stuk gaat over de stap daarna: hoe je van een overtuiging een dossier maakt.
Begin bij wat rechters al hebben vastgelegd, want dat scheelt je de helft van je bewijslast.
Planet49, Hof van Justitie van de Europese Unie, Grote kamer, 1 oktober 2019, zaak C-673/17, ECLI:EU:C:2019:801. Het Hof besliste drie dingen. Toestemming is niet rechtsgeldig gegeven "door middel van een standaard aangevinkt selectievakje dat deze gebruiker moet uitvinken ingeval hij weigert zijn toestemming te geven". De uitleg verschilt niet naargelang de opgeslagen of gelezen informatie al dan niet persoonsgegevens betreft. En de aanbieder moet informeren over de levensduur van de cookies en over de vraag of derden toegang hebben.
Dat tweede punt is voor een technisch dossier het belangrijkste. Je hoeft niet eerst te bewijzen dat er persoonsgegevens in het spel zijn. De vraag is of er is opgeslagen of gelezen.
Rechtbank Rotterdam, 19 november 2025, ECLI:NL:RBROT:2025:14138, zaaknummer C/10/677340 HA ZA 24-317. Dit is een civiele bodemprocedure die Criteo SA zelf aanspande tegen een particulier, en verloor. In reconventie kreeg de particulier een verklaring voor recht dat Criteo onrechtmatig jegens hem had gehandeld door zonder toestemming third party cookies te plaatsen, plus een verbod.
Voor een Nederlandse klager is dat de belangrijkste uitspraak van de afgelopen jaren. Een burger haalde bij de civiele rechter een verklaring voor recht binnen tegen een advertentiebedrijf, zonder tussenkomst van een toezichthouder.
Ter onderscheiding, want deze twee worden verward: de Franse toezichthouder CNIL legde Criteo op 15 juni 2023 een boete van 40 miljoen euro op, délibération SAN-2023-009. De Conseil d'État verwierp het beroep daartegen op 4 maart 2026, nummer 482872. Dat is een bestuursrechtelijke zaak in Frankrijk. De Rotterdamse zaak is civiel en Nederlands.
Een klacht die zegt "ze traceren mij" komt zelden ver. Hieronder staat de opbouw die wel standhoudt, in de volgorde waarin een beoordelaar hem leest.
0 de vraag, in één zin
1 het meetprotocol
2 de ruwe opnames
3 het manifest met hashes
4 het verschil tussen de drie modi
5 de juridische kwalificatie per bevinding
6 wat je uitdrukkelijk niet beweert
Onderdeel 1 is waar de meeste dossiers stuk gaan. Een meetprotocol dat een ander kan overdoen, bevat minstens dit:
de exacte URL, inclusief protocol en eventuele query
datum en tijdstip in UTC, met de bron van de klok
browser en versienummer
of het profiel vers was en of er extensies aanstonden
vanaf welke provider en welk land is gemeten
wat er precies is geklikt, in welke volgorde
hoe lang er is gewacht voordat de opname werd gestopt
Dat laatste is minder triviaal dan het klinkt. Een deel van het trackerverkeer komt pas los na scroll, na inloggen of na een schermovergang. Op 183 van de 1.718 gemeten overheidssites verschenen trackers pas na scroll of interactie. Op de NPI-set was dat 23 van de 32 sites. Zie Niet alles vuurt bij opstart, sommige trackers wachten op jou.
Onderdeel 3 is degene die iedereen overslaat. Bereken een SHA256-hash over elk ruw bestand en leg die vast met datum en tijd. Zonder die keten is je meting zes maanden later onverdedigbaar tegen "dat kan niet, wij hebben dat nooit gehad". Anker de hash aan de ruwe opname, want een latere analysestap kan afgeleide bestanden herschrijven en dan wijzen je hashes naar gegevens die niet meer bestaan. Zie Hoe mijn scanner werkt, van bezoek tot bewijsstuk en Netwerkverkeer lezen via HAR-files.
Eén meting kan een toevalstreffer zijn. Ik heb dat getoetst over vijf runs.
Van de sites die in drie of meer runs voorkwamen, 434 stuks, was het mediane verschil tussen de laagste en de hoogste meting 0,0. De typische site is dus stabiel. De staart is dat niet:
Wat je daarmee doet: meet minstens drie keer, rapporteer het bereik in plaats van één getal, en gebruik de laagste meting als ondergrens. Een tegenpartij die één afwijkende run laat zien, heeft dan niets in handen.
Zes dingen, in volgorde van hoe vaak ik ze mis zie gaan.
Je bent zelf betrokkene. Dit is de valkuil voor onderzoekers. Het Landgericht München I, dat op 20 januari 2022 nog schadevergoeding toekende in de Google Fonts-zaak, sneed op 30 maart 2023 in zaak 4 O 13063/22 de claimgolf af wegens ontbrekende "persönliche Betroffenheit" bij bezoeken die door een crawler waren gedaan, en wegens rechtsmisbruik onder paragraaf 242 BGB. Wie met een scanner meet en vervolgens namens zichzelf klaagt, moet de pagina ook zelf als mens hebben bezocht en dat kunnen laten zien.
Eén scherpe overtreding boven twintig vage. Artikel 11.7a lid 1 van de Telecommunicatiewet vraagt alleen of er is opgeslagen of gelezen zonder voorafgaande toestemming. Dat is de kortste route van meting naar norm. Zie De cookiewet is de snelste toets die een meting kan halen.
Voorafgaand contact. Uit mijn eigen inventarisatie van de AP-meldroutes van juli 2026: het klachtformulier vraagt om bewijs dat je de organisatie eerst zelf hebt benaderd. Zonder dat bewijs strandt de klacht op de vorm, ongeacht de inhoud. Bewaar dus je e-mail, de datum en het uitblijven van een antwoord.
De juiste ingang. Tracking is geen datalek. De toezichthouder stelt zelf dat gegevens die zonder toestemming met een andere organisatie zijn gedeeld, buiten de meldplicht datalekken vallen. Dat loopt via de klachtroute. Zie Tracking is niet meteen een datalek.
De juiste toezichthouder. Artikel 11.7a valt formeel onder de Autoriteit Consument en Markt, de AVG onder de Autoriteit Persoonsgegevens. De AP schrijft dat zelf in haar ambtsbericht over Google Analytics van 13 november 2025. Noem in je klacht beide grondslagen, zodat de zaak niet op een bevoegdheidsvraag blijft liggen. Zie Het cookietoezicht is geen papieren tijger meer.
Reproduceerbaar voor een derde. Als iemand anders jouw protocol kan volgen en op hetzelfde uitkomt, is het een bevinding. Anders is het een indruk. Zie ook De privacytoezichthouder maakte melden steeds moeilijker voor wat er daarna met je klacht gebeurt.
Een gemeten overtreding is nog geen bewezen schade¶
Dit is het onderscheid waarop de meeste privacyclaims sneuvelen, en het is de moeite waard om het precies te krijgen.
Een gemeten overtreding is een normschending. Er is opgeslagen of gelezen zonder toestemming vooraf. De bewijslast is de meting, en die kun jij leveren.
Schade is iets anders. Artikel 82 van de AVG geeft recht op vergoeding van materiële of immateriële schade, en het Hof van Justitie heeft de contouren daarvan in zes jaar vrij precies ingevuld:
C-300/21 Österreichische Post, 4 mei 2023
"the mere infringement (...) is not sufficient to confer a
right to compensation", en tegelijk verzet artikel 82 zich
tegen een nationale ernstdrempel
C-340/21 14 december 2023
vrees voor mogelijk misbruik "is capable, in itself, of
constituting non-material damage"; de bewijslast voor
passende beveiliging ligt bij de verantwoordelijke
C-456/22 Gemeinde Ummendorf, 14 december 2023
er is geen de-minimisdrempel; de betrokkene moet wel gevolgen
aantonen "which differs from the mere infringement"
C-687/21 MediaMarktSaturn, 25 januari 2024
uitsluitend compenserende functie; geen schade als vaststaat
dat de onbevoegde derde de gegevens nooit heeft ingezien
C-200/23 4 oktober 2024
controleverlies "for a limited period" volstaat, zonder
aanvullende tastbare gevolgen
C-655/23 Quirin Privatbank, 4 september 2025
"fear or annoyance" door controleverlies telt als
immateriële schade
Samengevat: je hebt een inbreuk nodig, schade, en causaal verband. Er is geen ernstdrempel, de lat ligt materieel laag, en hij ligt boven nul.
De maat waarop dit uitkomt, staat in de Google Fonts-zaak. Landgericht München I, Endurteil van 20 januari 2022, zaak 3 O 17493/20. Het dynamisch inladen van Google Fonts gaf het dynamische IP-adres van de bezoeker door aan Google zonder toestemming, zonder rechtvaardiging, want het lettertype kan lokaal worden gehost. Toegekend werd 100 euro op grond van artikel 82 lid 1 AVG, wegens het "Kontrollverlust des Klägers über ein personenbezogenes Datum an Google" en het daardoor gevoelde individuele onbehagen. Daarnaast kwam er een verbod met een dwangsom tot 250.000 euro en een bevel tot inzage.
Honderd euro. Dat is de orde van grootte voor één bezoeker en één lettertype. Het verbod woog juridisch zwaarder.
Wie schade claimt op grond van een meting alleen, verliest op het punt waar hij het sterkst stond. De meting toont de inbreuk. Voor de schade moet je iets over jezelf vertellen, en dat is een ander soort bewijs.
Houd de twee daarom apart in je stukken. Eerst de inbreuk, met het HAR-bestand en de hash. Dan pas, in een eigen alinea, wat het jou deed en waarom dat volgt uit die inbreuk. Als je die tweede alinea niet kunt schrijven zonder te overdrijven, laat hem dan weg en vraag alleen om een verbod.
Voor het gesprek met een burger geldt het omgekeerde register. Daar telt het gevolg, en de wetsverwijzing zegt hem niets. Zie beschrijf niet de datastroom maar de schade. Dat is een communicatieregel. In een juridisch stuk werkt hij averechts.
Een gemeten overtreding is geen datalek. Onrechtmatige verwerking en een inbreuk op de beveiliging zijn verschillende dingen met verschillende meldplichten.
Ik kan geen intentie meten. Code toont wat er gebeurt. Waarom het gebeurt, staat er niet in.
En het cijfer dat je het meest moet wantrouwen is mijn eigen kwaliteitscijfer. In de run van 14 juli 2026 stond het aantal onvolledige metingen op 0, dus 0,0 procent. Dat betekent dat de sanity-controle niets afkeurde. Het betekent niet dat elke site volledig is bekeken. Een controle die nooit afkeurt, is een controle die je moet controleren. Zie Label elke bevinding op bewijsniveau en Een aanwijzing is nog geen bewijs.
bronnen
Telecommunicatiewet, artikel 11.7ade Nederlandse cookiebepaling: toestemming vooraf, met uitzonderingen
AVG, artikel 4 lid 11 en artikel 7wat toestemming is en wanneer die geldig is
beginselnotitieOverheid, toezicht en de wetbronnenverwant
De cookiewet is de snelste toets die een meting kan halen
De strijd om internationale doorgifte is juridisch zwaar en vraagt bewijs dat een meting niet levert. De cookiewet is de eerste en eenvoudigste toets: zodra een tracker iets op je apparaat zet of uitleest zonder toestemming vooraf, staat de overtreding al los van waar de data belandt. Begin bij de laagste horde.
bronnen
Telecommunicatiewet, artikel 11.7ade snelste toets: plaatsing voor toestemming is al een overtreding
Autoriteit Persoonsgegevens, normuitleg over cookies en cookiebannerswat de toezichthouder wel en niet als geldige toestemming ziet
geverifieerdessayzekerOverheid, toezicht en de wetverwant
De overheid knelt precies op de uitzondering waar ze zich op beroept
Het juridische kader is streng, maar de uitvoering hapert bij de overheid zelf, juist op de analytics-uitzondering. Overheidssites plaatsen analytische cookies zonder banner of keuze, terwijl een cookiewall voor overheidssites bij wet verboden is.
Artikel 11.7a van de Telecommunicatiewet doet twee dingen voor de overheid, en ze wijzen in tegengestelde richtingen.
Het derde lid geeft de uitzonderingen op de toestemmingsplicht: opslag of lezing die dient om de communicatie uit te voeren, die strikt noodzakelijk is voor een door de gebruiker gevraagde dienst, of die uitsluitend dient om informatie te verkrijgen over de kwaliteit of effectiviteit van een dienst met geringe gevolgen voor de persoonlijke levenssfeer.
Het vijfde lid is de bepaling die specifiek over de overheid gaat, en die luidt letterlijk:
De toegang van de gebruiker tot een dienst van de informatiemaatschappij
die wordt geleverd door of namens een krachtens publiekrecht ingestelde
rechtspersoon wordt niet afhankelijk gemaakt van het verlenen van
toestemming als bedoeld in het eerste lid.
Vindplaats: wetten.overheid.nl, artikel 11.7a Telecommunicatiewet, geldende versie 1 juli 2026. De bepaling kwam er bij Stb. 2015, 100, in werking op 11 maart 2015, via het amendement-Klever, Kamerstuk 33902 nr. 8, met de toelichting dat "websites van publieke instellingen geen gebruik mogen maken van zogeheten cookiemuren".
Let op de reikwijdte. Er staat "krachtens publiekrecht ingestelde rechtspersoon", en er staat "door of namens". Dat is ruimer dan overheidsinstantie en het pakt ook de leverancier die namens de overheid een dienst levert.
Een cookiemuur is verboden voor publieke diensten. Daar zit een aanname onder die de wetgever hardop maakte: bij een overheidsloket kan de burger geen kant op, dus toestemming die je daar afdwingt is geen toestemming.
Die aanname wordt in de praktijk omgedraaid. Het verbod op de cookiemuur wordt gelezen als een vrijstelling van de toestemmingsvraag. Dat is precies verkeerd om. Lid 5 verbiedt een dwangkeuze. Lid 1 blijft gewoon staan, en dat lid vraagt om toestemming vooraf.
Dit is de meting waar de rest op rust. Elke site werd drie keer bezocht in een vers browserprofiel: niets doen, weigeren, accepteren.
1.718 sites gemeten, 14 juli 2026
1.027 sites (59,8%) er stond al iets voor de eerste klik
933 sites daarvan ging het alleen om cookies
846 sites trackingcookies, geen banner aangetroffen
710 sites (41,3%) verkeer via een eigen subdomein dat naar een derde wijst
Allemaal aangetroffen in de modus waarin de bezoeker niets deed. De stg_-cookies horen bij de tagbeheerder van Piwik PRO. Op de sites waar rijksoverheid.nl als partij optrad, laadde die verbinding op 668 van de 669 sites al voor enige toestemming, met servers in België op 667 waarnemingen. Zie De rijksbrede analytics staat op 668 sites voor toestemming.
Een tagbeheerder is iets anders dan een bezoekersteller. Hij laadt en vuurt andere scripts. De cookie stg_returning_visitor legt vast dat jij hier eerder was. Mijn weging, en ik label het als weging: een cookie die je bij terugkeer herkent, heeft moeilijk "geringe gevolgen voor de persoonlijke levenssfeer" in de zin van lid 3. Dat is een juridisch oordeel dat een rechter moet vellen, en de meting levert er de feiten voor.
Hier moet ik iets rechtzetten dat in mijn eerdere werk te stellig stond.
De bekende vijfpuntslijst waaronder analytische cookies zonder toestemming zouden mogen, verwerkersovereenkomst, IP maskeren, geen gegevensdeling, geen koppeling over sites heen, en informeren, komt uit de AP-handleiding "Privacyvriendelijk instellen van Google Analytics". Die handleiding kreeg haar laatste inhoudelijke update op 15 augustus 2018 en kende zes stappen. De vijf punten die iedereen citeert, zijn de opsomming uit stap 6.
Twee dingen kloppen daaraan niet meer. De AP-pagina geeft per 25 juli 2026 een 404; de laatste gearchiveerde versie dateert van 3 augustus 2023. En het vierde punt luidde anders dan het circuleert: de AP schreef over het niet gebruiken van andere Google-diensten in combinatie met de Google Analytics-cookies.
In haar ambtsbericht over Google Analytics van 13 november 2025 schrijft de AP dat zij nog onderzoekt in hoeverre zij iets kan zeggen over welke cookies onder de uitzondering vallen, en dat de ACM formeel bevoegd is voor artikel 11.7a.
Wie zich vandaag op de analytics-uitzondering beroept, beroept zich dus op een norm die de toezichthouder zelf nog aan het invullen is. Dat is een reden om conservatief te zijn, en het is een reden om de vijf punten historisch te presenteren. Zie Cookies: functioneel versus niet-functioneel, met voorbeelden.
Er komt een tweede punt bij. De overheid verwerkt vaak op grond van artikel 6 lid 1 onder e van de AVG, de publieke taak. Die grondslag dekt de dienst die de burger komt halen. Voor het meten van dat bezoek door een derde is een eigen grondslag nodig, en die volgt niet vanzelf uit de publieke taak. Dit is mijn lezing en geen uitspraak van een rechter.
Wat een functionaris gegevensbescherming morgen kan doen¶
Vijf stappen, in deze volgorde, omdat elke stap goedkoper is dan de volgende.
1. Open je eigen site in een schoon profiel, doe niets, en exporteer het netwerkverkeer als HAR-bestand. Zie Netwerkverkeer lezen via HAR-files.
2. Leg de lijst met externe ontvangers naast je verwerkingsregister en tel wat er niet in staat. Over 1.177 overheidsdossiers was de mediaan 2 ontvangers, het gemiddelde 3,2, de negentigste percentiel 7 en het maximum 38. Zie De ontvangers die in geen enkel verwerkingsregister staan.
3. Haal je lettertypen, kaarten en scriptbibliotheken van je eigen server. Zie Wat je van een CDN haalt, laadt voor je banner.
4. Vraag je DNS-beheerder om een lijst van alle CNAME-records op je eigen domein en kijk waar ze uitkomen.
5. Zet je tagbeheerder zo dat hij zonder expliciete toestemmingsvlag niets uitvoert, en test dat daarna zelf.
En de 1.718 is een werklijst, geen volledige telling van alle Nederlandse overheidssites. De percentages gelden over die lijst. Wie ze op de hele overheid projecteert, doet een aanname die ik niet heb getoetst.
bronnen
art. 11.7a Twde bepaling waaraan deze bevinding is getoetst
gepubliceerdnotitiezekerOverheid, toezicht en de wetbronnenverwant
Een gemeten schending kan tot een datalekmelding en Kamervragen leiden
Openbaar privacy-onderzoek is geen schot in het duister. Tracking op een overheidsportaal werd gemeten, als datalek gemeld bij de toezichthouder, en mondde uit in Kamervragen en erkenning. Een onderbouwde meting reikt verder dan een artikel.
Een meting in mijn eigen browser lag binnen dagen op het Binnenhof. Ik mat op 30 mei en 1 juni, publiceerde op 2 juni, en op 3 juni lagen er twaalf Kamervragen (kenmerk 2026Z11812). De weg van een HAR-capture naar een parlementaire vraag bleek kort.
Daarna ging het snel en in de goede volgorde. Tracker uit op 6 juni. Datalekmelding bij de AP op 12 juni, uit eigen beweging (2026Z12920). Erkenning op 25 juni. "Dit dossier eindigt zoals een dossier hoort te eindigen: gemeten, gemeld, gestopt en erkend." Elke stap is een schakel die volgt op de meting eronder.
De bevindingen hielden stand tot op het hoogste niveau. Het kabinet erkende dat vooraf niet is beoordeeld of het verwerken van persoonsgegevens noodzakelijk was, en dat in elk geval IP-adressen naar Adobe zijn verstuurd. Het is niet blijven hangen in een woordenstrijd, omdat de meting reproduceerbaar was.
Het verhaal werd opgepikt door Security.NL, PrivacyNieuws, iBestuur, Binnenlands Bestuur, NieuwRechts, Taxence en TaxLive. Zoals ik het droog samenvatte: "I hacked the Dutch Tax Office and never got a refund." De les: een goed gedocumenteerde meting is genoeg om een politiek proces in gang te zetten.
Op 25 juni 2026 beantwoordde staatssecretaris Eerenberg van Financiën de Kamervragen over de Adobe-tracker in de betaalomgeving van de Belastingdienst. De kern van dat antwoord staat er zonder omhaal:
Het gebruik van Adobe Analytics was niet in lijn met de geldende ePrivacy-regels en de Algemene verordening gegevensbescherming.
Daarmee is de cirkel rond. Op 2 juni publiceerde ik wat er feitelijk over de lijn ging toen ik, ingelogd met mijn eigen DigiD, een aanslag wilde betalen: een handeling-voor-handeling verslag naar Adobe in de Verenigde Staten, met een herkenningsnummer van twee jaar eraan vast. Vier weken later is de tracker uit, is het datalek door de dienst zelf bij de Autoriteit Persoonsgegevens gemeld, is de schending door het kabinet erkend, en ben ik als melder bedankt en beloond.
Dit dossier eindigt zoals een dossier hoort te eindigen: gemeten, gemeld, gestopt en erkend.
De tijdlijn: van meting tot erkenning in vier weken
Datum
Wat er gebeurde
30 mei en 1 juni
Metingen in mijn eigen betaalomgeving, vastgelegd met de antwoorden van de servers erbij
2 juni
Publicatie van het dossier met de letterlijke velden uit mijn sessie
3 juni
JA21-Kamerlid Van den Berg stelt twaalf schriftelijke vragen (2026Z11812) aan de staatssecretarissen van Financiën en van Economische Zaken en Klimaat
6 juni
De Belastingdienst laat weten dat de Adobe-meting is uitgezet; mijn eigen nulmeting bevestigt dat
10 juni
De uitschakeling wordt publiek; NRC, Tweakers en Security.NL berichten erover
12 juni
Kamerbrief (2026Z12920): de dienst heeft uit eigen beweging een datalekmelding gedaan bij de Autoriteit Persoonsgegevens
25 juni
Antwoorden op de Kamervragen: het gebruik was in strijd met de ePrivacy-regels en de AVG
26 t/m 29 juni
Tweede persgolf, van Security.NL tot iBestuur en de fiscale vakpers
Die twaalf Kamervragen verdienen een eigen alinea, want ze zijn het resultaat van een directe samenwerking met JA21-Kamerlid Daniël van den Berg. Ik leverde de meting en de technische onderbouwing, hij vertaalde die naar precieze, goed getimede vragen en tilde het debat daarmee een niveau hoger in de Kamer. Vraag voor vraag zat er techniek onder: van de ECID-cookie en de verhulde DNS-omleiding tot de rolverdeling tussen verwerkingsverantwoordelijke en verwerker. Die combinatie van meetwerk en politiek vakmanschap is de reden dat dit dossier in vier weken van bevinding naar erkenning ging.
Wat de staatssecretaris erkent
De antwoorden op de Kamervragen bevestigen de bevinding op alle hoofdpunten, en voegen er een paar dingen aan toe die ik zelf niet kon vaststellen.
Ten eerste de rechtmatigheid. Het kabinet erkent dat de tracking in strijd was met de ePrivacy-regels en de AVG, en dat vooraf niet is beoordeeld of het verwerken van persoonsgegevens noodzakelijk was. Er lag geen afgeronde beoordeling onder een systeem dat meekeek met burgers in de meest verplichte omgeving die de overheid kent.
Ten tweede de reikwijdte. Vast staat dat in elk geval IP-adressen naar Adobe zijn verstuurd, naast de gedragsgegevens die ik documenteerde: de specifieke vordering, de geopende aanslag, de stap in de betaalfunnel. En er blijft een onbekende rest: wat gebruikers hebben ingetypt in vrije tekstvelden en zoekfuncties is achteraf niet meer volledig te reconstrueren. Die onzekerheid is precies waarom dit als datalek is gemeld.
Ten derde de voorwaarden voor de toekomst. De verwerking is gestopt en wordt pas hervat als de rechtmatigheid en proportionaliteit zijn beoordeeld en geborgd, met eerst een DPIA en sluitende verwerkersafspraken.
Mijn eigen meetnuance blijft daarbij overeind staan, want daar hecht ik aan: het bedrag, het BSN, het IBAN en het betalingskenmerk gingen aantoonbaar niet mee. Wat wegvloeide was je gedrag eromheen, gekoppeld aan een nummer dat twee jaar blijft staan. De erkenning gaat over precies dat.
De dienst meldde zichzelf
Het opvallendste aan deze afloop is de volgorde. De Autoriteit Persoonsgegevens hoefde er niet aan te pas te komen om dit boven water te krijgen: de Belastingdienst deed uit eigen beweging een datalekmelding bij de toezichthouder, en de staatssecretaris informeerde de Kamer daar zelf over.
In diezelfde Kamerbrief richt de staatssecretaris zich rechtstreeks tot de melder:
Ik ben dankbaar dat deze ethisch hacker de Belastingdienst hierop heeft gewezen.
En het bleef niet bij woorden: voor de melding kreeg ik van de Belastingdienst een beker. Een echte, met het logo van de dienst in de lauwerkrans, een handdruk op de voorkant, en op het voetstuk een opschrift met gevoel voor humor: “I hacked the Dutch Tax Office and never got a refund”. Dat vermeld ik hier met plezier, omdat het laat zien hoe een overheidsdienst met een melder om kan gaan: serieus nemen, rechtzetten, en de boodschapper bedanken in plaats van hem als tegenstander te behandelen.
Wat de pers ervan maakte
De antwoorden van 25 juni leverden een tweede golf berichtgeving op, na de eerste golf rond de uitschakeling:
Security.NL en PrivacyNieuws: “Belastingdienst schond privacywetgeving”
iBestuur en Binnenlands Bestuur: “Belastingdienst schond AVG met gebruik van Adobe Analytics”
NieuwRechts: “Persoonsgegevens belastingbetalers doorgestuurd naar Amerikaans bedrijf”
De fiscale vakpers (Taxence, TaxLive): het gebruik is gestopt en het datalek gemeld
Alle vermeldingen staan gebundeld op de pers-pagina, met de links naar de originele publicaties en de Kamerstukken.
Waarom dit een succesverhaal is
Elk onderdeel van het stelsel deed waarvoor het bestaat. De meting bracht een verborgen datastroom aan het licht. De Kamer stelde er binnen een dag vragen over. De dienst zette de tracker binnen een week uit, controleerde niet alleen de betaalomgeving maar inventariseert soortgelijke tooling breder, en meldde zichzelf bij de toezichthouder. Het kabinet erkende de schending zwart op wit. En de melder werd bedankt.
Het verwijt over de oorspronkelijke situatie blijft staan: jarenlang kreeg een Amerikaans reclamebedrijf een klik-voor-klik verslag mee van burgers die hun belasting betaalden, zonder grondslag en zonder dat iemand dat vooraf had getoetst. Dat is en blijft de bevinding, en die staat volledig gedocumenteerd met de echte waarden uit mijn sessie.
Wat openstaat, benoem ik ook. De uitschakeling is formeel voorlopig: hervatting kan na een DPIA en verwerkersafspraken, en dat moment verdient een nieuwe meting. En de vraag wat er in de vrije tekstvelden richting Adobe is gegaan, blijft per definitie onbeantwoord. Zodra de betaalomgeving opnieuw gaat meten, meet ik mee.
Aan iedere onderzoeker die iets ziet: meld het
Dit is waar dit artikel eigenlijk om draait. Zit je als onderzoeker op een bevinding, bij de overheid of daarbuiten, en twijfel je of melden zin heeft: dit dossier is het antwoord. De Belastingdienst ging er van begin tot eind goed mee om. De melding werd serieus genomen, de tracker ging binnen dagen uit, de dienst meldde zichzelf bij de toezichthouder, de staatssecretaris bedankte de melder in een brief aan de Kamer, en er stond een prijs tegenover.
Zo bouw je vertrouwen tussen onderzoekers en overheid: de melder wordt behandeld als bondgenoot, en de volgende bevinding komt daardoor wéér binnen via de voordeur. Melden loont, voor jou, voor de dienst en voor iedereen wiens gegevens het betreft.
Dus doe die melding. Dit is hoe het hoort te gaan, van begin tot eind. Eind goed, al goed.
wat het opleverde
Schending erkend, tracker uit. Na Kamervragen (JA21, kenmerk 2026Z11812) zette de Belastingdienst de Adobe-tracker in de betaalflow op 10 juni 2026 uit, meldde zich op 12 juni uit eigen beweging bij de AP, en op 25 juni erkende staatssecretaris Eerenberg de schending van de ePrivacy-regels en de AVG. Hij bedankte de melder met zoveel woorden.
gepubliceerdnotitiewaarschijnlijkBewaren en lekkenverwant
Een lek raakt ook de klanten die je jaren geleden verliet
Bij een groot telecomlek bestond het merendeel van de blootgestelde profielen uit ex-klanten die al jaren weg waren, inclusief oude incassogegevens en identiteitsbewijzen. Data die niet was opgeruimd na het einde van de klantrelatie lekte gewoon mee. Een bewaartermijn overschrijden vergroot letterlijk de buit.
Moderne toestemmingssystemen sturen na een weigering nog steeds een cookieloze ping, met een geen-personalisatie-vlag. Een netwerkverzoek zonder cookie bewijst dus niet dat er niet gemeten wordt, en ook niet dat er wel getrackt wordt. Je moet de inhoud van het verzoek bekijken, niet of er een cookie aan hangt.
bronnen
Eigen bevinding: vraag17 fp gtm state, 2026-07-22verzoek zonder request-cookies en zonder Set-Cookie, met consentvlag
Wat in elke meting gelijk blijft, herkent geen bezoeker
Om te toetsen of een waarde een persoon volgt, leg ik hem over meerdere schone metingen naast elkaar. Blijft hij identiek over runs en over verschillende sites, dan hoort hij bij de configuratie van de site, niet bij jou. Dat gedrag scheidt een echt herkenningsnummer van ruis, niet de vorm.
bronnen
Eigen bevinding: vraag17 fp gtm state, 2026-07-22waarde identiek over acht verse browsercontexten en twee meetdagen
Er is verschil tussen een tracker die je browser rechtstreeks aanroept en een die je server-side vermoedt. Alleen het eerste is hard bewijs. Wat ik in de ruwe opname zie gebeuren telt; wat ik erbij redeneer is een aparte, zwakkere laag.
Er zijn twee manieren waarop je weet dat een partij bij een site of app betrokken is.
De eerste is dat je het hebt zien gebeuren. Er staat een verzoek in de opname, met een tijdstempel, een pagina waaraan het hangt, en headers die je kunt teruglezen. Dat is een waarneming.
De tweede is dat je het hebt afgeleid. De partij staat in een bestand dat verkooproutes beschrijft. De partij zit in de partnerlijst van het toestemmingsvenster. De partij is de eigenaar van een script dat je wel zag. Dat is een gevolgtrekking.
Beide zijn nuttig. Alleen de eerste is bewijs. En het gevaarlijkste moment in het hele onderzoek is de zin waarin je ze bij elkaar optelt, omdat je daarmee de zwakste schakel de kracht van de sterkste geeft. Zie Gemeten is niet bewezen en Een aanwijzing is nog geen bewijs.
Om de twee soorten uit elkaar te houden, krijgt elke leverancier in een run een niveau. De ladder is klein gehouden, want een ladder met tien treden wordt niet ingevuld.
D1 directe verstrekking waargenomen
verzoek met een body of een cookie met identifier, rechtstreeks aan
de partij, in de opname aanwijsbaar
I1 koppelingspoging waargenomen
een sync- of match-aanroep die een identifier wil uitwisselen
I2 koppeling voltooid
de callback kwam terug met een concreet gevuld identifier-veld
Q1 biedverzoek waargenomen
er ging een echte aanvraag om een bod uit
Q2 bod waargenomen
er kwam een bod terug
Het geval: tweeëntachtig veilingen en nul biedverzoeken¶
Dit is de zaak waarin de regel me een kop kostte en een correctie bespaarde.
In juli 2026 vond ik op telegraaf.nl een partij met een Russische lijn: Between Digital. De eerste waarneming was een aanroep naar ads.betweendigital.com/match met een doorgegeven toestemmingsstring. Dat is niveau I1, een koppelingspoging.
De verleidelijke kop stond meteen op tafel. Een Russische advertentiepartij doet mee aan de handel in Nederlandse nieuwslezers. Als ik de aanwezigheid van de partij bij het toestemmingsvenster en de aanwezigheid van de matchroute bij elkaar had opgeteld, was die kop er gekomen.
In plaats daarvan ging de meeteenheid om. De vraag werd niet langer of de partij in een run verscheen, maar of de partij meedeed in een veiling waarin ze had kúnnen bieden. Daar is een aparte meting voor gebouwd, met videostart en detectie van geschikte veilingen. De eerste stand, op 18 juli 2026, was mager: acht geschikte videoveilingen, koppeling gezien, nul biedverzoeken. Nul van acht is statistisch niets. Met de vuistregel van drie kom je dan niet lager dan ruwweg achtendertig procent, en dat is geen nulbevinding.
Dus liep de meting door. De stand van 22 juli 2026, over twaalf meetronden:
geldige sessies 48
profiel-lijnen 10
dagdelen 3
dagen 5
geschikte videoveilingen 82
Between Digital koppeling gezien in 19 van 48 sessies
biedverzoeken 0 van 82 veilingen
bod ontvangen 0 van 82 veilingen
In dezelfde meting: bidswitch in 47 van 48 sessies, outbrain in 47 van 48, teads in 42 van 48, pangle in 1 van 48.
De koppeling zelf werd wél hard. De callback naar x.bidswitch.net/sync kwam terug met een concreet gevuld gebruikersnummer en een cookie die op Luxemburg wees. Dat is I2, koppeling voltooid, met een bewijsobject waarvan de recordhash is vastgelegd.
De gepubliceerde zin werd daarmee: in 82 geschikte videoveilingen, verdeeld over 48 onafhankelijke sessies, tien profiel-lijnen en drie dagdelen, is geen biedverzoek aan deze partij vastgesteld. De Russische lijn in het artikel staat op identifierkoppeling, met het bieden expliciet als niet vastgesteld. Zie Een cookie-match bewijst herkenning, geen bod.
De afgeleide laag vertelt je waar je moet kijken. Zonder de partnerlijst en de verkooproutebestanden had ik niet geweten dat Between Digital überhaupt kandidaat was, en had ik de gerichte veilingmeting nooit gebouwd. Afleiding is een uitstekend zoekinstrument en een slecht bewijsmiddel.
Ze vertelt je ook iets over de ruimte die een organisatie zichzelf heeft gegeven. Een systeem dat gemachtigd is om je advertentieruimte te verhandelen, kan dat morgen doen zonder dat er iets verandert aan de site. Dat is een reëel gegeven voor een functionaris gegevensbescherming, en het is een ander gegeven dan een waargenomen stroom.
De regel is dus niet dat je afleidingen weglaat. De regel is dat ze in een aparte alinea staan, met een eigen kwalificatie, en dat ze nooit in hetzelfde totaal terechtkomen als de waarnemingen.
De ladder werkt alleen als je erbij zet hoe vaak je hebt gekeken. Anders wordt "niet gezien" per ongeluk "niet aanwezig".
Hoe groot dat effect is, staat in de herhaalbaarheidstoets over sites die in drie of meer runs voorkomen. Er zijn 434 zulke sites. De mediaan van het verschil tussen de laagste en de hoogste meting per site is 0,0, dus voor de meeste sites is het beeld stabiel. De uitschieters zijn het punt:
Op zulke sites is één meting een greep uit een verdeling. Wie daar één run publiceert, publiceert toeval. De notatie die dat oplost is simpel: schrijf altijd x van n geldige runs, ook als x gelijk is aan n.
Twee kolommen, en geen enkel totaal dat over de streep heen telt.
WAARGENOMEN AFGELEID
niveau D1/I1/I2/Q1/Q2 geautoriseerd, genoemd, eigenaar van
x van n geldige runs bron: welk bestand, welke datum
verwijzing naar het artefact wat het zou betekenen als het klopt
Werkregel. Publiceer alleen de aanvraag die je in de opname hebt zien vertrekken, met het bewijsniveau en het aantal geldige runs erbij, en zet alles wat je erbij hebt afgeleid in een aparte kolom die nooit meetelt in een totaal.
bronnen
Eigen meetregel bij HAR-analysealleen de aanvraag die het toestel echt deed telt, niet wat de code toelaat
Achter een eigen verzamelserver of een server-side veiling kunnen tientallen partijen worden aangeroepen zonder dat hun naam ooit in het verkeer verschijnt. Niet in de meting betekent dus niet niet betrokken. Dit is de grootste structurele beperking van elk verkeersonderzoek en hoort er expliciet bij.
bronnen
Eigen meetregel bij HAR-analysewat achter de eerste ontvanger gebeurt, valt buiten het bereik van de meting
Een eigen verzamel-subdomein is geen geruststelling
Sites sturen bezoekersdata naar een eigen subdomein dat vervolgens server-side kan doorsturen naar wie dan ook. Behandel zo'n verzamelpunt niet als veilig omdat het van de site zelf is, maar als eigen categorie: verstrekking vastgesteld, bestemming onbekend.
bronnen
Eigen meetregel bij CNAME-analyseeen subdomein van de site zelf kan via DNS naar een derde partij wijzen
Een host die je toestel belt is nog geen partij die je data krijgt
Wie elke aangeraakte host meetelt als data-ontvanger, telt te hoog. Splits in categorieen: herkende partij met inhoud, aangeraakt maar inhoud onbekend, en louter infrastructuur. Anders tel je schaduwen mee.
Open het netwerkpaneel op een willekeurige nieuwssite en je hebt binnen tien seconden een lijst met tientallen domeinnamen. Die lijst is echt. Elke naam erin is door jouw toestel opgezocht, benaderd en beantwoord. Er is niets aan verzonnen en er valt niets tegen in te brengen.
De verleiding zit in de volgende stap. Je telt de lijst en je schrijft op: zoveel bedrijven krijgen jouw gegevens. Dat is een sterkere zin dan de lijst draagt. De lijst bewijst dat er contact was. Over de vraag wat er bij dat contact meeging, zegt hij nog niets.
Dit is de fout die het makkelijkst door een redactie komt en die je later het duurst komt te staan. Een organisatie hoeft maar één naam uit je lijst aan te wijzen die een lettertype serveert, en je hele telling staat ter discussie. Zie Label elke bevinding op bewijsniveau en Gemeten is niet bewezen.
Een uitgaand verzoek bewijst drie dingen en niet meer. Dat je toestel een naam heeft opgezocht. Dat er een verbinding tot stand kwam. En dat de andere kant iets heeft teruggestuurd, of in elk geval de kans kreeg.
Wat het niet bewijst is even goed op te schrijven. Het bewijst niet dat er een identificerend gegeven meeging. Het bewijst niet dat de ontvangende partij iets bewaarde. Het bewijst niet dat de partij die de naam bezit ook de partij is die de bytes las, want daar kan een netwerk van doorgifte tussen zitten. Zie Een browsermeting ziet alleen de eerste server.
Een browsermeting is daarmee een meting van vertrek, niet van aankomst. Elk cijfer dat je eruit haalt is een ondergrens voor het aantal betrokken partijen en tegelijk een bovengrens voor het aantal partijen waarvan je de ontvangst kunt hardmaken. Die twee grenzen liggen ver uit elkaar, en het is jouw werk om te vertellen waar je bevinding tussen die twee in staat.
Elke unieke host uit een opname gaat bij mij in precies één van drie bakken. De indeling is grof met opzet, want een fijnere indeling nodigt uit tot schatten.
1 herkende partij, inhoud waargenomen
POST met een body, een Set-Cookie met een identifier, een biedverzoek,
een sync-aanroep met een concreet gevuld id-veld
2 aangeraakt, inhoud onbekend
GET van een script of pixel, geen identifier in het verzoek gezien,
geen antwoordinhoud die iets terugkoppelt
3 louter infrastructuur
lettertype, kaarttegel, icoonpakket, videostill, een CDN dat een
bibliotheek uitserveert
Bak 1 is wat je in een wederhoorbrief zet. Bak 2 is wat je noemt als aanwezigheid, met de zin dat de inhoud niet is vastgesteld. Bak 3 noem je apart, want die hosts staan er vaak wel en horen zelden in een ontvangerstelling thuis.
De grens tussen bak 2 en bak 3 is de lastigste, en daar hoort een waarschuwing bij. Een CDN dat een lettertype uitserveert, ziet nog steeds je IP-adres, je user agent en de pagina waarvandaan je komt. Infrastructuur is dus geen synoniem voor onschuldig. Het is een andere claim, met een andere bewijslast. Zie Wat je van een CDN haalt, laadt voor je banner.
Het verschil dat de indeling maakt, is te becijferen. Uit de scan van 14 juli 2026 over 1.718 Nederlandse overheidssites komen twee getallen die allebei kloppen en die niets met elkaar te maken hebben.
unieke externe partijen in de hele set 582
sites waarvoor een ontvangersdossier is gemaakt 1.177
mediaan aantal ontvangers per site 2
gemiddeld aantal ontvangers per site 3,2
negentigste percentiel 7
hoogste enkele site 38
Het eerste getal telt hosts over het hele corpus. Het tweede blok telt ontvangers per site. Wie de 582 in een kop zet, suggereert dat een bezoeker met 582 partijen te maken krijgt. De mediaan zegt dat het er op de doorsnee overheidssite twee zijn. Zie De ontvangers die in geen enkel verwerkingsregister staan.
Bij de commerciële set ligt het anders, en dat verschil is zelf de bevinding. Uit de scan van 18 juli 2026 over 32 nieuws- en handelssites:
unieke externe partijen in de set 283
mediaan aantal ontvangers per site 36
gemiddeld aantal ontvangers per site 37,8
negentigste percentiel 75
hoogste enkele site 87
In de overheidsset zit het grootste deel van het verkeer voor toestemming in de derde bak. Uit dezelfde scan van 14 juli 2026, in de modus waarin de bezoeker niets deed:
Kaarten, iconen, bibliotheken. Als je die vier als data-ontvanger meetelt, loopt de ontvangerstelling van een gemiddelde site hard op zonder dat er één extra byte aan persoonsgegevens is aangetoond. De juiste bevinding is dat ze voor toestemming laden en dat ze daarmee een IP-adres krijgen, wat een aparte en veel beter houdbare claim is.
Ter vergelijking staat in dezelfde run het aantal keren dat er wel aantoonbaar inhoud vertrok. Verzoeken met een body naar derden leverden 604 bevindingen op onder artikel 6 en 28 van de AVG, en nog eens 411 in de lichtere variant. In de set van 32 commerciële sites gebeurde dat op 29 van de 32.
Het geval waarin de indeling een kop van me afhield¶
Op 18 juli 2026 legde ik de buitenlandse partijen op Nederlandse nieuwssites vast voor het Telegraaf-stuk. De ruwe telling gaf 24 sites met techniek van een Chinees concern aan boord.
Vierentwintig Nederlandse sites sturen data naar China. Dat is de zin die eruit rolt als je aangeraakte hosts als ontvangers telt. Die zin heb ik niet geschreven. Achteraf bleek dat de enige houdbare keuze.
Toen ik de 24 door de drie bakken haalde, bleef er van bak 1 één geval over dat het hield: Temu, met directe browserverstrekking, een cookie en een identifier, structureel in drie van drie geldige runs. De rest was aanwezigheid van techniek met een concernband, zonder waargenomen inhoud. De publiceerbare formulering werd daarmee dat er techniek met een Chinese concernband is waargenomen op 24 sites, met bij één daarvan een vastgestelde directe verstrekking.
Dat is een saaiere zin. Hij is ook de enige die overeind blijft als een advocaat ernaar kijkt, en hij bleef overeind. In dezelfde vastlegging staat de regel die ik er die dag uit destilleerde: tel per leverancier het bewijsniveau en het aantal geldige runs, en houd vestiging en bestemming uit elkaar. Zie Waar het pakket landt en wie het kan vorderen zijn twee assen en Herkomst is geen bestemming.
De indeling is geen vrijbrief. Er zijn drie situaties waarin een host uit bak 3 doorschuift naar bak 1, en die controleer ik altijd apart.
De eerste is een eigen subdomein dat via een CNAME naar een externe partij wijst. Voor de browser is dat eigen verkeer, dus first-party cookies gaan gewoon mee. In de overheidsset gebeurde dat op 710 van de 1.718 sites. Zie CNAME-cloaking zit op vier op de tien overheidssites.
De derde is een CDN dat naast statische bestanden ook een script uitserveert dat identificerend gedrag vertoont. Dan is het domein infrastructuur en de lading dat niet.
Per host leg ik vier velden vast, en die vier zijn genoeg om de bak achteraf te reconstrueren zonder de opname er weer bij te halen.
host de naam zoals hij in de opname stond
bak 1, 2 of 3, met de reden in één regel
grondslag welk waarnemingsfeit de bak rechtvaardigt
frequentie in hoeveel van de n geldige runs gezien
Dat laatste veld is er omdat een eenmalige waarneming geen patroon is. Een partij die per bezoek een kleine kans heeft om af te vuren, mis je in één meting bijna altijd, en zie je in één meting soms net wel. Zie Hoe mijn scanner werkt, van bezoek tot bewijsstuk.
Werkregel. Tel nooit aangeraakte hosts als ontvangers: deel elke host in drie bakken in, herkende partij met waargenomen inhoud, aangeraakt zonder waargenomen inhoud, en louter infrastructuur, en publiceer per bak een eigen getal met de reden erbij.
bronnen
Eigen meetregel bij ontvangeranalyseeen verbinding aantonen is iets anders dan aantonen wat er is verstrekt
Dat een tool iets kan, bewijst niet dat het gebeurde
Schermopname-techniek kan muisbewegingen, scrollen en formulieren vastleggen. De aanwezigheid van zo'n tag bewijst dat het product het kan, niet dat op deze site echt velden zijn opgenomen. Dat vraagt een test met een lokvink, geen aanname op grond van de mogelijkheid.
bronnen
Eigen meetregel bij HAR-analyseaanwezigheid van een script is nog geen verstrekking van gegevens
Een advertentiesysteem mag meeverkopen zonder ooit een bod te doen
Het bestand ads.txt vermeldt welke systemen de advertentieruimte van een site mogen verhandelen. Een systeem dat daar als toegestane route staat, heeft daarmee nog geen bod gedaan of gegevens ontvangen. Een toegestane route en een waargenomen stroom zijn twee dingen, en horen scherp uit elkaar.
bronnen
Eigen bevinding: between digital betweenx toneko identiteit, 2026-07-24ads.txt labelt dezelfde partij als DIRECT en RESELLER, DIRECT onjuist
Wie elke verkooproute optelt, bouwt een misleidend beeld
Een site kan honderden verkooproutes vermelden, waarvan sommige verouderd. Ze allemaal optellen als betrokken partij blaast het beeld kunstmatig op. Tel alleen wat je ook echt kunt duiden, en benoem de opvallende afzonderlijk in plaats van in een totaal te verstoppen.
bronnen
IAB Tech Lab, "sellers.json" en "ads.txt" specificatiesde bestanden waarin verkooproutes staan; optellen levert een bovengrens
beginselnotitieOverheid, toezicht en de wetbronnenverwant
Label elke bevinding op bewijsniveau
Een tracker-verzoek bewijst dat data wordt verstrekt, niet waar die belandt of wie hem inziet. Door elke vondst op een ladder te zetten, van verzoek gezien tot doorgifte bewezen, houd ik de sterke en de zwakke claim uit elkaar. Zo overclaim ik nooit, en toch blijft de harde onderlaag staan.
De meeste discussies over privacy lopen vast doordat twee mensen hetzelfde woord gebruiken voor heel verschillende dingen. De een zegt dat een bedrijf gegevens deelt en bedoelt dat er een verzoek is gezien. De ander hoort dat er dossiers worden verkocht.
Daarom zet ik elke vondst op een trap, en noteer ik erbij op welke trede hij staat. Dat kost een zin extra en het voorkomt vrijwel elke ruzie over wat ik nou eigenlijk beweer.
Van hard naar zacht, en elk hoger niveau vraagt meer bewijs dan het vorige.
1. Aanwezig in de code. De naam van een partij, een bouwsteen, een endpoint staat in het bestand. Dit bewijst dat de mogelijkheid is ingebouwd. Meer niet. Het bewijst niet dat er iets vuurt, en soms niet eens dat het de partij is die je denkt.
2. Verzoek waargenomen. Ik heb het toestel de verbinding zien maken, in de opname, met tijdstempel. Nu staat vast dat er contact was.
3. Inhoud vastgesteld. Ik kan zien wat er meeging: welke identifier, welke parameters, welke cookie. Nu staat vast wat er is verstrekt.
4. Ontvanger bevestigd. Ik weet welke partij achter dat domein zit, geverifieerd, en niet afgeleid uit de naam.
5. Verwerking aangetoond. Er is bewijs dat de ontvanger er ook iets mee doet: een profiel dat terugkomt, een koppeling die zichtbaar wordt, een verklaring van de partij zelf.
6. Doorgifte of doorverkoop bewezen. De hoogste trede, en de zeldzaamste. Hier heb ik vrijwel nooit bewijs voor, en dus zeg ik het vrijwel nooit.
De kern van het systeem is dat de formulering meebeweegt met de trede.
Op trede 1 zeg ik dat een app de bouwstenen van een partij aan boord heeft. Op trede 3 zeg ik dat een identifier naar een domein van die partij is verstuurd. Pas op trede 5 mag het woord profiel vallen, en op trede 6 het woord doorverkoop.
De verleiding is altijd om een trede hoger te formuleren dan je bewijs draagt, want het klinkt sterker en het is meestal ook waar. Precies daar sneuvelt een dossier. Eén overclaim en de rest van je rapport is verdacht, hoe goed het ook is.
Een leeg resultaat krijgt bij mij dezelfde behandeling.
Ik schrijf niet dat een app schoon is. Ik schrijf wat ik heb gemeten, hoe lang, onder welke omstandigheden, en dat ik binnen die grenzen niets heb waargenomen. Dat is iets anders dan afwezigheid, en het verschil is groot genoeg om er een aparte zin aan te wijden.
Wie een mislukte of beperkte meting presenteert als vrijspraak, doet precies wat hij een bedrijf verwijt: een indruk wekken die de meting niet draagt.
Ze maakt mijn werk aanvalsbestendig, want elke zin is te herleiden tot een waarneming. Ze maakt het navolgbaar, want een ander kan mijn treden nalopen. En ze maakt het bruikbaar voor een toezichthouder of een rechter, die precies deze scheiding nodig heeft om iets met een melding te kunnen.
Maar bovenal houdt ze mij eerlijk. Op het moment dat ik iets vind wat me boos maakt, wil ik het groter maken dan het is. De ladder staat daar tussen.
Eigen bewijsladder: gemeten, afgeleid, vermoedde driedeling die onder elke publicatie op deze site ligt
beginselnotitieOverheid, toezicht en de wetbronnenverwant
Gemeten is niet bewezen
Een analytics-cookie voor toestemming kan onder een uitzondering vallen, maar bij het delen van herkenningsnummers, doorgifte naar de VS of een genegeerde weigering is die discussie er niet. Zet niet alles op een hoop overtreding. Splits in gemeten feit en sluitende conclusie, dan blijft je zwaarste claim ook de best verdedigbare.
bronnen
Eigen bewijsladder: gemeten, afgeleid, vermoedwaarom een meting een waarneming is en nog geen conclusie