Offuscamento dei dati transfrontalieri e come affrontarli?

7

Attualmente mi trovo di fronte a una situazione in cui ho bisogno di nascondere i dati per motivi legali (sono regole nazionali e non specifiche per me)

Avrò ancora bisogno di lavorare con team esterni a quest'area che avranno ancora bisogno di accedere a applicazioni / database per test / implementazione e così via, tuttavia i dati devono essere completamente oscurati.

Quali sono le tue esperienze in questo scenario?

es. Chi possiede quale fase del processo, quale accesso hanno le varie parti, quanto è strong la crittografia, come si verificano gli aggiornamenti

    
posta adolf garlic 22.11.2010 - 14:50
fonte

3 risposte

4

Un grande cliente finanziario con cui facciamo affari ha un processo automatizzato standardizzato per nascondere i dati. Non lo facciamo, quindi ho alcuni script in cui lo faccio a mano. Il punto è di lasciare dati ragionevolmente realistici (lunghezze di nomi, codici postali) mentre si rendono irrimediabilmente codificati i dati personali identificabili. Il loro sistema è molto più complicato di questo, ma fondamentalmente quando i dati di produzione vengono copiati negli ambienti di sviluppo e di controllo qualità, verranno automaticamente codificati. In questo modo non c'è il potenziale per "dimenticare" di fare un po 'di rimescolamento.

Password:
Impostali tutti in qualcosa che gli account di prova usano: come Password1 o 1234567 .

Numeri ID fiscali, numeri di previdenza sociale, numeri di previdenza sociale:
Prendi le prime 3 cifre e genera numeri casuali per il resto. Negli Stati Uniti, le prime 3 cifre vengono generalmente assegnate in base al luogo in cui si è vissuto quando è stato rilasciato l'SSN, quindi non tutte le combinazioni delle prime 3 cifre sono valide. Per EINs, prendi le prime 2 cifre, poiché non tutte le combinazioni delle prime 2 cifre sono valide. Regola quali cifre vengono lasciate da sole se il tuo Paese utilizza regole diverse.

Nomi:
Hash e base64 il nome e il cognome separatamente. Prendi la prima lettera del nome unhash e aggiungi l'hash in seguito e troncare il risultato alla lunghezza del nome originale

Esempio: Name="John Doe" (sto usando SHA384)

Quindi John Doe diventa trasformato in Jnbn Dnh . Aiuta a mantenere i nomi la stessa lunghezza che può aiutare a segnalare problemi di usabilità.

Se si dispone di regole come "i nomi non possono contenere cifre", è necessario rimuovere i valori di base 64 che non sono validi, anche in lettere minuscole (eseguite nel seguente codice di esempio).

Indirizzi: I nomi delle strade e i nomi delle città vengono sottoposti a hash come i nomi sopra riportati. I numeri rimangono gli stessi. Stato e zip rimane lo stesso.

Quindi 1313 Mockingbird Lane diventa 1313 Mvtqiwtuqrd Lzzx

Numeri di telefono: Lascia lo stesso codice area, genera cifre casuali per le cifre rimanenti.

Numeri di carta di credito:
Non dovresti immagazzinarli affatto.

Ecco alcuni esempi e amp; codice C # grezzo per l'hashing e il troncamento (semplice visualizzazione del concetto)

    using System.Security.Cryptography;  
    using System.Text.RegularExpressions;   

    public string ScrambleInput(string sInput)
    {
        string sReturn = sInput.Substring(0,1);
        string sTemp = string.Empty;
        System.Security.Cryptography.SHA384Managed Hasher = new SHA384Managed();
        System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
        byte[] buff = new byte[sInput.Length];
        buff = enc.GetBytes(sInput);
        Hasher.ComputeHash(buff);
        sTemp = Convert.ToBase64String(Hasher.Hash, 0, Hasher.Hash.Length, System.Base64FormattingOptions.None);
        sTemp = sTemp.ToLower().Replace("+", "").Replace("/", "");
        sReturn += Regex.Replace(sTemp, @"\d", "");
        sReturn = sReturn.Substring(0, sInput.Length );
        return sReturn;
    }
    
risposta data 23.11.2010 - 18:47
fonte
2

Per prima cosa, come dici tu, questa non è crittografia o forse addirittura offuscamento. Non è necessario alcun modo per recuperare i dati: la limitazione legale non è sull'esportazione sicura dei dati, ma sull'esportazione .

