Universidad de Costa Rica Facultad de Ingeniería Escuela de Ingeniería Eléctrica



Documentos relacionados
CRIPTOGRAFÍA SIMÉTRICA Y ASIMÉTRICA

Semana 13: Encriptación. Cifrado simétrico

Métodos Encriptación. Tópicos en Sistemas de Computación Módulo de Seguridad

Introducción. Algoritmos

Tema 11 Introducción a la Criptografía

Redes de comunicaciones actuales permiten la conectividad de un gran número de usuarios. Explosión de servicios que necesitan la transmisión de datos

TEMA 2: Representación de la Información en las computadoras

3. Algoritmo DES (Data Encription Standard)

Figura 1. Símbolo que representa una ALU. El sentido y la funcionalidad de las señales de la ALU de la Figura 1 es el siguiente:


Naturaleza binaria. Conversión decimal a binario

Criptografía. Por. Daniel Vazart P.

UNIDADES DE ALMACENAMIENTO DE DATOS

CRIPTOGRAFIA. Qué es, usos y beneficios de su utilización. Universidad Nacional del Comahue

Descripción del algoritmo DES (Data Encryption Standard)

Práctica 5. Curso

Transformación de binario a decimal. Transformación de decimal a binario. ELECTRÓNICA DIGITAL

Julio César Mendoza T. Ingeniería de Sistemas Quito

Semana 14: Encriptación. Cifrado asimétrico

Como sabemos, en un Sistema de Comunicación de Datos, es de vital importancia

21/02/2012. Agenda. Unidad Central de Procesamiento (CPU)

Dra. Elsa Estévez Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur

x

18. Camino de datos y unidad de control

Los sistemas de numeración se clasifican en: posicionales y no posicionales.

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)

Técnicas de cifrado. Clave pública y clave privada:

Sistemas de Numeración Operaciones - Códigos

Preguntas y respuestas sobre el cifrado de la información personal. La guía para aprender a cifrar tu información

Arquitectura de seguridad OSI (ISO )

Introducción a la Firma Electrónica en MIDAS

La Unidad Procesadora.

Tema 2. La Información y su representación

Tema 4. Gestión de entrada/salida

Unidad de trabajo 2: INFORMÁTICA BÁSICA (primera parte)

❷ Aritmética Binaria Entera

Tema 1 Introducción. Arquitectura básica y Sistemas Operativos. Fundamentos de Informática

Ing. Cynthia Zúñiga Ramos

El tamaño, estructura, número de bloques y la cantidad y conectividad de las conexiones varian en las distintas arquitecturas.

