miércoles, 30 de agosto de 2017

Criptografía (LVII): ¿Sabías que...? (XIII)

Decía en el post anterior que en este iba a contar algunas cosas curiosas sobre anagramas famosos y que, al final, también iba a poner un reto consistente en resolver uno de mi invención.

Uno de los usos que se les ha dado a los anagramas a lo largo de la historia ha sido y es actualmente el de ocultar la verdadera identidad de alguien, bien sea por mera diversión, porque este no desea que se le relacione con ciertas de sus obras o por otras muy diversas circunstancias.

Este es el caso, por ejemplo, de Isaac Newton, que utilizó el seudónimo de Jeova Sanctus Unus (algo así como Jehová único santo) para firmar sus trabajos como alquimista.

En este caso concreto supongo, aunque no sé si realmente esto es así, que su uso por parte de Newton fue consecuencia, entre otros motivos, de que la alquimia no era una materia que le hiciera precisamente mucha gracia al poder eclesiástico de la época y este último tenía muy poco sentido del humor y muy mala leche.

En concreto, el citado alias, Jeova Sanctus Unus, era un anagrama de su nombre latinizado, es decir, de Isaacus Neuutonus, de la siguiente manera:
Los anagramas también han sido utilizados a lo largo de la historia para ocultar mensajes de todo tipo, y no sólo en la realidad, sino también en la ficción para dar pistas a los protagonistas de novelas y películas para resolver ciertos enigmas. Este es el caso, por ejemplo, de aquellos que aparecen en la novela "El código Da Vinci" de Dan Brown.

En esta novela, entre otros, aparecen los siguientes anagramas:


13-3-2-21-1-1-8-5

Diavole in Dracon



Para mí, el primero de ellos, aunque consiste en una serie de números, también puede ser considerado un anagrama, ya que tras su correcta ordenación los protagonistas obtienen los primeros 8 números de la sucesión de Fibonacci (1-1-2-3-5-8-13-21), aquella en la que a partir de sus dos primeros términos los siguientes son la suma de los dos anteriores, lo que les da una pista muy importante para seguir resolviendo ciertos enigmas.

El segundo de ellos también oculta el nombre de una persona muy famosa. En este caso de un genio del Renacimiento, Leonardo da Vinci, de la siguiente manera:
Hay muchísimos otros ejemplos de anagramas famosos, reales o de ficción, pero para no hacer excesivamente largo y pesado este post aquí me quedo.

Y para finalizar, pongo como reto el resolver un anagrama de mi invención para todo aquel que quiera entretenerse un rato (se admiten soluciones como comentario a esta entrada :) ):


ES MI ANAGRAMA DEL MENSAJE A LEER QUE ESTÁ OCULTO EN ÉL

Criptografía (LVI): ¿Sabías que...? (XII)

Releyendo la novela "Viaje al centro de la tierra" para escribir los dos posts anteriores de esta serie sobre el criptograma que en ella aparece, me llamó la atención la afirmación del profesor Otto Lindebrock, uno de sus principales protagonistas, para justificar que el mensaje que encuentra del alquimista islandés estuviera cifrado: "¿No hizo Galileo otro tanto cuando descubrió a Saturno?".

No  conocía yo esta historia sobre un criptograma de Galileo, lo que me ha animado a buscar en Internet para ver si encuentro algo relacionado con este gran científico y un mensaje secreto con respeto a Saturno.

Pues bien, he encontrado una historia relativa a dos anagramas que supuestamente Galileo hizo llegar a Kepler, el primero de ellos relacionado con Saturno y, por tanto, que entiendo que es a lo que se refiere el profesor en la novela.

Antes que nada; tal y como nos dice wikipedia: "un anagrama es una palabra o frase que resulta de la transposición de letras de otra palabra o frase. Dicho de otra forma, una palabra es anagrama de otra si las dos tienen las mismas letras, con el mismo número de apariciones, pero en un orden diferente". Así, por ejemplo: "Roma" y "Mora" son anagramas de "Amor".

Lo primero que yo me pregunto es si un anagrama puede considerarse como un criptograma. Entiendo que sí, siempre que en él se pretenda ocultar un texto o mensaje inteligible para ponerlo a salvo de terceras personas que no conozcan la clave (la permutación o cambios de posición de los caracteres del mensaje que se ha utilizado en la transposición de los mismos). En este caso, yo diría que el criptosistema empleado sería de transposición por grupos, es decir, considerando como un grupo a la totalidad del mensaje, la clave sería la permutación utilizada para reordenar los caracteres del texto en claro.

