Muchos seguramente hemos visto la pelicula: el criminal informático intenta con mucha paciencia millones de combinaciones tratando de adivinar la contraseña de nuestra cuenta de correo/banca en linea/Manejador de Contenido/etc. A, B, C, ... , AA, AB, AC, ... SEU, SEV, SEW, ... Por supuesto, esto puede tomar muchísimo tiempo. Para acelerar el proceso, el criminal informático puede intentar contraseñas de una forma más inteligente, con palabras de diccionario, fechas de cumpleaños, etc. Aún así, esta técnica requiere una buena dosis de suerte y paciencia para ser exitosa.
Sin embargo, el criminal informático siempre encuentra nuevas vías de ataque, incluso en los detalles menos sospechados. De hecho, en muchos casos, el criminal no necesita intentar adivinar nuestra contraseña sino mas bien nuestro nombre de usuario/login/nombre de miembro/etc. Yo me atrevería a decir que esta técnica es incluso más efectiva que la anterior. La razón es simple. Si me pidieran encontrar en un grupo de personas alguien que tenga la misma fecha de cumpleaños que yo, no sería algo facil. Sin embargo, si me piden que encuentre cualquier par de personas con el mismo cumpleaños, mis posibilidades de exito aumentan grandemente. Este resultado sorprendente y contraintuitivo se conoce como la paradoja del cumpleaños.
Exactamente el mismo principio se encuentra detrás de la técnica de adivinar nombres de usuario. En lugar de intentar adivinar la contraseña de un usuario específico, el criminal selecciona cualquier password "frecuente", e intenta todos los posibles nombres de usuario del sistema. Supongamos que en el sistema hay registrados 1 millon de usuarios, ¿cuantos usuarios habrán seleccionado como password la fecha de nacimiento de su hijo 4885? por ejemplo. ¿Que tal si intentamos todos los días del mes más popular de un año? En una poblacion de 1 millon de personas, muy probablemente muchas compartan el cumpleaños. Las posibilidades de éxito del atacante usando un password que se considera debil (fecha de cumpleaños) aumentan considerablemente.
Sólo queda un pequeño detalle por especificar. ¿De dónde saca el atacante los nombres de usuario? Esta tarea puede ser casi tan difícil como adivinar las contraseñas de la técnica de la escuela vieja. Sin embargo, nuestro atacante corre con muchisima suerte en aquellos sistemas que usan nombres de usuarios predecibles. Este tipo de sistemas son lamenteblamente demasiado frecuentes en sistemas de banca en linea como explicamos en nuestro articulo "Inseguridad Bancaria Online, parte I". Si adicionalmente la contraseña es de sólo 4 dígitos, la tentación para el usuario de utilizar su fecha de cumpleaños es demasiado grande, y el atacante obtiene aún más información para seleccionar sus contraseñas fijas. En consecuencia, las posibilidades de conseguir al menos un par de credenciales correctas se incrementan de manera muy considerable.
Pero, ¿Qué puede hacer un criminal informático con tan sólo un par de credenciales de acceso a la banca en linea? La respuesta a esta pregunta será el tema de proximos articulos.
Excelente, podemos entonces extrapolar la paradoja del cumpleaños para un sistema que solo pida 4 digitos como contraseña, que seria el equivalente a 9999 dias. Lo primero que viene a la mente es que con 9999 contraseñas deberiamos tener una probabilidad del 100% de conseguir una colision. Pero si aplicamos la paradoja del cumpleaños tenemos que con solo 302 cuentas ya alcanzamos un 99% de probabilidad.
ResponderEliminarBasta con ver los algoritmos que muestan en la wikipedia y modificarle el numero de dias, usando este codigo en python nos da:
print 'Num. probabilidad'
p = 1.0
for i in xrange(1, 310):
p = p * (9999 - i) / 9999
print '%3d : %10.6f' % (i, 1-p)
.
.
.
295 : 0.987846
296 : 0.988206
297 : 0.988556
298 : 0.988897
299 : 0.989229
300 : 0.989552
301 : 0.989867
302 : 0.990173
303 : 0.990471
304 : 0.990760
305 : 0.991042
306 : 0.991316
307 : 0.991583
308 : 0.991842
309 : 0.992094