• No se han encontrado resultados

Verificación de Modelos de los algoritmos DES, 3DES y AES descritos en VHDL

N/A
N/A
Protected

Academic year: 2020

Share "Verificación de Modelos de los algoritmos DES, 3DES y AES descritos en VHDL"

Copied!
64
0
0

Texto completo

(1)Universidad Central “Marta Abreu” de Las Villas Facultad de Ingeniería Eléctrica Departamento de Telecomunicaciones y Electrónica. TRABAJO DE DIPLOMA. Verificación de Modelos de los algoritmos DES, 3DES y AES descritos en VHDL. Autor: Fernando Valdivia González Tutor: Erisbel Orozco Crespo. Santa Clara 2013 Año 55 de la Revolución.

(2) Universidad Central “Marta Abreu” de Las Villas Facultad de Ingeniería Eléctrica Departamento de Telecomunicaciones y Electrónica. TRABAJO DE DIPLOMA. Verificación de Modelos de los algoritmos DES, 3DES y AES descritos en VHDL. Autor: Fernando Valdivia González Tutor: Erisbel Orozco Crespo Profesor del Dpto. Electrónica y Telecomunicaciones. Santa Clara 2013 Año 55 de la Revolución.

(3) Hago constar que el presente trabajo de diploma fue realizado en la Universidad Central ―Marta Abreu‖ de Las Villas como parte de la culminación de estudios de la especialidad de Ingeniería en Telecomunicaciones y Electrónica, autorizando a que el mismo sea utilizado por la Institución, para los fines que estime conveniente, tanto de forma parcial como total y que además no podrá ser presentado en eventos, ni publicados sin autorización de la Universidad.. Firma del Autor Los abajo firmantes certificamos que el presente trabajo ha sido realizado según acuerdo de la dirección de nuestro centro y el mismo cumple con los requisitos que debe tener un trabajo de esta envergadura referido a la temática señalada.. Firma del Tutor. Firma del Jefe de Departamento donde se defiende el trabajo. Firma del Responsable de Información Científico-Técnica.

(4) PENSAMIENTO. "Lo que sabemos es una gota de agua, lo que ignoramos es el océano" Isaac Newton.

(5) AGRADECIMIENTOS. A toda mi familia que siempre estuvo brindándome apoyo y cariño, por sus repetidas muestras de preocupación. A mi novia, sin su ayuda no hubiera sido posible. A mis amigos del combo, por todo lo que hemos compartido. A mi tutor..

(6) DEDICATORIA. A mi madre y mi abuela, que con este trabajo ven coronado su gran sueño, por ser tan especiales y creer en mí. A toda mi familia, por apoyarme siempre. A Laura por la vida que tenemos por delante..

(7) i. TAREA TÉCNICA. 1. Realización de una búsqueda bibliográfica al respecto de la descripción de sistemas criptográficos en VHDL. 2. Selección y caracterización de modelos de interés para su posterior análisis, basado en la factibilidad de estos modelos para el empleo de una metodología con Xilinx. 3. Montaje, simulación y análisis de los resultados obtenidos a partir de estos modelos, con el empleo del Xilinx ISE.. Firma del Autor. Firma del Tutor.

(8) ii. RESUMEN. El presente trabajo de diploma aborda el tema de los sistemas criptográficos, específicamente su realización en hardware lógico programable. En principio, el informe presenta los fundamentos de los sistemas criptográficos estandarizados más importantes: DES, 3DES y AES. En el marco teórico también se presentaron fundamentos sobre los dispositivos lógicos programables, como parte de un estudio que fue hecho sin un nivel de especialización alto en el tema. El informe aborda la metodología recomendada por Xilinx para el desarrollo de un proyecto. Fueron seleccionados tres proyectos obtenidos a partir de la búsqueda bibliográfica, para su caracterización y análisis. La caracterización de cada uno por separado es presentada en el informe, así como su montaje en Xilinx ISE y la simulación con su respectivo análisis. Las tres variantes funcionaron apropiadamente, no sin antes llevar a cabo un proceso de desarrollo que involucró la creación de nichos de pruebas o la modificación de los que aportaban los autores de los modelos. El trabajo de diploma sienta las bases para futuras realizaciones de estos modelos en kits de desarrollo de Xilinx..

(9) iii. ÍNDICE. TAREA TÉCNICA ..................................................................................................................i RESUMEN ............................................................................................................................ ii INTRODUCCIÓN .................................................................................................................. 1 CAPÍTULO 1.. CRIPTOGRAFÍA Y HARDWARE LÓGICO PROGRAMABLE ........... 4. 1.1. Data Encryption Standard ....................................................................................... 4. 1.2. Vigencia del criptosistema DES............................................................................... 8. 1.3. Algoritmos sustitutos para DES ............................................................................... 9. 1.3.1. Triple DES ........................................................................................................ 9. 1.3.2. International Data Encryption Algorithm ........................................................ 9. 1.3.3. Advanced Encryption Standard ...................................................................... 10. 1.4. Breve reseña de materiales publicados acerca de DES y PLDs ............................. 11. 1.5. Generalidades de las FPGAs .................................................................................. 13. 1.5.1. Familias de FPGAs de Xilinx ......................................................................... 14. 1.5.2. Familias de FPGAs de Altera ......................................................................... 15. 1.6. Lenguajes de descripción de hardware .................................................................. 16. 1.6.1. Very high speed intregated circuit Hardware Description Language ........... 18. 1.6.2. Verilog ............................................................................................................ 19. Conclusiones del capítulo ................................................................................................. 20 CAPÍTULO 2.. DESCRIPCIÓN DE LOS ALGORITMOS DE ENCRIPTACIÓN EN. VHDL.. 21. 2.1. Metodología de diseño sobre hardware lógico programable ................................. 21. 2.1.1. Flujo de diseño recomendado por Xilinx ........................................................ 25.

(10) iv 2.2. Variantes encontradas de DES en VHDL .............................................................. 27. 2.2.1. Basic DES ....................................................................................................... 27. 2.2.2. TDES .............................................................................................................. 29. 2.2.3. Mini AES 128 ................................................................................................. 31. 2.3. Descripción del entorno de trabajo del Xilinx ISE ................................................ 33. Conclusiones del capítulo ................................................................................................. 35 CAPÍTULO 3. 3.1. Realización del BasicDES con el Xilinx ISE ......................................................... 37. 3.1.1 3.2. Simulación y análisis del proyecto BasicDES ................................................ 38. Realización del Triple DES con el Xilinx ISE ....................................................... 41. 3.2.1 3.3. COMPROBACIÓN Y SIMULACIÓN MEDIANTE EL XILINX ISE . 37. Simulación y análisis del proyecto Triple DES .............................................. 42. Realización y simulación del mini AES 128.......................................................... 44. Conclusiones del capítulo ................................................................................................. 47 CONCLUSIONES ................................................................................................................ 49 RECOMENDACIONES ....................................................................................................... 50 REFERENCIAS BIBLIOGRÁFICAS ................................................................................. 51 ANEXOS .............................................................................................................................. 53 Anexo 1 Ventana con las formas de ondas de la simulación del Mini AES con el ModelSim.......................................................................................................................... 53.

(11) v. .............................................................................................................................................. 53.

(12) INTRODUCCIÓN. 1. INTRODUCCIÓN. El hardware lógico programable es tratado con mucho interés por los ingenieros e investigadores a nivel internacional. Lamentablemente por problemas económicos Cuba no es un buen ejemplo sobre el desarrollo en este campo, aunque se tengan particularidades que indiquen lo contrario. Se hace fundamental impulsar el desarrollo de estos temas a nivel académico y empresarial, con tal de cambiar esta realidad. Por lo general se piensa en las aplicaciones criptográficas realizadas desde el software, en muchos casos incluso en software de alto nivel. En la práctica la mayoría de los algoritmos criptográficos aparecen instanciados sobre todo en software y en arquitecturas microprogramables. No obstante, esto no quiere decir que no exista la necesidad de hardware para cifrado exento de micro programación, aunque a simple vista parezca un tema que tribute mayormente a la academia. Habrá que justificar bien la utilización de hardware lógico programable en aplicaciones criptográficas, pero primero hay que tener una idea de cómo realizar las mismas en dispositivos como FPGAs y CPLDs. El tema de la seguridad en las comunicaciones, particularmente la seguridad basada en electrónica reconfigurable, ha sido tratado en diversos trabajos a nivel internacional y se puede inferir el por qué en muchos casos no se tiene documentación al respecto. Se hace necesario pues, lograr un pequeño paso que acerque más dicho campo a nuestro entorno. Una de las posibles justificaciones que tiene el emplear hardware lógico programable en aplicaciones criptográficas es la alta velocidad. Mientras que un sistema micro programable funciona de manera secuencial, atendiendo instrucciones según un ciclo de máquina dado, el sistema de lógica programable solo invierte el tiempo de demora de propagación a través del circuito sintetizado. Otra razón posible está en que la descripción de algunos sistemas criptográficos tiene un planteamiento lógico, lo cual favorece su modelación como un circuito digital. Pueden plantearse un conjunto de interrogantes específicas al respecto como:.