Así, suponiendo que el anagrama o criptograma "Roma" escondiera el mensaje o texto en claro "Amor" la permutación sería 4-3-2-1 (en este caso equivalente a la transposición por escritura inversa, es decir, a escribir los caracteres del mensaje en sentido contrario al habitual, de derecha a izquierda), mientras que si ese mismo anagrama ocultara el mensaje "Mora" la permutación sería 3-2-1-4.


Dicho esto volvamos al primero de los anagramas que Galileo hizo llegar a Kepler (por lo que he leído esto era habitual cuando alguno de ellos hacía un descubrimiento que no podía explicar convenientemente en ese momento, pero del que quería dejar constancia de haber sido su descubridor), el siguiente


SMAISMRMILMEPOETALEUMIBUNENUGTTAUIRAS

Que resultaba de la reordenación de los caracteres, con la permutación que Galileo utilizó, del siguiente mensaje en latín:


ALTISSIMUMPLANETAMTERGEMINUMOBSERVAVI

Es decir:
ALTISSIMUM PLANETAM TERGEMINUM OBSERVAVI

Lo que según he leído por ahí podría traducirse como:

HE OBSERVADO EL PLANETA MÁS ALTO EN TRIPLE FORMA


Galileo se refería a que había observado dos protuberancias en Saturno (el planeta más lejano de la tierra que se conocía en esa época) que él creyó que eran dos satélites, aunque realmente se trataba de sus anillos.

Sin embargo, Kepler resolvió el anagrama (no conocía la permutación empleada por Galileo) y obtuvo un texto con un significado totalmente diferente:


SALVEUMBISTINEUMGEMINATUMMARTIAPROLES

Es decir:
SALVE UMBISTINEUM GEMINATUM MARTIA PROLES

Que, también como he leído por ahí, podría traducirse como:

SALVE ARDIENTES GEMELOS HIJOS DE MARTE

Lo que le llevó a concluir, evidentemente de forma equivocada, que lo que había descubierto Galileo eran satélites de Marte.


Esta historia continúa con otro anagrama que, pocos meses después, Galileo hizo llegar también a Kepler y que se refería a que había descubierto las fases de Venus, similares a las de la Luna, pero que Kepler resolvió otra vez obteniendo un texto en claro completamente diferente al mensaje de Galileo. En esta ocasión, también de forma totalmente equivocada, pensó que lo que Galileo había descubierto era la Gran Mancha Roja de Júpiter.

Curiosa historia, y no sólo porque de dos anagramas, con una longitud relativamente grande, resultan para cada uno de ellos dos textos en claro inteligibles con significado totalmente distinto, sino también porque, efectivamente, Marte tiene dos pequeñas lunas (Fobos y Deimos) y Júpiter presenta una gran mancha roja; ambas cosas ciertas, pero que ni Galileo ni Kepler podían saber con la tecnología existente en la época y que no fueron descubiertas hasta mucho tiempo después.

Hasta aquí esta historia que no conocía y que me ha resultado muy curiosa, y en el siguiente post continuaré contando algunas cosas sobre anagramas famosos y pondré un reto para quien quiera resolver uno de mi invención.

sábado, 26 de agosto de 2017

Criptografía (LV): ¿Sabías que...? (XI)

En el post anterior conté cómo dos de los protagonistas de la novela "Viaje al centro de la tierra" de Julio Verne, el profesor Otto Lidenbrock y su sobrino Axel, consiguen descifrar un criptograma escrito en un alfabético rúnico por el alquimista islandés Arne Saknussemm y que ocultaba el secreto de la entrada al camino a seguir para llegar al centro de la tierra (un cráter concreto de un volcán también islandés).

En mi opinión el proceso de descifrado de dicho criptograma, como no podía ser de otra forma, está muy bien contado en la novela por su genial autor, desde la conjetura inicial realizada por el profesor sobre la lengua en la que estaría escrito el texto en claro, pasando por la identificación del método de cifrado utilizado (transposición de columnas simple) y la determinación de la disposición de los caracteres incluidos en cada una de las columnas de la tabla empleada, hasta la resolución final del enigma (escritura inversa del texto en claro antes de la transposición, es decir, en sentido contrario al habitual, y que no deja de ser otro sistema de transposición más, aunque el más básico; alteración del orden de los caracteres del texto en claro siguiendo un criterio predeterminado para lograr el efecto de difusión en un criptograma).

