¿Cómo anonimizar correctamente los datos, si el hashing no es suficiente?

9

Hoy hay noticias en blog de Bruce Schneier y ArsTechnica sobre cómo la Ciudad de Nueva York publicó información sobre taxis y taxis conductores, sus viajes, etc.

Básicamente, la información confidencial era simplemente hash MD5. Dado que la entrada era limitada (3 números, 3 letras, como máximo), fue fácil realizar algunos ataques de fuerza bruta: generar todas las combinaciones posibles y luego hacer una revisión.

Teniendo en cuenta la naturaleza de la información (una entrada muy pequeña, para generar fácilmente todas las combinaciones), ¿cómo podrían estos datos ser anonimizados correctamente?

Algunos enfoques que se me han ocurrido ::

  • La seguridad a través de la oscuridad (usar un número "secreto" de iteraciones) es solo seguridad a través de la oscuridad.

  • Agregar una sal general y única, aumentaría la fuerza bruta en un 0%: simplemente agregue la sal y listo.

  • Agregar una sal única por usuario, aumentaría la fuerza bruta, pero no demasiado: tome la sal y calcule los 3 dígitos de 3 letras para cada sal.

¿Qué se podría hacer?

    
pregunta woliveirajr 25.06.2014 - 16:28
fuente

4 respuestas

13

Puedes usar tokenización. Lo que significa que creas una base de datos separada con identificaciones generadas al azar que se asignan a 3 números y 3 letras. Luego inserta el token en lugar de la identidad real.

Otra opción, si no necesita volver a asignar los datos, puede usar, por ejemplo, un HMAC (algoritmo de hash) con un largo secreto generado aleatoriamente. Sin el secreto, no se pueden imponer las identidades originales, incluso cuando solo constan de 1 carácter.

El uso de un HMAC es en realidad la forma correcta de usar una "sal secreta" (una sal nunca se considera secreta en la criptografía).

    
respondido por el Lucas Kauffman 25.06.2014 - 16:46
fuente
4

La forma de no divulgar los datos es no liberarlos.

La tokenización no funcionaría muy bien, porque todo lo que tengo que hacer para saber dónde y cuándo estaba el conductor es saber dónde y cuándo estaba el controlador, y luego sé la ficha del controlador.

Si no quiere que yo pueda resolver esto, entonces no divulgue esos datos de ninguna forma.

    
respondido por el jjanes 26.06.2014 - 00:24
fuente
1

Si la entrada es tan limitada, siempre tendrá este problema.

La única solución es que agregue más "cosas" para diversificar la entrada. Como dijiste, la sal es una opción, pero si está comprometida no servirá de mucho. Lo mismo ocurre con el uso de claves secretas o contraseñas.

Diría que en este caso específico, la respuesta sería concatenar más información sobre la cabina. Por ejemplo:

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

Básicamente, una entrada más rica para compensar el forzamiento brutal fácil de la placa. Ah, y obviamente, use una función hash criptográficamente segura :-)

    
respondido por el sazr 25.06.2014 - 16:42
fuente
1

Si desea anonimizarlo, no proporciona ninguna clave. Sin hash de datos privados sin necesidad, sin token sustituto, nada.

Simplemente dices 'Un controlador', 'Otro controlador', 'Otro controlador', etc.

Si a algún controlador en particular se le debe hacer referencia a sus datos personales, querrá ese token sustituto (Un guid / uuid para cada controlador en la base de datos). Pero si el único objetivo es presentar al público algunas estadísticas sobre los controladores anónimos, no es necesaria ninguna clave, simplemente enumere los datos no confidenciales.

    
respondido por el Andrew Hoffman 25.06.2014 - 17:59
fuente

Lea otras preguntas en las etiquetas