Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INNOVACIÓN Y DESARROLLO TECNOLÓGICO EN CÓ MPUTO AALLGGOORRIITTMMOO DDEE E BBLLOOQQUUEESS DDEE 119922 BB EEMMPPLLEEAANNDD TTEESSIISS QQUUEE PPAARR TT ING. JOSÉ JESÚS SOTO SÁNCHEZ Dr M. en C. ROLANDO FLORES CARAPIA México, Distrito Federal INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INNOVACIÓN Y DESARROLLO TECNOLÓGICO EN CÓ MPUTO EENNCCRRIIPPTTAACCIIÓÓNN SSIIMMÉÉTTRRIICCOO QQUUEE BBIITTSS,, CCOONN LLLLAAVVEESS DDEE CCIIFFRRAADDOO DDOO LLOOSS TTEEOORREEMMAASS FFAACCTTOORRIIAALL RRAA OOBBTTEENNEERR EELL GGRRAADDOO DDEE MMAAEE TTEECCNNOOLLOOGGÍÍAA DDEE CCÓÓMMPPUUTTOO PRESENTA: ING. JOSÉ JESÚS SOTO SÁNCHEZ DIRECTORES: Dr. VICTOR MANUEL SILVA GARCÍA M. en C. ROLANDO FLORES CARAPIA , Distrito Federal Junio INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INNOVACIÓN Y DESARROLLO TECNOLÓGICO EN CÓ MPUTO EE PPRROOCCEESSAA OO DDEE 119922 BBIITTSS,, LL YY JJVV EESSTTRRÍÍAA EENN Junio de 2010 CARTA CESION DE DERECHOS En la Ciudad de México el día 21 de junio del año 2010, el que suscribe José Jesús Soto Sánchez, alumno del Programa de Maestría en Tecnología de Cómputo con número de registro B081750, adscrito al Centro de Innovación y Desarrollo Tecnológico en Cómputo, manifiesta que es autor intelectual del presente trabajo de Tesis bajo la dirección del Dr. Víctor Manuel Silva García y del M. en C. Rolando Flores Carapia; cede los derechos del trabajo intitulado “Algoritmo de encriptación simétrico que procesa bloques de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV” al Instituto Politécnico Nacional para su difusión, con fines académicos y de investigación. Los usuarios de la información no deben reproducir el contenido textual, gráficas o datos del trabajo sin el permiso expreso del autor y/o director del trabajo. Este puede ser obtenido escribiendo a la siguiente dirección: jsotos0801@ipn.mx. Si el permiso se otorga, el usuario deberá dar el agradecimiento correspondiente y citar la fuente del mismo. JOSÉ JESÚS SOTO SÁNCHEZ INSTITUTO POLITÉCNICO NACIONAL SECRETARÍA DE INVESTIGACIÓN Y POSGRADO 4 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV RESUMEN El presente trabajo documenta el diseño de un algoritmo de encriptación simétrico que procesa bloques de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV. 5 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV ABSTRACT The present work documents the design of a symmetric encryption algorithm that processes blocks of 192 bits, with cipher keys of 192 bits, using the Factorial and JV theorems. 6 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV AGRADECIMIENTOS Le agradezco Dr. Víctor Manuel Silva García por sacarle brillo a esta piedra; por creer que este fuereño tenía el potencial adecuado para estudiar un posgrado. Gracias por dejarme ser parte de sus desarrollos matemáticos y por explicarme los conceptos cuando no los entendía; por hacerme un espacio en su agenda y por dejarme ser su pupilo. El tiempo invertido y sus enseñanzas valen oro, no tengo como pagarle. Maestro Rolando Flores Carapia, gracias por despertar al programador que todos llevamos dentro, hacía tiempo que no me sentía tan contento programando, es difícil volver a comenzar después de atravesar por desilusiones, pero Usted logró que volviese a enamorarme de las interminables líneas de código y que pasara horas de desvelo viendo cómo iba quedando el ansiado algoritmo simétrico. Agradezco a los docentes integrantes del jurado sus observaciones a este trabajo escrito, han logrado que sea una mejor persona y un mejor profesionista. Dra. Magdalena Marciano Melchor, M. en C. Eduardo Rodríguez Escobar, M. en C. Mauricio Olguín Carbajal, Dr. Edgar Alfredo Portilla Flores. Mi amada Esmeralda, gracias por sacrificar tu tiempo para dejar que terminara mi tesis. Gracias por las incontables tazas de café que me diste cuando me veías absorto frente a la “compu” y las llamadas a comer cuando ya todos estaban a la mesa. Gracias por el apoyo que me has dado desde que iniciamos esta aventura profesional y por el cuidado que le has dado a nuestros hijos cuando papá estaba “desconectado de la realidad”. Espero restituírtelo todo pronto. Sarita, mi nena, gracias por el tiempo que has pasado a mi lado, viendo como papá programaba, leía o tecleaba palabras (interminables) en su laptop. Gracias por quedarte dormida en mis brazos y hacerme levantar de la mesa para llevarte a la cama, para después, regresar al escritorio y pensar lo afortunado que soy por tenerte a mi lado. Caleb, gracias por dejarme trabajar cuando estuviste en cama, aunque ya sabes que no nos gusta verte así. Gracias por jugar con tus hermanos cuando me veías concentrado en el escritorio y por acompañarme a las revisiones de tesis en aquellas maratónicas travesías en metro al CIDETEC. Te agradezco Ángel por tu cariño, me encanta cargarte y darte vueltas, aunque casi me quedo sin espalda; que aburrida sería la vida sin tus interrupciones para jugar en medio de las lecturas interminables o las líneas de código indescifrables. 7 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV Te sigo sorprendiendo José Jesús, a que no sabías que se podía conectar un monitor externo a la laptop para redactar, programar (en tu caso jugar) más rápido, ya ves que papá sigue estando a la vanguardia (o al menos eso creo); claro que no será por mucho tiempo, pues ya me das la vuelta en Age of Empires. Gracias por hacer que siga pensando que estoy un paso delante de ti. Mamá, Papá, gracias por dejarme soñar y estar allí para compartir esos sueños. Elizabeth y David, gracias por cuidar mi corazón y el de mi familia, los quiero. Dios les bendiga. Lic. Mónica I. Bernal, gracias por brindarme la oportunidad de faltar los viernes al trabajo para emprender ese sueño que parecía inalcanzable, ahora vemos los resultados de “aquella locura”. Ing. Georgina Acevedo, gracias por dejar que el hijo del cónsul cambiara mi vida, y me diera otra perspectiva de las cosas. Échale ganas, sí se puede! José David, gracias por dejar que Sheryl Crow estuviese conmigo en esas duras horas de redacción y lectura. Gabriel, gracias por toda la información electrónica que me brindaste, fue aprovechada al máximo. Dios, que sería de mí si no me hubieras alcanzado… Agradezco a todas las personas que de forma directa o indirecta han contribuido para el logro de esta meta profesional. Agradezco al Consejo Mexiquense de Ciencia y Tecnología (COMECyT) su apoyo económico para realizar estos estudios de posgrado; espero no haber defraudado su expectativa para conmigo. 8 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV CCOONNTTEENNIIDDOO ÍÍNNDDIICCEE DDEE FFIIGGUURRAASS ...................................................................................................................... 10 IINNTTRROODDUUCCCCIIÓÓNN ........................................................................................................................... 11 OOBBJJEETTIIVVOO GGEENNEERRAALL .....................................................................................................................14 OOBBJJEETTIIVVOOSS PPAARRTTIICCUULLAARREESS ........................................................................................................... 14 MMEETTAASS PPLLAANNTTEEAADDAASS .................................................................................................................... 14 JJUUSSTTIIFFIICCAACCIIÓÓNN ............................................................................................................................. 15 CCAAPPÍÍTTUULLOO II................................................................................................................................... 16 EESSQQUUEEMMAASS DDEE EENNCCRRIIPPTTAACCIIÓÓNN SSIIMMÉÉTTRRIICCAA ((LLLLAAVVEE PPRRIIVVAADDAA)) ........................................................ 16 CCOONNSSTTRRUUCCCCIIÓÓNN DDEE PPEERRMMUUTTAACCIIOONNEESS PPSSEEUUDDOOAALLEEAATTOORRIIAASS ((AALLGGOORRIITTMMOOSS SSIIMMÉÉTTRRIICCOOSS DDEE BBLLOOQQUUEESS)) .................................................................................................................................... 18 REDES DE SUSTITUCIÓN PERMUTACIÓN XOR ........................................................................... 21 EL PARADIGMA DE CONFUSIÓN-DIFUSIÓN ............................................................................... 24 ESTÁNDAR DE ENCRIPTACIÓN DE DATOS (DATA ENCRYPTION STANDARD - DES) ...................... 28 ESTÁNDAR AVANZADO DE ENCRIPTACIÓN (AES) ...................................................................... 29 CCAAPPÍÍTTUULLOO IIII .................................................................................................................................. 31 DDEESSCCRRIIPPCCIIÓÓNN DDEE DDEESS ................................................................................................................... 31 DDEESSCCRRIIPPCCIIÓÓNN DDEE TTRRIIPPLLEE--DDEESS........................................................................................................ 35 DDEESSCCRRIIPPCCIIÓÓNN DDEE AAEESS ................................................................................................................... 36 CCAAPPÍÍTTUULLOO IIIIII ................................................................................................................................. 48 FFUUNNDDAAMMEENNTTOOSS MMAATTEEMMÁÁTTIICCOOSS .................................................................................................. 48 TEOREMA JV ............................................................................................................................ 50 TEOREMA FACTORIAL .............................................................................................................. 52 DDIISSEEÑÑOO DDEELL AALLGGOORRIITTMMOO SSIIMMÉÉTTRRIICCOO PPRROOPPUUEESSTTOO ....................................................................... 55 CCAAPPÍÍTTUULLOO IIVV ................................................................................................................................ 61 9 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV AANNÁÁLLIISSIISS DDEE RREESSUULLTTAADDOOSS DDEELL AALLGGOORRIITTMMOO PPRROOPPUUEESSTTOO ............................................................. 61 CCOONNCCLLUUSSIIOONNEESS............................................................................................................................ 75 TTRRAABBAAJJOO AA FFUUTTUURROO ..................................................................................................................... 77 RREEFFEERREENNCCIIAASS ............................................................................................................................... 79 GGLLOOSSAARRIIOO .................................................................................................................................... 81 AANNEEXXOO 11 ...................................................................................................................................... 84 1 0 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV ÍÍNNDDIICCEE DDEE FFIIGGUURRAASS 1. Red de Sustitución-Permutación (23) 2. Función f del algoritmo DES (32) 3. Esquema de llaves del algoritmo DES (33) 4. Llaves débiles para el algoritmo DES (16 bits), expresadas en hexadecimal (34) 5. Llaves semidébiles para el algoritmo DES (16 bits), expresadas en hexadecimal (34) 6. Representación de Triple-DES (35) 7. SubBytes( ) aplica las cajas-S a cada byte del arreglo State (41) 8. S-Box: valores de sustitución por cada byte xy (en formato hexadecimal) (42) 9. ShiftRows( ) corrimientos cíclicos en los últimos tres renglones del arreglo State (43) 10. MixColumns( ) opera en el arreglo State columna por columna (44) 11. AddRoundKey( ); opera cada columna del arreglo State con una llave a través de una operación XOR (45) 12. Algoritmo de mezclado de la información (57) 13. Ronda 16 del algoritmo simétrico propuesto (57) 14. Bits utilizados en cada ronda para obtener las 17 llaves requeridas (59) 15. Biblioteca en C++ para manejo de números grandes (61) 16. Permutaciones sobre 128 y 192 posiciones (65) 17. Cifrado de una cadena de 192 bits (67) 18. Descifrado del mensaje original (68) 19. Cifrado y creación del archivo de texto (69) 20. Lectura del archivo de texto y descifrado (70) 21. Cifrado y creación del archivo de texto, datos nuevos (71) 22. Lectura del archivo de texto y descifrado, datos nuevos (72) 1 1 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de IINNTTRROODDUUCCCCIIÓÓNN El secreto es el corazón de la criptografía mantener la información de manera modernas son transformaciones matemáticas (algoritmos), las cuales como números o elementos algebraicos en un espacio y sufren una transformación de “mensajes con significado” a “mensajes significado” y una entrada al algor “ininteligible” a menudo se conoce como Para restablecer la información, una transformación de cifrado debe ser reversible y la transformación que permite efectuar esto se conoce con el nombre de Convencionalmente, los algoritmos de cifrado (encripta (desencriptación) son parametriz un algoritmo de descifrado más la descripción en el formato de mensajes y un sistema criptográfico, también Los algoritmos de encriptación modernos incorporan una secuencia de permutaciones y sustituciones, así como operaciones (operaciones binarias lógicas excluyentes). Se denominan simétricos porque utilizan llaves que sirven para llevar a cabo el encriptamiento y a su vez, el proceso inverso, denominado desencriptamiento. Estos algoritmos pueden encriptar una cantidad específica (longitud fija de bits) datos” y suelen ser cadenas Al momento de elaboración de este trabajo existen por bloques: Data Encryption Standard han sido considerados Estándares Internacionales Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV El secreto es el corazón de la criptografía. Encriptar (cifrar) es una práctica que permite mantener la información de manera secreta. Las técnicas de encriptación ( modernas son transformaciones matemáticas (algoritmos), las cuales como números o elementos algebraicos en un espacio y sufren una transformación de “mensajes con significado” a “mensajes ininteligibles”. Un mensaje en la región “con significado” y una entrada al algoritmo de cifrado es llamado texto claro a menudo se conoce como texto cifrado o encriptado (1) información, una transformaciónde cifrado debe ser reversible y la ite efectuar esto se conoce con el nombre de Convencionalmente, los algoritmos de cifrado (encriptación) y de descifrado ) son parametrizados por llaves criptográficas. Un algoritmo de cifrado y un algoritmo de descifrado más la descripción en el formato de mensajes y un sistema criptográfico, también denominado criptosistema (1). de encriptación modernos incorporan una secuencia de permutaciones y uciones, así como operaciones o-exclusiva, XOR, denotada por el símbolo lógicas excluyentes). Se denominan simétricos porque utilizan llevar a cabo el encriptamiento y a su vez, el proceso inverso, denominado desencriptamiento. Estos algoritmos pueden encriptar una cantidad (longitud fija de bits) de un mensaje, al cual se le conoce como “bloque de en ser cadenas de 64 ó 128 bits. momento de elaboración de este trabajo existen dos algoritmos modernos de cifrado ption Standard (DES) y Advanced Encryption Standard ( han sido considerados Estándares Internacionales y usados en un principio para encriptar Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV es una práctica que permite encriptación (cifrado) modernas son transformaciones matemáticas (algoritmos), las cuales tratan los mensajes como números o elementos algebraicos en un espacio y sufren una transformación de Un mensaje en la región “con texto claro , la salida (1). información, una transformación de cifrado debe ser reversible y la ite efectuar esto se conoce con el nombre de descifrado . ción) y de descifrado Un algoritmo de cifrado y un algoritmo de descifrado más la descripción en el formato de mensajes y llaves forman de encriptación modernos incorporan una secuencia de permutaciones y denotada por el símbolo lógicas excluyentes). Se denominan simétricos porque utilizan llevar a cabo el encriptamiento y a su vez, el proceso inverso, denominado desencriptamiento. Estos algoritmos pueden encriptar una cantidad , al cual se le conoce como “bloque de modernos de cifrado ption Standard (AES) que y usados en un principio para encriptar 1 2 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV datos no confidenciales (que no representaban riesgos de seguridad nacional para el Gobierno de los Estados Unidos de Norteamérica). El primero de ellos, surge en 1977, gracias al algoritmo desarrollado por Horst Feistel (LUCIFER) para la empresa IBM (2) y fue ampliamente utilizado para llevar a cabo transacciones monetarias en los bancos de E.U.A. Hasta que en 1998 (3) se anuncio que DES había sido “roto” por un ataque de fuerza bruta en 4.5 días con una computadora que contenía 17 tarjetas madre con 64 procesadores y era capaz de procesar 90 billones de llaves cada segundo, quedando fuera de la norma. Por tanto, surge la necesidad de incrementar la seguridad en el algoritmo de cifrado, puesto que DES se encargaba de cifrar bloques de 64 bits con llaves de 56 bits. En este contexto, en el año 2000 surge AES, un algoritmo desarrollado por los criptógrafos de origen Belga Daemen y Rijmen, el cual encripta bloques de 128 bits, usando llaves de 128, 192 y 256 bits. El objetivo de este trabajo es diseñar e implementar en software un algoritmo simétrico que sea capaz de cifrar bloques de 192 bits con llaves de 192 bits, empleando los teoremas Factorial (4) y JV (5); ambos desarrollados por el Dr. Víctor Manuel Silva García en el Centro de Innovación y Desarrollo Tecnológico en Cómputo (CIDETEC) perteneciente al Instituto Politécnico Nacional (IPN) de la ciudad de México, los cuales brindarán un nivel de seguridad aceptable, al menos 21182, debido a que propone usar permutaciones variables (y no fijas) en el mezclado de la información. En el capítulo I el lector encontrará información referente a los sistemas de encriptación que utilizan la misma llave para efectuar su trabajo, así como información referente con las Redes de Sustitución-Permutación (Substitution Permutation Network, SPN) que son utilizadas en el proceso de mezclado de la información. El capítulo II abarca lo referente a los criptosistemas Data Encryption Standard (DES), Triple-DES y Advanced Encryption Standard (AES), que son las normas internacionales, utilizados para procesar información bancaria y no confidencial, entre otras aplicaciones. 1 3 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV El capítulo III expone los teoremas JV y Factorial, que son las bases matemáticas para manipular números del orden 10215 (128!-1), frente a números del orden 10356 (192!-1), permitiendo ahorrar tiempo y recursos computacionales cuando se desarrolla software. Al mismo tiempo, describe el algoritmo que permite procesar bloques de datos de 192 bits utilizando llaves del mismo tamaño, así como el algoritmo para generar las llaves usando la función de expansión de llaves del estándar AES-192. El último de los capítulos que conforman este escrito, analiza los resultados del algoritmo propuesto y enuncia las conclusiones a las que llegó el que suscribe; además, se formulan propuestas, que servirán como base para continuar investigando en este campo de la seguridad informática. 1 4 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV OOBBJJEETTIIVVOO GGEENNEERRAALL Diseñar e implementar en software un algoritmo de encriptación simétrico que procese bloques de 192 bits, utilizando llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV con objeto de operar números del orden 10215 en la construcción de permutaciones variables en lugar de números del orden de 10356 y así reducir el número de operaciones de cómputo, buscando aumentar la seguridad en el cifrado de datos. OOBBJJEETTIIVVOOSS PPAARRTTIICCUULLAARREESS - Diseñar un algoritmo de mezclado de la información, utilizando bloques de 192 bits utilizando el teorema Factorial y JV. - Diseñar un algoritmo de programa de llaves (key schedule) de 192 bits. MMEETTAASS PPLLAANNTTEEAADDAASS - Diseñar e implementar en lenguaje C++ un algoritmo de encriptación simétrico que procese bloques de 192 bits, con llaves de cifrado de 192 bits. - Generar las pruebas y resultados del algoritmo de encriptación cifrando información en una pc y descifrando en otra, así como llevar a cabo una descripción de un criptoanálisis por búsqueda exhaustiva de llaves. 1 5 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV JJUUSSTTIIFFIICCAACCIIÓÓNN Partiendo del hecho que los algoritmos actuales de cifrado que son simétricos, en particular el estándar internacional hasta finales del siglo XX, DES, utilizan permutaciones fijas para llevar a cabo el mezclado de la información. En este trabajo se propone el diseño de un algoritmo simétrico de cifrado para bloques de 192 bits, con permutaciones variables, para lo cual se utilizan los teoremas JV y Factorial. El que las permutaciones sean variables permite incrementar de manera importante la complejidad computacional de los algoritmos simétricos. Ahora bien, para construir permutaciones variables utilizando los teoremas mencionados anteriormente se procede de la siguiente manera: se proponen tres números enteros positivos no mayores a 128!-1, usando el teorema JV se asocia a cada uno de ellos una permutación de 128 posiciones; una vez que se obtienen 3 permutaciones de esta índole, se procede a la construcción deuna permutación sobre 192 posiciones utilizando el teorema Factorial, dicha permutación se utiliza en el algoritmo para la generación de las llaves y para llevar a cabo el proceso de mezclado de la información, logrando con esto un ahorro de recursos computacionales, porque si se construye la permutación de forma directa sobre cadenas de 192 posiciones usando el teorema JV, se operarían con números del orden de 10356, mientras que con el uso del teorema Factorial antes mencionado se trabajarían con números del orden de 10215. Por último, el ahora estándar internacional AES comúnmente utiliza llaves de 128 bits, brindando un nivel aceptable de seguridad, dado que es resistente a ataques conocidos a la fecha; con respecto a un ataque de fuerza bruta se requerirán al menos 2128 búsquedas para encontrar una llave que sea utilizada para descifrar un mensaje, lo cual por el momento no es factible. En este trabajo se propone el uso de llaves de 192 bits, incrementando la seguridad un nivel de al menos 21182 debido al empleo de permutaciones variables y no fijas. 1 6 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV CCAAPPÍÍTTUULLOO II EESSQQUUEEMMAASS DDEE EENNCCRRIIPPTTAACCIIÓÓNN SSIIMMÉÉTTRRIICCAA ((LLLLAAVVEE PPRRIIVVAADDAA)) De acuerdo con los autores Menezes, Oorschot y Vanstone, un esquema de cifrado simétrico puede utilizar llaves privadas o llaves públicas (6). El enfoque en este trabajo será en los algoritmos de cifrado por bloque (block cipher) que utilizan llaves privadas. Un algoritmo de cifrado simétrico por bloque es una función donde se mapean n-bits de un texto plano (plaintext block) en n-bits de un texto encriptado (ciphertext block); n es llamada la longitud del bloque (blocklength). Esto puede verse como un simple cifrador de sustitución con un tamaño de carácter grande (largo). La función es parametrizada por una k-bit llave K, tomando valores de un subconjunto k (el espacio de llaves o esquema de llaves, Key Schedule) de un conjunto de todos los k-bits vectores Vk. Se asume y es deseable en la medida de lo posible, que todas las llaves sean generadas aleatoriamente. Una vez más, conforme a lo escrito por Menezes, Oorschot y Vanstone (6), para lograr un desencriptado único, la función para encriptar debe ser uno a uno (esto es, invertible). Para un n-bit texto claro, un n-bit texto cifrado y una llave fija, la función es una biyección. Cada llave potencialmente define una biyección diferente. Como se ha mencionado en la parte introductoria del trabajo, se llama esquema de encriptación simétrico porque la llave que se utiliza para llevar a cabo la encriptación es la misma que se utiliza para la desencriptación. Diferentes autores utilizan letras distintas para representar los elementos que intervienen en los algoritmos de cifrado, sin embargo, en esencia y sintácticamente, un criptosistema consiste en: (1) 1 7 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV • Un espacio de mensajes planos M: un conjunto de cadenas de caracteres sobre algún alfabeto, • Un espacio de mensajes cifrados C: un conjunto de posibles mensajes cifrados, • Un espacio de llaves de encriptación K: un conjunto de posibles llaves de encriptación, y un espacio de llaves de desencriptación K´: un conjunto de posibles llaves de desencriptación, • Un algoritmo eficiente de generación de llaves G: N → K x K´ • Un algoritmo eficiente de encriptación E: M x K → C • Un algoritmo eficiente de desencriptación D: C x K´ → M. La mayoría de los algoritmos de cifrado simétricos se apoyan en los conceptos de confusión y difusión (que serán explicados posteriormente), los cuales se combinan para dar lugar a los denominados algoritmos de cifrado de producto (7). Estas técnicas consisten básicamente en partir el mensaje en cadenas de tamaño fijo (bloques) y aplicar la función de cifrado a cada uno de ellos. Lo que se hace en la mayoría de los algoritmos de cifrado simétricos es intercalar la confusión (sustituciones simples) y la difusión (permutaciones). Esta combinación se conoce como cifrado de producto. La mayoría de los algoritmos se basan en diferentes capas de sustituciones y permutaciones, estructura que se llama Red de Sustitución- Permutación. Además, también se pueden intercalar operaciones binarias XOR para mezclar la información y brindar un nivel de seguridad mayor que efectuar alguna de estas operaciones por sí solas. 1 8 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV CCOONNSSTTRRUUCCCCIIÓÓNN DDEE PPEERRMMUUTTAACCIIOONNEESS PPSSEEUUDDOOAALLEEAATTOORRIIAASS ((AALLGGOORRIITTMMOOSS SSIIMMÉÉTTRRIICCOOSS DDEE BBLLOOQQUUEESS)) Como se ha mencionado anteriormente, los algoritmos de cifrado actuales incorporan una secuencia de permutaciones, sustituciones y operaciones XOR (8). El diseño común en este tipo de algoritmos es hacerlo a través de iteraciones (repeticiones). Un ejemplo clásico de un algoritmo de cifrado iterativo es aquel que requiere la especificación de una “función ronda” (vuelta) y un “esquema de llaves” (Key Schedule), donde la encriptación de un texto en claro será llevada a través de Nr rondas similares. Se define una llave, K, como la secuencia aleatoria de bits de una longitud específica. K es utilizada para construir las Nr rondas de llaves (también denominadas sub-llaves), las cuales se denotan como K1, K2, … , KNr. El conjunto de sub-llaves (K1, K2, … , KNr), es el denominado esquema de llaves. La función que define las rondas, denominada f, tiene dos argumentos de entrada: una llave de inicio (Kr) y un bloque de entrada (el cual se denota por wr-1). El próximo estado está definido como wr = f (wr-1,Kr). El estado inicial, w0, esta dado por el texto en claro, x. El texto encriptado, y, está definido cuando todas las Nr rondas se han completado. Por tanto, las operaciones de cifrado están dadas como sigue: w0 � x w1 � f (w0, K1) w2 � f (w1, K2) . . . . . . 1 9 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV . . . wNr-1 � f (wNr-2, KNr-1) wNr � f (wNr-1, KNr) y � wNr. Para que el descifrado sea posible, la función f debe ser inyectiva (esto es, uno a uno), definida de dominio a contradominio. Cuando el contradominio se vuelve el dominio y el dominio original se vuelve contradominio, se puede decir que existe una función f-1 con la propiedad de sobreyectividad: f-1(f(w,y),y)=w para todas las w e y. El proceso de descifrado se ve de manera inversa, como sigue: wNr � y wNr-1 � f-1(wNr, KNr) . . . . . . . . . w1 � f-1(w2, K2) w0 � f-1(w1, K1) x � w0. Por otro lado, la definición de una Red de Sustitución-Permutación (Substitution Permutation Network, SPN), es un tipo especial de algoritmo de encriptación iterativo con un par de pequeños cambios. Supongamos que l y m son enteros positivos. Se tiene un texto en claro y un texto encriptado, ambos deberán ser cadenas de longitud (l)(m) (esto es, (l)(m) se denomina la longitud del bloque del algoritmo de cifrado). Una SPN está construida por dos componentes, los cuales se denotan por πs y πp. πs: {0; 1} l � {0; 1}l es una permutación; πp : {1,…,(l)(m)} � {1,…,(l)(m)} 2 0 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV también es una permutación. La permutación πs es llamada S-box (la letra "S" denota “sustitución"). Ésta esutilizada para reemplazar r bits con un conjunto diferente de r bits. πp, por otro lado, es usada para permutar (l)(m) bits. Las Redes de Sustituciones-Permutaciones tienen características muy atractivas. Primero, su diseño es simple y muy eficiente, se puede implementar en hardware y software. En software, una S-box es usualmente implementada como una matriz cuadrada de n-renglones por n-columnas. En implementaciones de hardware, se requiere usar S-box relativamente pequeñas (8). Los estándares de cifrado de bloques, DES y AES cifran bloques de datos de 64 y 128 bits respectivamente, utilizando llaves de 56 (DES) y 128, 192, 256 (AES) bits. Para que un algoritmo de cifrado por bloques sea considerado “bueno”, debe ser capaz de soportar los ataques denominados “búsquedas de llaves por fuerza bruta o búsqueda exhaustiva” (9). Se debe observar que la finalidad de un algoritmo de cifrado por bloques es que permanezca irrompible en una cantidad de tiempo razonable (digamos por ejemplo, 20 años utilizando la tecnología disponible al momento). 2 1 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de REDES DE SUSTITUCIÓN Una Red de Sustitución-Permutación consiste de última de ellas, la cual es ligeramente diferente), seguida por una permutación usando aplica una llave a través de una operación binaria De acuerdo con el autor Stinson y permutaciones (πp). Sean l, m y Nr enteros positivos, sea {1,…,(l)(m)} � {1,…,(l)(m)} una permutación también. Sean subconjunto de ({0; 1}lm)Nr+1 inicial. Desde el esquema de llaves un texto plano x utilizando el siguiente algoritmo: Algoritmo SPN (x, πs, πp, ( w0 � x for r � 1 to Nr – 1 ur � wr-1 Kr for i � 1 to m do vr <i> � π wr � (vrπp(1), …., v r π u Nr � w Nr-1 K Nr for i � 1 to m Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV CIÓN PERMUTACIÓN XOR Permutación consiste de Nr rondas. En cada ronda (salvo la última de ellas, la cual es ligeramente diferente), se realizan m sustituciones usando permutación usando πp. Antes de cada operación de sustitución, se una llave a través de una operación binaria XOR (8). De acuerdo con el autor Stinson (8), se describirá una SPN, basada en sustituciones ( enteros positivos, sea πs: {0; 1} l � {0; 1}l una permutación, y } una permutación también. Sean P=C= {0; 1 Nr+1 todas las posibles llaves que son obtenidas de una llave K esquema de llaves (K1, K2, … , KNr+1), se llevará a cabo la encriptación de utilizando el siguiente algoritmo: , (K1, K2, … , KNr+1)) πs (u r <i>) πp(lm)) Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV rondas. En cada ronda (salvo la sustituciones usando πs, Antes de cada operación de sustitución, se se describirá una SPN, basada en sustituciones (πs) una permutación, y πp : 0; 1}lm , y sea K un todas las posibles llaves que son obtenidas de una llave K a cabo la encriptación de 2 2 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de do v Nr<i> � πs (u Nr<i> y � vNr K Nr+1 output (y) En el algoritmo anterior, ur es la salida de las cajas- permutación πp , y entonces ronda kr+1 (a esto se le conoce como permutación πp no se aplica. El algoritmo para encriptación también se utiliza para desencriptar, claro está, sufriendo algunas modificaciones en el esquema de llaves y en las cajas-S, debido a que inversas. La figura 1, representa una red de sustitución plano, x) en 3 rondas, contiene 4 cajas de sustitución y utiliza 4 llaves de 16 bits como resultado un texto cifrado, Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV <i>) representa la entrada a las cajas-S (S-boxes -S en la ronda r. wr es obtenida a partir de , y entonces ur+1 es construida desde wr con una operación XOR en la (a esto se le conoce como ronda de mezclado de llaves). En la última ronda, la no se aplica. El algoritmo para encriptación también se utiliza para , sufriendo algunas modificaciones en el esquema de llaves y en debido a que para llevar a cabo la desencriptación se utilizan La figura 1, representa una red de sustitución-permutación que procesa 16 bits (texto ) en 3 rondas, contiene 4 cajas de sustitución y utiliza 4 llaves de 16 bits como resultado un texto cifrado, y, de longitud 16 (bits). Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV boxes) en la ronda r, y vr es obtenida a partir de vr aplicando la con una operación XOR en la ). En la última ronda, la no se aplica. El algoritmo para encriptación también se utiliza para , sufriendo algunas modificaciones en el esquema de llaves y en para llevar a cabo la desencriptación se utilizan sus funciones que procesa 16 bits (texto ) en 3 rondas, contiene 4 cajas de sustitución y utiliza 4 llaves de 16 bits, para dar 2 3 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV Figura 1. Red de Sustitución-Permutación Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV 2 4 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV EL PARADIGMA DE CONFUSIÓN-DIFUSIÓN Un concepto importante cuando se habla de criptografía es el llamado índice de coincidencia (index of coincidence) definido por W.F. Friedman (14) (15) (16), el cual indica la probabilidad de que dos letras (caracteres) seleccionadas al azar del texto cifrado sean idénticas. Este concepto es importante porque ayuda a determinar el tipo de algoritmo de cifrado que se utiliza al encriptar un texto: mono-alfabético o poli-alfabético. Cabe aclarar al lector que, un algoritmo de cifrado mono-alfabético es aquel en el que sólo hay un alfabeto de cifrado, lo cual a su vez significa que se encripta siguiendo la misma transformación. Por ejemplo, el algoritmo César cambia siempre una letra A por una D, así el descifrado se da sustituyendo la letra D por la A. Por otro lado, en un algoritmo poli- alfabético, hay más de un alfabeto de cifrado, lo que a su vez significa que, la relación entre el texto cifrado y el texto plano es una sustitución variable, lo que dificulta encontrar dicha relación para descifrar un texto cifrado. Ahora bien, de acuerdo con el autor Richard A. Mollin (14), se sabe que el índice de coincidencia para un algoritmo de cifrado mono-alfabético es de 0.065 y el índice de coincidencia para un algoritmo poli-alfabético esta en el rango de 0.0385 a 0.065, tomando en cuenta el alfabeto de letras del idioma inglés. Además, para llaves de longitud grande el índice de coincidencia para algoritmos de cifrado poli-alfabéticos deberá ser cercano a 0.0385. Siguiendo el orden de ideas anteriores, para cualquier lenguaje como el inglés o español, los cuales contienen un alfabeto de 26 letras (27 en español, tomando en cuenta la ñ), en el cual cada letra tiene la misma frecuencia de aparición, tenemos que el índice de coincidencia es aproximadamente: 26(1/26)2=0.038. Por otro lado, de acuerdo con el autor Schneier (16) la Teoría de la Información define la cantidad de información contenida en un mensaje como elmínimo número de bits 2 5 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV necesarios para codificar todos los posibles significados del mensaje, asumiendo que todos los mensajes tienen la misma probabilidad. Formalmente, la cantidad de información en un mensaje, M, es medido a través de la entropía del mensaje, denotado por H(M). Por ejemplo, la entropía de un mensaje indicando el día de una semana es ligeramente menor a 3 bits. En general, la entropía de un mensaje medido en bits es log 2n, donde n es el número de posibles significados (codificaciones). Se asume que cada codificación tiene la misma probabilidad. La entropía de un mensaje también mide la incertidumbre, esto es, el número de bits pertenecientes al mensaje claro necesarios para ser recobrado cuando el mensaje es convertido en mensaje cifrado. En el mismo orden de ideas, la frecuencia de un lenguaje esta dado por r=H(M)/N, donde N es la longitud del mensaje. La frecuencia del lenguaje Inglés toma varios valores entre 1.0 bits/carácter y 1.5 bits/carácter, para valores grandes de N. Shannon decía que la entropía depende de la longitud del texto. Específicamente él indicó una frecuencia de 2.3bits/carácter para 8 trozos de caracteres. Por otro lado, Thomas Cover utilizando técnicas de estimación encontró que la entropía era de 1.3 bits/carácter. Ahora bien, la frecuencia absoluta de un lenguaje es el máximo número de bits que pueden ser codificados en cada carácter, asumiendo que cada carácter tiene la misma probabilidad de aparición. Si hay L caracteres en un lenguaje, la frecuencia absoluta está dada por R=log 2L. Esto último representa la máxima entropía de los caracteres de forma individual. Para el lenguaje Inglés (español), con 26 letras, la frecuencia absoluta es log226, aproximadamente 4.7bits/carácter. A partir de las ideas expuestas anteriormente, se puede deducir que los lenguajes naturales son altamente redundantes. Ahora bien, la redundancia de un lenguaje, denotado por D, se define como: D=R-r. Por tanto, la redundancia para el lenguaje inglés es 4.7bits/carácter menos 1.3 bits/carácter, lo que representa 3.4 bits/carácter. Dicho en otras palabras, cada carácter del lenguaje Inglés acarrea 3.4 bits de información redundante. Lo cual es muy cercano al lenguaje Español. 2 6 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV En un mensaje en código ASCII, se tiene que hay 1.3 bits de información por byte perteneciente al mensaje. Esto significa que 6.7 bits representan información redundante, por consecuencia se tiene una redundancia de 0.84 bits de información por bit de texto ASCII, y una entropía de 0.16 bits de información por bit de texto ASCII. Ahora bien, Shannon también concluyó que la entropía de un criptosistema es una medida del tamaño del número de llaves posibles, K, y que esto se podía representar con la fórmula H(K)=log2 K. Así, para un criptosistema con longitud de 64 bits en sus llaves, se tiene que la entropía del criptosistema es de 64 bits; para un criptosistema de 128 bits en sus llaves, la entropía del criptosistema es de 128 bits. En general, mientras más grande sea la entropía del criptosistema, más difícil será vulnerarlo por búsqueda exhaustiva de llaves. Para el algoritmo propuesto, que utiliza llaves de 192 bits, la entropía del criptosistema sería de 192 bits. Bien, la definición que dio Shannon a la distancia de unicidad, U, es una aproximación de la cantidad de texto cifrado, tal que la suma de la información real (entropía) en el correspondiente texto plano más la entropía de las llaves de cifrado sea igual al número de bits utilizados en el texto cifrado. Dicho de otra forma, para los criptosistemas simétricos, la distancia de unicidad está definida como la entropía del criptosistema divida por la redundancia del lenguaje. U=H(K) / D. La distancia de unicidad entre más grande mejor. Esto es, entre mayor sea la distancia de unicidad, más robusto será el criptosistema y más difícil de vulnerar. Por otra parte, si una persona lee un mensaje en el que faltan algunas letras, normalmente puede reconstruirlo. Esto sucede porque casi todos los símbolos de un lenguaje natural contiene información que se puede extraer de los símbolos alrededor (información que, en la práctica, se está enviando dos o más veces), o en otras palabras, porque el lenguaje natural es redundante. Puesto que tenemos mecanismos para definir la cantidad de información que presenta un suceso, se puede intentar medir el exceso de información (redundancia) de un lenguaje (7). 2 7 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV Ahora bien, existen dos técnicas básicas para ocultar la redundancia en un texto claro, a saber, la confusión y la difusión. Estos conceptos a pesar de su antigüedad resultan de un gran valor en criptografía moderna. La confusión trata de ocultar la relación entre el texto claro y el texto cifrado, dicha relación se da a partir de la llave, K, empleada, puesto que si no existiera jamás podríamos descifrar los mensajes. El mecanismo más simple de confusión es la sustitución, que consiste en cambiar cada ocurrencia de un símbolo en el texto claro por otro. La sustitución puede ser tan simple o tan compleja como uno desee (7). La difusión diluye la redundancia del texto claro repartiéndola a lo largo de todo el texto cifrado. El mecanismo más elemental para llevar a cabo una difusión es la transposición, que consiste en cambiar de sitio elementos individuales del texto claro (7), dicho con otras palabras, una difusión se logra usando permutaciones. 2 8 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV ESTÁNDAR DE ENCRIPTACIÓN DE DATOS (DATA ENCRYPTION STANDARD - DES) La Federal Information Processing Standards Publication Series (FIPS PUB) perteneciente al Instituto Nacional de Estándares y Tecnología (National Institute of Standards and Technology NIST) es la serie oficial de publicaciones relacionados con estándares y normas adoptadas y promulgadas bajo la provisión de la sección 5131 de la Acta de Reforma de la Dirección de Tecnologías de la Información de 1996 (Publicación de Ley 104-106) y de la Acta de Seguridad en Cómputo de 1987 (Publicación de Ley 100- 235) de los Estados Unidos. Estos mandatos de ley han proporcionado a la Secretaría de Comercio y al NIST importantes responsabilidades para mejorar la utilización y dirección de los sistemas de cómputo y los sistemas relacionados con las telecomunicaciones en el Gobierno Federal. El NIST, a través de su Laboratorio de Tecnologías de la Información, provee liderazgo, asistencia técnica y coordinación de Gobierno que permite desarrollar estándares y normas en estas áreas (10). Cuando DES se utiliza en conjunto con el estándar X9.52 del American National Standards Institute (ANSI), provee una descripción completa de los algoritmos para la encriptación y desencriptación de información en código binario. La Encriptación de datos significa convertirlos a una forma initeligible llamada cifrado. Desencriptar datos significa convertir los datos cifrados a su forma original, llamado texto plano. DES describe ambas operaciones, las cuales están basadas en un número binario llamado llave (key) (10). Una llave DES consiste de 64 dígitos binarios, bits (“0”s, “1”s), de los cuales 56 bits son generados aleatoriamente y usados directamente por el algoritmo. Los restantes 8 bits, no son utilizados por el algoritmo y pueden serusados para la detección de errores. Los usuarios autorizados para accesar a un sistema de cómputo que cifre datos con DES, deben poseer la llave que fue usada para encriptar, para utilizarla en reversa y poder llevar a cabo el proceso de desencriptación (10). 2 9 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV La seguridad criptográfica de los datos depende de la seguridad provista por las llaves utilizadas al encriptar y desencriptar los datos. Los datos pueden ser recuperados desde el algoritmo solamente utilizando la misma llave utilizada para el proceso de encriptación. Puede ser posible determinar la llave de cifrado llevando a cabo un ataque exhaustivo de fuerza bruta, el cual consiste en adivinar la llave que fue utilizada para llevar a cabo el proceso de encriptación, probando llaves a través de un diccionario de llaves. ESTÁNDAR AVANZADO DE ENCRIPTACIÓN (AES) En Enero de 1997, el Instituto Nacional de Estándares y Tecnología de los Estados Unidos (United States’ National Institutte of Standards and Technology, NIST) formulaba el anuncio para desarrollar un nuevo algoritmo de cifrado simétrico como el nuevo estándar para reemplazar al algoritmo DES. El nuevo algoritmo debería llamarse Estándar Avanzado de Encriptación (Advanced Encription Standard, AES). A diferencia del proceso cerrado que se llevó a cabo para el diseño de DES, un comunicado público fue formalmente hecho en Septiembre de 1997 para el diseño del algoritmo AES. Este anuncio estipulaba que AES debería ser un algoritmo de encriptación simétrico sin clasificar, de carácter público; debería soportar (como mínimo) tamaños de bloque de 128 bits, llaves de 128, 192 y 256 bits, y debería tener una fortaleza de cifrado al nivel de triple DES pero debería ser más eficiente. Además, el algoritmo, de ser seleccionado, debería estar disponible para todo el mundo de forma libre (1). El 20 de agosto de 1998, NIST anunció un grupo de 15 algoritmos candidatos para convertirse en el estándar AES. Estos algoritmos habían sido analizados por miembros de la comunidad criptográfica alrededor del mundo. Se solicitaron comentarios públicos como revisión inicial para los 15 algoritmos candidatos (el periodo para emitir los comentarios 3 0 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV públicos iniciales fue denominado primer ronda). La primer ronda finalizó el 15 de abril de 1999. Usando los análisis y comentarios recibidos, NIST seleccionó cinco algoritmos finalistas. Los algoritmos seleccionados fueron: MARS, RC6, Rijndael, Serpent y Twofish. Estos algoritmos finalistas fueron sometidos a una segunda ronda de análisis con mayor profundidad. Ésta segunda ronda de análisis se cerró el 15 de mayo del año 2000. El 2 de octubre de ese mismo año, NIST anunció que se había seleccionado el algoritmo Rijndael para ser el próximo Estándar Avanzado de Encriptación (1). Rijndael fue diseñado por dos criptógrafos de origen Belga: Joan Daemen y Vincent Rijmen (3). 3 1 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV CCAAPPÍÍTTUULLOO IIII DDEESSCCRRIIPPCCIIÓÓNN DDEE DDEESS El algoritmo simétrico DES es el más conocido y tiempo atrás, utilizado mundialmente. Se basa en el algoritmo LUCIFER, desarrollado por IBM a principios de los setenta, y fue adoptado como estándar por el Gobierno de los Estados Unidos en 1976, para efectuar comunicaciones no clasificadas (7). El algoritmo DES codifica bloques de 64 bits empleando llaves de 56 bits. Es una Red de Feistel de 16 rondas, más dos permutaciones, una que se aplica al principio, IP, y otra que se aplica al final, denominada permutación inversa, IP-1. La función f, se compone de una permutación de expansión, E, que convierte el bloque de 32 bits correspondiente, en uno de 48 bits. Después realiza una operación XOR con el valor K i, también de 48 bits, aplica ocho sustituciones de 6 bits de entrada por 4 bits de salida, y efectúa una nueva permutación, P, para dar una salida parcial de 32 bits. La figura 2 representa la función f del algoritmo DES. 3 2 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de Se calculan un total de 16 llaves, permutación inicial, PC1, sobre la llave de 64 bits, y resultando una nueva cadena de 56 bits, la cual se parte en dos cadenas de 28 bits, llevando a cabo desplazamientos a la izquierda de cada una de las dos m segunda permutación, PC2 iésima llave, K i. Los desplazamientos a la izquierda son de dos bits, salvo para las rondas 1, 2, 9 y 16, en las que se desplaza Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV un total de 16 llaves, K i, una para cada ronda, efectuando primero una , sobre la llave de 64 bits, y resultando una nueva cadena de 56 bits, la cual se parte en dos cadenas de 28 bits, llevando a cabo desplazamientos a la izquierda de cada una de las dos mitades resultantes, y realizando finalmente una PC2, de 48 bits en cada ronda, para dar como resultado una . Los desplazamientos a la izquierda son de dos bits, salvo para las rondas 1, 2, 9 y 16, en las que se desplaza sólo un bit. El lector debe observar que la llave inicial Figura 2. Función f del algoritmo DES Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV , una para cada ronda, efectuando primero una , sobre la llave de 64 bits, y resultando una nueva cadena de 56 bits, la cual se parte en dos cadenas de 28 bits, llevando a cabo desplazamientos a la itades resultantes, y realizando finalmente una , de 48 bits en cada ronda, para dar como resultado una . Los desplazamientos a la izquierda son de dos bits, salvo para las rondas sólo un bit. El lector debe observar que la llave inicial 3 3 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de tiene en principio 64 bits, pero una vez procesada por el algoritmo se ignoran ocho de ellos, quedando llaves de 56 bits. La figura 3, muestra al lector la forma en que se calcula el esquema de lla Para desencriptar basta con usar el mismo algoritmo empleando las llaves, inverso. Figura 3. Esquema de llaves del algoritmo DES Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV tiene en principio 64 bits, pero una vez procesada por el algoritmo se ignoran ocho de ellos, quedando llaves de 56 bits. La figura 3, muestra al lector la forma en que se calcula el esquema de lla Para desencriptar basta con usar el mismo algoritmo empleando las llaves, Figura 3. Esquema de llaves del algoritmo DES Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV tiene en principio 64 bits, pero una vez procesada por el algoritmo se ignoran ocho de La figura 3, muestra al lector la forma en que se calcula el esquema de llaves. Para desencriptar basta con usar el mismo algoritmo empleando las llaves, K i, en orden 3 4 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV El algoritmo DES presenta algunas llaves débiles. En general, todos aquellos valores de la llave que conducen a una secuenciainadecuada de K i serán poco recomendables. Distinguiremos entre llaves débiles, que son aquellas que generan un conjunto de dieciséis valores iguales de K i, y llaves semidébiles que generan dos valores diferentes de K i, cada uno de los cuales aparece ocho veces (7). La figura 4, muestra llaves débiles y la figura 5, llaves semidébiles. Llave Llave tras aplicar PC1 0101010101010101 1F1F1F1F0E0E0E0E E0E0E0E0F1F1F1F1 FEFEFEFEFEFEFEFE 0000000 0000000 0000000 FFFFFFF FFFFFFF 0000000 FFFFFFF FFFFFFF Llave Llave tras aplicar PC1 01FE01FE01FE01FE FE01FE01FE01FE01 1FE01FE00EF10EF1 E01FE01FF10EF10E 01E001E001F101F1 E001E001F101F101 1FFE1FFE0EFE0EFE FE1FFE1FFE0EFE0E 011F011F010E010E 1F011F010E010E01 E0FEE0FEF1FEF1FE FEE0FEE0FEF1FEF1 AAAAAAA AAAAAAA 5555555 5555555 AAAAAAA 5555555 5555555 AAAAAAA AAAAAAA 0000000 5555555 0000000 AAAAAAA FFFFFFF 5555555 FFFFFFF 0000000 AAAAAAA 0000000 5555555 FFFFFFF AAAAAAA FFFFFFF 5555555 Figura 4. Llaves débiles para el algoritmo DES (16 bits), expresadas en hexadecimal Figura 5. Llaves semidébiles para el algoritmo DES (16 bits), expresadas en hexadecimal 3 5 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de DDEESSCCRRIIPPCCIIÓÓNN DDEE TTRR El algoritmo Triple-DES se llama así porque c DES con diferentes llaves al mensaje original. Se puede hacer ya que el algoritmo DES no presenta estructura de grupo estructura: Es decir, se codifica con la sub K1. La llave resultante es la concatenación de figura 6, muestra gráficamente el proceso que sigue Triple Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV RRIIPPLLEE--DDEESS DES se llama así porque consiste en aplicar varias veces el algoritmo DES con diferentes llaves al mensaje original. Se puede hacer ya que el algoritmo DES no presenta estructura de grupo (7). El algoritmo Triple-DES responde a la siguiente C = Ek 1 (E -1 K 2 (Ek 1 (M) ) ). Es decir, se codifica con la sub-llave K1, se decodifica con K2 y volvemos a codificar con . La llave resultante es la concatenación de K1 y K2, con una longitud de 112 bits. figura 6, muestra gráficamente el proceso que sigue Triple-DES. Figura 6. Representación de Triple-DES Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV onsiste en aplicar varias veces el algoritmo DES con diferentes llaves al mensaje original. Se puede hacer ya que el algoritmo DES no responde a la siguiente y volvemos a codificar con , con una longitud de 112 bits. La 3 6 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV DDEESSCCRRIIPPCCIIÓÓNN DDEE AAEESS De acuerdo con el Instituto Nacional de Estándares y Tecnología (NIST) en su Publicación (FIPS PUB 197) (11), se describirá el algoritmo AES. El Estándar Avanzado de Encriptación (AES) es un algoritmo que se utiliza para proteger datos electrónicos. Es un algoritmo simétrico que procesa bloques de datos permitiendo encriptar y desencriptar información. Este algoritmo es capaz de usar llaves de 128, 192 y 256 bits para encriptar y desencriptar bloques de 128 bits. AES puede ser implementado en software o hardware. La implementación puede depender de factores como la tecnología utilizada o el ambiente de programación. El estándar se considera efectivo para su aplicación desde el 26 de mayo de 2002. El lector debe referirse al glosario, al final del trabajo para comprender los términos y acrónimos que se utilizan en la definición del algoritmo. Como ya se ha mencionado, las entradas y salidas del algoritmo AES consisten de secuencias de 128 bits, a los cuales se les conoce como bloques de datos. El algoritmo que permite calcular las llaves (Cipher Key) utiliza bloques de datos de 128, 192 o 256 bits. La unidad básica de procesamiento del algoritmo AES son los bytes (conjunto de 8 bits). En este caso, un mensaje de 128 bits (texto plano o texto cifrado) es un segmento de 16 bytes. Representado por: x = x0, x1, x2, …, x15. Y una llave quedaría representada como: K = k0, k1, k2, …, k15. 3 7 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV Las estructuras de datos que representan estas entradas quedan definidas por matrices cuadradas de 4 renglones por 4 columnas, de la siguiente manera: x0 x4 x8 x12 x = x1 x5 x9 x13 x2 x6 x10 x14 x3 x7 x11 x15 k0 k4 k8 k12 K = k1 k5 k9 k13 k2 k6 k10 k14 k3 k7 k11 k15 De forma similar al algoritmo DES (incluso de forma similar a la mayoría de algoritmos simétricos modernos), el algoritmo Rijndael (AES) comprende un número de iteraciones de transformaciones denominadas “rondas”. En el caso de mensajes de entrada de 128 bits y llaves del mismo tamaño se iteran 10 rondas. Para el caso de ocupar llaves de 192 bits se iteran 12 rondas, para el caso de llaves de 256 bits se iteran 14 rondas. La tabla siguiente resume la información descrita. Key Length (Nk words) Block Size (Nb words) Number of Rounds (Nr) AES-128 4 4 10 AES-192 6 4 12 AES-256 8 4 14 3 8 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV Una ronda en el algoritmo queda denotada por: Round (State, RoundKey). Aquí State es un arreglo bidimensional, que define palabras de 32 bits y representa entradas y salidas al mismo tiempo. Gráficamente se representa como: s0,0 s0,1 s0,2 s0,3 State = s1,0 s1,1 s1,2 s1,3 s2,0 s2,1 s2,2 s2,3 s3,0 s3,1 s3,2 s3,3 RoundKey es una operación XOR que se realiza con las columnas del arreglo State y las llaves (palabras de 32 bits) definidas en el esquema de llaves (Key Expansion). La ejecución de una ronda causa que los elementos del arreglo State cambien su valor. Para el proceso de encriptación, la primera ronda toma los datos de entrada del texto plano (Plaintext) y los coloca en el State acomodados por columnas. Las operaciones que se efectúan en una ronda (a diferencia de la última) quedan definidas en el siguiente orden: Round(State, RoundKey) { SubBytes(State); ShiftRows(State); MixColumns(State); AddRoundKey(State, RounKey); } 3 9 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV La ronda final es diferente con respecto a las anteriores en que se omite la función MixColumns( ); quedando de la siguiente manera. FinalRound(State, RoundKey) { SubBytes(State); ShiftRows(State); AddRoundKey(State, RoundKey); } Para llevar a cabo el proceso de descifrado se procede de manera inversa: Round-1(State, RoundKey) { InvShiftRows(State); InvSubBytes(State); AddRoundKey(State, RoundKey); InvMixColumns(State); } Y la ronda final, FinalRound-1(State, RounKey) { InvShiftRows(State); InvSubBytes(State); AddRoundKey(State, RoundKey); } En este punto, se describirán las funciones internas que se procesan en el algoritmo de cifrado Rijndael. 4 0 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV Función SubBytes( ) La función SubBytes( ) es una transformación no lineal de bytes, llamada sustitución, que opera independientemente cada byte en el arreglo State usando una caja (tabla) de sustitución (S-Box). Esta S-Boxes invertible y se muestra de forma gráfica posteriormente. Cualquier byte diferente de 0’s, que pertenecen al campo finito GF(28) inverso, descrito en el FIPS-197 es sustituido por la siguiente transformación: [b’] = [A] x [b] + [c], La matriz A, queda definida como: 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 A = 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 Y el vector c, queda definido como: 1 1 0 c = 0 0 1 1 0 4 1 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de Por tanto, se tiene que la representación matricial de como sigue: b’0 b’1 b’2 b’3 = b’4 b’5 b‘6 b’7 La figura 7 ilustra el efecto de la función SubBytes( ) sobre el arreglo State. Figura 7. Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV Por tanto, se tiene que la representación matricial de [b’] = [A] x [b] + [c], 1 0 0 0 1 1 1 1 b0 1 1 1 0 0 0 1 1 1 b1 1 1 1 1 0 0 0 1 1 b2 0 = 1 1 1 1 0 0 0 1 x b3 + 0 1 1 1 1 1 0 0 0 b4 0 0 1 1 1 1 1 0 0 b5 1 0 0 1 1 1 1 1 0 b6 1 0 0 0 1 1 1 1 1 b7 0 ilustra el efecto de la función SubBytes( ) sobre el arreglo State. . SubBytes( ) aplica las cajas-S a cada byte del arreglo State Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV ilustra el efecto de la función SubBytes( ) sobre el arreglo State. 4 2 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV La S-Box usada en la función SubBytes( ) es presentada en formato hexadecimal en la figura 8. Por ejemplo, si s1,1 = {85}, entonces el valor de sustitución que se debe calcular, debe determinarse por, el renglón “8”, columna “5” en la caja-S. Esta operación dará como resultado s’1,1={97}. y 0 1 2 3 4 5 6 7 8 9 a b c d e f x 0 63 7c 77 7b f2 6b 6f c5 30 01 67 2b fe d7 ab 76 1 ca 82 c9 7d fa 59 47 f0 ad d4 a2 af 9c a4 72 c0 2 b7 fd 93 26 36 3f f7 cc 34 a5 e5 f1 71 d8 31 15 3 04 c7 23 c3 18 96 05 9a 07 12 80 e2 eb 27 b2 75 4 09 83 2c 1a 1b 6e 5a a0 52 3b d6 b3 29 e3 2f 84 5 53 d1 00 ed 20 fc b1 5b 6a cb be 39 4a 4c 58 cf 6 d0 ef aa fb 43 4d 33 85 45 f9 02 7f 50 3c 9f a8 7 51 a3 40 8f 92 9d 38 f5 bc b6 da 21 10 ff f3 d2 8 cd 0c 13 ec 5f 97 44 17 c4 a7 7e 3d 64 5d 19 73 9 60 81 4f dc 22 2a 90 88 46 ee b8 14 de 5e 0b db a e0 32 3a 0a 49 06 24 5c c2 d3 ac 62 91 95 e4 79 b e7 c8 37 6d 8d d5 4e a9 6c 56 fa ea 65 7a ae 08 c ba 78 25 2e 1c a6 b4 c6 e8 dd 74 1f 4b bd 8b 8a d 70 3e b5 66 48 03 f6 0e 61 35 57 b9 86 c1 1d 9e e e1 f8 98 11 69 d9 8e 94 9b 1e 87 e9 ce 55 28 df f 8c a1 89 0d bf e6 42 68 41 99 2d 0f b0 54 bb 16 Figura 8. S-Box: valores de sustitución por cada byte xy (en formato hexadecimal) 4 3 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de Función ShiftRows( ) En la función ShiftRows( ), los bytes de las tres últimas filas (renglones) en el arreglo State son rotadas cíclicamente sobre diferentes corrimientos. El renglón 0 no se altera en esta función. Específicamente la función ShiftRows( ) procede de la siguiente manera: s’r,c = sr,(c+shift(r,Nb))modNb Donde el valor de corrimiento, s shift(1,4)=1; shift(2,4)=2; shift(3,4)=3. Esquemáticamente (figura 9 Figura 9. ShiftRows( ) corrimientos cíclicos en los últimos tres renglones del arreglo State Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV En la función ShiftRows( ), los bytes de las tres últimas filas (renglones) en el arreglo son rotadas cíclicamente sobre diferentes corrimientos. El renglón 0 no se altera en Específicamente la función ShiftRows( ) procede de la siguiente manera: r,(c+shift(r,Nb))modNb; para 0 < r < 4 y 0 < c < Nb, el valor de corrimiento, shift(r,Nb) depende del número de renglón, r, como sigue: hift(1,4)=1; shift(2,4)=2; shift(3,4)=3. (Recordar que Nb (figura 9), se representan los corrimientos de la siguiente manera: ShiftRows( ) corrimientos cíclicos en los últimos tres renglones del arreglo State Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV En la función ShiftRows( ), los bytes de las tres últimas filas (renglones) en el arreglo son rotadas cíclicamente sobre diferentes corrimientos. El renglón 0 no se altera en Específicamente la función ShiftRows( ) procede de la siguiente manera: , hift(r,Nb) depende del número de renglón, r, como sigue: Nb=4). se representan los corrimientos de la siguiente manera: ShiftRows( ) corrimientos cíclicos en los últimos tres renglones del arreglo State 4 4 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de Función MixColumns( ) Esta función opera sobre cada columna del arreglo State. Así que, como el arreglo State es una matriz de 4x4, la función MixColumns( considerada como un polinomio sobre el campo GF(2 un polinomio fijo a(x), dado por: Matricialmente se representa de la siguiente manera: La figura 10, ilustra la función MixColumns( ). Figura 10. MixColumns( ) opera en el arreglo State columna por columna Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV Esta función opera sobre cada columna del arreglo State. Así que, como el arreglo State es una matriz de 4x4, la función MixColumns( ) se repite 4 veces. considerada como un polinomio sobre el campo GF(28), y multiplicada módulo x , dado por: a(x) = {03} x3 + {01} x2 + {01} x + {02} Matricialmente se representa de la siguiente manera: s’0,c 02 03 01 01 s0,c s’1,c = 01 02 03 01 x s1,c s’2,c 01 01 02 03 s2,c s’3,c 03 01 01 02 s3,c , ilustra la función MixColumns( ). MixColumns( ) opera en el arreglo State columna por columna Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV Esta función opera sobre cada columna del arreglo State. Así que, como el arreglo State ) se repite 4 veces. Cada columna es ), y multiplicada módulo x4+1 con MixColumns( ) opera en el arreglo State columna por columna 4 5 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de Función AddRoundKey( ) En la función AddRoundKey( ), una llave operada con cada columna del arreglo State con una operación XOR bit a bit hasta completar el tamaño del bloque de datos (128 bits). Gráficamente la función AddRoundKey( Figura 11. AddRoundKey( ); opera cada columna del arreglo State con una llave a través de una operación XOR Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV Función AddRoundKey( ) En la función AddRoundKey( ), una llave wl+c del esquema de llaves (Key Expansion) es operada con cada columna del arreglo State con una operación XOR bit a bit hasta completar el tamaño del bloque de datos (128 bits). Gráficamente la función AddRoundKey( ), queda representada en la figura 11 AddRoundKey( ); opera cada columna del arreglo State con una llave a través de una operación XOR Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llavesde cifrado de 192 bits, empleando los teoremas Factorial y JV del esquema de llaves (Key Expansion) es operada con cada columna del arreglo State con una operación XOR bit a bit hasta ueda representada en la figura 11. AddRoundKey( ); opera cada columna del arreglo State con una llave a través de una operación XOR 4 6 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV Key Expansion El algoritmo AES toma una llave K, y realiza una rutina denominada Key Expansion para generar un esquema de llaves (key schedule). La rutina Key Expansion genera un total de Nb(Nr+1) palabras: el algoritmo requiere un conjunto inicial de Nb palabras, y cada una de las Nr rondas requieren Nb palabras de un bloque de llave (key data). El esquema de llaves (key Schedule) consiste de un arreglo lineal de palabras de 4-bytes, denotadas [wi], con i en el rango 0 ≤ i < Nb(Nr+1). El algoritmo en pseudo-código se presenta a continuación: KeyExpansion(byte key[4*Nk], word w[Nb*(Nr+1)], Nk) begin word temp i = 0 while (i < Nk) w[i] = word(key[4*i], key[4*i+1], key[4*i+2], key[4*i+3]) i = i+1 end while i = Nk while (i < Nb * (Nr+1)] temp = w[i-1] if (i mod Nk = 0) temp = SubWord(RotWord(temp)) xor Rcon[i/Nk] else if (Nk > 6 and i mod Nk = 4) temp = SubWord(temp) end if w[i] = w[i-Nk] xor temp i = i + 1 end while end 4 7 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV SubWord( ) es una función que toma una palabra de entrada (4-byte) y le aplica la sustitución S-Box a cada uno de los 4-bytes, produciendo una palabra de salida. La función RotWord( ) toma una palabra [a0,a1,a2,a3] como entrada, realiza una permutación cíclica y regresa la palabra [a1,a2,a3,a0]. La ronda constante Rcon[i] , contiene los valores dados por [xi-1,{00},{00},{00}], con xi-1 potencias de x (x es denotada como {02}) en el campo GF(28) (11). Como el lector puede apreciar en el pseudo-código, las primeras Nk palabras de la llave a expandir son tomadas de la llave inicial (Cipher Key). Cada palabra siguiente, w[i] , es operada a través de un XOR con la palabra anterior, w[i-1] ; continua así para las todas las posiciones de la palabra. Para las palabras que corresponden con las posiciones que son múltiplos de Nk, una transformación es aplicada a w[i-1] antes de la operación XOR, seguida de una operación XOR con el arreglo constante Rcon[i] . Dicha transformación consiste de un corrimiento cíclico de los bytes en una palabra (RotWord( ) ), seguida de una sustitución de todos los bytes en la palabra (SubWord( ) ). Cabe resaltar que la rutina para expandir una llave de 256 bits (Nk=8) es ligeramente diferente de las rutinas para expandir llaves de 128 y 192 bits. Si Nk=8 e i-4 es múltiplo de Nk, entonces SubWord( ) se aplica a la palabra w[i-1] antes de la operación XOR. 4 8 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV CCAAPPÍÍTTUULLOO IIIIII FFUUNNDDAAMMEENNTTOOSS MMAATTEEMMÁÁTTIICCOOSS Una permutación de un conjunto de objetos distintos es una ordenación de esos objetos (12). Es bien sabido que el número de permutaciones de un conjunto de n elementos distintos se calcula a través del factorial de dicho número de elementos, (n!). Por tanto, si tuviésemos un conjunto de 8 elementos, podríamos calcular el número de permutaciones existentes, el cual sería 8!= 40,320. Imagine el lector trabajar con cadenas de 192 posiciones, se tendrían 192! permutaciones posibles de ser utilizadas, esto es 3.54x10356 aproximadamente, pero, calcularlas todas y asignarles un número para utilizar posteriormente una de ellas es imposible en este momento, dado que para cadenas de 8 posiciones, habrá 40,320 permutaciones; para cadenas de 10 posiciones habrá 3,628,800 permutaciones; para cadenas de 20 posiciones se tienen 2,432,902,008,176,640,000 permutaciones, y crecen más rápido que cualquier función del tipo f(n)=an. La pregunta sería, ¿se puede diseñar un algoritmo que sea capaz de asignar a un número entero positivo una de las n! permutaciones en un número razonable de pasos?, todavía más, cada vez que se desee esconder información (encriptar), ¿se podrá utilizar una permutación diferente, esto es, variable y no fija?. En el caso del algoritmo DES, siempre se utiliza una permutación fija (conocida), la cual permite a los criptoanalistas tratar de romper el algoritmo realizando un análisis diferencial, dado que dicha permutación ha quedado publicada en el documento que define el funcionamiento del criptosistema. 4 9 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV En este punto, se puede plantear la siguiente pregunta con objeto optimizar recursos de cómputo: ¿habrá manera de construir una permutación de 192 posiciones a partir de permutaciones más pequeñas?. Y por último, ¿se podrá implementar el algoritmo para encriptar bloques de 192 bits, utilizando llaves del mismo tamaño en un programa de cómputo que sea capaz de manejar números tan grandes como 128! para calcular las permutaciones variables y no fijas?. Al trabajar con números que representen cadenas de 192 bits, se habla de operar números del orden de 10356 aproximadamente, mientras que trabajar con números que representen cadenas de 128 bits, se habla de números del orden de 10215 aproximadamente, lo cual representa ahorro de recursos computacionales (4), puesto que 10215 es 10141 veces más pequeño que 10356; (10356/10215=10141). Si fuera posible controlar la permutación a utilizar para llevar a cabo el proceso de mezclado de la información, se complicaría el proceso de ataque al algoritmo, porque quedaría oculta la permutación utilizada en el proceso de cifrado. Se expondrán dos teoremas que proporcionarán las bases matemáticas para brindar respuestas a los cuestionamientos planteados anteriormente. 5 0 Algoritmo de encriptación simétrico que procesa bloques de datos de 192 bits, con llaves de cifrado de 192 bits, empleando los teoremas Factorial y JV TEOREMA JV Antes de enunciar el teorema JV, se darán ciertas condiciones matemáticas que servirán para dar formalidad al enunciado. De acuerdo con el autor del teorema (5), se tiene que: Dados dos números enteros positivos n, m tales que, 0 ≤ n ≤ m!-1, utilizando el algoritmo para la División Euclidiana, el número n puede escribirse como sigue: n = C0(m-1)! + C1(m-2)! + C2(m-3)! + … + Cm-2(1)! (1) Observe el lector que n pertenece al conjunto Nm = { n є N | 0 ≤ n ≤ m! - 1} y (m-1)!, (m-2)!, …,1! son considerados valores fijos. Por otro lado, se puede comprobar que: 0 ≤ Ci < (m-i), donde 0 ≤ i ≤ (m-2); (2) Lo anterior significa que, los valores de los Ci son cocientes cuando se realizan divisiones entre (m-1)!, (m-2)!,…,1!; a su vez cada Ci es menor que su respectiva (m-i) constante. Una vez calculados los valores de C0, C1, C2, …, Cm-2, se está en condiciones de construir el siguiente algoritmo: Paso 0. Se define un arreglo en orden creciente de la siguiente manera: X[0]=0, X[1]=1, X[2]=2, X[3]=3, …, X[m-1]=m-1. Paso 1. Usando la expresión 2, se tiene que C0 < m; por tanto, X[C0] es uno de los elementos del arreglo dado en el paso 0. X[C0] se elimina del arreglo y un nuevo arreglo se define desde X[0] hasta X[m-2]. Paso 2. De nuevo, usando la expresión 2, se tiene que C1 < m-1; por tanto, X[C1] es uno de los elementos de el arreglo definido en el paso 1. Continuando con el orden
Compartir