lunes, 13 de diciembre de 2010

Una de números



INFINITO


Dice el "teorema de los infinitos monos", que si ponemos a un mono frente a una máquina de escribir el tiempo suficiente (suponiendo que no muera en ese tiempo), o si ponemos el número suficiente de monos (suponiendo que existan infinitos monos), eventualmente uno de ellos escribirá una novela ya existente, pongamos como ejemplo "El Quijote", o "El Cantar de Mio Cid", es lo mismo, de hecho en teoría infinitos monos o infinito tiempo resultaría en que los monos acabarían por escribir todas las obras de la literatura humana escritas hasta la fecha.


Suena lógico, pero realmente los humanos somos muy malos imaginando lo que es infinito, nuestro cerebro puede vagamente hacer cálculos que lo impliquen, pero realmente no podemos imaginarnos nada infinito.


Es mas, somos realmente malos con las escalas, con las magnitudes realmente grandes, a partir de un límite, normalmente lo que tenemos en el campo de visión, acostumbramos a imaginar las cosas a una escala realmente pequeña.


Un ejemplo, cuando pensamos en lo grande que es la Tierra, el Sol, las estrellas.. ¿realmente pensamos en lo grandes que son?



Si después de ver este video y reflexionar un par de minutos sobre ello no os entra un vértigo brutal, es que no habéis pillado el concepto. Somos muy pequeños para saber lo que es grande, y por eso no podemos comprenderlo del todo.


UN POCO MENOS INFINITO. GRANDES NÚMEROS.


Así que volviendo al tema de los monos, vamos a intentar hacer una inferencia de esa teoría en una cantidad un poco más real, algo que podamos incluso comprobar, con un número suficiente de monos, máquinas de escribir y tiempo.


Por ejemplo.


¿Cuánto le llevaría a 1 mono escribir correctamente la palabra "monos"?, suponiendo, claro, que
1º El mono sabe pulsar las teclas de la máquina de escribir
2º El mono hace por ejemplo 1 prueba por segundo
3º En cada prueba, el mono pulsa 5 letras




Pues aquí si podemos hacer unos cálculos razonablemente fáciles.
  • Una máquina de escribir tiene 102 teclas (un teclado vamos)
  • La probabilidad de que se escriba bien la primera letra es 1/102, es decir 0,0098 (0,9%)
  • La probabilidad de que se escriban bien las dos primeras letras, al ser sucesos independientes es 1/102*1/102 o 1/1022 , es decir 9,61168781 × 10-5 o lo que es lo mismo, 0,00009611 (0,009%)
  • Al final, la probabilidad de que escriba bien las 5 letras es 1/1025 , es decir, 9,0573081 × 10-11. Aproximadamente un 0,00000000001%, eso es, si echáramos una lotería en cada pulsación del mono, nos habría tocado la lotería unas 100mil veces antes de que nuestro mono escribiera correctamente la palabra "monos".
DEL MONO AL ORDENADOR


Evidentemente, el mono no es el animal más adecuado para escribir cosas en una máquina de escribir, si pudiéramos intervenir de alguna manera en el experimento, la forma más facil de ayudar al mono sería hacer que pudiera aprender de sus errores, así si escribe una combinación de letras que no es válida ya no la volverá a repetir, y eso reduce enormemente el número de combinaciones que debe probar para dar con la palabra correcta.


Como no podemos programar a un mono de esa manera, vamos a poner un ejemplo un poco más práctico. Creo un programa de ordenador que escriba datos al azar, y lo programa para que haga exactamente eso, que pruebe a meter cuatro pulsaciones al azar y que no repita las combinaciones que ya ha probado. Veamos que pasa:
  • La probabilidad de que saque la combinación a la primera es exactamente la misma, 1/1025
  • A medida que se hacen más intentos, la probabilidad va en aumento, así, el segundo intento sería 1/1025-1, el siguiente -2, -3, etc.. 
  • Después de 1025 intentos (11 040 808 032 intentos), la probabilidad es 1/1, es decir, ya se habrán probado todas las combinaciones, así que en una de ellas se habrá dado con la palabra.
Para nuestro mono, 11040808032 combinaciones era mucho tiempo, porque hacía uno por segundo, pero un ordenador puede hacer muchos más intentos.




Pongamos por ejemplo que puede probar 100mil veces por segundo (cualquier ordenador hoy en día seguramente podría hacerlo más rapido pero..), en ese caso tardaría 110408 segundos en probar todas las combinaciones, o lo que es lo mismo, 1840 minutos, o 30 horas, algo menos de un día.


Si en vez de usar las 105 teclas hubiéramos usado solo las letras minúsculas por ejemplo, las combinaciones serían solo 14348907 y el tiempo se hubiera reducido a 143 segundos!, poco más de 2 minutos.


