Mostrando las entradas con la etiqueta criptoanalisis. Mostrar todas las entradas
Mostrando las entradas con la etiqueta criptoanalisis. Mostrar todas las entradas

22 abril 2011

Clave pública para dummies


Antes que se enfríe el tema de la criptología, aprovecharé de agregar algunas cosas que se me estaban olvidando. El asunto es apasionante y no quiero entusiasmarme, ni sacar explicaciones largas o complicadas que ni yo mismo entiendo, sino mejor poner las ideas que hay detrás de todo el enredo.

La criptografía se dedica a las comunicaciones secretas que se transportan por un medio inseguro, o sea tengo un mensaje que se lo quiero transmitir a otra persona, ese mensaje lo pueden ver muchas personas pero solo el que yo escoja conocerá lo que yo le quise transmitir. Nadie más le verá sentido aunque lo tengan en sus manos para analizarlo como quieran. Ojo que aquí hablo de mensaje y comunicación, dos conceptos más restringidos que la información porque aquí existe un contenido semántico (significado) que si importa.

Hay muchas formas de lograr esto pero en general Shannon en su artículo identifica tres: esconder la información con significado dentro de otra con distinto significado (concealment systems), el clásico ejemplo eran los espías de la guerra fría donde el emisor y receptor tenían el mismo libro de muchas palabras (La Guerra y la Paz por ejemplo), entonces para escribir el mensaje indicaban cada palabra con tres números: la página, la fila y el lugar en la fila del libro donde esa palabra se encontraba.

En este caso si conocemos el método que están usando, la clave (key) será saber cual es el libro que están usando. Si sabemos el método y el nombre del libro no cuesta nada descifrar el mensaje secreto. Hay varios otros ejemplo como por ejemplo cuando se oculta un mensaje dentro de una imagen (esteganografía), etc. Todos estos métodos se llaman de clave simétrica, porque el que envía y el que recibe deben compartir la misma clave.

Otra familia de métodos es la que Shannon llamaba "privacy systems" que consistía en hacer alguna clase de transformación tecnológica al mensaje que solo fuese conocida por las dos partes, como por ejemplo invertir la voz o enredarla mediante "scramblers" electrónicos. En este caso el secreto (key) estaba en el método, bastaba conocer el método, se hace una máquina para revertirlo y listo.

Habrán notado que estos dos métodos dependen de que ambas partes compartan un mismo secreto, el problema es como se comunican cual es el secreto, o sea cuando deben mandar la clave por el mismo canal inseguro. Si se pueden juntar cara a cara se dicen la clave al oído (o bajo la "campana del silencio" de Maxwell Smart)no habría problema, pero lo normal es que no se puedan juntar personalmente ¿como se transmiten la clave de manera segura? No hay forma si usan una clave simétrica como las descritas.

El tercer método es el que Shannon llama "true secrecy system" que supone que el enemigo puede interceptar el mensaje, pero le resulta imposible de entender aún cuando conoce que sistema se ha usado para encriptarlo, depende completamente de conocer la clave (key) que no es el método como en los casos anteriores sino que otro mensaje mas corto que permite abrir al encriptado aplicando alguna transformación matemática.

Shannon vuelve al problema de la clave simétrica y dice que debe ser "transmitida por un canal no interceptable" (imposible porque ya definimos un medio inseguro, si hubiese un canal no interceptable no necesitamos encriptar). El intercambio de claves fue el mayor problema de la criptografía durante siglos.

La famosa máquina Enigma de los nazis producía encriptación tan complicada porque cada vez que escribía la transposición de la letra era distinta, o sea cada letra de cada mensaje usaba un método diferente. Leo en este entretenido artículo que la máquina se vendía como una curiosidad en Berlin a 144 dólares cada una, fue inventada por el ingeniero Arthur Sherbius y muchas fueron compradas y operadas por el Ejército Argentino antes de la Segunda Guerra.

EL Servicio Secreto polaco compró algunas antes de que Polonia fuese invadida y construyeron las primeras máquinas capaces de romper ese código llamadas "bombas polacas", luego de la invasión los criptógrafos polacos se fueron a trabajar a Inglaterra donde finalmente quebraron el código de las enigamas mucho más complicadas que se construyeron durante la guerra.