(13) INTRODUCCIÓN. 2. o ¿Qué características tienen los algoritmos criptográficos estandarizados: DES, 3DES y AES? o ¿Cuál es la situación actual en el desarrollo de algoritmos criptográficos para hardware lógico programable? o ¿Qué aspecto tendría un modelo de DES o de 3DES o de AES en VHDL? o ¿Cómo comprobar la veracidad de estos modelos mediante simulación? Para responder estas y otras interrogantes se planteó el siguiente objetivo general: Analizar modelos de los sistemas criptográficos DES, 3DES y AES descritos en lenguaje VHDL y técnicas de diseño para hardware digital reconfigurable. Como objetivos específicos se plantearon: 1. Realizar una búsqueda y revisión bibliográfica al respecto de los algoritmos criptográficos estándares más empleados en las comunicaciones, así como sobre instancias de los mismos en hardware lógico programable. 2. Caracterizar los modelos en VHDL de DES, 3DES y AES de manera que permita el planteamiento de una metodología de diseño para el mismo en una FPGA de Xilinx. 3. Comprobar la veracidad de los modelos mediante herramientas propias del software Xilinx ISE y mediante simulación basada en nichos de prueba. 4. Documentar apropiadamente todas las experiencias del trabajo para que sirvan como punto de referencia para futuras investigaciones en el tema. El informe del trabajo está estructurado de la siguiente forma: Introducción, Capítulo 1, Capítulo 2, Capítulo 3, Conclusiones, Recomendaciones y Referencias Bibliográficas. Capítulo 1: Criptografía y hardware lógico programable. En este capítulo se abordan las características del algoritmo criptográfico DES, como fuente de referencia del proyecto, su vigencia y los algoritmos sustitutos, basados en el propio DES; además se realiza una revisión de materiales que tratan la vinculación de DES con los dispositivos lógicos programables. También se abordan generalidades de las FPGAs y se caracterizan los dos principales lenguajes de descripción de hardware, VHDL y Verilog..

(14) INTRODUCCIÓN. 3. Capítulo 2: Descripción de los algoritmos de encriptación en VHDL. En este capítulo se aborda la metodología de diseño en hardware lógico programable, en específico el flujo de diseño recomendado para FPGAs de Xilinx. Se describen los algoritmos criptográficos estándares más empleados en las comunicaciones, con el fin de verificar su fidelidad con las especificaciones publicadas. Además, se describe el entorno de trabajo de la herramienta de diseño de Xilinx. Capítulo 3: Comprobación y simulación mediante el XILINX ISE. En este capítulo se realiza la comprobación, mediante simulación con el Xilinx ISE, de los tres diseños analizados con anterioridad y se documenta apropiadamente todas las experiencias durante el trabajo, para que sirvan como referencia para futuras investigaciones en el tema..

(15) CAPÍTULO 1. CRIPTOGRAFÍA Y HARDWARE LÓGICO PROGRAMABLE. 4. CAPÍTULO 1. CRIPTOGRAFÍA Y HARDWARE LÓGICO PROGRAMABLE En este capítulo se abordan las características del algoritmo criptográfico DES, como fuente de referencia del proyecto, su vigencia y los algoritmos sustitutos, basados en el propio DES; además se realiza una revisión de materiales que tratan la vinculación de DES con los dispositivos lógicos programables. También se abordan generalidades de las FPGAs y se caracterizan los dos principales lenguajes de descripción de hardware, VHDL y Verilog.. 1.1. Data Encryption Standard. Data Encryption Standard es un algoritmo simétrico de cifrado por bloques. Diseñado a mediados de los setenta, se basa en el algoritmo LUCIFER, que había sido desarrollado por un grupo de criptógrafos de IBM, incluido Horst Feistel. Fue adoptado como estándar por el Gobierno de los EE.UU. para comunicaciones no clasificadas en 1976 (Lucena, 2011). Fue aprobado y publicado en 1977 por el National Bureau of Standards, ahora el National Institute of Standards and Technology o NIST. La norma fue Federal Information Processing Standard 46 o FIPS PUB 46. El algoritmo en sí se denominó con propósitos de la norma como Data Encryption Algorithm (Stallings, 2011, Burr, 2006). El algoritmo DES original codifica bloques de longitud fija de 64 bits empleando una clave simétrica de igual tamaño. En realidad son 56 bits los que se usan para cifrar, los restantes 8 son de paridad para detección de errores en el proceso y después son descartados, o sea, un bit de paridad por cada byte de la clave (Vargas, 2010). La estructura del algoritmo consta de 16 rondas idénticas. Tiene una permutación inicial y otra final que son funciones inversas entre sí, o sea, una deshace la función de la otra, aunque estas no son significativas criptográficamente (ver Tabla 1.1). Antes de comenzar las rondas, los bloques son divididos en dos mitades de 32 bits que son procesadas alternadamente. A este entrecruzamiento se le conoce como esquema de Feistel o red de Feistel. Las redes de Feistel presentan la ventaja de ser reversibles, por lo que las.

(16) CAPÍTULO 1. CRIPTOGRAFÍA Y HARDWARE LÓGICO PROGRAMABLE. 5. operaciones de cifrado y descifrado son idénticas, requiriendo únicamente invertir el orden de las subclaves utilizadas. Cada ronda cuenta con dos operaciones: una es la función F y la otra es un OR exclusivo (XOR). La función F mezcla la mitad del bloque con la subclave de la ronda, al resultado de F se le aplica un XOR con la otra mitad y los bloques son intercambiados antes de la siguiente ronda. Tras la última ronda las mitades no se intercambian. En la Figura 1.1 se muestra la red de Feistel.. Figura 1.1 Red de Feistel general clásica. Imagen tomada de (Stallings, 2011).. La función F o de Feistel (ver Figura 1.2) consta de 4 pasos y opera sobre medio bloque cada vez. El primer paso es la expansión, donde los 32 bits se expanden a 48 mediante la permutación de expansión, duplicando algunos de los bits. Esto puede detallarse en las columnas más exteriores de la Tabla 1.2a, donde aparecen los bits repetidos. El segundo paso del bloque F es la mezcla, donde el resultado de la expansión se combina con la.

(17) CAPÍTULO 1. CRIPTOGRAFÍA Y HARDWARE LÓGICO PROGRAMABLE. 6. subclave de la ronda mediante un XOR. Existen 16 subclaves, una para cada ronda; estas se derivan de la clave inicial mediante un algoritmo de generación de subclaves. El tercer paso es la sustitución. El resultado del XOR es dividido en 8 partes de 6 bits antes de ser procesados por las s-cajas o cajas de sustitución. Cada una de las 8 s-cajas reemplaza sus 6 bits de entrada por 4 de salida, de acuerdo con una transformación no lineal especificada por una tabla de búsqueda.. Figura 1.2 Esquema de la función F de DES. Tomado de (Stallings, 2011).. Las s-cajas constituyen el núcleo de la seguridad de DES, sin ellas el cifrado sería lineal y fácil de romper. Por último está la permutación P, detallada en la Tabla 1.2b, donde los 32 bits de salida de las s-cajas se reordenan de acuerdo a una permutación fija (Vargas, 2010). Hasta este punto se han mencionado varias permutaciones: inicial, de expansión, de la función F y la final. Para evitar ambigüedades, en las tablas siguientes se especifican estas permutaciones, según (Stallings, 2011). Tabla 1.1 Permutaciones: a) inicial y b) final.. 58 60 62 64 57 59 61 63. 50 52 54 56 49 51 53 55. 42 44 46 48 41 43 45 47. a) 34 36 38 40 33 35 37 39. 26 28 30 32 25 27 29 31. 18 20 22 24 17 19 21 23. 10 12 14 16 9 11 13 15. 2 4 6 8 1 3 5 7. 40 39 38 37 36 35 34 33. 8 7 6 5 4 3 2 1. 48 47 46 45 44 43 42 41. b) 16 56 15 55 14 54 13 53 12 52 11 51 10 50 9 49. 24 23 22 21 20 19 18 17. 64 63 62 61 60 59 58 57. 32 31 30 29 28 27 26 25. Tabla 1.2Permutaciones: de expansión a la izquierda y de final de la función F a la derecha..