Tal y como decía en el post anterior, el criptograma que aparece en la novela y el texto obtenido tras sustituir cada carácter rúnico por el correspondiente a nuestro alfabeto son los siguientes (el primer carácter rúnico se corresponde con una doble "m"):
¿Cómo intentaría yo descifrar este criptograma?.

Considerando que cada carácter del criptograma se corresponda con un único carácter del texto en claro, y viceversa, cosa que yo supondría que es lo más probable, lo primero que yo me preguntaría es qué tipo de criptosistema utilizó Arne Saknussemm para ocultar su secreto: transposición, sustitución monoalfabética o sustitución polialfabética, y para dar respuesta a esta primera pregunta calcularía el Índice de Coincidencia (IC) del criptograma, es decir, la probabilidad de que dos caracteres tomados al azar del criptograma resulten ser iguales.

Si no me he equivocado al calcularlo: IC = 0,0697.

Con lo que creo que se puede descartar la sustitución polialfabética, ya que este IC es muy superior al de una distribución uniforme (aquella en la que cada símbolo o carácter del alfabeto ocurre con la misma frecuencia), valor al que se aproximaría en el caso de haberse empleado un criptosistema de sustitución polialfabética, y, por tanto, podemos pensar que el tipo de cifrado es de transposición o de sustitución monoalfabética simple, o una combinación de ambos.

El profesor no tiene ninguna duda de que cada carácter de nuestro alfabeto en el texto en claro se corresponde con su correspondiente carácter rúnico en el criptograma, pero esto no tendría que ser necesariamente así. Pensemos, por ejemplo, en un cifrado tipo César en el que hubiera una sustitución de cada carácter de nuestro alfabeto por el carácter rúnico que se encuentre tres posiciones más adelante con respecto a la que le corresponda a su equivalente en el alfabeto rúnico. De esta forma, por ejemplo, el carácter "a" de nuestro alfabeto sería sustituido en el criptograma por el símbolo correspondiente a la "d" en el alfabeto rúnico.

Si esto fuera como piensa el profesor la utilización del alfabeto rúnico, en mi opinión, no aportaría ningún valor criptográfico al sistema de cifrado utilizado (lo único es que sería más fácil descifrar el criptograma si se conoce dicho alfabeto, aunque ni siquiera esto sería estrictamente necesario, y que envuelve a este en un cierto halo de misterio), mientras que si hubiera una sustitución de los caracteres de nuestro alfabeto por otro distinto de su equivalente en el alfabeto rúnico se conseguiría un cierto efecto de confusión en el criptograma, dotando de mayor robustez al cifrado.

¿Podríamos intentar averiguar si cada carácter de nuestro alfabeto se sustituye en el criptograma por su equivalente?, o, lo que creo que es lo mismo, ¿Podríamos saber si no se ha utilizado un sistema de sustitución monoalfabética?.

Para ello yo acudiría a un análisis de frecuencias, de la siguiente manera:
En la novela el profesor establece la hipótesis de que la lengua en la que está escrito el texto en claro es el latín. Pues bien, comparando la frecuencia de aparición de los caracteres rúnicos en el criptograma con la frecuencia de aparición de sus caracteres equivalentes en nuestro alfabeto, se observa que el porcentaje de aparición de los primeros se aproxima bastante, salvo algún caso que comentaré después, al de los segundos en un texto escrito en latín, español o inglés, lo que creo que puede decir que cada carácter rúnico del criptograma se corresponde con su carácter equivalente en nuestro alfabeto. Así, por ejemplo, el carácter rúnico que se corresponde con la "e" es el que significativamente más veces aparece en el criptograma y el significativamente más frecuente en los tres idiomas considerados, por lo que obtengo la conclusión de que se puede descartar también la sustitución monoalfabética como criptosistema empleado en el cifrado, y, por tanto, conjeturar que lo más probable es que el tipo de este sea de transposición.

