jueves, 22 de octubre de 2015

Criptografía

Introducción

Es sabido que la información intercambiada diariamente en las redes de comunicación crece de forma exponencial y que gran parte de ella afecta a nuestra identidad, por lo que debe estar protegida para prevenir su uso fraudulento. Una correcta aplicación de la criptografía evita el acceso no deseado a información sensible de forma que ésta quede protegida. Cabe aclarar que para algunos expertos en seguridad de la información la criptografia no es en si seguridad informatica si no un complemento de la misma ya que solo es un medio para retrasar el entendimiendo de esa información que se encuentra cifrada logrando así mantener una de las características de la seguridad que es la integridad de la información.

La Criptología (del griego criptos = oculto y logos = ciencia, tratado) es el nombre genérico con el que se designan dos disciplinas opuestas pero a la vez complementarias: Criptrografía y Criptoanálisis. La Criptografía se encarga de diseñar procesos para ocultar la información, mientras que el Criptoanálisis se encarga de diseñar procesos para romper el esquema de cifrado para decodificar el mensaje oculto. Por lo tanto se puede decir que la Criptografía  es claramente la parte constructiva de este proceso, mientras que el Criptoanálisis representa la parte destructiva. Ambas disciplinas siempre se han desarrollado de forma paralela, puesto que cualquier procedimiento de cifrado normalmente lleva emprarejado su criptoanálisis o, al menos, un intento de criptoanálisis.

Historia

La Criptografía como medio de proteger la información escrita es un arte tan antiguo como la propia escritura. Durante siglos permaneció estrechamente vinculada a entornos militares y diplomáticos, puesto que eran los únicos que tenían auténtica necesidad de ella.

Una de las primeras formas utilizadas para ocultar la informacón fue una técnica que consistía en tealizar orificios sobre las letras del mensaje secreto para pasar sobre ellos un típo de tejido que servía para ocultar dicho mensaje.

Alrededor del año 1500 a.C los comerciantes asirios utilizaban tablillas de arcilla en donde tallaban escritos y algunas imagenes que establecian la forma de llevar a cabo sus transacciones comerciales, muchas veces dichas tablillas se colocaban en el interior de un contenedor de arcilla el cual era sellado.

Durante el siglo V a.C los griegos crearon un instrumento para cifrar mensajes llamado Scítala de los Lacedemonios y consistia en un cilindro en el cual se enrrollava una cinta de papiro o tela para posteriormente escribir el mensaje, cabe resaltar que leer dicho papiro sin el cilindro hacia confuso la interpretación de dicho papiro.


Escitalo de los Lacedemonios :: Figura 1.2.1
Scítala de los Lacedemonios

Otro hecho destacable en la historia de la criptografía sería hasta el siglo I con el cifrado César, este nombre debido a que era usado por el militar y político romano Julio César. Este método consistía en sustituir cada carácter del mensaje original por otro situado tres posiciones después de él en un determinado alfabeto

Roger Bacon (1214-1294) un destacado filósofo y naturalista inglés en algunas de sus obras expone los conocimientos sobre Criptografía que se tenían hasta la época así como algunas observaciones.

Se tienen conocimientos de que para el año 1300 los árabes ya habian desarrollado alrededor de siete procedimientos de cifrado:
  1. Reemplazar unas letras por otras.
  2. Escribir palabras al revés.
  3. Invertir letrs alternadas en el texto del mensaje original.
  4. Dar a letras un valor numérico y escribir dichos valores con símbolos.
  5. Reemplazar cada letra con otras dos de forma que la suma de sus valores numéricos fuera igual al valor númerico de la letra reemplazada.
  6. Sustituir cada letra con el nombre de una pesona o un objeto.
  7. Sustituir las letras por signos lunares, pájaros, flores u otros signos inventados.

Entre 1375 y 1383 Cicco Simonetta, consejero y secretario de los duques Sforza en Milán, desarrolla su obra llamada Liber Zifrorum, la cual es considerada como el tratado de descifrado más antiguo que se conoce. En dicha obra estudia y analiza diversos sistemas criptográficos.

Otro metodo de encriptación destacable fue el inventado en 1595 por el francés Blaise Vigenère quien desarrolló un método de cifrado que consistía en asignar un número a cada letra del alfabeto y sumar los números correspondientes a una clave con los del mensaje para obtener el criptograma.