(18) CAPÍTULO 1. CRIPTOGRAFÍA Y HARDWARE LÓGICO PROGRAMABLE. 7. a) 32 4 8 12 16 20 24 28. 1 5 9 13 17 21 25 29. 2 6 10 14 18 22 26 30. 3 7 11 15 19 23 27 31. 4 8 12 16 20 24 28 32. 5 9 13 17 21 25 29 1. b) 16 7 20 21 29 12 28 17 1 15 23 26 5 18 31 10 2 8 24 14 32 27 3 9 19 13 30 6 22 11 4 25. El algoritmo de generación de subclaves toma los 56 bits de la clave inicial y los divide en dos mitades de 28 bits independientes. En rondas sucesivas ambas mitades realizan desplazamientos circulares a la izquierda de dos bits, salvo para las rondas 1, 2, 9 y 16 en las que se desplaza sólo un bit. Luego de los desplazamientos, son seleccionados los 48 bits que conforman la subclave de la ronda mediante elección permutada, 24 bits de cada mitad (Lucena, 2011). La Figura 1.3 resume todo lo mencionado anteriormente para una sola ronda.. Figura 1.3 Funcionamiento de una ronda de DES. A la izquierda el tratamiento del dato que incluye la función F y a la derecha el mecanismo de generación de la clave para la ronda. Imagen tomada de (Stallings, 2011)..

(19) CAPÍTULO 1. CRIPTOGRAFÍA Y HARDWARE LÓGICO PROGRAMABLE. 1.2. 8. Vigencia del criptosistema DES. Aunque sobre el criptoanálisis de DES se ha publicado más información que de todos los demás algoritmos de cifrado por bloque, el ataque más práctico según la mayoría de los autores sigue siendo por fuerza bruta (Lucena, 2011, Vargas, 2010, Wobst, 2007). Otros posibles ataques son solo teóricos que, teniendo una complejidad menor que un ataque por fuerza bruta, no son viables en la práctica por la cantidad irreal de textos planos conocidos que requieren. Existen tres ataques conocidos de este tipo, que pueden romper las 16 rondas completas de DES: el criptoanálisis diferencial, el criptoanálisis lineal y el ataque de Davies (Biham and Shamir, 1992, Matsui, 1994, Biryukov and Biham, 1997)1. Fue a mediados de 1998 que una empresa sin ánimo de lucro llamada EFF (Electronic Frontier Foundation), logró fabricar una máquina capaz de descifrar un mensaje DES en menos de tres días, conocida por el nombre de DES-Cracker. Se demostró entonces que un ataque por fuerza bruta a DES era viable y que podía ser atacado en la práctica, debido a la escasa longitud que emplea en su clave; quedó en evidencia la necesidad de un cambio. A pesar de que hoy en día se considera inseguro para muchas aplicaciones, DES sigue siendo utilizado, como por ejemplo en las transacciones de algunos cajeros automáticos. De todas formas, el problema real de DES no radica en su diseño, sino en que emplea una clave demasiado corta, lo cual hace que, con el avance actual de las computadoras, los ataques por fuerza bruta sean opciones viables. Aun así, es uno de los sistemas más extendidos, por su rapidez y fácil implementación, por lo que su estudio sigue siendo interesante. Muchos se resisten a abandonar este algoritmo, precisamente porque ha sido capaz de sobrevivir durante años sin mostrar ninguna debilidad en su diseño y prefieren proponer variantes que, de un lado evitarían el riesgo de tener que confiar en algoritmos nuevos, y de otro permitirían aprovechar gran parte de las implementaciones por hardware existentes de DES (Lucena, 2011).. 1. Esta información fue referenciada con materiales de hace más de una década pues el grosor de los estudios y las publicaciones sobre DES datan de esa época. Es un tema abordado hace algún tiempo, no así el asunto de su implementación en hardware lógico programable..

(20) CAPÍTULO 1. CRIPTOGRAFÍA Y HARDWARE LÓGICO PROGRAMABLE. 1.3. 9. Algoritmos sustitutos para DES. A partir de la caída de DES, comenzó el estudio y desarrollo de algoritmos de sustitución con el objetivo común de aumentar la seguridad en la práctica. Los más significativos se tratan a continuación. 1.3.1 Triple DES Este algoritmo, también conocido como TDES o 3DES, fue desarrollado por IBM en 1998 y consiste aproximadamente en aplicar tres veces DES. Lo anterior se puede hacer ya que DES no presenta estructura de grupo, lo que implica que si se cifra el mismo bloque dos veces con dos claves diferentes se aumenta el tamaño efectivo de la clave. La variante más simple utiliza dos claves y responde a la siguiente estructura: (. (. ( ))). Es decir, siendo M el mensaje a codificar, se codifica con la subclave k1, luego se decodifica con k2 y se vuelve a codificar con k1. La clave resultante es la concatenación de k1 y k2, con una longitud de 112 bits (Lucena, 2011).Otra variante de TDES utiliza tres claves distintas. TDES fue elegido como forma de agrandar el largo de la clave sin necesidad de cambiar el algoritmo de cifrado. Al aumentar la longitud efectiva de la clave, este método se hizo mucho más seguro que su antecesor. Por su diseño 3DES es un algoritmo lento, lo que provoca que haya sido reemplazado por los algoritmos modernos, aunque no de forma abrupta. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen aún como estándar el Triple DES (Lucena, 2011). Es conveniente aclarar que en muchas ocasiones, cuando se menciona que un dispositivo está habilitado con DES, es realmente TDES al que se refiere. 1.3.2 International Data Encryption Algorithm El algoritmo IDEA fue propuesto como reemplazo del DES en 1992. Trabaja con bloques de 64 bits de longitud, emplea una clave de 128 bits y tiene como estructura una red de sustitución-permutación. El algoritmo consta de 8 rondas idénticas; igual que con DES, se usa el mismo algoritmo tanto para cifrar como para descifrar..

(21) CAPÍTULO 1. CRIPTOGRAFÍA Y HARDWARE LÓGICO PROGRAMABLE. 10. IDEA es un algoritmo bastante seguro y hasta ahora se ha mostrado resistente a los ataques, entre ellos el criptoanálisis diferencial bajo ciertas suposiciones. También fue muy discutido en la década del 1990-2000 y fue considerado como una tentativa para sustituir a DES, pero sucumbió por la aparición de algoritmos más rápidos. La polémica al respecto puede verse en materiales como (Roblimo, 1999). Como ocurre con los algoritmos simétricos de cifrado por bloques, IDEA se basa en los conceptos de confusión y difusión, haciendo uso de las siguientes operaciones elementales, todas ellas de fácil implementación: XOR, suma módulo. , producto módulo. .. Gran parte de la seguridad de IDEA deriva del intercalado de operaciones de distintos grupos: adición y multiplicación modular y OR exclusivo (Lucena, 2011). 1.3.3 Advanced Encryption Standard El algoritmo Rijndael fue el adoptado como el Advanced Encryption Standard en 2001. El NIST fue el encargado de todo el proceso realizado para dotar a la comunidad internacional de un nuevo algoritmo de cifrado que fuera potente, eficiente y fácil de implementar. El algoritmo fue adoptado para su empleo en aplicaciones criptográficas no militares. El nombre Rijndael es un acrónimo formado por los nombres de sus autores: los belgas Joan Daemen y Vincent Rijmen. AES, a diferencia de algoritmos como DES, no posee estructura de Feistel, sino que es una red de sustitución-permutación. Trabaja con bloques de datos de tamaño fijo de 128 bits, tamaños de claves de 128, 192 o 256 bits y tiene 10,12 o 14 rondas con respecto a la clave. Los detalles de AES pueden ser consultados en materiales como (Daemen and Rijmen, 2002). Según sus autores, es altamente improbable la existencia de claves débiles o semidébiles, debido a la estructura de su diseño, que busca eliminar la simetría en las subclaves. También se ha comprobado que es resistente a criptoanálisis tanto lineal como diferencial. Otro aspecto a tener en cuenta es la cantidad de ataques que ha recibido sin poder lograr sus objetivos, como por ejemplo: SquareAttack, CollisionAttack y TimingAttack. En efecto, el método más eficiente conocido hasta ahora para recuperar la clave a partir de un par texto cifrado-texto plano es la búsqueda exhaustiva, por lo que podemos considerar este.