CONTRASEÑAS


Llegados a este punto, después de tanto mono, números, cálculos y demás, os preguntaréis ¿a qué viene todo esto?


Pues muy fácil, esto tiene una aplicación muy práctica, puesto que nosotros protegemos nuestros datos, cuentas de usuario, tarjetas, ficheros, acceso a todo tipo de sistemas, ... con un usuario y una contraseña en el 90% de los casos, y cualquiera puede hacer un programa que pruebe contraseñas con tu nombre de usuario utilizando este mismo método.


Teniendo en cuenta la diferencia de tiempo entre los 143 segundos usando 5 letras solo minúsculas y las 30 horas usando los 105 caracteres del teclado, parece que hay una GRAN correlación entre lo larga que es una contraseña, los caracteres que use y su seguridad, o lo que es lo mismo, el tiempo que a una persona le llevaría averiguar esa contraseña utilizando el método de prueba y error, conocido normalmente como ataque de fuerza bruta.


El que pone "hola" de contraseña, se expone a que alguien, utilizando un programa de fuerza bruta, la averigüe en unos pocos segundos.


WIKILEAKS, OTRA VEZ


Estos días estoy muy sensibilizado con el tema Wikileaks, y por eso voy a aprovecharlo para poner un ejemplo relacionado, un ejemplo de como una buena contraseña puede aumentar "ligeramente" el tiempo que llevaría averiguarla por fuerza bruta.


Julian Assange publicó, hace un tiempo, un fichero llamado Insurance.AES256 (podeis descargarlo aquí). 
Nadie sabe lo que contiene ese fichero, pero por su nombre se intuye que Julian lo utiliza como "seguro de vida". Es decir, si algo malo le pasa, véase que lo capturan y lo mandan a algún sitio (no se.. Guantánamo por decir algo), o lo asesinan, o lo que sea, la clave para descifrar ese fichero será publicada, seguramente mediante un sistema automático y todo el mundo podrá ver el contenido.


Aquí nos podremos encontrar con dos cosas, o esto es el mayor farol de la historia, y el fichero no contiene nada relevante, o realmente el contenido es lo suficientemente importante para que confíe en eso para seguir adelante con lo que hace. 


Independientemente de si la opción es la A o la B, a Assange no le interesa que cualquiera pueda descifrar ese fichero, así que lo habrá protegido con una clave lo suficientemente buena para evitar lo que comentaba antes, que alguien "probando" pueda sacarla. ¿Es esto posible? (*Nota* todo esto, claro, dejando aparte los posibles "fallos" del propio algoritmo, cosa que han comentado en medios más especializados como en esta noticia de hace unos días en kriptopolis )


AES256 usa una clave de 256 bits, así que para probar todas las combinaciones posibles usando un ataque de fuerza bruta deberíamos hacer 2256 combinaciones (Cada bit 2 posiciones, y cada uno con una probabilidad independiente)


Esto, haciendo los mismos cálculos que antes, y poniendo que el ordenador siga probando 100mil claves por segundo, nos da que tardaríamos ni más ni menos que 3.67174306 × 1064 AÑOS!! en acertar todas las posibilidades.


Para tener una referencia, la edad del universo es 13.000.000.000 de años (1.3*1010 años)


Parece que nuestro ordenador debería ser "un poco" mas rápido para hacer el calculo.

O como decía al principio, en vez de poner un mono mucho tiempo, se pueden poner muchos monos, es decir, podría poner muchos ordenadores a repartirse el trabajo, pero si hacemos el calculo no llegaría la materia de este sistema solar (ni de esta galaxia probablemente) para fabricar los suficientes procesadores de silicio que pudieran disminuir ese tiempo lo suficiente para que esa clave saliera a la luz en nuestro tiempo de vida.


En el artículo que enlacé antes de kriptópolis hablan de que ciertos estudios consiguen, bajo ciertas circuntancias, reducir el número de claves a probar a 296 (el equivalente a una clave de 96bits), pero esto solo pasa con ciertas claves, con una posibilidad de una entre varios millones, por la forma en la que trabaja el algoritmo.



CONCLUSIÓN


La conclusión es clara.


¡Hay que usar contraseñas complejas! 


La diferencia del trabajo computacional necesario para sacar la contraseña "hola" por fuerza bruta y sacar "akhdjlasgdouay813478137482374uikqhfksuf" es tan tan grande que hace que según vaya aumentando el tamaño y la complejidad la probabilidad de que alguien averigue la clave en nuestro tiempo de vida tienda a cero.


Aunque claro, luego está el tema de no ponerla en un postit en el monitor, ni enviarla por correo, ni darsela a cualquiera, pero sobre ingeniería social hablaremos otro día..


Un saludo y hasta otra!.





No hay comentarios:

Publicar un comentario