Método simétrico con cifrado por bloques desarrollado por Counterpane Labs y presentado al concurso del NIST que buscaba un sustituto para DES (el

UNIDADES FUNCIONALES DEL ORDENADOR TEMA 3

Tema IV. Unidad aritmético lógica

Estructuras de Datos y Algoritmos Práctica I - Curso 2012/13

Rompiendo llaves RSA expĺıcitamente con OpenSSL

by Tim Tran:

Seguridad del Protocolo HTTP

Capítulo 1: Sistemas de representación numérica Introducción. Dpto. de ATC, Universidad de Sevilla - Página 1 de 8

Resumen de Requisitos Técnicos para incorporación de Organismos a la Plataforma Integrada de Servicios Electrónicos del Estado

Materia Introducción a la Informática

SERVICIOS DE RED E INTERNET TEMA 4: INSTALACIÓN Y ADMINISTRACIÓN DE SERVICIOS WEB

Sistemas Digitales Ingeniería Técnica en Informática de Sistemas Curso Aritmética binaria

INTRANET DE UNA EMPRESA RESUMEN DEL PROYECTO. PALABRAS CLAVE: Aplicación cliente-servidor, Intranet, Área reservada, Red INTRODUCCIÓN

Elementos requeridos para crearlos (ejemplo: el compilador)

Laboratorio de Diseño de Sistemas Digitales

LECCIÓN 8: CIRCUITOS Y ALGORITMOS DE MULTIPLICACIÓN DE ENTEROS

CIRCUITOS ARITMÉTICOS

UNIVERSIDAD TÉCNICA DEL NORTE

SISTEMAS DE NUMERACIÓN. Sistema decimal

En la actualidad ASCII es un código de 8 bits, también conocido como ASCII extendido, que aumenta su capacidad con 128 caracteres adicionales

Tema I. Sistemas Numéricos y Códigos Binarios

SEGURIDAD Y PROTECCION DE FICHEROS

Lección 12 Seguridad y criptografía. Universidad de Oviedo / Dpto. de Informática

CRIPTOGRAFIA DE CLAVE SECRETA. El emisor y el receptor conocen y usan la misma clave secreta para cifrar y descifrar mensajes.

Implementación Hardware del Estandar de Encriptación Avanzado (AES) en una FPGA

CAPÍTULO 3 Servidor de Modelo de Usuario

SISTEMAS NUMÉRICOS (SISTEMAS DE NUMERACIÓN)

INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA INGENIERIA EN COMUNICACIONES Y ELECTRÓNICA ACADEMIA DE COMPUTACIÓN

Matemática de redes Representación binaria de datos Bits y bytes

Clase 02: Representación de datos

INSTITUTO UNIVERSITARIO DE TECNOLOGÍA JOSE LEONARDO CHIRINO PUNTO FIJO EDO-FALCON CATEDRA: ARQUITECTURA DEL COMPUTADOR PROFESOR: ING.

ARREGLOS DEFINICION GENERAL DE ARREGLO

K2BIM Plan de Investigación - Comparación de herramientas para la parametrización asistida de ERP Versión 1.2

Unidad 1 Sistemas de numeración Binario, Decimal, Hexadecimal

Resumen del trabajo sobre DNSSEC

DE VIDA PARA EL DESARROLLO DE SISTEMAS

Representación de números en binario

Tema 11: Sistemas combinacionales

Bases de la Firma Electrónica: Criptografía

ANEXO 2: REPRESENTACION DE LA INFORMACION EN LOS COMPUTADORES

Introducción a la Seguridad en Sistemas Informáticos

Técnicas de Programación Hardware: CAD para FPGAs y CPLDs

PRUEBAS DE SOFTWARE TECNICAS DE PRUEBA DE SOFTWARE

Tema 4: Sistemas de Numeración. Codificación Binaria. Escuela Politécnica Superior Ingeniería Informática Universidad Autónoma de Madrid

SISTEMAS NUMERICOS CAMILO ANDREY NEIRA IBAÑEZ UNINSANGIL INTRODUCTORIO A LA INGENIERIA LOGICA Y PROGRAMACION

Capitulo I. Introducción

Computación I Representación Interna Curso 2011

1. Representación de la información en los sistemas digitales

Representación de la Información

SUMADOR BINARIO. Instituto Internacional de Investigación de Tecnología Educativa

INTRODUCCION. Ing. Camilo Zapata Universidad de Antioquia

No se requiere que los discos sean del mismo tamaño ya que el objetivo es solamente adjuntar discos.

Seguridad en la transmisión de Datos

1. Informática e información. 2. Sistemas de numeración. 3. Sistema binario, operaciones aritméticas en binario, 4. Sistemas octal y hexadecimal. 5.

Seminario Internet y Buscadores NAVEGACIÓN SEGURA Y HERRAMIENTAS DE MOTORES DE BUSQUEDA

EL LOGRO DE SU FORMACIÓN DEPENDE TAMBIÉN DE USTED INSTRUCTOR: ING. JULIO CÉSAR BEDOYA PINO ELECTRÓNICA DIGITAL 2014

Transport Layer Security (TLS) Acerca de TLS

Modificación y parametrización del modulo de Solicitudes (Request) en el ERP/CRM Compiere.

1. SISTEMAS DIGITALES

Unidad Didáctica. Códigos Binarios

DISCOS RAID. Se considera que todos los discos físicos tienen la misma capacidad, y de no ser así, en el que sea mayor se desperdicia la diferencia.

Transcripción:

Universidad de Costa Rica Facultad de Ingeniería Escuela de Ingeniería Eléctrica IE 0502 Proyecto Eléctrico ESTUDIO Y EVALUACIÓN DE ALGORITMOS DE ENCRIPTACIÓN PARA LA PROTECCIÓN DE DATOS PARA SU IMPLEMENTACIÓN USANDO LENGUAJES DE DESCRIPCIÓN DE HARDWARE Por: LAURA VARGAS VARGAS Ciudad Universitaria Rodrigo Facio Enero del 2010

ESTUDIO Y EVALUACIÓN DE ALGORITMOS DE ENCRIPTACIÓN PARA LA PROTECCIÓN DE DATOS PARA SU IMPLEMENTACIÓN USANDO LENGUAJES DE DESCRIPCIÓN DE HARDWARE Por: LAURA VARGAS VARGAS Sometido a la Escuela de Ingeniería Eléctrica de la Facultad de Ingeniería de la Universidad de Costa Rica como requisito parcial para optar por el grado de: BACHILLER EN INGENIERÍA ELÉCTRICA Aprobado por el Tribunal: Ing. Esteban Ortiz Cubero Profesor Guía Ing. Gerardo Castro Profesor lector Ing. Roberto Rodríguez Profesor lector ii

RECONOCIMIENTOS A mi profesor Esteban Ortiz, por su ayuda constante durante todo el semestre, ya que en el proceso de aprizaje es realmente indispensable. iii

ÍNDICE GENERAL ÍNDICE DE FIGURAS... vi ÍNDICE DE TABLAS... viii NOMENCLATURA... ix RESUMEN... x CAPÍTULO 1: Introducción... 1 1.1. Objetivos... 2 1.1.1 Objetivo general... 2 1.1.2 Objetivos específicos... 2 1.2 Metodología... 3 CAPÍTULO 2: Desarrollo teórico... 5 2.1. Criptografía... 5 2.2. Historia de la criptografía... 5 2.2.1 Criptoanálisis clásico... 6 2.2.2 Criptografía moderna... 7 2.3. Aplicaciones de la criptografía... 7 2.4. Procesos matemáticos... 8 2.4.1 Hash... 8 2.4.2 Criptografía simétrica... 8 2.4.3 Criptografía asimétrica... 9 2.5. FPGA... 11 CAPÍTULO 3: Algoritmo de cifrado de datos AES... 16 3.1. Estructura de AES... 17 3.1.1 AddRoundKey... 18 3.1.2 ByteSub... 18 3.1.3 ShiftRow... 20 3.1.4 MixColumns... 20 3.1.5 KeySchedule... 20 3.2. Descifrado... 20 3.3. SubClaves... 22 3.4. Eficiencia AES... 23 3.5. Seguridad de AES... 24 3.6. Expansión y Aplicaciones... 25 CAPÍTULO 4: Algoritmo de cifrado RSA... 26 iv

4.1. Estructura RSA... 26 4.2. Eficiencia de RSA... 27 4.3. Seguridad de RSA... 27 4.4. Expansión y Aplicaciones de RSA... 28 CAPÍTULO 5: Algoritmo de cifrado DES... 28 5.1. Estructura de DES... 29 5.1.1. Función F... 30 5.1.2. Generación de claves... 31 5.2. Eficiencia de DES... 31 5.3. Seguridad de DES... 31 5.4. Expansión y aplicaciones de DES... 32 CAPÍTULO 6: Comparación de los algoritmos AES, DES y RSA... 32 CAPÍTULO 7: Algoritmo de cifrado propuesto... 36 7.1. Clave... 37 7.2. Arquitectura general... 37 7.3. Sensado... 40 7.4. ControladorIn-Mem... 45 7.5. ControladorALU... 50 7.5.1. DecodKey... 54 7.5.2. ControlKey... 56 7.6. ALU... 60 CAPÍTULO 8: Síntesis y simulación... 63 8.1. Síntesis... 63 8.2. Simulación... 66 CAPÍTULO 9: Conclusiones y recomaciones... 70 BIBLIOGRAFÍA... 73 ANEXOS... 74 A. código del modelo conductual del cifrador... 74 v

ÍNDICE DE FIGURAS Figura 1.1 Arquitectura básica de un FPGA... 12 Figura 3.1. Algoritmo AES [4]... 18 Figura 3.2. Matriz S-Box [5]... 19 Figura3.3. función ShiftRow [5]... 20 Figura3.4. Algoritmo de descifrado [5]... 21 Figura 3.5. S-Box inversa [5]... 22 Figura5.1. Algoritmo DES [9]... 30 Figura 7.1. Descripción de bits de la clave... 37 Figura 7.2. Señales de entrada y salida... 38 Figura 7.3. Arquitectura del cifrador... 39 Figura 7.4. Módulo de Sensado... 40 Figura 7.5 (a)error100 (b)error 001... 42 Figura 7.6. (a)error 011 (b) Error 010... 43 Figura 7.7 Error 101... 43 Figura 7.8 diagrama SM del módulo Sensado... 45 Figura 7.9 Módulo ControlInMem... 46 Figura 7.10 Diagrama SM de ControlInMem... 49 Figura 7.11 Módulo Controlador ALU... 50 Figura 7.12 Diagrama SM del módulo Controlador ALU... 54 Figura7.13 Modulo DecodKey... 55 Figura 7.14 Diagrama SM del DecodKey... 56 Figura 7.15 Módulo ControlKey... 57 Figura 7.16 Diagrama SM del ControlKey... 59 Figura7.17 Módulo ALU... 60 Figura 7.18 Diagrama SM de la ALU... 62 Figura 8.1 Señales asíncronas... 64 Figura 8.2 Resultados de Síntesis... 64 vi

Figura 8.3 Tiempo de operación... 65 Figura 8.4 Esquemático del Cifrador... 65 Figura 8.5 Señales primera parte del cifrado... 67 Figura 8.6 Señales segunda parte del cifrado... 67 Figura 8.7 Señales tercera parte del cifrado... 68 Figura 8.8 Señales primera parte del descifrado... 68 Figura 8.9 Señales segunda parte del descifrado... 69 Figura 8.10 Señales tercera parte del descifrado... 69 vii

ÍNDICE DE TABLAS Tabla 2.1 entidades sintetizables en verilog... 14 Tabla 2.2 Celdas de la librería Virtex que maneja Icarus Verilog... 15 Tabla 6.1 Comparación de algoritmos... 35 Tabla 7.1 descripción de señales del cifrador... 38 Tabla 7.2 descripción de señales del Sensado... 41 Tabla 7.3 Descripción de señales de ControladorInMem... 48 Tabla 7.4 Descripción de señales del Controlador ALU... 51 Tabla 7.5 Descripción de señales del DecodKey... 55 Tabla 7.6 Descripción de señales del ControlKey... 57 Tabla 7.7 Descripción de señales de la ALU... 61 viii

NOMENCLATURA XX A K Nr Ki Descripción del símbolo Matriz del bloque inicial Clave Número de rondas Subclaves ix

RESUMEN En este trabajo se estudiaron 3 algoritmos de cifrado de datos: RSA, DES y AES. Se detalló su arquitectura, se hizo un pequeño estudio de la eficiencia con respecto a la idoneidad para la implementación en bajo nivel de cada uno, también se investigó acerca de la seguridad, la expansión y las aplicaciones de cada algoritmo. Por aparte se hizo un estudio más detallado de cada algoritmo con respecto a facilidad de implementación en una FPGA y se compararon, dando como resultado que el algoritmo menos complejo y que utiliza claves y bloque más pequeños, hace más realizable su implementación. Al estudiar y evaluar algoritmos de cifrado de datos que se utilizan en el mercado, y tenio en cuenta los elementos que los hacen fácilmente implementable, se propuso un algoritmo de cifrado de datos, que consta de una clave de 16 bits y bloques de 32 bits, los cuales son cifrados, al pasar por 3 operaciones invertibles. Se creó un modelo sintetizable de este algoritmo utilizando el lenguaje de descripción de hardware Verilog, se sintetizó utilizando la herramienta XILINX ISE 10.1, y se simuló utilizando ModelSim PE Student Edition 6.5a. x

1 CAPÍTULO 1: Introducción Desde hace mucho tiempo se han utilizado técnicas para el cifrado de mensajes, las primeras civilizaciones como los romanos y los griegos las utilizaron para ocultar mensajes en tiempos de guerra, y así si interceptaban al emisario no correrían el riesgo de que el mensaje fuera decodificado. Durante la segunda guerra mundial hubo un avance notable en este campo gracias a las máquinas de cálculo, los alemanes desarrollaron un máquina de cifrado llamada Enigma que consistía en una serie de rotores que lograba automatizar los cálculos necesarios para realizar las operaciones de cifrado y descifrado de mensajes. Todo el desarrollo y evolución de la criptografía van de la mano del criptoanálisis, ya que conforme se desarrollan sistemas de codificado y decodificado más seguros, también se estudia la manera de decodificar mensajes tenio muy poca información del algoritmo de cifrado y de la clave, con objeto de recuperar la información original. Muchos algoritmos se han creado con el fin de la protección de datos, utilizando desde una simple sustitución de letras, hasta criptografía asimétrica que implica resolver problemas a partir de matemática pura. Muchos de estos algoritmos también han fracasado por su debilidad ante ataques que preten descifrar el algoritmo utilizado o decodificar los datos. Por lo que para crear un sistema criptográfico seguro es necesario tomar en cuenta los avances y descubrimientos del criptoanálisis. Actualmente la criptografía no solo se utiliza para fines bélicos y es de gran importancia en otros campos como en la firma digital que sirve para verificar que un mensaje realmente viene del remitente exigido.

2 Este proyecto se enfoca en el estudio de 3 métodos criptográficos utilizados para la protección de datos y evaluar su difusión en la industria, su desempeño, seguridad, nivel de complejidad y uso de recursos para ver la factibilidad de implementarlos en un futuro, en un lenguaje de descripción de hardware. Al hablar de una implementación de algún algoritmo criptográfico en FPGA, muchos de estos van a requerir más recursos de lo que el FPGA puede brindar, por lo que a partir de los algoritmos estudiados se propondrá uno que se pueda implementar y se realizará una macro celda de cifrado de datos en el lenguaje de descripción de hardware Verilog. 1.1. Objetivos 1.1.1 Objetivo general Estudiar los métodos existentes de cifrado de datos y evaluar su idoneidad para la implementación en bajo nivel utilizando lenguajes de descripción de hardware. 1.1.2 Objetivos específicos Estudiar al menos 3 de los principales métodos en la industria utilizados para el cifrado de datos y la protección de información confidencial y evaluarlos según su desempeño, uso de recursos, nivel de difusión en la industria, complejidad y otros parámetros pertinentes.

3 Evaluar la idoneidad de los distintos algoritmos para su implementación futura en hardware, utilizando un FPGA y el lenguaje de descripción de hardware Verilog. Proponer el mejor algoritmo a utilizar para una macro celda de cifrado de datos, ya sea entre los algoritmos estudiados, o proponio un nuevo algoritmo. 1.2. Metodología Para el desarrollo de este proyecto, la primera parte requiere de la investigación teórica, por lo que se procede a la búsqueda de toda la información que sea de ayuda para llevar a cabo el proyecto, tanto datos puros que ayuden directamente, como todo tipo de información anexa que permita adquirir un alto grado de comprensión sobre los temas en estudio. Dado el carácter de investigación del proyecto se tomará como fuente de información principal Internet y la información suministrada por los profesores, acerca de los conceptos generales del tema de criptografía, su uso en mecanismos de seguridad y para la protección de información. Al tener claro los conceptos fundamentales y apropiados, se procede a selección y a la investigación más específica y detallada de 3 métodos utilizados para cifrado, su difusión en la industria, el desempeño y otros parámetros que los caractericen, con el fin de explicarlos de forma clara y de evaluar su idoneidad y complejidad para la implementación en el lenguaje de descripción de hardware Verilog. Una vez que se tengan los conocimientos suficientes acerca de criptografía y de métodos de cifrado, sus pros y contras, el siguiente paso en este proyecto consiste en el diseño y la

implementación de un algoritmo de cifrado en bajo nivel utilizando el lenguaje de descripción de hardware Verilog, para lograr la síntesis del código propuesto. 4

5 CAPÍTULO 2: Desarrollo teórico 2.1. Criptografía La criptografía es la ciencia que se ocupa de técnicas para cifrar y descifrar información, para que solo las personas a las que va dirigida la información tengan acceso a ella. El procedimiento que se utiliza para cifrar datos se efectúa por medio de un algoritmo, que se le puede considerar una función matemática. Por lo que, un algoritmo de cifrado es una fórmula para hacer de la información datos no comprensibles, usando un código y una o más claves. El mensaje que tiene que ser resguardado (denominado texto plano) se transforma mediante la función, y a la salida del proceso después de utilizar la clave se obtiene el texto original. 2.2. Historia de la criptografía El primer sistema criptográfico documentado fue un sistema basado en la posición de las letras en una tabla, fue escrito por Polibio un historiador griego. Otro de los sistemas que utilizaron los griegos fue la Escítala Espartana, que consistía en un cilindro que servía de clave y en el que se enrollaba el mensaje. Los Romanos tenían también un método criptográfico actualmente conocido como César. Blaise de Vigenère escribió un tratado sobre la escritura secreta convirtiéndose en uno de los criptógrafos más importantes del siglo XVI. A partir del siglo XVII hasta el siglo XIX los monarcas aumentaron su interés por la criptografía. Durante la segunda guerra mundial la criptografía tuvo grandes avances, en especial por las máquinas de cálculo. Los nazis utilizaron máquinas de cifrado para lograr comunicaciones más seguras.

6 Esta máquina se llamó Enigma la cual consistía de una serie de rotores, los que ayudaban a calcular las operaciones para cifrar o descifrar el mensaje. Tras la culminación de la guerra, se ingresa a una etapa de gran desarrollo teórico, sio Claude Shannon uno de los personajes más importantes. Luego con el gran desarrollo de las computadoras los métodos y las técnicas cambiaron drásticamente, llegando a convertirse en algoritmos muy complejos. A lo largo de la historia el criptoanálisis ha progresado ligado a la criptografía y se ha dividido en 2 tipos, el criptoanálisis clásico y el moderno. 2.2.1 Criptoanálisis clásico Uno de los elementos más importantes en el criptoanálisis clásico es el análisis de frecuencias. En todas las lenguas conocidas, ciertas letras del alfabeto aparecen más frecuentemente que otras; por ejemplo, en español, las vocales son muy frecuentes, ocupando alrededor del 45% del texto, sio la E y la A las que aparecen en más ocasiones, mientras que la frecuencia sumada de F, Z, J, X, W y K no alcanza el 2%. Igualmente, se pueden reunir estadísticas de aparición de pares o tríos de letras. El análisis de frecuencias revelará el contenido original si el cifrado utilizado no es capaz de ocultar estas estadísticas. Por ejemplo, en un cifrado de sustitución simple (en el que cada letra es simplemente substituida por otra), la letra más frecuente en el texto cifrado sería un candidato probable para representar la letra E. [3] La criptografía clásica se basa en operaciones básicas:

7 Sustitución: es el cambio de significado de los elementos básicos del mensaje, o sea, las letras, los dígitos o los símbolos Trasposición: es una reordenación de los elementos; la gran mayoría de las cifras clásicas son combinaciones de estas y la anterior operación básica. 2.2.2 Criptografía moderna La criptografía moderna comienza con Claude Shannon, quien se considera el padre de la criptografía matemática, ha publicado varios libros que se han convertido en la base teórica de la criptología y criptografía. La Criptografía moderna se basa en factores como la velocidad de cálculo y la matemática que permite encontrar y establecer sistemas criptográficos más seguros. Se divide en 3 tipos: los de clave simétrica, los de clave pública y hash. 2.3. Aplicaciones de la criptografía La criptografía ofrece seguridad en medios de comunicación, ya que permite establecer canales seguros sobre redes de computadoras sin perder la velocidad de transferencia, se ha reducido los riesgos de fraudes y se ha garantizado que las operaciones no sean espiadas. La identificación y autenticación es otra aplicación de la criptografía, actualmente uno de los más extidos usos de las técnicas y métodos que proporciona la criptografía es la autenticación de información digital (también llamada firma digital), la cual se utiliza para identificar un individuo.

8 También la criptografía ofrece la certificación de esquemas mediante el cual una entidad certificadora valida la identidad de los usuarios. 2.4. Procesos matemáticos Para cifrar un dato se pueden utilizar tres procesos matemáticos: 2.4.1 Hash Hash son algoritmos matemáticos que generan una representación numérica única y compacta de un cierto dato. Este tipo de algoritmos se distinguen por que el valor original se modifica a través de la implementación del algoritmo y no existe manera para hacer el proceso de regreso, es decir que del valor modificado pueda regresar al valor original. Los algoritmos Hash producen valores de 128 bits o más, lo que hace una combinación mayor a los mensajes diferentes que se pueden intercambiar en todo el mundo. Lo que hace un hash es comprimir el documento en un único bloque de longitud fija, bloque cuyo contenido es ilegible y no tiene ningún sentido real. Algunos algoritmos que utilizan este método son PGP (Pretty good Privacy), SHA (Secure Hash Algorithm), MD5 (Message Digest Algorithm), RIPEMD-160 2.4.2 Criptografía simétrica También llamado de clave simétrica o de clave privada. En este tipo de cifrado se utiliza una misma clave para el cifrado y el descifrado, en este tipo de criptografía la seguridad reside en la clave ya que el algoritmo de cifrado es público. Por lo que al transmitir la clave debe de hacerse de una forma segura, de otro modo no será eficiente el

9 sistema de seguridad. En la actualidad, las computadoras pueden descifrar claves con mucha rapidez, y ésta es la razón por la cual el tamaño de la clave es importante en los sistemas de cifrado modernos. Estos algoritmos se basan en la transposición y la permutación. Algunos ejemplos de algoritmos simétricos son 3DES, AES, Blowfish e IDEA. La desventaja más grande de este sistema es el intercambio de la clave, ya que es difícil encontrar el canal de comunicación adecuado. 2.4.3 Criptografía asimétrica Conocida también como de clave pública. Este método utiliza una clave para cifrar y otra para descifrar. Las 2 claves son dadas por la persona a la que se le envía el mensaje. Una clave se le entrega a cualquier persona y es la clave pública y la otra clave es la del propietario y nadie más debería tener acceso a ella. Una vez cifrado con la clave pública solo podrá ser descifrado por la clave privada. Se logra más confiabilidad ya que no se requiere del intercambio de claves como en los sistemas simétricos, solo se ocupa antes de la transmisión conocer la clave pública del destinatario. El tamaño de la clave es una medida de seguridad, aunque no se puede comparar el tamaño de la clave del cifrado simétrico con el cifrado asimétrico para medir la seguridad. Mientras 128 bits son suficientes para cifrados simétricos, dada la tecnología de factorización de hoy en día, se recomia el uso de claves públicas de 1024 bits para la mayoría de los casos.

10 Algunas desventajas de este cifrado es que para una misma longitud de clave y mensaje se ocupa más tiempo de proceso, las claves deben ser más grandes que las de cifrado simétrico y el mensaje cifrado ocupa mayor espacio que el original. Algunos algoritmos que utilizan este método son: Diffie-Hellman, RSA, DSA, ElGamal y la Criptografía de curva elíptica. A partir de estos algoritmos se crean protocolos, algunos de ellos bastante conocidos, que se presentan abajo Domain Name Server Security (DNSSEC): es el protocolo para servicios de distribución de nombres seguros. Generic Security Services API (GSSAPI): GSSAPI provee una interfase de autenticación, intercambio de claves. Secure Socket Layer (SSL) / Transport Layer Security (TLS): SSL es uno de los dos protocolos para conexiones WWW seguras. La seguridad WWW se ha vuelto importante con el incremento de información sensible, como números de tarjeta de crédito. Secure Hypertext Transfer Protocol (SHTTP): Protocolo de transferencia de Hipertexto seguro): el protocolo de transferencia segura de hipertexto es otro que provee mas seguridad a las transacciones WWW.