(22) CAPÍTULO 1. CRIPTOGRAFÍA Y HARDWARE LÓGICO PROGRAMABLE. 11. algoritmo como uno de los más seguros en la actualidad. Otro hecho significativo que viene a corroborar la fortaleza de AES es que en 2003 fue aprobado por la National Security Agency o NSA para cifrar información clasificada como alto secreto (Lucena, 2011). AES se encuentra presente en las comunicaciones móviles a través de Internet, en las redes WLAN, como parte del cifrado entre los enrutadores y muchas otras aplicaciones de comunicaciones. 1.4. Breve reseña de materiales publicados acerca de DES y PLDs. A continuación se presenta un resumen de los principales artículos revisados sobre DES en dispositivos lógicos programables. Uno de los materiales revisados fue el artículo de (Wollinger and Paar, 2003). En este exponen las ventajas del hardware reconfigurable para aplicaciones criptográficas y los problemas potenciales de seguridad de dichas aplicaciones sobre FPGAs. El supuesto o la tentativa de realizar algoritmos criptográficos sobre FPGA no está exento de riesgos y los autores hacen una contribución que radicó en el tratamiento integral dado al tema y a los aspectos de seguridad tratados. Otro material revisado fue el de un colectivo de autores de la Universidad Católica de Lovaina, Bélgica (Standaert et al., 2004). En este escrito demuestran las características específicas de los FPGAs frente al DPA o Differential Power Analysis. Primero, analizan dos ataques específicos y luego generalizan el ataque DPA para FPGAs. Los autores concluyen con evidencias de vulnerabilidades en implementaciones de DES sobre FPGAs ante tales ataques. Un buen antecedente a este trabajo de diploma constituye la tesis High Speed FPGA Architectures for DES de Jens-Peter Kaps, del Worcester Polytechnic Institute (Kaps, 1998). En este trabajo se expone el diseño e implementación de varias arquitecturas con fuerte énfasis en un desempeño de alta velocidad, todas referidas al algoritmo DES. Es interesante como desde ese año ya existían soluciones para implementar DES en FPGAs. De un colectivo de autores está (Wollinger et al., 2004), en el que resume la realización de algoritmos de clave pública y simétricos en FPGA. La contribución del artículo fue una revisión del estado de arte en la realización de algoritmos simétricos y asimétricos en FPGA, así como sus respectivos problemas de seguridad. Presentó además una lista de.

(23) CAPÍTULO 1. CRIPTOGRAFÍA Y HARDWARE LÓGICO PROGRAMABLE. 12. problemas para futuras investigaciones. Se discutieron las ventajas del hardware reconfigurable para aplicaciones criptográficas. Existe un evento muy importante en este campo: el Cryptographic Hardware and Embedded Systems (CHES). Se logró conseguir la publicación de los procedimientos de la primera edición de 1999 (KoÇ and Paar, 1999) y de la edición 14 de dicho evento (Prouff and Schaumont, 2012). En (Lagger, 2002) no se encontró el valor de un juicio publicado en una revista de primer nivel ni en un evento importante, pero se tuvo la documentación completa de un proyecto para diseñar DES sobre FPGA. Los autores propusieron dos arquitecturas: una con mayor rendimiento específico y otra con menor número de bloques lógicos configurables. En (Kwok and Lam, 2006) se propone una arquitectura para implementar un generador de número aleatorio verdadero, TRNG por sus siglas en inglés, de alta velocidad basado en FPGA. Muchas aplicaciones criptográficas lo necesitan y la aleatoriedad matemática es un punto de valor para lograr en correcto funcionamiento de los criptosistemas que lo necesitan. En este trabajo no se hizo uso directo de esta información pues DES no usa números aleatorios. El artículo (Deschamps, 2007) describe circuitos para la ejecución de las operaciones más complicadas de criptografía de llave pública y brinda estimaciones de su tiempo de ejecución en dispositivos programables. Como DES es cifrado por bloques simétrico, tampoco se hizo uso directo de la información, pero sí se recibió un aporte del autor en cuanto al tratamiento de las arquitecturas para criptografías. Es común en las publicaciones las propuestas sobre arquitecturas que traen ciertas particularidades. Estos materiales son en su mayoría referencias pero para el propósito de este trabajo no representaron la mejor guía. Otras muchas publicaciones abordan temas avanzados del criptoanálisis de sistemas sobre hardware lógico programable. Un sitio muy importante en Internet del cual se obtuvo información valiosa fue (OpenCores.org, 2013), del cual se obtuvieron proyectos completos por los cuales se pudo estudiar y generar soluciones. Una debilidad del sitio fue la poca documentación en muchos de los casos..

(24) CAPÍTULO 1. CRIPTOGRAFÍA Y HARDWARE LÓGICO PROGRAMABLE. 1.5. 13. Generalidades de las FPGAs. Un Field Programmable Gate Array es un dispositivo semiconductor que contiene bloques de lógica cuya interconexión y funcionalidad se puede programar. La lógica programable puede reproducir desde funciones tan sencillas como las llevadas a cabo por una compuerta lógica o un sistema combinacional, hasta complejos sistemas en un chip. Las FPGAs son fabricadas por una gran variedad de productores a nivel mundial, destacándose las compañías Xilinx y Altera con mayor representatividad en el mercado. Hay un conjunto de otros competidores quienes se diferencian por ofrecer dispositivos de capacidades únicas. El tamaño, estructura, número de bloques y conectividad de las conexiones varían con la arquitectura (Zamora, 2010). La aplicación de las FPGAs va más allá de la implementación de lógica digital, pueden ser utilizados para la implementación de arquitecturas específicas. Los sistemas basados en FPGAs proporcionan un mejor desempeño que sus correspondientes implementaciones en software. Las aplicaciones que requieren de un gran número de operaciones simples son adecuadas para su implementación en FPGAs, puesto que un elemento de procesamiento puede diseñarse para efectuar esta operación y varias instancias de este pueden reproducirse para llevar a cabo procesamiento paralelo (Galindo, 2011). Cada FPGA está compuesta de un número finito de recursos predefinidos con interconexiones programables para implementar un circuito digital reconfigurable. La arquitectura de una FPGA consiste en arreglos de bloques lógicos que se comunican entre sí, a través de canales de conexión vertical y horizontal. Los bloques lógicos constan básicamente de una parte combinacional que permite implementar funciones lógicas y una parte secuencial formada por flip-flops, que permite sincronizar la salida con una señal de reloj externa, lo cual es útil para realizar circuitos secuenciales y la implementación de registros. La estructura de un bloque lógico varía de un fabricante a otro, sin embargo, la lógica combinacional se basa principalmente en tablas de búsqueda o Look-Up Tables (LUTs). Una LUT es un componente de memoria que almacena una tabla de verdad. Las direcciones de la memoria son las entradas de la función lógica a implementar y en cada localidad de dicha memoria se almacena el resultado de la.

