Come anonimi correttamente i dati, se l'hashing non è sufficiente?

9

Oggi ci sono notizie su blog di Bruce Schneier e ArsTechnica su come la città di New York ha rilasciato informazioni su Cab / Taxi driver, i loro viaggi e così via.

Fondamentalmente, le informazioni sensibili erano semplicemente hash MD5. Dato che l'input era limitato (3 numeri, 3 lettere, al massimo), è stato facile fare un attacco di forza bruta: generare tutte le possibili combinazioni e quindi effettuare una ricognizione.

Considerando la natura delle informazioni (input molto piccolo, per generare facilmente tutte le combinazioni), come potrebbero questi dati essere anonimi in modo corretto?

Alcuni approcci che mi sono venuti in mente ::

  • La sicurezza attraverso l'oscurità (usa un numero "segreto" di iterazioni) è solo la sicurezza attraverso l'oscurità.

  • Aggiungi un sale generico, unico, aumenterebbe la forza bruta dello 0%: semplice appendi il sale e fatto.

  • Aggiungendo un sale unico per utente, aumenterebbe la forza bruta, ma non troppo: prendi il sale e calcola le 3 cifre 3 lettere per ogni sale.

Che cosa potrebbe essere fatto?

    
posta woliveirajr 25.06.2014 - 16:28
fonte

4 risposte

13

È possibile utilizzare la tokenizzazione. Significa che crei un database separato con ID generati casualmente che mappano a 3 numeri e 3 lettere. Quindi inserisci il token al posto della vera identità.

Un'altra opzione, se non hai bisogno di mappare i dati, puoi usare, per esempio, un HMAC (algoritmo di hashing) con un segreto generato a caso lungo. Senza il segreto non puoi rinforzare gli ID originali, anche quando sono composti da 1 solo carattere.

L'uso di un HMAC è in realtà il modo corretto di usare un "sale segreto" (un sale non è mai considerato segreto nella criptorafia).

    
risposta data 25.06.2014 - 16:46
fonte
4

Il modo di non rilasciare i dati è di non rilasciare i dati.

La tokenizzazione non funzionerebbe molto bene, perché tutto quello che devo fare per sapere ovunque e quando un driver era sapere dovunque e quando c'era un driver, e poi conosco il token del driver.

Se non vuoi che io sia in grado di capirlo, allora non rilasciare quei dati in nessuna forma.

    
risposta data 26.06.2014 - 00:24
fonte
1

Se l'input è così limitato, avrai sempre questo problema.

L'unica soluzione è aggiungere altro "materiale" per diversificare l'input. Come hai detto, il sale è un'opzione, ma se è compromesso non farà molto bene. Lo stesso vale per l'uso di chiavi segrete o password.

Direi che in questo caso specifico, la risposta sarebbe concatenare più informazioni sulla cabina. Ad esempio:

Nonce | Driver Name | Driver's License | License Plate | ...

Sostanzialmente un input più ricco per compensare la forzatura brutale facile della targa. Oh, e ovviamente, usa una funzione hash crittograficamente sicura: -)

    
risposta data 25.06.2014 - 16:42
fonte
1

Se vuoi renderlo anonimo, non fornisci affatto una chiave. Nessun hash non forzato di dati privati, nessun token surrogato, niente.

Dici solo "Un driver", "Un altro driver", "Un altro driver", ecc.

Se un particolare driver necessita di essere rinviato ai suoi dati personali, allora si vorrebbe quel token surrogato (un guid / uuid per ogni driver nel database). Ma se l'unico obiettivo è presentare al pubblico alcune statistiche sui driver anonimi, nessuna chiave è necessaria, basta elencare i dati non sensibili.

    
risposta data 25.06.2014 - 17:59
fonte

Leggi altre domande sui tag