La hipótesis del profesor se basa en parte en la proporción de vocales frente a consonantes, ya que esta es mayor en las lenguas meridionales que en los idiomas del norte, mucho más ricos en consonantes, y, efectivamente, ese es un buen indicador si el sistema empleado en el cifrado es el de transposición, lo que tal y como digo es lo más probable. Si esto último fuera así, el porcentaje de vocales del criptograma, y como el sistema usado sería de transposición también en el texto en claro, en comparación con el que se espera encontrar en un texto escrito en cada uno de los tres idiomas citados sería:
Lo que unido a que en el análisis de frecuencias anterior la letra "t" aparece en el criptograma con una frecuencia bastante superior a la que se esperaría en un texto en español y la "h" no aparece en el criptograma siendo una letra muy frecuente en inglés, creo que puede indicar que el profesor tenía razón, es decir, el latín es la lengua más probable en la que se encontraría escrito el texto en claro.

Pero yo haría un último intento para confirmarlo. Para ello acudiría otra vez al Índice de Coincidencia:
Como se observa el IC del criptograma está un poco más próximo al del latín (como no lo he encontrado en Internet, lo he estimado a partir de un fragmento con 27.890 caracteres de la Eneida de Virgilio). Aunque la diferencia no es significativa creo que esta circunstancia, junto con la anterior más la observación realizada por el profesor de que como Saknussemm era un hombre instruido, al no haberlo escrito en su lengua nativa (el islandés), es de suponer que podría haber utilizado preferentemente el latín (en boga entre las personas cultas en el siglo XVI), puede también indicar que, efectivamente, lo más probable es que esta sea la lengua en la que está escrita el texto en claro.

Recapitulemos: hasta el momento no he hecho más que ratificar, aunque utilizando algunos argumentos adicionales, las conclusiones a las que llega el profesor en la novela; el criptosistema empleado es de transposición y la lengua más probable en la que está escrito el texto en claro es el latín.

Puede que parezca que ambas hipótesis no son gran cosa, pero son la base para intentar un criptoanálisis con éxito.

A partir de aquí el profesor deduce que el sistema de cifrado empleado es el de transposición por columnas simple; entiendo que debido a que el criptograma está divido en bloques o grupos (21) de caracteres, los primeros con una longitud de 7 símbolos y los últimos de 6, lo que le lleva, tal y como expliqué en el post anterior, a dar con la disposición correcta de los caracteres del texto en claro antes del cifrado por transposición de columnas simple (se habría utilizado una tabla de 7 filas y 21 columnas).

Lástima que no se diera cuenta de que antes de ello, en una fase previa de cifrado, Saknussemm había utilizado la escritura inversa del texto en claro (otro método de transposición), de lo que sólo se percata por pura casualidad su sobrino Axel y lo que a mi me lleva a concluir que el criptoanálisis no es una ciencia exacta, es decir, no es únicamente método, sino que se necesitan además grandes dosis de intuición y, por qué no decirlo, de suerte.

martes, 22 de agosto de 2017

Criptografía (LIV): ¿Sabías que...? (X)

Ya he escrito en este blog varios posts sobre la criptología (criptografía y criptoanálisis) en la literatura y en el cine ("Criptografía (XXVIII): ¿Sabías que...? (IV)", "Criptografía (XXIX): ¿Sabías que...? (V)", etc., sobre criptogramas en "El escarabajo de oro" de Edgar Allan Poe, en el "El símbolo perdido" de Dan Brown, respectivamente, etc.) y en este le toca el turno al quizás más famoso criptograma que aparece en una novela, me refiero al que figura en "Viaje al centro de la tierra" de Julio Verne.

Todos hemos leído esta novela y, por tanto, recordaremos que en ella uno de sus protagonistas, Otto Lidenbrock, un prestigioso profesor de mineralogía, encuentra un pergamino de un alquimista islandés, Arne Saknussemm, que contiene un texto escrito en un alfabeto rúnico y en el que podría ocultarse la explicación, o la indicación, de un gran descubrimiento.

También recordaremos que, tras múltiples e infructuosos intentos de obtener un texto inteligible por parte del profesor, sólo tras un hallazgo casual de Axel, principal protagonista de la historia y sobrino de este, se logra que adquiera sentido.

Lo primero que hace el profesor, basándose en ciertas circunstancias, es conjeturar que lo más probable es que el texto que revela ese gran descubrimiento esté escrito en latín y, después, dictarle a Axel los caracteres de nuestro alfabeto correspondientes a cada uno de los caracteres rúnicos que aparecen en el pergamino, con objeto de obtener un texto inteligible, pero tras este primer intento, tras comprobar que el texto resultante es un absoluto galimatías, el profesor deduce que se trata de un criptograma en el que Arne Saknussemm ocultó su secreto.