(25) CAPÍTULO 1. CRIPTOGRAFÍA Y HARDWARE LÓGICO PROGRAMABLE. combinación correspondiente de las entradas. En una LUT de cualquier función lógica de. 14. es posible implementar. entradas.. Los bloques de entrada/salida o IOB, son otro de los componentes particulares que tienen las FPGAs. Estos controlan el flujo de datos entre los pines de entrada/salida y la lógica interna del dispositivo. En las familias de FPGAs, se dividen las entradas/salidas del integrado en bancos que se pueden configurar para tener una interfaz con lógica de diferentes estándares eléctricos de manera independiente. Los IOBs deben ser capaces de proveer una adecuada terminación en cuanto a impedancia se refiere, y de esta forma evitar reflexiones de las señales. Para poder implementar circuitos lógicos, los elementos presentados anteriormente no solo deben configurarse adecuadamente sino que también deben conectarse entre sí. En general, las conexiones internas entre elementos de una FPGA pueden realizarse básicamente de tres formas: líneas directas, conexiones de propósito general y líneas de largo recorrido. Las líneas directas tienen lugar entre bloques adyacentes. Las conexiones de propósito general se realizan a través de una matriz de interconexión cuando se desean conectar dos bloques no adyacentes; su misión es conectar canales verticales y horizontales que permiten llegar al punto final de la conexión. Las líneas de largo recorrido suelen cubrir el circuito a lo largo y ancho; permiten conexiones con un retardo mucho menor que si se unen las anteriores (Hernández, 2012). 1.5.1 Familias de FPGAs de Xilinx Las FPGAs de Xilinx constan de una cuadrícula de bloques lógicos programables o CLBs. Tanto los bloques lógicos como la estructura de interconexión se pueden programar, cargando desde una fuente externa valores a las celdas de configuración. Las celdas de configuración controlan la lógica y la interconexión que realizan la función de aplicación de la FPGA. No hay un área de RAM separada en el chip, sino que las celdas de configuración están distribuidas en el chip. En los bordes, rodeando los bloques lógicos hay bloques de entrada/salida (IOBs) configurables. Los bloques básicos que componen una FPGA de Xilinx son: CLB: Configurable Logic Block.

(26) CAPÍTULO 1. CRIPTOGRAFÍA Y HARDWARE LÓGICO PROGRAMABLE. 15. IOB: Input Output Block Estructura de interconexión Hay múltiples familias lógicas dentro de Xilinx. Las primeras que surgieron fueron: XC2000, XC3000 y XC4000, correspondientes respectivamente a la primera, segunda y tercera generación de dispositivos, que se distinguen por el tipo de bloque lógico configurable que contienen. En la actualidad existen también las familias de FPGA Spartan, Spartan II, Spartan XL, Spartan IIE, Spartan III, Virtex, Virtex II y VirtexIIPro. Tanto la FPGA XC4000 como la familia Spartan comparten una misma estructura. Se trata de una FPGA de RAM estática, formada por una estructura regular de CLBs y bloques de entrada/salida en la periferia. En la familia Spartan II, cada bloque lógico, llamado slice, contiene el equivalente a dos CLBs de las series Spartan. Todos estos bloques se unen unos con otros a través de las interconexiones programables que existen en los canales internos de rutado. La familia Virtex utiliza una arquitectura similar a la de la Spartan-IIE. La Virtex se compone de dos partes básicas, los CLBs y los IOBs. Los CLBs se encargan de proveer los elementos funcionales para construir la lógica, y los IOBs se encargan de la interfaz entre los pines del integrado y los CLBs (Bozich, 2005). 1.5.2 Familias de FPGAs de Altera Altera, por su parte, diferencia las CPLDs y las FPGAs por diferentes estructuras de interconexión. La estructura de interconexión segmentada es utilizada por las FPGAs y utilizan líneas múltiples de longitud variable unidas por transistores de paso para conectar las celdas lógicas. En contraste, la estructura de interconexión continua es utilizada por las CPLDs para proveer conexiones de celda lógica a celda lógica que lleva finalmente a velocidades más altas comparable con las FPGAs. De esta forma, Altera ofrece las siguientes familias de FPGAs: APEX 20K, ACEX 1K, FLEX 10K, FLEX 6000, FLEX 8000, Cyclone y Stratix. Los dispositivos de la familia FLEX2 10K integran elementos de memoria SRAM dispuestos en una matriz reconfigurable de elementos lógicos. Cada dispositivo de la. 2. Flexible Logic Element matriX.

(27) CAPÍTULO 1. CRIPTOGRAFÍA Y HARDWARE LÓGICO PROGRAMABLE. 16. familia FLEX 10K está integrado por bloques de memoria y una matriz de elementos lógicos. La familia de dispositivos APEX 20K representa una evolución de la arquitectura de los dispositivos FLEX 10K. Esta familia incorpora nuevas características, mayor densidad y mejores prestaciones en velocidad. Los dispositivos APEX 20K incorporan lógica basada en LUT, lógica basada en término producto y memoria, en un único dispositivo. La arquitectura de los dispositivos ACEX 1K es similar a la de los dispositivos FLEX 10K. Están integrados por bloques de memoria llamados Embedded Array Blocks o EABs y una matriz de elementos lógicos constituida por arreglos de bloques lógicos (LABs). Las FPGAs Cyclone y Stratix comparten una arquitectura basada en fila y columna de dos dimensiones para implementar lógica. Las interconexiones columna y fila de velocidades y longitudes variables proporcionan señales de interconexión entre los LABs y los bloques integrados de memoria, y en el caso de Stratix también interconectan con bloques DSP3 (Bozich, 2005). 1.6. Lenguajes de descripción de hardware. Los lenguajes de descripción de hardware o HDLs permiten modelar sistemas digitales completos. Mediante diferentes herramientas de software estos modelos pueden sintetizarse para ser implementados como circuitos reales. La utilización de HDLs para sintetizar sistemas digitales y la utilización de PLDs permiten crear prototipos funcionales en plazos relativamente cortos. Esto hace que todo el proceso de desarrollo de un sistema digital sea mucho más simple y rápido en comparación con metodologías clásicas. Los modelos de hardware usando HDLs pueden ser estructurales, de comportamiento o una mezcla de estos dos. A nivel estructural se describe la interconexión y jerarquía entre componentes. A nivel de comportamiento de hardware se describe la respuesta entrada/salida de un componente. El comportamiento de un sistema puede modelarse a distintos niveles de abstracción o detalle: algoritmos y comportamiento general, nivel de transferencia de registros, nivel de compuertas, etc. El tipo de modelo más usado para síntesis es el denominado RTL (Register Transfer Level), o de nivel de transferencia de registros. Existen herramientas que permiten sintetizar circuitos a partir de modelos de 3. Digital Signal Processing.

(28) CAPÍTULO 1. CRIPTOGRAFÍA Y HARDWARE LÓGICO PROGRAMABLE. 17. abstracción más elevados, pero en general lo hacen llevando el diseño a un nivel de descripción como RTL antes de sintetizarlo. La utilización de HDLs para síntesis puede tener como objetivo la creación de un circuito integrado de propósito específico (ASIC) o la realización del circuito en alguna lógica programable. Independientemente del objetivo, no todas las construcciones posibles de los lenguajes de descripción de hardware pueden sintetizarse y transformarse en circuitos. Esto último puede ser consecuencia de las limitaciones de las herramientas utilizadas o a que el circuito descrito por el modelo VHDL no puede implementarse físicamente. Al utilizar un HDL para modelar un sistema, es importante recordar que se está modelando hardware, y no escribiendo software. El software se caracteriza por ser secuencial, una CPU ejecutará cada instrucción después de la anterior. Los efectos de una instrucción dependen exclusivamente de los efectos de las instrucciones anteriores. En el hardware, sin embargo, hay muchas tareas que suceden de manera concurrente y la variable tiempo juega un papel predominante. Para poder modelar hardware los HDLs permiten describir la concurrencia y paralelismo que se observa en un sistema de hardware. Usando HDLs, los sistemas digitales pueden describirse de diferentes maneras. Estos modelos pueden ir desde el nivel abstracto de un algoritmo o el comportamiento general de un circuito hasta un modelo a nivel de interconexión de compuertas lógicas. En una descripción estructural, se definen de manera precisa las interfaces de cada componente de un sistema y sus interconexiones. Así se arma una jerarquía de componentes, desde los más básicos hasta el nivel superior que describe el sistema completo. Los HDLs también permiten describir el comportamiento de los componentes, para poder describir los procesos concurrentes que caracterizan un sistema de hardware. Utilizando un conjunto de instrucciones secuenciales, puede modelarse el comportamiento de un sistema digital y controlar la variable tiempo en los modelos. Aunque existen varios lenguajes de descripción de hardware, actualmente predominan dos: VHDL y Verilog. En la actualidad casi todos los fabricantes de PLD y proveedores de herramientas de desarrollo ofrecen soporte para VHDL y Verilog. A continuación se presenta una síntesis de cada lenguaje..

