Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA SECCIÓN DE ESTUDIOS DE POSGRADO E INVESTIGACIÓN Implantación del algoritmo de cifrado AES con CFB en FPGA para protección de datos T E S I S para obtener el grado de Maestro en Ingeniería en Seguridad y Tecnologías de la Información P r e s e n t a: ALEJANDRO PADRÓN GODÍNEZ Director de Tesis: José Velázquez López Agosto 2013, México D. F. II CARTA CESIÓN DE DERECHOS Alejandro Padrón Godínez INSTITUTO POLITÉCNICO NACIONAL SECRETARÍA DE INVESTIGACIÓN Y POSGRADO III Dedicatoria IV Agradecimientos V ÍNDICE Carátula .......................................................................................................................... I Cesión de derechos ........................................................................................................ II Dedicatoria ..................................................................................................................... III Agradecimientos ............................................................................................................ IV Índice ............................................................................................................................. V Glosario .......................................................................................................................... VI • Introducción y Bosquejo .................................................................................................. 1 Objetivo General ............................................................................................................ 5 Objetivos Particulares .................................................................................................... 5 1. Marco Teórico Contextual ............................................................................................... 6 1.1 Del Algoritmo Rijndael al Algoritmo AES ........................................................... 6 1.2 Servicios de Seguridad .......................................................................................... 8 1.3 Problemática y Justificación ................................................................................ 11 1.4 Estado del Arte ..................................................................................................... 11 2. Antecedentes VHDL ....................................................................................................... 14 2.1 Lenguajes de Descripción de Hardware ............................................................... 15 2.2 Lenguajes de descripción de Hardware versus desarrollo de Software ............... 16 2.3 Descripción de la tarjeta Spartan 3E Starter Kit XC3S500E ............................... 19 3. Estándar Criptográfico .................................................................................................... 21 3.1 Funcionamiento del Algoritmo AES .................................................................... 21 3.2 Modo de Operación CFB para Cifrado y Descifrado de datos ............................ 31 3.3 Diseño para la Implementación de AES con CFB en VHDL .............................. 34 3.1.1 AES-128 …………………………………………………………………...35 3.1.2 AES-192 …………………………………………………………………...35 3.1.3 AES-256 …………………………………………………………………...36 3.1.4 CFB8_AES128 …………………………………………………………….36 4. Plataforma de Comunicación Serial para el Cifrado y Descifrado ................................. 38 4.1 Comunicación Serial Segura ................................................................................ 38 4.2 Diseño de la Plataforma Criptográfica ................................................................. 40 4.3 Principales Características del UART .................................................................. 43 4.4 Configuración de las Interfaces Seriales en la Spartan 3E ................................... 50 5. Resultados ....................................................................................................................... 52 5.1 Verificación de algoritmos implementados contra Normas FIPS y NIST ........... 52 5.2 Comparación de resultados en software y hardware de un archivo texto ............ 58 5.3 Resultados obtenidos en la plataforma de comunicación .................................... 61 • Anexo I.- AES-128 mediante Matlab ............................................................................. 64 • Anexo II.- Códigos en VHDL de los algoritmos: AES-128,AES-192, AES-256 y CFB8_AES-128 .............................................................................................................. ......................................................................................................................................... 69 • Anexo III. – Cifrado y Descifrado de un archivo.txt en Matlab ..................................... 81 • Anexo IV.- Reportes de Mapeo y Traza sobre el proyecto de la Plataforma ................. 98 • Conclusiones y Perspectivas ......................................................................................... 103 • Referencias Bibliográficas ............................................................................................. 105 VI GLOSARIO CFB: Cifrado por Retroalimentación SI: Seguridad Informática RSA: Rivest Shamir Adleman DES: Estándar de Cifrado de Datos AES: Estándar de Cifrado Avanzado PGP: Pretty Good Privacy, siglas en inglés DoD: Departamento de Defensa NSA: National Security Agency, siglas en inglés IDEA: Algoritmo Internacional de Cifrado de Datos GSM: Global System for Mobile communications, siglas en ingles. ISO: International Standard Organization, siglas en ingles. OSI: Open Systems Interconnection, siglas en ingles. ASIC: Applications-Specific Integrated Circuit, siglas en ingles. FPGA: Field Programable Gates Arrays, siglas en ingles. Soc: System on Chip, siglas en ingles. NIST: National Institute of Standart Technology, siglas en ingles. FIPS: Fedeal Information Processing Standart, siglas en ingles. IEC: International Electrotechnical Comission, siglas en ingles. ITU: International Telecommunication Union, siglas en ingles. CBC: Cipher Block Chaining, siglas en ingles. MAC: Message Autentication Code, siglas en ingles. CCMP: Combinación de CBC y MAC. USB: Universal Serial Bus. SSL: Secure Socket Layer, siglas en ingles. CCM: Cipher Counter Mode, siglas en ingles. VHDL: Very High Description Lenguage, siglas en ingles. LCD: Liquid Crystal Display, siglas en ingles. VHSIC: Very High Spped Integrated Circuit, siglas en ingles. IEEE: Institute of Electrical and Electronic Engineers, siglas en ingles. UART: Universal Asynchronous Receiver/Transmitter, siglas en ingles. Introducción y Bosquejo Introducción y Bosquejo Objetivos alepadgo@gmail.com 1 IPN-ESIME Introducción y Bosquejo Desde la década de los 70s, los dispositivos de lógica estándar eran todo un avance tecnológico, y los tableros con circuitos impresos eran lo mejor de su momento. Pero algunos se preguntaron “¿qué sucede si le damos a los diseñadores la capacidad de poner diversas interconexionesen ejecución en un dispositivo más grande?” Esto permite que el diseñador integre muchos dispositivos de lógica estándar en una partición. Para ofrecer lo último en flexibilidad del diseño, Ron Cline Signetics (que fue comprado más adelante por Philips y convertido eventualmente a Xilinx), vino con la idea de dos planos de programación. Estos planos proporcionaron cualquier combinación de compuertas lógicas “AND” y “OR”, así como sustituir las compuertas AND en términos de múltiples ORs. En este nuevo siglo, los “Field programable Gates Arrays” (FPGA) son una de las tecnologías disponibles para el desarrollo de sistemas electrónicos. Representan una atractiva opción para la producción de pequeñas cantidades ya que sus costos fijos (costo del prototipo de la primera unidad) son bastante más bajos que los correspondientes en “Applications-Specific Integrated Circuit” (ASIC), circuitos integrados de aplicación específica. Además, en pos de reducir el tamaño y por tanto el costo unitario, una posibilidad interesante es reconfigurarlas mientras operan de modo que el mismo dispositivo pueda ejecutar diferentes funciones predefinidas. Actualmente los sistemas electrónicos están presentes en el quehacer cotidiano, desde la electrónica de consumo a los sistemas de control industrial, pasando por las aplicaciones para automotriz, seguridad y una gama extensa en diferentes ámbitos. La tendencia de estos dispositivos con respecto a su diseño electrónico radica en la complejidad de muchos de los elementos que lo conforman, donde se exige, por ejemplo, que sean de fácil utilización y adaptables a varias aplicaciones que consuman pocos recursos y que puedan estar rápidamente a la venta. La tecnología actual de circuitos integrados permite realizar e integrar estos complejos sistemas en muy poco espacio; son los llamados sistemas embebidos (o empotrados) o “System on Chip” (SoC) por sus siglas en ingles. Estos sistemas embebidos usados para resolver tareas específicas incluyen hardware y software diseñado exprofesamente para ello. En el caso de las FPGA, al ser dispositivos reconfigurables son altamente útiles para desarrollo de prototipos o pequeñas cantidades a un precio razonablemente bajo. La evolución de la microelectrónica desde su nacimiento ha sido impresionante, en poco más de diez años se pasó del primer dispositivo integrado (flip-flop con unos cuantos transistores) a las primeras memorias y procesadores. A los pocos años, el diseño de circuitos integrados salió de las fábricas y se hizo accesible a los ingenieros de aplicación, dando lugar a los ASIC. Luego a mediados de los 80´s, se puso de manifiesto la necesidad de disponer de un lenguaje estándar Introducción y Bosquejo Objetivos alepadgo@gmail.com 2 IPN-ESIME capaz de dar el soporte necesario al proceso completo de diseño de chips y sistemas electrónicos (desde la idea hasta la implementación y explotación de un desarrollo) en sus distintas etapas y niveles de abstracción y cuya complejidad, ya de por sí elevada, se iba a incrementar drásticamente hacia los años noventa, Terés L. et al, (1998). Estas inquietudes, canalizadas a través del “Departament Of Defense” (DoD) de los E.U.A., llevan al nacimiento del VHDL (1987), que tras ser adoptado como estándar del IEEE (Std.-1076, 1987), se presenta como el lenguaje estándar por excelencia del diseño electrónico. Desde el primer momento se convirtió en la herramienta y el motor de base que ha facilitado e impulsado los enormes avances de las metodologías, técnicas y herramientas CAD de diseño electrónico de los últimos diez años. Esta evolución arrastra al propio Verilog, ahora también convertido en estándar del IEEE (Std.- 1364, 1995), que es con quien compite y lleva de la mano al VHDL. En definitiva, aunque sólo se considere al VHDL como herramienta de base, la implantación de este lenguaje ha supuesto tal cantidad de cambios en el diseño electrónico (nuevas metodologías de diseño de alto nivel y flujos descendentes, herramientas CAD de simulación/síntesis de circuitos y sistemas, nuevos de los equipos de diseño, cambios en la organización y desarrollo de proyectos, etc.), que sin lugar a dudas, se puede hablar de un antes y un después del VHDL. Una línea de desarrollo de estos sistemas con las herramientas mencionadas, está dirigida a la protección de datos en dispositivos de almacenamiento masivo, para ello habría que crear los elementos y módulos electrónicos necesarios para el manejo de los datos en forma bidireccional (transceivers, memorias dinámicas, controladores de lectura y escritura), Padrón A., Velázquez J. et al, (2012). Ya sea escribiendo o leyendo los datos de forma segura, habría que detallar en donde sería el mejor sitio para el módulo criptográfico que proporcionará la seguridad de los datos. Para ello el desarrollo de una plataforma criptográfica de comunicación puede ayudar al concepto del manejo de información en una transmisión y recepción de datos cifrados, es decir proteger datos en canales de transmisión antes de almacenarlos. Como consecuencia de los desarrollos de protección de datos mediante sistemas en hardware, surgen desarrollos dedicados a optimizar las operaciones midiendo la eficiencia y el desempeño de las implementaciones para mejorar la velocidad de procesamiento. La idea de esta introducción es percibir que el desarrollo de este trabajo de tesis está siendo implementado con las nuevas técnicas y herramientas para el diseño electrónico. Donde se ha tenido que aprender nuevas técnicas de programación, existen muchas ayudas en los manuales y en la red para desarrollar e implementar los programas ante cualquier obstáculo encontrado, sin embargo tienen que ser modificadas e integradas a las tareas que se quieren resolver. Introducción y Bosquejo Objetivos alepadgo@gmail.com 3 IPN-ESIME Así el desarrollo del algoritmo criptográfico, el modo de operación y las interfaces de la plataforma de comunicación aquí mostrados están en el lenguaje de programación VHDL. Se utiliza además la ventaja de poder realizar una simulación de los módulos construidos, en algunos casos antes de llevar a cabo las implantaciones (programación de los FPGA) en hardware. Resumiendo el contenido de la tesis, ésta comienza por el marco contextual de una implementación en hardware de un algoritmo estándar para asegurar información mediante técnicas criptográficas. Mencionando su problemática y el estado del arte de este tipo de implementaciones siguiendo normas para implementar servicios de seguridad, así como sus mecanismos de control. En los antecedentes de esta tesis (capítulo dos), se presentarán las características genéricas de los lenguajes de descripción de hardware para su mejor comprensión. En el mismo capítulo se realiza una comparación entre el lenguaje de descripción de Hardware contra el desarrollo en Software. No se pretende con este trabajo desaparecer o echar abajo diseños que se han realizado sino por lo contrario mostrar que esos diseños pueden ser implementados con mucho menos elementos que un diseño original. Se debe tener en mente que estas implementaciones pueden ser utilizadas en aplicaciones que se desarrollarán en un futuro próximo, facilitando la funcionalidad al agregar en forma modular las interfaces de la plataforma. También en la parte de los antecedentes se describe físicamente a latarjeta Spartan 3E de Xilinx para conocer de qué elementos está conformada y cuáles otros subelementos pueden ser utilizados para el desarrollo del trabajo de tesis. Mostrando sus características y parámetros para señales de entrada y salida, sin dejar de mencionar que se puede consultar a detalle en el manual de la tarjeta para conectarlas pero no la programación de las mismas. Spartan-3E FPGA Starter Kit Board User Guide, (2008). Se describirán en el capitulo tres cada operación que se lleva a cabo en el algoritmo de cifrado y descifrado AES con algún ejemplo, el número de rondas si se usan claves de tamaño 128, 192 y 256 bits, y se mostrará el modo de operación CFB integrado para cifrar por flujo. Para poder hacer alguna comparación entre implementaciones en software y hardware se mencionarán las herramientas usadas con una breve descripción de ellas en el capitulo cuatro de esta tesis. La plataforma diseñada para la comunicación vía el puerto serie de dos tarjetas Spartan 3E se mostrará junto con las interfaces empleadas para ello, en mismo capítulo. En el capítulo cinco se pueden verificar los resultados obtenidos de las implementaciones del cifrado y descifrado en software (Anexo I, implementación AES-128 en Matlab) y hardware con sus respectivas normas y estándares. Luego empleando Matlab se mostrarán cuales fueron los Introducción y Bosquejo Objetivos alepadgo@gmail.com 4 IPN-ESIME resultados después de la corrida para la implementación del algoritmo AES-128 cifrando y descifrando un archivo de texto (Anexo III). Se pueden comparar estos resultados con la simulación de la implementación (en hardware) en el sistema ISE suite 13.3 de Xilinx, del mismo archivo de texto dentro del mismo capítulo. Usan do la plataforma de comunicación vía puerto serie, se presentarán los resultados obtenidos de las implementaciones de este trabajo de tesis. En los anexos estarán los códigos en VHDL para los algoritmos empleados (Anexo II), así como los reportes que genera Xilinx para el proyecto plataforma criptográfica (Anexo IV). Por último se mostrarán las conclusiones y perspectivas de esta tesis, haciendo hincapié en las ventajas de la implantación en hardware. Al final del trabajo se encuentran las referencias bibliográficas que se consultaron. Introducción y Bosquejo Objetivos alepadgo@gmail.com 5 IPN-ESIME Objetivo General • Diseñar e implementar un sistema de protección de datos en un arreglo de compuertas programables, empleando el algoritmo de cifrado AES en modo de operación CFB, para aumentar la seguridad de la información en sistemas portátiles. Objetivos Particulares • Implantar el algoritmo de cifrado por bloques AES mediante la programación en VHDL de los módulos principales. • Incluir el modo de operación CFB en VHDL para convertir el cifrado de bloques AES en cifrado por flujo. • Diseñar y desarrollar la implementación de una plataforma criptográfica de comunicaciones usando las interfaces integradas en la tarjeta Starter Kit Spartan 3E FPGA de Xilinx. • Realizar la comunicación vía puerto serie de datos cifrados escritura/lectura en la plataforma diseñada. Capítulo 1 Marco Teórico Contextual Capítulo 1. Marco Teórico Contextual alepadgo@gmail.com 6 IPN-ESIME 1. Marco Teórico Contextual Para poder situarse en el Marco Teórico Contextual sobre este trabajo de tesis, habrá que mencionar como surgió el algoritmo criptográfico estándar AES y como ha sido utilizado. Por otro lado se mencionarán bajo qué circunstancias aparecen los servicios y mecanismos de Seguridad Informática y cómo han sido implementados. Con esto se plantea la problemática a resolver mediante la implementación en hardware propuesta en esta tesis. Lo anterior lleva hacer una búsqueda del estado del arte en esta disciplina, sobre todo en sistemas embebidos con mecanismos de seguridad. 1.1 Del Algoritmo Rijndael al Algoritmo AES El “Advanced Encryption Standard” (AES), también conocido como Rijndael (pronunciado "Rain Doll" en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. Se espera que sea usado en el mundo entero y analizado exhaustivamente, como fue el caso de su predecesor, el “Data Encryption Standard” (DES) por más de veintisiete años (1974 - 2001). El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrador fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y enviado al proceso de selección AES bajo el nombre "Rijndael". Como dato curioso Rijndael fue un refinamiento de un diseño anterior de Daemen y Rijmen, el algoritmo Square; Square fue a su vez un desarrollo del algoritmo Shark. En 1997, el Instituto Nacional de Normas y Tecnología (NIST) decidió realizar un concurso para escoger un nuevo algoritmo de cifrado capaz de proteger información sensible durante siglo XXI. Este algoritmo se denominó “Advanced Encryption Standard” (AES). El 2 de enero de 1997 el NIST anunció su intención de desarrollar AES, con la ayuda de la industria y de la comunidad criptográfica. El 12 de septiembre de ese año se hizo la convocatoria formal. En esta convocatoria se indicaban varias condiciones para los algoritmos que se presentaran: – Ser de dominio público, disponible para todo el mundo. – Ser un algoritmo de cifrado simétrico y soportar bloques de, como mínimo, 128 bits. – Las claves de cifrado podrían ser de 128, 192 y 256 bits. Capítulo 1. Marco Teórico Contextual alepadgo@gmail.com 7 IPN-ESIME – Capaz de ser implementado tanto en hardware como en software. El 20 de agosto de 1998 el NIST anunció los 15 algoritmos admitidos en la primera conferencia AES: – CAST-256 (Entrust Technologies, Inc.) – CRYPTON (Future Systems, Inc.) – DEAL (Richard Outerbridge, Lars Knudsen) – DFC (CNRS – Centre National pour la Recherche Scientifique – Ecole Normale Superieure) – E2 (NTT – Nippon Telegraph and Telephone Corporation) – FROG (TecApro International, S.A.) – HPC (Rich Schroeppel) – LOKI97 (Lawrie Brown, Josef Pieprzyk, Jennifer Seberry) – MAGENTA (Deutsche Telekom AG) – MARS (IBM) – RC6 (RSA Laboratories) – RIJNDAEL (John Daemen, Vincent Rijmen) – SAFER+ (Cylink Corporation) – SERPENT (Ross Anderson, Eli Biham, Lars Knudsen) – TWOFISH (Bruce Schneier, John Kelsey, Doug Whiting, David Wagner, Chris Hall, Niels Ferguson) La segunda conferencia AES tuvo lugar en marzo de 1999 donde se discutieron los análisis a los que fueron sometidos los candidatos por la comunidad criptográfica internacional. Se admitieron comentarios hasta el 15 de abril. El NIST decidió en agosto de 1999 cuales serían los 5 finalistas: –MARS – RC6 – RIJNDAEL – SERPENT – TWOFISH Estos algoritmos fueron sometidos a una segunda revisión, más exhaustiva, que duró hasta el 15 de mayo de 2000. Durante este periodo el NIST admitió análisis de los algoritmos finalistas. Durante los días 13 y 14 de abril de 2000 tuvo lugar la tercera conferencia AES donde se discutieron los últimos análisis de los algoritmos finalistas. En ella estuvieron presentes los desarrolladores de los algoritmos finalistas. Capítulo 1. Marco Teórico Contextual alepadgo@gmail.com 8 IPN-ESIME El 15 de mayo de 2000 finalizó el periodo público de análisis. El NIST estudió toda la información disponible para decidir cuál sería el algoritmo ganador. El 2 de octubre de 2000 se votó cual sería el algoritmo que finalmente ganaría el concurso. El resultado fue el siguiente: – MARS: 13 votos – RC6: 23 votos – RIJNDAEL: 86 votos – SERPENT: 59 votos – TWOFISH: 31 votos El algoritmo Rijndael ganó el concurso y en noviembre de 2001 se publicó FIPS 197 donde se asumía oficialmente. Las características del AES son: no es de tipo Feistel, implementado para trabajar en los procesadores de 8 bits usados en tarjetas inteligentes y en CPUs de 32 bits, tamaño de clave variable: 128, 192 y 256 bits (estándar) o bien múltiplo de 4 bytes, tamaño del bloque de texto: 128 bits o múltiplo de 4 bytes. Otras características son: Operaciones modulares a nivel de byte (representación en forma de polinomios) y de palabra de 4 bytes: 32 bits, número de etapas flexible según necesidades del usuario y usa un conjunto de Cajas S similares a las del DES. Más características y propiedades del algoritmo se presentan en el capítulo tres de este trabajo de tesis. 1.2 Servicios de Seguridad El documento de ISO/IEC 7498-1, que describe el Modelo de Referencia OSI, presenta en su Parte 2 una Arquitectura de Seguridad. Según esta arquitectura, para proteger las comunicaciones de los usuarios en las redes, es necesario dotar a las mismas de los siguientes servicios de seguridad: • Autenticación de entidad par. Este servicio corrobora la fuente de una unidad de datos. La autenticación puede ser sólo de la entidad origen o de la entidad destino, o ambas entidades se pueden autenticar la una o la otra. • Control de acceso. Este servicio se utiliza para evitar el uso no autorizado de recursos. • Confidencialidad de datos. Este servicio proporciona protección contra la revelación deliberada o accidental de los datos en una comunicación. • Integridad de datos. Este servicio garantiza que los datos recibidos por el receptor de una comunicación coinciden con los enviados por el emisor. Capítulo 1. Marco Teórico Contextual alepadgo@gmail.com 9 IPN-ESIME • No repudio. Este servicio proporciona la prueba ante una tercera parte de que cada una de las entidades comunicantes han participado en una comunicación. Puede ser de dos tipos: o Con prueba de origen. Cuando el destinatario tiene prueba del origen de los datos. o Con prueba de entrega. Cuando el origen tiene prueba de la entrega íntegra de los datos al destinatario deseado. Para proporcionar estos servicios de seguridad es necesario incorporar en los niveles apropiados del Modelo de Referencia OSI los siguientes mecanismos de seguridad: • Cifrado. El cifrado puede hacerse utilizando sistemas criptográficos simétricos o asimétricos y se puede aplicar extremo a extremo o individualmente a cada enlace del sistema de comunicaciones. • El mecanismo de cifrado soporta el servicio de confidencialidad de datos al tiempo que actúa como complemento de otros mecanismos de seguridad. • Firma digital. Se puede definir la firma digital como el conjunto de datos que se añaden a una unidad de datos para protegerlos contra la falsificación, permitiendo al receptor probar la fuente y la integridad de los mismos. La firma digital supone el cifrado, con una componente secreta del firmante, de la unidad de datos y la elaboración de un valor de control criptográfico. La firma digital descrita por ITU y OSI en el Entorno de Autenticación del Directorio utiliza un esquema criptográfico asimétrico. La firma consiste en una cadena que contiene el resultado de cifrar con RSA aplicando la clave privada del firmante, una versión comprimida, mediante una función hash unidireccional y libre de colisiones, del texto a firmar. Para verificar la firma, el receptor descifra la firma con la clave pública del emisor, comprime con la función hash al texto original recibido y compara el resultado de la parte descifrada con la parte comprimida, si ambas coinciden el emisor tiene garantía de que el texto no ha sido modificado. Como el emisor utiliza su clave secreta para cifrar la parte comprimida del mensaje, puede probarse ante una tercera parte, que la firma sólo ha podido ser generada por el usuario que guarda la componente secreta. El mecanismo de firma digital soporta los servicios de integridad de datos, autenticación de origen y no repudio con prueba de origen. Para proporcionar el servicio de no repudio con prueba de entrega es necesario forzar al receptor a enviar al emisor un recibo firmado digitalmente. Capítulo 1. Marco Teórico Contextual alepadgo@gmail.com 10 IPN-ESIME • Control de acceso. Este mecanismo se utiliza para autenticar las capacidades de una entidad, con el fin de asegurar los derechos de acceso a recursos que posee. El control de acceso se puede realizar en el origen o en un punto intermedio, y se encarga de asegurar si el emisor está autorizado a comunicarse con el receptor y/o a usar los recursos de comunicación requeridos. Si una entidad intenta acceder a un recurso no autorizado, o intenta el acceso de forma impropia a un recurso autorizado, entonces la función de control de acceso rechazará el intento, al tiempo que puede informar del incidente, con el propósito de generar una alarma y/o registrarlo. El mecanismo de control de acceso soporta el servicio de control de acceso. • Integridad de datos. Es necesario diferenciar entre la integridad de una unidad de datos y la integridad de una secuencia de unidades de datos ya que se utilizan distintos modelos de mecanismos de seguridad para proporcionar ambos servicios de integridad. Para proporcionar la integridad de una unidad de datos la entidad emisora añade a la unidad de datos una cantidad que se calcula en función de los datos. Esta cantidad, probablemente cifrada con técnicas simétricas o asimétricas, puede ser una información suplementaria compuesta por un código de control de bloque, o un valor de control criptográfico. La entidad receptora genera la misma cantidad a partir del texto original y la compara con la recibida para determinar si los datos no se han modificado durante la transmisión. Para proporcionar integridad a una secuencia de unidades de datos se requiere, adicionalmente, alguna forma de ordenación explícita, tal como la numeración de secuencia, un sello de tiempo o un encadenamiento criptográfico. El mecanismo de integridad de datos soporta el servicio de integridad de datos. Intercambio de autentificación. Existen dos grados en el mecanismo de autenticación: 1. Autentificación simple. El emisor envía su nombre distintivo y una contraseña al receptor, el cual los comprueba. 2. Autentificación fuerte. Utiliza las propiedades de los criptosistemas de clave pública. Cada usuario se identifica por un nombre distintivo y por su clave secreta. Cuando un segundo usuario desea comprobar laautenticidad de su interlocutor deberá comprobar que éste está en posesión de su clave secreta, para lo cual deberá obtener su clave pública. Para que un usuario confíe en el procedimiento de autenticación, la clave pública de su interlocutor se tiene que obtener de una fuente de confianza, a la que se denomina Autoridad de Certificación. La Autoridad de Certificación utiliza un algoritmo de clave pública para certificar la clave pública de un usuario produciendo así un certificado. Capítulo 1. Marco Teórico Contextual alepadgo@gmail.com 11 IPN-ESIME Un certificado es un documento firmado por una Autoridad de Certificación, válido dunte el período de tiempo indicado, que asocia una clave pública a un usuario. El mecanismo de intercambio de autenticación se utiliza para soportar el servicio de autenticación de entidad par. 1.3 Problemática y Justificación Problemática.- La mayor parte de las implementaciones de mecanismos de seguridad y por tanto los servicios de seguridad, han sido en software y se puede comprobar si se sigue el Modelo OSI de la ISO/IEC 7498. Donde claramente se muestra como en la capa de aplicación se pueden implementar todos los servicios de seguridad y por tanto todos son desarrollos en software bajo alguna plataforma de programación conocida. Un ejemplo en particular donde se implementa el AES-128 en software es el que usa la aplicación WinRAR para comprimir y cifrar un documento. En otras aplicaciones de cifrado y por la misma razón el diseño de protocolos de comunicación se consideran sólo implementaciones en software para cifrar la información como por ejemplo los usados en los protocolos IPSec, IPv6 y VozIP. En estos protocolos los servicios de seguridad son transparentes al usuario y como sea significa más carga en el canal de transmisión, y a veces se duplican los procesos para el envío de información, como en el caso del protocolo Counter CBC- MAC (CCMP). Padrón A., Velázquez J., et al., (2011). Justificación.- Para resolver la problemática anterior se puede analizar la misma norma ISO/IEC- 7498, en la parte de implementación de los servicios de seguridad vía mecanismos de control y monitoreo, en la cual muestra que solamente dos servicios no se implementan con técnicas criptográficas (control de acceso y no repudio). La implementación en hardware de técnicas criptográficas en protocolos de comunicación produce una mejor eficiencia en las comunicaciones y sólo viaja información cifrada sobre el canal de transmisión. Estas implementaciones estarían contempladas dentro del Modelo OSI en la capa física. 1.4 Estado del Arte En la actualidad existen ya algunas implementaciones de seguridad en sistemas embebidos, por ejemplo el procesador criptográfico de “Globull” es capaz de codificar datos sobre la marcha a velocidades de 100 Mbps utilizando tecnología “Advanced Encryption Standard” con clave de 256 bits (AES-256). Sin la contraseña del legítimo usuario, la información no puede ser descifrada. El Globull tiene el tamaño y peso aproximado de un iPod Clásico. Dispone de una pantalla a color, unidad de disco duro de 60 GB y cable USB 2.0. Conectándolo a cualquier PC que pueda Capítulo 1. Marco Teórico Contextual alepadgo@gmail.com 12 IPN-ESIME arrancarse desde una unidad USB 2.0 externa, encendiendo la máquina e introduciendo su contraseña en un diminuto panel táctil debajo de la pantalla del dispositivo, el usuario conseguirá acceso a sus datos, aplicaciones y, en general, a su entorno habitual de trabajo. Apagando después el ordenador, podrá llevarse los datos sin dejar rastro alguno sobre sus contraseñas. http://www.idg.es/. Otro ejemplo de estos dispositivos es el “IronKey”, que es una memoria flash para asegurar la información almacenada. Con IronKey nadie excepto el propietario o usuario autorizado puede acceder a los datos almacenados. El acceso a la memoria está protegido con un sistema único de autenticación de doble factor que consiste en un certificado digital y una contraseña. Los datos se guardan en la memoria flash con un cifrado AES-256 que cumple con estándares militares. En caso de violación física o ataque de fuerza bruta, las claves de cifrado se autodestruyen. Ahora los IronKey también tienen la posibilidad de realizar autenticación de dispositivos. http://www.ironkey.com/en-US/. Estos son muy buenos ejemplos de implementaciones en hardware de servicios de seguridad, sin embargo sólo son dispositivos para almacenar información. Los dispositivos portátiles de almacenamiento son una manera muy popular de transportar archivos entre ordenadores y hacer copias de seguridad de la información más importante. A pesar de eso, la ubicuidad de estos dispositivos aumentan las preocupaciones de seguridad al llevar datos confidenciales. Es importante evitar que esta información caiga en manos de usuarios no autorizados si el dispositivo se pierde o es robado. El cifrado es una manera eficaz de proteger la privacidad de los datos corporativos y de los datos personales. Si bien los programas de software de cifrado pueden ayudar a proteger los datos y proporcionan una buena primera línea de defensa, son vulnerables a una serie de ataques de descifrado. El hardware de cifrado ofrece una mayor protección contra los mismos modelos de amenaza para dispositivos. Ahora se vuelve interesante preguntar ¿qué hay en cuanto a los protocolos de comunicación? En comunicaciones existen los protocolos como el “Secure Sockets Layer” (SSL; en español capa de conexión segura) y su sucesor “Transport Layer Security” (TLS; en español seguridad de la capa de transporte), ambos son protocolos criptográficos que proporcionan a una red comunicaciones seguras, comúnmente el Internet. El protocolo SSL fue desarrollado originalmente por Netscape. La versión 1.0 nunca se entregó públicamente; la versión 2.0 se presentó en febrero de 1995 pero "contenía una cantidad de fallas de seguridad que al final llevaron al diseño de la versión SSL 3.0". Dicha versión, presentada en 1996, fue un rediseño completo del protocolo producido por Paul Kocher, quien trabajó con los ingenieros de Netscape Phil Karlton y Alan Freier. http://www.ironkey.com/en-US/� Capítulo 1. Marco Teórico Contextual alepadgo@gmail.com 13 IPN-ESIME Las versiones más nuevas de SSL/TLS están basadas en SSL 3.0. El borrador de 1996 de SSL 3.0 fue publicado por la IETF como el histórico RFC 6101. TLS 1.0 fue definido en el RFC 2246 en enero de 1999 y es una actualización de SSL versión 3.0. Como dice el RFC, "las diferencias entre este protocolo y SSL 3.0 no son dramáticas, pero son significativas en impedir la interoperabilidad entre TLS 1.0 y SSL 3.0". TLS 1.0 incluye una forma en la cual la implementación puede conectarse en SSL 3.0, debilitando la seguridad. https://es.wikipedia.org/wiki/TLS. Algunas de estas versiones usan el estándar AES con modos de operación: Cipher Block Chaining (CBC), Galois/Counter (GCM) y modo Cipher Counter Mode (CCM). Pero a pesar de que se usan técnicas Criptográficas no son implementaciones en hardware. En resumen en este estado del arte se presentaron desarrollos de implementaciones criptográficas para darle seguridad a dispositivos las cuales están desarrolladas tanto en software como en hardware pero sólo para almacenamiento de datos cifrados. Y también implementaciones en protocolos de comunicación pero sólo con desarrollos en software. Lo cual conduce a la motivación de este trabajo de tesis, proponiendo comunicacionesentre dispositivos por puerto serie mediante implementaciones en hardware. En particular se desarrollo la implementación en FPGA del algoritmo AES con modo de operación Cipher FeedBack (CFB) para cifrar y descifrar una comunicación serial de datos. https://tools.ietf.org/html/rfc2246� https://es.wikipedia.org/wiki/TLS� https://es.wikipedia.org/w/index.php?title=Modo_CCM&action=edit&redlink=1� Capítulo 2 Antecedentes VHDL Capítulo 2. Antecedentes VHDL alepadgo@gmail.com 14 IPN-ESIME 2. Antecedentes VHDL Conforme ha avanzado la tecnología en desarrollo y diseño de circuitos electrónicos, se ha logrado pasar del alambrado en “protoboard” a simulaciones de análisis y diseño asistido por computadora con herramientas tan complejas que a veces complica su entendimiento. Se buscaba acoplarse con una de estas herramientas para un manejo sencillo y poder implantar los diseños de los circuitos mediante una interfaz amigable con el usuario. Para ello era necesario iniciar con señales de entrada de acorde a la naturaleza del diseño implementado, esto a su vez para que la interpretación de los resultados, es decir las señales de salida fuera sencilla. Estos paquetes de software para diseño de circuitos eran los llamados CAD y algunos parecidos al SPICE en forma general. Una vez obtenidos los resultados requeridos se procedía a desarrollar el circuito impreso con otras herramientas diseñadas para tal tarea, un ejemplo de esto era el paquete OrCAD, en particular la herramienta PCB. Algunos de los modelos de circuitos neuronales electrónicos diseñados por el Laboratorio de Computación Adaptable antes Ingeniería Neuronal eran implementados con este tipo de herramientas. Padrón, (1997). Para modelos más complicados de redes se empezó a usar las herramientas de MATLAB, cuando las ecuaciones de los modelos se podían implementar en SIMULINK. La interpretación de los resultados era más fácil de realizar, cuantitativamente y cualitativamente. Padrón et al., (2000) pp. 338-349. Luego con la ayuda de las herramientas de Xilinx para el diseño de circuitos implementados en FPGA´s, en forma lógica o algorítmica ha permitido llevar a cabo las simulaciones e implementaciones tanto en software como en hardware. Se ha presentado un desarrollo de funciones para algunas interfaces genéricas sobre el sistema de desarrollo Spartan 3E de Xilinx, además de una interfaz para el control de periféricos entre un FPGA y un microcontrolador, en un reporte en los últimos años. Prieto, Padrón et al., (2011a). El uso que se dará a las interfaces desarrolladas están enfocadas a aplicaciones de visualización (LCD y display de 7 segmentos), introducción de datos (ratón y teclado) y almacenamiento masivo de datos (memoria y transceiver). Los desarrollos de interfaces asignados a cada tarjeta manufacturada por Xilinx tiene el propósito de que los usuarios puedan emplearlas de acuerdo a sus necesidades. Es decir, el tipo de interfaz que el usuario puede usar y desarrollar conforme al problema que enfrenta para resolver una tarea en particular. Programar los sistemas de desarrollo Xilinx para su implementación en los FPGA´s en el lenguaje Verilog o VHDL de su conveniencia, hacen que este tipo de tarjetas kit tengan la versatilidad de emplear varias interfaces en cuanto estén disponibles físicamente o sea posible desarrollarlas o programarlas e integrarlas al sistema diseñado. Capítulo 2. Antecedentes VHDL alepadgo@gmail.com 15 IPN-ESIME 2.1 Lenguajes de descripción del hardware Los lenguajes de descripción hardware (HDL, Hardware Description Language) surgen de la necesidad de los diseñadores de disponer de un conjunto de herramientas que permitan describir los sistemas digitales de formas diferentes, facilitando el diálogo entre los propios diseñadores, aunque también entre las herramientas de diseño asistido por computadora (CAD, Computer Aided Design) y entre diseñadores y herramientas. Los sistemas de desarrollo basados en lenguajes HDL permiten especificar y modelar la estructura y función de un circuito digital; incluyen herramientas para compilar, simular y sintetizar sistemas digitales. Terés L., et al, (1998). Estas herramientas de programación se utilizan para comprobar el funcionamiento del modelo antes de que sea construido. Ahora, los lenguajes HDL más utilizados son VHDL y Verilog, ya que están estandarizados por IEEE (Institute of Electrical and Electronic Engineers). VHDL proviene de VHSIC (Very High Speed Integrated Circuit) Hardware Description Language. VHDL es un lenguaje de descripción del hardware que puede utilizarse para modelar, documentar, simular, verificar y sintetizar un sistema digital. Por tanto, abarca el ciclo completo de diseño (salvo el trazado físico o layout) desde las especificaciones iniciales hasta la construcción del prototipo hardware. Proporciona el soporte necesario para especificar su comportamiento o estructura, incluyendo jerarquías. Así mismo, es útil para metodologías de diseño ascendentes (bottom-up) como, sobre todo descendentes (top-down). La semántica y construcciones del lenguaje permiten también diseñar con facilidad bancos de prueba (test-bench), mediante los que se lleva a cabo la simulación de los sistemas modelados. Entre las características del VHDL de ámbito general derivado del lenguaje de alto nivel ADA (que es un lenguaje para programar sistemas en tiempo real por excelencia), dispone de tipos abstractos para definir el formato y valores de señales, variables, constantes, etc. Y proporciona amplias facilidades para la realización de algoritmos. Admite casi todos los niveles de descripción, desde el algorítmico (nivel más alto) hasta el lógico (nivel más bajo). Para ello proporciona herramientas semánticas y sintácticas que se pueden agrupar como: • Aquellas orientadas a las descripciones del comportamiento del circuito. • Aquellas orientadas a la descripción de las relaciones entre los distintos bloques de un circuito, es decir, su estructura. Al realizar una descripción VHDL es importante elegir adecuadamente el nivel de función del objetivo perseguido. Por ejemplo, si se pretende sintetizar la descripción realizada, es decir, si el objetivo final es obtener un conjunto de puertas e interconexiones, no se debe emplear el nivel algorítmico, pues en general las herramientas actuales de síntesis no procesan de forma eficiente estas descripciones. Sin embargo, este nivel sí es adecuado cuando el objetivo es comprobar que Capítulo 2. Antecedentes VHDL alepadgo@gmail.com 16 IPN-ESIME un sistema complejo funciona correctamente, pues se puede describir y simular de una forma rápida y eficaz. El lenguaje VHDL presenta tres métodos básicos para describir un circuito digital por software: • El nivel algorítmico es el que presenta un mayor grado de abstracción (alto nivel), aquí el diseñador solo describe el comportamiento del sistema, sin preocuparse de las señales o componentes internos del mismo. También llamado nivel de comportamiento o behavior. • El nivel RTL (Register-Transfer Level, nivel de transferencia de registros) proporciona un cierto grado de abstracción con respecto al hardware, pero el diseñador se ve obligado a describir las distintas señales que interactúan en un circuito y su comportamiento en función de las entradas por medio de ecuaciones lógicas y sentencias de asignación. También conocido como nivel de flujo de datos. • El nivel lógico describe la estructurainterna de un circuito basándose en unos componentes básicos definidos previamente (equivaldría a un diagrama lógico). Toda descripción en VHDL está constituida al menos por tres tipos de elementos: bibliotecas (libraries), entidades (entities) y arquitecturas (architectures). El diseñador generalmente realiza la descripción de las entidades empleando elementos almacenados en las bibliotecas. En la declaración de la entidad se define el diseño como si fuera un producto encapsulado, indicando el número de pines, los puertos de entrada y salida. La entidad puede definir bien las entradas y salidas de un circuito integrado por diseñar o puede definir la interfaz de un módulo que será utilizado en un diseño más grande. Para que la descripción de un circuito sea completa se necesita, además de su declaración como entidad, una especificación de su funcionamiento, la arquitectura es la encargada de ello. Es posible realizar descripciones del funcionamiento del circuito, por lo que pueden existir varias arquitecturas para una misma entidad. Baena A., (2010). 2.2 Lenguajes de descripción de Hardware versus desarrollo de Software Desde siempre las distintas herramientas y entornos de CAD han hecho uso de lenguajes y formatos para describir y manejar los distintos objetos del diseño electrónico. Algunos de estos lenguajes eran notaciones explícitas para realizar las descripciones de entrada a una cierta herramienta; mientras que otros son formatos intermedios propios de cada herramienta para agilizar sus procesos y casi siempre transparentes y desconocidos para el usuario. Sin embargo, todos ellos se limitaban al entorno de CAD que les era propio. Los HDL’s, además del grado de estandarización que supusieron, adoptaron conceptos de la ingeniería del software para la Capítulo 2. Antecedentes VHDL alepadgo@gmail.com 17 IPN-ESIME descripción y modelado del hardware. Desde el punto de vista de la sintaxis, los HDL’s son muy similares a los lenguajes de programación de alto nivel (HLL, High Level Languages) para el desarrollo de software. De hecho, en muchos casos, el HDL se deriva de un HLL, así el Verilog tiene muchas reminiscencias del lenguaje “C”; mientras que el VHDL procede del ADA, de quien hereda muchos de sus conceptos, propiedades y estructuras. Estas similitudes sintácticas entre ambos tipos de lenguajes, si bien pueden facilitar el aprendizaje inicial y el desarrollo de modelos de hardware a aquellos ingenieros con experiencia en programación, también encierran ciertos peligros, pues en aquellos casos en que el modelo en HDL se realiza para su posterior síntesis e implementación, el diseñador debe pensar y describir en términos de hardware aunque la sintaxis sea de software. Al usar estrategias de Software será aconsejable cuando el modelo a desarrollar sea exclusivamente para simulación, pues en ese caso se tratará de optimizar el modelo de cara a la ejecución de las distintas etapas y procesos de simulación. Los lenguajes de descripción de hardware (HDL) son lenguajes de alto nivel, similares a los de programación (C, PASCAL, ADA, etc.), con una sintaxis y semántica definidas para facilitar el modelado y descripción de circuitos electrónicos, desde las celdas de base de un ASIC hasta sistemas completos, pudiéndose realizar estas descripciones a distintos niveles de abstracción, precisión y estilos de modelado, tal y como se muestran en la Figura (2.1). Los HDL nacen para modelar el comportamiento de un componente de cara a su simulación, aunque también se utilizan para describir el diseño de un circuito para su implementación a través de etapas de síntesis validadas vía la simulación, Figura (2.2). Mientras en software se recurre a los lenguajes de alto nivel para implementar los algoritmos de forma independiente del procesador que los va a ejecutar, en el caso del hardware son los HDL, quienes permiten descripciones de los circuitos a alto nivel de abstracción e independientes de la implementación tecnológica final, Figura (2.2a). Capítulo 2. Antecedentes VHDL alepadgo@gmail.com 18 IPN-ESIME Figura 2.1 Niveles de abstracción/precisión y estilos de modelado VHDL. A partir de tales descripciones, los procesos de diseño descendente (top-down) aplican procedimientos progresivos de síntesis, dando lugar a descripciones más detalladas de la implementación hasta alcanzar una descripción física concreta totalmente dependiente de la tecnología seleccionada. La validación de las distintas descripciones se realiza mediante los correspondientes procesos de simulación y análisis y las iteraciones de corrección resultantes, Figura (2b). Figura 2.2 Desarrollo en software versus hardware: (a) niveles de abstracción y lenguajes de alto nivel y (b) esquema básico del diseño descendente con HDL. Capítulo 2. Antecedentes VHDL alepadgo@gmail.com 19 IPN-ESIME 2.3 Descripción de la tarjeta Spartan 3E Starter XC3S500E La tarjeta Spartan 3E XC3S500E Starter suministra un poderoso y altísimo avance contenido dentro del desarrollo de la plataforma para diseños enfocados a la Spartan 3E FPGA de Xilinx. Este presenta un Puerto de 500K de Spartan 3E FPGA con un procesador RISC de 32 bit e interfaz DDR. La unidad “Spartan-3E starter Kit Board” proporciona las herramientas necesarias para probar el sistema. Incluye la placa de pruebas con una FPGA Spartan-3E modelo XC3S500E, fuente de alimentación, cable USB para programar el dispositivo, software para sintetizar e implementar los modelos diseñados y manuales de referencia. La tarjeta también presenta una plataforma flash Xilinx, USB y una interfaz programable paralela JTAG con numerosas opciones de configuración de FPGA a través de la tarjeta Intel StrataFlash y el ST Microelectronics Serial Flash. La tarjeta es compatible con todas las versiones de la herramienta ISE Xilinx incluyendo el WebPack gratuito. La tarjeta diseñada con fuente de poder puede ser implementada con costos no tan altos. La tarjeta Spartan 3E Starter es también compatible con el Kit de desarrollo embebido MicroBlaze y PicoBlaze de Xilinx. Spartan-3E FPGA Starter Kit Board User Guide, (2008). Figura 2.3. Tarjeta de desarrollo Spartan-3E. A continuación se presentan algunas características de la tarjeta: Capítulo 2. Antecedentes VHDL alepadgo@gmail.com 20 IPN-ESIME • Dispositivos Xilinx integrados: o FPGA de la familia Spartan-3E modelo XC3S500E-4FG320C (con 232 pines de E/S para el usuario, 1164 CLBs o bloques lógicos configurables y 10000 celdas o módulos lógicos) o Controlador CPLD CoolRunner-II CPLD (XC2C64A-5VQ44C) o 4 Mbits de memoria PROM Platform Flash o Incluye una Maxim DS2432 serial EEPROM con un SHA-1 integrado (firma digital) • Reloj: oscilador de 50 [MHz] • Otra memoria incluida: o 128 [Mbits] de memoria Parallel Flash o 16 [Mbits] de memoria SPI (Serial Peripheral Interface) Flash o 64 [MBytes] de memoria DDR SDRAM • Interfaces y conectores: o 4 interruptores tipo pulsador o 4 salidas DAC (Digital-to-Analog Converter) o 2 entradas ADC (Analog-to-Digital Converter) o Conexión Ethernet 10/100 o Puerto USB de programación o 2 puertos serie RS-232 o Puerto PS/2 para ratón o teclado o 4 interruptores tipo “slide” (deslizables) o Puerto VGA para despliegue vía un conector DB15 o Puerto para un Reloj Auxiliar: Oscilador • Plataforma flash Xilinx XCF04 para almacenar configuraciones dela FPGA • 2MB ST Microelectronics Serial Flash • Fuente de poder con tecnología lineal • Texas Instruments TPS75003 con CI de manejo de Triple-Supply Power • SMSC LAN83C185 Ethernet PHY • 8 led de prueba • Display: Pantalla LCD de 2 líneas de 16 caracteres. Capítulo 3 Estándar Criptográfico Capítulo 3. Estándar Criptográfico alepadgo@gmail.com 21 IPN-ESIME 3. Estándar Criptográfico En este capítulo se presenta el funcionamiento de las operaciones llevadas a cabo para el algoritmo de cifrado AES por bloques, empleando diferentes tamaños de claves y calculando el número de rondas para cada caso. Se mostrará cómo trabaja el proceso para la expansión de claves necesarias para cada caso. Se toma la norma FIPS-197 (2001), como referencia para consultar y cotejar los algunos detalles en específico. Para el caso del modo de operación CFB se toma como referencia la norma NIST SP800-38A (2001), siguiendo el procedimiento que se debe integrar para cumplir con el propósito de este trabajo. 3.1 Funcionamiento del Algoritmo AES Para entender cómo funciona el algoritmo AES será necesario mencionar algunos antecedentes en el campo de la Aritmética de Números Finitos y Matemáticas Discretas. Antecedentes que habrá que recordar o revisar consultando bibliografía específica en los temas de representaciones de números en diferentes bases (binaria, decimal, hexadecimal y polinomial), operaciones sus básicas en cada base (suma, resta, multiplicación y división). Estrictamente hablando, AES no es precisamente Rijndael (aunque en la práctica se los llama de manera indistinta) ya que Rijndael permite un mayor rango de tamaño de bloques y longitud de claves; AES tiene un tamaño de bloque fijo de 128 bits y tamaños de llave de 128, 192 ó 256 bits, mientras que Rijndael puede ser especificado por una clave que sea múltiplo de 32 bits, con un mínimo de 128 bits y un máximo de 256 bits. La mayoría de los cálculos del algoritmo AES se hacen en un campo finito determinado. AES opera en una matriz de 4×4 bytes, llamada state (algunas versiones de Rijndael con un tamaño de bloque mayor tienen columnas adicionales en el state). Ramió J. (2006). La estructura del algoritmo Rijndael está formada por un conjunto de “rondas”, entendiendo por rondas un conjunto de iteraciones de 4 funciones matemáticas diferentes e invertibles. El algoritmo representa el “estado” como una matriz rectangular de bytes, que posee 4 renglones y Nb columnas. Siendo el número de columnas Nb en función del tamaño del bloque y se puede calcular de acuerdo a: 32/bitsenutilizadobloquedeltamañoNb = (3.1) Por ejemplo la representación de una matriz de estado para un tamaño de 160 bits (Nb = 5), se muestra en la Tabla (3.1). Tabla 3.1 Matriz del texto plano de 4X5 bytes. a00 a01 a02 a03 a04 a10 a11 a12 a13 a14 a20 a21 a22 a23 a24 a30 a31 a32 a33 a34 Capítulo 3. Estándar Criptográfico alepadgo@gmail.com 22 IPN-ESIME La clave del sistema se representa con una estructura análoga a la del “estado”, es decir, se representa mediante una matriz rectangular de bytes de 4 renglones y Nk columnas. Siendo el número de columnas Nk en función del tamaño de la clave: 32/bitsenclaveladetamañoNk = (3.2) Por ejemplo la representación de una clave de 128 bits (Nk = 4), en forma de matriz rectangular se muestra en la Tabla (3.2). Tabla 3.2. Representación de la matriz clave de 4X4 byte. k00 k01 k02 k03 k04 k10 k11 k12 k13 k14 k20 k21 k22 k23 k24 k30 k31 k32 k33 k34 Una vez establecidos estos parámetros iniciales el bloque que se pretende cifrar y descifrar se traslada byte a byte sobre la matriz de estado, siguiendo la secuencia a00, a01, a20, a30, a01, …,a34; y análogamente los bytes de la clave se copian en la matriz de la clave siguiendo el mismo criterio, k00, k10, k20, k30, k01, …,k33. A partir de este momento la matriz de estado sufre 4 transformaciones por ronda (iteración), utilizándose en el proceso subclaves para cada ronda que se generan de la clave original elegida. Las 4 transformaciones que aplica el algoritmo a la matriz de estado por ronda son: • Función ByteSub: sustitución con propiedades óptimas de no linealidad. • Función ShiftRow: Permiten un alto nivel confusión de la información a lo largo de las diferentes rondas. • Función MixColumn: Permiten un alto nivel difusión de la información a lo largo de las diferentes rondas. • Función AddRoudKey: Permite aplicar a la matriz de estado una operación “or” exclusiva con la subclave correspondiente a cada ronda. El número de iteraciones o rondas de las 4 transformaciones sobre la información, o mejor dicho sobre la matriz de estado intermedio depende de la versión del algoritmo que se utilice. Los autores definen que para tamaños de bloques y claves entre 128 y 256 bits (con incrementos de 32 bits) el número de rondas Nr es determinado por la siguiente expresión: 6),max( += bkr NNN (3.3) Capítulo 3. Estándar Criptográfico alepadgo@gmail.com 23 IPN-ESIME Por ejemplo, para un algoritmo Rijndael de tamaño de clave y de bloque 128 bits, el número de rondas es 10. Se observa claramente que el número de vueltas o iteraciones del algoritmo dependen del tamaño de bloque y clave elegidos, Tabla (3.3). Tabla 3.3 Número de rondas para Rijndael en función de tamaños de clave y bloque: Clave/Bloque Nb = 4 (128 - bits) Nb = 6 (192 - bits) Nb = 8 (256 - bits) Nk = 4 (128 - bits) 10 12 14 Nk = 6 (192 - bits) 12 12 14 Nk = 8 (256 - bits) 14 14 14 En la Figura (3.1) se muestra el proceso de cifrado. Figura 3.1 Esquema descriptivo del algoritmo por rondas. A continuación se describirán cada una de las funciones que se emplean en el algoritmo. Capítulo 3. Estándar Criptográfico alepadgo@gmail.com 24 IPN-ESIME Función AddRoudKey En el paso AddRoundKey, la subclave se combina con el state (estado-actual). En cada ronda se obtiene una subclave de la clave principal, usando la iteración de la clave; cada subclave es del mismo tamaño del state. La subclave se agrega combinando cada byte del state con el correspondiente byte de la subclave usando la operación or-exclusiva. Para esto se necesita hacer la expansión de la clave dependiendo si es un AES – 128, 192 o 256. Figura (3.2). Figura 3.2 Esquema que describe la función AddRoundKey usando la operación or-exclusiva. En el paso AddRoundKey, cada byte del state se combina con un byte de la subclave usando la operación or-exclusiva (⊕). Cálculo de las Subclaves usando el esquema de claves de Rijndael La función de selección simplemente toma consecutivamente de la secuencia obtenida por la función de expansión de clave bytes que va asignando a cada subclave Ki, para formar bloques del mismo tamaño que la matriz de estado. Es decir, toma Nb*4 bytes para cada vuelta. La generaciónde las claves (expansión de la clave) para el proceso de descifrado se hace de forma idéntica al procesos de cifrado. La diferencia reside en la función de selección de la clave. En el proceso de descifrado se toman bytes de la lista de claves desde los valores finales hasta llegar a los iniciales, que es la propia clave del usuario. Es decir, la última clave que se utilizó para cifrar, será la primera que se utilizará para descifrar. La función de expansión de clave permite generar bytes útiles como subclaves a partir de la clave original K. Esta función de expansión se puede describir como un arreglo lineal, denominado W, de palabras de 4 bytes y con una longitud de Nb*(Nr+1). Las primeras Nk palabras de este arreglo contienen la clave de cifrado, ya que la clave del usuario se mapea tal cual al arreglo W, mientras que el resto de palabras se van generando a partir de estas primeras Nk palabras. Capítulo 3. Estándar Criptográfico alepadgo@gmail.com 25 IPN-ESIME Figura 3.3 Ejemplo de subclaves de expansión para Nb=6 y Nk=4. Se observa cómo la función de expansión de clave depende del valor Nk, ante este hecho los autores definieron dos versiones para esta función, una para Nk ≤ 6 y otra para Nk > 6, por motivos de seguridad. Se mapea directamente la clave del usuario al arreglo W entonces se mapean Nk palabras. El resto del funcionamiento permite generar bytes para subclaves, en este proceso entran en juego la función ByteSub que devuelve el resultado de aplicar la S-BOX de Rijndale a cada uno de los bytes de los 32 bits de la palabra que se le pasa como parámetro. La función “Rot” que rota una posición a la izquierda los bytes de la palabra, de tal forma que si se le pasa como parámetros la palabra de 4 bytes (a, b, c, d) devuelve (b, c, d, a). Y la función “Rcon” que genera una constante teniendo en cuenta que: Rcon(j) = (R(j), 0, 0, 0). Cada R(j) es el elemento ∈ GF(28) correspondiente al valor xj-1. Cuando Nk ≤ 6, para todo valor de “i” que no sea múltiplo de Nk, las palabras de subclaves se calculan como: )1()()( −⊕−= iWNiWiW k . Para todo valor de “i” que sea múltiplo de Nk se calculan como: )]/()])1([([)()( kk NiRconiWRotByteByteSubNiWiW ⊕−⊕−= . La variable “i” denota la posición dentro del arreglo W (i) que contiene los bytes de subclaves del sistema. Si por ejemplo se utiliza una clave de 128 bits (Nk =4) y un bloque de 128 bits (Nb =4) la longitud del arreglo W sería 44, (4*[10+1]). En las cuatro primeras posiciones del arreglo (0 a la 3) se copia la clave de usuario, el resto de posiciones, de la posición 4 a la 43, se rellenaría con valores calculados. En este caso la variable “i” tomaría los valores de 4 a 43. Para las posiciones del arreglo W(i) con valor de “i” 4, 8, 12, 16, 20, 24, 28, 32, 36, 40 (i múltiplo de Nk), la palabra de 4 bytes se calcularía tomando una palabra que se encuentra 4 posiciones antes que ella y realizando una operación or-exclusiva con una transformación de la palabra que se encuentra una posición antes. Para el resto de los valores de “i” la palabra correspondiente a W (i) se calcula realizando una operación or-exclusiva entre la palabra que se encuentra una posición antes que la posición en la que se encuentra actualmente. Este ejemplo permite observar el procedimiento que sigue el algoritmo para generar nuevos bytes de subclaves, apoyándose en palabras ya existentes en el arreglo W, ya sea palabras de la clave de usuario directamente o palabras generadas de esta. Capítulo 3. Estándar Criptográfico alepadgo@gmail.com 26 IPN-ESIME Para Nk > 6, el funcionamiento es igual que para Nk ≤ 6 salvo cuando el valor de la variable “i” satisface que “i mod Nk =4”, ver figura (3.4), en este caso las palabras de subclaves se calculan como: ])1[()()( −⊕−= iWByteSubNiWiW k (3.4) Figura 3.4 Esquema que describe la expansión de las subclave. Una vez conocido el funcionamiento de la función de expansión de clave, para finalizar con la explicación de la función un ejemplo real de generación de bytes de subclaves para un algoritmo Rijndael con clave de 128 bits. Se selecciona clave de usuario: Clave = 2b 7e 15 16 28 ae d2 a6 ab f7 15 88 09 cf 4f 3c (Nk =4) Se mapea a las 4 primeras posiciones del arreglo la clave del usuario, W[0]=2b 7e 15 16 W[1]=28 ae d2 a6 W[2]=ab f7 15 88 W[3]=09 cf 4f 3c A partir de este momento se empieza a generar bytes de subclaves. Calcular W[4]: i=4 (i múltiplo de Nk) temp = W[3]= 09 cf 4f 3c Se aplica la función Rot →temp = cf 4f 3c 09 Se aplica la función Byte Sub →(temp) = 8a 84 eb 01 Capítulo 3. Estándar Criptográfico alepadgo@gmail.com 27 IPN-ESIME Rcon[4/4]=Rcon[1] = [x0, {00}, {00}, {00}] = [{01}, {00}, {00}, {00}] Temp = Rcon[1] ⊕ temp = 8a 84 eb 01 ⊕ 01 00 00 00 = 8b 84 eb 01 W[4] = W[0] ⊕ temp = 2b 7e 1516 ⊕ 8b 84 eb 01 = a0 fa fe 17 Siguiendo todos los criterios descritos en esta función se podrían generar todos los bytes de subclaves necesarios para la versión del algoritmo con la que se trabajará. Función ByteSub En la fase de ByteSub, cada byte en el state es reemplazado con su entrada en una tabla de búsqueda fija de 8 bits, S; bij = S(aij). Figura (3.5). Figura 3.5 Esquema de la Función ByteSub para el intercambio de bits. En la etapa ByteSub, cada byte en la matriz es actualizado usando la caja-S de Rijndael de 8 bits. Esta operación provee la no linealidad en el cifrado. La caja-S utilizada proviene de la función inversa alrededor del GF(28), conocido por tener grandes propiedades de no linealidad. Para evitar ataques basados en simples propiedades algebraicas, la caja-S se construye por la combinación de la función inversa con una transformación afín invertible. La caja-S también se elige para evitar puntos estables (y es por lo tanto una permutación), y también cualesquiera puntos estables opuestos. La transformación ByteSub consiste en una sustitución no lineal que se aplica a cada byte de la matriz de estado (estado intermedio 1) de forma independiente, generando un nuevo byte. Esta transformación consiste en la sustitución de cada byte por el resultado de aplicarle la tabla de sustitución S-BOX. Esta tabla lógicamente es invertible y se construye mediante dos transformaciones. 1ª Transformación.- Cada byte es considerado como un elemento en GF(28) que genera el polinomio irreducible m(x)= x8+x4+x3+x+1, siendo sustituido por su inversa multiplicativa. El valor cero queda inalterado, ya que no tiene inversa. Capítulo 3. Estándar Criptográfico alepadgo@gmail.com 28 IPN-ESIME 2ª Transformación.- Al resultado de la 1ª transformación se le aplica la siguiente transformación afín en GF(28), siendo x0, x1, x2, x3, x4, x5, x6, y x7 los bits del byte resultante de la 1ª transformación, e y0, y1, y2, y3, y4, y5, y6 e y7 los bits del resultado final de la transformación ByteSub. Tabla 3.4 Transformación afínen GF(28). Por ejemplo, si el byte al cual se le aplica la función ByteSub es “A=11001011”, se debería calcular su inversa multiplicativa. Cada byte en Rijndael se representa como un polinomio a(x), calcular la inversa multiplicativa consiste en buscar un polinomio b(x) (que es único) que multiplicado por a(x) modulo m(x) es igual a 1, es decir: a (x) • b(x) mod x8+x4+x3+x+1 = 1 (3.5) El polinomio buscado en este caso es b(x)=x2 que tiene una representación binaria de “B=00000100”. Se dice entonces que B es la inversa en GF(28) de A. Una vez que se tiene el resultado de la primera transformación, se debe aplicarle la transformación afín definida: Tabla 3.5 Ejemplo de la transformación afín en GF(28). Se obtiene el valor final de “y=00011111”. Luego el byte “A=11001011” se convierte en y al aplicar la función ByteSub. Utilizando estas dos transformaciones para todos los valores posibles de entrada (256 valores ya que se trabaja con un byte) se calcula una tabla de sustitución denominada S-Box útil para el proceso de cifrado. Gracias a esta tabla aplicar la función ByteSub resulta trivial, consiste en dividir Capítulo 3. Estándar Criptográfico alepadgo@gmail.com 29 IPN-ESIME el byte de la matriz de estado en dos partes de 4 bits. Los 4 bits más significativos, denominados por x (toma valores de 0 a 15) actúan del renglón en la tabla y los 4 bits menos significativos de columna, denominados por “y” (toma valores de 0 a 15). El valor para ese renglón y columna en la tabla es resultado de aplicar S-Box a un byte. Siguiendo con el ejemplo anterior, si se tiene el byte “A=00011111” y se aplica la función ByteSub el resultado será (x=1100 [renglón c] y=1011 [columna b]) “y=0x1F” que en binario equivale a “y=00011111”, valor que es idéntico al calculado previamente. Tabla 3.6 S-Box para un byte genérico xy (hexadecimal). Para el proceso de descifrado es necesario calcular la función inversa de ByteSub. Esta función inversa consiste en calcular una tabla inversa a la utilizada en el proceso de cifrado. Tabla 3.7 Tabla inversa S-Box (hexadecimal). Capítulo 3. Estándar Criptográfico alepadgo@gmail.com 30 IPN-ESIME Función ShiftRow En el paso ShiftRows, los bytes en cada fila del state son rotados de manera cíclica hacia la izquierda. El número de lugares que cada byte es rotado difiere para cada fila. Figura (3.6). Figura 3.6 Esquema que describe la función ShiftRow para el desplazamiento de cada renglón. El paso ShiftRows opera en las filas del state; rota de manera cíclica los bytes en cada fila por un determinado offset. En AES, la primera fila queda en la misma posición. Cada byte de la segunda fila es rotado una posición a la izquierda. De manera similar, la tercera y cuarta filas son rotadas por los offsets de dos y tres respectivamente. De esta manera, cada columna del state resultante del paso ShiftRows está compuesta por bytes de cada columna del state inicial. (variantes de Rijndael con mayor tamaño de bloque tienen offsets distintos). Función MixColumns En el paso MixColumns, cada columna del state es multiplicada por un polinomio constante c(x). Figura (3.7). Figura 3.7 Esquema que describe la función MixColumns con multiplicación polinomial GF(28). En el paso MixColumns, los cuatro bytes de cada columna del state se combinan usando una transformación lineal invertible. La función MixColumns toma cuatro bytes como entrada y devuelve cuatro bytes, donde cada byte de entrada influye todas las salidas de cuatro bytes. Junto con Capítulo 3. Estándar Criptográfico alepadgo@gmail.com 31 IPN-ESIME ShiftRows, MixColumns implica difusión en el cifrado. Cada columna se trata como un polinomio GF(28) y luego se multiplica el módulo x4 + 1 con un polinomio fijo c(x). El paso MixColumns puede verse como una multiplicación matricial en el campo finito de Rijndael. 3.2 Modo de Operación CFB para Cifrado y Descifrado de datos La norma NIST SP800-38A, (2001) es una recomendación de confidencialidad del modo de operación de cinco algoritmos para criptografía simétrica por bloque, como el algoritmo que se empleará en este trabajo, el estándar avanzado de cifrado (AES). Los modos se pueden utilizar conjuntamente con cualquier algoritmo simétrico que cifra por bloques que ha sido aprobado por la NIST. Los cinco modos son: Código de Libro Electrónico (ECB), cifrado por encadenamiento de bloques (CBC), cifrado por retroalimentación (CFB), retroalimentación de la salida (OFB), y modo contador (CTR), pueden proporcionar confidencialidad de los datos. Esta recomendación asume que un algoritmo simétrico por bloques se ha elegido como el algoritmo estándar y que una clave secreta aleatoria K, se ha establecido entre todas las partes involucradas en la comunicación. La clave criptográfica regula el funcionamiento del algoritmo de cifrado por bloques y por consiguiente, regula el funcionamiento del modo. Las especificaciones de los algoritmos de cifrado por bloques y los modos operación son públicas, así que la seguridad del modo depende del secreto de la clave. Un modo de operación sobre un algoritmo de cifrado por bloques consiste en dos procesos que son contrarios, uno cifra y el otro descifra. El cifrado es la transformación de un mensaje, llamado texto-plano, en una forma ilegible, llamado el texto-cifrado; el desciframiento es la transformación que recupera el texto-plano a partir del texto-cifrado. Estos procesos son dos funciones que como parte de la opción del algoritmo de cifrado por bloques, una de las dos funciones se señala como la función de cifrado, CIPHK; y la otra función entonces se llama función inversa de cifrado, CIPHk-1. Las entradas y las salidas de ambas funciones se llaman los bloques de la entrada y los bloques de la salida. Los bloques de la entrada y de la salida del algoritmo de cifrado por bloques tienen la misma longitud en bits, llamado el tamaño de bloque, denotado por “b”. El objetivo de la implementación de este modo de operación CFB es convertir el algoritmo de cifrado y descifrado por bloques en un algoritmo que cifre y descifre por flujo de datos. Vectores de Inicialización La entrada a los procesos del cifrado del modo CFB, incluye además del texto-plano, un bloque de los datos llamado el Vector de Inicialización (IV). El VI utiliza en un paso inicial en el cifrado de un mensaje y en el desciframiento correspondiente del mensaje. Capítulo 3. Estándar Criptográfico alepadgo@gmail.com 32 IPN-ESIME El IV no necesita ser secreto, sin embargo, para los modos de CBC y de CFB, el IV para cualquier ejecución particular del proceso de cifrado debe ser imprevisible. Para el modo de OFB, IV es único y se debe utilizar para cada ejecución del proceso del cifrado. Modo de Operación de Cifrado por Retroalimentación El modo de cifrado por retroalimentación
Compartir