In een vorige blogpost schreef ik over de nadelige effecten van de opslag van vingerafdrukken in centrale dan wel decentrale databases. Daarin kwam ook het hashen van vingerafdrukken kort aan bod. Ik wil in deze post iets dieper op de achterliggende techniek ingaan om duidelijke te maken wat de veiligheid en privacy consequenties van deze techniek zijn als deze gebruikt wordt voor de opslag van vingerafdrukken uit het biometrisch paspoort.
Een hashfunctie is een functie h die eenvoudig uit te rekenen is, maar die moeilijk te inverteren is. Dat wil zeggen, gegeven invoerwaarde x is het eenvoudig om de hashwaarde y = h(x) uit te rekenen, maar kost het onmogelijk veel tijd om diezelfde invoerwaarde x terug te vinden als je alleen maar de hashwaarde y hebt. Een hashfunctie is dus in zekere zin de digitale equivalent van een papierversnipperaar. In de cryptografie worden hashfuncties veel gebruikt. Een populaire hashfunctie is SHA-256.
Met behulp van speciale technieken kun je ook vingerafdrukken hashen. Daar is zelfs een internationale standaard voor in ontwikkeling (ISO 24745), en dat gaat ongeveer als volgt (zie de figuur).
Bij het aanvragen van een paspoort (de zogenaamde enrollment fase) moet je je vingerafdruk afgeven. Deze wordt door een speciale lezer gescand, en vervolgens geanalyseerd om de unieke kenmerken te bepalen (de zogenaamde features). Deze features worden vervolgens door een hashfunctie (PIE) vertaald naar een pseudoniem PI en additionele data AD. Deze twee waarden worden opgeslagen in de database, samen met je naam en overige gegevens. Door gebruik te maken van een hashfunctie is het, gegeven PI en/of AD, onmogelijk om de oorspronkelijke vingerafdruk ook maar bij benadering terug te vinden. Als een vingerafdruk voor een tweede keer aangemeld wordt, dan kan er voor gezorgd worden dat het pseudoniem PI en de additionele data AD anders zijn.
Om later te verifiëren of iemand daadwerkelijk de persoon is die hij zegt te zijn, moet je het pseudoniem PI en de additionele data AD die bij de opgegeven naam horen opvragen uit de database. De persoon moet vervolgens weer zijn vingerafdruk afgeven, die gescant wordt door de lezer. Samen met de opgevraagde additionele data AD wordt met behulp van een tweede hashfunctie (PIR) het pseudoniem PI* dat bij de vingerafdruk berekend. Deze wordt vergeleken met het opgevraagde pseudoniem PI (mbv van de functie PIC). Als PI en PI* matchen is de identiteit geverifieerd. Deze verificatie stap kan gebruikt worden als iemand een nieuw paspoort aanvraagt en claimt zijn oude paspoort kwijt te zijn. Het kan ook gebruikt worden door de politie om te controleren of iemand die geen identiteitsbewijs bij zich heeft inderdaad is wie hij zegt te zijn.
Door de vingerafdruk op deze manier te hashen maak je het gebruik en de opslag van vingerafdrukken een stuk veiliger. Vingerafdrukken blijven geheim en kunnen niet teruggerekend worden uit de data die in de database zijn opgeslagen. Door er voor te zorgen dat bij verschillende toepassingen (paspoort, toegangscontrole) voor dezelfde vingerafdruk andere waarden voor AD en PI gegenereerd worden, zijn de gegevens in de verschillende databases niet met elkaar te relateren. Dit verhoogt de privacy.
Echter, het belangrijkste privacy bezwaar tegen opslag van vingerafdrukken wordt door hashing niet weggenomen. Een database met gehashte vingerafdrukken kan ook nog steeds gebruikt worden voor identificatie met behulp van enkel een vingerafdruk. Zo'n database is dus nog steeds geschikt voor bijvoorbeeld opsporing bij een misdrijf waar een vingerafdruk is gevonden. Om in zo'n geval de persoon te achterhalen wordt voor iedere entry in de database (die dus de naam van de houder, het pseudoniem PI en de additionele data AD bevat) de verificatie stap doorlopen. Dat wil zeggen: de vingerfadruk wordt geanalyseerd, het resultaat wordt met AD gehasht, en het resultaat PI* daarvan wordt vergeleken met de opgevraagde PI. Als er een match is dan is de opgevraagde naam hoogstwaarschijnlijk de identiteit van de eigenaar van de vingerafdruk. Dit is overigend niet zeker omdat er bij vingerafdrukken altijd een mogelijkheid bestaat dat er ten onrechte een match is (een zogenaamde false-positive) of juist ten onrechte geen match is (de zogenaamde false-negative). Bovenstaande zoektocht kan dus meerdere matches opleveren.
Vandaar dat in de vorige blogpost wordt uitgelegd dat de zogenaamde salt (de extra waarde waarvan de gehashte vingerafdruk moet afhangen, de additionele data AD hierboven is dus zo'n salt) niet moet worden opgeslagen samen met de gehashte vingerafdruk. Nadeel is echter dat voor het aanvragen van een nieuw paspoort, de eigenaar zelf de additionele data moet meebrengen. Maar wat nu als hij claimt deze verloren te hebben? Je kunt niet eisen dat de eigenaar de additionele data gaat onthouden, want het is namelijk een lang en willekeurig getal...
Als alternatief kan een tweede, makkelijk te onthouden salt (bijvoorbeeld de geboortedatum), als invoer van beide hash functies gedefinieerd worden. Deze salt wordt dan niet opgeslagen, maar moet echt onthouden worden (zie figuur).
De zoekmethode die hierboven beschreven is werkt dan niet direct meer. Echter, omdat de salt makkelijk te onthouden moet zijn, is er een risico dat hij ook makkelijk te raden is. Als we bijvoorbeeld de geboortedatum nemen, dan kan er nog steeds gezocht worden in de database. (Opmerking: gegeven een vingerafdruk is waarschijnlijk al een grove schatting van de leeftijd te maken.) Het kost dan alleen wel aanmerkelijk meer tijd. Immers nu moet voor iedere gevonden vingerafdruk, iedere mogelijke geboortedatum vanaf zeg 1910 geprobeeerd worden om de hash van de vingerafdruk te berekenen en vervolgens PI* met PI te vergelijken. Dat zijn 36.500 tests per entry in de database. Dat kost aanmerkelijk meer tijd, maar omdat dit allemaal geautomatiseerd kan worden, wordt het doorzoeken van de database in de praktijk niet erg veel lastiger. Een salt die veel lastiger te raden is (met meer entropie) voorkomt dit probleem, maar dan zijn we weer terug bij af: wat te doen met een burger die de salt vergeten is.…
Samengevat: voor beveiliging van de opslag van vingerafdrukken is hashing een goede oplossing, de privacy wordt er niet noemenswaardig door verbeterd (onder de voorwaarde dat het uitgifte proces van paspoorten rekening moet houden met burgers die alles kwijt zijn).
Wellicht dat door nog eens goed na te denken over een ander uitgifteproces van paspoorten, er een methode bedacht kan worden de veilig is maar niet afhangt van de opslag van vingerafdrukken.
[…] Die fotografeer je en met dat beeld maak je nepvinger en klaar ben je. Die truc is al vaker uitgehaald en je zou zo langzamerhand denken dat dat wel bekend zou zijn. Apple dacht dat zijn […]
[…] Dit lost een aantal beveiligingsproblemen op, maar het privacy probleem wordt daarmee niet voorkomen. Ook een database met gehashte vingerafdrukken kan immers nog doorzocht worden om een match met een gevonden vingerafdruk te vinden. Om dit te voorkomen moet de hash ook afhangen van andere, min of meer willekeurige data. Deze zogenaamde salt mag niet samen met de hash van de vingerafdruk worden opgeslagen, en mag niet makkelijk te raden zijn. Aan de andere kant moet een burger die een nieuw paspoort aanvraagt deze salt kunnen overleggen (om samen met zijn vingerafdruk aan te kunnen tonen dat hij inderdaad is wie hij claimt te zijn). Voor en achternaam zouden misschien als salt kunnen dienen – maar nader onderzoek is nodig in hoeverre dit echt de privacy afdoende beschermd. [Update: zie hiervoor mijn latere blog post] […]