Como siempre el punto débil era intercambiar la clave, las máquinas Enigma venían con un libro con las claves que deberían usar cada día, a veces cambiaban más de una clave por día pero ese era el talón de Aquiles del sistema: si se recolectaban muchos mensajes enviados un mismo día había material para que los criptoanalistas dedujeran las claves y pudiesen romper el código.

El problema de la clave simétrica recién se vino a resover en 1976 cuando Diffie y Hellman publicaron su artículo New Directions in Criptography que dio origen a la criptografía asimétrica o de clave pública.

Es de esas ideas que uno se pregunta como antes no se le había ocurrido a nadie: el receptor y emisor tienen dos claves cada uno, una privada y una pública. Para encriptar y desencriptar se usan las dos claves combinadas igual que una caja fuerte que se abre solo cuando se usan dos llaves simultáneamente. Como las claves públicas por si solas no sirven para nada, las puedo publicar en el diario, mandar por correo, etc. sin problema.

Para encriptar mi mensaje uso mi clave privada y la clave publica del destinatario, para abrirlo la otra parte usa mi clave pública y su clave privada ¡ya no existe el problema de intercambiar una clave secreta!

Y para tener acceso a nuestra clave privada, que está bien guardada en algún lado de mi equipo, debo usar un password que solo yo conozco y no necesito decir a nadie, ni siquiera al destinatario de mi mensaje. Que ingenioso ¿no?. En la imagen se muestra como funciona el sistema, las dos claves (privada y pública) que se muestran en rojo y verde son las de Bob y el enemigo es Eve, que pese a tener el mensaje y las claves públicas de ambos no tiene modo de saber el secreto del mensaje, por ejemplo si le están poniendo los cuernos.

En fin, el tema da para largo pero lo que me interesaba contar era el problema de comunicarse la clave y como lo resolvió el sistema de cifrado asimetrico. Hasta mañana

18 junio 2008

Enigma, Julio César y RSA

Hasta los los años 80, los métodos para encriptar datos estaban clasificadas al mismo nivel que los secretos atómicos y cualquiera que los divulgara en USA se arriesgaba a ir con cadena perpetua por delito contra la seguridad nacional. Creo que fue a fines de los 70 cuando se inventó el RSA que cambió completamente el concepto, eliminando la necesidad del secreto para encriptar los datos.

Siempre me ha gustado la historia de la criptografía, la necesidad de ocultar información es antiquísima desde los primitivos métodos de sustitución usados por Julio Cesar hasta los actuales, basados en problemas matemáticos que todavía no se han resuelto.

En la segunda guerra mundial, los barcos y submarinos necesitaban comunicarse por radio, los alemanes usaron la máquina Enigma, que tenía un metodo de sustitución tremendamente sofisticado. El concepto de encriptar por sustitución es simple: se cambia una letra por otra, por ejemplo en el conocido ROT13 se corren las letras en 13 lugares, así la A se cambia por M, la B por N, la C por O, etc. Para hacerla más difícil cada vez que se manda un nuevo mensaje la sustitución puede cambiar 15, 7 o cualquier otra cantidad de lugares. Descifrar estos mensajes que sustituyen "por rotación" es trivial, basta con probar las 25 rotaciones posibles sobre un texto y listo.

Más difícil es si se sustituye al azar, por ejemplo haciendo una tabla de equivalencias que no siga ningún órden. Pero ese también es un código relativamente fácil de romper usando la estadística, existen letras y palabras en cada idioma que se usan más frecuentemente que otras, por ejemplo en español una combinación de dos letras puede ser "el", "al", "es" o unas pocas más, eso permite ir descifrando parte del mensaje, el resto se saca por contexto y así se puede romper toda la clave con cierta facilidad.

La máquina Enigma usaba tres cilindros que iban cambiando las equivalencias a medida que se iba escribiendo por un sistema electromecánico. Así por ejemplo la palabra AA no producía dos letras iguales sino -digamos- EJ, esto dificultaba enormemente la tarea de descifrar. Desgraciadamente para los alemanes durante la guerra Inglaterra tenía a Alan Touring, el padre de la inteligencia artificial. La clave de enigma era la posición inicial de los rotores y conectores, si se colocaban en la misma posición en otra máquina igual y se tecleaba el texto cifrado, aparecía de inmediato en texto claro.

