criptografía para todos 3: la clave se llama así por algo
por David, may.27, 2011 | criptografía
‘
Disclaimer: ¿qué sería de esta serie de posts sin disclaimers? Hoy aviso de que como en lo que queda de serie vamos a hablar de vez en cuando de números grandes, vamos a usar notación científica para referirnos a ellos, porque es más conciso escribir 1’28E+30 que escribir 1.280.000.000.000.000.000.000.000.000.000. Cuando escribo así un número, 1’28E+30 eso significa que el número al que me refiero es 1’28 multiplicado 30 veces por 10, de manera que 1E+6 sería un millón, 1E+9 serían mil millones o lo que los americanos llaman un billón, 1E+12 sería lo que el resto del mundo llamamos un billón, etcétera.
Hoy vamos a hablar de contraseñas seguras, porque antes de arremangarnos y ponernos con la faena seria (la siguiente entrada de la serie va a ser temible, lo voy avisando), tenemos que hablar un poco de las contraseñas, los passwords, las claves o como las queráis llamar: esas palabritas mágicas tras cuya invocación cualquiera tiene acceso a nuestro correo electrónico, a nuestros ordenadores, a nuestras redes Wifi o a nuestro perfil de Facebook. También vamos a hablar hoy de agujeros negros hechos con extraños materiales (quizá sugiriendo sin proponérnoslo una explicación a por qué se ven tan pocos billetes de 500€: igual alguien está intentando probar experimentalmente la ida de pinza que figurará aquí debajo), y naturalmente esto no tendrá nada que ver con nada que no sean mis circunstancias mentales.
Vamos pues con las contraseñas, pos passwords, las claves: esas palabritas mágicas milenarias (herederas directas del ¡ábrete, Sésamo!) cuya eficiencia, visto lo visto (de vez en cuando ¿quién no ha recibido spam desde la dirección de un conocido?) no son todo lo seguras que deberían y podrían ser, y que deberían, si no queremos que nuestros ordenadores sean zombies al servicio del spam, o que nos roben datos bancarios, o que, poniéndonos paranoicos perdidos, un pederasta nos use de manera que si la Guardia Civil le rastrea termine dando con nosotros como cebo bien incriminado. No hay límites a las desgracias a las que nos puede conducir una mala clave.
Podemos definir la seguridad de una contraseña como la dificultad de adivinarla o dar con ella, teniendo siempre en cuenta que acertar no deja de ser una cuestión estadística. Por ejemplo yo podría intentar colarme en el correo de alguien extremadamente paranoico, teclear…
n@ABSb/J5VS8.bwu;?8Nu4o2pMFDmm
…y que diese la casualidad de que fuese precisamente esa la contraseña, porque podría tener muchísima suerte, pero la probabilidad de que si alguien hubiese elegido esa contraseña yo hubiera podido acertarla así, tecleando alegremente, es tan baja que puesta como porcentaje sería un cero, una coma, setenta y un ceros y luego por fin un seis. Dicho de otra forma y comparándolo con algo más conocido, sería tan difícil como acertar 11 veces seguidas el premio máximo de la Bonoloto o de ir a un casino, apostar siempre al número que nos diese la gana en la ruleta y acertar 47 veces seguidas, lo que desde luego sería mucho más interesante que averiguar la contraseña de nadie: si empezáramos apostando un euro y apostásemos todo lo que toca cada vez, terminaríamos con 3’9E+71 euros, que es una cantidad tan grande que implicaría ciertos problemillas frente a los cuales lo del Rey Midas sería una estupidez. Por ejemplo habría que colocar el dinero con cuidado, porque si lo fuesemos reuniendo en billetes de 500€, a partir de acertar por 31 vez en la ruleta tendríamos tal cantidad de billetes que habría que colocarlos en una montaña de 166 miles de millones de kilómetros de radio (recordemos que la Tierra tiene 6.000 kilómetros y pico de radio, y el sol 696.000) o colapsarían bajo su propio peso formando un agujero negro –sin duda el mayor desfalco del Universo–, y no cualquier agujero negro, no, porque su masa entonces, cuando quedasen aún 16 apuestas que ganar, sería mayor que el del agujero negro más grande conocido hasta la fecha (que está en la galaxia OJ 287, por si a alguien le interesa).
El despliegue de ejemplos bárbaros del párrafo anterior obedece a dos motivos. Uno, he de confesar, es que me lo paso muy bien haciendo estupideces de esas que le dejan jugar a uno con la ecuación del radio de Schwarzschild y mirando cuánto pesan los billetes de 500€ y los agujeros negros. El otro es que nos conciencemos de lo segura que es una contraseña del estilo de la del ejemplo (conviene recordar, por cierto, que una vez escrita aquí esa contraseña pierde toda seguridad). Quizá hubiera bastado decir que hay programas de software a la venta capaces de destripar 2.800.000.000 contraseñas por segundo, pero que aún así ante lo grande que es ese número –si fuese dinero agrupado en billetes de 500 no daría para un agujero negro*, pero sí para formar una montaña de 6 toneladas y pico de dinero– haría falta que ese programa estuviese funcionando más o menos un tiempo de 6E+44 veces la edad del universo para que diese con esa clave.
Es decir, que lo he escrito por regodearme en las cifras y sobre todo para que contemplemos las magnitudes y las contraseñas a través de los ojos del criptógrafo: 2.800.000.000 no es mucho, y por poner otro ejemplo…
^U9NDVjM.T8d6aAVjyP!xD!xGtf6H’
…también es una buena contraseña.
¿Qué tienen esas contraseñas para ser tan buenas? Dos cosas: son complicadas, y son aleatorias.
Son complicadas por dos razones: porque son elementos de un conjunto grande, y porque son aleatorias.
Son razones igualmente importantes: la primera delimita el espacio del que forma parte nuestra contraseña, el espacio en el que quien quiera descifrarla tendrá que adentrarse. No son números, ni letras: son números, letras y caracteres especiales. En lugar de dígitos, que hay 10 distintos, o de letras, que hay 54 diferentes entre mayúsculas y minúsculas, tiramos de los 255 caracteres del ordenador), y porque es una lista larga. Más fácil sería para quien quiera descubrir nuestra contraseña que hubiésemos elegido en lugar de esa cadena de caracteres un número de 9 cifras: podría probarlos todos, con el software disponible a día de hoy, en menos de cuatro décimas de segundo. O que hubiésemos elegido una palabra de, digamos, nueve letras minúsculas de largo: le hubiera llevado tres cuartos de hora recorrer todas las combinaciones de 9 letras.
El primer corolario que podemos formular, y que será el fácil de cumplir, pues, a la hora de pensar en construir una contraseña segura, es que debe partir de un conjunto amplio de elementos y combinarlos, por ejemplo incluyendo letras, números y símbolos, y que cuanto más larga sea más segura resultará.
La segunda razón por la que esas contraseñas de letras, números y símbolos son buenas era, decíamos, porque son aleatorias: al ser aleatorias, quien vaya a intentar descubrirlas no puede buscar patrones, no puede probar a introducir el nombre del gatito que tuvimos cuando éramos pequeños o probar a introducir por ahí la fecha de cumpleaños de nuestro ficus. Eso le obliga a recurrir al análisis bruto, y ahí es donde le perdemos en el reino de las cifras tremebundas.
Así que el segundo corolario, que es el que será difícil de cumplir, es que la contraseña debe ser todo lo aleatoria que sea posible. Esto nos conduce a dos problemas. El primero es que, en primer lugar, nosotros, los seres humanos, no somos nada buenos con las cosas aleatorias. Vemos una cadena de números como 77767 y pensamos “uy, qué poco aleatoria”. Nos ponemos a aporrear el teclado y damos casi siempre al mismo conjunto de teclas. Y para empeorar las cosas, tampoco tenemos a mano muchas formas de generar aleatoriedad, porque no solemos ir por ahí paseándonos con dados o barajas (o, bueno, ruletas o bombos de la Bonoloto). Los ordenadores, la herramienta ominpresente tras toda esta discusión, tampoco es muy buena generando azar, porque no sabe. Menos mal que hay programadores buenos, que hacen programas que generan datos aleatorios (en seguida vemos uno, en el párrafo siguiente) a partir de cifras más o menos aleatorias a las que el ordenador puede acceder (por ejemplo, puede mirar qué hora es y quedarse con el último decimal de precisión al que llegue) y los mezclan con entropía que reciben de nosotros, por ejemplo haciéndonos mover el ratón por la pantalla y usando nuestros gestos para extraer de ellos más información aleatoria. Y el segundo problema es que a ver quién es el listo que recuerda una contraseña así.
Precisamente para resolver esos problemas se inventaron los programas de gestión de claves, como el KeePass. Añades una entrada por cada contraseña que quieres recordar diciendo de qué es y con qué usuario entras, y él te genera claves complicadas según los parámetros que le digas de longitud y tipo de símbolos (de ahí, de hecho, han salido las que van como ejemplo en esta entrada). Luego te lo guarda todo en una base de datos que cifra con una contraseña única de forma que sea seguro enviártela por correo, llevarlo encima en un pendrive o incluso ponerla en algún lugar al que puedas acceder desde cualquier ordenador, como por ejemplo un espacio de almacenamiento en red, un Dropbox o algo así. El único problema que tiene este método, que es el que yo uso, es que no elimina el problema, lo simplifica, pues el KeePass, donde guardamos todas nuestras claves complicadas, debería estar atrincherado tras un buena clave.
Podemos entonces hacer dos cosas: o bien nos aprendemos una cadena larga de caracteres alfanuméricos, o bien retomamos el corolario 1 y le damos otra vuelta: ¿no podemos encontrar un conjunto de elementos que tenga todavía más de 255, y que nos resulten sencillos de recordar? Y lo tenemos, por ejemplo en el diccionario. El de la RAE contiene del orden de 100.000 palabras. Consideremos las largas, las que tengan más de 4 o 5 letras, y digamos que eso nos deja con unas 20.000 palabras.
Eso significa que elegir de entre todas las combinaciones de 2 palabras largas es 4 veces más difícil que elegir entre todas las combinaciones de números de 8 cifras… si uno sabe qué está buscando, claro. Si cree que son letras sería al menos tan difícil como buscar entre todas las combinaciones de tantas letras como sumen las de nuestras dos palabras. Si elegimos 3 palabras ya hay 8 billones de combinaciones: si el software supiera lo que busca tardaría 50 minutos. Si además metemos por medio números y caracteres especiales, se le complica más todavía el negocio. Si elegimos 4 palabras, el software tardaría casi dos años en buscar todas sus combinaciones. Con hacer eso y cambiar cada año de contraseña estaremos virtualmente a salvo. Si nos da pereza siempre podemos añadir otra palabra a la lista, convertir la lista de posibles combinaciones en una lista de 3’3E+21 elementos y entonces la maquinita de marrás necesitaría unos 18 milenios de media para acertar nuestra contraseña.
Así que una buena forma de construir contraseñas es mezclando palabras elegidas al azar (si tiramos de frases con sentido le hacemos la vida más fácil a quien intente destriparnos la clave) con símbolos y números. Por ejemplo, 1$Cabildo$Horreo$Empanada$Sesion$Destacar hubiera sido una contraseña estupenda de no estar escrita aquí y perder así toda aleatoriedad.
Dicho esto, en el próximo capítulo ya puedo ponerme a hablar de criptografía contemporánea sin que nadie se extrañe cuando escuche hablar de contraseñas que son frases: eso es así porque las palabras nos resultan fáciles de recordar, y por eso la gente que se empeña en escribir cosas que sean difíciles de descifrar las emplea tan habitualmente como contraseña que las han convertido en costumbre.
Como ejercicio macabro de hoy propondría que alguien repasase mis cifras, a ver si he metido la pata por muchos órdenes de magnitud en los ejemplos.
Y como buen consejo de matemático, os recomendaría usar un buen gestor de contraseñas y una clave maestra bien segura.
__________
* A menos que nos diese por apretarlo hasta que fuese diez billones de veces más pequeño que un protón, en cuyo caso tendríamos un bonito y diminuto agujero negro, claro. A la hora de hacer agujeros negros, todo es ponerse a apretar lo suficiente.
agosto 11th, 2011 on 19:35
Al leer esta tira de XKCD me he acordado de la explicación que diste aquí
:
http://imgs.xkcd.com/comics/password_strength.png