davidruiz.eu/blog

criptografía

criptografía para todos 4: teoría moderna…

por David, jun.05, 2011 | criptografía


Disclaimer: hoy explicamos cómo y por qué funciona la criptografía asimétrica, que será la que usemos en el siguiente capítulo. Advierto que es inevitable ponerse a contarlo sin resultar un poco plasta, así que este capítulo es totalmente prescindible para aquellos que queráis cifrar vuestros correos pero que no sintáis inquietud por saber cómo funciona el asunto, cuál es la matemática subyacente que hace que se codifiquen, descodifiquen y firmen los correos. Lo escribo, de todas formas, para probar que la explicación existe, y que confiar en la seguridad de lo que viene después no es ningún acto de fe.

Esta semana fue noticia un comunicado de Google donde dice que ha sido objeto de un ataque informático, que pretendía hacerse con un cerro de contraseñas y cambiar reglas de envío y reenvío de correo. A mí me puso los pelos de punta descubrir que Google guarda todas nuestras contraseñas (en lugar de emplear algún algoritmo para descubrir, cuando las tecleamos, si son la correcta, como hace cualquier programa mínimamente seguro). ¿Qué pasaría si el ataque hubiera tenido éxito? ¿Qué pasaría si alguien tuviera acceso a nuestro buzón de correo y pudiera leer lo que hay en él, o escribir en nuestro nombre? Cuando pregunto eso me suelen poner cara de “ya está David con su ataque de paranoia de los viernes”, pero ya lo veis: alguien lo intentó, y nos lo contaron. ¿Y si hubiera tenido éxito? ¿Y si no nos hubiéramos enterado? ¿Y si ni Google se hubiera enterado?

Vamos a seguir con nuestra serie de criptografía. Tras este capítulo y el siguiente, nos va a dar bastante igual que un pirata chino entre a Google y lea nuestro correo: aquello que nos interese no podrá entenderlo, y a aquellos en quienes confiemos no podrá escribirles sin que se den cuenta del fraude.

En criptografía se dice que un sistema de cifrado es de clave simétrica si la misma clave que sirve para cifrar el mensaje sirve para descifrarlo, como sucede en los ejemplos que hemos estado viendo en capítulos anteriores: Alicia quiere mandarle un mensaje a Bernardo, y entonces deben ponerse de acuerdo en la clave y ambos deben disponer de ella.

Eso da unos cuantos problemas. Alicia y Bernardo tienen que ponerse a buscar un medio por el que transmitir la clave de manera segura, lo que puede ser complicado (imaginemos que por ejemplo a Bernardo le envía su empresa a trabajar un mes a Pernanbuco. ¿Qué va a hacer Alicia? Obviamente no va a enviárselo por Gmail). Si Alicia se descuida y alguien descubre su contraseña, obviamente ya no necesita la de Bernardo, porque son la misma. Y lo mismo sucede con Bernardo.

Por eso a mediados del siglo pasado los matemáticos dedicados a esto se pusieron a pensar en sistemas asimétricos, donde Alicia tenga una clave y Bernardo tenga otra. Así surgió por ejemplo el sistema criptográfico RSA, que es del que vamos a hablar hoy (y una variante más simple del que usarán los programas que veremos por fin en el siguiente capítulo de esta oda a la privacidad paranoide).

Antes de nada, hay que decir una obviedad: todo este asunto fue abordado por matemáticos porque a fin de cuentas todo mensaje es traducible a un número. Fue así desde principios del siglo XX (ya vimos que se equiparaban números y letras, y lo mismo era “03 01 03 01″ que “caca”), y más aún desde que la informática se hizo omnipresente: todo archivo es una acumulación de unos y ceros, o sea, de un número binario. Un ordenador entiende la letra ‘a’ como el caracter número 97 de su lista, o lo que es lo mismo, como la cadena de unos y ceros 01000011. Esto implica que un mensaje no deja de ser un número, y una clave otro número. Y en matemáticas ¡sabemos hacer cosas con los números! ¡Si hasta tenemos una rama enterita que se llama Teoría de Números!

El RSA funciona dando a Alicia y a Bernardo un par de claves a cada uno. Una de ellas será pública: Bernardo puede imprimirla y colgarla de la pared de su despacho, publicarla en su página web (la mía, por ejemplo, está en la sección de contacto del blog), incluso enviársela a Clara. La otra es privada, y cada uno debe mantenerla en secreto, y eso incluye al otro: Alicia no necesita saber la clave privada de Bernardo, ni Bernardo necesita la de Alicia.

