# Data masking

Il data masking è una procedura di offuscamento dati; è impiegata per la salvaguardia della privacy nell’utilizzo e nel testing di piattaforme online. Attraverso il masking, i dati sensibili vengono sostituiti con altri dati o con stringhe di caratteri, in modo da impedire l’identificazione della persona fisica. Questa procedura previene l’appropriazione indebita dei dati a fini commerciali, ma ne permette l’utilizzo per lo sviluppo di applicativi, siti web e collaudo software.
Il data masking è utilizzato e raccomandato per attuare le misure di sicurezza previste dal Regolamento generale sulla protezione dei dati (GDPR).

## Regole generali per eseguire il data masking

Il data masking deve essere irreversibile, qualsiasi sia la tecnica utilizzata. I dati in output non possono essere riconvertiti alla loro forma originale. I risultati devono comunque essere rappresentativi dei dati di origine.
Quando si utilizzano soluzioni di data masking è necessario mantenere l’integrità referenziale dei dati. Alcuni attributi presenti all’interno del database possono infatti essere utilizzati come riferimento per altri elementi. Per esempio, se il numero di una carta di credito utilizzato come chiave primaria all'interno di una tabella è convertito in un insieme di caratteri, tutti i valori a esso collegati devono essere codificati secondo i medesimi criteri.
Molti database relazionali, per ottimizzare l’archiviazione dei dati, consentono agli elementi di relazionarsi tra loro attraverso chiavi. Mescolare o sostituire queste chiavi durante i processi di mascheramento di dati potrebbe avere conseguenze sul funzionamento del database a causa della perdita di relazioni tra i dati.
Non è necessario codificare l’intero database. Devono però essere codificati tutti i dati sensibili e i dati non sensibili che possano ricondurre a quelli sensibili.
Il mascheramento dei dati deve essere un processo ripetibile: non è consigliabile eseguire mascheramenti “una tantum”, che sarebbero difficili da mantenere e poco efficaci.
È spesso importante che il mascheramento mantenga inalterato il tipo di dato all'interno dei database, perché i database per esempio non accettano testo in campi numerici o riferiti a date. Ci sono però situazioni in cui un dato specifico può essere conservato come un dato generico (per esempio, un numero può essere conservato come testo generico).
Anche la struttura dei dati deve di regola rimanere inalterata: se i dati originali hanno una lunghezza compresa tra due e venti caratteri, i dati alterati dovrebbero avere la stessa lunghezza.
In alcuni casi può anche essere necessario mantenere i raggruppamenti logici di valori. Per esempio, il mescolamento casuale di dati relativi alla posizione geografica di determinati soggetti, indicata attraverso il codice postale, risulterebbe nella perdita di informazioni geografiche importanti.

## Data masking statico e dinamico

Durante le fasi di sviluppo è necessario impiegare i dati per eseguire dei test sul corretto funzionamento del database. Per permettere questa operazione senza compromettere la privacy dell’utente, si fa ricorso a due tipologie di masking: statico e dinamico.

### Data masking statico

Il data masking statico viene utilizzato per il testing di applicativi su un database. Viene creata una copia del database originale, che viene poi caricata su un server separato. Il numero di informazioni contenute nel database copia viene ridotto, lasciando a disposizione solo i dati necessari per condurre test specifici. I dati rimasti subiscono un processo di mascheramento, e la versione offuscata del database viene inviata ai programmatori.

### Data masking dinamico

Il data masking dinamico (masking on-the-fly) avviene durante il processo di trasferimento dei dati necessari alla progettazione agli sviluppatori, e non prevede la registrazione intermedia su alcun supporto di memorizzazione. Questo tipo di masking è più efficiente per le organizzazioni che utilizzano un’integrazione continua dei dati e non hanno il tempo necessario per creare e caricare i backup del database. Con l’integrazione continua è possibile inviare agli sviluppatori piccoli set di dati per i test.
Attraverso il data masking dinamico è anche possibile effettuare un offuscamento parziale dei dati. Attraverso questa procedura vengono mascherati dati sensibili a utenti non autorizzati, permettendo comunque la fruizione dell’interfaccia.
Per esempio, un addetto di un call center può identificare un cliente tramite gli ultimi quattro numeri della sua carta di credito, senza però accedere al numero completo.

## Metodi di data masking
### Pseudonimizzazione