En 1923 Arthur Sherbius, un ingeniero alemán, dio a conocer una máquina llamada Enigma, se trataba de una máquina que en su exterior parecía una máquina de escribir común  pero en su interior estaba compuesta por un mecanismo que trasformaba la letra tecleada en otra, estaba compuesta por un conjunto de ruedas cuyas caras tenían contactos eléctricos entre sí.

Máquina Enigma

Vista interior de la Máquina Enigma


Algoritmos Asimétricos

Los métodos de cifrado semétrico, que incluyen los utilizados en la Criptografía clásica, son los que definen la actual Criptografía simétria o Criptografía de clave secreta; mientras que los métodos simétricos,de más reciente aparición, son los que han dado lugar a la Criptografía Asimétrica o Criptografía de clave pública. Ésta fue introducida por Whitfield Diffie y Martin Hellman en 1976, de los algoritmos asimétricos podemos destacar las siguientes características:

  • Se utiliza una clabe para cifrar y otra para decifrar. El emisor emplea la clave pública del receptor  para cifrar el mensaje, éste último lo decifra con su clave privada.
  • Se basan en operaciones matemáticas complejas.
  • Se ejecutan de 100 a 1000 veces más lento que los algoritmos semétricos.


Principales Algoritmos Asimétricos

Algoritmo Diffie-Helman

Se trata básicamente de un protocolo que basa su seguridad en el problema del logaritmo discreto y que permite a dos usuarios intercambiar una clave secreta a través de un medio inseguro, dicho protocolo también es conocido como "el cambio de clave de Diffie-Hellman".
Descripción del algoritmo:
  1. Los usuarios A y B seleccionan públicamente un grupo G de orden n que sea un número primo p y un elemento alfa.
  2. Agenera un número aleatorio a, calcula alfa en G y envía el resultado a B.
  3. B genera un número aleatorio b, calcula alfa en G y envía el resultado a A.
  4. A recibe alfa y calcula alfa en G.
  5. B recibe alfa y calcula alfa en G.
De este modo A y B poseen un elemento común secreto: alfa.
Como puede apreciarse en la descripción anterior, el algoritmo por sí sólo no utiliza autenticación, por lo que su implementación es comúnmente acompañada de la utilización de firmas digitales ya que de no hacerlo se podría tener un ataque de hombre en medio.


Algoritmo RSA (Rivest, Shamir, Adleman)

Creado en 1977 por Ronald Rivest, Adi Shamir y Len Adleman y publicado en 1978.
Cada usuario debe realizar lo siguiente para generar su par de claves (pública y privada):
  1. Elegir dos números primos grandes, p y q, y calcular el número n mediante: n. El grupo a utilizar por el usuario es Znde orden fi.
  2. Seleccionar un entero positivo e, e, de modo que sea primo con el orden del grupo, esto es: mcd.
  3. Calcular d que es el inverso de e en Z, de manera que: ed, con d.
  4. Por último debe publicar la pareja (n,e) que es su clave pública, su clave privada d y los valores pqfi deben permanecer en secreto.
Para enviar un mensaje, antes que nada se debe determinar su longitud j dado que debe de ser un elemento del grupo en el que se esté trabajando, de modo que según el sistema de numeración en el que esté codificado cumpla:
bj
Donde b es la base del sistema de numeración y n el grupo utilizado por el receptor. Si la longitud del mensaje que se desea enviar es más grande, éste debe ser dividido en bloques de tamaño j y cifrarlos por separado.
El proceso de cifrado consiste en transformar el mensaje M de acuerdo con:
C
Para ello se utiliza la clave pública del receptor.
Para descifrar el criptograma C se utiliza la clave privada d según la expresión:
M


Funciones HASH

Una función hash es una función matemática que reduce un mensaje original a una secuencia de bits de tamaño fijo que lo identifica; dicha secuencia es llamada valor hash.
Una función hash unidireccional es una función hash de modo que es prácticamente imposible encontrar dos mensajes originales con el mismo valor hash. Este tipo de función también es llamada función resumen y el valor hash es comúnmente llamado huella digital.
Dentro de las aplicaciones principales de los algoritmos hash se encuentra la creación de códigos de verificación:
  • Creación del código MIC (Message Integrity Code): permite detectar si el contenido de un mensaje ha sido modificado. Por ejemplo, suponiendo que las entidades A y B han acordado una clave previamente:
    1. A concatena al mensaje la clave secreta y calcula el valor de dispersión de dicha concatenación.
    2. A envía a B el valor de dispersión y el mensaje.
    3. Al recibir el paquete, B concatena la clave secreta al mensaje que recibió y calcula el valor de dispersión de la concatenación.
    4. B compara el valor de dispersión que obtuvo con el que le envió A, si éstos coinciden, B puede tener la confianza de que el mensaje no ha sido modificado.
  • Creación del código MAC (Message Authentication Code), el cual permite probar la integridad del contenido y la autenticación del origen de un mensaje, ya que asegura que el mensaje fue creado únicamente por alguien que conoce la clave.
 

