Cuando en criptografía decimos que un sistema de autenticación es ANÓNIMO, hablamos de un concepto muy concreto, que llevamos refinando desde que, en los 80, Chaum publicase sus primeros sistemas de credenciales anónimos.
En criptografía, un sistema de autenticación es ANÓNIMO, si ningún atacante puede ganar el “juego” de la siguiente imagen.
(Sí, es una definición de muchas, pero es bastante “estándar” y, normalmente, otras definiciones lo que hacen es añadir requisitos de privacidad, no quitar)
Como esas 4 líneas son bastante ilegibles, lo explico:
Hacemos un experimento mental, en el que los usuarios se tienen que proteger de un atacante. En este experimento, el emisor de credenciales genera su clave de firma digital, para poder firmar las credenciales de los usuarios
Después, el atacante puede “forzar” que los usuarios del sistema se autentiquen.
Finalmente, el atacante elige dos usuarios, el experimento selecciona uno de ellos aleatoriamente, y “desafía” al atacante a adivinar cuál de los dos se ha usado en un proceso de autenticación.
Básicamente:
- Atacante: "Elijo a Fulanito y Menganito"
- Experimento: "He hecho que X se autentique. Aquí tienes el log de las comunicaciones. Dime si X = Fulanito, o si X = Menganito."
- Atacante: "X = Menganito!"
En este experimento, el atacante controla al emisor de los credenciales, y controla a los verificadores en el proceso de autenticación.
Es decir, asumimos que son entidades CORRUPTAS.
Esto es fundamental.
¿Por qué? Estas entidades (sobre todo el emisor) suelen ser entidades con bastante… poder.
Poder de monitorizar comunicaciones, poder de introducir “trapdoors” en los credenciales… cualquier cosa mala que se nos ocurra.
Por eso, en lo que a privacidad se refiere, el modelo de seguridad DEBE asumir que emisor y verificadores son corruptos, y que van a intentar desanonimizar a los usuarios del sistema.
Volviendo a la razón de ser del experimento ¿cuál es el quid de la cuestión?
Si el atacante no tiene ni idea de si quien se ha autenticado es FULANITO o MENGANITO, lo mejor que podrá hacer es decir uno al azar.
Un sistema que garantiza que el atacante que no puede hacer nada mejor que adivinar al azar, es un sistema ANÓNIMO. De lo contrario, no lo es.
"Sencillo".
Bien. Ahora volvemos con el Pajaporte, y lo comparamos con este modelo que acabo de explicar y que los criptógrafos llevamos depurando y estudiando DÉCADAS.
Pues resulta que, a primera vista, el Pajaporte no cumple este modelo de seguridad. Directamente.
¿Por qué no? Por esto que comentaba aquí 7 tweets más arriba.
El sistema del Pajaporte, implícitamente, está asumiendo que el emisor de los credenciales y el verificador (el sitio porno) SON HONESTOS.
¿Cuál es la consecuencia, más allá de que no se cumpla de entrada el modelo de seguridad QUE LLEVAMOS ESTUDIANDO DÉCADAS?
Pues se ve muy fácil. Resumo el flujo de un ataque, siguiendo el flujo descrito por el @Ministro aquí :
1. Cartera pregunta a Administración si usuario es mayor de edad.
(Aquí, el usuario se autentica con su DNIe o similar.)
2. Administración envía credencial diciendo “mayor de edad”.
(Esta credencial incluye 30 claves públicas con un valor concreto, algo tipo 0x1234…ABCD. Para que la credencial sea válida, la Administración tiene que VER y FIRMAR ese 0x1234…ABCD.)
3. Web pide credencial anónima a la cartera.
Cartera crea una firma digital con una de las 30 claves (los valores tipo 0x1234…ABCD)
¿Qué pasa ahora? La web necesita la clave pública para verificar que el usuario posee la clave privada correspondiente, así que la cartera se la tiene que mandar ese valor 0x1234…ABCD (ver Nota 1 al final del hilo).
Es decir.
La administración sabe que la clave pública 0x1234…ABCD pertenece a FULANITO, que se ha autenticado con su DNIe o similar.
Y
La web porno sabe que un usuario con la clave pública 0x1234…ABCD está intentando ver su contenido.
Y aquí está el problema.
Recuerdo que, en sistemas de autenticación ANÓNIMA, emisor de credenciales (la Administración) y verificador (web porno o, en el Pajaporte, el proveedor de Inernet) se asumen CORRUPTOS.
Por lo tanto, debemos asumir que el emisor puede ir al verificador y decirle:
“Oye, dime si 0x1234…ABCD ha accedido a tu web”.
El verificador (que es corrupto) se lo dice, y el emisor (que es corrupto) dice: "0x1234...ABCD pertenecía a FULANITO".
Sin más. Bye bye anonimato.
• • •
Missing some Tweet in this thread? You can try to
force a refresh
Así que, en realidad, lo que debemos preguntarnos es: ¿Estamos seguros de que la Administración y el Proveedor de Internet no van a caer en la tentación?
Las buenas prácticas de DÉCADAS de investigación en criptografía nos dicen que no asumir eso no es buena idea.