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

viernes, 7 de octubre de 2016

En parvulitos de criptografía: pasatiempos para hackers nóveles


Hola compañeros,

Hoy compartimos con vosotros esta humilde entrada sobre las bases del cifrado, algo sencillo sin demasiada complicación y os proponemos un reto al final del artículo que deberéis saber solucionar con lo visto aquí...  ¡Pues bien, comenzamos!

La criptografía proviene de la palabra griega “kryptos” (oculto) y “graphein” (escribir), es decir, un tipo de escritura oculta. La criptografía es entonces un arte que ayudada por la ciencia se transforma en toda una potente herramienta para las comunicaciones ininteligibles entre dos puntos: emisor (cifra el mensaje) y receptor (descifra el mensaje para su lectura). A diferencia de los lenguajes que utilizamos día a día, si el mensaje es captado por terceros no deberían saber interpretarlo...

Los mensajes cifrados se usan desde tiempos inmemoriales para transferir mensajes sin que terceras personas puedan acertar lo que pone. Desde los egipcios utilizando jeroglíficos hasta los tiempos de la Roma Imperial de Julio César (100 aC – 44 aC). Éste usaba mensajes cifrados bajo un código que se ha denominado César en su nombre.

El famoso emperador romano utilizaba dicho código para escribir mensajes secretos sustituyendo las letras del mensaje original por la letra del alfabeto correspondiente a tres posiciones (desplazamiento) más allá. Es decir, la A sería sustituida por la D, la B por la E, la C por la F y así sucesivamente.

Así, un mesnaje como Obsequium amicos, veritas odium parit (en castellano “El servilismo produce amigos, la verdad odio”), podría escribirse cifrado bajo este código César como:

“Revhtxlxo dolfrv, yhulwdv rglxo sdulw”

Como ya sabemos que procede del cifrado mediante código César, descifrarlo nos resultaría fácil invirtiendo la permutación aplicando la regla vista anteriormente. Tan solo debemos sustituir cada letra por su correspondiente desplazándonos tres posiciones en el alfabeto. Podríamos crearnos una tabla para facilitar este trabajo, con las oportunas correspondencias.

Pero imagina que desconoces cual es el código bajo el que se cifra el mensaje, de primeras pensarías que un niño ha estado jugando con el teclado de tu ordenador o que tu mascota se ha paseado sobre el teclado... Sería difícil detectar que tras esas letras o símbolos sin sentido se esconde un mensaje oculto. Y más aun con los avances y complejos algoritmos de cifrado que existen en la actualidad.

Pues bien, esto es lo que usan las agencias de espionaje, ejercito, gobiernos, sistemas de cifrado, comunicaciones con embajadas, etc., pasándose información cifrada para que otros no puedan saber de que se trata, o al menos tarden en conseguir descifrar los mensajes.



En las guerras se suelen usar máquinas de cifrado para las ordenes y objetivos que se transmiten desde el mando al batallón, evitando que si el mensaje es interceptado por el enemigo, éste pueda saber cuales son las intenciones o que tarde en descifrarlo, para cuando ya se ha perpetrado el ataque.
Por ejemplo, el ejercito alemán utilizó una máquina de cifrado llamada Enigma para cifrar los mensajes, evitando que cualquier otro que no poseía los discos rotatorios de cifrado pudiese descubrir el mensaje oculto. Esto hizo que se desentrañase una de las primeras “batallas” criptográficas por descifrar mensajes, tanto de un bando como del otro.

CRIPTOANÁLISIS: ¿cómo descifrar mensajes?

El criptoanálisis es un método por el cual se van probando todas las permutaciones posibles en el texto cifrado hasta lograr captar lo que dice.
Cifrar mensajes empleando fuentes de texto como la Widing (que emplea símbolos en sustitución de las letras) en un editor de texto o los códigos de desplazamiento como los vistos anteriormente puede resultar un juego de niños para un analista criptográfico. Seguro que todos hemos hecho en algún momento algo así, o crear un tipo de fuente propia con un editor de fuentes para pasar mensajes ocultos con un amigo...