11 IEEE P1363: Especificaciones sobre el estándar criptográfico de llave pública: es un estándar criptográfico de clave pública. Consiste de varios algoritmos de llave pública para encripción y firma digital. Secure Shell (Shell Seguro): el protocolo SSH versión 2 es desarrollado por el Grupo de trabajo SecSh de la IETF. Es un protocolo muy versátil para las necesidades de Internet. A parte de analizar los conceptos que engloban la criptografía, los algoritmos criptográficos y los procesos matemáticos que se utilizan, este proyecto prete evaluar la facilidad y la flexibilidad de los algoritmos más adelante estudiados para implementarlos en hardware utilizando un FPGA, por lo que se introducirán los conceptos relevantes sobre FPGA y conceptos relevantes para comprer la síntesis de un programa en verilog. 2.5. FPGA La arquitectura de un FPGA (Field Programmable Gate Array) consiste en arreglos de varias celdas lógicas las cuales se comunican unas con otras mediante canales de conexión bidimensionales, como se muestra en la figura 2.1

12 Figura 2.1 Arquitectura básica de un FPGA La estructura de las celdas lógicas y las formas en que estas pueden ser interconectadas, tanto salidas como entradas de la celda, varían de acuerdo al fabricante. Cada FPGA tienen una gran cantidad de celdas lógicas y es posible implementar grandes funciones utilizando varias celdas lógicas en cascada. Para realizar la lógica de interconexión, se desarrollan diferentes métodos, los métodos más importantes son: Antifuse, donde se utilizan sistemas que funcionan de manera opuesta a un fusible normal (generando un corto al programarse y un OL si no se programa), este esquema de síntesis es un poco limitado dado que sólo puede utilizarse una vez al igual que al romper un fusible. SRAM, son celdas utilizadas como generadoras de funciones que simulan la lógica combinacional y controlan las interconexiones lógicas y los multiplexores del sistema. Celdas Lógicas

13 La estructura de las celdas lógicas se ve fuertemente influida por la tecnología utilizada para fabricar el FPGA. Un FPGA que tiene una gran cantidad de canales de interconexión tie a tener pequeñas celdas lógicas con muchas entradas y salidas en comparación con el número de compuertas que tiene la celda, este tipo de FPGAs generalmente utilizan tecnología ANTIFUSE. Un FPGA que tiene una estructura pequeña en canales de interconexión tie a tener grandes celdas lógicas con pocas entradas y salidas en comparación con el número de compuertas que hay en la celda. Este tipo de FPGA generalmente está hecho con tecnología SRAM. Una arquitectura con celdas lógicas pequeñas nos permite utilizar totalmente los recursos del dispositivo. Sin embargo, si las celdas lógicas son demasiado pequeñas tremos que utilizar un gran número de estas en cascada para poder implementar funciones booleanas grandes, lo cual agrega un tiempo de retardo en la función implementada. Cuando el tamaño de la celda lógica es grande sucede lo contrario. Es posible utilizar un gran número de compuertas por lo que podemos implementar funciones booleanas de varios términos con pocas celdas lógicas. No afecta la frecuencia máxima de trabajo, sio el mismo tiempo de retardo para todas. La tecnología SRAM y ANTIFUSE son comúnmente utilizadas por la mayoría de los fabricantes. La tecnología SRAM es utilizada por Altera, Lucent Technologies, Atmel,

14 Xilinx y otros. La tecnología ANTIFUSE es utilizada por Cypress, Actel, QuickLogic, y Xilinx. 2.5.1 Normas para obtener un diseño sintetizable en Verilog El sistema Icarus Verilog cuenta con un sistema de síntesis digital, para esto hace uso de diferentes bibliotecas que lo ayudan a separar a las ecuaciones y sistemas digitales en compuertas discretas. En la tabla 2.1 se resume lo que Icarus Verilog sintetiza y lo que no. Tabla 2.1 entidades sintetizables en verilog Procesos Operadores binarios aritméticos Operadores relacionales Operadores lógicos Operadores lógicos de bit Concatenaciones {,} Desplazamiento Estructuras de control Asignaciones procedurales Eventos Operadores binarios aritméticos Condicional Compuertas lógicas Utilización de parámetros. Utilización de variables tipo Estructuras sintetizables always suma(+), resta (-) multiplicación (*), división (/), modulo (%) >=, <=,!=, == >,< y de reducción: ~, ~&, ~^, ^~, &,, ^, ~&,!,&&, ~, ~^, ^~ ~, &,, ^ izquierda o derecha, con adición de ceros if-else y case (con anidaciones) no bloqueantes de nivel y de flanco positivo suma (+) y resta (-)?: and, or, xor, nor, xnor, buf, not reg, wire, input, output, inout No sintetizables initial for, while, repeat, wait bloqueantes de flanco negativo nand, bufif, notif Task y Function