Algoritmo SHA-1 (Secure Hash Algorithm) 

Algoritmo desarrollado por el NIST y publicado como estándar federal para el procesamiento de la información (FIBS PUB 180); en 1995 se publicó una versión revisada como FIBS PUB 180-1 conocida como SHA-1.
El algoritmo toma como entrada mensajes de longitud máxima de 264 bits que son procesados en bloques de 512 bits; el resultado que produce es de 160 bits.

Imagen general del algoritmo
El procesamiento consta de cinco pasos los cuales se explican a continuación:
  1. Se incorporan bits de relleno al mensaje de entrada de tal modo que cumpla: longitud. El relleno consiste en un uno seguido de los ceros que sean necesarios. Aunque el mensaje ya tenga la longitud deseada, se debe efectuar el relleno, por lo que el número de bits de dicho relleno está en el rango de 1 a 512 bits.
  2. A la salida del paso 1, se le añade un bloque de 64 bits que represente la longitud del mensaje original antes de ser rellenado.
  3. Se inicializa la memoria temporal MD, la cual consta de 160 bits y su finalidad es almacenar los resultados intermedios y finales de la función de dispersión. La MD consta de 5 registros (A,B,C,D,E) de 32 bits cada uno, los valores con los que se inicializan son los siguientes (valores hexadecimales):A= 67452301
    B= EFCDAB89
    C= 98BADCFE
    D= 10325476
    E= C3D2E1F0
  4. Se procesa el mensaje por bloques de 512 bits, cada uno pasa por un módulo que consta de 4 rondas de procesamiento de 20 pasos cada una. Las rondas tienen una estructura similar, con la excepción de que cada una ocupa una función lógica primitiva diferente (f1, f2, f3 y f4). 
Paso 4 de funcionamiento de SHA

La entrada a cada ronda consta del bloque de 512 bits que se esté procesando (Yq) y los 160 bits de la memoria MD, nótese que cada bloque de 512 bits actualizará el valor de la memoria temporal. Cada ronda también hace uso de la constante aditiva Kt, donde t indica uno de los 80 pasos a lo largo de las cuatro rondas. Los valores para dicha constante se muestran en la tabla siguiente:

Valores de la constante aditiva Kt en SHA-1
5. Una vez que se procesan los L bloques de 512 bits, el resumen del mensaje son los 160 bits de salida del último bloque.


Algoritmo SHA-2

La serie de funciones SHA-2 puede considerarse como la sucesora de la función SHA-1. Esta familia de funciones fue propuesta por el NIST al conocerce un ataque de Shamir por el que se podían encontrar colisiones para la SHA-1 con 263 operaciones. 

La familia de funciones SHA-2 contiene 4 subalgoritmos: SHA-224, SHA-256, SHA-384 y SHA-512. Cada uno de ellos proporciona resúmenes de mensajes de 224, 256, 384 y 512 bits respectivamente. El hecho de incrementar las longitudes de los resumenes hace que la seguridad de cada una de ellas sea, tambien mayor.

Las principarles diferencias entre los subalgoritmos son las siguientes:

  1. SHA-256 y SHA-512 se calculan con palabras de 32 y 64 bits, respectivamente y ambas usan diferentes constantes y número de rondas pero su estructura es, básicamente, la misma.
  2. SHA-224 y SHA-384 son versiones truncadas de las funciones SHA-256 y SHA-512 y emplean vectores iniciales diferentes a los usados por las funciones que las proceden.
  3. SHA-224 se definió, principalmente para que la longitud de su resumen coincidiera con la longitud de dos claves de TDEA.
En la actualidad la función SHA-2 se utiliza con menor frecuencia que la SHA-1, a pesar de que proporciona mayor seguridad, debido fundamentalmente, a la falta de comparibilidad con la mayoría  de los protocolos existentes. No obstante, hoy en día se recomienda migrar de SHA-1 a la SHA-2 por razones de seguridad.

Algoritmo MD5 (Message Digest Algorithm) 