La pseudonimizzazione nasconde l’identità del soggetto a terzi e riduce il rischio che i dati vengano collegati a domini diversi.
Attraverso questo metodo i dati personali vengono trattati in modo tale che non possano più essere attribuiti a uno specifico interessato senza l’utilizzo di informazioni aggiuntive, che devono essere conservate separatamente.
La pseudonimizzazione può essere applicata in diversi modi. Per esempio, può essere effettuata dal titolare del trattamento, al momento della raccolta dei dati, per una successiva elaborazione. Un'altra possibilità di applicazione è la pseudonimizzazione affidata a terzi che, una volta effettuato il trattamento, inoltreranno i dati al titolare.
Le tecniche di pseudonimizzazione sono:
* Contatore: si tratta della forma più semplice di pseudonimizzazione. A ogni dato viene associato un numero da un contatore (che fornisce numeri incrementandoli). Questa tecnica è utile per set di caratteri molto semplici.
* Generatore di numeri casuali: è simile al contatore, ma fornisce numeri casuali.
* Funzione crittografica di hash: questo metodo permette di associare a stringhe di lunghezza variabile altre di lunghezza fissa.
* Codice di autenticazione del messaggio: funziona come la precedente ma genera una chiave segreta per pseudonimizzare.

### Anonimizzazione

L’anonimizzazione è una procedura che fornisce informazioni anonime, ovvero informazioni che non fanno riferimento a una persona fisica identificata o identificabile.
Si differenzia dalla pseudonimizzazione, che associa uno “pseudonimo” a ogni dato.
Anche in questo caso non esiste un'unica tecnica o metodologia.
* Blocco della correlabilità: questo metodo impedisce di risalire a una singola persona o a un gruppo di persone che hanno dati in diverse banche dati, attraverso, per esempio, un’analisi di correlazione.
* Rumore statico: il metodo consiste nell’alterare gli attributi dei dati in modo che non siano riconducibili al soggetto, ma mantengano comunque la possibilità di essere utilizzati.
* Scrambling: il metodo mescola tra di loro le lettere dell’alfabeto, secondo un determinato schema.
* Generalizzazione: il metodo consiste nell’estendere o aumentare le scale di grandezza dei vari attributi. Per esempio, una regione può essere sostituita con una nazione.

### Shuffling

Le tecniche di data shuffling consistono nel mescolare in modo casuale i dati all’interno di un database, tra una colonna e l’altra. Si possono mantenere relazioni logiche tra colonne.
Un classico caso per l’utilizzo di queste metodologie è la generazione di dati per test, dove si richiede di avere dati reali come input per nuovi progetti, evitando però possibili identificazioni.
Le tecniche di shuffling non andrebbero usate da sole, ma dovrebbero accompagnare le tecniche di data masking. Questo perché non sono perfette e possono mantenere alcune relazioni tra i valori.
Esistono diversi tipi di shuffling:
* Shuffling casuale: mescola casualmente i dati tra le colonne senza però mantenere un collegamento logico tra esse.
* Designazione di gruppi: consiste nel collegare le colonne che appartengono allo stesso gruppo (per esempio numero di telefono con prefisso e nazione), e mescolare i loro valori. Il difetto di questa metodologia è che le colonne collegate fra loro inizialmente, mantengono i valori iniziali, il che dà la possibilità di stabilire alcune relazioni iniziali.
* Designazione delle partizioni: i dati vengono mescolati all’interno di partizioni specifiche (per esempio mescolando i valori di tutte le righe che hanno "Giappone" come valore della colonna "nazione"). Questo metodo permette di mantenere intatti alcuni collegamenti fra attributi. Lo svantaggio principale è che resta possibile vedere alcune relazioni iniziali.

### Crittografia

In termini informatici, la crittografia consiste nel rendere illeggibile un set di dati. Per rendere leggibile i dati è necessaria una chiave di decrittatura.
La crittografia si basa sull’utilizzo di algoritmi di cifratura ed è il metodo più difficile di mascheramento dati. I dati non criptati, detti plaintext, subito il processo di cifratura non sono più interpretabili dalla macchina (ciphertext). Questo processo previene la perdita di informazioni sensibili tramite hacking.
I metodi di crittografia sono molti, affidati a svariati software e in costante evoluzione.
* Cifratura a chiave simmetrica: utile per sistemi chiusi o singoli utenti. La chiave di cifratura è la stessa sia per la codifica che per la decodifica, e viene fornita direttamente al destinatario. Questo metodo è più veloce rispetto alla cifratura asimmetrica, ma è molto più rischioso, perché la chiave di cifratura potrebbe essere intercettata.
* Cifratura a chiave asimmetrica: questo metodo utilizza due tipi di chiavi: una privata, che deve rimanere segreta, e una pubblica, che può essere condivisa. C’è un collegamento matematico tra le due. Entrambe possono decrittare o crittografare un messaggio, utilizzando sempre la chiave opposta a quella utilizzata per uno dei due passaggi.