Analisi

Anonimizzare i dati

Recentemente ho lavorato su un progetto che aveva un esigenza abbastanza particolare, c’era la necessità primaria di non tenere in memoria i dati degli utenti (se non per il tempo strettamente necessario alla fruizione del servizio, circa tre mesi) che si scontrava con l’esigenza di analizzare le informazioni, creare dei modelli di utente e fare una serie di analisi statistiche. Inoltre i dati di utilizzo degli utenti potrebbero essere necessari per eventuali controlli amministrativi/legali per almeno 5 anni.

Avevamo quindi due esigenze contrastanti: non memorizzare nulla e memorizzare tutto. 

La chiave di volta che ci ha permesso di risolvere il problema è stata l’anonimizzazione dei dati degli utenti. 
Abbiamo quindi registrato in una tabella i dati degli utenti e creato un algoritmo mono direzionale che prende questi dati e li converte in una stringa di testo insignificante e dalla quale non è possibile tornare al contenuto originale. 
Ad esempio nome, cognome, giorno di nascita e provincia (Fabio Zappa 16 Brescia) diventano A4b532Efe5658B.

Non posso pubblicare l’algoritmo esatto che compie questo passaggio ma sostanzialmente si tratta di realizzare una serie di hash MD5 SALT dei valori concatenati in un certo modo e selezionando poi solo alcune sezioni del testo, per altro anche la lunghezza della stringa è determinata nell’algoritmo.

C’è una remotissima possibilità che due gruppi di dato producano lo stesso codice ma la probabilità è talmente bassa (infinitesimale) che non ci crea problemi e anche nella improbabile ipotesi che si dovessero verificare uno o più codiciuguali non rappresenterebbe un problema.

La tabella con i dati degli utenti viene svuotata periodicamente (i dati restano all’interno per tre mesi) e tutti i riferimenti sulla navigazione, accessi, statistiche sono legati al codice generato.

In questo modo chiunque accede alle statistiche non sa a chi sono riferite.

Se ad esempio un utente fa degli esami medici particolari è inevitabile che i medici, impiegati e amministrativi coinvolti nel processo siano a conoscenza di questi dati ed è sicuramente più che accettabile per l’utente. Potrebbe essere un pò meno accettabile che un impiegato amministrativo, che magari conosco e che sarà assunto fra 3 anni abbia accesso a queste informazioni. Però è anche vero che lo stesso impiegato avrà bisogno, al fine di migliorare il servizio, di sapere quante visite di un certo tipo sono state fatte, sapere che mediamente chi fa la visita A con esito X successivamente fa la visita B e così via.

Qualora si volesse ricostruire la situazione di un utente oltre i tempi previsti è necessario ricrearne il codice partendo dai dati originali. Nella malaugurata ipotesi che qualcuno non autorizzato entri in possesso del database potrebbe ricavare un sacco di informazioni su come funziona la piattaforma ma non riuscirebbe a risalire a nessun dato personale. Anche se fosse a conoscenza del dato personale per poter ricostruire il codice dovrebbe anche scoprire l’algoritmo di codifica dei dati che è situato su un altro server.

Fabio Zappa

Mi occupo di programmazione web in PHP dal 2001, il mio lavoro spazia dalla realizzazione di software gestionali, software di project management, CRM ed ERP, alla programmazione di siti e portali Internet per Web Agency.

Ultimi Articoli