Logo Studenta

Implementação de Encriptação AES em FPGA

¡Este material tiene más páginas!

Vista previa del material en texto

INSTITUTO TECNOLÓGICO Y DE ESTUDIOS SUPERIORES DE MONTERREY 
IMPLEMENTACIÓN DEL ESTÁNDAR DE ENCRIPCIÓN 
A V ANZADO "AES" USANDO CIRCUITOS LÓGICOS 
PROGRAMABLES DE TIPO FPGA PARA SER UTILIZADO EN 
LA ENCRIPCIÓN DE ARCHIVOS DE COMPUTADORA 
TESIS QUE PARA OPTAR EL GRADO DE 
MAESTRO EN CIENCIAS COMPUTACIONALES 
PRESENTA 
ALBERTO V ARGUEZ MOO 
Asesor: Dr. ROBERTO GÓMEZ CÁRDENAS 
Co-asesor: Dr. ANDRÉS DA VID GARCÍA GARCÍA 
Comité de tesis: Dr. LUIS FERNANDO GONZÁLEZ PÉREZ 
Dr. LUIS ÁNGEL TREJO RODRÍGUEZ 
Jurado: Dr. LUIS ÁNGEL TREJO RODRÍGUEZ Presidente 
Dr. ANDRÉS DA VID GARCÍA GARCÍA Secretario 
Dr. ROBERTO GÓMEZ CÁRDENAS Vocal 
Dr. LUIS FERNANDO GONZÁLEZ PÉREZ Vocal 
Atizapán de Zaragoza, Edo. Méx., diciembre del 2003. 
4 
RESUMEN 
Mantener la confidencialidad de la información contenida en una computadora es para muchos 
una gran necesidad. Para cubrir esta necesidad, existen en el mercado una amplia variedad de 
programas de computo que prometen por medio de contraseñas, codificación o encripción 
mantener esta confidencialidad, el inconveniente de estos programas radica en que poseen poca 
seguridad fisica, especialmente con respecto al almacenamiento de la llave de encripción, además 
de la excesiva carga de procesamiento que delegan al microprocesador para realizar la tarea de 
protección. 
El objetivo de este trabajo fue la implementación de un circuito electrónico para la encripción de 
archivos contenidos en una computadora. Específicamente se implemento el Algoritmo de 
Encripción Avanzado en un dispositivo lógico programable de alta densidad de tipo FPGA, 
adoptando las consideraciones necesarias para que este dispositivo pudiera comunicarse con la 
computadora por medio del bus PCI. Se pretende, con esta implementación, proveer una mayor 
seguridad a la llave de encripción y de evitar la sobrecarga de trabajo al microprocesador de una 
computadora. 
Durante el desarrollo de este trabajo se hizo uso de un lenguaje de descripción material para la 
descripción funcional del circuito y lenguajes de programación para elaborar la interfaz de 
usuario y efectuar pruebas con el algoritmo. Por consiguiente, se emplearon herramientas de 
diseño asistido por computadora, como son simuladores y compiladores. 
Los resultados obtenidos fueron satisfactorios, ya que la especificación resultante y optimizada 
posee características semejantes de productos comerciales. 
5 
CONTENIDO 
AGRADECIMIENTOS ................................................................................................................... 3 
RESUMEN ...................................................................................................................................... 4 
CONTENIDO .................................................................................................................................. 5 
LISTADO DE FIGURAS ................................................................................................................ 8 
LISTADO DE TABLAS ............................................................................................................... 11 
INTRODUCCIÓN ......................................................................................................................... 13 
l. CAPITULO l: EL ALGORITMO DE ENCRIPCION A V ANZADO (AES) ........................ 15 
l. l. INTRODUCCIÓN A LA ENCRIPCIÓN ......................................................................... 15 
1.1.l. ALGORITMOS SIMÉTRICOS .................................................................................. 16 
1.1.2. ALGORITMOS ASIMÉTRICOS ............................................................................... 17 
1.2. SELECCIÓN DEL NUEVO ESTÁNDAR DE ENCRIPCIÓN AVANZAD0 ................ 18 
1.2.l. PROCESO DE SELECCIÓN ...................................................................................... 19 
1.2.2. LOS FINALISTAS ...................................................................................................... 20 
1.3. NOTACIÓN Y CONVENCIONES DE AES ................................................................... 21 
1.3.l. BITS Y BYTES ........................................................................................................... 21 
1.3.2. PALABRA .................................................................................................................. 22 
1.3.3. EL ESTADO ............................................................................................................... 22 
1.4. ESPECIFICACIÓN ........................................................................................................... 23 
1.4.1. LISTA DE LLAVES ................................................................................................... 24 
1.4.2. ENCRIPCIÓN ............................................................................................................. 25 
1.4.2. l. Transformación SubBytes( ) ................................................................................. 26 
1.4.2.2. Transformación ShifRows( ) ................................................................................ 27 
1.4.2.3. Transformación MixColumns( ) ........................................................................... 27 
1.4.2.4. Transformación AddRoundKey( ) ........................................................................ 28 
1.4.3. DECRIPCION ............................................................................................................. 28 
1.4.3. l. Transformación InvSubBytes( ) ........................................................................... 29 
1.4.3.2. Transformación InvShiftRows( ) .......................................................................... 29 
1.4.3.3. Transformación InvMixColumns( ) ..................................................................... 30 
1.4.3.4. Inverso de la transformación AddRoundKey( ) ................................................... 30 
1.5. IMPLEMENTACIÓN EN HARDWARE .......................................................................... 30 
1.5.1. S-BOX ......................................................................................................................... 30 
1.5.1. l. Implementación de la S-Box a nivel de registros ................................................. 31 
1.5.1.2. Implementación de S-Box en tablas de búsquedas ............................................... 31 
1.5.2. ALGORITMO EQUIVALENTE PARA LA DECRIPCIÓN ..................................... 31 
6 
1.6. CONCLUSIÓN .................................................................................................................. 32 
2. CAPITULO 2: DISPOSITIVOS LÓGICOS PROGRAMABLES .......................................... 33 
2.1. DISPOSITIVOS LÓGICOS PROGRAMABLES SIMPLES ............................................ 35 
2.1.1. ARREGLO LÓGICO PROGRAMABLE ................................................................... 35 
2.1.2. ARREGLO GENÉRICO PROGRAMABLE .............................................................. 36 
2.2. DISPOSITIVOS LÓGICOS PROGRAMABLES COMPLEJOS ..................................... 36 
2.2.1. MATRIZ DE INTERCONEXIONES PROGRAMABLES ........................................ 37 
2.2.2. BLOQUE LÓGIC0 ..................................................................................................... 37 
2.2.3. MACROCELDAS ....................................................................................................... 37 
2.3. ARREGLO DE COMPUERTAS PROGRAMABLE EN CAMPO ................................. 38 
2.3.1. BLOQUES LÓGICOS ................................................................................................ 38 
2.3.1.1. Tablas de búsqueda basada en elementos lógicos ................................................ 38 
2.3.1.2. Multiplexor ........................................................................................................... 39 
2.3.1.3. Celdas simétricas ..................................................................................................40 
2.3.2. INTERCONEXIÓN .................................................................................................... 40 
2.3 .2.1. Enrutamiento en renglones .................................................................................. 41 
2.3.2.2. Enrutamiento por segmentación de canal. ........................................................... 41 
2.3.2.3. Enrutamiento jerárquico ....................................................................................... 42 
2.3.3. ELEMENTOS DE uo ................................................................................................. 43 
2.3.4. OTROS RECURSOS .................................................................................................. 43 
2.3.4.1. Bloques de memoria ............................................................................................. 44 
2.3.4.2. Sujetador de fase (PLL) ........................................................................................ 44 
2.4. SELECCIÓN DE DISPOSITIVO ...................................................................................... 44 
2.5. HERRAMIENTAS CAD ................................................................................................... 44 
2.6. CONCLUSIONES .............................................................................................................. 45 
3. CAPITULO 3: DESCRIPCIÓN A NIVEL DE REGISTRO EN VHDL DEL ALGORITMO 
DE ENCRIPCIÓN A V ANZADA (AES) .................................................................................. .47 
3.1. DISEÑO EN VHDL .......................................................................................................... 47 
3.1.1. VENTAJAS DEL DISEÑO EN VHDL. ..................................................................... 47 
3.1.2. PROCESO DE DISEÑO EN VHDL. .......................................................................... 48 
3 .1.2.1. Proceso de diseño ................................................................................................. 48 
3.1.2.2. Herramienta de diseño .......................................................................................... 48 
3.1.3. DESARROLLOS COMERCIALES Y OTROS TRABAJOS SEMEJANTES 
REALIZADOS ...................................................................................................... 48 
3.2. ESTABLECIMIENTO DE LOS REQUERIMIENTOS ................................................... 49 
3.2.1. Interfaz de usuario ....................................................................................................... 50 
3.2.2. Bloque de control PCI. ................................................................................................ 50 
3.2.3. El bloque de AES ........................................................................................................ 50 
3.2.4. Bloque de Memoria ..................................................................................................... 50 
3.2.5. Bloque de control. ....................................................................................................... 50 
3.3. DESCRIPCIÓN FUNCIONAL DEL BLOQUE AES ....................................................... 50 
3.3.1. JERARQUIZACIÓN ................................................................................................... 51 
3.3.2. DESARROLL0 ........................................................................................................... 52 
3.3.2.1. Elaboración de diagrama de flujo ......................................................................... 53 
3.3.2.2. Elaboración de los diagramas de estado ............................................................... 53 
3.3.2.3. Descripción en VHDL .......................................................................................... 54 
3.3.2.4. Simulación funcional y de tiempo ........................................................................ 54 
3.3.2.5. Compilación y registro ......................................................................................... 54 
3.3.2.6. Elaboración del símbolo ....................................................................................... 56 
7 
3.3.2.7. Agregar a Package ................................................................................................ 57 
3.4. SIMULACIÓN POST-SÍNTESIS DEL MODELO OBTENID0 ...................................... 58 
3.5. CONCLUSIÓN .................................................................................................................. 58 
4. CAPITULO 4: VERIFICACIÓN FUNCIONAL Y PRUEBAS ............................................. 60 
4.1. OPTIMIZACIÓN ............................................................................................................... 60 
4.1. l. OPTIMIZACIÓN DEL ALGORITMO DE LA S-Box ............................................... 60 
4.1.2. OPTIMIZACIÓN DE CÓDIGO CON EL EMPLEO DE UNA DPRAM .................. 61 
4.1.3. OPTIMIZACIÓN DE CÓDIGO CON EL EMPLEO DE UNA ROM ....................... 62 
4.1.4. OPTIMIZACIÓN POR COLOCACIÓN Y RUTEO .................................................. 62 
4.2. SIMULACIÓN ................................................................................................................... 63 
4.2.l. SIMULACIÓN DE S-Box .......................................................................................... 64 
4.2.l. SIMULACIÓN DE AES II ........................................................................................ 64 
4.2.2. SIMULACIÓN DE AES-III ....................................................................................... 65 
4.2.4. COMPARACIÓN DE LAS DESCRIPCIONES ......................................................... 65 
4.3. ANÁLISIS COMPARATIV0 ............................................................................................ 66 
4.4. PRUEBAS DE FUNCIONALIDAD .................................................................................. 68 
4.4.l. INTERFAZ DE USUARI0 ......................................................................................... 68 
4.4. l. l. Funcionalidades de la interfaz de usuario ............................................................. 68 
4.4.1.2. Ayuda en línea ...................................................................................................... 69 
4.4.1.3. Programa de instalación ....................................................................................... 69 
4.4. l.4. Comunicación con la tarjeta ................................................................................. 69 
4.4.2. TARJETA DE EXPANSIÓN ...................................................................................... 70 
4.5. CONCLUSIONES .............................................................................................................. 70 
5. CAPITULO 5. TRABAJOS FUTUROS Y CONCLUSIONES FINALES ............................ 71 
5.1. TRABAJOS FUTUROS ..................................................................................................... 71 
5.2. CONCLUSIONES FINALES ............................................................................................ 71 
BIBLIOGRAFIA ........................................................................................................................... 73 
ANEXO A: GLOSARIO .............................................................................................................. 75 
ANEXO B: FAMILIAS APEX 20KTM Y FLEX® l OK DE ALTERA® ................................... 79 
ANEXO C: JERARQUÍAS DE COMPILACIÓN ....................................................................... 84 
ANEXO D: INTERCONEXIÓN DE COMPONENTES ............................................................. 88 
ANEXO E: CÓDIGO VHDL DE PAQUETES ........................................................................... 91 
ANEXO F: SIMULACIÓN ..........................................................................................................98 
ANEXO G: MANUAL DEL USUARIO .................................................................................... l 05 
ANEXO H: TARJETA DE EXPANSIÓN PCI. .......................................................................... 129 
8 
LISTADO DE FIGURAS. 
Fig. 1.1 Representación grafica de una Palabra ............................................................................ 22 
Fig. 1.2 Arreglos de entrada, estado y salida ................................................................................ 23 
Fig. 1.3 Operación de las funciones SubWord( )y RotWord( ) .................................................... 24 
Fig. 1.4 Seudo código para la expansión de la llave de cifrado ................................................... 25 
Fig. 1.5 Seudo código para la rutina de cifrado ............................................................................ 26 
Fig. 1.6 La transformación SubBytes() aplica la S-Box a cada byte del Estado ......................... 26 
Fig. l. 7 La transformación ShiftRows( ) rota los últimos tres renglones del Estado ................... 27 
Fig. 1.8 MixColumns() opera sobre el Estado columna por columna ......................................... 28 
Fig. 1.9 AddRoundKey() aplica un XOR de cada columna en el Estado con una Palabra de la 
lista de llaves .................................................................................................................. 28 
Fig. 1.1 O Seudo código para la rutina de decripción ..................................................................... 29 
Fig. l.11 InvShiftRows( ) rota los tres últimos renglones del estado ............................................ 30 
Fig. 1.12 Seudo código del Cifrado ............................................................................................... 32 
Fig. l.13 Seudo código para las funciones Round() y FinalRound() del cifrado ........................ 32 
Fig. 2.1 Clasificación de los PLDs ............................................................................................... 34 
Fig. 2.2 Diagrama funcional del GAL 22V l O .............................................................................. 35 
Fig. 2.3 Arquitectura básica de un CPLD ..................................................................................... 36 
Fig. 2.4 Macrocelda de un bloque lógico en la familia Delta39K™ de Cipress .......................... 37 
Fig. 2.5 Clasificación de arquitecturas de un FPGA .................................................................... 38 
Fig. 2.6 LUT de 2 entradas ........................................................................................................... 39 
Fig. 2. 7 Elemento lógico de un FPGA de la familia FLEX ™ con un LUT de 4 entradas ........... 39 
Fig. 2.8 Modulo Lógico Básico desarrollado por ActefrM ........................................................... 40 
Fig. 2.9 Arquitectura de Celdas simétricas desarrollado por AtmelTM········································· 40 
Fig. 2.1 O Arquitectura de interconexión en FPGAs de ActelTM .................................................... 41 
Fig. 2.11 Diagrama a bloques de enrutamiento de CLBs en la familia Spartan XL ..................... 42 
Fig. 2.12 Arquitectura de interconexión jerárquica en la familia Flex l O de Altera® ................... 42 
Fig. 2.13 Elemento de VO en la familia Flex l O de Altera® ......................................................... 43 
Fig. 3.1 Diagrama a bloques del sistema ...................................................................................... 49 
Fig. 3.2 Jerarquía ENC_DEC ....................................................................................................... 51 
Fig. 3.3 Jerarquía KEY _SCH ....................................................................................................... 52 
Fig. 3.4 Proceso para la elaboración de cada componente ........................................................... 52 
Fig. 3.5 Diagrama de flujo de la función addroundkey ................................................................ 53 
Fig. 3.6 Diagrama de estados de la función addroundkey ............................................................ 53 
Fig. 3.7 Símbolo para la entidad addroundkey ............................................................................. 57 
9 
Fig. 4.1 Colocación de las entidades dentro de un FPGA EP20K600EBC652-1 X ..................... 63 
Fig. 4.2 Grafico comparativo de recursos empleados y frecuencia máxima de operación de las 
descripciones .................................................................................................................. 65 
Fig. 4.3 Grafico de desempeño de cada descripción .................................................................... 66 
Fig. 4.4 Ubicación del submenú en la barra de menús para el acceso a la ayuda en línea ........... 69 
Fig. 0.1 Interconexión de componentes para la especificación AES ........................................... 88 
Fig. 0.2 Interconexión de componentes para la especificación AES_ll. ..................................... 89 
Fig. D.3 Interconexión de componentes para la especificación AES_lll.. ................................... 90 
Fig. F.1 Simulación de la entidad AddRoundkey ......................................................................... 98 
Fig. F.2 Simulación de la entidad SubBytes ................................................................................. 98 
Fig. F.3 Simulación de la entidad ShiftRows ............................................................................... 99 
Fig. F.4 Simulación de la entidad MixColumns ........................................................................... 99 
Fig. F.5 Simulación del proceso de Encripción para la especificación AES ............................. 100 
Fig. F.6 Simulación del proceso de Decripción para la especificación AES ............................. 100 
Fig. F.7 Simulación del proceso de KeyExpansion para la especificación AES (1 de 2) .......... 101 
Fig. F.8 Simulación del proceso de KeyExpansion para la especificación AES (2 de 2) .......... 101 
Fig. F.9 Simulación de la entidad inverso .................................................................................. 102 
Fig. F. l O Simulación de la entidad inverso _gf. .......................................................................... 1 oi 
Fig. F .11 Simulación del proceso de Encripción para la especificación AES_ Il. ...................... 103 
Fig. F.12 Simulación del proceso de Decripción para la especificación AES_II ....................... 103 
Fig. F.13 Simulación del proceso de KeyExpansion para la especificación AES_ 11 ( 1 de 2) ... 104 
Fig. F.14 Simulación del proceso de KeyExpansion para la especificación AES_II (2 de 2) ... 104 
Fig. G. l Pantalla de bienvenida del Asistente para la Instalación de AESPCI .......................... 105 
Fig. G.2 Cuadro de dialogo para confirmar la Cancelación de la Instalación ............................ 106 
Fig. G.3 Pantalla del Contrato de licencia .................................................................................. 106 
Fig. G.4 Selección del tipo de Instalación a efectuar ................................................................. l 07 
Fig. G.5 Selección del modo de instalación de cada característica ............................................ 107 
Fig. G.6 Menú de los estados de instalación disponibles para cada característica que contiene al 
menos una subcaracterística ......................................................................................... 108 
Fig. G.7 Ayuda para la Instalación personalizada ...................................................................... 108 
Fig. G.8 Progreso de la instalación ............................................................................................. 109 
Fig. G.9 Pantalla inicial para el mantenimiento de la Interfaz de Usuario ................................. 110 
Fig. G. lO Pantalla para la selección del tipo de mantenimiento ................................................. 111 
Fig. G.11 Interfaz de usuario ...................................................................................................... 114 
Fig. G.12 Barra de títulos ........................................................................................................... 114 
Fig. G .13 Menú de la interfaz de usuario ................................................................................... 114 
Fig. G.14 Barra de herramientas ................................................................................................. 115 
Fig. G.15 Barra de estado ........................................................................................................... 115 
Fig. G.16 Barra de estado mostrando el progreso del proceso general y de archivo ................. 116 
Fig. G.17 Area de trabajo ........................................................................................................... 116 
Fig. G.18 Cuadro de Dialogo Configuración ............................................................................. 118 
Fig. G.19 Carpeta Encripción del Dialogo Configurar ............................................................... 119 
Fig. G.20 Carpeta Decripción del Dialogo Configurar .............................................................. 120 
Fig. G.21 Carpeta Llave del Dialogo Configuración .................................................................. 121 
Fig. G.22 Mensaje de llave incompleta ...................................................................................... 122 
Fig. G.23 Mensaje de llave no valida ......................................................................................... 122 
10 
Fig. G.24 Carpeta Directorio del Dialogo Configuración ........................................................... 122 
Fig. G.25 Cuadro de dialogo Buscar Carpeta .............................................................................. 123 
Fig. H. l Vista superior de la tarjeta de expansión ...................................................................... 130 
Fig. H.2 Detalle de la vista superior de la tarjeta de expansión ................................................. 130 
Fig. H.3 Vista inferior de la tarjeta de expansión ....................................................................... 131 
Fig. H.4 Detalle de la vista inferior de la tarjeta de expansión ................................................... 131 
11 
LISTADO DE TABLAS. 
Tabla 1-1 Indice para bytes y bits .................................................................................................. 22 
Tabla 1-2 Numero de rondas por combinaciones de tamaño de llave y bloque en AES ............... 23 
Tabla 2-1 Fabricantes y software de programación de dispositivos .............................................. 45 
Tabla 3-1 Resultados obtenidos de la compilación individual de entidades en la jerarquía 
ENC DEC ................................................................................................................... 55 
Tabla 3-2 Resultados obtenidos de la compilación individual de entidades en la jerarquía 
KEY SCH ................................................................................................................... 56 
Tabla 3-3 Recursos empleados por la entidad AES ...................................................................... 56 
Tabla 3-4 Lista de paquetes en la descripción de AES .................................................................. 57 
Tabla 3-5 Resultados de tiempo de proceso para la descripción AES(descripción original) ........ 58 
Tabla 4-1 Comparación entre entidades que implementan el inverso de GF(256) ....................... 61 
Tabla 4-2 Comparación de la descripción original vs 1 ªoptimización ......................................... 61 
Tabla 4-3 Comparación de la descripción original vs 2ª optimización ......................................... 62 
Tabla 4-4 Ciclos de reloj para hallar un inverso ............................................................................ 64 
Tabla 4-5 Resultados de tiempo de proceso para la descripción AES_II (lª optimización) ......... 64 
Tabla 4-6 Comparación entre especificaciones similiares ............................................................ 67 
Tabla B-1 Características generales de dispositivos de la familia APEX 20K. ............................ 79 
Tabla B-2 Características específicas de los dispositivos APEX 20KC (1.8 V) ........................... 80 
Tabla B-3 Características específicas de los dispositivos APEX 20K (2.5 V) .............................. 80 
Tabla B-4 Características específicas de los dispositivos APEX 20KE (1.8 V) (parte 1 de 2) ..... 81 
Tabla B-5 Características específicas de los dispositivos APEX 20KE (1.8 V) (parte 2 de 2) ..... 81 
Tabla B-6 Características generales de dispositivos de la familia FLEX 1 OK .............................. 82 
Tabla B-7 Características específicas de los dispositivos APEX 1 OKE (2.5 V) ........................... 82 
Tabla B-8 Características específicas de los dispositivos APEX 1 OK y 1 OKA (5.0 V Y 3.3 V) .. 83 
Tabla B-9 Características específicas de los dispositivos APEX lOK y lOKA (5.0 V Y 3.3 V) .. 83 
Tabla C-1 Simbología empleada en las tablas de jerarquías de compilación ............................... 84 
Tabla C-2 Recursos empleados para AES en un dispositivo EP20K600EBC652-1X ................. 85 
Tabla C-3 Recursos empleados para AES_II en un dispositivo EP20K600EBC652-1X ............ 86 
Tabla C-4 Recursos empleados para AES_II en un dispositivo EPF10KlOOEBC356-l ............. 86 
Tabla C-5 Recursos empleados para AES_III en un dispositivo EP20K600EBC652-1X ........... 87 
Tabla C-6 Recursos empleados para AES_III en un dispositivo EPF10KlOOEBC356-l.. .......... 87 
12 
Tabla G-1 Comandos en la Barra de Herramientas ..................................................................... 112 
Tabla G-2 Descripción de indicadores en la barra de estado ...................................................... 116 
Tabla G-3 Comandos del menú Archivo ..................................................................................... 125 
Tabla G-4 Comandos del menú Modalidad ................................................................................. 126 
Tabla G-5 Comandos del menú Configuración ........................................................................... 127 
Tabla G-6 Comandos del menú Ver ............................................................................................ 127 
Tabla G-7 Comandos del menú Ayuda ....................................................................................... 128 
Tabla H-1 Señalización PCI en las terminales del box header. ................................................... 133 
13 
INTRODUCCIÓN. 
Cada día se incrementa el empleo de los sistemas computacionales, ya sea en el hogar, el trabajo, 
las escuelas, los negocios o en los centros de investigación, dando como consecuencia el aumento 
en mayor proporción de la cantidad de información procesada por estos sistemas. Junto con el 
crecimiento del volumen de la información que se procesa en las computadoras, es obvio que, la 
mayor parte de ésta información, es de gran importancia para su propietario, y en algunos casos 
está resulta ser de carácter confidencial y en casos más específicos puede ser de carácter secreto, 
dependiendo, por supuesto, del ámbito donde se encuentre la información. 
Para la protección de la confidencialidad de nuestra información contenida en los sistemas 
computacionales, se hace necesario el empleo de mecanismos, que la protejan (p.e. contraseñas, 
codificación, encripción). Aunque para la mayoría de los usuarios (hogares, oficinas y escuelas) 
no es frecuente el desear proteger algún archivo con información, existen situaciones particulares 
donde mantener la información de forma confidencial esparte de un procedimiento sistemático 
de operación, como puede ser en los casos de protección de derechos de autor, de la información 
desarrollada en un centro de investigación científica y en los centros de inteligencia 
gubernamentales. 
Existe en el mercado una amplia variedad de paquetes computacionales destinados a 
proporcionar confidencialidad a la información almacenada en una PC, el paquete computacional 
ofrece poca seguridad fisica, especialmente con respecto al almacenamiento de la llave de 
encripción[ 1 ], inversamente los algoritmos criptográficos, así como sus llaves asociadas, 
implementados en un dispositivo electrónico son, por naturaleza fisicamente mas seguros y no 
pueden ser leídos o modificados fácilmente por un ataque exterior[2]. 
El objetivo del presente trabajo es implementar el algoritmo de encripción avanzado AEA en un 
dispositivo lógico programable (PLD) de alta densidad de tipo FPGA, y que pueda ser controlado 
a partir del bus PCI[3], tomando como base que este bus, entre los disponibles en una PC, es el 
que ofrece mayor velocidad de transferencia de información. Con el fin de aprovechar al máximo 
el potencial de los PLDs de tipo FPGA así como las herramientas computacionales de desarrollo 
que los acompañan, se hará uso de un lenguaje de descripción material como HDL para 
desarrollar la implementación material del AES. 
14 
El capitulo l describe al Algoritmo de Encripción Avanzado, objeto de desarrollo en este trabajo: 
presenta conceptos básicos de algoritmos, así como el proceso de selección del Estándar, la 
notación y convenciones de este mismo, además da una descripción un tanto detallada de la 
especificación, y por último se presentan consideraciones para la implementación de hardware de 
este Algoritmo. 
El capitulo 2 trata lo relacionado con los Dispositivos Lógicos Programables, haciendo énfasis en 
los de tipo FPGA; de igual forma se trata la clasificación y los criterios para la selección del 
dispositivo a emplear. 
La parte medular de este trabajo se presenta en el capitulo 3, se detalla el proceso empleado para 
la especificación del Estandar AES elaborada con un lenguaje de descripción material. 
El capitulo 4 contiene las pruebas efectuadas a la especificación, las optimizaciones elaboradas 
de esta misma, así como un análisis comparativo con otros trabajos semejantes ya realizados. 
También se presentan los recursos de apoyo elaborados para una futura puesta en operación del 
sistema, como son la interfaz de usuario y tarjeta de expansión. 
Las futuras motivaciones de este trabajo y las conclusiones finales se presentan en el último 
capitulo. 
Se podrá encontrar una lista con Acrónimos y definiciones usadas en este trabajo en el ANEXO 
A. 
l. CAPITULO 1: EL ALGORITMO DE ENCRIPCION 
A V ANZADO (AES). 
1.1. INTRODUCCIÓN A LA ENCRIPCIÓN. 
15 
La criptología es una rama de las matemáticas que estudia los aspectos y contenidos de la 
información en condiciones de secrecía. La criptología se divide en criptografia y criptoanalisís. 
La c1iptografia es el arte y ciencia de ocultar mensajes de forma segura, ya sea por medio de una 
clave secreta o por un método enigmático que altere los símbolos de la infonnación sin alterar su 
contenido, convirtiendo a la información modificada en un conjunto de símbolos sin contenido 
para las partes que no conocen el método de alteración; por otro lado, el criptoanálisis es el arte y 
ciencia de poder saber el contenido de mensajes cifrados, aplicando metodologías y técnicas . que 
penniten recuperar la información que ha sido previamente tratada por un procedimiento 
criptográfico, sin conocer a priori el método utilizado para la criptografia[4]. 
Ahora bien, se desea proteger la información contenida en un archivo de computadora, de tal 
fonna que la información contenida en él sea inteligible solo para propietario del archivo o para 
quien esté último decida. Para tal efecto se le aplica al archivo inteligible (generalmente llamado 
en texto plano) una función que lo vuelva ininteligible (texto cifrado), a esta función comúnmente 
se le llama encripción o cifrado'. Cuando nuevamente se desee volver inteligible el contenido del 
archivo cifrado se le deberá aplicar una función inversa denominada decripción o descifrado. 
La función usada para el cifrado y descifrado es llamada algoritmo criptográfico. Trasladándonos 
a tiempos remotos, la seguridad de cualquier cifrado radicaba en mantener en secreto la fonna de 
cómo operaba el algoritmo criptográfico. En la actualidad este problema se ha esuelto con el uso 
de una llave de cifrado o encripción. Esto dio origen a dos tipos de algoritmos basados en llaves: 
los algoritmos simétricos y los asimétricos. 
I Los términos cifrar y encriptar serán usados en forma indistinta en este documento; al igual que los términos 
descifrar y decriptar. 
1.1.1. ALGORITMOS SIMÉTRICOS. 
Estos algoritmos son comúnmente llamados algoritmos de llave secreta, algoritmos de llave 
simple o algoritmos de una llave, ya que por lo general, tanto para el cifrado y descifrado se 
emplea una sola llave de encripción. Regresando al caso de nuestro archivo de computadora 
encriptado, aquel que desee conocer el contenido de este archivo, deberá contar con la llave usad;1 
para cifrar este archivo. La seguridad en este tipo de algoritmos radica en mantener secreta l;1 
llave de encripción. 
Los algmihnos simétricos, a su vez, son divididos dentro dos categorías. Una categoría abarca ,l 
aquellos algoritmos que operan sobre un bit (o a veces sobre un byte) del texto plano a la vez, 
estos algoritmos son llamados algoritmos de flujo. Otra categoría abarca a aquellos algoritmos 
que operan sobre grupos de bits del texto plano, ya que operan sobre bloques de bits, estos 
algmitmos se les conoce como algoritmos de bloque. 
Como ejemplos de algoritmos simétricos se pueden citar a: 
DES (Data Encryption Standard - Estándar de Encripción de Datos) 
DES tuvo su origen en un programa destinado a la protección de datos, presentado por el 
Instituto Nacional de Estándares y Tecnología (NIST - National lnstitute of Standard.\· anc/ 
Technology), de los EE.UU. DES fue adoptado por ·eI gobierno de los EE.UU. como estándar 
en 1977 y como estándar ANSI (American National Standards lnstitute - Instituto Nacional 
de Estándares Americanos) en 1981. El tamaño de bloque es de 64 bits y la llave de 
encripción tiene un tamaño de 56 bits. Su funcionamiento, aunque complicado, está basado en 
simples operaciones lógicas, tales como sustituciones seguidas de permutaciones, realizadas 
sobre grupos de bits. La combinación de estas operaciones es realizada 16 veces sobre cad,1 
bloque resultante. 
Triple-DES 
Es una variación del algoritmo anterior, pensada para aumentar su seguridad y al mismo 
tiempo mantener la compatibilidad con las implementaciones ya hechas de DES. Triple-DES 
consiste en aplicar DES tres veces con dos(o tres) claves diferentes, de la siguiente manern: 
en primer lugar se cifra el texto en claro empleando la primera clave, después se 
descifra(vuelve a encriptar) el criptograma obtenido con la segunda y finalmente se vuelve a 
cifrar con la primera(tercera). Para descifrar el mensaje se aplica el proceso inverso. Esto 
equivale a un cifrado con una clave de doble(o triple) longitud. 
IDEA (lnternational Data Encryption Algorithm, Algoritmo Internacional de Encripción de 
Datos) 
Sistema criptográfico simétrico, desarrollado en Zurich en el año de 1990 por James L. 
Massey y Xuejia Lai. El tamaño del bloque es de 64 bits, la longitud de llave de encripción es 
de 128 bits. El sistema realiza 16 iteraciones en tof':11. Inicialmente el bloque inicial se divide 
en cuatro sub-bloques, en cada iteración se aplican operaciones de XOR, suma y 
multiplicación sobre los cuatro sub-bloques y 16 subllaves. Además, el segundo sub-bloque 
es intercambiado con el tercero. Y finalmente los cuatro sub-bloques son combinados con 4 
subllaves en una transformación de salida. Estealgoritmo es de libre difüsión y no estú 
sometido a ningún tipo de restricciones o permisos nacionales, por lo que se ha difundido 
ampliamente, utilizándose en sistemas como UNIX y en programas de cifrado de con-eo 
como PGP. 
17 
Blowfish 
Desarrollado por Bruce Schneider. El tamaño del bloque es de 64 bits; la llave de enc1ipción 
es de tamaño variable con un limite de hasta 448 bits. El algoritmo consiste en dos partes: 
expansión de la llave y encripción de datos. La expansión de la llave consiste en generar 
subllaves a partir de la llave de encripción, se generan hasta un total de 4168 bytes. La 
encripción de los datos consiste en una función iterada 16 veces. Cada iteración consiste en 
una pe1mutación dependiente de la llave y una sustitución dependiente de la llave y de los 
datos. Las operaciones básicas realizadas por el algoritmo son adiciones y XORs en palabras 
de 32 bits. 
RC4 (Rivest'.\· Code 4) 
RC4 es un algoritmo de cifrado de flujo de clave de tamaño variable. Fue desairnllado en el 
año 1987 por Ron Rivest para la compañía RSA Data Security, Inc. A pai1ir de la llave de 
encripción se genera una serie de números aleatorios a los cuales se aplica una operación 
XOR junto con los caracteres del mensaje, obteniéndose el criptograma. Para descifrar, se 
aplica la misma operación, esta vez con los caracteres del criptograma. RC4 es un alg01itrno 
que se utiliza en diversos productos comerciales. 
l.l.2. ALGORITMOS ASIMÉTRICOS. 
Estos algoritmos son comúnmente conocidos como algoritmos de llave publica, ya que la llave 
con que se cifra un archivo puede hacerse publica, de aquí que la llave de enc1ipción y la de 
decripción sean diferentes. La llave de decripción es llamada llave privada, solo aquella persona 
que contenga la llave privada puede saber el contenido de un archivo cifrado con la llave publica. 
Estos algoritmos basan su fortaleza en la dificultad de calcular logaritmos discretos. 
Como ejemplos de algoritmos asimétricos podemos citar a: 
Diffie-Hellman. 
El principal propósito de este algoritmo es permitir el intercambio de llaves entre dos usua1ios 
en forma segura. E algoritmo funciona de la siguiente ~rma: 
RSA. 
Se escogen dos números públicos q y a entre los usuarios con q<a. 
El usuario A selecciona un valor privado XA ( XA < q) calcula Y A =ax, y se lo envía a I 
usuario B. 
El usuario B también selecciona un valor privado X8 (X8< q) calcula Y B=a x,. y se lo 
envía al usuario A. 
Se generan las llaves secretas en ambos lados con: K= (YslA mod q ó K=(Y A) x,. mod e¡ 
según corresponda. 
Para la encripción de un mensaje M en este algoritmo, se tiene, como llave publica un número 
n producto de dos números primos (p y q); y e primo para ¡o-1 )(q-1 ). La llave p1ivada es 
d=e· 1 mod ((p-l)(q-1)). 
Para encriptar datos se emplea c=Me mod n. Para la decripción M=cd mod n. 
IX 
EIGamal. 
ElGamal puede ser empleado para encnpc1on de un mensaje M: primeramente se escoge un 
número primo p, y dos números aleatorios, g y x, tal que ambos sean mucho menores que p. 
Se calcula y = gx mod p. La llave publica es y, g y p. La llave privada es x, donde x < p. Pé!ra 
encripción se escoge un numero aleatorio k primo a p- 1. Se tiene calcula en cifrado, donde a 
= fÍ' mod p, y h= /M mod p son el texto cifrado. La decripción es M=b/ax mod p. Cabe notar 
que en este algoritmo, el texto cifrado es dos veces mayor que el texto plano. 
1.2. SELECCIÓN DEL NUEVO ESTÁNDAR DE ENCRIPCIÓN 
AVANZADO. 
En enero de 1997 el Instituto Nacional de Estándares y Tecnología (NIST) de los EE.UU. 
anunció la iniciativa para desarrollar un nuevo estándar de encripción llamado Estándar de 
Encripción Avanzado (AES). A diferencia del proceso de selección de DES (Data EnCJyption 
Standard - Estándar de Encripción de Datos, FIPS PUB 46[5]), de SHA-1 (Secure Hash 
Algorithm - Algoritmo de Seguridad Hash2, FIPS PUB 180-1 [6])y de DSA ([)igital Signaturc 
Algorithm - Algoritmo Digital de Signatura, FIPS PUB 186-2 [7]), el proceso para la selección 
de AES sería abierto, es decir, cualquiera podría presentar un trabajo a fin de ser considerado 
como algoritmo candidato a nuevo estándar de encripción avanzado. NIST no diseño ningún tipo 
de evaluación para probar la seguridad y eficiencia de los algoritmos candidatos, en lugar de ello 
invito a la comunidad criptológica a probar ataques e intentar el criptoanálisis de los diferentes 
candidatos, así como evaluar el costo de implementación. Todos los resultados debieron ser 
enviados a NIST para ser publicados en el sitio web de esté ó para ser presentados en las 
conferencias de AES organizadas por NIST. 
En septiembre de 1997 se publicó la solicitud final para recibir candidatos, el requisito mínimo 
para ser candidato era de presentar un algoritmo simétrico de bloque, capaz de soportar la 
longitud de bloque de 128 bits con llaves de encripción de tamaño de 128, 192 ó 256 bits. NIST 
declaró que el algoritmo debe ser igual de seguro como Triple DES, pero mas eficiente que esté; 
además de que los desarrolladores deberían de poner disponible su algoritmo, libre de derechos 
de autor si resultaran seleccionados como el nuevo AES. Como requisito para ser considerado 
como candidato oficial, cada uno de los desarrolladores entregó los siguientes elementos: 
l . Especificación completa del bloque de cifrado en forma de algoritmo, 
2. Una implementación de referencia en ANSI C, así como optimizaciones matemáticas de 
la implementación en ANSI C y Java, 
3. Implementación de unas series de respuesta conocida (vectores de prueba) y prnebas de 
Monte Cario, a fin de verificar que el algoritmo estuviera bien implementado, 
4. Estimados de eficiencia en software y hardware, ventajas y limitaciones del cifrado en 
varias aplicaciones. 
5. Un análisis de resistencia contra ataques criptográficos conocidos. 
1 Un numero hash es aquel generado por medio de transformaciones especificas a partir de una cadena de texto. es 
casi imposible que una cadena de texto diferente produzca un mismo numero hash de otra cadena de texto. 
19 
1.2.l. PROCESO DE SELECCIÓN. 
El proceso de aceptación de algoritmos finalizó el 15 de mayo de 1998. Todos los candidatos 
aceptados fueron presentados en "La p1imera conferencia de candidatos para estúndar de 
enc1ipción avanzado" celebrada en Ventura California del 20 al 22 de agosto de 1998. La 
conferencia sirvió como inició oficial de la primera ronda de evaluación. 
Los c1iterios de evaluación para la primera fase eliminatoria fueron divididos dentro de tres 
categ01ías: seguridad, costo y por ultimo caracteristicas e implementación del algoritmo .. La 
NIST invito a la comunidad criptológica a participar para la evaluación de estos aspectos, cuyas 
caracteristicas se describen a continuación: 
- Seguridad. 
La seguridad fue la categoria mas importante, y qmzas la mas dificil de evaluar. Solo 
algunos candidatos mostraron algunos errores teóricos en sus diseños, la gran mayotia fue 
clasificado dentro la categoria de "debilidades no demostradas". 
- Costo. 
Se refinieron dos categorias: la primera asociada a los costos con la propiedad intelectual 
y las patentes; y la segunda categoria asociada a los costos de implementación y 
ejecución, es decir, aspectos relacionados a la implementación en software como 
eficiencia computacional, tamaño del programa y memoria requerida, por otra pmte en las 
implementaciones en hardware se considero el área que ocuparla implementar el 
algoritmo en un circuito integrado. 
- Caracteristicas del Algoritmo y de implementación. 
Para este aspecto se consideró la versatibilidad, es decir la habilidad del algoritmo para 
ser implementado en diferentes plataformas (desde microcontroladores de 8 bits. hasta 
Smart Cards); otro aspecto a considerar fue la velocidad con que la llave esta disponible 
para ser utilizada, nombrando a esta caracteristicas agilidad de la llave; y diseiio sin¡ple: 
que esta relacionado al tamaño de la descripción del algoritmo, así como alnumero de 
diferentes operaciones usadas para la especificación. 
En marzo de 1999 la segunda conferencia de .candidatos a AES fue en Roma, Italia. En esta 
conferencia se presentaron trabajos realizados sobre los candidatos. En la sesión relativa a 
ataques criptográficos los algoritmos FROG(TecApro CR), Magenta(Deutsche Telekom DE) y 
LOKI97(Brown et al AU) no obtuvieron resultados satisfactorios con respecto a los 
requerimientos de seguridad impuestos por NIST; por otro lado DEAL(Outerbridge, Knudsen 
USA-DK) no satisfizo los requerimientos de seguridad y HPC (Schroeppel USA) comenzó a 
mostrar ciertas debilidades. Lo anterior eliminaba a cinco candidatos. Igualmente se presentaron 
trabajos de desempeño en un microprocesador Pentium[8] donde los algoritmos mas rápidos en 
este microprocesador fueron: RC6, Rijndael, Twofish, MARS y Crypton, los otros candidatos 
como DEAL, Frog, Magenta, SAFER+ y Serpent aparentaron lentitud; otros esciitos (9]( 1 O] lo 
confinnaron. Relacionado con el desempeño de los candidatos en implementación en "smmt 
cards" con microprocesadores de 8 y 32 bits se presentaron algunos trabajos[l 1][9], destacando 
Rijndael como el mejor en esta plataforma de desarrollo. 
En agosto de 1999 NIST anunció a los cinco finalistas: MARS, RC6, Rijndael, Serpent y 
Twofish, al mismo tiempo que publicó un reporte[l2] donde se describen los pom1enores de la 
selección. Las siguientes pruebas a estos cinco fmalistas fueron enfocadas a realizar c1iptoanálisis 
a los algoritmos y a la implementación en hardware de los mismos. 
20 
1.2.2. LOS FINALISTAS 
Una breve descripción de los cinco finalistas se presenta a continuación: 
MARS 
Desarrollado por IBM (Jnternational Business Machines Corporation). A un bloque de 
entrada, MARS aplica inicialmente una adición de llave, luego aplica 8 iteraciones de 
mezclado de "ida" sin uso de llave, en las siguientes 16 iteraciones si emplea la llave: 8 
iteraciones de una transformación de "ida" y 8 iteraciones de una transfo1mación de 
"regreso", seguidas de 8 iteraciones de mezclado de "regreso" sin uso de llave. finalmente se 
aplica una substracción de llave. Las iteraciones 911 llave usan tablas de substitución (S-Box). 
adición, y operaciones XOR. Las iteraciones con llave emplean operaciones como 
multiplicación, rotaciones dependientes de los datos y adiciones de llave. Mayor info1111ación 
sobre este algoritmo lo podrá encontrar en [ 13]. 
RC6 
Este algoritmo de encnpc1on fue desarrollado por los laboratorios RSA[ 14]. El tamaño del 
bloque es de 256 bits, la llave de encripción puede ser de 128, 196 o 256 bits, el numero de 
iteraciones para el bloque es de 20. De forma general el algoritmo opera en la siguiente 
manera: Inicialmente el texto plano se almacena en cuatro registros de 32 bytes (tamaño del 
bloque), la llave inicial es expandida y almacenada en un arreglo de 44 elementos de 256 bits 
cada uno. Se aplica una operación XOR con el segundo y cuarto registro con los 2 primeros 
elementos de la llave. A continuación se efectúan las 20 iteraciones del bloque, confonnadas 
por operaciones sobre los 4 registros de multiplicación modular de 32 bits, adición, 
operaciones XOR con la llave y entre registros, para concluir finalmente con una operación 
XOR con el primer y tercer registro con los dos últimos elementos del arreglo de la llave. La 
decripción opera en forma inversa ala encripción. 
Rijndael 
Rijndael fue desarrollado por dos particulares loan Daemen y Vincent Rijmen. Rijndael es un 
algoritmo con longitudes de bloque y de llave variables. El tamaño del bloque y el tamaño de 
la llave puede ser independientemente especificados con múltiplos de 32 bits, teniendo como 
mínimo 128 bits y un máximo de 256 bits. Las operaciones especificadas en Rijndael están 
orientadas a byte. El tamaño de la llave determina el numero de iteraciones que se realizaran 
sobre el bloque. Una descripción mas detallada de este algoritmo se presenta en las secciones 
l.3 y l.4. ó en [15]. 
Serpent 
Fue desarrollado por Ross Anderson (Universidad de Cambridge), Eli Biham (Technion), y 
Lars Knudsen (Universidad de California San Diego). El algoritmo consiste en una 
transformación lineal basada en sustitución. El tamaño del bloque de encripción es de 128 
bits, el tamaño de la llave puede ser variable, pero para la propuesta se especificó de 128, 196 
o 256 bits. Consta de 32 iteraciones, previo a iniciar las iteraciones, se aplica una pennutación 
inicial; a cada iteración se le aplica tres operaciones, a saber: Una operación XOR con una de 
las 33 subllaves disponibles, una sustitución en paralelo de 32 bits con una de las ocho S-Box 
especificadas y por ultimo se aplica una transformación lineal. En la ultima iteración, una 
segunda operación XOR con una subllave es aplicada, reemplazando a la transfonnación 
lineal. Finalmente se aplica nuevamente una permutación lineal. Para la dec1ipción se 
diferencia de la encripción en que las S-Boxes deben ser empleadas en orden inverso, así 
21 
como aplicar la función inversa de la transformación lineal, al igual que usar las subllaves en 
orden inverso. El algoritmo completo se encuentra disponible en [ 16]. 
Twofish 
Fue desarrollado por un equipo dirigido por Bruce Schneier[ 17]. Twofish es un alg01itmo que 
opera sobre bloques de 128 bits. La longitud de la llave de encripción puede ser de 128, 196, 
256 o mayor. Consiste en 16 iteraciones de tipo Feistei3 modificado con rotaciones de I bit. 
En cada iteración las operaciones modifican una palabra de 32 bits aplicándole una 
sustitución dependiente de la llave por medio de S-Boxes, seguida de una transfonnación 
seudo- Hadamard y una adición de llave. 
Finalmente el 2 de octubre del 2000 NIST anunció oficialmente que el algoritmo elegido para ser 
el nuevo AES fue Rijndael. De igual forma NIST publicó un reporte donde se resumen las 
contribuciones y motivaciones de esta elección[ 18]. 
AES comenzó a ser un Estándar del Gobierno Norteamericano a partir del 26 de Mayo del 2002 
(FIPS PUB 197[20]) reemplazando al Estándar de Encripción de Datos (DES) [ 19]. A ES será 
usado principalmente por Organismos Gubernamentales Norteamericanos para proteger la 
información delicada y dificil de clasificar; aunque, NIST anticipa que AES podrá ser usado 
voluntariamente por organismos e instituciones no gubernamentales dentro y fuera de los Estados 
Unidos. 
1.3. NOTACIÓN Y CONVENCIONES DE AES 
La notación y convenciones para la especificación de AES se exponen en este apaitado, 
solamente se pretende exponer la forma en que los bits, bytes, y arreglos de estos son utilizados y 
tratados en la especificación y no hacer un trabajo detallado acerca de la notación y las 
matemáticas utilizadas en el algoritmo. 
1.3.1. BITS Y BYTES 
La entrada y la salida de AES consisten en secuencias de 128 bits. La llave de encripción es una 
secuencia de 128,192 o 256 bits. Los bits se numeran comenzando en cero y tenninando en un 
numero menor al tamaño de la secuencia, es decir, para una secuencia de 128 bits, los bits irád 
numerados del numero O al numero 127. Al número que acompaña al bit se le llama índice. 
La unidad básica de procesamiento en el AES es el byte, que es conformada por una secuencia de 
ocho bits. Los bytes pueden ser representados por una concatenación de los valores indivi<:fuales 
de los bits. Estos bytes pueden ser interpretados como un campo füúto de elementos usando la 
siguiente representación polinonúal: 
( l. 1) 
3 Generalmente Feistel es un método de transformación de cualquier función, empleando para ello una permutación. 
22 
Los arreglos de bytes pueden ser representados de la siguiente forma: 
( 1.2) 
De aquí que, el ancho de los bloques conforme al estándar puede ser de n= 1 ó, si se trata del 
bloque de entrada o de salida en AES de 128 bits y n=J6 para una llave de longitud igua\mentc 
de 128 bits, n=24 para una llave de longitud de 192 bits y n=32 para una llave de longitud de 256 
bits. 
Resumiendo: elíndice de los bits y bytes de entrada están dados por la tabla 1-1. 
Tabla 1-1 Índice para bytes y bits. 
Secuencia de 
,entrada dél o 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ... 
l!it. , ' 
>:J'lumero de o 1 2 
byte 
... 
' 
,Numer.ación 
' d~! bit ,t'erit~o . 7 6 5 4 3 2 1 o 7 6 5 4 3 2 1 o 7 6 5 4 3 2 1 ll ... 
, ' del byte 
""" 
1.3.2. PALABRA 
Una palabra consiste en un arreglo lineal de 4 bytes (representado en la figura 1.1.), es decir. de 
32 bits. Este tipo de dato generalmente es usado en las operaciones de MixColumns y 
KeyExpansion que serán tratadas en secciones posteriores. 
ªº 
Fig. 1.1 Representación grafica de una Palabra. 
1.3.3. EL ESTADO 
internamente AES opera sobre un arreglo bidimensional de bytes, este arreglo bidimensional es 
llamado el estado. El estado consiste en cuatro renglones de bytes, cada renglón contiene N b 
bytes, donde Nb es la longitud del bloque dividido entre 32. El arreglo estado se menciona como 
s, cada byte individual tiene dos subíndices, r el numero de renglón en el intervalo de O ~ r < 4 y 
e el numero de columna en el intervalo de O ~ e < Nb . Por lo tanto para hacer referencia a un 
byte individual del Estado se escribirá sr,c o s[r,c]. Para AES Nb=44 . 
Al inicio, ya sea de la encripción o de la decripción los bytes de entrada son copiados dentro del 
estado como se ilustra en la figura 1.2. Todas las operaciones en el AEA se efectúan sobre el 
estado, el resultado final es copiado a otro arreglo de salida. 
4 En Rijndael Nb puede tomar un valor diferente a 4. 
23 
bytes de entrada estado bytes de salida 
ino i114 ins Ílt12 So S4 Sg s,2 out o Ollt4 Ollts Oll( f2 
in, ins in9 in13 S¡ S5 S9 S13 out, 011(5 OU(9 Olltu 
in2 in6 in 10 il114 s2 S6 S¡() S¡4 out2 out6 out 10 011 f /4 
i113 i117 ill II in15 SJ S7 su S¡5 out3 011(7 out 11 Oll(¡_,¡ 
Fig. 1.2 Arreglos de entrada, estado y salida 
1.4. ESPECIFICACIÓN 
Para AES el tamaño de los bloques de entrada, de salida y el estado es de 128 bits. Esto esta 
representado por Nb = 4, lo que significa el numero de palabras de 32 bits (numero de columnas) 
en el estado. 
Por otra parte el tamaño de la llave de encripción puede ser de 128, 196 o 256 bits. El tama110 de 
la llave se representa como Nk = 4,6, o 8, que de igual fom1a representa el numero de palabras de 
32 bits (así como el numero de columnas) contenidas en la llave de encripción. 
El numero de iteraciones (o rondas) que son ejecutadas durante la encripción o decripción 
depende directamente del tamaño de la llave, el numero de rondas es representado por Nr, y esta 
dado por la siguiente combinación descrita en la tabla 1-2. 
La función iterativa esta compuesta por diferentes transformaciones: 
l. Una sustitución de bytes empleando una caja S (S-Box). 
2. Corrimiento de bytes en el Estado a diferentes distancias. 
3. Mezcla de datos entre columnas del Estado. 
4. Inserción de la llave de encripción. 
Tabla 1-2 Numero de rondas por combinaciones de tamaño de llave y bloque en AES. 
4 
11 
4 -¡¡ 10 
··--··--··-·--··--·--... ~. 
J 11 6 4 12 
l 
-,. -------------·--·-----·- ---
li 8 4 14 
1 
--- r 
1 
1 
24 
Estas transformaciones y sus inversas (para la decripción) son descritas con detalle en ¡20), para 
efectos de implementación se describen las tres partes constitutivas del algoritmo en los apa11ados 
siguientes. 
1.4.1. LISTA DE LLAVES 
La programación de la llave consta en sí de dos con'lponentes: La expansión de la llave y la 
selección de la Ronda. La expansión de la llave define como la llave expandida se deriva de b 
llave de cifrado. El numero total de bits de la llave expandida es igual al tamaño (en bytes) de l,1 
llave de cifrado multiplicado por el numero de rondas mas una ronda adicional (ver sección 
anterior para el numero de rondas). Para el caso especifico de esta implementación dado que el 
tamaño del estado y de la llave de cifrado es 16 bytes, el numero de rondas es I O, el tamaiio de )¡¡ 
llave expandida es de 176 bytes. La llave expandida siempre es derivada de la llave de cifrado. 
nunca deberá ser especificada directamente. 
AES toma la llave de encripción, K, y desarrolla una rutina de expansión de llave para generar 
una lista de llaves. La rutina de expansión genera un total de Nb (Nr+ 1) palabras. El algoritmo 
requiere un co~junto inicial de Nb palabras de la llave. La lista de llaves resultantes consiste en 
un mTeglo lineal de palabras, llamado lw¡ 1, con i en el intervalo O :Si :S N" ( N,. + 1) 
El algoritmo de expansión de llave se apoya de dos funciones llamadas SubWord( ) y 
RotWord( ) así como de una constante de nombre Rcon(i) . La función SubWord( ) toma una 
Palabra de entrada y aplica una sustitución de cada byte con los bytes contenidos en una tabla 
llamada S-Box. Por otro lado la función RotWord( )toma una palabra de entrada [ao,a1,a2.a,] y 
desan-olla una permutación cíclica, devolviendo como resultado una palabra de la lo_m1,1 
[a1,a2.a3,ao). 
La operación de estas dos funciones se ilustra en la figura 1.3: 
5-Box RotWord() 
ªo ª1 
ª1 ª2 
ª2 a' 2 ª2 ª3 
ª3 a' 3 33 ªº 
Fig. 1.3 Operación de las funciones SubWord( )y RotWord( ). 
La constante Rcon[i) es una palabra de la forma [RC[i], {00}, {00}, {00}] donde RC[i] contiene 
los valores dados por las siguientes ecuaciones: 
RC[l] = xº 
RC[2] = x 
RC[i] = x • RC[i-1] = xi- l , i>2. 
El seudo código para obtener la llave de expansión se presenta en la figura 1.4: 
KeyExpansion(byte key[4*Nk], word w[Nb*(Nr+l)], Nk) 
begin 
word temp 
i = o 
while (i < Nk) 
( 1.3) 
( 1.4) 
( 1.5) 
w[i] = word(key[4*i], key[4*i+l], key[4*i+2], key[4*i+3)) 
i = i+l 
end 
end while 
i = Nk 
while (i < Nb * (Nr+l)] 
temp = w[i-1) 
if (i mod Nk = O) 
temp = SubWord(RotWord(temp)) xor Rcon[i/Nk) 
else if (Nk > 6 and i mod Nk = 4) 
temp = SubWord(temp) 
end if 
w[i] = w[i-Nk] xor temp 
i = i + 1 
end while 
Fig. 1.4 Seudo código para la expansión de la llave de cifrado. 
Las primeras Nk palabras de la llave expandida (w(O .. Nk-11) son iguales a la llave de encripción. 
r _) 
La siguiente w(i) palabra (para i 2:: 4) son el resultado de aplicar una operación XOR a la palabra 
previa (w(i-11) con la palabra localizada Nk posiciones atrás(w(i-Nkl). 
Para obtener las palabras en posiciones múltiplos de Nk se aplica la función RotWord( ) a la 
palabra previa (w(i-1]), seguida de una aplicación de la función SubWord( ), termimmdo con una 
operación XOR con Rcon[i) antes de la operación XOR con w[i-Nk). 
Una operación especial se realiza para hallar la Palabra w(il cuando se cumple que Nk>6 e i mod 
N k = 4, esta operación consiste en aplicar solamente la función SubWord( ) a la palabra previa 
w(i-1) antes de la operación XOR con w(i-Nk). 
l.4.2. ENCRIPCIÓN 
Al comienzo de la encripción, la entrada es copiada al Estado usando las convenciones desc1itas 
en la sección 1.3.3. Después de una adición de la llave de encripción, el Estado es transfonnado 
por una función llamada ronda, 10,12 o 14 veces (dependiendo del tamaño de la llave de 
encripción) y finalmente se le aplica una ronda final, misma que es similar a la ronda con un paso 
omitido (MixColumns ). 
El seudo código del cifrado se presenta en la figura 1.5: 
Cipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+l)]) 
begin 
end 
byte state[4,Nb] 
state = in 
AddRoundKey(state, w[O, Nb-1]) 
for round = 1 step 1 to Nr-1 
SubBytes(state) 
ShiftRows(state) 
MixColwnns(state) 
AddRoundKey(state, w[round*Nb, (round+l)*Nb-1]) 
end for 
SubBytes(state) 
ShiftRows(state) 
AddRound.Key(state, w[Nr*Nb, (Nr+l)*Nb-1]) 
out= state 
Fig. 1.5 Seudo código para la rutina de cifrado. 
Las transfonnaciones al Estado contenidas en la Ronda son descritas a continuación. 
1.4.2.1 Transformación SubBytes() 
26 
La transfom1ación SubBytes( ) es una sustitución lineal que opera sobre cada byte independiente 
contenido en el Estado. Se emplea una tabla de sustitución llamada S.Box la cual es inve1tible y 
se constmye por medio de dos transformaciones:1. Se toma el inverso multiplicativo en el campo finito GF(i) del byte tal como se describe en [2 1] 
2. Se aplica una transformación "affine" al byte sobre GF(2): 
( 1.6) 
donde b¡ es el Íavo bit del byte, y C¡ es el Íavo bit del byte e con valor { O 1100011 ) . 
La figura 1.6 ilustra el efecto de la transformación SubBytes( ) en el Estado. 
5-Box 
50
0.J 
5'1.J 
50
2,0 
50
2,1 5' 2.2 
50
2.J 
51
3,0 s'J,1 s' 3.2 
51
3,3 
Fig. 1.6 La transformación SubBytes() aplica la S-Box a cada byte del Estado. 
27 
1.4.2.2 Transformación ShifRows( ). 
En la transformación ShiftRows( ), los bytes de los tres. últimos renglones del Estado son rotados 
sobre diferentes números de bytes. El primer renglón no se rota. 
La transfonnación ShiftRows( ) procede como sigue: 
s',. e= s, (,+,/11_.,.,. Nh))modNh para o< r < 4 y o~ e< Nb 
• • . I\ • 
donde el valor de rotación shift(r,Nb) depende del numero de renglón (r) 
shift(l,4)=1; shift(2,4)=2; shift:(3,4)=3; 
La figura 1. 7 ilustra la transformación de ShiftRows sobre el Estado. 
s 
5o,o 50,1 
5 1,0 5 1,1 
52.0 52,1 
53,0 sJ.1 
5 0,2 
5 1,2 
5 2,2 
sJ.2 
50,J 
51,J 
52,J 
5 3,3 
r-fCID¡ 
rKTI:J 
rfflllD, 
s' 
5 o,o 5 0,1 5 0,2 
5 1.1 5 1,2 5 1,3 
5 2,2 5 2,3 5 2,0 
·5 3,3 5 3,0 5 3,1 
5 o,3 
5 1,0 
52.1 
53,2 
Fig. 1.7 La transformación ShiftRows() rota los últimos tres renglones del Estado. 
1.4.2.3. Transformación MixColumns( ). 
( 1. 7) 
( 1.8) 
La transformación MixColumns( ) opera sobre el Estado columna por columna, tratando cada 
colunma como m arreglo de 4 bytes, tal como se describe en la sección 1.3.2. Las columnas son 
consideradas como polinomios sobre GF(28) y multiplicadas modulo x4+1 con un polinomio fijo 
a(x) dado por: 
a(x) = {03}x3 + {Ol}x 2 +{Ol}x+{02} ( 1.9) 
En notación matricial esta multiplicación se escribe: 
[ 
s'o,c.] [ 02 03 01 01 J-[ So,c] S11,c = 01 02 03 01 - S1,c 
s'2,c O I O 1 02 03 S2,c 
s\c 03 01 01 02 SJ,c 
( l. 1 O) 
La figura 1.8 ilustra la transformación MixColumns() sobre el Estado: 
28 
MixColumns 
50
0.2 
50
0,J 
5 1,c 5 1.2 
5 1,J 
5 1,c 5 '1 .2 
50
1,J 
5 2,c 
5 2,2 52,J 5 '2.2 s'2,J 
5 J,o 
~.e 
5 J.2 
5 3,J 5'3,0 
51
32 s'J J 
Fig. 1.8 MixColumns() opera sobre el Estado columna por columna. 
1.4.2.4. Transformación AddRoundKey( ). 
En la transformación Add.RounclKey( ), una ronda de la llave es agregada al Estado por medio de 
una simple operación XOR a nivel de bit. Cada Ronda de llave consiste en Nb Palabras lomadas 
de la lista de llaves. Estas Nb Palabras son agregadas dentro las columnas del Estado como sigue: 
[s'o.c, s' 1,c, s'2.c, s\cl= [so.e, S1,c, S2,c, SJ,c] El) [w ronda*Nb+c] para Ü $ C < Nb ( 1 . 1 1) 
donde: lwd es la lista de llaves descritas en la sección 2.3.1, y ronda es un entero en el inte1valo 
O S ronda S Nr . 
La figura 1.9 ilustra la transfonnación de AddRoundKey en el Estado. 
5 o,c 
5 0.2 5 o,3 
50
0,2 
50
0,3 
5 1,c 50
1,2 s'1,J 
w1 wl+c W1+J 5 2,c 
1+2 
5 2,2 5 2,3 
51
2,2 5'2.J 
5 J,o 
5 3,c 
5 3,2 5 J,J 5'3,0 s'J.2 s'J .J 
1 = ronda x Nb 
Fig. 1.9 AddRoundKey() aplica un XOR de cada columna en el Estado con una Palabra de la lista de llaves. 
l.4.3. DECRIPCION 
Las transformaciones descritas en la sección anterior pueden ser invertidas e implementadas en 
orden inverso para producir la decripción de AES. 
La figura l. l O muestra el seudo código para la decripción. 
InvCipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+l)]) 
begin 
end 
byte state[4,Nb] 
state = in 
AddRoundKey(state, w[Nr*Nb, (Nr+l)*Nb-1]) 
for round = Nr-1 step -1 downto 1 
InvShiftRows(state) 
InvSubBytes(state) 
AddRoundKey(state, w[round*Nb, (round+l)*Nb-1]) 
InvMixColUIIUls(state) 
end for 
InvShiftRows(state) 
InvSubBytes(state) 
AddRoundKey(state, w[O, Nb-1]) 
out= state 
Fig. 1.1 O Seudo código para la rutjna de decripción. 
l.4.3.l. Transformación InvSubBytes( ). 
29 
Es el inverso de la transfom1ación SubBytes( ), en el cual el inverso de la S.Box se aplicará sobre 
cada uno de los bytes que conforman el Estado. Este se obtiene aplicando el inverso de l;i 
transfonnación affme, y posterionnente hallando el inverso multiplicativo en GF(28). 
El inverso de la transformación Affine esta dada por 
( 1. 12) 
donde b; es el Íavo bit del byte, y d; es el Íavo bit del byte d con valor { 00000 l O l } . 
1.4.3.2. Transformación InvShiftRows( ). 
La transfo1mación InvShiftRows( ) es la transformación inversa a ShiftRows( ). Los bytes en los 
últimos tres renglones son rotados a la derecha la misma cantidad de lugares anterionnente 
rotados. 
La figura l. l l ilustra esta operación: 
30 
s s' 
5 o,o 50,1 5 0,2 5 o,3 5 o,o 5 0,1 5 0.2 5 o,J 
51,0 s1.1 s1.2 s1,J s1,J 51,0 s1.1 s1.2 
5 2,0 5 2,1 Si,2 5 2,3 5 2,2 5 2,J Si.o 5 2,1 
5 3,o sJ,1 sJ,2 5 3,J 5 3,1 sJ.2 sJ,J 53,0 
Fig. 1.11 lnvShiftRows() rota los tres últimos renglones del estado. 
1.4.3.3. Transformación InvMixColumns( ). 
La transfonnación MixColumns( ) opera sobre el Estado columna por columna, tratando cada 
columna como un arreglo de 4 bytes, tal como se describe en la sección 2.2.2. Las columnas son 
consideradas como polinomios sobre GF(28) y multiplicadas modulo x4+l con un polinomio fijo 
1 • 
a- (x) dado por: 
a-\x) = {Ob}x 3 +{Od}x2 +{09}x+ {Oe} ( 1 .13) 
1.4.3.4. Inverso de la transformación AddRoundKey( ). 
El inverso de la transformación AddRoundKey( ) descrita en la sección 1.4.2.4. es por si misma 
su inversa, ya que solo involucra la aplicación de una operación XOR. 
1.5. IMPLEMENTACIÓN EN HARDWARE. 
La implementación en hardware del AES presenta algunos problemas relacionados con velocidad 
y área de chip utilizada; pero da la ventaja de disponer de un dispositivo dedicado al cifrado y 
descifrado. Por ejemplo, una implementación del AES en software ejecutándose en un procesador 
de propósito general es muy rápida, pero, mantiene ocupado al procesador para realizar dicha 
tarea, por lo que una implementación en hardware desahoga al procesador del trabajo excesivo 
para que esté pueda atender otras tareas. 
Se tomaron algunas consideraciones para el desarrollo del AES en hardware, tales como la forma 
de implementación la S-Box y la reutilización de módulos. 
1.5. l. S-BOX. 
Se consideraron dos alternativas de diseño para la S-Box (empleada en las funciones SubBytes(), 
InvSubBytes( ) y en SubWord() - ver 1.4.2. l., 1.4.3. l. y 1.4. l. respectivamente): 
• Especificar todas y cada una de las operaciones que realiza la S-Box a nivel de 
transferencia de registros ó 
31 
• emplear tablas que contengan el contenido de los valores de la S-Box. 
1.5.l. l. Implementación e.le la S-Box a nivel de registros. 
Para la primera alternativa de diseño se debe de considerar que la transfonnación S-Box S,rn es 
construida por dos transfom1aciones: 
Son[a] = f(g(a)) ( 1.14) 
donde g(a) es la transformación: 
( 1.15) 
y.l(a) es la transformación "aftine". La transformación g(a) es por sí misma su inversa entonces: 
S
0
n[a]= g- 1(j-1(a)) =g(J-'(a)) ( 1.16) 
De aquí que solo se tuviera la necesidad de implementar las.transformaciones g,f,j" 1 . 
1.5.1.2. Implementación de S-Box en tablas de búsquedas. 
La segunda alternativa considera la implementación de la S-Box en tablas de búsqueda, las 
cuales, por lo general están albergadas en memoria, ya sea RAM ó ROM, dependiendo de la 
versatilidad que se le quiera dar a la implementación. 
1.5.2. ALGORITMO EQUIVALENTE PARA LA DECRIPCIÓN. 
La estructura del AEA es tal que se puede definir un algoritmo equivalente para la decripción, 
en el cual, la secuencia de los pasos es igual al de la encripción, con los pasos, claro esta. 
reemplazados por sus operaciones inversas y un pequeño cambio en la lista de las llaves. Para una 
implementación en hardware esto es de gran ayuda, ya que permite el empleo de los mismos 
bloques para encripción y decripción, empleando solamente una señalización para que el bloque 
ejecute la acción requerida ( cifrar o descifrar). 
A fin de obtenerel algoritmo equivalente para el descifrado, se debe de tomar en cuenta las 
siguientes propiedades del AEA: 
• El orden para la ejecución de InvShifRows() y lnvSubBytes() es indiferente y 
• El orden de AddRoundKey( ) y InvMixColumns ( ) puede ser invertido si la ronda de la 
llave es adaptada correctamente. 
Una explicación detallada de estas propiedades puede ser encontrada en [22]. 
32 
Aplicando las propiedades anteriores se puede obtener el seudo código mostrado en la figura 
1.12. 
InvCipher(State, CipherKey) 
begin 
EqKeyExpansion(CipherKey,EqExpandedKey); 
AddRoundKey(State, EqExpandedKey[Nr]); 
for i = 1 step 1 to Nr-1 
end 
EqRound(State, ExpandedKey[round]); 
end for 
EqFinalRound (State, ExpandedKey[O]); 
Fig. 1.12 Seudo código del Cifrado. 
EqKeyExpansion() es la función usada en conjunto con el algoritmo equivalente para 
descrifado, está definido como sigue: 
• Aplicar KeyExpansion( ). 
• Aplicar la función InvMixColumns( ) a todas las rondas de la llave, excepto a la p1imcra 
y a la última. 
El seudo código de EqRound y EqFinalRound se muestran en la figura l .13: 
Round(State, ExpandedKey[i]) 
begin 
end; 
InvSubBytes(State); 
InvShiftRows(State); 
InvMixColumns(State); 
AddRoundKey (Sta te, ExpandedKey [i·]); 
FinalRound (State, ExpandedKey[Nrll; 
begin 
End; 
InvSubBytes(State); 
InvShiftRows(State); 
AddRoundKey(State,ExpandedKeyCNrll; 
Fig. 1.13 Seudo código para las funciones Round( ) y FinalRound( ) del cifrado. 
1.6. CONCLUSIÓN. 
Se ha presentado un panorama general de la selección del AES, así como algunos conceptos 
básicos de criptología. Del AES se han presentado las tres funciones p1incipales como son h1 
encripción, decripción y la forma de obtener la lista de llaves. Un aspecto importante tratado son 
las consideraciones para la implementación de hardware. 
3] 
2. CAPITULO 2: DISPOSITIVOS LÓGICOS 
PROGRAMABLES 
En los 60's y 70's los diseños eran elaborados con dispositivos estándares, la mejor 
representación de estos dispositivos es la familia ITL 7400 desarrollado por Texas Instrnments. 
Esta primera familia de dispositivos fue considerada como de pequeña escala de integración (SS! 
- Small Sea/e o.f lntegration) por contener solamente compuertas lógicas y algunos flip- flops. 
Pronto aparecieron circuitos integrados (IC - lntegrated Cireuit) de mediana escala de 
integración (MSI - Médium sea/e of lntegration) como decodificadores, multiplexores y 
registros. Tanto los circuitos SSI y los MSI eran montados en tarjetas de circuito impreso ( PC:B -
Printed Cireuit Board) e interconectados por conductores, por lo general de cobre. 
Posterionnente surgieron los circuitos integrados de larga escala de integración (LSJ - Large 
Sea/e /ntegrated) como ejemplo citamos los microprocesadores, memorias RAM y ROM. pue11os 
paralelos, interfaces seriales y controladores de interrupciones. 
Posterionnente a mediados de la década de los 80's la industria electrónica experimento el 
crecimiento en la demanda de computadoras personales, teléfonos celulares y dispositivos. de 
comunicación de datos de alta velocidad. Con el fin de ser competitivos, los fab1icantes 
desarrollaron productos para incrementar su productividad, con alto desempeño, poco consumo 
de energía, dimensiones pequeñas y bajos costos .de producción. Estos productos fueron 
materializados por los fabricantes como sistemas complejos de muy larga escala de integración 
(VLSI - Very Large Sea/e lntegrated), con pocos circuitos integrados y ocupando poca área de 
una tarjeta de circuito impreso. Para el diseño de estos productos existió la necesidad de adoptar 
metodologías modernas de diseño y prueba, así como que esta forma de diseño estuviera bien 
estrncturada. Los lenguajes de descripción material (HDL - Hardware Deseription Language) 
proporcionaron un buen camino para una metodología estructurada y los esfuerzos comenzaron a 
repartirse para el desarrollo de estos lenguajes. Algunos lenguajes como CDL ( Computer Design 
Languages - Lenguajes de diseño de computadoras), ISP (Jnstruetion Set Processor - Conjunto 
de instrucciones para procesador), y AHPL(A Hardware Programming Language - Un lenguaje 
de programación de hardware) fueron usados con anterioridad, pero su fin p1incipal era la 
ve1ificación del diseño de una arquitectura y no tenían la capacidad de modelar diseños. además 
que eran dependientes de la arquitectura del hardware. 
34 
En w1 principio, los HDLs no estaban estandarizados, pero en 1983, el Departamento de Defensa 
de los EE.UU. dentro del programa de circuitos integrados de muy alta velocidad (VHSJC - Verr 
High Speed lntegrated Circuit) comenzó el desarrollo del lenguaje de descripción mate1i¡1I 
VHSJC (VHDL - VHSIC Hardware Description Lang~tage), en agosto de 1985 la versión 7.2 del 
lenguaje fue liberada y en 1987 comenzó a ser estándar de la IEEE. 
Los lenguajes de descripción material facilitan la captura, el entendimiento y el mantenimiento de 
un diseii.o, además no dejan espacio para interpretación por estar bien definidos. los lenguajes 
están estanda1izados, accesibles a todo publico y son aceptados por la industria. Inclusive 
pe1111iten la pmtabilidad entre las herramientas de diseño asistido por computadora (CAD -
Computer-Aided Design) y los módulos resultantes pueden ser reutilizados en diseños füturos. 
Además de los HDLs empleados en las nuevas metodologías de diseño, los fabricantes 
comenzaron a utilizar los PLDs (Programmab/e Logic Device - Dispositivos Lógicos 
Programables), así que, ambos comenzaron a ser piezas importantes para las nuevas 
metodologías de diseño. La figura 2.1. muestra la clasificación de los PLDs. 
PLDs 
Fig. 2.1 Clasificación de los PLDs. 
En particular, los dispositivos lógicos programables de alta densidad (HDPLD - Higher Densitv 
Programmable Logic frvice), que incluyen a los dispositivos de alta densidad complejos (CPLD 
- Complex Programmable Logic Device) y a los arreglos de compuertas programables en campo 
(FPGAs - Field Programmable Gate Arrays), pueden ser usados para integrar grandes cantidades 
de lógica en un mismo IC. Por otro lado los circuitos integrados de aplicación especifica (ASIC -
Application Specific /ntegrated Circuit) también son usados para la integración de gran cantidad 
de lógica, pero los CPLDs y FPGAs presentan la ventaja adicional de una gran flexibilidad de 
diseño al permitir ser modificados mediante programación para realizar una tarea especifica y 
además son adecuados para desarrollar poco volumen de producto final. 
Los fab1icantes de PLDs proveen herramientas CAD que emplean estos lenguajes para el diseño. 
la síntesis, simulación y la programación final de sus dispositivos. La gran mayoria de estas 
herramientas son especificas para ser usados por dispositivos de determinado fabricante. Entre la 
gran cantidad de fabricantes de PLDs Jodemos citar a continuación y por orden alfabético a: 
Actel™, Altera™, Atmel™, CypressT , Lattice™ y Xilinx™; en las subsecciones siguientes se 
presenta una clasificación de PLDs por la cantidad de lógica y área implementada en ellos, donde 
se hará referencia, ha manera de ejemplo, de algunos dispositivos que proveen los fabticantes ya 
citados. 
35 
2.1. DISPOSITIVOS LÓGICOS PROGRAMABLES SIMPLES 
La mayoría de los PLOs están constituidos por una matriz de conexiones, una matriz de 
compuertas ANO y una matiiz de compuertas OR y algunos otros incluyen registros. Con los 
recursos disponibles se implementan las funciones lógicas deseadas mediante un software 
especial y un programador de dispositivos. Las matrices pueden ser fijas o programables. 
2.1.1. ARREGLO LÓGICO PROGRAMABLE 
El dispositivo programable mas simple es el PAL (Programmable Array logic - AITeglo Lógico 
Programable). El circuito interno de una PAL consiste en una matriz de conexiones, una matriz 
de compuertas ANO y un arreglo de compuertas OR. Una natriz de conexiones es una red de 
conductores distribuidos en filas y colwnnas con un fusible en cada punto

Continuar navegando