Entonces cuando Alicia quiere enviarle un mensaje a Bernardo, lo primero que hace es pedirle su clave pública y enviarle la suya. Pueden enviárselas como quieran: por un correo sin cifrar, por carta, en una postal, recitándola por teléfono, gritándosela lo suficientemente fuerte. Entonces Alicia escribe su mensaje, lo cifra utilizando la clave pública de Bernardo, y después lo firma, utilizando su clave privada. Le sale otro número, o texto, o archivo, que es lo que envía a Bernardo. Entonces Bernardo lo descifra utilizando su clave privada, y la clave pública de Alicia, y puede ver el mensaje descifrado. Sabe que es de Alicia porque si no, no podría haberlo leído utilizando la clave pública de ella. Y sólo él puede leerlo (aparte de Alicia, que lo escribió, y que por tanto sabe qué dice) porque nadie más que él tiene su clave privada.

Todo esto funciona gracias a las propiedades de la aritmética modular. ¡Que nadie salga corriendo cuando digo aritmética modular!: no es tan complicado. La aritmética modular lo único que hace es considerar a los números en función de otro, el módulo, e interesarse sólo por el resto que cada número da cuando se lo divide por ese módulo. Ya lo hemos estado haciendo: cuando en el capítulo anterior considerábamos un alfabeto de 26 letras y decíamos que la A era el 1, la B el 2, y así hasta la Z que era el 26, entonces sumar dos Aes daba un 2, o sea una B, y sumar una M (que sería la letra 13) con una Q (la 17ª letra) daría 30, que como solo hay 26 sería como dar la vuelta y quedarnos con la D, que sería la letra número 4, es decir, hemos dividido 30 entre 26, que da 1 y resto 4, y nos hemos quedado con el resto de la división. También hacemos aritmética modular habitualmente con los relojes, porque si sabemos que un reloj marca las 11 y lo miramos 100 horas después marcará las 3, porque 111 entre 12 da 9 y resto 3, porque 111 = 3 + (12 x 9), y con los ángulos, porque sabemos que si tenemos un ángulo de 90º y le sumamos 720º seguimos teniendo un ángulo de 90º, o lo que es lo mismo, que si miramos al frente y damos dos vueltas sobre nosotros mismos, seguiremos mirando hacia el mismo sitio, porque calculamos módulo 360º.

Vamos poco a poco con el método RSA: para generar sus claves pública y privada, Bernardo escoge dos números primos. Pongamos por ejemplo (un poco absurdo porque al final Bernardo no va a escoger números: ya lo hará algún programa criptográfico por él. Y un poco simple porque, bueno, vamos a poner un ejemplo con primos de 2 dígitos, pero luego todo esto funciona con primos de unos 600 dígitos de largo, lo que complicará hasta lo virtualmente imposible la tarea de quien quiera adivinarlos) que escoge los números 43 y 29. Luego los multiplica, y le sale n = pq = 43 x 29 = 1247, y ese será el módulo de sus cuentas. Entonces calcula E = (p – 1) x (q – 1) = 1176, y escoge un número e que esté entre 1 y E y que no tenga divisores comunes con E (es decir, que no sea divisible por ningún número que divida a E). Como 1176 = 7 x 7 x 3 x 2 x 2 x 2, le vale con coger cualquier número que no sea 2, 3 o 7. Pero Bernardo está especialmente perezoso y como no quiere andar haciendo esa cuenta que acabo de hacer yo, se limita a elegir un primo, 19, y ver que 19 no divide a 1176, así que e = 19. Y finalmente calcula el número que multiplicado por e módulo E da 1: esto puede provocar sudores fríos, pero no es tan complicado: es ir multiplicando 19 por si mismo E – 1 veces, y cuando en el transcurso de una de esas multiplicaciones nos sale un número mayor que E lo cambiamos por su resto módulo E. Así obtenemos 619. Y Bernardo construye sus claves con dos pares de números cada una:

clave pública de Bernardo: n = 1247, e = 19
clave privada de Bernardo: n = 1247, d = 619

De la misma manera, Alicia se genera otro par de contraseñas. Partiendo de los números 37 y 53 le sale n = 1961, entonces E = 1872, escoge e = 29, y calcula el inverso de e módulo 1872, que resulta ser 581, de manera que sus propias claves pública serán:

clave pública de Alicia: n’ = 1961, e’ = 29
clave privada de Alicia: n’ = 1961, d’ = 581

Entonces si Alicia quisiera enviar un mensaje que, convertido a número, fuera 97, lo que haría sería calcular 97 elevado a 19 módulo 1247. Eso podría ser un problema si se pusiera a hacer la potencia de la forma habitual y luego dividirla, porque multiplicar 97 por si mismo 19 veces da un número de 38 cifras, pero hay una serie de trucos algebraicos que, al poder deshechar todo lo que es mayor que 1247, permiten hacer fácilmente este tipo de cuentas. Por ejemplo en Haskell la función que estoy utilizando yo para calcular estas potencias para los números de esta explicación tiene esta pinta:

– Como la base elevada a uno da la base:
potenciaMod base 1 modulo = base
– Y si elevamos a algo mayor que uno, es tomar el modulo de multiplicar la base por la potencia elevada al exponente menos uno:
potenciaMod base exponente modulo = (base * (potenciaMod base (exponente – 1) modulo)) `mod` modulo