El criptograma en cuestión y el texto obtenido tras sustituir cada carácter rúnico por el correspondiente a nuestro alfabeto son los siguientes (el primer carácter rúnico se corresponde con una doble "m"):
Lo primero que se le ocurre al profesor es que Arne Saknussemm podría haber utilizado un cifrado de transposición por columnas simple, es decir, podría haber usado una tabla de varias columnas completándola de izquierda a derecha fila a fila con cada carácter del texto en claro, para después obtener el criptograma leyendo carácter a carácter de arriba a abajo columna a columna.  

El profesor cree que esta suposición sobre el método de cifrado puede ser correcta, ya que observa que en el criptograma parece que las vocales y consonantes tienden a agruparse (caso, por ejemplo, de la cadena "mm.rnlls", que sólo contiene consonantes, y de las cadenas "unteief" y "oseibo", compuestas mayoritariamente por vocales).

Así, el siguiente intento del profesor consiste en dictar a Axel una serie de caracteres compuesta, en este orden, por el primer carácter de cada grupo de caracteres del criptograma, a continuación por el segundo de cada grupo, después por el tercero de cada grupo y así sucesivamente.

O, lo que es lo mismo, el profesor intuye que cada grupo de caracteres del criptograma (21 grupos) indica una columna de la posible tabla de transposición utilizada (por tanto, esta constaría de 21 columnas): en la primera columna se hallarían los caracteres "mm.rnlls" (hay que tener en cuenta que la primera doble "m" sería un único carácter), en la segunda los caracteres "esreuel", en la tercera los caracteres "seecJde", en la cuarta los caracteres "sgtssmf",... y en la vigésimo primera los caracteres "kediiY". Es decir:
Por tanto, la serie de caracteres que el profesor dicta a Axel es la compuesta por los caracteres de la primera fila de esta tabla, después los de la segunda,... y por último los de la séptima. Con esto esperaba obtener ya el texto en claro, pero para él dicha serie seguía sin tener ningún sentido.

Tras este fallido intento el profesor abandona momentáneamente la tarea del descifrado y es Axel quien continúa con ella, descubriendo por pura casualidad el secreto que se ocultaba en el criptograma. Su tío había estado muy cerca de descifrarlo; había acertado con la lengua en la que estaba escrito el texto en claro, el latín, e incluso con la disposición de las letras en la transposición de columnas simple realizada en el cifrado. Lo único que le había faltado era darse cuenta de que el texto en claro, antes de la transposición, había sido escrito al revés, es decir, de derecha a izquierda, y, por tanto, para obtenerlo bastaba con leer la serie que le dictó a Axel también al revés, es decir, del final hacia el principio o, lo que es lo mismo, fila a fila de la tabla anterior comenzando por la última fila y de derecha a izquierda, con lo que se revelaba el enigma; el siguiente texto en claro en latín:
que, por lo que he visto en la novela, se podría traducir como:


"Desciende al cráter del Yocul de Sneffels que la sombra del Scartaris acaricia antes de las calendas de Julio, audaz viajero, y llegarás al centro de la tierra. Como he llegado yo. Arne Saknussemm".

Hasta aquí este pequeño resumen del descifrado del criptograma que se realiza en la novela, pero en el siguiente post de esta misma serie intentaré aportar algunas cosas más sobre ciertos aspectos que yo tendría en cuenta para su criptoanálisis

martes, 20 de junio de 2017

Jornada: La LOPD en los centros públicos de Formación Profesional

Ayer, 19 de junio de 2017, tuve la oportunidad de participar, como asociado de PRIBATUA (Asociación Vasca de Privacidad y Seguridad de la Información / Pribatutasun eta Informazio Segurtasuneko Euskal Elkartea), en la Jornada: "La LOPD en los centros públicos de Formación Profesional" organizada por Ikaslan Bizkaia, y que tuvo lugar en el CIFP Bidebieta LHII de Basauri.
Una jornada muy interesante y en la que durante mi ponencia traté de reflexionar con los profesionales involucrados: Directores de Centros, Docentes,..., sobre su problemática en materia de protección de datos de carácter personal, respecto tanto a la normativa actualmente de aplicación (LOPD y RDLOPD) como a las principales novedades de aquella que será de aplicación a partir del 25 de mayo de 2018 (nuevo reglamento europeo de protección de datos, RGPD).
La verdad es que me quedé muy gratamente sorprendido con la participación activa de los asistentes, tanto durante la ponencia como en el turno de preguntas, dudas y comentarios. Algunas de la preguntas realizadas:
Como tras cada ponencia en la que tengo el privilegio de participar, sinceramente, no sé si conseguí transmitir de forma adecuada y comprensible aquello que pretendía comunicar, ni mucho menos resolver algunas de las dudas que se plantearon en este caso específico, pero de lo que sí estoy seguro es de que yo aprendí un montón.