(29) CAPÍTULO 1. CRIPTOGRAFÍA Y HARDWARE LÓGICO PROGRAMABLE. 18. 1.6.1 Very high speed intregated circuit Hardware Description Language El VHDL es un lenguaje de descripción y modelado diseñado para describir, en una forma en que los humanos y las máquinas puedan leer y entender, la funcionalidad y la organización de sistemas de hardware digitales, placas de circuitos y componentes. En 1987, VHDL se estableció como el estándar IEEE-1076. En el año 1993 el IEEE-1076 se actualizó y uno adicional, el IEEE-1164, fue adoptado. En 1996, el IEEE-1076.3 se convirtió en un estándar de VHDL para síntesis. El grupo de estandarización de la IEEE que atiende al VHDL es el P1076 y la versión VHDL 4.0 actual está recogida en el último estándar del año 2008, es por eso que comúnmente se denomina VHDL 2008 (Ashenden and Lewis, 2008). VHDL es un lenguaje con una sintaxis amplia y flexible, que fue diseñado inicialmente para ser usado en el modelado de sistemas digitales. Actualmente se utiliza además para la síntesis de circuitos. La síntesis a partir de VHDL constituye una de las mayores aplicaciones del lenguaje en la actualidad. Las herramientas de síntesis basadas en el lenguaje permiten ganancias importantes en la productividad de diseño. En VHDL, la interfaz del dispositivo a desarrollar con el exterior recibe el nombre de entity y la descripción de su funcionalidad es lo que se denomina architecture. La interfaz del dispositivo tiene como objetivo definir qué señales son visibles desde el exterior, los denominados puertos. Una entidad es la abstracción de un circuito, ya sea desde un complejo sistema electrónico hasta una simple compuerta lógica. La entidad únicamente describe la forma externa del circuito, aquí se enumeran las entradas y las salidas del diseño. Una entidad es análoga a un símbolo esquemático de los diagramas electrónicos, el cual describe las conexiones del dispositivo hacia el resto del diseño (IEEE, 2002). Una arquitectura describe el funcionamiento de la entidad a la que hace referencia. En la arquitectura se definen las acciones que se realizan sobre los datos introducidos a través de los puertos de entrada, a fin de obtener los datos que serán transmitidos hacia los puertos de salida. Una arquitectura se describe por comportamiento o por estructura. Una entidad puede tener más de una arquitectura, pero cuando se compila se indica cual es la arquitectura que queremos utilizar..

(30) CAPÍTULO 1. CRIPTOGRAFÍA Y HARDWARE LÓGICO PROGRAMABLE. 19. El VHDL incorpora el concepto de componente o component, a fin de utilizar elementos ya definidos en descripciones estructurales de un nuevo diseño. Asimismo, cualquier elemento básico puede definirse por lo que se denomina un proceso. Un proceso puede entenderse como un conjunto de sentencias que describen el comportamiento de un determinado elemento, de tal forma que el código que contiene dicho proceso se ejecuta de manera secuencial. Sin embargo, todos los procesos contenidos en una descripción VHDL se ejecutarán de forma paralela. Así, una descripción VHDL puede considerarse como una amalgama de procesos ejecutándose simultáneamente de manera paralela, y es aquí donde reside la mayor diferencia con los lenguajes de programación de alto nivel. Los procesos ejecutándose de manera paralela deben poder comunicarse entre sí. El elemento básico de comunicación entre procesos es la señal o signal. Todo proceso tiene una serie de señales a las que es sensible, lo que significa que cada vez que una de estas señales vea alterado su valor, el proceso se ejecutará hasta que encuentre una secuencia de suspensión del proceso. 1.6.2 Verilog Verilog es un lenguaje de descripción de hardware que se usa para modelar sistemas electrónicos. Este lenguaje soporta el diseño, prueba e implementación de circuitos, tanto analógicos como digitales con diferentes niveles de abstracción y los diseños están conformados por una jerarquía de módulos, lo que lo diferencia de lenguajes de programación convencionales que tienen una ejecución de las sentencias estrictamente lineal. Estos módulos son definidos con conjuntos de puertos de entrada, salida y bidireccionales. De forma interna un módulo contiene una lista de cables y registros. Las sentencias concurrentes y secuenciales definen el comportamiento del módulo, describiendo las relaciones entre los puertos, cables y registros. Las sentencias son colocadas dentro de un bloque begin/end y ejecutadas en orden secuencial, pero todas las sentencias concurrentes y los bloques begin/end son ejecutadas en paralelo en el diseño. Un módulo puede contener una o más instancias de otro módulo para definir un sub-comportamiento. Verilog tiene similitud al lenguaje de programación C, ya que cuenta con un pre-procesador, palabras reservadas y mecanismos similares (Zamora, 2010)..

(31) CAPÍTULO 1. CRIPTOGRAFÍA Y HARDWARE LÓGICO PROGRAMABLE. 20. También surgió como un estándar de la IEEE, el 1364. La especificación más reciente es la IEEE 1800-2009, correspondiente a SystemVerilog. Conclusiones del capítulo A pesar de que en la actualidad se considera inseguro para muchas aplicaciones, DES sigue siendo utilizado. El problema real de DES no radica en su diseño, sino en que emplea una clave demasiado corta, lo cual hace que, con el avance actual de las tecnologías, los ataques por fuerza bruta sean opciones viables. Aun así, es uno de los sistemas más extendidos, por su rapidez y fácil implementación, por lo que su estudio sigue siendo interesante. Por otra parte existe un grupo importante de publicaciones y trabajos documentados que abordan el tema del desarrollo de aplicaciones criptográficas para FPGA. Muchos de estos trabajos tienen una profundidad considerable. El tema es novedoso aunque para aportar nuevos valores es necesario gran cantidad de esfuerzo y recursos. Las FPGAs constituyen una alternativa tentadora para aplicaciones criptográficas..

(32) CAPÍTULO 2. DESCRIPCIÓN DE LOS ALGORITMOS DE ENCRIPTACIÓN EN VHDL. 21. CAPÍTULO 2. DESCRIPCIÓN DE LOS ALGORITMOS DE ENCRIPTACIÓN EN VHDL. En este capítulo se aborda la metodología de diseño en hardware lógico programable, en específico el flujo de diseño recomendado para FPGAs de Xilinx. Se describen los algoritmos criptográficos estándares más empleados en las comunicaciones, con el fin de verificar su fidelidad con las especificaciones publicadas. Además, se describe el entorno de trabajo de la herramienta de diseño de Xilinx. 2.1. Metodología de diseño sobre hardware lógico programable. De manera general, la metodología de diseño puede ser similar a la de cualquier sistema digital, salvo que al final se obtiene un archivo ejecutable que se descarga a la FPGA para que se reconfigure. Primero hay que tener una descripción del circuito a realizar. Tradicionalmente en las ingenierías se realizan planos o esquemas para esta descripción. Sin embargo es posible realizar una descripción del hardware utilizando algún lenguaje como VHDL o Verilog. Con esta descripción se pueden realizar simulaciones del circuito, para comprobar que el diseño funciona correctamente, de lo contrario se volverá a modificar la descripción (esquemas o código) hasta que la simulación sea satisfactoria. En el caso donde la propia simulación es la emulación del código, se observa directamente el resultado y se modifica el código fuente hasta que se eliminen los errores. En el caso del hardware hay que construir el circuito y aquí es donde las FPGAs se programan y sintetizan el circuito, basado en el reordenamiento y conexiones de las estructuras internas. A partir de la especificación de hardware y utilizando un compilador especial, se obtiene un archivo binario con formato llamado bitstream, que contiene toda la información necesaria para configurar la FPGA. Este archivo, que es el equivalente a un programa ejecutable en el caso del software, es el que hay que cargar en la FPGA. Se carga este archivo y listo. Los cambios en el diseño se pueden hacer igual de rápidos que en el caso de software. Sólo hay que cambiar la especificación del diseño, volver a compilar y reconfigurar la FPGA con el nuevo bitstream generado (Espinosa, 2009)..

