Desarrollo de un algoritmo para romper por fuerza bruta al Simplified Data Encryption Standard (S DES) mediante el uso de computación paralela
Texto completo
(2) AVAL. Certifico que el presente trabajo fue desarrollado por Vanessa Alexandra Guevara Samaniego, bajo mi supervisión.. Ph.D. Robin Álvarez DIRECTOR DEL TRABAJO DE TITULACIÓN. I.
(3) DECLARACIÓN DE AUTORÍA. Yo, Vanessa Alexandra Guevara Samaniego, declaro bajo juramento que el trabajo aquí descrito es de mi autoría; que no ha sido previamente presentado para ningún grado o calificación profesional; y, que he consultado las referencias bibliográficas que se incluyen en este documento. A través de la presente declaración dejo (dejamos) constancia de que la Escuela Politécnica Nacional podrá hacer uso del presente trabajo según los términos estipulados en la Ley, Reglamentos y Normas vigentes.. VANESSA ALEXANDRA GUEVARA SAMANIEGO. II.
(4) DEDICATORIA. Este proyecto está dedicado principalmente a Dios, incondicional, amoroso y misericordioso, por las oportunidades, por todo lo que hace y seguirá haciendo dentro de mi vida, que su voluntad se cumpla. También se lo dedico a mis padres por su paciencia y apoyo, demostrando que en la vida se puede lograr todo si se lo propone. Finalmente lo dedico a mis hermanas por ser mi soporte y mi ayuda en todo momento.. Vanessa Alexandra Guevara Samaniego. III.
(5) AGRADECIMIENTO Agradezco a Dios por regalarme tanto, por acompañarme y bendecirme en todo el camino, porque he visto sus milagros en mi vida, por el estoy aquí. A mis padres Por el esfuerzo, paciencia, amor y apoyo en todo momento, por los valores que siempre me enseñaron. A mis hermanas Por su ejemplo, amor y apoyo en cada uno de los pasos que me ha permitido llegar aquí, por su comprensión, por ser mi soporte en los momentos difíciles y ser mi alegría en mis momentos felices, por su tiempo, ayuda, por ser incondicionales. Al Dr Robin Alvarez, por su colaboración, paciencia y apoyo en la realización de este proyecto.. Vanessa Alexandra Guevara Samaniego. IV.
(6) ÍNDICE DE CONTENIDO AVAL ....................................................................................................................... I DECLARACIÓN DE AUTORÍA............................................................................... II DEDICATORIA ...................................................................................................... III AGRADECIMIENTO .............................................................................................. IV ÍNDICE DE CONTENIDO ....................................................................................... V SIGLAS ............................................................................................................... VIII RESUMEN ............................................................................................................ IX ABSTRACT ............................................................................................................ X 1. INTRODUCCIÓN ............................................................................................. 1 1.1. OBJETIVOS .............................................................................................. 2. 1.2.. ALCANCE ................................................................................................. 2. 1.3. MARCO TEÓRICO.................................................................................... 4. 1.3.1.. SEGURIDAD INFORMÁTICA Y CRIPTOGRAFÍA.............................. 4. 1.3.2.. SERVICIO DE CONFIDENCIALIDAD ................................................ 5. 1.3.3.. DES (DATA ENCRYPTION STANDARD) .......................................... 5. 1.3.4.. DES CHALLENGES ........................................................................... 8. 1.3.5.. S-DES (SIMPLIFIED DATA ENCRIPTION STANDARD) ................... 9. 1.3.6.. ATAQUES CRIPTOGRÁFICOS ....................................................... 10. 1.3.7.. COMPUTACIÓN PARALELA ........................................................... 12. 1.3.8.. ORIGEN DE LA COMPUTACIÓN PARALELA ................................. 14. 1.3.9.. MODOS DE PARALELISMO ............................................................ 14. 1.3.10.. NIVELES DE PARALELISMO ....................................................... 15. 1.3.11.. PARADIGMAS DE LA PROGRAMACIÓN PARALELA ................. 15. 1.3.12.. CLÚSTER COMPUTING ............................................................... 16. 1.3.13.. COMPONENTES DE UN CLÚSTER............................................. 18. V.
(7) 1.3.14.. TIPOS DE CLÚSTER .................................................................... 19. 1.3.15.. HERRAMIENTAS ACTUALES ...................................................... 20. 1.3.16.. MEDIDAS DE RENDIMIENTO DEL PARALELISMO .................... 30. 1.3.17.. DESARROLLO Y ESTRUCTURA DE UN ALGORITMO............... 32. 2. METODOLOGÍA ............................................................................................ 34 2.1.. ALGORITMO DE CIFRADO S-DES ........................................................ 34. 2.1.1.. RED FEISTEL................................................................................... 34. 2.1.2.. ETAPAS DEL CIFRADO .................................................................. 35. 2.2.. ALGORITMO DE DESCIFRADO S-DES ................................................ 49. 2.3.. PROBLEMA AL RECUPERAR EL CONTENIDO DEL ARCHIVO CIFRADO 52. 2.4.. CONSTRUCCIÓN DEL ALGORITMO DE ATAQUE POR FUERZA BRUTA. AL S-DES .......................................................................................................... 55 2.4.1.. POSIBILIDAD. 1:ETAPAS. DEL. ALGORITMO. DE. ATAQUE. GENERANDO MATRIZ DE CLAVES ............................................................ 55 2.4.2.. POSIBILIDAD 2: SIN GENERACIÓN DE MATRIZ DE CLAVES ...... 68. 2.5.. PARALELIZAR EL ALGORITMO DE ATAQUE ...................................... 72. 2.6.. IMPLEMENTACIÓN DE RED DE PRUEBAS ......................................... 78. 2.7.. ATAQUE EN FORMA PARALELA .......................................................... 82. 2.7.1.. CON UN SOLO PC........................................................................... 82. 2.7.2.. CON VARIOS PCS ........................................................................... 87. 3. RESULTADOS Y DISCUSIÓN ...................................................................... 96 3.1.. INTERFAZ GRÁFICA .............................................................................. 98. 3.2.. CIFRADO Y DESCIFRADO DE UN TEXTO CLARO ............................ 100. 3.3.. ATAQUE SERIAL O SECUENCIAL ...................................................... 106. 3.4.. ATAQUE PARALELO CON UN SOLO PC............................................ 108. 3.5.. ATAQUE PARALELO CON VARIOS PCS ............................................ 111. VI.
(8) 3.5.1 CLÚSTER LAN ................................................................................... 111 3.5.2.. CLÚSTER AD-HOC ........................................................................ 114. 3.6.. RESULTADOS DE TIEMPOS CON CLAVES DIFERENTES ............... 114. 3.7.. SPEED-UP ............................................................................................ 115. 3.7.1.. SPEED-UP ABSOLUTA Y RELATIVA EN UN PC.......................... 116. 3.7.2.. SPEED-UP ABSOLUTA Y RELATIVA EN UN CLUSTER LAN ..... 118. 3.7.3.. SPEED-UP. ABSOLUTA. Y. RELATIVA. EN. UN. CLÚSTER. INALÁMBRICO ............................................................................................ 121 3.8.. EFICIENCIA DEL ALGORITMO ............................................................ 124. 3.8.1.. EFICIENCIA DEL ALGORITMO PARALELO EN UN PC ............... 125. 3.8.2.. EFICIENCIA DEL ALGORITMO PARALELO EN UN CLÚSTER LAN 127. 3.8.3.. EFICIENCIA DEL ALGORITMO PARALELO EN UN CLÚSTER. INALÁMBRICO ............................................................................................ 130 3.9. 3.10.. VENTAJAS DE LA COMPUTACIÓN PARALELA VS SECUENCIAL.... 133 PORCENTAJE DE ESPACIO DE CLAVES ....................................... 133. 4. CONCLUSIONES Y RECOMENDACIONES ............................................... 134 4.1.. CONCLUSIONES.................................................................................. 134. 4.2.. RECOMENDACIONES ......................................................................... 136. 5. REFERENCIAS BIBLIOGRÁFICAS ............................................................ 137 6. ANEXOS ...................................................................................................... 140 ORDEN DE EMPASTADO ................................................................................. 146. VII.
(9) SIGLAS -. PTC: Parallel Toolbox Computing. -. MDCE: MATLAB Distributed Computing Engine.. -. MDCS: MATLAB Distributed Computing Server.. -. DES: Data Encryption Estandar.. -. S-DES: Simplified Data Encryption Estandar.. VIII.
(10) RESUMEN Este trabajo presenta la implementación de un algoritmo de ataque por fuerza bruta al Simplified Data Encryption Estándar (S-DES), el cual será ejecutado tanto de manera serial, tradicionalmente empleada, como en forma paralela utilizando para este efecto las herramientas de computación paralela provistas por MATLAB: Parallel Toolbox Computing (PTC) y MATLAB Distributed Computing Server (MDCE). El objetivo de realizar esta paralelización, es reducir el tiempo de evaluación del espacio de claves. En el ataque en forma paralela se incluye tanto la ejecución en un solo equipo, explotando la característica de multinúcleo que se tiene en la actualidad, como la ejecución en 3 equipos que formarán un clúster computacional. Para facilidad de uso de los usuarios, se implementa una interfaz gráfica de modo que se pueda realizar el cifrado, descifrado y el ataque en forma serial y paralela. Finalmente, en las pruebas de funcionamiento, se realiza una comparación entre los tiempos de demora de rompimiento del algoritmo en función de la cantidad de recursos computacionales empleados: una sola computadora trabajando en forma serial, en forma paralela y varias computadoras trabajando en forma paralela. Adicionalmente, dichas pruebas se realizan en dos ambientes: en una red cableada y en una red inalámbrica Adhoc.. PALABRAS CLAVE: seguridad informática, ataques criptográficos, algoritmos de cifradodescifrado-ataque, fuerza bruta, computación paralela, clúster.. IX.
(11) ABSTRACT This paper presents the implementation of a brute-force attack algorithm to the Simplified Data Encryption Standard (S-DES), which will be executed both serially, traditionally used, and in parallel using the parallel computing Toolbox provided for this purpose by MATLAB: Parallel Toolbox Computing (PTC) and MATLAB Distributed Computing Server (MDCE). The objective of this parallelization is to reduce the evaluation time of the key space. The parallel attack includes both the execution in a single computer, exploiting the multi-core feature that is currently available, and the execution in 3 computers that will form a computational cluster. For user's ease of use, a graphical interface is implemented so that encryption, decryption and attack can be performed serially and in parallel. Finally, in the performance tests, a comparison is made between the breakdown delay times of the algorithm based on the amount of computational resources used: a single computer working serially, in parallel and several computers working in parallel. Additionally, these tests are carried out in two environments: in a wired network and in an Ad-hoc wireless network.. KEYWORDS: computer security, cryptographic attacks, encryption-decryption-attack algorithms, brute force, parallel computing, cluster.. X.
(12) 1. INTRODUCCIÓN Si bien existen una gran cantidad de algoritmos de seguridad, conforme la tecnología avanza, la intromisión ilegal dentro de las comunicaciones también lo hace, pero cuando la información está cifrada, lo obtenido no tendría sentido para el intruso; sin embargo, atacando un algoritmo de cifrado se puede obtener el mensaje en claro, pero ¿cómo se realiza este proceso?, el presente proyecto pretende mostrar una explicación didáctica mediante una aplicación de ataque al algoritmo de seguridad Simplified Data Encryption Estándar (S-DES). Se centra en un algoritmo de cifrado simétrico, cuyo secreto es únicamente la clave con la que ha sido cifrado, para realiza el ataque por fuerza bruta. Este ataque se puede considerar el más sencillo si se lo compara con el criptoanálisis, el mismo pretende romper un algoritmo analizando su desarrollo y encontrado debilidades, en este caso lo principal será evaluar todas las posibles combinaciones del espacio de claves, este número se incrementa conforme la longitud de la clave lo haga y con ello también aumenta la necesidad de mayores recursos computaciones, para solventar esto se utilizará procesamiento paralelo con el objetivo de optimizar la ejecución de dicha aplicación haciendo un uso eficiente de los multiprocesadores que contienen los computadores partícipes del proceso.. 1.
(13) 1.1. OBJETIVOS. El objetivo general de este Estudio Técnico es desarrollar un algoritmo para romper por fuerza bruta al Simplified Data Encryption Standard (S-DES) mediante el uso de computación paralela. Los objetivos específicos de este Estudio Técnico son: -. Analizar el cifrado y descifrado del Simplified Data Encryption Standard(S-DES).. -. Diseñar una aplicación que integre los algoritmos cifrado, descifrado y ataque del Simplified Data Encryption Standard.. -. Analizar los resultados obtenidos al comparar los tiempos de procesamiento del ataque en cada escenario que se especificará más adelante.. 1.2. ALCANCE Con la finalidad de ofrecer una aplicación de uso didáctico, el presente trabajo pretende implementar los siguientes algoritmos S-DES cifrado /descifrado (figura 1.1) y el ataque sin conocer la clave (figura1.2).. Figura 1.1. Esquema de cifrado/descifrado con S-DES. 2.
(14) Para implementar los algoritmos y la interfaz gráfica de usuario se utilizará el software Matlab. Los algoritmos se ejecutarán en una sola computadora o en varias, según sea el escenario que se especifica más adelante. Las computadoras participantes trabajarán sobre Windows. Para la formación del clúster, se utilizará las siguientes herramientas: Matlab Distributed Computing Services (MDCS) y Parallel Computing Toolbox. Para la distribución del trabajo entre núcleos, es el administrador quien divida las porciones de datos. La aplicación tomará como fuente de información un texto plano (cuya longitud será al menos de 1 página) para que sea cifrado mediante una clave generada aleatoriamente [1], el archivo cifrado será utilizado como entrada al algoritmo de ataque, el cual descubrirá la clave y con esta el archivo original. Se podrá elegir el escenario de ataque, pudiendo ser: secuencial, paralelo con una sola computadora o paralelo con múltiples computadoras como se muestra en la figura 1.2.. Figura 1.2. Escenarios para el ataque por fuerza bruta al S-DES mediante computación paralela.. 3.
(15) A continuación, se describen los escenarios a implementar: -. Secuencial: Se ejecutará el algoritmo en una sola computadora de manera serial.. -. Paralelo en una sola computadora: Se ejecutará el algoritmo de ataque (con ciertas modificaciones para permitir el paralelismo) mediante la utilización de los múltiples núcleos de una computadora.. -. Paralelo en varias computadoras: Se ejecutará el algoritmo de ataque utilizando los múltiples núcleos de 3 computadoras conectadas en red. Dentro de este se consideran 2 sub escenarios, el primero mediante red cableada y el segundo mediante conexión inalámbrica.. 1.3. MARCO TEÓRICO. 1.3.1. SEGURIDAD INFORMÁTICA Y CRIPTOGRAFÍA El Comité de Sistemas de Seguridad Nacional (CNSS) puntualiza la seguridad de la información como la protección de la información y sus elementos críticos, incluidos el software y el hardware que utiliza, almacena y transmite esa información. En palabras más sencillas, se puede definir a la seguridad de la información como un conjunto de herramientas que permiten la protección de la información de cualquier amenaza. En el estándar ISO 7498-2 [2], se establece una arquitectura de seguridad con el objetivo de proteger los servicios de comunicaciones que son los siguientes: -. Confidencialidad: Consiste en que la información solo podrá ser utilizada por las personas o equipos autorizados, para avalar esta función se ayuda de la autenticación, autorización y el cifrado.. -. Integridad: Asegura que los datos no sean alterados por un tercero. -. Autenticación de emisor Este proceso consiste en una confirmación de la identidad de una persona o equipo, es decir comprobación de que es quien dice ser y no un intruso.. -. No repudio: certifica la participación de las entidades comunicadoras: emisor y receptor, a través de las pruebas de integridad y autenticidad.. El presente trabajo se centra en la vulneración del servicio de confidencialidad.. 4.
(16) 1.3.2. SERVICIO DE CONFIDENCIALIDAD La información transmitida está dirigida a persona/s o equipo/s especificados por el emisor; sin embargo, en el canal a través del cual se transmite dicha información se considera inseguro y terceras personas pueden interceptarla. Una manera de garantizar el servicio de confidencialidad, de modo que solamente el o los receptores deseados puedan acceder a la información transmitida, consiste en cifrar la información (figura 1.3). De esta manera, si alguien más consigue aquella información, se encontrará con un conjunto de caracteres que a simple vista no tendrán sentido alguno [3].. Figura 1.3. Envió y recepción de información en un canal de comunicación inseguro.. Este servicio de confidencialidad puede ser implementado por un algoritmo de cifrado que puede ser de clave simétrica o de clave asimétrica, el presente trabajo se centra en el primer caso. Para que un algoritmo se considere de clave simétrica es necesario que el mensaje haya sido cifrado con una clave que deberá ser conocida por el o los receptores, de modo que se pueda descifrar correctamente al llegar a su destino. En este trabajo se intentará descubrir el texto original sin disponer de la clave secreta y se lo hará únicamente probando con cada una de las posibles claves y se analizará las características del texto descifrado para saber si fue o no la clave correcta.. 1.3.3. DES (DATA ENCRYPTION STANDARD) Este es un algoritmo de clave simétrica desarrollado por petición del gobierno de los Estados Unidos para suplir la necesidad existente de seguridad en las comunicaciones. Creado por la NSA(Agencia de Seguridad Nacional) en 1976, fue escogido como un estándar FIPS(Estándares Federales de Procesamiento de la Información). Es una modificación de la propuesta de IBM, el algoritmo conocido como LUCIFER (1974) [4]. 5.
(17) Este sistema de cifrado utiliza bloques de texto de longitud fija igual a 64 bits, y una clave de igual valor, donde 8 bits son considerados de paridad. Por lo anterior solo son procesados 56 bits para la clave secreta (Figura 1.4).. Figura 1.4. Entrada y Salida de Cifrado DES. El proceso de cifrado consiste en un conjunto de permutaciones y combinaciones entre el texto en claro y la clave de cada ronda, existen 16 rondas utilizando el esquema FEISTEL (Método de cifrado reversible), donde es necesario segmentar el texto a la mitad, para procesar cada sub segmento, el primero se intercambia con el segundo después de haber pasado por una operación XOR con el resultado de la Función F, para finalmente concatenar resultados de la ronda final y estos pasar a la permutación final, obteniendo un texto del mismo tamaño de ingreso pero cifrado (Figura 1.5). El proceso de descifrado es similar al cifrado, debido al uso de FEISTEL, que como se mencionó anteriormente es reversible, lo cual permite que para descifrar el proceso sea igual; sin embargo, el orden en que se aplican las claves será invertido, empezando por K16 y finalizando por K1. El algoritmo expuesto se consideró como el mejor para la seguridad no solo en Estados Unidos sino alrededor del mundo debido a su nivel de seguridad alto a pesar de tener una clave relativamente pequeña, esto hasta 1997 donde este fue considerado inseguro debido a que se logró romper en aproximadamente 3 meses.. 6.
(18) Figura 1.5. Diagrama de Flujo del algoritmo DES.. 7.
(19) 1.3.4. DES CHALLENGES RAS Security Company en 1997 propuso un concurso abierto al público conocido como DES Challenge, cuyo objetivo era descifrar mensajes desconocidos que había sido cifrados con DES, para desprestigiar al Data Encryption Estándar ante el gobierno de los Estados Unidos, diciendo que este era ineficiente e inseguro. El premio era una gran cantidad de dinero, el proceso responde a un ataque por fuerza bruta, donde en este caso fue necesario probar 72 cuatrillones de claves. No demoró el primer logro, después de la publicación inicial de un texto cifrado con DES, fueron Rocke Verser, Matt Curtin y Justin Dolske que constituyeron el proyecto DESCHALL utilizando computación distribuida a través de internet, su estructura estaba constituida por un servidor de claves administrado por uno de ellos y varios cliente, donde se ejecutaba un pequeño programa el cual permitía el procesamiento de ciertas claves en los ciclos de inactividad de las máquinas, encontrando el mensaje original en 96 días [7]. En la versión 2 del concurso, se mejoró el tiempo en que fue encontrado el texto original a 39 días, esto a cargo de Distibuted Computing Technologies, Inc, cuyo mensaje descifrado [8]. Una mejor opción fue la propuesta por Electronic Frontier Foundation (EFF) donde solo fueron necesarias 56 horas para encontrar la clave y descifrar, supliendo la computación distribuida por una máquina creada únicamente con el propósito de probar una a una las posibilidades existentes en el espacio de claves conocida como DEEP CRAK [9]. Para la última versión del concurso, se unieron Electronic Frontier Foundation (EFF) y Distributed.Net y Electronic Frontier Foundation (EFF) logrando romper DES en menos de 1 día, aproximadamente 22 horas [10]. La Tabla 1.1. muestra un resumen de los desafíos DES en cada una de las versiones del concurso, con sus respectivos ganadores. Tabla 1.1. DES Challenges Versión del concurso DES Challenge I DES Challenge II-1 DES Challenge II-2 DES Challenge III. Fecha. Autores. Tiempo. junio de 1997. Rocke Verser, Matt Curtin y Justin Dolske Distributed Computing Technologies, Inc Electronic Frontier Foundation (EFF). 96 días. febrero de 1998 Julio de 1998 Enero de 1999. Distributed.Net y Electronic Frontier Foundation (EFF) 8. 39 días 56 horas 22 horas y 15 minutos.
(20) 1.3.5. S-DES (SIMPLIFIED DATA ENCRIPTION STANDARD) S-DES es una adaptación sencilla del Data Encription Standard (DES) (Figura 1.6.) cuyo objetivo es facilitar su estudio, creado por Edward F. Schaefer en 1996, mantiene los parámetros originales del DES pero reducidos totalmente, de tal manera que sea comprensible. Los parámetros modificados se muestran en la tabla 1.2 donde se puede observar la diferencia entre los algoritmos en mención [5].. Figura 1.6. Envió, Recepción en Intercepción en un canal de comunicación Tabla 1.2. Parámetros DES vs S-DES Característica Longitud de la clave Longitud. del. texto. DES. S-DES. 64 bits -56 bits utilizados. 10 bits-10 bits utilizados. 64 bits. 8 bits. 16. 2. 48 bits. 8 bits. de. Entrada/Salida Número de rondas Feistel Longitud de las Sub-claves. Para el proceso de Cifrado y Descifrado, se realiza un conjunto de pasos constituidos por permutaciones, sustituciones y otras operaciones, a partir del texto en claro o el cifrado según sea el caso. Como se muestra en la figura 1.7, el proceso se exactamente igual al DES. Para el cifrado, el texto pasa por la permutación inicial IP luego pasa a la función Feistel (fk) que requiere la generación de la sub-clave k1, obtenida después de un proceso de permutación, reducción y desplazamiento de un bit. A continuación, se utiliza por segunda ocasión fk, con la sub-clave k2 y finalmente se aplica la permutación que obtiene el texto cifrado. El mismo proceso es necesario para descifrar el texto cifrado, siempre y cuando se. 9.
(21) conozca la clave con la que fue cifrado dicho texto, este beneficio ocurre por la utilización de la red Feistel que es reversible [6].. Figura 1.7. Cifrado y Descifrado S-DES. Si bien el algoritmo DES era considerado seguro, históricamente la empresa RSA llamó a distintos concursos para probar el grado de vulnerabilidad ante un ataque por fuerza bruta, esto lo se resume continuación:. Finalmente, el gobierno de los Estados Unidos declaró a DES como no confiable, ya que los datos estarían seguros por un día, forzando al fortalecimiento del mismo con la creación del Triple-DES y AES, el cual hasta el día de hoy no se ha podido romper.. 1.3.6. ATAQUES CRIPTOGRÁFICOS Según el estudio de la historia del Algoritmo DES, se puede decir que con el avance de la tecnología y la mejora en hardware y software la mayoría de algoritmos pueden ser vulnerados. Por ende, la información que protegían puede ser accedida por una persona externa, esto se ha conseguido con los Ataques criptográficos. 10.
(22) Un ataque criptográfico constituye una de las principales amenazas que existen dentro de las tecnologías de la información; consiste en aprovechar alguna debilidad o vulnerabilidad en el software, hardware e inclusive de las personas que tienen acceso a una red con el objetivo de obtener, alterar o suprimir información sin autorización, para un fin económico generalmente, esto provocando alteraciones en los recursos de una persona u organización. A continuación, se presentan los ataques más importantes que se pueden realizar a un algoritmo de cifrado simétrico por bloques (como lo son DES y S-DES). a.. Criptoanálisis Diferencial. Este ataque se basa en el análisis de un par te textos en claro que han sido cifrados con la misma clave, se realiza un análisis exhaustivo de datos con el objetivo de obtener la clave correcta, para esto se asignan probabilidades a cada clave posible. La cantidad de pares se incrementa hasta obtener la clave correcta [11]. b.. Criptoanálisis Lineal. Si bien trabaja con pares de textos plano-cifrado como el criptoanálisis diferencial, el contraste radica en que solo se evalúa un número específico de bits dentro de los textos, de tal manera que se pueda realizar operaciones XOR entre ellos. Primero se seleccionan n bits en el texto plano y se realizan operaciones XOR entre estos, luego se seleccionan n bits en el texto cifrado y se aplica el mismo proceso anterior, obteniendo un bit y un bit para cada caso, entre estos nuevamente se utiliza XOR, este proceso se repite n veces, el objetivo es encontrar la mayor cantidad de 0s o 1s para asignar probabilidades más altas a cierta claves con el objetivo de encontrar la correcta [12]. c. Ataques Algebraicos El éxito de este tipo de ataque está en analizar la estructura matemática que conforma en sí el algoritmo, con el objetivo de plantear ecuaciones con el número de incógnitas igual a la longitud de la clave y resolverlo [13]. d. Ataque por fuerza bruta o Búsqueda exhaustiva Como se ha expuesto hasta el momento, la parte más importante de un algoritmo simétrico radica en el secreto de su clave, de modo que, si se la obtiene, se ha vulnerado completamente el algoritmo y por tanto se tiene acceso a la información escondida. El ataque por fuerza bruta consiste en obtener la clave con la que un texto fue cifrado, sin necesidad de criptoanalizar el algoritmo. Por esta razón, la seguridad del algoritmo radica en la longitud de su clave, necesitando un mayor poder computacional mientras mayor sea 11.
(23) su tamaño. Este tipo de ataque se considera más sencillo que los otros tipos de ataques mencionados anteriormente; sin embargo, se requiere de altas prestaciones del equipo o los equipos que se utilicen. Entonces se probará una a una las posibilidades existentes; por ejemplo como se mencionó anteriormente DES tiene una clave de longitud neta de 56 bits, de modo que las posibilidades a evaluar serán 2 56. e. Ataque por fuerza bruta por diccionario de palabras En este caso, en lugar de ir probando cada una de las posibles claves, se prueba palabras de uso cotidiano hasta encontrar la clave correcta. Este tipo de ataque es muy conocido dentro de internet, ya que se pretende encontrar las contraseñas para ingresar a diferentes páginas que exija una cuenta, al igual que para acceder a una red WI-FI. Existen varios programas que permiten este tipo de vulneraciones, de hecho, son de mayor facilidad ya que las contraseñas suelen ser de tamaño reducido. Con el incremento de las prestaciones computacionales de los equipos de hoy en día, CPU con varios multiprocesadores, se puede realizar este tipo de ataque con mayor facilidad; sin embargo, si la longitud de la clave incrementa, un solo equipo no será capaz de lograrlo por lo que se hace necesario utilizar computación paralela. En el presente proyecto se empleará el ataque por fuerza bruta o búsqueda exhaustiva ya que en comparación con los demás métodos presenta una menor dificultad respecto al análisis del texto, únicamente se centra en las posibilidades de la clave.. 1.3.7. COMPUTACIÓN PARALELA Los programas o aplicaciones tradicionalmente son creados para una ejecución secuencial, se dividen en instrucciones que se dirigen al CPU para ser procesadas una por una según su orden de llegada (Figura 1.8).. Figura 1.8. Procesamiento Secuencial.. 12.
(24) La Computación paralela consiste en el uso de múltiples procesadores o computadoras, las cuales trabajan juntas y simultáneamente para resolver un problema o solventar una tarea común [14]. El total de las instrucciones independientes en que se haya dividido el problema es distribuido entre varios procesadores que pueden estar dentro de un mismo CPU o en distintos CPU en el caso de clúster (Figura 1.9).. Figura 1.9. Procesamiento Paralelo.. La computación paralela es utilizada por las limitaciones que existen en la secuencial, siendo los motivos principales: -. Resolución de problemas en menor tiempo: la disminución de tiempo se presenta por la concurrencia de operaciones en todos los procesadores. 13.
(25) -. Resolución de problemas complejos: se pueden resolver problemas de gran complejidad ya que la ejecución se la realiza con múltiples procesadores.. -. Procesamiento de gran cantidad de datos: se pueden procesar conjuntos de datos grandes y distribuirlos entre procesadores.. 1.3.8. ORIGEN DE LA COMPUTACIÓN PARALELA En los años 50 ya se hablaba del paralelismo; sin embargo, las ideas aun no eran plasmadas físicamente, en 1956 Stephe Viger propuso un conjunto de procesadores organizados como un arreglo con memoria, en 1958 J. Holland planteó la ejecución de varios programas independientes, simultáneamente. En este mismo año S.Gill Ferranti estudió la computación paralela y la necesidad de dividir en partes un proceso [15]. En los años 60 todo lo teórico se ve plasmado en una máquina paralela denominada Solman, creada por Westinghouse Electric [16]; sin embargo, este tipo tecnología generaba grandes gastos. En los años 70 aparecen las super computadoras CRAY las mismas utilizaban un procesamiento por vectores, en los años 80 con el uso de microprocesadores surgen computadoras CRAY modificadas de tal manera que pueden tener de 1 hasta 16 procesadores, el tiempo de procesamiento era relativamente pequeño; sin embargo, el tiempo en espera en la cola era grande. En este mismo año se originan las estaciones de trabajo que eran solamente 2 veces más lentas que las CRAY. En la década de los 90 la computación paralela se extendió con la aparición de sistemas como INTEL, Thinking Machines, nCUBE. En la actualidad se tiene la posibilidad de utilizar el paralelismo, en supercomputadoras, procesadores multinúcleo, redes de computadoras, sistemas distribuidos, tarjetas gráficas y de video e incluso en una PC de uso común [17].. 1.3.9. MODOS DE PARALELISMO Se ha clasificado al paralelismo de acuerdo al esfuerzo que realiza el programador al elaborar el algoritmo o la máquina que ejecuta el programa. a. Paralelismo implícito Este trabajo lo realiza el compilador puesto que el algoritmo estará escrito de manera secuencial, una vez en ejecución será analizado y organizado, incluso insertando ciertas instrucciones necesarias con el objetivo de convertirlo en un algoritmo más eficiente que el serial, en este caso el esfuerzo invertido por el programador es pequeño. 14.
(26) b.. Paralelismo explícito. El usuario deberá detallar como distribuirá las tareas, procesos o funciones que se realizan dentro del algoritmo, entre los procesadores, siendo así el programador el que realiza su mayor esfuerzo. En la presente aplicación se utiliza el paralelismo implícito dado que no se tiene el control de la distribución de tareas a cada procesador; sin embargo, el código se modifica utilizando comandos de herramientas paralelas.. 1.3.10.. NIVELES DE PARALELISMO. a. Paralelismo a nivel de bit Depende de la cantidad de información que se pueda manejar por ciclo del procesador. b. Paralelismo a nivel de instrucción Dado que un programa computacional está formando por un conjunto de instrucciones, este tipo de paralelismo consiste en reordenar y combinar dichas instrucciones para que sean ejecutadas sin que el resultado se afecte. c. Paralelismo a nivel de tarea Se asignan 1 o más tareas a cada procesador. d. Paralelismo a nivel de datos Todos los procesadores manejan diferentes datos, pero realizan las mismas acciones. La presente aplicación realiza un paralelismo a nivel de datos: si se considera una matriz de claves, estos valores se segmentan y cada procesador evalúa un conjunto de datos diferente simultáneamente.. 1.3.11.. PARADIGMAS DE LA PROGRAMACIÓN PARALELA. a. Memoria compartida La comunicación entre procesadores se da accediendo a una memoria común donde estarán almacenadas variables u objetos necesarios para la ejecución de un programa, evita las copias redundantes en cada uno y puede ser en un solo procesador o muchos. Puede ser un modo eficaz de comunicación; sin embargo, se tiene el problema de acceso de varios procesadores al mismo elemento de la memoria, para lo cual se debe manejar un protocolo de semáforo, o utilizar el paso de mensajes que se explica a continuación. 15.
(27) b. Paso de mensajes Los procesadores no comparten memoria, variables u objetos, si no que para comunicarse utilizan operaciones de envío y recepción. Esto soluciona el problema que existe en los sistemas de memoria compartida. La comunicación puede ser asíncrona, es decir, se puede enviar un mensaje al receptor, aunque no esté listo para recibirlo o síncronas donde el receptor debe estar listo. La ejecución paralela del presente algoritmo no utiliza memoria compartida, los trabajadores creados en cada procesador se comunican durante la ejecución.. 1.3.12.. CLÚSTER COMPUTING. Los altos costos que generan el uso de supercomputadoras han dado lugar a la utilización de clústeres, los cuales representan una forma económica de acceder a una potencia informática alta para resolver problemas [18].. Figura 1.10. Clúster de 4 nodos.. Un clúster es un conjunto de computadoras paralelas o distribuidas, conectadas entre sí mediante redes de alta velocidad (figura 1.10), trabajan juntas con el propósito de resolver tareas que conllevan grandes recursos computacionales o que incluyan grandes cantidades de datos, trabajo que un solo computador de uso general no podría realizarlo por sí mismo. Sin embargo, no solo es trabajo de hardware, sino que se necesita un software que permita la conformación del grupo y su administración, además admita la interacción con el usuario. Si un nodo falta, los demás realizarán la ejecución con una distribución de recursos diferente; sin embargo, no habrá un error [19]. Para el incremento de la potencia de 16.
(28) procesamiento, únicamente es necesario añadir un nodo (equipo) adicional. Los nodos pueden ser dedicados y no dedicados [20]. Dedicados: su uso está exclusivamente dedicado a tareas relacionadas con el clúster, no dispone de periféricos conectados como: mouse, monitor o teclado, etc. No dedicados: Todos los nodos tienen periféricos de entrada y salida, por ende, puede realizar tareas externas al grupo de computadores, por lo cual el clúster utiliza los ciclos de reloj disponibles. La presente aplicación se ejecuta en un clúster conformado por nodos no dedicados, 3 laptops. Los clústeres pueden ser homogéneos o heterogéneos (Figura 1.11) los primeros consisten en conjuntos de computadoras que tienen una misma arquitectura y recursos similares, por ende, los nodos son técnicamente iguales. En los segundos, los nodos pueden tener diferente arquitectura, procesadores, sistemas operativos, etc.. Figura 1.11. Clúster heterogéneo(izquierda) y clúster homogéneo(derecha). Físicamente un clúster es un conjunto de equipos donde las tareas son divididas entre sus procesadores; sin embargo, para la vista del usuario, trabaja como una única computadora.. 17.
(29) 1.3.13.. COMPONENTES DE UN CLÚSTER. Figura 1.12. Arquitectura de un Clúster. La arquitectura de un clúster (Figura 1.12), está formada por: a. Aplicaciones Paralelas: son aplicaciones desarrolladas dentro de un ambiente de programación paralela que dan solución a un problema específico. b. Middleware: es un software que coordina los trabajos en una aplicación desarrollada dentro de un clúster, distribuye los mensajes o tareas a través de la red entre los nodos que conforman la agrupación, la distribución evita sobrecargas en un nodo optimizando el funcionamiento, de modo que, si un nodo está demasiado cargado con un proceso y otro sin uso, se puede liberar carga, de esta manera se tendrá rapidez en la ejecución. La redistribución de trabajo se puede establecer manual o automáticamente [21]. c. Sistema Operativo: software que permite la administración de recursos de Hardware y software dentro de un computador. d. Red de alta velocidad: conjunto de dispositivos que interconectan varios equipos a velocidades superiores a 10 Mbps, utilizando diferentes tipos de tecnologías, como Ethernet y sus variantes, ATM, Myrinet, etc. Un clúster no se conecta. Existen componentes secundarios que son parte de los que se han especificado anteriormente, específicamente dentro de los nodos:. 18.
(30) e. Elementos de Hardware Los nodos pueden ser de diferentes marcas y por supuesto tener diferentes prestaciones y de esto dependerá su actuación dentro de la ejecución de un algoritmo paralelo. El procesador comprende la parte central de una computadora, se encarga del total control de las tareas y programas que se ejecutan en el equipo, puede contener más de una Unidad Central de Procesamiento (CPU) que es lo común en tiempo actuales, esto llamado multiprocesador multinúcleo. La memoria Cache trabaja con CPU, es una memoria temporal que acelera el tiempo que toma en realizar consultas a la memoria principal, la primera vez que se accede algún lugar específico realiza una copia de datos desde la memora principal para tenerlos disponibles casi de inmediato la próxima vez que se intente acceder a este mismo lugar, es relativamente pequeña respecto a su tamaño. La memoria RAM alberga las utilidades y datos con los que trabaja en un determinado momento, si es pequeña habrá limitaciones lo que causa la percepción de lentitud en el equipo. La memoria ROM es permanente y contiene programas que permiten el arranque del equipo.. 1.3.14.. TIPOS DE CLÚSTER. a. Alto rendimiento (High Performance Computing): Este tipo de clúster está destinado para ejecutar tareas que requieren de gran capacidad de cálculo matemático, renderización de gráficos, compilación de programas, manejo de grandes cantidades de datos, descifrado de códigos [22]. b. Alta e ciencia (High Throughput Computing) Su objetivo es ejecutar la mayor cantidad de tareas en el menor tiempo posible. Para esta clasificación es mucho más eficiente el uso del GPU (Graphics Processing Unit). c. Alta disponibilidad (High Availability Computing) Su propósito es garantizar la máxima disponibilidad y estabilidad de los servicios que ofrecen. Para esto es necesario la utilización de recursos de forma redundante. Utilizados en su mayoría por empresas [23].. 19.
(31) El clúster utilizado en este caso es de alta eficiencia, dado que el objetivo es conseguir el menor tiempo posible en el procesamiento de claves.. 1.3.15.. HERRAMIENTAS ACTUALES. Como se sabe, existe un sinnúmero de lenguajes de programación que actualmente permiten el uso del paralelismo mediante librerías, directivas o toolboxes que deberán ser instaladas para que se pueda programar códigos cuya funcionalidad será paralela. A continuación, se mencionan los lenguajes de programación más conocidos que permiten desarrollar esta funcionalidad: a.. C++. Lenguaje extensión de C, considerado de nivel medio, permite la programación estructurada y orientada objetos, considerado por tal motivo como lenguaje híbrido. Permite la utilización de programación paralela mediante del uso de librerías conocidas como OpenMP y MPI (Message Passing Interface). Open Multi-Processing (OpenMP) Estándar de memoria compartida. Permite el manejo simultaneo de hilos (subprocesos) dentro de un mismo procesador. Así que al inicio se pone en marcha 1 hilo, este puede dar origen a varios dependiendo de la tarea a realizarse [24]. Message Passing Interface (MPI) Se basa en la cooperación de varios procesadores para resolver un problema, sin embargo, estos no comparten memoria, por lo cual es necesario el paso de mensajes para que los procesos se comuniquen. b. FORTRAN(Basic Linear Algebra Subprograms) Es el primer lenguaje de alto nivel, está orientado al procedimiento, es decir que el programador escribe las instrucciones con un orden específico para resolver un problema, es utilizado para el desarrollo de aplicaciones científicas y el análisis numérico [25]. Durante su evolución ha pasado de ser un lenguaje imperativo a uno orientado a objetos. En lo que respecta a la computación de alto rendimiento es bastante popular. Para la implementación de la computación paralela maneja 2 librerías al igual que C++, OpenMP y MPI. c. JAVA JAVA es otro derivado de C, por lo cual maneja una sintaxis similar, es un lenguaje de programación orientado a objetos, su principal característica es que lo programado aquí, 20.
(32) puede ser ejecutado en cualquier lado sin importar la arquitectura de la computadora, esto conocido como independencia de plataforma, esto gracias a la JAVA Virtual Machine (JVM); Las aplicaciones se compilan dando como resultado bytecode el cual es propio de JAVA, esto se ejecutará sobre cualquier dispositivo que tenga previamente instalado la JVM. Para poder correr aplicaciones paralelas utiliza Java Parallel Processing Framework es un framework y MPI. Java Parallel Processing Framework Permite ejecutar aplicaciones que requieren gran cantidad de potencia de procesamiento en varios equipos, con el objetivo de reducir el tiempo de procesamiento, lo que hace es dividir la aplicación en pequeñas partes para que sean ejecutadas simultáneamente en los diferentes procesadores del grupo de máquinas, se utiliza en Grid Computing. [26]. d. MATRIX LABORATORY (MATLAB) Matlab es un software matemático que maneja la programación en lenguaje m, el elemento básico es una matriz que no necesita ser dimensionada y está basado en las bibliotecas de algebra: LAPACK(Linear Algebra Packege) y BLAS(Basic Linear Algebra Subprograms) [27], además de manejar un ambiente de programación brinda el manejo de gráficos y simulaciones. Presenta un conjunto de cajas de herramientas utilizadas para resolver problemas particulares, uno de ellos es la programación paralela que utiliza: Parallel Computing Toolbox y MATLAB Distributed Computing Server. Matlab permite, mediante el uso del PCT (Parallel Computing Toolbox), utilizar múltiples workers en una sola computadora y con ayuda del DCS (Distributed Computing Server) múltiples workers en varias computadoras formando un clúster (figura 1.13) Parallel Computing Toolbox Permite resolver problemas de alto costo computacional utilizando procesadores multinúcleo, GPU y clústeres, contiene un conjunto de comandos que permiten paralelizar ciertos segmentos de código secuencial, como bucles y matrices distribuidas. Permite la programación paralela sin MPI. Tiene un conjunto de comandos que permiten modificar la programación secuencial, se analizará los principales: 1.Parallel for-loop (PARFOR) 2.Single Program Multiple Data (SPMD) 21.
(33) Figura 1.13.Programación paralela en Matlab (en la izquierda Paralelo Local y en la derecha paralela en clúster).. Parallel for-loop (Parfor) Gracias a la herramienta Paralell toolbox se puede cambiar ciertas funciones por otras para paralelizar, como principal ayuda aparece el PARFOR, que remplaza todo ciclo repetitivo siempre y cuando cumpla con las condiciones que establece, con su uso automáticamente, el entorno mandará una orden interna a la CPU para que reparta el cálculo que está realizando entre el total de sus núcleos. La carga de trabajo se distribuye de manera uniforme y automática de acuerdo con el índice de bucle, Los detalles son transparentes con el usuario. Si el proceso dentro de un bucle no es suficientemente grande o complejo, no sería útil la distribución entre procesadores ya que, en lugar de reducir el tiempo, lo incrementará cuando todos los workers se comuniquen. Para que el bucle de parfor funcione, las variables dentro del bucle deben ser parte de las categorías de la tabla 1.3.. 22.
(34) Tabla 1.1. Tipos de variables dentro de un PARFOR. Categoría de. Descripción. variable Loop. Variable utilizada como índice del bucle para arrays. Sliced. Variable cuyos segmentos son utilizados en cada iteración, pueden ser de entrada y salida.. Broadcast. Es una variable definida previo al bucle, este valor se utiliza dentro del mismo, pero no es asignado adentro.. Reduction. Es una variable que incrementa su valor conforme pasan las iteraciones del bucle, independiente del orden en que se las realiza.. Temporary. Es una variable creada dentro del bucle, pero, difiere de la variable del sliced, dado que no estará disponible fuera del bucle.. Para entender los tipos de variable, se presenta el siguiente fragmento de código:. Segmento de código 1.1. Detalle de tipos de variables PARFOR.. Un bucle parfor generará un error si contiene cualquier variable que no puede ser categorizada en una clase de variable o si las variables violan sus restricciones de categoría al ser clasificadas. Problemas y soluciones Como se expuso anteriormente parfor no siempre es posible, además de la clasificación de variables, otro problema importante es la existencia de recursividad, de modo que el bucle no siempre puede obtener el valor de la iteración anterior ya que estas no se dan en 23.
(35) un orden específico y el programador tampoco podrá establecer una disposición. El siguiente ejemplo permite generar y visualizar mediante consola los números del 1 al 5, lo que se esperaría en la salid. -2-3-4-. se muestra en la figura 1.14. EJEMPLO. Segmento de código 1.2. Ejemplo simple de PARFOR.. Figura 1.14. Salida ejemplo simple de PARFOR. Ejecutando nuevamente este código, se obtiene una salida diferente, lo que permite concluir que la recursividad no es posible realizar dentro de un ciclo parfor. Existen otros problemas dentro de bucle parfor, que Matlab advierte con un error, sin embargo, estos si tienen una solución, a continuación, se presentan cada uno con un ejemplo para un mejor entendimiento. Contador no entero Cuando el valor de incremento de cada iteración no es un número entero, Matlab da como resultado un error, el siguiente código representa un bucle que se espera vaya en incremento de 0.2, partiendo de 0 hasta llegar a 1. EJEMPLO:. Segmento de código 1.3. Problema de contador no entero. 24.
(36) Al ejecutarlo, el mensaje que se obtiene es: parfor_range_check, como lo indica la figura 1.15.. Figura 1.15. Error PARFOR_RANGE_CHECK. SOLUCIÓN: El procedimiento para ejecutar y no obtener un error consta en utilizar una variable auxiliar de interacciones, así que se forma un vector con los índices necesarios. Dentro de la declaración parfor, se pretende evaluar dicho vector, por lo cual el índice irá desde 1 hasta la longitud del mismo, para obtener los valores en cada vuelta, basta con ingresar al índice i del vector aux.. Segmento de código 1.3. Solución de contador no entero.. El resultado por consola será el deseado, como se muestra en la Figura 1.16.. Figura 1.16. Salida en consola contador no entero.. 25.
(37) Bucles anidados Cuando se intenta utilizar parfor dentro de otro parfor, existirá un error en la ejecución el cual no permite que el parallel pool inicie, por lo cual nunca se podrá completar la acción, como se observa en el ejemplo, cualquiera que sea el procedimiento que se encuentre formando parte del segundo ciclo paralelo no se podrá realizar, debido al error que se muestra en la figura 1.17, que menciona ParFor loops cannot be nested. EJEMPLO:. Segmento de código 1.4. Problema de bucle anidado.. Figura 1.17. Error PARFOR loops SOLUCIÓN Para poder ejecutar correctamente el script, paralelizando todo el contenido de los 2 ciclos parfor, se construye una función que contendrá como cuerpo el segundo parfor, de tal manera que esta será llamada desde el primer parfor sin ningún inconveniente en la ejecución.. Segmento de código 1.3.5. Solución de bucle anidado.. Single Program Multiple Data(SPMD). 26.
(38) Otra herramienta alternativa para paralelizar el SPMD, cuyo nombre se descomponen para mejor comprensión; Single Program: se refiere a que el mismo código corre en diferentes trabajadores; Multiple Data: cada trabajador puede tener datos únicos y diferentes para el código. Los workers se conocen como laboratorios. La sintaxis puede ser:. spmd,statements, end. Número de trabajadores del Parallel Pool antes creado. spmd(n), statements, end. n: número de trabajadores (Laboratorios). spmd(m,n), statements, end. m: número de trabajadores mínimo n: número de trabajadores máximo. Segmento de código 1.6. Sintaxis SPMD.. Para ejecutar este comando, debe haberse creado un parallel pool obligatoriamente mediante código o a través de la interfaz gráfica esto detallado anteriormente. Dentro del cuerpo de spmd existen valores únicos para cada laboratorio labindex, el número de laboratorios numlab indica cuantos trabajadores actuarán en la ejecución, los laboratorios tienen una comunicación entre ellos punto a punto, utilizan las funciones labsend, labrecive. SPMD es eficiente cuando los programas tardan demasiado tiempo para ejecutar y cuando los programas trabajan con grandes cantidades de datos, permitiendo que varios laboratorios ejecuten soluciones simultáneamente y que los datos se distribuyan a varios laboratorios. EJEMPLO: Se presenta un ejemplo sencillo para comprender el funcionamiento del comando descrito, este conjunto de líneas de código tiene como objetivo utilizar 2 laboratorios, cada uno para realizar una parte del ciclo for, el trabajo es imprimir por consola números del 1 a 10, la condición indica que si el labindex (identifica al laboratorio) es 1 realice la impresión de los 5 primeros números de lo contrario muestre los últimos 5. 27.
(39) Segmento de código 1.7. Ejemplo de manejo de SPMD y condicionales.. La salida obtenida es la que se muestra en la figura 1.18, de modo que se puede elegir que hace cada laboratorio de acuerdo al funcionamiento del código a paralelizar.. Figura 1.18. Salida en consola de manejo de SPMD y condicionales.. EJEMPLO: Otra manera de manejar la distribución de trabajo entre laboratorios es SWITCH-CASE dentro del cuerpo SPMD, de manera que la variable que evaluará los casos será labindex, de acuerdo al número de identificación de laboratorio realizará la acción especificada dentro del caso (segmento de código 1.9), la salida será la misma que se muestra en la figura 1.18.. 28.
(40) Segmento de código 1.8. Uso de SWITCH-CASE.. EJEMPLO: Se puede crear objetos compuestos, los cuales almacenan valores específicos para cada trabajador que se ejecuta dentro de SPMD, es similar a una matriz con celdas, donde cada elemento le pertenece a un laboratorio en ejecución, se maneja mediante índices dentro de llaves { }, de manera que se desea guardar valores para el laboratorio 2 se escribirá: NombreObjeto{2}=valorAsignado; A diferencia de otras variables en MATLAB, esta se construye, utilizando el constructor Composite () (segmento de código 1.10).. Segmento de código 1.9. Uso de composite.. MATLAB Distributed Computing Server Trabaja conjuntamente con Parallel Computing Toolbox, permitiendo ejecutar programas computacionalmente intensivos en conjuntos de computadoras denominados clúster o 29.
(41) grids, se admite trabajos por lotes, procesamiento de conjuntos grandes de datos entre otros, permite la instalación y ejecución del servicio MDCE para constatar la conexión entre todos los nodos que ejecutarán los programas paralelamente. El servidor de computación distribuida de MATLAB le permite ejecutar un uso computacional intensivo programas MATLAB y modelos Simulink en agrupaciones de computadoras, nubes y cuadrículas, lo que le permite acelerar los cálculos y resolver grandes problemas.. La tabla 1.4. presenta un resumen de las herramientas necesarias para desarrollar y ejecutar un programa que ha sido paralelizado, dependiendo del software elegido.. Tabla 1.2. Librerías, directivas o toolboxes para algoritmos paralelos según el lenguaje de programación. Lenguaje. Librería, directiva o toolbox. C++. MPI Open MP MPI Open MP Java Parallel Processing Framework: MPI Parallel Computing Toolbox MATLAB Distribute Computing Server. FORTRAN JAVA MATLAB. En este caso se utiliza MATLAB con sus herramientas Parallel Computing Toolbox y MATLAB Distribute Computing Server que permiten la construcción de un clúster y la paralelización del algoritmo con una ligera modificación en el código secuencial.. 1.3.16.. MEDIDAS DE RENDIMIENTO DEL PARALELISMO. Para evaluar un algoritmo secuencial se toma en cuenta únicamente el tiempo de ejecución de acuerdo a la complejidad del problema que resuelve; sin embargo, para evaluar un algoritmo paralelo, esto no es suficiente ya que no solo depende del tamaño del problema sino del número de procesadores que serán parte de esta ejecución. A continuación, se especificarán medidas para evaluar el comportamiento de una arquitectura paralela como: tiempo de ejecución, seedUp, eficiencia. 30.
(42) a. Speed-up En los ambientes paralelos es de interés poder ver que tan bueno es un algoritmo comparado con su respectivo serial en relación a la rapidez, así se podrá establecer si existe un beneficio con la utilización del paralelismo. Speed-up es la aceleración que se obtiene al ejecutar un conjunto de líneas de código en un ambiente paralelo, en general, es la medida de la mejora del performance al aumentar procesadores. Es la relación que existe entre los tiempos de ejecución cuando se utiliza 1 procesador (serial) y cuando se utilizan n procesadores(paralelo). [28] (2.1). Se puede establecer 2 tipos de Speed-up: absoluto y relativo, estos se diferencian por la definición del tiempo de ejecución secuencial ts. a.1. Speed-up absoluto El tiempo ts es el que se obtiene usando el mejor algoritmo secuencial para resolver el problema, en el caso de que no exista esta clasificación, utilizar para el cálculo el algoritmo serial más conocido. a.2. Speed-up relativo El tiempo ts es el que se obtiene con la ejecución el algoritmo en un solo procesador. b. Eficiencia La eficiencia de un algoritmo paralelo se define como el cociente entre la speed-up y el número de procesadores en utilización. (2.2). 31.
(43) c. Escalabilidad Se dice que un sistema es escalable cuando la eficiencia se mantiene constante en valores superiores a 0.5 para un rango de procesadores. En este caso se consideró los tiempos de ejecución para un texto corto y largo, con estos se realizó el cálculo de las speed-up y la eficiencia además la verificación de escalabilidad, en la parte de resultados se podrá apreciar el análisis.. 1.3.17.. DESARROLLO Y ESTRUCTURA DE UN ALGORITMO. Un algoritmo es un conjunto de instrucciones que realizan una tarea en específico, tiene un inicio y fin. Para desarrollar un algoritmo independiente del ámbito para el cual se realice, es primordial el reconocimiento y análisis del problema que se pretende resolver, comprendido esto, se establecen las entradas que se necesitará para el desarrollo y las salidas esperadas. Se puede utilizar ciertas herramientas como pseudocódigo, que consiste en escribir en cada línea una instrucción en palabras, especificando variables, valores y operaciones futuras, esto con el objetivo de tener una mayor facilitar al pasar esto a líneas de código en el software en el que se ha decidido programas. Los diagramas de flujo es una representación gráfica de un algoritmo, donde se utilizan diversas formas que han sido estandarizadas por la ANSI e ISO, permite una organización clara y precisa de las instrucciones que se pretenden ejecutar en un futuro, en el cuadro de procesos se establecerán las operaciones utilizando los símbolos correspondiente, de la misma manera en el símbolo condicional que es un rombo, estos siendo algunas de las formas utilizadas en la elaboración de un diagrama de flujo, en la figura 1.19 se muestran sus elementos.. Figura 1.19. Elementos de un diagrama de flujo. Para comprobar la funcionalidad el algoritmo realizado mediante pseudocódigo o diagrama de flujo proceder a realizar una prueba de escritorio, esta consiste en probar si se satisface 32.
(44) todas las cláusulas descritas en el problema, dando diferentes valores a los argumentos de entrada. Posterior a esto, se codificará de acuerdo al lenguaje elegido, originando varias sentencias que cumplan con lo propuesto. a. Algoritmo paralelo Un algoritmo paralelo es el que se puede dividir en partes para que estas sean ejecutadas por varios procesadores al mismo tiempo, de tal manera que al finalizar la ejecución se puedan unir resultados y obtener la solución del problema que evalúa dicho algoritmo. Algunos algoritmos son fáciles de dividir, sin embargo, de acuerdo a la complejidad del problema se presentan inconvenientes para hacerlo, algo adicional es que, una instrucción no puede depender de otra ya que todas se realizarán al mismo tiempo por lo cual se introducen errores. Cuando se ejecuta un algoritmo secuencial, las principales preocupaciones son la complejidad que tiene ya que esto ocuparía una gran cantidad en la memoria del equipo y por supuesto provocaría un tiempo de ejecución alto, pero en el caso de los algoritmos en paralelo, dado que se utilizan varios procesadores, el tiempo principal a optimizar es el que de comunicación entre procesadores. Esto depende de cómo se maneje el paralelismo en el lenguaje elegido para programar (Memoria compartida o Paso de mensajes). Para modificar un algoritmo secuencial y convertirlo en paralelo, se debe evaluar parte por parte para ver la efectividad de paralelizarlo, ya que cierto procesamiento puede ser más eficiente manteniéndolo secuencialmente. En este caso para el desarrollo del algoritmo de ataque se utilizó un diagrama de flujo donde se especificó variables y procesos, posteriormente se codificó en MATLAB. Para paralelizar se evaluó parte por parte, validando la eficiencia en ejecución secuencial y paralela, luego, encontrados los puntos de mejora se utilizó comandos de la librería PTC modificando y creando el algoritmo paralelo.. 33.
(45) 2.. METODOLOGÍA La presente aplicación tendrá las siguientes características: Una aplicación de uso didáctico en la que el usuario podrá realizar el cifrado, descifrado y ataque del S-DES, se tiene la disponibilidad de crear o subir un archivo de texto como entrada a cada una de las funciones mencionadas, de la misma manera al finalizar se podrá exportar el archivo o imprimirlo. En la opción de Ataque, se podrá seleccionar entre: serial o paralelo, dentro de la ejecución paralela se podrá especificar el número de workers que trabajarán en el proceso, mínimo 2 y máximo 21.. En la siguiente sección se detalla el desarrollo de los algoritmos utilizados para la implementación de la aplicación. Para cifrar y descifrar información se utilizará el algoritmo S-DES, para el ataque por fuerza bruta se construirá un algoritmo propio que cumpla con dicho objetivo, a continuación, se modificará de tal manera que pueda ser ejecutado en un ambiente paralelo y finalmente se explicará detalladamente como utilizar la computación paralela en MATLAB, para la construcción de un clúster en donde la aplicación podrá ser ejecutada.. 2.1. ALGORITMO DE CIFRADO S-DES El algoritmo de cifrado S-DES está compuesto por un conjunto de operaciones de permutación, sustitución, desplazamiento y por su puesto rondas Feistel como su esencia, a continuación, se describe paso a paso su funcionamiento.. 2.1.1. RED FEISTEL Algoritmo reversible, permite que su esquema de descifrado sea idéntico al cifrado únicamente con un cambio de orden de sub-claves. Consiste en un conjunto de operaciones que se repiten en cada ronda, el número de rondas depende del algoritmo en el cual será usada, para este caso (S-DES) se realizan 2 rondas. Se trabaja con 2 datos de entrada: Ln y Rn (provienen de la división a la mitad de un vector de 8 bits), estos sufrirán varios cambios durante el proceso, en cada ciclo se utiliza una sub-clave, esta generada a partir de la clave inicial después de un proceso que se describirá en la siguiente sección dentro de las etapas del cifrado. La ¡Error! No se encuentra el origen de la referencia. describe las operaciones que se realizan dentro de la red de Feistel, plasmada gráficamente en la Figura 2.1. 34.
(46) (2.3) Donde, Ki es el índice de la subclave, mientras que Li y Ri son índices del bloque de mensaje.. Figura 2.1. Red Feistel del S-DES.. 2.1.2. ETAPAS DEL CIFRADO El cifrado consta de 2 etapas, la primera consta de una secuencia de pasos para generar las sub-claves partiendo de la clave inicial y la segunda el cifrado en sí. a. Generar sub-claves El procesamiento de la clave K (10 bits) de cifrado sigue el esquema que muestra la Figura 2.2, como se puede ver, la entrada es una clave de 10 bits(vector), que pasa por un proceso de permutaciones, divisiones y desplazamientos hasta generar K1 y K2. Para mejor comprensión de esta función se realizará un ejemplo a continuación, donde se detalla paso a paso el funcionamiento.. 35.
(47) Figura 2.2. Generación de sub-claves K1 y K2.. Instrucciones PASO 1 (figura 2.2) Se realiza un reordenamiento de acuerdo a la regla de generación del vector P10 a partir del valor de la clave la misma que será ingresada como argumento de entrada.(figura 2.3). Figura 2.3. Permutación P10. 36.
(48) Código de MATLAB:. PASO 2 (figura 2.2). Figura 2.4. Desplazamiento a la izquierda.. Es necesario dividir a la mitad (figura 2.4)del vector P10 creado en el paso anterior, para esto se generan 2 nuevos vectores de longitud 5 bits, esta etapa consiste en recorrer el bit que está más hacia la izquierda y colocarlo más hacia la derecha, esto con cada vector de 5 bits (mitad1 y mitad2). Se forma un nuevo vector para cada caso (LS1_A, LS1_B) que iniciará desde el bit 2 de mitad1 o mitad2, en la posición final se colocará el bit b1 o b7. Finalmente se procede a concatenar los resultados de LS1_A, LS1_B, obteniendo un vector de 10 bits que será útil en la siguiente etapa (figura 2.5).. 37.
(49) Figura 2.5 Ejemplo de desplazamiento a la izquierda. Código de MATLAB:. PASO 3 (figura 2.2) Aplicar la permutación P8 a continuación, se muestra cómo serán reordenados los bits, este resultado es el correspondiente a la primera sub-clave K1 (figura 2.6).. Figura 2.6 Obtenicón de la sub-clave k1.. Código de MATLAB:. 38.
(50) PASO 4 (figura 2.2) Se realiza el desplazamiento circular a la izquierda, pero en esta ocasión será de 2 bits. Se forma un nuevo vector para cada caso (LS2_A, LS2_B) que iniciará desde el bit 3 hasta el final de mitad1 o mitad2, en las 2 últimas posiciones se colocarán los bits que fueron desplazados. Finalmente se procede a concatenar los resultados de LS2_A, LS2_B, obteniendo un vector de 10 bits que será útil en la siguiente etapa. (figura 2.7). Figura 2.7 Desplazamiento a la izquierda 2 bits. Código de MATLAB:. PASO 5 (figura 2.2) Aplicar la permutación P8 a continuación, se muestra cómo serán reordenados los bits, este resultado es el correspondiente a la segunda sub-clave K2 (figura 2.8).. Figura 2.8 Obtenicón de la sub-clave k2.. Código de MATLAB:. 39.
(51) b. Cifrado S-DES del texto claro. El proceso de cifrado el texto plano que ingresa, es segmentado en bloques de 8 bits, que serán procesados uno a uno. El primer bloque pasará por la permutación inicial, ahora se aplica la primera ronda Feistel (F), a continuación, la segundo, con este resultado se aplica la permutación inversa y se obtendrá un bloque de texto de 8 bits cifrado.. Figura 2.9. Diagrama de flujo del cifrado S-DES aplicado a cada uno de los caracteres del texto claro.. Para tener claridad de cómo funciona el proceso de cifrado se realizará un ejemplo, siguiendo el diagrama de flujo completo que se observa en la figura 2.9.. 40.
(52) Instrucciones Paso 1(figura 2.9) Para el cifrado se necesita como argumento de entrada el texto claro, en este caso es el mente a binario, se almacena en el array: textoVector, con este vector se aplica la permutación inicial IP, la cual consiste en el reordenamiento de las posiciones de los dígitos binarios. (figura 2.10). Figura 2.10. Permutación inicial a un carácter. Código de MATLAB:. Paso 2.1 (figura 2.9) Se ejecuta la función fk con argumentos: vector IP y subclave K1. Primera ronda Feistel, función F, toma como argumento de entrada el vector IP y la subclave K1, IP se segmenta en 2 vectores L y R, que corresponden a la parte izquierda y derecha de dicho vector. Se procesa R, este vector pasa por la permutación EP, cuyo objetivo es expandir de 4 bits a 8 con un reordenamiento y expansión (figura 2.11), en la figura 2.12 se tiene el resultado de EP respecto al ejemplo.. 41.
(53) Figura 2.11. Funión fk1. Figura 2.12. Permutación de expansión EP.. 42.
(54) Código de MATLAB:. Paso 2.2 (figura 2.9) La operación XOR, se realiza entre el vector EP y la sub-clave K1(figura 2.13), El resultado de la operación XOR, se descompone en dos partes iguales: Xor_1_A y Xor_1_B (figura 2.14). Figura 2.13. Operación XOR. Figura 2.14. Ejemplo de operación XOR. 43.
(55) Código de MATLAB:. Paso 2.3 (figura 2.9). Figura 2.15. Ejemplo de operación XOR Posterior a la división en segmentos del vector XOR_1(figura 2.15), se procede a la búsqueda de valores en las cajas S, estas se denominan cajas de sustitución, están compuestas por 4 filas y 4 columnas con valores binarios, van del 0 al 3, existe la caja S0 y S1. Xor_1_A, servirá para realizar una consulta en S0 y Xor_1_B, servirá para realizar una consulta en S1. La búsqueda implica operaciones con los vectores mencionados. El algoritmo indica que, para la búsqueda en So, se utilizará el bit 1 y 4 concatenándolos para buscar el valor obtenido en las filas para las columnas es el mismo proceso, pero con el bit 2 y 3(todo esto del vector Xor_1_A), se obtiene un valor binario de 2 bits.. 44.
(56) El mismo proceso se realiza con S1, pero con el vector Xor_1_B, obteniendo otro valor binario de 2 bits. El vector encontrado resultado de la caja S0 Y S1 se muestra en la figura 2.16.. Figura 2.16. Cajas s0 y s1. Código de MATLAB:. 45.
(57) Paso 2.4 (figura 2.9). Figura 2.17. Permutación P4. Se procede a concatenar las salidas y se aplica la permutación P4(figura 2.17), con la salida se aplica la función XOR con L1 que se obtuvo anteriormente (figura 2.18).. Figura 2.18.Ejemplo permutación P4 y XOR. Código de MATLAB:. 46.
(58) Paso 3 (figura 2.9) Crear. concatenando los 4 bits de la derecha del vector IP(L1) y 4. bits generados en el bloque FK1 (figura 2.18).. Figura 2.18.Vector Switch. Código de MATLAB: Paso 4 (figura 2.9) Ejecución del bloque fk2. Se ejecuta la función fk con argument K2. Se obtiene un vector de 4 bits resultado del proceso detallado en el paso 2 , luego se concatena con el vector L2 obteniendo el vector AUX (figura 2.18).. Figura 2.18.Función fk2. Código de MATLAB:. Paso 5 (figura 2.9) El vector obtenido en el paso anterior pasa por la permutación inversa, una vez reordenados los bits, se obtiene el carácter cifrado.. 47.
(59) Para obtener el valor en código ASCCI, se transforma el valor binario a decimal y luego a carácter, dando como resultado el valor cifrado= '×' (figura 2.19).. Figura 2.19.Permutación inversa.. Código de MATLAB:. Este proceso mostró el cifrado de unicamente un carácter; sin embargo, se va utilizar un archivo de texto que contenga un conjunto de caracteres, por lo que se agrega el siguiente segmento de código para obtener el argumento de entrada seleccionado:. Segmento de código 2.1. Abrir y leer un archivo de texto.. La función se modifica dentro de un ciclo for para poder cifrar un conjunto de carácteres (Segmento de código 2.2).. 48.
(60) Segmento de código 2.2. Función cifrado S-DES. 2.2. ALGORITMO DE DESCIFRADO S-DES El descifrado de S-DES es metódicamente el mismo que el de cifrado, por su puesto la entrada será un texto cifrado y la clave será la misma con la que dicho texto fue cifrado. El proceso se muestra en la figura 2.20, donde se observa que en la primera ronda Feistel ingresa como entrada la sub-clave K1 y en la segunda la sub clave K2, siendo esto lo único que lo diferencia del cifrado.. 49.
Figure
Documento similar
Para recibir todos los números de referencia en un solo correo electrónico, es necesario que las solicitudes estén cumplimentadas y sean todos los datos válidos, incluido el
En dichos simuladores como en otros softwares (juegos virtuales, etc.) no se cuenta con un algoritmo que permita el manejo de colisiones entre los objetos que interactúan en el
Volviendo a la jurisprudencia del Tribunal de Justicia, conviene recor- dar que, con el tiempo, este órgano se vio en la necesidad de determinar si los actos de los Estados
Una vez hecho esto, se realiza una espera, leyendo el registro de salida del coprocesador para el control de qué está haciendo el procesador en este momento, a la espera que nos
En cuarto lugar, se establecen unos medios para la actuación de re- fuerzo de la Cohesión (conducción y coordinación de las políticas eco- nómicas nacionales, políticas y acciones
"No porque las dos, que vinieron de Valencia, no merecieran ese favor, pues eran entrambas de tan grande espíritu […] La razón porque no vió Coronas para ellas, sería
Cedulario se inicia a mediados del siglo XVIL, por sus propias cédulas puede advertirse que no estaba totalmente conquistada la Nueva Gali- cia, ya que a fines del siglo xvn y en
The part I assessment is coordinated involving all MSCs and led by the RMS who prepares a draft assessment report, sends the request for information (RFI) with considerations,