Eskerrik asko Ikaslan Bizkaia por habernos invitado a participar.

jueves, 11 de mayo de 2017

Criptografía (LIII): ataque a RSA mediante factorización (IV)

En esta ocasión me referiré al método de factorización de Dixon, un algoritmo de propósito general.

Recordar que, tal y como comenté en un post anterior, mientras que en los algoritmos de propósito específico (Fermat, rho Pollard, p -1 Pollard,...) el tiempo de ejecución depende de las características propias de los dos factores primos (p y q) del módulo (n) a factorizar, en los de propósito general éste sólo depende del tamaño del módulo.

Antes que nada explico lo que he entendido sobre este método (espero no equivocarme mucho) y pongo un ejemplo con el número que vengo utilizando como módulo en los ejemplos de cifrado RSA.

Si no lo he entendido mal, la idea básica de este método es, dado un número n a factorizar, encontrar dos números x e y tales que x2 º y2 mod n, con lo que (x - y) (x + y) es un múltiplo de n, y, por consiguiente, tanto el mcd(x - y, n) como el mcd(x + y, n) nos entregarán un factor no trivial de n (distinto de 1 y n) siempre y cuando ni (xy) ni (x + y) sean múltiplos de n.

Supongamos que queremos factorizar n, el método consiste en:

a) Tomar una base (B) de números primos consecutivos, empezando en 2, unión con -1, es decir, B = {-1, p1p2p3,...}.

b) Después elegimos números enteros zi tales que zi2 pueda factorizarse como el producto de potencias de elementos de la base (Bmod n, de tal forma que: zi2 º (-1)e1 x (p1)e2 x (p2)e3 x (p3)e4 x ... mod n.

c) Cuando encontremos varios números que satisfagan la condición anterior (wj) buscamos un subconjunto de ellos en los que la suma de exponentes de cada elemento de la base (sk) sea par, y eso nos llevará a la congruencia buscada: (w1 x w2 ...)2 º ((-1)s1/2 x (p1)s2/2 x (p2)s3/2 x (p3)s4/2 x ...)2 mod n.

Es decir:
x2 º y2 mod n.

d) Con lo que tanto el mcd(x - yn) como el mcd(x + yn) es muy probable que nos entreguen un factor no trivial de n (distinto de 1 y n).

Ejemplo: sea n = 52.841.

a) Tomamos como Base: B{-1, 2, 3, 5}.

b) Elegimos como números enteros cuyos cuadrados se factorizan como el producto de potencias de elementos de la base módulo n, los siguientes:

(229)2 º (-1)1 x (2)4 x (3)0 x (5)mod 52.841
(514)2 º (-1)1 x (2)0 x (3)2 x (5)0 mod 52.841

c) (229 x 514)2 º (22 x 3 x 5)2 mod 52.841

Lo que nos da: (12.024)2 º (60)2 mod 52.841

d) mcd(12.024 - 60, 52.841) = 997, y , por tanto, hemos conseguido factorizar el módulo: 52.841 = 997 x 53.

Pero en la práctica: ¿cómo se implementa este método?. En un próximo post intentaré poner un algoritmo para ello, conforme a lo que he entendido, y aplicarlo a este mismo ejemplo. ¿Algún voluntario para incluirlo en forma de comentario?.

miércoles, 26 de abril de 2017

Criptografía (LII): ataque de intermediario a RSA

En anteriores posts de este blog he tratado sobre diferentes ataques teóricamente posibles al cifrado RSA, pero que tal y como decía, al menos actualmente, son ineficientes con la potencia de cálculo de los ordenadores actuales. Sin embargo hay otros ataques posibles y que pueden tener más probabilidades de éxito.

Tal y como también he dicho en anteriores posts de esta serie sobre criptografía:

"El eslabón más débil de la cadena de seguridad (y la criptografía no es una excepción) lo constituimos las personas".