Pero los códigos de cifrado actuales hacen que se tengan que utilizar sofisticadas tecnologías para descifrar los mensajes. El método humano a seguir, suele constar de unos pasos relativamente sencillos, pero que requiere de paciencia e inteligencia para lograr descifrar el mensaje oculto. Los pasos son:
  1. Contabilizar el número de veces que se repite una letra o símbolo en un mensaje cifrado.
  2. Identificar cual o cuales se repiten mayor número de veces (frecuencia).  
  3. Escribir el mensaje secreto dejando un espacio bajo él para ir escribiendo las posibles permutaciones.  
  4. Ahora imaginemos que esas letras o símbolos que se repiten con mayor frecuencia son las letras más repetidas del idioma en el que está escrito el mensaje. Cada lengua tiene unas letras que se repiten con mayor frecuencia. Por ejemplo, en inglés la letra que más utiliza es la E, seguida de la T y luego la A. En castellano (si consultamos la “Frecuencia de aparición de letras” en la RAE) podemos apreciar como las más repeditdas son la E, seguida de la A y después la O. Si nuestro mensaje cifrado estuviese en inglés (date cuenta que varía en función del idioma), probaríamos a sustituir las letras o símbolos que más se repiten por estas letras para ver si el mensaje cobra algún sentido.  
  5. Una vez hechas las estimaciones anteriores, debemos captar cual es el código bajo el que se cifra el mensaje o directamente completar el resto del texto.  
  6. Luego podrás identificar como se ha cifrado el mensaje, es decir, qué patrón sigue para futuros descifres.  


Si tu presa o enemigo no se diese cuenta de que alguien lo ha logrado descifrar, tú podrás seguir captando los mensajes ocultos para chafarle sus planos o saber que pretende. Por eso, es una buena práctica, variar el código de cifrado a menudo para evitar este tipo de fallos de seguridad.

Caso práctico:

Imagina que has interceptado un mensaje cifrado y este pone algo así como:

 Fp hpa py wm ñmem op mw wmoa, wwmxmxp

Vamos a aplicar lo dicho en el primer punto, suponiendo que el mensaje lo han escrito compatriotas con el nivel de idiomas de Ana Botella, es decir, en castellano.
 
Para descifrar el mensaje, lo primero que debemos es contabilizar el número de veces que se repite cada carácter, tenemos que la M se repite 7 veces, luego la P se repite 5 veces, seguida de la W que se repite 5 veces. Si sabemos que el mensaje en un idioma determinado, castellano en nuestro caso, podemos probar a sustituir esas letras por las tres letras más repetidas de dicho idioma: E, A, O. Quedaría algo así:

Con la M=E: “Fp hpa py we ñeee op ew weoa, wwexexp”
Con la M=A: “Fp hpa py wa ñaea op aw waoa, wwaxaxp”
Con la M=O: “Fp hpa py wo ñoeo op ow wooa, wwoxoxp”
Con la P=E: “Fe hea ey wm ñmem oe mw wmoa, wwmxmxe”
Con la P=A: “Fa haa ay wm ñmem oa mw wmoa, wwmxmxa”
Con la P=O: “Fo hoa oy wm ñmem oo mw wmoa, wwmxmxo”
Con la W=E: “Fp hpa py em ñmem op me emoa, eemxmxp”
Con la W=A: “Fp hpa py am ñmem op ma amoa, aamxmxp”
Con la W=O: “Fp hpa py om ñmem op mo omoa, oomxmx
p”


Pero estos mensajes no son nada legibles. Deberíamos seguir probando letras y combinaciones de varias para ver si el mensaje cobra algún sentido...  En castellano además existen sonidos como la “ll” o la “rr” o la “cc” que producen bigramas de letras seguidas repetidas. Este tipo de sonidos nos facilitan el descifrado, puesto que descartaría muchas posibilidades. Aplicando esto al mensaje cifrado, vemos como ww no tendría sentido que fuese ninguna vocal de las elegidas (E, A, O). Si volvemos a analizar la frecuencia de repetición de ciertas letras en castellano, tenemos que de las consonantes que integran esos tres bigramas vistos, el orden de frecuencia es R, seguida de L y luego C. Como CC y RR al inicio de una palabra no tiene sentido, nos quedaría LL por descarte. Así que ya sabemos que la W se corresponde con la L.

Esta pista nos ha abierto una brecha interesante hacia el descifrado. Ahora sabemos con total seguridad que W=L:

“Fp hpa py lm ñmem op ml lmoa, llmxmxp” 

Si con este nuevo mensaje repetimos las combinaciones anteriores, obtendremos esto (sin contar la W, ya que sabemos de qué letra se trata):

Con la M=E: “Fp hpa py le ñeee op el leoa, llexexp”
Con la M=A: “Fp hpa py la ñaea op al laoa, llaxaxp”
Con la M=O: “Fp hpa py lo ñoeo op ol looa, lloxoxp”
Con la P=E: “Fe hea ey lm ñmem oe ml lmoa, llmxmxe”
Con la P=A: “Fa haa ay lm ñmem oa ml lmoa, llmxmxa”
Con la P=O: “Fo hoa oy lm ñmem oo ml lmoa, llmxmxo”


Si analizamos el resultado, podemos ver datos curiosos. En el caso de M=E, aparecen sonidos posibles en castellano y con sentido (le, el, lle), igual ocurre con M=A (la, al, lla). No es así con M=O, que podríamos descartarla, puesto que “lo” si que existe, pero “ol” no. Así vamos reduciendo las posibilidades. Si intuimos que M puede ser o A o E, entonces se puede descargar que P sea una de estas dos letras. Recopilamos, si M puede ser A o E y W es L:

