… si estas censado en cataluña y das las cinco ultimas cifras de tu DNI. Al parecer esta es la unica consecuencia del filtrado de datos censales para el 1 de Octubre. Los datos tienen un hash lento que se construye combinando las 5 ultimas cifras del DNI, la letra, la fecha de nacimiento y el codigo postal.
Asi que si vives en barcelona este programa tarda unos 50 minutos en averiguar tu edad a partir del DNI, probando con los 43 distritos y consultando el fichero de hashes.
#!/usr/bin/python import sys from hashlib import sha256 from datetime import timedelta,date with open("somehashes.txt") as f: h=set(l.strip() for l in f) dni=sys.argv[1] for d in range(1,43): distrito="080%02d" %d fecha=date(2017-18,10,1) for n in xrange(366*60): key=dni+fecha.strftime("%Y%m%d")+distrito hash=key for m in xrange(1716): hash=sha256(hash).hexdigest() if hash in h: print "una posible coincidencia encontrada" print "tu fecha de nacimiento podria ser",fecha.strftime("%Y - %m - %d") fecha=fecha-timedelta(1) print key
Por supuesto, si tenemos una tarjeta grafica, los tiempos mejoran. En una geforce 980, que es ya normalilla tirando a antigua, se pueden probar uno o dos distritos por segundo. Para los 43 distritos de Barcelona capital, tomaria un minuto. Que aunque se pueda optimizar algo, es apenas sesenta veces mejor que en python… supongo que esto se debe a que el bucle principal del sha256 se ejecuta practicamente en codigo maquina.
Por supuesto, en general habria que probar con todas las terminaciones de DNI (2300000) y todos los distritos (unos 1000); una sola tarjeta grafica tardaria todavia años. O podriamos contratar GPU en amazon por unas docenas de miles de dolares y terminarlo en una semana. Lo que tampoco tiene mucho sentido porque a estas alturas todas las partes que pudieran tener interes en una bbdd de fechas de nacimiento y dnis seguramente ya la tienen (¡me apuntan en la red que para dnis y direcciones hay micropartidos politicos que filtran ya el censo a comercios!), y esta ni siquiera contiene los DNIs completos
Una prueba de concepto en CUDA: https://github.com/arivero/catchow/tree/master/cuda es capaz de hacer 175000 comprobaciones por segundo en una nvidia K20. El mayor problema en este tipo de codigos es que hay que asegurarse de que empleen muy poca memoria, para que el compilador asigne todo a registros de los cores.
EDIT: Finalmente ha salido el tema publicado en la prensa y me doy cuenta de que no he recopilado enlaces a gente que hablara del tema.
- El primero al que lei explicar bien todo el asunto fue a David Cabo. Me aclaró como se usan los dos ultimos ciclos de rehasheo.
- una explicacion desde el punto de vista del navegador: http://www.entredevyops.es/posts/referendum-votar.html
- El ejemplo del que se han echo eco los periodicos: https://github.com/slp/catchow https://twitter.com/slp1605/status/915690954790768640
- Otro comentario, estimando cuanto podria costar el descifradohttp://klondike.es/klog/2017/09/25/descifrando-las-bases-de-datos-del-referendum-catalan/
- Sobre la jornada en general, en la CNN: https://amp.cnn.com/cnn/2017/10/05/europe/catalonia-referendum-covert-operation/index.html
Deja una respuesta