Es decir, podemos tener un criptosistema muy robusto (muy seguro conceptualmente), como es el caso de RSA, pero si las personas que lo administramos y/o utilizamos no hacemos un uso adecuado del mismo éste podría ser "roto" con relativa facilidad.

En este post, como ejemplo de ésto, me voy a referir al ataque de intermediario (MitM, por las siglas en inglés de: "Man-in-the-Middle"), que, aunque en el título de este post lo he indicado como ataque al cifrado RSA, realmente puede emplearse para atacar cualquier criptosistema de clave pública.

En este tipo de ataques el atacante no se hace con la clave privada de los usuarios que intercambian entre sí mensajes cifrados, pero está en disposición de leerlos (descifrarlos y obtener así el texto en claro) e incluso de modificarlos, sin que emisor ni destinatario se den cuenta de ello.

Supongamos que un atacante (C) tiene acceso al directorio donde se encuentran las claves públicas de dos usuarios (A y B), entonces podría almacenar ambas claves y sustituirlas por otras dos previamente generadas por él y, por tanto, de las que dispone de sus respectivas claves privadas, o bien, si el intercambio de claves públicas entre A y  B se produce mediante sendas comunicaciones por un canal no seguro y C es capaz de interceptarlas, entonces C podría enviar a cada uno de ellos una clave pública generada por él haciéndoles creer a ambos que la clave pública que reciben es la correspondiente a la otra parte.
De esta forma, B cree disponer de la clave pública de A (KA), cuando realmente es una clave pública de C (KC1), y lo mismo le ocurre a A, que no dispone de la clave pública de B(KB) sino de otra clave pública generada por C (KC2), estando este último en disposición de leer los mensajes cifrados que se intercambien A y B, e incluso, como ya he dicho, de modificarlos. Todo ello sin que ni A ni B se den cuenta de que sus comunicaciones están comprometidas.

Veamos cómo. Supongamos que A quiere mandar un mensaje cifrado a B, para lo que utilizaría la clave pública que cree que es de B pero que realmente es de C (KC2) y se lo enviaría a B. C intercepta el mensaje y lo descifra con la clave privada correspondiente a la clave pública con la que A lo cifró (K'C2) y obtiene el texto en claro, rompiendo así el secreto que se pretendía guardar. Después C puede o no alterar el mensaje, cifrarlo con la verdadera clave pública de B (KB) y enviárselo a B como si el emisor fuera A. B descifra el mensaje con su clave privada (K'B) y cree que nadie ha tenido acceso al mismo.

Este ataque funciona de igual forma en sentido contrario (mensaje de B a A) pero el atacante utilizaría para descifrar el mensaje la clave privada K'C1 y después lo volvería a cifrar con la verdadera clave pública de A (KA) y se lo enviaría a éste como si el emisor fuera B.

El ataque de intermediario, si no se toman medidas adecuadas para evitarlo, es posiblemente el más efectivo para "romper" un cifrado RSA y, como ya he dicho antes, cualquier otro criptosistema de clave pública.

Evidentemente, el problema en este caso consiste en que el emisor debe asegurarse de que la clave pública con la que va a cifrar los mensajes es realmente del destinatario al que van dirigidos y no de un atacante. Una forma de hacer esto consiste en la participación de una Autoridad de Certificación (CA por sus siglas en inglés) que a la hora de entregar la clave pública de un usuario (destinatario) a otro (emisor) garantice que ésta es realmente del primero.

martes, 7 de marzo de 2017

'Habemus' Troll

¡Ya era hora!.

Tras exactamente 2.434 días de que naciera este modesto blog, con 352 entradas y 370 comentarios hasta el momento, al fin y como cualquier blog que se precie,

¡Ya tenemos nuestro propio Troll!.

Pero, antes que nada, veamo la definición de Troll en la wikipedia:

"Un troll o trol es un vocablo de Internet que describe a una persona que sólo busca provocar intencionadamente a los usuarios o lectores, creando controversia, provocar reacciones predecibles, especialmente por parte de usuarios novatos, con fines diversos, desde el simple divertimento hasta interrumpir o desviar los temas de las discusiones, también trollean páginas de wikipedia o bien provocar flamewars, enfadando a sus participantes y enfrentándolos entre sí. El troll puede ser más o menos sofisticado, desde mensajes groseros, ofensivos o fuera de tema, sutiles provocaciones o mentiras difíciles de detectar, con la intención en cualquier caso de confundir o provocar la reacción de los demás".

