, 26 tweets, 3 min read Read on Twitter
Han pasado ya unos cuantos días desde el #1Oct, así que creo que urge el contar esta historia.
El día 30, leí esto en Hacker News: "How the Catalan government uses IPFS to sidestep Spain's legal block" news.ycombinator.com/item?id=153675…
A grandes rasgos, en el artículo se explica que, para evitar el bloqueo, la Generalitat había preparado una web replicada mediante IPFS.
Para que la web funcione en IPFS, se debe poder replicar entera, incluída la base de datos.
Por lo tanto, en lugar de usar MariaDB o Postgres, la información está distribuida en ficheros planos.
Dicha BDD vincula a cada ciudadano con el lugar dónde debería acudir a votar el pasado #1Oct (antes de activar el censo universal).
Cada entrada se identifica con un hash generado con estos datos: 5 últimos dígitos DNI, letra NIF, fecha de nacimiento y código postal.
Este hash se genera mediante 1714 (número simbólico) iteraciones de SHA256 sobre los datos mencionados arriba de cada ciudadano.
En el artículo, se sugiere la posibilidad de obtener los datos de los ciudadanos con un ataque por la fuerza bruta, pero se estima difícil.
Lamentablemente, como voy a demostrar, el cifrado es mucho más débil. Esto se debe fundamentalmente a dos cuestiones:
1. Los hashes no tienen SALT, por lo que se puede comparar cada hash generado con todas las entradas, indexadas en memoria (~2.2GB)
2. La parte predecible (fecha nacimiento y C.P.) se repite y es semánticamente completa, lo que facilita ataques por lotes y divide&conquer.
Por ejemplo, la CPU de este PC (Phenom II X4 955) es capaz de generar unos 4000 hashes por segundo.
Para hacer un ataque exhaustivo, necesitaría unos 66 años para obtener el último valor, en el peor de los casos.
PERO, para obtener TODOS los datos para un código postal y año concretos, tan sólo necesito un máximo de 2 días y medio.
Si en lugar de usar CPU, tiro de mi humilde GPU (R7 250), esos 2 días y medio se convierten en menos de 90 minutos.
Y con equipamiento especializado (multi-GPUs potentes o ASICs), el ataque sería ridículamente trivial.
Para colmo de males, aunque el hash le faltan los 3 primeros dígitos del DNI, se incluye la letra NIF, que actúa como carácter de control.
Por lo tanto, con los 5 dígitos y la letra NIF, se pueden calcular unos 45 posibles números correspondientes a ese DNI.
Si descartamos los números excesivamente bajos o altos, se quedan en 10-15 posiblidades. Menos, si afinamos por localidad y/o nacimiento.
He publicado una prueba de concepto. No está optimizada, ni tienen rutinas CUDA/OpenCL. No quiero ponerlo fácil. github.com/slp/catchow
Si yo, que NO me dedico a la seguridad TI y sólo tengo conocimientos básicos de criptografía, me he dado cuenta, los "malos" lo saben seguro
Por lo tanto, es FUNDAMENTAL que todos los que tengan una copia de la web, PAREN INMEDIATAMENTE su distribución.
Asimismo, si hay alguna web que emplee estos datos como verificación, debe buscar una alternativa URGENTEMENTE.
No queda más remedio que asumir que dichos datos (DNI/NIF, fecha de nacimiento y código postal), han sido comprometidos para todos los…
…ciudadanos presentes en el censo publicado por la Generalitat a través de IPFS, y están a disponibilidad de cualquiera en Internet.
Missing some Tweet in this thread?
You can try to force a refresh.

Like this thread? Get email updates or save it to PDF!

Subscribe to Sergio Lopez
Profile picture

Get real-time email alerts when new unrolls are available from this author!

This content may be removed anytime!

Twitter may remove this content at anytime, convert it as a PDF, save and print for later use!

Try unrolling a thread yourself!

how to unroll video

1) Follow Thread Reader App on Twitter so you can easily mention us!

2) Go to a Twitter thread (series of Tweets by the same owner) and mention us with a keyword "unroll" @threadreaderapp unroll

You can practice here first or read more on our help page!

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just three indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member and get exclusive features!

Premium member ($3.00/month or $30.00/year)

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!