15 Se utilizará la arquitectura Virtex que es la utilizada por el sistema Icarus Verilog para sintetizar en sistemas Spartan 3E. Esta librería cuenta con las celdas de la tarjeta de desarrollo y por tanto logra traducir el diseño de la mejor manera para el desarrollo en la FPGA. Virtex, En la tabla 2.2 se da una lista de las celdas que se implementan en la arquitectura Tabla 2.2 Celdas de la librería Virtex que maneja Icarus Verilog Celda BUFE BUFT IBUF OBUF IPAD OPAD IOPAD BUF INV FDCE FDRE FDCPE Descripción Buffer tri-estado con habilitador activo en alto Buffer tri-estado con habilitador activo en bajo Buffer de entrada de una sola salida, con selección de estándar de Entrada/Salida Buffer de salida de una sola salida Puerto de entrada Puerto de salida Puerto de entrada-salida Buffer de propósito general Inversor simple Flip-flop D de flanco positivo con habilitador de reloj y reinicio asincrónico Flip-flop D de flanco positivo con habilitador de reloj y reinicio sincrónico Flip-flop D de flanco positivo con habilitador de reloj, inicio y reinicio asincrónico

16 VCC GND LUT2,3,4 XORCY MUXCY_L MUXF5,6 MUXCY BUFG * Conexión a fuente Conexión a tierra Tablas de búsqueda de salida general de 2,3,4 bits y salida general XOR con lógica de acarreo con salida general Multiplexores 2 a 1 con lógica de acarreo y salida local Multiplexores 2 a 1 con salida general Multiplexores 2 a 1 con lógica de acarreo y salida general Buffer global de reloj MULT_AND* AND de multiplicación rápida CAPÍTULO 3: Algoritmo de cifrado de datos AES En este y los siguientes capítulos se estudiará y evaluarán 3 de los algoritmos utilizados para el cifrado de datos. El AES (Advanced Encryption Standard) es uno de los algoritmos de cifrado más utilizados hoy en día por su seguridad, eficiencia y facilidad de implementación, aparte de que es un algoritmo público. De hecho es el estándar de cifrado elegido por el Instituto Nacional de Estándares y Tecnología de EEUU (NIST) como estándar de proceso de información federal. AES está basado en el algoritmo criptográfico Rinjdael y es un algoritmo de cifrado en bloque simétrico, o sea, que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones en otro texto cifrado de la misma longitud.

17 3.1. Estructura de AES AES trabaja con bloques de datos de 128 bits y longitudes de claves de 128, 192 o 256 bits y tiene 10, 12 o 14 vueltas o rondas respectivamente, y cada vuelta es un conjunto de iteraciones de 4 funciones matemáticas invertibles y diferentes, la última vuelta consiste de 3 operaciones básicas añadio una ronda inicial. Las transformaciones básicas son AddRoundKey, SubByte, ShiftRows, MixColumns y Key Schedule, que se explican más adelante, y a parte se tienen el programa de claves. La información generada por cada función se conoce como Estado, y se representa como una matriz A de bytes de 4 filas y Nb columnas, donde Nb depe del tamaño del bloque. tamañodelbloque Nb = bits (3.1-1) 32 La clave se representa con una matriz rectangular de 4 filas y Nk columnas. Nk tamañodeclave = bits (3.1-2) 32 El número de vueltas es expresado por Nr = máx( Nk Nb) + 6 (3.1-3) Descripción de las funciones

18 Figura 3.1. Algoritmo AES [4] 3.1.1 AddRoundKey Es una suma XOR entre el texto plano o mensaje a cifrar y la clave. La XOR realizada es con las matrices de entrada y la de la subclave correspondiente byte a byte. 3.1.2 ByteSub ByteSub es una sustitución no lineal, que actúa indepientemente en cada byte de la matriz A. Cada byte es invertido y posteriormente se le aplica una transformación lineal,

19 donde el 0 no se cambia, y se representan en hexadecimal. La transformación completa se puede realizar mediante una sola sustitución en la matriz llamada S-Box. Lo que se hace es tomar el byte en hexadecimal de la matriz de entrada y ese número se transforma en los índices de la matriz. Figura 3.2. Matriz S-Box [5] Así por ejemplo si se aplica esta función a 7b, de la matriz anterior se tiene que la fila es 7 y la columna b, por lo que el resultado sería 21.

20 3.1.3 ShiftRow La matriz A recibe un corrimiento circular a la izquierda en sus filas. Así la primera fila no se corre, la segunda se corre un byte, 2 bytes la tercera fila y 3 la cuarta. 3.1.4 MixColumns Figura3.3. función ShiftRow [5] Cada columna de la matriz A se multiplica por una columna constante. Las columnas se tratan como polinomios. 3.1.5 KeySchedule AES está definido para permitir solo bloques de 128 bits y las longitudes de las claves son de 128, 192 y 256 bits. Aunque lo que garantiza la seguridad del algoritmo hasta el año 2030 son 128 bits. Esta función es una extensión de la clave K, esta se expande a una matriz de 4 filas y Nb(Nr+1) columnas. 3.2. Descifrado Es el proceso inverso del cifrado, solo que las subclaves tienen un papel más importante, y se utilizan desde la última generada. Lo que se hace es invertir el orden de las funciones y realizar las transformaciones inversas.

21 Figura3.4. Algoritmo de descifrado [5] Para la función AddRoundKey lo que cambia es que se empieza por la última ronda. En la función ByteSub se realiza lo opuesto, para ello se usa otra S-Box con valores inversos.

22 Figura 3.5. S-Box inversa [5] En la función ShiftRow inversa, las filas se desplazaran hacia la derecha el mismo número de posiciones. Y por último la función inversa de MixColumns, que es la multiplicación inversa sobre los bytes de la misma columna. 3.3. SubClaves AES posee una clave elegida por el usuario y de esta se derivan diferentes subclaves Ki, esta forma de algoritmo se basa en la seguridad ya que depe únicamente de la clave. Las funciones de las cuales se derivan las subclaves (RoundKey) son de expansión y de selección.

23 El número de bits para las subclaves es igual al tamaño del bloque multiplicado por n + 1. Así por ejemplo para un bloque de 128 bits y 10 vueltas, se ocupa (128*11)=1408 bits de subclaves. Para la función de selección toma la secuencia conseguida de la función de expansión y las asigna a cada subclave Ki. La función de expansión genera bytes como subclaves partio de la clave de usuario K. La expansión se describe como un array W, con una longitud de Nb(Nr+1), y con palabras de 4 bytes. Las Nk palabras primeras del array son la clave de cifrado y el resto se generan de estas. Existen 2 versiones de expansión para asegurar la integridad de los datos, y depe del tamaño de Nk, para cuando es mayor que 6 y para el caso contrario. 3.4. Eficiencia AES Analizando cada una de las funciones que utiliza este algoritmo, algunas funciones pueden ser optimizadas por software, la operación más costosa en tiempo, es la parte de obtener inversos multiplicativos del campo GF(2 8 ), aunque este análisis no se realizó en este proyecto, por el contrario se realizó el estudio de la función optimizada, en la que esta operación es calculada con anticipación y sustituida por una simple consulta en la tabla S- Box, al igual que esta, otras funciones podrían ser calculadas antes. El análisis de la eficiencia en hardware depe de otros parámetros, de la cantidad de memoria, el largo y cantidad de registros, el tamaño de los operandos y las operaciones que se utilicen y analizar estos parámetros en función de la tecnología que se utilice. Según

24 la referencia [5] la velocidad de AES implementado en una FPGA para un cifrado de 128b es de 2Gb/s. 3.5. Seguridad de AES La linealidad en los algoritmos es un factor que podría inducir a relacionar los datos de entrada con los de salida, un mecanismo que incluye AES es la no linealidad, lo hace alternando las claves, utilizando diferentes claves en cada ronda, lo que complica conocer la información original. La propagación, una mala propagación permite derivar información de la clave a partir de conocer las probabilidades de las diferencias de la propagación, por lo que se quiere que las probabilidades sean muy pequeñas para evitar un ataque de tipo diferencial. AES logra una buena propagación de la función no lineal del algoritmo S-Box y el número de rondas. Otro aspecto importante a tomar en cuenta es la cantidad de ataques que ha recibido AES sin poder lograr su objetivo, por ejemplo: Square Attack: se apoya en las propiedades de inversión de cada uno de los pasos de Rijndael. En vez de mandar un par de mensajes con una diferencia preestablecida, este ataque manda 256 textos, que coinciden en todos los S-boxes menos uno, y en ese S-box se mandan todos los mensajes posibles. Luego se observan las propiedades de este conjunto de mensajes, y se deducen propiedades que debería tener el conjunto de salida, si es que se adivinó el segmento de clave correspondiente al S-box correctamente. Esto permite adivinar la clave, en vez de

25 trabajar sobre una clave de 128 bits, se trabaja sobre 16 subclaves de 8 bits cada una, lo cual es muy rápido de hacer. Collision attack: este tipo de ataque utiliza técnicas especiales para detectar colisiones internas, Un choque interno ocurre, si una función dentro de un algoritmo criptográfico tiene argumentos de entrada diferentes, pero devuelve un argumento de salida igual. Timing attack: en este ataque el adversario mide el tiempo necesario para realizar los cálculos, y extrae la información suplementaria sobre los sistemas de encriptación. 3.6. Expansión y Aplicaciones 3.6.1 Comunicaciones móviles a través de Internet En las telecomunicaciones móviles a través de Internet, ingenieros alemanes del instituto Fraunhofer (SIT), desarrollaron un sistema de codificación basado en la plataforma Java y utilizan un algoritmo AES. Por lo que pueden analizar protocolos criptográficos y el funcionamiento de teléfonos móviles, esto indepiente de la calidad de la señal. 3.6.2 Aplicaciones en las redes Wireless Lan Este es un mecanismo de seguridad en estas redes, que utiliza el estándar AES, por lo que proporciona integridad, confiabilidad y autenticación de origen a la red, hacio uso del cifrado en los enrutadores.

