Introduccion al cifrado de datos Introducción ............................................................................................................. 4 1. Conceptos generales ........................................................................................ 5 1.1 Definiciones................................................................................................ 5 1.2 Evolución.................................................................................................... 7 1.3 Proceso de cifrados datos y su transmisión ............................................. 10 2. Mecanismos de cifrado Convencional/Tradicional .......................................... 12 2.1 Cifrado del César ..................................................................................... 12 2.2 Cifrado Monoalfabético ............................................................................ 13 2.3 Cifrado Masón .......................................................................................... 15 2.4 Cifrado de Vigenère ................................................................................. 16 2.5 Tres rotores .............................................................................................. 21 2.6 La scitara espartana ................................................................................. 23 2.7 Permutación de texto ............................................................................... 24 3. Esteganografía o Estenografía ....................................................................... 27 3.1 Introducción a la Esteganografía .............................................................. 27 3.2 Definición de Esteganografía ................................................................... 28 3.3 Funcionamiento ........................................................................................ 29 3.3.1 Estenografía en Texto ....................................................................... 30 3.3.2 Esteganografía con Imágenes ........................................................... 30 3.3.3 Esteganografía en sonido .................................................................. 33 4. Mecanismos de cifrado simétrico .................................................................... 34 4.1 Generalidades .......................................................................................... 34 4.2 Algoritmos ................................................................................................ 37 4.2.1 DES ................................................................................................... 37 4.2.2 Triple DES ......................................................................................... 45 4.2.3 IDEA .................................................................................................. 47 4.2.4 AES ................................................................................................... 48 4.3 Diffie-Hellman, para el intercambio seguro de claves .............................. 60 5. Mecanismos de cifrado asimétrica .................................................................. 61 5.1 Cifrado de datos ....................................................................................... 63 5.2 Autenticación de quien envía los datos .................................................... 64 5.3 Cifrado de datos y Autenticación de quien envía ..................................... 65 5.4 Algoritmo RSA .......................................................................................... 66 5.5 Firmas digitales ........................................................................................ 67 5.5.1 Generalidades ................................................................................... 68 5.5.2 Funciones de hash ............................................................................ 70 5.5.3 Creación y funcionamiento de las firmas digitales ............................. 72 5.5.4 Estándar de firmas digitales DSS ...................................................... 77 5.5.5 PGP y OpenPGP ............................................................................... 78 5.5.6 Certificados digitales y Entidades Certificadoras ............................... 80 Introducción Desde la antigüedad y hasta nuestros días, el hombre ha buscado mecanismo para ocultar información de diferente índole y en especial, en donde se ha visto más utilizada es en gobiernos y guerras en donde se requiere transmitir información sensible o crítica por canales inseguros y ya más hacia la actualidad en procesos financieros, comercio electrónico y la vida diaria. Esta obra, es el resultado de años de trabajo con estudiantes de pregrado en el área de la seguridad de la información en donde se ha ido evolucionando en la manera como se presenta el tema y cómo hacer que, siendo un tema complejo, pueda ser visto y entendido de una manera sencilla y clara abordando la criptografía desde sus conceptos fundamentales y evolución hasta sus tipos, formas de operación y usos. Para esto, el tema está dividido en 5 capítulos, en el primero se desarrollan los conceptos generales sobre el tema, en el dos se ven los mecanismos criptográficos tradicionales en donde se citan diferentes algoritmos, se presentan ejemplos y se enuncian ejercicios de revisión de los temas. En el tercer capítulo se desarrolla el tema de la estenografía como mecanismo criptográfico, para en el cuarto y el quinto trabajar en las criptografías simétrica, asimétrica y hash. Se espera que esta obra sea de utilidad para todos aquellos que desean introducirse en el estudio de la seguridad de la información y en particular de la criptografía o escritura oculta, ya que éste es uno de los pilares sobre los que está basada una gran cantidad de mecanismos y soluciones tecnológicas enfocadas a la seguridad de la información. 1. Conceptos generales 1.1 Definiciones Criptología (del griego criptos = oculto y logos = tratado): nombre genérico con el que se designan dos disciplinas opuestas y a la vez complementarias: criptografía y criptoanálisis. Esto significa que la criptografía permite convertir un texto dado en texto plano (legible) en un texto cifrado o encriptado, el cual no es fácilmente entendible sin conocer la “pistas” de cifrado utilizadas. Según la RAE, se trata del arte de escribir con clave secreta o de un modo enigmático. A este respecto, se encuentran básicamente dos mecanismos para hacerlo: Cifrado: transformación de los datos a nivel de bits o caracteres. Ejemplo: Transposición (Colocar los símbolos del mensaje original en un orden distinto). Se refiere a hacer modificaciones de los datos haciendo modificaciones a los bits o a los caracteres que los representan, por ejemplo: la palabra en texto claro M a n z a n a se convertirá en el texto cifrado: a z n n M a a (En este caso se hizo un simple movimiento de los mismos caracteres que conforman el texto). Codificación: Reemplazo de una palabra por otra o por símbolos. También conocido como Sustitución. Busca establecer una correspondencia entre las letras del alfabeto en el que está escrito el mensaje original y los elementos de otro conjunto (del mismo alfabeto o de otro). Ej. Lenguaje Navajo. La codificación consiste en el cambio de simbología utilizada: o Una posibilidad consiste en reemplazar unas letras por otras o por símbolos, ejemplo: donde haya una “a” colocar una “h” o en donde haya una “a” colocar “ ? ”. o También puede referirse a cambios de palabras completas, por ejemplo entre idiomas, ejemplo: casa (en español) a maison (en francés) o a lenguaje navajo como se utilizó durante la segunda guerra para transmitir mensajes codificados entre tropas del bando aliado sin que el ejército enemigo entendiera. “ . . . Aunque los códigos norteamericanos fueron quebrados también en numerosas ocasiones, hubo uno, utilizado por la Marina, que jamás fue descifrado. Los americanos emplearon un sistema de criptofonía muy original, el lenguaje navajo. Por su sintaxis y cualidades tonales, este lenguaje no escrito resulta ininteligible si no se ha recibido un intenso aprendizaje. Los Marines utilizaban indios navajos para transmitir los mensajes por teléfono. Se les daba el mensaje a transmitir en inglés americano y ellos lo transmitían en su lengua, el navajo. Otro indio navajo al otro lado de la línea escuchaba el mensaje y lo traducía de nuevo al inglés americano. Los navajos podían codificar, transmitir y decodificar tres líneas de mensaje en 20 segundos. Las máquinas de entonces tardaban 30 minutos. Las tropas irlandesas de una expedición de Naciones Unidas a África en 1960 tuvieron una idea similar, sólo que utilizaron el irlandés, una lengua mucho más fácil y difundida que el navajo. . . . ” (Vrátný, 2003) Ahora, como se mencionó antes, la criptología está compuesta por dos disciplinas, las cuales se definen a continuación: Criptografía: Se ocupa del diseño de procedimientos para cifrar, es decir, para enmascarar una determinada información de carácter confidencial. Escritura secreta. Criptoanálisis: Es el proceso complementario a la criptografía, es decir, se ocupa de romper esos procedimientos de cifrado para así recuperar la información original. El criptoanálisis permite volver de un texto cifrado al texto plano que lo generó. En este caso es importante aclarar que la palabra “romper” usada en la definición no tiene que ver con violaciones de seguridad, sino con el simple hecho de volver a un texto legible un texto cifrado. Normalmente, se hacen los dos procesos, criptografía para proteger la información y no hacerla legible para cualquier persona pero también criptoanálisis para hacer legible una información cifrada para quien debe verla, de no ser así, una información que ha sido cifrada no sería posible volverla a ver y esto no es lo que típicamente se quiere. Más adelante se verán situaciones en donde esto si es deseable. 1.2 Evolución Dentro del desarrollo o evolución de la criptografía, ha habido diferentes vertientes o propuestas de desarrollo. La primera de ellas, algoritmo secreto, “no existencia de clave” consistía en mecanismos de cifrado en donde lo único que afectaba al texto era el mismo conjunto de reglas para hacerlo ilegible, por ejemplo invertir letras, cambiar unas letras por otras, etc. En donde lo importante es mantener en secreto el algoritmo, mientras éste no sea conocido, no será fácil descifrar el mensaje o como algunos expertos dicen “no será posible o al menos será impracticable el descifrarlo”. En la segunda, Algoritmo secreto, clave secreta se tienen dos variables para el proceso de cifrado/descifrado, el algoritmo y la clave, ambos secretos, es decir que no se debe saber cómo funciona el algoritmo ni cuál es la clave secreta. Este tipo de algoritmos crean un nivel adicional de complejidad, ya que si por alguna razón se descubre el algoritmo, todavía es necesario saber la clave para encontrar el texto plano y por lo menos demorará más en romperlo un atacante. En la tercera, Algoritmo conocido, clave secreta ya no importa que se sepa el proceso que se realiza para el cifrado de los datos, es tan complejo este proceso y la clave altera de tal manera el mensaje que con sólo mantener en secreto la clave. Ya no es posible o es al menos impracticable el realizar un proceso de criptoanálisis efectivo. Se habla de que es impracticable porque sería muy demorado realizar el proceso de descifrado y podría ya no servir para nada el saberlo. Por ejemplo, si el mensaje decía “nos vemos mañana en el café” y un atacante lo obtiene cifrado y por medio de técnicas de criptoanálisis lo trata de descifrar y demora 7 días o 7 años o 7 décadas para descifrarlo, posiblemente ya no servirá de nada haberlo logrado entenderlo. Hasta aquí, todos los mecanismos implicaban el mantener en secreto el algoritmo, el algoritmo y la llave o al menos la llave, lo cual era complejo y de alguna manera esto se convierte en el talón de Aquiles de los mecanismos. La cuarta son los Algoritmos conocidos, parte de la clave conocida la mayoría de los elementos del proceso son conocidos y el mantener sólo una parte de la clave en secreto es relativamente más sencillo pues ya no se comparte una clave entre varias partes, que era lo que más comprometía el algoritmo o la clave en los mecanismos anteriores, en este caso solo el “dueño” deberá tener esta clave y no se la tendrá que entregar a nadie. Parece raro pero así es, más adelante desarrollaremos este tema y entenderemos su funcionamiento. Pero así como tiene características que lo hacen muy interesante, que haría pensar que es lo que se debe usar ante una necesidad de ocultar información, también tiene otras que lo hacen no tan ideal y por lo cual no se recomienda usar siempre y que se convierte en complemento de otras técnicas. Finalmente, otra opción son los Algoritmos en una sola vía, esto algoritmos implementan técnicas que permiten hacer el proceso de cifrado de los datos pero que no permiten realizar las actividades de criptoanálisis, es decir, permiten cifrar un texto pero no descifrarlo. A primera vista podrían parecer poco prácticos, pues casi siempre que se encriptan datos se desea en algún momento posterior, pero no siempre es así, hay implementaciones para las que no poder devolver el proceso de cifrado es lo ideal. Todas estas propuestas se ven plasmadas a través de diferentes algoritmos e implementaciones a lo largo de la historia de la criptografía y van a ser objeto de estudio más adelante cuando se ven tipos de criptografía, entre las cuales se hablará de la criptografía tradicional, esteganografía, encripción simétrica, encripción asimétrico y encripción en una sola vía. 1.3 Proceso de cifrados datos y su transmisión En el caso del proceso de cifrado de datos, desde el punto de vista de la estructura de redes de computadores, este puede realizarse a cualquiera de las capas del modelo OSI: A nivel de aplicación, en el caso que el proceso de cifrado se realice como parte de la lógica del software que está procesando los datos. A nivel de presentación, en el caso de que se trate de un proceso que se maneja independiente de la aplicación y que puede ser usada por varias aplicaciones (recordando que este es uno de los objetivos que el modelo OSI define para esa capa). A nivel de transporte y red tenemos el cifrado utilizado en las tecnologías SSL e IPSEC utilizadas en las redes con arquitectura TCP/IP (como Internet). A nivel de enlace y físico, si se quiere que el cifrado se haga a muy bajo nivel, en la tarjeta de red o en el momento previo a ser enviada a través del medio alámbrico o inalámbrico Ahora, el proceso de cifrado se puede realizar para guardar datos en una máquina o para transmitirlos a través de una red local o mundial y la problemática en cada caso es diferente pues si la información va a mantenerse en una máquina específica la complejidad de seguridad está en el mecanismo de cifrado utilizado y de la seguridad del equipo como tal, pero cuando se trabaja con información que viaja sobre una red, se agrega un nivel de complejidad adicional, ya que ahora no sólo es un problema de los algoritmos de cifrado y los mecanismos de seguridad del equipo en donde ella se almacena sino de la interconexión de ese equipo a una red pública y de su transmisión sobre enlaces compartidos. En particular, cuando se habla de información cifrada que será enviada a través de una red de área amplia - WAN como por ejemplo Internet, ella será expuesta a una mayor cantidad de personas y atacantes comparado con mantenerla en un equipo o dentro de una LAN y en ese caso se pueden contar con dos alternativas para su transmisión, las cuales también pueden ser usadas en redes LAN, pero su utilidad es más visible en las redes pública: Sólo los datos cifrados: En este caso, se envían únicamente la información cifrada sobre la WAN, esto podría permitir que un atacante la tome (realice una captura del tráfico) y tenga exactamente los datos cifrados y se dedique a realizar criptoanálisis para descubrir los datos. Datos cifrados más información de relleno: Esta posibilidad también envía los datos cifrado pero la diferencia consiste en que siempre se están mandando datos por la red, cuando no hay datos a transmitir, envía información de relleno o “basura” de tal manera que un atacante no sabrá cuales de los datos que está capturando sobre la red hacen referencia a datos reales cifrados o a información de relleno y así se hará más difícil el proceso de criptoanálisis. Esta técnica se conoce como relleno de tráfico o Traffic Pading. En la figura 1.1 se esquematiza este mecanismo. Figura 1.1: Esquema Traffig Pading En ambos temas, proceso y transmisión, es necesario tener claro lo que se requiere y así determinar cuál será la mejor solución para cada tipo de empresa, aplicación e información para determinar cuál será el mejor esquema de cifrado de datos a usar y sus respectivas recomendaciones. 2. Mecanismos de cifrado Convencional/Tradicional A través de la evolución de los procesos de cifrado de datos, se han visto tres grandes etapas en su desarrollo, la primera se trata de los precursores de la criptografía actual. En esta categoría se encuentran los mecanismos clásicos de criptografía, los que se hacían en el pasado, “a mano”. Entre ellos se encuentran: 2.1 Cifrado del César “. . . si había algún asunto que deseaba mantener en secreto, utilizaba un código de forma que resultara imposible captar el sentido de cuanto escribía. Para quienes deseen sabe más, diré que sustituía la primera letra del alfabeto, α, por la cuarta letra, δ, y así sucesivamente con todas las demás.”. La regla (algoritmo) era sustituir las letras del mensaje por la cuarta letras adelante del mismo alfabeto, o por la quinta o la décima, etc. Cada letra se reemplaza por otra letra del mismo alfabeto. Por ejemplo: dada la palabra DEBE, realizar el cifrado César realizando un corrimiento de 4 letras: Alfabeto original: a b c d e ......z Alfabeto modificado: Texto plano: Texto cifrado: d e f g h ......c DEBE GHEH Ahora le toca a usted, 1. ¿Cuál será el texto cifrado si el texto plano es SEGURIDAD y el corrimiento es de 4 letras? 2. ¿Cuál será el texto cifrado si el texto plano es SECRETO y el corrimiento es de 7 letras? 3. ¿Si se usó la técnica de cifrado César con corrimiento 5 sobre un texto y el resultado es TYIVXE? 2.2 Cifrado Monoalfabético Aquí lo que se realiza es una sustitución de letras por símbolos. Para esto, lo que se hace es ubicar todas las letras del alfabeto sobre una figura (similar a un triqui) y cuando se desea cifrar un mensaje, se cambia cada una de las letras del mensaje por un dibujo de la posición de la letra sobre la figura y el proceso de criptoanálisis realizará el proceso inverso. En la figura 2.1 se muestra cómo queda la figura al añadirle el alfabeto. Por ejemplo, para representar una letra, lo que se hace es dibujar el cuadrante en donde está la letra y colocar un “punto” indicando la posición de la letra dentro del cuadrante específico. En la figura 2.2 se presenta un ejemplo de un texto cifrado haciendo uso del cifrado Monoalfabético. Figura 2.1: Representación del alfabeto monoalfabético Figura 2.2: Texto cifrado con el algoritmo monoalfabetico En este caso, la primera letra del mensaje cifrado es la N, pues el cuadrante representado es el del centro (en la simbología) y la posición que se indica mediante el “punto” es la letra de la mitad dentro de este cuadrante. Ahora inténtelo usted, 1. ¿Cuál es el mensaje escondido mostrado en la figura 2.2? 2. ¿Cuál es el mensaje escondido mostrado en la figura 2.3? Figura 2.3: Texto cifrado con algoritmo monoalfabético 3. ¿Cuál será el texto cifrado resultante, si el texto plano es LAPIZ? 2.3 Cifrado Masón Este mecanismo de cifrado es similar al anterior, con la diferencia de que el número de cuadrantes que se manejan es mayor y que para diferenciar entre cuadrante similares se debe colocar un guión en algunos de ellos, haciendo un poco más complejo el descifrarlo. En este caso la simbología se encuentra en la figura 2.4. Figura 2.4: Representación del alfabeto Masón Por ejemplo, la letra A y la letra N se representan con el mismo cuadrante, la diferencia está en que si se trata de la N se coloca en el cuadrante un guión y si se trata de la A no se coloca nada. Y ahora le toca a usted, 1. ¿Cuál es el mensaje en texto plano que presenta en la figura 2.5? (Ayuda: la primera letra es una P y la última una D). Figura 2.5: Texto cifrado con algoritmo Masón 2. ¿Cuál es el mensaje en texto plano que se presenta en la figura 2.6? Figura 2.6: Texto cifrado con algoritmo Masón 3. ¿Cuál será el texto cifrado, si el texto plano es MADUREZ? 2.4 Cifrado de Vigenère Este mecanismo se basa en la construcción de una matriz a partir del mensaje a cifrar y la clave a utilizar y a través de dicha matriz, se tomarán las letras que producirán el mensaje/texto cifrado. A continuación se describen los pasos a seguir tanto para la generación de la matriz como para el proceso de cifrado como tal. 1. Definir una matriz así: Primera fila: Tomar las letras que componen el mensaje y colocarlas ordenadas (por su posición dentro del abecedario) sin repetir. Comenzar a partir de la segunda columna, es decir, la primera letra, de las que conforman el mensaje, se debe ubicar en la primera fila, segunda columna. Primera columna: Tomar las letras que componen la clave y colocarlos ordenadas (por su posición dentro del abecedario) sin repetir. Comenzar a partir de la segunda fila, es decir, la primera letra, de las que conforman el mensaje, se debe ubicar en la primera columna, segunda fila. Demás celdas: Llenar las posiciones libres de la matriz con las letras del alfabeto ordenadamente (en una variación del algoritmo, se pueden utilizar el alfabeto desordenado para aumentar la complejidad del proceso), comenzando con la fila dos, columna dos, de izquierda a derecha y así sucesivamente por cada fila. Una variación de este algoritmo propone hacer el llenado de la matriz con el alfabeto en desordenado, lo cual añade un grado de complejidad mayor al proceso y podría brindar un mayor grado de seguridad, pero también implica mayor complejidad en “el ponerse de acuerdo” entre las parte. Ejemplo: Si la clave es: abretesesamo y el mensaje es: Estamos descubiertos. Entonces las letras ordenadas que conforman el mensaje son: {a b c d e i m o r s t u} y las que conforman la clave son: {a b e m o r s t} y el tamaño de la matriz resultante sería de nueve (9) filas por trece (13) columnas. La matriz resultante sería la mostrada en la figura 2.7. Figura 2.7: Matriz del alfabeto usado en cifrado Viginerère 2. Tomar el mensaje original y alinear cada una de las letras de éste con una letra de la clave, dado que las claves de cifrado son, usualmente, más pequeñas que los mensajes a enviar, es posible que se deba repetir varias veces la clave para cubrir todas las letras del mensaje, por ejemplo, para el mensaje usado un el ejemplo anterior, se debe alinear la e del mensaje con la a de la clave y será necesario repetir parte de la clave para cubrir todas las letras del mensaje. El proceso completo se muestra en la figura 2.8. Figura 2.8: Organización del texto y la clave usando cifrado Viginer`ere 3. Para obtener el texto cifrado se realizan los siguientes pasos: Tomar la primera letra de la clave y buscarla dentro de la primera columna de la matriz. Para el ejemplo, ubicarse en la casilla de la letra a en la columna uno, fila dos. Tomar la primera letra del mensaje y buscarla dentro de la primera fila de la matriz. Para el ejemplo, ubicarse en la casilla de la letra e en la fila uno, columna seis. Buscar la intercepción entre las dos anteriores. Para el ejemplo, ubicarse en la fila dos, columna seis. La letra ubicada en la intercepción será la primera letra del mensaje cifrado. Para el ejemplo, será la letra E. Continuar con el mismo proceso para cada una de las letras del mensaje. Basado en esto y para el ejemplo que hemos ido desarrollando, el mensaje cifrado será el presentado en la figura 2.9. Figura 2.9: Texto cifrado usando el algoritmo Viginer`ere A continuación se presenta otro ejemplo completo. Se desea cifrar el mensaje: Cuando un hombre no sabe hacia dónde navega, ningún viento le es favorable1. Nota: para el ejemplo, omitiremos las tildes, espacios en blanco y signos de puntuación. La clave que se usará es liderazgo. La matriz y el texto cifrado se presentan en las figura 2.10 y 2.11 Figura 2.10: Matriz generada para el ejemplo usando el algoritmo Viginerère Figura 2.11: Texto cifrado para el ejemplo usando el algoritmo Viginerère En el otro extremo de la comunicación, es decir, en el destino, quien deberá hacer un proceso de criptoanálisis para recuperar el texto plano, se debe tener las letras que conforman el mensaje, la clave, información sobre cómo se llenó la matriz (alfabeto ordenado o desordenado, en caso de que haya sido desordenado, deberá enviarse la información necesaria para rellenar la matriz de manera correcta) y el texto cifrado para realizar el proceso de desencripción que consistirá 1 Séneca en generar la matriz, alinear las letras del texto cifrado con la clave, repitiendo las veces que sea necesario la clave, e ir buscando en la matriz: la fila (según las letras de la clave) y dentro de la matriz, la letra del mensaje cifrado, con esta información, la letra que encabeza la columna en la que está dicha letra, será la letra del mensaje original. Retomando los dos ejemplos planteados, en el primer ejemplo, la primera letra del texto cifrado es una E y la primera letra de la clave es una a, entonces se busca la fila en donde se encuentra la a y sobre esa misma fila, la columna en donde se encuentra la letra E, cuando se encuentra, se toma la letra ubicada en la fila uno de esa columna, para el ejemplo la letra e, que será la primera letra del mensaje original. Y para el segundo ejemplo, la primera letra del texto cifrado es una Q y la primera letra de la clave es una l, entonces se busca la fila en donde se encuentra la l y sobre esa misma fila, la columna en donde se encuentra la letra Q, cuando se encuentra, se toma la letra ubicada en la fila uno de esa columna, para el ejemplo la letra c. Le toca a usted, resuelva el siguiente ejercicio. Nota: utilice el alfabeto ordenado. 1. Se recibe un texto cifrado cuyas clave de cifrado es ATARDECER y letras del mensaje A C D E I L M N O P R S T V. ¿Cuál será el mensaje en texto plano? Texto cifrado: F S J O K C R R F E A H G F S O C M L V L F H D B T M A C A J C TU Z O D D A 2. Transforme el mensaje dado en texto plano a texto cifrado Mensaje: LOS COMPUTADORES SON INUTILES. SOLO PUEDEN DAR RESPUESTAS. PICASSO Clave: ATENCION 3. Transforme el mensaje dado en texto cifrado a texto plano: Mensaje cifrado: J I H W A R L Z R F E M A S A Q T Z T A M U X R TFRF Clave: ETICA Letras del mensaje: A B C D E H I M N O P Q R S Y 2.5 Tres rotores Este mecanismo consiste en utilizar varias rotaciones del alfabeto antes de realizar el proceso de cifrado. Es un mecanismo que se comenzó a desarrollar en las primeras décadas del siglo XX y uno de su mayor exponente es la máquina Enigma utilizada por las fuerzas militares alemanas desde los años 30s y hasta la segunda guerra mundial. Era un mecanismo eléctrico-mecánico (eléctrico porque pasaba corriente entre interconexiones dentro de los rotores y mecánico porque los rotores eran piezas mecánicas que iban cambiando de posición). Su mayor fortaleza consistía en que era posible combinar múltiples rotores y por lo tanto, la equivalencia entre el alfabeto normal, sobre el cual se ponía el mensaje original y el alfabeto del texto cifrado de salida podía variar de un mensaje a otro. En el mecanismo básico, cada rotor tenía entradas interconectadas con salidas en órdenes específicos, de tal manera que si por ejemplo la entrada 10 era presionada se enviaba corriente a través del cable de interconexión y esto permitía que dicha corriente llegará a la salida 3, la cual tocaba la entrada 3 del segundo rotor y saliera por la 13 y ésta a su vez tocaba la entrada 13 del tercer rotor y llegara finalmente a la salida 14. Tanto las entradas del primer rotor como las salidas del tercer rotor tenían una equivalencia en letras del alfabeto, de tal manera que era posible convertir una letra de un mensaje en otra letra que conformaría parte del mensaje cifrado. Un ejemplo de este mecanismo se ve en la figura 2.12. En ella, la letra M codificada es la O (en rojo) y la letra R es la A(en verde). Y usando esta misma figura, si se desea cifrar el mensaje: computador, el mensaje cifrado resultante será PQOEYWUTMA. Figura 2.12: Modelo algoritmo tres rotores En los modelos implementados en la vida real, cada rotor tenía dos alfabetos interconectados de una manera específica, de tal manera que si se digitaba la letra “A” (por ejemplo), esto llegaba al primer rotor, el cual tenía la “A” interconectada con la “L” y luego esto pasaría al segundo rotor y finalmente al tercero en donde se ejecutaría el mismo proceso. Esto hacia que el proceso de criptoanálisis fuera complicado para alguien que no conociera los rotores utilizados y la manera como estos tenían interconectados al interior sus alfabetos 2.6 La scitara espartana “. . . una vara de la que se preparaban dos ejemplares idénticos y alrededor de la cual se envolvía una tira de pergamino o de papiro. El mensaje se escribía a lo largo del bastón, se retiraba la cinta y se enviaba al destinatario, que tenía en su poder la segunda copia del bastón. Al colocar la cinta, aparecía el mensaje” 2 Este es un mecanismo muy antiguo, en el que la idea es tener dos “varas” iguales, una la tiene el origen y la otra el destino y lo que se hace es colocar una tira de papiro alrededor (enrollando) de la vara e ir escribiendo las letras del mensaje sobre el papiro de arriba hacia bajo y si queda parte de la tira en blanco se colocan letras aleatoriamente. Luego se desenrolla la tira de papiro y ese mensaje será el texto cifrado, el cual, es el que se envía al destino. En la figura 2.13 se presenta un ejemplo del mecanismo. Figura 2.13: Algoritmo Scitara espartana 2 Vida de los hombres ilustres de Grecia y Roma - Plutarco El trabajo en destino es enrollar nuevamente la tira en la varita “gemela” y encontrará el mensaje. 2.7 Permutación de texto En este caso, al igual que en el algoritmo Viginerère, se parte de un mensaje en texto claro, que se desea cifrar y una clave que será utilizada para producir el texto cifrado, y en este caso también se crea una matriz para transformar el mensaje original en mensaje cifrado, pero a diferencia del algoritmo Viginerère, la matriz sólo contendrá el mensaje original. El proceso de cifrado que se realiza es así: 1. Colocar en la primera fila de una matriz que tenga tantas columnas como letras de la clave, la clave (una letra por columna). 2. Numerar las columnas dependiendo de la posición que ocupan las letras de la clave dentro del alfabeto. Se considera la primera columna la que tenga la letra de la clave que aparezca primero en el alfabeto. Si la clave tiene letras repetidas, se numeran de izquierda a derecha. 3. Colocar el mensaje, una letra por celda, en la matriz comenzando por la fila 2, columna 1 de izquierda a derecha hasta completar el mensaje. Si al terminar de escribir el mensaje sobran espacios al final de la última fila se rellenar las celdas que faltan con letras aleatorias. Nota: Si el mensaje contiene espacios en blanco pueden mantenerse, cambiarse por otro símbolo o ignorarse. 4. El texto cifrado consistirá en colocar las letras de las columnas (a partir de la segunda fila) en el orden definido por la numeración dada a cada columna en el paso 2 de arriba hacia abajo. Para el caso del ejemplo, la columna numerada con el 1 en la segunda, entonces el mensaje cifrado comenzara por EAR, luego la columna numerada con el 2, es decir GDE y así sucesivamente. En la figura 2.14 se presenta la situación. Texto plano: SEGURIDADDEREDES Texto encriptado: EARGDDIESRDESDUD Figura 2.14: Permutación de Texto En el destino se requerirá la clave y el mensaje cifrado para realizar el proceso de criptoanálisis Ejemplo No.1: Clave: encriptado Texto plano: permutar-el-texto-a-partir-de-la-clave-secreta ¿Cuál es el texto cifrado? (Use de guía la figura 2.15). Figura 2.15: Permutación de Texto – Ej. 1 El texto cifrado será: R-DEBRTR-R-EA-CPLPLEUXILTE-AACE—SDTTRAAMETCEAO-VA Ejemplo No. 2: Clave: encriptado Texto cifrado: I I E R A P -- A V O O S R O D E E E T I S E -- S S X S M I M N T A X O I -- O -- A O D S O -- C S P P B ¿Cuál será el texto plano?. Utilice la figura 2.16 como apoyo. Figura 2.16: Permutación de Texto – Matriz guía La solución está en: 1. Contar el número de letras del texto cifrado y dividirlo en el número de letras de la clave para saber cuántas letras van en cada columna. 2. Colocar la clave en la primera fila y numerar las columnas siguiendo la misma regla que se aplicó para el proceso criptográfico 3. Colocar las letras del mensaje por columnas (según la numeración de columnas realizada) dejando en cada columna el número de letras determinado en el primer paso. En la figura 2.17 se presenta la solución: Figura 2.17: Permutación de Texto – Ej. 2 Texto plano: EXPOSICIONES-DE-SISTEMAS-OPERATIVOS- PROXIMO-SABADO 3. Esteganografía o Estenografía 3.1 Introducción a la Esteganografía “Se puede definir de forma rápida a la Esteganografía como un conjunto de técnicas destinadas a ocultar unos datos en otros, de tal manera que pase desapercibida su existencia”3. 3 (Fronteras Electronicas, 1998) Esta técnica puede utilizarse para disimular los datos, o combinarse con la criptografía, de tal manera que los datos que se oculten al ser descubiertos no se puedan leer. Hoy en día, los usuarios de Internet disponen gratuitamente de diversos programas de Esteganografía para diversos sistemas operativos. Generalmente, ocultan los datos en archivos de imágenes o de sonido, y se encuentran a disposición de los usuarios gran variedad de técnicas y métodos. 3.2 Definición de Esteganografía Su origen viene del griego ’steganós’, que significa ’cubierto’, y ‘grafía’ que significa ’escritura’. Aunque originalmente se utilizó como sinónimo de criptografía, hoy en día se utiliza para definir el arte de ocultar la existencia de mensajes en una comunicación. La Esteganografía (conocida también como escritura encubierta, o cifrado encubierto) es una la ciencia que estudia todos los procedimientos encaminados a ocultar la existencia de un mensaje en una comunicación, típicamente dentro de un texto o una imagen. Mientras que la criptografía pretende hacer ilegible un mensaje que un intruso haya conseguido, el objetivo de la Esteganografía es ocultar el mensaje dentro de otro que no contiene información importante, pero que si contiene sentido por sí solo, de forma que el intruso no sospeche que dentro del mensaje existe información oculta. La información entonces está inmersa sutilmente en un texto, una imagen o un sonido que aparentemente son normales. La Esteganografía no se busca sustituir a las técnicas de cifrado convencional sino brindar un mecanismo más de protección. La ventaja que tiene es que en los casos de criptigrafía, cuando se encuentra un texto cifrado es claro que se trata de un texto cifrado, el atacante ahora tendrá que usar técnicas de criptoanálisis si desea violar la seguridad del mensaje, pero la Estenografía lo que hace es tomar el mensaje y esconderlo en otro, con lo cual no se sabe que hay algo allí. Esta técnica podrá utilizarse sola o adicionar mecanismos de cifrado al mensaje original antes de esconderlo en el otro mensaje. 3.3 Funcionamiento La esteganografía o estenografía no es una técnica nueva, la diferencia es que antes se utilizaban mecanismos “manuales” para llevarla a cabo. Por ejemplo, en la antiguedad, cuando dos batallones del mismo ejército se quería comunicar de manera segura o el emperador deseaba enviar un mensaje secreto, tomaban un soldado a quien cortaban el cabello hasta dejarlo calvo, escribían el mensaje a transmitir en su cabeza y le dejaban crecer nuevamente el cabello. En la época moderna, lo que hacemos es aprovechar letras de un texto o los bits menos significativos de una imagen o video para diseminar los datos a proteger y de esa manera que no sean vistos por un atacante. Existen varios mecanismos en la actualidad, a continuación presentamos algunos de ellos: 3.3.1 Estenografía en Texto Este mecanismo permite ocultar mensajes dentro de escritos sin que sea notoria su presencia. Es una técnica que implica que el escrito que se modifique para ocultar la información real tenga sentido. La manera como se realiza usualmente consiste en tomar palabras, sílabas o letras del mensaje como parte del mensaje real. Por ejemplo: Presión de curas en Pitalito logró un debate al importante manifiesto propuesto. ATN reporto esto. En este mensaje, aparentemente relacionado con la noticia de un debate sobre “algo”, realmente está ocultando un mensaje. ¿Cuál es el mensaje? (tome un momento para intenta encontrar el mensaje oculto) La regla aplicada en este caso fue tomar las segundas letras de cada palabra de la frase. Es decir: Presión de curas en Pitalito logró un debate al importante manifiesto propuesto. ATN reporto esto. Texto oculto: reunión el martes. 3.3.2 Esteganografía con Imágenes Esta técnica se base en aprovechar los bits menos significativos (LSB – Last Significant Bit) de una imagen para ocultar bits del mensaje a ocultar. Como es sabido, la representación de un pixel de la pantalla del computador está compuesto por un tripleta (3-tupla) de los colores Rojo, Verde y Azul (RGB – Red, Green, Blue), y cada color se representa por mínimo 8 bits y cualquier tonalidad que queramos dar a la pantalla será basada en la combinación de esos tres tonos básicos. Es así que, por ejemplo para representar un tono azul claro el pixel se tendrá que “pintar” con R=109, V=213, A=237. La técnica esteganográfica consistirá en cambiar el bit menos significativo a esta combinación de colores para incluir los bits del mensaje. En el ejemplo que estamos desarrollando, en el peor de los casos si al incluir los bits del mensaje real cambia el color del pixel a R=108, V=214, A=238, el tono cambiará muy poco a la vista y así no se notará que se ha modificado. Ahora, si la resolución que se maneja es muy alta, es decir, cada color base se representa no por 8 sino por 16 o 24 bits, esto será mucho menos notorio. Suponga una foto, la cual, al mirarla en “lenguaje” computador se trata de una serie de unos y ceros, si suponemos que es una foto de 640 x 480 pixels y que cada color básico se representa en 8 bits, tendríamos 2.457.600 bits disponibles para ocultar un mensaje, es decir, si pensamos en un texto de caracteres básicos se trataría de 307.200 caracteres. ¿Qué pasaría si la foto fuera de 1920 * 1080 y cada color básico se representa con 16 bits?, ¿cuántos caracteres podría ocultar?. Entonces, cómo funciona?, El LSB es el bit más a la derecha del número, Si pensamos en el número 29 en binario, estamos pensando en el 11101, el 1 más a la izquierda es el más significativo y un cambio en ese bit será muy notorio (pasaría a 01101 = 15), mientras que si pensamos en el 1 de más a la derecha, estamos hablando del menos significativo (pasaría a 11100 = 28) y un cambio en él pasará casi desapercibido. Ejemplo: Suponga que se tiene una imagen se poseen los siguientes valores en 3 píxeles: Píxel Primero Segundo Tercero R 0010011 0010011 1100100 1 1 0 1110100 1100100 0010011 1 0 1 1100100 1110100 1110100 0 1 1 G B Ahora, suponga que se quiere ocultar la letra A que en ASCII equivale al 65(100000011). Entonces el mecanismo consistirá en reemplazar los valores menos significativos de la imagen por los bits que representan la letra, colocando estos valores en el último bit de cada byte que representan los píxeles. Píxel Primero Segundo Tercero R 0010011 0010011 1100100 1 0 1 1110100 1100100 0010011 G B 0 0 1 1100100 1110100 1110100 0 0 1 Los valores en negrilla representan la letra A y de esos, los que aparecen subrayados son los que han sido realmente modificados, para cada píxel, y el color de la imagen casi no varía, por eso para el ojo humano es imposible distinguir esa diferencia de colores. Este mismo procedimiento se podría aplicar a películas, en cuyo caso cada píxel se cambia por el que lleva oculta la información, siendo prácticamente imposible para el ojo humano la percepción de los cambios de color en las imágenes proyectadas en la película. 3.3.3 Esteganografía en sonido Esta técnica usa el mismo principio de las dos anterior, es decir, se busca esconder un mensaje, ahora en un sonido. La premisa para usar este mecanismo es que el sonido sobre el cual se ocultará información debe ser digital, de tal manera que, a la luz del computador, se trate de 0 y 1 como cualquier otro archivo. Partiendo de esta premisa, la estenografía usa el mismo principio que revisamos en la estenografía en imágenes, se trata de tomar el bit menos significativo de los bytes que representan el sonido, de tal manera que una modificación en dichos bits no signifique un gran cambio en el sonido, al punto de llegar a ser imperceptible. Si tenemos una señal análoga y la digitalizamos, lo que se hace es tomar muestras cada tanto tiempo para hacer una representación de la señal, dando una equivalencia numérica a la señal capturada como se presenta en la figura 3.1. Figura 3.1: Cuantificación Con esa equivalencia numérica se puede hacer el procedimiento esteganográfico, si se modifica una de muestras tomadas en el bit menos significativo la curva variará muy poco y no será notoria para el oído humano. Es de aclarar que aquí solo se presentaron tres técnicas de estenografía, pero no son las únicas. Simplemente se citaron y explicaron a modo de ejemplo y pueden ser extrapoladas u otros ambientes o sistemas. 4. Mecanismos de cifrado simétrico 4.1 Generalidades La encripción simétrica o cifrado simétrico, como ya se ha mencionado antes, busca convertir un texto plano en un texto ilegible, de tal manera que la información cifrada no se pueda obtener a menos de que se realice un proceso de criptoanálisis. En particular, la criptografía simétrica se basa en dos elementos: 1. Algoritmo de Encripción/desencripción: son el conjunto de reglas que indican cómo convertir un texto plano en cifrado 2. Clave/llave secreta: Es una palabra o frase secreta que será usada dentro del algoritmo para realizar el proceso de cifrado y que le agregará una mayor complejidad al proceso de criptoanálisis, de tal manera que un mismo texto cifrado con un mismo algoritmo de cifrado pero con diferentes claves, darán diferentes textos cifrados. El término simétrico hace referencia a que la llave secreta será la misma tanto para el proceso de encripción/cifrado como para el proceso de desencripción/critpoanálisis, de lo contrario, el texto no dará el mismo. Esta condición de simetría es el punto álgido de este tipo de mecanismos, ya que implica que los dos actores (origen y destino) se pongan de acuerdo en la llave que usarán y esto implicará un riesgo de seguridad ya que de alguna manera deberán acordar la llave y mientras se esté en el proceso de acuerdo es posible que dicha llave se vea comprometida (es posible que la roben). Por ejemplo: si para definir la clave se envían e-mails, dichos correos irían en texto plano y si alguien captura esos mensajes tendrá la clave secreta y podrá descifrar cualquier mensaje que sea enviado con dicha clave. Pasará lo mismo si se acuerda la clave a través de una conversación telefónica, ya que también es posible que alguien esté espiando la línea y escuchando la conversación, en cuyo caso igual tendría la clave. Ahora, si lo una persona requiere es guardar su información cifrada para que nadie, sino ella misma, pueda acceder a ésta, este tipo de algoritmos es la opción perfecta, pues el algoritmo de cifrado más la clave permitir mantener la información segura y la llave secreta no tendrá que ser compartida con nadie. Con lo dicho en el párrafo anterior, no se quiere decir que este tipo de algoritmos no pueda ser usado como mecanismo de cifrado cuando se tiene varios actores, lo que quiere decir es que es un mecanismo ideal para encripción de información en donde no se comparte la llave secreta y que si se requiere compartir la clave se debe tener extremo cuidado en el proceso de definición de la misma y su transmisión. En la figura 4.1 se presenta el proceso de cifrado con este tipo de algoritmos Figura 4.1: Proceso de cifrado/descifrado simétrico Como ejemplos comerciales de este tipo de mecanismos podemos encontrar, entre otros, los siguientes 1. DES 2. Triple DES 3. IDEA 4. Blowfish 5. SAFER 6. AES En las siguientes secciones de este capítulo se dará una explicación de algunos de ellos y se dará bibliografía de apoyo para profundizar al respecto. 4.2 Algoritmos 4.2.1 DES El algoritmo de cifrado simétrico DES o Data Encryption Standard es un algoritmo de cifrado por bloques, en donde se manejan bloques de datos de 64 bits y una llave de encripción/desencripción de 64 bits de los cuales realmente 56 bits corresponden a la clave como tal y 8 bits se usan para control (checksum). Puede ser implementado tanto en hardware como en software y en firmware. Este algoritmo fue desarrollado por IBM en la década de los 70s y hacia finales de esta misma década fue adoptado por las organizaciones federales de los Estados Unidos como estándar de cifrado para proteger datos sensibles4. Por muchos años se consideró inviolable, hasta que en 1998 se realizó un concurso para romperlo y finalmente se logró, desde ese momento y cada vez más (debido al poder de cómputo de los nuevos computadores y a las capacidades de procesamiento distribuido con que se cuenta) este algoritmo ahora es considerado poco fiable. 4 (Federal Information Processing Standards Publication, 1999) Funcionamiento En términos generales, el algoritmo consiste en tomar un bloque de 64 bits del texto plano al cual se le debe realizar una permutación inicia, luego de esto, partirlo en subbloques de 32 bits cada uno y realizar 16 iteraciones en las que los subbloques son intercambiados y operados entre sí y con porciones de la clave para finalmente unir los subbloques y realizar una permutación final. Después de este proceso se obtendrá el texto cifrado. En la figura 4.2 se esquematiza este proceso: Figura 4.2: Funcionamiento general DES6 CAP La permutación inicial consiste en “desordenar” los bits del texto original como se muestra en la figura 4.3: Figura 4.3: Permutación inicial DES Es decir, se toma el bit 58 del bloque de texto original y se coloca en la posición 1, ahora se toma el bit 50 y se coloca en la posición 2, y así sucesivamente hasta que el bit 15 se coloca en la penúltima posición (posición 63) y el 7 en la última posición (posición 64). Ahora, la permutación final se presenta en la figura 4.4: Figura 4.4: Permutación final DES Nota: La interpretación de esta permutación será la misma de la primera permutación Entrando a mirar las 16 iteraciones, el proceso que se realiza en cada una de ellas se esquematiza en la figura 4.5: Figura 4.5: Iteraciones DES En donde L son los primeros 32 bits del bloque original (subbloque izquierdo) y R son los últimos 32 bits del bloque original (subbloque derecho). Para entender más fácilmente como funciona, supongamos que vamos a entrar a la primera iteración, entonces: Se toma el subbloque R1 y se pasa por un proceso de generación, en el cual se convierten 32 bits en 48 bits como se muestra a en la figura 4.6. Figura 4.6: DES de 32 a 48 bits Como se ve en la figura 4.6, el bit 32 se coloca en la posición 1, el bit 1 en la dos y así sucesivamente hasta el final. La manera de generar 48 bits a partir de 32 es colocando algunos bits repetidos, por ejemplo el bit 1 se coloca en la posición 2 y en la 32. Luego, se realiza un XOR entre los recién generados 48 bits y una parte de la clave de 48 bits (mas a delante se explicará la manera como son definidos cuáles 48 bits de la clave se toman) para luego realizar un proceso de sustitución en el que se vuelven a convertir los 48 bits en 32 bits. Este proceso se muestra en la figura 4.7. Figura 4.7: DES de 48 a 32 bits El proceso se basa en algo llamado S-BOX, 8 en total las cuales permiten convertir 6 bits en 4, con lo cual se reduce en total de 48 bits a 32 bits. Para entender como lo hace, en la figura 4.8 se presenta el comportamiento de la S-BOX 1. Figura 4.8: DES - SBOX 1 La manera como funciona es la siguiente, pero para hacerlo más claro supongamos que los 6 bits que están entrando a esta SBOX son 110100: 1. Se toman los bits exteriores que entran a la S1, es decir 1 1 0 1 0 0 = 1 0 que equivale al número 2 en decimal, que para la explicación llamaremos X. 2. Ahora se toman los 4 bits internos que entran a la S1, es decir 1 1 0 1 0 0 = 1 0 1 0 que equivale al número 10 en decimal, que para la explicación llamaremos Y. 3. Entonces, se toma el contenido de la fila X de la matriz mostrada arriba y la columna Y, que para este caso será el número 9. 4. Este número se pasa a binario. Es decir será 1 0 0 1. Y este será el número que salga de la SBOX 1, note que la salida fue de 4 bits. Cada SBOX es diferente y en la figura 4.9 presentan las otras 7 sbox que están definidas en el algoritmo: Figura 1.9: DES - SBOX 2 a 810 CAP Ahora, se realiza una permutación de los 32 bits en donde se “desordenan” de manera similar a como se hace la permutación inicial y final vistas antes, la cual se muestra en la figura 4.10. Figura 4.10: DES permutación en cada iteración Finalmente, después de “desordenados” se realiza un XOR con el subbloque L1 y eso se convertirá en el bloque R2 el cual se usará durante la siguiente iteración. Respecto al subbloque L2 , que ´será usado en la siguiente iteración, simplemente deberá moverse el subbloque R1 , es decir, el bloque R1 se convertirá en la primera mitad del bloque de 64 bits que se operará en la segunda iteración. Nuevamente, es importante recordar que todo el proceso descrito anteriormente, se realizar 16 veces lo cual se convierte en parte de la complejidad del algoritmo. Ahora, como se vió en la descripción del algoritmo DES, en cada una de las iteraciones se usa una porción de 48 bits diferentes de la llave (subclave) para hacer un XOR con un bloque de 48 bits de datos, para la generación de dichas subclaves el proceso consiste en realizar una permutación inicial entre los bits que conforman la clave total, para luego realizar una serie de corrimientos de bits y permutaciones adicionales para determinar los bits de la clave que serán usados en las iteraciones particulares. Por ejemplo, para generar la primera subclave, se toma la clave total y se permuta, luego se parte en dos bloques iguales a los que de manera independiente se les aplica un corrimiento de bits, para luego, nuevamente unirlos y realizar otra permutación. El resultado de este proceso producirá la subclave de la primera iteración. A continuación se muestra a través de en la figura 4.11 el proceso que se realiza. Figura 1.11: DES Generación de sublclaves 4.2.2 Triple DES Como ya se mencionó en el numeral anterior, DES ya fue roto y como una alternativa para seguirlo utilizando aparece triple DES. El mayor problema de DES estaba relacionado con el tamaño de clave de 64 bits (56 bits de clave y 8 de paridad), para responder a esto, Triple DES maneja claves de 128 bits (112 bits de clave y 16 de paridad). La manera como funciona consiste en tomar la clave de 128 bits y partirlas en dos claves de 64 bits (tamaño del DES tradicional), K1 y K2 y utilizarlas como se muestra en la figura 4.12. Figura 4.12: TripleDES - cifrado de datos12 CAP El proceso es el siguiente; 1. M es el texto plano 2. Utilizando la clave K1 se cifra el texto M usando DES 3. Utilizando la clave K2 se descifra el texto resultado del proceso anterior 4. Finalmente, utilizando la clave K1 se cifra el texto resultado del proceso anterior y así se obtendrá C que es el texto cifrado con Triple DES El proceso de descifrado será aplicar las claves y pasos en orden inverso, como se ilustra en la figura 4.13. Figura 4.13: Triple DES - descifrado de datos Algunas variaciones a este mecanismo son: 1. Puede realizarse el proceso cifrando con K1, cifrando ahora con K2 para finalmente volver a cifrar con K1. El proceso de descifrado será descifrar con K1, descifrar con K2 para finalmente descifrar con K1. 2. También puede trabajarse con claves de 192 bits (168 bits de clave y 24 bits de control), en este caso la clave se parte en 3 (K1, K2 y K3). Así, lo que se hace es utilizar una vez cada clave y no como en los casos anteriores en los que la clave K1 se utilizaba dos veces en el proceso. 4.2.3 IDEA El algoritmo de cifrado simétrico IDEA o Internacional Data Encryption Algorithm fue desarrollado en el Instituto Federal Suizo de Tecnología por Xuejia Lai y James Massey hacia principios de los 90s. Es un algoritmo orientado a bloque (al igual que DES) que maneja bloque de 64 bits y clave de 128 bits. El algoritmo consiste en tomar 64 bits de datos y realizar con ellos 8 iteraciones en donde se subdivide los 64 bits en 4 subbloque de 16 bits cada uno. Estos subbloque serán operados entre ellos, con partes de la clave y cambiándolos de posición. Luego de las 8 iteraciones, se realiza una transposición final y el resultado de esta será el texto cifrado. En total se requieren 52 porciones diferentes de la clave, para cada iteración se requiere 6 subclaves diferentes y para la transposición final se requieren 4 subclaves más. En la figura 4.14 se presenta un esquema del algoritmo de cifrado IDEA el cual hace parte del artículo de investigación en donde los autores explican el algoritmo5: 5 (Lai & Massey, 1991) Figura 1.14: Algoritmo IDEA 4.2.4 AES AES o Advanced Encryption Standard es un nuevo mecanismo de cifrado simétrico de datos que reemplazó a DES. Actualmente es el nuevo estándar de cifrado simétrico oficial del gobierno americano para información no confidencial y está definido en el RFC-3565 y el fips-197. Para su escogencia, en el año 1997 el NIST (Nacional Institute of Standard and Technology) del gobierno de los Estados Unidos realizó una concurso abierto en la búsqueda de un nuevo mecanismo de cifrado simétrico que reemplazar al viejo algoritmo DES y su sucesor Triple DES. Dicha concurso tenía como requisitos los siguientes: 1. Debería ser un algoritmo simétrico por bloques. 2. Tendría que ser un algoritmo público, lo cual implicaría que el poder del mecanismo no estaría en el desconocimiento o secreto del algoritmo sino en el poder de cómputo que implicaría tratar de romperlo sin conocer la llave de cifrado. 3. Debería manejar tamaños de llaves de 128, 192 y 256 bits. 4. Finalmente, la implementación del algoritmo debería poderse hacer por hardware y por software. A partir de estos requisitos, se lanzó la convocatoria al concurso y en el año 2000, después de haber recibido cerca 15 propuestas de todo el mundo se escogieron 5: MARS, RC6, Rijndael, Serpent y Twofish y después de la evaluación de estos se seleccionó el algoritmo Rijndael presentado por Joan Daemen y Vincent Rijmen como el algoritmo oficial de AES. Para el año siguiente fue renombrado como AEA (Advanced Encryption Algorithm) y salió al público como parte de AES. Las principales características del algoritmo Rijndael son: 1. Maneja claves variables. El tamaño de la clave por defecto es de 192 bits (AES - 192), pero se puede configurar para que funcione con claves de 128 bits (AES - 128) o de 256 bits (AES - 256). 2. Es 40 % más rápido que triple DES 3. Seguridad de la clave. “Una clave de 128 bits da un espacio de claves de 2128 equivale a 3 x 10 38 claves. Incluso si la NSA se las arregla para construir una máquina con 1000 millones de procesadores en paralelo, cada uno de los cuales es capaz de evaluar 1 claves por picosegundo, a tal máquina le llevaría 1010 años buscar en el espacio de claves. Para ese entonces el Sol ya se hará apagado, por lo que las personas existentes tendrán que leer los resultados a la luz de las velas”.6 4. Está escrito en lenguaje C Funcionamiento Las características generales de funcionamiento del algoritmo son: Los bloques de datos que maneja son de 128 bits. Manera entre 10 y 14 iteraciones dependientes del tamaño de la clave. Para AES - 128 se realizarán 10 iteraciones, para AES - 192 serán 12 iteraciones y finalmente, para AES - 256 tendrá 14 iteraciones. El algoritmo toma bloques de 128 bits y “partes” de la clave de 128 bits. Realiza operaciones como XOR, sustituciones, rotaciones y operaciones con matrices entre subbloques de datos y partes de la clave. 6 Maneja S-box (del estilo de DES) (Tanembaum, 2003) PROCESO DE CIFRADO A continuación, se ilustra en la figura 4.16 el proceso que se realiza. Figura 1.16: Proceso de cifrado con AES Como se muestra en la figura 1.16, el primer paso es tomar bloque de datos de 128 bits organizados por columnas en una matriz (para efectos de la explicación, a esta matriz y cualquiera de sus transformaciones la denominaremos matriz de datos, en inglés state) de 4 columnas por 4 filas (1 byte - 8 bits por celda o posición de la matriz), comenzando desde la fila uno, columna uno, luego fila dos, columna uno, es decir, la matriz de datos se llena por columnas, los cuales se operan con transformaciones de la clave de cifrado (más adelante se explicará este proceso). En la figura 4.17 se presenta un ejemplo de texto plano, éste se presenta en formato hexadecimal por facilidad, en la parte de arriba aparece una representación hexadecimal del texto a cifrar y en la parte de abajo la representación matricial del mismo texto. Figura 4.17: Texto plano Luego, se toma la matriz de datos y una matriz que contiene la clave de cifrado (esta matriz de la clave irá cambiando durante cada iteración del algoritmo, más adelante hablaremos de esto) y se realiza un XOR entre ellas. Después de esto y por 10 iteraciones (en el caso de AES - 128 bits) se realiza el siguiente proceso: Sustitución de bytes: Se realizan sustituciones de cada byte de la matriz de datos a partir de una S-BOX de manera similar a como se realizaba en DES, en este punto vale la pena destacar que AES solamente usa una SBOX de 16x16 mientras que DES utilizaba ocho S-BOX cada una de 4x16. Específicamente, se toma cada byte de la matriz de datos (una posición de la matriz), este byte dará la posición de la S-BOX que reemplazará a dicho dato, los primeros 4 bits referenciarán la fila de la S-BOX y los otros 4 bits la columna, así, el valor almacenado en la casilla de cruce dará el byte de reemplazo. Por ejemplo, si el byte de la matriz de datos ubicado en la posición 1,1 contiene en hexadecimal el valor a4, el valor de reemplazo para la posición 0,0 de la matriz de datos será 49, otro ejemplo podría ser, si el byte ubicado en la posición 2,1 de la matriz de datos contiene en hexadecimal el valor bd, el valor de reemplazo para dicha posición será 7a. Este mismo proceso se realizará para cada celda (un byte) de la matriz de datos (16 celdas = 4 filas * 4 columnas). En la figura 1.18 se presenta laSBOX definida en el estándar. Figura 4.18: S-BOX Para el caso del texto plano presentado en la figura 4.17, la nueva matriz de datos, después de aplicar la sustitución se presenta en la figura 4.19. Figura 4.19: Matriz de datos después de la sustitución AES Corrimiento de filas: Luego se realiza un corrimiento de bits a nivel de filas dentro de la matriz de datos, el cual consiste en mover los bytes ubicados en cada columna sobre las mismas fila a las que pertenecen tantos columnas a la izquierda como número de la fila a la que pertenecen, es decir, en la fila 0, se realiza un corrimiento a la izquierda de 0 bytes, en la fila 1, se corren 1 byte, etc. En la figura 4.20 se muestra una representación gráfica de este proceso. Figura 4.20: Corrimiento de filas Mezcla de columnas: El tercer paso en las iteraciones es mezclar columnas, en éste, se toman los bytes de una misma columna (columna1, columna2, columna3 y columna4) de la matriz de datos, a quien llamaremos M en este punto y se realiza una multiplicación de matrices con un matriz de transformación definida por el algoritmo, la cual se puede ver en la figura 4.21, con lo cual se obtiene una nueva versión de la matriz de datos que llamaremos aquí M’ para claridad de la formula presentada abajo. Figura 4.21: matriz de transformación En general, la nueva matriz de datos se calcula a partir de las siguientes fórmulas ∀j; 0 ≤ j ≤ 4 M’[0, j] = (02 × M[0, j]) ⊕ (03 × M[1, j]) ⊕ M[2, j] ⊕ M[3, j] M’[1, j] = M[0, j]) ⊕ (02 × M[1, j]) ⊕ (03 × M[2, j]) ⊕ M[3, j] M’[2, j] = M[0, j]) ⊕ M[1, j] ⊕ (02 × M[2, j]) ⊕ (03 × M[3, j]) M’[3, j] = (03 × M[0, j]) ⊕ M[1, j] ⊕ M[2, j] ⊕ (03 × M[3, j]) Es decir, para calcular el nuevo valor de la posición 0,0 y 2,3 de la matriz de datos se realizan las siguientes operación: M’ [0, 0] = (02 × M[0, 0]) ⊕ (03 × M[1, 0]) ⊕ M[2, 0] ⊕ M[3, 0] M’[2, 3] = M[0, 3]) ⊕ M[1, 3] ⊕ (02 × M[2, 3]) ⊕ (03 × M[3, 3]) Se realiza este mismo procedimiento para cada una de las celdas de la matriz de datos apoyada en la matriz de transformación hasta obtener la nueva versión de la matriz de datos. Finalmente, se operan la matriz de datos y una nueva versión de la matriz de la clave aplicando un XOR a cada celda. La última parte del proceso es similar a las anteriores iteraciones sin la mezcla de columnas, es decir, sin la operación de multiplicación de matrices entre la matriz de datos y la matriz de transformación vista en la página anterior. La matriz de datos al final de todo este proceso se coloca por columnas y esto será el texto cifrado. GENERACIÓN DE LA LLAVE El proceso de generación de la porción de la llave que es utilizada en cada iteración es el siguiente: Se toma la clave original organizada en una matriz de clave de 4 filas de manera similar a como se hizo para la generación de la matriz de datos a partir del bloque de datos, en el ejemplo de clave de 128 bits será de 4x4. Ver figura 4.22 Figura 1.22: claves AES - 128 Se genera una semilla de arranque para la siguiente clave, para lo cual se toma la última columna de la matriz de la clave y se realiza el siguiente proceso: o Se realiza un corrimiento a la izquierda de un byte (8 bits) sobre la columna. Por ejemplo, para el caso de claves de 128 bits, la matriz de clave tendrá 4 filas por 4 columnas, entonces sobre la columna cuatro de dicha matriz, se toma el contenido de la celda ubicada en la fila 1 y se ubica en la fila 4 (de la misma columna 4), el de la fila 2 a la 1, el de la 3 a la 2 y el de la 4 a la 3. Ver figura 4.23 Figura 1.23: Corrimiento de bits de la clave o Luego, usando la S-BOX se transformarán los valores de cada celda en unos nuevos de la misma manera que se hace durante el cifrado de datos con la matriz de datos. Ver figura 4.24 y 4.18 Figura 4.24: Sustitución con S-BOX o A ese resultado (columna 4) se le aplica un XOR con la primera columna de la matriz de la clave actual y otro XOR con una columna de otra matriz llamada RCON definida en AES, la columna a tomar dependerá de la iteración en la que se encuentre (primera iteración, columna 1, segunda iteración, columana 2, etc). El resultado de esta operación será la primera columna de la siguiente clave. Ver figura 4.25 Figura 4.25: XOR con RCON Ahora, para la generación de las siguientes columnas (columna 2, 3 y 4) se realiza un XOR entre la última columna recien generada y la columna que se está generando pero de la clave anterior. Es decir, si se está generando la columna 3, se tomará la columna 2 recien generada y se hará XOR con la columna 3 de la clave anterior. Ver figura 4.26 Figura 4.26: Generación final de clave El resultado de este proceso será la nueva clave para ser usada en la siguiente iteración del proceso de cifrado de los datos, lo cual se repetirá las veces que sea necesario (entre 10 y 14 veces). Dicha clave para la primera iteración se observa en la figura 4.26. PROCESO DE DESCIFRADO En el destino, el proceso de criptoanálisis consistirá en reversar el algoritmo antes mencionado sobre el texto cifrado, usando la clave simétrica correspondiente, la cual deberá pasar por los mismos procesos de generación de claves presentado en el apartado anterior. Adicionalmente, vale la pena aclara que para este proceso, se deberá utilizarse: Una matriz de transformación inversa que se presenta en la figura 4.27 Figura 4.27: Matriz de transformación inversa Un corrimiento de filas inverso, el cual se presenta en la figura 4.28 Figura 4.28: corrimiento inverso Una S-BOX inversa, la cual se presenta en la figura 4.29 Figura 4.29: S-BOX Inversa 4.3 Diffie-Hellman, para el intercambio seguro de claves Como hemos apreciado, los mecanismos simétricos de cifrado son bastante robustos, su punto sensible está en el intercambio de la clave secreta. Como una respuesta a este problema, Whitfield Diffie and Martin Hellman en 1976 crearon un algoritmo para intercambio de llaves que permitía que dos actores dentro de una comunicación pudieran ponerse de acuerdo en la llave común que utilizarían sin que esta viajara sobre la red. Este mecanismo está especificado en el RFC-2631. La manera como funciona el algoritmo esta basada en un par de números, uno de ellos primos, operaciones de potenciación y modulo y números aleatorios. En la figura 4.30 se muestra su funcionamiento. Figura 4.30: Funcionamiento algoritmo diffie Hellman La idea es la siguiente: 1. A y B son los actores dentro de una comunicación y quieren definir una llave común 2. Entonces, se transmiten entre ellos dos número β y q, donde q es un número primo y β es un número menor que q. 3. Ahora, cada uno, A y B, se define un número aleatorio X a y X b , los cuales no transmitirán a través de la red y sólo A conocerá X a y sólo B conocerá X b 4. Seguidamente se realizar las operaciones que se muestran en la gráfica para producir Y a y Y b. 5. Después de esto, A transmite a B su Y a y B transmite a A su Y b . 6. Con estos datos A realiza la operación K = Y b Xa mod q y B realiza la operación K = Y a Xb mod q. Ambas operaciones darán el mismo resultado. 7. Por lo cual, finalmente, la llave común de cifrado/descifrado será la que en el gráfico apareced como K. De esta manera, A y B definieron su llave secreta sin transmitirla. Este mecanismo es el primer paso en busca de los mecanismos de cifrado asimétrico. 5. Mecanismos de cifrado asimétrica Al igual que la criptografía simétrica, la encripción asimétrica o cifrado asimétrico busca convertir un texto plano en texto ilegible, de tal manera que la información cifrada no se pueda obtener a menos de que se realice un proceso de criptoanálisis. En particular, la criptografía asimétrica se basa en dos elementos: Algoritmo de Encripción/desencripción: son el conjunto de reglas que indican cómo convertir un texto plano en cifrado 2 Clave/llave por actor: Es un juego de llaves, una conocida como privada y la otra como pública. La privada solo es conocida por el “dueño” del par de llaves y la pública es conocida por cualquier actor que quiera realizar procesos de cifrado/descifrado con el dueño de las claves. En particular, por el segundo elemento antes mencionado es que este tipo de algoritmo recibe el nombre de asimétrico. Una de las llaves es usada para realizar el proceso de cifrado y la otra para el proceso de descifrado, es decir, si cifro con la llave pública, descifro con la llave privada y si cifro con la llave privada, entonces descifro con la llave pública. El manejo de las dos llaves es lo que permite una mayor seguridad en el cifrado/descifrado, ya que nunca debe ser transmitida parte de la llave y conocer el algoritmo de cifrado y la llave pública no es suficiente para romper el algoritmo. Obviamente, todo dependerá de la seguridad con la que será guardad la llave privada pero es más fácil esto que el envío seguro de la llave simétrica (única) de los mecanismos como DES y AES. Otro ventaja adicional es que con los algoritmos de llaves públicas y privadas es posible además de cifrar información para que no sea vista sino por el destino, es posible cifrar información con el único objetivo de garantizar que quien lo haya cifrado sea quien dice ser (similar a firmar un documento) – autenticación o la combinación de las dos anteriores. En los siguientes diagramas se presentan los procesos aquí mencionados y se da una breve explicación de ellos. 5.1 Cifrado de datos En la figura 5.1 se presenta el proceso de cifrado de datos usando mecanismos asimétricos. Figura 5.1: Cifrado de datos En este caso, A desea enviar un texto a B y que solo B lo pueda ver. Para esto lo que A debe hacer es cifrar el texto con la llave Pública de B de tal manera que solo B la podrá ver, ya que solo B tiene la llave privada B con la cual podrá descifrar el texto. Ahora, ¿cómo tiene acceso A a la llave pública de B?, hay dos caminos: 1. B puede haberle enviado en algún momento su llave privada a todos los que interactúan con él para que cuando requirieran enviarle algo ya la tuvieran y la usaran. Este camino solo tiene un defecto, ¿cómo estar seguros que quien envío la llave pública de B era realmente B?, que tal que fuera un impostor haciéndose pasar por B?. Aquí la única forma de saberlo es basado en relaciones de confianza o que personalmente B entregue su llave. 2. La otra opción es que se defina un lugar seguro en donde todos los actores dejen sus llaves públicas y que cuando alguien necesite la llave pública de alguien la vaya a buscar a ese lugar, el cual se conoce como Repositorio Público. Lo que aquí se debe garantizar es que el repositorio público de fe de que las llaves públicas que almacena son de quien dicen ser. Cuando A envíe el texto cifrado por la red la única manera de descifrar el texto será con la llave privada de B, ni siquiera A que fue quien cifró el texto podrá descifrarlo, por lo cual se da garantía de que solo B tendrá acceso a la información. 5.2 Autenticación de quien envía los datos En la figura 5.2 se presenta el proceso de autenticación de la fuente de datos usando mecanismos asimétricos. Figura 5.2: Autenticación de la fuente de datos En este caso, lo que se desea es garantizar que quien está enviando el texto es quien dice ser, un ejemplo comparativo puede ser cuando el gerente de una empresa desea enviar un comunicado a todas las dependencias de la empresa, a él le interesa que todos puedan ver el comunicado, pero también le interesa que sepan que quien realmente lo emitió fue él, para ello lo que hace es colocar su firma en el comunicado. Ahora, para el caso de mecanismos de cifrado asimétrico si A desee enviar un texto dando garantía de que fue A quien lo generó, lo que debe hacer es cifrar el texto con la llave privada de A, de tal manera que cualquiera lo pueda descifrar con la llave pública de A. De esta manera, el mensaje puede ser visto por cualquiera que tenga acceso a la llave pública de A (ya sea que A se la ha enviado con anticipación o que la obtenga del repositorio público) y se da garantía de que quien envió el mensaje es realmente A, pues sólo A tiene su llave privada y sólo se podría descifrar un texto con la llave pública de A si se ha cifrado con la llave privada de A. 5.3 Cifrado de datos y Autenticación de quien envía En la figura 5.3 se presenta el proceso de cifrado de datos y luego la posterior autenticación de la fuente de los mismos usando mecanismos asimétricos. Este caso es la combinación de los dos casos anteriores, aquí lo que se pretende es garantizar que A es quien envía los datos y que sólo B pueda verlos, para lo cual se debe realizar un primer cifrado con la clave privada de A (para garantizar que A es el transmisor) y un segundo cifrado con la clave pública de B (para que solamente B la pueda descifrar). Cuando llegue este mensaje al destino, es decir B, se debe descifrar con la llave pública de A (que la puede obtener del repositorio) y con su llave privada (que sólo él tendrá). Figura 1.3: Autenticación de la fuente de datos y cifrado de datos Una característica de este proceso es que es conmutativo, es decir, que no importa cuál de las dos llaves aplique primero para cifrar o para descifrar, igual dará el mismo resultado. Una desventaja de estos algoritmos está relacionado con su velocidad de cifrado y descifrado, la cual es menor respecto a los algoritmos simétricos. 5.4 Algoritmo RSA Como un ejemplo comercial de este tipo de mecanismos podemos encontrar, el algoritmo RSA. El cual fue desarrollado en la década de los 70s (1977) y registrado en 1983 por sus autores Ronald Rivest, Adi Shamir y Leonard Adelman. La mayor fortaleza de este algoritmo reside en la dificultad técnica de factorizar números primos de gran magnitud. “De acuerdo con Rivest y sus colegas, la factorización de un número de 500 dígitos requiere 1025 años de tiempo de cómputo utilizando el mejor algoritmo conocido y una computadora con un tiempo de instrucción de 1 µseg”7. El algoritmo para definición de las claves es el siguiente: Se toman dos números primos suficientemente grandes ( > 10 100 ). Que se llamaran p y q. Sea n = p * q y z = (p-1)*(q-1) Se elige un número d, menor que n y primo relativo con z, es decir, d y z tienen factor común sólo a 1. Se debe encontrar un número e, de tal forma que ( e * d ) mod z = 1 e y d son exponentes público y privado, entonces o (n,e) es la clave pública o (n,d) es la clave privada Ya teniendo las llaves pública y privada, los procesos para cifrado y descifrado de datos son: Cifrado: C = P e mod n Descifrado: P = C d mod n 5.5 Firmas digitales A continuación se presenta una aplicación de la encripción asimétrica a los proceso de autenticación de usuarios. 7 (Tanembaum, 2003) 5.5.1 Generalidades La firma digital es un mensaje único e individual que se une a un documento para probar: La identidad del emisor: Que quien envía el mensaje sea realmente quien dice ser (falsificación del origen) y luego no puede negar que lo hizo (no repudio de origen). La integridad del documento: Que no ha sido modificado durante el almacenamiento o la transmisión del mismo (falsificación de datos). Tiempo transcurrido entre el envió y la recepción del documento: Que el mensaje se ha enviado y recibido en un tiempo que se define como “prudencial” o “válido”. Unas características importantes que deben cumplir las firmas digitales son: Fáciles de crear: Debe permitir al usuario crear una firma y adjuntarla a un documento fácilmente. Fáciles de verificar: la fecha y hora de la firma, su autor y la no modificación de datos deben poder verificarse con un procedimiento sencillo y rápido. Difíciles de falsificar: La fortaleza de las llaves y los algoritmos de cifrado deben garantizar que no es posible suplantar al verdadero emisor de la firma. Algo que hace particular a las firmas digitales, y que las diferencia de manera contundente de las firmas manuscritas que generamos las personas, es que las firmas digitales son diferentes para diferentes documentos y hasta para un mismo documento generado por un mismo autor en diferente fecha y hora. Adicionalmente, de la misma manera que sucede con las firmas manuscritas, las firmas digitales deben poder ser verificables por terceros, de tal manera que en caso de disputas se pueda determinar cuál de las partes tiene la razón. Este es realmente el potencial de las firmas digitales. Un ejemplo de este uso puede ser el siguiente: Suponga dos personas, Pedro y María, Pedro es un inversionista y María es la comisionista de bolsa que lo atiende. Suponga que Pedro le envía un mail a María solicitándole que invierta US$500.oo en acciones de la compañía ABC porque escuchó que están baratas y van a subir un 50%. María recibe el mail, realiza la transacción y compra las acciones. Al día siguiente, pueden haber pasado dos cosas: o Las acciones efectivamente suben el 50% que Pedro escuchó, en este caso no pasa nada “malo”. María realizó su trabajo y ahora Pedro tendrá una muy buena inversión. o Las acciones no suben el 50% sino que bajan un 80%. Pedro habrá perdido una parte considerable de su inversión. Ante esta situación, Pedro podría decir que él nunca solicitó que se realizara la transacción. Que María efectuó la transacción sin contar con su aprobación. ¿Cómo se comprobaría si el mensaje realmente existió y que lo envió Pedro?. La respuesta está en las firmas digitales, si Pedro firma el mensaje que envía a María se podrá garantizar que el mensaje proviene de Pedro (pues es el único que tiene la llave privada) y que los datos no han sido alterados. De esa manera, se puede garantizar el no repudio y la no falsificación del origen y la no falsificación de los datos. Aunque ya puede intuirse, es importante ratificar adicionalmente que una firma no consiste en: Digitalizar la firma manuscrita de una persona. Pues al tener una firma digitalizada puede ser fácilmente manipulada, copiada y pegada en cualquier mensaje sin importar quien lo hace. No es lo mismo una firma digitalizada que una firma digital. No es un proceso de cifrado asimétrico típico. Aunque si usa los algoritmos asimétricos de cifrado para su creación. 5.5.2 Funciones de hash Al igual que el cifrado asimétrico, para la creación de una firma digital se utilizan las funciones de hash, por lo tanto, antes de explicar cómo funcionan las firmas digitales, es importante aclarar cómo trabajan las funciones hash y su uso dentro del proceso de creación de las firmas digitales. En forma general una función hash es una función matemática que toma una cadena de cualquier tamaño como entrada y genera como salida una cadena de tamaño fijo, es decir que independiente del número de bits que tenga la cadena de entrada, después de pasar dicha cadena por la función hash, se obtendrá una cadena de un numero de bits fijos, al cual suele llamarse resumen. Por ejemplo, si a la función hash genera resúmenes de 128 bits, entonces no importa si el texto de la entrada es de 10 bits, 1000 bits o 1000000 bits, igual generará un “resumen” de 128 bits para cada uno de ellos. Otra definición podría ser: es una transformación matemática que toma un mensaje de longitud arbitraria y calcula, a partir de éste, un valor de longitud fija. Otra característica de las funciones hash es que dos cadenas de entrada similares no dan el mismo hash. Dichas funciones de hash deben cumplir las siguientes condiciones: Generar, en lo posible, diferentes resúmenes o números de hash para documentos diferentes, aunque es posible que dos documentos diferentes generen un mismo número de hash. Permitir transformaciones en una sola vía, es decir que no sea posible, apartir de un número de hash reconstruir el texto original. Ejemplos de algoritmos reconocidos que implementan las funciones de hash son: MDx - Message-Digest algorithm (MD2, MD4, MD5). El estándar más difundido es el MD5 y se encuentra definido en el RFC 1321, fue creado por Ronald Rivest del Instituto Tecnológico de Massachusetts - MIT (Massachusetts Institute of Technology). Este algoritmo genera resúmenes de 128 bits a partir de mensajes de cualquier tamaño como es definido en el RFC 1321 “b is an arbitrary nonnegative integer; b may be zero, it need not be a multiple of eight, and it may be arbitrarily large” - “ b es un entero arbitrario no negativo; b puede ser cero, no tiene por qué ser múltiplo de ocho, y puede ser tan largo como se quiera”8 , donde b es el tamaño del mensaje. SHA-1 - Secure Hash Algorithm. RFC-3174. Publicado en 1995 por el NIST - (National Institute of Standards and Technology) y utilizado por la Agencia de Seguridad Nacional de los Estados Unidos, su predecesor fue el algoritmo SHA (1993). Este algoritmo genera resúmenes de 160 bits a partir de mensajes de hasta 264 bits. Este algoritmo ha tenido variaciones para permitir manejar bloque de mayor tamaño, los cuales son conocidos como SHA-2 que agrupa los algoritmos SHA-224, SHA-256, SHA-384, y SHA5129, SHA3 que agrupa los algoritmos SHA3-224, SHA3-256, SHA3-384 y SHA3-512 y finalmente las nuevas investigación han producido SHAKE128 Y SHAKE256. Para todos los casos, los número a la derecha del nombre del algoritmo hacen referencia al tamaño, en bits, del resumen que se genera, por ejemplo, SHA-256 genera resúmenes de 256 bits). 5.5.3 Creación y funcionamiento de las firmas digitales Ya analizados qué son las firmas digitales y sus usos, y entendido en qué consisten el cifrado asimétrico y las funciones de hash, a continuación, en la figura 5.4, se presenta la manera de generar una firma digital: 8 9 (Rivest, 1992) (Federal Information Processing Standards Publication, 2012) Figura 5.4: Proceso de generación de firma digital La firma digital es un conjunto de bits generados a partir del mensaje original y adicionada al mensaje original antes de que éste sea enviado al destino, a este nuevo mensaje lo llamaremos mensaje firmado, y esta firma es única para cada documento o mensaje. Del otro lado, el destino debe tomar el mensaje firmado y separarlo en la firma digital y el mensaje original para luego proceder a verificar la veracidad de la firma digital y así constatar la procedencia del mensaje original, la no-modificación del mensaje y su tiempo de creación. Si todo está en orden, el mensaje se considerará “verdadero”, de lo contrario, éste se rechazará. Dada una definición global, entremos a revisar de manera más detallada cómo se crea la firma digital de un documento o mensaje. Para esto, utilizaremos como base la figura 5.5. Figura 5.5: generación de firma digital Como se aprecia en la figura, el proceso de generación de la firma consiste en: Tomar el mensaje de datos y pasarlo por una función de hash. Tomar el resumen hash generado del mensaje (de datos) y cifrarlo con la llave privada del origen (A en el caso de la figura). Ese resumen cifrado será la firma. La cual puede garantizar que: o El origen es A pues sólo A tiene su llave privada, y por tanto sólo A podrá cifrarlo con la llave privada de A, y cualquiera podrá descifrar el mensaje con la llave pública de A. o El mensaje no ha sido modificado desde su creación pues la función hash genera un resumen diferente para cada mensaje y si el mensaje se hubiera modificado el resumen cambiaría y por tanto al cifrarlo sería diferente. Dicha firma será añadida al mensaje original antes de ser transmitido a destino. Una pregunta que puede surgir en este punto sería ¿para qué se genera un resumen del mensaje para luego cifrarlo con mecanismos asimétricos en vez de cifrar directamente el mensaje completo con mecanismos asimétricos?. La razón está relacionada con la velocidad de cifrado/descifrado de los mecanismos asimétricos. Como se mencionó en el tema de cifrado asimétrico, dichos mecanismos son más lentos que los mecanismos simétricos, lo cual genera una disminución del rendimiento del proceso, y dependiendo del tamaño del documento a cifrar, afectará en mayor o menor grado dicho rendimiento. Adicionalmente, en destino, el proceso de descifrado también será más rápido o lento dependiendo del tamaño del mensaje cifrado. Si el mensaje cifrado contiene el resultado de una función de hash de un determinado tamaño (casi siempre de menor tamaño que el mensaje original) el tiempo que gastará en el proceso de descifrado ya se sabrá de cuanto es y será menor al de descifrar el mensaje completo. Ahora bien, ya se ha firmado el documento a transmitir, el trabajo que sigue es verificar su veracidad en el destino. En la figura 5.6 se muestra el proceso. Figura 5.6: Documento firmado El proceso en este caso es el siguiente: El destino recibe el mensaje con su respectiva firma ( mensaje firmado ) Se separa el mensaje original y la firma digital Se descifra la firma digital usando la llave pública del origen (para el ejemplo, la de A). Dicha llave pública podría haber sido enviada al destino con anterioridad por A o depositada en el repositorio público para la consulta de quien la necesite. Después de esto, se tendrá el número de hash descifrado. Por otro lado, y como se mencionó antes, las funciones de hash no son reversibles, por lo cual se debe tomar el mensaje original y aplicarle la misma función de hash utilizada por el origen y así generar otra vez en número resumen de este mensaje, al que para facilitar la explicación, llamaremos número hash generado. Se toman el número de hash descifrado y el número hash generado y se comparan. En este punto pueden pasar dos cosas: o Los dos números son iguales: en este caso se puede decir que el mensaje fue enviado por quien decía ser y que no ha sido modificado durante su transmisión. El mensaje se considera válido o verdadero. o Los números no coinciden: en este caso el mensaje tuvo algún problema, o el mensaje no lo envió quien decía que era o durante su transmisión sufrió alguna alteración. En cualquiera de los dos casos, el mensaje se considerará inválido. Note que se sabrá que el mensaje es inválido pero no se sabrá cuál es la razón, puede tratarse de la suplantación del origen o de una modificación de los datos. Como usted se podrá haber dado cuenta, y como se mencionó desde el principio, las firmas digitales no garantizan privacidad de la información, sólo garantiza autenticidad del origen, no modificación del mensaje y tiempo transcurrido entre el envío y la recepción del documento. Si adicionalmente lo que se desea es garantizar privacidad, será necesario utilizar algo más que la simple firma, como por ejemplo cifrado simétrico de los datos con una llave secreta o cifrado asimétrico usando la llave pública del destino. 5.5.4 Estándar de firmas digitales DSS Una implementación del algoritmo de firmas digitales es el Digital Signature Algorithm - DSA. Este algoritmo es el estándar usado por el gobierno de los Estados Unidos para sus procesos de firmas digitales, fue diseñado por el National Institute of Standards and Technology-NIST en el año 1991 y oficialmente puesto en funcionamiento en 1994 mediante el estándar FIPS-18610: Digital Signature Standard-DSS, cuyo resumen define claramente el propósito de las firmas digitales así “This standard specifies a Digital Signature Algorithm (DSA) which can be used to generate a digital signature. Digital signatures are used to detect unauthorized modifications to data and to authenticate the identity of the signatory. In addition, the recipient of signed data can use a digital signature in proving to a 10 Federal Information Processing Standard. http://www.itl.nist.gov/fipspubs/fip186.htm. third party that the signature was in fact generated by the signatory. This is known as nonrepudiation since the signatory cannot, at a later time, repudiate the signature.”. En este estándar, se presenta el mismo proceso presentado arriba para la creación y verificación de las firmas digitales, hace uso del algoritmo de hash SHA-1 y presenta un algoritmo similar al RSA para la definición de llaves privada y pública de los usuarios. 5.5.5 PGP y OpenPGP PGP o Pretty Good Privacy nació como un proyecto de software libre en la década de los 90s, su autoría inicial se le atribuye a Phil R Zimmermann y en su honor también se le conoce como PRZ por las iniciales del autor. Zimmermann desarrolló la aplicación PGP mientras en la sala del Senado los Estados Unidos se discutía sobre la necesidad de exigir a todas los empresas dedicadas al desarrollo de software de cifrado de datos que debían dejarles “puertas traseras” a todos sus desarrollos para poder realizar procesos de criptoanálisis sobre los textos cifrados que fueran generados con dichos desarrollos para poder obtener los textos claros de mensajes sospechosos en caso de que el gobierno lo requiriera11, mientras que lo que buscaba Zimmerman era proveer una herramienta de cifrado seguro de datos a cualquier persona desde su computador personal. Una anécdota particular 11 The 17 Apr 1991 New York Times reports on an unsettling US Senate proposal that is part of a counterterrorism bill. If this nonbinding resolution became real law, it would force manufacturers of secure communications equipment to insert special “trap doors” in their products, so that the Government can read anyone’s encrypted messages. It reads: “It is the sense of Congress that providers of electronic communications services and manufacturers of electronic communications service equipment shall insure that communications systems permit the Government to obtain the plain text contents of voice, data, and other communications when appropriately authorized by law.”. Senate Bill 266, 1991. http://www.cypherspace.org/adam/timeline/. Fecha de última consulta 11 de enero de 2008. sobre PGP fue la manera como se distribuyó inicialmente, pues las restricciones de exportación de software de seguridad en Estados Unidos no permitían obtener copias del software, para lo cual Zimmermann respondió con un libro publicado por MITPress en el que escribía todo el código fuente de PGP, el cual no tenía restricciones de exportación pues se trataba de un libro, de esta manera, los interesados en PGP tomaban el código fuente impreso en el libro y lo escaneaban hasta digitalizarlo todo para luego compilarlo con GNU-C. PGP permite la creación de llaves asimétricas y el uso de mecanismos de cifrado simétrico y asimétrico para firmar y dar confidencialidad a cualquier documento. Usa RSA como mecanismo de cifrado asimétrico y DES, TripleDES e IDEA como mecanismos de cifrado simétrico, entre otros. Este software es un clásico ejemplo de aplicaciones de firmas digitales ya que permite a un usuario firmar sus documentos antes de enviarlos y revisar las firmas de aquellos que le envían mensajes. A través de este software el usuario crea su juego de llaves: pública y privada. La llave pública la puede colocar en algunos repositorios a nivel mundial o mantenerlo local en su máquina (depende de la infraestructura con que se cuente) para enviarla personalmente a sus contactos. La llave privada la guarda dentro de su computador, cifrada con un mecanismo de cifrado simétrico para garantizar que sólo éste la pueda acceder, y cada vez que la quiere usar para firmar un documento debe digitar su clave secreta para descifrar dicha llave privada y así hacer uso de ella. Para mayor información sobre su funcionamiento y uso, visite la página oficial del proyecto en http://www.pgpi.org. Poco a poco PGP se convertió en una aplicación ampliamente usada para la generación de firmas digitales, pero por incluir dentro de sus algoritmos de cifrado de datos algunos algoritmos licenciados, a finales de los 90’2 se creó el proyecto OpenPGP el cual sólo incluye algoritmos de libre distribución, su especificación inicial se encuentra en el RFC-1991 (Agosto de 1996), luego modificado dos años más tarde por en el RFC-2440 y la última modificación salió a finales de 2007 en el RFC-4880. Para mayor información al respecto puede dirigirse a http://www.openpgp.org/ en donde encontrará la información oficial del proyecto. 5.5.6 Certificados digitales y Entidades Certificadoras 5.5.6.1 Generalidades Como se pudo ver en el tema anterior, las firmas digitales son un excelente mecanismo para garantizar que el emisor de un mensaje es quien dice ser y que la información transmitida no ha sido modificada. Pero, ¿qué tan seguros realmente podemos estar de que el emisor es quien dice ser, si es el mismo emisor el que da las pautas para verificarlo?. La firma digital es el resultado de obtener un resumen del texto original y cifrarlo con la llave privada del emisor y su verificación estará basada en descifrar dicha firma con la llave pública del emisor. Pero, ¿cómo estar seguro de que las llaves que se usaron son realmente del origen (de quien dice ser)?, recuerde que hay dos maneras típicas de obtener las llaves públicas de otros, la primera es recibir un correo electrónico del emisor en el que envía su llave pública, y ¿qué tan seguros estamos de que en esa ocasión el emisor si era quien decía ser?, que tal si ese correo fue enviado por B diciendo que era A y que la llave pública de A era K pero realmente se trataba de la llave pública de B, ¿cómo lo detectaríamos?, no podríamos darnos cuenta de eso a no ser que llamemos a A y verifiquemos la llave y aun así podrían ocurrir situaciones extrañas que no nos permitan garantizar que A fue quien envío dicha llave. La otra alternativa de la que se habló en el título anterior eran los repositorios de llaves, en donde se almacenaban las llaves públicas de los usuarios y si alguien llegara a necesitar alguna de ellas podría tomarlas de allí, pero también se tendría la duda de si una llave almacenada allí es realmente de quien decía ser. La solución a esta incertidumbre son las Entidades Certificadoras ya que se trata de terceras partes que pueden dar fe de los propietarios de las llaves asimétricas que administran. Por definición, podemos decir que una Entidad Certificadora (Certification Authority, CA) es “An authority trusted by one or more users to create and assign public-key certificates. Optionally the certification authority may create the users' keys” (ITU-T, 2008). Se trata de una empresa de confianza que emite certificados usados para crear firmas digitales. El certificado contendrá la llave pública del dueño del certificado y la entidad certificadora será la responsable de la custodia de dichos certificados. La entidad certificadora se convierte en pieza clave en una transacción electrónica ya que a través de ella se puede dar garantía de quiénes serán las partes en dicha transacción a partir de entregar los certificados digitales de cada uno de ellos. La entidad Certificadora es similar a lo que una notarias físicas puede hacer cuando valida la identidad de una persona, es un tercero que verifica la identidad de una personas (por ejemplo con su documento de identidad y otros datos) y da fe de que es quien dice ser y para “hacerlo oficial”, coloca su sello de garantía como notaria indicando que se hace responsable de ese certificado de identidad. Y si se requiere, se cuenta con notarias especiales que tienen la capacidad de validar la identidad de las otras notarias12. Las entidades certificadoras hacen un proceso similar a las notarías, pero con llaves públicas, son terceros que almacenan las llaves públicas (o pueden generar el juego de llaves públicas y privadas y entrega al usuario su privada) y se encargan de garantizar a quien lo requiera que esa llave realmente pertenece a quien dice ser. Para ello, cuando se solicita el servicio de una entidad Certificadora, ella verifica los datos del solicitante (para el ejemplo A) y después de esto almacena la llave pública de A (o crea el juego de llaves si es el caso), cuando cualquier persona solicita la llave pública A, la entidad certificadora genera un Certificado digital en el que se encontrará la llave pública de A firmada por la Entidad Certificadora (firma digital de la CA) con lo cual estará garantizando que esa llave pública está bajo su custodia y que pertenece a A. Y si uno requiere validar a la entidad certificadora también se cuenta con la figura de “re-certificadoras” que son entidades certificadoras que se dedican a certificar a otras entidades certificadoras. A toda esta infraestructura u organización de verificación de firmas digitales, llaves públicas de usuarios y entidades certificadoras se le conoce con el nombre de Infraestructura de Llaves públicas o PKI (Public Key Infrastructure) 12 En el caso de Colombia, se trata de la Superintendencia de Notariado y Registro. 5.5.6.2 X.509 Para contar con un mismo tipo de certificados digitales emitidos por diferentes entidades certificadoras, la UIT, hacia finales de los 80’s, definió el estándar X.509 (versiones 1, 2 y 3) que da lineamientos sobre las características que deben tener los certificados digitales (datos, tipos de datos, formato, etc.) y las entidades que los generan y cuya última versión es de octubre de 2012 y se encuenta definida por la ITU (International Telecommunication Union) en el estándar X.509 : Information technology - Open Systems Interconnection - The Directory: Public-key and attribute certificate frameworks. Para el ambiente de Internet, este estándar es aplicado en distintas implantaciones y se encuentran diferentes recomendaciones tales como las primeras mención al estándar en los RFC 1114 de agosto de 1989 y 1422 de Febrero de 1993 - “Privacy Enhancement for Internet Electronic Mail: Part II: Certificate-Based Key Management”, RFC 2459 de enero de 1999 – “Internet X.509 Public Key Infrastructure Certificate and CRL Profile” y el RFC 6818 de enero de 2013 - “Updates to the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile”. La primera versión del estándar se publicó en 1988, la segunda versión se publicó en 1993 y la tercera versión y la actualmente usada hacia principios del siglo XXI. Esta última versión permite crear extensiones al certificado tradicional para dar cabida a características propias o específicas que se deseen. En términos generales, el estándar recomienda incluir la siguiente información dentro del certificado: Versión del certificado: Versión del X.509 Número de serie del certificado: Identificador único del certificado. Es emitido por la Entidad Certificadora como tal. Información del algoritmo del emisor: Se define el algoritmo con el cual se pueden firmar los documentos. Entidad certificadora: Nombre de la entidad certificadora. Validez del certificado: Rango de tiempo (desde/hasta fecha) en el cual el certificado se considera válido. Puede ayudar a realizar periódicamente renovaciones de claves y así aumentar la seguridad. Información de la clave pública del emisor: Llave pública del usuario. Firma de la autoridad emisora: Firma de la entidad certificadora, con la cual da fe de que la información enviada es verdadera y válida. Identificador de la entidad: Número único que identifica a la Entidad Certificadora en todo el mundo. Identificador del usuario: Número único que identifica al usuario dentro de la CA. Puede también contener: nombre, dirección, e-mail del emisor. Algunos ejemplos de Entidades certificadoras son: Verisign, Inc. www.verisign.com. Digital Signature Trust Company CA. www.digsigtrust.com. Thawte Certification. www.thawte.com. Certicamara CA. www.certicamara.com. Federal bridge CA. www.gsa.gov/fbca. Normalmente, a través de las entidades certificadoras es posible hacer las siguientes operaciones: Creación de certificado. Revocación de certificado. Modificación de certificado. Borrado de certificados. Bloqueo de certificados. Consulta de certificados 5.5.6.3 Estructura PKI Una estructura PKI o Public Key Infraestructure es un conjunto de elementos de software, hardware, políticas y procedimientos de seguridad que permiten la implementación de una Entidad Certificadora, a través de esta infraestructura es posible montar un esquema en el cual los clientes y los servidores puedan autenticarse entre ellos haciendo uso de encripción asimétrica, firmas digitales y certificados digitales. Los componentes de una infraestructura de PKI son: La entidad Certificadora (CA): La cual emite y administra las llaves públicas de los usuarios registrados y emite los certificados de los mismos, controla la caducidad de los certificados, modificaciones, anulaciones, etc de los mismos. Una entidad de registro (RA): La cual actúa como intermediaria, es la cara visible de la entidad certificadora, realiza las actividades de registro, revisión y publicación de los certificados de los usuarios. se comunica directamente con la entidad de publicación de llaves, para los usuarios, se podría decir que es la entidad certificadora como tal. Una entidad de publicación de llaves: Es la interface que permite la comunicación entre la entidad de registro y los usuarios como tal. Un conjunto de políticas de funcionamiento de la misma: Dan los lineamientos y responsabilidades de las partes en el proceso de generación y validez de los certificados. Aplicaciones de apoyo a los componentes: Software utilizado para el funcionamiento de los demás componenettes, por ejemplo:OpenCA, EJBCA, IBM PKI y Entrust. Cuando un usuario desea obtener un certificado de la CA se comunica con una interfaz pública a través de la cual hace su solicitud y da los datos que la entidad certificadora requiera, esos datos son enviados a la RA quien se encarga de verificar la veracidad de dichos datos y de administrar las solicitudes de los usuarios. Luego de que los datos son verificados, la RA los entrega a la CA (que normalmente no tiene conexiones de red para evitar vulnerabilidades) quien se encarga de crear las llaves del usuario y ponerles la firma de la CA. Cuando este proceso se ha completado, el usuario y cualquier tercero puede solicitar su certificado a la RA a través de la interface pública, quien entregará la información del usuario siguiendo el estándar X.509. En la figura 5.7 se muestra su estructura (la parte en fondo gris es lo que corresponde a la PKI como tal, es decir, la parte del usuario es independiente): Figura 5.7: Estructura PKI Referencias Brown, R. (1998). Data Encryption Standard (DES). Federal Information Processing Standards Publication, 42-46. Obtenido de http://www.itl.nist.gov/fipspubs/fip46-2.htm Daniellerch.com. (s.f.). El algoritmo RSA y la factorizaci´on. Recuperado el 29 de Noviembre de 2014, de http://daniellerch.com/sources/doc/algoritmo rsa.html Davila, J. (2006/2007). Fotograf´ıas y Detalles de una m´aquina ENIGMA de la. Obtenido de Universidad Politécnica de Madrid: http://porsche.ls.fi.upm.es/Material/Enigma/Enigma.htm Federal Information Processing Standards Publication. (25 de Octubre de 1999). Data Encryption Standar - DES. FIPS PUB 46-3. Estados Unidos: FIPS PUBS. Recuperado el 29 de Noviembre de 2014, de http://csrc.nist.gov/publications/fips/fips46-3/fips46-3.pdf Federal Information Processing Standards Publication. (26 de Noviembre de 2001). Advanced Encryption Standard - AES. FIPS-197. Estados unidos: FIPS PUBS. Recuperado el 29 de Noviembre de 2014, de http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf Federal Information Processing Standards Publication. (Marzo de 2012). Secure Hash Standard. FIPS PPUB 180-4. Estados unidos: FIPS PUBS. Recuperado el 29 de Noviembre de http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf 2014, de Fronteras Electronicas. (12 de Junio de 1998). Recuperado el 22 de 11 de 2014, de http://biblioweb.sindominio.net/telematica/privac.html ITU-T. (2008). X.509. Information technology – Open systems interconnection – The Directory: Public-key and attribute certificate frameworks. Standard. Geneva,: ITU. Recuperado el 29 de Noviembre de 2014, de http://www.itu.int/rec/T-REC-X.509 Lai , X., & Massey, J. L. (1991). A Proposal for a New Block Encryption Standard. Advances in Cryptology-EUROCRYPT'90 Proceedings, LNCS 473, Springer-Verlag, 389-404. Recuperado el 29 de Noviembre de 2014, de http://www.isiweb.ee.ethz.ch/papers/arch/xlai-mass-inspec-1991-2.pdf Rivest, R. (Abril de 1992). RFC 1321 - The MD5 Message-Digest Algorithm. MIT Laboratory for Computer Science and RSA Data Security, Inc. IETF. Recuperado el 29 de Noviembre de 2014, de https://www.ietf.org/rfc/rfc1321.txt Rubio, J. (1999). Seguridad en Redes de Computadores. Notas de clase - Escuela Colombiana de Ingeniería Julio Garavito. Bogotá. Tanembaum, A. (2003). Redes de computadores (4ta ed.). Pearson-Prentice Hall. Vrátný, J. L. (2003). Historia de la criptografía (2da parte). Recuperado el 22 de 11 de 2014, de Latino Seguridad: http://www.latinoseguridad.com/LatinoSeguridad/Reps/Cripto2.shtml Wikipedia. (2007). Enigma (máquina). Obtenido de Wikipedia, la enciclopedia libre: http://es.wikipedia.org/wiki/Enigma (m %C3 %A1quina) Zabata, E. (s.f.). Rijndael Cipher - AES. 4.0. Montevideo, Uruguay. Recuperado el 29 de Noviembre de 2014, de http://www.formaestudio.com/rijndaelinspector/archivos/Rijndael_Animation _v4_eng.swf