Вы находитесь на странице: 1из 213

ESTUDIO MONOGRFICO SOBRE TCNICAS DE CRIPTOGRAFA

TRABAJO DE GRADUACIN PREPARADO PARA LA FACULTAD DE INGENIERA

PARA OPTAR AL GRADO DE: INGENIERA EN CIENCIAS DE LA COMPUTACIN

POR: NURY MERCEDES MARTNEZ SILVA

JUNIO DE 2004 SOYAPANGO EL SALVADOR AMRICA CENTRAL

UNIVERSIDAD DON BOSCO RECTOR ING. FEDERICO MIGUEL HUGUET RIVERA SECRETARIO GENERAL LIC. MARIO RAFAEL OLMOS DECANO DE LA FACULTAD DE INGENERA ING. ERNESTO GODOFREDO GIRN ASESOR DEL TRABAJO DE GRADUACIN ING. OSCAR DURN VIZCARRA JURADO EVALUADOR LIC. SANTIAGO ABARCA ING. EDUARDO RIVERA ING. CARLOS GIOVANNI VSQUEZ TUTOR DEL TRABAJO DE GRADUACIN LIC. JORGE MAURICIO COTO

UNIVERSIDAD DON BOSCO

FACULTAD DE INGENIERA

ESCUELA DE INGENIERA EN CIENCIAS DE LA COMPUTACIN JURADO EVALUADOR DEL TRABAJO DE GRADUACIN

LIC. SANTIAGO ABARCA JURADO

ING. EDUARDO RIVERA JURADO

ING. CARLOS GIOVANNI VSQUEZ JURADO

ING. OSCAR DURN VIZCARRA ASESOR

LIC. JORGE MAURICIO COTO TUTOR

AGRADECIMIENTOS
Gracias a Dios y a la Virgen Mara por haberme dado fuerzas para poder finalizar este trabajo, uno de mis tantos sueos, y a las personas que a lo largo de mi camino, de una u otra forma, contribuyeron a este logro: A mi madre, Quien estoy segura siempre ha seguido mis trabajos, esfuerzos, dificultades y progresos. A mis hermanos, Por ser ejemplo de superacin y porque esos recuerdos de infancia, y esos nios que an queremos conservar dentro de nosotros, nos permiten reunirnos y creer que el tiempo no ha pasado. A la familia Silva, Mi abuelita Herminia, y mis tas Yolanda y Elsa, por su cario, comprensin y por su permanente apoyo. A la familia Acua, Mis tos Carlos, Arnoldo, Agenor y mi primo Carlos, por brindarme siempre ese cario tan especial y sus palabras de aliento. A mi ta Carmen por esa dulzura y sencillez con las que siempre me anim a superarme. A Oscar Durn y Margot de Durn, Por haberme permitido invadir su casa mientras trabajaba en este proyecto, por brindarme su confianza y cario e incentivarme a seguir adelante. A Oscar Durn Vizcarra, Por creer en m y en el proyecto, por exigirme y ensearme a trabajar con calidad, por ser un gran amigo, por su apoyo y ayuda incondicional. A mis amigos y compaeros de trabajo, Cecyl, Ernesto, Luis y Nixon, por esa amistad tan bonita que nos une y porque desinteresadamente realizaron mis tareas mientras yo me encontraba dedicada a finalizar este proyecto. A mi jefe, Carlos Gmez, por todo el tiempo que me permiti tomarme para dedicarme a concluir esta ardua tarea. A la familia Thumann, Por sus palabras de aliento, cario, colaboracin y apoyo. A mi amiga Carmen Aida Mojica, Quien tanto me apoy para concretar esta meta y quien ahora desde el cielo se regocija al verla finalizada.

DEDICATORIA
A mi padre, Francisco Javier Martnez, Por haberme enseado a luchar, a vivir la vida con optimismo, y a creer en m y en mis propias fuerzas. Por haberme corregido a tiempo para luego dejarme tomar mis propias decisiones, y sentirse orgulloso de ellas. Por nunca haber escatimado esfuerzos para instruirme. Por contagiarme de ese espritu de superacin y esas ganas infinitas de vivir que l mismo ha mostrado. Por ensearme el significado de la palabra sacrificio. Por sealar mis errores con el nico afn de hacerme crecer como persona. Por ensearme que aun en la peor de las situaciones siempre la vida deja una leccin y que por lo tanto la palabra derrota no existe. Por el cario, la comprensin, el respeto y confianza que siempre ha tenido hacia m. Porque un da el so con que su nica hija se graduara de la Universidad y porque dedic su vida a guiarme por ese camino. Porque me dio lo que nunca tuvo. Pap, este triunfo es, sobre todo, para t.

INDICE
INTRODUCCIN.......................................................................................................................... i OBJETIVOS.................................................................................................................................. ii ALCANCES...................................................................................................................................iv LIMITACIONES.......................................................................................................................... v 1 ASPECTOS INTRODUCTORIOS...................................................................................... 1

1.1 RAMAS DE LA CRIPTOGRAFA.............................................................................................. 5 1.1.1 Esteganografa..................................................................................................................... 5 1.2 CODIFICACIN ...................................................................................................................... 6 1.2.1 Ruptura de cdigos.............................................................................................................. 7 1.3 CIFRADO ................................................................................................................................ 8 1.3.1 Sustitucin y transposicin ................................................................................................. 8 1.3.1.1 Sustitucin monoalfabtica monogrmica ....................................................................... 9 1.3.1.2 Sustitucin monoalfabtica poligrmica .......................................................................... 9 1.3.1.3 Sustitucin monoalfabtica tomogrmica ........................................................................ 9 1.3.1.4 Sustitucin polialfabtica ................................................................................................. 9 1.3.1.5 Sustitucin polialfabtica con clave progresiva ............................................................. 10 1.3.1.6 Sustitucin polialfabtica con palabra clave .................................................................. 10 1.3.1.7 Sustitucin polialfabtica con clave automtica ............................................................ 10 2 EVOLUCIN HISTRICA............................................................................................... 11

2.1 ERA ARTESANAL ................................................................................................................ 12 2.1.1 Mtodos artesanales .......................................................................................................... 18 2.1.1.1 Atbash ............................................................................................................................ 18 2.1.1.2 Mtodo de Esctalo......................................................................................................... 19 2.1.1.3 Mtodo de Csar ............................................................................................................ 19 2.1.1.4 El Kama Sutra ................................................................................................................ 19 2.1.1.5 Nomenclator................................................................................................................... 20 2.1.1.6 Mtodo de Alberti .......................................................................................................... 20 2.1.1.7 Mtodo de Trithemius .................................................................................................... 20 2.1.2 Sistema de autoclave ......................................................................................................... 20 2.1.2.1 Mtodo de Porta ............................................................................................................. 21 2.1.2.2 Mtodo de Vigenre....................................................................................................... 22 2.1.2.3 Mtodo de Playfair......................................................................................................... 23 2.1.2.4 Caracterizacin de la era artesanal................................................................................. 24 2.1.2.5 Criptosistema de Vernam............................................................................................... 24 2.1.2.6 ADFGVX ....................................................................................................................... 25 2.1.3 Otros mtodos ................................................................................................................... 26 2.2 ERA TCNICA ...................................................................................................................... 27 2.2.1 Modelos de mquinas de cifrado....................................................................................... 27 2.2.1.1 Aparato de discos codificadores de Alberti.................................................................... 27 2.2.1.2 El cilindro de Jefferson .................................................................................................. 27

2.2.1.3 El cilindro de ruedas codificadas M-94/CSP-488 .......................................................... 28 2.2.1.4 La mquina ENIGMA.................................................................................................... 29 2.2.1.5 Las mquinas de Hebern ................................................................................................ 30 2.2.1.6 El convertidor M-209 (CSP-1500) de Hagelin .............................................................. 30 2.2.1.7 La mquina Khrya.......................................................................................................... 31 2.2.1.8 Las mquinas TYPEX y SIGABA ................................................................................. 31 2.2.1.9 La mquina NEMA........................................................................................................ 32 2.2.2 Caracterizacin de la era tcnica....................................................................................... 33 2.3 ERA DIGITAL ....................................................................................................................... 33 2.3.1 Los aportes de Shannon .................................................................................................... 33 2.3.2 Surgimiento de los conceptos de complejidad, clave pblica y zero-knowledge ............. 35 3 MTODOS MODERNOS DE CRIPTOGRAFA DIGITAL ......................................... 40

3.1 SISTEMAS DE CIFRADO DE BLOQUE ................................................................................... 40 3.1.1 Sistemas de cifrado de bloque simtrico........................................................................... 40 3.1.2 Modos de cifrado de bloque.............................................................................................. 41 3.1.2.1 ECB - Electronic codebook............................................................................................ 41 3.1.2.2 CBC Cipher block chaining ........................................................................................ 42 3.1.2.3 CFB Cipher-Feedback................................................................................................. 43 3.2 SISTEMA DE CIFRADO DE FLUJO ........................................................................................ 43 3.2.1 Sistemas de cifrado de flujo sncrono ............................................................................... 44 3.2.2 Sistemas de cifrado de flujo asncrono o autosincronizante.............................................. 45 3.2.3 Diferencia bsica entre el cifrado de flujo sncrono y el autosincronizante...................... 45 3.3 MODOS DE CIFRADO DE FLUJO .......................................................................................... 46 3.3.1.1 OFB Output feedback ................................................................................................. 46 3.3.1.2 CTR Counter ............................................................................................................... 46 4 ALGORITMOS DE LLAVE PRIVADA .......................................................................... 49

4.1 ELEMENTOS ESTRUCTURALES DE USO FRECUENTE ......................................................... 49 4.1.1 Redes de Feistel ................................................................................................................ 49 4.1.2 Cajas de sustitucin........................................................................................................... 50 4.2 LUCIFER .............................................................................................................................. 51 4.2.1 La funcin F ...................................................................................................................... 53 4.2.2 Cajas de sustitucin y transposicin ................................................................................. 53 4.2.3 Ataques a Lucifer .............................................................................................................. 54 4.3 DATA ENCRYPTION STANDARD (DES) .................................................................... 54 4.3.1 Establecimiento del estndar............................................................................................. 56 4.3.2 Descripcin del DES......................................................................................................... 56 4.3.3 Estructura interna del algoritmo........................................................................................ 57 4.3.4 La permutacin inicial....................................................................................................... 59 4.3.5 La transformacin de la llave............................................................................................ 60 4.3.6 La permutacin de expansin............................................................................................ 61 4.3.7 Las cajas de sustitucin..................................................................................................... 62 4.3.8 Las cajas de permutacin .................................................................................................. 64 4.3.9 La permutacin final ......................................................................................................... 65 4.3.10 Proceso de descifrado del DES ....................................................................................... 65 4.3.11 Modos de operacin del DES.......................................................................................... 65

4.3.11.1 ECB (Electronic Code Book)....................................................................................... 65 4.3.11.2 CBC (Cipher Block Chaining) ..................................................................................... 66 4.3.11.3 CFB (Cipher Feedback) ............................................................................................... 66 4.3.11.4 OFB (Output Feedback)............................................................................................... 67 4.3.12 Seguridad del DES .......................................................................................................... 68 4.3.13 Llaves dbiles del DES ................................................................................................... 68 4.3.14 Longitud de la llave......................................................................................................... 69 4.3.15 Crticas al diseo del DES............................................................................................... 69 4.3.16 Resultados adicionales .................................................................................................... 70 4.3.17 Variantes del DES........................................................................................................... 71 4.3.17.1 Triple DES ................................................................................................................... 71 4.3.17.2 DES con sub-llaves independientes ............................................................................. 73 4.3.17.3 DESX ........................................................................................................................... 73 4.3.17.4 CRYPT(3) .................................................................................................................... 73 4.3.17.5 DES generalizado......................................................................................................... 73 4.3.17.6 DES con cajas de sustitucin alternativas .................................................................... 74 4.3.17.7 RDES ........................................................................................................................... 74 4.3.17.8 SnDES........................................................................................................................... 74 4.3.17.9 DES con cajas dependientes de llaves.......................................................................... 74 4.3.18 Qu tan seguro es DES ahora? ...................................................................................... 75 4.4 INTERNATIONAL DATA ENCRYPTION ALGORITHM (IDEA)............................................ 75 4.4.1 Proceso de cifrado............................................................................................................. 77 4.5 MADRYGA ........................................................................................................................ 78 4.5.1 Descripcin del algoritmo ................................................................................................. 79 4.6 SKIPJACK ......................................................................................................................... 81 4.7 BLOWFISH........................................................................................................................ 82 4.7.1 El funcionamiento de Blowfish......................................................................................... 82 4.7.2 La seguridad de Blowfish.................................................................................................. 85 4.8 RIJNDAEL ......................................................................................................................... 85 4.8.1 Especificaciones del algoritmo ......................................................................................... 86 4.8.1.1 Los Estados, las llaves y el nmero de vueltas .............................................................. 86 4.8.1.2 Nmero de vueltas.......................................................................................................... 88 4.8.1.3 Operaciones en cada vuelta............................................................................................ 88 4.8.1.4 Transformacin BytesSub............................................................................................. 89 4.8.1.5 La transformacin ShiftRow .......................................................................................... 90 4.8.1.6 La transformacin MixColumn...................................................................................... 91 4.8.1.7 La adicin de las sub llaves - AddRoundKey ................................................................ 92 4.8.1.8 Gestin de llaves ............................................................................................................ 93 4.8.1.9 Expansin de la llave ..................................................................................................... 93 4.8.1.10 Seleccin de llave en cada vuelta - Round Key Selection ........................................... 94 4.8.2 Aspectos de implementacin............................................................................................. 94 4.8.2.1 Procesadores de 8 bits .................................................................................................... 94 4.8.2.2 Procesadores de 32 bits .................................................................................................. 95 4.8.2.3 Paralelismo..................................................................................................................... 95 4.8.2.4 Adaptacin de hardware................................................................................................. 95 4.8.3 Proceso de descifrado........................................................................................................ 95 4.8.4 Implementacin del descifrador Rijndael ......................................................................... 96 4.8.4.1 Adaptabilidad al hardware ............................................................................................. 96 4.8.5 Incremento del nmero de vueltas .................................................................................... 96 4.8.6 Llaves dbiles.................................................................................................................... 97 4.8.7 Fortaleza estimada............................................................................................................. 97

4.8.8 Metas de seguridad............................................................................................................ 98 4.8.8.1 Seguridad K.................................................................................................................... 98 4.8.8.2 Cifradores de bloque hermticos.................................................................................... 98 4.8.8.3 Metas.............................................................................................................................. 98 4.8.9 Ventajas y limitaciones de Rijndael.................................................................................. 99 4.9 COMPARACIN ENTRE EL DES Y EL RIJNDAEL ............................................................. 100 4.9.1 mbitos de uso................................................................................................................ 100 4.9.2 Llaves de cifrado............................................................................................................. 101 4.9.3 Tamao de bloque de datos............................................................................................. 103 4.9.4 Aumento en la seguridad................................................................................................. 103 4.9.4.1 Variacin de la velocidad............................................................................................. 104 4.9.5 Estructura interna de los algoritmos................................................................................ 104 4.9.5.1 Representacin de la informacin................................................................................ 104 4.9.5.2 Permutaciones empleadas ............................................................................................ 104 4.9.5.3 Estructura de la red....................................................................................................... 105 4.10 RESISTENCIA FRENTE A LOS PRINCIPALES ATAQUES ................................................... 106 4.10.1.1 Criptoanlisis diferencial ........................................................................................... 106 4.10.1.2 Criptoanlisis lineal.................................................................................................... 106 4.10.1.3 Ataques por anlisis temporal (Timing attacks)......................................................... 107 4.10.1.4 Ataque mediante la existencia de llaves dbiles ........................................................ 107 4.11 DE LA CRIPTOGRAFA SIMTRICA A LA ASIMTRICA ................................................... 107 5 ALGORITMOS DE LLAVE PBLICA......................................................................... 109 EL PROTOCOLO DIFFIE HELLMAN PARA INTERCAMBIO DE LLAVES ............................ 109 RSA.................................................................................................................................... 110 Seguridad del RSA.......................................................................................................... 111 Firmas digitales y RSA ................................................................................................... 111 Firmando un documento utilizando RSA........................................................................ 112 USOS DEL RSA .................................................................................................................. 112 CIFRADO UTILIZANDO ALGORITMOS DE LLAVE PBLICA ............................................. 112 SISTEMAS DE CIFRADO HBRIDOS .................................................................................... 114 Cifrado con sistemas de cifrado hbridos ........................................................................ 114 El sistema hbrido de cifrado ms importante: PGP ....................................................... 114 Cifrado utilizando sistemas de cifrado hbrido ............................................................... 116 FUNCIONES RESUMEN (HASH) ......................................................................................... 117 MD4 Message Digest 4................................................................................................ 119 MD5 Message Digest 5................................................................................................ 119 El SHA como estndar .................................................................................................... 119 Seguridad del algoritmo SHA ......................................................................................... 119 SHA-256, SHA-384 y SHA-512..................................................................................... 120 CUL FUNCIN RESUMEN SE DEBE UTILIZAR? ............................................................. 120 FIRMAS DIGITALES ........................................................................................................... 120 PGP PRETTY GOOD PRIVACY ......................................................................................... 125 Debilidades de PGP......................................................................................................... 126

5.1 5.2 5.2.1 5.2.2 5.2.3 5.3 5.4 5.5 5.5.1 5.5.2 5.5.3 5.6 5.6.1 5.6.2 5.6.3 5.6.4 5.6.5 5.7 5.8 5.9 5.9.1

CONCLUSIONES BIBLIOGRAFIA

ANEXOS ANEXO I Criptoanlisis ANEXO II Ejemplo de la primera iteracin de un texto al que se aplica el algoritmo DES ANEXO III Tabla comparativa entre cifrado de llave secreta y cifrado de llave pblica ANEXO IV Tabla comparativa de estructuras de algunos algoritmos de cifrado de bloques ANEXO V Tabla comparativa del rendimiento de algunos algoritmos de cifrado de bloque ANEXO VI El Modelo OSI ANEXO VII SSL - Secure Socket Layer ANEXO VIII Kriptonita - Aplicacin para cifrado y descifrado de datos

Introduccin
Esta monografa recoge informacin sobre las bases, historia y una importante serie de algoritmos utilizados para el cifrado de datos, con el propsito de que el lector cuente con informacin suficiente que le permita explorar desde distintas perspectivas el campo de la criptografa. A fin de lograr lo anterior, este trabajo ha sido estructurado en cinco captulos. En el primero se exploran aspectos generales que estn a la base de este campo de estudios; se hace particular nfasis en la teora de la informacin, debido al impulso que esta brind al desarrollo de la criptografa y el criptoanlisis contemporneos. En el segundo captulo se presenta una resea histrica de la evolucin que la criptografa ha experimentado desde sus orgenes hasta la actualidad. Se destacan tres perodos a lo largo de la historia que estn delimitados por determinantes cambios de paradigmas. El tercer captulo presenta informacin sobre algunas tcnicas importantes de las que se hace uso en algunos de los algoritmos de cifrado contemporneos. Se da especial nfasis a los modos de operacin ms utilizados y se efecta una comparacin entre ellos. El cuarto captulo esta destinado a la descripcin de una serie de algoritmos de llave privada. Se brinda mayor atencin a los algoritmos DES y Rijndael por la importancia que reviste el hecho de que se les haya adoptado por estndares. El quinto captulo aborda el estudio de los algoritmos de llave pblica. Adicionalmente se ofrecen detalles acera de sistemas hbridos en los que se explotan las cualidades de los algoritmos de llave

privada y de llave pblica, tambin se provee informacin sobre firmas digitales y funciones resumen. El lector encontrar tambin una serie de anexos que pretenden documentar de forma resumida aspectos importantes que permiten complementar las ideas vertidas en este trabajo. Adems, se incluye el cdigo fuente de la aplicacin que se desarroll para poder realizar pruebas con tres de los algoritmos descritos a lo largo del documento. La elaboracin del trabajo requiri una intensa consulta de material bibliogrfico. Es de destacar que mucha informacin importante esta contenida en artculos y que por lo tanto la informacin disponible se encuentra dispersa. Se ha procurado recoger en este trabajo la informacin que se consider ms relevante integrndola en este documento.

ii

Objetivos
Objetivo General
Estudiar, describir y analizar el funcionamiento de las diferentes tcnicas que se utilizan para el cifrado de datos.

Objetivos especficos
Investigar las tcnicas de cifrado existentes, sus orgenes y el porqu son necesarias. Generar un documento que describa el funcionamiento de cada una de las tcnicas de encriptacin. Comparar las tcnicas sometidas a anlisis considerando aspectos como eficiencia y seguridad. Desarrollar una aplicacin utilizando lenguaje C, que sirva como herramienta de apoyo en la enseanza de materias relacionadas a la criptografa de datos.

iii

Alcances
El estudio describe tcnicamente los orgenes de la criptografa. Se identifican las tcnicas de criptografa existentes y los diferentes campos en que stas son aplicadas. Se describe paso a paso el funcionamiento de las tcnicas de criptografa existentes y sus reas de aplicacin. Se demuestra el proceso de cifrado de datos para algoritmos mediante una aplicacin desarrollada para tal fin.

Limitaciones
El estudio no involucra el desarrollo de nuevas tcnicas para el cifrado de datos. La aplicacin demostrativa slo incluye algunos de los algoritmos ms importantes en la actualidad.

iv

1 Aspectos introductorios
La necesitad de privacidad en la informacin es tan antigua como la comunicacin. En la actualidad esta necesidad adquiere mayor relevancia debido al nivel de desarrollo y expansin de las de redes de comunicacin, as como al extensivo uso de equipo informtico en el procesamiento y transmisin de informacin crtica. El proceso de comunicacin puede ser modelado de acuerdo a lo que se presenta en la figura 1.1

Figura 1.1 Modelo genrico de sistema de comunicacin.

La Figura 1.1 representa el esquema de comunicacin comnmente conocido como el paradigma de Shannon. Una fuente genera un mensaje con la intencin de hacerlo llegar a un destino. La fuente y el destino son dos entidades separadas (eventualmente distantes) que estn vinculadas por un canal, que es el soporte de la comunicacin por una parte, pero que por otra es donde se alojan perturbaciones. Las perturbaciones tienen por efecto crear una diferencia entre el mensaje emitido y el recibido. Estas perturbaciones son de naturaleza aleatoria, es decir que no es posible (ni para la fuente ni para el destino) prever de forma certera su efecto. El canal no slo est expuesto al ruido, sino tambin a ataques. Existen diferentes tipos de ataques, tal como se ilustra en la Figura 1.2, el ataque puede ser pasivo, si se limita a la intercepcin del mensaje o activo cuando el mensaje ha sido capturado, modificado o eliminado.
Ataque pasivo Ataques activos

Intercepcin

Eliminacin

Fuente

Destino

Fuente

Destino

Tercero no deseado

Tercero no deseado

Modificacin

Fuente

Destino

Tercero no deseado

Fabricacin

Fuente

Destino

Tercero no deseado

Figura 1.2 Tipos de ataque.

En trabajos realizados en Bell Labs por Claude Shannon1, se contempla la conveniencia de efectuar codificacin de fuente y canal para contrarrestar los efectos nocivos de las perturbaciones en la comunicacin. Los resultados fundamentales de la teora de la informacin fueron establecidos pblicamente por Shannon desde 1948 (a la ptica de las telecomunicaciones), y en particular el hecho capital, y totalmente imprevisto en la poca, de que es posible establecer una transmisin de informacin exenta de errores, pese a la existencia de ruido de fondo, pero ello supone una representacin apropiada de la informacin (normalmente identificada con en trmino codificacin) y la imposicin de restricciones al caudal (o densidad) de informacin transmitida, que dependen de las caractersticas del canal. Sin embargo, hubo que esperar los desarrollos recientes en informtica y telecomunicaciones para ver aparecer sistemas que se aproximen efectivamente a las condiciones extremas enunciadas por Shannon.

Figura 1.3 Modelo de comunicacin con codificacin/decodificacin de fuente/canal.

El modelo de comunicacin "ideal" puede ser esquematizado tal como se representa en la Figura 1.3. Ah se ven aparecer dos conjuntos de codificacin CS y CC (y los elementos de decodificacin correspondientes DS y DC): CS codifica el mensaje emitido por la fuente de manera que se elimine (o reduzca) la redundancia que contenga; CC codifica los mensajes a la entrada del canal, introduciendo redundancia bajo una forma apropiada que permita la utilizacin del canal sin errores (o con una tasa de errores que responda a las especificaciones tcnicas del sistema). Es de notar que en este esquema las conversiones fsicas necesarias para la utilizacin del canal estn implcitamente representadas en el bloque "canal". Ntese que el estudio de canales fsicos y tcnicas de conversin asociadas constituye una parte importante de las telecomunicaciones, de la que no nos ocupamos sin embargo en el marco de este trabajo.2 Si bien los trabajos de Shannon datan de los aos 40, a lo largo de la historia siempre se ha recurrido a tcnicas que procuran proteger la informacin del conocimiento de personas distintas del destinatario originalmente previsto por quien la emite. Estas tcnicas pueden consistir en ocultar la informacin, en representarla mediante cdigos de uso restringido o en el desordenamiento de los elementos del mensaje. El conjunto de estas tcnicas recibe el nombre de Criptografa.3

Shannon, C. The Mathematical Theory of Communication. Reprinted with corrections from The Bell System Technical Journal. Vol. 27. pp. 379-423, 623-656. July-October, 1948. 2 Wehenkel, L. Thorie de l'information et du codage. Facult des Sciences Appliques. Universit de Lige. Lige. 2001. pp. 7-8. 3 Este trmino procede del las palabras griegas kryptos que significa oculto o secreto, y graphein que significa escritura o tratado

Tambin existe una serie de tcnicas cuyo objeto es volver ininteligible a terceros la informacin que fluye entre fuente y destino sin el consentimiento de stos. El conjunto de tales tcnicas se denomina Criptoanlisis. La suma de conocimientos de la criptografa y el criptoanlisis integra la Criptologa. Para volver ininteligible un mensaje, al que se le llama mensaje claro, la fuente o emisor aplicar un mtodo criptogrfico al que de forma genrica se denomina algoritmo, as como una llave, que especifica los detalles exactos para un procedimiento criptogrfico en particular, esto arroja al canal de comunicacin la misma informacin contenida en el mensaje claro pero de forma que no es comprensiva para terceros, a esto se le llama criptograma. Para recuperar el mensaje claro, que era la forma que tena originalmente la informacin, el destino o receptor debe tomar el criptograma y aplicarle el algoritmo y la llave previamente convenidos con la fuente o emisor. Todo esto se ilustra en la figura 1.4.

Fuente (emisor) Clave

Destino (receptor) Clave

Saludemo s la patria orgullosos de hijos suyos podernos llamar y juremos

Algoritmo Criptograma

Algoritmo

Saludemo s la patria orgullosos de hijos suyos podernos llamar y juremos

Mensaje claro

Mensaje claro

Figura 1.4 Esquema de un proceso criptogrfico

En la jerga tcnica se suele llamar encriptamiento o crifrado al proceso por medio del cual se vuelve ininteligible un mensaje claro, y se habla casi indistintamente de decriptamiento o descifrado para referirse al proceso contrario (recuperar el mensaje claro a partir del criptograma recibido). A este respecto es conveniente precisar que en espaol los trminos encriptamiento y decriptamiento no existen. En ingls y en francs, sin embargo, existe cierto matiz entre las nociones de descifrado y decriptamiento: mientras el trmino descifrado (to decipher en ingls, y dechiffrer en francs) se refiere a la recuperacin del mensaje claro por parte del destinatario a partir de la aplicacin del algoritmo y la llave convenidos con la fuente, el trmino decriptar (to decrypt en ingls, y decrypter en francs) se refiere a obtener el mensaje claro sin conocimiento a priori del mecanismo criptogrfico utilizado, por lo cual este ltimo trmino, siendo ms juiciosos en el uso del lenguaje, debera utilizarse ms para aludir al caso de la intervencin de un tercero que trata de conocer el mensaje claro sin el aval de la fuente y el destino, es decir, en caso de un ataque.4

Real Academia Espaola. Diccionario de la lengua espaola. Real Academia Espaola. Madrid. 1992. 21 Edicin. CLE International. Dictionaire du Franais. Dictionaires LeRobert. CLE International. Paris. 1999 Stern, J. La science du secret. ditions Odile Jacob. Paris. 1998. pp. 10-11.

1.1

Ramas de la Criptografa

Antes se dijo que para proteger la informacin, a lo largo de la historia, se ha recurrido a tres tipos de tcnicas: o o o Aquellas en las que la informacin se oculta reciben el nombre de esteganografa; Aquellas en las que la informacin es representada mediante cdigos que slo conocen la fuente y el destino se denominan codificacin; y Aquellas en las que el mensaje es desordenado mediante la sustitucin o cambio de posicin de sus elementos, recibe el nombre de cifrado.

Lo anterior se ilustra en el esquema de la figura siguiente: Criptologa

Criptografa

Criptoanlisis

Esteganografa

Cdigos

Cifras

Figura 1.5 Tcnicas comprendidas en la Criptologa.

En los siguientes apartados nos dedicaremos a la descripcin de las tres ramas de la criptografa. 1.1.1 Esteganografa

Esta rama de la criptografa consiste camuflar o enmascarar el mensaje de forma que mientras se le transporta permanezca oculto. Es decir que para proteger la informacin, pretende esconder la existencia del mensaje. El trmino esteganografa, que viene del griego stegos (cubierta), significa "escritura oculta" o "escritura encubierta" y es el conjunto de tcnicas que nos permiten ocultar o camuflar cualquier tipo de datos. La esteganografa tiene un origen muy antiguo. Una de las primeras y sencillas tcnicas esteganogrficas era la tinta invisible que consista en ocultar los mensajes escritos con jugo de limn en un papel en el que al calentarlo aparece lo escrito.

Herodoto narra en sus Historias los conflictos entre Grecia y Persia en el siglo V AC. De acuerdo a lo que relata, la utilizacin de ciertas tcnicas criptogrficas salvo a Grecia de ser conquistada por Jerjes, rey dspota de los persas. Es precisamente Herodoto el primero en registrar el uso de tcnicas esteganogrficas. Un cierto Histio, queriendo establecer contacto secreto con su superior, Aristgoras de Mileto, escogi a un esclavo leal, hizo afeitar su cabeza y escribi sobre su cuero cabelludo el mensaje que deseaba enviar; esper a que le creciera de nuevo el cabello y lo envi al encuentro de Aristgoras con la instruccin de hacerse rapar nuevamente para dejar visible el mensaje.5 Herodoto tambin relata que para informar a los espartanos de un ataque inminente de los persas, el rey Demaratos utiliz una estrategia muy elegante: peg tablillas, les retir la cera, grab en la madera el mensaje secreto y los recubri nuevamente con cera. De este modo, las tablillas, aparentemente vrgenes, no llamaron la atencin. El problema era que los griegos no saban qu ocurra cuando Gorgo, la esposa de Leonidas, tuvo la idea de raspar la cera.6. Las tcnicas antes explicadas se han adaptado a los nuevos tiempos y, en muchas ocasiones, aparecen combinadas con mtodos criptogrficos. Las tcnicas esteganogrficas ms comunes en informtica se basan en ocultar la informacin en archivos grficos7 o archivos de sonido. Cuando se usan archivos de sonido la informacin oculta aparece como ruido de fondo, pudiendo confundirse fcilmente con una simple grabacin con algo de ruido. Para ocultar informacin dentro de una imagen requiere de dos archivos. El primero es la imagen que contendr la informacin a ser ocultada, llamada imagen cubierta, y el segundo archivo es el mensaje a ocultar, este mensaje puede ser texto claro, cifrado u otras imgenes. Luego que ambos archivos son combinados, la imagen resultante es denominada estego-imagen8. 1.2 Codificacin

Un cdigo es esencialmente un lenguaje secreto inventado para esconder el sentido de un mensaje.

Herodoto. Los nueve libros de la Historia. Clsicos Jackson. Mxico DF. 1966. pp. 291-294. Herodoto. Op. Cit. pp. 348-356. 7 Para una computadora, una imagen es un arreglo de nmeros que representan intensidades de luz en varios puntos (pxeles). Un tamao comn de imagen es 640 X 480 pxeles y 256 colores, u 8 bits por pxel, as, una imagen podra contener alrededor de 300kb de datos. Las imgenes digitales son tpicamente almacenadas en archivos de 24 u 8 bits. Una imagen de 24 bits provee ms espacio para ocultar informacin; sin embargo, puede ser una imagen muy grande (a excepcin de imgenes JPEG). Todos las variaciones de color por pxeles son derivadas de los tres colores primarios: rojo, verde y azul. Cada color primario es representado por 1 byte; una imagen de 24 bits ocupar 3 bytes por pxel para representar un color determinado, estos tres bytes pueden ser representados como valores hexadecimales, decimales y binarios. En muchas pginas web, el color de fondo es representado por un nmero hexadecimal, un fondo color blanco tendr el valor de FFFFFF: 100 por cierto rojo (FF), 100 por ciento verde (FF) y 100 por ciento azul (FF). Su valor decimal es 255, 255, 255 y su valor binario 11111111, 11111111, 11111111, los cuales son los tres bytes que componen el color blanco. 8 Johnson, N., Jajodia, S. Exploring Steganography: Seeing the Unseen. Computer Practices. S/l,. S/f. Pp. 26-34.
6

Sea el caso del texto guila 3, aqu guila 2, el len est en la jaula. En esta frase, por ejemplo, el agente guila 2 usa palabras cdigo para avisar al agente guila 3 que el sujeto sometido a espionaje (len) entr en una casa (jaula). Los cdigos de espionaje o militares son denominados comnmente de nmeros-cdigo en lugar de palabras-cdigo. Se utilizan libros de cdigo que proveen un diccionario de nmeros-cdigo y sus respectivas palabras. El mensaje anterior podra ser codificado como: 85772 24799 10090 59980, donde, 85772" significa guila 3, "24799" significa guila 2, "10090" significa len y "59980" significa jaula. El conjunto de palabrascdigo y nmeros-cdigo es denominado grupos de cdigo (59980 - jaula). Las palabras que representan son llamadas de texto claro (casa, residencia). Originalmente, los grupos de cdigo estaban en el mismo orden que sus respectivas palabras claras. Por ejemplo, una palabra que comenzaba en a tendra un nmero de cdigo bajo y una palabra que comenzara por z tendra uno alto. Esto permita que el mismo libro de cdigo fuera utilizado tanto para codificar como para decodificar un mensaje. Estos cdigos eran relativamente previsibles y permitan que lectores indeseados descubriesen el patrn y por consiguiente el mensaje, revelando secretos. Para dificultar ms las cosas a posibles intrusos, los creadores de cdigos elaboraron unos donde la relacin entre los grupos y las palabras no es previsible. Esto significa que se necesitan dos libros de cdigos, uno para localizar el texto claro y encontrar los grupos de cdigo correspondientes (codificar) y otro para localizar los grupos de cdigo y texto claro correspondiente (decodificar). Estos cdigos de dos partes son ms difciles de crear y usar, pero tienen la ventaja de ser ms difciles de romper. 1.2.1 Ruptura de cdigos

Descifrar un mensaje codificado es un tanto parecido a la traduccin de un documento a otro idioma, donde la tarea bsica es construir un diccionario de los grupos de cdigo con las palabras claras que ellos representan. Una de las caractersticas de un cdigo simple es el hecho de que algunas palabras son ms frecuentes que otras, como de y un en espaol. En mensajes telegrficos el grupo de cdigo para punto (fin de una oracin) generalmente tambin es comn. Esto ayuda a definir la estructura de un mensaje en trminos de oraciones, y hasta de su sentido. Lo anterior tambin ayuda a romper un cdigo y juntar muchos mensajes codificados con el mismo cdigo y despus obtener evidencias como el lugar de donde fueron enviadas y hacia donde las dirigieron; la hora en que fue enviado; eventos que ocurrieron antes y despus que el mensaje fuera enviado y los hbitos de las personas que los enviaron. Se pueden usar varios trucos para insertar informacin deliberadamente. Por ejemplo, hacer un ataque contra el enemigo en una determinada hora en un determinado lugar y despus examinar mensajes codificados enviados por ellos como reaccin al ataque. Los errores de codificacin son especialmente tiles y es claro que tarde o temprano las personas cometern errores, algunos de ellos desastrosos.

La forma ms obvia de romper un cdigo es obteniendo el libro de cdigos mediante un soborno, robo o invasin. Esta es la flaqueza de los cdigos. Un buen cdigo puede ser ms difcil de romper que un cifrado de sustitucin, pero la elaboracin y distribucin de libros de cdigo pueden ser deficientes. Preparar un nuevo cdigo es como construir un nuevo idioma y elaborar un diccionario para ella es un trabajo intenso, si un cdigo estuviera comprometido, toda tarea requerira ser replanteada, lo que significara mucho trabajo para los codificadores y los usuarios del cdigo. En la prctica, despus de un tiempo de uso los cdigos son alterados para frustrar los intentos de ruptura. Automticamente esto trae consigo mucho tiempo y trabajo. Una vez habiendo sido creados, la distribucin de los cdigos es complicada y fcilmente puede comprometerlos. Se dice que dos personas pueden guardar un secreto s una de ellas estuviera muerta. Puede ser exagerado, pero el hecho es que un secreto es ms difcil de ser mantenido mientras ms personas tengan conocimiento de l. S slo una pocas personas hicieran uso de un cdigo, ste estara razonablemente seguro, pero si ejrcitos enteros hacen uso del mismo cdigo, la dificultad de mantenerlo seguro es mucho mayor. 1.3 Cifrado

Para el anlisis de las cifras es interesante clasificarlas en grupos basados en su funcionalidad. Es a este tipo de procedimiento criptogrfico al que se dedicar mayor atencin a lo largo de ste documento, dado que es el que sustenta la mayora de aplicaciones criptogrficas de la actualidad. 1.3.1 Sustitucin y transposicin

El cifrado por sustitucin es un criptograma en el cual las letras originales del texto original, tratadas individualmente o en grupos de longitud constante, son sustituidas por otras letras, figuras, smbolos o una combinacin de stos de acuerdo a un sistema definido y una llave. El cifrado por transposicin es un criptograma en el cual las letras originales slo son reordenadas de acuerdo a un sistema definido. En otras palabras, para cifrar se recurre a sustitucin o transposicin, la diferencia fundamental entre esos mtodos es que en la sustitucin el valor normal o convencional de las letras del texto original se cambia, sin que su posicin sea modificada; en la transposicin slo se altera la posicin de las letras del texto original sin que haya modificaciones en su valor normal o convencional. Como los mtodos de cifrado son radicalmente diferentes, los principios involucrados en el criptoanlisis de ellos tambin son fundamentalmente diferentes. El cifrado puede efectuarse por sustitucin o transposicin. La sustitucin puede ser monoalfabtica o polialfabtica. El mtodo monoalfabtico puede ser de tres tipos: monogrmico, poligrmico y tomogrmico. A continuacin se describen las caractersticas de cada uno:

1.3.1.1

Sustitucin monoalfabtica monogrmica

En la sustitucin monoalfabtica, tambin conocida como sustitucin simple, se reemplaza uno de cada dos caracteres del texto original por otros, de acuerdo con una tabla preestablecida para obtener el texto cifrado. Como consecuencia, la frecuencia de aparicin de las letras (nmeros o smbolos) del mensaje cifrado es la misma de las letras del idioma usado en el mensaje original. Se le llama monogrmica (o monogrfica) porque cada letra del mensaje original es sustituida por una sola letra nmero o smbolo. Por tanto, la longitud del mensaje cifrado es la misma que la del mensaje original. Las cifras ms antiguas de sustitucin monoalfabticas son el Atbash y el cdigo de Csar. En la criptografa contempornea, se sustituyen bloques de bits en lugar de caracteres. El principio, sin embargo, es el mismo. Este tipo de cifra solo es relativamente seguro slo en textos muy cortos. Un simple criptoanlisis probabilstica, basado en la caracterizacin estadstica del idioma, es suficiente para descifrar el texto. Para aumentar la seguridad de estas cifra se pueden usar nulos, homfonos, polifnicos o repertorios (o nomenclaturas). 1.3.1.2 Sustitucin monoalfabtica poligrmica

El trmino poligrmica o poligrfica denota la utilizacin de varios caracteres. Esta tcnica de sustitucin tiene las mismas caractersticas de la sustitucin simple, con la diferencia de que se sustituye uno o ms caracteres del mensaje original por uno o ms letras, nmeros o smbolos. Por tanto, la longitud del mensaje cifrado no siempre es la misma que la del mensaje original. Esta es la sustitucin ms genrica posible. Dentro de las sustituciones monoalfabticas poligrmicas figura la llamada homofnica. El trmino homofnico procede del griego y significa mismo sonido. Es el concepto de tener tres secuencias diferentes de letras que son pronunciadas de forma semejante. En criptologa es un cifrado que traduce un nico smbolo del texto claro para uno de muchos smbolos cifrados, todos con el mismo significado. 1.3.1.3 Sustitucin monoalfabtica tomogrmica

Los sistemas tomogrmicos son aquellos en los cuales cada letra es representada por un grupo de dos o ms letras o nmeros. Estas letras o nmeros son obtenidos mediante un cifrado por sustitucin o por transposicin separada. Se puede decir que la sustitucin monoalfabtica monogrmica es una sustitucin uniliteral (no confundir con unilateral), pues se cambia cada uno de los caracteres del texto claro por otro cifrado. Cuando los grupos de sustitucin estn constituidos por ms de una letra o smbolo, decimos que la sustitucin es multiliteral. 1.3.1.4 Sustitucin polialfabtica

El trmino alfabeto se aplica al conjunto de smbolos que sern utilizados para sustituir los smbolos (letras) originales. En una sustitucin polialfabtica se utilizan mltiples alfabetos para llevar a cabo la sustitucin de un mismo mensaje.

Los alfabetos no requieren necesariamente tener orgenes diferentes, por ejemplo, un alfabeto romano y otro cirlico. El simple hecho de alterar el orden en la secuencia de las letras ya caracteriza un nuevo alfabeto. Por ejemplo, z-y-x-...-c-b-a es un alfabeto de sustitucin; b-a-dc-... es un alfabeto de sustitucin diferente. Si ambos fueran utilizados para cifrar un mismo mensaje, reemplazando las letras originales, entonces se tratara de una sustitucin polialfabtica. La forma ms antigua de cifrado polialfabtico fue desarrollada por Leon Battista Alberti en 1466. Su sistema consista en escribir el texto cifrado en letras minsculas y usar las maysculas como smbolos denominados indicadores, para enfatizar cuando la sustitucin cambiaba. El alfabeto cifrante del disco de Alberti estaba ordenado e incluye los dgitos del 1 al 4, usados para formar palabras cdigo de un pequeo vocabulario. Posteriormente, formas ms modernas fueron desarrolladas, en las cuales la sustitucin cambiaba para cada letra del texto claro. 1.3.1.5 Sustitucin polialfabtica con clave progresiva

Un sistema de clave progresiva es uno donde los alfabetos cifrantes (o claves) son usados unos despus de otros en un orden normal. Este cifrado fue publicado pstumamente en un libro de Johannes Trithemius que apareci en 1518. En la tabla recta de Trithemius, la clave ABCD...Z es usada como alfabeto regular en la forma indicada por el autor. 1.3.1.6 Sustitucin polialfabtica con palabra clave

Es una sustitucin polialfabtica donde una palabra clave indica los alfabetos cifrantes que deben ser usados. A pesar de ser este sistema atribuido a Vigenre, debe originalmente su origen a Giovanni Battista Bellaso en 1553. Diez aos ms tarde, en 1563, Giambattista Della Porta agreg el uso de alfabetos mixtos a ste sistema. 1.3.1.7 Sustitucin polialfabtica con clave automtica

En un sistema de este tipo hay una clave que indica la eleccin inicial del alfabeto cifrante y despus el propio mensaje determina los alfabetos subsecuentes. La primera propuesta fue de Girolamo Cardano, sin embargo posea fallas. Fue Blaise de Vigenre quien public la forma moderna del cifrado con clave automtica en 1585.

10

2 Evolucin histrica

La criptografa ha pasado, desde sus orgenes hasta la fecha, por tres etapas, que son la era artesanal o manual, la era tcnica o mecnica y la era digital9. La transicin de un perodo a otro se dio por una especie de ruptura o salto cualitativo que permiti a los criptlogos superar obstculos que limitaban el florecimiento de su arte. En la Figura 2.1 se ilustran los lmites de las eras antes mencionadas.

Era artesanal

Era tcnica

Era digital Teorizacin

Empirismo Atbash Julio Csar Trithemius Porta Vigenre Playfair Beaufort

Mecanizacin Hebern Hagelin Enigma Khrya Typex Nema Guerras mundiales

Shannon Turing Establecimiento de estndares Diffie-Hellman Surgimiento de sistemas hbridos Postguerra

Figura 2.1 Eras de la criptografa

Jacques Stern se refiera a esta ltima como era de las paradojas, pero ubica su inicio no con los trabajos de Claude Shannon, sino unos treinta aos ms tarde con los de Diffie-Hellman. Stern J. Op. Cit. pp 9-17

11

2.1

Era Artesanal

La era artesanal se extiende desde los orgenes de la criptografa hasta el perodo comprendido entre las dos guerras mundiales, a pesar de que ciertos procedimientos continuaron coexistiendo con mtodos mecnicos durante la segunda guerra mundial. Este perodo tiende a ejercer entre legos cierta fascinacin, quiz porque la criptologa de la Edad Media y el Renacimiento realzaba un know how esotrico que la relacionaba con la Alquimia10 y la Cbala11. Desde que la confidencialidad fue una necesidad social, la criptografa se convirti en un corolario interesante de la escritura; por consiguiente no son sorprendentes las primicias encontradas desde la poca de los jeroglficos egipcios o textos cuneiformes12. En 1900 A.C., un escriba egipcio us un tipo de jeroglficos en la inscripcin de tumbas. Su intencin no era hacer ms difcil la lectura del texto, sino dar realce a lo escrito. La inscripcin no contena un mensaje secreto, pero incorporaba uno de los elementos esenciales de la criptografa: una transformacin deliberada de la escritura13. Similarmente, varias tabletas conteniendo escritura cuneiforme transforman las frmulas finales (llamadas colofones) de firma y fechado de las tabletas con la ayuda de signos raros, algunos incluso representan el nombre del escriba en serie cifrada14. En la antigua China se escriban mensajes sobre seda fina. Despus se haca una bolita que era envuelta en cera. En seguida, el mensajero engulla la bola. Evidentemente, se trataba de una forma de esteganografa. Se dice que la cultura china no desarroll criptografa a partir de tcnicas de cifrado debido a que, aunque el uso de la escritura era extremadamente antiguo, la literatura estaba siempre restringida a una minora en la cual el mero acto de escribir algo equivala a codificarlo15. El primer caso claro de uso de mtodos criptogrficos se dio durante la guerra entre Atenas y Esparta (431-404 AC), el cifrado se basaba en la alteracin del mensaje original mediante la inclusin de smbolos innecesarios que desaparecan al enrollar la lista en un rodillo llamado

El Diccionario de la Real Academia Espaola la define como el conjunto de especulaciones y experiencias generalmente de carcter esotrico, relativas a la transmutaciones de la materia, que influy en el origen de la ciencia qumica. Tuvo como fines principales la bsqueda de la piedra filosofal y de la panacea internacional. 11 El Diccionario de la Real Academia Espaola ofrece varias definiciones de sta, de las cuales la ms completa se lee como el conjunto de doctrinas teosficas basadas en la Sagrada Escritura, que a travs de un mtodo esotrico de interpretacin y transmitidas por vas de iniciacin, pretenda revelar a los iniciados doctrinas ocultas acerca de Dios y del mundo. Otra de las definiciones vertidas en el mismo diccionario se refiera a ella como un clculo supersticioso para adivinar una cosa. 12 Segn Pastor y Sarasa, El nacimiento del lenguaje escrito en sus formas ms primitivas (ideogrficas y jeroglficas) puede considerarse a su vez como el origen de la criptografa, puesto que eran muy pocos los que podan leer o interpretar los smbolos utilizados. Pastor, J., Sarasa, M. Criptografa digital. Fundamentos y aplicaciones. Prensas Universitarias de Zaragoza. Zaragoza. 1998. pp. 567. 13 David Kahn lo seala como el criptograma ms antiguo del que se tiene conocimiento. Kahn, D. The Code Breakers, The Comprehensive History of Secret Communication from Ancient Times to the Internet. Scribner. New York. 1996. 2nd Edition. pp 71. 14 Kahn, D. Op. Cit. Pp 75. Stern J. Op. Cit. pp 22. 15 Kahn, D. Op. Cit. pp. 74.

10

12

escitalo, el mensaje quedaba claro cuando se enrollaba la tira de papel alrededor de un rodillo de longitud y grosor adecuados. En tiempos de Roma, se sabe que Julio Csar empleaba un cdigo secreto que consista en sustituir cada letra del mensaje por otra que en el alfabeto estuviese a tres posiciones de ella. Posteriormente, el escritor Aulio Gelio sugiri la idea de que en realidad Julio Csar recurra a procedimientos ms complicados. El emperador Augusto, sobrino de Julio Csar, utiliz un sistema similar, pero Suetonio registra que simplemente sustitua una letra del alfabeto por la siguiente, salvo en el caso de la X (la ltima letra del alfabeto romano), a la que sustitua por AA.16 Uno de los ms famosos manuscritos con contenido presuntamente mgico, el papiro Leiden, descubierto en Tebas y escrito en el siglo III en griego y ms tarde en forma demtica17, una versin ampliamente simplificada de jeroglficos empleados para cifrar fragmentos cruciales de recetas y conjuros importantes. Por ejemplo, en una seccin se explica cmo enfermar a un hombre con una enfermedad incurable de la piel, el papiro usaba signos secretos para cifrar las palabras enfermedad de la piel y nombres de variedades de lagartija: Si desea enfermar a alguien con una enfermedad de la piel que no pueda ser curada, una lagartija hantous y otra lagartija hafleele, se cocinan con aceite, y se baa al hombre con la pocin18. Son de especial relevancia los desarrollos en materia de cifrado y criptoanlisis alcanzados por los rabes. Las revelaciones de Mahoma fueron registradas por varios escribas mientras l aun viva, pero solo como fragmentos y correspondi a Ab Bakr, primer califa19 del Islam, dar inicio a la compilacin en un texto nico. El trabajo fue continuado por Omar, el segundo califa, y su hija Hafsa, y fue eventualmente culminado por Uthm n, el tercer califa. Cada revelacin se convirti en uno de los 114 captulos del Corn. El califa gobernante era responsable de llevar a cabo el trabajo del profeta, preservando y difundiendo su palabra. Durante el gobierno de los primeros cuatro califas, el Islam se extendi hacia la mitad del mundo conocido. En 750, despus de un siglo de consolidacin, el ascenso de la dinasta Abbasid trajo consigo la poca dorada de la civilizacin islmica. Entre otras reas del saber, son innumerables sus aportes a las matemticas. Los califas de la dinasta Abbasid parecan menos interesados que sus predecesores en la expansin territorial y se concentraron en el establecimiento y organizacin de su sociedad. Menores impuestos impulsaron los negocios y posibilitaron un crecimiento comercial e industrial, adems que una serie de estrictas leyes redujo la corrupcin y llev seguridad a la ciudadana. Todo esto obtuvo soporte en comunicaciones seguras a partir de del cifrado de documentos, que era utilizada tanto para asuntos de gobierno como comerciales, a tal grado que est documentado el hecho de que funcionarios de gobierno protegan los registros de impuestos haciendo uso rutinario de procedimientos criptogrficos. Llegaron a elaborarse manuales administrativos que daban instrucciones al respecto, tales como el Adab al-Kutt b o Manual de los secretarios que data del siglo X, que incluye secciones completas dedicadas a la criptografa.

Kahn, D. Op. Cit. pp. 84. El Diccionario de la Real Academia Espaola indica que se trata de un gnero de escritura cursiva empleado por los antiguos egipcios para diversos actos privados, as como tambin una variedad de la lengua griega moderna. 18 Kahn, D. Op. Cit. pp. 91. 19 Segn el Diccionario de la Real Academia Espaola el trmino deriva del rabe jalifa que significa sucesor o lugarteniente. Era el ttulo de los prncipes sarracenos que, como sucesores de Mahoma, ejercieron la suprema potestad religiosa y civil en Asia, frica y Espaa.
17

16

13

Los rabes llegaron a familiarizarse con formas de cifrado basadas en sustituciones monoalfabticas, que en realidad no constituyen recursos extremadamente relevantes por su fortaleza en la historia de la criptografa. Sin embargo, adems de estas tcnicas, se dotaba a escolares de conocimientos y procedimientos que permitan romper ciertos esquemas de cifrado, debido a lo que puede considerrseles los creadores del criptoanlisis. Sobre esto hay que remarcar el hecho de que el criptoanlisis solo pudo ser inventado cuando una civilizacin alcanz un nivel de escolaridad lo bastante sofisticado en disciplinas tan diversas como las matemticas, la estadstica y la lingstica, as como a la formacin teolgica. Los rabes llegaron a dominar las bases del criptoanlisis basado en la observacin de la frecuencia de letras. Aunque no se sabe exactamente quien fue el primero en emplearlo, las descripciones ms antiguas de la tcnica datan del siglo IX y se atribuyen al cientfico Ab Y s f Yaq b ibn Is-h q ibn as-Sabb h ibn omr n ibn Ismail al-Kindi. 20. Como puede notarse, por cuestiones religiosas, los rabes avanzaron ms en la creacin y divulgacin de las ciencias, la criptografa y el criptoanlisis no habra de ser la excepcin. Mientras tanto, los reinos cristianos estaban inmersos en el apogeo del oscurantismo. Durante la Edad Media e incluso durante el Renacimiento, la criptografa serva a menudo para propsitos mgicos. Un manuscrito compilado en Npoles entre 1473 y 1490 por Arnaldus de Bruxella usa cinco lneas de cifrado para encubrir la parte ms relevante del procedimiento para hacer la piedra filosofal. La asociacin entre magia y criptografa se vio reforzada por varios aspectos. Smbolos misteriosos eran usados en campos tales como la astrologa y la alquimia y tambin para fines criptogrficos. Palabras cifradas y encantamientos tales como abracadabra parecan carecer de sentido, pero en realidad portaban mensajes presumiblemente importantes entre quienes los usaban. Por otra parte, otro factor importante que abon a esta confusin fue la propagacin de la curiosidad que suscitaba la cbala tanto entre judos como cristianos21. Se sabe que San Bernardino evitaba la regularidad de los signos (con lo que el criptoanlisis por el mtodo de las frecuencias no era efectivo) sustituyendo letras por varios signos distintos, as tena un smbolo para cada consonante, usaba tres signos distintos para cada una de las vocales y utilizaba signos sin ningn valor. Son particularmente interesantes los aportes de Roger Bacon (1210-1214), monje, filsofo, sabio, cientfico y telogo ingls: es el nico escritor de la Edad Media que no se limit a usar la criptografa sino que lleg a describirla en su obra Secret Works of Art and the Nulity of Magic. List varios mtodos de cifrado, entre ellos, algunos que usan slo consonantes, expresiones figuradas, letras de alfabetos exticos, caracteres inventados, taquigrafa, figuras mgicas y hechizos22. Geoffrey Chaucer, el poeta ingls, escribi el libro The Equatorie of the Planetis, el cual contiene varios pasajes cifrados hechos de letras, dgitos y smbolos, en los cuales, por ejemplo, la letra a es representada por un smbolo parecido a la letra V y b por uno parecido a la letra alfa.

Singh, S. The code book. The Science of Secrecy from Ancient Egypt to Quantum Cryptography. Anchor books. New York. 1999. pp. 14-17. 21 Kahn, D. Op. Cit. pp. 91-92. 22 Kahn, D. Op. Cit. pp. 90.

20

14

En la Edad Media y el Renacimiento, los criptlogos eran a menudo matemticos, los perodos siguientes los reemplazaran con frecuencia por militares, lo cual sin duda, no se deba ms que a una cuestin de organizacin social. Los duques de Sforza, gobernantes oligrquicos de Miln, tambin se sirvieron de la criptologa. Uno de sus secretarios, Cicco Simonetta escribi uno de los primeros tratados dedicados enteramente al criptoanlisis: el Liber Zifrorum, en julio de 1474. En l estableca trece reglas para resolver cifrados de sustitucin monoalfabtica en los que se mantenan divisiones entre palabras. El manuscrito comenzaba diciendo: el primer requisito es ver si el documento se encuentra en latn o en lengua verncula, este puede determinarse de la siguiente manera: ver si las palabras del documento en cuestin tienen ms o menos de cinco diferentes terminaciones; si hay cinco o menos puede concluirse que esta en lengua verncula.... Otras cortes europeas tambin tenan criptoanalstas a su servicio. En Francia, Philibert Babou, seor de Bourdaisire, que ocupaba el cargo de primer secretario de estado resolva despachos interceptados para Francisco I. Babou fue capaz de resolver criptogramas de lenguas que no saba hablar, o que entenda muy poco, como el espaol, italiano o alemn23. El conocimiento de la criptologa lleg hasta Iberia en la poca en que los Reyes Catlicos expulsaron a los moros y unificaron el pas para comenzar a erigirlo como potencia mundial. Los primeros sistemas, introducidos en 1480 por Miguel Prez Alzamn, transformaban el texto claro en numerales romanos, el resultado era tan difcil de decodificar que algunos descifradores marginaron las notas con frases como: sin sentido, imposible, no puede ser entendido, ordene al embajador enviar otro despacho. Se considera a Johannes Trithemius como el padre de la criptografa moderna. Nacido en Trittenheim, una pequea ciudad alemana de la que le viene el nombre, era un abad benedictino que se interes por las ciencias naturales y se gan fama de mago lo que hizo que el mismo terminara siendo declarado hereje por la Inquisicin. Este religioso escribi en 1530 Poligrafa, uno de los libros ms importantes que abordan el tema. Trithemius introdujo el concepto de tabla ajustada, en el cual el alfabeto normal es permutado para codificar los mensajes. El noble de Brescia, Giovan Battista Belaso, public en 1553 El autntico modo para escribir en cifra. Tambin haba descrito los cifrarios polialfabticos. Belaso y Blaise de Vigenre ofrecieron un sistema de autoclave para incrementar la seguridad de los criptogramas. Felipe II ascendi al trono de Espaa en 1556 a los 29 aos de edad, y notific a su to Fernando I de Hungra, que haba decidido cambiar el cifrado usado durante el reinado de su padre Carlos V porque ste haba cado en desuso, y poda haberse comprometido. As, Felipe II entreg a su emisario Juan de Moreo, un sistema que contena alrededor de 400 grupos de cdigo. Franois Vite, al servicio de Enrique IV de Francia, trabaj entre 1589 y 1590 para romper el acertijo, luego brind una solucin completa a su rey. Luego Felipe II descubri que un mensaje que l consideraba irrompible estaba comprometido y se quej ante el Vaticano argumentando que Enrique IV haba recurrido a la magia negra para romper su cdigo. El Papa estaba mejor

Es posible resolver un criptograma en un lenguaje que no se conoce, partiendo de que ese desconocimiento significa slo que no se comprende el significado de las palabras. Kahn, D. Op. Cit. pp 110-111.

23

15

informado, pues su propio criptlogo Giovanni Battista Argenti tambin haba roto el cdigo, con lo que el Felipe II se convirti en el hazmerrer de Europa24. En Francia, el cardenal Richelieu (15851642), quien fuera Primer Ministro de Luis XIII, tuvo a su servicio al primer criptlogo de tiempo completo Antoine Rossignol, quien se convirti en un importante bastin en la lucha contra los hugonotes y las potencias europeas de la poca. La descendencia de Antoine Rossignol tambin habra de consagrarse en trabajos criptogrficos al servicio de la Corona francesa. Por ejemplo su hijo Bonaventure y su nieto AntoineBonaventure tambin haca criptoanlisis para corona en tiempos de Luis XIV y Luis XV. En el siglo XVI, Girolamo Cardano, fsico y matemtico italiano, utiliz el mtodo de la tarjeta con agujeros perforados, que se deba colocar sobre un texto para poder leer el mensaje cifrado, adems fue el creador del primer texto que versaba sobre la teora de la probabilidad. Inventor del primer e imperfecto sistema de autoclave, en el cual cada mensaje de texto claro tiene la clave para cifrarse a s mismo. Cardano public 131 libros y 111 manuscritos, en los cuales discuta sobre matemticas, astronoma, astrologa, fsica, ajedrez, apuestas, la inmortalidad del alma, curas milagrosas, dialectos, la muerte, gemas y colores, venenos, aire, agua, sueos, orina, dientes, msica, moral y sabidura. Nunca public un libro sobre criptologa, pero s abordaba el tema en sus dos libros ms difundidos: De Subtilitate y De Returm Varietate, en los cuales describa los mtodos clsicos de cifrado de la antigedad. Blaise de Vigenre public en 1586 su Traict des Chiffres donde recoge los distintos mtodos utilizados en su poca, el mtodo Vigenre es un mtodo clsico de cifrado por sustitucin que utiliza una clave, del cual se dan ms detalles en apartados posteriores. Fue tambin en 1586 que Thomas Phelippes rompi el cifrado de la Reina Maria de Escocia. Sir Francis Bacon (1561-1626) invent el uso de dos tipos de letra para transportar un mensaje secreto. l describi su mtodo en la versin latina De dignitate et augmentis scientiarum (1623) de un libro titulado Proficience and Advancement que haba publicado en 1605.Su mtodo nunca logr gran importancia prctica25. Carlos I de Inglaterra us en el siglo XVII cdigos de sustitucin silbica. Napolen, en sus campaas militares y en los escritos diplomticos, us los llamados mtodos Richelieu y Rossignol y para evitar la regularidad de los smbolos asignaba nmeros a grupos de una o ms letras. Las continuas guerras e innumerables confabulaciones y conspiraciones en Europa dieron lugar a que las cortes de las grandes potencias europeas organizaran sus correspondientes y departamentos expertos de criptoanlisis: son famosos el siniestro Cabinet Noir, de Pars, y la Geheime Kabinets - Kanzlei, de Viena. El siglo XVIII no fue una poca de grandes avances criptogrficos. El telgrafo, inventado por Samuel Morse a principios del siglo XIX, y la aparicin de la radio revolucionaron las
Bauer, F. Decrypted Secrets. Methods and Maxims of Cryptology. Springer Verlag. New York. 2002. pp. 68. Singh, S. Op. Cit. pp. 28-29. 25 Bauer, F. Op. Cit. pp. 9.
24

16

comunicaciones y obligaron a la criptografa a desarrollarse como ciencia. Ambos medios eran fciles de interceptar lo que dio lugar a que en los mbitos militares y diplomticos se buscaran nuevas maneras de mantener en secreto importantes mensajes. En el ao de 1857, en Inglaterra, se present un nuevo sistema de escritura secreta adaptado para telegramas y postales, consista en una tarjeta de 4x5 pulgadas con el alfabeto impreso en color negro y rojo. Su creador fue el almirante Sir Francis Beaufort, quien dio origen a su cifrado utilizando la escala mediante la cual los meteorlogos indicaban la velocidad del viento, con nmeros desde 0 (calmado) hasta 12 (huracn). Despus de la muerte del almirante, fue su hermano quien hizo pblico el criptosistema. Usa un cuadro alfabtico esencialmente similar al de Vigenre, pero se diferencia de l al repetir el alfabeto. El sistema haba sido originalmente propuesto por Giovanni Sestri casi 150 aos que Beaufort, en un libro publicado en Roma en 1710, que fue ampliamente ignorado. Si embargo, bajo el nombre de Beaufort, este cifrado se convirti en un estndar del repertorio de la criptografa, pese a que su importancia terica no es significativa. En el siglo XIX se utiliza ampliamente el mtodo de transposicin, consistente en la reordenacin segn distintos criterios de los smbolos del mensaje. Auguste Kerckhoffs, lingista holands naturalizado francs, indica las reglas que a su juicio deba cumplir un buen sistema criptogrfico: o o o o o o El sistema debe ser materialmente, y matemticamente, indescifrable; El hecho de que caiga en manos del enemigo no debera posibilitar el descubrimiento del secreto; La clave debe poder ser comunicada y retenida sin el envo de notas escritas, as como cambiada y modificada segn el criterio de las partes; Debe ser aplicable a la correspondencia telegrfica; Debe ser porttil, y su manipulacin o funcionamiento no debe exigir el concurso de muchas personas; Finalmente, es necesario, vistas las circunstancias requeridas para su aplicacin, que el sistema sea de fcil uso, que no demande ni tensin de nimo ni el conocimiento de una larga serie de reglas a observar.26

De lo anterior puede considerarse que la seguridad, la simplicidad y la rapidez son los conceptos clave de un sistema criptogrfico. Sin embargo, la idea ms relevante de las expresadas por Kerckhoffs es la que enuncia que mientras la clave permanezca secreta, no importa tanto si el algoritmo es pblico, pues es una idea que aun conserva validez. Otro terico del siglo XIX llamado Wilhelm Kasiski, oficial prusiano, revolucion la criptologa casi sin darse cuenta y abri las puertas a la criptologa moderna en una obra que public en 1863 titulada Les chiffres et lart du dcryptement, que expone por primera vez mtodos estructurados de criptoanlisis, en particular su mtodo de decriptamiento de sustituciones polialfabticas.27 Charles Babbage dise en 1823 la Difference Engine No. 1, una calculadora mecnica que constaba de alrededor de 25,000 piezas de precisin, adems de dedicarse al diseo de mquinas de este tipo, Babbage tena slidos conocimientos de criptoanlisis, a tal grado que fue capaz de romper el cifrado de Vigenre, para lo cual Babbage se vali del anlisis de frecuencia. Kasiski tambin habra de romper dicho esquema de cifrado basndose en el mtodo de incidencia de las coincidencias en que public en la obra de 1863 a la que se hizo referencia antes. La
26 27

Kerckhoffs, A. La cryptographie militaire. Journal des Sciences Militaires. Janvier 1883. Stern, J. La science du secret. ditions Odile Jacob. Paris. 1998. Pp. 28-29.

17

repeticin de un determinado grupo de letras en el criptograma, proveniente de un mismo grupo de letras en el texto claro, tiene lugar a una distancia mltiplo de la longitud de la palabra clave. Estudiando estas repeticiones puede determinarse la longitud de la palabra clave, conocida dicha palabra, el criptograma se descompone en criptogramas sencillos correspondientes a cifrados de Csar. Durante la Primera Guerra Mundial, el trasatlntico Lusitania fue hundido por los alemanes en 1915, pereciendo ms de 1,200 personas. Este hecho polariz la opinin pblica norteamericana apoyando la entrada de los Estados Unidos en la guerra. El presidente T. Woodrow Wilson, quien haba fomentado activamente la no beligerancia de su pas, se opona. Sin embargo, el 17 de enero de 1917 los servicios secretos ingleses interceptaron un telegrama cifrado del ministro de Asuntos Exteriores de Alemania, Arthur Zimmermann, dirigido al conde Heinrich A. von Bernstorff, embajador alemn en Washington. El mensaje se haba cifrado por medio del cdigo 0075, un diccionario de lista doble de 10,000 palabras o frases que los ingleses ya haban conseguido descifrar parcialmente. En l se haca referencia a otro telegrama que deba enviarse a Mxico. Los ingleses consiguieron interceptar este segundo telegrama y observaron que se haba cifrado con otro cdigo, el 13040, que constaba de 25,000 palabras, esto represent un grave error criptogrfico ya que permiti a los ingleses descifrar el mensaje. El resultado fue sorprendente: si Mxico declaraba la guerra a los Estados Unidos para recuperar sus antiguos territorios de Nuevo Mxico, Arizona y Texas, Alemania le apoyara. Wilson se vio forzado a entrar en guerra contra Alemania. 2.1.1 2.1.1.1 Mtodos artesanales Atbash

Mtodo hebreo de alrededor de los aos 600500 A.C., que consista en tomar cada letra, calcular el nmero de lugares que lo separan de la primera letra del alfabeto y reemplazarla con una letra que se encuentra en la misma distancia del final del mismo. En alfabeto espaol equivale a reemplazar: o o La letra "a", al principio alfabeto, por la letra "z"; La letra "b" se cambia por la letra "y".

El nombre Atbash proviene de las dos primeras y las dos ultimas letras del alfabeto hebreo, combinadas de la siguiente forma: aleph, taw, beth, shin. Un ejemplo de Atbash aparece en Jeremas 25:26 y 51:41, donde el nombre Babel es reemplazado por la palabra Sheshach, la primera letra de Babel beth, segunda letra del alfabeto hebreo, y es reemplazada por shin, la penltima; en hebreo la segunda letra de Babel es tambin beth, y nuevamente es reemplazada por shin; la ltima letra de Babel es lamed, duodcima letra del alfabeto hebreo y es reemplazada por kaph, que es la que se encuentra a doce posiciones de la ltima letra del alfabeto28.

28

Kahn, D. Op. Cit. pp 76-80. Singh, S. Op. Cit. pp 26.

18

aleph

beth

gimel

dalet

he

waw

zayin

heth

teth

yod

Kaph

lamed

mem

Nun

samekh

ayin

pe

sadhe

qoph

resh

shin

Taw

Tabla 2.1: Alfabeto hebreo

2.1.1.2

Mtodo de Esctalo

En la Grecia clsica, los foros (gobernantes) espartanos transmitan sus instrucciones a sus estrategas (generales) utilizando un bastn, el escitalo, siglo IV A.C. El historiador griego Plutarco describe la el escitalo o scitala espartana como una vara de la que se preparaban dos o ms bastones idnticos. Las rdenes se escriban en una tira de pergamino o papiro enrollada a lo largo del bastn. Desenrollada, solamente contena una sucesin de letras inconexas que se enviaba al destinatario, para poder leer el mensaje ste deba tener en su poder una copia del bastn. Al colocar de nuevo la cinta en el bastn apareca el mensaje29.

Figura 2.2: Escitalo

2.1.1.3 Mtodo de Csar


El algoritmo de Csar, llamado as porque es el que empleaba Julio Csar para enviar mensajes secretos, es uno de los algoritmos criptogrficos ms simples. Consiste en sumar 3 nmeros de orden de cada letra. De esta forma a A le corresponde D, a Be la E, y as sucesivamente. Para descifrar basta con restar 3 al nmero de orden de las letras del criptograma30. 2.1.1.4 El Kama Sutra

El libro ertico ms famoso de Vtsy yana, el Kama Sutra, lista la escritura secreta como una de las 64 artes o yogas que las mujeres deben saber y practicar, es la nmero 45 de una lista que inicia con la msica vocal, pasando por prestidigitacin, solucin de rompecabezas verbales, y ejercicios de poesa enigmtica. Este arte es llamado mlecchita-vikalpa, una de sus ramas llamada kautiliyam en la cual la sustitucin de letras estaba basada en relaciones fonticas, por ejemplo, las vocales se convertan en consonantes. El texto claro en la mayor parte de las secciones cifradas estaba escrito en griego, y el alfabeto cifrado consista bsicamente en smbolos de letras griegas.

29

Kahn, D. Op. Cit. pp 82. Singh, S. Op. Cit pp 8-9. 30 Brisson, R., Thberge, F. Un aperu de lhistoire de la cryptologie. Descargado de http://collection.nlcbnc.ca/100/200/301/cse-cst/overview-f/musee.pdf el 7 de diciembre de 2003.

19

2.1.1.5

Nomenclator

A peticin de Clemente VII, Gabrieli di Lavinde que era uno de sus secretarios, compila un conjunto de llaves individuales para un alfabeto de sustitucin en un cdigo pequeo. Su coleccin de llaves (la ms antigua existente en la civilizacin occidental moderna) inclua varias que combinaban elementos para cdigo y cifrado. Cada clave corresponda a un pequeo repertorio de una docena o ms palabras comunes o nombres equivalentes de dos letras. El Nomenclator una alfabetos de sustitucin y listas de cdigos de palabras, slabas y nombres equivalentes. Esta clase de sistema criptogrfico permaneci en uso entre diplomticos y algunos civiles durante los siguientes 450 aos31. 2.1.1.6 Mtodo de Alberti

Leon Battista Alberti (1402-1472), uno de los ms famosos exponentes del Renacimiento italiano, escribi un tratado titulado Modus scribendi in ziferas, donde describe, entre otras cosas, unos discos con los que se podan cifrar mensajes. Este hombre fue secretario de claves de la Curia Vaticana, otra potencia de la poca, su contribucin fue tan importante que ha merecido el ttulo de "padre de la criptografa occidental". 2.1.1.7 Mtodo de Trithemius

En 1508 inici la publicacin de su Polygraphi, obra en seis volmenes que presentaba una coleccin de palabras en latn que codificaba a las letras del alfabeto, lo que se conoci posteriormente como el cdigo Ave Maria. Deus A B Creator C Conditur D Opisex E Dominus F Dominator G Consolator H Arbiter A clemens B clementissimus C pius D pijssimus E magnus F excelsus G maximus H optimus

Tabla 2.2 Cdigo Ave Maria

As, por ejemplo la palabra ACECHA podra cifrarse como: DEUS PIUS DOMINUS MAGNUS CONDITOR OPTIMUS CLEMENS 2.1.2 Sistema de autoclave

Girolamo Cardano fue el creador de ste sistema, en el cual se utiliza el mensaje claro para generar su propia clave. La principal observacin es que la clave es funcin del texto claro y que adems la clave puede cambiar con cada mensaje.

31

Bauer, F. Op. Cit. pp. 68-70. Kahn, D. Op. Cit. pp. 107.

20

2.1.2.1

Mtodo de Porta

Este sistema fue puesto en marcha en 1563 por Giovanni Battista da Porta. Su mtodo es descrito por medio de la Tabla 2.3 Requiere una palabra clave cuyas letras formen letras clave. La primera columna, que contiene pares de letras secuencialmente ordenadas del alfabeto, contiene la componente de la palabra clave. La fila de arriba, contiene la componente primaria del texto claro. Su asociacin permite una sustitucin recproca para una letra clave en particular. Supongamos una letra clave, si la letra del texto claro figura en la fila de arriba, se le sustituye por la letra que aparece en la interseccin con la columna donde se encuentra la letra en claro y la fila donde se encuentra la letra clave. Si la letra del texto claro no forma parte de la fila de arriba, se le busca en la fila donde se encuentra la letra clave y se le sustituye por la letra correspondiente. AB CD EF GH IJ KL MN OP QR ST UV WX YZ a n z y x w v u t s r q p o b o n z y x w v u t s r q p c p o n z y x w v u t s r q d q p o n z y x w v u t s r e r q p o n z y x w v u t s F S R Q P O N Z Y X W V U T g t s r q p o n z y x w v u h u t s r q p o n z y x w v i v u t s r q p o n z y x w j w v u t s r q p o n z y x k x w v u t s r q p o n z y l y x w v u t s r q p o n z M Z Y X w V U T S R Q P O N

Tabla 2.3. Tabla de Porta

Cifremos ENVIAR MEDICINAS utilizando como palabra clave la palabra GUAZAPA. Texto claro: ENVIAR MEDICINAS Palabra clave: GUAZAPA GH UV AB YZ AB OP AB A X Q N O N T N b y r o p o u o c z s p q p v p d n t q r q w q e o u r s r x r F P V S T S Y S g q w t u t z t h r x u v u n u i s y v w v o v j t z w x w p w k u n x y x q x l v o y z y r y m w P Z N Z S Z

Palabra clave: Texto claro: Texto cifrado:

GUAZAPAGUAZAPAG ENVIARMEDICINAS OKIWNLZOTVQVTNI

21

2.1.2.2

Mtodo de Vigenre

Este mtodo de cifrado es el fruto del trabajo de Blaise de Vigenre, un francs que vivi entre 1523 y 1596. Al parecer que el mtodo fue puesto a punto por Vignre durante sus visitas al Vaticano. El principio de este mtodo consiste en utilizar una sustitucin alfabtica diferente para cada posicin, lo cual torna el anlisis de frecuencias un poco menos atractivo. Una palabra clave es utilizada y escrita en muchas ocasiones sobre el texto claro tal como en el mtodo de Porta. En el ejemplo que sigue, la palabra clave es VOLCAN. Para cifrar, se elige la fila de la Tabla 3 que corresponde a la letra apropiada de la palabra clave y se opera una sustitucin alfabtica con la letra situada en la interseccin de la columna correspondiente a sta y de la fila correspondiente a la letra del texto claro. El cifrado del texto claro se efecta entonces para tantas sustituciones diferentes como letras hay en la palabra clave.
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A A B C D E F G H I J K L M N O P Q R S T U V W X Y Z B B C D E F G H I J K L M N O P Q R S T U V W X Y Z A C C D E F G H I J K L M N O P Q R S T U V W X Y Z A B D D E F G H I J K L M N O P Q R S T U V W X Y Z A B C E E F G H I J K L M N O P Q R S T U V W X Y Z A B C D F F G H I J K L M N O P Q R S T U V W X Y Z A B C D E G G H I J K L M N O P Q R S T U V W X Y Z A B C D E F H H I J K L M N O P Q R S T U V W X Y Z A B C D E F G I I J K L M N O P Q R S T U V W X Y Z A B C D E F G H J J K L M N O P Q R S T U V W X Y Z A B C D E F G H I K K L M N O P Q R S T U V W X Y Z A B C D E F G H I J L L M N O P Q R S T U V W X Y Z A B C D E F G H I J K M M N O P Q R S T U V W X Y Z A B C D E F G H I J K L N N O P Q R S T U V W X Y Z A B C D E F G H I J K L M O O P Q R S T U V W X Y Z A B C D E F G H I J K L M N P P Q R S T U V W X Y Z A B C D E F G H I J K L M N O Q Q R S T U V W X Y Z A B C D E F G H I J K L M N O P R R S T U V W X Y Z A B C D E F G H I J K L M N O P Q S S T U V W X Y Z A B C D E F G H I J K L M N O P Q R T T U V W X Y Z A B C D E F G H I J K L M N O P Q R S U U V W X Y Z A B C D E F G H I J K L M N O P Q R S T V W X Y V W X Y W X Y Z X Y Z A Y Z A B Z A B C A B C D B C D E C D E F D E F G E F G H F G H I G H I J H I J K I J K L J K L M K L M N L M N O M N O P N O P Q O P Q R P Q R S Q R S T R S T U S T U V T U V W U V W Y Z Z A B C D E F G H I J K L M N O P Q R S T U V W Y Z

Tabla 2.4 Tabla de Vigenre

Palabra clave: Texto claro: Texto cifrado:

VOLCANVOLCANVOLC SALIRDESANMIGUEL NOWKRQZGLPMVBIPN

Para este mtodo, el destinatario debe conocer la palabra clave y la tabla de cifrado. Esta tabla puede ser tan simple como la antes presentada. El proceso de descifrado se completa simplemente procediendo a la inversa.

22

2.1.2.3

Mtodo de Playfair

El cifrado de Playfair en realidad fue inventado por Charles Wheatstone, para comunicaciones telegrficas secretas en 1854, no obstante se le atribuye a su amigo el cientfico Lord Playfair. Utilizado por el Reino Unido en la Primera Guerra Mundial, este sistema consiste en separar el texto en claro en diagramas y proceder a su cifrado de acuerdo a una matriz alfabtica de dimensiones 5 X 5 en la cual se encuentran representadas las 26 letras del alfabeto ingles, aunque para una mayor seguridad se puede agregar una palabra clave. La clave se coloca al comienzo de la matriz quitando las repeticiones y a continuacin el resto de las letras del alfabeto.
A F L Q V B G M R W C H N S X D I/J O T Y E K P U Z

Tabla 2.5 Matriz alfabtica

A continuacin se presenta una versin simplificada de este mtodo: o Llenar una tabla de dimensiones 5x5 con letras del alfabeto en pares. Esta puede ser complementada con una palabra clave inscribiendo consecutivamente en la tabla la primera aparicin de cada letra de la palabra clave seguida de las otras letras del alfabeto. La Tabla 3 se ha construido a partir de la palabra clave PERRO agrupando I y J.
P B H N V E C I/J Q W R D K S X O F L T Y A G M U Z

Tabla 2.6 Matriz alfabtica de tipo Playfair

Escribir el texto claro por grupos de dos letras. Si un par contiene la misma letra dos veces, se agrega una letra complementaria (como la X) entre ellas. Por ejemplo, CARRETERA BLOQUEADA se escribe CA RX RE TE RA BL OQ UE AD AX. La letra complementaria es X y es utilizada en dos ocasiones, la segunda de las cuales fue para completar el ltimo par del mensaje. Para cada par de letras, la Tabla 2.6 es utilizada como sigue: Si las letras estn en la misma columna, cada una de ellas es reemplazada por la letra situada inmediatamente abajo; si una letra est debajo de la columna, es reemplazada por la primera de la columna;

o o

23

Si las letras estn en la misma fila, cada una es reemplazada por la letra situada inmediatamente a su derecha; si una de las letras es la ltima de la fila, es reemplazada por la primera de esa misma fila. Si las dos letras no se encuentran ni en la misma fila ni columna, se les reemplaza de la manera siguiente: la primera letra cifrada es obtenida tomando la letra situada en la interseccin de la fila que contiene la primera letra del texto claro; la segunda letra cifrada se obtiene tomando la interseccin de la columna que contiene la primera letra del texto claro y de la fila que contiene la segunda letra del texto claro. Texto claro
CA RX RE TE RA BL OQ UE AD AX Diferente fila y columna Diferente fila misma columna Misma fila diferente columna Diferente fila y columna Misma fila diferente columna Diferente fila y columna Diferente fila y columna Diferente fila y columna Diferente fila y columna Diferente fila y columna

Caso

Texto cifrado
GE DR OR QO OP FH ET QA RG RZ

Tabla 2.7 Proceso de cifrado de tipo Playfair

Las etapas de cifrado del texto claro del ejemplo anterior son presentadas en el cuadro siguiente. El texto cifrado es en seguida escrito como una secuencia continua de letras: GEDRORQOOPFHETQARGRZ. 2.1.2.4 Caracterizacin de la era artesanal

Entre los orgenes de la criptografa y la primera guerra mundial, los mtodos artesanales fueron mejorando lentamente, permaneciendo bastante vulnerables, debido a dos factores, el primero, la pobreza del entorno tecnolgico, y el empirismo reinante. Son notorios los lmites de las defensas que los criptgrafos oponan a los criptoanalistas de la era artesanal. Dichos lmites estaban ligados a la restringida capacidad fsica de cifrar y descifrar sin el auxilio de documentos especficos, cuya seguridad segua siendo problemtica. Estos inconvenientes no carecen de consecuencias sobre el desarrollo de los principios mismos de la criptografa; es as que los mtodos polialfabticos, en los que la clave evoluciona durante el proceso de cifrado, no pudieron imponerse en ausencia de mquinas (pese a haber sido ya vislumbrados), pues el menor error se poda propagar hasta el final del texto volvindolo ininteligible tambin al destinatario32. 2.1.2.5 Criptosistema de Vernam

El mtodo de Vigenre fue llevado a su mxima extensin lgica en 1935 por el criptgrafo estadounidense Gilbert S. Vernam. Este investigador demostr que para que el cifrado de Vigenre fuera seguro no solamente era necesario que la clave de cifrado fuese ms larga que el
32

Stein, J. Op. Cit. pp. 38-39.

24

mensaje, sino que adems debera ser utilizado una sola vez. Bajo estas condiciones el cifrado de Vernam (tambin denominado one time pad) es un cifrado perfecto, tal como demostr Shannon posteriormente. Es conveniente hacer notar en este punto que el cifrado perfecto de Vernam es de difcil e incluso imposible implementacin prctica con la tecnologa actual. A pesar de ello, es el que sirve como modelo de referencia para muchos otros procedimientos de cifrado desarrollados en la criptografa moderna, en particular para los de flujo33.

2.1.2.6 ADFGVX
Este cifrado, inventado por Fritz Nebel (1891-1967), se instal en el frente occidental alemn que estaba bajo el mando del General Erich Ludendorff, para la transmisin inalmbrica. Este mtodo fue de los primeros en unir la transposicin y la sustitucin dos procesos que producen, en la terminologa actual, difusin y confusin34. El cifrado inicia al dibujar una cuadrcula de 6x6 las filas y las columnas se encabezan con las letras ADFGVX, se llenan los 36 cuadros con las 26 letras del alfabeto anglosajn y 10 dgitos, el modo de ordenar letras y nmeros en la cuadrcula forma parte de la clave y necesita ser comunicada al receptor del mensaje.
A D 0 q u 8 6 3 s 4 l y j F 9 1 w v d i G V X z 7 c h n t 5 o f r p e b 2 g a k x

A F G V X

D m

Tabla 2.8 Matriz ADFGVX

Por ejemplo: La primera fase para realizar el cifrado consiste en tomar cada letra del mensaje claro y sustituirla por las letras correspondientes a su fila y columna. Por ejemplo el nmero 5 sera sustituido por las letras VG y la j por el par de letras XA. El mensaje claro: ENVIEN MUNICIONES VV

N FG

V GF

I XF

E VV

N FG

M DA

U DD

N FG

I XF

C AX

I XF

O XG

N FG

E VV

S XD

Hasta aqu solo se ha realizado la parte de sustitucin.

33 34

Pastor, J., Sarasa, M. Op Cit pp. 575. Bauer, F. Op. Cit. pp. 51 y 159. Singh, S. Op. Cit. pp. 103-104.

25

La segunda fase es en la cual se utiliza la trasposicin que depende de una palabra clave. Si la clave es WHISKY. Las letras de la clave se escriben en la cabecera de una cuadrcula. El texto que hemos cifrado antes se escribe por filas en dicha cuadrcula:
W V X D X X X H V F A F G D I F V D A F 0 S G V D X G 0 K G F F X V 0 Y F G G F V 0

Tabla 2.9 Matriz ADFGVX con palabra clave

Se aaden caracteres de relleno (00) para que el cuadro quede completo. Ahora las columnas de la cuadrcula se cambian de posicin de modo que las letras de la clave queden en orden alfabtico:
H V F A F G D I F V D A F A K G F F X V A S G V D X G A W V X D X X X Y F G G F V A

Tabla 2.10 Matriz ADFGVX con palabra clave ordenada alfabticamente

El resultado de leer la tabla 2.10, es el texto cifrado: VFAFGDFVDAFAGFFXVAGVDXGAVXDXXXFGGFVA El texto cifrado se transmita usando clave Morse, ya que el resultado slo consta de 6 letras. La razn por la cual se eligieron las letras ADFGVX en lugar de ABCDEF, es porque las primeras son muy diferentes una de la otra al ser traducidas a la clave Morse, de esta forma, se minimizaba el riesgo de confusin durante la transmisin.
A D F G V X

.-

-..

..-.

--.

...-

-..-

Tabla 2.11 Letras del alfabeto y clave Morse

2.1.3

Otros mtodos

Los mtodos de cifrado descritos hasta el momento son tales que el texto claro es combinado con una clave secreta, segn un algoritmo especfico para producir el texto cifrado. Existen, no obstante, varias otras formas de transmitir secretamente un mensaje: a decir verdad, estas no 26

forman necesariamente parte del dominio de la criptologa. Por ejemplo, se puede utilizar tinta invisible sobre ciertos tipos de papel. El papel puede ser calentado o tratado con productos qumicos a fin de exponer el mensaje secreto. Otro mtodo es la miniaturizacin de la representacin fsica de la informacin: pensemos en micropuntos o microfichas, por ejemplo. El cifrado no es, entonces, la nica manera segura de transmitir un mensaje secreto, pero es prctica y fcil de utilizar, lo que explica su popularidad. 2.2 Era Tcnica

Los sistemas manuales son a menudo lentos y trabajosos para el usuario, al estar basados en el empleo de lpiz y papel. Adems, no permiten el uso de algoritmos complicados. Por ello mtodos de cifrado ms rigurosos y complejos que utilizan aparatos mecnicos fueron desarrollados. La seccin que sigue ofrece una breve aproximacin a los ms clebres de estos aparatos. 2.2.1 2.2.1.1 Modelos de mquinas de cifrado35 Aparato de discos codificadores de Alberti

Este aparato se desarroll en tiempos de la era artesanal, evidentemente no se le produca en serie, pero se le incluye en esta parte por ser arquetipo de muchos de los sistemas criptogrficos mecnicos que surgiran durante la era tcnica. El primer aparato de discos codificadores fue inventado por Len Battista Alberti en el siglo XV. Estaba formado por dos discos concntricos de cuero, uno de estos discos era grande y fijo y el otro ms pequeo y mvil. Estos discos estaban divididos en 24 partes radiales iguales. El disco exterior contena las letras del texto claro en el orden siguiente: { A, B, C, D, E, F, G, I, L, M, N, O, P, Q, R, S, T, V, X, Z, 1, 2, 3, 4 } Es decir, un nmero suficiente de letras del alfabeto para formar la mayora de palabras latinas. El disco interior contena la siguiente permutacin del alfabeto latino: { m, r, d, l, g, a, z, e, n, b, o, s, f, c, h, t, y, q, i, x, k, v, p, et } Este mecanismo, bastante simple en s mismo, ilustra el ingenio de Alberti, quien combina por primera vez una sustitucin polialfabtica y el uso de un cdigo. Otro ejemplo clsico de aparato de disco codificador es el provisto por la Confederate Cipher Disk, fabricado en latn. Este aparato contiene tambin los discos exterior e interior, portando ambos las letras en orden alfabtico. La primera idea era utilizar este mecanismo para el mtodo de Vigenre. 2.2.1.2 El cilindro de Jefferson

El presidente estadounidense Thomas Jefferson (1743-1826) invent un dispositivo de cifrado, aunque el primero en fabricarla en serie fue tienne Bazeries en 1891.
35

Brisson, R., Thberge, F. Op. Cit. pp. 10-16. Las imgenes de las mquinas que se presentan en este apartado han sido tomadas del sitio web http://webhome.idirect.com/~jproc/crypto/menu.html

27

Los sistemas de cifrado anteriores a la II Guerra Mundial son considerados como clsicos, tienen en comn que pueden ser empleados usando simplemente lpiz y papel, y que pueden ser criptoanalizados casi de la misma forma. Este invento consiste en una serie de discos que giran alrededor del mismo eje con letras impresas del alfabeto, colocadas en diverso orden. El emisor va moviendo los discos hasta conseguir poner en lnea las letras adecuadas a su mensaje. Entonces lo codifica transmitiendo las letras que hay en cualquier otra lnea. El receptor, descifra el mensaje, tomando su propia rueda y pone las letras del cdigo en orden y slo tendr que buscar la lnea de letras con el mensaje recibido. En la siguiente figura vemos el resultado de cifrar las palabras "secretword" es decir "mvdtswxhxr".

Figura 2.3 El cilindro de Jefferson

Los criptosistemas clsicos en la actualidad han perdido su eficacia, debido a que son fcilmente criptoanalizables empleando cualquier computadora, pero que fueron empleados con xito hasta principios del siglo XX. La criptografa clsica era una ciencia o ms bien un arte secreto y casi exclusivo de los mbitos oficiales de los ejrcitos y cuerpos diplomticos. Su utilizacin en otros mbitos era tambin secreta, puesto que se practicaba en el comercio de alto nivel normalmente asociado con las clases gobernantes. As como en el mundo de la magia y de la alquimia, con el objeto de transmitir conocimientos que permitiesen ejercer poder sobre los no iniciados. 2.2.1.3 El cilindro de ruedas codificadas M-94/CSP-488

Figura 2.4 Cilindro de ruedas codificadoras M-94

En 1922, el ejrcito de los Estados Unidos hizo fabricar el M-94, un aparato cilndrico que contena 25 anillos de un dimetro aproximado de 4 cm en aluminio sobre un pivote de alrededor de 10.5 cm de longitud. Este mecanismo permaneci en servicio hasta el principio de la Segunda

28

Guerra Mundial. Tambin fue utilizado por la guardia costera y la FCC36 de los Estados Unidos. La marina estadounidense posea una versin parecida llamada CSP-488. 2.2.1.4 La mquina ENIGMA37

En el ao de 1923, un ingeniero alemn llamado Arthur Scherbius patento una de las mejores mquinas de cifrado, especficamente diseada para facilitar las comunicaciones seguras. Se trataba de un instrumento de apariencia simple, parecido a una mquina de escribir. Quin deseara codificar un mensaje slo tena que teclearlo y las letras correspondientes al mensaje cifrado se iran iluminando en un panel. El destinatario copiaba dichas letras en su propia mquina y el mensaje original apareca de nuevo. El gobierno alemn adquiri todos los derechos sobre la mquina y la adapt a sus necesidades, luego, sta se convirti en un estndar para los militares, agentes y policas secretos. Adems de la mquina alemana ENIGMA, existieron otros dispositivos criptogrficos basados en rotores, por ejemplo, SIGABA la mquina empleada por el ejrcito norteamericano, y las mquinas japonesas PURPLE y RED.

Figura 2.5 La mquina ENIGMA y sus rotores

FCC: Federal Communications Comisin. Ente federal de los Estados Unidos encargado de las regulaciones a las telecomunicaciones. 37 Sale, Tony (Translator). The Bletchley Park translated Enigma Instruction Manual. Traducido en 2001 del documento Der Schlssel M Verfahren M Allgemein del Comando Supremo de la Marina Alemana, elaborado en 1940. Descargado de http://www.codesandciphers.org.uk/documents/officer/officer1.pdf el 8 de diciembre de 2003.

36

29

2.2.1.5

Las mquinas de Hebern

En las dos dcadas anteriores a la Segunda Guerra Mundial, Edward H. Hebern (1869-1952) fue el primer inventor americano en hacer una contribucin significante al desarrollo de mquinas de cifrado. Hebern invent, en 1924, mquinas hechas de bronce de 3 y 5 ruedas codificadoras como prototipos para la marina estadounidense. Estas mquinas empleaban ruedas codificadoras cuyo tendido de cables interno poda ser fcilmente cambiado, adems, estas ruedas codificadoras podan funcionar en el sentido de rotacin convencional o en el contrario. Contrariamente, estas mquinas posean infinidad de debilidades desde el punto de vista del criptoanlisis.

Figura 2.6 Primera mquina de cdigo elctrico de Hebern

2.2.1.6

El convertidor M-209 (CSP-1500) de Hagelin

Figura 2.7 Placa y rotor del convertidor M-209

Fabricado por Boris Hagelin a principios de los aos 40 para el ejrcito estadounidense, el M-209 era un aparato mecnico simple que meda 18 cm x 14 cm x 9 cm. Poda ser transportado en un bolso de tela. Sus componentes principales incluan seis ruedas codificadoras de 26, 25, 23, 21, 19 y 17 posiciones respectivamente, asegurando una longitud de ciclo (es decir, el nmero de etapas antes de que una clave dada se repita) de 101,405,850 pasos. Este aparato fue popular debido a que era pequeo, liviano (6 libras) y el entrenamiento para utilizarlo se imparta en unas pocas horas. Para manipular este aparato, el usuario deba girar un 30

botn externo (situado a la izquierda) a fin de seleccionar la letra del texto claro, luego girar la manivela situada a la derecha para activar los componentes internos. Al final de este giro, el aparato imprima la letra cifrada sobre una tira de papel. Durante la Segunda Guerra Mundial, ms de 140,000 unidades de este aparato fueron fabricadas principalmente por la empresa Smith Corona Typewriter de los Estados Unidos. 2.2.1.7 La mquina Khrya

Figura 2.8 Mquina Khyra estndar

Esta mquina criptogrfica apareci en 1924, su inventor fue el ucraniano Alexander von Khrya. Este aparato tena un semicrculo fijo de letras contra el cual estaba yuxtapuesto un disco codificador dotado de engranajes que controlaban el nmero de desfases del disco. Una manivela serva para volver a montar un potente resorte que arrastraba la plataforma sobre la cual estaba instalado el disco codificador interior. La clave consista en otra rueda cuyos segmentos (abiertos o cerrados) controlaban la rotacin del disco codificador interior. A pesar de su bonita apariencia y su pequeo tamao, este aparato ejecutaba esencialmente de una sustitucin con un ciclo de cifrado, cuyo perodo no era otro que el de algunos cientos de caracteres. Criptoanalistas estadounidenses demostraron que este aparato era susceptible de ser vulnerado en pocas horas. En 1933 Friedman descifr un criptograma de 1,135 caracteres de la versin estndar de Khyra en 2 horas y 41 minutos. Existieron tres modelos de sta mquina: la estndar, la versin de bolsillo conocida como Liliput y la Kryra electrnica. 2.2.1.8 Las mquinas TYPEX y SIGABA

Despus de un largo estudio (1926-1935) sobre mquinas de cifrado comerciales como las de Hebern, Khrya y ENIGMA, un comit interministerial britnico adopt una mquina semejante a la ENIGMA llamada TYPEX. El modelo Mark III de TYPEX tena 5 ruedas codificadoras intercambiables dotadas de un movimiento irregular. Este aparato elctrico era pesado e imprima el texto cifrado en tiras de papel, el impresor estaba situado en la parte posterior de la mquina. Varias versiones de la TYPEX fueron empleadas por el ejrcito britnico y la Real Fuerza Area britnica. Canad tambin las emple, sobre todo en el seno del Ministerio de Defensa. 31

Justo antes de 1940, el ejrcito y la marina de los Estados Unidos adoptaron una mquina similar llamada ECM Mark II. ECM significaba Electric Cipher Machine. El ejrcito estadounidense le dio el nombre de SIGABA. Solo los estadounidenses utilizaron esta mquina, especialmente durante la Segunda Guerra Mundial y un perodo posterior.

Figura 2.9 La mquina TYPEX

A fin de poder intercambiar mensajes cifrados entre la TYPEX y la ECM, se concibi para esta ltima un conjunto especial de ruedas codificadoras compatible con la TYPEX. Equipada de esta forma, la ECM pas a ser llamada CCM, que significaba Combined Cipher Machine. Hasta donde se sabe, ningn aparato similar fue fabricado para volver a la TYPEX compatible con la ECM. 2.2.1.9 La mquina NEMA

La NEMA (NEue MAchine) fue puesta en servicio en 1947 por la empresa Zellwager A.G. en Suiza. Su concepcin dio inicio en 1941 y dos prototipos haban sido fabricados en 1944 por cuenta de la Oficina de Cifrado del Ejrcito Suizo. La NEMA comparta varias caractersticas de ENIGMA, tales como un reflector y 10 ruedas codificadoras. Por el contrario, la NEMA permita un movimiento bastante ms irregular de las ruedas codificadoras, as como del reflector. 5 ruedas codificadoras, llamadas Fortschaltwalzen controlaban el movimiento de las otras cinco. La situada ms a la derecha era roja, mientras que las nueve restantes eran negras. La NEMA tena una alimentacin externa ajustable (110/220 V), un adaptador para la conexin de un bombillo y un tablero luminoso inamovible que facilitaba el empleo. Los primeros usuarios de esta mquina fueron el ejrcito y el servicio diplomtico suizo. Ambos modelos eran identificados por el color de sus ruedas.

32

Figura 2.10 La mquina NEMA

2.2.2

Caracterizacin de la era tcnica

Hasta la Segunda Guerra Mundial, el rol de la criptografa, fortuito o no, fue decepcionante desde una perspectiva terica, sin embargo jug un papel importante en el nacimiento de la informtica38 y sera injusto negar todo status terico a sus contribuciones: un enfoque abstracto del cifrado convencional fue en efecto iniciado por Shannon en su artculo de 1949 titulado Communication Theory of Secrecy Systems39 y, precisamente trabajos como los de Shannon, habran de desencadenar el advenimiento de la siguiente era de la criptografa. Por otra par6te, algunas dcadas antes de los trabajos de Shannon, Vernam ya haba dado con una forma de garantizar la confidencialidad de un proceso criptogrfico, si bien las condiciones requeridas eran igualmente difciles de satisfacer. 2.3 Era digital

Esta era est fuertemente marcada por un alto grado de teorizacin. Son especialmente notorias las contribuciones de Shannon y su teora de la informacin, la teora de la complejidad, la formulacin de las nociones de zero-knowledge (o no-divulgacin) y clave pblica. A continuacin se procede a describir en qu consisten estos aportes. 2.3.1 Los aportes de Shannon

Con las investigaciones de Shannon se abren las puertas a un desarrollo sin precedentes en materia de telecomunicaciones, informtica y criptografa. Sus trabajos no se limitaron al
Tal como indica Jean-Louis Poss, el criptoanlisis de la ENIGMA fue realizado por los polacos y luego, sobre todo, por los britnicos. Bajo la direccin de Alan Turing (a quien se considera Padre de la teora de la computacin), el gobierno britnico agrup en Bletchley Park a destacados universitarios: matemticos, historiadores, lingistas, y toda una variedad de cientficos y tcnicos. A fines del conflicto, cerca de 7,000 personas trabajaban para la Operacin ULTRA, y fue precisamente para criptoanalizar la ENIGMA que se crearon las COLOSSUS, que junto a la ENIAC son reconocidas como las primeras computadoras. Poss, J. Introduction la cryptographie. cole Nationale dArts et Mtiers. Aix-en-Provence, France. Juin 2003. pp. 7. 39 Stern, J. Op. Cit. pp. 73.
38

33

establecimiento de las bases de la teora de la informacin. Precisamente a la luz de sta, llev a cabo investigaciones que le permitieron teorizar sobre las condiciones ideales que deba poseer un sistema criptogrfico. En 1949 hara pblico material que se considera un hito en la historia de la criptografa40. En este material, recurra a anlisis probabilsticos, imaginando el mensaje claro y la llave como elementos tomados aleatoriamente. Distingue la distribucin de probabilidades a priori de la distribucin a posteriori, luego de la intercepcin de un criptograma, y hace de esta diferencia la nica fuente de informacin del criptoanalista. Para poner un ejemplo simple, considrese que una palabra de tres letras ha sido cifrada por medio de una sustitucin simple y que se sabe que dicha palabra pertenece a la lista vos, del, que, ala. Al carecer de informacin adicional, puede suponerse que cada uno de los elementos de esta lista tiene una probabilidad de 0.25 de representar la palabra del mensaje claro. Si luego se intercepta el criptograma, por decir algo la secuencia de letras NMS, la palabra ala puede descartarse de la lista de posibilidades, pues su primera y su ltima letra no pueden estar cifradas de forma distinta (partiendo de que se dijo que se trataba de una sustitucin monoalfabtica). Esta palabra tiene, entonces, una probabilidad a posteriori nula, en tanto que las otras palabras de la lista incrementan su probabilidad a 0.33. Shannon sostena que un sistema ofrece una confidencialidad perfecta cuando, en trminos actuales, es incondicionalmente seguro, si las distribuciones de probabilidad de los smbolos a priori y a posteriori son idnticas. Shannon explica que esto es posible, pero que implica que el nmero de claves deba ser al menos igual al de mensajes. En otros trminos, el teorema de Shannon reclama una clave tan larga como el mensaje a cifrar. Tal como se seal en apartados anteriores, una forma de cifrado con caractersticas tales haba sido formulada alrededor de los aos 20 por el ingeniero estadounidense Gilbert Vernam, de quien la idea aun conserva el nombre. Para otros sistemas, provistos de claves fijas y sustancialmente ms cortas que el mensaje, Shannon demuestra que la modificacin de la distribucin de probabilidades observada en el ejemplo antes presentado se agrava a medida que fragmentos ms grandes de un criptograma son interceptados. Progresivamente se puede aislar un nico mensaje cuya probabilidad a posteriori es extremadamente prxima a 1, mientras que el resto tiene una probabilidad despreciable; es as que el cifrado por sustitucin simple de un fragmento de una frase escrito en lengua natural que contenga solamente unas treinta letras basta tericamente- para definir el texto claro de manera nica. Esta es la expresin matemtica de una experiencia que ya era familiar para los criptlogos de la era artesanal. Hay que reconocer que los conocimientos del siglo XIX no permitan discriminar mucho lo que es materialmente indescifrable en la prctica, de lo que es absoluta o matemticamente seguro. Es asombroso ver que Shannon estaba en capacidad de dar una definicin simple desde el punto de vista de unicidad, es decir, de la longitud mnima del criptograma a partir de la cual el fenmeno aparece. Para ello recurre a la nocin de entropa41, que haba postulado en su estudio matemtico anterior sobre los sistemas de comunicacin y que esta a la base de lo que ahora conocemos como teora de la informacin: cada mensaje m que tiene una probabilidad de

Shannon, C. Communication Theory of Secrecy Systems. Bell System Technical Journal. 1949. pp. 656715. El contenido de este artculo form parte de un reporte confidencial titulado A Mathematical Theory of Cryptography, fechado el 1 de septiembre de 1946, que recientemente ha sido desclasificado. 41 Se considera la entropa como una medida del desorden presente en el sistema. El diccionario de la lengua espaola lo define como:medida de la incertidumbre existente ante un conjunto de mensajes, del cual va a recibirse uno solo.

40

34

aparicin P(m) contribuye a la entropa en una cantidad P(m)log2(P(m)); la entropa de una distribucin es la suma de sus contribuciones. El resultado de los trabajos de las investigaciones antes mencionadas puede interpretarse hasta cierto punto como decepcionante, ya que enunciaba que la nica manera segura de cifrar era emplear una clave que tenga aproximadamente las mismas dimensiones que el mensaje claro. Faltaba a Shannon un concepto que permitiera distinguir lo que es absolutamente seguro de lo que es seguro en la prctica, que solo poda abrir el camino a las paradojas de la criptografa moderna. Se ve aparecer, entonces, la limitacin fundamental inherente al enfoque de Shannon: su teora no logra medir ms que la seguridad de un sistema criptogrfico ante un adversario que dispone, siguiendo sus propios trminos, de tiempo y mano de obra ilimitada. Pero en la realidad, quin dispone de tales condiciones? El costo de un sistema a lo Vernam resulta prohibitivo en trminos de generacin y gestin de claves. La cuestin es entonces saber lo que se requiere invertir para estar protegido de mquinas imperfectas, y proveerse de una teora capaz de informar de ello. A este punto, es importante recordar que la base de los trabajos de Shannon, as como de otros importantes investigadores de su poca, se dieron al servicio de fines militares, como haba venido siendo habitual desde haca siglos. El paso del mbito militar al civil no se dio sin consecuencias. Progresivamente ms sectores de la sociedad (sobre todo el comercio) fueron demandando servicios criptogrficos y ciertas funciones fueron siendo requeridas sistemticamente: se puede desear solamente garantizar la identidad de un interlocutor o un documento, o ms simplemente la proteccin de un archivo contra toda modificacin de parte de terceros. Se ve aparecer as la triloga fundamental de la criptografa moderna: confidencialidad, autenticidad e integridad. Si bien puede considerarse que tales caractersticas podan haber sido deseables desde pocas anteriores, es hasta en la ltima mitad del siglo XX que esta nocin se incorpora como parte de las teoras que dan soporte a la criptografa42. 2.3.2 Surgimiento de los conceptos de complejidad, clave pblica y zero-knowledge

La realizacin de ciertas posibilidades como las anteriormente evocadas supone aparentemente una paradoja: tratndose de la integridad de un archivo de datos informticos, una solucin natural consiste en asociar a este archivo (cuyo tamao puede ser considerable) una huella formada por una pequea secuencia de ceros y unos (cien o doscientos a lo sumo), y conservar o transmitir esta huella por separado. Para impedir toda modificacin es necesario que un adversario no pueda presentar una versin distinta del archivo inicial con la misma huella. Desde un punto de vista matemtico, esta solucin es simple y llanamente complicada. Resta encontrar una teora en la cual la construccin considerada cobre sentido: esta fue desarrollada a fines de los aos 60 para brindar un marco riguroso a la nocin de complejidad algortmica. Un algoritmo es la indicacin de operaciones a efectuar mecnicamente sobre una serie de datos, y su complejidad mide la relacin (generalmente creciente) entre el nmero de operaciones que debe efectuar la mquina para llevar a trmino los clculos y el volumen de los datos. La formulacin precisa de esta medida es de naturaleza asinttica, toma en cuenta lo que ocurre cuando el tamao de los datos se vuelve infinitamente grande. En todo caso, existen algoritmos eficaces cuya complejidad se torna rpidamente grande. Tratndose de funciones que aseguran la integridad, se requiere que todo algoritmo que permita encontrar colisiones (es decir, archivos diferentes pero con huellas idnticas) sea impracticable. Incluso hace falta que el clculo de la
42

Stern, J. Op. Cit. 73-84.

35

huella sea impracticable. Surge as bajo una forma plausible la asimetra fundamental deseada por los criptlogos: que el cifrado y el descifrado sean sencillos y fciles, pero el decriptamiento este totalmente fuera de alcance. Basta entonces, para escapar a la previsin de Shannon, renunciar al absoluto matemtico para sustituirlo por un concepto de seguridad algortmica. En esto consiste esencialmente la contribucin de la informtica a la criptografa. La contribucin antes mencionada conduce directamente a la paradoja de los llamados sistemas de clave pblica: nada, en el marco de la criptografa ideal que sea evocado antes, exige la necesidad de una clave secreta para cifrar. Slo el decriptamiento debe ser inaccesible al adversario. Nada prohbe, entonces, considerar desde un punto de vista informtico la existencia de una funcin cuyo algoritmo de clculo sea eficaz sin que pueda ser invertido por ningn algoritmo practicable, salvo para quien disponga de cierta informacin suplementaria, que es precisamente la clave secreta de descifrado. A tales funciones se da el nombre genrico de funciones de sentido nico. Para evaluar en qu medida la criptologa accede al rango de ciencia, hay que retomar el anlisis de una de las funciones conferidas a la criptografa moderna: la autenticidad, que a su vez lleva la creacin del concepto zero-knowledge. La cuestin ac es la identificacin, procedimiento por el cual una entidad prueba su identidad a otra. La solucin ms simple a este problema es la tradicional contrasea; la imagen para una funcin de sentido nico de esta contrasea es conocida por el dispositivo de control y basta presentarla o revelarla para identificarse. Son obvias las dificultades que presenta un sistema de este tipo, a pesar de lo cual an es ampliamente utilizado. El zero-knowledge permite probar que se conoce la contrasea sin que se requiera revelar la menor parte de la misma; ms exactamente, se procede a un intercambio de preguntas y respuestas entre la entidad a identificar y el dispositivo de control, de manera que para el proceso el dispositivo de control se convenza de la entidad de su interlocutor, de tal forma que la informacin intercambiada durante el protocolo no difiera estadsticamente de una secuencia de unos y ceros que habra sido generada por un programa que no tiene acceso al secreto. El xito de esta idea reside en su aspecto paradjico como en las posibilidades reales de su aplicacin. El ao 1976 marca una ruptura decisiva en la criptografa. En su historia surge un antes y un despus a partir del concepto de clave pblica presentado por Whitfield Diffie y Martin Hellman43. La importancia de su planteamiento no escap a sus autores quienes en su artculo, que habra de convertirse en el ms citado de la literatura sobre criptografa, escriben desde sus primeras lneas: Nos encontramos hoy da a la alba de una revolucin en la criptografa44. Una revolucin es precisamente de lo que trata, con el potenciamiento brutal de recursos al servicio de la criptografa y ms ampliamente en el campo del procesamiento de la informacin se lograron
Diffie, W., Hellman, M. New directions in criptography, manuscrito recibido el 31 de junio de 1976, trabajo que fue parcialmente apoyado por la NSF (National Science Fooundation). Partes del documento fueron presentadas al IEEE en su Taller de teora de la informacin, Lenox, MA, 23-25 de junio, 1975 y el Simposium internacional de la teora de la informacin en Suecia, 21-24 de junio, 1976. 44 We stand today on the brink of a revolution in cryptography. The development of cheap digital hardware has freed it from the design limitations of mechanical computing and brought the cost of high grade cryptographic devices down to where they can be used in such commercial applications as remote cash dispensers and computer terminals. In turn, such applications create a need for new types of cryptographic systems which minimize the necessity of secure key distribution channels and supply the equivalent of a written signature. At the same time, theoretical developments in information theory and computer science show promise of providing provably secure cryptosystems, changing this ancient art into a science. Diffie, W., Hellman, M. Op. Cit. pp. 1.
43

36

mecanismos hasta entonces no imaginables. El volumen de datos que circula sin cesar por el mundo vuelve impracticable la utilizacin sistemtica de canales asegurados, y es entonces la informacin misma la que debe ser protegida. Para aclarar esta idea, considrese el origen de la invencin de la clave pblica. Una de las cuestiones a la base de esta invencin es la necesidad de resolver de forma prctica el problema de distribucin de claves. No se trata ms que de una versin particular de un problema al que todo mundo se ve confrontado cotidianamente, la acumulacin: la llave de la casa, la del carro, la de la oficina, la de una residencia secundaria, etc. Tal como en la vida cotidiana, la solucin de una clave nica no es razonable: resulta conveniente que hayan claves para distintos niveles de acceso (llaves maestras, llaves de operador, llaves de usuario, llaves de sesin, etc.). Actualmente estas claves en general ya no son palabras o frases , sino simplemente arreglos de cifras, algo as como los nmeros de telfono pero notablemente ms largos. Es necesario poder transmitirlos de forma segura a su usuario legtimo, y poder salvaguardarlos de manera confidencial. Ante este problema, la solucin propuesta por Diffie-Hellman es sumamente sencilla: para suprimir los problemas de transferencia y almacenamiento de llaves puede publicrselas en un diario o un anuario. Puede decirse que entonces las claves ya no son secretas!, lo cual es cierto, pero porqu habran de ser simtricas las operaciones de cifrado y descifrado? y porqu la clave que permite a un usuario crear un mensaje codificado habra de ser idntica a la que usa el destinatario para recuperar el mensaje claro? Estas condiciones no son imprescindibles y su persistencia se ha debido ms bien a prcticas establecidas por siglos de criptologa convencional, y por una visin excesiva de la seguridad que pretendera impedir al enemigo cifrar cuando basta solamente no permitirle decriptar. La gran audacia de Diffie-Hellman consisti precisamente en proponer el concepto de cifrado asimtrico, en el cual los mecanismos de codificacin y decodificacin son distintos. Una clave pblica autoriza la primera operacin, mientras que la segunda necesita una clave distinta y secreta. Para enfatizar la actualidad de esta idea ntese que el concepto de clave pblica fue descrito en trminos que casi 30 aos ms tarde son an los que utilizan los manuales de criptografa. La simple realizacin prctica de la idea propuesta por el artculo es un mecanismo llamado intercambio pblico de llaves, que permite realizar una funcionalidad ms dbil que la clave pblica. Pese a esta laguna es innegable que la historia dio la razn a Diffie-Hellman, cuya fe en la pertinencia de sus ideas era tal que no pudieron retrazar la publicacin de su descubrimiento, permitiendo a otros la tarea de proponer concretamente un verdadero sistema criptogrfico de clave pblica. Es entonces que a Ronald Rivest, Adi Shamir y Leonard Adleman corresponde en 1978 el privilegio de presentar el primer sistema de clave pblica, conocido ahora por el acrnimo RSA (iniciales de los apellidos de sus creadores). Adi Shamir relata con agrado la irona de este descubrimiento: l se haba vuelto amigo de Rivest y Adleman durante una estancia post-doctoral en el Instituto Tecnolgico de Massachussets; ellos decidieron entonces unir esfuerzos para trabajar sobre el artculo de Diffie y Hellman (que acababa de ser publicado), con la idea de demostrar que el concepto de clave pblica era intrnsecamente contradictorio. Tras numerosos ensayos, dieron finalmente con el resultado opuesto: concibieron un sistema criptogrfico

37

asimtrico que pareca robusto, resultado notable cuya importancia supieron medir en seguida los tres autores, lo cual los motiv a publicarlo de inmediatamente45. En la misma poca, Hellman y uno de sus estudiantes, Ralph Merkle, propusieron otro sistema de clave pblica basado en un mecanismo diferente. Mientras el RSA utiliza la aritmtica de los grandes nmeros enteros, el sistema de Hellman y Merkle recurre al uso de un problema combinatorio conocido con el nombre de problema de la mochila; el esquema de Hellman y Merkle tambin fue publicado y patentado, con ms cuidados que el RSA ya que su validez podra extenderse fuera de los Estados Unidos. Es decir que la importancia de aquello a lo que la industria le apost, comenzaba a ser presentida por los investigadores. La guerra de los sistemas de clave pblica que podra haber resultado de la presencia de estas dos propuestas concurrentes no lleg a tener lugar, esencialmente porque el RSA se hizo rpidamente de la victoria. Este sistema presenta ventajas tcnicas innegables, en particular, cifra un texto claro por un mensaje codificado del mismo tamao, contrariamente al sistema de Hellman y Merkle, cuyo rendimiento es menor, pues la codificacin alcanza o excede el doble del tamao del texto claro. Adems, el sistema de Hellman y Merkle tiene el inconveniente de producir claves pblicas mucho ms voluminosas del RSA. Pero an hay algo ms grave: la seguridad del sistema de Hellman y Merkle siempre pareci sospechosa a numerosos expertos; esta intuicin se vio confirmada cuando en 1982, durante el congreso Crypto46, Adi Shamir present un ataque contra los sistemas criptogrficos basados en el problema de la mochila. Para volver an ms dramtico el efecto anunciado Shamir no dud en colocar sobre el estrado una computadora personal e ilustrar mediante experimentos la validez de su ataque, mostrando que autorizaba la recuperacin de un texto claro a partir solamente del texto cifrado y la clave pblica. Existe una ambigedad fundamental en cuanto al rol de las matemticas en los sistemas criptogrficos asimtricos. Ofrecen el medio para concebir estos sistemas y dotarlos de seguridad altamente plausible; no dan, por lo tanto certeza absoluta (ni pretenden darla)47. Es pertinente resaltar que unos aos antes de la aparicin de la propuesta de Diffie y Hellman los sistemas de cifrado simtrico ya ocupaban un lugar importante, a tal grado que se fueron estableciendo estndares para fines comerciales. Es as como surgen algoritmos tan importantes como el DES que se mantuvo como referente por ms de 30 aos y el AES, que sustituy al primero como estndar del NIST en el ao 2000. Esta sustitucin se dio debido a que el DES ya no responda a ciertos requerimientos de seguridad, la evolucin en el campo de la informtica empezaba a hacerlo vulnerable. Para establecer al AES como nuevo estndar se convoc a un concurso. Las propuestas deban cumplir con criterios de: seguridad, rendimiento, eficiencia, facilidad de implementacin y flexibilidad.

Una patente fue depositada con posterioridad a la primera publicacin (lo cual es permitido por la legislacin estadounidense). Tal como en el caso de Diffie-Hellman, esta prisa por publicar estuvo ligada a la importancia de los resultados obtenidos, as como a la voluntad de inscribirlos en el marco de una investigacin civil de vanguardia. 46 Que rene cada ao a importantes especialistas en temas de criptologa en el campus de la Universidad de Santa Brbara en California. 47 Stern, J. Op. Cit. pp. 85-90. Poss, J. Introduction la cryptographie. cole Nationale dArts et Mtiers. Aix-en-Provence, France. Juin 2003. pp. 8-9, 30. Zaccagnini, A. Introduzione alla crittografia. Universit degli Studi di Parma. Parma. 2002 pp. 39-40, 43.

45

38

Luego de haber evaluado las propuestas, se consider que la formulada por los investigadores belgas Daemen y Rijmen, el algoritmo Rijndael, responda de una forma ms integral y suficientemente buena a los criterios de diseo planteados como requisito para la presentacin de propuestas48. Los desarrollos ms recientes en matemticas aplicadas a la criptografa parecen indicar que en el futuro habrn mas sistemas basados en curvas elpticas, y computacin cuntica. El presente trabajo no se ocupar de estos aspectos.

Schneier, B., Whiting, D. A Performance Comparison of the Five AES Finalists. Counterpane Internet Security-Hi/Fn. 7 April 2000

48

39

3 Mtodos modernos de criptografa digital


Los sistemas de cifrado se clasifican comnmente en sistemas de cifrado de bloque y sistemas de cifrado de flujo. A continuacin se describen las caractersticas de ambos. 3.1 Sistemas de cifrado de bloque

Son los que dividen el mensaje a cifrar en distintos fragmentos, usualmente de longitud fija, y aplican a cada uno de ellos una transformacin criptogrfica. Los sistemas de cifrado de bloque se dividen a su vez en simtricos y asimtricos. Se habla de criptografa simtrica cuando se utiliza la misma clave tanto para cifrar como para descifrar. La robustez del cifrado depende, en tal caso, de la exclusividad en el conocimiento de la clave, como seala el principio de Kerckhoffs49. 3.1.1 Sistemas de cifrado de bloque simtrico

La gran mayora de los algoritmos de cifrado simtricos se apoyan en los conceptos de confusin y difusin, estas tcnicas consisten bsicamente en truncar el mensaje en bloques de tamao fijo, y aplicar la funcin de cifrado a cada uno de ellos.

Ya mencionado con anterioridad en este documento, el principio de Kerckhoffs postula que la seguridad de un sistema criptogrfico est basada exclusivamente en el conocimiento de la clave, en la prctica se presupone conocido a priori el algoritmo de cifrado y descifrado. Zimuel, E. Introduzione a la crittografia. Mensa Italia. Francavilla al Mare. Luglio 2002.

49

40

La confusin consiste en tratar de ocultar la relacin que existe entre el texto claro, el texto cifrado y la clave. Un buen mecanismo de confusin har demasiado complicado extraer relaciones estadsticas entre las tres cosas. Por su parte Difusin trata de repartir la influencia de cada bit del mensaje original lo ms posible entre el mensaje cifrado. La confusin por s sola sera suficiente, ya que si establecemos una tabla de sustitucin completamente diferente para cada clave con todos los textos claros posibles tendremos un sistema extremadamente seguro. Sin embargo, dichas tablas ocuparan cantidades astronmicas de memoria. Para obtener algoritmos fuertes sin necesidad de almacenar tablas enormes se intercala la confusin (sustituciones simples, con tablas pequeas) y la difusin (permutaciones). Esta combinacin se conoce como cifrado de producto. En muchos casos el criptosistema no es ms que una operacin combinada de sustituciones y permutaciones, repetida n veces. 3.1.2 Modos de cifrado de bloque

Se debe considerar el caso en que la longitud del bloque que se desea cifrar no es un mltiplo exacto del tamao del bloque. En tal caso es necesario aadir informacin adicional al final para que s lo sea. Lo ms sencillo es rellenar con ceros (o algn otro patrn) el ltimo bloque que se codifica. El inconveniente de esto se puede presentar cuando se descifra para saber donde hay que cortar el bloque. Para solventar este problema, se suele agregar como ltimo byte del ltimo bloque el nmero de bytes que se han aadido Esto presenta desventajas s el tamao original es mltiplo del bloque, en tal caso hay que alargarlo con un bloque entero. Por ejemplo, s el tamao del bloque fuera de 64 bits y sobraran 5 bytes al final, se aadiran dos ceros y un tres, para completar los ocho bytes necesarios en el ltimo bloque. Si por el contrario no sobrara nada habra que aadir siete ceros y un ocho, tal como se indica en la figura 3.1.
0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 4 8

Bytes perteneciente al mensaje Bytes aadidos Figura 3.1 Relleno de bytes en cifrado por bloques

3.1.2.1

ECB - Electronic codebook

El mtodo ms simple para cifrar textos claros largos, el procedimiento es el siguiente: se cifra por separado cada bloque con el mensaje. Este modo de cifrado no es utilizado en la prctica pues presenta fuertes debilidades: 41

Si dos bloques de texto claro son iguales, entonces, el correspondiente texto cifrado ser idntico, y esto ser es peligroso, sobre todo cuando se codifica informacin muy redundante, o con patrones acomunes al inicio y al final. Un adversario puede someter el proceso a un ataque basado en anlisis de frecuencias y extraer informacin; El atacante puede cambiar un bloque sin mayores problemas, y alterar los mensajes incluso desconociendo la clave y el algoritmo empleados. CBC Cipher block chaining

3.1.2.2

Es el modo de cifrado de bloques ms ampliamente usado, ya que incorpora un mecanismo de retroalimentacin. La codificacin del primer bloque condiciona la de los siguientes, imposibilitando la sustitucin de un bloque individual en el mensaje cifrado. Los problemas de ECB se evitan al aplicar la funcin XOR entre un bloque del mensaje a codificar y el ltimo bloque ya cifrado.
M i-1 Mi M i +1

Ek

Ek

Ek

C i-1

Ci

C i +1

Figura 3.2 Modo de operacin CBC, codificacin

C i-1

Ci

C i +1

Dk

Dk

Dk

M i-1

Mi

M i +1

Figura 3.3 Modo de operacin CBC, decodificacin

42

Dos mensajes idnticos se cifrarn de la misma forma usando el modo CBC. Dos mensajes que empiecen igual se codificarn igual hasta llegar a la primera diferencia entre ellos. Para evitar esto se usa un vector de inicializacin, que puede ser un bloque aleatorio, como bloque inicial de la transmisin. Este vector se descarta en el destino, pero garantiza que siempre los mensajes se cifren de forma distinta aunque tengan partes comunes. 3.1.2.3 CFB Cipher-Feedback

Este modo no empieza a codificar o decodificar mientras no tiene que transmitir o recibir un bloque completo de informacin. Esto puede suponer inconvenientes. El CFB permite cifrar la informacin en unidades inferiores al tamao del bloque, con lo cual se aprovecha mejor la capacidad de transmisin del canal de comunicacin, manteniendo adems un nivel de seguridad adecuado, ya que no puede ser vulnerado a travs de anlisis estadstico.
R (p bits) n n c i-1 n n n

...
Ek

...

m ci

Figura 3.4 Esquema del modo de operacin CFB

En la Figura 3.4 se muestra el esquema de funcionamiento de este modo de operacin. Sea p el tamao de bloque del algoritmo simtrico, y sea n el tamao de los bloques que se desea transmitir (n debe ser divisor de p). Sea mi el i-simo bloque del texto claro, de tamao n. Se recurre entonces a un registro de desplazamiento R de longitud p al cual se carga con un vector de inicializacin. Se codifica el registro con el algoritmo simtrico y se obtiene en r sus n bits ms a la izquierda. El bloque a enviar es ci = r XOR mi. Se desplaza R n bits a la izquierda y se introduce ci por la derecha. Para descifrar basta con cargar el vector de inicializacin en R y codificarlo, calculando r. Entonces, mi = r XOR ci. Se desplaza R y se introduce ci por la derecha. Es de hacer notar que si n = p, el modo CFB se reduce al CBC. 3.2 Sistema de cifrado de flujo

En 1917 Joseph Mauborgne y Gilbert Vernam crearon un criptosistema que cumpla los criterios de perfeccin planteados por Shannon. En este sistema se emplea una secuencia aleatoria cuya longitud era igual a la del mensaje, que se usara slo una vez (lo que se conoce en ingls como 43

one time pad), combinndola mediante una funcin simple y reversible (usualmente un XOR) con el mensaje claro carcter a carcter. Sin embargo, si la clave es tan larga como el propio mensaje y se dispone de un canal seguro para enviarla porque no emplearse para transmitir el mensaje directamente?. Un sistema de Vernam carece de utilidad prctica en la mayora de casos. No obstante si se dispone de un generador pseudo-aleatorio capaz de generar secuencias criptogrficamente aleatorias, de forma que la longitud de los posibles ciclos sea extremadamente grande, sera posible, empleando la semilla del generador como clave, obtener cadenas de bits desechables, y emplearlas para cifrar mensajes aplicando simplemente la funcin XOR entre el texto en claro y la secuencia generada. Al conocerse la semilla, podr reconstruirse la secuencia pseudo-aleatoria y descifrarse el mensaje. Estos sistemas dividen el mensaje a cifrar en caracteres (de menor longitud que los bloques), cifrando cada carcter mediante una funcin que varia en el tiempo. A diferencia del sistema de cifrado de bloques, en este sistema, caracteres idnticos poseen por lo general cifrados diferentes, lo que contribuye a aumentar la seguridad del sistema. Existen dos tipos bsicos de cifradores de flujo: los sncronos y los autosincronizantes, el criterio para establecer la diferencia entre ambos es el generador de las secuencias pseudo-aleatorias. 3.2.1 Sistemas de cifrado de flujo sncrono

En un sistema sncrono la secuencia es calculada de forma independiente tanto del mensaje claro como del cifrado. En el caso general, ilustrado en la figura 11.1 a, viene dado por las siguientes ecuaciones: si+1 = g(si, k) oi = h(si, k) ci = w(mi, oi) Donde k es la clave, si es el estado interno del generador, s0 es el estado inicial, oi es la salida en el instante i, mi y ci son la i-sima porcin del texto claro y cifrado respectivamente, y w es una funcin reversible, usualmente XOR. En muchos casos, la funcin h depende nicamente de s, sigue siendo k = s0.
Si+1

Si

h
Oi Mi Ci

Figura 3.5 Esquema de generadores de secuencia. Generador sncrono

44

Cuando empleamos un generador de estas caractersticas, necesitamos que tanto el emisor como el receptor estn sincronizados para que el texto pueda descifrarse. Si durante la transmisin se pierde o inserta algn bit, ya no se estar aplicando en el receptor XOR con la misma secuencia, por lo que el resto del mensaje ser imposible de descifrar. Esto nos obliga a emplear tanto tcnicas de verificacin como de reestablecimiento de la sincrona. Otro problema muy comn con este tipo de tcnicas es que si algn bit del criptograma es alterado, la sincronizacin no se pierde, pero el texto claro se ver modificado en la misma posicin. Esta caracterstica podra permitir a un atacante introducir cambios en nuestros mensajes, simplemente conociendo qu bits debe alterar. Para evitar esto, deben emplearse mecanismos de verificacin que garanticen la inseguridad del mensaje recibido, como las funciones Hash. 3.2.2 Sistemas de cifrado de flujo asncrono o autosincronizante

Son aquellos sistemas en los que la secuencia generada es funcin de una semilla, ms una cantidad fija de los bits anteriores de la propia secuencia. Estos sistemas son resistentes a la prdida o insercin de informacin, ya que vuelven a sincronizarse automticamente en cuanto llegan t bloques correctos de forma consecutiva. Tambin sern sensibles a la alteracin de un mensaje, ya que s se modifica la unidad de informacin ci el receptor tendr valores errneos de entrada en su funcin h hasta que se alcance el bloque ci+t, momento a partir del cual la transmisin habr recuperado la sincronizacin. En cualquier caso, al igual que en los sistemas sncronos, es necesaria la introduccin de mecanismos de verificacin. Una ventaja de estos sistemas radica en la dispersin de las propiedades estadsticas del mensaje claro a lo largo de todo el mensaje cifrado, pues cada elemento del mensaje influye en todo el criptograma. Lo anterior los vuelve ms resistentes a ataques basados en la redundancia del mensaje claro. 3.2.3 Diferencia bsica entre el cifrado de flujo sncrono y el autosincronizante

En el cifrado sncrono, para poder establecer la comunicacin, el emisor y el receptor deben utilizar la misma clave y sta debe estar sincronizada. Por lo tanto, este tipo de sistemas necesita seales de sincronizacin sin las cuales el descifrado no es posible. En los sistemas de cifrado autosincronizante no necesitan seales de sincronizacin, ya que en caso de prdida de sincronismo, ste se recupera transcurrido un cierto tiempo gracias a la retroalimentacin. Ambos mtodos tienen sus ventajas e inconvenientes, los mtodos sncronos son inmunes a los ataques activos de insercin de mensajes extraos, puesto que destruyen la sincronizacin y por lo tanto son detectables. Los mtodos autosincronizantes estn expuestos a ataques activos de repeticin de mensajes. Estos ataques pueden evitarse utilizando mensajes adicionales de identificacin previamente acordados por los comunicantes.

45

3.3

Modos de cifrado de flujo OFB Output feedback

3.3.1.1

Este modo es diferente a todos los antes mencionados, ya que el mensaje nunca es usado como entrada al bloque cifrado. En su lugar, el bloque cifrado se usa para generar un flujo seudoaleatorio de bytes (key stream), al cual se aplica una funcin XOR con el texto claro para producir texto cifrado. Uno de los inconvenientes de este modo es que si un eventual atacante conoce un bloque de texto claro y su correspondiente cifrado, entonces es capaz de conseguir que el receptor recupere un falso mensaje. Una ventaja del OFB es que el proceso de descifrado usa exactamente la misma operacin que la de cifrado, lo cual ahorra esfuerzos de implementacin. Una segunda ventaja es que no necesita rellenos. Si se considera al key stream como una secuencia de bytes, puede usarse tantos bytes de longitud del mensaje. En otras palabras, si el ultimo bloque de texto claro est parcialmente lleno, basta enviar los bytes del texto cifrado que corresponden a los bytes de texto claro actuales. La gran desventaja del OFB es el riesgo de repetir el valor de la clave del bloque, despus de la cual la secuencia de los bloques de clave simplemente se repiten. 3.3.1.2 CTR Counter

Este modo usa secuencias de nmeros como entrada a un algoritmo. En lugar de usar la salida del algoritmo de cifrado para rellenar un registro, la entrada para ste es un contador, donde, despus de cada bloque de cifrado, el contador se incrementa en una constante, usualmente uno. Este modo resuelve el problema del modo OFB donde la salida es de n bits, donde n es menor que la longitud del bloque.

46

Modos de cifrado ECB Seguridad - Los patrones del texto claro no son ocultados - La entrada del cifrador por bloques no es aleatoria; es la del texto claro + Ms de un mensaje puede ser cifrado con la misma llave - El texto claro es fcil de manipular; algunos bloques pueden ser eliminados, repetidos o intercambiados. CBC Seguridad + Los patrones de texto claro son ocultados aplicando un XOR a los bloques previos de texto cifrado + La entrada del cifrador por bloques es aleatoria al aplicar XOR con el previo bloque de texto cifrado + Ms de un mensaje puede ser cifrado con la misma llave +/- El texto claro es de alguna manera dificil, de manipular; los bloques pueden ser removidos desde el inicio y final del mensaje, los bits del primer bloque pueden ser cambiados, y la repeticin permite algunos cambios controlados.

Eficiencia + La velocidad es la misma que la de un cifrado por bloques - El texto cifrado puede ser de hasta un bloque ms largo que el texto claro debido al relleno - No es posible el procesamiento previo + El procesamiento es paralelizable

Eficiencia + La velocidad es la misma que la de un cifrado por bloques - El texto cifrado puede ser hasta de un bloque ms largo que el texto claro, sin contar el IV. - No es posible el procesamiento previo +/- El cifrado no es paralelizable; el descifrado es paralelizable y tiene una propiedad de acceso aleatorio. Tolerancia a fallas - Un error de texto cifrado afecta un bloque completo de texto claro y el correspondiente bit en el bloque siguiente - Un error de sincronizacin es irrecuperable

Tolerancia a fallas - Un error de texto cifrado afecta un bloque completo de texto claro - Un error de sincronizacin es irrecuperable

Tabla 3.1 Comparacin de los modos de cifrado

47

Modos de cifrado CFB Seguridad + Los patrones de texto claro son ocultados + La entrada a un bloque de cifrado es aleatoria + Puede cifrarse ms de un mensaje con la misma clave +/- El texto claro es de alguna forma difcil de manipular; los bloques del inicio y final del mensaje pueden ser removidos + Los bits del primer bloque pueden ser cambiados y la repeticin permite algunos cambios controlados Eficiencia + La velocidad es la misma que la de cifrador de bloques - El texto cifrado es del mismo tamao que el texto claro +/- El cifrado no es paralelizable; el descifrado es paralelizable y tiene propiedades de acceso aleatorio - Algn tipo de pre-procesamiento es posible antes de que el bloque sea visto; el bloque previo de texto cifrado puede ser cifrado Tolerancia a fallas OFB Seguridad + Los patrones de texto claro estn ocultos + La entrada al cifrador de bloques es aleatoria + Ms de un mensaje puede ser cifrado con la misma clave - El texto claro es fcil de manipular; cualquier cambio en el texto cifrado afecta directamente al texto claro

Eficiencia + La velocidad es la misma que la de cifrador de bloques - El texto cifrado es del mismo tamao que el texto claro + El procesamiento es posible antes que el mensaje sea visto +/- El procesamiento no es paralelizable

Tolerancia a fallos

- Un error en el texto cifrado afecta al bit + Un error en el texto cifrado afecta solo al bit correspondiente del texto claro y al siguiente correspondiente del texto claro bloque completo - Errores de sincronizacin son irrecuperables + Errores de sincronizacin de bloque completo son recuperables

Tabla 3.1 Comparacin de los modos de cifrado

48

4 Algoritmos de llave privada


En este captulo se estudian varios sistemas de cifrado de llave privada. Se detalla su estructura y funcionamiento. Como paso preliminar se procede a describir algunos elementos estructurales cuya utilizacin es comn de algunos algoritmos de cifrado. 4.1 Elementos estructurales de uso frecuente

Los elementos que se describen a continuacin datan de poca en que surgieron los primeros estndares de cifrado digital de bloques y se sigue recurriendo a ellos como parte de varios algoritmos contemporneos. 4.1.1 Redes de Feistel

Una red de Feistel es un mtodo general de transformacin de cualquier funcin (usualmente llamada funcin F) en una permutacin. Este procedimiento fue inventado por Horst Feistel en su diseo de Lucifer y ha sido usado en muchos diseos de algoritmo de cifrado, por ejemplo DES, FEAL, GOST, Khufu y Khafre, LOKI, CAST, Blowfish y RC5. Es importante notar que casi todos los algoritmos de cifrado propuestos que estn basados en las redes de Feistel siguen el mismo diseo: las mitades L y R (izquierda y derecha respectivamente) del bloque de bits operan sobre la otra mitad. La construccin fundamental de las redes de Feistel es la funcin F: una llave dependiente de una entrada de datos que genera una salida. La funcin F no es lineal y casi siempre es irreversible.

49

El procesamiento de los bloques de bits en las redes de Feistel puede ser representada mediante la Figura siguiente:
Lo
F

Ro

K1

L1

R1

Ln-1
F

Rn-1

Kn

Ln

Rn

Figura 4.1 Estructura de una red de Feistel

En una red de Feistel la salida de cada vuelta se usa como entrada para la siguiente segn la relacin: Li = Ri-1 Ri = Li-1 XOR f(Ri-1,Ki) Ln = Ln-1 XOR f(Rn-1,Kn) Rn = Rn-1 Este tipo de estructura tiene la propiedad de ser reversible, independientemente de como sea la funcin F, para ello basta aplicar de nuevo el algoritmo al resultado, pero empleando las subllaves Ki en orden inverso. Esto permite emplear el mismo mecanismo tanto para cifrar como para descifrar. 4.1.2 Cajas de sustitucin si i < n.

Las cajas de sustitucin intercalan sustituciones sencillas (confusin) con tablas pequeas y permutaciones (difusin). Una caja de sustitucin tiene mxn bits toma como entrada cadenas de m bits y da como salida cadenas de n bits. Esto se ilustra en la Figura 2. Por ejemplo, el DES emplea ocho cajas de sustitucin de 6x4 bits. La utilizacin de las cajas de sustitucin es sencilla: Dividen el bloque original en segmentos de m bits y cada uno de ellos se sustituye por otro de n bits haciendo uso de la caja de sustitucin correspondiente.

50

Entrada de 48 bits
CS 1

CS 2

CS 3

CS 4

CS 5

CS 6

CS 7

CS 8

Salida de 32 bits

Figura 4.2 Cajas de sustitucin

Figura 4.3 La funcin F y las cajas de sustitucin del DES

Normalmente, mientras ms grandes sean las cajas de sustitucin, ms resistente ser el algoritmo resultante.

4.2

Lucifer

A finales de los aos 70s, Horst Feistel y Walt Tuchman de IBM, iniciaron Lucifer, un programa de investigacin sobre mecanismos de cifrado para computadoras. El mismo nombre fue asignado al algoritmo que obtuvieron como resultado sus investigaciones. Lucifer, el antecesor del DES50, es una red de sustitucin-permutacin de 16 vueltas, bloques de 128 bits y una generacin de llaves similar a la del DES. Al igual que el DES, Lucifer es un cifrador iterativo, que utilizaba redes de Feistel. Es decir que mezcla bloques de datos al llevar a cabo diferentes pasos de cifrado sobre los mismos bloques; este proceso involucra la llave y la mitad del bloque para calcular una salida a la cual se le aplicaba un XOR junto a la otra mitad del bloque. Entonces, las mitades del bloque son intercambiadas, de manera que ambas mitades del bloque fueran modificadas igual nmero de veces. Cada vuelta utiliza una sub-llave de 72 bits. La sub-llave para la primera vuelta consiste en el primer byte de la llave repetido dos veces, seguida de los siguientes 7 bytes de la llave. Se rotan los 7 bytes izquierdos de la llave, y se genera la sub-llave para la siguiente ronda.

50

DES: Data Encryption Standard. Ms adelante se dedican varios apartados a su descripcin.

51

Figura 4.4 Proceso de cifrado de Lucifer

52

4.2.1

La funcin F

La funcin F opera sobre los 64 bits de la mitad derecha de los datos, aplicando la funcin XOR a dicha mitad derecha del bloque con los ltimos 8 bytes de la sub-llave para cada vuelta. Basados en los bits del primer byte de la sub-llave para esa vuelta, se intercambian los ocho bytes de dicho resultado para aquellos bits que le corresponden al bit 1. 4.2.2 Cajas de sustitucin y transposicin

Las cajas de sustitucin (S-boxes) de Lucifer tienen entradas y salidas de 4 bits. La entrada de las cajas de sustitucin es el bit permutado de caja en la vuelta anterior. La entrada de la primera caja de sustitucin es el texto claro. Se usa una de bits para elegir una de entre dos cajas de sustitucin posibles (S0 y S1). Lucifer representa lo anterior como una sola caja llamada Caja de Transposicin (T-box) con 9 bits de entrada y 8 bits de salida. La caja de sustitucin S0 opera los cuatro bits ms significativos (izquierda), y S1 opera sobre los menos significativos (derecha), de cada byte. La salida de las cajas de sustitucin es concatenada y al resultado se le aplica la funcin XOR junto a las sub-llaves, en una operacin llamada interrupcin de llave (key interruption). Como ltimo paso, la funcin F permuta los bits de salida, para ello realiza dos pasos: primero, cada byte sufre una permutacin, P, luego, los bits son mezclados entre los bytes cada bit ocupa un byte diferente en la misma posicin en que estaba en el byte original, a esto se le llama difusin. Se denota P como el producto de las dos permutaciones antes descritas.

Control de intercambio de bits

S0

S1

Figura 4.5 Caja de Transposicin de Lucifer

A diferencia del DES, no hay intercambio entre vueltas y tampoco son utilizadas las mitades de los bloques.

53

Entrada (64 bits)

Sub llave (64 bits)


Control de intercambio de bits (8 bits)

Interrupcin de la llave (64 bits)

P
Salida (64 bits)

Figura 4.6 La funcin F de Lucifer

4.2.3

Ataques a Lucifer

Utilizando criptoanlisis diferencial contra la primera versin de Lucifer, los investigadores Eli Biham y Adi Shamir, demostraron que Lucifer puede ser roto51. Las condiciones para que tal ruptura sea efectiva son las siguientes: o o Bloques de 32 bits y 8 vueltas, puede ser roto con 40 textos claros elegidos, y 229 pasos; 52 Bloques de 128 bits y 8 vueltas con 60 textos claros elegidos y 253 pasos.

Todos estos ataques utilizan las cajas de sustitucin del DES. 4.3 DATA ENCRYPTION STANDARD (DES)

El Data Ecryption Standar (DES) ha sido un estndar mundial por cerca de 30 aos. A principios de los aos 70 dio inicio la bsqueda de un sistema de cifrado no militar. Pocos documentos de investigacin eran publicados al respecto. La mayora de personas saban que los militares utilizaban equipos para codificacin sus comunicaciones, pero pocos entendan la ciencia de la criptografa. La National Security Agency (NSA) tenia informacin considerable, pero ni siquiera pblicamente admitan su propia existencia.
Biham, E., Shamir, A. Differential Cryptanalysis of the Data Encryption Standard. Proceedings, Berlin. Springer Verlag. 1993. Biham, E. New Types of Cryptanalytic Attacks Using Related Keys. In Tor Helleseth, editor, Advances in Cryptoglogy EUROCRYPT93, volume 765 of Lecture Notes in Computer Science, pages 398-409. Springer-Verlag, 1993. Biham, E., Shamir, A. Differential Cryptanalysis of DES-like Cryptosystems (Extended Abstract). The Weizmann Institute of Science. Department of Applied Mathematics. S/f. 52 Ver Anexo I
51

54

En 1972, el National Bureau of Standars (NST) que luego se convirti en National Institute of Standars and Technology (NIST), inici un programa para proteger las computadoras y la informacin en las comunicaciones. Como parte del programa, queran desarrollar un algoritmo criptogrfico estndar. Un solo algoritmo que pudiera ser probado, certificado, y que adems los diferentes equipos que lo utilizaran pudiesen nter operar. El 15 de mayo de 1973, el NST solicit propuestas para el nuevo estndar de algoritmo criptogrfico, especificando una serie de criterios que se enumeran a continuacin. El algoritmo deba: o o o o o o o o o Proveer un alto nivel de seguridad Ser completamente especificado y fcil de entender Contar con una seguridad que resida en la llave y que no dependa de mantener el algoritmo en secreto Estar disponible para todos los usuarios Ser adaptable para ser usado en diferentes aplicaciones Ser econmicamente implementable en dispositivos electrnicos Ser eficiente Estar dispuesto a ser validado Ser exportable

La respuesta del pblico indic que haba un inters considerable en establecer un estndar criptogrfico, pero muy pocos especialistas en el campo. Ninguna de las propuestas recibidas cumplieron los requerimientos. En agosto de 1974, la National Bureau of Standard (NBS) hizo una segunda solicitud, y esta vez si recibieron un candidato promisorio: un algoritmo Lucifer, cuya descripcin se abord en una parte anterior de este documento. La NBS solicit ayuda a la NSA para evaluar la seguridad del algoritmo y determinar su vulnerabilidad y ajuste como estndar federal. IBM ya haba patentado su idea, pero estuvo dispuesta a poner a disposicin de otros su propiedad intelectual. Eventualmente, la NBS trabaj en los trminos para un acuerdo con IBM, de manera que recibi una licencia para la creacin, uso y venta de equipo para implementar el algoritmo. Finalmente, el 17 de marzo de 1975, la NBS public los detalles del algoritmo y el acuerdo logrado con IBM en el cual sta ltima ceda su exclusividad del algoritmo, adems solicitaron comentarios del pblico. Algunos de los comentarios recibidos se referan a la preocupacin de que la NSA hubiese modificado el algoritmo para generar una trampa. Hubo quejas en cuanto a que la NSA haba reducido el tamao de la llave de 128 a 56 bits. Muchos de estos argumentos resultaban angustiosos, pero se aclararon a inicios de los aos 90. En 1976, NBS sostuvo dos talleres para evaluar el estndar propuesto. El primer taller discuti la matemtica del algoritmo y la posibilidad de una trampa. En el segundo taller se discuti la posibilidad de incrementar la longitud de la llave. Los diseadores del algoritmo, evaluadores, implementadores, vendedores, usuarios y crticos fueron invitados.

55

A pesar de las crticas, el DES fue adoptado como un estndar federal el 23 de noviembre de 1976 y autorizado para ser utilizado en todas las comunicaciones gubernamentales no clasificadas. La descripcin oficial del estndar, FIPS53 PUB 46 Data Encryption Standard fue publicada el 15 de enero de 1977 y se hizo efectiva seis meses ms tarde. El documento FIPS PUB 81 DES Modes of Operation fue publicado en 1980 y en 1981 se public FIPS PUB 74, Guidelines for Implementing and Using the NBS Data Encryption Stardard. Segn Bruce Schneier, la NSA crey que el DES era un algoritmo slo para hadware, pero la NBS public suficientes detalles, de tal forma que las personas podan producir software que lo utilizara. De manera no oficial la NSA clasific al DES como uno de sus errores ms grandes. De igual forma, Schneier sostiene que si la NSA hubiera sabido que los detalles iban a permitir a las personas el diseo de un software, nunca habran estado de acuerdo en revelarlos. Ahora haba un algoritmo que estudiar: uno que la NSA haba dicho era seguro. No por casualidad el siguiente algoritmo estndar gubernamental era clasificado54, llamado Skipjack, el cual se describe ms adelante. 4.3.1 Establecimiento del estndar

La American National Standards Institute (ANSI) aprob el DES como un estndar privado en 1981. Lo llamaron Data Encryption Algorithm (DEA). ANSI public un estndar para los modos de operacin de DEA, un documento similar al presentado por NBS, y un estndar para cifrado en redes que utilizaban DES. 4.3.2 Descripcin del DES

El DES es un algoritmo que cifra bloques de 64 bits. Un bloque de 64 bits de texto claro ingresa al algoritmo y un bloque de texto cifrado, tambin de 64 bits, sale del algoritmo.
K
56 64 64

K
56

DES P Texto claro

C C Texto cifrado

DES -1 K Llave

Figura 4.7 Entrada salida del DES

El DES es un algoritmo simtrico, pues el mismo algoritmo y la misma llave son usados para cifrar y descifrar. Se utilizan llaves de 64 bits, de los cuales 56 contienen la informacin de la misma, y el resto es utilizado como redundancia para verificacin de paridad. Estos bits de paridad son los menos significativos de los bytes que forman las llaves. La llave puede ser cualquier conjunto de 56 bits

FIPS son las siglas de Federal Information Processing Standards Publication, que son los documentos emitidos por el Departamento de comercio de los Estados Unidos a travs del NIST. 54 Schneier, B. Applied Cryptography. Pp. 267. Ms adelante se brindan detalles de este estndar.

53

56

y puede ser cambiada en cualquier momento. Toda la seguridad del algoritmo descansa en la llave. En su nivel ms simple, el algoritmo no es nada ms que una combinacin de las dos tcnicas bsicas de cifrado: confusin y difusin. La construccin fundamental de los bloques del DES es una combinacin de estas tcnicas sobre el texto, basadas en la llave. Esto es llamado vuelta. El DES se compone de 16 vueltas, y aplica la misma combinacin de tcnicas 16 veces sobre los bloques de texto claro. El algoritmo utiliza slo operaciones lgicas y aritmticas sobre grupos de 64 bits, esto contribuy a que fuera fcilmente implementado en la tecnologa de hardware de finales de la dcada de los setentas. La naturaleza repetitiva del algoritmo lo hace ideal para el uso en chips de propsitos especiales. 4.3.3 Estructura interna del algoritmo

El DES opera sobre bloques de texto claro de 64 bits, despus de una permutacin inicial, el bloque es partido en sus mitades derecha e izquierda, cada una de 32 bits de longitud. Entonces, los bloques son combinados con las llaves en 16 vueltas con operadores idnticos, llamados funcin F. Despus de la decimosexta vuelta, las nuevas mitades derecha e izquierda son concatenadas, y una permutacin final (la inversa de la permutacin inicial) finaliza el algoritmo. En cada vuelta, los bits de las llaves son cambiados, luego se seleccionan 48 de los 56 bits que componen la llave. La mitad derecha de los datos es expandida a 48 bits mediante una permutacin, combinada con 48 bits de una llave ya permutada y cambiada mediante una funcin XOR, enviada a travs de las 8 cajas de sustitucin, produciendo 32 nuevos bits, que sern permutados. Estas cuatro operaciones componen la funcin F. La salida de la funcin F es entonces combinada con la mitad izquierda usando otra funcin XOR. El resultado de estas operaciones se convierte en la nueva mitad derecha; la mitad derecha anterior se convierte entonces en la nueva mitad izquierda. Estas operaciones son repetidas 16 veces, convirtindose as en las 16 vueltas del DES.
R
32
i- 1

Ki
48

E x p a n s i n
48

48

8 x 6 b its
6

S1
4

S2

S3

S4

S5

S6

S7

S8

S u s titu c i n

8 x 4 b its
32

P
32

P e rm u ta c i n

F (R

i- 1

,K i ) = P (S (E (R

i- 1

K i ))

Figura 4.8 Funcin F

57

Si Bi es el resultado de la iteracin i, Li y Ri son la mitad izquierda y la mitad derecha de Bi, Ki es la llave de 48 bits de la vuelta i, y F es la funcin que hace las operaciones de sustitucin, permutacin y XOR con la llave; la vuelta luce como la siguiente figura:

Texto claro Permutacin inicial

L0 + f

R0

K1

L1 = R0
+ f

R1 =L0

+ f(R0, K1)

K2

L2 = R1
+ f

R2 =L1

+ f(R1, K2)

Kn

L15 = R14
+ f

R15 =L14

+ f(R14, K15)

K16

Pre - salida R16 =L15 + f(R15, K16)

L16 = R15

Inversa de la permutacin inicial

Salida Texto cifrado

Figura 4.9 Proceso de cifrado utilizando el DES

58

4.3.4

La permutacin inicial

La permutacin inicial ocurre antes de la vuelta 1; esta permutacin transpone el bloque de entrada, tal como se describe en la tabla 4.7, esta tabla, debe ser leda de izquierda a derecha y de arriba hacia abajo. Por ejemplo, la permutacin inicial mueve el bit 58 del texto claro, a la posicin del bit 1, el bit 50 a la posicin 2, el bit 42 a la posicin 3 y as sucesivamente. La permutacin inicial y la correspondiente permutacin final no afectan la seguridad del DES.
1 9 17 25 33 41 49 57 2 10 18 26 34 42 50 58 3 11 19 27 35 43 51 59 4 12 20 28 36 44 52 60 5 13 21 29 37 45 53 61 6 14 22 30 38 46 54 62 7 15 23 31 39 47 55 63 8 16 24 32 40 48 56 64 58 60 62 64 57 59 61 63 50 52 54 56 49 51 53 55 42 44 46 48 41 43 45 47 34 36 38 40 33 35 37 39 26 28 30 32 25 27 29 31 18 20 22 24 17 19 21 23 10 12 14 16 9 11 13 15 2 4 6 8 1 3 5 7

P.I.

Figura 4.10 Permutacin inicial

L i -1

R i -1

Llave

Expancin permutacin

Cambio

Cambio

Compresin permutacin

Cajas de sustitucin

Cajas de permutacin +

Li

Ri

Llave

Figura 4.11 Estructura de una vuelta del DES

59

4.3.5

La transformacin de la llave

Inicialmente, los 64 bits de la llave del DES se reducen a una llave de 56 bits al ignorar cada octavo bit. Esto se ilustra en la figura 4.1 Estos bits se utilizan para verificacin de paridad, a manera de asegurarse que la llave no tiene errores.
58 60 62 64 57 59 61 63 50 52 54 56 49 51 53 55 42 34 26 44 36 28 46 38 30 48 40 32 41 33 25 43 35 27 45 37 29 47 39 31 7 x 8 bits 18 20 22 24 17 19 21 23 10 12 14 16 9 11 13 15 2 4 6 8 1 3 5 7

Bits menos significativos

Figura 4.12 Reduccin de la llave

Despus que la llave de 56 bits es extrada, se genera una sub-llave de 48 bits para cada una de las 16 vueltas del DES. Estas sub-llaves, Ki, son determinadas de la siguiente forma:

o Primero, la llave de 56 bits es dividida en mitades de 28 bits cada una:


58 60 62 64 57 59 61 63 50 52 54 56 49 51 53 55 42 44 46 48 41 43 45 47 34 36 38 40 33 35 37 39 26 28 30 32 25 27 29 31 18 20 22 24 17 19 21 23 10 12 14 16 9 11 13 15

o Posteriormente, las mitades son desplazadas circularmente en sentido izquierdo, uno o


dos bits, dependiendo de la vuelta. Estos desplazamientos son mostrados en la tabla siguiente:
Vuelta Bits desplazados 1 1 2 1 3 2 4 2 5 2 6 2 7 2 8 2 9 1 10 11 12 13 14 15 16 2 2 2 2 2 2 1

Tabla 4.1 Divisin de la llave

Despus de haber sido desplazados, 48 de 56 bits son seleccionados. Debido a que esta operacin permuta el orden de los bits as como tambin selecciona un subgrupo de bits, es llamada permutacin de compresin. Esta operacin provee un subgrupo de 48 bits. La figura 4.4 define la permutacin de compresin (tambin llamada eleccin permutada). Por ejemplo, el bit en la posicin 33 de la llave cambiada se mueve de la posicin 35 de la salida, y el bit de la posicin 18 de la llave cambiada es ignorado.

Tabla 4.2 Nmero de vuelta y nmero de desplazamientos a la izquierda

60

14 15 26 41 51 34

17 6 8 52 45 53

11 24 1 5 21 10 23 19 16 7 27 20 31 37 47 55 33 48 44 49 46 42 50 36 6 x 8 bits

3 12 13 30 39 29

28 4 2 40 56 32

Tabla 4.3 Compresin permutada de la llave

Debido a estos cambios, un sub-grupo diferente de llaves de bits es usado en cada subllave. Cada bit es usado en aproximadamente 14 de las 16 sub-llaves, sin embargo no todos los bits son usados exactamente el mismo nmero de veces. La permutacin de expansin

4.3.6

Se da por iniciado el procesamiento del bloque de datos de 64 bits. Si el bloque contiene menos de 64 bits deber ser completado para poder continuar. Seguidamente se realiza la permutacin inicial (PI) del bloque:
1 9 17 25 33 41 49 57 2 10 18 26 34 42 50 58 3 11 19 27 35 43 51 59 4 12 20 28 36 44 52 60 5 13 21 29 37 45 53 61 6 14 22 30 38 46 54 62 7 15 23 31 39 47 55 63 8 16 24 32 40 48 56 64 58 60 62 64 57 59 61 63 50 52 54 56 49 51 53 55 42 44 46 48 41 43 45 47 34 36 38 40 33 35 37 39 26 28 30 32 25 27 29 31 18 20 22 24 17 19 21 23 10 12 14 16 9 11 13 15 2 4 6 8 1 3 5 7

P.I.

Figura 4.13 Permutacin inicial de la llave

Se divide el bloque resultante en mitades de 32 bits cada una. L representar la mitad izquierda y R la mitad derecha, L(0) y R(0).
58 60 62 64 57 59 61 63 50 52 54 56 49 51 53 55 42 34 26 18 44 36 28 20 46 38 30 22 48 40 32 24 8 x 4 bits 41 33 25 17 43 35 27 19 45 37 29 21 47 39 31 23 8 x 4 bits 10 12 14 16 9 11 13 15 2 4 6 8 1 3 5 7

L(0)

R(0)

Figura 4.14 Mitad izquierda y mitad derecha, L(0) y R(0)

Se denomina E a la funcin que toma un bloque de 32 bits como entrada y genera un bloque de salida de 48 bits, 8 bloques de 6 bits cada uno. Adems i representa el nmero de la vuelta.

61

Se aplican las 16 sub-llaves obtenidas anteriormente, expandiendo, E(R(i)), la mitad de la derecha de los datos, Ri, de 32 a 48 bits, de acuerdo a la siguiente tabla:
32 6 12 16 22 28 1 7 13 17 23 29 2 8 12 18 24 28 3 9 13 19 25 29 4 8 14 20 24 30 5 9 15 21 25 31 4 10 16 20 26 32 5 11 17 21 27 1

Tabla 4.4 Posiciones de los bits de salida

Debido a que la operacin cambia el orden de los bits as como tambin repite algunos, esto es conocido como expansin permutacin, la cual es a veces llamada la caja E. Para cada bloque de entrada de 4 bits, los primeros y los cuartos bits representan dos bits del bloque de salida, mientas que el segundo y el tercer bit representan un bit del bloque de salida. Esta operacin tiene dos propsitos: hacer la mitad derecha del mismo tamao de la llave para la operacin XOR, y proveer un resultado ms largo que puede ser comprimido durante la operacin de sustitucin. Sin embargo, ninguna de las dos tiene propsitos criptogrficos. Al permitir que un bit afecte dos sustituciones, la dependencia de los bits de salida sobre los de entrada, acelera el proceso. Esto es llamado efecto avalancha. El DES est diseado para alcanzar la condicin de tener tan rpido como sea posible cada bit correspondiente del texto cifrado, texto claro y la llave. A pesar que el bloque de salida es ms grande que el bloque de entrada, cada bloque de entrada genera un nico bloque de salida. Seguidamente se aplica la funcin F: 1. XOR al resultado anterior con la llave K(i). E(R(i)) XOR K(i) 2. B(1), B(2),...,B(8). Partiendo de E(R(i-1)) XOR K(i) en ocho bloques de seis bits. B(1) representa a los bits 1 6, B(2) representa a los bits 7 12,..., B(8) representa los bits 43 48. 4.3.7 Las cajas de sustitucin

Despus que a la llave comprimida se le aplica la funcin XOR con un bloque expandido, los resultados de 48 bits se mueven a una operacin de sustitucin. Las sustituciones son llevadas a cabo por ocho cajas de sustitucin. Cada caja de sustitucin tiene una entrada de 6 bits y una salida de 4. El total de memoria requerida para las ocho cajas de sustitucin del DES es de 256 bytes. Los 48 bits son divididos en ocho sub bloques de 6 bits cada uno. Cada bloque por separado es operado por una caja de sustitucin separada: El primer bloque es operado por la caja de sustitucin 1, el segundo por la segunda caja, y as sucesivamente. Cada caja de sustitucin es una tabla de 4 filas y 16 columnas. Cada entrada de la caja es un nmero de 4 bits. La entrada de 6 bits de la caja de sustitucin especifica bajo cual nmero de fila o columna se buscar la salida.

62

Las cajas de sustitucin son la parte crtica del DES. Las otras operaciones del algoritmo son lineales y fciles de analizar. Las cajas de sustitucin son no lineales y ms que nada, aportan la seguridad al DES. Si S1 es la funcin definida en la tabla siguiente y B es un bloque de 6 bits, entonces S1(B) estara conformado de la siguiente forma:

Nmero de fila Binario 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 Decimal 00 01 10 11 00 01 10 11 00 01 10 11 00 01 10 11 00 01 10 11 00 01 10 11 00 01 10 11 00 01 10 11 0 14 0 4 15 3 0 13 10 13 13 1 7 13 10 3 2 4 11 12 9 4 4 13 1 6 13 1 7 2 1 4 15 1 1 13 14 8 0 7 6 2 13 7 14 8 8 4 7 10 9 0 4 3 1 4 8 2 14 7 1 14 9 9 0 3 5 0 6 1 12 7 2 5 12 7 8 4 8 1 7 4 2 14 13 4 6 15 3 6 3 8 6 0 6 10 7 4 1 9 7 2 9 4 1 6 10 9 4 5 2 6 9 11 2 4 15 3 4 15 9 6 15 1 7 14 2 12 8 5 0 9 3 4 3 10 6 13 2 1 3 8 13 4 15 6 3 8 9 0 7 13 13 7 2 6 9 12 8 1 7 10 7 8 7 8 1 7 4 1 2 5 10 0 7 10 3 8 6 1 8 13 8 5 3 13 8 3 10 5 9 5 11 1 2 11 4 1 4 9 8 5 15 6 0 6 7 3 9 10 6 11 7 0 8 6 8 1 2 7 1 4 5 0 9 15 13 1 0 12 3 5 9 5 6 10 11 12 13 14 15 6 9 3 2 1 12 7 5 2 8 2 3 5 3 12 0 3 4 1 9 5 6 0 3 6 9 12 7 5 9 3 9 5 10 0 0 9 3 5 4 0 3 5 6 5 11 2 14 2 7 8 0 13 10 5 15 9 8 1 7 12 15 9 4 14 9 6 14 3 11 8 6 13 1 6 2 12 7 2 8 11 12 11

No de caja

15 11

11 15 12

S1

15 12

14 10 13 12 10 6 12 7 12 3 5 12 14 6 9 0 11 5 11 1 5

14 12

11 10

S2

13 12

14 12 11 15 20 14 5 2 4 8 2 14 8 0 5 5 3 8 6 8 9 3 12 9 5 6

S3

10 13 13 14 8 6 15 12 2 8 1 11 9 0 4 2 1 12 4 2 2 11

15 14

11 12 2 7 0 9 3 4 7 11 0 10 15 5 2 0 14 3 5

10 14

12 11

13 15

S4

11 12 15 13 3 6 10 14 0 1 6 5 2 0 5 0 3 5 9 4 10 7 7 12 8 14 11 0

10 11

14 11

15 10

11 10 13

S5

10 15

10 15 3 11 0 4 2 11 1

13 14

14 15

13 11

S6

15 10 11 14 10 14 7 1 4 2 9 10 12 0

14 15

11 13 12 8 4 14

14 10 15

S7

11 13 15 13

15 14

15 11 12 14

10 13 15

S8

13 15 12

Tabla 4.5 Cajas de sustitucin del DES

63

El resultado de esta sustitucin son ocho bloques de 4 bits, los cuales son recombinados en un solo bloque de 32 bits. 16 7 20 21 29 12 28 17 2 8 24 14 32 27 3 9 1 15 23 26 5 18 31 10 19 13 30 6 22 11 4 25

El bloque anterior pasa a la siguiente etapa: cajas de permutacin. Una vuelta del DES, con la funcin F en detalle, se ilustra en la siguiente figura:

Figura 4.15 Resumen del DES

4.3.8

Las cajas de permutacin

La salida de 32 bits de las cajas de sustitucin es permutada de acuerdo a las cajas de permutacin (P-box). Esta permutacin apunta a cada entrada de bit a una posicin de salida, ningn bit es usado dos veces y ninguno es ignorado. Esto es llamado permutacin directa (straight permutation) o simplemente permutacin. Finalmente, al resultado de una caja de permutacin se le aplica la funcin XOR junto con la mitad izquierda del bloque inicial de 64 bits. Entonces las mitades izquierdas y derechas son intercambiadas y otra vuelta inicia.

64

4.3.9

La permutacin final

La permutacin final es la inversa de la permutacin inicial y esta descrita en la tabla 4.6


40 8 48 16 56 24 64 32 38 6 46 14 54 22 62 30 36 4 44 12 52 20 60 28 34 2 42 10 50 18 58 26 39 37 35 33 7 47 15 55 23 63 31 5 45 13 53 21 61 29 3 43 11 51 19 59 27 1 41 9 49 17 57 25

Tabla 4.6 Posicin de los bits en la permutacin inicial

Ntese que las mitades izquierda y derecha no son intercambiadas despus de la ltima vuelta del DES; en su lugar, los bloques concatenados R16L16 son usados como entrada de la permutacin final. En esta parte no se da ningn cambio significativo, al cambiar las mitades y realizar los cambios en la permutacin brindar el mismo resultado. 4.3.10 Proceso de descifrado del DES Despus de todas las sustituciones, permutaciones, funciones XOR e intercambios, sera fcil pensar que el algoritmo para descifrar sera totalmente diferente al algoritmo de cifrado. Por el contrario, las mltiples operaciones fueron elegidas para producir una propiedad muy til: el mismo algoritmo trabaja para cifrar y descifrar. Con el DES es posible utilizar la misma funcin para cifrar o descifrar un bloque. La nica diferencia reside en que las llaves deben ser usadas en el orden inverso. Esto es, si las llaves de cifrado para cada llave son K1, K2, K3..., K16, entonces las llaves para descifrar sern K16, K15, K14,..., K1. El algoritmo que genera la llave usada para cada vuelta es circular tambin. 4.3.11 Modos de operacin del DES El DES tiene cuatro modos de operacin: ECB, CBC, OFB y CFB. Los estndares bancarios, segn ANSI, especifican ECB y CBC para cifrado y CBC y CFB para autenticacin.

4.3.11.1 ECB (Electronic Code Book)

Figura 4.16 Modo de cifrado ECB en el DES M: Mensaje, C: Texto cifrado, K: Llave

65

Los datos son divididos en bloques de 64 bits y cada bloque es cifrado, uno a la vez. Cifrados diferentes sobre bloques diferentes los hace independientes. Esto significa que si la informacin es transmitida a travs de una red o una lnea telefnica, los errores de transmisin slo afectarn al bloque que contiene el error, aunque esto tambin significa que todos los bloques sern ordenados y el error no sera detectado. El ECB es el ms dbil de todos los modos de cifrado porque no implementa medidas adicionales de seguridad, aparte de las bsicas del algoritmo DES. Sin embargo, el ECB es el ms rpido y fcil de implementar, hacindolo el modo de cifrado que ms comnmente se utiliza en aplicaciones comerciales. 4.3.11.2 CBC (Cipher Block Chaining)

Figura 4.17 Modo de cifrado CBC en el DES M: Mensaje, IV: Vector de inicializacin, C: Texto cifrado, K: Llave

En este modo de operacin, a cada bloque cifrado con el modo ECB se le aplica la funcin XOR con el siguiente bloque de texto claro, para luego ser cifrado, adems de hacer que todos los bloques dependan de todos los bloques anteriores. Esto significa que para encontrar el texto claro de un bloque en particular, se necesitara conocer el texto cifrado, la llave, y el texto cifrado del bloque anterior. El primer bloque a ser cifrado no tendr texto cifrado previo, de manera que al texto claro se le aplica una funcin XOR junto a un nmero de 64 bits llamado Vector de Inicializacin, o IV. As, s los datos son transmitidos a travs de la red o lnea telefnica y ocurre un error de transmisin, el error ser cargado por todos los bloques siguientes, ya que cada bloque es dependiente del anterior. Este modo de operacin es ms seguro que el ECB porque tiene un paso extra, la operacin XOR que agrega ms capas al proceso de cifrado. 4.3.11.3 CFB (Cipher Feedback) En este modo de operacin, los bloques de texto claro cuya longitud sea menor a 64 bits pueden ser cifrados. Normalmente, tiene que realizarse un proceso especial para manipular los archivos cuyo tamao no es un perfecto mltiplo de 8 bytes, pero este modo elimina dicha necesidad. Un bloque de 64 bits llamado registro de desplazamiento, es usado como entrada de texto claro para el DES, este es un valor arbitrario y cifrado con el algoritmo. Seguidamente, el texto cifrado es hecho pasar a travs de un componente extra llamado M-box, el cual simplemente selecciona los M bits ms significativos del texto cifrado, donde M es el nmero de bits en el bloque que se desea cifrar, al valor obtenido, se le aplica la funcin XOR junto con el texto claro real, y la salida producida es el texto cifrado. Finalmente, el texto cifrado es ingresado en el registro de desplazamiento, y utilizado como la semilla de texto claro para los siguientes bloques que sern cifrados. 66

Figura 4.18 Modo de cifrado CFB en el DES M: Mensaje, IV: Vector de inicializacin, C: Texto cifrado, K: Llave

Tal como en el modo CBC, un error en un bloque afectara a todos los bloques subsecuentes durante la transmisin de datos. Este modo de operacin es similar al CBC y es muy seguro, aunque ms lento que el ECB debido a la complejidad agregada. 4.3.11.4 OFB (Output Feedback)

Figura 4.19 Modo de cifrado OFB en el DES M: Mensaje, IV: Vector de inicializacin, C: Texto cifrado, K: Llave

Este modo de operacin es similar al modo CFB, con la diferencia que el texto cifrado de salida del DES es nuevamente ingresado en el registro de desplazamiento, en lugar del texto cifrado actual. El registro de desplazamiento inicializado con un valor inicial arbitrario, para luego pasar por el algoritmo DES. La salida del DES se hace pasar a travs de una M-box para luego alimentar el registro de desplazamiento, a manera de prepararse para el siguiente bloque. Al resultado se le aplica la funcin XOR junto al texto claro real (el cual debe ser menor de 64 bits tal como en el modo CFB), el resultado obtenido ser el texto cifrado. A diferencia de los modos CFB y CBC, un error en la transmisin de un bloque no afectar los subsecuentes, porque una vez se tenga el valor inicial del registro de desplazamiento, ste continuar generando nuevas entradas de texto claro al registro de desplazamiento sin ningn otro dato de entrada. Sin embargo, este modo de operacin es menos seguro que el CFB porque slo es necesitado el texto real y el texto cifrado por el DES para encontrar el texto claro del bloque ms reciente. 67

4.3.12 Seguridad del DES Ha habido mucha especulacin acerca de la seguridad del DES, en cuanto a la longitud de la llave, nmero de iteraciones y el diseo de las cajas de sustitucin. Las cajas de sustitucin son particularmente misteriosas; todas ellas constantes, sin ninguna razn aparente del porqu o para qu son as. A pesar de que IBM sostena que el funcionamiento interno del DES era el resultado de 17 aos-hombre de criptoanlisis intensivo, algunas personas teman que la NSA hubiera puesto una trampa en el algoritmo de manera que ellos pudieran fcilmente descifrar los mensajes. El Comit de Inteligencia de los Estados Unidos, investig el asunto en 1978. Los resultados de la investigacin fueron clasificados, pero un resumen desclasificado de los hallazgos exoneraba a la NSA de cualquier manipulacin del diseo del algoritmo. Se dijo que se convenci a IBM que utilizar una llave ms corta era lo ms adecuado, adems de haber asistido indirectamente la estructura y el desarrollo de las cajas de sustitucin. Sin embargo, como el gobierno no hizo pblico el resultado de la investigacin, muchas personas permanecieron con las dudas. La NSA, al ser consultada sobre alguna debilidad impuesta al DES, dijo Con respecto al Data Encryption Standard (DES), creemos que el informe pblico del Senado en 1978, acerca del rol de la NSA en el desarrollo del DES responde a su pregunta. Schneier reporta el hecho de que dos de los criptgrafos que disearon el DES, Tuchman y Meyer, dijeron que la NSA no alter el diseo. Adicionalmente, Coppersmith escribi: La NSA tambin brind consejos tcnicos a IBM. Konheim agreg Nosotros enviamos las cajas de sustitucin a Washington, y stas regresaron totalmente cambiadas. Hicimos nuestras evaluaciones y las pasaron. Algunas personas toman este comentario como una evidencia de que la NSA haba manipulado el algoritmo.55 Entonces la pregunta es porque modificaron las cajas de sustitucin?. Tal vez fue para asegurarse que la IBM no haba puesto una trampa en el DES. La NSA no tena ninguna razn para confiar en los investigadores de IBM, y era su responsabilidad asegurarse que el DES estuviera libre de trampas. Modificar las cajas de sustitucin era una forma de asegurarse. 4.3.13 Llaves dbiles del DES Debido a la forma en que la llave inicial es modificada para obtener una sub-llave en cada vuelta del algoritmo, ciertas llaves iniciales son consideradas dbiles. Se debe recordar que el valor inicial es partido por mitad, y que cada mitad es desplazada de forma independiente. Si todos los bits en cada mitad son ceros o unos, la llave usada para cada ciclo del algoritmo es la misma para el resto de ellas. Esto puede ocurrir si la llave est formada slo por unos, solo por ceros o s una mitad de la llave esta compuesta de unos y la otra por ceros. Tambin dos de las llaves dbiles tienen otras propiedades que las hacen menos seguras. Las cuatro llaves dbiles del DES son mostradas en notacin hexadecimal en la Tabla 4.7, reacurdese que cada octavo bit es para paridad. Existen pocas llaves que son consideradas dbiles para el DES. El uso de estas llaves puede reducir la efectividad de la seguridad brindada por el TDES y deber ser evitada.
55

Schneier, B. Applied Cryptography. Pp. 278 y 280.

68

0000000 0000000 FFFFFFF FFFFFFF

0000000 FFFFFFF 0000000 FFFFFFF

Tabla 4.7 Llaves dbiles del DES

Adicionalmente, algunos pares de llaves producen textos cifrados iguales. En otras palabras, una llave de un par puede descifrar mensajes cifrados con la otra llave del par. Esto se debe a la forma en que el DES genera las sub-llaves; en lugar de generar 16 sub-llaves diferentes, estas llaves generan slo dos. Cada una de estas sub-llaves es usada ocho veces en el algoritmo. Estas llaves son consideradas semi-dbiles, y son mostradas en notacin hexadecimal a continuacin: 01FE 1FE0 01E0 1FFE 011F E0FE O1FE 1FE0 01E0 1FFE 011F E0FE 01FE 0EF1 01F1 0EFE 010E F1FE O1FE 0EF1 01F1 0EFE 010E F1FE y FE01 y E01F y E001 y FE1F y 1F01 y FEE0 FE01 E01F E001 FE1F 1F01 FEE0 FE01 F10E F101 FE0E 0E01 FEF1 FE01 F10E F101 FE0E 0E01 FEF1

Tabla 4.8 Pares de llaves semi-dbiles del DES

Antes de condenar DES por tener llaves dbiles, considrese que esta lista de 64 llaves es minscula comparada con la lista total de 72,057,594,037,927,936 llaves posibles. Si se selecciona una llave de manera aleatoria, las posibilidades de elegir una de las dbiles es muy poca. 4.3.14 Longitud de la llave La propuesta original de IBM para NBS tena una llave de 128 bits. En el tiempo que el DES se hizo un estndar, sta fue reducida a 56 bits. Muchos criptgrafos discutieron por la longitud de la llave. Sus argumentos se centraron en la posibilidad de ataques de fuerza bruta. 4.3.15 Crticas al diseo del DES Numero de vueltas Porqu 16 vueltas?, porqu no 32?. Despus de cinco vueltas, cada bit del texto cifrado es una funcin de cada bit del texto claro y de cada bit de la llave, y despus de ocho vueltas el texto cifrado es esencialmente una funcin aleatoria de cada bit del texto claro y cada bit de cada bit. Cambios mnimos en el texto claro o la llave tienen un efecto esperado de cambios de alrededor del 50% sobre los bits que se procesan. Tal como se haba explicado previamente, recibe el nombre de efecto avalancha56. Entonces, porqu no detener el proceso despus de las ocho vueltas? A lo largo de los aos, variantes del DES han sido creados, en ellos se ha comprobado que con un nmero reducido de vueltas los ataques son exitosos. El DES con tres o cuatro vueltas fue fcilmente atacado en 1982. El DES con seis vueltas cay algunos aos ms tarde. El criptoanlisis de Biham y Shamir explica que el DES con un nmero menor a 16 vueltas pudo ser roto con un ataque de texto claro conocido, ms eficientemente que utilizando la fuerza bruta57.
56 57

Bauer, F. Op. Cit. pp. 174. Ver Anexo I.

69

Diseo de las cajas de sustitucin Adems de haber sido acusados de reducir el tamao de la llave, la NSA fue tambin acusada de modificar el contenido de las cajas de sustitucin. Cuando fue presionada para brindar una justificacin para las cajas de sustitucin, la NSA indic que los elementos del diseo del algoritmo fueron sensibles y que no se podan hacer pblicos. Muchos criptgrafos estaban conscientes de la NSA dise un agujero de seguridad en las cajas de sustitucin, haciendo posible que ellos pudieran fcilmente criptoanalizar el algoritmo. Desde entonces, un considerable esfuerzo se ha hecho para analizar el diseo y operacin de las cajas de sustitucin. A mediados de los aos 70, la Corporacin Lexar y los Laboratorios Bell examinaron la operacin de las cajas de sustitucin. Ninguno de los anlisis revel alguna debilidad, pero, ambas instituciones encontraron situaciones inexplicables: las cajas de sustitucin tenan ms rasgos en comn con la transformacin lineal de lo que ellos esperaban. Los Laboratorios Bell argumentaron que las cajas de sustitucin podran tener trampas escondidas, y el reporte de los laboratorios Lexar concluy:Algunas estructuras han sido encontradas en el DES, las cuales, indudablemente, fueron insertadas para reforzar el sistema en contra de ciertos tipos de ataque. Tambin se han encontrado estructuras que aparentemente lo debilitan. Por otro lado, este reporte tambin adverta:El problema (de la bsqueda de la estructura de las cajas de sustitucin) es complicado debido a la habilidad de la mente humana de encontrar estructuras aparentes en datos aleatorios, lo cual no es en realidad una estructura. En una segunda convencin del DES, la NSA revel varios criterios de diseo de las cajas de sustitucin. Esto no aclar las dudas de las personas, y el debate contina. Algunos aspectos curiosos acerca de las cajas de sustitucin son resaltadas en diferentes investigaciones: o o Los ltimos tres bits de salida de la cuarta caja de sustitucin pueden ser derivados de la misma forma que la primera, al complementar algunos de los bits de entrada. Dos entradas diferentes de las cajas de sustitucin, pueden producir la misma salida. Es posible obtener la misma salida de una vuelta del DES al cambiar los bits en solo tres cajas continuas. Shamir not que las entradas de las cajas de sustitucin parecan ser, de alguna manera, desbalanceadas, pero ello no poda ser una base para un ataque. l mencion un rasgo de la caja de sustitucin nmero cinco, pero tom otros ocho aos antes que el criptoanlisis la explotara.

4.3.16 Resultados adicionales Existen otros intentos de analizar el DES. Un criptgrafo utiliz un anlisis no aleatorio basado en espectros. Otros analizaron secuencias de factores lineales, pero sus ataques fallaron despus

70

de la octava vuelta. En 1987 un ataque realizado por Donald Davies explot la forma en que la expansin permutacin repite los bits en cajas de sustitucin adyacentes, este ataque igual falla despus de la octava vuelta. Criterios cajas de sustitucin y permutacin Despus que el criptoanlisis diferencial58 se hiciera pblico, IBM public el criterio de diseo para las cajas de sustitucin y las cajas de permutacin, estos son: o Cada caja de sustitucin tiene 6 bits de entrada y 4 bits de salida. (Este era el tamao mximo que poda acomodar en un solo chip con la tecnologa de 1974). funcin lineal de los bits de entrada.

o Ningn bit de salida de una caja de sustitucin debera estar tan cercano a una
o o Si se dejan fijos los bits de la derecha y los de la izquierda, de manera que slo varen los bits del medio, cada salida posible de 4 bits ser obtenida solamente una vez. S dos entradas de una caja de sustitucin difieren exactamente en un bit, las salidas debern diferir en por lo menos 2 bits. bits y son idnticas en sus ltimos 2 bits, las dos salidas no debern ser las mismas.

o Si dos entradas de una caja de sustitucin difieren exactamente en sus dos primeros
Criterios para las cajas de permutacin: o Los cuatro bits de salida de cada caja de sustitucin en la vuelta i estn distribuidos de manera que dos de ellos afectan los bits de en medio de las cajas de sustitucin en la vuelta i + 1 y los otros dos afectan los bits finales. Los cuatro bits de salida de cada caja de sustitucin afectan seis diferentes cajas de sustitucin, nunca dos afectan la misma caja. Si el bit de salida de una caja de sustitucin afecta un bit de en medio de otra, entonces un bit de salida de otra caja de sustitucin no puede afectar el bit de en medio de la primera caja de sustitucin.

o o

Actualmente, generar cajas de sustitucin puede ser muy fcil, pero era una tarea complicada a principio de los aos 70. Tuchman dijo que ellos ejecutaban durante meses los programas que generaban las cajas de sustitucin. 4.3.17 Variantes del DES

4.3.17.1 Triple DES


Desde la presentacin del DES, a mediados de los aos 70, los criptoanalistas han estado conscientes de la debilidad de su llave de 56 bits. En 1977 Diffie y Hellman estimaron el costo de una mquina capaz de recuperar una llave de 56 bits en un da, US$20 millones. En 1993 se
58

Ver Anexo I.

71

present el diseo de una mquina que reducira la bsqueda a 3.5 horas. El diseo consista en 57,000 circuitos y tena un costo estimado de 1 milln de dlares. Media dcada ms tarde, la EFF, Electronic Frontier Foundation, construy la primera mquina para tal fin. El costo fue de $250,000 y se le llam Deep Crack, la cual hizo la bsqueda de las llaves y tard 9 das. Una vez qued claro que el DES no provea una seguridad adecuada debido a su llave de 56 bits, el algoritmo fue gradualmente reemplazado por el llamado Triple DES, tambin conocido como TDEA. La idea del funcionamiento del algoritmo fue propuesta por Diffie y Hellman, quienes notaron que al realizar el doble de las operaciones del DES no obtenan ningn incremento en su seguridad. Matyas y Merkle sugirieron una lista de esquemas de reemplazo para el DES el cual fue incluido en el estndar ANSI X9.52, el cual en 1999 reemplazaba al DES. Actualmente el TDES esta siendo reemplazado por el Advanced Encryption Standard (AES). La transicin es lenta, sin embargo, se espera que ambos esquemas de cifrado coexistan por muchos aos ms. El TDES consiste en aplicar tres veces el DES, en el ANSI X9.52, se define de la siguiente forma: C = EK3 (DK2 (EK1 (P))) Donde P y C son textos claros de 64 bits y textos cifrados, y EK() and DK() denotan las funciones de cifrado y descifrado del DES. El estndar especifica tres formas diferentes de elegir las llaves de 56 bits, K1, K2, y K3: 1. K1, K2, y K3 son independientes, K1 K2 K3 K1, (168 bits); 2. K1 K2 y K3 = K1. 3. K1 = K2 = K3 (56 bits). La tercera opcin es equivalente al DES y provee compatibilidad con sistemas de cifrado anteriores. La opcin 2 duplica el nmero de bits de la llave y triplica el nmero de vueltas del DES. La opcin 1 triplica ambos. Como resultado, el algoritmo es reforzado ante ataques criptogrficos y tambin ante bsquedas exhaustivas de la llave. El triple DES tiene la ventaja de utilizar llaves ms largas que el DES, pero sigue operando con bloques de 64 bits. Esta limitacin, en conjunto con la realidad que el TDES es lento, motiva a cambiarse al AES que utiliza bloques de 128 bits. Las llaves del TDES deben ser manipuladas de acuerdo a la publicacin especial de la NIST, SP 800-72, Recommendation for Key Managements. Las siguientes especificaciones para el manejo de llaves deben ser cumplidas al momento de la implementacin del algoritmo. Requerimientos para las llaves Para todos los modos de operacin de TDEA, tres llaves K1, K2, K3 definen el esquema, los requerimientos que las llaves deben cumplir son: o o o Ser secreta Ser generada aleatoria o pseudoaleatoriamente Ser independiente

72

o o

Tener integridad, es decir, cada llave no debe haber sido alterada de forma no autorizada desde que fue generada, transmitida o almacenada por una fuente autorizada. Ser utilizada en el orden apropiado

Ser considerada una cantidad fija de manera que, una llave individual no pueda ser manipulada mientras se dejan las otras dos sin cambios 4.3.17.2 DES con sub-llaves independientes Otra variacin resulta al utilizar diferentes sub-llaves para cada vuelta, en lugar de generarlas desde una sola llave de 56 bits. Los 48 bits son usados en cada una de las 16 vueltas, esto significa que la longitud de la llave sera de 768 bits. Esta variante incrementar drsticamente la dificultad de un ataque de fuerza bruta contra el algoritmo; dicho ataque tendra una complejidad de 2768. Aunque, las sub-llaves independientes contrarrestan el criptoanlisis lineal, esta variante es susceptible al criptoanlisis diferencial y puede ser roto con 261 textos claros elegidos. Parecera que cualquier modificacin al manejo y generacin de llaves no puede hacer al DES ms fuerte. 4.3.17.3 DESX El DESX es una variante del DES, que ha sido incluido en el programa Mail Safe desde 1986 y en el grupo de herramientas BSAFE desde 1987. DESX utiliza una tcnica llamada blanqueamiento para confundir las entradas y salidas del DES. Adems de una llave de 56 bits, el algoritmo tiene una llave adicional de blanqueamiento de 64 bits. A estos 64 bits se les aplica una funcin XOR junto al texto claro, antes de la primera vuelta del DES. Junto al texto cifrado se aplica la funcin XOR junto a 64 bits adicionales. El blanqueamiento hace que el DESX sea ms fuerte que el DES ante un ataque de fuerza bruta; el ataque requiere (2120)/n operaciones con n textos claros conocidos. Esto tambin mejora la seguridad ante un criptoanlisis lineal y diferencial; los ataques requieren 261 textos claros elegidos y 260 textos claros conocidos respectivamente. 4.3.17.4 CRYPT(3) CRYPT(3) es una variante del DES encontrada en sistemas de UNIX. Es principalmente usada como una funcin para contraseas, pero algunas veces puede ser usada para cifrado. La diferencia entre CRYPT(3) y DES es que el primero tiene una llave independiente para la expansin permutacin con 212 posibles permutaciones. 4.3.17.5 DES generalizado El DES generalizado o GDES fue diseado para acelerar el DES y para reforzar el algoritmo. GDES opera con bloques de una variable de texto claro. Bloques cifrados son divididos hasta en sub bloques de 32 bits; el nmero exacto depende del tamao del bloque total. La funcin F es calculada una vez en cada ronda con cada bloque que se encuentra ms a la derecha. Al resultado se le aplica una funcin XOR con todas las otras partes, las cuales son rotadas hacia la derecha. Este algoritmo tiene un nmero variable de vueltas, n. Hay una pequea modificacin en la ltima vuelta, de manera que el proceso de cifrado y descifrado difieren nicamente por el orden de las sub-llaves (igual que el DES). 73

4.3.17.6 DES con cajas de sustitucin alternativas Otras modificaciones realizadas al DES se centran en las cajas de sustitucin. Algunos diseos hacen que el orden de las cajas sea variable. Otros diseadores varan por s mismos el contenido de las cajas de sustitucin. Biham y Shamir demostraron que el diseo de las cajas de sustitucin, y an el orden de las cajas, fue optimizado contra el criptoanlisis diferencial:El reemplazo del orden de las ocho cajas del DES (sin cambiar su valor) hace que el DES sea mucho ms fcil: El DES con 16 vueltas de un orden reemplazado en particular es rompible en alrededor de 238 pasos. DES con cajas de sustitucin alternas ha demostrado ser muy fcil de romper. An con cambios mnimos de una entrada en una de las cajas de sustitucin puede hacerlo fcil de romper. Las cajas de sustitucin del DES no fueron optimizadas contra el criptoanlisis lineal. 4.3.17.7 RDES RDES es una variante que reemplaza la mitad izquierda y derecha al final de cada vuelta con un intercambio que depende de una llave. Este intercambio es fijo, dependiendo solamente de la llave. Esto quiere decir que los 15 intercambios dependientes de las llaves ocurren con 215 posibles instancias, y que esa variante no es resistente a un criptoanlisis diferencial. Este algoritmo tiene una gran cantidad de nmero de llaves dbiles. En realidad, casi todas las llaves son ms dbiles que una llave tpica del DES. Esta variante no debe ser utilizad 4.3.17.8 SnDES Un grupo de investigadores coreanos, dirigidos por Kwangjo Kim, intentaron encontrar un grupo de cajas de sustitucin que fueran ptimamente seguras en contra de criptoanlisis diferenciales y lineales. Su primer intento, conocido como s2DES, fue presentado y demostr ser peor que el DES en contra de criptoanlisis diferencial. Su siguiente intento, s3DES, fue representado y demostr ser peor en contra del criptoanlisis lineal. Biham sugiri un cambio menor en el s3DES para hacerlo resistente en ambos tipos de criptoanlisis. El grupo desarroll tcnicas nuevas para el diseo de cajas de sustitucin. Ellos propusieron snDES. 4.3.17.9 DES con cajas dependientes de llaves El criptoanlisis lineal y diferencial funciona solamente s el analista conoce la composicin de las cajas de sustitucin. Si las cajas de sustitucin son dependientes de las llaves y elegidas por un mtodo criptogrfico ms fuerte, entonces el criptoanlisis lineal y diferencial son mucho ms difciles.

74

4.3.18 Qu tan seguro es DES ahora? La respuesta es fcil y difcil. La parte fcil es que basta con tan solo mirar la longitud de la llave. Una mquina que realice un ataque de fuerza bruta al DES y que pueda encontrar una llave en un promedio de 3.5 horas costaba en 1993 alrededor de un milln de dlares. El DES es tan popular que sera inocente creer que NSA y sus contrapartes no la hayan construido. Tambin hay que recordar que el costo de dicha mquina caer en un factor de 5 cada 10 aos. En otras palabras el DES se vuelve ms dbil segn el tiempo va pasando. La parte difcil de la respuesta trata de estimar las tcnicas de criptoanlisis. El criptoanlisis diferencial fue conocido por la NSA mucho antes de 1970, cuando el DES se convirti en un estndar. Es inocente creer que la NSA no haya desarrollado tcnicas de criptoanlisis que pudieran ser aplicadas contra el DES, pero esos son slo rumores. Winn Schwartau escribi que la NSA construy una mquina para atacar el DES a inicios de 1980. El rumor es que la NSA puede romper el DES en un tiempo de 3 a 15 minutos, dependiendo de cuanto pre-procesamiento puedan realizar, y estas mquinas costaran alrededor de $50,000 cada una. La recomendacin es utilizar las cajas de construccin de cajas de sustitucin dependientes de llaves dada por Biham. Son fciles de implementar en software y en chips. Esto incrementa la resistencia del algoritmo ante un ataque de fuerza bruta, hace que el anlisis lineal y diferencial sea ms difcil y le da a la NSA algo al menos tan fuerte como el DES, pero diferente, por lo cual preocuparse. 4.4 International Data Encryption Algorithm (IDEA)

El algoritmo IDEA es bastante ms joven que el DES, pues data de 1992. Fue propuesto por Xuejia Lai y James Massey59. Trabaja con bloques de 64 bits de longitud y emplea una llave de 128 bits. El diseo del algoritmo de cifrado est basado en el concepto de mezcla de operaciones de diferentes grupos algebraicos. El algoritmo fue desarrollado para incrementar la seguridad ante los criptoanlisis diferenciales. Algunos expertos lo calificaron en su momento como el mejor y ms seguro algoritmo disponible al pblico.60 Como en el caso del DES, se usa el mismo algoritmo tanto para cifrar como para descifrar. IDEA esta considerado como un algoritmo inmune al criptoanlisis diferencial, tampoco existen ataques exitosos utilizando el criptoanlisis lineal, no se le conoce ninguna debilidad algebraica, adems, la longitud de su llave hace imposible en la prctica un ataque por fuerza bruta. El criptoanlisis ms significativo hacia el algoritmo lo hizo Daemen, quien descubri una lista de 251 llaves dbiles, pero, considerando que existen 2128 posibles llaves, este resultado no tiene un impacto significativo61.
Lai, X., Massey, J. A Proposal for a New Block Encryption Standard. Reprint of pp. 389-404 in Advances in Cryptology-EUROCRYPT'90 Proceedings, LNCS 473, Springer-Verlag, 1991. 60 Schneier, B. Applied Cryptography. Pp. 319. 61 http://www.rsasecurity.com/rsalabs/node.asp?id=2254
59

75

Como ocurre con todos los algoritmos simtricos de cifrado por bloques, IDEA se basa en los conceptos de confusin y difusin, haciendo uso de las siguientes operaciones elementales: o o o XOR Suma mdulo 216 Producto mdulo 216 + 1.

El algoritmo IDEA consta de ocho vueltas, despus de las cuales se ejecuta una transformacin. Esta ltima se toma en cuenta como una media vuelta extra. La primera vuelta completa y la transformacin de salida son mostradas en la figura 4.14 Las dos multiplicaciones y las dos sumas mostradas en la figura son llamadas estructura MA, lo que hace referencia a la multiplicacin y adicin. La gestin de llaves toma una llave de entrada de 128 bits y retorna 52 sub-llaves, de 16 bits cada una, utilizando 6 para cada una de las 8 vueltas y 4 ms para la transformacin de salida.

IDEA tiene un pequesimo subconjunto de llaves que pueden dar ciertas ventajas a un criptoanalista, pero la probabilidad de encontrarnos con una de ellas es de 1 entre 296, por lo que no representan un peligro real. Lucena, M. Op. Cit. pp. 90. Schneier va ms all al afirmar que es fcil modificar IDEA de forma que carezca de llaves dbiles, pues basta aplicar una funcin XOR entre cada sub-llave y 0x0DAE, donde x representa cualquier nmero. Schneier, B. Applied Cryptography. Pp. 323.

76

Figura 4.20 Proceso de cifrado del algoritmo IDEA

4.4.1

Proceso de cifrado

Se divide el bloque X a codificar, de 64 bits, en cuatro partes X1, X2, X3 y X4 de 16 bits cada una. Se denomina Zi a cada una de las 52 sub-llaves de 16 bits que se necesitan. Las operaciones que se llevan a cabo en cada vuelta son las siguientes: 1. Multiplicar X1 por Z1 2. Sumar X2 con Z2 3. Sumar X3 con Z3. 4. Multiplicar X4 por Z4. 5. Hacer un XOR entre los resultados del paso 1 y el paso 3. 6. Hacer un XOR entre los resultados del paso 2 y el paso 4. 7. Multiplicar el resultado del paso 5 por Z5. 8. Sumar los resultados de los pasos 6 y 7. 9. Multiplicar el resultado del paso 8 por Z6. 10. Sumar los resultados de los pasos 7 y 9. 11. Hacer una operacin XOR entre los resultados de los pasos 1 y 9. 12. Hacer una operacin XOR entre los resultados de los pasos 3 y 9. 13. Hacer una operacin XOR entre los resultados de los pasos 2 y 10. 14. Hacer una operacin XOR entre los resultados de los pasos 4 y 10. La salida de cada iteracin sern los cuatro sub-bloques obtenidos en los pasos 11, 12, 13 y 14, que sern la entrada del siguiente ciclo, en el que se emplearn las siguientes seis sub-llaves, hasta un total de 48. Al final de todo el proceso, se intercambian los dos bloques centrales, con esto se deshace el intercambio que se llev a cabo en los pasos 12 y 13. Despus de la octava iteracin, se realiza la siguiente transformacin: 1. 2. 3. 4. Multiplicar X1 por Z49 Sumar X2 con Z50 Sumar X3 con Z51 Multiplicar X4 por Z52

Las primeras ocho sub-llaves se calculan dividiendo la llave de entrada en bloques de 16 bits. Las siguientes ocho se calculan rotando la llave de entrada 25 bits a la izquierda y volviendo a dividirla, y as sucesivamente. Las sub-llaves necesarias para descifrar se obtienen cambiando de orden las Zi y calculando sus inversas para la suma o la multiplicacin. Puesto que 216 + 1 es un nmero primo, nunca se podr 77

obtener cero como producto de dos nmeros, por lo que no se necesita representar dicho valor. Cuando se estn calculando productos, se utilizar el cero para expresar el nmero 216 - un uno seguido de 16 ceros. Esta representacin es coherente, puesto que los registros que se emplean internamente en el algoritmo poseen nicamente 16 bits. Pese a las cualidades de este algoritmo, no lleg a reemplazar al DES como estndar en parte porque est patentado y se requiere una licencia para usarlo en aplicaciones comerciales y, por otra parte, por que aun se esperaba conocer su evolucin ante los desarrollos en criptoanlisis posteriores a su surgimiento. Su fama se debe primordialmente a que es parte del PGP (Pretty Good Privacy), que se describe con ms detalle en apartados posteriores.62 4.5 MADRYGA

W.E. Madryga propuso este algoritmo de cifrado de bloques en 1984. Es eficiente en cuanto al software, no requiere permutaciones complicadas y todas sus operaciones se realizan sobre bytes. Sus objetivos de diseo son una reiteracin de valores: 1. El texto claro no puede ser extrado del criptograma sin el uso de la llave (esto significa precisamente que el algoritmo es seguro). 2. El nmero de operaciones requeridas para determinar la llave a partir de una muestra de texto claro y del criptograma habr de ser estadsticamente equiparable al producto de las operaciones de un cifrado tantas veces como posibles llaves haya. 3. El conocimiento del algoritmo no debera afectar la fortaleza del cifrado, permaneciendo toda la seguridad en la llave. 4. Un cambio de un bit en la llave producira un cambio drstico en el criptograma usando el mismo texto claro, y de igual forma un cambio de un bit en el texto claro producira un cambio drstico en el criptograma usando la misma llave (es decir que en cualquiera de los casos se desencadenara el efecto avalancha). 5. El algoritmo contendra una combinacin no conmutativa de sustituciones y permutaciones. 6. El algoritmo incluira sustituciones y permutaciones tanto en el control de la entrada de datos como en la llave. 7. Los grupos de bits de redundancia estaran totalmente oscurecidos dentro del criptograma. 8. La longitud del texto claro y el cifrado seran iguales. 9. No habra relacin entre posibles claves y efectos en el texto cifrado. 10. Cualquier llave posible producira un cifrado fuerte, es decir que no habran llaves dbiles. 11. La longitud de la llave y el texto deberan ser ajustables para adecuarse a requerimientos de seguridad variables. 12. El algoritmo sera eficientemente implementable en software sobre mainframes, minicomputadoras y equipo basado en lgica discreta. (De hecho, este algoritmo recurre nicamente a funciones XOR y desplazamientos de bits).

62

Schneier, B. Applied Cryptography. Pp. 320

78

4.5.1

Descripcin del algoritmo

Madryga cuenta con dos ciclos anidados. La vuelta externa se repite ocho veces (aunque esto puede incrementarse por requerimientos de seguridad) y consta de una aplicacin del ciclo interno al texto claro. El ciclo interno transforma el texto claro en texto cifrado y repite una vez cada bloque de ocho bits es decir cada byte del texto claro. De esta forma, el algoritmo recorre todo el texto claro ocho veces sucesivas. Se opera una iteracin del ciclo interno sobre una ventana de 3 bytes de datos, llamada cuadro o trama de trabajo. Lo anterior se ilustra en la Figura 4.15. Esta ventana avanza un byte en cada iteracin. Vale aclarar que los datos son considerados circulares o rotativos cuando se trata de los ltimos dos bytes. Los dos primeros bytes del cuadro de trabajo se rotan juntos un nmero variable de posiciones, mientras que al ltimo se aplica una operacin XOR con algunos bits de la llave. A medida que avanza el cuadro de trabajo, todos los bytes van siendo sucesivamente operados de la forma antes mencionada. Las rotaciones sucesivas traslapan los resultados de una operacin XOR y rotacin previas y el dato de la XOR es empleado para ejercer influencia sobre la rotacin. Esto hace que todo el proceso sea reversible. Debido a que cada byte de datos ejerce influencia sobre los dos que estn a su izquierda y uno a su derecha, despus de ocho veces que se ejecuta este procedimiento, cada byte del texto cifrado depende de los diecisis bytes a su izquierda y los ocho a su derecha.
Texto 1 2 3 4 5 6 ... TL-2 TL-1 TL

Cuadro de trabajo mvil

CT(1) 8 bits

CT(2) 8 bits

CT(3) 8 bits

Transposicin

Objetivo de rotacin 16 bits

Rotacin 3 bits

Traslacin

Objetivo de traslacin 8 bits XOR

Llave

...

KL

XOR Hash llave 1 2 3 ... KL

Figura 4.21 Una iteracin de Madryga.

Durante el proceso de cifrado, cada iteracin del ciclo interno inicia ubicando el cuadro de trabajo sobre el penltimo byte de texto claro y avanza de forma circular hasta el antepenltimo byte del texto claro. Primero se efecta una operacin XOR entre la llave entera y una constante aleatoria 79

y luego se le rota tres bits a la izquierda. Los tres bits menos significativos del byte menos significativo del cuadro de trabajo son guardados; ellos controlarn la rotacin de los otros 2 bytes. Luego, se somete al byte menos significativo del cuadro de trabajo a una operacin XOR con el byte menos significativo de la llave. Despus, la concatenacin de los dos bytes ms significativos es rotada a la izquierda un nmero variable de bits (entre cero y siete). Finalmente, se desplaza el cuadro de trabajo 1 byte a la derecha y se repite todo el proceso. El punto de la constante aleatoria es convertir la llave en una secuencia seudoaleatoria. La longitud de esta constante debe ser igual a la de la llave y debe ser la misma para todos aquellos que deseen comunicarse con otro. Para una llave de 64 bits, Madryga recomienda la constante 0X0F1E2D3C4B5A6978. El descifrado revierte el proceso. Cada iteracin del ciclo interno comienza con el cuadro de trabajo en el antepenltimo byte del texto cifrado y avanza en sentido contrario circularmente, pasando al penltimo byte. Tanto la llave como los dos bytes de texto cifrado son desplazados hacia la derecha y se efecta una operacin XOR antes de las rotaciones. Schneier no recomienda el uso de este algoritmo debido a una serie de problemas que fueron detectados tanto por investigadores Queensland University of Technology (QUT) como por Eli Biham63. Schneier dice que si bien las dificultades detectadas no son condenables en si mismas, el conjunto de ellas no permite confiar en el algoritmo. Otros autores coinciden con Schneier y llegan a afirmar que para hacer ataques diferenciales a este algoritmo basta cantidades bastante pequeas de datos y la ruptura se obtiene de una forma bastante rpida. Lo anterior revela que Madryga es muy dbil en comparacin con otros algoritmos de cifrado64.

Segn refiere Schneier, el equipo de QUT examin una serie de algoritmos de cifrado de bloques entre los que se encontraba Madryga y observaron que en este ltimo no exhiba el efecto avalancha entre texto claro y texto cifrado. Adicionalmente, cita las siguientes observaciones emitidas por Biham: "El algoritmo solo recurre a operaciones lineales (rotaciones y XOR), que son escasamente modificadas dependiendo de los datos. No hay nada como la fortaleza de las cajas de sustitucin del DES. La paridad de todos los bits en el texto claro y el cifrado es constante, dependiendo nicamente de la llave. Esto lleva a que si se tiene un texto claro y su correspondiente cifrado, es posible predecir la paridad de ambos". Schneier, B. Applied Cryptography. Pp. 306. 64 El problema fundamental es la falla en la deseada propiedad de avalancha, pues un bit provocar avalancha solo si es tal la condicin que modifica la rotacin; ya que solo 3 de los 6 bits son usados en la rotacin, un cambio de bit tiene una oportunidad de 5/8 de no causar alteraciones durante un paso particular del ciclo interno, as como durante la vuelta completa. En esas condiciones, es obvio que resulta poco probable que se desencadene una avalancha. Adicionalmente, se coincide con Biham en los sealamientos sobre el problema de paridad de este algoritmo. Shirriff, K. Differential Cryptanalysis of Madryga. Sun Microsystems Labs. Draft Version. October 19, 1995.

63

80

4.6

SKIPJACK

Este algoritmo de cifrado fue desarrollado por la NSA e incorporado en los chips CLIPPER y CAPSTONE. Estos fueron propuestos por los Estados Unidos para la aplicacin de criptografa con el polmico mtodo consistente en que los usuarios depositen sus claves secretas en diferentes agencias del gobierno. Tanto los chips como el algoritmo estn clasificados por el gobierno de los Estados Unidos como secretos del ms alto nivel. Por esta razn, la informacin conocida acerca de este mtodo de cifrado es bastante reducida. Entre ella se encuentran, por ejemplo, los siguientes datos: o o o o o Es un cifrado de bloque iterativo Cifra bloques de informacin de 64 bits Utiliza una clave de cifrado de 80 bits Se puede utilizar con los modos de cifrado ECB, CBC, OFB y CFB Consta de 32 vueltas elementales de cifrado

El mtodo debe ser seguro puesto que la NSA tiene la intencin de utilizarlo en el cifrado de su DMS (Defense Messaging System). Un panel de expertos fue informado de que pasarn ms de 36 aos hasta que la dificultad de romper el SKIPJACK mediante un ataque basado en fuerza bruta sea equivalente al esfuerzo requerido hoy en da para romper DES utilizando este mismo tipo de ataque. El cifrador SKIPJACK esta patentado pero la patente es secreta.65

65

Pastor, J., Sarasa, M. Op. Cit. Pp. 124

81

4.7

BLOWFISH

Blowfish es un algoritmo de cifrado de bloques propuesto por Bruce Schneier66. Se trata de una red de Feistel que itera una funcin de cifrado diecisis veces. Los bloques son de 64 bits y la llave puede llegar a alcanzar cualquier longitud hasta 448 bits. Si bien requiere una fase de inicializacin relativamente compleja antes de efectuar cualquier cifrado, es muy eficiente cuando se implementa sobre grandes procesadores. Segn refiere Schneier67, dise este algoritmo siguiendo los siguientes criterios: 1. Rpido. Blowfish cifra datos en microprocesadores de 32 bits a 26 ciclos de reloj por byte. 2. Compacto. Blowfish puede ser ejecutado en menos de 5Kbytes de memoria. 3. Simple. Blowfish emplea nicamente operaciones simples: adicin, XOR y tablas de bsqueda (lookups tables) sobre operandos de 32 bits. Es fcil analizar su diseo y ello lo vuelve resistente a errores de implementacin. 4. Ajustable en trminos de seguridad. La longitud de la llave de Blowfish es variable y puede llegar a tener hasta 448 bits. Este algoritmo est optimizado para aplicaciones donde la llave no cambia con mucha frecuencia, como en enlaces de comunicacin o en cifradores automticos de archivos. Es significativamente ms rpido que el DES cuando se implemente sobre procesadores de 32 bits con cache de datos grande. No es recomendable su aplicacin en conmutacin de paquetes (por la necesidad de mayor frecuencia en los cambios de llave) o como funcin hash de sentido nico. Sus requerimientos de hardware lo hacen inconveniente en tarjetas inteligentes. 4.7.1 El funcionamiento de Blowfish

El algoritmo consta de dos partes: la expansin de llave y el cifrado de datos. La expansin de llave convierte una llave de hasta 448 bits en varios arreglos de sub-llaves totalizando 4168 bytes. El cifrado de datos consiste en la iteracin de una funcin simple diecisis veces. Cada iteracin es una permutacin dependiente de la llave y una sustitucin dependiente de la llave y de los datos. Las operaciones se limitan a sumas y XOR sobre palabras de 32 bits. Las nicas operaciones adicionales son cuatro tablas de bsqueda de arreglos indexados por vuelta. Blowfish utiliza una gran cantidad de sub-llaves. Ellas pueden ser calculadas con anticipacin, como paso previo a cualquier proceso de cifrado o descifrado. El arreglo P consta de 18 sub-llaves de 32 bits: P1, P2, ... , P18. Hay cuatro cajas de sustitucin de 32 bits, cada una de ellas con 256 entradas: S1,0, S1,1, ... , S1,255 S2,0, S2,1, ... , S2,255 S3,0, S3,1, ... , S3,255 S4,0, S4,1, ... , S4,255
Schneier, B. Description of a New Variable-Length Key, 64-Bit Block Cipher (Blowfish). Fast Software Encryption, Cambridge Security Workshop Proceedings (December 1993), Springer-Verlag, 1994, Pp. 191-204. 67 Schneier, B. Applied Cryptography. Pp. 336.
66

82

Como se mencion al principio de este apartado, Blowfish es una red de Feistel de 16 vueltas. La entrada es un elemento de datos de 64 bits al que por simplicidad llamaremos x. El procedimiento de cifrado es el siguiente:
Texto claro
32 bits 64 bits 32 bits

P1

32 bits

P2

32 bits

F 13 iteraciones ms
32 bits

P16

F P18
32 bits

P17
32 bits 64 bits

32 bits

32 bits

Texto cifrado

Figura 4.22 Estructura del algoritmo Blowfish

Lo presentado en la Figura 4.22 puede expresarse de la manera siguiente: Dividir x en mitades de 32 bits: xL, xR Para i=1 hasta 16: xL = xL XOR Pi xR = F(xL) XOR xR Intercambiar las posiciones de xL y xR Intercambiar las posiciones de xL y xR (deshacer el ltimo intercambio) 83

xR = xR XOR P17 xL = xL XOR P18 Recombinar xL y xR En cuanto a la funcin F, sta se implementa de la forma siguiente: Dividir xL en cuatro fragmentos de ocho bits: a, b, c y d F(xL) = ((S1,a + S2,b mod 232) XOR S3,c) + S4,d Es proceso de descifrado es exactamente similar, salvo que P1, P2, ... , P18.se emplean en orden inverso. El contenido de la funcin F se ilustra en la Figura 4.23.
8 bits

Caja de sustitucin 1

32 bits

8 bits 32 bits 8 bits

Caja de sustitucin 2

32 bits

Caja de sustitucin 3

32 bits 32 bits

8 bits

Caja de sustitucin 4

32 bits

Figura 4.23 La funcin F

Las sub-llaves se calculan de acuerdo al mtodo siguiente: 1. Inicializar primero el arreglo P y luego las cuatro cajas de sustitucin en orden con una cadena fija. Esta cadena consiste en los dgitos hexadecimales de . 2. Efectuar una operacin XOR entre P1 y los primeros 32 bits de la llave, efectuar otra operacin XOR entre P2 y la otra mitad de la llave, y seguir as sucesivamente hasta llegar a P18. Iterar mediante los dgitos de la llave hasta que se hayan ejecutado las correspondientes operaciones XOR entre los bits de la llave y todo el arreglo P. 3. Cifrar una cadena de ceros con el algoritmo, usando las sub-llaves descritas en los dos pasos anteriores. 4. Reemplazar P1 y P2 con la salida del paso 3. 5. Cifrar la salida del paso 3 usando el algoritmo con las llaves modificadas. 6. Reemplazar P3 y P4 con la salida del paso 5. 7. Continuar el proceso, reemplazando todos los elementos del arreglo P y luego todas las cajas de sustitucin en orden, con la salida continuamente cambiante del algoritmo.

84

Se requieren en total 521 iteraciones para generar todas las sub-llaves. Estas pueden ser almacenadas en aplicaciones, pues no es necesario ejecutar toda esta etapa del proceso mltiples veces. 4.7.2 La seguridad de Blowfish

Serge Vauldenay examin este algoritmo. Este investigador indica que son viables los ataques por criptoanlisis diferencial contra Blowfish sobre un nmero reducido de vueltas o con la parte de informacin que describe la funcin F. El segundo caso parece ser equivalente a un anlisis efectuado por Lee, Heys y Tavares sobre otro algoritmo, el CAST; sin embargo, en el caso de CAST, las cajas de sustitucin son diseadas de manera que se evite cualquier ataque, mientras que en Blowfish son generadas aleatoriamente. Vaudenay investig las debilidades de las cajas de sustitucin sobre la base de colisiones y demostr que hay llaves dbiles en Blowfish que habilitan una disminucin significativa de la complejidad de los ataques y que incluso es posible detectar llaves dbiles usando 222 textos claros selectos (con ocho iteraciones).68 4.8 RIJNDAEL

El algoritmo Rijndael fue desarrollado por Vincent Rijmen y Joan Daemen, dos investigadores belgas. El primero naci en 1965 y se gradu de Ingeniero civil electromecnico y luego se doctor en Criptografa. El segundo naci en 1970, se gradu de la carrera de ingeniera electrnica en la Universidad Catlica de Lovaina, de donde posteriormente se doctor realizando una tesis sobre Criptoanlisis y diseo de cifrados de bloque iterativos. Rijmen y Daemen iniciaron el desarrollo de un algoritmo al que denominaron Square69. Su principal diferencia con los algoritmos existentes es que trabaja con llaves y bloques de 128 bits. Este algoritmo se hizo pblico en 1997. Coincidiendo con la fecha, el NIST anunci el concurso para la seleccin del prximo AES, Advanced Encription Standard. La condicin de estndar perteneca al algoritmo DES desde la dcada de los 70. Como medida temporal mientras no se seleccionaba el nuevo AES, el NIST recomend el uso del Triple DES para garantizar la privacidad de los documentos. Uno de los requisitos que los algoritmos deban cumplir para participar en el concurso de seleccin del AES era que deban trabajar con llaves de 128, 192 y 156 bits y longitudes de bloque de al menos 128 bits. Rijmen y Daemen iniciaron la modificacin de Square para adaptarlo a las condiciones del concurso y en junio de 1998 remitieron al NIST un nuevo algoritmo, descendiente de Square, al que llamaron Rijndael como una alusin a sus apellidos (Rijmen&Daemen).70 En agosto de 1998 finaliz el plazo para la presentacin de algoritmos, se obtuvieron 15 propuestas, de las cuales tres, Rijndael, Crypton y Twofish, estaban basadas en la estructura de Square. Los algoritmos fueron analizados por un grupo de expertos designados por el NIST que

Vauldenay, S. On the Weak Keys of Blowfish. cole Normale Suprieure DMI.Laboratoire dInformatique. Paris. S/f. 69 Algoritmo de cifrado de bloques iterativo con longitud de bloques y llave de 128 bits. Para mayores detalles, consultar Daemen, J., Knudsen, L., Rijmen, V. The Block Cipher Square. Fast Software Encryption, LNCS 1267, E. Biham, Ed., Springer-Verlag, 1997, pp. 149-165. Also available as http://www.esat.kuleuven.ac.be/rijmen/square/fse.ps.gz. 70 La propuesta que remitieron al NIST puede ser consultada en el documento Daemen, J., Rijmen, V. AES Proposal: Rijndael. Document version 2, Date: 03/09/99.

68

85

valoraron aspectos tales como: robustez, estructura, capacidad para ser implementado en software y hardware, etc. En agosto de 1999 se dieron a conocer los cinco finalistas: Twofish, Mars, Serpent, RC6 y Rijndael; este ltimo se destac frente a sus competidores, ya que tanto la longitud de su llave, como el tamao de los bloques que cifra poda ser de 128, 192 256 bits. Fue as como el 2 de octubre de 2000 se proclam a Rijndael como ganador del concurso y nuevo AES. Sobre las razones por las que se le eligi frente a los otros candidatos, el NIST declar: Tomando todo en consideracin, la combinacin de seguridad, rendimiento, eficiencia, facilidad de implementacin y flexibilidad lo hacan la eleccin adecuada para el AES. Especficamente, Rijndael consistentemente obtiene muy buen rendimiento tanto en hardware como en software en una amplia variedad de entornos de computacin tanto usado en modos feedback como no feedback. Su preparacin de llaves es excelente y la agilidad de las mismas muy buena. Rijndael requiere muy poca memoria lo que lo hace excelente para entornos con espacio restringido demostrando aqu tambin su excelente rendimiento. Las operaciones de Rijndael estn entre las ms sencillas de defender contra ataques por anlisis temporal (timing attack) y criptoanlisis diferencial de potencia (power attack). Por otro lado parece que se puede proporcionar defensa contra los ataques citados sin afectar significativamente el rendimiento de Rijndael. El algoritmo se ha diseado con flexibilidad en trminos de los tamaos de bloque y de llave. Finalmente, la estructura interna de las rondas de Rijndael parece tener un buen potencial para beneficiarse de los procesos en paralelo. El NIST afirm tambin que en trminos de seguridad los cinco finalistas eran adecuados, pero Rijndael era el que mejor combinaba el resto de caractersticas deseables. 4.8.1 Especificaciones del algoritmo

El algoritmo Rijndael es un cifrador de bloques, de carcter iterativo, es decir, realiza varias vueltas de cifrado sobre el mismo conjunto de bits. Adems, permite especificar un tamao de llave y de bloque de 128, 192 156 bits, y lo que es ms importante, combinarlos entre s de diferentes maneras, lo que da como resultado nueve asociaciones entre el tamao de la llave y del bloque. 4.8.1.1 Los Estados, las llaves y el nmero de vueltas

Las diferentes transformaciones de los resultados intermedios son llamadas Estados. Cada uno de los estados intermedios del algoritmo puede ser representado como una matriz de bytes. Esta matriz tiene 4 filas y el nmero de columnas, denotado por Nb, es variable, siendo igual al tamao del bloque dividido por 32, es decir, para un tamao de bloque de 128 bits le corresponden 4 columnas (128/32), para un tamao de 192 bits le corresponden 6 columnas (192/32) y para 256 bits le corresponden 8 columnas. Las llaves de los estados intermedios tambin pueden ser representados de manera similar mediante una matriz de cuatro filas y un nmero variable de columnas, que se denota por Nk y que se obtiene al dividir el tamao de la llave por 32, esto es, 4, 6, 7 u 8 columnas para tamaos de llave de 128, 192 y 256 bits respectivamente.

86

a0,0 a1,0 a2,0 a3,0

a0,1 a1,1 a2,1 a3,1

a0,2 a1,2 a2,2 a3,2

a0,3 a1,3 a2,3 a3,3

k0,0 k1,0 k2,0 k3,0

k0,1 k 1,1 k2,1 k3,1

k0,2 k1,2 k2,2 k3,2

k0,3 k1,3 k2,3 k3,3

Estado intermedio con tamao de bloque de 128 bits

Representacin de una llave de 128 bits

a0,0 a1,0 a2,0 a3,0

a0,1 a1,1 a2,1 a3,1

a0,2 a1,2 a2,2 a3,2

a0,3 a1,3 a2,3 a3,3

a0,4 a1,4 a2,4 a3,4

a0,5 a1,5 a2,5 a3,5

k0,0 k1,0 k2,0 k3,0

k0,1 k1,1 k2,1 k3,1

k0,2 k1,2 k2,2 k3,2

k0,3 k1,3 k2,3 k3,3

k0,4 k1,4 k2,4 k3,4

k0,5 k1,5 k2,5 k3,5

Estado intermedio con tamao de bloque de 192 bits

Representacin de una llave de 192 bits

a0,0 a1,0 a2,0 a3,0

a0,1 a1,1 a2,1 a3,1

a0,2 a1,2 a2,2 a3,2

a0,3 a1,3 a2,3 a3,3

a0,4 a1,4 a2,4 a3,4

a0,5 a1,5 a2,5 a3,5

a0,6 a1,6 a2,6 a3,6

a0,7 a1,7 a2,7 a3,7

k0,0 k1,0 k2,0 k3,0

k0,1 k1,1 k2,1 k3,1

k0,2 k1,2 k2,2 k3,2

k0,3 k1,3 k2,3 k3,3

k0,4 k1,4 k2,4 k3,4

k0,5 k1,5 k2,5 k3,5

k0,6 k1,6 k2,6 k3,6

k0,7 k1,7 k2,7 k3,7

Estado intermedio con tamao de bloque de 256 bits

Representacin de una llave de 256bits

Tabla 4.9 Bloques y llaves de Rijndael

En determinadas ocasiones las matrices mostradas anteriormente se pueden considerar como un nico vector unidimensional de palabras de 4 bytes, donde cada palabra se corresponde con una de las columnas de la matriz. Estos vectores tendran por tanto una longitud de 4, 6 y 8 palabras segn el nmero de columnas de la matriz. La entrada y salida de datos en Rijndael se realiza mediante un vector unidimensional de bytes de 8 bits por byte. Estos bytes estn numerados con valores que parten desde el 0 hasta (4*Nb)-1, es decir, para Nb = 4 el nmero de bytes sera 16 y estaran numerados desde el 0 hasta el 15. En la tabla x se pueden apreciar las relaciones entre el tamao del bloque, el valor de Nb y el rango de ndices correspondientes del vector entrada-salida. Nmero de bits 128 192 256 Nmero de bytes 16 24 32 Nb 4 6 8 Tamao del vector de entrada 16 24 32 Rango de ndices 0..15 0..23 0..31

Tabla 4.10 Tamao de bits y el valor Nb

87

Una vez se tiene el vector de entrada completo, se debe volcar el contenido en la matriz correspondiente. El modo de realizar esta operacin es el siguiente: se leer el vector secuencialmente desde la posicin 0 y se ir rellenando la matriz por columnas. Ejemplo: Volcado de informacin para el caso de un bloque de 128 bits. El vector de entrada es de 16 bytes numerados del 0 al 15. V es el vector de entrada y sus componentes se denotan por Vj. Vo V1 V2 V3 V4 V5 Vo V1 V2 V3 V6 V7 V4 V5 V6 V7 V8 V9 V8 V9 V10 V11 V10 V11 V12 V13 V14 V15 V12 V13 V14 V15

Tabla 4.11 Volcado de informacin desde un vector de entrada a la matriz

Para volcar el contenido de la matriz en un vector de salida basta con aplicar el mismo proceso en orden inverso: se lee la matriz por columnas, empezando en la columna 0 y rellenando el vector desde la posicin 0 hasta el final. 4.8.1.2 Nmero de vueltas

El nmero de vueltas que tendr el algoritmo es un parmetro variable que depender de los valores Nb y Nk, y estos a su vez dependen del tamao del bloque y del tamao de llave respectivamente. El nmero de vueltas se denota Nr. Nr Nb = 4 Nb = 6 Nb = 8 Nb = 4 10 12 14 Nb = 6 12 12 14 Nb = 8 14 14 14

Tabla 4.12 Nmero de vueltas del algoritmo segn el valor de Nb y Nk

El nmero de vueltas del algoritmo se encuentra en proporcin al tamao del bloque y la llave. 4.8.1.3 Operaciones en cada vuelta

El algoritmo se compone de una vuelta inicial (RoundKey), y r vueltas estndar, r puede tomar el valor de 10, 12 14 dependiendo de la longitud del bloque y la llave. Las primeras r-1 vueltas son similares y consisten en cuatro transformaciones llamadas: o o o o ByteSub ShiftRow MixColumn RoundKey

La ltima vuelta carece de la operacin MixColum. 88

Todo el proceso de cifrado se muestra en el siguiente diagrama: Texto claro

Vuelta inicial RoundKey

Vuelta estndar ByteSub ShiftRow MixColumn AddRoundKey

r 1 vuelta

Vuelta final ByteSub ShiftRow AddRoundKey

Texto cifrado

Figura 4.24 Procedimiento de cifrado empleado por el algoritmo Rijndael

4.8.1.4

Transformacin BytesSub

Se utilizan cajas de sustitucin, se trata de una sustitucin a nivel de byte de caracter no lineal. Se aplica sobre todos y cada uno de los bytes de un estado de manera independiente. La sustitucin que realiza es inversible y se compone de dos pasos: 1. Se aplica la funcin inversa para la multiplicacin en GF(28)71. Cada elemento se sustituye por su valor inverso, salvo el valor 00, que se sustituye por s mismo ya que carece de inverso para la multiplicacin con coeficientes pertenecientes a GF(28).

71

Campos de Galois

89

2. 2. Se aplica la siguiente transformacin Yo 1 0 Y1 1 1 Y2 1 1 Y3 1 1 = Y4 1 1 Y5 0 1 Y6 0 0 Y7 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 . 0 0 0 1 Xo 1 X1 1 X2 0 X3 0 + X4 0 X5 1 X6 1 Y7 0

Donde cada Xj representa el bit j del valor del byte al que se le va a aplicar la transformacin y cuyo valor final se representa por Yj. Caractersticas del proceso de sustitucin 1. Inversible 2. Minimiza el total de nmeros que no sean combinaciones lineales de los bits de entrada ni sean bits de salida 3. Minimiza el mayor de los nmeros no triviales de la tabla XOR 4. Expresiones algebraicas complejas con coeficientes pertenecientes a los campos de Galois, GF(28). 5. Sencillo de describir El diseo modular del algoritmo permite la posibilidad de que si en un futuro se encontrase una caja de sustitucin ms afn a las necesidades del entorno, se podra cambiar por una nueva versin sin tener que modificar en absoluto el resto del algoritmo y de forma rpida. 4.8.1.5 La transformacin ShiftRow

Esta transformacin consiste en el desplazamiento, de forma cclica, a la izquierda de los bytes de cada una de las filas de la matriz representante de un estado. Los bytes de la fila 0 de la matriz no se desplazan. Los bytes de las filas 1, 2 y 3 se desplazan C1, C2 y C3 posiciones respectivamente a la izquierda. Estos valores de desplazamiento dependen del valor de Nb, es decir del nmero de columnas de la matriz, o lo que es lo mismo, del tamao del bloque. En la siguiente tabla se muestran dichos valores. Nb 4 6 8 C1 1 1 1 C2 2 2 3 C3 3 3 4

Tabla 4.13 Valor de los desplazamientos C1, C2 y C3 segn Nb.

Para comprender mejor el funcionamiento de esta transformacin se utilizar un ejemplo en el cual se transformar en un estado con Nb = 4. En este caso los desplazamientos sern de 1, 2 y 3 para C1, C2 y C3 respectivamente. A la fila 0 no se le aplica la transformacin, los bytes de la fila

90

1 se desplazarn 1 posicin a la izquierda, los de la fila 2 se desplazarn 2 posiciones a la izquierda y los de la fila 3 se desplazarn 3 posiciones.
a e i m b f j n c g k o d h l p a f k p b g l m c h i n D e j o

Figura 4.25 Ejemplo de desplazamiento de bytes C1, C2 y C3

La operacin inversa de esta transformacin consiste simplemente en desplazar los bytes de las filas 1, 2 y 3 un total de C1, C2 y C3 posiciones a la derecha. Caractersticas de los desplazamientos La posibilidad de elegir cualquier posible combinacin se basa en los siguientes criterios: 1. Los cuatro desplazamientos deben ser diferentes y C0 = 0 2. Resistencia frente a los ataques usando el mtodo de criptoanlisis llamado diferenciales truncados (truncated differentials72) 3. Resistencia frente al ataque Square 4. Simplicidad Para algunas combinaciones los ataques basados en truncated differentials pueden necesitar varias vueltas, aunque lo normal es que se emplee solamente una. El nmero de vueltas necesarias para una ataque Square vara mucho en funcin de la combinacin elegida, por lo que no se puede indicar un nmero concreto como valor medio de vueltas. 4.8.1.6 La transformacin MixColumn

En esta transformacin las columnas de la matriz representante del estado son consideradas como polinomios con coeficientes pertenecientes a GF(28). Estos polinomios se multiplican modulo M(x), (M(x) = X4 + 1 ), por un polinomio d(x) dado: d(x) = 03 x3 + 01x2 + 01x + 02 en hexadecimal d(x) = 11x3 + 1x2 + 1x + 10 en binario d(x) = 3x3 + 1x2 + 1x + 2 en decimal

72

Ver Anexo dedicado a Criptoanlisis.

91

Esta operacin puede ser escrita en forma de matriz, donde aj representa el byte j de la columna de la matriz estado y bj al nuevo byte tras la operacin: do d1 d2 d3 = a0 a1 a2 a3 a3 a0 a1 a2 a2 a3 a9 a1 a1 a2 . a3 a0 bo b1 b2 b3

La inversa de esta operacin consiste en multiplicar la columna transformada por el inverso del polinomio anterior d(x) para obtener la columna inicial. Se denota a(x) al inverso del polinomio d(x), entonces: a(x) = 03x3 + 01 x2 + 01x + 02 Caractersticas del proceso de mezcla de columnas Es una transformacin interna en el conjunto de las palabras de 4 bytes. Para su eleccin fueron determinantes los siguientes criterios: o o o o o o Ser inversible Linealidad Poder de difusin Rapidez en procesadores de 8 bits Simetra Sencillez de descripcin

La eleccin de la multiplicacin polinmica mdulo x4 + 1 se decidi basndose en los criterios 2, 5 y 6. Los criterios 1, 3 y 4 impusieron restricciones a los coeficientes de las operaciones que se efectan. En el caso concreto del criterio 4, ste motiv que los coeficientes tuviesen valores reducidos, tales como 00, 01, 02, 03. El valor 00 implica que no se necesita realizar ninguna operacin; con el valor 01 no se necesita realizar ninguna multiplicacin. El criterio 3 introduce restricciones mucho ms complicadas sobre los coeficientes para conseguir su propsito. 4.8.1.7 La adicin de las sub llaves - AddRoundKey

Esta operacin consiste en una operacin XOR entre los elementos de la matriz del estado y los elementos de la matriz de la sub-llave. Esta sub-llave es el resultado de aplicar el proceso llamado Key schedule. La matriz de la llave tiene el mismo nmero de columnas que la matriz de bloque (Nb). La inversa de la operacin es ella misma. Al aplicar la funcin XOR a la matriz ya transformada se obtiene de nuevo la matriz inicial.

92

a0,0 a0,1 a0,2 a0,3 a0,4 a0,5 a1,0 a1,1 a1,2 a1,3 a1,4 a1,5 a2,0 a2,1 a2,2 a2,3 a2,4 a2,5 a3,0 a3,1 a3,2 a3,3 a3,4 a3,5

k0,0 k0,1 k0,2 k0,3 k0,4 k0,5 k1,0 k1,1 k1,2 k1,3 k1,4 k1,5 k2,0 k2,1 k2,2 k2,3 k2,4 k2,5 k3,0 k3,1 k3,2 k3,3 k3,4 k3,5 =

b0,0 b0,1 b0,2 b0,3 b0,4 b0,5 b1,0 b1,1 b1,2 b1,3 b1,4 b1,5 b2,0 b2,1 b2,2 b2,3 b2,4 b2,5 b3,0 b3,1 b3,2 b3,3 b3,4 b3,5

Tabla 4.14 Adicin de la llave mediante la funcin XOR

4.8.1.8

Gestin de llaves

Mediante una funcin llamada Key schedule se obtienen las diferentes sub-llaves a partir de la llave principal de cifrado. Se compone a su vez de dos funciones, la expansin de llave, KeyExpansion y la seleccin de llave en cada vuelta, Round KeySelection. La funcin Key schedule se basa en lo siguiente: El nmero total de sub-llaves es igual al tamao del bloque multiplicado por el nmero de vueltas ms 1. Nmero de sub-llaves = Nb * (Nr + 1) Tamao de Tamao de Nmero de Nmero de bloque la llave vueltas sub-llaves 4 10 1408 128 6 8 4 6 8 4 6 8 12 14 12 12 14 14 14 14 1664 1920 2496 2496 2880 3840 3840 3840

192

256

Tabla 4.15 Nmero de sub-llaves generadas

o o

La llave del cifrado se expande y pasa a denominarse Llave Expandida Las sub-llaves provienen de la Llave Expandida. Para obtenerlas se divide la llave expandida en fragmentos de tamao Nb. El primero de estos fragmentos ser la primera sub-llave; el segundo fragmento ser la segunda sub-llave y as sucesivamente. Expansin de la llave

4.8.1.9

La llave expandida proviene de la llave principal de cifrado. No existe la posibilidad de especificar una llave expandida concreta. Es un vector de palabras de 4 bytes y se denota por W[Nb*(Nr + 1)]. Esta llave expandida se puede crear en memoria usando un buffer para Nk palabras y as ahorrar trabajo de procesamiento en implementaciones donde la memoria RAM sea

93

escasa. Las primeras Nk palabras contienen la llave de cifrado principal. Las restantes palabras son definidas recursivamente en trminos de palabras con ndices cada vez ms pequeos. La funcin KeyExpansion depende del valor de Nk (nmero de columnas de la matriz representante de la llave o, lo que es lo mismo, nmero de palabras de 4 bytes que contienen la llave). Caractersticas de la funcin de expansin de la llave La funcin KeyExpansion especifica la obtencin de las sub-llaves en funcin de la llave principal de cifrado. Su objetivo es proveer al algoritmo de resistencia frente a los siguientes tipos de ataques: o o Ataques donde parte de la llave principal de cifrado es conocida por el criptoanalista. Ataques donde la llave principal de cifrado sea conocida o pueda ser seleccionada.

La funcin fue seleccionada bajo los siguientes criterios: o o o o o o o Puede emplear una transformacin inversible. Velocidad en gran nmero de procesadores. Uso de constantes en las vueltas para eliminar simetras. Difusin de las diferencias de la llave de cifrado en las sub-llaves. El conocimiento de parte de la llave principal de cifrado o de bits de alguna sub-llave no permite obtener el resto de los bits que componen las sub-llaves La nolinealidad de la funcin, impide determinar la totalidad de las diferencias de las sub-llaves partiendo nicamente de las diferencias de la llave principal de cifrado Sencilla de describir

4.8.1.10 Seleccin de llave en cada vuelta - Round Key Selection Las sub-llaves proceden de la llave expandida. Para seleccionar la sub-llave i se seleccionan las palabras de la llave expandida comprendidas entre W[Nb*i] y W[Nb*(i+1)]. W0 W1 W2 W3 W4 W5 W6 W7 W8 W9 W10 W11 W12 W13 W14 ......

Sub-llave 0

Sub-llave 1

....................................

Tabla 4.16 Llave expandida y seleccin de sub-llaves para Nk = 4 y Nb = 6

4.8.2

Aspectos de implementacin

El algoritmo Rijndael es puede ser implementado de una manera eficiente en variedad de procesadores y hardware, por ejemplo, procesadores de 8 bits, tpicos en las tarjetas inteligentes, y en los procesadores de 32 bits disponibles en la mayora de las computadoras personales. 4.8.2.1 Procesadores de 8 bits

En este tipo de procesadores se puede programar con el algoritmo Rijndael simplemente implementando las correspondientes transformaciones. Para la implementacin de la funcin SubByte se necesita una tabla de 256 bytes. 94

Las operaciones SubByte, RoundShift y Round key addition se pueden combinar y ejecutar secuencialmente en los bytes de un estado concreto. La operacin MixColumn requiere una matriz multiplicativa con coeficientes pertenecientes a GF(28). La implementacin del algoritmo para que sea ejecutado en un solo ciclo requiere una gran cantidad de memoria RAM. Adems, la mayora de las aplicaciones, tales como una tarjeta de crdito o cajeros electrnicos, trabajan con un nmero reducido de bloques de datos, por lo que el aumento de la velocidad obtenido al implementar funciones en paralelo apenas compensa el gasto adicional de memoria. Las sub-llaves se actualizan en cada vuelta. Todas las operaciones relacionadas con esta actualizacin de llave se pueden implementar a nivel de byte. 4.8.2.2 Procesadores de 32 bits

Los diferentes pasos que componen la transformacin de cada vuelta se puede combinar mediante tablas, lo que permite unas implementaciones muy rpidas en procesadores con longitudes de palabra de 32 o ms bits. 4.8.2.3 Paralelismo

Las cuatro transformaciones que se efectan en cada una de las vueltas actan en paralelo sobre los bytes, las columnas, las filas o un estado concreto. En la implementacin con tablas, la mayora de las operaciones XOR se pueden llevar a cabo en paralelo. En aplicaciones donde el factor tiempo sea crtico, la llave expandida se calcula una nica vez para un gran nmero de cifrados. En aplicaciones donde la llave de cifrado cambie con bastante frecuencia, la obtencin de la llave expandida y la ejecucin de las vueltas del algoritmo se pueden realizar en paralelo. 4.8.2.4 Adaptacin de hardware

El algoritmo Rijndael puede ser implementado en hardware diseado especficamente para tal fin. An as, la implementacin del algoritmo en software usando procesadores comerciales es muy rpida y el espacio ocupado en disco es pequeo, por lo que su implementacin en hardware se reducira a las siguientes caractersticas: o Procesadores extremadamente rpidos sin restricciones de espacio. En este caso las tablas se pueden implementar en hardware y las operaciones XOR se pueden realizar en paralelo. Co-procesadores compactos en las tarjetas inteligentes para acelerar su ejecucin. Proceso de descifrado

4.8.3

En la implementacin mediante tablas de valores es esencial que el nico paso no lineal (operacin SubByte) sea la primera transformacin en cada vuelta y que los bytes de las filas sean permutados (ShiftRow) antes de aplicar la funcin MixColumn.

95

En la inversa de una vuelta concreta, el orden de las transformaciones es el contrario al orden de las operaciones establecido, por tanto, el paso no lineal ser el ltimo del proceso y los bytes de las filas sern permutados despus de aplicar la inversa de la funcin MixColumn. La inversa de una vuelta no se puede implementar con las tablas de valores del proceso de cifrado. Esto es una caracterstica propia del diseo del algoritmo Rijndael. La estructura interna del algoritmo es tal que la secuencia de transformaciones de la inversa es igual al proceso de cifrado en s, con las transformaciones reemplazadas por sus propias inversas y un cambio en la generacin de llaves. El orden de las operaciones ShiftRow y ByteSub es diferente. Esto es debido a que la operacin ShiftRow afecta a la posicin de los bytes, pero no modifica su valor. En el caso de ByteSub, el campo de trabajo es el valor de los bytes, independientemente de cul se su posicin en la matriz estado. 4.8.4 Implementacin del descifrador Rijndael

La implementacin del descifrador Rijndael es similar a la implementacin del cifrador, ya que su estructura es tambin similar. Sin embargo, se aprecia una degradacin en la ejecucin del descifrador en procesadores de 8 bits. Esto se debe a que la ejecucin del descifrador se considera menos importante. En muchos cifradores de bloque la operacin de descifrado ni siquiera se implementa. En procesadores de 32 bits la eficiencia del proceso de descifrado es la misma y no se produce ningn retardo con respecto al de cifrado. 4.8.4.1 Adaptabilidad al hardware

El cifrador y el descifrador del Rijndael se tienen que implementar en distinto hardware debido al empleo de las transformaciones en distinto orden. Se pueden compartir algunos circuitos concretos para algunas operaciones comunes a ambos procesos, pero no se puede implementar la totalidad de los dos algoritmos compartiendo todo el hardware. 4.8.5 Incremento del nmero de vueltas

El nmero de vueltas se ha determinado en funcin del mximo nmero de vueltas para el cual se pueden prevenir los ataques shortcut73 con un considerable margen de seguridad. Un ataque shortcut es ms eficiente que uno por fuerza bruta. Para ejecuciones del algoritmo Rijndael empleando una longitud de bloque y de llave de 128 bits, no ha sido encontrado ningn ataque shortcut para implementaciones con ms de 6 vueltas. Para conseguir un margen de seguridad se han aadido cuatro vueltas ms, por lo que para llaves y bloques de 128 bits se emplean 10 vueltas. Los motivos de esta decisin han sido los siguientes: o Dos vueltas del algoritmo Rijndael proporcionan una alta difusin en el sentido de que cada bit de un estado depende de los valores de todos los bits de las dos vueltas anteriores, o lo que es lo mismo, un cambio en el valor de un bit de un estado concreto afecta a todos los bits de los estados en las dos siguientes vueltas. La alta difusin de cada

73

Ver Anexo I

96

una de las vueltas de Rijndael depende de la estructura uniforme que opera en todos los bits de un estado. o Generalmente los criptoanlisis lineales, los criptoanlisis diferenciales y los ataques con truncated differencials (truncales diferenciales) provocan una propagacin a travs de n vueltas con el fin de atacar n + 1 n + 2 vueltas. La adicin de cuatro vueltas adicionales dobla el nmero de vueltas a travs del cual se puede dar una propagacin.

Para versiones del algoritmo con llaves de mayor longitud, el nmero de vueltas aumenta en una unidad por cada 32 bits adicionales en la llave de cifrado principal. Esto se debe a las siguientes razones: o Uno de los objetivos principales es la erradicacin de los ataques shortcut, es decir, ataques que son ms eficientes que una bsqueda exhaustiva de la llave de cifrado. Cuanto mayor sea la llave, un ataque shortcut tendr ms carga de trabajo, por lo que se vuelve ms ineficiente. Los ataques empleando el conocimiento de parte de la llave principal o los ataques empleando llaves relacionadas se basan en el conocimiento de los bits de la llave principal de cifrado o en la habilidad para probar reiteradamente distintas llaves de cifrado. Si la llave de cifrado aumenta de tamao, el rango de posibles llaves tambin aumenta, dificultando as el trabajo del criptoanalista.

Se ha encontrado que dichas extensiones de los ataques en una simple vuelta estn muy lejos de provocar cualquier fallo en la seguridad. 4.8.6 Llaves dbiles

Las llamadas llaves dbiles son aquellas que resultan de un cifrador de bloque diseado con debilidades detectables. El caso ms conocido de llaves dbiles se da en el algoritmo IDEA. Estas debilidades son caractersticas de cifradores en los cuales las operaciones nolineales dependen del valor actual de la llave. Este no es el caso de Rijndael, donde las llaves se aplican usando funciones XOR y todos los elementos no-lineales se encuentran agrupados en las cajas de sustitucin. En Rijndael no existen restricciones a la hora de seleccionar una llave. 4.8.7 Fortaleza estimada

El ataque ms eficiente contra la seguridad de Rijndael es un ataque por fuerza bruta. Emplear pares de texto clarotexto cifrado conocidos para obtener informacin sobre otros pares no es ms eficiente que el proceso de determinar la llave mediante una bsqueda exhaustiva, para lo cual el trabajo necesario depende de la longitud de la llave principal de cifrado de tal forma que: Longitud de la llave (bytes) 16 24 32 Aplicaciones de Rijndael necesarias 2127 2191 2255

Tabla 4.17 Fortaleza estimada de Rijndael

97

4.8.8

Metas de seguridad

Un criptoanalista se considera efectivo si es capaz de demostrar que una de las metas de seguridad descritas a continuacin no es efectiva: 4.8.8.1 Seguridad K

Definicin: Un cifrador de bloques es k-seguro si todas las posibles estrategias contra l tienen el mismo factor esperado de trabajo y requisitos de almacenamiento, como para la mayora de los posibles cifradores de bloque con las mismas dimensiones. La seguridad K es una nocin de seguridad muy fiable. Se puede apreciar fcilmente que si una de las siguientes debilidades es apreciable en un cifrador, este no es k-seguro: Existencia de ataques de descifrado de llave ms rpidos que un ataque por fuerza bruta. o o o Ciertas propiedades de simetra en el desarrollo Existencia de llaves dbiles (como en IDEA) Ataques mediante llaves relacionadas

La seguridad K es esencialmente una medida relativa. Es posible disear un cifrador de bloque con un tamao de bloque y de llave de 5 bits. La carencia de seguridad ofrecida por un esquema es debido a sus pequeas dimensiones, no al hecho de que el esquema falle. Claramente, el aumento de la longitud de la llave implica el aumento en los requisitos de seguridad. 4.8.8.2 Cifradores de bloque hermticos

Es posible imaginar cifradores que tengan ciertas debilidades y sigan siendo k-seguros. Un cifrador de bloque es hermtico si no presenta debilidades que no se hallen presentes en la mayora de los cifradores de bloque con las mismas longitudes de bloque y de llave. Es decir que un cifrador es hermtico si su estructura interna no puede ser explotada en ninguna operacin. 4.8.8.3 Metas

Para cualquier longitud de bloque o de llave, las metas de seguridad de Rijndael son: o o Seguridad K Hermetismo

Si Rijndael cumple sus objetivos, la fortaleza contra cualquier ataque, ya sea conocido o desconocido, es tan buena como la de cualquier otro cifrador de bloque con las dimensiones dadas.

98

4.8.9 Ventajas

Ventajas y limitaciones de Rijndael

Rijndael se puede implementar para ser ejecutado a velocidades inusualmente elevadas para algoritmos de cifrado de bloque. Rijndael se puede implementar en tarjetas inteligentes, empleando un mnimo de memoria RAM y usando un nmero reducido de vueltas. Las operaciones de cada vuelta se pueden paralelizar, lo cual supone un importante avance con vistas a futuros procesadores y hardware especfico. Como el algoritmo no hace uso de operaciones aritmticas, no existe ningn prejuicio con respecto a ningn tipo de arquitectura de procesadores. Simplicidad del diseo El algoritmo es autnomo o independiente. No hace uso de ningn otro componente criptogrfico, cajas de sustitucin procedentes de otros algoritmos o tablas aleatorias. El algoritmo no basa su seguridad o parte de ella en operaciones aritmticas ininteligibles o secretas. El diseo hermtico del algoritmo no permite la existencia de puertas traseras ocultas (backdoors). Longitud variable del bloque Las longitudes de bloque de 192 y 256 bits permiten la construccin de una funcin resumen usando Rijndael como funcin de compresin y con la caracterstica de que el nmero de colisiones provocadas sera mnimo. Hoy en da, la longitud de bloque de 128 bits no se considera suficiente para dicho fin. Extensiones El diseo permite la especificacin de variaciones con la longitud del bloque y de la llave en el rango comprendido entre los 128 y 256 bits, tomados en intervalos de 32 bits. Aunque el nmero de vueltas del Rijndael esta fijado en las especificaciones del algoritmo, se puede modificar este parmetro con el fin de solucionar posibles problemas de seguridad o adaptarse a distintas velocidades de ejecucin. Limitaciones Las limitaciones del algoritmo estn relacionadas con su inversa: El descifrador Rijndael es ms difcil de implementar en tarjetas inteligentes que el propio algoritmo debido a que requiere una mayor cantidad de cdigo y un nmero superior de vueltas. A pesar de ello, comparado con otros cifradores, la funcin inversa es realmente rpida. 99

En implementaciones de software, el algoritmo y su inversa emplean diferente cdigo y diferentes tablas. En implementaciones de hardware, el algoritmo solamente puede aprovechar una parte de la circuitera implementada para el algoritmo. 4.9 Comparacin entre el DES y el Rijndael

El algoritmo DES es el resultado de una modificacin del algoritmo Lucifer, presentado al concurso convocado por el NBS en 1974. El algoritmo Lucifer contaba con una llave de 128 bits, un valor realmente seguro para la fecha que, por motivos que jams han sido publicados oficialmente, el NBS decidi que el nuevo estndar sera una versin del Lucifer con una llave reducida a slo 64 bits. Se dice que el motivo de tal reduccin fue que, con las computadoras ms potentes de aquellos aos, solamente se poda llegar a romper el secreto de un criptograma con una llave de, como mucho, 64 bits. Adems, observando el desarrollo del algoritmo, se puede aprecia que, de esos 64 bits, 8 de ellos son de paridad, y que, tras pasar por las cajas de sustitucin, el algoritmo trabaja internamente con una llave de nicamente 48 bits. Tras veinte aos de vida, el tamao de la llave de DES, que durante todo este tiempo ha garantizado el secreto de la informacin, ha sido relegado a un segundo plano por el avance imparable de la potencia de las computadoras. Los 64 bits de longitud de la llave se han quedado obsoletos frente a los nuevos algoritmos de cifrado, que emplean llaves de mayor tamao. Se debe tener en cuenta que el DES lleva ya ms de veinte aos en servicio, y que la escasa longitud de su llave, comparndola con la de otros cifradores actuales, se debe al tiempo transcurrido desde que se dise y no a un diseo deficiente. 4.9.1 mbitos de uso

Ambos algoritmos fueron diseados con el fin de proporcionar una plataforma de cifrado potente y til en multitud de tareas distintas, que abarcan desde el cifrado de mensajes en una red de comunicaciones hasta la codificacin de seales va satlite. El abanico de aplicaciones posibles es de tal tamao que se podran incluir en cualquier tipo de proceso. Aunque obviamente su funcin principal es cifrar informacin, preservando el secreto de la misma, actualmente estos algoritmos se utilizan con otros fines, muy distantes del cifrado pero para los cuales se ha visto que son algoritmos apropiados. Uno de estos fines es el uso como funcin resumen. En este contexto, se hace uso de la propiedad de los algoritmos de cifrado que nos dice que el uso de llaves de cifrado similares no implica cifrados similares, es decir, la posibilidad de que al aplicar distintas llaves a distintos datos proporcione un cifrado idntico es nfima. Otro uso bastante corriente de estos algoritmos es el uso de los mismos como generadores de nmeros pseudoaleatorios. Gracias a la facilidad que aportan ambos algoritmos para su implementacin tanto en hardware como en software y gracias a la multitud de entornos sobre los cuales se pueden ejecutar, gran variedad y tipo de procesadores, tarjetas inteligentes, sistemas operativos, etc., estos dos 100

algoritmos han pasado a formar parte de nuestra vida cotidiana y forman un eslabn esencial de la cadena de informacin en la que se ha convertido la sociedad actual. Por ejemplo, estos algoritmos se emplean en la codificacin de los canales de televisin por cable, en las llamadas telefnicas, en las sucursales bancarias e incluso en las tarjetas de crdito. Ambos algoritmos pueden operar en cuatro modos diferentes. Estos modos fueron definidos para el algoritmo DES por el propio NIST, mientras que en el caso de Rijndael, aunque la normativa del concurso convocado por el NIST no especificaba concretamente estos cuatro modos de uso, dejaba claro que el ganador pasara a ser el nuevo estndar de cifrado, por lo que debera suplir al DES en todos sus mbitos de uso. Estos cuatro modos de operacin son los siguientes: o o o o Electronic CodeBook (ECB) Cipher Block Chaining (CBC) Cipher FeedBack (CFB) OutPut FeedBack (OFB)

El modo ECB hace referencia al empleo del algoritmo directamente como mtodo de cifrado y descifrado de datos. El modo CBC es una variante del algoritmo que trabaja con varios bloques de datos simultneamente. El modo CFB emplea un texto cifrado anteriormente como entrada del algoritmo con el fin de generar una salida pseudoaleatoria que a su vez se combina con el texto en claro para obtener el criptograma, consiguiendo as una modificacin del resultado final. El modo OFB se comporta de manera idntica al modo CFB, a excepcin de que en este modo se emplea la propia salida del algoritmo como entrada del mismo, mientras que en el caso anterior se empleaba un texto cifrado previamente. Ambos algoritmos poseen una gran adaptabilidad a cualquier software y hardware, sin embargo, se puede observar que el descifrador del algoritmo DES es ms fcil de implementar y computacionalmente ms eficiente que el descifrador de Rijndael. La diferencia radica en que para descifrar un texto cifrado por el DES nicamente se aplican las sub-llaves de la red de Feistel al revs, es decir, en la vuelta 1 se emplear la sub-llave 16, en la vuelta 2 se emplear la sub-llave 15 y as sucesivamente, de forma que, no se necesita variar la estructura interna del algoritmo, lo cual tambin favorece su implementacin en hardware. En cuanto a Rijndael, el descifrador necesita un mayor nmero de ciclos de procesamiento que el cifrador, por lo que es menos eficiente. Adems, aunque la estructura interna de cada vuelta no ha variado en cuanto a contenido, s lo ha hecho en cuanto al orden de las funciones que la componen, por lo que esto perjudica la implementacin en hardware, impidiendo la reutilizacin total del hardware en el que se ha implementado. 4.9.2 Llaves de cifrado

Rijndael cifra con tres tamaos de llave distintas cuyos valores son 128, 256 y 512 bits frente a la llave fija de 64 bits empleada por el DES. Adems, esta llave de cifrado de 64 bits, no es usada en su totalidad. De los 64 bits de la llave, ocho de ellos son los llamados bits de paridad, que no intervienen en el proceso de cifrado sino que fueron introducidos con los siguientes fines: 101

o o

Deteccin de errores Obtener un mismo valor de tamao tanto para la llave como para el bloque de cifrado

La posibilidad ofrecida por Rijndael de variar el tamao de la llave permite al usuario del sistema, ya sea un usuario final propiamente dicho o un administrador de un sistema informtico, modificar las propiedades del algoritmo consiguiendo una adaptacin ptima a sus necesidades, lo que lo hace ideal para multitud de funciones. En la ejecucin de cualquier algoritmo de cifrado, se identifican dos parmetros, directamente apreciables por el usuario, pero a su vez mutuamente excluyentes: o o Velocidad Fortaleza

Las dos cualidades son exigibles a un buen algoritmo de cifrado, aunque por desgracia el aumento de una de ellas implica la disminucin de la otra. Cuanto mayor sea el tamao de la llave principal de cifrado, ms difcil ser de romper el secreto que el cifrado guarda, aunque, esto implica que el proceso de cifrado de la informacin precisar de un mayor nmero de ciclos de procesamiento, ya que el nmero de bits y el nmero de las operaciones que se deben procesar ser superior. El usuario del algoritmo debe elegir cual de los dos parmetros es prioritario para el uso que est haciendo del algoritmo. Se debe emplear el mximo tamao posible de llave en procesos en los cuales el tiempo no es un factor a tener en cuenta y se da prioridad a la seguridad, estos suelen ser procesos donde se ejecuta pocas veces el algoritmo y casi siempre empleando la misma llave de cifrado. El reto al que se enfrenta un criptoanalista a la hora de realizar un ataque contra este tipo de procesos es que la longitud de la llave impide ataques por fuerza bruta o, sea cual sea la estrategia de ataque empleada, necesitar muchos ciclos de procesamiento, o lo que es lo mismo, tiempo. Frente a este tipo de procesos lentos, existen tambin procesos en los que un tiempo de cifrado reducido es indispensable. Suelen ser procesos en los que se cifran informaciones de pequeo tamao, pero que se estn produciendo constantemente y cada uno con una llave de cifrado distinta. Un ejemplo de esto sera el proceso de cifrado que sufren los paquetes de datos dentro de una red de computadoras entre el servidor y los distintos clientes. En este tipo de procesos, el tamao de los mensajes es mnimo y la cantidad de mensajes a cifrar es elevada, por lo que el proceso de cifrado debe ser lo ms rpido posible para evitar introducir retardos en la red, por tanto una llave relativamente pequea es suficiente para garantizar la seguridad, ya que un criptoanalista se encontrar con que una vez que haya conseguido descifrar la llave del mensaje (si lo consigue, ya que es bastante improbable y adems la dificultad que supone conseguir ese mensaje cifrado de la red y el tiempo empleado en ello), el receptor ya habr recibido el mensaje. Adems, cada uno de estos mensajes se cifra con una llave distinta, por lo que para descifrar el siguiente mensaje, se debe volver a empezar el proceso desde el principio, ya que todo el trabajo realizado anteriormente para descifrar la llave, no ser reutilizable. En este sentido, Rijndael permite adaptar la velocidad de ejecucin del algoritmo a necesidades especficas, mejorando la velocidad mediante el uso de una llave de 128 bits, seleccionando una fortaleza extrema mediante la llave de 256 bits o empleando un valor intermedio de 192 bits. Cuando se dise el DES se buscaba un tamao de llave general que permitiese que el algoritmo se pudiera emplear para multitud de funciones, pero en este sentido no se tuvieron en cuenta las prestaciones especficas para los usos concretos. Se dise para conseguir unas buenas prestaciones y una buena relacin velocidadseguridad bajo cualquier tipo de trabajo, pero no se 102

tuvo en cuenta el uso para casos extremos, donde la posibilidad de variar el tamao de la llave puede introducir importantes mejoras en la calidad final del cifrado o en el funcionamiento, por ejemplo, en una red de computadoras con un elevado transito de mensajes. Los creadores de Rijndael ofrecen un punto de vista en el que sustituyen el uso de una sub-llave especfica de cada vuelta, por la aplicacin de 4 sub-llaves de Nb bytes en cada vuelta, una para cada fila de la matriz de datos. En la siguiente vuelta se seleccionan las siguientes 4 sub-llaves. As, en cada vuelta se rellena una matriz que ser la sub-llave de esa vuelta, que tendr igual tamao que el bloque de datos. Esto es equivalente a seleccionar una nica llave de 4 * Nb bytes. En cuanto a la generacin de sub-llaves, se encuentran similitudes entre Rijndael y DES, ya que ambos algoritmos se engloban dentro de la categora de cifradores producto. Esto es, generan las sub-llaves a partir de una nica llave principal mediante una serie de funciones concretas. Para suplir el pequeo tamao de llave del DES y su debilidad frente a la potencia computacional demostrada por las mquinas actuales, se cre un nuevo estndar de cifrado llamado Triple DES, basado en la aplicacin reiterada del DES, consiguiendo as una llave de cifrado de 168 bits. Este algoritmo soluciona el problema del tamao de la llave de su predecesor, pero debido a que se basa simplemente en aplicar reiteradamente el DES y no en un nuevo diseo, hereda todos los problemas de dicho algoritmo acerca de la llave y su adaptabilidad al mbito de uso, mencionados anteriormente. Adems, el valor de llave de TDES garantiza la confidencialidad de la informacin frente a la potencia de las computadoras actuales, aunque esa llave de 168 bits se quedar obsoleta en un breve periodo de tiempo. 4.9.3 Tamao de bloque de datos

En cuanto al tamao de bloque empleado en el proceso de cifrado o descifrado el DES utiliza un bloque de datos con un tamao de 64 bits, frente a Rijndael, que se puede ejecutar sobre tres tamaos de bloque diferentes; 128, 192 y 256 bits. Es decir que Rijndael trabaja con bloques de mayor tamao que DES y por tanto se incrementa la dispersin de la informacin, ya que cuanto mayor sea el tamao de bloque, mayor ser la dispersin y la dificultad para romper el secreto. El hecho de que Rijndael pueda trabajar con tres tamaos distintos de bloque, aporta las siguientes ventajas: 4.9.4 Aumento en la seguridad

Un criptoanalista tendr que enfrentarse, adems del problema de que el mayor tamao de bloque aumenta la difusin de la informacin, al problema que le supone el hecho de hallar cul de los tres tamaos de bloque posible ha sido empleado en el proceso de cifrado. Rijndael puede combinar cualquiera de sus tres posibles tamaos de llave con cualquiera de los tres tamaos de bloque, es decir que existen nueve posibilidades distintas de combinacin llavebloque. Esto provoca que un ataque tenga que, para hallar la llave, trabajar con los tres tamaos posibles de bloque, por lo que el trabajo que esto conlleva provoca un incremento en el tiempo empleado para romper el secreto de la informacin, por lo que, al aumentar el tiempo necesario para descifrarlo, se aumenta la propia seguridad de la informacin. En DES, al poseer nicamente un tamao de bloque posible, se elimina esta variable de la ecuacin, por tanto el tiempo necesario para romper el secreto ser menor, ya que solamente posee una combinacin llavebloque posible y para descubrir la llave secreta no se tendr que tomar el factor bloque en cuenta, ya que es una constante de 64 bits.

103

4.9.4.1

Variacin de la velocidad

El usuario del cifrador Rijndael puede seleccionar cualquiera de los tres tamaos de bloque (128, 192 y 256 bits) para cifrar sus datos. Cuanto mayor sea este tamao, mayor ser la difusin de la informacin. Como resultado, se incrementa la seguridad y la velocidad de ejecucin del algoritmo ya que la cantidad de informacin procesada de una sola vez es mayor, por lo que se pierde menos tiempo en procesos de entradasalida de datos. La posibilidad de tener tres tamaos de bloque de datos diferentes permite al usuario una mejor adaptacin del proceso de cifrado al medio en el que se ejecute el algoritmo, seleccionando un tamao de bloque pequeo para el caso en el que la capacidad computacional sea menor, y un tamao de bloque grande para casos en los que la velocidad de ejecucin sea un factor relevante. El hecho de seleccionar el menor tamao de bloque posible en Rijndael (128 bits) no implica, en ningn caso, que el algoritmo deje de ser seguro y comprometa la informacin cifrada. Se ha demostrado que el algoritmo Rijndael con un tamao de bloque de 128 bits e incluso combinado con un tamao de llave de 128 bits, sigue siendo totalmente seguro y con un amplio margen de seguridad. 4.9.5 4.9.5.1 Estructura interna de los algoritmos Representacin de la informacin

El algoritmo DES representa la informacin mediante la numeracin ordenada de los bits que la componen, ya sea la informacin de la llave o del bloque de datos. Suele usar los nmeros naturales empleando entre ellos las operaciones de suma, multiplicacin y la operacin lgica XOR. En el algoritmo Rijndael la unidad bsica de informacin es el byte o el conjunto de bytes, aunque, obviamente, tambin se trabaja a nivel de bit. Para la representacin de bytes o de bits se ha elegido la representacin mediante polinomios con coeficientes pertenecientes a GF(28) debido a las ventajas que el uso de polinomios supone. 4.9.5.2 Permutaciones empleadas

Una herramienta esencial en el cifrado es la permutacin. Ambos algoritmos, al igual que la mayora de los algoritmos de cifrado existentes, hacen uso de este recurso, pero de distinta forma. El algoritmo DES aplica unas permutaciones tanto a la llave de cifrado como al bloque de datos, efectuando esta operacin a nivel de bit. Estas permutaciones vienen dadas por unas tablas, por lo que la permutacin ser la misma sea cual sea el valor de los bits que componen la llave o los que componen el bloque de datos. El algoritmo Rijndael no aplica permutaciones a ninguna llave, ya sea la llave principal o cualquiera de las sub-llaves empleadas. nicamente aplica permutaciones al bloque de datos, proceso que se lleva a cabo en la funcin ShiftRow. Adems del menor nmero de permutaciones empleado comparando Rijndael con DES, es destacable que la permutacin efectuada en ShiftRow es una permutacin a nivel de byte, mientras que las permutaciones en el algoritmo DES se efectan a nivel de bit. Otra diferencia notable es que el valor de la permutacin no es fijo como en DES sino que depende directamente del valor de Nb, es decir, depende directamente del tamao de bloque seleccionado por el usuario. Esta posibilidad no puede darse en el algoritmo DES, ya que el tamao de bloque es fijo, no variable como en Rijndael. 104

4.9.5.3

Estructura de la red

El algoritmo DES adopta una red Feistel. Una vez que se ha aplicado la permutacin inicial al bloque de datos, se inicia un proceso de cifrado con sub-llaves de una forma reiterativa. En cada una de estas vueltas, el bloque de texto se divide a la mitad. Sobre la mitad derecha se aplica una serie de operaciones mientras que la mitad izquierda no sufre ninguna variacin. Posteriormente, al final de cada vuelta, se permutan las mitades derecha e izquierda para as, en la siguiente vuelta, poder trabajar con la mitad del bloque que en esta vuelta ha quedado sin ninguna modificacin. Rijndael adopta una estructura similar, empleando un proceso repetitivo a lo largo de una serie de vueltas, formando una red, pero esta red no se puede clasificar como una red tipo Feistel. En este algoritmo la totalidad de los bits que componen el bloque de texto son susceptibles de ser empleados por las operaciones del algoritmo, es decir, las operaciones de la vuelta afectan a la totalidad de los bits del bloque de datos. Los bits que componen el bloque de datos, en una situacin de igualdad de vueltas, reciben el doble de tratamiento en una red del tipo de la empleada en el algoritmo Rijndael que en una red tipo Feistel. En el caso del algoritmo DES, el nmero de vueltas de la red Feistel es igual a 16, por lo que cada bit se trata, nicamente, 8 veces, mientras que en Rijndael un bit es tratado tantas veces como vueltas tenga la red. El nmero de vueltas de la red Feistel del algoritmo DES es inalterable, y no se puede variar el nmero de vueltas sin modificar la estructura interna del algoritmo, por lo que una modificacin de este tipo afectara su diseo y podra comprometer la fortaleza del mismo. El impedimento a la modificacin del nmero de vueltas de la red Feistel viene dado por el mtodo que emplea el DES para la generacin de sub-llaves. En este algoritmo, una vez quitados los bits de paridad y reducida la llave principal a 48 bits, sta se divide en dos mitades. Para calcular una sub-llave, se toman las dos mitades de la sub-llave anterior y se rotan uno o dos bits a la izquierda segn unos valores dados. En Rijndael el nmero de vueltas del algoritmo (Nr) depende de los valores de Nk y Nb, que a su vez dependen, respectivamente, del tamao de la llave y del tamao de bloque seleccionado por el usuario. Cuanto mayor sea el tamao de bloque y el tamao de llave, mayor ha de ser el nmero de vueltas del algoritmo. Los diseadores de este mtodo han seleccionado valores comprendidos entre 10 y 14 para el nmero de vueltas. Una de las principales crticas al diseo de Rijndael fue el relativamente reducido nmero de vueltas de su red interna, aunque este parmetro se puede variar sin dificultad. Se podra emplear un nmero mayor de vueltas, para casos de extrema necesidad de privacidad. Como se puede apreciar, Rijndael vuelve a ofrecer un entorno totalmente configurable y adaptable al mbito de uso. Los diseadores se limitan a sugerir unos valores adecuados, aunque el diseo del algoritmo permite una modificacin de estos valores, de manera inmediata, simplemente modificando el valor de una constante. Esto supondra que, una vez tomada la decisin de modificar este parmetro, el sistema podra volver a estar operativo en cuestin de minutos, el tiempo que lleve volver a compilar el algoritmo, por lo que la interrupcin del sistema sera mnima.

105

El diseo del Rijndael permite la posibilidad de su paralelizacin, aprovechando as las posibilidades de clculo de mquinas que posean varios procesadores y mejorando as el tiempo de cifrado y descifrado del algoritmo y facilitando las implementaciones en hardware especfico. Frente a esto se encuentra la linealidad de cada una de las vueltas de la red Feistel del algoritmo DES, cuyo diseo no introdujo componentes para una ejecucin paralela, aunque se debe mencionar tambin que las vueltas de la red Feistel son mucho menos complejas que las vueltas de la red propuesta por el algoritmo Rijndael, ya que el nmero de operaciones de las vueltas de Rijndael es mayor, al igual que el nmero de bits a los que estas operaciones afectan. 4.10 Resistencia frente a los principales ataques 4.10.1.1 Criptoanlisis diferencial El criptoanlisis diferencial se ve favorecido por la estructura de la red Feistel del DES, ya que la mitad izquierda del bloque de texto a la entrada de una vuelta determinada coincide con el bloque derecho a la entrada de la vuelta anterior por lo que los patrones de diferencias slo afectan a parte de las ocho cajas de sustitucin del algoritmo, por lo que es susceptible de que un ataque mediante este mtodo tenga xito en un tiempo razonable. El diseo del algoritmo DES no estaba preparado para soportar este tipo de ataques que fueron desarrollados por Eli Biham y Adi Shamir en 1991, casi quince aos despus del desarrollo de DES. Eli Biham y Adi Shamir demostraron que dado un sistema de cifrado DES con la llave asignada, se poda llegar a deducir la llave principal de cifrado mediante unas reducciones estadsticas basadas en los resultados de hacer pasar un total de 247 mensajes concretos a travs de las cajas de sustitucin del algoritmo. A pesar de que este mtodo de ataque es capaz de comprometer la seguridad del algoritmo DES, no logra romperlo con la facilidad que se supone debera un algoritmo diseado con anterioridad a la creacin del ataque, es ms, muchos de los algoritmos modernos de cifrado son menos resistentes que el DES ante dicho ataque. Este hecho, junto a que los motivos que llevaron a la eleccin de las cajas de sustitucin del DES han sido declarados como secreto nacional por las autoridades norteamericanas, ha llevado a creer que durante el desarrollo de DES se haba previsto un ataque de este tipo, aunque no se haba llegado a concretar. Es importante recalcar la ventaja de la juventud del algoritmo Rijndael, por lo que sus diseadores ya han previsto la fortaleza del algoritmo frente a este ataque. 4.10.1.2 Criptoanlisis lineal En general, un ataque por criptoanlisis lineal contra el algoritmo DES o algn otro mtodo de cifrado basado en l, como puede ser el TDES, se aprovechara de que la mitad izquierda de los bits de salida de una vuelta son los mismos que la mitad derecha de los bits de entrada en esa vuelta. En el caso del algoritmo Rijndael, se ha probado que este tipo de ataque no es efectivo siempre y cuando no se implemente una versin del algoritmo con menos de cuatro vueltas en la red interna.

106

4.10.1.3 Ataques por anlisis temporal (Timing attacks) Este ataque fue diseado y desarrollado por Paul Kocher. En Rijndael, el uso de polinomios con coeficientes pertenecientes a GF(28) favorece la fortaleza del algoritmo frente a ataques por anlisis temporal. El xito de un ataque por anlisis temporal reside en las multiplicaciones matemticas. En Rijndael slo se lleva a cabo una multiplicacin matemtica en cada una de las vueltas, ya que el resto son operaciones lgicas. Esta operacin se lleva a cabo en la funcin MixColumn. Este podra ser el nico punto dbil frente a ataques por anlisis temporal, evitndolo por medio de coeficientes pertenecientes a GF(28). El algoritmo DES tambin es resistente frente a los ataques por anlisis temporal aunque, la diferencia de Rijndael, su resistencia no se basa en el modelo de representacin de coeficientes. El DES no utiliza multiplicaciones matemticas. Los dos algoritmos proporcionan una plataforma de cifrado robusta frente a ataques por anlisis temporal, aunque, mientras Rijndael basa su fortaleza en la calidad del diseo interno, DES basa la suya en las limitaciones a la hora de implementar funciones matemticas. 4.10.1.4 Ataque mediante la existencia de llaves dbiles En la inmensa mayora de los casos, los conjuntos M (Mensaje de texto claro) y C (Mensaje cifrado) deben ser iguales. Esto quiere decir que tanto los textos en claro como los textos cifrados se representan sobre el mismo alfabeto. Se puede dar el caso de que ciertas llaves concretas generen textos cifrados de poca calidad. Una posibilidad bastante comn en ciertos algoritmos es que algunas llaves tengan una propiedad que hace que el texto cifrado recupere el texto en claro original. Estas circunstancias podran llegar a simplificar enormemente un intento de vulnerar el sistema, por lo que habra que evitarlas a toda costa. La existencia de llaves con estas caractersticas, depende en gran medida de las peculiaridades de cada algoritmo en concreto, y en muchos casos tambin de los parmetros escogidos a la hora de aplicarlo. Las llaves que no cifran correctamente los mensajes son llaves dbiles. Normalmente en un buen algoritmo de cifrado la cantidad de llaves dbiles es nula o muy pequea en comparacin con el nmero total de llaves posibles. El algoritmo DES presenta algunas llaves dbiles y llaves semi-dbiles. En cualquier caso, el nmero de llaves de este tipo es tan pequeo en comparacin con el nmero total de posibles llaves, que no debe suponer un motivo de preocupacin. 4.11 De la criptografa simtrica a la asimtrica En cualquier mtodo de cifrado simtrico o de llaves privadas, los comunicantes necesitan en algn momento intercambiar de forma segura una llave secreta. Al ser dicha llave un secreto compartido, existe la posibilidad de que alguno de los comunicantes suplante a otro si no se toman medidas de seguridad adicionales. Asimismo, puesto que el intercambio de llaves debe hacerse de forma segura, ste requiere la utilizacin de correos especiales o incluso valijas diplomticas.

107

En consecuencia, cabe hacerse la pregunta de cmo garantizar la seguridad en la transmisin o intercambio de las claves secretas. Para resolver este problema se invent la denominada criptografa asimtrica o de llave pblica descrita en detalle en el captulo siguiente. Con todo ello, la criptografa simtrica es la ms utilizada a nivel mundial para garantizar la confidencialidad de los mensajes transmitidos, debido a su seguridad y alta velocidad de cifrado. Sin embargo, este tipo de criptografa raramente se utiliza para llevar a cabo la transmisin de las llaves secretas entre los comunicantes, para lo cual se utiliza la criptografa de llave asimtrica antes referida.

108

5 Algoritmos de llave pblica


Tal como se mencion al final del captulo 2, los algoritmos de llave pblica rompieron en los aos 70 con un paradigma en el mbito de la criptografa. En este captulo se profundiza en el estudio de ese tipo de algoritmos. 5.1 El protocolo Diffie Hellman para intercambio de llaves

Si se tienen 10 amigos con los que se desea establecer comunicacin, se puede convocarlos a una reunin donde todos puedan intercambiar sus llaves secretas, pero, como todas las llaves, stas sern actualizadas peridicamente, entonces, todas las personas se tendran que reunir nuevamente cada vez que deseen intercambiar sus llaves privadas. Pero, segn el grupo de amistades crezca, el nmero de llaves tambin crecer, de manera que la situacin se volver inmanejable. Los matemticos Whitfield Diffie y Martin Hellman plantearon la pregunta, de s sera posible recolectar las llaves de una manera ms eficiente, a lo que ellos mismos propusieron la creacin de un algoritmo para el cual la llave de cifrado y descifrado sean diferentes. Se podra publicar la llave de cifrado y mantener la llave de descifrado en secreto, as, cualquier podra enviar mensajes cifrados y solo el dueo de la llave de descifrado podra descifrarlos. Esto resolvera el problema de la distribucin de muchas llaves diferentes. Aunque Diffie y Hellman hicieron el planteamiento, ellos slo podan proveer una respuesta parcial, la cual actualmente es conocida como El protocolo Diffie Hellman para intercambio de llaves (DiffieHellman Key Exchange Protocol), algunas veces abreviado como el protocolo DH. Dicho protocolo indica:Dos personas que se comunican a travs de un canal inseguro pueden

109

acordar una llave secreta, de manera que ambos reciban la misma llave sin que alguien que interfiera el canal y escuche su conversacin la pueda obtener. Mientras Hellman estaba trabajando en el algoritmo de intercambio de llaves, Diffie continuaba su investigacin. Su idea de intercambio de llaves era factible, sin embargo, tena limitaciones prcticas: ambas partes deban primero crear su llave secreta en un proceso mutuo. Como consecuencia, el remitente tena que esperar hasta que la llave comn fuera creada para enviar el mensaje cifrado. Diffie trat de contrarrestar lo anterior, proponiendo lo siguiente: Cada parte deba procesar un par de llaves, una pblica y una privada. Por ejemplo, la llave pblica de Mara es usada por Pedro para cifrar el mensaje para Mara considerando que su llave privada ser utilizada para descifrar el mensaje cifrado de Pedro. Aunque no fue Diffie quien dise el algoritmo que llevara a la realidad su idea de llave pblica o privada, l merece el crdito por hacer lo inconcebible concebible adems inici un grupo de investigacin con el fin de encontrar una funcin matemtica que reflejara su visin. La pregunta para el equipo de investigadores era: Qu funcin matemtica permitira a cualquier persona cifrar un mensaje secreto para un destinatario usando la llave pblica del mismo (destinatario) y previniendo que nadie ms que l pueda descifrar dicho mensaje? Requerira de un matemtico experimentado el encontrar la respuesta a la pregunta anterior, una funcin resumen era la solucin, ya que la mayora de funciones pueden ser invertidas. Por ejemplo: Los desplazamientos a la derecha del mtodo de Csar pueden ser invertidos, realizando desplazamientos a la izquierda. Matemticamente, una suma puede ser invertida por una resta, esta es la funcin ejemplo ms simple. Los ganadores del reto anterior, una funcin resumen de un solo sentido, fueron 3 israeles, graduados de MIT, Ronald Rivest, Adi Shamir y Leonard Adleman, quienes presentaron sus resultados en 197874. La irona del proceso de creacin del RSA (Rivest, Shamir, Adleman) es que, Rivest y Adleman originalmente trataron de probar que la idea de Diffie de una llave pblica y una privada no poda ser llevada a cabo, ya que no existan funciones resumen apropiadas. Pero fallaron en su intento de demostrarlo, y accidentalmente tuvieron xito: mientras Rivest revisaba las ideas de cifrado, Adleman trataba de atacarlas y Shamir les ayudaba75. Al final el RSA tambin inclua los esquemas de firmas digitales. 5.2 RSA

La creacin de una llave pblica comn y una secreta fue el primer paso de la criptografa de llaves pblicas. De manera que esto enunciaba que dos personas podan establecer comunicacin sin tener que entregar la llave secreta con anterioridad. Un sistema de cifrado de llaves pblicas, es aquel, en el cual una llave, que se utiliza para cifrar mensajes, puede hacerse pblica sin revelar la llave secreta que permite que los mensajes sean ledos.
74

R.L. Rivest, A. Shamir, y L.M. Aldeman, A Method for Obtaining Digital Signatures and PublicKkey Critposystemns 75 Diffie, W. The First Ten Years of Public-Key-Cryptography. Publicacin de IEEE, Nueva York, 1992

110

Lo anterior confirma una de las propiedades de las llaves publicas: El conocimiento de la llave que cifra el mensaje no conduce al conocimiento de la llave que lo descifra. Como consecuencia, slo un par de llaves por persona es necesitado. As que un total de n par de llaves es necesitado para n personas comunicndose. Es decir, 100 personas necesitarn 100 pares de llaves. Las 100 llaves que cifran los mensajes son pblicamente conocidas y estn listadas en directorios pblicos en el Internet. Actualmente, la mayora de llaves utilizadas son generadas por el software Pretty Good Privacy, PGP76. Las 100 llaves correspondientes al descifrado se deben mantener en un lugar absolutamente seguro, no en el disco duro de una computadora u otro dispositivo. 5.2.1 Seguridad del RSA

Lo que hace al RSA seguro son los nmeros primos p y q que deben ser nmeros de al menos 100 dgitos. River, Shamir y Adleman saban que la multiplicacin de dos nmeros grandes no es difcil, sin embargo, encontrar los factores de un entero grande es un problema muy difcil. Por ejemplo, es fcil calcular: 35 = 7 * 35 70 = 7 * 5 * 2 69 = 3 * 23 221 = 13 * 17 11413 = 113 * 101 Adems, un programa de factorizacin rpidamente encuentra el nmero de 20 dgitos tal que: 10726291417797115873 = 1223233789 * 8768799157 Sin embargo, an el mejor programa de factorizacin no podra encontrar el factor de 196 dgitos de un nmero como el siguiente: 107262913978420644865187666994873798510553447941549171954649978923860195309909 991719546489160623556900202902061728413351851858054814816308432098914892592607 5485185203509876558141111112930000042837 5.2.2 Firmas digitales y RSA

Adems de eliminar el intercambio de llaves, probar la autenticidad de las personas era un reto que el RSA enfrent a finales de los aos 70. Las firmas digitales del RSA utilizan las llaves de cifrado pblicas y privadas que son tambin utilizadas para el proceso de cifrado y descifrado.

76

Abordado al final del presente captulo.

111

El cifrado con RSA requiere el uso de llaves de cifrado pblicamente conocidas del destinatario del mensaje, sin embargo, la firma del RSA requiere que el emisor utilice su llave pblica y privada. Una razn adicional para la popularidad del RSA es la siguiente: No slo puede cifrar o firmar digitalmente un documento, sino que, permite hacer ambas cosas. Primero lo cifra utilizando la llave pblica del destinatario para posteriormente firmar el mensaje utilizando la llave privada del remitente. 5.2.3 Firmando un documento utilizando RSA

Un documento escrito a mano es firmando con un bolgrafo para probar la autenticidad del emisor, ste, utiliza una informacin personal nica, un secreto que slo l conoce a fin de probar su autenticidad. Similarmente, para firmar un documento digitalmente, el emisor deber agregarle una informacin nica que nadie ms pueda tener o copiar. Esta informacin es su llave de descifrado o llave privada. Si se parte de que no se puede obtener la llave privada partiendo de la llave pblica, y que una firma hecha manualmente sobre un documento s puede ser copiada o imitada, entonces se puede concluir que las firmas digitales son ms confiables que las firmas manuales. 5.3 Usos del RSA

Las llaves largas vuelven lento el proceso de cifrado, de igual forma, con respecto a las firmas digitales se puede afirmar que: la longitud de la firma digital transmitida ser igual a la longitud del mensaje. En otras palabras entre ms largo sea el mensaje, ms larga ser la firma digital. Esta es una desventaja, si se compara con las firmas manuales, que son las mismas independientemente de la cantidad de informacin contenida en el documento. El RSA es prcticamente usado para cifrar llaves de algoritmos de cifrado simtrico, este algoritmo es de uso prctico s es utilizado junto a dicho cifrado. 5.4 Cifrado utilizando algoritmos de llave pblica

A continuacin, un ejemplo del proceso de utilizacin de algoritmos de cifrado de llave pblica, los protagonistas del ejemplo y sus respectivas llaves se detallan en la siguiente tabla:

112

Pedro

Mara

Llave privada Pedro

Llave privada Mara

Llave pblica Pedro

Llave pblica Mara

Tabla 5.1 Protagonistas del ejemplo con algoritmos de llave pblica

Mara y Pedro tienen su respectivo par de llaves: una clave privada que slo ha de conocer el propietario de la misma y una clave pblica que est disponible para todos los usuarios.
1. Mara escribe un mensaje para Pedro y quiere que slo l pueda leerlo. Por esta razn lo

cifra con la llave pblica de Pedro, la cual se encuentra disponible para cualquier persona.
Nos reunimos maana en el lugar de siempre

Figura 5.1 Mensaje cifrado de Mara para Pedro

2. Se produce el envo del mensaje cifrado no siendo necesario el envo de la clave. 3. Descifrado del mensaje con la llave privada de Pedro. Slo Pedro puede descifrar el mensaje enviado por Mara ya que slo l conoce la clave privada correspondiente.
Nos reunimos maana en el lugar de siempre

Figura 5.2 Descifrado del mensaje con la llave privada de Pedro

113

El beneficio obtenido consiste en la supresin de la necesidad del envo de la clave, siendo por lo tanto un sistema ms seguro. El inconveniente es la lentitud de la operacin. 5.5 Sistemas de cifrado hbridos

Criptogrficamente, hbrido, se refiere a la combinacin de cifrados simtricos y asimtricos, la velocidad de cifrado de los algoritmos de cifrado simtricos es acompaada de la seguridad de los algoritmos de cifrado asimtrico tales como el RSA, los mtodos de cifrado como el de Csar, que son fciles de romper, no son utilizados, en su lugar se utiliza el algoritmo IDEA, el cual es considerado un algoritmo simtrico seguro. Como ya se explic antes IDEA fue desarrollado en 1991 por el profesor suizo James Massey y su estudiante Xuejia Lai, sus llaves estn compuestas por 128 bits. Tales llaves son comnmente cifradas utilizando RSA. 5.5.1 Cifrado con sistemas de cifrado hbridos

Para un mensaje que deba ser cifrado: Se genera una llave secreta de IDEA cuya longitud es de 128 bits Utilizando esta llave el mensaje es cifrado de una forma rpida La llave es cifrada con la llave pblica del destinatario La llave cifrada junto con el mensaje cifrado es enviado al destinatario El destinatario tiene primero que descifrar la llave cifrada de IDEA usando su llave privada RSA 6. Se obtiene la llave IDEA la cual utiliza para descifrar el mensaje cifrado 5.5.2 El sistema hbrido de cifrado ms importante: PGP 1. 2. 3. 4. 5.

PGP que significa Pretty Good Privacy, es el sistema hbrido de cifrado ms importante. En realidad el sistema de cifrado ms exitosamente utilizado, fue creado por una sola persona, el cientfico Phil Zimmerman, quien lo hizo pblico en 1991. Cuando Zimmerman escuch por primera vez acerca de la criptografa de llave pblica en 1977, trabajaba como programador y tambin, tena otro trabajo del cual no reciba salario, salvador del mundo (Savior of the World), esto queda expuesto en la introduccin de PGP que se muestra a continuacin. Zimmerman se pregunt:porqu no implementar un sistema de llave pblica en computadoras personales utilizando el algoritmo RSA?. Parte de la introduccin del programa PGP: Es personal, privado y no le interesa a nadie ms que a ti. Podras estar planeando una campaa poltica, discutiendo tus impuestos, teniendo una aventura ilcita, o quiz ests haciendo algo que te parece legal, pero que no lo es. Lo que sea, no quieres que tus documentos o correos electrnicos sean ledos por otra persona. No hay nada malo al defender tu privacidad. Privacidad es un pastel de manzana como la Constitucin. Tal vez piensas que tu correo electrnico es tan legtimo que el cifrado no esta garantizado. Si eres un ciudadano apegado a la ley y que no tiene nada que esconder, entonces porqu no envas siempre tus cartas hechas a mano en formato de postal?, porqu no te sometes a pruebas de anti doppin?, porqu requieres una certificacin de la polica para que entren en tu casa?, estas tratando de esconder algo?, debes ser un subversivo o un vendedor de drogas si escondes tus cartas dentro de sobres, o tal vez

114

eres un paranoico. Tienen los ciudadanos normales, apegados a la ley, la necesidad de cifrar sus correos electrnicos?. Que tal si todos pensramos que los ciudadanos honrados deberan utilizar postales para sus cartas, entonces, si alguien utilizara sobres, despertara sospechas. Tal vez las autoridades abriran sus cartas para encontrar qu es lo que se esta ocultando. Afortunadamente, no vivimos en ese tipo de mundo, porque todos protegen la mayora de sus cartas con sobres. De manera que nadie levanta sospechas al defender su privacidad con un sobre. Anlogamente, sera bonito si todos, rutinariamente cifrarn sus correos electrnicos, inocentes o no, de manera que no se levantaran sospechas por los mensajes cifrados. Piensa en esto como un tipo de solidaridad. Hoy en da, si el gobierno quiere violar la privacidad de ciudadanos ordinarios, tiene que trabajar en interceptar y evaporar las cartas que hayan sido interceptadas y ledas, adems de escuchar cualquier conversacin telefnica. Este es un tipo de tareas intensas no prcticas a gran escala. Esto slo es hecho en casos importantes donde parece necesitarse. Ms y ms de nuestras comunicaciones privadas viajan a travs de canales electrnicos. El correo electrnico esta reemplazando, gradualmente, al correo convencional. Los mensajes de correo son demasiado fciles de interceptar. Nos vamos moviendo hacia un futuro donde la nacin ser atravesada con fibra ptica de gran capacidad, utilizada para comunicacin de redes. El correo electrnico ser una norma para todos, no la novedad que es ahora. El gobierno proteger nuestra informacin con protocolos de cifrado diseados por ellos mismos. Probablemente la mayora de personas sern sumisas con respecto a ello. Pero tal vez algunas personas preferirn tener sus propias medidas de seguridad. En 1992, una propuesta fue presentada al Congreso, en ella el FBI planteaba que todos las empresas dedicadas a la fabricacin de equipo de comunicaciones construyeran una un tipo especial de puerto que permitira al FBI interceptar todo tipo de comunicacin electrnica. Aunque no logr apoyo alguno, debido a la oposicin de los ciudadanos, sta fue presentada nuevamente en 1994. Pero, lo ms alarmante de todo fue la nueva iniciativa para el cifrado de la informacin de la Casa Blanca, bajo el desarrollo de la NSA desde el inicio de la administracin de George Bush, la cual se hizo pblica en abril de 1994. La iniciativa consista en un dispositivo de cifrado llamado Clipper chip, el cual contena un nuevo algoritmo de cifrado, clasificado, desarrollado por la NSA. El gobierno animaba a las empresas a implementar el dispositivo en sus propios dispositivos de comunicacin como por ejemplo, los telfonos. La empresa AT&T esta instalando Clipper en sus dispositivos de comunicacin. La idea principal: al momento de fabricacin cada circuito del Clipper ser configurado con una llave nica, de la cual el gobierno deber tener una copia. Pero, no hay de qu preocuparse: el Gobierno promete utilizar las llaves para leer el trfico slo cuando este debidamente autorizado para hacerlo. Agencias de inteligencia, las empresas petroleras y otros gigantes corporativos tienen acceso total a la mejor tecnologa de cifrado, pero las personas ordinarias no.

115

PGP permite a las personas tomar la privacidad por sus propias manos. Existe una creciente necesidad de ello, esa es la razn por la que lo cre. Phil Zimmerman

5.5.3

Cifrado utilizando sistemas de cifrado hbrido

El uso de llaves asimtricas hace lento el proceso de cifrado. Para solventar dicho inconveniente, el procedimiento que suele seguirse para realizar el cifrado de un mensaje es un mtodo hbrido, consistente en utilizar un algoritmo de llave pblica junto a uno de llave simtrica. Mara y Pedro tienen sus pares de llaves respectivas. Mara escribe un mensaje a Pedro. Lo cifra con el sistema de criptografa de llave simtrica. La llave que utiliza se llama llave de sesin y se genera aleatoriamente.

Nos reunimos maana en el lugar de siempre

Figura 5.3 Mensaje de Mara para Pedro utilizando un algoritmo de llave simtrica

Para enviar la llave de sesin de forma segura, esta se cifra con la llave pblica de Pedro, utilizando por lo tanto criptografa de llave asimtrica.

Figura 5.4 Cifrado de la llave de sesin utilizando un algoritmo de llave asimtrica

Pedro recibe el mensaje cifrado con la llave de sesin y sta misma cifrada con su llave pblica. Para realizar el proceso inverso, en primer lugar utiliza su llave privada para descifrar la llave de sesin.

Figura 5.5 Descifrado de la llave de sesin

116

Una vez ha obtenido la llave de sesin, ya puede descifrar el mensaje.


Nos reunimos maana en el lugar de siempre

Figura 5.6 Descifrado del mensaje

Con este sistema se obtiene: Confidencialidad: slo podr leer el mensaje el destinatario del mismo. Integridad: el mensaje no podr ser modificado. Pero todava quedan sin resolver los problemas de autenticacin y de no repudio. Los cuales se solventan con la utilizacin de las firmas digitales, las cuales se explican posteriormente en este captulo. 5.6 Funciones resumen (Hash)

Cuando los mensajes a firmar son muy largos es una prctica comn la de firmar un resumen del mensaje en lugar de firmar el mensaje completo. El resumen se obtiene mediante procedimientos de compresin de informacin a travs de funciones resumen o funciones Hash. Matemticamente las funciones resumen se definen como proyecciones de un conjunto, generalmente con un nmero elevado de elementos (incluso infinitos), sobre un conjunto de tamao fijo y mucho ms pequeo que el anterior, es decir, transforman un mensaje de m bits en otro resumen de n bits, siendo n < m. Las funciones resumen se utilizan no solamente para reducir las necesidades de almacenamiento sino tambin por razones prcticas, para agilizar el proceso de generacin y verificacin de firmas digitales. La integridad de los datos es crucial para cualquier sistema de seguridad. Al utilizar los resultados generados por las funciones resumen se puede detectar cambios no autorizados en archivos. Caractersticas de las funciones resumen Dada una funcin resumen y = H(x), sta deber cumplir con las siguientes condiciones: 1. La funcin y = H(x) es de una sola direccin, es decir, el clculo del valor y = H(x) es sencillo, pero el clculo de x = H1(y) es tan complejo que no se puede llevar a cabo con los conocimientos matemticos actuales, ni siquiera disponiendo de las ms avanzadas capacidades de clculo. 2. Dado un valor x, es computacionalmente imposible encontrar otro valor x x tal que H(x) = H (x).

117

3. Dado el valor H (x), es computacionalmente imposible encontrar otro valor x x tal que H(x) = H (x). 4. La funcin y = H(x), es libre de colisiones, es decir, es computacionalmente improbable encontrar una pareja de valores (x, x) con x x tales que H(x) = H (x). Se puede definir una colisin como: h(x1)= h(x2), sta ocurre cuando dos mensajes distintos producen un mismo resultado. Es importante aclarar que cada funcin resumen posee un nmero infinito de estas colisiones, de manera que, una funcin resumen nunca podr estar libre de colisiones. Y, el requerimiento de la resistencia a las colisiones apunta a que a pesar que las colisiones existan, estas no debern ser encontradas. Las funciones resumen se pueden clasificar en dos grandes grupos: Funciones resumen con clave. Estas funciones tiene como uno de sus argumentos la clave del sistema de cifrado utilizado para transmitir la informacin. Funciones simtricas sin clave. Estas funciones tiene como argumento tan slo el mensaje a compactar, al cual le aplican tcnicas de compresin con las caractersticas anteriormente indicadas. Dentro de ste ltimo subgrupo se pueden a su vez distinguir dos tipos diferentes de funciones resumen: Las funciones OWHF (One Way Hash Functions), tambin denominadas funciones resumen dbiles. Las funciones CRHF (Collision Resistant denominadas funciones resumen robustas. Hash Functions), tambin

La diferencia entre ambas es que las primeras (dbiles) satisfacen nicamente las tres primeras condiciones apuntadas anteriormente, mientras que las segundas (robustas) son adems libres de colisiones. A diferencia de los algoritmos de cifrado de bloques, las funciones resumen no utilizan llaves, de manera que no existe un ataque que implique la bsqueda de una llave. El parmetro a utilizar es entonces, la longitud de mensaje de salida. Existen muy pocas funciones resumen que sean efectivas, adems, parecera que la criptografa se ha estancado en la familia de SHA y MD5, las cuales aunque no han sido suficientemente analizadas ya han sido estandarizadas por la NIST.77 A continuacin se presentan algunas de las funciones resumen ms conocidas:

77

Ferguson, N., Schneier, B. Op. Cit. pp. 84.

118

5.6.1

MD4 Message Digest 4

La MD4 es una funcin de un solo sentido diseada por Ron Rivest, sta produce un resultado de 128 bits a partir del mensaje de entrada. Despus que el algoritmo fue presentado, los criptgrafos Bert den Boer y Antoon Bosselaers criptoanalizaron las dos ltimas vueltas, de las tres que el algoritmo ejecuta. Posteriormente, en un ataque no relacionado con el resultado antes mencionado, Ralph Merkle atac las dos primeras vueltas. Aunque estos ataques no se extendan al algoritmo completo, Ron Rivest lo fortaleci y el resultado fue un nuevo algoritmo al que llam MD5. 5.6.2 MD5 Message Digest 5

En 1991 Ron Rivest desarroll la funcin MD5 que no es ms que una versin mejorada de MD4, aunque es ms compleja, su resultado, al igual que su antecesora es de 128 bits. Consta de cuatro vueltas y en cada una de ellas el mensaje es mezclado utilizando operaciones como suma, XOR, AND, OR y la rotacin de palabras de 32 bits. Una de las funciones ms utilizada en criptografa es la SHA (Secure Hash Algorithm), la cual se describe a continuacin. 5.6.3 El SHA como estndar

La primera versin, SHA (Secure Hash Algorithm), fue propuesta en 1992 por el NIST, como estndar federal para los Estados Unidos, para su utilizacin en firmas digitales. El algoritmo SHA se considera seguro, basados en que es computacionalmente imposible recuperar el mensaje correspondiente a un determinado resumen e igualmente es muy poco probable encontrar dos mensajes diferentes con el mismo resumen. Es decir que la funcin SHA es de una sola direccin. El SHA-1 tiene varias propiedades en comn con MD5, a pesar de tener un diseo ms conservador, y ser dos veces ms lento que MD5. 5.6.4 Seguridad del algoritmo SHA

El algoritmo SHA es bsicamente igual al MD5. Los principales cambios del SHA respecto a MD5 son la inclusin de una transformacin de expansin, una etapa extra de procesado y la adicin de cada uno de los pasos de la salida del paso anterior para lograr un efecto avalancha mejorado. Por su parte, el algoritmo MD5 es bsicamente igual al MD4 con una etapa extra de procesado y una mejora en el efecto avalancha. Los algoritmos de las funciones SHA-1 y MD5 son considerados seguros debido a que no existen tcnicas conocidas para encontrar colisiones, a excepcin de la fuerza bruta. En un ataque de fuerza bruta, varias entradas aleatorias son probadas, almacenando los resultados hasta que alguna colisin es encontrada. Se puede esperar encontrar una colisin entre las 2n/2 operaciones, donde n es el nmero de bits del resultado generado por la funcin, este ataque es comnmente conocido como el ataque del cumpleaos o birthday attack78. Lo anterior quiere decir que un atacante necesitara probar los resultados de aproximadamente 264 mensajes para encontrar una colisin
78

Ver Anexo I.

119

en la funcin resumen MD5, y aproximadamente 280 clculos para encontrar una colisin en SHA-1. 5.6.5 SHA-256, SHA-384 y SHA-512

El NIST public un documento que contena tres nuevas funciones resumen79, ellas tienen bits de entrada de 256, 384 y 512 respectivamente. Y estn diseadas para ser utilizadas con las llaves de 128,196 y 256 bits del AES. La estructura de estos nuevos algoritmos es similar a la del SHA-1. Estas funciones resumen son nuevas, y no se recomienda utilizarlas. Aunque si se quiere ms seguridad que la brindad por SHA-1 entonces se necesita una funcin resumen con un resultado mayor, aunque ninguna de ellas ha tenido publicaciones en las cuales es les analicen. La funcin SHA-256 es mucho ms lenta que SH-1, para mensajes largos el clculo con esta nueva funcin resumen toma el mismo tiempo o un poco ms que si se utilizara AES o Twofish. La funcin SHA-384 es relativamente intil. Para ejecutarla, se necesita hacer todo el trabajo que es requerido para ejecutar la SHA-512, y luego deshacerse de algunos de los bits. 5.7 Cul funcin resumen se debe utilizar?

No existen muchas opciones, pero, la recomendacin es utilizar una de la familia SHA. A diferencia de los cifrados de bloque, muy poco se ha investigado acerca de las funciones resumen. Si existiera una funcin resumen perfecta que pudiera ser ejecutada rpidamente y que adems su seguridad no pudiera ser violada, ni en un milln de aos, nadie tendra que decidir cual funcin resumen utilizar. Pero, este no es el caso, y para ayudar a tomar la decisin, existen dos factores que se debern tomar en cuenta: MD5 - Mayor velocidad y menos seguridad SHA-512 Cuando la seguridad es el aspecto ms importante Las especiales caractersticas de las funciones resumen permiten que stas puedan ser utilizadas por cualquier firma digital para garantizar la autenticidad de contenido de los mensajes firmados. Esto no es estrictamente necesario, ya que la firma digital de un mensaje con la llave secreta del firmante es suficiente para demostrar la autenticidad del contenido del mismo. Esto es debido a que s el mensaje fuera modificado su firma tambin habra de serlo y ello requerira el conocimiento de la clave secreta del firmante. 5.8 Firmas digitales

Partiendo de la necesidad de comunicacin entre dos personas, cuyo nico medio de comunicacin sea el Internet, uno de los problemas ms comunes es cmo saber que efectivamente la persona con quien se establece la comunicacin es la quien dice ser?. Es entonces cuando surge el problema de verificacin de Identidad o autenticacin, los casos en los que este problema se presenta con mayor frecuencia son:

79

Federal Information Processing Standards Publication 180-2, 2002 August 1, Announcing the Secure Hash Standard.

120

o o o

Dos personas se ven en la calle y stas ya se conocen, se saludan con sus nombres, cada una de ellas verifica la identidad de la otra visualmente y aceptan que es la persona que ya conocen. Dos personas que se conocen pero que no se ven, por ejemplo que esta una del lado de una puerta y la otra del otro lado, cmo pueden reconocerse?. Lo ms fcil es hacer preguntas y dependiendo de las respuestas aceptar la identidad de la otra persona. Dos personas tienen que validar su identidad pero no se conocen anteriormente, pero pueden comprobar que son quien dicen ser mediante documentos de identidad personal que incluyan una fotografa.

Existen casos en los que es necesario verificar la identidad, en este caso a veces ser necesario quedarse con un comprobante de tal verificacin, por ejemplo al cobrar un cheque en un banco, el cajero pide un documento de identidad, realiza una identificacin visual de acuerdo al sujeto que desea cobrar el cheque y la fotografa del documento presentado, adems solicita que el cheque este firmado. La firma tradicional tiene varias caractersticas, la principal de ellas es que es aceptada legalmente, esto quiere decir que si alguna persona firm un documento adquiere tanto los derechos como las obligaciones que de l deriven, y si estas obligaciones no son acatadas el portador del documento tiene el derecho de reclamacin mediante un litigio. La autoridad competente acepta las responsabilidades adquiridas con slo calificar a la firma como vlida. Existen dos procedimientos importantes, el primero el proceso de firma, que es el acto cuando una persona firma manualmente un documento. Y el proceso de verificacin de la firma, que es el acto que determina si una firma es vlida o no. Proceso de Firma: consiste slo en tomar un bolgrafo y estampar, dibujar o escribir garabatos en un papel. En general este garabato debe ser el mismo y es elegido a gusto de la persona. Se usa como una marca personal. Proceso de verificacin: existen en general dos mtodos de verificacin de la firma, uno es el ms usado y simple, que es el visual, est mtodo lo aplica cualquier cajero al pagar un cheque, o al efectuar un pago con tarjeta de crdito. En la prctica la criptografa simtrica y asimtrica se usan conjuntamente. La simtrica para intercambiar grandes volmenes de informacin por su rapidez. Y la asimtrica para el intercambio de las claves simtricas y la firma digital. Ya se ha mencionado el principal inconveniente de los algoritmos de llave pblica: su lentitud que, adems, crece con el tamao del mensaje a cifrar. Para evitar ste problema, la firma digital hace uso de funciones resumen. Las firmas digitales son anlogas a las firmas analgicas tradicionales de los documentos escritos sobre papel. Estas ltimas estn basadas en la forma fsica en que una persona firma su nombre. Las firmas analgicas son siempre similares y fciles de falsificar. Las firmas digitales deben de ser diferentes para cada documento. Cada firma debe depender de cada documento en el que se utilice, a travs de una relacin matemtica, de forma que esta relacin permita posteriormente, verificar la validez de la firma y con ello la autenticidad de origen e integridad del documento firmado. 121

La imposibilidad de falsificar cualquier tipo de firma radica en el secreto del firmante. En el caso de las firmas analgicas el secreto est constituido por caractersticas de tipo grafolgico inherentes al firmante y por ello son difciles de falsificar. En el caso de las firmas digitales, el secreto del firmante es el conocimiento exclusivo de una llave secreta utilizada para generar la firma. Para garantizar la seguridad de las firmas digitales es necesario que stas sean: nicas: Las firmas deben poder ser generadas solamente por el firmante. Infalsificables: Para falsificar una firma digital un delincuente tiene que resolver problemas matemticos de una complejidad muy elevada, es decir, las firmas han de ser computacionalmente seguras. Verificables: Las firmas deben ser fcilmente verificables por los receptores de las mismas. Innegables: El firmante no debe ser capaz de negar su propia firma. Viables: Las firmas han deben ser fciles de generar por parte del firmante.

Diversos protocolos para firmas digitales, basados en la criptografa simtrica fueron propuestos y utilizados, pero los basados en la criptografa de llave pblica demostraron su superioridad conceptual y operacional.80

80

Pastor, J., Sarasa, M. Op. Cit. Pp. 124.

122

Ejemplo de utilizacin de firmas digitales: Mara escribe un mensaje a Pedro. Es necesario que Pedro pueda verificar que realmente es Mara quien ha enviado el mensaje. Por lo tanto Mara debe enviarlo digitalmente firmado, para lo cual realizar los siguientes pasos: 1. Aplica una funcin resumen al mensaje a enviar.
Nos reunimos maana en el lugar de siempre

Mensaje a enviar

Funcin Resumen

a e y u I

Resumen del mensaje

Figura 5.7 Aplicacin de la funcin resumen

2.

Cifra el resultado de la funcin resumen con su clave privada. De esta forma obtiene su firma digital.
a e y u I a e y u I

Figura 5.8 Generacin de la firma digital

3.

Mara enva a Pedro el mensaje original junto con la firma.


Nos reunimos maana en el lugar de siempre

a e y u I

Figura 5.9 Envo del mensaje junto a la firma digital

123

Pedro recibe el mensaje junto a la firma digital. Deber comprobar la validez de sta para dar por bueno el mensaje y reconocer al autor del mismo (integridad y autenticacin). 5. Obtencin del resumen del mensaje
Nos reunimos maana en el lugar de siempre Nos reunimos maana en el lugar de siempre a e y u I

a e y u I

6. Comparacin de resultados

a e y u I

a e y u I

4. Descifrado del resumen del mensaje


Figura 5.10 Descifrado del mensaje y comprobacin de la firma digital

4. Se descifra el resumen del mensaje mediante la clave pblica de Mara 5. Se aplica al mensaje la funcin hash para obtener el resumen. 6. Se compara el resumen recibido con el obtenido a partir de la funcin hash. Si son iguales, Pedro puede estar seguro de que quien ha enviado el mensaje es Mara y que ste no ha sido modificado. Con este sistema se obtiene: Autenticidad: la firma digital es equivalente a la firma fsica de un documento. Integridad: el mensaje no podr ser modificado. No repudio de origen: el emisor no puede negar haber enviado el mensaje.

124

5.9

PGP Pretty Good Privacy

Este procedimiento fue desarrollado en el ao de 1991 por Phil Zimmerman y es accesible de forma gratuita a travs del Internet. En concreto el mtodo PGP garantiza: o o o o Confidencialidad: el mensaje puede ser ledo slo por receptores autorizados. Autenticidad de origen: permite verificar la identidad del emisor del mensaje Integridad: garantiza que el mensaje no ha sido modificado No repudio de origen: permite la verificacin de la identidad del emisor original de un determinado mensaje.

Este algoritmo utiliza tanto algoritmos de clave secreta como de llave pblica. Los algoritmos de clave secreta se utilizan para el cifrado de los datos, mientras que los de llave pblica son utilizados para la administracin de las llaves, tambin, utiliza funciones resumen de una sola direccin en el clculo de las firmas digitales. Los algoritmos de cifrado ms comnmente utilizados por el PGP se indican a continuacin: Cifrado de datos: IDEA en modo CBC o Autenticidad de origen y autenticidad de contenido: RSA y MD5 o Administracin de llaves RSA o La longitud de las claves RSA utilizadas por el PGP vara de acuerdo con el nivel de seguridad, pudiendo ser de 384, 512 y 1024 bits. El propsito fundamental del PGP es el de enviar mensajes de forma segura. En general, stos se envan cifrados y firmados. Sin embargo, tambin es posible cualquier combinacin de los parmetros anteriores, es decir, se pueden enviar mensajes nicamente cifrados o nicamente firmados. Los mensajes cifrados pueden ser ledos slo por sus receptores autorizados, mientras que cualquiera puede verificar la integridad del mensaje en claro firmado con slo utilizar la clave pblica del firmante. Adems, puesto que la gestin de claves se lleva a cabo mediante un protocolo de clave pblica, el emisor y el receptor pueden intercambiar la clave secreta de cifrado del mensaje sin necesidad de utilizar un canal de comunicacin seguro. Todas las estructuras de datos utilizadas para la transmisin de mensajes con PGP son de tipo binario, lo cual hace que sta pueda llevarse a cabo de manera bastante eficiente. Por esta razn, los mensajes de PGP no tienen una estructura transparente para el usuario. Un mensaje PGP consiste en la concatenacin de uno o ms paquetes, entendiendo como tales a bloques digitales de informacin con un determinado formato y caractersticas. Cada paquete consta bsicamente de tres partes, la primera almacena la informacin relativa al tipo de paquete, la segunda, indica su longitud y la tercera contiene la informacin del paquete propiamente dicha. Una caracterstica importante de esta estructura es que puede anidarse, es decir, un paquete puede incluirse dentro de otro. La certificacin de llaves en PGP est basada en la idea de que la confianza es un concepto social: la gente confa en sus amigos. As, en PGP la llave pblica de cada usuario est firmada por aquellos, que confan en l, siendo precisamente estas firmas las que certifican la validez de dicha llave otros usuarios. De esta forma, un determinado usuario puede confiar en la validez de la llave 125

de otro siempre y cuando dicha llave est firmada por alguien en quien el primer usuario confa, es decir, si existe al menos un amigo comn a ambos.

B D

E F G
Figura 5.11 Estructura de certificacin del PGP

As, por ejemplo, el usuario A puede confiar en la validez de la llave pblica del usuario C, puesto que est certificada por el usuario B, en quien A confa. Sin embargo, el usuario E no puede confiar en la validez de la clave pblica de ningn otro usuario a excepcin de G, cuya llave certifica. Por lo tanto, el principal inconveniente de este procedimiento de certificacin es que un determinado usuario no siempre puede verificar la validez de la llave de otro, a menos que ambos tengan como mnimo un amigo comn. 5.9.1 o Debilidades de PGP

Debilidades de implementacin: agujeros de seguridad provocados por una implementacin defectuosa de PGP, y corresponden a versiones concretas del programa. Por ejemplo, el fallo descubierto en la versin 5.0 de PGP para UNIX, que haca que las llaves no fueran aleatorias, o el encontrado en todas las versiones para Windows, desde la 5.0 hasta la 7.0.4, en la que un inadecuado procesamiento de los cdigos ASCII permita a un atacante introducir archivos en la computadora de la vctima. Intrnsecas del protocolo: a principios del ao 2001 se hizo pblica una tcnica que permita a un atacante falsificar firmas digitales. En este caso se necesitaba el acceso fsico a la computadora de la vctima para manipular su llave privada, por lo que la falla carece de inters prctico.

126

CONCLUSIONES
La proteccin de la informacin es un asunto que en ciertos mbitos es de vital importancia. Esto ha conducido a lo largo de la historia a la bsqueda de mecanismos que permitan proveer seguridad a la comunicacin. Entre los diferentes recursos de los que se ha hecho uso, la criptografa ocupa una relevante posicin, si bien no necesariamente la ms preponderante en cada caso. En general, la seguridad suele brindarse a travs del establecimiento de polticas que incluyen determinado tipo de recursos en funcin de las condiciones y la naturaleza de la informacin a proteger. Se consideran fundamentales para la criptografa los criterios de confidencialidad, autenticidad e integridad. Con el paso del tiempo se han ido agregando otras caractersticas deseables y necesarias en los sistemas criptogrficos, pero stas siguen considerndose bsicas. La evolucin histrica de la criptografa puede ser segmentada en tres etapas que presentan diferencias sensibles entre s: una artesanal, una tcnica y una digital. La primera abarca un largo perodo de tiempo que surge en tiempos ancestrales y llega hasta fines del siglo XIX y principios del XX; se caracteriz por el empirismo en la creacin y uso de los mtodos. El inicio de la segunda se traslapa con el fin de la primera y concluye en los aos 40; se caracteriz por la mecanizacin de mtodos que en su momento eran tiles pero a la vez engorrosos para operadores que tuvieran que ejecutarlos manualmente; otro aspecto que caracteriz a esta era fue la relativa escasez de aportes tericos significativos, aunque vale la pena resaltar que a ella pertenece la idea de Kerckoffs de que el algoritmo puede ser pblico mientras la llave permanezca oculta. La tercera surge como resultado de los trabajos de investigadores como Turing y Shannon; en sus inicios hubo una fuerte teorizacin que buscaba dar soporte a trabajos de criptografa y criptoanlisis para fines primordialmente militares. Pertenecen a ella el desarrollo de sistemas criptogrficos completamente electrnicos, el establecimiento de estndares criptogrficos para diferentes fines y la teorizacin sobre nuevas formas de llevar a cabo tareas de cifrado digital de datos. Como es de esperar, en la actualidad todos los mtodos son digitales. Hay dos grandes familias de mtodos de cifrado, los de llave privada y los de llave pblica. Para un grupo pequeo de personas, el intercambio de sus llaves privadas, es una tarea fcil, sin embargo, a medida que el grupo crece, la administracin de las llaves se complica para poder intercambiarlas de forma segura debern reunirse y cada uno hacer entrega de su llave, situacin que debern repetir cada vez que alguno de ellos actualice o cree una nueva. Es entonces cuando nos encontramos con las desventajas de la utilizacin de llaves privadas: su distribucin y manejo. Por ejemplo, para dos personas que necesitan comunicarse en secreto, ellos tendrn que acordar una llave que nadie ms conozca. Si n personas que necesitan comunicarse, el nmero de llaves necesarias seran n(n-1)/2. Por ejemplo, para 100 personas que se desean comunicar en secreto, se requeriran 4,950 llaves que cada usuario tendra que resguardar. Cuando una llave es accidentalmente revelada, automticamente toda la informacin que haya sido cifrada con ella quedar expuesta ante cualquier persona que la conozca; es de ac que surge la recomendacin de utilizar una llave diferente para cada cifrado, lo que implica almacenar o memorizar gran cantidad de llaves, y esto tambin nos lleva a deducir que la vida de la llave es muy corta, ya que slo se debe utilizar para cifrar una vez.

127

Por otra parte, con las llaves privadas se utilizan los secretos compartidos, es decir, slo el emisor y el receptor debern conocer la llave y comprometerse a mantenerla en secreto. De manera que la robustez de estos algoritmos recae sobre el conocimiento de dicha llave. Ante la revelacin de la llave, no habr manera de evitar que una persona se haga pasar por el emisor o receptor, peor an, no habr manera de comprobar su identidad. Lo antes mencionado abre un gran agujero de seguridad, y nos recuerda que los secretos mejor guardados son aquellos que no se comparten. El DES fue el estndar durante alrededor de treinta aos, pero debido a ciertas debilidades que se le fueron detectando (principalmente la longitud de la llave y la estructura de las cajas de sustitucin), en 1997 el NIST convoc a un concurso para la eleccin de un nuevo estndar de cifrado, de las quince propuestas recibidas se eligieron cinco finalistas, de los cuales Rijndael fue declarado como el nuevo AES, ya que era el que mejor combinaba caractersticas como: seguridad, rendimiento, eficiencia, facilidad de implementacin y flexibilidad en cuanto a tamao de bloque y llave. El reemplazo del DES por el AES se ha realizado paulatinamente y, en muchos casos, se sigue utilizando el DES combinado con algoritmos de llave pblica, como es el caso de las transacciones con tarjetas de crdito, telecomunicaciones y codificacin de seales satelitales. Se debe tener claro que las debilidades del DES no se deben a un diseo deficiente, sino al tiempo que transcurri desde su creacin y al avance que las tcnicas de criptoanlisis y la potencia de procesamiento que las computadoras han adquirido, lo que nos hace pensar que ocurrir lo mismo con el AES, pero, podemos estar tranquilos ya que ste ltimo es relativamente nuevo y a la fecha no se le ha conocido ningn tipo de ataque exitoso. En este trabajo se procedi a escribir varios de los algoritmos de cifrado simtrico de bloques ms importantes, posteriormente se hizo una comparacin entre ellos a partir de criterios de velocidad, facilidades de implementacin en hardware y/o software y vulnerabilidad. Esta comparacin corrobora algunas de las condiciones de diseo ms importantes que permitieron que el algoritmo Rijndael se eligiera como nuevo estndar. Lo anterior no descalifica como posibles alternativas en ciertas aplicaciones concretas a algunos de los otros algoritmos. Hay algunos que tienen niveles de vulnerabilidad relativamente bajos, velocidades razonablemente altas y requieren condiciones de implementacin relativamente simples. Tales son los casos de IDEA y Blowfish, sin embargo, hay que resaltar el hecho de que IDEA esta patentado y requiere licencia para su uso comercial, en tanto que Blowfish es abierto. Mencin especial merece el caso de Skipjack que est patentado y cuya implementacin nicamente est autorizada para hardware, por lo que aunque es bastante difundido en cierto tipo de aplicaciones slo hay disponibles implementaciones en circuitos integrados cuyo precio no suele ser elevado. Como solucin al problema de la distribucin de llaves naci la criptografa de llave pblica, que se basa en la utilizacin de dos llaves, una para cifrar y otra para descifrar. El RSA es el algoritmo ms utilizado, y su seguridad se basa en la dificultad de factorizar dos nmeros grandes. Este algoritmo busca que dos personas puedan establecer comunicacin sin tener que entregar la llave privada con anterioridad; al contario de lo que ocurre con los algoritmos de llave privada, su robustez no recae sobre el conocimiento de una sola llave. 128

Cada persona deber tener nicamente dos llaves, una pblica, que como su nombre indica ser conocida pblicamente y una privada, sin que el conocimiento de la primera lleve al descubrimiento de la ltima. La desventaja es que al hacer que cada persona maneje dos llaves el sistema se vuelve lento y complejo. Con estos algoritmos el nico secreto que se deber guardar es el de la llave privada, lo que deja de lado los secretos compartidos utilizados con los algoritmos de llave privadas. Al haber una llave pblica y otra privada, es factible la autenticacin del mensaje y el emisor. Debido a la complejidad de clculo que realizan los algoritmos de llaves privadas, stos son mucho ms lentos que los de llave pblica, es por ello que aprovechando la velocidad de procesamiento de los algoritmos de llaves privadas, y la seguridad de los de llaves pblicas, se utiliza una mezcla de ellos y surgen as los sistemas de cifrado hbridos, que emplean la rapidez de los algoritmos de llave privada y la gestin de llaves de los de llave pblica.

129

BIBLIOGRAFA
[1] [2] [3] [4] [5] Anderson, R. Two remarks on Public Key Cryptology. Computer Laboratory. University of Cambridge. Cambridge, United Kingdom. S/f. Bauer, F. Decrypted Secrets. Springer Verlag. New York. 2002. Biham, E., Shamir, A. Differential Cryptanalysis of the Data Encryption Standard. Proceedings, Berlin. Springer Verlag. 1993. Biham, E., Shamir, A. Differential Cryptanalysis of DES-like Cryptosystems (Extended Abstract). The Weizmann Institute of Science. Department of Applied Mathematics. S/f. Biham, E., Shamir, A. Differential Cryptanalysis of Snefru, Khafre, REDOC-II, LOKI and Lucifer. (Extended Abstract). The Weizmann Institute of Science. Department of Applied Mathematics and Computer Science. Rehovot. S/f. Biham, E. New Types of Cryptanalytic Attacks Using Related Keys. In Tor Helleseth, editor, Advances in Cryptoglogy EUROCRYPT93, volume 765 of Lecture Notes in Computer Science, pages 398-409. Springer-Verlag. 1993. Biryukov, A. Block Ciphers and Stream Ciphers: The State of the Art. Katholieke Universiteit Leuven. Dept. ESAT/SCD-COSIC. Leuven. S/f. Biryukov, A., Nakahara, J., Preneel, B., Vandewale, J. New Weak-Key Clases of IDEA. Katholieke Universiteit Leuven. Dept. ESAT/COSIC. Leuven. s/f. Blelloch, G. Introduction to Cryptography. Rearrangements and adaptation of the Tzu-Yi Chen, David Oppenheimer and Marat Boshernitsan lecture notes (Fall 1997). October 2000.

[6]

[7] [8] [9]

[10] Bresson, E., Chevassut, O., Poitcheval, D. Provably Authenticated Group Diffie-Hellman Key Exchange The Dynamic Case. (Full Version). Advances in Cryptology Proceedings of Asiacrypt 2001. 9-12 December. Gold Coast (Australia). [11] Brisson, R., Thberge, F. Un aperu de lhistoire de la cryptologie. Descargado de http://collection.nlc-bnc.ca/100/200/301/cse-cst/overview-f/musee.pdf el 7 de diciembre de 2003. [12] Churchhouse, R. Codes and Ciphers. Julius Caesar, the Enigma and the Internet. Cambridge University Press. Cambridge. 2002. [13] CLE International. Dictionaire du Franais. Dictionaires LeRobert. CLE International. Paris. 1999. [14] Daemen, J., Knudsen, L., Rijmen, V. The Block Cipher Square. Fast Software Encryption, LNCS 1267, E. Biham, Ed., Springer-Verlag, 1997, pp. 149-165. Also available as http://www.esat.kuleuven.ac.be/rijmen/square/fse.ps.gz. [15] Daemen, J., Rijmen, V. AES Proposal: Rijndael. Document Version 2, Date: 03/09/99.

130

[16] Dandalis, A. Prasanna, V. Rolim, J. A Comparative Study of Performance of AES Final Candidates Using FPGAs. Workshop on Cryptographic Hardware and Embeddes Systems, August 2000. [17] Delahaye, J. La cryptographie RSA vingt ans aprs. Pour la Science. No. 267. Janvier 2000. pp. 104-108. [18] Diffie, W., Hellman, M. New Directions in Cryptography. IEEE Transactions on Information Theory. IT-22(6). November 1976. [19] Diffie, W. The First Ten Years of Public-Key-Cryptography. IEEE Publication. New York, 1992. [20] Dubertret, G. Initiation la cryptographie. ditions Vulbert. Paris. 2002. 3me. dition.

[21] Ferguson, N., Schneier, B. Practical Cryptography. Wiley Publishing Inc. Indianapolis. 2003. [22] [23] [24] Gonzlez, M., Shparlinski, I. On the Security of Diffie-Hellman Bits. Preprint 2000. Herodoto. Los nueve libros de la historia. Clsicos Jackson. Mxico DF. 1966. Herodoto. Los nueve libros de la historia. CONACULTA-Ocano. Mxico DF. 1999.

[25] Heys, H. A Tutorial on Linear and Differential Cryptanalysis. Electrical and Computer Engineering. Faculty of Engineering and Applied Science. Memorial University of Newfoundland. Newfoundland. S/f. [26] Heys, H., Tavares, S. On the Design of Secure Block Ciphers. Department of Electrical and Computer Engineering. Queens University. Kingston, Ontario. S/f. [27] Jamil, T. The Rijndael Algorithm. IEEE Potentials. Vol. 23, Issue 2, April-May 2004. pp. 36-38. [28] Johnson, N., Jajodia, S. Exploring Steganography: Seeing the Unseen. Computer Practices. S/f. Pp. 26-34. [29] Kahn, D. The Codebreakers. The Comprehensive History of Secret Communication from Ancient Times to the Internet. Scribner. New York. 1996. [30] Kerckhoffs, A. La cryptographie militaire. Journal des Sciences Militaires. Janvier 1883.

[31] Lai, X., Massey, J. A Proposal for a New Block Encryption Standard. Reprint of pp. 389404 in Advances in Cryptology-EUROCRYPT'90 Proceedings, LNCS 473, Springer-Verlag. 1991. [32] Lucena, M. Criptografa y seguridad en computadores. Escuela Politcnica Superior. Universidad de Jan. Jan, Espaa. 1999. 2 Edicin. [33] Mel, H., Baker, D. Cryptography Decrypted. Addison-Wesley. Boston, 2001.

131

[34] Menezes, A., van Oorschot, P., Vanstone, S. Handbook of Applied Cryptography. CRC Press. 1996. Available from http://www.cacr.math.uwaterloo.ca/hac [35] Mercier, D. Cryptographie classique. IUFM de Guadaloupe, Morne-Ferret. Poite--Pitre. 5 octobre 2003. [36] Mirza, F. Block Ciphers and Cryptanalysis. Royal Holloway University of London. London. S/f. [37] NIST. Federal Information Processing Standards Publication. 46, 1977, Data Encryption Standard. [38] NIST. Federal Information Processing Standards Publication. 81, 1980, DES Modes of Operation. [39] NIST. Federal Information Processing Standards Publication. 74, 1981, Guidelines for Implementing and Using the NBS Data Encryption Stardard. [40] NIST. Federal Information Processing Standards Publication 180-2, 2002 August 1, Announcing the Secure Hash Standard. [41] Odlyzko, A. Public Key Cryptography. AT&T Bell Laboratories. New Jersey. S/f.

[42] Pastor, J., Sarasa, M. Criptografa digital. Fundamentos y aplicaciones. Prensas Universitarias de Zaragoza. Zaragoza, Espaa. 1998. [43] Pointcheval, D. Le chiffrement asymtrique et la scurit prouve. Habilitation diriger des recherches. Laboratoire dInformatique. cole Normale Suprieure. Universit Paris VII. Paris, France. Juin 2002. [44] Poss, J. Introduction la cryptographie. cole Nationale dArts et Mtiers. Aix-enProvence. Juin 2003. [45] Preneel, B. Hash Functions. Version 4. Katholieke Universiteit Leuven. Leuven. May 15, 2004. [46] Real Academia Espaola. Diccionario de la lengua espaola. Real Academia Espaola. Madrid. 1992. 21 Edicin. [47] Rivest, R. Testing Implementations of DES. MIT Laboratory for Computer Science. Cambridge, Massachussets. February 1985. [48] Rivest, R., Shamir, A., Adleman, L. A Method for Obtaining Digital Signatures and Public-Key Cryptosystems. Communications of the ACM. February 1978. [49] Sale, Tony (Translator). The Bentchley Park translated Enigma Instruction Manual. Traducido en 2001 del documento Der Schlssel M Verfahren M Allgemein del Comando Supremo de la Marina Alemana, elaborado en 1940. Descargado de http://www.codesandciphers.org.uk/documents/officer/officer1.pdf el 8 de diciembre de 2003.

132

[50] Salenave Gonalves, L., Gadis Ribeiro, V. Um estudo comparativo entre algoritmos de criptografa DES Lucifer (1977) e AES Rijndael (2000). Universidade Luterana do Brasil (ULBRA)-Centro Universitario Lasalle (UNILASALLE). S/f. [51] Schneier, B. A Self-Study Course in Block-Cipher Cryptanalysis. Counterpane. San Jos. S/f. [52] Schneier, B. Applied Cryptography. John Wiley & Sons Inc. 1995.

[53] Schneier, B. Cryptography, Security and the Future. Communications of ACM. Vol. 40, No. 1, January 1997. pp. 138. Descargado de http://www.schneier.com/essay-csf.html el 10 de diciembre de 2003. [54] Schneier, B. Description of a New Variable-Length Key, 64-Bit Block Cipher (Blowfish). Fast Software Encryption. Cambridge Security Workshop Proceedings (December 1993). Springer-Verlag, 1994, Pp. 191-204. [55] Schneier, B., Whiting, D. A Performance Comparision of the Five AES Finalists. Counterpane Internet Security-Hi/Fn. 7 April 2000 [56] Shirriff, K. Differential Cryptanalysis of Madryga. Sun Microsystems Labs. Draft Version. October 19, 1995. [57] Shannon, C.E. The Mathematical Theory of Communication. Reprinted with corrections from The Bell System Technical Journal. Vol. 27. , pp. 379-423, 623-656. July-October, 1948. [58] Shannon, C.E. Communication Theory of Secrecy Systems. The Bell System Technical Journal. 1949. pp. 656-715. 1949. [59] Simmons, G. (Editor). Contemporary Cryptology. The Science of Information Integrity. IEEE Press. New York. 1992. [60] Singh, S. The Code Book: The Science of Secrecy from Ancient Egypt to Quantum Cryptography. Anchor Books-Knopf Publishing Group. New York. 2000. [61] Standaert, F., Piret, G., Quisquater, J. Cryptanalysis of Block Ciphers: A Survey. Universit Catholique de Louvain. UCL Crypto Group Technical Report Series. Technical Report CG-2003/2. Louvain-la-Neuve, 2003. [62] Stern, J. La science du secret. ditions Odile Jacob. Paris. 1998.

[63] Stinson, D. Some Observations on the Theory of Cryprographic Hash Functions. University of Waterloo. School of Computer Science. Waterloo, Ontario. January 15, 2004. [64] Vauldenay, S. On Measuring Resistance to Linear Cryptanalysis. cole Polytechnique Fdrale de Lausanne (EPFL). Lausanne. S/f. [65] Vauldenay, S. On the Weak Keys of Blowfish. cole Normale Suprieure DMI. Laboratoire dInformatique. Paris. S/f.

133

[66]
[67]

Wehenkel, L. Thorie de l'information et du codage. Facult des Sciences Appliques. Universit de Lige. Lige. 2001. Welsenbach, M. Cryptography in C and C++. APress. New York, 2001.

[68] Zaccagnini, A. Introduzione alla crittografia. Universit degli Studi di Parma. Parma. 2002. [69] [70] Zimmermann, P. Cryptographie et rseau. Pour la Science. No. 260. Juin 1999. pp. 38-44. Zimuel, E. Introduzione a la crittografia. Mensa Italia. Francavilla al Mare. Luglio 2002.

134

ANEXOS

Anexo I

Criptoanlisis
El Criptoanlisis consiste en comprometer la seguridad de un sistema de cifrado. El criptoanlisis y la criptografa son complementarias, sta ltima trata principalmente de crear y analizar sistemas de cifrado seguros mientras que la primera, trata de romperlos, demostrando su vulnerabilidad. No se considera Criptoanlisis el descubrimiento de un algoritmo de cifrado secreto, los algoritmos siempre son conocidos. En general el Criptoanlisis se suele llevar a cabo estudiando grandes cantidades de pares texto claro-texto cifrado generados con la misma clave. El mecanismo que se emplee para obtenerlos es indiferente, y puede ser resultado de escuchar un canal de comunicacin, o de la posibilidad de que el objeto que esta siendo atacado responda con un texto cifrado cuando se le enva un mensaje. Cuanto mayor sea la cantidad de pares, ms probabilidades de xito tendr el Criptoanlisis. La mayora de estos ataques dirigidos a sistemas de cifrado utilizan mtodos probabilsticos o estadsticos que explotan una debilidad estructural, presentada intencional o no intencionalmente (puerta trasera), en el algoritmo de cifrado. A fin de determinar s dichos ataques son posibles, es necesario examinar la estructura del algoritmo y sus propiedades estadsticas. A continuacin algunos tipos de ataques ms conocidos: Texto claro conocido Este tipo de ataque se produces cuando el ataque cumple con todas las condiciones siguientes: 1. El criptoanalista tiene acceso completo al algoritmo de cifrado 2. El criptoanalista tiene una cantidad considerable de texto cifrado 3. El criptoanalista conoce el texto en claro de parte de ese texto cifrado Se asume el Principio de Kerckhoffs, que establece que la seguridad del cifrado ha de residir exclusivamente en el secreto de la clave, y no en el mecanismo de cifrado. Fuerza bruta o ataque exhaustivo Consiste simplemente en probar todas y cada una de las posibles claves del espacio de claves hasta encontrar la correcta. Texto claro escogido Ocurre cuando el atacante puede obtener el texto claro correspondiente a textos cifrados de su eleccin. El atacante cifra una cantidad indeterminada de texto claro y compara el resultado con el texto cifrado original. Este es el caso de los ataques contra el sistema de verificacin de usuarios utilizado por Unix, donde un intruso consigue la lista de contraseas y realiza cifrados de textos en claro de su eleccin para luego comparar los resultados con las llaves cifradas. A este ataque tambin se le llama de diccionario, debido a que el atacante suele utilizar un archivo llamado `diccionario' con los textos en claro que va a utilizar. Criptoanlisis diferencial El criptoanlisis diferencial es un mtodo de ataque basado en un conjunto de pares de texto en claro-texto cifrado que se emplean para determinar el valor de los bits de la llave principal. La 1

Anexo I informacin sobre la llave se obtiene en base a deducciones procedentes de bloques de texto cifrado sobre bloques de texto claro con una diferencia de bits especfica entre ellos. Criptoanlisis lineal Su funcionamiento se basa en tomar algunos bits del texto claro y efectuar una operacin XOR entre ellos, tomar algunos del texto cifrado y aplicarles la misma operacin, y anlogamente hacer un XOR de los dos resultados anteriores, obteniendo un nico bit. Efectuando esa operacin a una gran cantidad de pares de texto plano y textos cifrados diferentes se puede observar si se obtienen ms ceros o ms unos. Existen combinaciones de bits que, bien escogidas, dan un rango significativo a la medida anteriormente definida, es decir, que el nmero de ceros (o unos) es apreciablemente superior. Esta propiedad permite poder asignar mayor probabilidad a unas claves sobre otras y de esta forma descubrir la clave que se busca. Shortcut Attacks En este tipo de ataque, el adversario explota algunas de las propiedades del algoritmo de cifrado que le permita determinar la clave o el texto claro en mucho menos tiempo que realizando una bsqueda exhaustiva. Ataques por anlisis temporal (Timing Attacks) Este tipo de ataques se basan en el hecho de que una computadora tarda ms tiempo en procesar una multiplicacin matemtica si los coeficientes de dicha operacin son distintos de cero que si alguno de ellos es cero, por lo que un criptoanalista puede obtener informacin sobre la llave al realizar un estudio sobre el tiempo que emplea el algoritmo en procesar cada unos de los bits de dicha llave. El xito de un ataque por anlisis temporal reside en las multiplicaciones matemticas. Cualquier algoritmo de cifrado, para ser considerado seguro, ha de soportar todos estos ataques y otros no citados; sin embargo, el sistema ms robusto caer fcilmente si el emisor o al receptor acceden, forzados o voluntariamente, a revelar informacin que se supone debe ser secreta.

Anexo II

Ejemplo de la primera iteracin de un texto al que se aplica el algoritmo DES


Texto a cifrar: un su cipoto chelito peloemescal Llave: salarrue El texto a cifrar, al cual denominaremos M, se representa en formato hexadecimal y binario.

u
1

M en hexadecimal:
n
2 3

s 53
4

u
5 6

c
7

i
8

p
9

o
10

t
11

i
12

o
13 14

c
15

h
16

e
17

l
18

i
19

t
20

o
21 22

p 50
23

e
24

l
25

u
26

e
27

m
28

e
29

s
30

c
31

a
32

l
33

55 4E 20

55 20 43 49

50 4F 54 49 4F 20 43 48 45 4C 49

54 4F 20

45 4C 55

45 4D 45 53 43 41 4C 0D 0A 0

- M en binario: Como resultado se obtiene un bloque de 64 bits, el cual se lee de izquierda a derecha, de manera que el primer bit es cero. Seguidamente, el bloque de bits se separa en dos bloques de 32 bits cada uno, denominndolos, mitad izquierda L0 y la mitad derecha R0:
0 1 0 33 1 2 1 34 0 3 0 35 1 4 1 36 0 5 0 37 1 6 1 38 0 7 1 8 0 9 1 10 L0 0 0 1 1 1 0 0 0 1 11 12 13 14 15 16 17 18 19 R0 1 0 0 0 0 0 0 1 0 43 44 45 46 47 48 49 50 51 0 20 0 52 0 21 0 53 0 22 0 54 0 23 1 55 0 24 1 56 0 25 0 57 1 26 1 58 0 27 0 59 1 28 0 60 0 29 1 61 0 30 0 62 1 1 31 32 0 1 63 64

0 1 0 0 39 40 41 42

Como ya se ha mencionado, DES opera con bloques de 64 bits y llaves de 56 bits, las cuales son almacenadas como bloques de 64 bits, pero, cada octavo bit es utilizado para revisin de paridad.

Anexo II

La llave La llave seleccionada es convertida a hexadecimal y binario:


Llave s a l a r r u e HEX 53 41 4C 41 52 52 55 45 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 Binario 1 0 0 0 0 1 0 0 1 0 1 0 1 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 1 1 0 0 1 1 0 1 0 0 1 1

Paso 1: Creacin de 16 sub-llaves, cada una con 48 bits de longitud, la cual es permutada de acuerdo a la siguiente tabla:
0 1 0 9 0 17 0 25 0 33 0 41 0 49 0 57 1 2 1 10 1 18 1 26 1 34 1 42 1 50 1 58 0 3 0 11 0 19 0 27 0 35 0 43 0 51 0 59 1 4 0 12 0 20 0 28 1 36 1 44 1 52 0 60 0 5 0 13 1 21 0 29 0 37 0 45 0 53 0 61 0 6 0 14 1 22 0 30 0 38 0 46 1 54 1 62 1 7 0 15 0 23 0 31 1 39 1 47 0 55 0 63 1 8 1 16 0 24 1 32 0 40 0 48 1 56 1 64

57 1 10 19 63 7 14 21

49 58 2 11 55 62 6 13

41 50 59 3 47 54 61 5

33 42 51 60 39 46 53 28

25 34 43 52 31 38 45 20

17 26 35 44 23 30 37 12

9 18 27 36 15 22 29 4

La llave de 64 bits es permutada, de acuerdo a la tabla que aparee arriba a la izquierda; en ella, el nmero 57 significa que el bit en la posicin 57 de la llave original ser el primer bit de la llave permutada K+, seguido por el bit en la posicin nmero 49, de manera que el bit ubicado en la posicin 4 de la llave original, ser el ltimo bit de la llave permutada.

Anexo II

La llave permutada K+ es:


0
1

0
2

0
3

0
4

0
5

0
6

0
7

0
8

1
9

1
10

1
11

1
12

1
13

1
14

1
15

1
16

0
17

0
18

0
19

0
20

0
21

0
22

0
23

0
24

0
25

1
26

1
27

1
28

0
29

0
30

1
31

1
32

0
33

0
34

0
35

1
36

1
37

1
38

0
39

0
40

0
41

1
42

0
43

0
44

0
45

0
46

0
47

0
48

0
49

1
50

0
51

0
52

0
53

0
54

0
55

1
56

Ahora, la llave K+ es dividida en mitades, denominando C0 a la mitad izquierda, y D0 a la mitad derecha. Con los valores de C0 y D0 definidos, se crean 16 bloques que generarn las 16 sub-llaves que se utilizarn en cada ronda, para ello se utiliza la siguiente tabla que indica el nmero de vuelta y desplazamiento, a la izquierda, que se realizar tomando como base el valor de C0 y D0, donde cada valor generado depender de su predecesor, es decir, C1 D1, depender de C0 D0, C2 D2 depender de C1 D1 y as sucesivamente.
0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 1 1 1 0 1 0 1 0 1 1 C0 1 D0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 1 1

Vuelta Bits desplazados

1 1

2 1

3 2

4 2

5 2

6 2

7 2

8 2

9 1

10 2

11 12 13 14 15 16 2 2 2 2 2 1

Tabla 7 Nmero de bits de C0 y D0 a desplazar en cada vuelta

Anexo II

Los valores generados son:


C0 D0 C1 C1 C2 D2 C3 D3 C4 D4 C5 D5 C6 D6 C7 D7 C8 D8 C9 D9 C10 D10 C11 D11 C12 D12 C13 D13 C14 D14 C15 D15 C16 D16 0 0 0 0 0 1 0 0 0 0 1 1 1 0 1 0 1 0 1 0 0 0 0 0 0 1 0 0 1 0 1 1 0 0 0 0 0 1 0 1 0 0 0 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 1 1 1 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 1 0 0 0 1 0 1 0 0 0 0 0 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 1 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 1 0 0 0 1 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 1 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 1 1 1 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 1 0 0 0 1 1 1 1 1 1 0 1 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 1 1 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 1 0 0 0 1 1 1 1 0 1 0 1 0 1 1 1 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 1 1 1 0 1 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 1 0 0 0 1 1 1 1 0 1 0 1 1 1 0 1 0 0 0 0 0 0 1 0 0 1 0 1 1 0 0 0 1 0 0 0 0 1 1 1 0 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 1 1 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 1 0 0 0 1 0 0 0 0 1 1 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 1 0 0 0 1 0 0 0 0 1 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 1 0 0 0 1 0 0 0 0 1 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 1 0 0 0 1 0 0 0 1 1 1 1 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 1 0 0 0 1 0 0 0 1 1 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 1 1 1 0 1 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 1 1 0 0 0 1 0 0 0 1 1 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 0 0 0 1 0 0 0 0 1 1 1 0 1 0 1 1 1 0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 0 0 0 0 0 1 0 0 0 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1

Se proceder a realizar la operacin compresin permutacin, la cual generar las 16 sub-llaves que sern utilizadas, junto a los bloques de texto, en cada una de las 16 vueltas del algoritmo. La siguiente tabla indica el orden de los bits que sern utilizados para generar las sub-llaves:
14 15 26 41 51 34 17 6 8 52 45 53 11 21 16 31 33 46 24 10 7 37 48 42 1 23 27 47 44 50 5 19 20 55 49 36 3 12 13 30 39 29 28 4 2 40 56 32

Anexo II

Para generar la primera sub-llave, k1, se utilizan los valores de C1D1 antes calculados, por ejemplo:
C1 D1 0 1 0 29 0 0 0 2 3 4 1 1 0 30 31 32 0 5 0 33 0 6 0 34 0 1 7 8 1 1 35 36 1 9 1 37 1 10 0 38 1 1 1 1 1 0 0 11 12 13 14 15 16 17 0 0 1 0 0 0 0 39 40 41 42 43 44 45 0 18 0 46 0 19 0 47 0 20 0 48 0 21 1 49 0 22 0 50 0 23 0 51 0 24 0 52 1 25 0 53 1 26 0 54 1 27 1 55 0 28 0 56

k1
1
14

0
17

1
11

0
24

0
1

0
5

0
3

0
28

1
15

0
6

0
21

1
10

0
23

0
19

1
12

0
4

1
26

1
8

0
16

0
7

1
27

0
20

1
13

0
2

Para generar la segunda sub-llave k1 se utilizan los valores de C2D2, as


1 41 0 52 1 31 1 37

0 47 1 55

1 30

0 40

0 51

0 45

0 33

0 48

0 44

1 49

0 39

0 56

0 34

0 53

0 46

0 42

0 50

1 36

0 29

0 32

k2
C2 D2 0 1 1 29 0 2 1 30 0 3 0 31 0 4 0 32 0 5 0 33 0 1 1 1 6 7 8 9 1 1 1 0 34 35 36 37 1 1 1 1 1 0 0 0 0 10 11 12 13 14 15 16 17 18 0 0 1 0 0 0 0 0 0 38 39 40 41 42 43 44 45 46 0 19 0 47 0 20 1 48 0 21 0 49 0 22 0 50 0 23 0 51 1 24 0 52 1 25 0 53 1 26 1 54 0 27 0 55 0 28 0 56

1 14
0 41

0 17
0 52

1 11
0 31

1 24
0 37

0 1
0 47

0 5
0 55

0 3

0 28
1 30

0 15
1 40

0 6
0 51

0 21
0 45

1 10
0 33

0 23
1 48

0 19

1 12
0 44

0 4
0 49

1 26
0 39 0 56

1 8
1 34

0 16
0 53

1 7
0 46

0 27
0 42 0 50

0 20
1 36

1 13
1 29

0 2
0 32

Anexo II

Al realizar el proceso anterior con cada uno de los valores de C1D1,..., C16D16, se obtienen las 16 sub-llaves que sern utilizadas en cada una de las 16 vueltas del algoritmo.
1 2 3 4 5 6 7 8 9 10 11 12 13 K1 k2 k3 K4 K5 K6 K7 K8 K9 K10 K11 K12 K13 K14 K15 K16 1 0 1 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 1 1 1 1 0 1 0 0 0 1 0 1 1 1 1 0 0 1 1 0 0 1 0 0 0 1 1 1 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 1 0 0 0 1 1 0 1 1 1 0 0 1 0 1 0 1 1 1 1 0 1 0 0 1 1 1 0 1 0 0 0 0 1 1 0 0 1 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 0 0 0 0 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0 1 1 1 1 1 0 0 0 0 14 0 0 0 0 1 0 0 0 0 0 1 1 1 1 0 0 15 1 1 1 0 0 0 0 1 1 0 0 0 0 1 1 1 16 0 0 0 1 1 1 1 0 0 0 0 0 1 0 0 0 17 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 1 18 19 20 21 22 23 24 25 26 1 1 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 1 1 1 1 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 1 0 1 1 0 0 0 0 1 0 1 0 1 1 0 0 0 0 0 0 0 0 27 1 0 0 1 0 0 0 0 0 0 1 0 0 1 0 1 28 1 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 29 0 0 0 0 0 0 1 0 0 1 1 0 1 0 0 0 30 1 0 1 0 0 1 0 0 1 0 0 0 1 0 0 0 31 32 33 34 35 36 37 38 39 1 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 1 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 0 40 0 0 1 0 1 1 0 1 0 0 0 0 0 0 0 1 41 0 1 1 0 1 0 0 0 0 0 0 0 0 1 0 0 42 0 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 43 0 0 1 0 0 1 0 1 0 0 1 0 0 0 0 0 44 45 46 47 48 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 0 1 0 1 0 1 1 0 0 0 0 0 0 1 1 1 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1

Luego de generadas las 16 sub-llaves se inicia el procesamiento de los bloques de texto claro. Paso 2: Cifrado de los bloques de 64 bits de datos Se ejecutar la funcin permutacin expansin para luego realizar la permutacin inicial (PI) de todos los bits. Se reordenarn los bits de acuerdo al orden especificado en la tabla que abajo se presenta.
58 60 62 64 57 59 61 63 50 52 54 56 49 51 53 55 42 44 46 48 41 43 45 47 34 36 38 40 33 35 37 39 26 28 30 32 25 27 29 31 18 20 22 24 17 19 21 23 10 12 14 16 9 11 13 15 2 4 6 8 1 3 5 7

Anexo II

IP
0 1 0 33 1 2 1 34 0 3 0 35 1 4 1 36 0 5 0 37 1 6 1 38 0 7 1 8 0 9 1 10 L0 0 0 1 1 1 0 0 0 1 11 12 13 14 15 16 17 18 19 R0 1 0 0 0 0 0 0 1 0 43 44 45 46 47 48 49 50 51 0 20 0 52 0 21 0 53 0 22 0 54 0 23 1 55 0 24 1 56 0 25 0 57 1 26 1 58 0 27 0 59 1 28 0 60 0 29 1 61 0 30 0 62 1 1 31 32 0 1 63 64

0 1 0 0 39 40 41 42

0 57 1 58

0 49 1 50

0 41 0 42

0 33 1 34

0 25 1 26

0 17 0 18

0 9 1 10

0 1 1 2

0 59 0 60

0 51 0 52

1 43 0 44

0 35 1 36

0 27 1 28

1 19 0 20

0 11 0 12

0 3 1 4

1 61 0 62

0 53 0 54

0 45 0 46

0 37 1 38

0 29 0 30

0 21 0 22

1 13 1 14

0 5 1 6

0 63 1 64

1 55 1 56

0 47 0 48

0 39 1 40

1 31 1 32

0 23 0 24

1 15 0 16

0 7 1 8

El resultado obtenido anteriormente se divide en mitades, asignndoles R0 a la mitad izquierda y L0 a la mitad derecha:
R0 L0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 0 0 0 1 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 1 1 1 0 1 0 1 1 0 0 1 0 1 1 0 0 0 1 1 0

Ahora se inician las 16 iteraciones del algoritmo, utilizando la funcin F, que operar los bloques de 32 bits y las sub-llaves de 48 bits, para producir un bloque de 32 bits. Como resultado de la ltima vuelta se obtendr el valor L16R16 . Eso quiere decir que en cada iteracin, se tomarn los 32 bits del resultado anterior, para tomarlos como los 32 bits de la siguiente vuelta. Se utilizar la siguiente frmula: Ln = Rn-1 Rn = Ln-1 + f (Rn-1,Kn) De manera que para la primera vuelta, n = 1:

Anexo II

R = L + f (R ,K1)

K 101000001001001011001010101101100000010000000100 01001111011001 L1 =110110110001100100 R1 = L0 + f(R0,K1) Para calcular f, se expande el bloque R0 , partiendo de 32 bits, se generarn 48, utilizando la tabla de expansin, E, abajo presentada:
32 6 12 16 28 1 7 13 17 29 2 8 12 18 28 3 9 13 19 29 4 8 14 20 30 5 9 15 21 31 4 10 16 20 32 5 11 17 21 1

Al resultado generado por la tabla anterior, se le llama E(R0). Los bits ordenados de R0 son:
1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1

L =R

R0

1 1

1 2

0 3

1 4

1 5

0 6

1 7

1 8

0 9

0 10

E(R0) 1 1 1 0 1 1 1 1 0 1

1
11

0
12

1
13

0
14

0
15

0
16

1
17

1
18

1
19

1
20

0
21

0
22

1
23

1 0
24

1 1
25

1 0
26

0 0
27

1 0
28

1 1
29

0 0
30

0 1
31

1 0
32

0
33

1
34

1
35

1
36

1
37

1
38

1
39

0
40

1
41

1
42

1
43

1
44

0
45

0
46

1
47

1
48

Anexo II

Es importante observar, que el bloque original de 4 bits ha sido expandido a un bloque de 16 bits.
R0 1 1 1 2 0 3 1 4 1 5 0 6 1 7 1 8 0 9 0 10 0 11 1 12 1 13 0 14 0 15 1 16 0 17 0 18 0 19 1 20 0 21 0 22 1 23 1 24 1 25 1 26 0 27 1 28 1 29 0 30 0 31 1 32

Ahora, se aplicar la funcin XOR a la salida anterior R0 con las sub-llaves anteriormente creadas, Kn XOR E(Rn-1). Para el caso actual K1 XOR E(R0): K1 = 101000001001001011001010101101100000010000000100 E(R0) = 111011110110100011110010100010100111111011110011 K1 XOR E(R0) = 011000 010001 011110 111010 100001 100110 010100 100111
K1 1 0 1 0 0 0 0 0 1 0 E(R0) 1 1 1 0 1 1 1 1 0 1 XOR 0 1 0 0 1 1 1 1 1 1 0 1 1 1 0 1 0 1 1 0 0 0 1 0 1 0 0 0 1 1 0 1 1 0 0 1 1 0 1 1 1 0 1 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 0 1 1 0 1 0 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 1 1 0 1 1 0 1 1 0 1 1 1 1 0 0 1 1 0 0 1 0 1 1 0 1 1 0 1 1 0 1 1 0 0 0 1 0 1 0 1 1 0 1 1

An no se finaliza con las operaciones de la funcin F. Hasta este punto, se ha expandido R0 de 32 a 48 bits, utilizando la tabla de extensin, se ha aplicado XOR a dicho resultado con la llave. El resultado obtenido se muestra en la tabla siguiente, en grupos de seis bits.
B1 B2 B3 B4 B5 B6 B7 B8
0 1 1 1 0 0 1 1 1 1 0 1 0 0 0 1 0 1 1 1 1 0 1 0 0 1 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 1

Anexo II

A continuacin se har uso de las tablas de sustitucin. Cada grupo de seis bits de la tabla anterior proporcionar una direccin en una caja de sustitucin diferente. De manera que, los ocho grupos de seis bits con los que actualmente contamos, sern transformados en ocho grupos de cuatro bits, es decir, 32 bits. La frmula a utilizar ser: S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8), donde Sn son las cajas de sustitucin. Donde Si(Bi) se refiere a la salida de las cajas de sustitucin. Cada caja de sustitucin toma bloques de 6 bits como entrada y genera bloques de 4 bits de salida. El proceso se describe a continuacin: Sea S1 la primera caja de sustitucin y B1 el primer bloque de seis bits, S1(B) se determina:

El primer y ltimo bit de B representan, en base 2, un nmero decimal, en un rango de cero a tres, o de 00 a 11 en binario, a este nmero se le denomina i. Los cuatro bits restantes, de B, representan, en base 2, un nmero decimal, de cero a quince, a este nmero se le denomina j.

En las tablas de sustitucin se busca el valor dado por el par ordenado (i,j), el cual ser la salida, en decimal, generada por cada tabla, que posteriormente ser convertida a binario.
Primer ltimo Nmero Bit Bit de fila 0 1 1 1 1 3 1 0 2 1 0 2 0 1 1 0 1 1 1 1 3 1 1 3 Bits Nmero de Restantes Columna 1 0 0 1 9 1 1 1 1 15 0 1 0 0 4 1 1 0 0 12 0 1 1 1 7 0 0 1 1 3 0 1 1 1 7 1 0 1 1 11

B1 B2 B3 B4 B5 B6 B7 B8

0 1 1 1 0 0 1 1

1 1 0 1 0 0 0 1

0 1 1 1 1 0 1 0

0 1 0 0 1 1 1 1

1 1 0 0 1 1 1 1

1 1 0 0 1 1 1 1


10




 
  

En la tabla anterior podemos observar los valores (i,j) que se utilizarn para cada una de las cajas de sustitucin.

11








  
  
 

 
 




 




 

 
 









 

  "        









 
   

 

  
 


 

  






 



 



 


   








 


 





 


                     !                 










 



     

Anexo II

Para la primera vuelta, se obtuvieron los siguientes resultados, de las cajas de sustitucin:

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) = 1010 1111 0011 0001 0110 1111 1110 1110

Para la ltima etapa de la funcin F es hacer la permutacin P del resultado generado por las cajas de sustitucin, para as obtener el valor F. La frmula a utilizar es la siguiente:

12

  







 # 







 !


 


 
   

 


 



 

 


  




    


 



 

 
  
 
 
  

  
 
 
    
       #!      





 

 

      









 

  

 
  

    
     # $   

Anexo II

Anexo II

f = P(S1(B1)S2(B2)...S8(B8)). La permutacin P genera 32 bits de salida de una entrada de tambin 32 bits. La siguiente tabla define la permutacin P:
16 29 1 5 2 32 19 22 7 12 15 18 8 27 13 11 20 28 23 31 31 3 30 4 21 17 26 10 10 9 6 25

1 0 1 0 1 1 1 1 0 0

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) 1 1 0 0 0 1 1 0 1 1 1 1 1 1 0 1

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

13

Anexo II

Luego de realizada la permutacin, se obtiene:

1 1 1 1 1 1 1 1
16 7 20 21 29 12 28 17

1
1

1
5

0
2

1
8

1
3

0
9

1
6

0 0
4 25

15 23 26

18 31 10

31 10 32 27

19 13 30

22 11

11111111101110000100111010111100

En la siguiente vuelta, se utilizar L2 = R1, el cual es el bloque que se acaba de obtener, y entonces, se deber calcular R2 =L1 + f(R1, K2), y as sucesivamente para el resto de vueltas. Al final de las 16 vueltas se tendrn los bloques L16 y R16. A los cuales se les invierte el orden, para obtener R16L16 y aplicar la permutacin final, tal como indica la siguiente tabla:
40 39 38 37 36 35 34 33 8 7 6 5 4 3 2 1

&%

R1 = L0 + f(R0 , K1 ) R1 = 01010101010011100010000001010011 11111111101110000100111010111100 ----------------------------------------------------1010101011100110010011101111111 R1 =1010101011100110010011101111111

)*+'(
48 47 46 45 44 43 42 41 16 56 15 55 14 54 13 53 12 52 11 51 10 50 9 49 24 64 23 63 22 62 21 61 20 60 19 59 18 58 17 57 32 31 30 29 28 27 26 25

Para el proceso de descifrado, se deber hacer el proceso anterior, invirtiendo el orden de las sub-llaves aplicadas.

14

Anexo III

Tabla comparativa entre cifrado de llave secreta y cifrado de llave pblica

Llave secreta Gestin de claves Longitud y universo de llaves81 Vida de las llaves82 El nmero de llaves a memorizar es muy elevado La llave suele ser del orden de las centenas de bits Muy corta. Normalmente se usa una por sesin, lo que implica una vida de segundos o minutos

Llave pblica

Autenticacin83

Velocidad84

Usos

Solo es necesario memorizar la llave privada del emisor La llave suele ser del orden de los miles de bits Larga. Se aprovecha que es entregada y gestionada por un tercero Al haber una clave pblica y Se puede autenticar al mensaje, otra privada, es factible la pero no al emisor de forma autenticacin del mensaje y el sencilla y clara emisor Muy alta. Es el algoritmo que Muy baja. Se usa para el cifra el mensaje. Normalmente intercambio de llave y la firma del orden de cientos de digital. Normalmente es del orden de cientos de Kbytes/s Mbytes/s cuando se realiza en hardware cuando se realiza en hadrware La velocidad de cifra es muy Cuando usando la clave pblica alta y por ello se usa para del destino se hace el realizar la funcin de cifra de la intercambio de llaves de sesin informacin. Adems, con de una cifra con sistemas claves de slo unas centenas de simtricos (decenas a centenas bits se obtiene una seguridad de bits), o cuando al usar la razonablemente alta pues su no clave privada de origen, se linealidad y algoritmo hace que firma digitalmente un resumen en condiciones convencionales (decenas a centenas de bits) del el nico ataque que puede mensaje obtenido con una prosperar sea el de la fuerza funcin hash. bruta.

En cuanto al espacio de claves, no son comparables los sistemas simtricos con los asimtricos. Para atacar un sistema asimtrico no se buscar en todo el espacio de llaves como debera hacerse en los sistemas simtricos. 82 En cuanto a la vida de una llave, en los sistemas simtricos sta es muchsimo menor que la de las usadas en los asimtricos. La llave de sesin es aleatoria, en cambio la asimtrica es propia del usuario. 83 Los sistemas simtricos tienen una autenticacin ms pesada y con una tercera parte de confianza. Los asimtricos permiten una firma digital verdadera, eficiente y sencilla. L los sistemas simtricos son de cien a mil veces ms rpidos que los asimtricos. En software la velocidad de cifra es ms baja.

81

Anexo IV

Tabla comparativa de estructuras de algunos algoritmos de cifrado de bloques

Algoritmo Lucifer DES IDEA Madryga85 Blowfish 3-DES Skipjack Rijndael

Bloque de datos (bits) 128 64 64 64 64 64 64 128

Longitud de llave (bits) 128 56 128 64 Variable 168 80 128 o ms

Vueltas 16 16 8

16 16x3 32 Flexible

Las dimensiones del bloque de datos y la llave de Madryga pueden variar, pero desde su lanzamiento se recomend estandarizarlas a 64 bits con el fin de buscar cierta compatibilidad con el DES. En cuanto a las vueltas, su proceso de cifrado consta de dos ciclos anidados, de los cuales el externo consta de 8 iteraciones del interno, que a su vez consta de 8 operaciones sobre el bloque de datos.

85

Anexo V

Tabla comparativa del rendimiento de algunos algoritmos de cifrado de bloque

Algoritmo Lucifer DES IDEA Madryga Blowfish 3-DES Skipjack88 Rijndael

Velocidad86 Media Media (35Kb/s) Media (53Kb/s) Media-alta Alta (110-182 Kb/s) Baja (12 Kb/s) Media-alta Alta

Requerimientos de implementacin87 Razonables Razonables Razonables Bajos Bajos Altos Bajos Razonables

Vulnerabilidad Media Media Media Alta Baja Baja Baja Baja

En los casos en los que se indica un nmero, el valor ha sido tomado de Pastor, J., Sarasa, M. Criptografa digital. Fundamentos y aplicaciones. Prensas Universitarias de Zaragoza. Zaragoza, Espaa. 1998. Segn refieren estos autores, las pruebas que arrojaron los valores que se indican fueron efectuadas en computadoras con procesadores 486. Como es de entender, las velocidades de procesamiento de los microprocesadores con los que actualmente cuentan las computadoras, exceden por mucha las de los 486, de manera que los valores que se indican se presentan nicamente para fines de comparacin. 87 Este aspecto se refeire a cun fcil es implementar en hardware y/o software cada uno de los algoritmos. 88 Est patentado y su implementacin nicamente est autorizada en hardware; hay disponibles implementaciones en circuitos integrados cuyo precio no suele ser elevado.

86

Anexo VI

El Modelo OSI
El modelo fue iniciado en 1974 por IBM, para redes de computadoras, era conocido como SNA (System Network Architectura), pero su versin definitiva surgi en 1984, luego de ser perfeccionado por la ISO (International Standards Organization) entidad que le cambi el nombre a OSI (Open Systems Interconnection). La finalidad del modelo OSI es permitir la cooperacin entre sistemas abiertos. Un sistema abierto es aquel conjunto de computadoras, material lgico, perifricos, etc., que forman un todo autnomo capaz de procesar y/o transferir informacin. El modelo OSI est compuesto por 7 capas, entre las cuales se realiza una comunicacin vertical denominada Servicio. Se realiza tambin una comunicacin horizontal entre distintos sistemas abiertos lo que se denomina Protocolo. Cada capa ofrece un servicio a la capa inmediatamente superior y requiere los servicios de la inferior. Este modelo no es una arquitectura de red en s mismo, dado que no se especifican en forma exacta los servicios y protocolos que se utilizarn en cada capa, sino que solamente se indica la funcionalidad de cada una de ellas.

Emisor Capa 7: Aplicacin Capa 6: Presentacin Capa 5: Sesin Capa 4: Transporte Capa 3: Red Capa 2: Enlace de datos Capa 1: Fsica
Protocolo de programa de aplicacin

Receptor Programa de aplicacin Utilidades del sistema Sistema Operativo SO: Gestor de Red SO: Gestor de Red Hardware Hardware

Protocolo de Presentacin

Protocolo de Sesin

Protocolo de Capa de Transporte

Protocolo de Red

Protocolo de Enlace de Datos

Conexin Fsica

Tabla 1. Capas del modelo OSI

Anexo VI Dispositivos y protocolo

No
7 6 5 4 3 2 1

Capa
Aplicacin Presentacin Sesin Transporte Red Enlace Fsico

Funcin

Proporciona comunicacin entre dos procesos de X.400 aplicacin. Interpretacin de los datos Compresin, cifrado Dilogos de control Integridad de los mensajes Establece las comunicaciones y determina el camino que tomarn los datos en la red Divide el flujo de bits en paquetes, intercambindolos mediante el uso de protocolos Transmisin del flujo de bits a travs del medio Gateway Gateway. IP, IPX Router IP, IPX Puentes (Bridges) HDLC y LLC Cables, tarjetas, hubs

Tabla 2. Capas, funciones, dispositivos y protocolos del modelo OSI

Los tres niveles inferiores estn orientados al acceso del usuario y comunicaciones de datos; el cuarto nivel al transporte extremo a extremo de la informacin, y los tres superiores a la aplicacin.

Capa Fsica 1
Esta capa se ocupa de la transmisin de bits a lo largo de un canal de comunicacin, y adems garantiza que un bit que se manda llegue con el mismo valor que se envi. En esta capa se encuentran los medios materiales para la comunicacin como las placas, cables, conectores, es decir los medios mecnicos y elctricos. Capa de Enlace 2 Es la capa que traslada los mensajes desde y hacia la capa fsica a la capa de red. Especifica como se organizan los paquetes de datos cuando se transmiten en un medio particular. Se encarga tambin de la deteccin y control de errores ocurridos en la capa fsica, del control del acceso a dicha capa, la integridad de los datos y la fiabilidad de la transmisin. Capa de Red 3 Esta capa se encarga de la transmisin de los paquetes, y de encaminar cada uno en la direccin adecuada. Adems obtiene los parmetros de calidad del servicio y notificacin de errores.

Capa de Transporte 4
La capa de transporte se encarga de garantizar la fiabilidad del servicio, describe la calidad y naturaleza del envo de datos. Para ello divide el mensaje recibido de la capa de sesin en paquetes, los numera correlativamente y los entrega a la capa de red para su envo.

Anexo VI

Capa de Sesin 5
Esta capa es una extensin de la capa de transporte que ofrece control de dilogo y sincronizacin, aunque son pocas las aplicaciones que hacen uso de ella, por ejemplo, las comunicaciones de Internet no la utilizan. Uno de los servicios de esta capa es la gestin y sincronizacin de los datos intercambiados entre los usuarios de una sesin. Capa de Presentacin 6 sta permite la representacin de la informacin que las entidades de aplicacin comunican o mencionan en su comunicacin. Es la responsable de que la informacin se entregue al proceso de aplicacin de manera que pueda ser entendida y utilizada. Es en esta capa en la cual se hace uso de algoritmos criptogrficos. Capa de Aplicacin 7 La de aplicacin es el medio por el cual los procesos de aplicacin acceden al entorno OSI. Por ello, sta capa no interacta con una superior a ella. La transferencia de archivos es una de las aplicaciones ms comunes de este nivel. Cifrado en la capa de Presentacin El nivel de presentacin se ocupa de la sintaxis, es decir la representacin de los datos extremo a extremo. As pues es responsable de alcanzar un acuerdo en los cdigos y formatos que se usarn en el intercambio de datos de aplicacin durante una sesin, as como tambin del formateo de datos para su correcta salida a una impresora o a una determinada pantalla. La capa de presentacin trata todos los problemas relacionados con la representacin de los datos transmitidos. Por lo tanto incluye los aspectos de: conversin, cifrado y compresin de datos. El cifrado, no es un elemento que pertenece en exclusiva a la capa de presentacin sino que se puede encontrar en otras capas. Cifrado de Enlace En este caso el cifrado se realiza en la capa fsica. Para ello se utiliza una llave en cada computadora participante de la comunicacin, y el medio fsico, de manera que cada bit que sale de la mquina emisora sufre un proceso de cifrado, y a cada bit que entra en la mquina receptora se le practica el proceso inverso. Cifrado de Transporte Si se introduce el cifrado en la capa de transporte se ocasiona que el cifrado se realice en la sesin completa, esto ocasionar una sobrecarga de trabajo de cifrado que en muchas ocasiones ser innecesario para algunos de los datos cifrados.

Anexo VI Cifrado de Presentacin Es la mejor solucin ya que el cifrado es sufrido slo por aquellas partes de los datos que sean consideradas necesarias, consiguiendo de este modo que la sobrecarga del proceso de cifrado sea menor.

Anexo VII SSL - Secure Sockets Layer El protocolo SSL fue desarrollado por Netscape, y su primera versin se hizo pblica en 1994, la cual nunca fue implementada. Unos pocos meses despus surgi SSL 2.0 una versin mejorada de su antecesora, la cual se implement a pesar de los mltiples reportes acerca de sus errores de diseo. En noviembre de 1995 Netscape public la especificacin para SSL 3.0. El objetivo de Netscape era crear un canal de comunicaciones seguro entre un cliente y un servidor que fuese independiente del sistema operativo usado por ambos y que se beneficiara de forma dinmica y flexible de los nuevos esquemas de cifrado disponibles. El protocolo puede ser implementado con llaves de sesin de en 40 128 bits. El concepto de llave de sesin se refiere al par de llaves que un servidor y un cliente comparten, las cuales son utilizadas en el proceso de cifrado en cada sesin de SSL. Entre ms larga sea la llave de sesin, ms difcil ser romper el cifrado de la sesin SSL y por lo tanto leer la informacin transmitida. SSL fue diseado como un protocolo seguro de propsito general y no teniendo en mente las necesidades especficas del comercio electrnico. El protocolo toma ventaja de los algoritmos de llave privada de y de los da llave pblica. Con los de llave privada autentica a los clientes y servidores, y con los de llave privada cifra los datos de aplicacin. SL opera entre la capa de transporte y la de sesin del modelo OSI y est formado, a su vez, por dos capas y cuatro protocolos: Registro, Handshake, Alerta y Chage Cipher Spec. El protocolo de registro (Record Protocol) se encarga de encapsular el trabajo de los elementos de la capa superior, construyendo un canal de comunicaciones entre los dos extremos que participan en la comunicacin. El protocolo Handshake es el encargado de intercambiar la llave que se utilizar para crear un canal seguro mediante un algoritmo eficiente de cifrado simtrico. Tambin es responsabilidad de este protocolo coordinar los estados de ambos extremos de la transmisin. El protocolo de Alerta es el encargado de sealizar problemas y errores concernientes a la sesin SSL establecida. El protocolo Change Cipher Spec est formado por un nico mensaje consistente en un nico byte de valor 1 y se utiliza para notificar un cambio en la estrategia de cifrado. SSL trabaja de la siguiente forma: 1. Se intercambia una clave mediante un algoritmo de cifrado asimtrico. Mediante esa clave se establece un canal seguro utilizando para ello un algoritmo simtrico previamente negociado. 2. Se toman los mensajes a ser transmitidos, se fragmentan en bloques, se comprimen, se aplica un algoritmo hash para obtener un resumen que es concatenado a cada uno de los bloques comprimidos para asegurar la integridad de los mismos, se realiza el cifrado y se envan los resultados.

Anexo VII SSL comparado con S-HTTP, PCT, TLS e IPSec Los protocolos S-HTTP, PCT, TLS e IPSec fueron desarrollados, al igual que SSL, como protocolos de carcter general para asegurar la informacin transmitida a travs de un canal de comunicaciones. Todos siguen el mismo esquema: en primer lugar se invoca un mecanismo para, mediante criptografa asimtrica, intercambiar una clave secreta de longitud suficiente y, en segundo lugar, se utiliza esta clave para cifrar la informacin transmitida mediante un algoritmo simtrico mucho ms eficiente. S-HTTP, Secure http El protocolo Secure HTTP o S-HTTP fu posiblemente el primer protocolo de seguridad implementado para Internet. Desarrollado por Enterprise Integration Technologies Inc. (EIT) junto con RSA Data, se hizo pblico en forma de borrador en Junio de 1994. S-HTTP es una extensin del protocolo HTTP cuya finalidad es la transmisin de datos de forma segura sobre la web entre un cliente y un servidor. Trabaja sobre la capa de aplicacin cifrando el contenido de los mensajes entre las dos mquinas usando para ello un sistema de cifrado basado en un par de llaves pblica y privada. S-HTTP es un protocolo muy flexible que permite que las opciones de firma y cifrado se usen de forma opcional. La principal diferencia, en cuanto a diseo, con SSL es que S-HTTP fue desarrollado para la transmisin de mensajes individuales de forma segura mientras que SSL se dise para establecer una conexin segura permanente entre dos computadoras. Puesto que S-HTTP es un protocolo situado en la capa de aplicacin es capaz de proporcionar caractersticas de no repudio de mensajes de forma individualizada a travs de las firmas digitales, mientras que SSL, un protocolo de bajo nivel que opera en la capa de transporte, no lo hace. S-HTTP, sin embargo, se defini como una extensin de HTTP y sus servicios slo estn disponibles para este protocolo. S-HTTP es ms flexible que SSL. Cada aplicacin puede configurar el nivel de seguridad que necesita permitiendo mantener ms conexiones o responder ms rpidamente. PCT, Private Communication Technology PCT, Private Communication Technology, fue la respuesta de Microsoft a la creacin de Netscape. La primera versin beta fue lanzada al mercado en septiembre de 1995. PCT fue diseado para soportar transacciones comerciales de forma segura y espontnea y, al igual que SSL, opera en la capa de transporte siendo, independiente de la aplicacin que lo maneja. PCT incorpora mecanismos de clave pblica/privada de RSA para cifrado y autenticacin de ambos extremos de la comunicacin.

Anexo VII Las principales diferencias entre PCT y SSL estn en la fase de negociacin: Uno de los ms novedosos mecanismos que aporta PCT es que separa las negociaciones y mecanismos de autenticacin y cifrado. El amplio uso del SSL ha dejado a este nuevo protocolo sin ninguna posibilidad de competencia. En Mayo de 2000 y como ltimo intento, Microsoft anunci las especificaciones para una versin convergente de SSL y PCT que vendra a llamarse STLP (Secure Transport Layer Protocol) de la cual nunca ms se ha publicado algo y que no ha llegado a tener ninguna implementacin conocida. Transport Layer Security, TLS TLS se hizo pblico en enero de 1999. Se construy a partir de las especificaciones de SSL 3.0 y a veces se le denomina como SSL 3.1. Las principales diferencias entre SSL 3.0 y TLS 1.0 son las siguientes: o En SSL 3.0 si el servidor solicita un certificado al cliente para que se autentique, este debe de responder con l o con un mensaje de alerta advirtiendo de que no lo tiene. En TLS 1.0 si el cliente no posee certificado no responde al servidor de ninguna forma a este requerimiento. Clculo de las claves de sesin. El mecanismo utilizado para construir las claves de sesin es diferente en TLS 1.0. TLS utiliza un mecanismo diferente y ms seguro en el clculo de las funciones resumen. TLS 1.0 introduce nuevos cdigos de alerta no contemplados por SSL 3.0 TLS 1.0 introduce un nuevo mecanismo en el relleno de los bloques para frustrar ataques basados en el anlisis de la longitud de los mensajes.

o o o o IPSec

IPSec proporciona autenticacin, confidencialidad e integridad de datos, trabaja en la capa de red y, gracias a su posicin en el modelo OSI, es capaz de trabajar con UDP y otros protocolos de la capa de transporte, contrariamente a SSL. Por las razones anteriores algunas personas a IPSec como el verdadero sustituto de SSL mientras que otras insisten en que ambos coexistirn juntos puesto que ofrecen soluciones ptimas para diferentes problemas. Problemas con Otros Protocolos de la Capa de Transporte SSL se encuentra entre la capa de transporte y la de sesin y soporta, de forma transparente, todos los protocolos que se sitan sobre l mismo: HTTP, FTP, IMAP, LDAP, etc. El protocolo SSL no fue diseado para trabajar con otros protocolos de la capa de transporte diferentes de TCP y, sobre todo, no orientados a conexin, como UDP, y otros que han cado en desuso como es el caso de IPX.

Anexo VIII Aplicacin para cifrado y descifrado de datos Como complemento de la informacin presentada en el presente trabajo se desarroll una aplicacin de software, la que se denomin Kriptonita, que muestra el proceso de cifrado y descifrado de informacin, para el desarrollo de los algoritmos de cifrado se utiliz lenguaje C y para la pantalla de captura de datos se utiliz Microsoft Visual Studio.Net Para la utilizacin de Kriptonita se debern seguir los siguientes pasos:

1. Ingreso de mensaje a cifrar

2. Ingreso de la llave a utilizar para cifrar el mensaje

7. Para efectos de comprobacin, se descifrar el mensaje cifrado obtenido del paso No 6.

3. Seleccin del algoritmo a utilizar para el proceso de cifrado

8. Inicio del proceso de descifrado

4. Inicio del proceso de cifrado

8. Presentacin del proceso de descifrado

5. Presentacin del proceso de cifrado

8. Mensaje descifrado

6. Mensaje cifrado 9. Borra los campos de entrada a excepcin del campo correspondiente al mensaje a cifrar, en caso que el usuario desee cifrar el mismo mensaje con un algoritmo diferente

Figura 1 Descripcin de la pantalla de ingreso de Kriptonita

Anexo VIII Ejemplos de utilizacin A continuacin algunos ejemplos de utilizacin de Kriptonita. Es importante mencionar que la llave es complementada con ceros, segn la longitud de la llave requerida por el algoritmo seleccionado.

Figura 2 Ejemplo de cifrado utilizando IDEA

Figura 3 Ejemplo de cifrado utilizando Rijndael

Anexo VIII

Figura 4 Ejemplo de cifrado utilizando Triple DES

Anexo VIII

Cdigo fuente de los algoritmos utilizados por Kriptonita


TRIPLE DES
#include <string.h> #include <stdlib.h> #include <stdio.h> #include <TripleDES.h> // Constantes internas #define KEYSETUP_ENCRYPTION #define KEYSETUP_DECRYPTION 0 1

// Prototipos de las rutinas soportadas void _expandPureDESKey(const WORD8*, WORD8*); void _keysetup(WORD8*, int, WORD32*); void _processBlock(WORD8*, WORD8*, WORD32*); WORD32 TripleDES_GetCipherInfo (CIPHERINFOBLOCK* pInfo) { WORD8* pSrc; WORD8* pDst; CIPHERINFOBLOCK tempinfo; WORD32 lI; // Preparacin de la informacin de contexto tempinfo.lSizeOf = pInfo->lSizeOf; tempinfo.lBlockSize = TRIPLEDES_BLOCKSIZE; tempinfo.lKeySize = TRIPLEDES_KEYSIZE; tempinfo.blOwnHasher = BOOL_FALSE; tempinfo.lInitDataSize = TRIPLEDES_BLOCKSIZE; tempinfo.lContextSize = sizeof(TRIPLEDESCTX); tempinfo.bCipherIs = CIPHER_IS_BLOCKLINK; // Copia informacin pSrc = (WORD8*) &tempinfo; pDst = (WORD8*) pInfo; for (lI = 0; lI < tempinfo.lSizeOf; lI++) *pDst++ = *pSrc++; } return CIPHER_ERROR_NOERROR;

WORD32 TripleDES_SelfTest (void* pTestContext) { // Prueba el algoritmo para cifrar y descifrar // Valores de prueba fijos static WORD8 refkey[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }; static WORD8 plainBlock[8] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7 }; static WORD8 cipherBlock[8] = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d }; WORD8 workBlock[8]; WORD32 k[32];

Anexo VIII
int nI; // Cifrado del bloque de prueba _keysetup(refkey, KEYSETUP_ENCRYPTION, k); _processBlock(plainBlock, workBlock, k); // Textos cifrados iguales? for (nI = 0; nI < 8; nI++) if (workBlock[nI] != cipherBlock[nI]) return CIPHER_ERROR_INVALID; printf("\n\n test !!!\n"); // Descifrado del bloque de prueba _keysetup(refkey, KEYSETUP_DECRYPTION, k); _processBlock(workBlock, workBlock, k); // Textos claros iguales? for (nI = 0; nI < 8; nI++) { if (plainBlock[nI] != workBlock[nI]) return CIPHER_ERROR_INVALID; } return CIPHER_ERROR_NOERROR;

WORD32 TripleDES_CreateWorkContext (void* pContext, const WORD8* pKey, WORD32 lKeyLen, WORD32 lMode, void* pInitData, Cipher_RandomGenerator GetRndBytes, const void* pRndGenData) { TRIPLEDESCTX* pCtx; WORD32* pCBCIV; int nI; // Creacin de las tres llaves del DES partiendo de la llave original, ignorando el bit de paridad WORD8 deskey1[8]; WORD8 deskey2[8]; WORD8 deskey3[8]; _expandPureDESKey(pKey, deskey1); _expandPureDESKey(pKey + 7, deskey2); _expandPureDESKey(pKey + 14, deskey3); // Inicializacin de todas las llaves pCtx = (TRIPLEDESCTX*) pContext; if (lMode == CIPHER_MODE_ENCRYPT) { _keysetup(deskey1, KEYSETUP_ENCRYPTION, pCtx->k1); _keysetup(deskey2, KEYSETUP_DECRYPTION, pCtx->k2); _keysetup(deskey3, KEYSETUP_ENCRYPTION, pCtx->k3); } else { _keysetup(deskey1, KEYSETUP_DECRYPTION, pCtx->k1); _keysetup(deskey2, KEYSETUP_ENCRYPTION, pCtx->k2);

Anexo VIII
_keysetup(deskey3, KEYSETUP_DECRYPTION, pCtx->k3);

// Eliminacin de valores almacenados por las llaves for (nI = 0; nI < 8; nI++) { deskey1[nI] = 0; deskey2[nI] = 0; deskey3[nI] = 0; } // Vector IV para cifrado, en modo CBC pCBCIV = (WORD32*) pInitData; if (lMode == CIPHER_MODE_ENCRYPT) GetRndBytes((WORD8*) pCBCIV, 8, pRndGenData); //Asignacin del vector pCtx->lCBCLo = pCBCIV[0]; pCtx->lCBCHi = pCBCIV[1]; } return CIPHER_ERROR_NOERROR;

void TripleDES_ResetWorkContext (void* pContext, WORD32 lMode, void* pInitData, Cipher_RandomGenerator GetRndBytes, const void* pRndGenData) { TRIPLEDESCTX* pCtx = (TRIPLEDESCTX*) pContext; // Reinicio del vector IV en CBC WORD32* pCBCIV = (WORD32*) pInitData; if (lMode == CIPHER_MODE_ENCRYPT) GetRndBytes((WORD8*) pCBCIV, 8, pRndGenData); pCtx->lCBCLo = pCBCIV[0]; pCtx->lCBCHi = pCBCIV[1];

WORD32 TripleDES_DestroyWorkContext (void* pContext) { // Inicializacin de las variables de entorno int nI; WORD8* pClearIt = (WORD8*) pContext; for (nI = 0; nI < sizeof(TRIPLEDESCTX); nI++) pClearIt[nI] = 0x00; return CIPHER_ERROR_NOERROR; } void TripleDES_EncryptBuffer (void* pContext, const void* pSource, void* pTarget, WORD32 lNumOfBytes)

Anexo VIII
{

WORD32 lNumOfInts; WORD32 lI; WORD32* pInBuf = (WORD32*) pSource; WORD32* pOutBuf = (WORD32*) pTarget; TRIPLEDESCTX* pCtx = (TRIPLEDESCTX*) pContext; // Calculo de las palabras de 32 bits lNumOfInts = lNumOfBytes >> 2; // Algo para cifrar? if (lNumOfInts < 2) return; // Trabajando a travs de los bloques for (lI = 0; lI < lNumOfInts; lI+=2) { // Copia y encadena el bloque ms reciente pOutBuf[lI] = pInBuf[lI] ^ pCtx->lCBCLo; pOutBuf[lI + 1] = pInBuf[lI + 1] ^ pCtx->lCBCHi; // Cifrado del bloque _processBlock((WORD8*) &pOutBuf[lI], (WORD8*) &pOutBuf[lI], pCtx->k1); _processBlock((WORD8*) &pOutBuf[lI], (WORD8*) &pOutBuf[lI], pCtx->k2); _processBlock((WORD8*) &pOutBuf[lI], (WORD8*) &pOutBuf[lI], pCtx->k3); // Asignacin de valores al vector IV CBC pCtx->lCBCLo = pOutBuf[lI]; pCtx->lCBCHi = pOutBuf[lI + 1];

void TripleDES_DecryptBuffer (void* pContext, const void* pSource, void* pTarget, WORD32 lNumOfBytes, const void* pPreviousBlock) { WORD32 lNumOfInts; WORD32 lI; WORD32 lSaveCBCLo; WORD32 lSaveCBCHi; WORD32* pInBuf = (WORD32*) pSource; WORD32* pOutBuf = (WORD32*) pTarget; WORD32* pPrevBlock = (WORD32*) pPreviousBlock; TRIPLEDESCTX* pCtx = (TRIPLEDESCTX*) pContext; // Calculo del nmero de palabras de 32 bloques lNumOfInts = lNumOfBytes >> 2; // Algo para descifrar? if (lNumOfInts < 2) return; // Cargo de nuevo vector CBC IV, si es neceario if (pPreviousBlock != CIPHER_NULL) { pCtx->lCBCLo = pPrevBlock[0];

Anexo VIII
pCtx->lCBCHi = pPrevBlock[1];

// Trabajando a travs de los bloques for (lI = 0; lI < lNumOfInts; lI += 2) { lSaveCBCLo = pInBuf[lI]; lSaveCBCHi = pInBuf[lI + 1]; // Descifrado del bloque _processBlock((WORD8*) &pInBuf[lI], (WORD8*) &pOutBuf[lI], pCtx->k3); _processBlock((WORD8*) &pOutBuf[lI], (WORD8*) &pOutBuf[lI], pCtx->k2); _processBlock((WORD8*) &pOutBuf[lI], (WORD8*) &pOutBuf[lI], pCtx->k1); // Desencadenamiento del bloque ms reciente pOutBuf[lI] = pOutBuf[lI] ^ pCtx->lCBCLo; pOutBuf[lI + 1] = pOutBuf[lI + 1] ^ pCtx->lCBCHi; // Nuevo vector IV pCtx->lCBCLo = lSaveCBCLo; pCtx->lCBCHi = lSaveCBCHi;

} }

// Rutinas de implementacin // Constantes static WORD8 pc1[56] = { 56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 60, 52, 44, 36, 28, 20, 12, 4, 27, 19, 11, 3 }; static WORD8 totrot[16] = { 1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28 }; static WORD8 pc2[48] = { 13, 16, 10, 23, 0, 4, 2, 27, 14, 5, 20, 9, 22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1, 40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47, 43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31 }; static WORD16 bytebit[8] = { 0200, 0100, 040, 020, 010, 04, 02, 01 }; static WORD32 bigbyte[24] = {

Anexo VIII
0x800000L, 0x400000L, 0x200000L, 0x100000L, 0x80000L, 0x40000L, 0x20000L, 0x10000L, 0x8000L, 0x4000L, 0x2000L, 0x1000L, 0x800L, 0x400L, 0x200L, 0x100L, 0x80L, 0x40L, 0x20L, 0x10L, 0x8L, 0x4L, 0x2L, 0x1L

};

static unsigned long SP1[64] = { 0x01010400L, 0x00000000L, 0x00010000L, 0x01010404L, 0x01010004L, 0x00010404L, 0x00000004L, 0x00010000L, 0x00000400L, 0x01010400L, 0x01010404L, 0x00000400L, 0x01000404L, 0x01010004L, 0x01000000L, 0x00000004L, 0x00000404L, 0x01000400L, 0x01000400L, 0x00010400L, 0x00010400L, 0x01010000L, 0x01010000L, 0x01000404L, 0x00010004L, 0x01000004L, 0x01000004L, 0x00010004L, 0x00000000L, 0x00000404L, 0x00010404L, 0x01000000L, 0x00010000L, 0x01010404L, 0x00000004L, 0x01010000L, 0x01010400L, 0x01000000L, 0x01000000L, 0x00000400L, 0x01010004L, 0x00010000L, 0x00010400L, 0x01000004L, 0x00000400L, 0x00000004L, 0x01000404L, 0x00010404L, 0x01010404L, 0x00010004L, 0x01010000L, 0x01000404L, 0x01000004L, 0x00000404L, 0x00010404L, 0x01010400L, 0x00000404L, 0x01000400L, 0x01000400L, 0x00000000L, 0x00010004L, 0x00010400L, 0x00000000L, 0x01010004L }; static unsigned long SP2[64] = { 0x80108020L, 0x80008000L, 0x00008000L, 0x00108020L, 0x00100000L, 0x00000020L, 0x80100020L, 0x80008020L, 0x80000020L, 0x80108020L, 0x80108000L, 0x80000000L, 0x80008000L, 0x00100000L, 0x00000020L, 0x80100020L, 0x00108000L, 0x00100020L, 0x80008020L, 0x00000000L, 0x80000000L, 0x00008000L, 0x00108020L, 0x80100000L, 0x00100020L, 0x80000020L, 0x00000000L, 0x00108000L, 0x00008020L, 0x80108000L, 0x80100000L, 0x00008020L, 0x00000000L, 0x00108020L, 0x80100020L, 0x00100000L, 0x80008020L, 0x80100000L, 0x80108000L, 0x00008000L, 0x80100000L, 0x80008000L, 0x00000020L, 0x80108020L, 0x00108020L, 0x00000020L, 0x00008000L, 0x80000000L, 0x00008020L, 0x80108000L, 0x00100000L, 0x80000020L, 0x00100020L, 0x80008020L, 0x80000020L, 0x00100020L, 0x00108000L, 0x00000000L, 0x80008000L, 0x00008020L, 0x80000000L, 0x80100020L, 0x80108020L, 0x00108000L }; static unsigned long SP3[64] = { 0x00000208L, 0x08020200L, 0x00000000L, 0x08020008L, 0x08000200L, 0x00000000L, 0x00020208L, 0x08000200L, 0x00020008L, 0x08000008L, 0x08000008L, 0x00020000L, 0x08020208L, 0x00020008L, 0x08020000L, 0x00000208L, 0x08000000L, 0x00000008L, 0x08020200L, 0x00000200L, 0x00020200L, 0x08020000L, 0x08020008L, 0x00020208L,

10

Anexo VIII
0x08000208L, 0x00020200L, 0x00020000L, 0x08000208L, 0x00000008L, 0x08020208L, 0x00000200L, 0x08000000L, 0x08020200L, 0x08000000L, 0x00020008L, 0x00000208L, 0x00020000L, 0x08020200L, 0x08000200L, 0x00000000L, 0x00000200L, 0x00020008L, 0x08020208L, 0x08000200L, 0x08000008L, 0x00000200L, 0x00000000L, 0x08020008L, 0x08000208L, 0x00020000L, 0x08000000L, 0x08020208L, 0x00000008L, 0x00020208L, 0x00020200L, 0x08000008L, 0x08020000L, 0x08000208L, 0x00000208L, 0x08020000L, 0x00020208L, 0x00000008L, 0x08020008L, 0x00020200L

};

static unsigned long SP4[64] = { 0x00802001L, 0x00002081L, 0x00002081L, 0x00000080L, 0x00802080L, 0x00800081L, 0x00800001L, 0x00002001L, 0x00000000L, 0x00802000L, 0x00802000L, 0x00802081L, 0x00000081L, 0x00000000L, 0x00800080L, 0x00800001L, 0x00000001L, 0x00002000L, 0x00800000L, 0x00802001L, 0x00000080L, 0x00800000L, 0x00002001L, 0x00002080L, 0x00800081L, 0x00000001L, 0x00002080L, 0x00800080L, 0x00002000L, 0x00802080L, 0x00802081L, 0x00000081L, 0x00800080L, 0x00800001L, 0x00802000L, 0x00802081L, 0x00000081L, 0x00000000L, 0x00000000L, 0x00802000L, 0x00002080L, 0x00800080L, 0x00800081L, 0x00000001L, 0x00802001L, 0x00002081L, 0x00002081L, 0x00000080L, 0x00802081L, 0x00000081L, 0x00000001L, 0x00002000L, 0x00800001L, 0x00002001L, 0x00802080L, 0x00800081L, 0x00002001L, 0x00002080L, 0x00800000L, 0x00802001L, 0x00000080L, 0x00800000L, 0x00002000L, 0x00802080L }; static unsigned long SP5[64] = { 0x00000100L, 0x02080100L, 0x02080000L, 0x42000100L, 0x00080000L, 0x00000100L, 0x40000000L, 0x02080000L, 0x40080100L, 0x00080000L, 0x02000100L, 0x40080100L, 0x42000100L, 0x42080000L, 0x00080100L, 0x40000000L, 0x02000000L, 0x40080000L, 0x40080000L, 0x00000000L, 0x40000100L, 0x42080100L, 0x42080100L, 0x02000100L, 0x42080000L, 0x40000100L, 0x00000000L, 0x42000000L, 0x02080100L, 0x02000000L, 0x42000000L, 0x00080100L, 0x00080000L, 0x42000100L, 0x00000100L, 0x02000000L, 0x40000000L, 0x02080000L, 0x42000100L, 0x40080100L, 0x02000100L, 0x40000000L, 0x42080000L, 0x02080100L, 0x40080100L, 0x00000100L, 0x02000000L, 0x42080000L, 0x42080100L, 0x00080100L, 0x42000000L, 0x42080100L, 0x02080000L, 0x00000000L, 0x40080000L, 0x42000000L, 0x00080100L, 0x02000100L, 0x40000100L, 0x00080000L, 0x00000000L, 0x40080000L, 0x02080100L, 0x40000100L }; static unsigned long SP6[64] = { 0x20000010L, 0x20400000L, 0x00004000L, 0x20404010L, 0x20400000L, 0x00000010L, 0x20404010L, 0x00400000L,

11

Anexo VIII
0x20004000L, 0x00404010L, 0x00400000L, 0x20000010L, 0x00400010L, 0x20004000L, 0x20000000L, 0x00004010L, 0x00000000L, 0x00400010L, 0x20004010L, 0x00004000L, 0x00404000L, 0x20004010L, 0x00000010L, 0x20400010L, 0x20400010L, 0x00000000L, 0x00404010L, 0x20404000L, 0x00004010L, 0x00404000L, 0x20404000L, 0x20000000L, 0x20004000L, 0x00000010L, 0x20400010L, 0x00404000L, 0x20404010L, 0x00400000L, 0x00004010L, 0x20000010L, 0x00400000L, 0x20004000L, 0x20000000L, 0x00004010L, 0x20000010L, 0x20404010L, 0x00404000L, 0x20400000L, 0x00404010L, 0x20404000L, 0x00000000L, 0x20400010L, 0x00000010L, 0x00004000L, 0x20400000L, 0x00404010L, 0x00004000L, 0x00400010L, 0x20004010L, 0x00000000L, 0x20404000L, 0x20000000L, 0x00400010L, 0x20004010L

};

static unsigned long SP7[64] = { 0x00200000L, 0x04200002L, 0x04000802L, 0x00000000L, 0x00000800L, 0x04000802L, 0x00200802L, 0x04200800L, 0x04200802L, 0x00200000L, 0x00000000L, 0x04000002L, 0x00000002L, 0x04000000L, 0x04200002L, 0x00000802L, 0x04000800L, 0x00200802L, 0x00200002L, 0x04000800L, 0x04000002L, 0x04200000L, 0x04200800L, 0x00200002L, 0x04200000L, 0x00000800L, 0x00000802L, 0x04200802L, 0x00200800L, 0x00000002L, 0x04000000L, 0x00200800L, 0x04000000L, 0x00200800L, 0x00200000L, 0x04000802L, 0x04000802L, 0x04200002L, 0x04200002L, 0x00000002L, 0x00200002L, 0x04000000L, 0x04000800L, 0x00200000L, 0x04200800L, 0x00000802L, 0x00200802L, 0x04200800L, 0x00000802L, 0x04000002L, 0x04200802L, 0x04200000L, 0x00200800L, 0x00000000L, 0x00000002L, 0x04200802L, 0x00000000L, 0x00200802L, 0x04200000L, 0x00000800L, 0x04000002L, 0x04000800L, 0x00000800L, 0x00200002L }; static unsigned long SP8[64] = { 0x10001040L, 0x00001000L, 0x00040000L, 0x10041040L, 0x10000000L, 0x10001040L, 0x00000040L, 0x10000000L, 0x00040040L, 0x10040000L, 0x10041040L, 0x00041000L, 0x10041000L, 0x00041040L, 0x00001000L, 0x00000040L, 0x10040000L, 0x10000040L, 0x10001000L, 0x00001040L, 0x00041000L, 0x00040040L, 0x10040040L, 0x10041000L, 0x00001040L, 0x00000000L, 0x00000000L, 0x10040040L, 0x10000040L, 0x10001000L, 0x00041040L, 0x00040000L, 0x00041040L, 0x00040000L, 0x10041000L, 0x00001000L, 0x00000040L, 0x10040040L, 0x00001000L, 0x00041040L, 0x10001000L, 0x00000040L, 0x10000040L, 0x10040000L, 0x10040040L, 0x10000000L, 0x00040000L, 0x10001040L, 0x00000000L, 0x10041040L, 0x00040040L, 0x10000040L, 0x10040000L, 0x10001000L, 0x10001040L, 0x00000000L, 0x10041040L, 0x00041000L, 0x00041000L, 0x00001040L, 0x00001040L, 0x00040040L, 0x10000000L, 0x10041000L };

12

Anexo VIII
// Asignacin de una llave void _keysetup (WORD8* key, int nKeySetup, WORD32* k) { register int nI, nJ, nL, nM, nN; WORD8 pc1m[56], pcr[56]; WORD32 kn[32]; WORD32* raw1; WORD32* raw0; WORD32* cook; // configuracin inicial for (nJ = 0; nJ < 56; nJ++) { nL = pc1[nJ]; nM = nL & 07; pc1m[nJ] = (key[nL >> 3] & bytebit[nM]) ? 1 : 0; } for (nI = 0; nI < 16; nI++) { if (nKeySetup == KEYSETUP_DECRYPTION) nM = (15 - nI) << 1; else nM = nI << 1; nN = nM + 1; kn[nM] = kn[nN] = 0; for (nJ = 0; nJ < 28; nJ++) { nL = nJ + totrot[nI]; if (nL < 28 ) pcr[nJ] = pc1m[nL]; else pcr[nJ] = pc1m[nL - 28]; } for (nJ = 28; nJ < 56; nJ++) { nL = nJ + totrot[nI]; if (nL < 56 ) pcr[nJ] = pc1m[nL]; else pcr[nJ] = pc1m[nL - 28]; } for (nJ = 0; nJ < 24; nJ++ ) { if (pcr[pc2[nJ]]) kn[nM] |= bigbyte[nJ]; if (pcr[pc2[nJ + 24]]) kn[nN] |= bigbyte[nJ]; } } // Almacenamiento raw1 = &kn[0]; cook = k; for (nI = 0; nI < 16; nI++, raw1++ ) { raw0 = raw1++; *cook = (*raw0 & 0x00fc0000) << 6; *cook |= (*raw0 & 0x00000fc0) << 10; *cook |= (*raw1 & 0x00fc0000) >> 10; *cook++ |= (*raw1 & 0x00000fc0) >> 6;

13

Anexo VIII
*cook = (*raw0 & 0x0003f000) << 12; *cook |= (*raw0 & 0x0000003f) << 16; *cook |= (*raw1 & 0x0003f000) >> 4; *cook++ |= (*raw1 & 0x0000003f);

void scrunch(WORD8* outof, WORD32* into) { *into = (WORD32)(*outof++) << 24; *into |= (WORD32)(*outof++) << 16; *into |= (WORD32)(*outof++) << 8; *into++ |= (WORD32)(*outof++); *into = (WORD32)(*outof++) << 24; *into |= (WORD32)(*outof++) << 16; *into |= (WORD32)(*outof++) << 8; *into |= (WORD32)(*outof); } void unscrunch(WORD32* outof, WORD8* into) { *into++ = (WORD8)(*outof >> 24); *into++ = (WORD8)(*outof >> 16); *into++ = (WORD8)(*outof >> 8); *into++ = (WORD8)(*outof++); *into++ = (WORD8)(*outof >> 24); *into++ = (WORD8)(*outof >> 16); *into++ = (WORD8)(*outof >> 8); *into = (WORD8)(*outof); } // Cifra o descifra el bloque de datos // -> Bloque de entrada // -> Bloque de salida void _processBlock (WORD8* inblock, WORD8* outblock, WORD32* keys) { register WORD32 lF, lWork, lRight, lLeft; register int nRound; WORD32 transblock[2]; // Obtencin del bloque scrunch(inblock, transblock); lLeft = transblock[0]; lRight = transblock[1]; // El bloque de entrada es dividido printf("\nProcesando los bloques de entrada ...\n"); printf("=============================================================\n"); printf("\nEsta es la mitad izquierda del bloque de entrada: %X", lLeft); printf("\nEsta es la mitad derecha del bloque de entrada : %X", lRight); printf("\n\nPresione ENTER para continuar ...\n\n"); getchar(); fflush(stdin);

14

Anexo VIII
// init. permutation lWork = ((lLeft >> 4) ^ lRight) & 0x0f0f0f0fL; lRight ^= lWork; lLeft ^= (lWork << 4); // cambio de valores en la permutacin inicial printf("\nMitad izquierda durante la permutacion inicial: %X", lLeft); printf("\nMitad derecha durante la permutacion inicial : %X", lRight); printf("\n\nPresione ENTER para continuar...\n\n"); getchar(); fflush(stdin); lWork = ((lLeft >> 16) ^ lRight) & 0x0000ffffL; lRight ^= lWork; lLeft ^= (lWork << 16); // cambio de valores en la permutacin inicial printf("\nMitad izquierda durante la permutacion inicial: %X", lLeft); printf("\nMitad derecha durante la permutacion inicial : %X", lRight); printf("\n\nPresione ENTER para continuar...\n\n"); getchar(); fflush(stdin); lWork = ((lRight >> 2) ^ lLeft) & 0x33333333L; lLeft ^= lWork; lRight ^= (lWork << 2); // cambio de valores en la permutacin inicial printf("\nMitad izquierda durante la permutacion inicial: %X", lLeft); printf("\nMitad derecha durante la permutacion inicial : %X", lRight); printf("\n\nPresione ENTER para continuar...\n\n"); getchar(); fflush(stdin); lWork = ((lRight >> 8) ^ lLeft) & 0x00ff00ffL; lLeft ^= lWork; lRight ^= (lWork << 8); // cambio de valores en la permutacin inicial printf("\nMitad izquierda durante la permutacion inicial: %X", lLeft); printf("\nMitad derecha durante la permutacion inicial : %X", lRight); printf("\n\nPresione ENTER para continuar ...\n\n"); getchar(); fflush(stdin); lRight = ((lRight << 1) | ((lRight >> 31) & 1L)) & 0xffffffffL; lWork = (lLeft ^ lRight) & 0xaaaaaaaaL; lLeft ^= lWork; // cambio de valores en la permutacin inicial printf("\nMitad izquierda durante la permutacion inicial: %X", lLeft); printf("\nMitad derecha durante la permutacion inicial : %X", lRight); printf("\n\nPresione ENTER para continuar ...\n\n"); getchar(); fflush(stdin);

15

Anexo VIII
lRight ^= lWork; lLeft = ((lLeft << 1) | ((lLeft >> 31) & 1L)) & 0xffffffffL; // Bloque final despus de la permutacin inicial printf("\nMitad izquierda del bloque despues de la permutacion inicial: %X", lLeft); printf("\nMitad derecha del bloque despues de la permutacion inicial : %X", lRight); printf("\n\nPresione ENTER para continuar ...\n\n"); getchar(); fflush(stdin); for (nRound = 0; nRound < 8; nRound++ ) { lWork = (lRight << 28) | (lRight >> 4); lWork ^= *keys++; lF = SP7[ lWork & 0x3fL]; lF |= SP5[(lWork >> 8) & 0x3fL]; lF |= SP3[(lWork >> 16) & 0x3fL]; lF |= SP1[(lWork >> 24) & 0x3fL]; lWork = lRight ^ *keys++; lF |= SP8[ lWork & 0x3fL]; lF |= SP6[(lWork >> 8) & 0x3fL]; lF |= SP4[(lWork >> 16) & 0x3fL]; lF |= SP2[(lWork >> 24) & 0x3fL]; // Intercambio de los bloques de entrada printf("\nMitad izquierda del bloque despues de la vuelta: %X", lLeft); printf("\nMitad derecha del bloque despues de la vuelta : %X", lRight); printf("\nLlave utilizada: %X", keys); printf("\n\nPresione ENTER para continuar ...\n\n"); getchar(); fflush(stdin); lLeft ^= lF; lWork = (lLeft << 28) | (lLeft >> 4); lWork ^= *keys++; lF = SP7[ lWork & 0x3fL]; lF |= SP5[(lWork >> 8) & 0x3fL]; lF |= SP3[(lWork >> 16) & 0x3fL]; lF |= SP1[(lWork >> 24) & 0x3fL]; lWork = lLeft ^ *keys++; lF |= SP8[ lWork & 0x3fL]; lF |= SP6[(lWork >> 8) & 0x3fL]; lF |= SP4[(lWork >> 16) & 0x3fL]; lF |= SP2[(lWork >> 24) & 0x3fL]; lRight ^= lF; // Bloque de entrada despus de una vuelta printf("\nMitad izquierda del bloque despues de la vuelta: %X", lLeft); printf("\nMitad derecha del bloque despues de la vuelta : %X", lRight); printf("\nLlave utilizada: %X", keys); printf("\n\nPresione ENTER para continuar ...\n\n"); getchar(); fflush(stdin);

// Permutacin final

16

Anexo VIII
lRight = (lRight << 31) | (lRight >> 1); lWork = (lLeft ^ lRight) & 0xaaaaaaaaL; lLeft ^= lWork; lRight ^= lWork; lLeft = (lLeft << 31) | (lLeft >> 1); lWork = ((lLeft >> 8) ^ lRight) & 0x00ff00ffL; lRight ^= lWork; lLeft ^= (lWork << 8); lWork = ((lLeft >> 2) ^ lRight) & 0x33333333L; lRight ^= lWork; lLeft ^= (lWork << 2); lWork = ((lRight >> 16) ^ lLeft) & 0x0000ffffL; lLeft ^= lWork; lRight ^= (lWork << 16); lWork = ((lRight >> 4) ^ lLeft) & 0x0f0f0f0fL; lLeft ^= lWork; lRight ^= (lWork << 4); // Bloque de entrada despus de la permutacin inicial printf("\nMitad izquierda del bloque despues de la permutacion final: %X", lLeft); printf("\nMitad derecha del bloque despues de la permutacion final : %X", lRight); printf("\n=============================================================\n"); printf("\nFin del bloque ...\n"); printf("\n\nPresione ENTER para continuar ...\n\n"); getchar(); fflush(stdin); // Bloques finales transblock[0] = lRight; transblock[1] = lLeft; unscrunch(transblock, outblock);

// Expande una llave de 7 bytes a una de 8 bytes // El bit de paridad es siempre ignorado y asignado a cero void _expandPureDESKey (const WORD8* src, WORD8* dest) { int nI, nJ, nC, nBitCounter; WORD8 bPureByte; WORD8 bBuild; // ciclo a travs de todos los bytes nBitCounter = 0; bBuild = 0; nC = 0; for (nI = 0; nI < 7; nI++) { bPureByte = src[nI]; for (nJ = 0; nJ < 8; nJ++) { bBuild |= (bPureByte >> nJ) & 0x01; bBuild <<= 1; nBitCounter++; if (nBitCounter == 7)

17

Anexo VIII
{

dest[nC++] = bBuild; bBuild = 0; nBitCounter = 0;

RIJNDAEL #include <string.h> #include <stdlib.h> #include <stdio.h> #include <Rijndael.h> #include <RijndaelBoxes.h> typedef struct { WORD32 key[(RIJNDAEL_KEYSIZE / 4) * 5 + 24]; WORD32 cbc_iv[4]; } RIJNDAELCTX; #define rotr(x,n) (((x) >> ((int)(n))) | ((x) << (32 - (int)(n)))) #define rotl(x,n) (((x) << ((int)(n))) | ((x) >> (32 - (int)(n)))) #define ff_mult(a,b) (a && b ? pow_tab[(log_tab[a] + log_tab[b]) % 255] : 0) #define byte(x,n) ((WORD8)((x) >> (8 * (n)))) #define ls_box(x) \ ((WORD32)sbx_tab[byte(x, 0)] << 0) ^ \ ((WORD32)sbx_tab[byte(x, 1)] << 8) ^ \ ((WORD32)sbx_tab[byte(x, 2)] << 16) ^ \ ((WORD32)sbx_tab[byte(x, 3)] << 24) #define star_x(x) (((x) & 0x7f7f7f7f) << 1) ^ ((((x) & 0x80808080) >> 7) * 0x1b) #define imix_col(y,x) \ u = star_x(x); \ v = star_x(u); \ w = star_x(v); \ t = w ^ (x); \ (y) = u ^ v ^ w; \ (y) ^= rotr(u ^ t, 8) ^ \ rotr(v ^ t, 16) ^ \ rotr(t,24) void rijndaelSetKey(RIJNDAELCTX* pCtx, const WORD8* userKey, WORD32 lKeyLen, WORD32 lMode) { WORD32 t; WORD32* key = pCtx->key; int i;

18

Anexo VIII
for (i = 0; i < RIJNDAEL_KEYSIZE / 4; i++) key[i] = 0; for (i = 0; i < RIJNDAEL_KEYSIZE; i++) key[i/4] |= userKey[i%lKeyLen] << ((i%4)*8); t = key[7]; // Se utiliza rijndael de 256-bit for (i = 0; i < 7; i++) { t = rotr(t, 8); t = ls_box(t) ^ rco_tab[i]; key[8 * i + 8] = t ^= key[8 * i]; key[8 * i + 9] = t ^= key[8 * i + 1]; key[8 * i + 10] = t ^= key[8 * i + 2]; key[8 * i + 11] = t ^= key[8 * i + 3]; key[8 * i + 12] = t = key[8 * i + 4] ^ ls_box(t); key[8 * i + 13] = t ^= key[8 * i + 5]; key[8 * i + 14] = t ^= key[8 * i + 6]; key[8 * i + 15] = t ^= key[8 * i + 7]; } if (lMode == CIPHER_MODE_DECRYPT) { WORD32 t, u, v, w; for (i = 4; i < RIJNDAEL_KEYSIZE + 24; i++) { imix_col(key[i], key[i]); }

#define f_rn(bo, bi, n, k) \ bo[n] = ft_tab[0][byte(bi[n],0)] ^ \ ft_tab[1][byte(bi[(n + 1) & 3],1)] ^ \ ft_tab[2][byte(bi[(n + 2) & 3],2)] ^ \ ft_tab[3][byte(bi[(n + 3) & 3],3)] ^ *(k + n) #define f_rl(bo, bi, n, k) \ bo[n] = (WORD32)sbx_tab[byte(bi[n],0)] ^ \ rotl(((WORD32)sbx_tab[byte(bi[(n + 1) & 3],1)]), 8) ^ \ rotl(((WORD32)sbx_tab[byte(bi[(n + 2) & 3],2)]), 16) ^ \ rotl(((WORD32)sbx_tab[byte(bi[(n + 3) & 3],3)]), 24) ^ *(k + n) #define f_nround(bo, bi, k) \ f_rn(bo, bi, 0, k); f_rn(bo, bi, 1, k); f_rn(bo, bi, 2, k); f_rn(bo, bi, 3, k); k += 4 #define f_lround(bo, bi, k) \ f_rl(bo, bi, 0, k); \ f_rl(bo, bi, 1, k); \ \ \ \ \

19

Anexo VIII
f_rl(bo, bi, 2, k); \ f_rl(bo, bi, 3, k) void rijndaelEncrypt(RIJNDAELCTX* pCtx, const WORD32* pInBlock, WORD32* pOutBlock) { WORD32 b0[4], b1[4]; WORD32* kp = pCtx->key; b0[0] = pInBlock[0] ^ *kp++; b0[1] = pInBlock[1] ^ *kp++; b0[2] = pInBlock[2] ^ *kp++; b0[3] = pInBlock[3] ^ *kp++; f_nround(b1, b0, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nLlave: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); f_nround(b0, b1, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nLlave: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); f_nround(b1, b0, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nLlave: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); f_nround(b0, b1, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nLlave: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); f_nround(b1, b0, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nLlave: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); f_nround(b0, b1, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nLlave: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); f_nround(b1, b0, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nLlave: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); f_nround(b0, b1, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nLlave: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); f_nround(b1, b0, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nLlave: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); f_nround(b0, b1, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nLlave: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); f_nround(b1, b0, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nLlave: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); f_nround(b0, b1, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nLlave: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); f_nround(b1, b0, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nLlave: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); f_lround(b0, b1, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nLlave: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); printf("\n\nPresione ENTER para continuar ...\n\n"); getchar(); fflush(stdin); pOutBlock[0] = b0[0]; pOutBlock[1] = b0[1]; pOutBlock[2] = b0[2]; pOutBlock[3] = b0[3];

#define i_rn(bo, bi, n, k) \ bo[n] = it_tab[0][byte(bi[n],0)] ^ \ it_tab[1][byte(bi[(n + 3) & 3],1)] ^ \

20

Anexo VIII
it_tab[2][byte(bi[(n + 2) & 3],2)] ^ \ it_tab[3][byte(bi[(n + 1) & 3],3)] ^ *(k + n) #define i_rl(bo, bi, n, k) \ bo[n] = (WORD32)isb_tab[byte(bi[n],0)] ^ \ rotl(((WORD32)isb_tab[byte(bi[(n + 3) & 3],1)]), 8) ^ \ rotl(((WORD32)isb_tab[byte(bi[(n + 2) & 3],2)]), 16) ^ \ rotl(((WORD32)isb_tab[byte(bi[(n + 1) & 3],3)]), 24) ^ *(k + n) #define i_nround(bo, bi, k) \ i_rn(bo, bi, 0, k); \ i_rn(bo, bi, 1, k); \ i_rn(bo, bi, 2, k); \ i_rn(bo, bi, 3, k); \ k -= 4 #define i_lround(bo, bi, k) \ i_rl(bo, bi, 0, k); \ i_rl(bo, bi, 1, k); \ i_rl(bo, bi, 2, k); \ i_rl(bo, bi, 3, k) void rijndaelDecrypt(RIJNDAELCTX* pCtx, const WORD32* pInBlock, WORD32* pOutBlock) { WORD32 b0[4], b1[4]; WORD32* kp = pCtx->key; b0[0] = pInBlock[0] ^ kp[RIJNDAEL_KEYSIZE + 24]; b0[1] = pInBlock[1] ^ kp[RIJNDAEL_KEYSIZE + 25]; b0[2] = pInBlock[2] ^ kp[RIJNDAEL_KEYSIZE + 26]; b0[3] = pInBlock[3] ^ kp[RIJNDAEL_KEYSIZE + 27]; kp += RIJNDAEL_KEYSIZE + 20; i_nround(b1, b0, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nKey es: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); i_nround(b0, b1, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nKey es: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); i_nround(b1, b0, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nKey es: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); i_nround(b0, b1, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nKey es: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); i_nround(b1, b0, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nKey es: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); i_nround(b0, b1, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nKey es: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); i_nround(b1, b0, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nKey es: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); i_nround(b0, b1, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nKey es: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); i_nround(b1, b0, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nKey es: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); i_nround(b0, b1, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nKey es: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp);

21

Anexo VIII
i_nround(b1, b0, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nKey es: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); i_nround(b0, b1, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nKey es: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); i_nround(b1, b0, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nKey es: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); i_lround(b0, b1, kp);printf("\nB0 es: %X %X %X %X \nB1 es: %X %X %X %X\nKey es: %X\n", b0[0],b0[1],b0[2],b0[3], b1[0],b1[1],b1[2],b1[3], kp); printf("\n\nPresione ENTER para continuar ...\n\n"); getchar(); fflush(stdin); pOutBlock[0] = b0[0]; pOutBlock[1] = b0[1]; pOutBlock[2] = b0[2]; pOutBlock[3] = b0[3];

// Funciones pbicas WORD32 Rijndael_GetCipherInfo(CIPHERINFOBLOCK* pInfo) { WORD32 lI; WORD8* pSrc; WORD8* pDst; CIPHERINFOBLOCK tmpInfo; tmpInfo.lSizeOf = pInfo->lSizeOf; tmpInfo.lBlockSize = RIJNDAEL_BLOCKSIZE; tmpInfo.lKeySize = RIJNDAEL_KEYSIZE; tmpInfo.blOwnHasher = BOOL_FALSE; tmpInfo.lInitDataSize = RIJNDAEL_BLOCKSIZE; tmpInfo.lContextSize = sizeof(RIJNDAELCTX); tmpInfo.bCipherIs = CIPHER_IS_BLOCKLINK; // Copia de la informacin del bloque pSrc = (WORD8*) &tmpInfo; pDst = (WORD8*) pInfo; for (lI = 0; lI < tmpInfo.lSizeOf; lI++) *pDst++ = *pSrc++; return CIPHER_ERROR_NOERROR;

WORD32 Rijndael_SelfTest(void* pTestContext) { /*Vectores de prueba para verificar el funcionamiento del algoritmo */ const WORD8 testkey[32] = { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c, 0x76, 0x2e, 0x71, 0x60, 0xf3, 0x8b, 0x4d, 0xa5, 0x6a, 0x78, 0x4d, 0x90, 0x45, 0x19, 0x0c, 0xfe }; const WORD8 plaintext[16] = { 0x32, 0x43, 0xf6, 0xa8, 0x88, 0x5a, 0x30, 0x8d, 0x31, 0x31, 0x98, 0xa2, 0xe0, 0x37, 0x07, 0x34 };

22

Anexo VIII

const WORD8 cipher_must[16] = { 0x1a, 0x6e, 0x6c, 0x2c, 0x66, 0x2e, 0x7d, 0xa6, 0x50, 0x1f, 0xfb, 0x62, 0xbc, 0x9e, 0x93, 0xf3 }; WORD32 testbuf[4]; RIJNDAELCTX* pCtx = (RIJNDAELCTX*) pTestContext; int nI; // Inicializacin del cifrado rijndaelSetKey(pCtx, testkey, 32, CIPHER_MODE_ENCRYPT); rijndaelEncrypt(pCtx, (WORD32*) plaintext, testbuf); // Verificacin del funcionamiento de cifrado for (nI = 0; nI < 4; nI++) { if (testbuf[nI] != ((WORD32*) cipher_must)[nI]) return CIPHER_ERROR_INVALID; } // Inicializacin del descifrado rijndaelSetKey(pCtx, testkey, 32, CIPHER_MODE_DECRYPT); rijndaelDecrypt(pCtx, testbuf, testbuf); // Revisin del descifrado for (nI = 0; nI < 4; nI++) { if (testbuf[nI] != ((WORD32*) plaintext)[nI]) return CIPHER_ERROR_INVALID; } } return CIPHER_ERROR_NOERROR;

WORD32 Rijndael_CreateWorkContext(void* pContext, const WORD8* pKey, WORD32 lKeyLen, WORD32 lMode, void* pInitData, Cipher_RandomGenerator GetRndBytes, const void* pRandGenData) { RIJNDAELCTX* pCtx = (RIJNDAELCTX*) pContext; WORD32* pCBCIV; // Inicializacin de llaves rijndaelSetKey(pCtx, pKey, lKeyLen, lMode); pCBCIV = (WORD32*) pInitData; if (lMode == CIPHER_MODE_ENCRYPT) GetRndBytes((WORD8*) pCBCIV, RIJNDAEL_BLOCKSIZE, pRandGenData); // Asignar IV en modo CBC pCtx->cbc_iv[0] = pCBCIV[0]; pCtx->cbc_iv[1] = pCBCIV[1]; pCtx->cbc_iv[2] = pCBCIV[2]; pCtx->cbc_iv[3] = pCBCIV[3];

23

Anexo VIII

return CIPHER_ERROR_NOERROR;

void Rijndael_ResetWorkContext(void* pContext, WORD32 lMode, void* pInitData, Cipher_RandomGenerator GetRndBytes, const void* pRandGenData) { RIJNDAELCTX* pCtx = (RIJNDAELCTX*) pContext; WORD32* pCBCIV = (WORD32*) pInitData; if (lMode == CIPHER_MODE_ENCRYPT) GetRndBytes((WORD8*) pCBCIV, RIJNDAEL_BLOCKSIZE, pRandGenData); pCtx->cbc_iv[0] = pCBCIV[0]; pCtx->cbc_iv[1] = pCBCIV[1]; pCtx->cbc_iv[2] = pCBCIV[2]; pCtx->cbc_iv[3] = pCBCIV[3];

WORD32 Rijndael_DestroyWorkContext(void* pContext) { int nI; WORD8* pCtxBuf = (WORD8*) pContext; for (nI = 0; nI < sizeof(RIJNDAELCTX); nI++) pCtxBuf[nI] = 0x00; } return CIPHER_ERROR_NOERROR;

void Rijndael_EncryptBuffer(void* pContext, const void* pSource, void* pTarget, WORD32 lNumOfBytes) { WORD32 lNumOfBlocks; WORD32* pInBuf = (WORD32*) pSource; WORD32* pOutBuf = (WORD32*) pTarget; RIJNDAELCTX* pCtx = (RIJNDAELCTX*) pContext; lNumOfBlocks = lNumOfBytes / RIJNDAEL_BLOCKSIZE; while (lNumOfBlocks--) { pOutBuf[0] = pInBuf[0] ^ pCtx->cbc_iv[0]; pOutBuf[1] = pInBuf[1] ^ pCtx->cbc_iv[1]; pOutBuf[2] = pInBuf[2] ^ pCtx->cbc_iv[2]; pOutBuf[3] = pInBuf[3] ^ pCtx->cbc_iv[3]; // Cifrado del contenido del buffer rijndaelEncrypt(pCtx, pOutBuf, pOutBuf); // Asignar un nuevo IV

24

Anexo VIII
pCtx->cbc_iv[0] = pOutBuf[0]; pCtx->cbc_iv[1] = pOutBuf[1]; pCtx->cbc_iv[2] = pOutBuf[2]; pCtx->cbc_iv[3] = pOutBuf[3]; pInBuf += RIJNDAEL_BLOCKSIZE / 4; pOutBuf += RIJNDAEL_BLOCKSIZE / 4;

void Rijndael_DecryptBuffer(void* pContext, const void* pSource, void* pTarget, WORD32 lNumOfBytes, const void* pPreviousBlock) { WORD32 lNumOfBlocks; WORD32* pInBuf = (WORD32*) pSource; WORD32* pOutBuf = (WORD32*) pTarget; WORD32* pPrevBlock = (WORD32*) pPreviousBlock; WORD32 save_cbc_iv[4]; RIJNDAELCTX* pCtx = (RIJNDAELCTX*) pContext; lNumOfBlocks = lNumOfBytes / RIJNDAEL_BLOCKSIZE; // Cargar nuevos vectores IV, si es necesario if (pPreviousBlock != CIPHER_NULL) { pCtx->cbc_iv[0] = pPrevBlock[0]; pCtx->cbc_iv[1] = pPrevBlock[1]; pCtx->cbc_iv[2] = pPrevBlock[2]; pCtx->cbc_iv[3] = pPrevBlock[3]; } while (lNumOfBlocks--) { // Almacenamiento del vector IV save_cbc_iv[0] = pInBuf[0]; save_cbc_iv[1] = pInBuf[1]; save_cbc_iv[2] = pInBuf[2]; save_cbc_iv[3] = pInBuf[3]; // Descifrado del bloque rijndaelDecrypt(pCtx, pInBuf, pOutBuf); // Liberacin del bloque pOutBuf[0] ^= pCtx->cbc_iv[0]; pOutBuf[1] ^= pCtx->cbc_iv[1]; pOutBuf[2] ^= pCtx->cbc_iv[2]; pOutBuf[3] ^= pCtx->cbc_iv[3]; // Asignacin del nuevo vector IV pCtx->cbc_iv[0] = save_cbc_iv[0]; pCtx->cbc_iv[1] = save_cbc_iv[1]; pCtx->cbc_iv[2] = save_cbc_iv[2]; pCtx->cbc_iv[3] = save_cbc_iv[3];

25

Anexo VIII

pInBuf += RIJNDAEL_BLOCKSIZE / 4; pOutBuf += RIJNDAEL_BLOCKSIZE / 4;

IDEA #include <string.h> #include <stdlib.h> #include <stdio.h> #include <IDEA.h> typedef struct { WORD16 key[IDEA_KEYLEN]; WORD32 lCBCHi; WORD32 lCBCLo; } IDEACTX; void ideaCipher(WORD8[8], WORD8[8], WORD16*); void ideaExpandKey(WORD8*, WORD16*); void ideaInvertKey(WORD16*, WORD16[]); WORD32 IDEA_GetCipherInfo (CIPHERINFOBLOCK* pInfo) { WORD32 lI; WORD8* pSrc; WORD8* pDst; CIPHERINFOBLOCK tempinfo; // Preparacin de la informacin de contexto tempinfo.lSizeOf = pInfo->lSizeOf; tempinfo.lBlockSize = IDEA_BLOCKSIZE; tempinfo.lKeySize = IDEA_KEYSIZE; tempinfo.blOwnHasher = BOOL_FALSE; tempinfo.lInitDataSize = IDEA_BLOCKSIZE; tempinfo.lContextSize = sizeof(IDEACTX); tempinfo.bCipherIs = CIPHER_IS_BLOCKLINK; // Copia de los bytes pSrc = (WORD8*) &tempinfo; pDst = (WORD8*) pInfo; for (lI = 0; lI < tempinfo.lSizeOf; lI++) *pDst++ = *pSrc++; } return CIPHER_ERROR_NOERROR;

WORD32 IDEA_SelfTest (void* pTestContext) { // Prueba de funcionamiento del algoritmo, cifrado y descifrado

26

Anexo VIII
static WORD8 testkey[IDEA_KEYSIZE] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 } ; WORD16 key[IDEA_KEYLEN]; static WORD32 plainBlock[2] = { 0x1234567, 0x89abcdef }; WORD32 cipherBlock[2]; // Asignando llaves dbiles ideaExpandKey(testkey, key); // Cifrado del bloque de prueba ideaCipher((WORD8*) plainBlock, (WORD8*) cipherBlock, key); // Creacin de una llave de cifrado ideaInvertKey(key, key); // Descifrado del bloque de prueba ideaCipher((WORD8*) cipherBlock, (WORD8*) cipherBlock, key); // Textos claros iguales? return ((plainBlock[0] == cipherBlock[0]) && (plainBlock[1] == cipherBlock[1])) ? CIPHER_ERROR_NOERROR : CIPHER_ERROR_INVALID;

WORD32 IDEA_CreateWorkContext (void* pContext, const WORD8* pKey, WORD32 lKeyLen, WORD32 lMode, void* pInitData, Cipher_RandomGenerator GetRndBytes, const void* pRndGenData) { IDEACTX* pCtx = (IDEACTX*) pContext; WORD32* pCBCIV = (WORD32*) pInitData; // Expansin de la llave ideaExpandKey((WORD8*) pKey, (WORD16*) &(pCtx->key)); // Inversa de la llave if (lMode == CIPHER_MODE_DECRYPT) { ideaInvertKey((WORD16*) &(pCtx->key), (WORD16*) &(pCtx->key)); } // Para el cifrado se crea el vector IV en modo CBC if (lMode == CIPHER_MODE_ENCRYPT) { GetRndBytes((WORD8*) pCBCIV, 8, pRndGenData); } // Asignar el vector, nuevo o no pCtx->lCBCLo = pCBCIV[0]; pCtx->lCBCHi = pCBCIV[1];

27

Anexo VIII

// FIXME: weak keys in IDEA? return CIPHER_ERROR_NOERROR;

void IDEA_ResetWorkContext (void* pContext, WORD32 lMode, void* pInitData, Cipher_RandomGenerator GetRndBytes, const void* pRndGenData) { IDEACTX* pCtx = (IDEACTX*) pContext; // Reinicio del vector IV en modo CBC WORD32* pCBCIV = (WORD32*) pInitData; if (lMode == CIPHER_MODE_ENCRYPT) { GetRndBytes((WORD8*) pCBCIV, 8, pRndGenData); } pCtx->lCBCLo = pCBCIV[0]; pCtx->lCBCHi = pCBCIV[1]; } WORD32 IDEA_DestroyWorkContext (void* pContext) { // Limpieza de contexto int nI; WORD8* clearIt = (WORD8*) pContext; for (nI = 0; nI < sizeof(IDEACTX); nI++) { clearIt[nI] = 0x00; } } return CIPHER_ERROR_NOERROR;

void IDEA_EncryptBuffer (void* pContext, const void* pSource, void* pTarget, WORD32 lNumOfBytes) { WORD32 lNumOfInts; WORD32 lI; WORD32* pInBuf = (WORD32*) pSource; WORD32* pOutBuf = (WORD32*) pTarget; IDEACTX* pCtx = (IDEACTX*) pContext; // Clculo del nmero de palabras de 32 bits

28

Anexo VIII
lNumOfInts = lNumOfBytes >> 2; // Algo para cifrar? if (lNumOfInts < 2) return; // Trabajando a travs de los bloques... for (lI = 0; lI < lNumOfInts; lI += 2) { // Copia y encadena el bloque actual pOutBuf[lI] = pInBuf[lI] ^ pCtx->lCBCLo; pOutBuf[lI + 1] = pInBuf[lI + 1] ^ pCtx->lCBCHi; // Cifra el bloque ideaCipher((WORD8*) &(pOutBuf[lI]), (WORD8*) &(pOutBuf[lI]), pCtx->key); // Asigna el nuevo vector IV en modo CBC pCtx->lCBCLo = pOutBuf[lI]; pCtx->lCBCHi = pOutBuf[lI + 1];

void IDEA_DecryptBuffer (void* pContext, const void* pSource, void* pTarget, WORD32 lNumOfBytes, const void* pPreviousBlock) { WORD32 lNumOfInts; WORD32 lI; WORD32 lSaveCBCLo; WORD32 lSaveCBCHi; WORD32* pInBuf = (WORD32*) pSource; WORD32* pOutBuf = (WORD32*) pTarget; WORD32* pPrevBlock = (WORD32*) pPreviousBlock; IDEACTX* pCtx = (IDEACTX*) pContext; // Clculo del nmero de palabras de 32 bits lNumOfInts = lNumOfBytes >> 2; // Algo para descifrar? if (lNumOfInts < 2) return; // Cargar el nuevo vector IV CBC, si es neceario if (pPreviousBlock != CIPHER_NULL) { pCtx->lCBCLo = pPrevBlock[0]; pCtx->lCBCHi = pPrevBlock[1]; } // Trabajando a traves de todos los bloques... for (lI = 0; lI < lNumOfInts; lI += 2) { // Almacenamiento de IV en modo CBC

29

Anexo VIII
lSaveCBCLo = pInBuf[lI]; lSaveCBCHi = pInBuf[lI + 1]; // Descifrado del bloque ideaCipher((WORD8*) &(pInBuf[lI]), (WORD8*) &(pOutBuf[lI]), pCtx->key); // Desencadenamiento del bloque pOutBuf[lI] = pOutBuf[lI] ^ pCtx->lCBCLo; pOutBuf[lI + 1] = pOutBuf[lI + 1] ^ pCtx->lCBCHi; // Asignacin del bloque en el vector IV modo CBC pCtx->lCBCLo = lSaveCBCLo; pCtx->lCBCHi = lSaveCBCHi;

#define low16(x) ((x) & 0x0ffff) #define MUL(x,y) ( x = low16(x-1), t16 = low16((y)-1), \ t32 = (WORD32)x*t16 + x + t16 + 1, x = (WORD16)(low16(t32)), \ t16 = (WORD16)(t32>>16), x = (x-t16) + (x<t16) ) void ideaCipher (WORD8 inbuf[8], WORD8 outbuf[8], WORD16 *key) { register WORD16 wX1, wX2, wX3, wX4, wS2, wS3; register WORD16 t16; register WORD32 t32; WORD16 *in, *out; // get the block in = (WORD16*) inbuf; wX1 = in[0]; wX2 = in[1]; wX3 = in[2]; wX4 = in[3]; // Vuelta #1 printf("\nLlaves utilizadas: \n%X\n%X\n%X\n%X\n%X\n%X\n", key[0],key[1],key[2],key[3],key[4],key[5]); MUL(wX1, key[0]); wX2 += key[1]; wX3 += key[2]; MUL(wX4, key[3]); wS3 = wX3; wX3 ^= wX1; MUL(wX3, key[4]); wS2 = wX2; wX2 ^= wX4; wX2 += wX3; MUL(wX2, key[5]); wX3 += wX2; wX1 ^= wX2; wX4 ^= wX3; wX2 ^= wS3; wX3 ^= wS2;

30

Anexo VIII
// Bloque de entrada despus de la primera vuelta printf("\nX1 Despues de la primera vuelta: %X", wX1); printf("\nX2 Despues de la primera vuelta: %X", wX2); printf("\nX3 Despues de la primera vuelta: %X", wX3); printf("\nX4 Despues de la primera vuelta: %X", wX4); printf("\n\n Presione ENTER para continuar ...\n\n"); getchar(); fflush(stdin); // Vuelta #2 printf("\nLlaves utilizadas: \n%X\n%X\n%X\n%X\n%X\n%X\n", key[6],key[7],key[8],key[9],key[10],key[11]); MUL(wX1, key[6]); wX2 += key[7]; wX3 += key[8]; MUL(wX4, key[9]); wS3 = wX3; wX3 ^= wX1; MUL(wX3, key[10]); wS2 = wX2; wX2 ^= wX4; wX2 += wX3; MUL(wX2, key[11]); wX3 += wX2; wX1 ^= wX2; wX4 ^= wX3; wX2 ^= wS3; wX3 ^= wS2; // Bloque de entrada despus de una vuelta printf("\nX1 Despues de la segunda vuelta: %X", wX1); printf("\nX2 Despues de la segunda vuelta: %X", wX2); printf("\nX3 Despues de la segunda vuelta: %X", wX3); printf("\nX4 Despues de la segunda vuelta: %X", wX4); printf("\n\n Presione ENTER para continuar ...\n\n"); getchar(); fflush(stdin); // Vuelta#3 printf("\nLlaves utilizadas: \n%X\n%X\n%X\n%X\n%X\n%X\n", key[12],key[13],key[14],key[15],key[16],key[17]); MUL(wX1, key[12]); wX2 += key[13]; wX3 += key[14]; MUL(wX4, key[15]); wS3 = wX3; wX3 ^= wX1; MUL(wX3, key[16]); wS2 = wX2; wX2 ^= wX4; wX2 += wX3; MUL(wX2, key[17]); wX3 += wX2; wX1 ^= wX2; wX4 ^= wX3; wX2 ^= wS3; wX3 ^= wS2; // Bloque de entrada despus de una vuelta printf("\nX1 Despues de la tercera vuelta: %X", wX1); printf("\nX2 Despues de la tercera vuelta: %X", wX2);

31

Anexo VIII
printf("\nX3 Despues de la tercera vuelta: %X", wX3); printf("\nX4 Despues de la tercera vuelta: %X", wX4); printf("\n\n Presione ENTER para continuar ...\n\n"); getchar(); fflush(stdin); // Vuelta #4 printf("\nLlaves utilizadas: \n%X\n%X\n%X\n%X\n%X\n%X\n", key[18],key[19],key[20],key[21],key[22],key[23]); MUL(wX1, key[18]); wX2 += key[19]; wX3 += key[20]; MUL(wX4, key[21]); wS3 = wX3; wX3 ^= wX1; MUL(wX3, key[22]); wS2 = wX2; wX2 ^= wX4; wX2 += wX3; MUL(wX2, key[23]); wX3 += wX2; wX1 ^= wX2; wX4 ^= wX3; wX2 ^= wS3; wX3 ^= wS2; // Bloque de entrada despus de una vuelta printf("\nX1 Despues de la cuarta vuelta: %X", wX1); printf("\nX2 Despues de la cuarta vuelta: %X", wX2); printf("\nX3 Despues de la cuarta vuelta: %X", wX3); printf("\nX4 Despues de la cuarta vuelta: %X", wX4); printf("\n\n Presione ENTER para continuar ...\n\n"); getchar(); fflush(stdin); // Vuelta #5 printf("\nLlaves utilizadas: \n%X\n%X\n%X\n%X\n%X\n%X\n", key[24],key[25],key[26],key[27],key[28],key[29]); MUL(wX1, key[24]); wX2 += key[25]; wX3 += key[26]; MUL(wX4, key[27]); wS3 = wX3; wX3 ^= wX1; MUL(wX3, key[28]); wS2 = wX2; wX2 ^= wX4; wX2 += wX3; MUL(wX2, key[29]); wX3 += wX2; wX1 ^= wX2; wX4 ^= wX3; wX2 ^= wS3; wX3 ^= wS2; // Bloque de entrada despus de una vuelta printf("\nX1 Despues de la quinta vuelta: %X", wX1); printf("\nX2 Despues de la quinta vuelta: %X", wX2); printf("\nX3 Despues de la quinta vuelta: %X", wX3); printf("\nX4 Despues de la quinta vuelta: %X", wX4); printf("\n\n Presione ENTER para continuar...\n\n"); getchar();

32

Anexo VIII
fflush(stdin); // Vuelta #6 printf("\n Llaves utilizadas: \n%X\n%X\n%X\n%X\n%X\n%X\n", key[30],key[31],key[32],key[33],key[34],key[35]); MUL(wX1, key[30]); wX2 += key[31]; wX3 += key[32]; MUL(wX4, key[33]); wS3 = wX3; wX3 ^= wX1; MUL(wX3, key[34]); wS2 = wX2; wX2 ^= wX4; wX2 += wX3; MUL(wX2, key[35]); wX3 += wX2; wX1 ^= wX2; wX4 ^= wX3; wX2 ^= wS3; wX3 ^= wS2; // Bloque de entrada despus de una vuelta printf("\nX1 Despues de la sexta vuelta: %X", wX1); printf("\nX2 Despues de la sexta vuelta: %X", wX2); printf("\nX3 Despues de la sexta vuelta: %X", wX3); printf("\nX4 Despues de la sexta vuelta: %X", wX4); printf("\n\n Presione ENTER para continuar ...\n\n"); getchar(); fflush(stdin); // Vuelta #7 printf("\nLlaves utilizadas: \n%X\n%X\n%X\n%X\n%X\n%X\n", key[36],key[37],key[38],key[39],key[40],key[41]); MUL(wX1, key[36]); wX2 += key[37]; wX3 += key[38]; MUL(wX4, key[39]); wS3 = wX3; wX3 ^= wX1; MUL(wX3, key[40]); wS2 = wX2; wX2 ^= wX4; wX2 += wX3; MUL(wX2, key[41]); wX3 += wX2; wX1 ^= wX2; wX4 ^= wX3; wX2 ^= wS3; wX3 ^= wS2; // Bloque de entrada despus de una vuelta printf("\nX1 Despues de la septima vuelta: %X", wX1); printf("\nX2 Despues de la septima vuelta: %X", wX2); printf("\nX3 Despues de la septima vuelta: %X", wX3); printf("\nX4 Despues de la septima vuelta: %X", wX4); printf("\n\n Presione ENTER para continuar ...\n\n"); getchar(); fflush(stdin); // Vuelta #8

33

Anexo VIII
printf("\nLlaves utilizadas: \n%X\n%X\n%X\n%X\n%X\n%X\n", key[42],key[43],key[44],key[45],key[46],key[47]); MUL(wX1, key[42]); wX2 += key[43]; wX3 += key[44]; MUL(wX4, key[45]); wS3 = wX3; wX3 ^= wX1; MUL(wX3, key[46]); wS2 = wX2; wX2 ^= wX4; wX2 += wX3; MUL(wX2, key[47]); wX3 += wX2; wX1 ^= wX2; wX4 ^= wX3; wX2 ^= wS3; wX3 ^= wS2; // Bloque de entrada despus de una vuelta printf("\nX1 Despues de la octava avuelta: %X", wX1); printf("\nX2 Despues de la octava avuelta: %X", wX2); printf("\nX3 Despues de la octava avuelta: %X", wX3); printf("\nX4 Despues de la octava avuelta: %X", wX4); printf("\n\n Presione ENTER para continuar ...\n\n"); getchar(); fflush(stdin); // Semi vuelta final printf("\nLlaves utilizadas: \n%X\n%X\n%X\n%X\n", key[48],key[49],key[50],key[51]); MUL(wX1, key[48]); wX3 += key[49]; wX2 += key[50]; MUL(wX4, key[51]); // Bloque de entrada despus de una vuelta printf("\nX1 Despues de la semi vuelta final: %X", wX1); printf("\nX2 Despues de la semi vuelta final: %X", wX2); printf("\nX3 Despues de la semi vuelta final: %X", wX3); printf("\nX4 Despues de la semi vuelta final: %X", wX4); printf("\n\n Presione ENTER para continuar ...\n\n"); getchar(); fflush(stdin); // Presentacin del bloque cifrado out = (WORD16*) outbuf; *out++ = wX1; *out++ = wX3; *out++ = wX2; *out = wX4;

WORD16 mulInv (WORD16 wX) { WORD16 wT0, wT1, wQ, wY; // o y 1 como auto inversas

34

Anexo VIII
if (wX <= 1) return wX; // ya que wX >= 2, esto se cabe en 16 bits wT1 = 0x010001L / wX; wY = 0x010001L % wX; if (wY == 1) { return (WORD16) low16(1 - wT1); } wT0 = 1; do { wQ = wX / wY; wX = wX % wY; wT0 += wQ * wT1; if (wX == 1) return wT0; wQ = wY / wX; wY = wY % wX; wT1 += wQ * wT0; } while (wY != 1); } return (WORD16) low16(1 - wT1);

void ideaExpandKey (WORD8* userkey, WORD16* ek) { int nI, nJ; // Expansin de la llave de 128 bits para una llave de cifrado for (nJ = 0; nJ < 8; nJ++) { ek[nJ] = (userkey[0] << 8) + userkey[1]; userkey += 2; } for (nI=0; nJ < IDEA_KEYLEN; nJ++) { nI++; ek[nI + 7] = (ek[nI & 7] << 9) | (ek[nI + 1 & 7] >> 7); ek += nI & 8; nI &= 7; }

#define NEG(x) (- (int) (x)) void ideaInvertKey (WORD16* ek, WORD16 dk[IDEA_KEYLEN]) { WORD16 temp[IDEA_KEYLEN]; register int nK, nP, nR;

35

Anexo VIII

// Inversin de la llave para descifrado nP = IDEA_KEYLEN; temp[nP-1] = mulInv(ek[3]); temp[nP-2] = NEG(ek[2]); temp[nP-3] = NEG(ek[1]); temp[nP-4] = mulInv(ek[0]); nK = 4; nP -= 4; for (nR = IDEA_ROUNDS - 1; nR > 0; nR--) { temp [nP-1] = ek[nK+1]; temp [nP-2] = ek[nK]; temp [nP-3] = mulInv(ek[nK+5]); temp [nP-4] = NEG(ek[nK+3]); temp [nP-5] = NEG(ek[nK+4]); temp [nP-6] = mulInv(ek[nK+2]); nK += 6; nP -= 6; } temp [nP-1] = ek[nK+1]; temp [nP-2] = ek[nK]; temp [nP-3] = mulInv(ek[nK+5]); temp [nP-4] = NEG(ek [nK+4]); temp [nP-5] = NEG(ek [nK+3]); temp [nP-6] = mulInv(ek[nK+2]); for (nK = 0; nK < IDEA_KEYLEN; nK++) { dk[nK] = temp[nK]; temp[nK] = 0; }

36

Anexo VIII Librerias utilizadas TRIPLE DES.H


#ifndef __TRIPLEDES_H #define __TRIPLEDES_H #include "CipherDef.h" #define TRIPLEDES_KEYSIZE 21 // 3 * (8 - 1) #define TRIPLEDES_BLOCKSIZE 8 #define TRIPLEDES_CIPHERNAME "triple-DES" typedef struct { WORD32 k1[32]; WORD32 k2[32]; WORD32 k3[32]; WORD32 lCBCLo; WORD32 lCBCHi;

} TRIPLEDESCTX;

WORD32 TripleDES_GetCipherInfo(CIPHERINFOBLOCK*); WORD32 TripleDES_SelfTest (void*); WORD32 TripleDES_CreateWorkContext(void*, const WORD8*, WORD32, WORD32, void*, Cipher_RandomGenerator, const void*); void TripleDES_ResetWorkContext(void*, WORD32, void*, Cipher_RandomGenerator, const void*); WORD32 TripleDES_DestroyWorkContext (void*); void TripleDES_EncryptBuffer(void*, const void*, void*, WORD32); void TripleDES_DecryptBuffer(void*, const void*, void*, WORD32, const void*); #ifdef __cplusplus } #endif #endif Rijndael.h #ifndef __RIJNDAEL_H #define __RIJNDAEL_H #ifdef __cplusplus extern "C" { #endif #include "CipherDef.h" #define RIJNDAEL_KEYSIZE 32 #define RIJNDAEL_BLOCKSIZE 16 #define RIJNDAEL_CIPHERNAME "Rijndael"

37

Anexo VIII

WORD32 Rijndael_GetCipherInfo(CIPHERINFOBLOCK*); WORD32 Rijndael_SelfTest(void*); WORD32 Rijndael_CreateWorkContext(void*, const WORD8*, WORD32, WORD32, void*, Cipher_RandomGenerator, const void*); void Rijndael_ResetWorkContext(void*, WORD32, void*, Cipher_RandomGenerator, const void*); WORD32 Rijndael_DestroyWorkContext(void*); void Rijndael_EncryptBuffer(void*, const void*, void*, WORD32); void Rijndael_DecryptBuffer(void*, const void*, void*, WORD32, const void*); #ifdef __cplusplus } #endif #endif IDEA.H #ifndef __IDEA_H #define __IDEA_H #ifdef __cplusplus extern "C" { #endif #include "CipherDef.h" #define IDEA_KEYSIZE 16 #define IDEA_BLOCKSIZE 8 #define IDEA_ROUNDS 8 #define IDEA_KEYLEN (6 * IDEA_ROUNDS + 4) #define IDEA_CIPHERNAME "IDEA" WORD32 IDEA_GetCipherInfo(CIPHERINFOBLOCK*); WORD32 IDEA_SelfTest (void*); WORD32 IDEA_CreateWorkContext(void*, const WORD8*, WORD32, WORD32, void*,

38

Anexo VIII
Cipher_RandomGenerator, const void*); void IDEA_ResetWorkContext(void*, WORD32, void*, Cipher_RandomGenerator, const void*); WORD32 IDEA_DestroyWorkContext (void*); void IDEA_EncryptBuffer(void*, const void*, void*, WORD32); void IDEA_DecryptBuffer(void*, const void*, void*, WORD32, const void*); #ifdef __cplusplus } #endif #endif

39

Вам также может понравиться