Lo que escrito en prosa significa que vamos multiplicando la base por sí misma tantas veces como diga el exponente pero que cada vez que nos sale algo mayor que el módulo, seguimos adelante con el resto de lo que nos sale.

Cuando hace la cuenta, a Alicia le sale 833.

Y si Bernardo recibe ese mensaje, repite la operación pero con su clave privada, calcula 833 elevado a 619 módulo 1247, y obtiene el número 97: el mensaje original.

Pero Alicia no ha utilizado nada más que la clave pública de Bernardo: Clara podría cifrar mensajes con ella y mentir diciendo que es Alicia y podría engañar a Bernardo. Es por eso que Alicia firma su mensaje, y eso lo hace utilizando su clave privada, como si estuviese intentando descifrar ella el mensaje: calcula 833 elevado al exponente de su clave privada, 581, módulo el módulo de su calve privada, 1961: sale 355, que es el mensaje que envía.

Cuando Bernardo lo recibe, recibe también un aviso de que está firmado por Alicia, luego lo primero que debe hacer es deshacer la firma de Alicia, y eso lo hace usando la clave pública de ella. Calcula 355 elevado a 29 módulo 1961, y obtiene 833, que es el mensaje cifrado. Entonces lo descifra con su clave privada, elevándolo a 619 módulo 1247, y obtiene 97, el mensaje original.

(Dicho esto, en realidad no suele firmarse así un mensaje cifrado: lo que se hace es generar lo que se llama un hash, una secuencia de números que equivale al mensaje, y comprobar con él que el mensaje no está alterado y que sólo ha podido escribirlo la persona que lo envía. Pero la idea es la misma)

Como para descifrarlo Bernardo ha necesitado la clave pública de Alicia, sabe que ella lo firmó usando su clave privada, y como sólo la conoce ella, sabe así de manera inequívoca que ella escribió el mensaje. Como para descifrarlo necesita su clave privada, tanto él como Alicia saben que sólo él podrá leer el mensaje.

La seguridad del RSA descansa en la complicación de dos problemas matemáticos que se entrelazan: la factorización de números grandes, y encontrar la enésima raíz de un número según un módulo. Si multiplicar dos números es un asunto trivial, descubrir los divisores de un gran número es una tarea terriblemente complicada: para calcularlo hay que ir buscando entre sus divisores (y para complicar el asunto, en nuestros números sólo hay dos divisores) y encontrar uno de ellos. Y estamos hablando de números de 600 cifras (de nuevo hay que hacer malabares para hacernos a la idea de la inmensidad del número: es tan grande que es siete veces más largo que el número de átomos que se estima que hay en el universo observable): la cantidad de divisores es tal que el problema es virtualmente indescifrable.

3 comentarios más...

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.

1 comentario más...

criptografía para todos 2: cuadernos de clave única

por David, may.21, 2011 | criptografía