Aunque el origen etimológico de este término parece que nada tiene que ver con "El Señor de los anillos", tal y como nos aclara también la wikipedia: su origen más probable es el de «morder el anzuelo» o «morder el anzuelo mucho más» (troll es un tipo de pesca en inglés), permítaseme la licencia de las imágenes que ilustran este post, ya que soy un fan de Tolkien y porque creo que estos seres encajarían mejor como origen etimológico de este término.

Pues bien, como decía, ya nos empezábamos a preocupar ("¡menuda mierda de blog que tenemos, no comenta ni un solo Troll!"), pero esto se acabó: ¡Ya tenemos nuestro propio Troll!. He borrado sus comentarios y no voy a reproducirlos porque, como todos sabemos, hay que tener mucho cuidado a la hora de alimentarles, es más, no se les debe dar de comer nunca porque mutan a subespecies que dan mucho más la tabarra.

Pero veamos, en concreto, a qué subespecie pertenece este Troll. Para ello fijémonos en varias de las características definitorias que nos pueden dar pistas para su catalogación: se ampara en el anonimato, sólo sabe poner groserías y carece de educación. Basándome en estas apreciaciones objetivas, yo diría que se trata de un Troll "tontolano" (bueno, ya sé que no es muy académico, pero es que no me encajaba exactamente en ninguna de las subespecies descritas hasta la fecha). En definitiva, creo que estamos ante una nueva subespecie aún sin catalogar y a la que me permito bautizar.  

Por favor, querido Troll (tú y yo sabemos quién eres), apúntate el número 1 para que cuando vuelvas a comentar en este blog te identifiques como Troll#1, así todos sabremos que eres tú otra vez, para no equivocarte con otros miembros de tu misma especie que nos visiten, ya que para nosotros tú siempre serás nuestro Troll.

En la medida que vayan visitándonos otros especímenes que pululan por Internet iremos escribiendo nuevos posts de bienvenida, catalogándoles y distinguiéndoles con el número correspondiente.

lunes, 6 de marzo de 2017

Criptografía (LI): el algoritmo DES (III)

En el post anterior puse un ejemplo de cifrado utilizando el algoritmo DES y decía que en éste, para ver si lo he comprendido y he hecho correctamente, voy a descifrar el criptograma que obtuve.

De forma análoga que en el cifrado, como paso previo al descifrado debemos obtener, a partir de la clave (K), de 64 bits, las 16 subclaves (Ki), de 48 bits cada una, que se emplearán en las 16 rondas de la red de Feistel de las que consta este algoritmo, una subclave por ronda.

Ya expliqué en un post anterior como hacerlo, siendo la clave de nuestro ejemplo y las subclaves calculadas a partir de ésta las siguientes:
Y ya estamos en disposición de descifrar el criptograma, para lo que hay que recordar que en este post decía que basta con aplicar las sucbclaves (Ki) en orden inverso que en el cifrado. En nuestro ejemplo el criptograma obtenido es el siguiente:

- En binario:

C = 1001101111111011111110111111010011010000111110010001011000000100

- En hexadecimal:

C = 9BFBFBF4D0F91604


1.- Permutación inicial (IP) de los bits del bloque del criptograma a descifrar:
2.- Red de Feistel de 16 rondas (aplicando las subclaves en el orden inverso al cifrado):

2.1.- Primera iteración:
2.2.- Segunda iteración:
2.3.- Tercera iteración:
2.4.- Cuarta iteración:
2.5.- Quinta iteración:
2.6.- Sexta iteración:
2.7.- Séptima iteración:
2.8.- Octava iteración:
2.9.- Novena iteración:
2.10.- Décima iteración:
2.11.- Undécima iteración:
2.12.- Duodécima iteración:
2.13.- Decimotercera iteración:
2.14.- Decimocuarta iteración:
2.15.- Decimoquinta iteración:
2.16.- Decimosexta iteración:
3.- Permutación final (IP-1) de los bits de la concatenación R16 || L16:
Con lo que el texto en claro (M) sería:

- En binario:

M = 0100010101001010010001010100110101010000010011000100111101001101

- En hexadecimal:

M = 454A454D504C4F4D

Como se observa, he obtenido el mismo texto en claro (M) que en el post anterior, por lo que concluyo que tanto el cifrado como el descifrado son correctos.