(33) CAPÍTULO 2. DESCRIPCIÓN DE LOS ALGORITMOS DE ENCRIPTACIÓN EN VHDL. 22. Las metodologías principales de diseño son: top-down y bottom-up, también conocidas como metodologías a nivel jerárquico. Elegir entre una de éstas implica conocer las tareas que se van a realizar y el orden en que dichas tareas deben ser realizadas. La metodología bottom-up consiste en realizar la descripción del circuito o sistema, empezando por describir los componentes más pequeños, para más tarde agruparlos en nuevos módulos, y éstos a su vez en otros módulos, hasta llegar a un solo módulo que representa el sistema completo. También se le conoce como diseño de abajo hacia arriba. Esta metodología es poco eficiente; para sistemas muy grandes que usen miles de compuertas es difícil el análisis del circuito, ya que se debe transitar por las compuertas para detectar y corregir errores, e inclusive la descripción en sí es más difícil de comprender. Desde la aparición de lenguajes de alto nivel, esta metodología no es muy utilizada, debido a que las mismas herramientas de diseño, permiten generar en base a la descripción de un circuito en un alto nivel de abstracción, un circuito a nivel de compuertas lógicas. La metodología top-down consiste en capturar una idea a un alto nivel de abstracción, implementar esa idea primero a un muy alto nivel y después ir hacia abajo especificando gradualmente los detalles, según sea necesario. Se divide en módulos, con funciones determinadas para cada uno en dependencia de la complejidad; estos módulos a su vez se subdividen en otros módulos y así sucesivamente hasta llegar a los componentes básicos del circuito o primitivas. Entre sus ventajas, con respecto a bottom-up, se destaca que permite la fácil reutilización del diseño, pues sólo en las etapas posteriores se hace dependiente de la tecnología a usar. También posibilita una rápida detección de errores en fases iniciales y presenta mayor facilidad para corregirlos. Por último, permite especificar funciones en un alto nivel de abstracción, sin tener que considerar la implementación del diseño a nivel de compuertas lógicas, minimizando el tiempo y mejorando la productividad del diseño (Maza, 2008). Según (Güichal, 2005), un método que permite ordenar el trabajo de diseño es representado en la Figura 2.1. El ciclo comienza con un conjunto de requerimientos para la fabricación de un dispositivo o sistema. Estos requerimientos pueden venir de un cliente, de otro grupo de trabajo dentro.

(34) CAPÍTULO 2. DESCRIPCIÓN DE LOS ALGORITMOS DE ENCRIPTACIÓN EN VHDL. 23. de la misma empresa o del mismo grupo de trabajo que necesita desarrollar una parte de un sistema más grande.. Figura 2.1 Flujo de diseño general para FPGA. Imagen tomada de (Güichal, 2005).. Una especificación permite que todas las personas involucradas en un proyecto comprendan cuál es el dispositivo que se va a desarrollar. Las personas que forman parte de un proyecto incluyen no solo a los desarrolladores, sino también a clientes, gerencia, personal de otras áreas de la empresa, etc. Las especificaciones deberían describir la solución de manera de cumplir con los requerimientos que se piden para el dispositivo. Al haber una especificación formal, las bases sobre las que trabajar en un diseño quedan preestablecidas y se minimizan los errores por diferencias de apreciación o entendimiento entre los participantes. Después de escribir las especificaciones es importante hacer una revisión con todos los miembros del equipo. De esta revisión podrán surgir cosas que no se tuvieron en cuenta individualmente y que produzcan modificaciones. La especificación también incluye la.

(35) CAPÍTULO 2. DESCRIPCIÓN DE LOS ALGORITMOS DE ENCRIPTACIÓN EN VHDL. 24. metodología de verificación del dispositivo. Estas muchas veces se dejan para el final del proyecto y no se definen ni llevan a cabo de manera adecuada. Una vez que se escribe la especificación se puede utilizar para seleccionar componentes y tecnologías que se utilizarán para el proyecto. El diseño deberá hacerse siguiendo métodos aceptados y confiables. El proceso de diseño es en general un ciclo, e incluye varios pasos intermedios. La verificación engloba varios pasos menores y al revisar pueden surgir cosas que obliguen a volver atrás. Se transita por los siguientes pasos: o La simulación es en general un proceso continuo, ya que al simular se pueden encontrar problemas que hacen volver sobre el diseño y hacer cambios. Las simulaciones se hacen sobre pequeñas partes del sistema y sobre el sistema completo. Se debe llevar a cabo una simulación funcional, pero también puede incluir simulaciones de temporizado, consumo de potencia y otros parámetros. o Durante la revisión se analizan los resultados de la simulación y el comportamiento del dispositivo. Es importante que participen ingenieros externos al proyecto y personas que conozcan el sistema en su totalidad. o Una vez que se ha aceptado el diseño se lleva a cabo la programación final del dispositivo, que sintetiza internamente el circuito físico. o Durante la verificación formal se comprueba la instancia del circuito para asegurar que su funcionamiento coincide con las simulaciones hechas anteriormente. Aquí se deben evaluar los tiempos, consumo de potencia y cualquier otro parámetro de importancia. Si todos los pasos se siguieron correctamente, la revisión final debería ser solo una formalidad. Se verifica que el dispositivo está listo para ser entregado o integrado al sistema. La integración y verificación en el contexto del sistema general es muy importante. Cualquier modificación que surja de esta integración será en general pequeña. El problema o falla que se encuentre debe ser documentada y analizada para poder corregirla en una próxima versión del dispositivo..

(36) CAPÍTULO 2. DESCRIPCIÓN DE LOS ALGORITMOS DE ENCRIPTACIÓN EN VHDL. 25. 2.1.1 Flujo de diseño recomendado por Xilinx Cuando se diseña con lógicas programables, cualquiera sea el método usado para diseñar el circuito (HDLs, esquemáticos, etc.), el proceso desde la definición del circuito por el desarrollador hasta tenerlo funcionando sobre una FPGA implica varios pasos intermedios y en general utiliza una variedad de herramientas. A este proceso se lo denomina ciclo o flujo de diseño. Para cada uno de estos pasos se utilizan herramientas de software diferentes que pueden o no estar integradas bajo un ambiente de desarrollo. En muchos casos las herramientas utilizadas en cada paso del diseño son provistas por diferentes empresas, por el hecho lógico de que solo la empresa tiene el conocimiento necesario para conformar la herramienta capaz de explotar su FPGA, CPLD, etc. El proceso de diseño para las FPGA de Xilinx se divide en cuatro fases: descripción del modelo, síntesis, implementación y programación. Al finalizar las tres primeras fases es preciso comprobar la validez del diseño mediante simulación, utilizándose distintos tipos de simulación en cada una de ellas: simulación funcional RTL para validar el modelo VHDL creado, simulación funcional post-síntesis a nivel de puertas para validar el modelo sintetizado y simulación temporal post-implementación para validar la implementación del modelo implementado. En la Figura 2.2 se muestra el flujo de diseño.. Figura 2.2 Flujo de diseño con Xilinx. Imagen tomada de (Piñeiros, 2010).

(37) CAPÍTULO 2. DESCRIPCIÓN DE LOS ALGORITMOS DE ENCRIPTACIÓN EN VHDL. 26. La descripción del modelo consiste en crear un modelo RTL que representa un circuito digital como un conjunto de primitivas (sumadores, contadores, multiplexores, registros, etc.). Hay dos herramientas básicas para la creación de un diseño RTL: lenguaje de descripción de hardware o HDL y lenguaje esquemático. En la síntesis se convierte la descripción de alto nivel que tiene el circuito a un nivel bajo de abstracción usando componentes contenidos en una biblioteca. Para comprobar los resultados de la síntesis es preciso realizar una simulación funcional a nivel de puertas. El procedimiento a seguir es similar a la simulación funcional RTL. En la realización del modelo, primero se crea un único fichero de salida. El formato de este fichero de salida se denomina NGD (Native Generis Design) y contiene componentes lógicos: puertas lógicas, biestables, RAMs, etc. A continuación se mapean los componentes lógicos en los componentes físicos de que dispone la FPGA: tablas LUT, biestables, buffers triestado, etc. Además se encapsulan estos componentes físicos en bloques configurables (CLBs e IOBs), creando un fichero de salida en formato NCD (Native Circuit Design). Para finalizar se realiza el posicionamiento e interconexión de los bloques configurables en la FPGA y se genera un fichero de lista de conexiones en formato NCD. Una vez implementado físicamente el diseño, se procede a analizar los tiempos y velocidades de operación del mismo. Si los tiempos y velocidades no corresponden con los especificados en la etapa de descripción del diseño, deberá modificarse la descripción del circuito a fin de ajustar los mismos. Después de realizar estas fases se obtiene la información para realizar simulaciones temporales del diseño completo y se puede crear un archivo HDL estructural con base en los componentes físicos de la FPGA y un fichero SDF (Standard Delay Format) con los retardos internos de la FPGA. Utilizando estos ficheros se puede realizar la verificación del diseño final mediante una simulación temporal HDL postsíntesis. Una vez satisfechos todos los objetivos del diseño, se procede a generar el fichero BIT de configuración de la FPGA (Piñeiros, 2010)..