“Fp hpa py la ñaea op al laoa, llaxmxp” 
“Fp hpa py le ñeee op el leoa, llexexp” 

Ambos podrían ser válidos. Si nos fijamos en la X de la última palabra, debería de ser una consonante. Mirando la frecuencia de la RAE, vemos que las ocho consonantes más usadas son la S, R, N, D, L, C, T y M. Sustituyamos ahora X por estas a ver que nos aparece:

Si X=S “Fp hpa py la ñaea op al laoa, llasmsp”
“Fp hpa py le ñeee op el leoa, llesesp”
Si X=R “Fp hpa py la ñaea op al laoa, llarmrp”
“Fp hpa py le ñeee op el leoa, llererp”
Si X=N “Fp hpa py la ñaea op al laoa, llanmnp”
“Fp hpa py le ñeee op el leoa, llenenp”
…

...
...
Si X=M “Fp hpa py la ñaea op al laoa, llammmp”
“Fp hpa py le ñeee op el leoa, llememp”


Con ayuda de un diccionario, podemos buscar palabras tipo “llas-s-”, “lles-s-”, “llar-r-”, etc. Todas las combinaciones que nos han salido. Como vemos, se podría descartar X=S, X=R, X=D, evidentemente X=L (ya descubierta anteriormente), X=C y X=T. No existen ese tipo de palabras en castellano. Nos quedamos con la N y la M como posibles candidatas. Descartando más palabras que no tendrían sentido, parece que lo más posible es que X=M, ya que el diccionario nos aporta datos que autodescartan al resto de posibilidades.
Parece que ya tenemos una cosa clara, que M puede ser A o E y W es L, mientras que X parece ser M. Analizando esto matemáticamente para buscar alguna correlación, vemos la distancia que existen entre correspondencias:

De M a A =  13 (desplazamiento)
De M a E =  19 (desplazamiento)
De W a L= 15 (desplazamiento)
De X a M= 15 (desplazamiento)


Parece que el número que predomina es el 15, que se repite dos veces. Vamos a crear un abecedario con ese desplazamiento, comenzando por W=L:
W=L, X=M (esta también coincidiría), Y=N, Z=Ñ,...



Seguimos chicos, ya falta menos. En nuestro mensaje cifrado existe una Y, si la sustituimos por N veamos las consecuencias:

“Fp hpa pn la ñaea op al laoa, llamamp”

Delante de la N que hemos sustituido existen una P, si la sustituimos por alguna de las vocales más frecuentes podemos obtener nuevas pistas. Como A, I, O quedan descartadas (no existe an, in y on en castellano), solo nos queda P=E o P=U, pero lo más frecuente es que sea E:

“Fe hea en la ñaea oe al laoa, llamame”

Empieza a cobrar sentido, tenemos algo así como “#e #e# en la #a#a #e al la##, llamame”. ¿Qué letra podría preceder a la “e” el inicio? Podría ser la “L” (Le), la “M” (Me), la “S” (Se), la “D” (De)  o la “T” (Te). La L y la M ya están pilladas, así que la T sería lo más evidente, además coincide con el patrón de desplazamiento de 15 posiciones en el alfabeto.

“Te hea en la ñaea oe al laoa, llamame”

La siguiente palabra comienza por H cifrada, que si también sigue el patrón de 15 posiciones de desplazamiento, debería corresponder a la V:

“Te vea en la ñaea oe al laoa, llamame”

Las A cifradas ya no tienen sentido, puesto que hemos descubierto que la M correspondía a la A. Así que aplicando la regla del 15, tendríamos que A puede ser O (recuerda no sustituir las A ya decodificadas anteriormente):

“Te veo en la caea oe al laoa, llamame”

El mensaje se vuelve legible ahora, intuitivo para una persona. Siguiendo con la regla del 15, la E puede corresponderse a una S, la O a una S y la Ñ a D:

“Te veo en la casa de al lado, llamame.”

¡¡¡Ya hemos descubierto el mensaje cifrado!!! Compruebalo con la tabla de la imagen posterior...

Ahora te propongo un reto:

¿Eres capaz de descifrar esto? (deja un comentario si sabes la solución):


Qe issioixe kw qe qiilk


Te doy pistas: está en castellano... y a lo largo del artículo hay dos pistas más.

jueves, 9 de junio de 2016

Encripta y firma tu correo (II): El servidor de claves

Buenas a todos!! Hoy vengo a hablar un poco más acerca de la seguridad y el cifrado en nuestros correos electrónicos.

