Techblogpost: Praktische problemen bij het afknippen van hashes
Regelmatig krijgt de Autoriteit Persoonsgegevens (AP) bij onderzoeken te maken met organisaties die aangeven dat zij anonieme gegevens verwerken (en dus geen persoonsgegevens) doordat de gegevens ‘gehasht en afgeknipt’ zijn. In de praktijk constateert de AP dat organisaties bij deze vorm van anonimisering vaak fouten maken, waardoor de gegevens toch niet anoniem blijken te zijn. In deze blogpost lichten AP-technologen Victor Klos en Jonathan Ellen dit onderwerp toe voor technisch geïnteresseerden.
Let op: De juiste toepassing van de technieken die hier genoemd worden, is lastig en vaak afhankelijk van het geval. Dit is dus geen technisch of juridisch advies.
k-anonimity
Een veelgebruikte methode om gegevens te anonimiseren is k-anonimity. Hierbij verander je een dataset zo dat iedere combinatie van attributen altijd minstens k keer voorkomt.
Onder de juiste omstandigheden en als k groot genoeg is, is het herleiden van personen dan onmogelijk. Iedere persoon maakt dan deel uit van een groep gelijken. Immers (k-1) anderen hebben dezelfde attributen.
Afknippen
Een manier om groepen te maken is door attributen af te ronden. Als je uit een dataset bijvoorbeeld alle leeftijden naar beneden afrondt op tientallen, dan ontstaan er vanzelf groepen. Iemand met leeftijd 29 valt dan in dezelfde groep als iemand met leeftijd 21 of iemand met leeftijd 27, namelijk de groep met leeftijd 20.
Met een beetje fantasie is dit afronden een bewerking die je ook kunt doen door afknippen. Neem een leeftijd van 26. Hiervan 1 symbool afknippen, van rechts af gezien, resulteert in leeftijd 2.
Na afknippen valt dus weer iedereen met een leeftijd van 20-29 in dezelfde groep. (Afhankelijk van de toepassing kun je na het afknippen weer een symbool toevoegen, zoals een 0, maar dat verandert niets aan het effect.)
Eerst hashen
Het wordt anders wanneer je een identificator hebt van een persoon of een aan een persoon gerelateerd apparaat, zoals een telefoonnummer, IP-adres, MAC-adres, IMSI-nummer of vergelijkbaar.
Aan een afgeknipt IP-adres kun je bijvoorbeeld nog steeds zien bij welke internetprovider iemand zit en soms ook in welke omgeving deze persoon woont. Om dit soort gevolgtrekkingen te vermijden, worden dit soort gegevens vaak gehasht.
Afbeelding van gehashte telefoonnummers
Overigens maakt het voor de herleidbaarheid van personen vaak geen verschil of identificatoren op zichzelf betekenis hebben (IP-adressen, IMSI-nummers, MAC-adressen enz.) of betekenisloos zijn (hashwaarden, willekeurige getallen of symboolreeksen enz.).
Hashes afknippen
Hashwaarden zijn niet willekeurig, ook al zien ze er wel zo uit. Wat ook opvalt, is dat ze uit veel symbolen bestaan. Met andere woorden: er zijn enorm veel mogelijke hashwaarden.
En dat is ook de valkuil: hoewel er veel mogelijke uitkomsten zijn, is er meestal maar een beperkt aantal 'inputs'. Of iets formeler: het bereik van de hashfunctie is in de praktijk vele malen groter dan het domein.
Zo zijn er in Nederland in totaal ongeveer 54 miljoen mobiele nummers uitgegeven. Dat klinkt als veel, maar dit is maar een minieme fractie van het aantal mogelijke sha256-hashes. En dat is waar onze intuïtie ons in de steek laat.
Bij een ongehasht telefoonnummer zorgt het afknippen van 2 symbolen voor groepen tot 100 telefoonnummers. Afhankelijk van hoeveel nummers er in de dataset zitten, levert dat een k > 1 op.
Verder onderzoek zal dan moeten uitwijzen of 2 symbolen afknippen voldoende is, of dat het er toch 3, 4 of meer moeten zijn, eventueel afhankelijk van de nummerreeks.
Heel anders is de situatie na hashen. Dan is iedere hashwaarde uniek, ook na het afknippen van enkele symbolen.
Afbeelding van gehashte telefoonnummers waarbij enkele symbolen zijn afgeknipt
Maar hoeveel moet je dan afknippen om van gehashte attributen groepen te maken? Het antwoord is afhankelijk van de dataset, maar in veel gevallen: bijna alles.
Neem bijvoorbeeld het eerste telefoonnummer uit de figuren hierboven. Hoewel dat maar 1 cijfer verschilt met het tweede telefoonnummer, zijn de hashwaardes compleet anders.
En als de hele dataset zou bestaan uit de 4 gegeven voorbeelden, is het zelfs onmogelijk om groepen te maken door symbolen af te knippen van gehashte telefoonnummers.
De juiste vraag is daarom niet hoeveel je moet afknippen, maar hoeveel je kunt bewaren.
Want wat is dan het gevolg van te weinig symbolen van gehashte attributen afknippen? Dat is een dataset die nog steeds persoonsgegevens bevat.
Want te weinig afknippen van hashwaardes laat unieke identificatoren achter. En dan is er dus géén sprake van geanonimiseerde gegevens.