(38) CAPÍTULO 2. DESCRIPCIÓN DE LOS ALGORITMOS DE ENCRIPTACIÓN EN VHDL. 2.2. 27. Variantes encontradas de DES en VHDL. Durante la investigación se realizó una búsqueda de variantes de DES descritas en VHDL con el objetivo de analizar su fidelidad con las especificaciones del sistema criptográfico. En este epígrafe se presentan las dos variantes encontradas y un primer análisis. 2.2.1 Basic DES Esta variante lleva por nombre BasicDES Block Cypher IP Core y su autor es Steven R. McQueen. Se publicó en 2003 en el sitio (OpenCores.org, 2013). Esta variante utiliza una clave efectiva de 56 bits en el modo ECB o Electronic Code Book, el modo más común de las instancias de DES. Este módulo está implementado en un bloque simple, es decir en una jerarquía plana. Maneja datos de 64 bits por el bus indata y la clave de 64 bits por el bus inkey. Cuando la señal ds se activa comienza el cifrado o descifrado en función del bit de entrada decipher. Si la señal decipher está desactivada cuando ds es activada la operación a ejecutar será el cifrado; por el contrario, si decipher se encuentra activa se realiza el descifrado. Con cada ciclo de reloj, una ronda de cifrado/descifrado es puesta en marcha. Después de 16 rondas, el bloque resultante es presentado en el bus outdata y la señal rdy es activada. Lo primero que aparece en el código es el entity, donde se declaran los tres vectores de 64 bits indata, inkey y outdata, los primeros de entrada y el último de salida. Además se declaran varias señales decipher, ds, clk y rst de entrada; rdy_next_next_cycle, rdy_next_cycle y rdy de salida. De las señales de salida, vale destacar que las dos primeras son opcionales e indican que la salida estará lista en dos ciclos de reloj y en un ciclo de reloj, respectivamente. La tercera de las señales de salida antes mencionadas, indica que la salida está lista. Dentro de la definición de la arquitectura, se declaran otras señales necesarias como es el caso de mykey, con un tamaño de 48 bits; inmsg y outmsg, de 64 bits; countup, countdown y mycounter, que son enteros en el rango de 0 a 16; decrypt y ready, de 1 bit; key_l y key_r, de 28 bits; y keylr, con 56 bits. Tanto mykey como inmsg son entradas para la ronda de cifrado y toman nuevos valores en cada ciclo de reloj, la primera se forma tomando bits de keylr con una secuencia determinada. La señal outmsg es el resultado de la ronda de cifrado y se convertirá en inmsg para la siguiente ronda. Por otro lado, countup y countdown son.

(39) CAPÍTULO 2. DESCRIPCIÓN DE LOS ALGORITMOS DE ENCRIPTACIÓN EN VHDL. 28. contadores de rondas, el primero para el cifrado y el segundo para el descifrado, mientras que mycounter toma su valor de countup o countdown. La señal decrypt registra los cambios cifrado/descifrado y ready se activa cuando el proceso de cifrado está en progreso. Por último, keylr se forma con la concatenación de key_l y key_r. El programa cuenta además con tres procesos concurrentes. El primero está etiquetado con setkey y en él se ejecuta todo lo relacionado con la clave. Durante la primera ronda la clave es registrada, después es desplazada el número de bits necesarios. Se usa el valor corriente de countup para determinar cuál es la próxima ronda de cifrado. Tanto key_l como key_r toman 28 bits de inkey con una secuencia determinada. Es justo aclarar que en el primer paso, la clave de la ronda no está disponible y debe ser cargada directamente de la señal de entrada. El valor correcto es determinado por el estado de la señal decipher. A medida que pasan las rondas, se desplazan key_l como key_r dos bits a la izquierda, excepto en la primera, la segunda, la novena y en la última ronda, en las que se desplazan un bit. El segundo proceso está etiquetado como setdata y se encarga de todo lo relacionado con el procesamiento de los datos. En la primera ronda, si ds está activado, inmsg toma el dato directamente del puerto de entrada, con una secuencia determinada por la permutación inicial. Para las demás rondas inmsg toma los valores de la señal outmsg, es decir, la salida de una ronda previa es la entrada de la siguiente. En el proceso es declarada una variable auxiliar llamada c17, usada para intercambiar las mitades del bloque de datos entre una ronda y otra, cuando ready está a ‗0‘, o sea, cuando no se está cifrando. Al concluir el cifrado o descifrado el bloque resultante se coloca en outdata, con una secuencia determinada por la permutación final. El último proceso es llamado control. En este proceso se define el comportamiento de la máquina de estados a la cual responde todo el circuito, es decir el control de estados. Los valores de la señales ready, countup, rdy_next_next_cycle y rdy_next_cycle están involucrados en las distintas etapas del ciclo de cifrado/descifrado y ante las diversas situaciones, como es el caso de un reinicio. Al final del código se encuentra la lógica combinacional. Aquí se define la expansión de los 32 bits que conforman la mitad del bloque de datos hasta 48 bits, después se mezclan a través de un XOR con la subclave de la ronda y el resultado es dividido en partes iguales de.

(40) CAPÍTULO 2. DESCRIPCIÓN DE LOS ALGORITMOS DE ENCRIPTACIÓN EN VHDL. 29. 6 bits, que se colocan en las entradas de las 8 s-cajas. Luego se describe el proceso de sustitución de las s-cajas para obtener los 4 bits de salida. Por último, los 32 bits que salen de las s-cajas se mezclan mediante un XOR con los restantes 32 bits del bloque. 2.2.2 TDES Esta otra variante se nombra Triple-DES Encryption+Decryption Core, publicada por CoreTexSystem en el año 2006, en el mismo sitio de (OpenCores.org, 2013). En la información ofrecida por el autor se mencionan como características que es un diseño síncrono con un alto desempeño, tiene operación autónoma, soporta dispositivos Spartan3, Spartan-II E, Virtex, Virtex-E, Virtex-II y Virtex-II Pro; y es condescendiente con la especificación de Triple-DES del NIST oficializada en el estándar FIPS 46-3 de 1999. Entre las aplicaciones que ofrece se encuentra la seguridad en las comunicaciones, específicamente en teleconferencias, en comunicaciones inalámbricas y en redes privadas virtuales pues permite una transmisión segura de datos y multimedia. Otra aplicación consiste en proporcionar seguridad en transacciones comerciales electrónicas, en específico en los cajeros automáticos; proporciona también almacenamiento seguro. Además forma parte de protocolos de seguridad como IPSec y SSL. El autor plantea que la herramienta de simulación a usar es el Xilinx ISE. De cualquier forma podría hacerse un análisis de compatibilidad de código, pero dadas las condiciones del trabajo esto no es requerido pues se utilizó la variante de Xilinx. El programa describe un bloque Triple-DES de 64 bits, que opera con tres claves de igual tamaño. Triple-DES es una extensión de DES, resultando un cifrado más complejo y seguro. El DES estándar representa un componente en la arquitectura Triple-DES. El proceso de encriptación consiste en cifrar el bloque con una clave, luego se descifra con otra clave y por último se vuelve a cifrar con una tercera clave. Al inicio se analiza el estado del pin function_select, el cual determina la función en que trabajará el programa. La activación de la señal ldkey indica que la clave está lista para la entrada. Las claves se encuentran en tres palabras separadas de 64 bits: key1_in, key2_in y key3_in. Una vez que las claves son cargadas, el circuito está listo para aceptar bloques de datos para el cifrado/descifrado. El pin lddata es el que indica si hay un bloque de datos de 64 bits listo en el puerto data_in. Para cargar nuevos valores de las claves es necesario.

Figure

Figura 1.1 Red de Feistel general clásica. Imagen tomada de (Stallings, 2011).
Tabla 1.1 Permutaciones: a) inicial y b) final.
Figura 1.3 Funcionamiento de una ronda de DES. A la izquierda el tratamiento del dato que incluye la  función F y a la derecha el mecanismo de generación de la clave para la ronda
Figura 2.1 Flujo de diseño general para FPGA. Imagen tomada de (Güichal, 2005).
+7

Referencias

Documento similar