26 CAPÍTULO 4: Algoritmo de cifrado RSA PGP es un protocolo que fue diseñado por Philip Zimmermann en 1991 para proporcionar un intercambio seguro de correo electrónico. Es un algoritmo de clave simétrica con intercambio de clave mediante el sistema de llave pública generalmente RSA y hash MD5 para la firma digital. En este capítulo se estudiará el algoritmo de cifrado RSA. RSA fue creado por Ronald Rivest, Adi Shamir y Leonard Adleman en 1977; el nombre corresponde a las iniciales de los apellidos de los autores. Es un algoritmo asimétrico de bloques, y utiliza una clave pública y otra privada, la primera se distribuye y la segunda como su nombre lo indica es privada. 4.1. Estructura RSA RSA consiste de 2 algoritmos matemáticos: El máximo común divisor de Euclides y el último teorema de Fermat. Se emplea también la función exponencial discreta la cual es muy difícil de calcular su inverso, el logaritmo discreto. El procedimiento para intercambio de mensajes es el siguiente: El receptor R elige 2 números primos grandes p y q (1024 bits), y obtiene n=pq. R obtiene la función multiplicativa de Euler dado que son primos: φ ( n) = φ( pq) = φ( q) φ( p) = ( p 1)( q 1) (4.1-1) R selecciona un número e tal que 1<e< φ(n) de manera que sea primo relativo con φ(n) calcula su inverso módulo φ (n). y

