S.E.P. S.E.S. D.G.E.S.T. CENTRO NACIONAL DE INVESTIGACIÓN Y DESARROLLO TECNOLÓGICO cenidet Sistema de Encripción de Datos Empleando Verificación Compartida para Redes de Área Local T E S I S QUE PARA OBTENER EL GRADO DE: MAESTRO EN CIENCIAS EN INGENIERÍA ELECTRÓNICA P R E S E N T A : EDSON GEOVANNY ESTRADA LÓPEZ DIRECTOR DE TESIS: M.C. JAVIER MENESES RUIZ CUERNAVACA, MORELOS ABRIL DE 2006 Wxw|vtàÉÜ|t TzÜtwxv|Å|xÇàÉá Resumen La criptografía moderna surgió como una solución a la fuerte necesidad de poder transmitir de manera segura códigos militares durante la Segunda Guerra Mundial. Desde entonces, esta área de la criptología ha experimentado un crecimiento espectacular, aún cuando la mayor parte de estos avances se mantienen – y se seguirán manteniendo – en secreto. En los últimos años, investigaciones serias del tema en numerosas universidades de todo el mundo han logrado que la criptografía sea una ciencia al alcance de todos, y que se haya convertido en la piedra angular de áreas tan importantes como el comercio electrónico, la telefonía móvil, las redes de computadoras y la banca electrónica, entre otras. La seguridad de la información en estos casos es fundamental, sobre todo para una sociedad que tiende al uso cada vez más frecuente de medios electrónicos para el procesamiento, almacenamiento y transporte de datos, información y conocimientos. Aunado a esta problemática, el creciente uso de redes públicas, como la Internet, para el envío y recepción de información desde y hacia cualquier lugar del mundo, impone también fuertes requerimientos de seguridad para el transporte de dicha información. Debido a la creciente necesidad de nuevas soluciones prácticas se propone, en esta tesis, un esquema de seguridad para las comunicaciones dentro de una red de área local (LAN); atacando de manera directa el área de la seguridad de la información en redes de computadoras. El algoritmo implementado es conocido como el esquema de encripción de firma empleando verificación compartida; de manera específica la solución matemática propuesta por Hsu y Wu. Esta solución en particular, ha comprobado en trabajos anteriores, requerir un menor ancho de banda y ofrecer una mayor protección de la información que muchas otras soluciones comúnmente empleadas. Se desarrolló un prototipo electrónico (hardware y controlador software) de cifrado, validando su correcto funcionamiento mediante su operación dentro de una red de área local. El criptosistema cumplió el objetivo planteado de implementar un dispositivo cuya principal función fuera liberar, a cada computadora personal dentro de la red, de todo el exigente procesamiento criptográfico. Se encontraron varias limitantes prácticas durante el desarrollo del prototipo, principalmente: la velocidad de transferencia de datos y la capacidad de procesamiento del procesador criptográfico. Estos aspectos tienen un impacto inicial directo en el desempeño del criptosistema, por lo que se analizan varios esquemas y propuestas posibles para un mejoramiento posterior del dispositivo. También existen aspectos de impacto secundario en el desempeño, como lo son: la cantidad de memoria del procesador criptográfico, y tamaños del buffer de transmisión y del buffer de recepción. En este trabajo se analiza el desempeño del criptosistema bajo diferentes configuraciones de memoria, y se presenta una comparación entre varias plataformas posibles. Abstract Modern cryptography arose as a solution to the strong need of being able to securely transmit military codes during World War II. Since then, this cryptology area has experienced a spectacular growth, even though most of these advances stay - and will stay confidential. Over the last years, serious investigations of this subject in numerous universities worldwide have achieved that cryptography can be a science within the reach of all, and that it has become the angular stone of important areas as it is the electronic commerce, mobile telephony, computer networks and electronic banking, among others. Information security on these cases is fundamental, mainly for a society that tends to the more and more frequently use of electronic means for processing, storage and transport of data, information and knowledge. Added to this problematic, the increasing use of public networks, as it is the Internet, for transmission and reception of information from and towards any place of the world, also imposes strong requirements of security for the transport of this information. Due to the increasing need of new practical solutions, this thesis proposes a communications security scheme within a local area network (LAN); directly attacking the area of information security over computer networks. The implemented algorithm is known as the Authentication Encryption System using Shared Verification; specifically the mathematical solution proposed by Hsu and Wu. This individual solution has demonstrated, on previous thesis, that it requires less bandwidth and that offers more information protection that many other solutions commonly used. A cipher electronic prototype was developed (hardware and software controller), validating its correct operation by running it within a local area network scenario. The cryptosystem fulfilled the proposed objective of implementing a device whose main function was to eliminate the demanding cryptographic processing from every personal computer within the network. Several practical limits were found during the prototype development, mainly: the data transfer rate and the processing capacity of the cryptographic processor. These aspects have a direct initial impact in the cryptosystem performance, reason why several possible schemes and proposals for a later improvement of the device are analyzed. Also secondary impact aspects in the performance exist, as known: the available memory amount of the cryptographic processor, and the size of the transmission and reception buffers. In this thesis the cryptosystem performance under different memory configurations was analyzed, and it shows a comparison between several possible platforms. CONTENIDO Lista de Figuras………………………………………………………………………… iv Lista de Tablas…………………………………………………………………………. vii Simbología……………………………………………………………………………... viii Capítulo 1 1.1 1.2 1.3 1.4 1.5 Capítulo 2 2.1 2.2 2.3 INTRODUCCIÓN…………………………………………………….. 1 Antecedentes……………………………………………………………. 1.1.1 Objetivos de la criptografía……………………………... 1.1.2 Características de un criptosistema……………………... 1.1.3 Aplicaciones de la criptografía………………………….. 1.1.4 Criptografía de llave pública……………………………. Planteamiento del problema…………………………………………….. Objetivo…………………………………………………………………. Alcances…………………………………………………………………. Organización de la tesis…………………………………………………. 1 2 2 4 5 13 14 14 14 FUNDAMENTOS TEÓRICOS DE LA CRIPTOGRAFÍA DE LLAVE PÚBLICA………………………………………………… 16 Teoría de números………………………………………………………. 2.1.1 Números primos y relativamente primos………………... 2.1.2 Aritmética modular……………………………………… 2.1.3 Teoremas de Fermat y de Euler…………………………. 2.1.4 Probando si un número es primo………………………... 2.1.5 Algoritmo de Euclides…………………………………... 2.1.6 El teorema del residuo chino……………………………. 2.1.7 Logaritmos discretos……………………………………. 2.1.8 Campo finito GF – Galois Field………………………… 2.1.9 Algoritmo para el cálculo de (ab mod n)………………... Criptografía y números aleatorios………………………………………. 2.2.1 Tipos de secuencias aleatorias…………………………... 2.2.2 Generación de secuencias criptográficamente aleatorias... 2.2.3 Generadores aleatorios criptográficamente seguros…….. Esquemas de verificación compartida………………………………....... 2.3.1 Esquema umbral (t, n) de Shamir……………………...... 17 17 20 25 27 30 33 35 40 41 42 42 44 46 47 49 i Capítulo 3 3.1 3.2 3.3 3.4 Capítulo 4 4.1 4.2 4.3 4.4 4.5 ESQUEMA DE ENCRIPCIÓN AUTENTIFICADA CON VERIFICACIÓN COMPARTIDA (t, n) DE HSU Y WU…. 52 Introducción……………………………………………………………. Descripción del esquema………………………………………………. 3.2.1 Inicialización del sistema………………………………. 3.2.2 Registro………………………………………………… 3.2.3 Encripción de firma…………………………………….. 3.2.4 Recuperación del mensaje……………………………… Análisis de seguridad…………………………………………………... 3.3.1 Ataque 1………………………………………………... 3.3.2 Ataque 2………………………………………………... 3.3.3 Ataque 3………………………………………………... Simulación matemática………………………………………………… 3.4.1 Inicialización del sistema………………………………. 3.4.2 Registro………………………………………………… 3.4.3 Encripción de firma…………………………………….. 3.4.4 Recuperación del mensaje……………………………… 52 53 54 55 57 58 60 61 62 62 63 64 65 66 67 DISEÑO DEL CRIPTOSISTEMA…………………………………... 69 Diseño general del criptosistema……………………………………….. 4.1.1 Seguridad de la información en una LAN……………..... 4.1.2 Análisis de las posibles topologías……………………… 4.1.3 Requerimientos de implementación…………………….. 4.1.4 Diagrama a bloques del criptosistema………………....... Implementación física del módulo de cifrado/descifrado………………. 4.2.1 Diagrama a bloques del dispositivo de cifrado/ descifrado……………………………………………….. 4.2.2 Elección del CPU………………………………………... 4.2.3 Esquemáticos del dispositivo de cifrado / descifrado…… Programación del procesador de cifrado/descifrado……………………. Programación de la interfaz LAN………………………………………. Interfaz gráfica………………………………………………………….. 4.5.1 Pantallas de la aplicación SA ENCRIPTOR…………….. 4.5.2 Pantallas de la aplicación AUI ENCRIPTOR……………. 69 69 71 75 78 79 79 80 82 85 86 92 92 97 Capítulo 5 RESULTADOS………………………………………………………... 101 5.1 5.2 5.3 Esquemas de pruebas…………………………………………………… 101 Desempeño del criptosistema…………………………………………... 104 Comparativa entre plataformas…………………………………………. 107 ii Capítulo 6 6.1 6.2 CONCLUSIONES…………………………………………………….. 112 Conclusiones………………………………………………………….... 6.1.1 Software generado……………………….……………... 6.1.2 Firmware generado………………………...…………… 6.1.3 Algoritmos empleados……………....….………………. 6.1.4 Criptosistema desarrollado………………..……………. Trabajos futuros……………………………………………………….... 6.2.1 Mejoras en las capacidades actuales del criptosistema…. 6.2.2 Conexión segura a Internet……………………………… 6.2.3 Autorización colectiva remota para el acceso de una cuenta…………………………………………………… 112 112 113 114 115 120 120 121 122 Abreviaturas y acrónimos……………………………………………………………… 123 Referencias……………………………………………………………………………... 128 Anexo A………………………………………………………………………………… 131 Anexo B………………………………………………………………………………… 132 Anexo C………………………………………………………………………………… 133 iii Lista de figuras 1-1 Intromisión pasiva (intercepción)……………………………………….. 3 1-2 Intromisión activa (inserción o fabricación y modificación)……………. 4 1-3 Criptosistema de llave pública: Confidencialidad………………………. 7 1-4 Criptosistema de llave pública: Autentificación………………………… 8 1-5 Criptosistema de llave pública: Confidencialidad y Autentificación…… 10 2-1 La relación a = qn + r, 0 ≤ r < n………………………………………… 20 3-1 Etapa de inicialización del sistema del esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu………….. 54 3-2 Etapa de registro (a) del esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu……………………………... 55 3-3 Etapa de registro (b) del esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu……………………………... 57 3-4 Etapa de encripción de firma del esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu………………………… 58 Etapa de recuperación del mensaje del esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu………….. 60 3-5 4-1 Topología #1: Criptosistema es un dispositivo externo de cifrado/ descifrado entre la tarjeta de red y el medio físico LAN………………… 72 4-2 Topología #2: Criptosistema es una tarjeta interna de red con cifrado/ descifrado automático…………………………………………………… 72 Topología #3: Criptosistema es una tarjeta interna de cifrado/descifrado paralela a una tarjeta de red en la PC……………………………………. 73 Topología #4: Criptosistema es un dispositivo externo de cifrado/ descifrado paralelo a una tarjeta de red en la PC………………………... 74 4-3 4-4 4-5 Diagrama general a bloques del criptosistema…………………………... 78 4-6 Diagrama a bloques del módulo (dispositivo) de cifrado / descifrado…... 79 iv 4-7 Esquemático del bloque: fuente de alimentación………………………... 82 4-8 Esquemático del bloque: procesador criptográfico…………………….... 83 4-9 Esquemático del bloque: interfaz de programación en circuito…………. 84 4-10 Esquemático del bloque: interfaz de comunicaciones a la PC…………... 85 4-11 WinSock y su relación con el modelo OSI de ISO……………………… 4-12 Diagrama de flujo de los procesos de creación de los sockets en la aplicación servidora y en la aplicación cliente…………………………... 91 4-13 Pantalla de presentación de la aplicación SA……………………………. 93 4-14 Pantalla principal de la aplicación SA…………………………………… 94 4-15 Pantalla de la opción menú “Archivo” Æ “Cargar Configuración” de la aplicación SA………………………………………………………. 95 4-16 Pantalla de la opción menú “Archivo” Æ “Guardar Configuración” de la aplicación SA………………………………………………………. 95 4-17 Pantallas de la opción menú “Configuración” Æ “Opciones” de la aplicación SA……………………………………………………………. 87 96 4-18 Pantalla de la opción menú “Ayuda” Æ “Acerca de…” de la aplicación SA………………………………………………………………………... 97 4-19 Pantalla principal de la aplicación AUI………………………………….. 98 4-20 Pantalla de la opción de menú “Configuración” Æ “Opciones” de la aplicación AUI……………………………………………………... 100 5-1 Esquema de medición del desempeño del criptosistema: Cifrado………. 102 5-2 Esquema de medición del desempeño del criptosistema: Descifrado…… 102 5-3 Tiempos de cifrado del criptosistema basado en el 56F8323………….... 105 5-4 Tiempos de descifrado del criptosistema basado en el 56F8323………... 106 5-5 Tiempos de descifrado del criptosistema basado en el 56F801…………. 108 5-6 Tiempos de descifrado del criptosistema basado en el MC9S12DP256B………………………………………………………... 109 v 5-7 Tiempos de cifrado y descifrado del criptosistema emulado en la PC….. 111 6-1 Comparación de velocidades de descifrado entre plataformas………….. 116 6-2 Comparación de tiempos de descifrado entre plataformas……………… 117 6-3 Comparación de DSPs comerciales……………………………………... 118 vi Lista de tablas 1.1 Aplicaciones de algunos algoritmos conocidos de llave pública………. 11 2.1 Ejemplo de aritmética modular: (a) Adición módulo 8 y (b) Multiplicación módulo 8…………………………………………… 22 2.2 Propiedades de la aritmética modular dentro del conjunto Zn…………. 23 2.3 Existencia de inverso multiplicativo en la multiplicación módulo un número primo…………………………………………………………... 24 2.4 Propiedad del inverso multiplicativo en la aritmética modular………... 24 2.5 Algunos valores de la función de Euler φ(n) …………………………... 26 2.6 Cálculo del máximo común divisor por medio del algoritmo de Euclides………………………………………………………………… 31 Cálculo del máximo común divisor e inverso multiplicativo por medio del algoritmo extendido de Euclides……………………………. 31 2.8 Potencias de enteros, módulo 19……………………………………….. 37 4.1 Comparativa entre las posibles topologías de implementación del Criptosistema…………………………………………………………… 74 4.2 Comparativa de las características de los procesadores empleados……. 81 5.1 Análisis de desempeño del criptosistema 56F8323: cifrado…………… 105 5.2 Análisis de desempeño del criptosistema 56F8323: descifrado……….. 107 5.3 Análisis de desempeño del criptosistema 56F801: descifrado………… 108 5.4 Análisis de desempeño del criptosistema MC9S12DP256B: descifrado……………………………………………………………… 110 Comparativa de desempeño de las diferentes implementaciones del criptosistema……………………………………………………….. 116 2.7 6.1 6.2 Soluciones alternativas del dispositivo de cifrado/descifrado, que ofrecen un mejor balance costo/desempeño……………………………. 119 vii Simbología (t, n) Esquema umbral a mod b Operación modular a ≡ b mod n Congruencia modular a≠b a es diferente de b a⊕b a XOR b a-1 Elemento inverso b|a b es divisor de a k Número de puntos en función polinomial inda, p (b) Índice de un número b, para la base a mod p mcd(a ,b) Máximo común divisor de a y b n Participantes del esquema umbral p Número primo p(x) Función polinomial r Número aleatorio t Participantes del esquema umbral xA Llave personal de A xG Llave personal de G yA Llave pública de A yG Llave pública de G A Firmante del esquema de Hsu y Wu C Texto cifrado Di Porciones del esquema umbral G Grupo de participantes o verificadores del esquema umbral GF(p) Campo finito de de orden p K Llave pública M Mensaje P Conjunto de todos los números primos S Clave secreta viii Ui Verificador i del grupo G X Texto original sin cifrar Y Texto cifrado ⎣x ⎦ Entero más grande menor o igual a x φ(n) Función de Euler ix Capítulo 1: Introducción Capítulo 1 Introducción 1.1 Antecedentes La seguridad de la información es fundamental, en la actualidad, para una sociedad que tiende al uso cada vez más frecuente de medios electrónicos para el procesamiento, almacenado y transporte de datos, información y conocimientos. El constante surgimiento de nuevas y poderosas tecnologías de procesamiento de datos, impone también de manera continua, rigurosos requisitos hacia los procesos e infraestructura de seguridad. La continua aparición de poderosas plataformas de cómputo, permiten implementar algoritmos cada vez más complejos con el objetivo de incrementar la confiabilidad de un esquema de seguridad. Esto también se ha vuelto una gran desventaja, debido a que esta misma capacidad en el nivel de procesamiento queda disponible para la creación de algoritmos cuya única función sea la violación o “ruptura” de dicho esquema de seguridad. Aunado a la problemática anterior, el creciente uso de redes públicas, como Internet, para el envío y recepción de información desde y hacia cualquier lugar del mundo, impone también fuertes requerimientos de seguridad para el transporte de dicha información. Muchas de estas conexiones se realizan a través de medios físicos públicos no seguros, como podrían ser: una conexión telefónica o una conexión remota inalámbrica. 1 Capítulo 1: Introducción La criptografía es la rama de las matemáticas que trata sobre la protección de la información [1]; esta área de la ciencia surgió como la respuesta a la gran necesidad de seguridad del mundo informático moderno. A pesar de que la criptografía tiene una historia milenaria, con algunos métodos de cifrado ingeniosos, hace sólo unos 30 años que dejó de ser un arte o un conjunto de técnicas empíricas, para convertirse en ciencia. Entre las disciplinas que emplea destacan la teoría de la información, la teoría de números – o matemática discreta, que estudia las propiedades de los números enteros – y la teoría de la complejidad algorítmica [2]. El conocimiento de métodos para el cifrado de mensajes, del que se ocupa la criptografía, se desarrolla en paralelo con los avances en la violación o ruptura de estos métodos, es decir, la forma de descifrar los mensajes que se envían, que teóricamente sólo podrían entender los legítimos destinatarios. A esta segunda disciplina se le denomina criptoanálisis. Ambas conforman la criptología. Los avances en una de ellas impulsan la investigación en la otra, disputándose así una carrera, que además está marcada por el secreto en el que se mantienen muchos de los progresos que se obtienen en ellas. 1.1.1 Objetivos de la criptografía Los objetivos de la criptografía son: • Transmitir mensajes que no puedan ser interpretados por un receptor no autorizado. • Que agentes autorizados si puedan interpretar el mensaje transmitido. • Que las operaciones de codificación y decodificación no sean costosas, en términos computacionales. • Que un intento de análisis será demasiado complejo para ser factible. 1.1.2 Características de un criptosistema La solución a los problemas de seguridad inherentes a un sistema de información, define cuatro características o metas para el diseño de un criptosistema [3], siendo estas: 2 Capítulo 1: Introducción • Confidencialidad. • Autentificación. • No repudiación. • Integridad. La confidencialidad asegura que la información sólo sea accesible para entidades autorizadas. Esta característica está expuesta a un ataque de seguridad clasificado como intromisión pasiva o intercepción, en donde alguien, sin interferir o alterar un mensaje que no está dirigido a él, logra captarlo y enterarse de su contenido. Esto se logra en mensajes de radio de manera muy simple, o en telefonía, por ejemplo, interviniendo una línea. Figura 1-1 Intromisión pasiva (intercepción). Otra característica de un criptosistema es la autentificación, la cual asegura que el origen de la información sólo sea accesible para entidades autorizadas. Esta característica está expuesta a un ataque clasificado como intromisión activa de tipo inserción o fabricación en la cual una entidad no autorizada inserta información en el sistema. La tercera característica de la criptografía es la integridad, la cual asegura que sólo entidades autorizadas tienen acceso a la modificación de la información transmitida. Esta característica está expuesta a un ataque clasificado como intromisión activa de tipo modificación en la cual una entidad no autorizada no sólo tiene acceso a la información sino que lleva a cabo una alteración de la misma. 3 Capítulo 1: Introducción Figura 1-2 Intromisión activa (inserción o fabricación y modificación). La cuarta y última característica de la criptografía es la no repudiación, la cual asegura que ni el receptor ni el transmisor puedan negar que se efectuó una transmisión. 1.1.3 Aplicaciones de la criptografía La criptografía se encuentra en una gran variedad de aplicaciones como lo son: • Diplomacia • Guerra • Correo electrónico • Redes de computadoras • Transferencias electrónicas bancarias • Seguridad en Internet: IPSec, SSL (Security Socket Layer, por sus siglas en inglés) • Comercio electrónico • Acceso remoto • Telefonía 4 Capítulo 1: Introducción 1.1.4 Criptografía de llave pública El desarrollo de la criptografía de llave pública es la más grande y quizás la única verdadera revolución en toda la historia de la criptografía. La criptografía de llave pública proporciona una separación radical de todo lo que se había desarrollado con anterioridad. Para empezar, los algoritmos de llave pública se basan más en funciones matemáticas que en la simple combinación de sustituciones y permutaciones. Aún más importante, la criptografía de llave pública es asimétrica, involucrando el uso de dos llaves distintas, en contraste con el cifrado convencional simétrico, el cual sólo utiliza una llave. El uso de dos llaves tiene consecuencias profundas en las áreas de confidencialidad, distribución de llaves, y autentificación. El concepto de criptografía de llave pública evolucionó de un intento de atacar los dos problemas más difíciles asociados con el cifrado convencional. El primer problema es el de distribución de llaves. La distribución de llaves mediante cifrado convencional requiere que dos entidades: a) compartan ya en ese momento una llave, o b) hagan uso de un centro de distribución. Whitfield Diffie, uno de los descubridores del cifrado de llave pública (junto con Martin Hellman, ambos en la Universidad de Stanford), llegaron a la conclusión de que este segundo requerimiento negaba la esencia misma de la criptografía: la habilidad de mantener en secreto total la misma comunicación [4]. El segundo problema que Diffie señaló era el de las “firmas digitales”. Si el uso de la criptografía iba a ser ampliamente difundido, y no sólo en situaciones militares sino para propósitos comerciales y privados, entonces los mensajes y documentos electrónicos necesitarían el equivalente de las firmas que se emplean en los documentos en papel. Diffie y Hellman [5] lograron un asombroso descubrimiento en 1976 al desarrollar un método dirigido a la solución de ambos problemas y que era radicalmente diferente a todas las soluciones propuestas durante más de cuatro milenios atrás. Un concepto erróneo que se tiene de la criptografía pública es que ésta es una técnica de propósito general que ha vuelto obsoleta la criptografía convencional. Por el 5 Capítulo 1: Introducción contrario, debido al enorme esfuerzo computacional requerido por los esquemas modernos de cifrado de llave pública, no parece ser que el cifrado convencional vaya a ser abandonado. Como Diffie-Hellman señalaron en uno de sus más reconocidos artículos: “la restricción de la criptografía de llave pública para aplicaciones de distribución de llaves y de firma es casi universalmente aceptada” [4]. Criptosistemas de llave pública Los algoritmos de llave pública se basan en una llave para cifrado y en una llave diferente para descifrado. Estos algoritmos poseen una característica muy importante: • No es computacionalmente factible determinar la llave de descifrado dado sólo el conocimiento del algoritmo criptográfico y la llave de cifrado. Además, algunos algoritmos, como el RSA [6], exhiben también que: • Cualquiera de las dos llaves relacionadas pueden ser utilizadas para cifrado, con la otra siendo empleada para descifrado. La figura 1-3 ilustra de una manera sencilla el proceso de cifrado de llave pública. Esencialmente, los pasos son: 1. Cada usuario final en una red genera un par de llaves. 2. Cada usuario publica su llave de cifrado colocándola en un registro o archivo público. Ésta es la llave pública; la llave complementaria se mantiene privada. 3. Si A desea mandar un mensaje a B, cifra el mensaje empleando la llave pública de B. 4. Cuando B recibe el mensaje, éste descifra el mensaje empleando su llave privada. Nótese que sólo B puede llevar a cabo el proceso de descifrado. 6 Capítulo 1: Introducción Criptoanálisis X’ KRa’ KRb’ Fuente A Fuente del Mensaje X Destino B Algoritmo de Cifrado Y Algoritmo de Descifrado KUb X Destino KRb Fuente de par de llaves Figura 1-3 Criptosistema de llave pública: Confidencialidad. Con este enfoque todos los participantes tienen acceso a las llaves públicas, en tanto que las llaves privadas son generadas localmente por cada usuario y por lo mismo nunca necesitan ser distribuidas. Mientras un sistema controle su llave privada, su comunicación entrante es segura. En cualquier instante, un sistema puede cambiar su llave privada y publicar la correspondiente llave pública para reemplazar la anterior. Como se puede apreciar en la figura 1-3, entre los elementos esenciales del cifrado de llave pública se encuentra una fuente A del mensaje, la cual produce un mensaje en texto puro, X = [X1, X2,…, XM]. Los M elementos de X son caracteres de un alfabeto finito. El mensaje se pretende enviar al destino B. B genera un par de llaves relacionadas: una llave pública, KUb, y una llave privada, KRb. KRb es conocida sólo para B, por el contrario KUb está disponible públicamente y por lo tanto es accesible por A. Con el mensaje X y la llave de cifrado KUb como entrada, A produce el texto cifrado Y = [Y1, Y2,…, YN]: Y = EKUb (X) El receptor, en posesión de la llave privada correspondiente, es capaz de invertir la transformación: X = DKRb (Y) 7 Capítulo 1: Introducción Un oponente, observando el texto cifrado Y y teniendo acceso a KUb pero no a KRb o al mensaje original X, debe intentar recuperar X y/o KRb. Se asume que el oponente tiene conocimiento de los algoritmos de cifrado (E) y descifrado (D). Si el oponente está interesado sólo en este mensaje en particular, entonces el objetivo del esfuerzo es recuperar X, generando un estimado del texto puro X’. Sin embargo, frecuentemente, el oponente también está interesado en ser capaz de recuperar mensajes futuros, por lo que se realiza un intento de recuperar KRb generando un estimado KRb’. Se mencionó con anterioridad que cualquiera de las dos llaves podía ser utilizada para llevar a cabo el cifrado, con la otra siendo utilizada entonces para el descifrado. Esto permite más bien implementar un esquema criptográfico diferente. Este esquema, mostrado en la figura 1-4, proporciona autentificación. Criptoanálisis KRa’ Fuente A Fuente del Mensaje X Destino B Algoritmo de Cifrado Y Algoritmo de Descifrado KRa X Destino KUa Fuente de par de llaves Figura 1-4 Criptosistema de llave pública: Autentificación. En este caso, A prepara el mensaje a B y lo cifra utilizando la llave privada de A antes de transmitirlo. B descifra el mensaje utilizando la llave pública de A. Debido a que el mensaje fue cifrado empleando la llave privada de A, sólo A pudo haber preparado el mensaje. De este modo, la totalidad del mensaje cifrado sirve como una firma digital. Además, es imposible alterar el mensaje si no se tiene acceso a la llave privada de A, de modo que el mensaje está autentificado tanto en términos de la fuente como de integridad. 8 Capítulo 1: Introducción En el esquema anterior, el mensaje se cifra por completo, el cual, aunque validando tanto al autor como su contenido, requiere una gran capacidad de almacenamiento. Cada documento debe mantenerse en formato de texto puro para propósitos prácticos. Una copia en formato de texto cifrado debe ser almacenada de modo que el origen y el contenido puedan ser verificados en cualquier instante. Una manera mucho más eficiente de lograr los mismos resultados es descifrar un pequeño bloque de bits que sea una función del documento. Tal bloque, llamado un autentificador, debe poseer la propiedad de que sea imposible alterar el documento original sin alterar el autentificador. Si el autentificador es cifrado con la llave privada de la fuente, sirve como una firma que verifica el origen, el contenido y la secuencia. Y = EKRa (X) X = DKUa (Y) El proceso de cifrado descrito no proporciona confidencialidad. Esto es, el mensaje enviado está protegido contra una modificación pero no contra espionaje. Esto es obvio en el caso de una firma basada en una porción del mensaje, debido a que el resto del mensaje se transmite libremente. Aún en el caso de un completo cifrado mediante una firma, no existe protección alguna sobre la confidencialidad del documento debido a que cualquier observador puede descifrar el mensaje empleando la llave pública del transmisor. A pesar de esto, es posible proporcionar tanto una función de autentificación como de confidencialidad mediante un doble uso del esquema de llave pública (figura 1-5). Z = EKUb[ EKRa (X) ] X = DKUa[ EKRb (Z) ] En este caso, se cifra primero el mensaje empleando la llave privada del transmisor. Esto proporcionará la firma digital. A continuación, se cifra de nuevo, empleando la llave pública del receptor. El texto cifrado final puede ser descifrado sólo por el receptor pretendido, quien solamente posee la llave privada adecuada para el proceso de descifrado. En este esquema aunque se proporciona tanto confidencialidad como autentificación, tiene 9 Capítulo 1: Introducción la desventaja de ser demasiado complejo y tardado, ya que el proceso de cifrado/descifrado para cada comunicación, tiene que ser realizado cuatro veces en vez de sólo dos. Destino B Fuente A Fuente del Mensaje X Algoritmo de Cifrado Y Algoritmo de Cifrado Z KUb Algoritmo de Descifrado Y Algoritmo de Descifrado X Destino KRb Fuente de par de llaves KUa KRa Fuente de par de llaves Figura 1-5 Criptosistema de llave pública: Confidencialidad y Autentificación. Aplicaciones de criptosistemas de llave pública Se puede clasificar el uso de criptosistemas de llave pública en tres categorías: • Cifrado/Descifrado: El transmisor cifra el mensaje con la llave pública del receptor. • Firma Digital: El transmisor firma un mensaje con su llave privada. Esto se logra al aplicar un algoritmo criptográfico al mensaje o a un pequeño bloque de datos, función del mensaje. • Intercambio de llaves: Dos entidades cooperan para intercambiar una sesión de llaves. 10 Capítulo 1: Introducción Algunos algoritmos son adecuados para las tres aplicaciones, por el contrario otros sólo pueden ser empleados en una o dos de estas aplicaciones. La tabla 1.1 muestra los algoritmos más conocidos en cada una de estas aplicaciones. Tabla 1.1 Aplicaciones de algunos algoritmos conocidos de llave pública. Algoritmo RSA [6] ElGamal [7] DSS [8] Diffie–Hellman[5] Cifrado/Descifrado X X Firma Digital X X X Intercambio de llaves X X Requerimientos de criptosistemas de llave pública Los criptosistemas mostrados en las figuras 1-3 a la 1-5 dependen de un algoritmo criptográfico basado en dos llaves relacionadas. Diffie y Hellman postularon este sistema sin demostrar que tales algoritmos existieran. Sin embargo, ellos plasmaron las condiciones que dichos algoritmos debían cumplir [4]: 1. Es computacionalmente fácil para una entidad B generar un par de llaves (llave pública KUb, llave privada KRb). 2. Es computacionalmente fácil para un transmisor A, conociendo la llave pública y el mensaje original M, generar el texto cifrado correspondiente: C = EKUb (M) 3. Es computacionalmente fácil para el receptor B el descifrar el texto cifrado resultante utilizando la llave privada para recuperar el mensaje original: M = DKRb (C) = DKRb [EKUb (M)] 4. No es computacionalmente factible para un oponente, conociendo la llave pública, KUb, determinar la llave privada, KRb. 11 Capítulo 1: Introducción 5. No es computacionalmente factible para un oponente, conociendo la llave pública, KUb, y un texto cifrado, recuperar el mensaje original, M. Podemos añadir un sexto requerimiento que, aunque útil, no es necesario para todas las aplicaciones de llave pública: 6. Las funciones de cifrado y descifrado pueden ser aplicadas en cualquier orden: M = EKUb [DKRb (M)] Los requerimientos resultan en la necesidad de una función de dirección única con trampa. Una función de dirección única es una que “mapea” un dominio dentro de un rango de modo que cada valor de la función posea una inversa única, con la condición que el cálculo es fácil en tanto que el cálculo de la inversa no sea factible computacionalmente hablando: Y = f (X) -1 X = f (Y) Æ fácil Æ no factible Una función de dirección única con trampa es fácil de calcular en una dirección y no es factible el cálculo en la otra dirección a menos que se conozca cierta información adicional. Con la información adicional la inversa puede ser calculada en tiempo polinomial. Una función de dirección única es una familia de funciones invertibles fk, tales que: Y = fk(X) Æ fácil, si se conocen k y X X = fk-1(Y) Æ fácil, si se conocen k y Y X = fk-1(Y) Æ no factible, si se conoce Y pero no k 12 Capítulo 1: Introducción 1.2 Planteamiento del problema La rápida expansión y popularización de Internet ha convertido a la seguridad en redes en uno de los tópicos más importantes dentro de la Informática moderna. Con tal nivel de interconexión, los virus y los “hackers” se mueven con gran libertad, aprovechando las deficientes medidas de seguridad tomadas por administradores y usuarios a los que esta nueva revolución tecnológica ha tomado por sorpresa. Para intentar saciar esta creciente demanda han surgido una gran diversidad de tipos y topologías de redes privadas y públicas, así como también una gran diversidad de formas y medios de comunicación. Hemos de tener en cuenta que la complejidad de las grandes redes y su acceso por parte del personal de las empresas públicas y/o privadas convierten la protección física de los canales de comunicación en algo tremendamente difícil por los costos que implica y sus efectos en la operación de las redes [11]. Las ventajas de las redes en Informática son evidentes, pero es un error común el no valorar ciertos riesgos, lo cual a menudo expone en peligro la seguridad de los sistemas. Se tiene previsto que en unos pocos años la inmensa mayoría de las empresas y centros educativos operarán a través de una red con conexión a Internet, lo cual crea la urgente necesidad de crear nuevas y eficientes soluciones que garanticen la seguridad de la información. Este trabajo de tesis propone una solución de seguridad para las comunicaciones dentro de una red de área local. El algoritmo a implementar es conocido como el esquema de encripción de firma empleando verificación compartida, de manera específica la solución matemática propuesta por Hsu y Wu [9]. Esta solución en particular ha comprobado requerir un menor ancho de banda y ofrecer una mayor protección de la información que muchas otras soluciones comúnmente empleadas [10]. 13 Capítulo 1: Introducción 1.3 Objetivo Esta tesis tiene como objetivo desarrollar un prototipo electrónico (hardware y controlador software) de cifrado / descifrado utilizando el esquema de encripción con verificación compartida definido por Hsu y Wu. El correcto funcionamiento de este dispositivo se validará mediante su operación dentro de una red de área local (LAN). 1.4 Alcances • Propuesta de un esquema teórico para el diseño de un sistema de encripción de datos con verificación compartida para una aplicación en redes de área local. • Implementación de un sistema práctico para la validación del algoritmo y de la funcionalidad del esquema propuesto. • Desarrollo de firmware del criptosistema. • Desarrollo de software para la PC. • Interfaz de comunicaciones entre la PC y el criptosistema. 1.5 Organización de esta tesis La tesis está compuesta de 6 capítulos y su contenido es el siguiente: Capítulo 1: Introducción, presenta una introducción al tema de la criptografía. Se realiza el planteamiento del problema y se definen el objetivo y los alcances de este trabajo de investigación. Se presenta también una breve descripción por capítulos del documento. 14 Capítulo 1: Introducción Capítulo 2: Conceptos y algoritmos de criptografía de llave pública, desarrolla la parte matemática del trabajo de investigación, listando los conceptos básicos y algoritmos necesarios para el control y operación del prototipo. Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu, presenta el modelo de operación de un criptosistema, basado en el algoritmo de verificación compartida de Hsu y Wu, aplicándolo a una red de área local (LAN). Se analizan algunos aspectos de seguridad del mismo, y por último, se desarrolla una simulación matemática de la operación del mismo. Capítulo 4: Diseño del criptosistema, realiza el diseño de una solución teórica en diagramas de bloques, así como una propuesta de las especificaciones ideales deseadas. Se propone también un desarrollo práctico y realizable desde el punto de vista económico, así como también un panorama de todo el desarrollo de software y controladores necesarios para su implementación. Capítulo 5: Resultados, detalla la respuesta y comportamiento del sistema bajo diferentes condiciones de operación. Se analiza el desempeño del mismo, realizando una comparativa entre cada una de las implementaciones realizadas. Capítulo 6: Conclusiones, resume los aspectos más importantes en relación al trabajo desarrollado, los resultados obtenidos así como las aportaciones del mismo. Se finaliza con una serie de sugerencias para la realización de trabajos futuros relacionados con el tema. 15 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública Capítulo 2 Fundamentos teóricos de la criptografía de llave pública Para el desarrollo de un criptosistema de llave pública basado en logaritmos discretos, como lo es el esquema de Hsu y Wu implementado en esta tesis, hace falta una revisión exhaustiva de diversos conceptos y algoritmos matemáticos esenciales. El dominio y comprensión de estos últimos combinado con un profundo conocimiento y experiencia en una plataforma específica de hardware/software, permitirá generar código de alta velocidad y que utilice de manera confiable y óptima los recursos computacionales disponibles. Este capítulo presenta como primer tema una introducción a la teoría de números, sobre la cual está basada la criptografía de llave pública. Los conceptos y técnicas de la teoría de números son bastante abstractos y generalmente difíciles de comprender sin el adecuado uso de ejemplos. Debido a esto, se ha añadido un ejemplo matemático después de la presentación de los conceptos o algoritmos más abstractos. Se incluyen también al final de algunos algoritmos de la teoría de números su respectiva implementación en código C++. Este lenguaje de programación fue elegido para el desarrollo de esta tesis ya que actualmente su uso está muy difundido ya no sólo para la PC, sino también para la llamada programación C++ embebida (terminó inglés embedded); esta última siendo ampliamente asimilada como el nuevo estándar de programación de sistemas basados en microcontroladores, así como también de los potentes DSPs. 16 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública Posteriormente, como segundo tema, se realizará una rápida revisión de algunos esquemas de criptografía pública, en los que será fácil apreciar la aplicación directa de los conceptos matemáticos analizados con anterioridad. Algunos de ellos, como el esquema Diffie-Hellman, tienen su aplicación directa en el algoritmo implementado en esta tesis. 2.1 Teoría de números Un tema importante en la teoría de números son los números primos. En esta sección se realizará una revisión sólo de los conceptos y algoritmos relevantes para los propósitos de esta tesis. 2.1.1 Números primos y relativamente primos Divisores Se dice que b ≠ 0 divide a a si a = mb para algún valor de m, donde a, b y m son números enteros. Esto es, b divide a a si de su división no se obtiene un residuo. Se utiliza comúnmente la notación b|a para indicar que b divide a a. También, si b|a, se dice que b es divisor de a. Por ejemplo, los divisores positivos de 28 son 1, 2, 4, 7, 14 y 28. Se tienen las siguientes relaciones: • Si a|1, entonces a = ±1. • Si a|b, y b|a, entonces a = ±b. • Cualquier b ≠ 0 divide a 0. • Si b|g y b|h, entonces b|(mg + nh) para cualesquiera enteros m y n. Números primos Un entero p > 1 es un número primo [3] si sus únicos divisores son ±1 y ±p. 17 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública Cualquier entero a > 1 puede ser factorizado de forma única como α α a = p1 1 p2 2 L pn αn (2.1) donde p1 > p2 > … > pn son números primos y donde cada αi > 0. Por ejemplo, 94325 = 52 × 73 × 11. Es de gran utilidad para las siguientes secciones el visualizar (2.1) en otra forma. Si P es el conjunto de todos los números primos, entonces cualquier entero positivo puede ser escrito de modo único en la siguiente forma: a=∏p ap (2.2) P donde cada ap ≥ 0. El lado izquierdo de (2.2) es el producto de todos los posibles números primos p; para un valor particular de a, la mayoría de los exponentes ap serán 0. El valor de cualquier entero positivo puede ser especificado al simplemente listar todos los exponentes diferentes de cero en la formulación anterior. La multiplicación de dos números es equivalente a sumar sus correspondientes exponentes, esto es 12 = 22 × 31 18 = 21 × 32 216 = 23 × 33 La anterior formulación significa para a|b, expresado en términos de sus factores primos, que cualquier entero de la forma pk puede ser dividido sólo por un entero con un menor o igual exponente en el mismo número primo pj, con j ≤ k. Esto es, a | b → a p ≤ b p , para todo p 18 (2.3) Capítulo 2: Fundamentos teóricos de la criptografía de llave pública Números relativamente primos Utilizaremos la notación mcd(a, b) para indicar el máximo común divisor de a y b. El entero positivo c se dice que es el máximo común divisor de a y b si 1. c es divisor de a y de b. 2. Cualquier divisor de a y de b es un divisor de c. Una definición equivalente es: k = mcd (a, b) = max[k , de modo que k | a y k | b] (2.4) Debido a que se requiere que el máximo común divisor sea positivo, se tiene entonces que mcd(a, b) = mcd(-a, b) = mcd(a, -b) = mcd(-a, -b). En general, mcd(a, b) = mcd(|a|, |b|). También, debido a que todos los enteros diferentes de 0 dividen a 0, tenemos que mcd(a, 0) = |a|. Es fácil determinar el máximo común divisor de dos enteros positivos si estos se encuentran expresados en términos de sus factores primos. Por ejemplo, 300 = 2 2 × 31 × 52 18 = 21 × 32 × 50 mcd (300, 18) = 21 × 31 × 50 = 6 En general, k = mcd (a, b) → k p = min( a p , b p ) , para todo p (2.5) Determinar los factores primos de un número grande no es una tarea fácil, Así que la relación (2.5) no es una manera directa de calcular el máximo común divisor. Revisaremos una mejor forma más adelante en la sección 2.1.5. 19 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública Los enteros a y b son relativamente primos si no tienen factores primos en común, esto es, si su máximo común divisor es 1. Esto es equivalente a decir que a y b son relativamente primos si mcd(a, b) = 1. Por ejemplo, 8 y 15 son números relativamente primos; esto es cierto debido a que los factores primos de 8 son 1, 2, 4 y 8, y los factores primos de 15 son 1, 3 y 5. 2.1.2 Aritmética modular Dado un entero positivo n y cualquier entero a, si dividimos a entre n, obtenemos un cociente q y un residuo r que obedecen la siguiente relación: a = qn + r , ⎣ n⎦ 0 ≤ r ≤ n; q = a (2.6) donde ⎣x ⎦ es el entero más grande menor o igual a x. n 2n 3n a qn (q+1)n 012 Figura 2-1 La relación a = qn + r, 0 ≤ r < n. r La figura 2-1 demuestra que, dado un entero a y un valor positivo n, es siempre posible el encontrar q y r que satisfagan (2.6). Por ejemplo, a = 11; n = 7; 11 = 1 × 7 + 4; r=4 a = −11; n = 7; −11 = (−2) × 7 + 3; r=3 Si a es un entero y n es un entero positivo, definimos a mod n como el residuo cuando a es dividido entre n. Por lo tanto, para cualquier entero a, ⎣ n ⎦× n + (a mod n) a= a 20 (2.7) Capítulo 2: Fundamentos teóricos de la criptografía de llave pública La criptografía utiliza abundantemente las operaciones de aritmética modular [8], debido a la relativa facilidad de su manejo en los registros de las computadoras. Para una operación de k-bit módulo n, los resultados intermedios de cualquier suma, resta o multiplicación no tendrán una longitud mayor a los 2k-bits. Se dice que dos enteros a y b son congruentes módulo n, si (a mod n) = (b mod n). Esto se escribe también como a ≡ b mod n. Nótese que si a ≡ 0 mod n, entonces n|a. El operador módulo posee las siguientes características: 7. a ≡ b mod n, si n|(a−b). 8. (a mod n) = (b mod n), implica que a ≡ b mod n. 9. a ≡ b mod n, implica que b ≡ a mod n. 10. a ≡ b mod n y b ≡ c mod n, implica que a ≡ c mod n. Operaciones de aritmética modular Nótese que, por definición en la figura 2-1, el operador (mod n) realiza un mapeo de todos los enteros al subconjunto de enteros [0, 1, …, (n − 1)]. Es posible realizar operaciones aritméticas dentro de este subconjunto, y el conjunto de éstas recibe el nombre de aritmética modular. Ésta posee las siguientes propiedades: 1. [(a mod n) + (b mod n)] mod n = (a + b) mod n. 2. [(a mod n) – (b mod n)] mod n = (a – b) mod n. 3. [(a mod n) × (b mod n)] mod n = (a × b) mod n. Las tablas 2.1(a) y 2.1(b) proporcionan una ilustración de las operaciones aritméticas modulares de adición y multiplicación. Analizando los resultados de la operación de adición podemos observar claramente un patrón en la matriz resultante. También, como en la adición aritmética ordinaria, existe un inverso aditivo, o negativo, para cada número en la aritmética modular. En este caso, el negativo de un número x es el número y de modo que (x + y) ≡ 0 mod 8. 21 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública En la aritmética ordinaria, existe también un inverso multiplicativo o recíproco, para cada número. En la aritmética modular, el inverso multiplicativo de x es un número y de modo que (x + y) ≡ 1 mod 8. Nótese que no todos los números (mod 8) poseen un inverso multiplicativo, esta característica la analizaremos posteriormente con mayor detenimiento, ya que su aplicación es directa y de mucha importancia en muchos de los algoritmos criptográficos de llave pública. Tabla 2.1 Ejemplo de aritmética modular: (a) Adición módulo 8 y (b) Multiplicación módulo 8. + 0 1 2 3 4 5 6 7 + 0 1 2 3 4 5 6 7 0 0 1 2 3 4 5 6 7 0 0 0 0 0 0 0 0 0 1 1 2 3 4 5 6 7 0 1 0 1 2 3 4 5 6 7 2 2 3 4 5 6 7 0 1 2 0 2 4 6 0 2 4 6 3 3 4 5 6 7 0 1 2 3 0 3 6 1 4 7 2 5 4 4 5 6 7 0 1 2 3 4 0 4 0 4 0 4 0 4 5 5 6 7 0 1 2 3 4 5 0 5 2 7 4 1 6 3 6 6 7 0 1 2 3 4 5 6 0 6 4 2 0 6 4 2 7 7 0 1 2 3 4 5 6 7 0 7 6 5 4 3 2 1 (a) (b) Propiedades de la aritmética modular Defínase el conjunto Zn como el conjunto de enteros no negativos menores que n: Z n = {0, 1, K, (n − 1)} (2.8) A (2.8) se le conoce como el conjunto de residuos módulo n. Si se realizan operaciones de aritmética modular dentro de este conjunto, se mantienen las propiedades para los enteros en Zn, listadas en la tabla 2.2. 22 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública Tabla 2.2 Propiedades de la aritmética modular dentro del conjunto Zn. Propiedad Expresión Leyes conmutativas Leyes asociativas Leyes distributivas Identidad Inverso aditivo (−w) (w + x) mod n = (x + w) mod n (w × x) mod n = (x × w) mod n [ (w + x) + y ] mod n = [ w + (x + y) ] mod n [ (w × x) × y ] mod n = [ w × (x × y) ] mod n [ (w × (x × y) ] mod n = [(w × x) × (w × y) ] mod n (0 + w) mod n = w mod n (1 × w) mod n = w mod n Para cada w ∈ Zn, entonces existe z de modo que w + z ≡ 0 mod n. Inverso aditivo e inverso multiplicativo Existe una peculiaridad de la aritmética modular que la sitúa aparte de la aritmética ordinaria. Primero, como en la aritmética ordinaria, podemos escribir lo siguiente: si (a + b) ≡ (a + c) mod n entonces b ≡ c mod n (2.9) La ecuación (2.9) es consistente con la existencia del inverso aditivo. Al sumar el inverso aditivo de a a ambos lados de la ecuación obtenemos ((− a ) + a + b) ≡ ((− a ) + a + c ) mod n b ≡ c mod n Sin embargo, la siguiente sentencia sólo es verdadera cuando se cumple la condición adjunta: si ( a × b) ≡ ( a × c) mod n entonces b ≡ c mod n si a es relativamente primo a n (2.10) Para comprobar esto, considérese un ejemplo en el cual la condición no se cumple, 6 × 3 = 18 = 2 mod 8 6 × 7 = 42 = 2 mod 8 Sin embargo, 3 ≠ 7 mod 8 23 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública La razón de este extraño fenómeno, mencionado anteriormente al analizar la tabla 2.1(b), es que al aplicar un multiplicador a al conjunto de números en Zn para cualquier módulo n en general, fallará en producir un conjunto de residuos completo; esto si y sólo si a y n poseen factores en común. Esto se puede observar claramente en la tabla 2.1(b) en las filas correspondientes a los números 2, 4 y 6; estos números tienen factores en común con 8, es decir, que para a = { 2, 4, 6 } se tiene que mcd(a, 8) ≠ 1. En otras palabras, lo anterior significa que para un conjunto Zn, no todos sus elementos poseerán un inverso multiplicativo, sino solamente aquellos que cumplan la condición mcd(a, n) = 1. Una particularidad de este fenómeno se presenta cuando n es un número primo, en cuyo caso todos los elementos de Zn poseerán un inverso multiplicativo; esto se muestra en la tabla 2.3 para n = 11: Tabla 2.3 Existencia de inverso multiplicativo en la multiplicación módulo un número primo. + 0 1 2 3 4 5 6 7 8 9 10 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 2 3 4 5 6 7 8 9 10 2 0 2 4 6 8 10 1 3 5 7 9 3 0 3 6 9 1 4 7 10 2 5 8 4 0 4 8 1 5 9 2 6 10 3 7 5 0 5 10 4 9 3 8 2 7 1 6 6 0 6 1 7 2 8 3 9 4 10 8 7 0 7 3 10 6 2 9 5 1 8 4 8 0 8 5 2 10 7 4 1 9 6 3 9 0 9 7 5 3 1 10 8 6 4 2 10 0 10 9 8 7 6 8 4 3 2 1 Estos conceptos nos permitirán añadir una propiedad del inverso multiplicativo. Tabla 2.4 Propiedad del inverso multiplicativo en la aritmética modular. Propiedad Expresión –1 Inverso multiplicativo (w ) Para cada w ∈ Zp, existe z de modo que w × z ≡ 1 mod p. 24 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública Debido a que w siempre será relativamente primo a p, si multiplicamos todos los elementos de Zp por w, los residuos resultantes incluirán todos los elementos de Zp sólo que permutados en posición. De esta manera, al menos un residuo tendrá el valor de 1. Por lo tanto, siempre existirá un número en Zp que multiplicado por w, de como resultado 1. Este número es el inverso multiplicativo de w, y se designa como w–1. Por lo tanto, la ecuación 2.10 es consistente con la existencia de un inverso multiplicativo. Al multiplicar ambos lados de la ecuación 2.10 por el inverso multiplicativo de a, se tiene ((a −1 ) × a × b) ≡ ((a −1 ) × a × c) mod n b ≡ c mod n 2.1.3 Teoremas de Fermat y de Euler Dos teoremas que juegan un papel importante en la criptografía de llave pública son el teorema de Fermat y el teorema de Euler [3, 8, 12]. Teorema de Fermat El teorema de Fermat declara lo siguiente: Si p es un número primo y a es un entero positivo no divisible entre p, entonces a p −1 ≡ 1 mod p (2.11) Para una prueba de este teorema véase [3]. Una forma alternativa útil de este teorema es: Si p es un número primo y a es cualquier entero positivo, entonces a p ≡ a mod p (2.12) Función de Euler Antes de presentar el teorema de Euler, necesitamos introducir una cantidad importante en la teoría de números, referida como la función de Euler y escrita como φ(n), 25 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública la cual es el número de enteros positivos menores que n y relativamente primos a n. La tabla 2.5 lista todos los primeros 30 valores de φ(n). Tabla 2.5 Algunos valores de la función de Euler φ(n). n φ(n) n φ(n) n φ(n) 1 1 11 10 21 12 2 1 12 4 22 10 3 2 13 12 23 22 4 2 14 6 24 8 5 4 15 8 25 20 6 2 16 8 26 12 7 6 17 16 27 18 8 4 18 6 28 12 9 6 19 18 29 28 10 4 20 8 30 8 Para un número primo p queda claro que φ ( p) = p − 1 (2.13) Suponiendo que tenemos dos números primos p y q. Entonces, para n = pq, φ (n) = φ ( pq) = φ ( p) × φ (q) = ( p − 1)× (q − 1) (2.14) Teorema de Euler El teorema de Euler declara que para cada a y n que son relativamente primos, aφ ( n ) ≡ 1 mod n 26 (2.15) Capítulo 2: Fundamentos teóricos de la criptografía de llave pública Una forma alternativa de este teorema es también útil: aφ ( n )+1 ≡ a mod n (2.16) Este teorema tiene aplicación directa en la demostración de la validez de algoritmos como lo es el RSA [3], así como también en el planteamiento del problema del logaritmo discreto (DLP), como se verá más adelante en este capítulo. 2.1.4 Probando si un número es primo Método de Lehmann No existe una forma sencilla y eficiente a la vez, para determinar si un número grande es primo o no lo es. Si un número p es primo, entonces la ecuación x 2 ≡ 1 (mod p) sólo tiene dos soluciones, siendo éstas x ≡ 1 y x ≡ –1. El teorema puede ser expuesto en modo diferente: si existen soluciones a x2 ≡ 1 (mod n) además de ±1, entonces n no es un número primo. El método de Lehmann [11] es uno de los métodos más sencillos para saber si un número p es o no primo. El algoritmo se muestra a continuación: PRIMO (a, n) 1. Escoger un número aleatorio a < p 2. Calcular b = a(p-1)/2(mod p) 3. Si b ≠ 1 (mod p) y b ≠ -1 (mod p), p no es primo 4. Si b ≡ 1 (mod p) o b ≡ -1 (mod p), la probabilidad de que p sea primo es igual o superior al 50% Repitiendo el algoritmo n veces, la probabilidad de que p supere la prueba y sea compuesto – es decir, no primo – será de 1 contra 2n. 27 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública Método de Rabin – Miller [13, 14] A continuación se muestra el algoritmo propuesto por Miller y Rabin para probar la primalidad de un número grande. Los parámetros de entrada a este algoritmo son un número n, del cual se desea conocer si es primo o no, y un entero a menor que n. Si la función PRIMO devuelve un valor TRUE, entonces n definitivamente no es un número primo; si PRIMO devuelve un valor FALSE, entonces n podría ser primo. PRIMO (a, n) 5. Sea bk bk–1 … b0 la representación binaria del número (n–1) 6. d ← 1 7. para i ← k hasta 0 8. hacer x ← d 9. d ← (d * d) mod n 10. si d = 1 y x ≠ 1 y x ≠ n–1 11. entonces devuelve TRUE 12. si bi = 1 13. entonces d ← (d * a) mod n 14. si d ≠ 1 15. entonces devuelve TRUE 16. devuelve FALSE Un análisis del algoritmo nos muestra que en las líneas 3 a la 9 se calcula d como el valor an–1 mod n. Se sabe por el teorema de Fermat en la ecuación 2.11 que an–1 ≡ 1 mod n si n es un número primo. Por lo tanto, si el resultado final para d no es un valor de 1, nosotros sabemos que n no es un número primo, y se devuelve el valor TRUE. Ahora si consideramos la prueba en la línea 6, debido a que (n – 1) ≡ −1 mod n, aquí se prueba si x2 ≡ 1 mod n con una raíz diferente de ±1. Por el teorema mencionado anteriormente, esta condición se mantiene sólo si n no es un número primo. Por lo tanto, si la prueba es aprobada, el algoritmo PRIMO devuelve un valor TRUE. Así que si PRIMO devuelve un valor TRUE, el número n no es un número primo. Se puede demostrar que dado un número impar n que no es primo y eligiendo de manera aleatoria un entero a < n, la probabilidad de que PRIMO devuelva FALSE es menor que 0.5. Esto nos da un fundamento para determinar si un entero impar n es primo alcanzando un grado razonable de seguridad. El procedimiento es el siguiente: repetidamente llamar a 28 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública la función PRIMO empleando valores de a elegidos al azar. Si, en cualquiera de estas llamadas, PRIMO devuelve TRUE, entonces n no es un número primo. Si PRIMO devuelve un valor FALSE s veces consecutivas, entonces la probabilidad de que n sea un número primo es menor que 1 – 2–s. Por lo tanto, para un número s lo suficientemente grande, podremos estar confiados de que el número n es primo. Para números pequeños y en aplicaciones donde se necesita de extrema seguridad resulta apropiado, si también se poseen los recursos de cómputo adecuados, realizar una prueba al 100% en busca de probar si un número es o no un número primo. Esta prueba matemática consiste en simplemente dividir un número impar n entre cada uno de los números entre 3 y n–1; si el número es primo todos los residuos de las divisiones darán como resultado valores diferentes de 0. En el caso de nuestro criptosistema al tratarse de números pequeños y con objetivo de aumentar la seguridad del mismo, se optó por la implementación de este algoritmo, el cual se muestra en código C++ a continuación: BOOL es_primo(INT_32BITS n) { if (n == 0) return(FALSE); else if (n <= 2) return(FALSE); else if (n % 2 == 0) return(FALSE); for (INT_32BITS i=3; i<n ; i+=2) if (n % i == 0) return(FALSE); return(TRUE); } Consideraciones prácticas A efectos prácticos, el algoritmo que se suele emplear para generar aleatoriamente un número primo p es el siguiente: 1. Generar un número aleatorio p de n bits. 2. Poner a uno el bit más significativo – garantizamos que el número es de n bits – y el menos significativo – debe ser impar para poder ser primo. 29 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública 3. Intentar dividir p entre una tabla de primos precalculados (usualmente aquellos que sean menores que 2000). Esto elimina gran cantidad de números no primos de una forma muy rápida. Basta decir que el 99.8% de los números impares no primos es divisible por algún número primo menor que 2000. 4. Ejecutar la prueba de Rabin – Miller sobre p como mínimo cinco veces. 5. Si la prueba falla, incrementar p en dos unidades y volver al paso 3. 2.1.5 Algoritmo de Euclides Una de las técnicas básicas de la teoría de números es el algoritmo de Euclides [3, 8, 12], el cual es un sencillo procedimiento para determinar el máximo común divisor de dos enteros positivos. Una forma extendida del algoritmo de Euclides determina el máximo común divisor de dos enteros positivos, y si estos números son relativamente primos, también se obtiene el inverso multiplicativo de uno con respecto al otro. EUCLID (d, f) 1. X ← f; Y ← d 2. si Y = 0 devuelve X = gcd(d, f) 3. R = X mod Y 4. X ← Y 5. Y ← R 6. goto 2 Es aceptable el restringir el algoritmo a los enteros positivos, es decir, mcd(a, b) = mcd(|a|, |b|). Por ejemplo, para encontrar el máximo común divisor de 1970 y 1066, el algoritmo obtiene consecutivamente los resultados mostrados en la tabla 2.6. Este proceso siempre tendrá un final. Si no fuera así, se obtendría una secuencia infinita de enteros positivos, cada uno estrictamente menor que el anterior, y esto es obviamente imposible. Si mcd(d, f) = 1, entonces d posee un inverso multiplicativo módulo f. Esto es, para un entero positivo d < f, existe un d–1 < f de modo que dd–1 = 1 mod f. El algoritmo de Euclides es extendido a continuación de modo que, además de calcular el mcd(d, f), si este es 1, el algoritmo también devuelve el inverso multiplicativo de d. 30 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública Tabla 2.6 Cálculo del máximo común divisor por medio del algoritmo de Euclides. X 1970 1066 904 162 94 68 26 16 10 6 4 Y 1066 904 162 94 68 26 16 10 6 4 2 R 904 162 94 68 26 16 10 6 4 2 0 EXTENDED EUCLID (d, f) 1. (X1, X2, X3) ← (1, 0, f); (Y1, Y2, Y3) ← (0, 1, d) 2. si Y3 = 0 devuelve X3 = gcd(d, f); no existe inverso 3. si Y3 = 1 devuelve Y3 = gcd(d, f); Y2 = d–1 mod f 4. Q = ⎣X3/Y3⎦ 5. (T1, T2, T3) ← (X1 – QY1, X2 – QY2, X3 – QY3) 6. (X1, X2, X3) ← (Y1, Y2, Y3) 7. (Y1, Y2, Y3) ← (T1, T2, T3) 8. goto 2 La tabla 2.7 es un ejemplo de la ejecución de este algoritmo. Se muestra el cálculo del máximo común divisor de 550 y 1769, y debido a que el resultado obtenido es mcd(550, 1769) = 1, se demuestra que bajo esta condición este algoritmo calcula también el inverso multiplicativo. Tabla 2.7 Cálculo del máximo común divisor e inverso multiplicativo por medio del algoritmo extendido de Euclides. Q 3 4 1 1 1 1 1 4 --- X1 1 0 1 -4 5 -9 14 -23 37 X2 0 1 -3 13 -16 29 -45 74 -119 X3 1769 550 119 74 45 29 16 13 3 Y1 0 1 -4 5 -9 14 -23 37 -171 Y2 1 -3 13 -16 29 -45 74 -119 550 31 Y3 550 119 74 45 29 16 13 3 1 T1 1 -4 5 -9 14 -23 37 -171 --- T2 -3 13 -16 29 -45 74 -119 550 --- T3 119 74 45 29 16 13 3 1 --- Capítulo 2: Fundamentos teóricos de la criptografía de llave pública De la tabla 2.7 se puede apreciar que mcd(550, 1769) = 1, y el inverso multiplicativo es 550, esto es, (550×550) = 1 mod 1769. A continuación se muestra el código C++ de la implementación de este algoritmo: INT_32BITS inverso_multiplicativo(INT_32BITS a, INT_32BITS modulo) { INT_32BITS x1 = 1, x2 = 0, x3 = modulo; INT_32BITS y1 = 0, y2 = 1, y3 = a; INT_32BITS t1, t2, t3; for(;;) { if (y3 == 0) return -1; if (y3 == 1) return y2; int q = x3 / y3; t1 = x1 - q * y1; t2 = x2 - q * y2; t3 = x3 - q * y3; x1 = y1; x2 = y2; x3 = y3; } } y1 = t1; y2 = t2; y3 = t3; Para calcular el inverso multiplicativo de un número módulo n, tanto el teorema de Euler como el algoritmo de Euclides pueden ser extendidos a un problema más específico y útil para propósitos de esta tesis, esto es, si mcd(a, n) = 1. Utilizando el teorema de Euler, la solución es x = (b × aφ(n)–1) mod n. Utilizando el algoritmo de Euclides, la solución es: x = (b × (a–1 mod n)) mod n. En general, el algoritmo de Euclides es más rápido que el teorema de Euler para el cálculo de inversos multiplicativos, especialmente en rangos de 500 bits. 32 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública 2.1.6 El teorema del residuo chino Uno de los elementos más útiles de la teoría de números es el teorema del residuo Chino (CRT). En esencia, el CRT enuncia que es posible el reconstruir enteros en un cierto rango a partir de sus residuos módulo un conjunto de números relativamente primos entre ellos. Por ejemplo, los 10 enteros en Z10 = { 0, 1, 2, …, 9 } pueden ser reconstruidos a partir de sus dos residuos módulo 2 y 5 (los factores relativamente primos de 10). Digamos que los residuos conocidos de un dígito decimal x son r2 = 0 y r5 = 3; esto es, x mod 2 = 0 y x mod 5 = 3. Entonces, x es un entero par en Z10 cuyos residuos, en su división entre 5, es 3. La única solución es x = 8. EL CRT puede ser enunciado en diversas formas. Aquí se presenta una formulación que es más útil para los propósitos de este trabajo de tesis. Entonces, si tenemos k M = ∏ mi (2.17) i =1 en donde mi es un conjunto de números relativamente primos entre ellos; esto es que mcd(mi, mj) = 1 para 1 ≤ i, j ≤ k, e i ≠ j. Podemos representar cualquier entero en ZM por un conjunto de k números cuyos elementos están en Z mi empleando las siguientes correspondencias: A ↔ (a1 , a2 ,..., ak ) (2.18) en donde A ∈ ZM, ai ∈ Z mi , y ai = A mod mi para 1 ≤ i ≤ k. El CRT hace dos afirmaciones: 1. El mapeo de la ecuación 2.18 es una correspondencia uno a uno (llamada biyección) entre ZM y el producto cartesiano Z m1 × Z m2 × … × Z mk . Esto es, para cada entero A en donde 0 ≤ A ≤ M, existe un conjunto único (a1, a2, …, ak) con 0 ≤ ai < mi que lo representa, y para cada conjunto (a1, a2, …, ak) existe una única A en ZM. 33 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública 2. Las operaciones realizadas en los elementos de ZM pueden ser realizadas de forma equivalente sobre los correspondientes conjuntos (a1, a2, …, ak) al realizar la operación de manera independiente en cada posición de las coordenadas en el sistema apropiado. Esta segunda afirmación puede ser enunciada como: si A ↔ ( a1 , a2 , K, ak ) ; B ↔ ( b1 , b2 , K, bk ) entonces ( A + B ) mod M ↔ ((a1 + b1 ) mod m1 ,L, (ak + bk ) mod mk ) ( A − B ) mod M ↔ ((a1 − b1 ) mod m1 ,L, (ak − bk ) mod mk ) ( A × B ) mod M ↔ ((a1 × b1 ) mod m1 ,L, (ak × bk ) mod mk ) Una de las más útiles aplicaciones del teorema del residuo Chino es que proporciona un método para manipular números potencialmente grandes módulo M en términos de un conjunto de números más pequeños. Esto puede volverse realmente útil cuando M es un número con una cantidad de dígitos mayor o igual a los 150. Por ejemplo, para representar 814 mod 2057 como un par de números módulo 17 y 121, definimos m1 = 17 m2 = 121 M = 2057 A = 814 Tenemos también M1 = 121 y M2 = 17. Empleando el algoritmo extendido de Euclides, calculamos M1–1 = 9 mod m1 y M2–1 = 57 mod m2. (Nótese que sólo se necesita calcular cada Mi y cada Mi–1 en esta ocasión). Tomando residuos módulo 17 y 121, nuestra representación de 814 es (15, 88), debido a que 814 mod 17 = 15 y 814 mod 121 = 88. 34 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública Ahora, suponiendo que se quisiera añadir 1436 a 814 módulo 2057. Primero, calculamos también (1436) ↔ (1436 mod 17, 1436 mod 121) = (8, 105). Entonces añadimos (8, 105) + (15, 88), esto es, (8 + 15) mod 17 = 6 y (105 + 88) mod 121 = 72; esto da como resultado (6, 72). Para verificar que esto es correcto se calcula (6, 72) ↔ a1M 1M 1−1 + a2 M 2 M 2 −1 mod M = [(6 )(121)(9 ) + (72 )(17 )(57 )]mod 2057 = 76302 mod 2057 = 193 y se compara con el resultado obtenido directamente de (814 + 1436) mod 2057 = 2250 mod 2057 ≡ 193. 2.1.7 Logaritmos discretos Los logaritmos discretos son fundamentales para una variedad de algoritmos de criptografía de llave pública, incluyendo entre estos el esquema de intercambio de llaves de Diffie – Hellman y el algoritmo de firma digital (DSA). Las potencias de un entero, módulo n Recordando del teorema de Euler, ecuación 2.15, de que para cada a y n que son relativamente primos aφ(n) ≡ 1 mod n, donde φ(n), el coeficiente de Euler, es el número de enteros positivos menores que n que son relativamente primos a n. Si consideramos la expresión más general a m ≡ 1 mod n (2.19) Si a y n son relativamente primos, entonces existe al menos un entero m que satisfaga la ecuación 2.19, a saber, m = φ(n). El menor exponente positivo m, para el cual la relación 2.19 se mantiene, es conocido de varias maneras: 35 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública • El orden de a (mod n) • El exponente al cual a pertenece (mod n) • La longitud del periodo generado por a Para ver este último punto consideremos las potencias de 7, módulo 19: 71 = 7 mod 19 7 2 = 49 = 2 ×19 + 11 = 11 mod 19 7 3 = 343 = 18 × 19 + 1 = 1 mod 19 7 = 2401 = 126 ×19 + 7 = 7 mod 19 4 7 = 16807 = 884 × 19 + 11 = 11 mod19 5 No hay razón para continuar debido a que la secuencia se está repitiendo. Esto puede ser probado al observar que 73 = 1 (mod 19) y entonces 73+j = 737j = 7j (mod 19), y por lo tanto si dos potencias de 7 cuyos exponentes difieren por 3 (o por un múltiplo de 3) serán congruentes módulo 19. En otras palabras, la secuencia es periódica, y la longitud del periodo es el exponente positivo más pequeño m de modo que 7m = 1 (mod 19). La tabla 2.8 muestra todas las potencias de a, módulo 19, para todos los positivos a < 19. La longitud de la secuencia para cada valor de base se indica por medio del sombreado. Nótese lo siguiente: 1. Todas las secuencias terminan en 1. Esto es consistente con el razonamiento de los anteriores párrafos. 2. La longitud de la secuencia divide a φ(19) = 18. Esto es, un número íntegro de secuencias ocurre en cada fila de la tabla. 3. Algunas de las secuencias son de longitud 18. En este caso, se dice que el entero base a genera (vía potencias) el conjunto de enteros diferentes de 0 módulo 19. Cada uno de estos enteros es denominado una raíz primitiva del módulo 19. 36 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública Tabla 2.8 Potencias de enteros, módulo 19. a 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 a2 1 4 9 16 6 17 11 7 5 5 7 11 17 6 16 9 4 1 a3 1 8 8 7 11 7 1 18 7 12 1 18 12 8 12 11 11 18 a4 1 16 5 9 17 4 7 11 6 6 11 7 4 17 9 5 16 1 a5 1 13 15 17 9 5 11 12 16 3 7 8 14 10 2 4 6 18 a6 1 7 7 11 7 11 1 1 11 11 1 1 11 7 11 7 7 1 a7 1 14 2 6 16 9 7 8 4 15 11 12 10 3 13 17 5 18 a8 1 9 6 5 4 16 11 7 17 17 7 11 16 4 5 6 9 1 a9 1 18 18 1 1 1 1 18 1 18 1 18 18 18 18 1 1 18 a10 1 17 16 4 5 6 7 11 9 9 11 7 6 5 4 16 17 1 a11 1 15 10 16 6 17 11 12 5 14 7 8 2 13 3 9 4 18 a12 1 11 11 7 11 7 1 1 7 7 1 1 7 11 7 11 11 1 a13 1 3 14 9 17 4 7 8 6 13 11 12 15 2 10 5 16 18 a14 1 6 4 17 9 5 11 7 16 16 7 11 5 9 17 4 6 1 a15 1 12 12 11 7 11 1 18 11 8 1 18 8 12 8 7 7 18 a16 1 5 17 6 16 9 7 11 4 4 11 7 9 16 6 17 5 1 a17 1 10 13 5 4 16 11 12 17 2 7 8 3 15 14 6 9 18 a18 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 De una manera más general, se puede decir que el exponente más alto posible para el cual un número puede pertenecer (mod n) es φ(n). Si un número es de este orden, es referido como una raíz primitiva de n. La importancia de este concepto es que si a es una raíz primitiva de n, entonces sus potencias a, a 2 , K , a φ ( n ) son todas distintas entre ellas y son relativamente primas a n. En particular, para un número primo p, si a es una raíz primitiva de p entonces a, a 2 , K, a p −1 son todas distintas entre ellas (mod n). Para el número primo 19, sus raíces primitivas son 2, 3, 10, 13, 14 y 15. No todos los enteros poseen raíces primitivas. De hecho, los únicos enteros con raíces primitivas son aquellos que son de la forma 2, 4, pα, y 2pα, en donde p es un número primo impar. 37 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública Índices Con números positivos reales ordinarios, la función logaritmo es la inversa de la operación de elevar a una potencia. Una función análoga existe para la aritmética modular. Para entender esto, revisaremos brevemente las propiedades de los logaritmos ordinarios. El logaritmo de un número se define como la potencia a la cual algún número positivo base (excepto 1) debe ser elevado de modo que sea igual a dicho número. Esto es, para la base x y para un valor y, y = z log x ( y ) Las propiedades de los logaritmos incluyen las siguientes: log x (1) = 0 log x ( x ) = 1 log x ( yz ) = log x ( y ) + log x (z ) ( ) log x y r = r × log x ( y ) Considerando una raíz primitiva para un número primo p (el argumento puede ser desarrollado también para los números no primos). Entonces se sabe que las potencias de a desde 1 hasta (p – 1) producen cada entero desde 1 hasta (p -1) exactamente una vez. También se sabe que cualquier entero b puede ser expresado en la forma b ≡ r mod p, donde 0 ≤ r ≤ ( p − 1) por definición de la aritmética modular. Se sigue que para cualquier entero b y una raíz primitiva a de un número primo p, uno puede encontrar un único exponente i tal que b ≡ a i mod p, donde 0 ≤ i ≤ ( p − 1) 38 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública El exponente i es conocido como el índice de un número b para la base a (mod p). Esto se expresa como inda,p(b). Nótese que ind a , p (1) = 0, porque a 0 mod p = 1 mod p = 1 ind a , p (a ) = 1, porque a1 mod p = a Ahora si consideramos x=a y=a xy = a ind a , p ( x ) ind a , p ( y ) mod p mod p ind a , p ( xy ) mod p Empleando las leyes de la multiplicación modular, a ind a , p ( xy ) ( = (a mod p = a ind a , p ( x ) )( ( ) mod p ) ( ) )mod p mod p a ind a , p y ind a , p ( x )+ ind a , p y Ahora si consideramos el teorema de Euler, el cual declara que, para cada a y n que son relativamente primos, aφ ( n ) ≡ 1 mod n Cualquier entero positivo puede ser expresado en la forma z = q + kφ(n). Por lo tanto, por el teorema de Euler, a z ≡ a q mod n, si z = q mod φ (n) Aplicando esto a la siguiente igualdad se tiene que [ ] ind a , p ( xy ) = ind a , p ( x ) + ind a , p ( y ) mod φ ( p ) y generalizando, 39 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública ( ) [ ] ind a , p y r = r × ind a , p ( y ) mod φ ( p ) Esto demuestra la analogía entre los logaritmos ordinarios y los índices. Por esta razón, estos últimos son denominados logaritmos discretos. Es muy importante tener siempre en mente que un logaritmo discreto único, módulo m base a, existe sólo si a es una raíz primitiva de m. Cálculo de logaritmos discretos Considere la ecuación y = g x mod p Dado g, x y p, es un asunto directo y sencillo el calcular y. En el peor escenario, uno tendría que realizar repetidas multiplicaciones de x, y existen algoritmos para lograr una gran eficiencia en esto. Sin embargo, dados y, g, y p, es, en general, muy difícil calcular x (es decir, calcular el logaritmo discreto). El grado de dificultad parece ser del mismo orden de magnitud que la factorización de números primos requerido por el algoritmo RSA. Se ha encontrado que el algoritmo más rápido para obtener el logaritmo discreto módulo un número primo está en el orden de: e ⎛⎜ (ln p ) 13 ln (ln p ) ⎞⎟ ⎝ ⎠ 2 3 lo cual es totalmente impráctico para números primos grandes. 2.1.8 Campo finito GF – Galois Field Un campo finito, también llamado Galois Field GF [10], es un campo con un orden finito (número de elementos). El orden de un campo finito siempre es un número primo o potencia de un número primo. Por cada potencia de un número primo, existe exactamente un campo finito GF(pn), comúnmente escrito como Fp n . 40 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública GF(p) es llamado campo de números primos de orden p y es el campo de residuos módulo p, donde a los p elementos se les llama por 0, 1,…, p–1. a = b en GF(p) significa lo mismo que a ≡ b (mod p). 2.1.9 Algoritmo para el cálculo de (ab mod n) Un algoritmo muy utilizado para la implementación de criptosistemas de llave pública es la exponenciación módulo un número n [3]. El pseudo código de un algoritmo de este tipo sería: ABMODN (a, b, n) 1. c ← 0; d ← 1 2. para i ← k hasta 0 3. hacer c ← 2 * c 4. d ← (d * d) mod n 5. si bi = 1 6. entonces c ← c + 1 7. d ← (d * a) mod n La variable c se incluyó sólo por propósitos didácticos. El valor final de c es el exponente. A continuación se muestra el algoritmo en código C++. // Función para calcular a^b(mod n) ENTERO_32BITS abmodn (ENTERO_32BITS a, ENTERO_32BITS b, ENTERO_32BITS n) { ENTERO_32BITS d = 1; ENTERO_32BITS aux = NUMERO_MAYOR_HEX; for (short i=NUMERO_BITS-1; i>=0; i--) { d = MODULO((d * d), n); if ((aux>>=1) & b) d = MODULO((d * a), n); } return d; } 41 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública 2.2 Criptografía y números aleatorios Los algoritmos de llave pública, debido a su mayor orden de complejidad, suelen ser empleados en conjunto con algoritmos de llave privada de la siguiente forma: el mensaje primero se codifica empleando un algoritmo simétrico y la llamada clave de sesión, que será diferente en cada ocasión [11]. Es la clave de sesión la que se codifica empleando criptografía asimétrica. La única manera de que estas claves sean seguras es que no exista ningún tipo de dependencia entre una clave y la siguiente, esto es, que sean aleatorias. De aquí surge el interés por los números aleatorios en criptografía. 2.2.1 Tipos de secuencias aleatorias Secuencias pseudoaleatorias En realidad es casi del todo imposible generar secuencias auténticamente aleatorias en una computadora, puesto que estas máquinas son – al menos en teoría – completamente deterministas. Todos los generadores pseudoaleatorios producen secuencias finitas y periódicas de números empleando operaciones aritméticas y/o lógicas. Lo único que podremos conseguir es que estas secuencias sean lo más largas posible antes de comenzar a repetirse y que superen las pruebas estadísticas de aleatoriedad. En este sentido podríamos hablar de: Secuencias estadísticamente aleatorias: Secuencias que superan las pruebas estadísticas de aleatoriedad. Un generador congruencial lineal cumple esta propiedad, pero en criptografía será del todo inútil, debido a que cada valor de la secuencia se emplea como semilla para calcular el siguiente, lo cual nos permite conocer toda la serie a partir de un único valor. Supongamos que tenemos un sistema que se basa en emplear claves aleatorias para cada sesión y usamos un generador de este tipo. Bastaría con que una de las claves quedara comprometida para que todas las comunicaciones – pasadas y futuras – pudieran ser 42 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública descifradas sin problemas. Incluso se ha demostrado que conociendo únicamente un bit de cada valor de la secuencia, ésta puede ser recuperada completamente con una cantidad relativamente pequeña de valores. Secuencias criptográficamente aleatorias El problema de las secuencias estadísticamente aleatorias, y lo que las hace poco útiles en criptografía, es que son completamente predecibles. Definiremos, por tanto: Secuencias criptográficamente aleatorias: Para que una secuencia pseudoaleatoria sea criptográficamente aleatoria, ha de cumplir la propiedad de ser impredecible. Esto quiere decir que debe ser computacionalmente intratable el problema de averiguar el siguiente número de la secuencia, teniendo total conocimiento acerca de todos los números anteriores y del algoritmo de generación empleado. Existen generadores pseudoaleatorios criptográficamente resistentes que cumplen esta propiedad. Sin embargo no son suficientes para nuestros propósitos, debido a que se necesita una semilla para inicializar el generador. Si un atacante lograra averiguar la semilla que estamos empleando en un momento dado, podría de nuevo comprometer nuestro sistema. Necesitamos para ella valores realmente impredecibles, de forma que nuestro adversario no pueda averiguarlos ni tratar de simular el proceso de generación que nosotros hemos llevado a cabo. Necesitamos, pues, valores auténticamente aleatorios. Secuencias totalmente aleatorias Como ya se ha dicho antes, no existe la aleatoriedad cuando se habla de computadoras. En realidad se puede decir que no existen en el Universo sucesos cien por cien aleatorios. En cualquier caso, y a efectos prácticos, consideraremos un tercer tipo de secuencias pseudoaleatorias: 43 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública Secuencias aleatorias: Diremos que una secuencia es totalmente aleatoria (o simplemente aleatoria) si no puede ser reproducida de manera fiable. Llegados a este punto parece claro que nuestro objetivo no va a ser generar secuencias aleatorias puras, sino más bien secuencias impredecibles e irreproducibles. Sería suficiente, pues, con emplear un generador criptográficamente aleatorio alimentado por una semilla totalmente aleatoria. 2.2.2 Generación de secuencias criptográficamente aleatorias Para poder obtener secuencias a la vez impredecibles e irreproducibles, haremos uso de generadores de secuencias criptográficamente aleatorias, en conjunto con algún mecanismo de recolección de bits aleatorios, que nos va a permitir inicializar la semilla del generador. Un esquema de este tipo sería seguro siempre que se proteja adecuadamente la semilla empleada. Se ilustrarán primero algunos mecanismos para obtener los bits de la semilla para posteriormente centrarnos en los generadores criptográficamente aleatorios. Obtención de bits aleatorios Como se menciono anteriormente, las operaciones aritméticas y lógicas que realiza una computadora son completamente deterministas. Sin embargo, las computadoras, como se verá posteriormente en esta sección, poseen elementos menos deterministas que pueden ser útiles para nuestros propósitos. Para obtener n bits aleatorios bastaría con que una persona lanzara una moneda al aire n veces y nos fuera diciendo el resultado. En la actualidad apenas hay computadoras que incorporen hardware específico para esta tarea, aunque existe y sería bastante barato y sencillo incorporarlo a la arquitectura de cualquier computadora. Existen valores obtenidos del hardware de la computadora que suelen proporcionar algunos bits de aleatoriedad. Parece razonable que leer en un momento dado el valor de un reloj interno de alta precisión proporcione un resultado más o menos impredecible, por lo 44 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública que podríamos emplearlo para recolectar valores aleatorios. Diferentes pruebas han demostrado sin embargo que mecanismos de este tipo, que pueden ser útiles en ciertas arquitecturas y sistemas operativos, dejan de servir en otras versiones del mismo sistema o en arquitecturas muy similares, por lo que debemos de tener mucho cuidado con esto. Algunas veces se ha propuesto el uso de los números de serie de los componentes físicos (hardware) de un sistema, pero recordemos que estos números tienen una estructura muy rígida, y a veces conociendo simplemente el fabricante y la fecha aproximada de fabricación podemos adivinar casi todos sus dígitos, por lo que van a ser demasiado predecibles. Tampoco son útiles las fuentes públicas de información, como por ejemplo los bits de un CD de audio, puesto que nuestros atacantes pueden disponer de ellas, con lo que el único resto de aleatoriedad que nos va a quedar es la posición que escojamos dentro del CD para extraer los bits. Fuentes adecuadas de obtención de bits aleatorios Cuando no disponemos de un elemento físico en la computadora específicamente diseñado para producir datos aleatorios, podemos emplear algunos dispositivos relativamente comunes en las computadoras actuales: Tarjetas digitalizadoras de sonido o video. Un dispositivo digitalizador de audio (o video) sin ninguna entrada conectada, siempre que tenga ganancia suficiente, capta esencialmente ruido térmico, con una distribución aleatoria, y por lo tanto puede ser apto para nuestros propósitos. Unidades de Disco. Las unidades de disco presentan pequeñas fluctuaciones en su velocidad de giro debido a turbulencias en el aire. Si se dispone de un método para medir el tiempo de acceso de la unidad con suficiente precisión, se pueden obtener bits aleatorios de la calidad necesaria. 45 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública Si no se dispone de una fuente fiable de bits aleatorios se puede efectuar la combinación de varias fuentes de información menos fiables. Por ejemplo, podríamos leer el reloj del sistema, algún identificador del hardware, la fecha y la hora local, el estado de los registros de interrupciones del sistema, etc. Esto garantizaría que en total se ha recogido una cantidad suficiente de bits realmente aleatorios. La mezcla de todas esas fuentes puede proporcionarnos suficiente aleatoriedad para nuestros propósitos. 2.2.3 Generadores aleatorios criptográficamente seguros Suponiendo que ya se tiene una cantidad suficiente de bits auténticamente aleatorios (impredecibles e irreproducibles), se analizará un par de generadores pseudoaleatorios que permiten obtener secuencias lo suficientemente seguras como para ser empleadas en aplicaciones criptográficas. Generador X9.17 Propuesto por el Instituto Nacional de Estándares Norteamericano (ANSI por sus siglas en inglés), permite, a partir de una semilla inicial s0 de 64 bits, obtener secuencias de valores también de 64 bits. El algoritmo para obtener cada uno de los valores de la secuencia es el siguiente: g n = DES (k , DES (k , t ) ⊕ S n ) g n+1 = DES (k , DES (k , t ) ⊕ g n ) donde k es una clave aleatoria reservada para la generación de cada secuencia, y t es el tiempo en el que cada valor es generado – cuanta más resolución tenga (hasta 64 bits), mejor –. DES(K,M) representa la codificación de M mediante el algoritmo DES, empleando la clave K, y ⊕ representa la función XOR. Nótese que el valor k ha de ser mantenido en secreto para que la seguridad de este generador sea máxima. 46 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública Generador Blum Blum Shub Es quizá el algoritmo que más pruebas de resistencia ha superado, con la ventaja adicional de su gran simplicidad, aunque es computacionalmente mucho más costoso que el algoritmo X9.17. Consiste en escoger dos números primos grandes, p y q, que cumplan la siguiente propiedad: p ≡ 3 mod 4 q ≡ 3 mod 4 Sea entonces n = pq. Escogemos un número x aleatorio primo relativo con n, que será nuestra semilla inicial. Al contrario que x, que debe ser mantenido en secreto, n puede ser pública. Calculamos los valores si se cumple lo de la serie de la siguiente forma: s0 = x 2 mod n 2 si +1 = si mod n Hay que tener cuidado de emplear únicamente como salida unos pocos de los bits menos significativos de cada si. De hecho, si elegimos no más que log2(log2(si)) bits en cada caso podemos asegurar que predecir el siguiente valor de la serie es al menos tan difícil como factorizar n. 2.3 Esquemas de verificación compartida El concepto original de los esquemas de verificación compartida fue inventado en forma independiente por George Blakley y Adi Shamir en 1979 [15]. En un sistema criptográfico normal existe una llave privada o secreta la cual, en caso de extraviarse, imposibilitaría el acceso a la información cifrada. Esto podría ocurrir por descuido, pérdida u olvido del responsable de la seguridad de dicha llave, o por alguna otra circunstancia externa ajena al mismo. En algunos casos extremos, esta pérdida podría ocurrir también por un desperfecto en una computadora, muerte de la persona responsable o incluso por robo. 47 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública El principal objetivo de la criptografía es proteger la información, no las llaves. Para realizar esto necesitamos métodos diferentes. Son obvios los riesgos de mantener la llave almacenada en un solo lugar, como vimos en el párrafo anterior. Una solución obvia es almacenar simultáneamente múltiples copias de la llave en diferentes localidades, pero esto aumenta considerablemente los problemas como lo son el riesgo de errores humanos y robos. La búsqueda de la solución a esta problemática dio origen a los esquemas de verificación compartida. La idea detrás de un esquema de verificación compartida es la de dividir la llave privada o secreta en porciones, con la finalidad de que la información pueda ser recuperada en forma conjunta por los propietarios de dichas porciones. Shamir planteó el problema de dividir una llave K en n partes, K1, …, Kn, de modo que: 1. El conocimiento de cualesquiera t o más partes permita que K sea fácilmente calculable. 2. El conocimiento de cualesquiera t-1 o menos partes dejen a K completamente indeterminada. A tal esquema se le denomina como esquema de umbral (t, n). Entonces, si t y n son números enteros positivos, siendo t<n, el esquema de umbral (t, n) es un método que comparte una llave secreta K entre un grupo de participantes G, de tal manera que cualesquiera t participantes puedan calcular el valor de K, y un grupo de t-1 participantes no lo puedan hacer. Existe una diversidad de diferentes esquemas de verificación compartida, la cual ha surgido como respuesta a la gran variedad de condiciones y características requeridas en ciertas aplicaciones en particular. Héctor Hernández [10], en su tesis, realizó una investigación de los diferentes esquemas de verificación compartida así como de los diversos algoritmos que actualmente se consideran de relevancia en el área. 48 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública 2.3.1 Esquema umbral (t, n) de Shamir El algoritmo implementado en esta tesis, utiliza ecuaciones polinomiales en un campo finito para construir el esquema de umbral (t, n). Este algoritmo fue propuesto originalmente por Adi Shamir para esta aplicación [15]. Dados k puntos en un plano bidimensional (x1, y1),…, (xk, yk), siendo xi ≠ xj, sólo existe un y sólo un polinomio p(x) de grado k-1 de modo que p(xi) = yi para toda i. Para dividir la llave D en porciones Di, podemos elegir de modo aleatorio un polinomio de grado k-1: p ( x ) = a0 + a1 x + L + ak −1 x k −1 (2.20) D1 = p(1), K, Di = p(i), K, Dn = p(n) (2.21) en el cual a0 = D y evaluar: Dado un subconjunto de k de estos Di valores (incluyendo los índices), podemos encontrar los coeficientes de p(x) por interpolación, y entonces evaluar D = p(0). El conocimiento de exactamente k-1 de estos valores, por otro lado, no es suficiente para poder calcular D. Para hacer esto más claro, utilizaremos aritmética modular en lugar de aritmética real. Al aplicar al conjunto de números enteros la operación módulo con un número primo p, formamos un campo finito en el cual es posible la interpolación polinomial. Dado un dato de valor entero D, elegimos un número primo p el cual es mayor tanto de D como de n. Los coeficientes a1, …, ak-1 en q(x) se eligen de modo aleatorio de una distribución uniforme sobre los enteros en [0, p), y los valores D1, …, Dn son calculados con la operación módulo p. 49 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública Por ejemplo, si se tiene la llave D = 9, en un esquema de verificación compartida (3, 5), y siendo p = 17, entonces: 1. Generamos la ecuación cuadrática con valores elegidos de modo aleatorio, ( ) p( x) = 10 x 2 + 3x + 9 mod17 2. Calculamos las 5 porciones, D1 = p(1) = (10 + 3 + 9) mod17 = (22) mod17 = 5 mod17 D2 = p(2) = (40 + 6 + 9 ) mod17 = (55) mod17 = 4 mod17 D3 = p(3) = (90 + 9 + 9 ) mod 17 = (108) mod17 = 6 mod17 D4 = p(4) = (160 + 12 + 9 ) mod17 = (181) mod17 = 11 mod 17 D5 = p (5) = (250 + 15 + 9 ) mod 17 = (274) mod17 = 2 mod17 3. Ahora se procederá a recuperar D a partir de un subconjunto de 3 porciones (D1, D3, D4). Planteando las ecuaciones: (a ⋅1 + b ⋅1 + D )mod17 = 5 mod17 (a ⋅ 3 + b ⋅ 3 + D )mod17 = 6 mod17 (a ⋅ 4 + b ⋅ 4 + D )mod17 = 11 mod17 2 2 2 Resolviendo el sistema de ecuaciones lineales se obtiene a = 10, b = 3 y D = 7. Por lo tanto la llave original es D = 7. Se puede apreciar de manera muy clara en el planteamiento anterior, que si sólo se tuvieran 2 porciones, el sistema de ecuaciones lineales tendría un número infinito de soluciones, imposibilitando la recuperación de la llave original. 50 Capítulo 2: Fundamentos teóricos de la criptografía de llave pública Algunas de las propiedades de gran utilidad de este esquema, cuando se compara con los métodos tradicionales de seguridad para llaves de un criptosistema, son: 1. El tamaño de cada porción no excede el tamaño de la llave original. 2. Cuando k se mantiene fija, las porciones Di pueden ser añadidas o eliminadas dinámicamente del sistema, sin afectar a las demás. 3. Es fácil cambiar todas las porciones Di sin cambiar la llave original D; todo lo que se necesita es un nuevo polinomio p(x). Un cambio frecuente de este tipo puede incrementar la eficiencia y seguridad del sistema, debido a que diferentes llaves Di no pueden ser empleadas a menos que pertenezcan al mismo polinomio p(x). 4. Al asignar a cada usuario diferentes cantidades de porciones Di, es posible implementar un esquema jerárquico, en el cual, el número de usuarios necesarios para recuperar la información dependerá de su importancia o jerarquía en la organización. Por ejemplo, el director de la compañía podría tener 4 llaves permitiéndole un acceso directo a la información, mientras que los gerentes de área podrían tener 2, haciendo necesario la presencia de por lo menos dos de ellos para recuperar la misma. 51 Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu Capítulo 3 Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu 3.1 Introducción C. L. Hsu y T. C. Wu son autores de un reciente esquema de cifrado muy completo y eficiente denominado esquema de encripción autentificada empleando verificación compartida (t, n) [9]. Este esquema de cifrado es el adoptado en la implementación del criptosistema desarrollado en esta tesis, por lo que será importante dejar bien establecidos los fundamentos matemáticos sobre los cuales se encuentra definido. El término “encripción autentificada” se refiere a un nuevo tipo de esquema de firma digital, que proporciona recuperación del mensaje, propuesto por Nyberg y Rueppel [16, 17]. Este esquema es una combinación de técnicas criptográficas, ya que permite realizar de manera simultánea el cifrado de datos y la firma digital. Se puede deducir que el uso de la encripción autentificada para obtener confidencialidad e integridad en nuestros datos requerirá un menor ancho de banda para la transmisión de datos, comparándolo con el enfoque directo que emplea de forma separada los esquemas de cifrado y de firma digital. Al firmar primero y luego cifrar, cualquier firmante puede proteger un mensaje de tal forma que sólo los receptores autorizados (o verificadores) que tengan la habilidad de descifrar el mensaje, puedan verificar la firma digital. El esquema propuesto por Hsu y Wu integra 52 Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu eficientemente las ideas de diseño de un esquema de encripción autentificada con un esquema de umbral (t, n). 3.2 Descripción del esquema El esquema se encuentra dividido en cuatro etapas: inicialización del sistema, registro, encripción de firma y recuperación del mensaje. En la etapa de inicialización del sistema, la autoridad del sistema (SA) define los parámetros del sistema y los hace públicos. Después de esto, SA puede aceptar el registro solicitado por un firmante o por un grupo de verificadores. Para el registro del firmante, SA le genera una llave secreta y una llave pública. Para el registro del grupo de verificadores, SA primero genera un solo par de llave secreta y llave pública para todo el grupo. Posteriormente, emplea el esquema umbral (t, n) de Shamir para dividir la llave secreta del grupo en n porciones, cada una de las cuales es entregada a su respectivo verificador en el grupo a través de un canal seguro. La porción guardada por cada uno de los verificadores se utilizará después para la recuperación del mensaje. Por motivos de simplicidad, la llave secreta del firmante o de los verificadores será llamada llave personal. En la etapa de encripción de firma, el firmante primero utiliza su propia llave personal para generar la firma de un mensaje dirigido a un determinado grupo, y luego emplea la llave pública del grupo para producir el texto cifrado de la firma, la cual se envía al grupo de verificadores. En la etapa de recuperación del mensaje cualesquiera t de los n verificadores en el grupo, teniendo la habilidad de descifrar el texto cifrado de firma recibido, pueden cooperar de manera colectiva para recuperar y verificar el mensaje sin hacer públicas sus respectivas llaves personales. Este esquema de verificación compartida se implementó, en esta tesis, como una aplicación de transferencia de archivos a través de una red LAN, permitiendo el envío seguro de un archivo de manera simultánea a varios usuarios, los cuales necesitan cooperar 53 Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu posteriormente para poder recuperar y visualizar correctamente el archivo recibido por cada uno de ellos. Los detalles para cada una de las etapas se ilustran en las siguientes secciones. 3.2.1 Inicialización del sistema La autoridad del sistema SA selecciona dos números primos de gran magnitud p y q, donde q | p-1; selecciona también un generador g de orden q en GF(p), esto es, g=h p −1 q mod p (3.1) donde 1<h<(p-1), ∀ g>1. Por último SA hace a p, q y g del dominio público (véase figura 3-1). Figura 3-1 Etapa de inicialización del sistema del esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu. En esta primera etapa del proceso sólo interviene una computadora en la red LAN, a la cual se le ha denominado como autoridad del sistema. Esta computadora podría bien ser 54 Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu el servidor de la red, aunque esto no es del todo necesario y la implementación final estará realmente en función de la infraestructura LAN que se tenga disponible. Esto hace ver que es necesaria una aplicación, realizada en lenguaje de programación de alto nivel, para la administración de las comunicaciones y la verificación continua de la integridad y seguridad del sistema. 3.2.2 Registro Si A es el firmante, G = { U1, U2, …, Un } el grupo de n verificadores, e IDi ≠ 0 los identificadores asociados a Ui. Para el registro de A, SA selecciona de modo aleatorio un entero xA ∈ Zq* (Zq* = {a ∈ Zq | mcd(a,q) = 1} ) para que sea la llave personal de A, y emplea el esquema de Diffie-Hellman [5] para calcular la correspondiente llave pública, como se muestra en la figura 3-2: y A = g x A mod p (3.2) Figura 3-2 Etapa de registro (a) del esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu. 55 Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu Para el registro de G y todos los verificadores de G, SA selecciona de modo aleatorio un entero xG ∈ Zq* para que sea la llave secreta de G y calcula su correspondiente llave pública yG = g xG mod p (3.3) Posteriormente, SA genera de modo aleatorio un polinomio de grado (t-1) p (v ) = xG + a1v + a2v 2 + L + at −1v t −1 mod q (3.4) donde ai ∈ Zq (para i = 1, 2, …, t-1) y calcula la llave personal xi y su correspondiente llave pública yi para cada Ui ∈ G, donde xi = p( IDi ), yi = g xi mod p (3.5) Por último, SA entrega cada llave personal a su dueño (firmante o verificador) a través de un canal seguro y da a conocer todas las llaves públicas. Existen varios métodos apropiados para hacer pública cierta información en una red LAN. Una de ellas podría ser el envío de la misma a cada uno de los participantes; otra sería depositarla en un directorio de acceso público en la red. Nótese que SA no guarda algún parámetro secreto una vez que la etapa de registro ha finalizado. En este segundo paso de la etapa de registro intervienen n+2 computadoras de la red, la autoridad del sistema (SA), el firmante y los n verificadores (G). De aquí se puede observar la necesidad de una segunda aplicación en lenguaje de alto nivel que administre: (1) el proceso de encripción de firma que estará en la computadora firmante, y (2) el proceso de descifrado el cual será el mismo para cada una de las computadoras del grupo G de verificadores (véase figura 3-3). 56 Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu Figura 3-3 Etapa de registro (b) del esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu. 3.2.3 Encripción de firma Supongamos que el firmante A quiere enviar de manera segura un mensaje M ∈ Zp a los verificadores de G, en donde M contiene suficiente redundancia para una posterior verificación cuando sea recuperada. Primero, A selecciona de modo aleatorio un entero k ∈ Zq* y emplea el esquema de firma AMV [18], el cual es una modificación del esquema de firma de ElGamal [19], para genera la firma (r, s) de M, en donde r = Mg − k mod p s = k − x A r mod q (3.6) Entonces A selecciona de modo aleatorio un entero d ∈ Zp* y genera el texto cifrado de firma (c1, c2, c3) para M, en donde 57 Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu c1 = g d mod p c2 = ryG −d mod p (3.7) c3 = s Finalmente, SA envía el texto cifrado de firma (c1, c2, c3) de M al grupo G (véase figura 3-4). Figura 3-4 Etapa de encripción de firma del esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu. 3.2.4 Recuperación del mensaje Sin pérdida de generalidad, sea W = { U1, U2, …, Ut } el subconjunto de t verificadores de G que desean recuperar cooperativamente el mensaje M a partir del texto cifrado de firma recibido (c1, c2, c3). Primero, cada Ui ∈ W utiliza su propia llave personal para calcular el mensaje auténtico ( xi Li mod q ) Ei = c1 58 mod p (3.8) Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu Li = donde ∏ − ID (ID − ID ) t −1 j i j mod q (3.9) j =1,i ≠ j y lo presenta a los demás participantes en W. Con el conocimiento de t E = ∏ E j mod p (3.10) j =1 cada Ui ∈W recalcula la firma de M como r = c2 E mod p (3.11) s = c3 y entonces recupera M calculando M = g s y A r mod p r (3.12) El mensaje M recuperado puede ser verificado analizando la validez de la redundancia que contiene. A continuación se mostrará que el esquema propuesto funciona correctamente bajo la hipótesis que todos los participantes en W son honestos. De las ecuaciones 3.3, 3.7(a) y 3.8 E= ∏c ( xi Li mod q ) 1 U i ∈W ( xi Li mod q ) = c1 U∑ i∈W ( p (0) ) = c1 ( ) = gd xG = yG (mod p ) d Esto implica que con el conocimiento de (c1, c2, c3) y E, cada verificador en W puede recalcular r mediante la ecuación 3.11(a). Es más, elevando ambos lados de la ecuación 3.6(b) a exponentes de base g se obtiene 59 Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu −r g s = g k g − x A r = g k y A (mod p ) (3.13) De las ecuaciones 3.6(a) y (3.13), puede deducirse fácilmente que cada verificador en W obtendrá el mensaje correcto M mediante la ecuación 3.12 (véase figura 3-5). Figura 3-5 Etapa de recuperación del mensaje del esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu. 3.3 Análisis de seguridad Tomando en cuenta los detalles de implementación de los esquemas de umbral (t, n), es razonable suponer que se presentarán un máximo de t-1 verificadores del grupo G, con objeto de proporcionarse entre ellos sus llaves personales y planear de esta manera un ataque directo a la seguridad del criptosistema. 60 Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu En esta sección se analizarán tres posibles ataques directos a la seguridad del criptosistema basado en el esquema de verificación compartida de Hsu y Wu. En el esquema propuesto cualquier adversario dentro o fuera del grupo G, se enfrentará a la dificultad de resolver el problema del logaritmo discreto (DLP) [5, 19], para revelar cualquier llave personal (o la llave secreta de G) y crearse un texto cifrado de firma válido para un mensaje dado direccionado a G. Los ataques que se analizarán son ataques de conspiración, los cuales son perpetrados por algunos verificadores dentro de G o por un verificador malicioso en complicidad con un firmante deshonesto en la etapa de encripción de firma. 3.3.1 Ataque 1 Dado un texto cifrado de firma (c1, c2, c3) para M y toda la información pública disponible, un grupo de menos de t verificadores en conspiración dentro de G trata de revelar la llave personal del firmante, la llave personal de cualquier otro verificador, o la llave secreta del grupo G. Análisis del ataque 1: Estos verificadores en conspiración pueden obtener la llave personal de A (xA) ya sea mediante la ecuación 3.2 ó la ecuación 3.6(b). Sin embargo, como se analiza en [18, 19], ellos tendrán que enfrentarse al DLP para poder calcular xA a partir de estas ecuaciones. Por otro lado, ellos primero tendrían que reconstruir el polinomio p(x) y obtener la llave personal xi = f(IDi) para cualquier otro Ui ∈ G, o la llave secreta de xG = f(0) para G. Sin embargo, p(x) puede ser reconstruido sólo al obtener el conocimiento de las llaves personales xi de al menos t verificadores del grupo G. De este modo, menos de t verificadores dentro de G no podrán revelar la llave personal de cualquier otro verificador o la llave secreta de G, aún cuando ellos publiquen los valores de sus llaves personales. 61 Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu 3.3.2 Ataque 2 Menos de t verificadores en conspiración dentro de G intentan actuar como el firmante A para crearse un texto cifrado de firma válido para un mensaje escogido M; todo esto sin conocer la llave personal de A. Análisis del ataque 2: Sin pérdida de generalidad, se supondrá que U1, U2, …, y Ut-1 son t-1 verificadores de G en conspiración, los cuales desean crear un texto cifrado de firma válido para un mensaje escogido M, de modo que Ut pensará que el mensaje recuperado M es un mensaje legal enviado por A. Ellos deben calcular primero una firma válida (r, s) para M satisfaciendo la ecuación 3.12, y entonces crear un texto cifrado de firma válido (c1, c2, c3) para M mediante las ecuaciones 3.7. Como se analizó en [18, 19, 20], ellos se encontrarán con el DLP para poder calcular una firma válida (r, s) para M, satisfaciendo la ecuación 3.12 sin conocer xA. De este modo, la falsificación de un texto cifrado de firma válido para un mensaje M escogido, a cargo de menos de t verificadores de G en conspiración, está basada en la dificultad de resolver el DLP. 3.3.3 Ataque 3 Un verificador malicioso dentro de G se ha puesto en complicidad con el firmante A para conocer el parámetro secreto d en la etapa de encripción de firma. El verificador trata de impedir que otros t-1 verificadores honestos en W recuperen el mensaje de texto cifrado de firma enviado subsecuentemente por un firmante B, de tal modo que sólo el pueda recuperar correctamente el mensaje. Análisis del ataque 3: Supongamos que (c1, c2, c3) es el texto cifrado de firma para M, generado por el firmante A con el parámetro d seleccionado de modo aleatorio, y (c1’, c2’, c3’) es el texto 62 Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu cifrado de firma para M’ generado por el firmante B con el parámetro d’ seleccionado de modo aleatorio. A partir de las ecuaciones 3.7a y 3.8 se puede observar que el valor de E depende directamente de c1, el cual depende directamente del parámetro d. Esto es, E = c1 f (0) = c1 xG = yG (mod p ) d y d' E ' = c1 ' f ( 0 ) = c1 ' xG = yG (mod p ) En caso de que a un verificador malicioso le sea revelado el valor del parámetro d en la etapa de encripción de firma, entonces sólo él conoce E y además tiene la capacidad de recuperar M por él mismo sin la participación de los otros t-1 verificadores en W. Si el firmante B de manera fortuita selecciona d’ = d en la etapa de encripción de firma, esto implica que E’ = E, o si se encuentra que c1’ = c1Z mod p (para 1 ≤ z ≤ q), esto implica que E’ = Ez mod p, entonces el verificador malicioso conocerá E’. Por lo tanto podrá recuperar correctamente M’ a partir del texto cifrado de firma (c1’, c2’, c3’) generado por el firmante B. Sin embargo, la probabilidad de éxito en un ataque multiplicativo como éste es de 1/q. Este esquema será lo suficientemente seguro si |q| ≥ 160 bits, como se sugiere en [21]. 3.4 Simulación matemática Supongamos el siguiente escenario hipotético. Se tienen 7 computadoras personales (PC’s) interconectadas a través de una red LAN en un edificio de oficinas bancarias; el usuario de una de ellas requiere compartir un archivo con otros 5 usuarios de la misma red, pero por motivos de seguridad y confidencialidad de la información necesita que estén presentes por lo menos 3 de ellos para poder abrir y visualizar correctamente el archivo que han recibido. Se tiene una PC disponible en el centro de cómputo del edificio la cual opera como servidor de archivos. 63 Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu Este escenario es una aplicación directa para el esquema de verificación compartida implementado en esta tesis. El servidor de archivos podría operar como la autoridad del sistema (SA). Se tiene también el firmante A, el cual es el usuario que necesita el archivo. Y por último se tienen las 5 PC’s, todas ellas interconectadas a través de una LAN, siendo necesario la presencia de sólo 3 de ellos para visualizar posteriormente el archivo que les ha sido enviado. Es importante recordar que bajo el esquema de Hsu y Wu es posible también poseer la certeza de que ha sido la PC A quien envió originalmente el archivo. Bajo este escenario realizaremos la simulación matemática de todo el proceso. Esto se muestra a detalle a continuación. 3.4.1 Inicialización del sistema SA selecciona dos números primos p y q, donde q | p-1. p = 103 q = 17 donde 17 | 102. Selecciona también un generador g de orden q en GF(p). De 3.1 y seleccionando h = 13 (1<h<102), se tiene que g=h p −1 q 102 17 =h mod p mod 103 = 13 mod 103 6 = 23 SA calcula los anteriores parámetros y los hace públicos al depositarlos en un directorio conocido para los otros usuarios de la red. 64 Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu 3.4.2 Registro Se tiene al firmante A y al grupo de 5 verificadores G = { U1, U2, …, U5 } con identificadores ID’s = { 1, 10, 3, 9, 13 }. A continuación SA selecciona de modo aleatorio de Zq* las llaves públicas del firmante A y del grupo G, y a continuación calcula las respectivas llaves privadas. De 3.2 y 3.3 se tiene que x A = 13 xG = 5 y A = g x A mod p yG = g xG mod p = 2313 mod 103 = 72 = 235 mod 103 = 79 SA genera de modo aleatorio el polinomio p(x) de grado 2, esto con el propósito de dividir la llave secreta de G en 5 porciones. De 3.4 se tiene p( x) = 5 + 3x + 15 x 2 mod 17 De aplicar 3.5 sobre todos los verificadores de G se tiene que x1 = 5 + 3 ⋅ 1 + 15 ⋅ 12 mod 17 x2 = 5 + 3 ⋅ 10 + 15 ⋅ 102 mod 17 =6 =5 y1 = 236 mod 103 y2 = 235 mod 103 = 66 = 79 x4 = 5 + 3 ⋅ 9 + 15 ⋅ 92 mod 17 x3 = 5 + 3 ⋅ 3 + 15 ⋅ 32 mod 17 =6 = 13 y4 = 236 mod 103 y3 = 2313 mod 103 = 66 = 72 65 Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu x5 = 5 + 3 ⋅ 13 + 15 ⋅ 132 mod 17 = 12 y5 = 2312 mod 103 = 30 Después de realizar el cálculo SA entrega las respectivas llaves privadas a través de un canal seguro. Es importante hacer notar que después de esto SA no almacena ningún parámetro secreto. 3.4.3 Encripción de firma A quiere enviar el siguiente mensaje M = { 1, 2, 3, 4, 5 }. Primero de la ecuación 3.6 se genera la firma digital seleccionando de modo aleatorio k = 5, esto es ( ) = M (9 ) mod 103 5 ri = M 23−1 mod 103 5 = 30M mod 103 si = 5 − 13ri mod 17 Sustituyendo M se obtiene la firma r y s, M = {1 2 3 4 5 } r = { 30 60 90 17 47 } s = {6 7 8 5 6 } Se selecciona de modo aleatorio d =11, y se genera el texto cifrado de firma a partir de la ecuación 3.7, con lo que se obtiene 66 Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu c1 = 2311 mod 103 = 64 ( ) mod 103 = r (30 ) mod 103 c2 = r 79 −1 11 11 = 72r mod 103 c3 = s Sustituyendo la firma digital (r, s) se obtiene c1 = 64 c2 = {100 97 94 91 88 } c3 = { 6 7 8 5 6 } El texto cifrado de firma (c1, c2, c3) son los datos que se envían a cada uno de los 5 verificadores del grupo G. 3.4.4 Recuperación del mensaje Supóngase ahora que W = { U1, U3, U5 } es el subgrupo de 3 verificadores que desean recuperar el mensaje M a partir del texto cifrado de firma (c1, c2, c3). Primero cada Ui ∈ W utiliza su propia llave personal para calcular Ei. Primero, a partir de la ecuación 3.9 [ ][(− 13)(1 − 13) ]mod 17 = [(14 )(15) ][(4)(5) ] mod 17 L1 = (− 3)(1 − 3) −1 −1 −1 −1 = [(14 )(8)] [(4 )(7 )] mod 17 =8 Calculando de manera similar L3 y L5 se obtiene Li = { 8 7 3 }. Con esta información, se obtiene a partir de la ecuación 3.8 67 Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu E1 = 64(6*8 mod 17 ) mod 103 = 23 E2 = 64(13*7 mod 17 ) mod 103 = 81 E3 = 64(12*3 mod 17 ) mod 103 = 79 Cada uno de los 3 verificadores Ui presenta su respectiva Ei a los demás t-1 verificadores de W, y cada uno de ellos, sin haber revelado su llave secreta calcula a partir de la ecuación 3.10 E = (23 ⋅ 81 ⋅ 79) mod 103 = 93 Por medio de la ecuación 3.11 cada uno de ellos recalcula la firma (r, s) r = {100 97 94 91 88 }⋅ 93 mod 103 r = { 30 60 90 17 47 } s = {6 7 8 5 6 } Por último, para recuperar el mensaje original aplican la ecuación 3.12 y se obtiene ( )( ) ( )( ) M 1 = 236 7230 (30 ) mod 103 = (66 )(9 )(30 ) mod 103 =1 M 2 = 237 7260 (60 ) mod 103 = (76)(81)(60 ) mod 103 =2 Aplicando el mismo procedimiento para el resto de (r, s) se obtiene el mensaje original M = { 1, 2, 3, 4, 5 }. 68 Capítulo 4: Diseño del Criptosistema Capítulo 4 Diseño del Criptosistema 4.1 Diseño general del Criptosistema El objetivo primario de este trabajo de investigación es el desarrollo de un dispositivo electrónico que permita añadir seguridad al tráfico de información actual en un ambiente específico de comunicaciones; el cual es en este caso particular una red de computadoras de área local, conocida comúnmente como una LAN (Local Area Network). 4.1.1 Seguridad de la información en una LAN Una LAN es el caso más sencillo de red que nos podemos encontrar [11], de ámbito muy limitado geográficamente – usualmente en un único edificio – con todas las computadoras interconectadas a través de cableado propietario. Esto último nos va a permitir ejercer un control total sobre el canal de comunicaciones, pudiendo protegerlo físicamente, lo cual evita prácticamente cualquier peligro de falta de privacidad en la información, aunque esto no es posible en todos los casos, como se analizará más adelante. Otro riesgo que se presenta en las redes de área local, a menudo no valorado, es el que viene del uso inadecuado del sistema por parte de los propios usuarios. Ya sea por mala fe o descuido, un usuario con demasiados privilegios podría destruir información, por lo 69 Capítulo 4: Diseño del Criptosistema que estos permisos deben ser asignados con mucho cuidado por parte de los administradores. Esta circunstancia es muy importante, ya que, sobre todo en pequeñas empresas, el dueño muchas veces cree que debe conocer la clave del administrador, y luego es incapaz de resistir la tentación de jugar con ella, poniendo en serio peligro la integridad del sistema y entorpeciendo el trabajo del administrador de la red. Existen también redes internas en las que un control exhaustivo sobre el medio físico de transmisión de datos es en la práctica imposible. Consideremos el siguiente escenario: un edificio corporativo con un acceso no muy restringido, como podrían ser las aulas de una universidad, que poseen conexiones Ethernet en todas sus dependencias. En principio, nada impediría a una persona conectar una computadora portátil a una de esas conexiones para llevar a cabo un análisis del tráfico de la red sin ser descubierta, o suplantar a cualquier otra computadora. En estos casos será conveniente llevar a cabo algún tipo de control, como la deshabilitación dinámica de las conexiones de red no utilizadas en cada momento, la verificación del identificador único de la tarjeta de red concreta que debe estar conectada en cada punto o la adopción de protocolos de autentificación de las computadoras dentro de la red. Uno de los últimos avances en redes locales son las denominadas WLAN, muy en boga en la actualidad, que basan su funcionamiento en el empleo de ondas de radio como canal de comunicaciones, proporcionando una flexibilidad sin precedentes a las redes. Sin embargo, las plataformas actuales han probado ser inseguras debido a algunas deficiencias cometidas en su implementación. El estándar 802.11i, de reciente ratificación, intentará proporcionar una nueva alternativa para la implementación segura y confiable de redes inalámbricas LAN [22, 23, 41, 43]. Otra gran serie de problemas de seguridad que se presentan en una red de área local, proviene del hecho que es una gran realidad, de que muchas de estas redes locales se encuentran interconectadas con otras redes y sistemas remotos ajenos por medio de lo que conocemos como Internet. La lista de amenazas contra la seguridad de una computadora conectada a Internet parece interminable [3] y asimismo se han desarrollado e 70 Capítulo 4: Diseño del Criptosistema implementado una gran cantidad de posibles soluciones que varían en precio y complejidad, tanto como varían las condiciones y capacidades de las redes locales actuales. En general todas las redes de computadoras se construyen conceptualmente sobre diferentes capas de abstracción, que desarrollan tareas distintas y proporcionan un protocolo unificado a las capas superiores. La criptografía podría entonces ser empleada en diferentes niveles de abstracción. Por ejemplo, podemos cifrar un archivo antes de transmitirlo por la red, lo cual correspondería al nivel de abstracción mayor o podemos enviarlo de manera transparente, pero a través de un protocolo de bajo nivel que cifre cada uno de los paquetes de información en los que se va a subdividir el archivo en el momento de transmitirlo. 4.1.2 Análisis de las posibles topologías Tomando en cuenta los puntos tratados en la sección anterior, a continuación se analizarán las diferentes topologías de un criptosistema que permitirán añadir seguridad en las comunicaciones entre dos computadoras ubicadas dentro del ámbito de operación de una LAN. Topología #1: Criptosistema entre la tarjeta de red y el medio físico LAN. Esta solución es similar a lo que conocemos como dispositivos “firewall”, sólo que para esta aplicación se utilizaría un dispositivo por cada computadora que se encuentre presente en la red. Es quizás el enfoque que tomaría un dispositivo comercial, ya que ofrece a simple vista varias características deseables como lo son: portabilidad y fácil instalación, siendo un dispositivo transparente para la computadora, es decir, no necesitaría de configuración o conocimiento alguno por parte del usuario para su uso. Es quizás la solución más exigente debido a que al ser transparente para la computadora, ésta no tomará ninguna medida para evitar utilizar el máximo ancho de banda que ella considere que tiene disponible. Esto repercute en la necesidad de utilizar circuitería de alto costo y alta velocidad, así como el uso de memorias intermedias o “buffers” para el cifrado en sitio. 71 Capítulo 4: Diseño del Criptosistema Figura 4-1 Topología #1: Criptosistema es un dispositivo externo de cifrado/descifrado entre la tarjeta de red y el medio físico LAN. Topología #2: Criptosistema es una tarjeta de red de cifrado/descifrado. Esta segunda solución sugiere el diseño de una tarjeta de red que realice de manera automática el cifrado/descifrado de la información. Aunque en principio esta solución aparenta ser la ideal, se debe tomar en cuenta varios aspectos relacionados con la tecnología de las computadoras personales: el muy bajo costo de tecnologías estándar y la reutilización y abstracción de software que proporcionan los nuevos lenguajes de programación y sistemas operativos. En otras palabras, el costo de utilizar el hardware y software, ya desarrollados y estandarizados en las computadoras personales, es excesivamente bajo; esto último en comparación con el costo de desarrollo e implementación propietario. Incluso la mayoría de los fabricantes de tarjetas madre para computadoras ya incluyen como hardware básico una o más interfaces LAN en sus productos. Este esquema se muestra en la figura 42. Figura 4-2 Topología #2: Criptosistema es una tarjeta interna de red con cifrado/descifrado automático. 72 Capítulo 4: Diseño del Criptosistema Topología #3: Criptosistema interno paralelo a una tarjeta de red. Tomando en cuenta los distintos puntos discutidos en el planteamiento de la anterior topología, es entonces la mejor opción, enfocar toda la inversión y esfuerzo en diseñar un dispositivo de procesamiento digital de datos. Esto es, el diseño de una tarjeta de procesamiento de datos que se instale en un puerto de la PC (por ejemplo, en el bus PCI), y que opere de manera paralela e independiente a una tarjeta de red en particular. Esta topología permite enfocar todo el esfuerzo de diseño a los diferentes aspectos y recursos que requiere la implementación del esquema de cifrado/descifrado elegido, dejando a un lado todos los aspectos relacionados con una topología e interfaz de red específicas. Inclusive, como más adelante se ilustrará, este enfoque de diseño permite utilizar librerías estándar que permiten en la programación del sistema una abstracción total de la complejidad y topología particular de la red en donde se encuentre instalado el criptosistema. Figura 4-3 Topología #3: Criptosistema es una tarjeta interna de cifrado/descifrado paralela a una tarjeta de red en la PC. Topología #4: Criptosistema externo paralelo a una tarjeta de red. Esta topología es similar a la anterior, en el sentido de que se hace un uso de la tecnología y software ya existentes para redes de computadoras. La diferencia estriba en el hecho de que el dispositivo electrónico que implementa los algoritmos de cifrado/descifrado no se encuentran como un elemento interno a la PC, sino que se interconectan a ella de manera externa a través de una interfaz estándar como podrían ser: puerto serie RS-232, puerto paralelo o algún otro de alta velocidad como el estándar USB. 73 Capítulo 4: Diseño del Criptosistema Figura 4-4 Topología #4: Criptosistema es un dispositivo externo de cifrado/descifrado paralelo a una tarjeta de red en la PC. En la tabla 4.1 se presenta un resumen de las diferentes topologías estudiadas anteriormente, realizando una comparativa de las diferentes características que cada una de ellas ofrece, así como un estudio de las ventajas y desventajas que cada una de ellas presenta. Tabla 4.1 Comparativa entre las posibles topologías de implementación del criptosistema. Topología #1 Topología #2 Topología #3 Topología #4 Velocidad Alta Alta Alta Bajo Portabilidad Alta Baja Baja Media Transparencia al usuario Alta Media Media Media No Si Si No Si Si No No 3 1 1 1 Si No No No Controlador PC No Si Si Si Emulación de usuarios No No Si Si Costo Alto Alto Medio Bajo Dependiente de la arquitectura de la PC Dependiente de la arquitectura de la LAN # de interfaces LAN Necesidad de grandes buffers de memoria De un estudio minucioso de las características listadas, se llegó a la conclusión de que hay dos posibles soluciones: la solución ideal y la solución práctica. La solución ideal emplearía la topología #3, tanto en costo como en versatilidad; esta solución también 74 Capítulo 4: Diseño del Criptosistema permite un desarrollo rápido del criptosistema, ya que en la actualidad se cuenta con una gran cantidad de tarjetas de desarrollo y librerías de software de diferentes fabricantes [24, 25]. Como una solución práctica se eligió la implementación de un dispositivo basado en la topología #4, la cual presenta numerosas ventajas para la realización de un proyecto de investigación con recursos económicos muy limitados. La topología #4 es la de menor costo así como también es la que permite una emulación sencilla de este dispositivo por medio de un programa en la PC. Esto último permitirá la prueba y desarrollo del criptosistema con varios usuarios con dispositivos “emulados” por software, permitiendo la prueba del concepto del esquema de verificación compartida a un bajo costo. 4.1.3 Requerimientos de implementación Al iniciar cualquier desarrollo práctico, que involucre cierto procesamiento digital, la primera decisión que se debe tomar es qué tipo de procesador se utilizará como el cerebro del sistema. Según los expertos de BDTI (Berkeley Design Technology, Inc.) [26] el factor más importante para tomar esta decisión es analizar la naturaleza del algoritmo a implementar. La criptografía de llave pública, como ya se había mencionado, utiliza una gran cantidad de métodos de la teoría de números, los cuales han probado ser en su mayoría algoritmos que requieren un gran esfuerzo computacional. Esto es debido en su mayor parte a la necesidad de emplear, como en cualquier otro algoritmo criptográfico, números muy grandes para poder obtener un esquema que ofrezca una seguridad aceptable y duradera a pesar del paso de tiempo; son comunes utilizar números decimales mayores a 130 dígitos, que equivalen a números de 431 bits [3]. Tomando en cuenta estos requerimientos la opción resulta ser un procesador digital de señales, el cual es un microprocesador optimizado para el procesamiento de algoritmos que: • Son muy demandantes computacionalmente. • Requieran atención a la fidelidad numérica. • Requerimientos de gran ancho de banda. 75 Capítulo 4: Diseño del Criptosistema • Capacidad para procesar grandes flujos de datos. • Patrones predecibles de acceso a datos. • Localidad en tiempo de ejecución. • Centralizados en el procesamiento matemático. • Requerimientos de tiempo real. Este tipo de procesadores digitales, a diferencia de los microprocesadores de propósito general han sido diseñados desde su concepción para solucionar los requerimientos anteriores [26]. Entre las características que ofrecen están: • Múltiples unidades de procesamiento paralelo, aceleración por hardware. • Tipo de arquitectura VLIW (8 instrucciones por ciclo), instrucciones SIMD. • Registros de propósito especial, acumuladores, hardware de saturación (punto flotante). • Arquitectura Harvard, permitiendo transferencias paralelas. • Modos de dirección especializados (auto-incremento, módulo, inversión de bits, etc.). • Ciclos por hardware, manejo de interrupciones, etc. • Unidades MAC de un solo ciclo. • No acceso a través de caché, sino DMA. • Pocas prestaciones dinámicas (caché, predicción de saltos, instrucciones con tiempo dependiente de los datos, etc.). La opción a elegir será entonces un procesador digital de señales conocido por sus siglas como DSP (Digital Signal Processor). Para encontrar dispositivos de este tipo que pudieran alcanzar un buen desempeño en esta aplicación criptográfica se revisaron tecnologías disponibles en compañías como: • PLX Technology [27]. • Applied Micro Circuits Corporation (AMCC) [28]. • Advanced Micro Devices (AMD) [29]. 76 Capítulo 4: Diseño del Criptosistema • Motorola (Freescale Semiconductor) [30]. • Texas Instruments [31]. • SonicWALL [32]. • SafeNet [33]. Ethernet A lo largo de este documento se ha estado mencionando de manera repetida Ethernet como el tipo de topología para redes de área local a utilizar. Existen varias razones por las que se tomó esta decisión, pero primero veamos la definición de Ethernet [34]: Ethernet: Una arquitectura de redes de área local desarrollada por la compañía Xerox en conjunto con DEC e Intel en 1976. Ethernet utiliza una topología en bus o en estrella y permite transferencias de datos hasta velocidades de 10Mbps. La especificación Ethernet sirvió como base para el estándar IEEE 802.3, el cual especifica las capas físicas y las capas bajas de software. Ethernet utiliza el método de acceso al medio CSMA/CD para permitir varios esquemas de demanda de ancho de banda. Ethernet es el estándar LAN más ampliamente implementado. Todas aquellas personas que se mueven en el mundo de las redes de computadoras saben que esto último es muy cierto, sobre todo porque Ethernet [35]: • Es fácil de entender, implementar, controlar y mantener. • Permite implementaciones de redes de bajo costo. • Proporciona extensiva flexibilidad en topologías para la implementación de redes. • Garantiza una conexión exitosa y un modo de operación y funcionamiento estándar, independientemente del fabricante de algún dispositivo en particular. Estas razones, además de contar con amplio soporte de hardware y software, se tomaron en cuenta para adoptar Ethernet como la arquitectura LAN a utilizar en este trabajo de investigación. 77 Capítulo 4: Diseño del Criptosistema 4.1.4 Diagrama a bloques del criptosistema En la figura 4-5 se muestra el diagrama a bloques general del criptosistema a ser implementado: Figura 4-5 Diagrama general a bloques del criptosistema. Como se puede ver es una sencilla red Ethernet en topología estrella interconectada mediante un switch o hub Ethernet. Como ya se había mencionado, la topología del criptosistema elegida nos permitirá emular a cualesquiera de los participantes del esquema de verificación compartida. 78 Capítulo 4: Diseño del Criptosistema 4.2 Implementación física del módulo de cifrado/descifrado 4.2.1 Diagrama a bloques del módulo de cifrado/descifrado. En la figura 4-6 se muestra el diagrama a bloques del módulo ó dispositivo de cifrado / descifrado. En la figura 4-5 se puede apreciar la ubicación de este módulo en el criptosistema en general. Cada uno de los integrantes del criptosistema, esto es, el firmante, el verificador y la autoridad del sistema, poseerán uno de estos módulos, el cual se encargará del procesamiento criptográfico de la aplicación. Figura 4-6 Diagrama a bloques del módulo (dispositivo) de cifrado / descifrado. El diseño realizado consta de 4 bloques funcionales: 1) Interfaz de programación en circuito (in circuit programming), por medio del puerto paralelo de la PC. 2) Interfaz de comunicaciones serie a la PC. 3) Procesador criptográfico. 4) Fuente de alimentación. 79 Capítulo 4: Diseño del Criptosistema El bloque interfaz de programación en circuito permite la reprogramación del dispositivo “en línea” sin necesidad de retardos por tiempos adicionales de borrado o verificación. Esta zona está conformada por una colección de circuitos integrados lógicos de bajo costo que en acción conjunta con la PC, a través del puerto paralelo, permiten llevar a cabo de manera rápida y sencilla la reprogramación del procesador. También proporciona una potente herramienta de depuración mediante la emulación en tiempo real del código del programa. La circuitería es estándar para toda la familia de controladores híbridos 56800/E de Motorola y puede encontrarse en las hojas de datos y de aplicaciones del fabricante [30]. El bloque interfaz de comunicaciones hacia la PC se implementó con la ampliamente utilizada circuitería del estándar RS-232 [42]. La velocidad de transmisión de datos elegida es de 57,600 bits por segundo; esto para obtener el mayor ancho de banda posible de dicha interfaz. Este ancho de banda se encuentra muy limitado ante las nuevas y más veloces versiones como lo son por ejemplo las interfaces USB con velocidades de decenas y centenas de megabits por segundo. A diferencia de las nuevas interfaces, el estándar RS-232 sobresale por su amplio uso y reconocida facilidad de implementación a bajos costos. El bloque del procesador criptográfico incluye el CPU conectado de modo que toda su capacidad de procesamiento pueda ser enfocada al algoritmo de cifrado/descifrado. Para detalles de su conexión puede consultarse la hoja de datos de este dispositivo en el anexo A. Por último, se incluye algo de circuitería para la regulación “en tarjeta” de un voltaje de alimentación externo; la regulación se realiza a +3.3V para un bajo voltaje de operación y por consiguiente un menor consumo. 4.2.2 Elección del CPU La solución práctica se desarrolló basada en el controlador híbrido 56F8323 de la familia 56800E de Motorola (Freescale Semiconductor). La familia 56800/E de Motorola se denomina como controladores híbridos, ya que combinan en un solo núcleo tanto la arquitectura como ciertas características tanto de un DSP como de un microcontrolador de 80 Capítulo 4: Diseño del Criptosistema propósito general. Se desarrollaron además en paralelo dos soluciones con motivos de comparación: la primera solución se implementó también con un controlador híbrido de la familia 56800, y la segunda sobre un microcontrolador de 16 bits de la familia HC(S)12, ambos de Motorola, el 56F801 y el MC9S12DP256B, respectivamente. Las características que ofrecen esta familia de dispositivos se encuentran listadas ampliamente en el apéndice A. En la tabla 4.2 se muestra, a manera de resumen, una comparativa de las diversas características que ofrecen cada uno de los dispositivos empleados. Tabla 4.2 Comparativa de las características entre los procesadores empleados. 56F8323 56F801 MC9S12DP256B Arquitectura Harvard Sí Sí No Unidades de ejecución paralela 3 3 --- Ejecución de programa en RAM Sí Sí Sí Terminales externas dedicadas de interrupción 1 1 2 (Opcionales) Terminales de uso de propósito general 27 11 49 Memoria FLASH de programa 32 KB 16 KB 256 KB Memoria FLASH de datos 8 KB 4 KB --- Memoria RAM de programa 4 KB 1 KB --- Memoria RAM de datos 8 KB 1 KB 12 KB Memoria de arranque 8 KB 4 KB --- Memoria EEPROM No No 4 KB Módulo PWM Sí Sí Sí Decodificador de cuadratura Sí No No Temporizador watchdog Sí Sí Puertos serie asíncrono (SCI) 2 1 2 Puertos serie síncrono (SPI) 2 1 3 2 / 16 / 4 1 / 16 / 4 1 / 16 / 8 CAN Ninguno CAN, BDLC, I2C 2 / 12 / 4 2 / 12 / 4 1 / 10 / 8 Sensor de temperatura Sí No No PLL Sí Sí Sí Oscilador de relajación interno Sí Sí No MIPS 60 40 --- Costo (Dólares) 9.5 3.5 15 Temporizadores / Resolución / Canales Puertos adicionales Convertidores ADC / Resolución (bits) / Canales 81 Capítulo 4: Diseño del Criptosistema Una gran ventaja de todas estas nuevas familias de controladores Motorola es que utilizan un compilador en C/C++ muy eficiente, el cual produce código muy optimizado en espacio y velocidad gracias a la arquitectura optimizada para C/C++ de estos CI’s. El código fuente empleado para estas 3 plataformas, a excepción de nombres de registros, permanece casi sin cambio al migrar el código de una plataforma a otra. El compilador utilizado es el CodeWarrior, de Metrowerks. En el anexo B se da un listado del código implementado en la plataforma 56800E de Motorola. 4.2.3 Esquemáticos del dispositivo de cifrado / descifrado. En el anexo A se puede encontrar la información más relevante de las hojas de datos de los dispositivos empleados para la implementación del criptosistema. La circuitería es relativamente sencilla, esto es ofrecido por el fabricante como una de las ventajas competitivas de estos productos, en comparación con otras plataformas DSP [30]. En este tipo de aplicaciones muchas veces la complejidad recae en el programa de la aplicación. En la sección 4.2.1 se dividió el módulo de cifrado / descifrado en cuatro bloques funcionales. En la figura 4-7 se muestra el esquemático de la fuente de alimentación propuesta por el fabricante: sencilla pero lo necesario para una aplicación de este tipo. Figura 4-7 Esquemático del bloque: fuente de alimentación. En la figura 4-8 se muestra el procesador criptográfico elegido: el controlador híbrido DSP56F8323, de la familia 56800E de Motorola. El controlador incluye una amplia gama de periféricos internos como lo son los temporizadores, RAM, FLASH ROM, entre 82 Capítulo 4: Diseño del Criptosistema otros. Esto permite que las conexiones con dispositivos externos sean mínimas o en algunos casos no necesarias. Figura 4-8 Esquemático del bloque: procesador criptográfico. En la figura 4-9 se muestra la circuitería lógica necesaria para la implementación de la interfaz de programación en circuito. 83 Capítulo 4: Diseño del Criptosistema Figura 4-9 Esquemático del bloque: interfaz de programación en circuito. 84 Capítulo 4: Diseño del Criptosistema Por último, en la figura 4-10 se muestra la implementación del puerto de comunicaciones hacia la PC. Esta interfaz está basada en una circuitería RS-232 ampliamente conocida y utilizada. Figura 4-10 Esquemático del bloque: interfaz de comunicaciones a la PC. 4.3 Programación del procesador de cifrado/descifrado Todos los algoritmos contenidos en el dispositivo externo de cifrado/descifrado se implementaron en lenguaje ANSI C. Se eligió este lenguaje por encima del lenguaje ensamblador por varios motivos, entre los cuales están: 1) Reutilización del código para la implementación “emulada” del criptosistema en el programa de alto nivel en la PC (portabilidad del código). 2) Enfocar esfuerzos en el desarrollo de los algoritmos y no en la implementación particular en una plataforma específica. 3) Menor tiempo de desarrollo y de depuración del código del programa. 85 Capítulo 4: Diseño del Criptosistema Para propósitos de prueba y comparación se desarrolló el criptosistema, como se mencionó en una sección anterior, en tres plataformas distintas, siendo estas las familias HC(S)12, 56800 y 56800E de Motorola. El uso del lenguaje ANSI C permitió también la rápida elaboración de una comparativa entre dichas plataformas, ya que todas estas familias utilizan un lenguaje ensamblador distinto. En el anexo B se puede encontrar un listado del código de las principales funciones que se elaboraron para el criptosistema. 4.4 Programación de la interfaz LAN El lenguaje utilizado para desarrollar la interfaz de usuario fue Visual C++. Este lenguaje incluye una gran cantidad de librerías de software ya optimizadas y ampliamente usadas y probadas por los programadores profesionales. Este lenguaje nos proporciona una API, llamada Winsock [37, 38, 39 40], para propósitos de comunicación de computadoras entre redes e inclusive en Internet. La solución a implementar puede utilizarse con cualquier tarjeta de red comercial, así como también en una amplia gama de topologías y protocolos de red. Esto fue posible gracias a la tecnología Winsock de Windows, con la que se realiza una abstracción total de la capa física de red actualmente presente en la computadora, y se deja todo el procesamiento en manos de las muy completas librerías desarrolladas para la computadora personal bajo la plataforma Windows. Winsock es la API de menor nivel de Windows para programar con TCP/IP, DECNet, IPX/SPX y otros protocolos. Parte del código (las funciones exportadas a las que llama la aplicación desarrollada) reside en la librería Wsock32.dll y parte reside en el núcleo de Windows. Es posible escribir programas servidores y cliente para Internet utilizando la API Winsock. Esta API se basa en la API original de conectores de Berkeley para UNIX. Windows NT 4.0 incluye, por primera vez, Winsock 2, una versión nueva y más potente, aunque en este trabajo de investigación se utilizará la versión 1.1, ya que está disponible en todas las versiones de Windows. Winsock es una parte de la WOSA 86 Capítulo 4: Diseño del Criptosistema (Arquitectura de Sistemas Abiertos de Windows) que especifica interfaces con las que se pueden desarrollar aplicaciones cliente, así como interfaces que los fabricantes utilizan para desarrollar proveedores de servicios que implementan Winsock para redes específicas. Se sabe que las funciones de una red se agrupan en capas de servicios de la red (modelo OSI de ISO, [41]), y que estas capas definen el camino por el que debe pasar un paquete de información cuando recorre el camino de una computadora a otra, conectadas a diferentes puntos dentro de Internet. En cada una de las capas se distinguen unos servicios que operan bajo unos protocolos. Los servicios de una capa definen la interfaz de comunicación con la misma y los protocolos definen la forma en que se transmite la información. De esta manera cada capa ofrece una interfaz a la capa superior y utiliza la interfaz de la capa inferior para interpretar los mensajes o paquetes a medida que van pasando. En la figura 4-11 se muestra la ubicación lógica del protocolo WinSock. Figura 4-11 WinSock y su relación con el modelo OSI de ISO. 87 Capítulo 4: Diseño del Criptosistema Utilizar una interfaz de programación, como la API de Windows Sockets, libera al programador de tratar con los detalles de cómo se pasan los paquetes de información entre las capas inferiores. Sockets En general, los sockets son más útiles cuando se están desarrollando aplicaciones en ambos lados de la comunicación. Por ejemplo, cuando se está desarrollando tanto el cliente como el servidor para una aplicación en particular, se pueden utilizar sockets para intercambiar sus propias estructuras de datos o paquetes, para establecer la comunicación entre las aplicaciones. Un socket representa un punto final de una comunicación; en otras palabras, un objeto a través del cual una aplicación puede enviar o recibir paquetes de datos a través de la red. Un socket tiene un tipo y está asociado con un proceso en ejecución y puede tener un nombre. En la actualidad, los sockets intercambian datos sólo con otros sockets en el mismo dominio de comunicación bajo el protocolo IP. En el caso de los sockets para Windows, vienen en dos tipos: sockets de datagramas y sockets de flujos. Sockets de datagramas Los sockets de datagramas proporcionan una comunicación de paquetes no confiable y sin conexión. En este caso, “no confiable” significa que no se garantiza la entrega de un paquete, así como tampoco se garantiza que los paquetes llegarán en el mismo orden en que fueron enviados. De hecho, el mismo paquete de datagramas puede ser enviado más de una vez. Para las implementaciones TCP/IP de Winsock, los sockets de datagramas utilizan el UDP (Protocolo de datagramas de usuario), aunque Winsock 2 también soporta otros protocolos. En muchos casos, tales como la comunicación entre dos procesos en la misma máquina o entre dos máquinas en una LAN con poca carga, puede que no se vean paquetes 88 Capítulo 4: Diseño del Criptosistema que no se entregan, llegue fuera de orden o que estén duplicados. Sin embargo, su aplicación deberá ser capaz de manejar estas posibilidades. Si se están escribiendo aplicaciones para comunicarse a través de redes más complicadas, como Internet, seguramente uno se topará con la naturaleza no confiable de los sockets de datagramas. Si la aplicación no maneja estos casos de manera adecuada, se tendrán errores. No obstante, los sockets de datagramas son útiles en situaciones en las que se desee enviar datos basados en paquetes o en registros. Los sockets de datagramas también proporcionan la capacidad de enviar paquetes de difusión a más de una dirección de destino. Sockets de flujo Si se necesita asegurar que los datos que se envían llegarán – en orden y sin duplicados – se necesitará los sockets de flujo, que proporcionan un transporte basado en una conexión confiable. Como su nombre lo implica, los sockets de flujo proporcionan un flujo de datos, en lugar de datagramas individuales o paquetes. Para las implementaciones TCP/IP de Winsock, los sockets de flujo utilizan el protocolo TCP (Protocolo de Control de Transmisión). Los sockets de flujo son más útiles en situaciones en que se están enviando grandes cantidades de datos o cuando se desea asegurar de que todos los datos lleguen en orden y no duplicados. Además, sus aplicaciones serán notificadas si se cierra la conexión. Por estas últimas razones para el desarrollo de esta tesis se hizo uso de los sockets de flujo. Los sockets son objetos de programación que proporcionan funciones para: • Creación de un socket • Asignación de números de puerto • Manejo de direcciones IP • Funciones de nombre y dirección • Funciones de búsqueda asíncrona de usuarios en una red • Funciones de sincronización 89 Capítulo 4: Diseño del Criptosistema • Uso de múltiples protocolos • Calidad de servicio • Conexiones multipunto • Destrucción de sockets WinSock Visual C++ proporciona dos maneras de utilizar sockets: a través de las clases CAsyncSocket o CSocket de la biblioteca MFC, o por medio del control WinSock. Este control es la forma más fácil de establecer una conexión entre dos máquinas en una red. El control WinSock le permite conectarse a un equipo remoto e intercambiar datos con el protocolo UDP (Protocolo de datagramas de usuario) o con el protocolo TCP (Protocolo de control de transmisión). Ambos protocolos se pueden utilizar para crear aplicaciones cliente y servidor. Este control de Windows no tiene una interfaz visible en tiempo de ejecución. Comunicación orientada a conexión En la implementación de este proyecto de investigación se utilizó WinSock en un ambiente de comunicación orientado a conexión, es decir, se basó la implementación en el uso de sockets de flujo. En una comunicación orientada a conexión es necesario que exista una aplicación que ofrezca ciertos servicios (un servidor), como por ejemplo, en el caso de este proyecto se tratará de la aplicación que se ejecutará en la computadora SA (autoridad del sistema) del esquema de verificación compartida. También deberán existir una o más aplicaciones que soliciten esos servicios (clientes), como también en este caso lo son, las computadoras del firmante (A) y los n verificadores del esquema. Ahora bien, un servidor no puede saber a priori qué aplicaciones ni qué número le van a hacer peticiones, por lo que debe estar a la escucha. Cuando reciba una petición, la aceptará, la procesará y responderá al cliente. A continuación se volverá a poner a la escucha. 90 Capítulo 4: Diseño del Criptosistema En la figura 4-12 se puede ver desde un punto de vista gráfico, los procesos de creación de los sockets de la aplicación servidora y en el cliente, así como la comunicación entre ambas. Éste es el diagrama de flujo de la interfaz LAN que se implementó para el esquema de verificación compartida. Figura 4-12 Diagrama de flujo de los procesos de creación de los sockets en la aplicación servidora y en la aplicación cliente. 91 Capítulo 4: Diseño del Criptosistema En el anexo C se hace un listado del código implementado en Visual C++ tanto para la aplicación servidora como para la aplicación del cliente. El código se encuentra clasificado en los diferentes procesos mostrados en el diagrama de flujo de la figura 4-12. 4.5 Interfaz gráfica El lenguaje de programación C++ se eligió por ser el lenguaje con mayor aceptación en una gran diversidad de plataformas (transportabilidad), es un lenguaje conocido como de mediano nivel, ya que proporciona todas las características tan poderosas de la programación en lenguajes de alto nivel además que proporciona instrucciones y grandes facilidades para el manejo y control del hardware de un dispositivo, incluso hasta el nivel de los registros físicos. Estas y muchas otras características del lenguaje C++ lo han llevado a ser conocido como el lenguaje óptimo para la programación de sistemas. La interfaz de usuario desarrollada para implementar el esquema de encripción de firma con verificación compartida de Hsu y Wu, se realizó en el lenguaje de programación de alto nivel Visual C++. Se implementó de manera eficiente en una LAN Fast Ethernet, aunque el código tiene compatibilidad con otro tipo de redes, es decir, es independiente de la tecnología de red subyacente. Se tienen dos programas: el programa servidor y el programa de usuarios. Visto desde el punto de vista del esquema de Hsu y Wu, el programa de la Autoridad del Sistema (SA) y el programa del firmante y del grupo de verificadores (A y Ui). A En los siguientes apartados se irán mostrando primero las diferentes pantallas disponibles en la interfaz de usuario de la Autoridad del Sistema (SA) y se dará una breve explicación de cada uno de sus elementos. 4.5.1 Pantallas de la aplicación SA ENCRIPTOR En la figura 4-13 se muestra la pantalla de entrada y de presentación del programa. 92 Capítulo 4: Diseño del Criptosistema Figura 4-13 Pantalla de presentación de la aplicación SA. La figura 4-14 muestra la interfaz principal de la aplicación de la autoridad del sistema (SA). Los elementos que contiene son: • Parámetro de cifrado p. Calculado por SA. • Parámetro de cifrado q. Calculado por SA. • Parámetro de cifrado g. Calculado por SA. • Un botón “Generar” para realizar un nuevo cálculo de parámetros. Esto se realiza automáticamente cuando se entra por primera vez al programa. • Un LED por cada usuario que muestra el estado de su conexión. • Una etiqueta por usuario donde se muestran los identificadores de cada uno, los cuales serán los nombres de sus PC’s en el entorno de red. • Un área de mensajes del estado actual del programa. Aquí se muestra cuando se está realizando un cálculo o una transferencia de información entre los participantes. • Una barra de progreso para mostrar el desarrollo del cálculo o procedimiento del mensaje anterior. 93 Capítulo 4: Diseño del Criptosistema • Un botón “Conectar”/”Desconectar” con el cual se inicia la espera de conexiones entrantes de los diversos participantes. • Un botón “Salir” para abandonar la aplicación. Figura 4-14 Pantalla principal de la aplicación SA. Cada una de estas opciones genera las siguientes pantallas (ventanas). (1) Esta opción solicita la selección de un archivo de configuración por parte del usuario para su lectura, la cual reflejará la nueva configuración de manera inmediata. Se proporciona un formato por omisión “*.cfg” reconocido automáticamente por la aplicación (véase figura 4-15). 94 Capítulo 4: Diseño del Criptosistema Figura 4-15 Pantalla de la opción menú “Archivo” Æ “Cargar Configuración” de la aplicación SA. (2) Esta opción solicita la selección de un archivo de configuración del programa o la especificación de uno nuevo, para guardar en disco la configuración actual de la aplicación. Se proporcionan tanto un nombre por omisión “parámetros”, como un formato por omisión “*.cfg” reconocido automáticamente por la aplicación (véase figura 4-16). Figura 4-16 Pantalla de la opción menú “Archivo” Æ “Guardar Configuración” de la aplicación SA. (3) Esta opción abre una hoja de propiedades en la cual se pueden seleccionar varios aspectos de la configuración de la aplicación (véase figura 4-17). 95 Capítulo 4: Diseño del Criptosistema Figura 4-17 Pantallas de la opción menú “Configuración” Æ “Opciones” de la aplicación SA. En las diferentes pestañas de esta ventana se puede configurar lo siguiente: • Número mínimo de verificadores por los cuales se esperará conexión para la recuperación del mensaje (parámetro t del esquema de Hsu y Wu) • Número máximo de verificadores por los cuales se esperará conexión para la encripción de firma del mensaje (parámetro n del esquema de Hsu y Wu) • Si la sesión de conexión será en modo registro y cifrado, o en modo descifrado. • Si se desea enmascarar los parámetros, identificadores y resultados visualmente con caracteres ‘*’. Nota: Por seguridad esta configuración sólo se puede alterar al inicio de la aplicación, por lo que no podrá ser alterada una vez que se reciban conexiones de usuarios. (4) Esta opción es una simple pantalla “Acerca de” (véase 4-18). 96 Capítulo 4: Diseño del Criptosistema Figura 4-18 Pantalla de la opción menú “Ayuda” Æ “Acerca de…” de la aplicación SA. En las siguientes secciones se mostrarán las diferentes pantallas disponibles en la interfaz de usuario del Firmante A y del grupo de verificadores Ui, y se dará una breve explicación de cada uno de sus elementos. 4.5.2 Pantallas de la aplicación AUI ENCRIPTOR La primera pantalla de entrada y de presentación del programa es muy similar a la de la aplicación SA ENCRIPTOR, por lo que no será necesaria incluirla en esta sección. La segunda pantalla de la aplicación AUI ENCRIPTOR es la interfaz principal del Firmante (A) y del grupo de verificadores (Ui) (véase figura 4-19). Los elementos que contiene son: • Parámetro de cifrado p. Calculado por SA. • Parámetro de cifrado q. Calculado por SA. • Parámetro de cifrado g. Calculado por SA. • Parámetro de cifrado k. Calculado por A. No aplica a Ui. • Parámetro de cifrado d. Calculado por A. No aplica a Ui. • Dos LED’s indicadores de estado de conexión (Firmante/Verificador). • Una etiqueta donde se muestran el identificador actual de la PC, será el nombre de la PC en el entorno de red. • Un área de mensajes del estado actual del programa. Aquí se muestra cuando se está realizando un cálculo o una transferencia de información entre los participantes. 97 Capítulo 4: Diseño del Criptosistema • Una barra de progreso para mostrar el desarrollo del cálculo o procedimiento del mensaje anterior. • Una etiqueta donde se muestre la llave pública del firmante o del verificador. • Una etiqueta donde se muestre la llave privada del firmante o del verificador. • Un botón “Registrar” para iniciar la conexión con SA. • Un botón “Cifrar”, el cual abre una ventana de selección del archivo a cifrar y posteriormente a ser enviado a cada uno de los verificadores. • Un botón “Salir” para abandonar la aplicación. Figura 4-19 Pantalla principal de la aplicación AUI. La estructura del menú del programa es: • Archivo o Cargar configuración (1) o Guardar configuración (2) • Configuración o Opciones (3) 98 Capítulo 4: Diseño del Criptosistema • Ayuda o Acerca de… (4) Cada una de estas opciones genera las siguientes pantallas (ventanas). (1) Esta opción solicita la selección de un archivo de configuración del programa para cargarlo y reflejar los diversos cambios de manera inmediata. Se proporciona un formato por omisión “*.cfg” reconocido automáticamente por la aplicación. Es idéntica a la de la aplicación SA ENCRIPTOR. (2) Esta opción solicita la selección de un archivo de configuración del programa o la especificación de uno nuevo, para guardar la configuración actual de la aplicación. Se proporcionan tanto un nombre por omisión “parámetros”, como un formato por omisión “*.cfg” reconocido automáticamente por la aplicación. Es idéntica a la de la aplicación SA ENCRIPTOR. (3) Esta opción abre una hoja de propiedades en la cual se pueden seleccionar varios aspectos de la configuración de la aplicación. Es muy similar a la de la aplicación SA ENCRIPTOR (véase figura 4-20). En las diferentes pestañas de esta ventana se puede configurar lo siguiente: • Si la conexión será como Firmante o como Verificador. • La dirección IP de la PC donde se encuentra la aplicación de SA. • Si el cifrado será por Software o por Hardware. • Si se desea enmascarar los parámetros, identificadores y resultados visualmente con caracteres ‘*’. (4) Esta opción es una simple pantalla Acerca de…. Es idéntica a la de la aplicación SA ENCRIPTOR. 99 Capítulo 4: Diseño del Criptosistema Figura 4-20 Pantalla de la opción de menú “Configuración” Æ “Opciones” de la aplicación AUI. 100 Capítulo 5: Resultados Capítulo 5 Resultados En este capítulo se analizará el desempeño obtenido en la operación del criptosistema. Para esto, primeramente, se mostrará el esquema de pruebas utilizado, incluyendo un listado de las principales características de las plataformas utilizadas, en específico, del procesador criptográfico elegido así como de la plataforma PC que se utilizó para la ejecución de los programas cliente y servidor. Se hará un listado de las funciones de software que se implementaron en cada una de las plataformas, lo cual permitirá visualizar de manera más clara la cantidad de trabajo de procesamiento de datos que se confió al dispositivo de cifrado/descifrado. Por último, se mostrarán los resultados obtenidos para las implementaciones alternativas del módulo de cifrado/descifrado, esto con el propósito de realizar una comparativa y poder llegar a una conclusión más precisa en cuanto a los requerimientos de procesamiento de un sistema como el implementado en esta tesis. 5.1 Esquemas de pruebas En las figuras 5-1 y 5-2 se puede observar el criptosistema implementado para la realización de pruebas bajo dos posibles configuraciones: a) Cifrado, b) Descifrado. Para ambos casos, en el módulo de cifrado/descifrado, se implementaron los siguientes módulos de software: 101 Capítulo 5: Resultados • Módulo de criptografía. o Prueba de la primalidad de un número. o Exponenciación módulo binaria. o Cálculo del inverso multiplicativo. o Operación módulo (residuo) • Controlador del criptosistema. o Protocolo de comunicaciones serie. o Cifrado / Descifrado. • Bloques de datos de 4 bits. Llaves públicas y privadas de 8 bits. Controlador del puerto serie. o Puerto RS-232, 57.6 Kbps, 8bits, 1bit de parada, 1bit de inicio, sin paridad. Figura 5-1 Esquema de medición del desempeño del criptosistema: Cifrado. Figura 5-2 Esquema de medición del desempeño del criptosistema: Descifrado. 102 Capítulo 5: Resultados Como se puede apreciar de las figuras 5-1 y 5-2, se utilizaron dos esquemas de prueba en los cuales la diferencia radicó en la ejecución aislada de las aplicaciones cliente y servidor. Revisando los conceptos matemáticos del capítulo 3 se hace notoria que el trabajo de procesamiento de cifrado lo realiza casi en su totalidad el agente Firmante, mientras que el trabajo de procesamiento de descifrado lo realizan casi en su totalidad y de manera simultánea los t de n verificadores del sistema. En ambos esquemas se utilizaron computadoras personales sobre las cuales se realizaron todas las pruebas del dispositivo de cifrado/descifrado, tanto las pruebas con la aplicación cliente como con la aplicación servidora. Estas computadoras poseen las siguientes características: • Sistema operativo Windows XP Profesional. • Procesador Intel Pentium IV HT a 3.0GHz. • Motherboard FSB 800MHz. • 512MB DDR400. • Disco Duro de 120GB. • Tarjeta de red integrada. • Puertos: serie, paralelo, USB. En esta plataforma se ejecutaron la aplicación cliente (programa del Firmante / Verificador) y la aplicación servidora (programa de la Autoridad del Sistema). Para la elaboración de estos programas se implementaron los siguientes módulos de software: • Módulo de criptografía. o Generación de semilla aleatoria. o Generación de números aleatorios. o Prueba de la primalidad de un número. o Exponenciación módulo binaria. o Cálculo del inverso multiplicativo. o Operación módulo (residuo) 103 Capítulo 5: Resultados • Ventanas: o Pantalla principal. o Pantalla de configuración. o Pantalla de presentación. o Pantalla de ayuda. • Controlador del criptosistema. o Protocolo de comunicaciones serie. o Cifrado / Descifrado. • Bloques de datos de 4 bits. Llaves públicas y privadas de 8 bits. Controlador del puerto serie. o Puerto RS-232, 57.6Kbps, 8bits, 1bit de parada, 1bit de inicio, sin paridad. • Controlador del puerto Ethernet. o Protocolo utilizando sockets de Windows. El protocolo de comunicaciones entre la computadora personal y el dispositivo de cifrado permite programar opciones como lo son la velocidad de comunicación y el tamaño del paquete de datos a enviar y recibir. En el controlador 56F8323 se implementaron dos buffers internos, uno para el proceso de cifrado y un segundo para el proceso de descifrado; esto debido a la necesidad de transmitir paquetes de diferentes tamaños para el cifrado y el descifrado de los datos. Esto resultó ser de gran relevancia ya que se encontró que el desempeño del criptosistema es afectado en función del tamaño de estos paquetes. 5.2 Desempeño del criptosistema Se realizaron repetidas pruebas de cifrado y descifrado sobre archivos desde 20, 50, 100, 200, 500 y hasta 1000KB, con el propósito de obtener un tiempo promedio de ejecución. En la figura 5-3 se muestran los resultados obtenidos en estas pruebas, tomando en cuenta también dos diferentes tamaños de buffers de transmisión / recepción. 104 Capítulo 5: Resultados Figura 5-3 Tiempos de cifrado del criptosistema basado en el 56F8323. Los resultados mostrados en la gráfica anterior muestran el desempeño medido del criptosistema. Para un análisis más detallado del desempeño del criptosistema es necesario tomar en cuenta los tiempos de transmisión entre el dispositivo y la PC; este tipo de análisis se muestra en la tabla 5.1. Tabla 5.1 Análisis de desempeño del criptosistema 56F8323: cifrado. CIFRADO EN EL CRIPTOSISTEMA 56F8323 Tamaño de archivo Tamaño de paquete Tiempo promedio de cifrado “Medido” Bytes 20,000 50,000 100,000 20,000 50,000 100,000 Bytes 20 20 20 60 60 60 segs 119.30 298.25 596.50 55.38 137.75 277.63 Velocidad de transmisión del puerto Tiempo de transmisión de archivo Tiempo promedio de cifrado “Real” Desempeño promedio real de cifrado Bits/seg 57,600 57,600 57,600 57,600 57,600 57,600 segs 18.40 46.01 92.01 18.32 45.79 91.58 msegs/byte 5.04 5.04 5.04 1.85 1.84 1.86 bytes/seg 198.22 198.22 198.22 539.61 543.71 537.49 105 Capítulo 5: Resultados Los resultados obtenidos se pueden también interpretar como: • Velocidad de cifrado promedio (aparente): • Tiempo de cifrado promedio (aparente): • Velocidad de cifrado promedio (real): • Tiempo de cifrado promedio (real): 361.44 bytes/seg 2.77 mseg/byte 540.27 bytes/seg 1.85 mseg/byte Los valores aparentes se refieren a aquellos que reflejan el tiempo total transcurrido para el usuario del sistema e incluyen los tiempos de transmisión hacia y desde el criptosistema. Los valores reales son aquellos que reflejan únicamente el tiempo en el cual el dispositivo realizó las operaciones matemáticas sobre los datos. Se realizaron las mismas series de pruebas en el caso del descifrado, los resultados se muestran en la figura 5-4. Figura 5-4 Tiempos de descifrado del criptosistema basado en el 56F8323. 106 Capítulo 5: Resultados Tomando en cuenta los tiempos de transmisión, al igual que en el caso del cifrado, se obtuvieron los resultados de la tabla 5.2: Tabla 5.2 Análisis de desempeño del criptosistema 56F8323: descifrado. DESCIFRADO EN EL CRIPTOSISTEMA 56F8323 Tamaño de archivo Tamaño de paquete Tiempo promedio de descifrado “Medido” Velocidad de transmisión del puerto Tiempo de transmisión de archivo Tiempo promedio de descifrado “Real” Desempeño promedio real de descifrado Bytes 20,000 50,000 100,000 20,000 50,000 100,000 Bytes 20 20 20 60 60 60 segs 47.50 118.00 237.75 46.50 116.00 231.75 Bits/seg 57,600 57,600 57,600 57,600 57,600 57,600 segs 18.40 46.01 92.01 18.32 45.79 91.58 msegs/byte 1.45 1.44 1.46 1.41 1.40 1.40 bytes/seg 687.35 694.51 686.17 709.62 712.15 713.42 Estos resultados se pueden interpretar también como: • Velocidad de descifrado promedio (aparente): 426.34 bytes/seg • Tiempo de descifrado promedio (aparente): • Velocidad de descifrado promedio (real): • Tiempo de descifrado promedio (real): 2.35 mseg/byte 700.54 bytes/seg 1.43 mseg/byte 5.3 Comparativa entre plataformas El criptosistema también se implementó en otras dos plataformas: el primero basado en el controlador híbrido 56F801 y el segundo basado en el microcontrolador de propósito general de 16 bits MC9S12DP256B, ambos de Freescale Semiconductors. Los dos dispositivos anteriores son procesadores muy conocidos por los desarrolladores e investigadores de dispositivos embebidos, y el objetivo de la comparación fue el de comprobar que se realizó la elección de un buen procesador de datos para la implementación práctica del criptosistema. La información relativa a estos dispositivos se puede también encontrar en el capítulo anterior, en donde se hace una revisión completa de sus características y sus capacidades de procesamiento. 107 Capítulo 5: Resultados Se llevó a cabo la misma metodología de pruebas para ambas plataformas, obteniendo los resultados que se muestran en la figura 5-5. Debido a que el comportamiento de los algoritmos criptográficos es lineal, cuando se mantiene constante el tamaño del dato a cifrar (en este caso 8 bits), la variación en el tiempo de descifrado será proporcional a la variación en el tiempo de cifrado, esto, entre plataformas; por lo tanto, sólo se realizaron pruebas para el procedimiento de descifrado. Figura 5-5 Tiempos de descifrado del criptosistema basado en el 56F801. Tomando en cuenta los tiempos de transmisión se obtuvo la tabla 5.3: Tabla 5.3 Análisis de desempeño del criptosistema 56F801: descifrado. DESCIFRADO EN EL CRIPTOSISTEMA 56F801 Tamaño de archivo Tamaño de paquete Tiempo promedio de descifrado “Medido” Bytes 20,000 50,000 100,000 Bytes 20 20 20 segs 68.00 169.50 344.25 Velocidad de transmisión del puerto Tiempo de transmisión de archivo Tiempo promedio de descifrado “Real” Desempeño promedio real de descifrado Bits/seg 57,600 57,600 57,600 segs 18.23 45.57 91.15 msegs/byte 2.49 2.48 2.53 bytes/seg 401.84 403.46 395.09 108 Capítulo 5: Resultados Estos resultados se pueden interpretar también como: • Velocidad de descifrado promedio (aparente): 293.20 bytes/seg • Tiempo de descifrado promedio (aparente): • Velocidad de descifrado promedio (real): • Tiempo de descifrado promedio (real): 3.41 mseg/byte 400.13 bytes/seg 2.50 mseg/byte El controlador híbrido 56F801 no posee una cantidad de memoria tan favorable como el 56F8323. Por esta causa, el máximo tamaño de buffer para este dispositivo es precisamente 20 bytes de entrada / 80 bytes de salida. En la figura 5-6 se muestran también los resultados de las pruebas realizadas en el controlador de 16 bits MC9S12DP256B. Figura 5- 6 Tiempos de descifrado del criptosistema basado en el MC9S12DP256B. 109 Capítulo 5: Resultados Tomando en cuenta los tiempos de transmisión se obtuvo la tabla 5.4: Tabla 5.4 Análisis de desempeño del criptosistema MC9S12DP256B: descifrado. DESCIFRADO EN EL CRIPTOSISTEMA MC9S12DP256B Tamaño de archivo Tamaño de paquete Tiempo promedio de descifrado “Medido” Velocidad de transmisión del puerto Tiempo de transmisión de archivo Tiempo promedio de descifrado “Real” Desempeño promedio real de descifrado Bytes 20,000 50,000 100,000 20,000 50,000 100,000 Bytes 20 20 20 60 60 60 segs 83.00 206.50 405.75 79.50 198.25 398.00 Bits/seg 57,600 57,600 57,600 57,600 57,600 57,600 segs 18.40 46.01 92.01 18.32 45.79 91.58 msegs/byte 3.23 3.21 3.14 3.06 3.05 3.06 bytes/seg 309.61 311.54 318.74 326.88 327.95 326.35 Los resultados del microcontrolador MC9S12DP256B se pueden interpretar también como: • Velocidad de descifrado promedio (aparente): 247.43 bytes/seg • Tiempo de descifrado promedio (aparente): • Velocidad de descifrado promedio (real): • Tiempo de descifrado promedio (real): 4.04 mseg/byte 320.18 bytes/seg 3.12 mseg/byte Toda la información mostrada en las gráficas y tablas anteriores se refiere a criptosistemas basados en dispositivos embebidos para su implementación. Se decidió, para poder realizar una comparación exhaustiva, medir los tiempos de cifrado y descifrado de la PC; los resultados obtenidos se muestran en la figura 5-7. Estos resultados se pueden interpretar también como: • Velocidad de cifrado promedio: • Tiempo de cifrado promedio: • Velocidad de descifrado promedio: • Tiempo de descifrado promedio: 1,543.20 bytes/seg. 649.34 µseg/byte. 35,676.32 bytes/seg. 31.13 µseg/byte. 110 Capítulo 5: Resultados Figura 5-7 Tiempos de cifrado y descifrado del criptosistema simulado en la PC. Los resultados obtenidos en esta sección serán interpretados en el siguiente capítulo, en donde se realizará una comparativa de esta información, y se propondrán esquemas de implementación que permitirán obtener un mejor desempeño de un criptosistema basado en el algoritmo de verificación compartida implementado. 111 Capítulo 6: Conclusiones Capítulo 6 Conclusiones 6.1 Conclusiones Para la presentación de las conclusiones obtenidas en la presente investigación, se clasificarán de acuerdo a los siguientes aspectos: 1) Software generado. 2) Firmware generado. 3) Algoritmos empleados. 4) Criptosistema. 6.1.1 Software generado La aplicación cliente y la aplicación servidora fueron desarrolladas en el lenguaje de programación C++, y en particular, la versión para Windows conocida como Visual C++. Se eligió este lenguaje de programación debido a su amplia aceptación como un lenguaje de programación de sistemas, y su alta eficiencia para generar código similar en desempeño al lenguaje ensamblador [40]. En particular este lenguaje es muy eficiente para generar código que manipule matemáticamente números, a diferencia de otros lenguajes como pueden ser Visual Basic o Java. 112 Capítulo 6: Conclusiones El código se diseñó siguiendo las especificaciones de programación estrictas de ANSI, permitiendo una alta portabilidad del código. La gran ventaja de generar código de esta forma es la reutilización del mismo, ya que fue el mismo código el que se utilizó en la implementación de simulación del criptosistema en la PC, como el que se implementó en las tres distintas plataformas de nuestro criptosistema; en todas estas se utilizó el mismo archivo de código sin cambios en la codificación del mismo. Esto permitió generar código eficiente en todas las plataformas sin la necesidad de conocer el lenguaje máquina de cada una de ellas en forma individual. Para la comunicación mediante una tarjeta de red Ethernet se utilizó la tecnología de software conocida como sockets, la cual ya es un estándar de programación reconocido en una gran variedad de sistemas operativos para las comunicaciones entre computadoras en una red. En el criptosistema desarrollado nos mantuvimos dentro del ámbito de operación de una red de computadoras de área local (LAN). Esto último tuvo gran relevancia en el diseño del criptosistema debido principalmente a dos puntos: 1) El manejo de direcciones IP se mantuvo local, 2) No se contempla una conexión por medio de Internet. Estos puntos tienen un impacto directo en el esquema de seguridad del software generado, ya que una conexión por medio de la Internet por ejemplo, posee requerimientos de seguridad más estrictos, así como el establecimiento de la aplicación servidora como un servicio ofrecido por el servidor, además de las restricciones de seguridad y de configuración de un firewall, por ejemplo. 6.1.2 Firmware generado Se realizó la programación de tres diferentes plataformas, a saber: 1) el microcontrolador de 16 bits de la familia HC(S)12, 2) el controlador híbrido 56F801 de la familia 56800, y 3) el controlador híbrido de la familia 56800E, todos ellos de Freescale Semiconductors. Para la elaboración del firmware respectivo de estos procesadores se emplearon compiladores específicos para cada una de las familias, los cuales proporcionan gran número de herramientas para la generación de código y administración de los recursos internos del procesador. El lenguaje de programación utilizado fue también el lenguaje de 113 Capítulo 6: Conclusiones programación C/C++, lo cual permitió gran reutilización del código entre cada una de las plataformas con un mínimo ajuste de aplicación individual. La tecnología empleada en la elaboración de estos microcontroladores y DSPs, como se analizó en el capítulo 4, es tecnología de punta, proporcionando capacidades de procesamiento y periféricos que en antaño se implementaban con circuitos periféricos adicionales. Una gran ventaja y flexibilidad de estos procesadores es la gran cantidad de memoria interna que proporcionan, permitiendo un modelo de programación flexible así como también la optimización de la velocidad de ejecución de los algoritmos contra un uso extendido de recursos de memoria. En la actualidad ya es de aceptación generalizada el uso de compiladores para este tipo de plataformas e incluso para microcontroladores de 8 bits. El código generado de ninguna manera se queda rezagado en cuanto a su migración a nuevas plataformas de 32 bits, ya que un código C/C++ bien diseñado posee una alta portabilidad. 6.1.3 Algoritmos empleados Durante la fase de implementación de los algoritmos de cifrado y descifrado se encontró una gran limitante: la magnitud necesaria de los números utilizados en este tipo de algoritmos criptográficos. Para obtener una buena seguridad en un criptosistema basado en un algoritmo de criptografía de llave pública, son comúnmente necesarios números de 1024 a 2048 bits. Los registros de la mayoría de los microcontroladores son de 8 a 16 bits, siendo en los DSPs y en la mayoría de las computadoras personales de 32 bits. Esto hace necesario el desarrollo específico de rutinas matemáticas y de manejo en memoria, no disponibles de manera nativa como operaciones de bajo nivel en ninguno de estos procesadores. En criptosistemas prácticos aún un tamaño de llave de 128 bits, para un algoritmo de criptografía de llave pública, es considerado como inseguro [3]. Debido a que la complejidad inherente al desarrollo de rutinas de suma, multiplicación, exponenciación y división de números tan grandes no era de tanta relevancia como la demostración de los 114 Capítulo 6: Conclusiones conceptos pertinentes a la validación de este tema de tesis, se decidió el uso de un tamaño de dato de prueba de 8 bits. Una vez desarrolladas e implementadas estas rutinas matemáticas aumentarían los tiempos de procesamiento, aunque los tiempos de transmisión de los datos serían idénticos a los actuales. Es importante considerar que la gran mayoría de los algoritmos de llave pública modernos sólo encuentran su uso para el intercambio inicial de llaves de una sesión, así como para servicios de autentificación y firma digital, esto debido a que aún para una computadora sería una gran carga de procesamiento el realizar un cifrado completo con uno de estos algoritmos de llave pública. En la actualidad es común encontrar esquemas donde se utiliza la criptografía de llave pública para el intercambio de llaves de criptografía privada, por ejemplo, es común observar el uso del algoritmo de Diffie–Hellman para el intercambio de llaves de sesión (llaves de criptografía privada), para posteriormente utilizar un algoritmo de cifrado como el DES para el intercambio de la información [3]. La tecnología de comunicaciones segura de Internet, conocida como conexiones SSL, utiliza un esquema similar al descrito para establecer una conexión segura. De esta gran carga de procesamiento surgió la idea original del desarrollo de una plataforma, que aunque no tuviera la capacidad de procesamiento de una computadora personal, le permitiera a esta operar en un ambiente seguro sin procesar una fuerte carga extra, como lo son todos los algoritmos de criptografía de llave pública. La aplicación de un criptosistema así sería muy deseable, sobre todo en ambientes en donde una respuesta inmediata no es necesaria, sino que pudiera ser aceptable o aun deseable una ejecución en segundo plano dejando a las computadoras o estaciones de trabajo libres para procesar tareas de otra índole. 6.1.4 Criptosistema desarrollado La tabla 6.1 muestra un resumen del desempeño obtenido en las diferentes plataformas que se utilizaron en la implementación del dispositivo de cifrado/descifrado. En esta tabla, a diferencia de las presentadas en el capítulo anterior, se muestra el 115 Capítulo 6: Conclusiones desempeño real de los dispositivos de cifrado, sin tomar en cuenta los tiempos de transmisión de los datos; esto permitió realizar una comparación directa de las diferentes capacidades de procesamiento de las diferentes plataformas. En las figuras 6-1 y 6-2 se muestra de manera gráfica la información de la tabla 6.1, esto para una mejor visualización de las magnitudes a comparar. Tabla 6.1 Comparativa de desempeño de las diferentes implementaciones del criptosistema. 56F8323 Velocidad Promedio (KB/seg) Tiempo Promedio (mseg/byte) Costo $ (Dólares) [30] 56F801 MC9S12DP256B PENTIUM IV HT Cifrado Descifrado Cifrado Descifrado Cifrado Descifrado Cifrado Descifrado 540.27 700.54 x 400.13 X 320.18 1543.2 35676.32 1.85 1.43 x 2.5 X 3.12 0.65 0.03 9.5 3.5 15 > 250 Figura 6-1 Comparación de velocidades de descifrado entre plataformas. Las figuras 6-1 y 6-2 ilustran de manera gráfica una conclusión directa: la capacidad de procesamiento de la computadora personal y en particular una de alto desempeño como la utilizada en este trabajo, es en gran manera superior al desempeño obtenido en las 116 Capítulo 6: Conclusiones implementaciones propias. Esta conclusión, aunque evidente, puede ser un poco apresurada, ya que para realizar una comparación objetiva es necesario tomar en cuenta factores muy importantes como lo es por ejemplo, el costo real de cada uno de estos sistemas. Es necesario hacer notar que los costos de la tabla 6.1 nos muestran el costo por unidad para bajos volúmenes, y además, que en el caso de la computadora personal no se está contabilizando el costo de la demás circuitería necesaria para su operación. Es muy probable que tomando en cuenta los costos adicionales, tanto del hardware como del software, posicionen a este procesador como una solución no óptima para esta aplicación. Figura 6-2 Comparación de tiempos de descifrado entre plataformas. Los resultados obtenidos durante el desarrollo alentaron la búsqueda de otras alternativas que ofrecieran el balance adecuado entre costo y desempeño, sin estar en el extremo de los muy altos costos de una computadora personal ni en el otro extremo con un desempeño menor y limitado. La figura 6-3, proporcionada por BDTI [26], una compañía dedicada al benchmarking de procesadores, nos proporciona un panorama de la capacidad de procesamiento de los Microprocesadores/DSP a ser elegidos en una implementación 117 Capítulo 6: Conclusiones teórica. Esta gráfica y los datos, que a continuación se analizarán, presentan una solución viable y balanceada en costo/desempeño. Figura 6-3 Comparación de DSPs comerciales. Como punto interesante de la gráfica anterior se hace notar que en ella figura el procesador utilizado en el criptosistema implementado: el DSP56F83XX, aunque la versión aquí mostrada es la de 120MHz/120MIPS. También se puede observar el desempeño de la familia de procesadores DSP MSC81XX de Freescale Semiconductors, la cual a una frecuencia de 300MHz ofrece un desempeño casi 10 veces mayor en magnitud que el procesador actual del criptosistema. Es importante mencionar que el MSC81XX ilustrado en la anterior gráfica se refiere a un DSP de Freescale Semiconductors con un núcleo SC140, siendo este DSP mayor en capacidad de procesamiento que un Intel Pentium III (como punto de referencia de conocimiento público). Recordando además que entre los procesadores elegidos como posibles candidatos se encuentra el MSC8122 el cual incluye 4 de estos núcleos SC140 y 118 Capítulo 6: Conclusiones que en capacidad de procesamiento equivaldría a un solo núcleo SC140 con velocidades de hasta 2.0GHz. Este último procesador ofrecería la asombrosa capacidad de procesamiento de hasta 8000 MIPS [30] contra la actual de 60 MIPS de nuestro criptosistema. En la tabla 6.2 se hace un listado de las diferentes opciones que se encontraron en esta revisión de posibles soluciones alternativas. Información sobre estos procesadores se encuentra de manera muy amplia en el sitio WEB del fabricante. Tabla 6.2 Soluciones embebidas alternativas del dispositivo de cifrado/descifrado, que ofrecen un mejor balance costo/desempeño. Costo unitario ($) MIP/$ 56F8323 60 MIPS MSC8101 250 MIPS MSC8101 300 MIPS MSC8122 6400 MIPS MSC8122 8000 MIPS MSC8126 6400 MIPS MSC8126 8000 MIPS 9.5 88.06 105.70 198.24 237.84 208.08 249.72 6.316 2.839 2.838 32.284 33.636 30.757 32.036 La tabla 6.2 ofrece un dato importante: la razón de unidad de desempeño por dólar. De los resultados se puede observar que la mejor opción tomando en cuenta el criterio de menor costo por unidad de desempeño sería el MSC8122 de 6400 MIPS a 200 dólares. Se podría pensar también en una versión de alto desempeño y de mayor costo basado en el MSC8126 de 8000 MIPS a 250 dólares, o en una versión de bajo costo pero mucho menor desempeño del MSC8101 de 300 MIPS a 100 dólares. La elección óptima se realizará dependiendo del mercado al cual se enfocaría el producto o de los requerimientos de una aplicación en particular. Es importante recalcar que el criptosistema diseñado cumplió el objetivo planteado, el cual era implementar un dispositivo cuya principal función fuera liberar a la PC de todo el procesamiento criptográfico y que además fuera un dispositivo de bajo costo. El problema en la implementación realizada en la práctica radicó principalmente en dos aspectos: 1) En la baja velocidad de la interfaz de transferencia de datos basada en el estándar RS-232, y 2) La limitante económica para adquirir una plataforma de mayor capacidad de procesamiento. La interfaz RS-232 no es una interfaz adecuada para una constante y masiva transferencia de datos, aun a velocidades que pudieran alcanzar los 115.2 Kbps; en la actualidad interfaces como la USB 2.0 con velocidades de hasta 400 119 Capítulo 6: Conclusiones Mbps, son la solución ideal, aunque de mayor complejidad intrínseca. De la tabla 5.4 se puede obtener un dato interesante que afirma el bajo desempeño de la interfaz RS-232 a 57.6 Kbps para nuestra aplicación; de esta tabla se puede extraer que el 22.71% del tiempo total de cifrado fue empleado únicamente para la transmisión de los datos. Con una interfaz de comunicaciones como la USB 1.1 a 12 Mbps, se podría obtener un porcentaje de 0.21% para el tiempo de transmisión y con la USB 2.0 a 480 Mbps podría ser menor al 0.01%. 6.2 Trabajos futuros El tema de la seguridad de la información en redes es en la actualidad de gran relevancia y motivo de grandes proyectos de investigación y desarrollo. El actual uso cada vez más pronunciado de tecnología inalámbrica para la implementación de redes de computadoras agudiza esta problemática [41]. Son cada vez más constantes, intensos e ingeniosos los ataques que se idean para romper la seguridad de una red. Algoritmos de cifrado que anteriormente se consideraban seguros han quedado rezagados al ser desarrollados algoritmos muy eficientes para romperlos en cuestión de unas cuantas horas e inclusive minutos. En la actualidad es necesario el desarrollo y propuesta de nuevas plataformas que ofrezcan un mayor nivel de seguridad o como en términos criptográficos se dice, sean computacionalmente seguros. El desarrollo de una plataforma como la implementada en este trabajo de tesis y el estudio profundo de los algoritmos de cifrado de llave pública, permiten visualizar de manera más clara una serie de trabajos futuros que permitirían considerar la plataforma desarrollada como candidata a ser un producto profesional digno de ser comercializado. 6.2.1 Mejoras en las capacidades actuales del criptosistema Lo primero que se propone como un trabajo futuro inmediato es la mejora del hardware y software desarrollados. Es necesario que se implementen los algoritmos para realizar un cifrado/descifrado con números de 1024 ó 2048 bits, siendo estas cantidades 120 Capítulo 6: Conclusiones consideradas en la actualidad como seguras y prudentes para implementarse en sistemas de seguridad críticos. Es muy probable que al implementar estos algoritmos, la capacidad de procesamiento de las plataformas de 8 ó 16 bits se vea rezagada; la migración a una plataforma de 32 bits sería entonces necesaria. Un segundo requerimiento es el cambio de la interfaz RS-232 por una interfaz de alto ancho de banda como podría ser el estándar USB; esto con el propósito de derribar la limitante de ancho de banda impuesto por la interfaz actual. Todas estas mejoras sólo apuntan a desarrollar de manera práctica la implementación teórica propuesta, con alguno de los procesadores de la tabla 6.2. También es necesario optimizar y por consiguiente disminuir los tiempos de transferencia masiva de datos. Se sugiere el uso de buffers adicionales para el intercambio de información de un bloque, mientras de manera concurrente se realiza el procesamiento de cifrado/descifrado sobre un segundo bloque. Es posible optimizar el comportamiento promedio del dispositivo al realizar también una búsqueda del mejor tamaño de paquete, aunque esto en realidad variará por una amplia gama de factores como lo pueden ser las condiciones de ejecución del programa de la PC, velocidad del procesador, cantidad de programas en ejecución, etc. Una limitante para esto es, obviamente, la poca memoria disponible en un dispositivo embebido de bajo costo; es en la variación de estos parámetros, para adecuarlo a la necesidad en particular, donde se definirá el costo del nuevo diseño. 6.2.2 Conexión segura a Internet En la programación de la interfaz de software para la conexión LAN se utilizó la tecnología winsock, sin la activación de esquemas de seguridad adicionales. Es posible agregar código que permite realizar una conexión segura al servidor además de proveer autentificación. Este cambio permitiría que el criptosistema desarrollado pudiera operar bajo un ambiente de mayor ámbito como podría ser Internet y ejecutar la aplicación cliente desde diferentes lugares del mundo. La conexión segura de mayor uso que implementa la 121 Capítulo 6: Conclusiones tecnología winsock es una conexión SSL con autentificación mediante certificados digitales. 6.2.3 Autorización colectiva remota para el acceso de una cuenta Las aplicaciones de un criptosistema como el desarrollado sólo se encuentra limitado por la imaginación de los diseñadores e innovadores. Una propuesta para la aplicación de este criptosistema podría ser el acceso a una cuenta de banco requiriendo la autorización colectiva de un grupo de inversionistas que confirmarán la cantidad a retirar. Se autorizaría el retiro si t de n inversionistas están presentes al mismo tiempo que el criptosistema ofrece confidencialidad y autentificación de cada uno de los participantes. 122 Abreviaturas y acrónimos A A Firmante ADC Convertidor analógica a digital Analog to Digital Converter ALU Unidad aritmética lógica Arithmetic Logic Unit AMD American Micro Devices API Interfaz del programa de aplicación Application Program Interface ANSI Instituto Nacional Americano de Estándares American National Standard Institute ASCII Código estándar americano para el intercambio de información American Standard Code for Information Interchange B bps Bits por segundo BDTI Berkeley Design Technology Inc. C++ Lenguaje de programación de alto nivel COP Computadora operando apropiadamente C Computer Operating Properly CPU Unidad central de procesamiento Central Processing Unit CRT Teorema del residuo chino Chinese Reminder Theorem CSMA/CD Acceso múltiple con detección de portadora y detección de colisiones Carrier Sense Multiple Access with Collision Detection D DAC Convertidor digital a analógico Digital to Analog Converter 123 DES Estándar de cifrado de datos Data Encryption Standard DLP Problema del logaritmo discreto Digital Logarithm Problem DMA Acceso directo a memoria Direct Memory Access DSA Algoritmo de firma digital Digital Signature Algorithm DSS Estándar de firma digital Digital Signature Standard DSP Procesador digital de señales Digital Signal Processor E EEPROM Memoria de sólo lectura borrable y programable eléctricamente Electrical Erasable & Programmable Read Only Memory F FTP Protocolo para la transferencia de archivos File Transfer Protocol G GF Campo Finito Galois Field GPIO Entrada/Salida de propósito general General Purpose Input Output I ID Identificador Identification IEEE Instituto de Ingenieros en Electricidad y Electrónica Institute of Electrical and Electronics Engineers IP Protocolo de Internet Internet Protocol 124 ISO Organización Internacional de Estándares International Standard Organization K Kbps Kilobits por segundo LAN Red de área local L Local Area Network LCD Pantalla de cristal líquido Liquid Crystal Display LLC Control del enlace de datos Logical Link Control M MAC Control de acceso al medio Media Access Control MAC Multiplicar y sumar con acarreo Multiply and Accumulate with Carry Mbps Megabits por segundo MDI Interfaz dependiente del medio Media Dependent Interface MII Interfaz independiente del medio Media Independent Interface MIPS Millones de instrucciones por segundo Million Instructions per second O OnCE Emulación en circuito On Chip Emulation OSI Interconexión de sistemas abiertos Open Systems Interconnection P PC Computadora personal Personal Computer 125 PCI Interfaz de componentes periféricos Peripheral Component Interface PLL Lazo de amarre de fase Phase Locked Loop PWM Modulación de ancho de pulso Pulse Width Modulation R RAM Memoria de acceso aleatorio Random Access Memory ROM Memoria de sólo lectura Read Only Memory RSA Algoritmo de criptografía pública de uso común Rivest Shamir Adleman S SA Autoridad del sistema System Authority SCI Interfase de comunicación serie Serial Communication Interface SIMD Instrucción simple con datos múltiples Single Instruction Multiple Data SCI Interfase serie de periféricos Serial Peripheral Interface SSL Capa de conexión segura Security Socket Layer T TCP Protocolo de control de la transmisión Transmission Control Protocol U UDP Protocolo de datagrama de usuario User Datagram Protocol 126 USB Bus serie universal Universal Serial Bus V VLIW Palabra de instrucción muy grande Very Long Instruction Word W WLAN Red inalámbrica de área local Wireless Local Area Network WOSA Arquitectura de sistemas abiertos de Windows Windows Open Systems Architecture WWW World Wide Web 127 Referencias [1] Manual de Criptografía [Fecha de consulta: Agosto 2005], disponible en http://www.htmlweb.net/seguridad/cripto/cripto_2.html. [2] Jaime Gutiérrez Gutiérrez, Criptografía, Seguridad en Redes Informáticas y de Telecomunicaciones, Universidad de Cantabria, Laredo, agosto de 2003. [3] William Stallings, Cryptography and Network Security, Second Edition, 1999. [4] Diffie, W.; and Hellman, M. “The first ten years of public key cryptography”. Proceedings of the IEEE, May 1988. [5] Diffie, W.; and Hellman, M. “New directions in cryptography”, IEEE Trans. Inform. Theory, 1976, IT-22. [6] Rivest, R.; Shamir, A.; and Adleman, L., “A method for obtaining Digital Signatures and public key Cryptosystems”, Communications of the ACM, February 1978. [7] ElGamal T., “A public key Cryptosystem and a signature Scheme based on discrete logarithms”. IEEE Transactions on Information Theory, July 1985, IT-31. [8] Scheiner Bruce, Applied Cryptography, 2nd Edition, John Wiley & Sons, New York, 1996. [9] Hsu C.L., Wu T.C., “Authenticated encryption scheme with (t, n) shared verification”. IEEE Proceedings, 117-121, January 1998. [10] Héctor Ricardo Hernández de León, Esquema de encripción autentificado empleando verificación compartida, Tesis de Maestría, cenidet, junio de 2001. [11] Lucena López Manuel José, Criptografía y Seguridad en computadores, Tercera Edición, marzo de 2003. [12] Menezes Alfred, VAN OORSCHOT Paul, VANSTONE Scott, Handbook of Applied Cryptography. CRC Press. ISBN 0-8493-8523-7. Boca Ratón, Florida, 1996. [13] Miller, G., “Riemann’s Hypothesis and Tests for Primality”. Proceedings of the Seventh Annual ACM Symposium on the Theory of Computing, May 1975. [14] Rabin, M., “Probabilistic Algorithms for Primality Testing”. Journal of Number Theory, December 1980. 128 [15] Shamir A., “How to share a secret”, Communications of the ACM, 1979, 24, (11), pp. 612-613. [16] Nyberg K., Rueppel R.A., “A new signature scheme based on the DSA giving message recovery”, Proceedings of the 1st ACM conference on Computer and communications security, 1993, pp. 58-61. [17] Nyberg K., Rueppel R.A., “Message recovery for signature scheme based on the discrete logarithm problem”, Des., Codes, Cryptogr., 1996, 7, (1-2), pp. 61-81. [18] Agnew G.B., Mullin B.C., y Vanstone S.A., “Improved digital signature scheme based on discrete exponentiation”. Electron. Lett., 1990, 26, (14), pp. 1024-1025. [19] ElGamal T., “A public key Cryptosystem and a signature Scheme based on discrete logarithms”. IEEE Transactions on Information Theory, July 1985, IT-31, (4), pp. 469-472. [20] Hoster P., Michels M., y Peterson H., “Comment: Digital signatura with (t, n) shared verification based on discrete logarithms”. Electron. Lett., 1995, 31, (14), pp. 1137. [21] Harn L., “Digital signature with (t,n) shared verification based on discrete logarithms”. Electron. Lett., 1993, 29, (24), pp. 2094-2095. [22] Owens Les, Karygiannis Tom, “Wireless Network Security: 802.11, Bluetooth and Hanheld devices”. NIST Special Publication 800-48, 1993. [23] DELL, “Wireless security in 802.11 (Wi-Fi) networks”. White Paper, January 2003. [24] Texas Instruments, Búsqueda de tarjetas de evaluación y desarrollo de tarjetas PCI con procesadores DSP’s [en línea] [Fecha de consulta: Agosto 2005]. Disponible en http://www.ti.com. [25] Freescale Semiconductors, Búsqueda de tarjetas de evaluación y desarrollo de tarjetas PCI con procesadores DSP’s [en línea] [Fecha de consulta: Agosto 2005]. Disponible en http://www.freescale.com.mx. [26] Microprocessors vs. DSPs: Fundamentals and Distinctions. Embedded Systems Conference (Workshop 324), http://www.BDTI.com, 2004. [27] http://www.plxtech.com, Agosto de 2004. [28] http://www.amcc.com, Agosto de 2004. [29] http://www.amd.com, Agosto de 2004. [30] http://www.freescale.com.mx, Agosto de 2004. 129 [31] http://www.ti.com, Agosto de 2004. [32] http://www.sonicwall.com, Agosto de 2004. [33] http://www.safenet-inc.com, Agosto de 2004. [34] Webopedia, Enciclopedia en línea dedicada a la tecnología de computadoras [Fecha de consulta: Agosto 2005]. Disponible en http://www.webopedia.com.mx. [35] Cisco Systems Inc., Internetworking Technology Handbook, Cisco Documentation Online, Agosto 2005. Disponible en http://www.cisco.com/univercd/cc/td/doc/cisintwk/ito_doc/ethernet.htm. [36] Motorola 8/16 bit Controller Continuum, http://www.freescale.com.mx, 2004. [37] Kruglinski, David J.; Shepherd, George, Programación Avanzada con Microsoft Visual C++ .NET. Microsoft Press, McGraw Hill, 2003. [38] Bennett, D., Visual C++ 5 para desarrolladores. Prentice Hall, 1997. [39] Pappas, Chris H.; Murray, William H., Visual C++ 6, Manual de referencia. McGraw Hill, 1999. [40] Ceballos, Javier Francisco: Microsoft Visual C++ 6, Programación Avanzada en Win32. Alfaomega, 1999. [41] Tanenbaum, Andrew: Computer Networks, Cuarta Edición, Prentice Hall, 2003. [42] Brey, Barry B.; Los microprocesadores de Intel, arquitectura, programación e interfaces, Tercera Edición, Prentice Hall, 1995. [43] García Andrew, “802.11i Strengthens Wi-Fi Security”, http://www.eweek.com, Enero de 2005. 130 Anexo A 131