Ya hablamos anteriormente de los fundamentos y el proceso básico a realizar a la hora de instalar nuestro cliente Thunderbird y demás elementos necesarios para comenzar a securizar nuestras comunicaciones por correo electrónico, pasando por alguna explicación acerca del cifrado de clave pública o criptografía asimétrica.

Antes de nada, nombrar el libro El Pequeño Libro Rojo del Activista en la Red de Marta Peirano, que estoy leyendo de nuevo y no puedo dejar de recomendar, tratando de forma fácil y directa cómo cifrar nuestras comunicaciones y protegernos ante la posible lectura de las mismas.

Quiero ampliar un poco el tutorial de forma breve indicando cómo subir a un servidor público de claves o keyserver nuestra clave pública. El servidor público de claves es un repositorio que contiene una gran cantidad de claves públicas accesibles a todo aquel que las requiera, asociadas a la identidad con la que queremos comunicarnos.

La principal ventaja de esto es que los que nos quieran mandar un correo electrónico cifrado no necesitarán pedirnos nuestra clave pública directamente antes de comenzar la comunicación segura; de esta forma no queda ningún cuerpo de mensaje sin cifrar en nuestra conversación. El servidor de claves que elegiremos en esta ocasión es PGP Global Directory.

Página principal y de subida de PGP Global Directory

Subir nuestra clave pública al servidor de claves


Tendremos que seguir el link que nos permite transferir nuestra clave pública PGP. Podremos subir nuestra clave pública que hayamos exportado desde nuestro cliente Thunderbird. Para realizar esta exportación, desde Thunderbird podemos desplegar el menú Enigmail en la barra de herramientas, y acceder al "Administrador de clave"s. Haciendo clic derecho en nuestro par de claves, elegiremos la opción "Exportar claves a un fichero" y exportaremos solamente nuestra clave pública. El archivo generado será el que subamos al keyserver, pulsando por último el botón Transmitir.

Exportado nuestra clave pública desde Enigmail

Una vez enviada nuestra clave pública al servidor, nos enviarán un correo electrónico de confirmación para verificar nuestra identidad.

Correo de confirmación de PGP Global Directory

Tras confirmar nuestra identidad siguiendo el link, ya tenemos nuestra clave pública subida al servidor de claves.

Agregar, firmar y confiar en la clave pública del servidor de claves

Valga la redundancia, podemos agregar la clave pública del servidor de claves a nuestro cliente Thunderbird, firmarla y confiar en ella. 

El fundamento de esto es en realidad simple. Firmando la clave pública de un contacto con nuestra propia clave privada estamos poniendo de manifiesto que estamos completamente seguros de que esta clave es correcta y pertenece a dicho contacto. Esto establece un modelo característico del protocolo PGP, que hace que la validación de las claves públicas se delegue en los contactos en los que confías. Si confías en un contacto, darás como válidas todas las claves públicas que dicho contacto haya firmado a su vez. (Más información aquí)

Como ejemplo podemos poner nuestro mismo caso. Firmando la clave que hemos importado del servdor de claves, aseguramos que dicha clave es legítima. Asimismo, confiando en la identidad de dicho servidor, damos como válidas todas las claves que él ha firmado; en este caso, todas aquellas que contiene el servidor. 

Confiamos en el servidor, dado que, como hemos comprobado, tiene sus mecanismos para verificar que una clave se corresponde a una dirección de correo real (la verificación por correo que nosotros mismos hemos confirmado). 

Para agregar la clave pública del servidor a nuestro cliente Thunderbird, podemos descargarla desde la página principal haciendo clic en el link correspondiente y posteriormente importándola desde el "Administrador de claves" (Archivo -> Importar claves desde un fichero). 

Importar una clave desde fichero

Hecho esto, para firmar la clave que hemos importado debemos hacer clic derecho en dicha clave y seleccionando la opción "Firmar clave". Confirmaremos la firma e introduciremos la contraseña de acceso a nuestra clave privada para acabar.

Firmando la clave pública del servidor de claves

Por último, confiaremos en la clave del servidor. Desde el "Administrador de claves", haremos clic derecho en la clave del servidor y accederemos a sus propiedades. En el apartado de configuración básica, clicaremos en el botón para cambiar la opción "You rely on certifications" o "Confío en las certificaciones". Confiaremos totalmente en ella y aceptaremos el cambio.

Confiando en la clave del servidor



Con esto hemos terminado todo el proceso de asociación con un servidor de claves para poner nuestra clave pública a disposición de cualquiera que la necesite para establecer con nosotros una comunicación cifrada. En caso de profesiones en las que la privacidad de la información sea clave, como por ejemplo en el periodismo, el ofrecer al público la clave necesaria para contactar con nosotros de forma segura denota profesionalidad y disposición a proteger al interlocutor o confidente.

Un saludo y espero que os sirva para aprender!!
hartek

Google Analytics