27 d 1 = e φ( n) (4.1-2) Los números d y n los guarda R en secreto y es llamada clave privada y los números e y n es la clave pública. Para enviar un mensaje x a R se cifra del siguiente modo: Enc = ( x) x e n (4.1-3) R recibe y = Enc(x) y hace lo siguiente d Des y) ( y ) n ( = (4.1-4) 4.2. Eficiencia de RSA Para implementar el algoritmo en RSA se requiere de divisores, registros, restadores y comparadores. La división es la operación aritmética que requiere mayor hardware, por lo que es un factor limitante en el desempeño de las arquitecturas. 4.3. Seguridad de RSA La seguridad de RSA se basa en el problema RSA y la factorización de números grandes. El problema RSA consiste en que dado un número entero n=pq, producto de dos primos del mismo tamaño, un entero e, tal que: mod( e,( p 1)( q 1)) = 1 (4.1-5) y un entero c, entonces el problema RSA es encontrar a un entero m tal que: me = c(mod n) (4.1-6)

28 Es decir el problema RSA es encontrar la e-ésima raíz modulo un producto de dos primos. Actualmente la aproximación para solventar el problema del RSA es el factor del módulo n. La factorización de números grandes es un aspecto importante, las contraseñas pueden ser la multiplicación de números de 100 ó 200 dígitos, y el resultado se utiliza como clave pública, y los números primos para obtenerla como clave para descifrar, a un superordenador le llevaría más de 300 millones de años encontrar los números que se multiplicaron para obtener la clave [7]. Para obtener una mayor seguridad las claves han pasado de ser de 200 bits a 1024 actualmente, lo que lo hace lento. 4.4. Expansión y Aplicaciones de RSA RSA es utilizado para autenticar mensajes de los usuarios, bancos y gobiernos. RSA ofrece autenticación de doble factor para plataformas de dispositivos móviles con RSA SecurID software tokens, un dispositivo móvil con RSA securid software token activado está diseñado para ofrecer el mecanismo apropiado para asegurar el acceso a los recursos de red, al tiempo que ofrece confidencialidad, flexibilidad y la opción de una autenticación fuerte para consumidores y empresas. CAPÍTULO 5: Algoritmo de cifrado DES DES (Data Encryption Standard) es un algoritmo simétrico desarrollado en 1977 por la oficina Nacional de Estándares de EEUU con la colaboración de IBM, tiempo después salió la versión para hardware, que entró en los estándares de ISO con el nombre de DEA. DES es un algoritmo de cifrado por bloques que utiliza 64 bits y una clave simétrica de 64bits,

29 de los que 56 se usan para cifrar y los restantes 8 son de paridad para detección de errores en el proceso. 5.1. Estructura de DES DES utiliza 16 rondas con una permutación inicial y otra final, las cuales son inversas, llamadas PI y PF respectivamente. Antes de entrar a las rondas los bloques son divididos en 2 partes de 32 bits. Cada Ronda cuenta con 2 funciones fundamentales que serian una XOR y la función F. La permutación inicial PI lo que hace es desordenar los bits de entrada que luego son separados en bloques de 32 bits, L0 los más significativos y R0 los menos significativos, la función F se aplica a R0 y a la clave de la ronda, y al resultado se le aplica una XOR con L0, seguidamente se intercambian las 2 partes, al final se aplica PF.

30 Figura5.1. Algoritmo DES [9] El descifrado es idéntico al cifrado pero en sentido inverso y la última clave que se generó se aplica en la primera ronda de descifrado. 5.1.1 Función F La función F es la Función de Feistel, y se divide en subfunciones:

31 Expansión, expande los 32 bits de entrada en 48 bits. XOR, se realiza con los 48 bits y la clave de la ronda proveniente del algoritmo de generación de claves. Caja S-box, los 48 bits se agrupan en 6 bits y se sustituyen en estas cajas, cada una produce 4 bits por lo que a la salida de la caja se vuelve a tener los 32 bits. Por último se realiza una permutación y esta es la salida de la función F. 5.1.2 Generación de claves Primero se realiza una permutación PC1 (Permute Choice), que también descarta al último bit de cada byte. Después de la primera permutación se realiza otra que selecciona 48 de los 56 bits de entrada 5.2. Eficiencia de DES El tamaño de los bloques es un factor importante por lo que a la hora de implementar en hardware el algoritmo DES, resulta más fácil de implementar por las funciones PI y PF, ya que divide el bloque de entrada en 2 partes de 32 bits por lo que se ocuparía de menos recursos. Al ser un algoritmo de clave simétrica no es necesario de 2 algoritmos distintos para el cifrado y el descifrado, por lo que se simplifica la implementación sobre hardware. 5.3. Seguridad de DES Debido a lo corto de su clave no se considera un sistema robusto, aparte de que no es de clave variable, por lo que las posibilidades de configuración son muy limitadas.

32 Si se conoce un número suficiente de textos, la seguridad se ve reducida, ya que mediante el criptoanálisis diferencial se podría romper el sistema. 5.4. Expansión y aplicaciones de DES En la actualidad DES es considerado poco práctico debido a la longitud de su clave, y ha sido sustituido por TDES o Triple DES que consiste en 3 iteraciones sucesivas del algoritmo DES y así conseguir 3 claves diferentes de 64 bits. A pesar de lo anterior es uno de los sistemas más extido del mundo, el más barato y también el más probado, aparte de que es muy rápido y fácil de implementar. CAPÍTULO 6: Comparación de los algoritmos AES, DES y RSA En esta parte del proyecto se tienen en cuenta la estructura del algoritmo, los elementos matemáticos y las características de la FPGA. Durante el desarrollo de un circuito a implementar, es sumamente útil enter el uso de los recursos, especialmente cuando se intenta optimizar el tamaño y la velocidad. En este capítulo se hará una descripción más detallada de la factibilidad para implementar en una FPGA los algoritmos anteriormente estudiados. Un factor importante a la hora de implementar en una FPGA es tomar en cuenta y ser consciente de las ventajas que nos puede dar. Por ejemplo, las tablas de consulta o LUTs, la Spartan-3 tienen LUTs de cuatro entradas para implementar tablas de verdad de hasta 16 combinaciones, resultantes de las cuatro señales entrantes. Por otro lado la simple tarea de multiplicar dos números puede consumir muchos recursos, y su implementación en circuitos digitales puede ser compleja. Multiplicar dos

33 números de 32 bits cada uno podría requerir la ejecución de más de 2000 operaciones. Es por esto que los FPGAs tienen circuitos multiplicadores integrados, para ahorrar el uso de LUTs y flip-flops en aplicaciones matemáticas y procesamiento de señales. Los FPGAs Virtex-II y Spartan-3 cuentan con multiplicadores de 18 bits por 18 bits, por lo que multiplicar dos números de 32 bits cada uno requiere tres multiplicadores para cada operación. Muchos algoritmos de procesamiento de señales implican la conservación de los números que se están multiplicando, y como consecuencia los FPGAs de más alto rimiento como el Virtex-5 tienen circuitos multiplicadores acumuladores integrados. La FPGA Spartan3E XC3S500E contiene 20 multiplicadores dedicados. Los recursos de memoria son otra especificación clave a considerar. La RAM definida por el usuario, embebida en el chip FPGA, es útil para almacenar conjuntos de datos o para transferir valores entre ciclos paralelos. Depio de la familia de FPGA, se puede configurar la RAM integrada en bloques de 16 o 36 kb. También se tiene la opción de implementar conjuntos de datos como arreglos utilizando flip-flops; sin embargo, los arreglos grandes rápidamente se vuelven expansivos para los recursos lógicos del FPGA. Los algoritmos se dividen principalmente en dos grandes bloques que son: Bloque de CIFRADO Bloque de DESCIFRADO Aunque estos generalmente ocupan los mismos bloques, pero hacen uso de ellos en orden inverso.

34 El algoritmo AES utiliza 128 bits de bloque y hasta 256 bits de clave, hace uso de transformaciones no lineales, aun que se manejan con tablas S-box, por ejemplo para la función bytesub. Para esta función se puede crear una tabla en la memoria ROM. La función ShiftRow es un corrimiento hacia la izquierda, implementar el corrimiento en hardware no es complicado, en Verilog existe el operado << para corrimientos hacia la izquierda, que llena con ceros las posiciones vacantes, aun que por seguridad y no incurrir en errores los desplazamientos no se realizan de esta forma. La función MixColumn consiste en multiplicaciones de polinomios, por lo que se ocuparían una serie de multiplicadores y al mismo tiempo desplazamientos para obtener el polinomio resultante. La función Addroundkey consiste de realizar una XOR que es fácilmente implementable en hardware, ya que en Verilog se logra con el operador ^. Para el descifrado se ocupan las tablas de la función bytesub pero inversas, los corrimientos ahora hacia la izquierda. Para la función MixColumn es necesario de nuevo los multiplicadores y las XOR, aunque se utilizarían de modo diferente. Al igual que en el descifrado lo único que se requiere para la función Addroundkey son XOR. La implementación hardware del algoritmo AES-Rijndael corresponde al tipo iterativo, ya que son varias rondas. El algoritmo RSA utiliza claves de hasta 1024 bits, aunque no suele usarse para cifrar archivos, si no, más bien para cifrar claves simétricas. La implementación de este algoritmo implica realizar operaciones aritméticas modulares como: la suma modular, la resta modular, la multiplicación y el exponente modular. Cada una de ellas conlleva a una iteración de operaciones aritméticas regulares como suma, resta, multiplicación y división.

35 Al utilizar claves tan grandes y múltiples multiplicaciones y operaciones, el uso de registros incrementa enormemente. El algoritmo DES al utilizar bloques y claves pequeñas, y aparte dividir el bloque para realizar las operaciones, hace que el uso de recursos no sea un impedimento para lograr implementarlo en hardware, de hecho las funciones que utiliza, son factibles y cómodas para implementar. Lo primero que realiza es una permutación, luego se divide el bloque en 2 y se efectúa la función F, que esta lo que realiza es una extensión de 32 a 48 bits, luego ejecuta una XOR de 48 bits, y otro componente importante son las S-box que para esto se requieren 8 tablas, menos y más pequeñas que las que requiere AES. En la tabla 6.1 se comparan los 3 algoritmos, como se puede observar el algoritmo DES es el más fácil de implementar ya que su algoritmo no es complicado, la clave que utiliza es pequeña por lo que la utilización de recursos también va a disminuir. Aunque entre más pequeñas son las claves el algoritmo se vuelve más inseguro y débil ante ataques. A pesar de que RSA es muy seguro y altamente utilizado, la magnitud de la clave hace que el uso de recursos aumente, aparte de que el uso si bien no es limitado, no se acostumbra utilizarlo para cifrar textos grandes. Tabla 6.1 Comparación de algoritmos Algoritmo Tamaño clave bits Uso de recursos Complejidad del algoritmo facilidad de implementación Utilidad Flexibilidad AES 128-192- 256 alta alto media Cifrar Textos grandes Alta 1 RSA 1024 alta medio media Cifrar Claves Media 2 DES 64 baja bajo alta Cifrar Textos grandes Media 3

36 1 La flexibilidad en el número de bits de la clave hace al algoritmo muy seguro aproximadamente hasta el 2030 con 128 bits 2 Es muy utilizado para cifrar claves, aunque para cifrar textos grandes no es muy común utilizarlo 3 Actualmente DES no es muy seguro, pero al hacer varias rondas aumenta la seguridad CAPÍTULO 7: Algoritmo de cifrado propuesto El algoritmo es de cifrado por bloque, y se realizan 3 operaciones, los bloques a cifrar son de 32 bits y la clave es de 16 bits, la cual se encarga de decir cual operación se realiza primero y las características de cada operación, las operaciones son las siguientes: XOR: se realiza con los 16 bits de la clave y la parte alta o la parte baja del bloque, lo cual es indicado por un bit de la clave. ROT: es una rotación que puede ser hacia la izquierda o hacia la derecha, esta característica y la cantidad de espacios a rotar se indican en la clave. CA2: se realiza un complemento a 2, y mediante la clave se indica si se va a realizar con el bloque dividido en pequeños bloques de 8bits o de 16bits. Para diseñar el algoritmo se retomó algunos conceptos de los algoritmos estudiados. En AES y DES por ejemplo utilizan la operación XOR, que es fácilmente implementable, a parte en DES dividen el bloque para aplicar las 2 funciones principales, de ahí se ideo que una de las operaciones fuera una XOR con la mitad del bloque y la clave. En AES realizan una rotación fija a las filas de una matriz, el algoritmo propuesto no utiliza matrices, pero al ser la rotación fácilmente implementable, se conjeturó que aplicar una rotación al bloque no ocuparía muchos recursos.

37 La tercera operación que es el CA2 se eligió ya que no utiliza muchos recursos y resulta factible y cómoda la implementación. 7.1. Clave Como se dijo anteriormente la clave es de 16 bits, mediante los cuales se toman decisiones sobre la forma de cifrar/descifrar. Se divide en 7 partes como se muestra en la figura 7.1, los 4 bits más significativos son para indicar el orden para ejecutar las operaciones sio 00 el XOR, 01 ROT, y 10 CA2, el valor 11 no está contemplado, por lo que si este valor se encuentra, se producirá un error. La cantidad de rotaciones se indica mediante los 5 bits siguientes. El sexto bit indica la dirección de la rotación. El quinto bit indica si la XOR se realiza con la parte alta o la parte baja del bloque. El cuarto bit indica la forma de realizar el CA2, ya sea con 8 bits o 16 bits. Los 4 menos significativos tiene un valor aleatorio que el usuario los elige. 15 13 11 6 5 4 3 2 1 0 Rotar XOR CA2 Cantidad de Ioperación IIoperación Iz=0 LSB=0 8bits=0 Aleatorios rotaciones De=1 MSB=1 16bits=1 Figura 7.1. Descripción de bits de la clave 7.2. Arquitectura general Para implementar este algoritmo se empezó por definir de forma muy general la arquitectura del cifrador propuesto, con las señales de entrada y de salida como se muestra en la figura 7.2. Para interactuar con la etapa anterior posee 7 señales, 6 de entrada y 1 de salida. Para la etapa siguiente que sería la interfaz con la memoria RAM se tienen 4 señales,

38 destinadas a la conexión para guardar los datos. La tabla 7.1 muestra una descripción general de las señales. Figura 7.2. Señales de entrada y salida Tabla 7.1 descripción de señales del cifrador Señal Tamaño bus (bits) Dirección Comunicación con etapa Proposito Done 1 input anterior indicación de que tiene los datos listos para cifrar/descifrar DirGet 11 input anterior Dirección de memoria donde va a tomar los datos DirSetIn 11 input anterior Dirección de memoria donde va a escribir los datos Size 10 input anterior cantidad de bloques a cifrar/descifrar Cif/Des 1 input anterior indica si los datos van a ser cifrados o descifrados Reset 1 input anterior señal de reset general Ready 1 output anterior indica que está lista para recibir datos DirSetOut 11 output interfaz Mem dirección donde se van a guardar los datos L/E 1 output interfaz Mem señal que indica si se le va a escribir o a leer a la memoria Dato 32 output interfaz Mem dato que se le va a pasar a la memoria En la figura 7.3 se observan los módulos principales que contiene el cifrador. El primer módulo es el que se representa de color amarillo y es el de Sensado, se encarga de

39 tomar los datos de entrada y verificar que sean válidas las direcciones y la cantidad de bloques, si son válidos los pasa a la siguiente etapa, de lo contrario emite una señal de error. El siguiente módulo que es de color rojo se encarga de los accesos a memoria ya sea de escritura o lectura, la comunicación con el ControladorALU es para pasarle los bloques que lee de memoria que luego serán cifrados o descifrados, después de que los datos son cifrados/descifrados la ALU le envía los datos para que los guarde en memoria, este módulo se encarga de actuar cuando se da un error, escribio en la primera posición de memoria el código del error, de esto se hablará más adelante. El módulo ControladorALU se encarga de decodificar la clave y pasarle la instrucción y el bloque correspondiente a la ALU, si hay un error en la decodificación de la clave, levanta una señal de error. La ALU de color celeste, se encarga de realizar alguna de las 6 operaciones, cuando se realizó el cifrado completo, o sea, si se realizaron las 3 operaciones correspondientes pasa el bloque al módulo ControladorIn-Mem de lo contrario se lo pasa al ControladorALU para coordinar la segunda y/o tercera operación. Figura 7.3. Arquitectura del cifrador

40 Ahora se hablará detalladamente de cada etapa. 7.3. Sensado La etapa Sensado es la encargada de la comunicación con el exterior, en la figura 7.4 se presenta un el módulo con sus entradas y salidas. Internamente se comunica con la etapa ControladorIn-Mem. Cuando Sensado esta lista está para recibir datos levanta la bandera ReadySensado y si la etapa externa tiene datos para enviar se lo indica mediante la señal Done (una descripción detallada de las señales se muestra en la tabla 7.2.), Sensado toma los datos y verifica que sean correctos. Figura 7.4. Módulo de Sensado Al decir que verifica que los datos sean correctos lo que hace es tomar los datos de entrada y realizar una comparación. Los datos importantes para esta etapa que toma de la

41 etapa anterior son la dirección donde se van a tomar los datos de memoria, la dirección donde se van a colocar después de cifrarlos/descifrarlos, y la cantidad de bloques a cifrar/descifrar, hay que tener presente que la primera posición a la que apunta la dirección donde se encuentran los datos (DirGet) es la clave, y que ésta no se encuentra contemplada en la cantidad de bloques. Otro aspecto importante a tomar en cuenta es que en la primera posición a la que apunta la dirección donde se van a guardar los datos (DirSet), se va a guardar el código de error y la información correspondiente al código de error, por otro lado si lo que se va a realizar es un cifrado, la segunda posición de memoria (DirSet+1), en los 16 bits menos significativos se va a guardar la clave, por el contrario si es descifrado los bloques se empiezan a guardar en DirSet+1. Tabla 7.2 descripción de señales del Sensado Señal Tamaño bus (bits) Dirección Comunicación con etapa Proposito Reset 1 input exterior señal de reset general Done 1 input exterior indicación de que tiene los datos listos para cifrar/descifrar DirGet 11 input exterior Dirección de memoria donde va a tomar los datos DirSet 11 input exterior Dirección de memoria donde va a escribir los datos Size 10 input exterior cantidad de bloques a cifrar/descifrar Cif 1 input exterior indica si los datos van a ser cifrados o descifrados CLK 1 input exterior Reloj ReadyControl 1 input ControladorIn-Mem indicación de que la siguiente etapa esta lista para recibir datos DirGetOut 11 output ControladorIn-Mem Dirección de memoria donde va a tomar los datos DirSetOut 11 output ControladorIn-Mem Dirección de memoria donde va a escribir los datos SizeOut 10 output ControladorIn-Mem cantidad de bloques a cifrar/descifrar CifOut 1 output ControladorIn-Mem indica si los datos van a ser cifrados o descifrados ErrSensado 3 output ControladorIn-Mem señal que indica el error ocurrido GoSensado 1 output ControladorIn-Mem indica a la siguiente etapa que tiene datos para pasarle ReadySensado 1 output exterior indica a la etapa exterior que está lista para recibir datos

42 Los tipos de errores que se pueden presentar en esta etapa, son relacionados con la cantidad de espacio en memoria. En la figura 7.5 se presentan 2, la figura a hace referencia a la cantidad de bloques a guardar, si DirSet es tal, que al guardar los datos se superara la capacidad de almacenamiento de la memoria, se produciría un error tipo 100 o 4 en decimal. Al igual la figura b indica si los bloques a leer son tales que superan el tamaño máximo de la memoria, esto produciría un error tipo 001. Por lo que el usuario debería de revisar si el Size, DirGet o DirSet son correctos. DirSet+Size TamMáx DirGet+Size TamMáx DirGet+Size DirGet DirGet (a) (b) Figura 7.5 (a)error100 (b)error 001 Otros tipos de errores que se pueden presentar son los de traslape de datos. Ya sea que DirSet se encuentre entre DirGet y DirGet +1, que se representa en la figura 7.6 a. O si DirGet y DirSet apuntan a la misma posición de memoria (Figura 7.6 b).

43 TamMáx TamMáx DirGet+Size DirGet+Size DirSet DirGet DirGet = DirSet (a) (b) Figura 7.6. (a)error 011 (b) Error 010 El error 101 se da cuando a pesar de que DirSet es menor que DirGet, la cantidad de bloques se traslapan. Ya que DirSet+Size se encuentra entre DirGet y DirGet+1 (Figura 7.7). TamMáx DirSet+Size DirGet+Size DirGet DirSet Figura 7.7 Error 101 Es importante notar que esta etapa solo detecta un error a la vez, por lo que es recomable si se detecta un error revisar todos los parámetros y no solo los involucrados en el error dado, para prevenir futuros fallos.

44 En la figura 7.8 se presenta un diagrama SM de la etapa de Sensado, en el estado 0, se inicializan las variables y las entradas se están constantemente leyo, y cuando se da que Done y ReadySensado están en 1, se pasa al próximo estado, en el que se realizan operaciones para pasar al siguiente estado y hacer una serie de comparaciones para detectar algún error. Si algún error se da, se levanta la bandera de error indicando cual error se dio y los pasa a la siguiente etapa para que esta lo maneje. Si no ocurre error se levanta la señal GoSensado para indicar a la siguiente que hay datos listos.

45 Figura 7.8 diagrama SM del módulo Sensado 7.4. ControladorIn-Mem Esta etapa se encarga de los accesos a memoria, de leer y guardar los datos, y pasarle el bloque y la clave a la etapa siguiente. En la tabla 7.3 se detallan las señales y en la figura 7.9 se encuentra el diagrama SM.

46 Figura 7.9 Módulo ControlInMem Para habilitar esta etapa, Sensado le envía una señal (GoSensado) indicando que tiene los datos listos, se ControlInMem se encuentra en el estado 0, pasa al estado 1 hasta el 4, en los que se lee la clave y el primer bloque, en el estado 4 si Size es 1 levanta la señal Ultimo, indicando que es el único bloque a cifrar. Si en vez de activarse la señal GoSensado, se activa ErrSensado, pasa directamente al estado 13, en el que se guarda el error en la primera posición que apunta DirSet, en los 3 bits más significativos del dato que se guarda se encuentra el código del error, si el error es 001 o 100, se guarda también el los

47 bits menos significativos el tamaño máximo de la memoria, esto es porque estos errores indican que se sobrepasó el límite máximo de memoria. En el estado 5 se verifica que la siguiente etapa está libre, y si se encuentra libre se levanta la señal CatchIn Indicando a la siguiente etapa que tome los datos, si no está libre, se queda en ese estado. El estado 6 se baja CatchIn y si Size es mayor a 1 prepara a la memoria para leer el siguiente bloque. En el estado 7 se decrementa Size, y se lee el dato. Si se va a cifrar y la bandera FlagFT está en bajo, indica que es la primera vez que pasa por aquí, y como es cifrado lo primero que se va a guardar en memoria es la clave por lo que pasa al estado 8, luego al 9, en los que se guarda la clave, luego pasa al estado 10, si la condición cifrado y!flagft no se cumple, pasa directamente al estado 10, en la que espera que la ALU tenga los resultados, cuando la ALU tiene los resultados, se lee el dato y para al estado 11 en el que se guarda, en la siguiente posición de memoria de DirSet. Si Size es igual a 0 indica que terminó de cifrar/descifrar por lo que pasa al estado 12, donde se guarda en la primera dirección el código de error 000, ya que no se produjo ningún error al cifrar/descifrar. Si del estado 7 al 11 se detecta un error en la etapa de ControlALU, se pasa al estado 14, el que se encarga de guardar en memoria el código del error en los 3 bits más significativos, y en los 16 bits menos significativos guarda la clave, que es la que produjo el error.

48 Tabla 7.3 Descripción de señales de ControladorInMem Señal Tamaño bus (bits) Dirección Comunicación con etapa Propósito CLK 1 input reloj Reloj Reset 1 input externa Reset CifSensado 1 input Sensado indica si el bloque se va a cifrar o descifrar GoSensado 1 input Sensado indica que etapa Sensado tiene datos para pasarle DirGetSensado 10 input Sensado Dirección de memoria donde va a tomar los datos DirSetSensado 10 input Sensado Dirección de memoria donde va a escribir los datos SizeSensado 9 input Sensado cantidad de bloques a cifrar/descifrar ErrSensado 3 input Sensado señal que indica el error ocurrido en Sensado ErrControl 2 input ControlALU si se dio un error en la decodificación de la clave DoneALU 1 input ALU terminó 3 operaciones, indica que puede tomar los datos DatoAMem 32 input ALU dato que se guarda en memoria DatoIn 32 input Interfaz RAM dato que devuelve la memoria al leer DatoOut 32 output Interfaz RAM dato que se le da a la memoria para escribir DirMem 10 output Interfaz RAM Dirección de acceso a memoria L_E 1 output Interfaz RAM indica si se va a escribir o a leer ReadyControl 1 output Sensado indicación de que esta lista para recibir datos de Sensado CifControl 1 output ControlALU indica si el bloque se va a cifrar o descifrar CatchIn 1 output ControlALU ResetInterno 1 output ControlALU-ALU Reset Interno aviso de que se tiene datos listos para pasarlos a siguiente etapa Ultimo 1 output ControlALU indica que es el último bloque a cifrar/descifrar BloqueControl 32 output ControlALU Bloque a cifrar/descifrar KeyControl 16 output ControlALU Clave

Figura 7.10 Diagrama SM de ControlInMem 49

50 7.5. ControladorALU El Controlador ALU consta de dos funciones principales una es la decodificación de la clave, para organizarlas las operaciones en un registro de 9 bits, y la otra función es tomar las operaciones a realizar, o sea, tomar 3 bits del registro de operaciones, y manipular la ALU. En la figura 7.11 se presenta el módulo con sus entradas y salidas con el número de bits de los buses. Dentro se encuentra el módulo de decodificación de la clave y el módulo del Control de la llave. Cada función es una máquina de estados a parte, que son habilitadas por la máquina de estados principal (ControladorALU). Figura 7.11 Módulo Controlador ALU En la tabla 7.4 se describe detalladamente las señales de entrada y salida del módulo ControladorALU. En la figura 7.12 se describe un diagrama SM del módulo en cuestión,

51 las partes de diferente color hacen referencia al módulo de DecodKey (café) y al módulo ControlKey (morado). Tabla 7.4 Descripción de señales del Controlador ALU Señal Tamaño bus (bits) Dirección Comunicación con etapa Proposito Reset 1 input ControladorInMem reset Ok 1 input ALU ALU terminó de procesar un bloque CatchIn 1 input ControladorInMem aviso de que etapa anterior tiene datos listos DatoFeedBack 32 input ALU dato que devuelve la ALU para seguir operando con él Ultimo 1 input ControladorInMem indica que es el ultimo bloque a cifrar/descifrar Bloque 32 input ControladorInMem bloque a cifrar/descifrar Key 16 input ControladorInMem clave Cif 1 input ControladorInMem indica si el bloque se va a cifrar o descifrar CLK 1 input reloj reloj Libre 1 output ControladorInMem indica que este módulo esta libre o listo para recibir nuevos datos Err 2 output ControladorInMem si se dio un error en la decodificación de la clave Dato1 32 output ALU por esta señal se pasa el bloque Dato2 16 output ALU se pasa el otro dato necesario para realizar la operación Instrucción 3 output ALU indica la instrucción a realizar ProxBloque 1 output ALU indica a la ALU que el dato que procese lo debe enviar a memoria y no FeedBack CatchOut 1 output ALU indica a la ALU que puede tomar los datos El estado 0, inicializa las variables, y espera a que la señal CatchIn se levante para pasar al siguiente estado, en el que tenio los datos de entrada, habilita al módulo DecodKey, en el que se descompone la clave en 3 operaciones, si se da un error en la decodificación de la clave se levanta la bandera ErrDecod, este error indica que los 4 bits de la clave no son válidos, ya que cada 2 bits solo puede contener los valores de 00, 01 o 10, si se encuentra un 11 en los 2 bits más significativos o en los siguientes 2 bits, se produce un error. Cuando se termina de decodificar la clave se pasa al estado 2, en el que

52 se deshabilita DecodKey, y se verifica el valor del registro CountIn, este registro cuenta las veces que el bloque ha pasado a la ALU, por lo que si tiene un valor de cero, el bloque no ha pasado por la ALU y el dato necesario es el bloque de entrada. Si tiene un valor de 3 significa que el bloque ya realizó las 3 operaciones y debe enviarse a memoria para ser guardado, y se levanta la bandera ProxBloque. Si el contador es diferente de estos valores indica que el bloque ha pasado por la ALU al menos una vez, por lo que el bloque a utilizar es el que devuelve la ALU (DatoFeedBack). DecodKey devuelve un registro de 9 bits que cada 3 bits indica la instrucción a realizarse, la variable CountIn se utiliza también para indicar cual operación tiene que ser ejecutada. La señal Ok indica que la ALU está libre y puede recibir datos, por lo que si esta en alto se pasa al estado 6 que habilita al ControlKey, este se encarga de pasarle los datos necesarios a la ALU, levantando la bandera CatchOut para que la ALU tome los datos. Internamente ControlKey lleva otro Contador (CountOut) que se incrementa interiormente y se le pasa el valor a CountIn que es el que maneja ControladorALU. Si CountIn es igual a 3 y la bandera Ultimo esta levantada, pasa al estado 0, si no se cumple esta condición, se repite el ciclo, aunque cuando es igual a 3 pero no está levantada la bandera Ultimo indica que hay más bloques por cifrar/descifrar, por lo que va al estado 4, en el que se inicializa el contador y espera que se le pase un nuevo dato, para volver al estado 2. Los errores los maneja con una registro de 2 bits en los que el bit 0 indica si hubo un error en la decodificación y el bit 1 indica si hubo un error proveniente del módulo ControlKey, si se da un error, se envía la señal al modulo ControladorIn-Mem. En las siguientes secciones se detallan los módulos DecodKey y ControlKey.

53

54 7.5.1 DecodKey Figura 7.12 Diagrama SM del módulo Controlador ALU El modulo DecodKey, como se comentó anteriormente se encarga de descomponer la clave en las 3 operaciones que se escogió y ponerlas en orden en un registro, por ejemplo si lo que se va a realizar un cifrado las operaciones están en orden de ejecución, de los bits más significativos a los menos significativos, o sea, los 3 bits más significativos representan la primera operación si se va a cifrar. Si se va a descifrar la primera operación a ejecutar se encuentra en los 3 bits menos significativos. Este módulo solo requiere la clave para realizar su función. En la figura 7.13 se especifican las entradas y salidas. En la tabla 7.5 se da una descripción de cada una.

55 Figura7.13 Modulo DecodKey Tabla 7.5 Descripción de señales del DecodKey Señal Tamaño bus Dirección Comunicación con (bits) Proposito En 1 input ControladorInMem habilitar el Decod Key 16 input ControladorInMem pasar clave CLK 1 input ControladorInMem reloj Done 1 output ControladorInMem indica que terminó de decodificar la clave ErrDecod 1 output ControladorInMem hubo un error en la decodificación, los primeros 4 bits no son válidos Operaciones 9 output ControladorInMem indica las 3 operaciones que se realizaran de izquierda a derecha si es cifrado Anteriormente se especificó los bits que componen la clave, por lo que ya se trá una noción de los bits en que se fija este módulo para obtener las operaciones. Son 6 operaciones posibles, aunque son 3 principales, cada una se divide en 2, la XOR puede ser con los 16 bits más significativos del bloque o con los 16 menos significativos, al igual que ROT que puede ser a la izquierda o a la derecha, y el CA2 que como se especificó anteriormente puede realizarse cada 8 bits o cada 16 bits. Por lo que cada variación de las funciones es una operación diferente, esto se detallará más adelante en la descripción de la ALU. Si se da un error en la lectura de la clave se manda una señal de error al modulo ControladorALU. De lo contrario a la salida pone el registro de operaciones. El error que se da es a la hora de leer los 4 bits más significativos, ya que estos indican la operación con la que se empieza, ya sea XOR (00), ROT(01) o CA2 (10), entonces, si se especifica la operación 11, se crea un error. En la figura 7.14 se detalla el diagrama de estados.

56 Figura 7.14 Diagrama SM del DecodKey 7.5.2 ControlKey Este módulo se encarga de tomar el registro de operaciones y administrarlo para pasarle a la ALU los datos correctos. En la figura 7.17 se ven las entradas y salidas del módulo y en la tabla 7.6 se describe y detalla cada una.

57 Figura 7.15 Módulo ControlKey Tabla 7.6 Descripción de señales del ControlKey Señal Tamaño bus (bits) Dirección Comunicación con etapa Proposito En 1 input ControladorInMem habilitar en módulo ControlKey CLK 1 input ControladorInMem reloj Cif 1 input ControladorInMem si se desea cifrar o descifrar Key 16 input ControladorInMem clave Operaciones 9 input ControladorInMem indica las 3 operaciones que se realizaran de izquierda a derecha si es cifrado CountIn 2 input ControladorInMem contador que lleva el conteo de cuantas operaciones se le han hecho al bloque BloqueInterno 32 input ControladorInMem bloque que se le pasa a la ALU por la salida Dato1 CatchOut 1 output ALU indica a la ALU que puede tomar los datos ErrControl 1 output ALU se produjo un error al manipular las operaciones Dato1 32 output ALU se le pasa el bloque Dato2 16 output ALU se le pasa la información necesaria para la operación CountOut 2 output ControladorInMem contador que lleva el conteo de cuantas operaciones se le han hecho al bloque InstrucOut 3 output ALU instrucción que debería ejecutar la ALU

58 El módulo recibe el registro de operaciones y decide como leerlo depio de si es cifrado o descifrado y el valor que tenga Count, ya que si es cifrado el registro se lee de izquierda a derecha y las operaciones no reciben ningún cambio, pero si lo que se va a realizar es un descifrado, el registro se lee de derecha a izquierda y la operación ROT se cambia de dirección por ejemplo si al cifrar se utilizó una ROT izquierda, para descifrar se debe de realizar una ROT derecha. Se puede producir un error si el registro de operaciones contiene una operación que no existe, como son 6 posibles operaciones si se presenta el valor de 7, se produce un error. Si no se produce un error, levanta la bandera CatchOut, y le pasa los parámetros necesarios a la ALU. Por ejemplo en una ROT derecha, aparte de la instrucción el dato 1 contiene el bloque y el dato 2 contiene la cantidad de rotaciones.

Figura 7.16 Diagrama SM del ControlKey 59

60 7.6. ALU La ALU realiza 6 operaciones como se comentó antes: ROT iz, ROT de, XOR lsb, XOR msb, CA2 8 bits, CA2 16 bits. Como el algoritmo consiste de 3 operaciones hasta que el bloque realice las 3 se pasará el bloque a memoria, para esto es la señal ProxBloque, cuando está en alto el dato sale por DatoAMem de lo contrario sale por DatoFeedBack para regresar al módulo anterior y realizar la operación siguiente. La señal Ok es una señal para la etapa anterior indicando que ya realizó la operación, cuando se realiza la 3 operación, o sea la señal ProxBloque está en alto, en vez de levantar la señal Ok se levanta la señal DoneALU indicándole al módulo ControladorIn-Mem que el dato está listo para guardarse en memoria, y la ALU está lista para recibir otro bloque. Figura7.17 Módulo ALU

61 Tabla 7.7 Descripción de señales de la ALU Tamaño Comunicación con Señal Dirección Proposito bus (bits) etapa Dato1 32 input ControladorALU dato con el cual se realiza la operación Dato2 16 input ControladorALU dato con el cual se realiza la operación Instrucción 3 input ControladorALU instrucción a realizar CLK 1 input reloj Reloj Catch 1 input ControladorALU hay datos listos para tomar Reset 1 input ControladorInMem reset Interno ProxBloque 1 input ControladorALU indica que el dato de salida debe ser enviado a memoria DatoFeedBack 32 output ControladorALU dato que regresa al controladoralu DatoAMemoria 32 output ControladorInMem dato que se guarda en memoria Ok 1 output ControladorALU terminó la operación terminó 3 operaciones, indica al DoneALU 1 output ControladorInMem ControladorInMem que puede tomar los datos

Figura 7.18 Diagrama SM de la ALU 62

63 CAPÍTULO 8: Síntesis y simulación En este proyecto se presentó el diseño de la arquitectura en hardware de un criptosistema utilizando como dispositivo lógico programable una FPGA SPARTAN-3E con lenguaje de descripción Verilog, para la síntesis se utilizó la herramienta XILINX ISE 10.1, y para la simulación se utilizó ModelSim PE Student Edition 6.5a. 8.1. Síntesis Al principio en la síntesis se obtuvieron latches, debido a que las máquinas de estado eran asíncronas, por lo que se procedió a programarlas de nuevo de manera que todas fueran síncronas, esto se explica con más detalle adelante, con esto se eliminaron los warnings que indicaban latches. Al sintetizarlo, los case se decodificaron como one-hot en todos los módulos, aunque no es la mejor optimización no se logró cambiar esta decodificación. Hay 2 warnings que se pueden ignorar, estos son porque en un módulo se especifica como entrada Key pero no se utilizan todos los bits. WARNING:Xst:647 - Input <Key<11:7>> is never used. This port will be preserved and left unconnected if it belongs to a top-level block or it belongs to a sub-block and the hierarchy of this sub-block is preserved. WARNING:Xst:647 - Input <Key<3:0>> is never used. This port will be preserved and left unconnected if it belongs to a top-level block or it belongs to a sub-block and the hierarchy of this sub-block is preserved.

64 Al sintetizar se obtuvieron 2 señales asíncronas, que las 2 son equivalentes al reset, una es Reset que viene de la etapa exterior, y la otra es ResetInterno que es controlada por la etapa ControlMemIn y es dirigida hacia demás etapas. Figura 8.1 Señales asíncronas Para la síntesis con respecto al área y recursos del FPGA se obtuvieron los resultados mostrados en la figura 8.2, que tomando en cuenta que el bloque Cifrador, cifra y descifra, el área es aceptable. la figura 8.2. Figura 8.2 Resultados de Síntesis Los resultados obtenidos de la síntesis para el tiempo de operación se muestran en

65 Figura 8.3 Tiempo de operación Por último se obtuvo el esquemático que se presenta en la figura 8.4, y que al compararlo con la figura 7.2, se comprueba que es como se esperaba. Figura 8.4 Esquemático del Cifrador 8.1.1. Programación de las máquinas de estado Primero se programaron los módulos dividiéndolos en 2 máquinas de estado, una se encarga de la lógica de próximo estado y la otra maneja la lógica de salida, como se muestra en la figura 8.5.

66 Donde la lógica de próximo estado depe y cambia conforme lo hacen las entradas y los registros, que controlan el estado presente. La lógica de salida, depe de los registros, los que cambian conforme el flanco positivo del reloj. Por lo que se obtiene una combinación de lógica combinacional y elementos secuenciales. Figura 8.5. Máquina de estado Este diseño producía, a la hora de sintetizar, que las señales de la lógica combinacional fueran asíncronas o que se crearan latches. Por lo que se cambiaron todas las máquinas de estado que producían latches. Se cambió la parte combinacional, o sea, la lógica de próximo estado, y la lógica de salida agregándole una señal de reloj, por lo que ahora solo cambian en los flancos de reloj crecientes, depio del valor de las entradas. 8.2. Simulación La simulación se realizó con 2 bloques para cifrarlos y descifrarlos, en la figura 8.5 se muestra la primera parte de la simulación, los círculos rojos muestran las lecturas de la memoria, primero lee la clave, lee el primer bloque y lee el segundo bloque para tenerlo

67 listo. Los círculos azules son la escritura. Primero escribe la clave por que se está cifrando, y se escribe en la posición 6 por que la posición 5 está reservada para el código de error. memoria 7. Figura 8.7 Señales primera parte del cifrado La figura 8.6 muestra la escritura del segundo bloque cifrado en la posición de Figura 8.8 Señales segunda parte del cifrado Por último en la figura 8.7 se guarda el segundo bloque y en la primera posición de memoria, o sea, en 5 que es DirSet, se guarda el código de error. También se observa en el círculo morado el cambio de la señal Ready, indicando que el cifrador está libre.

68 Figura 8.9 Señales tercera parte del cifrado Para el descifrado no se guarda la clave, en la figura 8.8 se muestra en cuadros rojos la lectura de la clave y los 2 bloques. Figura 8.10 Señales primera parte del descifrado En la figura 8.9 se muestra la primera escritura después del descifrado, se hace en la posición 11, ya que DirSet es 10.

69 Figura 8.11 Señales segunda parte del descifrado En la figura 8.10 se muestra la escritura del segundo bloque y el código de error que es cero, también en el cuadrado morado se muestra el cambio de la señal Ready. El cambio de esta señal al igual que en el cifrado, se da en 1025ns, por lo que para la misma clave y la misma cantidad de bloques, el tiempo de cifrar y de descifrar es el mismo. Figura 8.12 Señales tercera parte del descifrado