El algoritmo MD5 fue desarrollado por Ron Rivest en 1992 en el MIT con la finalidad de robustecer el MD4 y a la fecha se trata del algoritmo hash más seguro y de mayor uso en el mundo (ampliamente documentado en el RFC 1321), entre las aplicaciones más recurrentes están la autenticación en el protocolo SSL y la firma digital en PGP.

El mensaje que se desea resumir, M, se divide en n bloques de 512 bits. En el caso de que la longitud de M no sea un múltiplo exacto de 512, éste se extiende de modo que su n-ésimo bloque tenga esta longitud.

Se consideran cuatro vectores (conocidos públicamente), A, B, C y D, de 32 bits cada uno, de modo que, al ser concatenados, proporcionan un vector de inicialización I1 = A||B||C||D de 128 bits.

Se separa el primer bloque de 512 bits del mensaje, M1, y se llevan a cabo diferentes operaciones lógicas de este bloque con el vector de inicialización anterior, I1

La salidad del paso anterior tiene 128 bits, que se considera como el vector de inicialización de la etapa siguiente, I2.

Se opera el segundo bloque de 512 bits del mensaje, M2, con el vector I2, y se obtiene como salida otro vector de 128 bits: I3.

El proceso anterior se repite hasta completar todos los bloques en los que se ha dividido el mensaje.

La salida del algoritmo MD5 es el resumen de M, que corresponde a los últimos 128 bits obtenidos como resultado de las operaciones del último bloque, Mn, con el último vector In de las operaciones anteriores, es decir, el valor de In+1.


 Aplicaciones de estas funciones

  • Firmas Digitales: Es quizas para lo que mas se utilizan todas estas funciones criptográficas. En la mayor parte de estos esquemas, en lugar de firmar digitalmente un mensaje, lo que se hace es firmar un resumen del mismo, lo cual hace que se gane eficiencia en los protocolos correspondientes.
  • Integridad de los Datos: Una forma fácil y rápida para comprobar y detectar la integridad de datos y ficheros almacenados en un PC consiste en calcular los resúmenes de los ficheros que interesen y guardar dicho valor fuera del PC. En el momento en que se desee comprobar que tales ficheros han sido modificados o alterados, basta con volver a calcular su resumen y contrastar si el mismo coincide con el resumen calculado anteriormente.
  • Repositorios de Datos: Es conocida la existencia de repositorios de datos en los que es posible almacenar grandes ficheros de modo que posteriormente puedan ser descargados sin la necesidad de enviarlos por correo electrónico; lo que a veces resulta imposible proque pueden llegar a saturar la capacidad de los buzones de correo. Normalmanete este tipo de descargas se hace utilizando el algoritmo MD5.
  • Detección de Software Dañino: La mayor parte de los programas antivirus y detectories de software dañino utilizan este tipo de funciones conel fin de realizar una búsqueda de dicho software en el disco duro. El funcionamiento de los programas antivirus suele ser el siguiente. Cuando se conoce la existencia de un virus, las empresas desarrolladoras de antivirus aíslan el virus y determinan el resumen del programa ejecutable que contiene dicho virus.

Conclusión

La criptografía surge de la necesidad de cuidar la privacidad de la información ya que por lo mencionado anteriormente se puede decir que la información es poder y dinero sabiendola aprovechar, por lo tanto se debe protegida a toda costa con este tipo de metodos que aseguran que solo las personas que deban conocer dicho mensaje tengan acceso a él.


Material de Apoyo


Dejo los siguientes videos como complemento de este post:

Documental de Criptografía:



Criptografia Simétrica y Asimétrica:



Algoritmos de Cifrado:



 Referencias

Luis Hernández Encinas. (2013). Criptografía, protección de datos y aplicaciones. Madrid: Alfaomega Ra-Ma.

 Xifré Solana Patricia. (2009). Antecedentes y perspectivas de estudio en historia de la Criptografía . 21/10/2015, de Universidad Carlos III de Madrid Sitio web: http://e-archivo.uc3m.es/bitstream/handle/10016/6173/PFC_Patricia_Xifre_Solana.pdf?sequence=1

Geronimo Orozco Martinez. (¿?). Introducción a la Criptografia. 21/10/2015, de patux.net Sitio web: http://patux.net/downloads/crypto/crypto.pdf

Santiago Fernández. (2004). Criptografía Clásica. 21/10/2015, de euskadi.eus Sitio web: http://www.hezkuntza.ejgv.euskadi.eus/r43-573/es/contenidos/informacion/dia6_sigma/es_sigma/adjuntos/sigma_24/9_Criptografia_clasica.pdf



No hay comentarios:

Publicar un comentario