¿Un código en vez del nombre basta?
La seudonimización consiste en cambiar los identificadores de una persona por un código. Permite trabajar con los datos sin ver quién es cada cual, pero no los vuelve anónimos.
Un analista que cuenta los pedidos de cada cliente no necesita nombres. ¿Basta cambiar el nombre por un número para que nadie reconozca a nadie?
Al terminar esta lección
Nota
Puedo seudonimizar datos y juzgar si siguen siendo anónimos.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Seudónimo | un código que ocupa el lugar del nombre | C-001 |
| Anonimización | quitar todo lo que lleva hasta una persona, sin vuelta atrás | |
| Hash | una huella de largo fijo que se calcula a partir de un dato | |
| Sal | un texto secreto que se añade antes de calcular el hash | |
| Grupo pequeño | pocas personas que comparten los mismos datos |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un seudónimo sustituye al nombre
Un seudónimo es un código, como C-001, que ocupa el lugar del nombre. Quien guarda la tabla que une códigos y nombres puede deshacer el cambio.
Por eso la seudonimización baja el riesgo, pero los datos siguen siendo personales. Guarda esa tabla de unión aparte y bajo llave.
Ejecuta las dos líneas de preparación. Después crea códigos para tres clientes de la tienda.
Aceptar el certificado del servidor
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnfSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un nombre corto para el cliente
alias db='mariadb -h db -u student -pstudent -t -e'Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un código por cliente
db "SELECT id, CONCAT('C-', LPAD(id, 3, '0')) AS codigo FROM shop.customers WHERE id <= 3 ORDER BY id"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ejemplo resuelto: lo que ve cada quien
| Quién | Qué ve | Puede volver a la persona |
|---|---|---|
| Analista de pedidos | Código C-001 y pedidos | No, si no tiene la tabla de unión |
| Responsable de datos | La tabla de unión | Sí, y por eso va aparte |
| Quien roba solo el informe | Códigos y pedidos | Con pocos datos más, a veces sí |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
El mismo dato da siempre el mismo hash
Un hash es una huella que se calcula a partir de un dato. El mismo correo da siempre la misma huella, y de la huella no se vuelve al correo.
Pero hay un truco: quien adivina un correo calcula su huella y la compara. Una sal lo impide, porque es un texto secreto que se añade antes de calcular.
Mira las huellas de tres correos, sin sal y con sal.
La huella de cada correo
db "SELECT id, LEFT(SHA2(email, 256), 12) AS huella FROM shop.customers WHERE id <= 3 ORDER BY id"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Adivinar un correo con su huella
db "SELECT id FROM shop.customers WHERE LEFT(SHA2(email, 256), 12) = LEFT(SHA2('[email protected]', 256), 12)"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
La misma huella, ahora con sal
db "SELECT id, LEFT(SHA2(CONCAT('sal-secreta-', email), 256), 12) AS huella FROM shop.customers WHERE id <= 3 ORDER BY id"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un grupo pequeño delata a la persona
Quitar el nombre no basta. Si en una ciudad vive una sola persona de la tabla, la ciudad la señala.
Antes de compartir datos cuenta cuántas personas hay en cada grupo. Un grupo de una o dos personas es una señal de alarma.
La salida es dar menos detalle: agrupar por país en vez de por ciudad hace los grupos más grandes.
Grupos de menos de tres personas
db "SELECT country, city, COUNT(*) AS personas FROM shop.customers GROUP BY country, city HAVING COUNT(*) < 3 ORDER BY country, city"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
El mismo recuento por país
db "SELECT country, COUNT(*) AS personas FROM shop.customers GROUP BY country ORDER BY country"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un error frecuente
Advertencia
Mucha gente cree que cambiar el nombre por un código vuelve anónimos los datos. No es así. Con la tabla de unión, o con unos pocos datos más, se vuelve a la persona. Los datos son anónimos solo cuando ni tú puedes unirlos a nadie.
Pruébalo: un informe con códigos
-- Un informe de donaciones sin nombres: cada persona es un código.
SELECT 'D-' || id AS seudonimo, city, amount FROM donors
ORDER BY id;
-- Cambia la letra D por otra y ejecútalo otra vez.
Pruébalo: contar el tamaño de cada grupo
-- ¿Cuántas personas hay en cada ciudad?
SELECT city, COUNT(*) AS personas FROM donors
GROUP BY city
ORDER BY city;
-- Una ciudad con una sola persona la señala. Muestra solo las ciudades con menos de 2.
Para ir más allá
Una universidad quiere publicar las notas medias por titulación. Una titulación nueva tiene tres alumnos. Explica por qué publicar su media puede delatar a alguien.
Después propón dos arreglos: uno que junte grupos y otro que deje fuera los grupos pequeños. Di qué pierde cada uno.