Vale anche la pena notare che ciò includerà qualcuno al di fuori del paese che accede a un database all'interno del paese (esportando un singolo record sta ancora esportando dati) in modo che non possano avere accesso ai tuoi sistemi con qualsiasi mezzo.

Il problema con l'anonimizzazione dei dati è molto difficile da fare. Devi fregare ogni informazione personale identificabile (non limitarti a mescolarle) tra cui nomi, indirizzi, e-mail, date di nascita, numeri di previdenza sociale. Tutto ciò che potrebbe essere utilizzabile anche se solo come parte di un composito deve essere rimosso. È inoltre necessario controllare i campi dei commenti, i campi delle note, i campi di controllo e qualsiasi altra cosa per questi stessi valori.

Durante lo scrubbing dei dati, non scambiare le cose. Sostituiscili ciascuno da un elenco casuale di valori possibili. Se li si scambia, i dati sono ancora lì e ci sono dei rischi che saranno scambiati e scambiati o in qualche altro modo rimangono leggibili. Ricorda, la restrizione è sull'esportazione dei dati, non rendendo difficile la lettura.

Oltre a questo è necessario capire cosa potrebbe essere implicito dai dati. Supponiamo che sia un database di noleggio di film e che i ragazzi fuori dal paese sappiano da una mail di supporto che qualcuno ha noleggiato un particolare alcune volte. Questa è una ricerca diretta che probabilmente ti darà una lista molto breve. Fai un riferimento incrociato con un altro paio di cose (è un ragazzo quindi probabilmente non lo affitterebbe e così via) e senza che il suo nome sia ovunque, hai tutta la sua storia.

Leggi questo: link per un esempio migliore.

Sottintendi che i motivi per cui le persone al di fuori del paese hanno bisogno del database sono per ragioni tecniche, quindi i dati reali non sono importanti per loro - solo che hanno qualcosa da eseguire, controllare che funzioni e così via.

Se questo è il caso, allora per i miei soldi il modo migliore è non preoccuparti. Invia loro un database di test senza dati reali. Servono più dati del database di test? Scrivi script per generarlo.

Gli script devono quindi essere gestiti insieme al resto del database e dell'applicazione, aggiornati con ogni nuova versione e così via.

Se hai un database scheletro (cioè con struttura ma nessun dato) puoi semplicemente dare agli altri ragazzi l'accesso agli script per creare database come vogliono (che è quello che consiglierei). Se si procede con un processo di scrubbing dei dati in tempo reale è probabilmente necessario mantenere gli script per farlo nello stesso modo, ma è necessario eseguire il processo da soli: creerei personalmente un database di test con ogni versione.

    
risposta data 23.11.2010 - 18:33
fonte
0

Non so se ci sono buone pratiche per questo genere di cose. Ma se mi venisse assegnato questo compito, penso che identificherei quali correlazioni generano la maggior parte dei dati e poi proviamo a randomizzare quelle correlazioni.

Il problema con un dato non è il dato stesso. Sono le correlazioni che possono essere fatte. Qualsiasi schema di offuscamento farebbe meglio a concentrarsi sulla randomizzazione di tali correlazioni in modo così completo da non poter essere nuovamente estratte. Una correlazione indipendente da altre parti di dati è la rarità complessiva di un dato e la correlazione dovrebbe anche essere oscurata.

Ad esempio, identifica un limite di rarità per il nome e il cognome, quindi sostituisci tutti i nomi e i nomi al di sotto del limite di rarità con altri che sono altrettanto rari, ma presi da un elenco casuale di nomi di bambini o qualcosa del genere. Potrei anche copiare alcuni nomi da un posto all'altro per cambiare le frequenze a cui si verificano. Ad esempio, cambia tutti i "John" in "Avercrombie" e tutti "Hilda" in "Mary".

Quindi inizierei a scambiare a caso i nomi con altri nomi nelle tabelle. Farei lo stesso (ma indipendentemente) per i cognomi. Vorrei anche iniziare a scomporre relazioni importanti. Ad esempio, con un database in stile Netflix, l'elenco dei film che le persone hanno noleggiato. Sposterei casualmente i film dalla lista di una persona a un'altra fino a quando tutte le liste non fossero state confuse. Naturalmente, se quello che vuoi è poter perfezionare un algoritmo di predizione con dati "anonimizzati", ciò renderebbe i dati inutili, quindi dovrai esercitare un giudizio su quali dati hai fatto con questo.

    
risposta data 23.11.2010 - 17:54
fonte