¿Como pudieron romper el cifrado de Enigma? en 1929 los polacos interceptaron una de esas máquinas y el matemático Marian Rejewski hizo algunos descubrimientos fundamentales para romper el código. Cuando estalló la segunda guerra mundial los mejores matemáticos junto con gente común pero muy dotada para romper códigos usaron estos descubrimientos y desde antes de la batalla de Inglaterra ya podían descifrar la mayoría de las comunicaciones alemanas, sin duda que ese fue uno de los principales factores de la derrota de Alemania, que nunca se dieron cuenta que estaban siendo interceptados.

Hasta los años 70 todas las técnicas de la criptografía se basaban en mantener el método en secreto, así, cuando se rompía el secreto se facilitaba el trabajo de romper el código, pero cuando Rivest, Shamir y Adleman inventaron el sistema de clave pública RSA, hubo una revolución en la criptografía: ya no era necesario mantener secretos para que fuera seguro, todo lo contrario, mientras más lo conocieran y trataran de romperlo más robusto se ponía el método.

El método RSA es también en principio sencillo, todos aprendimos en preparatoria que se puede descomponer cualquier número en sus factores primos, por ejemplo 36 es 3x3x2x2, esto es más o menos fácil hacerlo "al ojo" pero no se sabe de ningún método o algoritmo matemático para hacerlo con números muy grandes, es un problema que se conoce desde la época de los matemáticos griegos y todavía nadie le ha encontrado solución (o si la ha encontrado se la tiene muy calladito). basta entonces tener dos números primos muy grandes (por ejemplo mayores que 10 elevado a 100), se multiplican y con alguna manipulación se generan dos claves, una pública y otra privada, que deben usarse en conjunto para abrir el mensaje, tal como algunas cajas de fondos necesitan dos llaves distintas al mismo tiempo para abrirse.

Así, para encriptar con RSA solo necesitamos un buen password, que no queda almacenado en ninguna parte pero se usa para generar el par de claves, la clave privada la guardamos para nosotros y la pública se la mostramos a todo el mundo. Si quiero mandar un mensaje a otra persona lo encripto con mi clave privada y su clave pública, y para abrirlo la otra persona usará mi clave pública y su clave privada, Ambas combinaciones permiten factorizar con facilidad los grandes números primos y así cifrar y descifrar el mensaje.

A partir de este concepto han surgido muchos otro métodos que funcionan de manera similar pero usan otros problemas matemáticos no resueltos. Otra técnica que se usa mucho en criptografía en combinación con la clave pública son las funciones Hash, también conocidas como resúmen o digest. El concepto también es simple, supongamos que tenemos un archivo inmenso de varios gigabytes, le podemos aplicar un método matemático para que nos entregue un texto pequeño, de largo fijo garantizadamente único, que será su resumen o firma. ¿para que sirve esto? es muy útil porque como el hash es único para cualquier combinación de datos, podemor calcularlo para asegurarnos que los archivos, incluso los más grandes, no han sido modificados ni en un solo bit. Si se modifica un solo bit el valor hash dará distinto. Normalmente se usa el método MD5 y así es como verificaron -por ejemplo- que los laptop del líder de las FARC no habían sido modificados.

La criptografía se ha simplificado enormemente desde que apareció el PGP en los 80s y ahora el True Crypt que es completamente gratis, muy fácil de usar y al alcance de cualquiera, lo raro es que la gente no la usa. Mandar mail desencriptados, sabiendo que quedan almacenados y -peor todavía- son indexados y accesibles para siempre por compañías como Google y Yahoo es como mandar cartas con contenido privado sin sobre. La encriptación es el equivalente a un sobre y lo único que puede garantizar la seguridad, el contenido de cualquier mail que mandemos sin encriptar es abierto y fácilmente accesible para las compañías que generosamente nos dan este servicio sin cobrar un solo peso.