INDICE:

  • 0. Una introducción al hilo del 15M
  • 1. un poco de historia, ¡Dyh Fhvdu!
  • 2. cuadernos de clave única
  • En episodios anteriores dejamos a Alicia intentando quedar con Bernardo para ir a las concentraciones de Sol y a Clara, la maligna informática que espía sus correos, arreglándoselas para descifrar lo que se decían. Hoy por fin vamos a hacer un poco de justicia y después de hoy Clara va a ser incapaz de descifrar lo que dicen los correos de Alicia y Bernardo.

    Una vez llegados al resultado de ayer, Alicia y Bernardo pueden intentar complicarle la vida a Clara de múltiples maneras: pueden, por ejemplo, utilizar métodos que modifiquen las letras de cada mensaje de una manera diferente en función de varias claves, o pueden hacer intervenir claves con variables en función de cosas como la fecha o la hora en la que se emiten los correos. La lista de variaciones que se pueden hacer es tan larga que no vale la pena ni ponerse a plantear ejemplos, sobre todo cuando desde aquí ya se puede ver una la solución a los problemas de Alicia y Bernardo.

    El problema de usar una clave más corta que el mensaje, que se reuitiliza y permite detectar pautas y hacer análisis digamos que “a trozos” se puede resolver empleando una clave que sea al menos tan larga como el mensaje a cifrar (o quizá más larga, cogiendo sólo el trozo que necesitásemos).

    El problema de que se presenten pautas estadísticas en las letras del mensaje se puede resolver utilizando claves que no sean contraseñas, sino series aleatorias de palabras. Sigamos con la convención de ayer, y digamos que a la letra A le asignamos el valor 1, a la B el 2, y así hasta la Z que valdría 26 (seguimos olvidándonos de la Ñ).

    Así por ejemplo podríamos cifrar la palabra “HOLA” (que correspondería a los números 8, 15, 12 y 1) de 25x25x25x25 maneras diferentes. Con determinada clave, podríamos terminar cifrándola como DYHF. Con otra, como HVDU. Y el problema que tendría Clara es que, una vez interceptado el mensaje, no tendría ninguna forma de resolver cuál es el mensaje original. Para ella, sería igual de problable que DYHF significase HOLA que TALA, PARA, LEMA, LAME, HILO, PALA, PAPA, MAMA, MAPA, PANA, COSA, HIJO, AAAH, UYYY o UFFF, por poner unos ejemplos así a bote pronto.

    Y así, Alicia y Bernardo recurren a lo que se denomina un cuaderno de clave única.

    Hay que celebrar que Alicia y Bernardo por fin van a utilizar un método seguro de alguna manera. Como no se puede compartir una botellita de licor mediante el blog, ¡cuadernos de clave única gratis para todos!

    www.davidruiz.eu/download/ccu.rar

    Ahí he subido un programita que he hecho en Haskell que genera contraseñas para cuadernos de clave única, las guarda codificadas en un fichero (descomprímelo en una carpeta y la primera vez que generes una clave creará un ficherito donde las guarda), permite exportarlas como texto normal o cifrándolas con un código de control (un número), de manera que se puedan guardar o enviar de manera más segura, y que permite también cifrar y descifrar mensajes o bien en pantalla o bien mediante archivos de texto (que deben ser muy simples, sólo texto en mayúsculas sin eñes y sin los espacios que voy a poner en los ejemplos). Es el programita con el que he hecho todos estos ejemplos. ¡Evidentemente no me iba a pasar una hora echando cuentas cuando me podía pasar diez programando esto! Volvamos al tajo.

    Alicia y Bernardo acuerdan entonces una serie de claves que sean una cadenas de letras al azar, y que el mensaje terminará con tres equis y que luego seguirá cualquier cosa –por ejemplo, más equis– para que Clara ni siquiera pueda deducir nada de la longitud de la respuesta. La primera clave de su lista (o la clave que corresponda a ese día, o la que sea por el método que decidan qué clave utilizar) es esta:

    OUJPR EOHCE CSPLG VRAFA KKATQ IWYBR QLSCW YOQGX BUFOA HWLOK HTSXC UKMWF ARXTW OGHTR SLSUB

    (Es tradición, igual que lo era no usar espacios ni nuestras pobres eñes, dividir claves y mensajes en grupos de 5 letras, yo sospecho que para que sea más fácil no perderse y encontrarse a mitad de cifrado o descifrado sin saber por dónde se iba y debiendo repetirlo todo. Aunque ya digo que yo en el programita de ahí arriba he ignorado los espacios, por pereza y porque usándolo es más difícil confundirse)

    Una vez que los dos tienen la claves, Alicia va a codificar con ella su mensaje, que esta vez es “nos vemos luego en la concentración de Sol”. Así que le quita las tildes y los espacios, lo pone en mayúsculas, lo parte en trocitos, y le pone un montón de equis al final. Queda pues así su mensaje:

    NOSVE MOSLU EGOEN LACON CENTR ACION DESOL XXXXX XXXXX XXXXX XXXXX.

    El procedimiento de Alicia para cifrar el mensaje es el siguiente: convierte cada uno de los textos en sus equivalentes numéricos, y luego va sumando los números de cada letra de manera que cuando se pasa de 26 resta 26. Finalmente, reemplaza cada número por la letra que le corresponde. Lo hacemos con las 5 primeras letras, venga:

    Para el mensaje original, N=14, O=15, S=19, V=22, E=5, etc.
    Para la clave, OUJPR, obtiene los números 15, 21, 10, 16 y 18.
    Sumándolos, le salen 29, 36, 29, 38 y 23, lo que después de restar 26 unas cuantas veces donde se puede queda como 3, 10, 3, 12 y 23, que corresponde a las letras CJCLW.

    Cuando lo hace con el mensaje entero, obtiene lo siguiente:

    CJCLW RDAOZ HZEQU HSDUO NPONI JZHQF UQLRI WMOEV ZSDMY FUJMI FRQVA

    Y ahí podemos observar como aunque la parte final del mensaje original era una cadena de simples X, no hay forma de distinguirlo del galimatías que supone el texto que sí tiene sentido. Una vez ha cifrado ese mensaje, Alicia destruye su clave: no piensa volver a usarla porque estaría dándole información por su uso repetido a Clara. Hecho eso, envía el mensaje cifrado a Bernardo, que no tiene más que convertirlo en números, convertir la clave en números y restar al texto cifrado la clave, sumándole 26 cuando le de cero o un número negativo.

    Es decir, para las 5 primeras letras, CJCLW tendría que convertirlas en números: 3, 10, 3, 12 y 23.
    A esos números les tiene que restar los que obtiene de la clave, OUJPR, que siguen siendo los que eran antes, 15, 21, 10, 16 y 18.
    Al hacerlo, le sale -12, -11, -7, -4 y 5. A los cuatro primeros les suma 26 porque son negativos y necesita números del 1 al 26, y queda 14=N, 15=0, 19=S, 22=V, 5=E.

    Cuando lo hace para todo el mensaje cifrado, obtiene…

    NOSVE MOSLU EGOEN LACON CENTR ACION DESOL XXXXX XXXXX XXXXX XXXXX.

    …de lo que entiende que Alicia y él van a desafiar la prohibición de la Junta Electoral y que o dicho eso termina el mensaje o le envía un montón de besos. Prefiere pensar lo segundo y su cara sonriente supone un contraste estupendo con la cara de frustración que tiene Clara, que es incapaz de deducir la clave empleada porque fue generada al azar, lo que para ella implica que podría ser prácticamente cualquiera, por ejemplo bien podría ser…

    XQIWX MPZBK PYABQ CPRTW MDZUZ ELNBL PCGET DVTZR UICUU AYEUU QYSXC

    En cuyo caso el mensaje significaría…

    ESTOY ENAMO RADOD ECLAR ALOSI ENTOT ENEMO SQUED EJARD EVERN OSXXX

    O cualquier otra clave y cualquier otro posible mensaje: lo único que Clara, sin la clave, puede decir del mensaje es que como mucho tiene 55 letras de largo.

    2 comentarios más...

    criptografía para todos 1: un poco de historia, ¡Dyh Fhvdu!

    por David, may.20, 2011 | criptografía

    INDICE:

  • 0. Una introducción al hilo del 15M
  • 1. un poco de historia, ¡Dyh Fhvdu!
  • 2. cuadernos de clave única
  • Disclaimer: vamos a comenzar con un pequeño párrafo de convenciones: igual que cuando se habla de Relatividad todos los ejemplos suelen hacerse con trenes (por razones históricas: cuando Einstein desarrolló la Relatividad, el medio de transporte más rápido y común era el tren), es común en criptografía dar nombres a los personajes de los ejemplos. En lugar de llamarles A, B, C y D, por ejemplo, se les llama Alicia, Bernardo, Clara y Diego (u otros nombres que empiecen por esas letras). Dicho eso, la criptografía nace por la necesidad que tiene Alicia de hacerle saber algo a Bernardo enviándole el mensaje, pero teme que Clara pueda interceptarlo por el camino y leerlo, y no quiere que eso suceda. Quizá Clara trabaje para la STASI o sea muy cotilla, es lo de menos ahora. Otra convención: vamos a ignorar la letra Ñ. Se puede incluir sin que cambie mucho lo que sigue, pero me complica la vida en el ejemplo final, y además normalmente se la suele ignorar por razones históricas: casi todos los criptosistemas clásicos fueron creados y usados por gente que no usaba nuestra letra más pizpireta, así que las más de las veces, cuando se exponen ejemplos de ese tipo –como voy a hacer yo– se la suele reemplazar por una N o, si se quiere, por NH o algo por el estilo.

    Un buen día Clara, que trabaja administradora de sistemas de la empresa en la que trabaja Bernardo, decide leer los correos de este, por que se aburre, y además porque es una mujer un tanto enfermiza cuyos flirteos Bernardo ignora con toda la fuerza que le da la repulsión. Aunque a día de hoy eso de leer correos ajenos es bastante ilegal, no iba a ser la primera administradora de sistemas que conozco que se entretiene leyendo correos ajenos (apuntemos eso como “razón cotidiana para encriptar nuestros correos”). Bernardo, que sospecha que Clara está leyendo lo que escribe y recibe porque Clara es, además, tan torpe como aquel administrador de sistemas que conocí, ha hablado con Alicia del tema y han decidido cifrar de una manera rudimentaria lo que se escriben, de modo que el texto que lee Clara es este:

    XZXJMXAXBPQXKLZEBBKPLI

    Clara frunce el ceño, contrariada, y dedica unos segundos a la pataleta. Pero luego se pone a mirar todas esas letras raras, pensando qué puede sacar en claro. Observa que de las 12 letras diferentes que se usan en ese mensaje de 22 letras de largo hay unas que salen más que otras: la X sale 4 veces, la B sale 3, y luego el resto de letras salen 2 veces o no se repiten.

    Clara se ha fijado, además, en que el español, que es su idioma y en el que se comunican Alicia y Bernardo, hay letras que utilizamos más que otras: por ejemplo, en mi entrada anterior, que tiene 6313 letras (quitando símbolos y eñes, que cuento como enes), hay letras que se repiten más que otras. Esto es una característica de nuestro idioma: hay más letras que usan la letra e que palabras que usan la W, por ejemplo, de manera que en mi correo anterior una de cada cuatro letras es una E (el 13’79% de las veces) o una A (11’27%). El 50% de las letras son Es, As, Oes, Eses y Enes.

    Así pues Clara piensa que probablemente la X y la B sean dos de esas letras comunes (a no ser que Alicia esté enumerando una lista de la compra para una fiesta diciendo cosas como WHISKYVODKAKASLIMON). Para convertir la X en una E, debe retroceder 19 letras, o lo que es lo mismo –solo que mejor– avanzar 7 dándole la vuelta (es decir, asumiendo que después de la Z vuelve a ir la A). Entonces debe reemplazar la Z por una G, la J por una Q, etc. Realiza esa operación con todas las letras del mensaje y obtiene el siguiente texto…

    EGEQTEHEIWXERSGLIIRWSP

    …que no tiene mucho sentido. Decide probar con la A, avanzando 3 letras cada letra del mensaje original, de manera que la Z se convierte en una C, la J en una M, y el texto completo queda así:

    ACAMPADAESTANOCHEENSOL

    Y Clara ha descifrado el mensaje: Alicia y Bernardo están quedando para ir esta noche a la acampada de Sol. ¡El muy cerdo no sólo no le hace caso, encima pretende hacer que se tambaleen los incipientes cimientos de la sociedad totalitaria que se avecina y en la que Clara, intuye, se sentirá como pez en el agua! Clara borra sutilmente los archivos del proyecto en el que trabaja Bernardo y se va a su casa contenta y satisfecha pensando que Bernardo será despedido y ya sí que tendrá un buen motivo para dormir al raso cuando no pueda pagar el alquiler del estudio en el que vive.

    El criptosistema que han empleado Alicia y Bernardo en este ejemplo se llama César, porque era el que utilizaban los generales romanos para enviarse mensajes, y no es nada robusto: al codificar de la misma manera todas las letras y aún no teniendo en cuenta que mediante el análisis estadístico de las letras repetidas se restringen bastante las posibles soluciones, sólo hay 25 posibles mensajes candidatos a ser el original. Clara podría haberse limitado a hacerse un Excel que fuera cambiando cada letra por la siguiente y, de los 25 mensajes resultantes, leer el que tuviera sentido. ¡Qué diablos!, voy a hacerlo yo en un momentito.

    (1 minuto después)… Ya: Haciendo una tablita que nos deje convertir letras en números y números en letras, y haciendo una serie de filas que sumen un numero a otro y le resten al total 26 si nos hemos pasado de 26, estos son los 25 mensajes posibles que podrían haber sido cifrados como el mensaje que ha interceptado Clara:

    YAYKNYBYCQRYLMAFCCLQMJ
    ZBZLOZCZDRSZMNBGDDMRNK
    ACAMPADAESTANOCHEENSOL
    BDBNQBEBFTUBOPDIFFOTPM
    CECORCFCGUVCPQEJGGPUQN
    DFDPSDGDHVWDQRFKHHQVRO
    EGEQTEHEIWXERSGLIIRWSP
    FHFRUFIFJXYFSTHMJJSXTQ
    GIGSVGJGKYZGTUINKKTYUR
    HJHTWHKHLZAHUVJOLLUZVS
    IKIUXILIMABIVWKPMMVAWT
    JLJVYJMJNBCJWXLQNNWBXU
    KMKWZKNKOCDKXYMROOXCYV
    LNLXALOLPDELYZNSPPYDZW
    MOMYBMPMQEFMZAOTQQZEAX
    NPNZCNQNRFGNABPURRAFBY
    OQOADOROSGHOBCQVSSBGCZ
    PRPBEPSPTHIPCDRWTTCHDA
    QSQCFQTQUIJQDESXUUDIEB
    RTRDGRURVJKREFTYVVEJFC
    SUSEHSVSWKLSFGUZWWFKGD
    TVTFITWTXLMTGHVAXXGLHE
    UWUGJUXUYMNUHIWBYYHMIF
    VXVHKVYVZNOVIJXCZZINJG
    WYWILWZWAOPWJKYDAAJOKH

    Y ahí se termina porque el siguiente vuelve a ser XZXJMXAXBPQXKLZEBBKPLI.

    No creo que haga falta decir cuál es la única línea de toda la lista que tiene sentido, ¿verdad?

    La evolución natural de ese criptosistema consiste en codificar cada letra de manera diferente. Por ejemplo podríamos dividirlo en grupos de 4 letras, y hacer avanzar a la primera letra de cada grupo 8 posiciones, a la segunda 15, a la tercera 12 y a la cuarta 1 (y como las letras número 8, 15, 12 son la H, la O, la L y la A podríamos decir que el mensaje tiene una clave, “HOLA”, que se suma a las letras de manera que A+A=B –es decir, la primera letra mas uno es la segunda letra–, A+B=C –la primera mas la segunda es la tercera–, M+R=E –la 13 mas la 18 es la 31, y como sólo hay 26 letras volveríamos a empezar por el principio de manera que 13+18=31-26=5–, etc. Esto tiene la ventaja de complicar el análisis de Clara, porque para cada mensaje cifrado habría 25x25x25x25 = 390.625 posibles mensajes originales, de los que quizá más de uno tuviera sentido. Pero mediante el análisis estadístico y suficiente material para analizar (o bien mensajes más largos o bien varios mensajes) Clara podrá descubrir que hay letras que son más frecuentes separadas una cierta distancia y deducir la longitud de la clave, y luego analizando el mensaje por cada letra según su posición deducir la contraseña y descifrar el mensaje. No voy a poner un ejemplo de eso que ya me estoy eternizando bastante, pero si se tiene tiempo y suficiente información es algo bastante sencillo una vez se le pilla el truco y por hoy ya he escrito bastante, así que sigo otro día.

    Eso sí, pongo deberes: el primer ejercicio es descifrar qué quieren decir las dos últimas palabras del título de esta entrada. El segundo, hacer comentarios cifrados mediante el criptosistema césar.

    Como no tengo ninguna esperanza de que nadie se lea este post entero, ahora que hemos dejado el romanticismo para pasar a la casquería, y tengo esperanzas negativas de que nadie se ponga a hacer esos ejercicios, ofrezo premios. ¡Fotos del cementerio de San Justo para quien los haga! Ya sé que son lúgubres, pero es lo primero que se me ocurre así que tenga a mano, que envié unas cuantas a un concurso y me sobró un puñadito.

    6 comentarios más...

    criptografía para todos, 0: una introducción al hilo del 15M

    por David, may.18, 2011 | criptografía, día a día

    INDICE:

  • 0. Una introducción al hilo del 15M
  • 1. un poco de historia, ¡Dyh Fhvdu!
  • 2. cuadernos de clave única
  • Disclaimer: voy a escribir una serie de posts hablando de criptografía, pero me vais a perdonar que de la lata con una no-tan-pequeña introducción, contando cómo veo yo nuestro entorno, ¿vale?, aunque sólo sea por ponernos en contexto, por saber qué motivo tenemos que tener para saber algo de un tema que, las más de las veces, sólo hace pensar en la máquina Enigma y en películas de flamantes espías. Empiezo con eso.

    A veces siento (y lo que sigue es una de las razones del cambio de blog) que le debemos una disculpa a quienes están por venir, a nuestros descendientes, a los que les toque seguir en este mundo cuando nosotros se lo dejemos, presumiblemente hecho unos zorros, en el mejor de los casos como está, y en el peor, bueno, siguiendo la tendencia.

    Así que pequeños seres aún inexistentes o demasiado pequeños como para enteraros de nada: perdón, mil perdones. Perdón por este mundo superpoblado y esquilmado, perdón por las utopías muertas, perdón por haber creado corporaciones que nos esclavizaron, perdón por los retrocesos sociales y perdón por esa manifiesta inconsciencia que deduciréis cuando miréis los libros de historia (perdón si en ellos mentimos) y veáis la caída libre y nos imaginéis a todos tocando la lira mientras Roma arde.

    En realidad y hasta la redacción de estas líneas, poco pudimos hacer.

    Nuestros padres, que salieron de una dictadura, abrazaron entusiasmados una democracia que nacía con un lastre: favorece a los partidos que recogen pocos votos, pero muy localizados, y a los que acaparan más votos. Supongo que todos los partidos lo firmaron teniendo en cuenta que figurarían en uno de esos asientos de preferencia, porque por ejemplo no imagino que los comunistas (entonces, finales de los 80 y principios de los 90, aún en plena Guerra Fría, teníamos comunistas por aquí) pudieran imaginar que la gente, sin más, se iba a olvidar de ellos. Una vez pasada la decantación de partidos de las primeras décadas, el primer filtrado de los que suben y los que bajan, la cosa se ha traducido en que hay dos partidos, el PP y el PSOE, y que votar a cualquier otro es brindar al sol y tirar el voto, y es imposible que ninguno de esos dos partidos se descalabren, porque en este país siempre hay diez u once millones de votantes convencidos de cada uno de ellos. Y con eso les vale para gobernar un país de 47 millones de habitantes.

    Naturalmente, el pueblo no elige ni a los candidatos de los partidos ni a los miembros de sus listas: en el PP se elige a dedo, y en PSOE de vez en cuando se hacen unas primarias internas. En la práctica esto se traduce en una versión dual del unipartidismo en el cual un partido gobierna y el otro espera calentando banquillo a que suceda un desastre que desanime a los votantes del otro o a que la inercia desgaste al que está al mando.

    Y estar en la cima del poder, o en la cumbre anexa que está justo debajo, acomoda, aburguesa y atrae a las aves de rapiña. Antes estas aves, los corruptos, eran un estigma y un escándalo. Ahora los dos partidos mayoritarios ni siquiera se molestan en esconderlas demasiado. Eso cuando no se las aplaude.

    Mientras, tenemos un récord histórico de gente sin trabajo. No es que toda la culpa sea de los que gobiernan o de los otros, no: la culpa es de los bancos, que hace un año o dos nos llevaron a una crisis monumental, por pura avaricia. Investidos del poder que es en realidad la sangre del sistema (es decir, el dinero), los bancos se han hecho virtualmente dueños o parásitos privilegiados de todo occidente hasta tal punto que cuando se hunden ellos les siguen los gobiernos, y para evitar que se hundan los gobiernos han llegado a darles montañas de dinero que, evidentemente, han acogido la mar de contentos antes de seguir a lo suyo, que sigue siendo la avaricia.

    Casi todo el mundo está atado y bien atado por un banco: los precios de las casas subieron constantemente durante todo lo que llevamos de democracia, aprovechando así el partido gobernante de turno para hacer dinero con la construcción, y cuando no quedó dinero con el que comprar casas y empezó a faltar dinero para pagarlas, nos hundimos. Y todos tenemos el deber de, durante décadas, pagarle un buen dinero al banco por la casa en la que vivimos.

    En fin: que la situación es bastante deprimente, y entre que siguiendo los canales diseñados por el sistema para que el ciudadano actúe (que son las elecciones) no se puede conseguir más que, como dijo Julio Anguita (un político muy comunista y ya retirado) por la tele hace poco, el amo nos de permiso para elegir capataz, y que por otro lado los bancos nos tienen puesto a todos un collar, y entre que por otro lado tampoco quedan sistemas de gobierno que conozcamos y que no se hayan probado desastrosos, la situación no es solo deprimente sino que además no se ve ningún horizonte hacia el que caminar.

    Pero a todo esto ha sucedido este año una cosa espeluznante para cualquier gobierno actual y maravillosa: los países árabes, que estaban bastante peor que nosotros (torturados, por ejemplo, y pasándolas bastante más putas), se han hartado. Y mediante las herramientas de comunicación que da Internet han empezado a mostrar su rebeldía y a coordinarla, y han caído ya unos cuantos gobiernos, al otro lado del Mediterráeo, que no dejan de ser vecinos. Y en Libia el dictador más risible pero aún así cruel que ha visto el mundo, Gadafi, está haciéndole la Guerra Civil a su pueblo.

    Yo, cuando veía por la televisión las imágenes de los árabes saliendo a la calle a decir que estaban hartos y que así no pensaban seguir (y tiene su mérito, porque a veces opinaban entre disparos y tanques), la verdad, pensaba en nuestra maldita ley electoral y en nuestros políticos ineptos y sentía envidia. Y pensaba que ojalá aquí fuésemos capaces de ser como nuestros vecinos y salir a la calle a hacerle un corte de mangas a los políticos.

    Pero en eso han llegado unas elecciones municipales, que son el domingo que viene, y resulta que un buen montón de gente, mediante las mismas herramientas de comunicación que ofrece internet y que usaron los árabes (y que usamos, a diario, para perder el tiempo y entretenernos), han quedado para salir juntos a la calle a decir lo mismo que pensaba yo: este fin de semana pasado hubo manifestaciones en 50 ciudades de España, y aunque al principio los medios de comunicación les hicieron bastante poco caso se ha conseguido una cosa que yo creo que debe ser histórica: que por primera vez desde que tengo memoria, en una campaña electoral se está hablando de la gente.

    No hay mucho mérito en adivinar qué sucederá el domingo (ganará el PP en la mayoría de lugares), ni siquiera lo hay en saber qué pasará cuando lleguen, el año que viene, las elecciones generales (ganará el PP por mayoría): el mérito está en haberles logrado dar a entender a los políticos, considerados desde hace ya mucho en las encuestas como el mayor problema que vemos los españoles en nuestro país, que mucha gente está hasta las narices de ellos, de sus tejemanejes, de las docenas de implicados en casos de corrupción que pueblan sus listas electorales. De que hayan consentido que nos posean los bancos, de que mantengan una ley electoral injusta y corporativa que beneficia siempre a los mismos.

    El mérito que yo le veo a todo esto es que me siento bastante menos solo. Servir lo que se dice servir es difícil que sirva para mucho: pero basta mirar al otro lado del mar para ver que aun enfrentados a poderes mucho mas opresivos y peligrosos que los nuestros, la gente sigue teniendo ese poder de derribar gobiernos que tanto se han esforzado por estirpar.

    ¿Y por qué esta inmensa parrafada se titula “criptografía para todos”?

    Pues por el factor común de ambas situaciones, la nuestra y la de los países árabes: que las protestas se han podido organizar porque la gente ha sido libre de comunicarse entre ellos.

    ¿Y qué pasaría, me pregunto yo, si quisieran quitarnos ese poder, y cuánto va a tardar alguien con poder en suspirar por esa idea?

    Pues que tendremos que aprender cómo evitarlo.

    8 comentarios más...

    archivo

    categorías