Tabla de Contenido
Glosario de términos…………………………………………………………… v
Lista de figuras………………………………………………………………….vii
Lista de tablas………………………………………………………………….. ix
Capítulo 1: Introducción.
1.1. Antecedentes………………………………………………………………. 1
1.1.1. Criptografía……………………………………………………………. 3
1.1.2. Metas de la criptografía……………….………………………………..3
1.1.3. Tipos de criptosistemas……………….………….……………………. 5
1.1.4. Verificación compartida………………………………………………..7
1.2. Planteamiento del problema........…………………………………………..7
1.3. Objetivo…………………………………………………………………….8
1.4. Alcances…………………………………………………………………… 9
1.5. Sumario……………………………………………………………………..9
1.6. Referencias…………………………………………………………………9
Capítulo 2: Análisis del algoritmo de Hsu y Wu.
2.1. Esquema de verificación compartida de Hsu y Wu……………….………. 11
2.1.1. Algoritmo……………………………………………………………… 12
2.1.2. Análisis al algoritmo…………………………………………………... 13
2.1.3. Comentarios sobre el algoritmo……………………………………….. 15
2.2. Alternativas de implementación…………………………………………....17
2.2.1. FPGA………………………………………………………………….. 17
2.2.2. ASIC…………………………………………………………………... 19
2.2.3. FPGA vs ASIC…………………………………………………………20
2.5.4. Lenguajes descriptores de hardware…………………………………... 21
i
2.3. Solución adoptada…………….…………………………………………....22
2.4. Sumario…..………………………………………………………………... 25
2.5. Referencias………………………………………………………………....25
Capítulo 3: Diseño del criptosistema
3.1. Diseño general del criptosistema………………………………………….. 27
3.1.1. Esquema de comunicación……………………………………………..28
3.1.2. Esquema de codificación……………………………………………… 31
3.1.3. Simulación del algoritmo de encripción………………………………. 33
3.2. Descripción del diseño…………………………………………………….. 35
3.2.1. Módulo aritmético……………………………………………………...35
3.2.1.1. Formato numérico…………………………………………………. 35
3.2.1.2. Suma con signo……………………………………………………. 37
3.2.1.3. Multiplicación……………………………………………………... 38
3.2.1.4. División……………………………………………………………. 40
3.2.1.5. Potencia……………………………………………………………. 42
3.2.2. Módulo de comunicaciones…………………………………………… 47
3.2.3. Unidad central…………………………………………………………. 48
3.2.3.1. Aportación al esquema de Hsu y Wu………………………………49
3.3. Sumario….………………………………………………………………… 50
3.4. Referencias…………………………………………………………………50
Capítulo 4: Desarrollo y resultados
4.1. Módulo aritmético………………………………………………………….54
4.1.1. Versión preliminar…………………………………………………….. 54
4.1.2. Operaciones básicas………………………………………………….... 55
4.1.3. Función xy ……………………………………………………………... 59
4.2. Módulo de comunicaciones……………………………………………….. 61
4.3. Unidad central……………………………………………………………... 63
4.4. Resultados de la implementación…………………………………………..67
4.5. Sumario……..……………………………………………………………... 69
ii
Capítulo 5: Interfaz gráfica
5.1. Diseño…………..…………………………………………………………. 72
5.2. Desarrollo………….……………………………………………………….74
5.2.1. Panel de transmisión...………………………………………………… 74
5.2.2. Panel de recepción...…………………………………………………... 76
5.2.3. Panel de opciones……….……………………………………………...77
5.3. Resultados…..……………………………………………………………... 78
5.4. Sumario….………………………………………………………………… 79
5.5. Referencia s…………………………………………………………………80
Capítulo 6: Conclusiones
6.1. Resultados…………....……………………………………………………. 81
6.2. Aportación del trabajo..…………………………………………………….83
6.3. Conclusiones…...….………………………………………………………. 87
6.4. Trabajos futuros..….………………………………………………………. 89
6.5. Referencias………….....…………………………………………………...90
Referencias generales..………………………………………………………….93
Anexos…………………………………………………………………………. 97
iii
iv
Glosario de Términos
C
clase
Mensaje cifrado.
Conjunto de características que definen a un objeto dentro de la
POO.
DDS
Digital Signature Standard.
DES
Digital Encryption Standard.
ECDSA
Elliptic Curve Digital Signature Algorithm.
firmante
Persona que envía un mensaje dentro de la verificación
compartida.
firmware
Es el “sistema operativo” de dispositivos de hardware con
capacidad de procesamiento limitada.
GF(p)
Campo finito de Galois.
Half-duplex Campo finito de Galois.
IDEA
Internacional Data Encryption Algorithm.
K
Llave
KD
Llave de decripción.
KE
Llave de encripción.
M
Mensaje a enviar.
mcd
Máximo común divisor.
MD5
Message Digest v5.
mod
Módulo de dos números (residuo).
n
Número de posibles personas a las que se les puede enviar un
mensaje dentro de la verificación compartida.
OOP
Object Oriented Programming (Programación orientada a
objetos).
RC2
Rivest Cipher v2.
RC4
Rivest Cipher v4.
v
SHA
t
Security Hash Algorithm.
Número de personas a las que se les envía un mensaje dentro de
la verificación compartida.
verificador Persona establecida como receptor dentro de la verificación
compartida.
XTR
Es un acrónimo para ECSTR (Efficient and Compact Subgroup
Trace Representation)
Zn
Grupo cíclico de orden n
vi
Lista de Figuras
Fig. 1.1.
Fig. 1.2.
Fig. 2.1.
Fig. 2.2.
Fig. 2.3.
Fig. 2.4.
Fig. 3.1.
Fig. 3.2.
Fig. 3.3.
Fig. 3.4.
Fig. 3.5.
Fig. 3.6.
Fig. 3.7.
Fig. 3.8.
Fig. 3.9.
Fig. 3.10.
Fig. 3.11.
Fig. 3.12.
Fig. 3.13.
Fig. 3.14.
Fig. 3.15.
Fig. 3.16.
Fig. 3.17.
Fig. 4.1.
Fig. 4.2.
Fig. 4.3.
Criptosistema simétrico……………………………………………. 5
Criptosistema asimétrico……..……………………………………..6
Diagrama a bloques de un FPGA…………………………………...18
Diagrama a bloques de un ASIC……….…………………………...20
Celda lógica de un FPGA…………….………….………………… 23
Proceso de diseño y desarrollo en VHDL………………………….. 24
Típica aplicación de encripción……………………………………. 27
Proceso de transmisión…………………………………………….. 29
Topología de la aplicación…………………………………………. 31
Esquema de verificación compartida (t 4)…….………………….31
Aplicación dividida en bloques…….……………………………….32
Esquema numérico para 2n bits……………………………………. 36
Esquema numérico para el criptosistema…………………………...36
Diagrama de flujo de la suma con signo…………………………… 38
Esquema para la multiplicación……………………………………. 39
Diagrama de flujo de la multiplicación……………………………..39
Algoritmo de división con re-almacenamiento…………………….. 40
Esquema para división y módulo…………………………………... 41
Resultado de la división……………………………………………. 41
Diagrama de flujo de la división………………………………….... 42
Aproximación a exp y a log (1 segmento)…………………………. 44
Aproximación a exp y a log (7 segmentos)………………………... 44
Diagrama de flujo de la potencia…………………………………... 47
Proceso de desarrollo………………………………………………. 53
Esquema numérico para módulo preliminar……………………….. 54
Simulación de operaciones (8 bits)……………………………….... 55
vii
Fig. 4.4.
Fig. 4.5.
Fig. 4.6.
Fig. 4.7.
Fig. 4.8.
Fig. 4.9.
Fig. 4.10.
Fig. 4.11.
Fig. 5.1.
Fig. 5.2.
Fig. 5.3.
Fig. 5.4.
Fig. 5.5.
Fig. 5.6.
viii
Diagrama de tiempo para operaciones básicas…………………….. 57
Simulación de operaciones (64 bits)……………………………….. 58
Implementación de diseño……………...………………………….. 59
Diagrama de tiempo para la función x y…………………………….. 60
Diagrama de tiempo para el módulo de comunicaciones………….. 62
Simulación del módulo de comunicaciones………………………...62
Diagrama de tiempo de los escenarios……………………………... 64
Diagrama de tiempo para funciones en escenarios……………….... 65
Descripción de la aplicación final………….………………………. 71
Diagrama de contexto del sistema de software…………………….. 73
Diagrama cero del sistema de software……………………………. 73
Ventana de transmisión…………………………………………….. 75
Ventana de recepción………………………………………………. 77
Ventana de opciones……………………………………………….. 78
Lista de Tablas
Tabla 2.1.
Tabla 3.1.
Tabla 3.2.
Tabla 3.3.
Tabla 3.4.
Tabla 3.5.
Tabla 4.1.
Tabla 4.2.
Tabla 4.3.
Tabla 4.4.
Tabla 4.5.
Tabla 6.1.
Tabla 6.2.
Tabla 6.3.
Tabla 6.4.
Resultados de encripción…………………………………………... 16
Comparación de topologías…………………….……………….......30
Sistema de ecuaciones para la parábola en (1.5, 4)………………....43
Ecuaciones para cálculo de 22 …………………………………….... 45
Ejemplos de la función potencia………………………………….... 46
Posibles valores dentro del esquema de encripción………………... 49
Puertos de E/S para operaciones básicas…………………………... 56
Puertos de E/S para la función x y…………………………………... 59
Puertos de E/S para el módulo de comunicaciones………………... 61
Puertos de E/S para la unidad central……………………………… 64
Tiempos de ejecución.……………………………………………... 69
Corrida de simulación……………………………………………… 81
Tiempos de ejecución……………………………………………… 82
Posibles valores dentro del esquema de encripción……..…………. 85
Comparación de tarjetas de encripción…………………………….. 86
ix
x
Introducción
Capítulo 1
Capítulo 1
Introducción
La criptografía surge hace algunos años como una
práctica individual basada en la aplicación de técnicas
empíricas con el fin de proporcionar seguridad a la
información. Hoy en día es considerada una ciencia, y
cuenta con cuatro grupos básicos de sistemas de
encripción: los de encripción por bloques, cálculo de
hash, los de llave privada y los de llave pública. Es
necesario mencionar también que actualmente los
criptosistemas que han cobrado más importancia son
los de llave pública.
1.1. ANTECEDENTES
A través de los años, muchos protocolos y mecanismos complejos han sido creados para
hacer frente a los problemas de seguridad a la información. Actualmente la seguridad de la
información se lo gra mediante el diseño de herramientas de hardware y software dedicadas
que implementen los algoritmos matemáticos y protocolos para generar información
cifrada, misma a la que sólo pueden accesar quienes tienen la autoridad para conocer su
contenido. La creciente cantidad de aplicaciones que se encuentran hoy en día en las cuales
la seguridad de la información es vital, han hecho que estos mecanismos de seguridad
evolucionen hasta llegar a establecer lo que se conoce como criptografía. Es por esta gran
cantidad de aplicaciones que existen muchas tendencias en enfatizar la necesidad de
desarrollar mecanismos de seguridad en redes de trabajo [5], esto debido a todos los
posibles ataques a los que se encuentra expuesta la información dentro de los sistemas de
comunicaciones actuales, los cuales se pueden dar debido a cuatro causas principales.
Primero, el increme nto del uso de redes para proporcionar acceso remoto a computadoras
facilita a los intrusos el ataque a las redes; segundo, la creciente cantidad y valor de la
información existente en las redes las convierte en un blanco más importante para los
ataques externos. La tercera causa es debido a que los sistemas computacionales conectados
mediante redes de trabajo comparten una gran cantidad de recursos, por lo que la seguridad
de la información en un servidor dado depende de las medidas de seguridad empleadas en
la red y por otros servidores. Por último, el empleo de nuevas tecnologías facilita ciertos
ataques debido al poco desarrollo que se ha hecho sobre ellas en cuestión de segur idad.
1
Capítulo 1
Introducción
Las violaciones de seguridad se pueden dividir en tres categorías:
- Liberación no autorizada de información.
- Modificación no autorizada de información.
- Uso no autorizado de recursos.
Una de las aplicaciones en donde se hace necesario el uso de sistemas de seguridad se
presentó hace algunos años en un sistema de comunicación entre EUA y Rusia [1]. Como
parte de una investigación de pruebas nucleares norteamericana (en combinación con
Rusia), se colocaron sismógrafos en suelo ruso para monitorear la actividad sísmica y
detectar actividad nuclear. Aparentemente, estos dos países contaban con la tecnología para
implementar estos dispositivos de manera segura, sin embargo, existía una cierta
preocupación acerca de la seguridad en la transmisión de los datos de estos dispositivos. La
solución inmediata para el gobierno de los Estados Unidos fue emplear un sistema
criptográfico para proteger la información enviada. Lamentablemente esto creó otro
problema, ya que Rusia no podría recuperar la información a menos que conociera el
sistema de encripción de los Estados Unidos, lo cual los norteamericanos no estaban
dispuestos a permitir. Aún así, la criptografía ha evolucionado tanto que les ofreció otra
alternativa de solución a su problema. La solución a este problema fue un esquema de
encripción llave pública mediante el cual, los rusos sólo necesitaban conocer la mitad del
sistema de encripción para recuperar la información.
Otra problemática representativa de la importancia de ma ntener los datos de una
transmisión seguros son los cajeros automáticos. Los cajeros automáticos son usados
ampliamente, las 24 horas del día los usuarios pueden aproximarse a ellos y mediante el uso
de un protocolo típicamente basado en códigos y tarjetas magnéticas realizan la extracción
de dinero. Usualmente el cajero está conectado vía telefónica a una computadora central la
cual lleva un registro de los clientes, y cuando se cumplen las condiciones apropiadas
transmite los comandos para liberar el dinero. La seguridad que se encuentra implícita en el
NIP (Número de Identificación Personal) y en la tarjeta es concerniente al sistema bancario
solamente, pero existe un problema de inseguridad de la información en la línea entre el
cajero y la comp utadora central, el cual consiste en evitar que se inserten mensajes que
ocasionen una liberación de una cantidad de dinero ilegítima. Este problema se solucionó
mediante un esquema criptográfico, específicamente uno de llave pública. La computadora
central calcula la llave privada y la pública, manteniendo la primera y enviando la llave
pública al cajero. El cajero se encarga de generar un número aleatorio R (que se empleará
únicamente en esta transacción), lo codifica y lo envía de regreso. A partir de ese momento,
la comp utadora usa el número R para codificar y decodificar todos los mensajes necesarios
dentro de la transacción.
2
Introducción
Capítulo 1
Como se puede apreciar con un par de ejemplos, existen demasiadas aplicaciones que se
basan en el intercambio de información en las cuales, es primordial realizar la transmisión
de manera segura. La solución matemática que asegura que las transmisiones digitales se
realicen de manera confidencial es la criptografía.
1.1.1. Criptografía
La criptografía [6] es la ciencia que estudia las técnicas matemáticas relacionadas con
aspectos relacionados a la seguridad de la información, entre los cuales se encuentran:
confidencialidad, integridad y autentificación de datos y del origen, no repudiación, etc. Su
finalidad es transmitir mensajes cifrados de tal forma que estos no puedan ser interpretados
por receptores no autorizados. Esta ciencia ha sido muy utilizada debido a su gran variedad
de aplicaciones, las cuales están orientadas básicamente a aspectos de comunicación
segura, identificación, verificación compartida, certificación, recuperación, comercio
electrónico y acceso remoto, entre otros.
A través de los años, la criptografía ha sido un arte practicado por aquellos individuos que
han diseñado técnicas específicas para cubrir algunos de los requerimientos de la seguridad
de la información. Los últimos 20 años fueron un periodo de transición en el que la
disciplina de la criptografía se transformó de ser un arte a una ciencia. Hoy en día, hay
muchas conferencias científicas a nivel internacional que se dedican única y
exclusivamente a la criptografía, además de que una organización internacional, la IARC
(Internacional Association For Cryptology Research), se ha dedicado de lleno a investigar
en esta área.
Existen dos procesos que conforman a la criptografía: encripción y decripción [8, 9], y
éstos contribuyen a que lo s usuarios puedan tener una comunicación segura a través de
medios electrónicos. El objetivo de la encripción es la transformación de datos de tal forma
que sea imposible su lectura sin una información secreta apropiada (llave). La decripción,
proceso inverso, es la transformación de los datos encriptados a un formato entendible.
1.1.2. Metas de la Criptografía
Si bien, el objetivo de la criptografía parece estar bien definido desde su comienzo, hace
falta definir con mayor claridad qué es lo que se pretende lograr en cada caso particular de
su implementación. Dentro de los avances que han surgido en la criptografía a través de los
años, variados criptosistemas se han desarrollado con diversos propósitos. Actualmente, los
sistemas criptográficos son desarrollados en base a las siguientes metas [7]:
3
Capítulo 1
Introducción
1. Privacidad y confidencialidad. Hay muchos métodos para proveer la confidencialidad,
los cuales van desde los métodos físicos de protección hasta los algoritmos matemáticos
que mantienen los datos ilegibles.
2. Integridad de los datos. Servicio que direcciona la alteración sin autorización de los
datos.
3. Autentificación. Servicio relacionado con la identificación, esta función se aplica a las
entidades y a la información por igual.
4. No repudiación. Servicio que previene a las entidades de negar acciones previas.
Para realizar todas las actividades encomendadas a un sistema de encripción de datos, éste
se basa en primitivas. Las primitivas son las acciones que se realizan en este tipo de
sistemas para poder alcanzar las metas propuestas. Estas primitivas deben de ser evaluadas
con respecto a varios criterios tales como:
1. Nivel de seguridad. Usualmente este criterio está dado en términos del número de
operaciones requeridas para lograr su objetivo. Este criterio es también llamado el
factor de trabajo.
2. Funcionalidad. Las primitivas que sean más efectivas para un objetivo dado serán
determinadas por las propiedades básicas de las primitivas.
3. Métodos de operación. Una primitiva puede proporcionar una funcionalidad variada
dependiendo de su modo de operación.
4. Rendimiento. Este criterio se refiere a la eficiencia de una primitiva en un modo
particular de operación. Un ejemplo de esto podría ser la velocidad de encripción. Un
sistema puede ser catalogado por el número de bits por segundo que es capaz de
encriptar.
5. Facilidad de implementación. Este parámetro se refiere a la complejidad de
implementar la primitiva ya sea en un ambiente de hardware o software.
4
Introducción
Capítulo 1
1.1.3. Tipos de Criptosistemas
En forma general, existen cuatro tipos de criptosistemas: por bloques, de hashing, de llave
secreta o simétrica y de l ave pública o asimétrica [2]. Aunque claro está, es posible una
combinación de estos.
Algoritmo de encripción por bloques. Son aquellos algoritmos que encriptan los
mensajes en unidades de tamaño fijo llamadas bloques. El tamaño usual de un bloque es
de 64 bits. Un ejemplo de este algoritmo es IDEA (International Data Encryption
Algorithm).
Algoritmo de hash. También conocidos como algoritmos de cálculo de hash. Son
algoritmos que buscan cumplir con sólo una de las metas de la criptografía, integridad
de los datos. Ejemplos de este tipo de algoritmo son MD5 (Message Digest version 5) y
SHA (Security Hash Algorithm). Esta clase de algoritmos tuvo un auge muy importante
debido a que es relativamente fácil calcularle el hash a un mensaje.
Criptosistema Simétrico. Se trata de un algoritmo de llave secreta (ó simétrico) cuando
las claves para cifrar y descifrar son idénticas, o fácilmente calculables una a partir de la
otra. Esto quiere decir que si utilizamos un criptosistema de clave secreta,
necesariamente las dos partes que intercambian información tienen que compartir el
secreto de la clave, puesto que tanto para encriptar como para decriptar se necesita una
misma clave, u otra diferente pero deducible fácilmente de la primera. Entre estos
sistemas se encue ntran: DES (Digital Encryption Standard), RC2 (Rivest Cipher v2),
RC4 (Rivest Cipher v4), etc. La peculiaridad de estos sistemas de encripción es que
rápidamente se aplican sobre la información. Véase figura 1.1.
K
P
Encripción
C
P=D(K,E(K,P))
Decripción
Fig. 1.1. Criptosistema Simétrico.
Criptosistema Asimétrico. Si las claves para cifrar y descifrar son diferentes, y una de
ellas es imposible de calcular por derivación de la otra, entonces se trata de un
criptosistema asimétrico o de llave pública. Cuando se está utilizando este método se
dice que se está empleando una firma electrónica o digital. La firma digital consiste en
establecer un par de claves asociadas a un sujeto: una pública, conocida por todos los
5
Capítulo 1
Introducción
elementos que intervienen en el sector, y otra privada, sólo conocida por el sujeto en
cuestión. De esta forma, cuando queramos establecer una comunicación segura con otra
parte, basta con encriptar el mensaje con la clave pública del sujeto para que a su
recepción, sólo el sujeto que posee la clave privada pueda leerlo. Véase figura 1.2.
KE
KD
P
C
Encripción
P=D(KD,E(KE,P))
Decripción
Fig. 1.2. Criptosistema Asimétrico.
Si el mensaje original a transmitir P es una secuencia de caracteres individuales:
P = (P1 , P2 , ... , Pn )
y en forma similar el texto cifrado se escribe como:
C = (C 1 , C2 , ... , Cm)
Las transformaciones entre el mensaje original y el texto cifrado pueden escribirse:
C = E(P) y P = D(C)
Donde C representa el texto cifrado, E el algoritmo de encripción, P el mensaje original y D
el algoritmo de decripción. Utilizando esta connotación, un criptosistema puede ser
representado:
P = D(E(P))
Algunos algorit mos de encripción utilizan una llave K, de tal manera que el texto cifrado
depende tanto del mensaje original como del valor de la llave. Esto se representa como:
C = E(K,P)
Donde E es un conjunto de algoritmos de encripción y K es la llave que selecciona un
algoritmo específico. Cuando las llaves de encripción y decripción son iguales, se tiene un
criptosistema simétrico y se representa como:
P = D(K,E(K,P)).
6
Introducción
Capítulo 1
Cuando la llave de decripción KD invierte la encripción de la llave KE, el criptosistema es
asimétrico y se representa como:
P = D(K D,E(K E,P).
1.1.4. Verificación Compartida
El tipo de algoritmo usado dentro de los sistemas criptográficos ha ido cambiando
conforme el paso de los años debido a las diferentes necesidades de comunicación segura
existentes. En la actualidad, una alternativa muy solicitada es la de los algoritmos
asimétricos, a pesar de esto, en los años recientes ha surgido un planteamiento que no se
había considerado, ¿qué se hace cuando un mensaje se desea enviar a un elemento en
específico dentro de un grupo de verificadores, sin que los otros elementos lo puedan
recuperar? En otras palabras, lo que se plantea es el hecho de mantener los mensajes
confidenciales aún dentro de un entorno de comunicaciones seguro, definido para un cierto
número de participantes.
La solución a este problema dentro de la criptografía se le conoce como esquema de
verificación compartida, y su finalidad es compartir un mensaje seguro a t de n
participantes dentro del entorno de comunicación.
Aunque en estos últimos años ha surgido más de un esquema que implemente la
verificación compartida en sus algoritmos, hasta ahora el único de ellos que se puede
considerar como completo es el presentado por Hsu y Wu en 1998 [3]. Este esquema de
verificación compartida es el único que emplea tanto encripción de mensajes como adición
de firma digital en un ambiente de llave pública, por lo que es considerado el más robusto
de su tipo y una alternativa muy importante para desarrollar herramientas de encripción.
1.2. PLANTEAMIENTO DEL PROBLEMA
Con el auge de las computadoras y de las telecomunicaciones, hoy en día existe la
posibilidad de realizar una gran diversidad de actividades de manera virtual. Como ejemplo
de estas actividades se pueden citar: envío de documentos, transacciones bancarias,
compras en línea, etc.
El problema que conlleva el manipular la información electrónicamente en redes públicas
es la poca seguridad de la información en comunicaciones de este tipo. Este problema se
acentúa debido a que los medios de comunicación no proporcionan por sí mismos ninguna
7
Capítulo 1
Introducción
clase de seguridad a los datos que por ellos transitan, una vez que los datos son liberados a
través de ellos y quedan fuera de la supervisión humana son vulnerables a ser accesados por
terceros [5].
En base a esta creciente problemática, dentro de las comunicaciones digitales surge un
amplio rango de aplicaciones a desarrollar que sirvan como solución al problema de
insegur idad en la transmisión de mensajes electrónicos. Lo que se propuso en este trabajo
de tesis para combatir la inseguridad en las comunicaciones es desarrollar un sistema
criptográfico que sea capaz tanto de encriptar como de decriptar archivos electrónicos a
nivel de hardware. Para esto se utilizará el algoritmo conocido como verificación
compartida, el cual, cumple perfectamente con los dos parámetros que se utilizan como
métrica para la comprobación de la eficiencia de un algoritmo dentro de la criptografía: la
velocidad de encripción y el nivel de seguridad [4].
1.3. OBJETIVO
Esta tesis tiene como objetivo diseñar una herramienta de hardware que combata el
problema de la inseguridad en las transmisiones digitales basada en el esquema de
encripción de datos con verificación compartida de Hsu y Wu [3]. Dicha herramienta será
diseñada mediante el empleo de lenguajes descriptores de hardware (HDL’s). De tal forma
qué, aprovechando las ventajas que hoy en día se tienen con los HDL’s en la especificación
y simulación de sistemas digitales, se cuente con el diseño del firmware para
implementarse en hardware.
Cuando se emplea únicamente la palabra diseñar en la determinación del objetivo, se
excluye la etapa de validación física del sistema. La razón para definir el objetivo de esta
forma es que los lenguajes descriptores de hardware hoy en día constituyen herramientas
tan poderosas, que los resultados producidos por las simulaciones representan un fiel reflejo
del comportamiento esperado del hardware, mientras que un buen desempeño en las etapas
de síntesis e implementación de diseño dentro de la programación le asegura al usuario que
su sistema tendrá el rend imiento esperado.
La etapa de validación (implementación y pruebas físicas al criptosistema diseñado) queda
fuera del alcance de este trabajo, el cual se enfoca a la obtenció n de resultados
satisfactorios en las simulaciones, y con el cumplimiento del proceso de diseño y
especificación de un sistema digital en el HDL seleccionado posteriormente. La posibilidad
de la realización de pruebas físicas queda abierta, y dependerá exc lusivamente de la
adquisición de los recursos materiales necesarios para cumplir con este propósito.
8
Introducción
Capítulo 1
1.4. ALCANCES
- Desarrollo de un esquema teórico para el diseño un sistema de encripción de datos con
verificación compartida.
- Desarrollo del firmware.
- Simulación en computadora basada en un lenguaje descriptor de hardware en el cual se
validará el esquema teórico antes mencionado.
- Software de prueba para enviar datos desde una PC a través del sistema desarrollado.
- Interfaz entre el criptosistema y una PC.
1.5. SUMARIO
Dentro de este capítulo se analizaron los tipos de criptosistemas que existen, así como la
importancia que éstos han tomado en la actualidad. De los opciones disponibles dentro de
la criptografía, los algoritmos de llave pública son los de mayor demanda debido a que
ofrecen una mayor seguridad que los otros algoritmos. A pesar de que los algoritmos de
llave pública parecen ser la solución para la mayoría de los problemas de inseguridad en las
comunicaciones electrónicas, se ha generado un nuevo tipo de algoritmo de encripción
denominado verificación compartida.
1.6. REFERENCIAS
[1]
Adleman, L; Rivest, R: “The use of public key cryptography in communication
system design”, Communications Magazine, IEEE, Vol. 16, Issue: 6, Nov 1978,
Pages: 20 – 23
[2]
Hernández, Hector; “Criptografía de Verificación Compartida”, ELECTRO 2001
[3]
HSU C.L, WU T.C: "Authenticated encryption scheme with (t,n) shared
verification", IEE Proceedings, 117-121 January 1998.
9
Capítulo 1
Introducción
[4]
Lopez, J; Ortega, J.J; Troya, J.M; Vivas, J: “High- level specification of security
systems”, Global Telecommunications Conference, 2003. GLOBECOM '03. IEEE ,
Volume: 3, 1-5 Dec. 2003, Pages:1506 – 1510.
[5]
Voydock, V; Kent, S: “Security in high- level network protocols”, Communications
Magazine IEEE, Volume: 23, Issue: 7, July 1985, Pages:12 – 24
[6]
Seguridad Electrónica: Criptografía [en línea] [Fecha de consulta: Octubre 2002],
disponible en: <http://www.htmlweb.net/seguridad/cripto/>
[7]
INEI: Metodologías Informáticas - Seguridad en Internet [en línea] [Fecha de
consulta: Octubre 2002], disponible en:
<http://www.inei.gob.pe/biblioineipub/bancopub/Inf/Lib5010/indice.htm>
[8]
Apuntes Electrónica: Criptografía [en línea] [Fecha de consulta: Octubre 2002],
disponible en: <http://www.infoapuntes.com.ar/Apuntes/criptografia.htm>
[9]
Apuntes Electrónica: Criptografía [en línea] [Fecha de consulta: Octubre 2002],
disponible en: <http://www.infoapuntes.com.ar/Apuntes/criptografia2.htm>
10
Análisis del algoritmo de Hsu y Wu
Capítulo 2
Capítulo 2
Análisis
Análisis del Algoritmo de Hsu y Wu
El objetivo de esta tesis es el de generar una
herramienta de hardware que sea una alternativa más
para combatir la inseguridad en las trasmisiones
digitales. Esta herramienta estará desarrollada en
VHDL, con el propósito de aprovechar las ventajas que
proporcionan los lenguajes descriptores de hardware.
Todo el diseño se llevará a cabo con el objetivo de ser
implementado en un dispositivo FPGA.
2.1. ESQUEMA DE VERIFICACIÓN COMPARTIDA DE HSU Y WU
Este esquema es diseñado a partir de uno de los conceptos más solicitados actualmente
dentro de la criptografía: la verificación compartida. La diferencia entre este esquema y los
propuestos con anterioridad es que en su ejecución se lleva a cabo la firma digital y la
encripción, procesos que no se habían visto en el mismo criptosistema de verificación
compartida hasta ahora. Estas características convierten a este algoritmo en un tema
interesante desde el punto de vista de un trabajo de investigación, y es por eso que esta tesis
se basa en él [3].
Teniendo identificado el algoritmo que se va a implementar, es necesario verificar que éste
cumpla con los requerimientos que exige un trabajo de tesis. Uno de estos requerimientos
es la innovación. Al momento de presentar la propuesta correspondiente a esta tesis no se
encontró registro de implementaciones físicas realizadas del esquema de Hsu y Wu, con lo
que se logra abarcar la exigencia correspondiente a la innovación.
El otro punto que es necesario satisfacer en el desarrollo de un trabajo de tesis es la calidad
del producto final. Éste es un aspecto para el cual no es necesario hacer un análisis más
profundo al algoritmo seleccionado, debido a que las características que presenta (velocidad
de encripción, seguridad, etc.), que sirven como punto de comparación con otros
algoritmos, ya han sido revisadas en trabajos anteriores [2]. El resultado de este análisis
comparativo demostró que realmente se trata de un algoritmo que puede competir con los
ya existentes en aspectos más trascendentes que el de la innovación. En adición a esto, hay
que remarcar que se le esta dando continuidad a un trabajo previo referente a este esquema
[2].
11
Capítulo 2
Análisis del algoritmo de Hsu y Wu
Es por estas razones que se considera que el esquema de verificación compartida de Hsu y
Wu es el indicado para ser empleado como la base del sistema criptográfico objeto de esta
investigación.
2.1.1. Algoritmo
El (t, n) de Hsu y Wu, es un esquema con autentificación de encripción y empleo de
técnicas de verificación compartida [3]. En este esquema cualquier texto cifrado de firma
para un mensaje es direccionado a un grupo específico de verificadores, de tal forma que la
habilidad de descifrar la firma es regulada por el esquema adoptado (t, n). Esto es, cualquier
t de n participantes en el grupo comparten la responsabilidad (o autoridad) para la
recuperación del mensaje. Este esquema conserva el diseño de firma con recuperación del
mensaje y el modelo de verificación compartida (t, n).
El esquema se divide en 4 escenarios:
- Inicialización del Sistema
- Registro
- Encripción de Firma
- Recuperación del Mensaje
En el escenario de inicialización la autoridad del sistema (SA) define sus parámetros y los
hace públicos. Después de esto, SA puede aceptar el registro solicitado por un firmante o
un grupo de verificadores. Para el registro del firmante, SA genera una llave secreta y una
llave pública; mientras que para el registro del grupo y sus verificadores, SA primero
genera una llave secreta y una llave pública para el grupo, luego emplea el esquema (t, n)
de Shamir para dividir la llave secreta del gr upo en n porciones y los reparte a cada
verificador del grupo a través de un canal seguro. La parte que el verificador mantiene para
él es usada como la llave secreta para la recuperación del mensaje más tarde.
En el escenario de encripción de firma el firmante usa primero su propia llave personal para
generar la firma de un mensaje direccionado a un grupo especificado, luego usa la llave
pública del grupo para producir el texto cifrado de firma y lo envía a los verificadores en
ese grupo. La culminación de este escenario finaliza el proceso de transmisión de datos.
En el escenario de recuperación del mensaje, cualquier t de n verificadores en el grupo,
teniendo la propiedad de decriptar el texto cifrado recibido, puede cooperativamente
recuperar y verificar el mensaje.
12
Análisis del algoritmo de Hsu y Wu
Capítulo 2
2.1.2. Análisis al Algoritmo
Para poder comprender de manera más amplia el proceso de cifrado y descifrado del
esquema elegido, se presenta una descripción más amplia de él. Este desarrollo del
algoritmo está dividido en sus cuatro escenarios, y dentro de cada uno de ellos se generan
los números de una corrida normal.
Inicialización
El primer paso es encontrar dos primos grandes (p y q) que cumplan con
q|p-1.
En este caso se seleccionan dos primos pequeños:
q=3
p = 7.
El primo más grande (p) nos dice el máximo mensaje que puede ser enviado. Así entonces,
el mayor mensaje que se puede enviar con este ejemplo es el 7.
Como última parte de la inicialización, el sistema selecciona un generador g de orden q en
GF(p). Es decir [4],
g = wj mod p
(2.1)
con
1 < w < (p – 1)
y
j = (p – 1)/q
p, q y g se hacen públicos.
Continuando con el ejemplo
w=3
∴
g=2
Registro
Una vez teniendo a p, q y g, el sistema debe de seleccionar aleatóriamente a x A, que es la
llave personal del firmante A. El criterio para seleccionar esta llave es el siguiente:
X A ∈ Z q*
{
}
en donde Z q* = a | 1 ≤ a ≤ ( q − 1) , mcd (a , q ) = 1
En el caso particular de este ejemplo:
Conociendo el valor de x A, se calcula la llave pública de A:
yA = g xA mod p
yA = 22 mod 5 = 4
x A = 2.
(2.2)
13
Capítulo 2
Análisis del algoritmo de Hsu y Wu
Lo anterior se repite para el grupo de verificadores G, primero se escoge la llave personal
X G ∈ Z q*
obteniendo para el ejemplo XG = 1
yG = gXG mod p
yG = 21 mod 5 = 2
(2.3)
Después de esto, el sistema genera aleatóriamente un vector f(v) de grado (t - 1). Donde t es
el número de elementos dentro del grupo de verificadores a los cuales se les enviará el
mensaje.
f (v ) = xG + a1v 1 + ⋅ ⋅ ⋅ + ( at −1 v t −1 ) mod q
(2.4)
ai ∈ Zq
Siguiendo el ejemplo
a1 = 2
en donde Z q = {0,1,..., q − 1}
a2 =1.
La última parte de esta etapa consiste en generar las claves personales x i y la
correspondiente clave pública yi para cada verificador:
(2.5)
xi = f (ID i )
(2.6)
yi = g xi mod p
x1 = 4
x2 = 6
x3 = 7
y1 = 2
y2 = 1
y3 = 2
No se hace nada oculto después de que la etapa de registro acabó.
Encripción de firma
En esta etapa es donde se define el mensaje M a ser enviado, y en ella debe de cumplirse lo
siguiente:
M ∈Zp
Para poder obtener el texto cifrado se debe de seleccionar un entero k ∈ Z *q para generar la
firma (r, s) para M
r = Mg −k mod p
(2.7)
(
)
s = (k − x A r ) mod q
Para propósito de este ejemplo tenemos que :
14
(2.8)
k = 2.
Análisis del algoritmo de Hsu y Wu
Capítulo 2
Entonces, el sistema selecciona un número aleatorio d ∈ Z *p (d = 2) y genera la firma
cifrada (c1 , c2 , c3 ) correspondiente al mensaje M, donde
c1 = g d mod p
(2.9)
c 2 = (ry G− d )mod p
(2.10)
c3 = s
(2.11)
Recuperación del mensaje
Primero, cada uno de los verificadores a los que les fue enviado el mensaje calcula Ei
utilizando la siguiente ecuación:
Ei = c1( xi Li mod q ) mod p
(2.12)
donde:
Li =
∏ − ID (ID
t
j =1 ,i ≠ j
j
− ID j ) mod q (2.13)
−1
i
Cuando todos los verificadores involucrados han cumplido esta etapa, envían el valor de Ei
a los otros, y ahora cada uno calcula
t
E = ∏ E j mod p
(2.14)
j =1
Con este valor se calcula la firma de M
r = c2 E mod p
s = c3
Finalmente, con estos valores se puede calcular M
M = g s y Ar r mod p
(2.15)
(2.16)
(2.17)
Considerando los valores calculados hasta la etapa de registro y las fórmulas presentadas en
los dos siguientes escenarios, se completa el ejemplo para una transmisión de mensajes a
tres verificadores dentro de un grupo de 10 personas. El ID para cada uno de los tres
verificadores es 1, 2, y 3 respectivamente (Tabla 2.1).
2.1.3. Comentarios sobre el Algoritmo
- El número de caracteres permitidos está limitado por el número primo p.
15
Capítulo 2
Análisis del algoritmo de Hsu y Wu
Mensaje……………………….0
Firma…………………………(0, 2)
Texto cifrado…………………...(4, 0, 2)
Mensaje……………………….1
Firma………………………… (0.25, 1.5)
Texto cifrado…………………... (4, 0.0625, 1.5)
Mensaje……………………….2
Firma………………………… (0.5, 1)
Texto cifrado…………………... (4, 0.125, 1)
Mensaje……………………….3
Firma………………………… (0.75, 0.5)
Texto cifrado…………………... (4, 0.1875, 0.5)
Mensaje……………………….4
Firma………………………… (1, 0)
Texto cifrado…………………... (4, 0.25, 0)
Mensaje……………………….5
Firma………………………… (1.25, 2.5)
Texto cifrado…………………... (4, 0.3125, 2.5)
Mensaje……………………….6
Firma………………………… (1.5, 2)
Texto cifrado…………………...(4, 0.375, 2)
Mensaje……………………….7
Firma………………………… (1.75, 1.5)
Texto cifrado…………………... (4, 0.4375, 1.5)
Tabla 2.1. Resultados de encripción.
- Se necesita manejo de números racionales.
- Se requiere que p sea como mínimo 256 para poder enviar mensajes de 8 bits.
- El mensaje original incrementa su tamaño 3 veces.
- El algoritmo no incrementa significativamente con el aumento del número de
verificadores.
- Existe la posibilidad de que la última persona en compartir su clave cometa un engaño
para ser él el único en realizar una correcta recuperación del mensaje.
16
Análisis del algoritmo de Hsu y Wu
Capítulo 2
- De la selección de los valores aleatorios iniciales depende que los números subsecuentes
no sobrepasen los recursos del sistema.
2.2. ALTERNATIVAS DE IMPLEMENTACIÓN
El propósito de esta tesis es implementar el algoritmo descrito anteriormente haciendo uso
de la programación en HDLs. Los programas realizados en esta clase de lenguajes están
enfocados a diversos dispositivos de hardware acorde a su aplicación. En este caso en
específico, y debido a la capacidad requerida por un criptosistema, existen dos dispositivos
que pueden servir como plataforma para los programas que se generen. Estos dispositivos
son el ASIC y el FPGA. Antes de poder tomar una decisión acerca de cual de los dos es
indicado para este trabajo, se realizó una exploración de sus características y un
comparativo entre ellos.
2.2.1. FPGA
Antes de la llegada de la lógica programable, los circuitos de lógica tradicional se
construyeron a nivel tarjeta usando componentes estándar, o a nivel de compuertas en
costosos circuitos integrados de aplicación específica. El FPGA (Field Programmable Gate
Array) es un circuito integrado que contiene muchas celdas lógicas idénticas que pueden
ser vistas como componentes estándar. Cada celda lógica puede adquirir
independientemente alguna funcionalidad de un conjunto limitado de personalidades. Las
celdas individuales están interconectadas por una matriz de líneas y switches programables.
Un diseño de usuario es implementado mediante la especificación de funciones de lógica
simple para cada celda. Diseños complejos son creados mediante la combinación de estos
bloques básicos para crear el circuito deseado.
La arquitectura de celdas lógicas varía entre las diferentes familias de dispositivos [5].
Hablando en general, cada celda lógica combina pocas entradas binarias (típicamente entre
3 y 10) a una o dos salidas de acuerdo a una función lógica booleana especificada en el
programa del usuario. En la mayoría de las familias, el usuario además tiene la opción de
registrar la salida combinatorial de la celda, de tal manera que la lógica de reloj puede ser
fácilmente implementada. La lógica combinatorial de las celdas puede ser físicamente
implementada como una pequeña tabla de memoria (LUT – LookUp Table) o como un
conjunto de multiplexores y compuertas. Los dispositivos LUT intentan ser un poco más
17
Capítulo 2
Análisis del algoritmo de Hsu y Wu
flexibles y proveen más entradas por celda que las celdas multiplexadas a costa de retraso
de propagación.
Las palabras Field Programmable de las que se desprenden las siglas FPGA, indican que la
función del dispositivo está definida por el usuario mediante un programa, en lugar de estar
especificada por el fabricante. Un circuito integrado típico lleva a cabo una función
particular definida al tiempo de manufactura. En contraste, la función del FPGA esta
definida mediante un programa escrito por alguien diferente al fabricante del dispositivo.
Dependiendo del dispositivo en particular, el programa es quemado permanente o semipermanentemente en el dispositivo o como parte de un proceso de ensamble de la tarjeta, o
es cargado desde una memoria externa cada vez que el dispositivo es encendido. Esta
programabilidad de usuario nos permite tener acceso a diseños integrados complejos sin los
altos costos de ingeniería asociados a circuitos de aplicación específica.
Fig. 2.1. Diagrama a bloques de un FPGA [9].
Un FPGA es un dispositivo con diseño independiente y cada proveedor fabrica dispositivos
con una arquitectura propia. Sin embargo, la arquitectura incluye un número de bloques
lógicos programables conectados a una matriz programable a base de switches. Para
18
Análisis del algoritmo de Hsu y Wu
Capítulo 2
configurar un dispositivo para una operación funcional en particular, hay que programar
estas matrices para rutear las señales entre los bloques lógicos individuales. La figura 2.1
presenta el esquema de un FPGA.
2.2.2. ASIC
Como su nombre lo dice (Application Specific Integrated Circuit), estos dispositivos son
circuitos integrados cuya función esta dedicada únicamente al proyecto o aplicación para
los cuales fueron diseñados. La diferencia entre un ASIC y un circuito convencional (como
los TTL) es que su función puede ser diseñada para una gran variedad de aplicaciones [8].
Desde la aparición comercial de los transistores, los ingenieros han querido incluir una
funcionalidad cada vez mayor a sus productos. La disponibilidad de ele mentos cada vez
más complejos y técnicas nuevas han colaborado a la densidad funcional que existe en
nuestros días. Los ASIC´s permiten a los diseñadores ir un paso más allá y combinar las
funciones requeridas en un encapsulado, ocupando el mismo espacio que se ocuparía en la
tablilla de circuito con un sólo CI. Con los recientes avances de la tecnología es posible
incluir no sólo lógica convencional, si no que también complejos microprocesadores en un
ASIC.
Los ASIC´s están diseñados a partir de dos arquitecturas:
- Células estándar. Esta propuesta consiste en colocar bloques funcionales en un chip y
hacer las conexiones pertinentes entre ellos de la misma forma que se haría en un protoboard. La ventaja que se tiene es que no hay limitaciones en cuanto al espacio para
añadir elementos.
- Arreglo de compuertas. Como su nombre lo indica, el arreglo de compuertas consiste en
un conjunto de transistores colocados de tal forma que, mediante la posición de una o
más capas de interconexiones de metal, los transistores pueden ser configurados como
compuertas lógicas individuales, a partir de las cuales funciones más complejas pueden
ser construidas.
Las ventajas que se pueden obtener de dispositivos de este tipo son:
- Reducir el tamaño del producto final. Al tener un circuito integrado en vez de varios,
obviame nte el tamaño final se reduce mucho.
- Menor consumo de potencia. Al tener conectado a la alimentación un solo CI el
consumo de potencia se ve reducido considerablemente.
19
Capítulo 2
Análisis del algoritmo de Hsu y Wu
- Rapidez de las señales internas. Cuando se tienen diseños con circuitos convencionales,
muchas veces la velocidad que pueda ofrecer uno de esos circuitos se ve limitada por la
conexión a otro circuito no necesariamente más lento. Este problema no existe dentro
de los ASIC´s ya que las señales están conectadas dentro del mismo integrado.
- Incremento de la dificultad para copiar un diseño. Cuando se construye un sistema de
hardware, se desea que éste no sea imitado. Antes de los ASIC´s era posible aplicar
ingeniería inversa a los diseños, lo cual no se puede hacer al trabajar con un ASIC.
- Verificación formal de hardware . Este es un término que ha cobrado mucha importancia
dentro del diseño de circuitos electrónicos, y se refiere a la facilidad que ofrece un
diseño para ser probado. Con un ASIC esto se vuelve algo muy fácil ya que las pruebas
se pueden hacer mediante la simulación.
Aunque estas ventajas parecen muy atractivas, los ASIC´s también presentan algunas
desventajas mostradas a continuación.
- Requerimientos mayores en etapas tempranas del diseño.
- Pérdidas del control del desarrollo mientras se manufactura el dispositivo.
- Daño mayor cuando ocurre un error.
La figura 2.2 muestra el esquema a bloques de un ASIC.
Fig. 2.2. Diagrama a bloques de un ASIC [11].
2.2.3. FPGA vs ASIC
La selección entre un ASIC y un FPGA depende de muchos factores. Si la selección se
hace de acuerdo a los recursos y capacidades electrónicas que ambos ofrecen no se
20
Análisis del algoritmo de Hsu y Wu
Capítulo 2
encontrará una razón de peso para inclinarse por alguno, por lo que es necesario hacer otro
tipo de análisis.
El costo de fabricación total de un ASIC se encuentra entre los US $20,000 y los US
$100,000. Sin embargo, después de esta inversión inicial, el costo de producción de un
dispositivo es de alrededor de US $10. Este costo es mucho menor que el costo de un
dispositivo FPGA, típicamente de US $150 a US $250 por unidad [10].
La ventaja de los FPGA’s es que son rápidos y fáciles de programar, además de que
generan un layout a nivel de tarjeta el diseño en general es completado. Este procedimiento
le permite al usuario llevar a cabo pruebas de integración de hardware y software. Si el
sistema de pruebas falla, se puede modificar el diseño y programar el dispositivo otra vez a
un costo relativamente bajo. Por estas razones, los diseñadores comúnmente se inclinan
sobre los FPGA’s para desarrollar sistemas de pruebas y para aplicaciones que requieran
producciones pequeñas. En algunos casos estos diseños son trasladados a ASIC’s para
producciones a mayor escala. Para esto hay que considerar las diferencias de diseño que
pudiera haber entre ambos, por ejemplo, los tiempos de espera pueden variar por la
diferencia de velocidad entre uno y otro.
Para poder hacer la selección entre alguno de los dispositivos comentados para este trabajo,
es necesario trasladar los factores de comparación que existen entre ellos a un trabajo de
tesis; aunque es necesario mencionar que esta decisión no afecta los resultados finales de la
misma, ya que la programación en HDL se mantiene igual.
Para finalizar este punto, hay que tomar en cuenta que el empleo de un ASIC en un sistema
digital está enfocado para aplicaciones en serie, cosa que no se cumple en un trabajo de
tesis. Esta característica esta característica es la que propicia el seleccionar al FPGA como
el dispositivo sobre el cual se realizará el diseño de la herramienta de encripción.
2.2.4. Lenguajes Descriptores de Hardware
En años recientes los diseñadores han adoptado metodologías de diseño descendentes [6],
la cuales los han llevado del diseño a nivel transistor o lógico a programas abstractos. La
introducción de HDL´s estándares en la industria y la existencia de herramientas de síntesis
comercialmente disponibles han ayudado a establecer esta revolucionaria metodología de
diseño. Las ventajas de esta metodología están causando claramente un cambio en los
métodos de diseño de CI. Las ventajas del diseño basado en HDL incluyen:
- Aumento de la productividad, ciclos de desarrollo más cortos, más características de
producto y una reducción del tiempo de liberación al mercado.
21
Capítulo 2
Análisis del algoritmo de Hsu y Wu
- La posibilidad de reutilización del diseño, lo cual resulta en un incremento en la
flexibilidad para futur as modificaciones al diseño.
- Una rápida expansión de arquitecturas alternativas.
- Una rápida expansión de librerías de tecnología alternativas.
- Existe realimentación en el proceso de desarrollo.
- Simulaciones más rápidas y en etapas más tempranas.
- Diseños transferibles y portables.
Para poder programar un FPGA existen varias alternativas (también conocidas como
niveles de abstracción) [7], entre los cuales destacan los diagramas de estado, diagramas
esquemáticos y lenguajes HDL, siendo esta última la más usada hoy en día. Un HDL es un
lenguaje de programación de software usado para modelar la operación específica de una
pieza de hardware. Hay dos aspectos de la descripción del hardware facilitados por un
HDL: modelado abstracto y modelado estructurado de hardware. Un HDL es declarativo
para facilitar la descripción abstracta del comportamiento de hardware para la
especificación. Los aspectos estructurales y de diseño intentan no perjudicar este
comportamiento. El diseñador puede modelar la estructura de hardware en HDL
independientemente del comportamiento del diseño. Además, el diseñador puede modelar y
representar el comportamiento del hardware a varios niveles de abstracción durante el
diseño. Modelos de nivel más alto describen la operación de hardware abstractamente y los
modelos de un nivel más bajo incluyen má s detalle.
En términos generales, se pueden mencionar dos HDLs que acaparan el mercado, VHDL y
Verilog, y se pueden modelar estructuras de hardware igualmente efectivas en ambos. Por
lo que la decisión de cual de ellos emplear se hace simplemente en base a la disponibilidad
del software. Acorde a esto, quedó descartado el empleo de Verilog por no contar con las
herramientas computacionales adecuadas para programar sobre esta plataforma, por lo tanto
el software que se empleó durante todo el desarrollo de la tesis es el ISE 5.2i de Xilinx.
Este paquete le permite al usuario diseñar sistemas digitales complejos programados en
VHDL mediante el empleo de herramientas tales como archivos de banco de pruebas,
diagramas de estado, etc.
2.3. SOLUCIÓN ADOPTADA
En el punto anterior se estableció que el esque ma de encripción se implementará en un
FPGA programado en VHDL. La creación de sistemas en VHDL ha cobrado gran
22
Análisis del algoritmo de Hsu y Wu
Capítulo 2
relevancia, por lo que se ha comenzado a seguir una metodología de desarrollo
estandarizada [1]. Esta metodología la podemos englobar en tres etapas:
- Síntesis
- Implementación de diseño
- Generación de archivos de programa y programación del dispositivo
Síntesis
Si se busca una descripción concisa de lo que se realiza en esta etapa, ésta sería que es la
etapa encargada de realizar la compilación del código HDL a nivel de compuertas. Un
FPGA está conformado por celdas lógicas que son configuradas para representar, en cuanto
a funcionamiento, un conjunto de compuertas lógicas básicas. Es precisame nte en la etapa
de la síntesis en donde a partir del código programado por el usuario, se genera la
configuración de esas celdas lógicas. Véase figura 2.3.
Fig. 2.3. Celda lógica de un FPGA [1].
Antes de poder llegar a la etapa de la compilación de programas, es necesario haber
realizado un trabajo previo de diseño en el que se analiza el problema a resolver y se
escribe el código necesario para resolverlo mediante declaraciones en HDL. En este punto
es en donde se puede apreciar una de las ventajas que hoy en día presenta la programación
en VHDL, y esa es que es posible realizar simulaciones incluso antes de compilar los
programas. Para esto se cuenta con archivos de bancos de pruebas mediante los cuales el
usuario indica los valores de entrada que toman cada una de las variables del sistema que se
está desarrollando.
Como parte final de esta etapa, es posible volver a efectuar simulaciones al diseño una vez
obtenido el código a nivel compuerta.
23
Capítulo 2
Análisis del algoritmo de Hsu y Wu
Implementación del diseño
Esta fase tiene como finalidad adecuar el sistema a un FPGA específico. Actualmente
existen muchos fabricantes de FPGAs, y éstos a su vez cuentan con un gran número de
familias disponibles, cada una de ellas con características especiales. Por este motivo, es
necesario estructurar el programa diseñado para que se adapte a las condiciones físicas que
presenta cada uno de los dispositivos: número de puertos de E/S, memoria disponible,
cantidad de celdas lógicas, etc. Esta estructuración es realizada mediante el proceso
conocido como implementación del diseño, y varía de acuerdo al software empleado para
desarrollar el sistema digital.
Generación de archivos de programa y programación del dispositivo
La última fase del proceso consiste en generar un archivo en código binario para que pueda
ser bajado al FPGA, obteniendo así el producto terminado. Este archivo es obtenido a partir
del diseño a nivel compuertas.
En la figura 2.4 se representan cada una de las etapas arriba mencionadas.
Fig. 2.4. Proceso de diseño y desarrollo en VHDL [1 ].
24
Análisis del algoritmo de Hsu y Wu
Capítulo 2
2.4. SUMARIO
Dentro de este capítulo se establece cual son el objetivo y los alcances que se van a obtener
al finalizar el trabajo. Como complemento a esto se define cual es el algoritmo de
encripción que se implementara con base en sus características y ventajas, este algoritmo es
el propuesto por Hsu y Wu [3]. Finalmente se presenta un análisis comparativo de las
posibles herramientas para la implementación de una aplicación como ésta. En este
comparativo se consideran factores como disponibilidad de las herramientas, recursos
económicos, características electrónicas, etc. Las herramientas que se compararon fueron
FPGA vs. ASIC (como dispositivo), y Verilog vs. VHDL (como lenguajes de programación
de los dispositivos). Como resultado de este comparativo se seleccionaron el FPGA y
VHDL como herramientas de desarrollo.
2.5. REFERENCIAS
[1]
Armstrong, James; Gray, Gail: “VHDL Desing Representation and Syntehesis”, 2nd
Edition, Prentice Hall, N.J. 2000.
[2]
Hernández, Hector: “Esquema de Encripción Autentificado Empleando Verificación
Compartida”, Tesis de Maestría, CENIDET, Cuernavaca, 2001.
[3]
HSU C.L, WU T.C: "Authenticated encryption scheme with (t,n) shared
verification", IEE Proceedings, 117-121 January 1998.
[4]
Lidl, Rudolf; Pilz, Günter: “Applied Abstract Algebra”, 2nd Edition, Springer, N.Y.
1998.
[5]
Phanthavong, Douang: “Re-timing for Performance Improvement in FPGA
Designs”, Mentor Graphics, April 2003.
[6]
Sjoholm, Stefan; Lindh, Lennart: “VHDL for Designers”, Prentice Hall Europe,
1997.
[7]
Yalamanchili, Sudhakar: “Introductory VHDL from Simulation to Synthesis”,
Prentice Hall, N.J. 2001.
[8]
DELTA Microelectronics [en línea] [Fecha de consulta: Noviembre 2002], disponible
en: <http://www.asic.dk/>
25
Capítulo 2
[9]
Análisis del algoritmo de Hsu y Wu
Field Programmable Gate Arrays [en ílnea] [Fecha de consulta: Noviembre 2002],
disponible en: <http://www.ece.msstate.edu/~reese/EE4743/impltech/fpga.htm>
[10] EETIMES [en línea] [Fecha de consulta: Diciembre 2002], disponible en:
<http://www.eetimes.com/story/OEG20011214S0038>
[11] MicroUnity: Software Defined Broadband [en línea] [Fecha de consulta: Enero 2003],
disponible en: <http://www.microunity.com/company/index.html>
26
Dis eño del criptosistema
Capítulo 3
Capítulo 3
Diseño del Criptosistema
Para poder desarrollar el sistema criptográfico que se
ha elegido, es necesario realizar un diseño modular.
Con un diseño de este tipo lo que se consigue es tener
tres secciones independientes de la herramienta de
codificación. Estas secciones o módulos se encargan de
realizar los cuatro escenarios de los que consta el
esquema de Hsu y Wu, además de que se encargan de
los procesos de comunicación necesarios para el
intercambio de información.
3.1. DISEÑO GENERAL DEL CRIPTOSISTEMA
Fig. 3.1. Típica aplicación de encripción.
Al día de hoy, existe una gran cantidad de aplicaciones en las que se transmiten datos de
manera digital para las cuales se puede diseñar una herramienta de encripción de datos
(comunicación celular, comunicación de dispositivos móviles, televisión por cable, redes de
computadora, cajeros electrónicos, comercio electrónico, etc.). A pesar de esta diversidad
de aplicaciones, la manera más común de transmitir mensajes electrónicos es mediante el
uso de las computadoras personales. Dentro del ámbito de las comunicaciones basadas en
equipos de cómputo, también se pueden encontrar diversas áreas de aplicación entre las
27
Capítulo 3
Dis eño del criptosistema
cuales se pueden mencionar Internet o redes de área local, entre otras. Es por esto que como
inicio de la etapa del diseño es necesario seleccionar un área de aplicación específica para
la herramienta de hardware propuesta.
Algo que debe de tener la aplicación para la cual se realizará el diseño, es que la
herramienta resultante genere una solución práctica al problema de inseguridad en las
comunicaciones digitales. Por lo tanto, se eligió para este trabajo la aplicación con el
mercado más amplio en la actualidad: comunicación entre computadoras personales. Como
se mencionó anteriormente, existen varias posibilidades de aplicación en esta área; el
inconveniente es que en este trabajo se implementará un algoritmo de encripción nuevo,
además de que se llevará a cabo sobre una plataforma muy poco usada en este centro. Por
lo tanto, el realizar una fase de acoplamiento de la herramienta criptográfica con alguna de
las posibles aplicaciones reduciría el tiempo destinado en la etapa de diseño, a la
comprensión del esquema de Hsu y Wu, y a la etapa de desarrollo en VHDL. Esta es la
razón por la que el diseño del sistema de encripción de datos se hace enfocado a un sistema
de comunicación entre computadoras no estandarizado, es decir, un sistema que no cuente
con un protocolo de comunicaciones propio al cual la herramienta se tenga que acoplar.
Entonces, el diseño del criptosistema comienza con la propuesta de una aplicación sobre la
cual se delineará el sistema.
3.1.1. Esquema de Comunicación
La criptografía en general, tiene como propósito brindarle a los usuarios la posibilidad de
enviar y recibir datos de manera segura y confiable dentro de un entorno determinado; todo
esto mediante el empleo de los conceptos analizados con anterioridad (firma digital, llaves,
etc.). En el caso específico de la verificación compartida, lo que se pretende es que el
firmante (transmisor) tenga la opción de decidir concretamente a que verificadores
(receptores), dentro del conjunto de participantes, se les va a compartir la información
enviada [2]. En otras palabras, el mensaje encriptado se envía a t de n verificadores
(esquema (t, n)), y para la recuperación del mensaje original es necesaria la participación de
cada uno de los t verificadores involucrados, siendo prácticamente imposible la
recuperación del mensaje para cualquier otra verificador no incluido. Véase figura 3.2.
Analizando lo anterior, podemos definir el proceso de transmisión de datos con verificación
compartida en 5 pasos:
- Encripción
- Envío
28
Dis eño del criptosistema
Capítulo 3
- Recepción
- Intercambio de llaves
- Recuperación del mensaje
Fig. 3.2. Proceso de transmisión.
Estos cinco pasos definen el formato que tendrá el sistema de comunicación. La simple
transmisión de un mensaje supone la conexión entre el elemento que envía y los receptores,
en un sólo sentido. Pero en realidad, en un sistema de comunicaciones completo el receptor
continuamente se convierte en el transmisor y viceversa; es decir, el flujo de los datos se
invierte continuamente, por lo que la conexión entre los elementos debe ser bidireccional.
Otro aspecto que se puede definir basado en el proceso de transmisión es la topología a
utilizar. Los mensajes enviados pueden ir dirigidos a cualquier elemento dentro del
conjunto de receptores, así que la topología debe de proporcionar la capacidad de
interconexión entre todos los elementos de la manera más sencilla posible.
Entre las topologías que se pueden utilizar se encuentran [8]:
Topología de Anillo: Consiste en una serie de repetidores conectados entre sí mediante un
único enlace de transmisión unidireccional que configura un camino cerrado.
Topología en Estrella: Todas las estaciones están conectadas mediante enlaces
bidireccionales a una estación o nodo central que controla la red.
29
Capítulo 3
Dis eño del criptosistema
Topología en Bus: Esta topología busca que las estaciones se conecten a un único medio
bidireccional lineal o “bus” con puntos de terminación bien definidos.
Anillo
Características
Ventajas
Desventajas
- Flujo unidireccional.
- Cada estación se conecta
a otras 2.
- Por cada nodo pasan todos
los mensajes.
- No enrutamiento.
- Poca cantidad de cable.
- Longitud extendible.
- Altamente susceptible a
fallas.
- Necesita de todos los nodos
funcionando.
- Software complejo en cada
nodo.
Estrella
Bus
- Flujo bidireccional.
- Todas las estaciones se
conectan a un nodo central.
- Servicio centralizado.
- Flujo bidireccional.
- Una sola línea de
comunicación.
- Transmisión por ráfagas.
- Simple para interconectar.
- Funciona aún con la falla de
un nodo.
- Rapidez con tráfico pesado.
- Reside mucha importancia
en un nodo.
- Mayor medio físico (cable).
- Poco medio físico.
- Fácil de extender.
- Fácil de instalar.
- Half-duplex.
- Los mensajes llegan a todos
los nodos.
- Difícil aislar nodo con falla.
Tabla. 3.1. Comparación entre topologías.
La determinación de cual sería la topología más conveniente para esta aplicación se basó en
el análisis de las desventajas mostradas en la tabal 3.1. Las desventajas que presenta la
topología de bus en realidad no interfieren para nada en el funcionamiento del criptosistema
que se desarrolló. La primera desventaja presentada es que sólo se puede realizar una
comunicación half-duplex, lo cual es exactamente lo que se realiza en el esquema de Hsu y
Wu. La segunda desventaja indica que los mensajes llegan a todos los nodos, aspecto que
pierde comp leta importancia debido a que se trata de un criptosistema de verificación
compartida. Por último, se tiene la desventaja de que no se puede aislar de manera sencilla
un nodo cuando falla, pero en realidad un nodo con falla no afecta para nada el
funcionamiento del esquema de encripción.
Analizando las desventajas de cada topología (además de puntos como la complejidad de
software requerido en cada nodo y la facilidad de instalación), se tomó la decisión de elegir
la topología de bus para interconectar los nodos participantes en el sistema de
comunicaciones de la aplicación que aquí se desarrolló.
Teniendo hecha la selección de la topología, resta ahora definir el número de terminales
que la conformarán. Para definir cuantas terminales se tomarán en cuenta, es necesario
analizar el ambiente dentro del cual una aplicación como ésta podría estar funcionando. Por
lo general, cuando se trata de compartir archivos codificados el número de terminales no es
demasiado grande, de tal forma que para propósitos de esta tesis, un sistema de
comunicación de cinco terminales resultará adecuado. La topología seleccionada se
presenta en la figura 3.3.
30
Dis eño del criptosistema
Capítulo 3
Fig. 3.3. Topología de la aplicación [9].
3.1.2. Esquema de Codificación
Para diseñar la herramienta de codificación, se tiene que analizar el funcionamiento general
del esquema de verificación compartida aplicado al sistema de comunicación propuesto, el
cual se encuentra representado en la figura 3.4.
Fig. 3.4. Esquema de verificación compartida (t 4).
Una consideración importante es que las cinco terminales sean capaces de cifrar y descifrar
mensajes, por lo que cada una de ellas debe de tener instalada la herramienta completa, es
decir, los cuatro escenarios que conforman el algoritmo de Hsu Wu:
- Inicio
31
Capítulo 3
Dis eño del criptosistema
- Registro
- Encripción de firma
- Recuperación
Dentro de estos cuatro escenarios se realiza una serie de procedimientos matemáticos que
proporcionan un cierto grado de dificultad a la implementación del algoritmo, motivo por el
cual resulta conveniente dividir la aplicación criptográfica en bloques o módulos
independientes. El hecho de poder tener bloques independientes facilita su diseño y su
programación. Los módulos resultantes de esta fragmentación (figura 3.5) son:
a) Unidad Central.
En este criptosistema al módulo que se encarga de administrar la ejecución de las funciones
matemáticas, y en general, de cada una de las fases que conforman el algoritmo de
encripción se le denomina Unidad Central. Este módulo ejecuta cada uno de los escenarios
de los que consta el algoritmo de encripción de Hsu y Wu.
Fig. 3.5. Aplicación dividida en bloques.
b) Módulo Aritmético.
Todos los sistemas de encripción de datos sustentan su funcionamiento en operaciones
aritméticas, la s cuáles varían dependiendo de la complejidad del cifrado de los datos. En el
caso concreto del criptosistema de Hsu y Wu, las siguientes operaciones básicas son
indispensables:
- Suma
- Resta
- Multiplicación
- División
- Módulo de dos números
32
Dis eño del criptosistema
Capítulo 3
Estas operaciones son consideradas dentro de este diseño como básicas, ya que no
requieren de ninguna otra para poder completar su algoritmo. En adición a éstas dentro del
algoritmo se requiere de elevar un número a una potencia, esta función es considerada
compuesta ya que utiliza las cinco básicas para poder entregar un resultado.
El módulo aritmético de realiza ambos tipos de operaciones dentro del algoritmo, las
básicas y las compuestas.
c) Módulo de Comunicaciones.
Aunque la idea de seccionar el criptosistema en módulos se debe a la cantidad de
operaciones matemáticas, también existe la necesidad de crear un módulo que se encargue
de las comunicaciones dentro de la herramienta de encripción. El tipo de comunicación a la
cual se hace referencia es entre la terminal y la tarjeta de hardware del sistema de
codific ación.
En un sistema de cifrado electrónico, los mensajes a codificar son provenientes de una
computadora personal (documentos, imágenes, archivos de texto, etc.). Por lo que se
requiere que el criptosistema sea capaz de recibir archivos electrónicos provenientes de una
PC, codificarlos, transmitirlos y regresarlos a su formato original dentro de la computadora
destino. Un proceso fundamental dentro de estas funciones es el intercambio de
información entre la tarjeta y la PC. Por tal motivo, se requiere de un módulo independiente
que se encargue de esta labor.
3.1.3. Simulación del Algoritmo de Encripción
En un ambiente real es necesario emplear números primos grandes con la finalidad de
alcanzar dos propósitos:
a) Aumentar la seguridad del criptosistema; entre mayor sean los números generadores de
claves, más difícil será romper el sistema de encripción.
b) Ampliar el rango de posibles mensajes a enviar, ya que como se comentó en el capítulo
dos, el tamaño en bits del mensaje está delimitado por los números primos de
inicialización.
Una de las formas de conocer el funcionamiento real del criptosistema (empleando
cantidades grandes) es mediante una simulación de su funcionamiento, por lo que para
poder llevar acabo una representación de este tipo del algoritmo se seleccionó MATLAB
como el sowftware empleado para programar el algoritmo de encripción y simularlo. Se
empleó MATLAB para esta labor ya que este software esta dedicado al desarrollo de
aplicaciones matemáticas, lo cual encaja perfectamente con la definición de un
33
Capítulo 3
Dis eño del criptosistema
criptosistema. De la simulación realizada, se obtuvo información que no está descrita en la
literatura concerniente a este esquema y que es determinante para la etapa de diseño ya que,
como se verá a continuación, es necesario definir ciertos puntos dentro del algoritmo para
asegurar lo obtención del mensaje original en cada decripción.
Selección de p
Debido a la aplicación de la operación matemática mod durante la recuperación de los
mensajes, el tamaño de éstos queda determinado por los números primos iniciales,
específicamente p. Esta relación entre la recuperación de mensajes y p indica que
M<p
Entonces, tomando en cuenta que los archivos electrónicos están organizados en bytes, el
máximo mensaje que se podría intentar transmitir es 255, por lo cual se debe de cumplir la
siguiente relación
p > 255
El primer número primo que cumple con esta condición es el 257, desafortunadamente el
empleo de esta cantidad genera un desbordamiento en los registros de almacenamiento de
MATLAB al momento de simular el esquema de Hsu y Wu, debido a las operaciones que
se realizan en este esquema (funciones exponenciales). Lo que se busca entonces, es poder
transmitir mensajes más pequeños sin perder información de los archivos. Un método para
lograr esto es dividir los bytes de los archivos en dos, parte alta y parte baja (similar a lo
realizado en algunos microprocesadores), con lo que el 17 es el valor mínimo de p.
Por su parte, el máximo valor que puede tomar p queda nuevamente definido por las
características de la herramienta de simulación en software. Las pruebas hechas dieron
como resultado que si se emplean números mayores a 31, la recuperación de los mensajes
se efectúa de forma incorrecta. De tal modo, la relación que se sigue para la elección de p
es
17 p 31
La solución para poder encriptar mensajes de 8 bits es el empleo de algoritmos matemáticos
dedicados al manejo de cifras numéricas grandes. Esta solución resulta en una gran
cantidad de procesos y algoritmos que requerirían un tema de tesis aparte para su
entendimiento y aplicación. Es por este motivo que se limita el número p en el esquema de
codificación.
34
Dis eño del criptosistema
Capítulo 3
Selección de las variables restantes
A pesar de que en el esquema de Hsu y Wu están definidas las relaciones para determinar
cada una de las variables, estás no se cumplen en todos los casos. Un ejemplo de ello es la
variable XG, el algoritmo de encripción especifica que esta variable debe de cumplir con
X G ∈ Z q*
Pero en un caso práctico, hay valores que caen dentro del intervalo especificado para esta
variable y que producen un resultado erróneo en el proceso criptográfico. Es por esta razón
que los valores que pueden tomar cada una de las variables se vuelven dependientes de la
selección de p y q.
3.2. DESCRIPCIÓN DEL DISEÑO
En la etapa de diseño general, la aplicación final quedó dividida en tres módulos:
aritmético, de comunicación y unidad central. Esta etapa retoma esa división por lo que la
descripción del diseño tamb ién se divide en tres secciones:
- Módulo Aritmético
- Módulo de comunicaciones
- Unidad Central
3.2.1. Módulo Aritmético
A pesar de todas las ventajas que proporciona la programación en VHDL, en el caso
concreto de este trabajo presenta un reto: no cuenta con funciones matemáticas
predefinidas, sólo proporciona ciertas operaciones muy elementales a nivel de bits. Esto
ocasiona que el desarrollo del módulo aritmético abarque la implementación de las
operaciones básicas y compuestas que requiere el algoritmo de encripción, así como su
aplicación dentro de cada uno de los escenarios. El primer paso para poder lograrlo es
definir el formato numérico con el que se llevarán a cabo las operaciones matemáticas y se
almacenarán los datos.
3.2.1.1. Formato Numérico
Debido a que los resultados obtenidos durante la simulación del esquema de Hsu y Wu en
MATLAB se pueden considerar satisfactorios, lo más apropiado es utilizar en la
35
Capítulo 3
Dis eño del criptosistema
herramienta de encripción un formato similar al de MATLAB. Este software matemático
utiliza un formato de punto flotante de ocho bytes, 53 bits para la mantisa y 11 para el
exponente de dos (entre 15 y 16 cifras decimales equivalentes) [4].
Para la herramienta criptográfica se buscó un formato numérico parecido al de MATLAB
pero que fuera menos complicado de implementar. Es por esta razón que se hace una
pequeña modificación al formato empleado en las simulaciones, quedando entonces un
formato de ocho bytes pero de punto fijo. Concretamente, se utiliza el formato de punto fijo
con complemento a dos.
La representación en complemento dos [3] es una forma eficiente de representar números
con signo en microprocesadores de punto fijo. La propiedad fundamental de este formato es
que permite representar números negativos, para lo cual se utiliza el bit más significativo de
la palabra binaria que se está manejando. Esto lleva a que en un formato de palabra de n
bits, la capacidad de representación sea de hasta 2n-1 para números positivos y 2 n-1 - 1 para
negativos. El bit de signo será siempre el más significativo. Este formato se muestra en la
figura 3.6.
n
n-1
n-2
s
b
b
- - - -- -- --
1
0
-1
b
b
b
1-n
- - - -- -- --
B
Fig. 3.6. Esquema numérico para 2n bits.
Con esta forma de representación los números positivos tendrán el bit más significativo
igual a 0, mientras que si se trata de un número negativo este bit será 1.
La manera de escribir como se encuentra representado un número binario es mediante el
formato Qm,n. En esta representación se utilizan m bits para indicar en complemento 2 la
parte entera de un número y n bits para indicar en complemento 2 la parte fraccionaria. Para
esto son necesarios m + n + 1 bits para almacenar un número en formato Qm,n , también
conocido como formato Qm+n+1 .
Entonces, si se ha definido que los datos numéricos sean de 64 bits de punto fijo, se puede
decir que la herramienta criptográfica empleará un formato Q32,31 (Q64 ) (figura 3.7).
32
31
30
s
b
b
- - - -- -- --
1
0
-1
b
b
B
-31
- - - -- -- --
b
Fig. 3.7. Esquema numérico para el criptosistema.
A partir de este punto comienza la etapa de implementación de las operaciones
matemáticas, tanto básicas como compuestas:
36
Dis eño del criptosistema
Capítulo 3
- Suma
- Resta
- Multiplicación
- División
- Módulo de dos números
- Potencia
Para contar con una implementación eficiente, se necesitan seleccionar cuidadosamente los
algoritmos para cada una de ellas. En este caso, lo que se pretende es utilizar algoritmos
que sean útiles para calcular más de una operación, así que las operaciones quedan
agrupadas en los siguientes algoritmos:
- Suma con signo
- Multiplicación
- División (cociente/residuo)
- Potencia
3.2.1.2. Suma con signo
Para la ejecución de una suma bajo el formato establecido no se necesita hacer ningún
ajuste del resultado, es decir, el resultado está formado por la misma cantidad de bits que
los sumandos. Dicho de otra forma:
Qm + Qm = Qm
(3.1)
Con el problema de compatibilidad de datos resuelto, únicamente es necesario establecer un
algoritmo que defina que operación realizar basado en el bit de signo de los sumandos,
adición o sustracción.
La obtención del resultado de esta operación prácticamente se basa en la toma de dos
decisiones durante el algoritmo. Una de esas decisiones consiste en saber si los signos de
los sumandos son iguales, esto con el fin de saber si lo que se debe de realizar es una
adición o sustracción. La otra es identificar cual de los dos datos de entrada es mayor, para
así saber cual de los dos datos se va a sustraer del otro en caso de que la operación se trate
de una resta.
Los procedimientos para realizar concretamente la suma o la resta a nivel de bits no
requieren de un análisis detallado, ya que ésas son operaciones que VHDL ya contiene
implementadas.
La figura 3.8 presenta el diagrama de flujo de la operación de suma.
37
Capítulo 3
Dis eño del criptosistema
Fig. 3.8. Diagrama de flujo de la suma con
signo.
3.2.1.3. Multiplicación
A diferencia de la suma, la multiplicación en formato Qm presenta una inconsistencia
(sobreflujo) de formato entre los datos de entrada y el resultado:
Qm · Qn = Qm+n
(3.2)
Este sobreflujo de bits implica que antes de establecer un algoritmo general para la
multiplicación, se tiene que definir un método que permita ajustar a nivel de bits el formato
del resultado [1]. El procedimiento de ajuste consiste en eliminar los bits excedentes del
resultado con respecto a la cantidad de bits definida por el formato de los datos que se
desean multiplicar, con referencia en el punto decimal.
Con un formato Q32,31 , el punto decimal se encuentra en la posición 31 en los datos de
entrada, por consecuencia, el punto debe de estar en la posición 63 del resultado preliminar
de 127 bits. A partir de esa posición se toman los bits se necesitan para formar un número
con formato Q32,31 (31 para la parte fraccionaria y 32 para la parte entera), desechando los
31 bits menos significativos y los 33 bits más significativos de este número. Lo anterior
queda representado en la figura 3.9.
38
Dis eño del criptosistema
127
126
s
b
Capítulo 3
63
62
61
s
b
b
- - - -- -- --
b
0
s
b
b
- - - -- -- --
b
93
--
b
63
62
s
b
31
- - - -- -- -- -- - -- -- -- -- - --
b
- - - -- -- -- -- - -- -- -- -- - --
b
0
--
b
0
Fig. 3.9. Esquema para la multiplicación.
Con el problema del subreflujo resuelto sólo resta definir el signo del resultado, el cual
depende de que los multiplicandos tengan el mismo signo o no, con lo que el algoritmo de
la multiplicación queda de la siguiente forma:
Fig. 3.10. Diagrama de flujo de la multiplicación.
Al igual que en el caso anterior, la multiplicación bit a bit se encuentra implementada en
VHDL, por lo que no es necesaria su documentación, sólo se muestra el diagrama de flujo
de su funcionamiento en la figura 3.10.
39
Capítulo 3
Dis eño del criptosistema
3.2.1.4. División
Éste es el primer caso en donde la operación que se desea programar no se encuentra
implementada a nivel de bits por VHDL, por lo que es necesario especificar un algoritmo
que se encargue de realizarla. Matemáticamente, existen muchos métodos igualmente
efectivos para poder realizar una división, por lo que la selección de alguno de ellos no
alterará el funcionamiento final del módulo matemático. Aún así, uno de los métodos más
empleados es el de división con re-almacenamiento. La ventaja de usar este algoritmo es
que de él se obtiene tanto el cociente como el residuo. Véase la figura 3.11.
La división con re-almacenamiento consta de cuatro pasos [1]:
1. Establecimiento de valores iniciales. Como entradas al algoritmo tenemos al dividendo
y al divisor, y establecemos al residuo, resta y al resultado con valores iniciales de cero
(todos los datos son números de n bits).
Fig. 3.11. Algoritmo de división con re-almacenamiento.
2. Corrimiento. Se hace el corrimiento hacia la izquierda del residuo, siendo el bit entrante
el que se encuentre en la posición Pos del dividendo. Inicialmente el valor de Pos será
n-1 (el bit más significativo).
3. Resta. Se realiza la resta aritmética del residuo menos el divisor. Si el resultado de esta
resta es un número negativo, se continúa con el algoritmo. En caso contrario, se cambia
de valor el bit que se encuentre en la posición Pos del Resultado de 0 a 1 y el resultado
de la resta se almacena en el residuo.
4. Paso final. Se decrementa el valor de Pos. Si Pos < 0 el algoritmo termina, de no
cumplirse esto, se comienza el algoritmo desde el paso número 2.
Con un método como el algoritmo de división con re-almacenamiento, podemos obtener el
resultado tanto para la división como para el residuo, con lo que se resuelve el problema de
40
Dis eño del criptosistema
Capítulo 3
dos operaciones básicas. Lo que sigue a continuación en la etapa de diseño, como se ha
visto en los casos anteriores, es ajustar el formato de los resultados obtenidos en ambas
operaciones: división y módulo.
Hablando del formato de los resultados, la división presenta el mismo problema de
sobreflujo que se observó en la multiplicación:
Qm + Qn = Qm+n ,
(3.3)
pero en este caso se resuelve de una manera distinta.
Para que el resultado de la división mantenga el formato Qm,n establecido, es necesario
dejar de lado el signo y los puntos decimales del dividendo y del divisor al momento de
iniciar el proceso, y añadir n ‘0’s al dividendo. El punto decimal del cociente quedará
colocado en la posición en donde comienzan a aparecer los n ‘0’s mencionados (n = 31).
Véase figura 3.12.
93
62
b
- - - -- -- --
(a)
b
0
62
b
b
31
30
- - - -- -- --
b
b
0
0
- - - -- -- --
b
0
62
(b)
b
0
---
b
n-1
---
0
0
- - - -- -- --
b
Fig. 3.12. Esquema para división y módulo.
Finalmente, se deben de suprimir los bits excedentes en el cociente (a) y añadir el bit de
signo. En este caso, los datos que se deben de eliminar son los 32 bits más significativos
para llegar a un resultado como el que se presenta en la figura 3.13.
62
(a’)
s
b
---
31
30
b
B
0
---
b
Fig. 3.13. Resultado de la división.
Este número representa al cociente, pero como ya se había mencionado antes, este
algoritmo también es capaz de entregar el residuo, por lo que también hay que darle el
formato numérico adecuado a este dato. Entonces, si lo que se quiere obtener es el residuo,
ya no es necesario añadir ‘0’s al dividendo al momento de iniciar el proceso, el resultado de
la última resta hasta el bit 0 del dividendo original es el dato entregado (b).
41
Capítulo 3
Dis eño del criptosistema
El último paso en el diseño de la división es el planteamiento a utilizar para la obtención de
los signos, el cual es el mismo tanto para el resultado de la división como para el módulo:
signos iguales en los datos de entrada producen un signo positivo, y signos diferentes uno
negativo. Con base en lo anterior, se estableció el diagrama de flujo presentado en la figura
3.14.
Fig. 3.14. Diagrama de flujo de la
división.
3.2.1.5. Potencia
Hasta este punto se ha visto el diseño de cuatro operaciones relativamente parecidas: las
operaciones básicas. Por otra parte, la función x y presenta la particularidad de que debe ser
implementada empleado dichas operaciones, ya que no existe forma directa de calcularla.
Indirectamente, el emplear las operaciones ya diseñadas hasta ahora presenta una ventaja:
el resultado de esta operación ya poseerá el formato numérico adecuado, es decir, no será
necesario ajustar la longitud del resultado. Pero es necesario añadir que existe una
desventaja: el tiempo de ejecución de esta operación será mayor al de las operaciones
básicas.
A pesar de esto, el verdadero inconveniente aquí es que a pesar de existir más de un método
para elevar un número a una potencia, ninguno de ellos emplea únicamente las operaciones
aritméticas disponibles (suma, resta, multiplicación, división). La solución matemática a
problemas de este tipo es el empleo de aproximaciones.
Para el caso de una función x y la opción adecuada para realizar una aproximación es
mediante logaritmos y exponentes [6]:
x y = exp ( y ⋅ ln ( x ))
(3.4)
42
Dis eño del criptosistema
Capítulo 3
De esta forma lo que se consigue es que en lugar de tener una función a aproximar, se
tienen dos, pero con un menor grado de complejidad que la primera. Convenientemente,
existe una manera de aproximar ambas funciones, tanto exp(x), como ln(x), y esto es
mediante la ecuación de la parábola:
ax2 + bx + c
(3.5)
Para poder realizar una aproximación a cualquier función lo primero que se necesita es
establecer cual va a ser el rango dentro del cual la aproximación va a operar. Con un rango
definido, se cuenta con dos puntos para los cuales el valor de la función a aproximar es
conocido, pero para el caso específico de una aproximación empleando la ecuación de la
parábola (ecuación con tres incógnitas), es necesario contar con otro punto conocido. En
otras palabras, lo que se busca es generar un sistema de tres ecuaciones con tres incógnitas
y resolverlo. La tabla 3.2 muestra un ejemplo en el cual se realiza una aproximación a la
función exp dentro de un rango del 1.5 al 4.
para x =
1.5
3
4
ex
4.4816
20.085
54.598
Ecuación
2.25a + 1.5b + c
9a + 3b + c
16a + 4b + c
Tabla. 3.2. Sistema de ecuaciones para la parábola en (1.5, 4).
Así se obtiene la siguiente ecuación de aproximación:
ex
9.644x2 - 32.9955x + 32.2759
con x = (1.5, 4)
Un punto a considerar para el establecimiento del rango de operación dentro de la
aproximación es que dicho rango va a definir la exactitud de la aproximación: entre más
amplio sea el rango, menor será la exactitud. Haciendo un análisis profundo a la simulación
del algoritmo de encripción, se puede decir que los rangos de operación son:
para
exp(x),
x = (0, 5);
para ln(x),
x = [0, 100)
Las aproximaciones que se pueden obtener dentro de estos rangos de operación presentan
una exactitud tan pobre que no pueden ser tomadas en cuenta para una aplicación de
encripción de datos, lo cual se puede apreciar de manera gráfica en la figura 3.15.
Lo que se necesita para llegar a una aproximación más cercana a la curva real es disminuir
el rango de trabajo. El inconveniente es que las funciones exponente y logaritmo no
resultan de mucha utilidad si no se pueden emplear con al menos x = 5 y x = 100
43
Capítulo 3
Dis eño del criptosistema
respectivame nte. Por lo que resulta necesario dividir cada uno de los segmentos de valores
permitidos de x en rangos más pequeños. Para poder mostrar esta mejoría se realiza una
división de cada uno de los rangos en 7 segmentos. Figura 3.16.
Fig. 3.15a. Aproximación a exp (1 segmento).
Fig. 3.15b. Aproximación a log (1 segmento).
Fig. 3.16a. Aproximación a exp (7 segmentos).
Fig. 3.16b. Aproximación a log (7 segmentos).
Como se puede apreciar en la figura 3.16, durante todo el intervalo graficado siempre hay
una curva aproximada que se empareja con la real. Gráficamente, esto demuestra que se ha
conseguido aproximar al exponente y al logaritmo de manera satisfactoria. Lo que resta
ahora es comprobar si esto se mantiene de manera matemática. Para esto se elevó el número
2 al cuadrado utilizando este método de aproximación presentándose los resultados en la
tabla 3.3.
44
Dis eño del criptosistema
Capítulo 3
Función
log
Segmento en x
(1, 15)
Punto extra
14
Ecuación resultante
-0.0148 x2 + 0.4303 x - 0.4155
exp
(0.5, 1.5)
1.25
1.5099 x2 - 0.1868 x - 1.3647
Tabla. 3.3. Ecuaciones para cálculo de 22 .
2 2 = exp (2 ⋅ ln (2 ))
exp( 2(-0.0148(2)2+0.4303(2)-0.4155) ) = 0.7718
0.0148(0.7718)2+0.4303(0.7718)-0.4155 = 2.12
2 2 ≈ 2.12
Lo que se puede observar de este resultado es que a pesar de tener una buena aproximación
gráficamente, numéricamente existe un error de un 6%, y aunque se pudiera pensar que un
error de esta magnitud es pequeño, hay que tomar en cuenta que se generó en un cálculo
muy simple. En una aplicación real de encripción, las operaciones aritméticas son de una
magnitud mayor, lo que generaría un error mayor. Sumado a esto, hay que mencionar que
la cantidad de operaciones realizadas durante un proceso de encripción es muy grande, lo
que provocaría que el error se propagara y aumentara.
Una posible solución a este problema es aumentar el número de segmentos hasta llegar a un
resultado aceptable. Esta solución aumenta los recursos necesarios para la implementación
de este método de aproximación, ya que el número de constantes que deben de estar
almacenadas para resolver las ecuaciones de la parábola incrementaría demasiado,
consumiendo recursos que podrían ser usados de manera más eficiente. Por lo que es
necesario buscar otro camino.
Una mejor alternativa es buscar funciones más sencillas de aproximar mediante algunas
propiedades de los logaritmos. La palabra sencilla se refiere a que las ecuaciones tengan un
rango de trabajo menor que las empleadas hasta ahora. Para el caso de la función exp(x) se
tiene:
e x = 2 x / ln(2 ) = 2 n ⋅ 2 z
con
0
z<1
y
(3.6)
n un entero
Esta igualdad deriva en elevar el número 2 a dos potencias, una un entero, y la otra un
número entre el 0 y el 1; la obtención de estos dos números no representa ningún
contratiempo, ya que provienen de una división de la variable inicial entre una constante
(ln(2)). Entonces, analizando las nuevas ecuaciones, se tiene que la primer potencia se
45
Capítulo 3
Dis eño del criptosistema
resuelve mediante corrimientos a nivel de bits hacia a la izquierda del número 2, por lo que
sólo queda resolver 2z. Aparentemente esta solución genera el problema inicial, elevar un
número a una potencia, lo cual no es necesariamente cierto, ya que en esta potencia se
obtienen dos ventajas. La primera es que el número que se va a elevar es constante, por lo
que esta función también se puede aproximar mediante la ecuación de la parábola. La
segunda, y la más importante, es que el rango de trabajo se redujo de (0, 5), al de (0, 1).
Para el logaritmo se tiene:
ln ( x ) = ln (2) ⋅ log 2 (x ) = ln (2 ) ⋅ [log 2 (n ) + log 2 ( z )]
con 1
z<2
(3.7)
y n un número entero
Al igual que en el caso anterior, en la función final se tiene involucrada una función que es
constante, ln(2), y dos funciones que dependen de x. La primera es log2 (n), la cual también
se resuelve de una manera senc illa (corrimientos a la derecha ), quedando sólo el log2 (z) por
resolver. Pero de igual forma que sucedió con el exponente, este logaritmo se puede
aproximar mediante una parábola, además de que presenta también una reducción en el
rango de valores posibles, en este caso de (0, 100), al de (1, 2).
Para comprobar la eficiencia de elevar un número a una potencia con este nuevo par de
aproximaciones, se realizó la misma operación antes mencionada y algunas otras más de
manera aleatoria.
2^2
= 4
4.000
Error: 0.000%
9.1^2.3
= 160.6183
160.6197
Error: 0.001%
3.5^1.42 = 5.92347
5.92341
Error: 0.002%
5.66^4.67 = 3278.33
3278.44
Error: 0.004%
Tabla 3.4. Ejemplos de la función potencia.
Como se puede observar en la tabla 3.4, los márgenes de error resultan intrascendentes en
comparación con los obtenidos en la primera aproximació n, por lo que se puede considerar
46
Dis eño del criptosistema
Capítulo 3
este método de aproximaciones es lo suficientemente preciso como para ser implementado
dentro del sistema de encripción.
Con el problema de encontrar un algoritmo para elevar un número a una potencia, y el de
compatibilidad de datos resuelto, sólo queda pendiente la etapa de selección del signo para
resultado, lo cual es una tarea irrelevante. El hecho que la convierte en una tarea irrelevante
es que durante el algoritmo de Hsu y Wu no se eleva ningún número negativo, y el
resultado siempre es mayor a 0. Debido a esto, el procedimiento para elevar un número a
una potencia dada se ejecuta de manera lineal. Ver figura 3.17.
Fig. 3.17. Diagrama de flujo de la
potencia.
Con la conclusión de la etapa del diseño del procedimiento para elevar a una potencia dada
cierto número concluye la sección del diseño del módulo aritmético.
3.2.2. Módulo de Comunicaciones
Su función es proveer el medio para el intercambio de información entre el criptosistema y
la computadora personal donde ésta residirá. Existen tres opciones para poder implementar
esta fase, bus PCI, puerto paralelo y puerto serie; de las cuales, la primera queda descartada
debido a los recursos necesarios en caso de su empleo.
En este punto del diseño es necesario destacar que existe la necesidad de comunicar cada
una de las terminales entre sí, tarea que le corresponde también al módulo de
comunicaciones. Para poder decidir cual puerto emplear en cada caso, es necesario
comentar brevemente las características más importantes de cada uno de los dos.
47
Capítulo 3
Dis eño del criptosistema
Puerto Paralelo [5, 7]
- Longitud máxima 20ft (7m).
- Data rate 150kbps.
- Niveles TTL de E/S.
- 8 bits de salida.
- 4 bits de entrada.
Puerto Serial (Interfaz RS232) [5, 7]
- Longitud máxima 50ft (17m).
- Data rate 256kb/s.
- Niveles de salida +/-5V a +/-15V.
- Resistencia de entrada (Ohms) 3kÙ a 7kÙ.
- Impedancia de carga (Ohms) 3kÙ a 7kÙ.
Analizando cada uno de los puntos arriba mencionados, se considera que la mejor opción es
que la comunicación entre el sistema criptográfico y la PC se realice mediante el puerto
paralelo, mientras que el puerto serie queda seleccionado para la comunicación entre PC´s.
Los criterios tomados en cuenta para asignar el empleo de cada uno de los puertos están
relacionados con el intercambio de información entre computadoras, ya que se requiere que
los datos recorran una mayor distancia que en el otro caso (y a una velocidad superior). El
puerto que ofrece estas características es el puerto serial. De esta manera, el puerto paralelo
será empleado para comunicar la tarjeta de encripción con la PC.
3.2.3. Unidad Central
Por último, lo que hace falta es un módulo que se encargue de administrar las funciones y
tareas realizadas por los dos primeros módulos. Al elemento encargado de esto se le ha
llamado unidad central. Es este módulo el que se encargará de ejecutar cada uno de los
escenarios de los que consta el algoritmo de encripción de Hsu y Wu:
- Inicio
- Registro
- Encripción
- Recuperación del mensaje
De todos ellos, el primer escenario será el único que no se programará en VHDL. La razón
para esto es que la única tarea que se realiza en él es seleccionar tres números aleatorios,
tarea que puede ser realizada por la terminal que tome el papel del firmante dentro de la
comunicación. Los tres escenarios restantes serán programados como bloques
48
Dis eño del criptosistema
Capítulo 3
independie ntes, los cuales deben de cumplir con ciertos lineamientos para poder entregar
los resultados deseados. Estos lineamientos son referentes a los valores que se pueden
manejar en cada uno de los escenarios.
De acuerdo a los resultados obtenidos de la simulación del criptosistema, se establecen dos
características de la herramienta de encripción: cada dato que se desee enviar será dividido
en parte alta y parte baja, y las variables de los escenarios dependen de p y q. La primera de
ellas no altera en nada el funcionamiento del esquema de encripción, ya que éste requiere
un dato de entrada para generar un dato de salida, sin importar en que formato se presenta
el dato de entrada. La segunda característica sí afecta drásticamente la codificación y la
decodificación, ya que un mal manejo de las variables ocasiona que la recuperación de los
mensajes se obtenga de manera incorrecta. Así que es necesario recurrir a las simulaciones
en MATLAB para poder obtener un diseño correcto de los cuatro escenarios que
conforman el esquema de verificación compartida.
3.2.3.1. Aportación al esquema de Hsu y Wu.
Uno de los resultados de la simulación fue el generar una tabla de valores (tabla 3.4) para
los cuales el algoritmo tiene un funcionamiento adecuado. Dentro de la descripción que
hacen los autores de la bibliografía a su esquema [2], Hsu y Wu mencionan la forma
matemática de generar los valores de los parámetros de encripción, sin embargo, las
simulaciones arrojaron como resultado que la generación de estos parámetros puede llevar a
una recuperación incorrecta del mensaje original. Es por este motivo que el empleo de
parámetros aleatorios dentro del esquema de encripción se acotó a los presentados en la
tabla 3.5.
p
19
31
q
2
g
1, 3, 4, 5
XA
1
XG
1, 2, 4
3
2, 3, 4, 5, 6, 9, 10,
13, 14, 15, 16
3, 6, 11, 12, 13
1
1, 3, 5, 7, 9, 11
1
3, 5, 6, 7, 9, 10, 11,
12, 13, 14, 17, 18,
19, 20, 21, 22, 24,
25, 26, 28
1
1, 2, 3, 4, 5, 6, 7, 8,
9, 10
1, 2, 3, 4, 5, 6, 7, 8,
9, 10
2
3
Tabla 3.5. Posibles variables dentro del esquema de encripción.
49
Capítulo 3
Dis eño del criptosistema
De esta tabla se puede observar la cantidad de combinaciones de variables que serán
empleadas en el criptosistema, la cual es demasiado grande a pesar de que se utilizan
valores de p y q pequeños.
3.3. SUMARIO
Analizando el esquema de encripción, se establece que la herramienta que se desarrolle
durante este trabajo servirá para comunicaciones dentro de un sistema conectado con una
topología en Bus. Para poder implementarlo, el criptosistema se dividió en módulos:
Unidad central, Módulo Aritmético y Módulo de Comunicaciones, llevándose una etapa de
simulació n en software para su comprensión y análisis.
De estos tres módulos el más complejo resultó ser el Aritmético, ya que VHDL no
proporciona rutinas para operaciones matemáticas y manejo de números reales, siendo
necesario desarrollarlas de manera específica.
Finalmente se definió la utilización de los puertos de la computadora dentro del módulo de
comunicaciones.
3.4. REFERENCIAS
[1]
Brey, Barry: “The Advanced Intel Microprocessors”, Macmillan, USA 2000.
[2]
HSU C.L, WU T.C: "Authenticated encryptio n scheme with (t,n) shared
verification", IEE Proceedings, 117-121 January 1998.
[3]
Mano, Morris: “Arquitectura de Computadoras”, Prentice Hall, México 1983.
[4]
Marchand, Patrick: “Graphics and GUI’s with MATLAB”, 2nd Edition, CRC Press,
N.Y. 1999.
[5]
Mompin, José: “Interconexión de Periféricos a Microcontroladores”, Marcombo,
México 1983.
[6]
Swookowski, Earl: “Cálculo con Geometría Analítica”, 2ª Edición, Iberoamérica,
México 1988.
[7]
Tanenbaum, Andrew: “Organización de Computadoras, un Enfoque Estructurado”,
Prentice Hall, México 1992.
50
Dis eño del criptosistema
Capítulo 3
[8]
Tanenbaum, Andrew: “Redes de Computadoras”, 3rd Edition, Pearson, México
1997.
[9]
Las Redes Informáticas [en línea] [Fecha de consulta: Mayo 2003], disponible en:
<http://www.mercadomercedino.com.ar/Lasredes.htm>
51
Capítulo 3
52
Dis eño del criptosistema
Desarrollo y Resultados
Capítulo 4
Capítulo 4
Desarrollo y Resultados
En el capítulo anterior se realizó un diseño de manera
modular de la implementación del esquema de Hsu y
Wu. En este capítulo se retoma lo visto anteriormente
para llevar ese diseño a una aplicación real en un
dispositivo FPGA. Para este propósito se seleccionó el
dispositivo XCV1000 y sobre él se desarrollaran los
pasos de los que consta el desarrollo de herramientas
digitales en VHDL.
Fig. 4.1. Proceso de desarrollo.
La etapa de desarrollo consiste en programar en VHDL cada uno de los módulos analizados
y diseñados hasta ahora, la meta de esta codificación es generar los archivos necesarios
para descargar el criptosistema en un FPGA. El dispositivo que se seleccionó como destino
53
Capítulo 4
Desarrollo y Resultados
final de los programas es el XCV1000 de Virtex, y el software utilizado en esta etapa es el
Xilinx ISE 5.2i, el cual cuenta con herramientas de simulación de proyectos.
La metodología que empleada consistió en llevar cada uno de los programas generados a
través de las tres fases que conforman la programación en VHDL:
- Síntesis
- Implementación del diseño
- Generación del archivo de programa
4.1. MÓDULO ARITMÉTICO
4.1.1. Versión Preliminar
Como etapa de introducción en la programación en VHDL se programaron cada una de las
operaciones aritméticas básicas con un formato numérico reducido, 8 bits con punto fijo.
Véase figura 4.2.
4
3
2
1
0
-1
-2
-3
s
b
b
b
b
b
b
b
Fig. 4.2. Esquema numérico para módulo preliminar.
Lo anterior se hace con la finalidad de poder contar con un archivo que sirva como banco
de pruebas para comprobar tanto los algoritmos diseñados para realizar cada una de las
operaciones, como la lógica empleada para la codificación de cada uno de los programas
posteriores. La programación de la función para elevar un número a una potencia no se
incluyó para esta versión preliminar del módulo aritmético.
En este programa se manejaron tres vectores de entrada y uno de salida; el vector de salida
(DATOUT) se encarga de presentar el resultado, mientras que dos de los vectores de
entrada (DATINA y DATINB) son para los operandos y el vector restante (OPCIN) es para
seleccionar la operación a realizar. Las palabras de control bajo las cuales funciona el
vector OPCIN son:
- 000 – Suma con signo
- 001 – Multiplicación
- 010 – División
- 011 – Módulo
54
Desarrollo y Resultados
Capítulo 4
Uno de los motivos por los que VHDL se considera como una herramienta de gran
desempeño en el diseño digital es su capacidad de procesamiento. En las figuras obtenidas
de la simulación (figura 4.3), podemos notar que esta versión del módulo aritmético es
capaz de entregar el resultado de cualquiera de sus cuatro operaciones programadas en un
ciclo de reloj (100ns).
Fig. 4.3a. Suma con signo ( -4+1).
Fig. 4.3b. Multiplicación (-4·1).
Fig. 4.3c. División (-4/1).
Fig. 4.3d. Módulo (4mod3).
Dentro de un ciclo de reloj, el programa acepta e interpreta la palabra de control, recibe
ambos datos y genera el resultado.
Para estas simulaciones se realizó una serie de operaciones al azar de cada una de las cuatro
funciones programadas, obteniéndose el resultado correcto en cada caso. Con estos
resultados se cumple el objetivo de validar los algoritmos de cada una de las operaciones
necesarias para el esquema de encripción de datos, por lo que se puede acceder a la etapa de
implement ación del módulo aritmético de manera formal.
4.1.2. Operaciones Básicas
En esta etapa del desarrollo de la herramienta de codificación ya se tiene seleccionado un
dispositivo FPGA sobre el cual estará basado el criptosistema (XCV1000). La selección de
este dispositivo implica que cada característica de los módulos que se haya establecido en
la etapa de diseño debe de adaptarse a los recursos del dispositivo destino. Para evitar que
alguno de estos recursos fuera a ser sobrepasado, cada una de las operaciones de esta
55
Capítulo 4
Desarrollo y Resultados
sección fue programada y simulada independientemente, obteniendo como resultado final
la conjunc ión de todas ellas.
Una de las consideraciones más importantes que se deben de tomar en cuenta para cumplir
con una buena implementación en VHDL es referente a la cantidad de pines de
entrada/salida disponibles. En una aplicación como ésta (manejo de datos de 64 bits), es
bastante común que se sobrepase la cantidad de puertos de E/S.
Idealmente, para implementar alguna operación aritmética de este módulo se necesitan dos
buses de entrada para los operandos y uno de salida para el resultado (192 pines de E/S en
total). Debido que el dispositivo destino no cuenta con esa cantidad de puertos, es necesario
realizar ciertos ajustes en la programación de las operaciones para acoplar los
requerimientos de hardware a los recursos disponibles. Este problema se solucionó
utilizando únicamente un bus de entrada para ambos operandos, provocando como
consecuencia que la lectura de los datos de entrada se haga en dos ciclos de reloj en lugar
de uno como se tenía contemplado.
Con la cantidad de puertos necesarios establecida, queda resuelto el problema sobrepasar
los recursos que ofrece el FPGA seleccionado en la programación de cada una de las
operaciones, ya que ni la memoria ni el tiempo de procesamiento resultaron insuficientes en
alguna de las funciones básicas; quedando pendiente la implementación en conjunto de las
operaciones. Lo que se busca obtener con la unión de estas operaciones es que todas queden
implementadas en un mismo dispositivo, y para poder llevarlo a cabo es necesario añadir
una palabra de control que sirva para seleccionar la operación a realizar. De tal forma, los
puertos de E/S quedan establecidos de la manera presentada en la tabla 4.1:
Señal
CLK
Sentido
Ent
Tipo
Bit
Descripción
Señal de reloj.
FCNIN
Ent
Vector (1 – 0)
OPCIN
Ent
Vector (2 – 0)
DATINA
Ent
Vector (63 – 0)
Elige cual operación será
ejecutada.
Determina el paso de la
operación ejecutar.
Dato de entrada.
DATOUT
Sal
Vector (63 – 0)
Dato de salida.
Tabla. 4.1. Puertos de E/S para las operaciones básicas.
56
Desarrollo y Resultados
Capítulo 4
La palabra de control que se utiliza para determinar el funcionamiento que tendrá este
dispositivo es FCNIN, y de acuerdo a ella se realizará alguno de los procedimientos
representados en los diagramas de tiempo de la figura 4.4.
Fig. 4.4a. Diagrama de tiempo para suma y multiplicación.
Fig. 4.4b. Diagrama de tiempo para división y módulo.
La figura 4.3 muestra el funcionamiento que deben de tener las cuatro operaciones básicas
programadas dentro un mismo FPGA, además de que se puede notar que se necesita más de
un pulso de reloj para que esta aplicación entregue su resultado. Lo anterior se debe a que al
emplear números de 64 bits se fraccionaron los algoritmos propuestos para estas
operaciones. Para poder realizar ordenadamente cada uno de esos segmentos resultantes de
los algoritmos se añade una palabra extra de control, OPCIN. Con esta palabra se le
informa a la aplicación que paso ejecutar dentro del algoritmo determinado.
A partir de aquí se comienza con el proceso de desarrollo en VHDL de esta primera parte
del módulo aritmético. La primera etapa de este proceso es la síntesis del proyecto, en la
cual básicamente se buscan errores de sintaxis en el código VHDL. Si esta etapa es
realizada correctamente, se pueden realizar simulaciones del proyecto variando los
parámetros de entrada a partir de este momento.
57
Capítulo 4
Desarrollo y Resultados
Fig. 4.5a. Suma completa (-22.52+8.14).
Fig. 4.5b. Multiplicación completa (-22.52·8.14).
Fig. 4.5c. División completa (8.14/(-22.52)).
Fig. 4.5d. Módulo completo (22.52mod8.14).
Para estas simulaciones se volvieron a elegir datos de entrada para las operaciones de
manera aleatoria dependiendo de la operación, mientras que el pulso de reloj se estableció
58
Desarrollo y Resultados
Capítulo 4
para que trabaje con un periodo de 100ns. De la figura 4.5 se puede observar que el
programa hecho para realizar las cuatro operaciones básicas funciona de acuerdo a los
diagramas de tiempo que se establecieron. A diferencia de las primeras simulaciones
presentadas en este capítulo y con el propósito de tener una visualización más sencilla de
los datos en ellas presentadas, los datos de las simulaciones recientes son desplegados con
numeración hexadecimal.
La siguiente fase del proceso de desarrollo en VHDL es la implementación de diseño, etapa
cuyo objetivo es adecuar el diseño realizado a un circuito integrado en específico (en este
caso el XCV1000). El resultado que se obtiene de esta etapa, en caso de que las
características del dispositivo seleccionado sean suficientes, es un layout dinámico interno
del FPGA en el que se muestra como interactúan cada una de las celdas lógicas que lo
conforman para brindar el funcionamiento deseado.
La figura 4.6 corresponde a la implementación del diseño de esta aplicación.
Fig. 4.6. Implementación de diseño.
Para concluir con el diseño de sistemas en VHDL se generó el archivo de programa de esta
aplicación. En esta última fase se genera un archivo de tipo “.bit” que contiene la aplicación
a nivel de bits lista para ser descargada en un FPGA.
4.1.3. Función xy
Para la última de las operaciones matemáticas se sigue la misma metodología de desarrollo
que se siguió para las operaciones básicas: se programa la aplicación en VHDL y se realiza
la síntesis, la implementación del diseño y la generación del archivo de programa.
Debido a que esta operación hace uso de las cuatro operaciones implementadas hasta ahora,
es necesario que se implemente en un circuito integrado por separado y que se varíen las
palabras de control manejadas en sus puertos de E/S en comparación con el caso anterior.
59
Capítulo 4
Desarrollo y Resultados
Señal
CLK
Sentido
Ent
Tipo
Bit
OPCIN
Ent
Vector (1 – 0)
DATINA
Ent
Vector (63 – 0)
SELOP
Sal
Vector (1 – 0)
OPOUT
Sal
Vector (2 – 0)
DATOUT
Sal
Vector (63 – 0)
Descripción
Señal de reloj.
Determina el paso de esta
función a ejecutar.
Dato de entrada.
Elige cual operación
externa será ejecutada.
Controla la operación
externa paso a paso.
Dato de salida.
Tabla. 4.2. Puertos de E/S para la función xy.
Para poder interactuar con la aplicación de las operaciones básicas se tiene n las palabras de
control SELOP y OPOUT (ver tabla 4.2). La primera selecciona cual operación (suma,
multiplicación, división o módulo) se debe de ejecutar para llevar a cabo el algoritmo de la
función que eleva un número a una potencia. Por su parte, OPOUT se encarga de ejecutar
paso por paso la operación que fue elegida.
Después de diseñar y estructurar todo el algoritmo de aproximación a la función x y para
residir dentro de un solo FPGA, se comienza el proceso de desarrollo en VHDL,
obtenie ndo como resultado un archivo de tipo “.bit” que realiza el funcionamiento
mostrado en el diagrama de tiempo de la figura 4.7 en un FPGA.
Fig. 4.7. Diagrama de tiempo para la función xy.
60
Desarrollo y Resultados
Capítulo 4
4.2. MÓDULO DE COMUNICACIONES
Como se mencionó ant eriormente, existen dos procesos que han sido asignados a este
módulo: la comunicación entre terminales y la comunicación terminal-criptosistema. El
medio seleccionado para llevar a cabo la comunicación entre las terminales participantes en
el proceso de comunicación es el puerto serial de cada equipo. Hoy en día las herramientas
de software proveen los medios necesarios para controlar de manera eficiente el puerto
serial, además de que si la computadora puede controlar esta fase de la herramienta
criptográfica libera de una tarea a la tarjeta de hardware. Por estas razones se define que la
comunicación entre equipos terminales se realice mediante software de computadora. De
este modo, para completar la etapa de programación en VHDL de este módulo sólo queda
pendiente la comunicación entre la tarjeta de hardware y la PC.
Los registros de almacenamiento están diseñados para manejar datos de 64 bits, mientras
que el puerto paralelo maneja datos de ocho bits de salida y cuatro bits de entrada, por lo
que es necesario acoplar estos datos. Para realizar esta tarea, el módulo de comunicaciones
fue equipado con rutinas de corrimientos a nivel de bits de los datos. Cuando se recibe un
dato de la PC se almacena en la parte alta de un registro de almacenamiento, y por medio
de corrimientos a la izquierda se completa el dato numérico recibido. En caso de que se
desee enviar un dato a la terminal, se comienza por enviar los cuatro bits menos
significativos, terminado con los cuatro bits más significativos mediante corrimientos a la
derecha.
Señal
CLK
Sentido
Ent
Tipo
Bit
OPCIN
Ent
Vector (1 – 0)
DATOIN
Ent
Vector (63 – 0)
DATOIND
Ent
Vector (7 – 0)
DATOUTD
Sal
Vector (63 – 0)
DATOUT
Sal
Vector (3 – 0)
Descripción
Señal de reloj.
Determina el sentido de
la comunicación.
Dato de entrada para
envío a PC.
Dato de entrada para
recepción desde PC.
Dato de salida para
recepción desde PC.
Dato de salida para envío
a PC.
Tabla. 4.3. Puertos de E/S para el módulo de comunicaciones.
Para poder operar esta aplicación se tiene una palabra de control (OPCIN) que selecciona
de donde a donde se enviarán los datos, y un par de buses de datos de entrada y otro par de
salida. Cada uno de estos pares esta conformado por un bus de 64 bits (DATOIN y
61
Capítulo 4
Desarrollo y Resultados
DATOUTD) y otro de ocho bits para recibir datos de la PC (DATOIND), o uno de cuatro
bits para enviar datos a la PC (DATOUT). Ver tabla 4.3.
Fig. 4.8a. Diagrama de tiempo para el módulo de comunicaciones (salida de datos).
Fig. 4.8b. Diagrama de tiempo para el módulo de comunicaciones (entrada de datos).
El envío de datos de la tarjeta a la terminal host es un proceso que se realiza en 17 ciclos de
reloj, dentro de los cuales el dato de entrada (64 bits) es dividido en 16 segmentos y
enviado a la PC. En el caso inverso, el dato de entrada es dividio en ocho segmentos por la
comp utadora y enviado al módulo de comunicaciones en ocho ciclos de reloj, para tener
listo el dato de 64 bits en el noveno ciclo de reloj de la tarjeta.
La figura 4.9 fue obtenida de las simulaciones generadas antes de obtener el
correspondiente archivo de tipo “.bit” para esta aplicación.
Fig. 4.9a. Simulación del módulo de comunicaciones (salida de datos).
62
Desarrollo y Resultados
Capítulo 4
Fig. 4.9b. Simulación del módulo de comunicaciones (entrada de datos).
4.3. UNIDAD CENTRAL
Este módulo es el más extenso en lo que a código se refiere, y fue necesario programarlo en
fragmentos más pequeños que pud ieran ser implementados en un dispositivo FPGA.
Recordando que el escenario de inicialización será ejecutado por la terminal, entonces se
tienen tres escenarios restantes para dividir el código de encripción y decripción.
- Registro
- Encripción de firma
- Recuperación del mensaje
Con esta división del código en escenarios, el resultado que se obtendría sería que la unidad
central es una aplicación confo rmada por tres circuitos integrados. En general, una
aplicación que consta de tres dispositivos debería de considerarse como apropiada, pero en
este caso el costo se aumenta considerablemente con cada dispositivo que se añade al
diseño.
Haciendo un análisis a la codificación del esquema de Hsu y Wu, las secciones más
extensas dentro de los escenarios resultaron ser los siguientes procedimientos matemáticos:
Registro:
f (v ) = xG + a1v 1 + ⋅ ⋅ ⋅ + ( at −1 v t −1 ) mod q
Recuperación:
(4.1)
Ei = c1( xi Li mod q ) mod p
donde:
(4.2)
Li =
∏ − ID (ID
t
j =1 ,i ≠ j
j
− ID j ) mod q (4.3)
−1
i
t
y
E = ∏ E j mod p
(4.4)
j =1
63
Capítulo 4
Desarrollo y Resultados
Estos cuatro procedimientos pueden ser separados del cuerpo de sus respectivos escenarios
para ejecutarse como unidades de código independientes, con lo que se consigue reducir
considerablemente la extensión de los tres escenarios a implementar. De esta manera, el
diseño de la unidad central queda conformado para ser implementado en dos FPGA’s, el
primero contendrá el cuerpo de los tres escenarios ya mencionados, mientras que el
segundo se encargará de ejecutar los procedimientos matemáticos más extensos que se
encuentran en los escenarios de registro y recuperación (con el empleo del módulo
aritmético).
Señal
CLK
Sentido
Ent
Tipo
Bit
FCNIN
Ent
Vector (1 – 0)
OPCIN
Ent
Vector (3 – 0)
DATINA
Ent
Vector (63 – 0)
SELOP
Sal
Vector (4 – 0)
DATOUT
Sal
Vector (63 – 0)
Descripción
Señal de reloj.
Elige cual operación será
ejecutada.
Determina el paso de la
operación ejecutar.
Dato de entrada.
Elige cual operación
externa será ejecutada y
la controla.
Dato de salida.
Tabla. 4.4. Puertos de E/S para la unidad central.
Ambos diseños comparten la misma distribución de puertos de entrada/salida que se
describe en la tabla 4.4. La palabra de control FCNIN define qué procedimiento de cada
dispositivo será ejecutado. Para el FPGA encargado de los escenarios del esquema
criptográfico se obtienen los diagramas de tiempo presentados en la figura 4.10 para cuada
una de las opciones de esta palabra de control.
Fig. 4.10a. Diagrama de tiempo del escenario de registro.
64
Desarrollo y Resultados
Capítulo 4
Fig. 4.10b. Diagrama de tiempo del escenario de encripción.
*Fig. 4.10c. Diagrama de tiempo del escenario de recuperación.
* Datos de entrada en DATINA (pulsos 2 - 15): p, c1, c2, c3, ID1, ID2, ID3, ID4, ID5 , x1, x2, x3, x4, x5
Para estos dos dispositivos se agregó al inicio de cada uno de los procedimientos una etapa
de entrada de datos, y a partir de ahí se ejecuta el procedimiento correspondiente a la
opción seleccionada. La cantidad de ciclos de reloj necesarios en cada uno de los
procedimientos varía de acuerdo a la cantidad de datos entrada necesarios y a las
operaciones matemáticas que en ellos se realicen.
Fig. 4.11a. Diagrama de tiempo de la función polinomio.
65
Capítulo 4
Desarrollo y Resultados
Para la segunda aplicación de este módulo, la de procedimientos matemáticos, se tienen los
diagramas de tiempo de la figura 4.11.
Fig. 4.11b. Diagrama de tiempo de la función Li .
*Fig. 4.11c. Diagrama de tiempo de la función Ei .
Fig. 4.11d. Diagrama de tiempo de la función E.
* Datos de entrada en DATINA (pulsos 2 - 11): p, c1, L1, L2, L3, L4, L5, x1, x2, x3
Al igual que en los dos módulos anteriores, estas dos aplicaciones se llevaron por las fases
que conforman el desarrollo en VHDL. A pesar de esto, no fue posible realizar
66
Desarrollo y Resultados
Capítulo 4
simulaciones debido a que no existe forma de simular dos aplicaciones enlazadas. Sin
embargo, cabe mencionar que para una implementación física, no existirían problemas en la
unidad central debido a que lo que se realiza en ella son procedimientos de entrada y salida
de datos, los cuales han sido probados en MATLAB.
Al final del proceso de desarrollo en VHDL se obtuvo un archivo de tipo “.bit” por cada
una de las aplicaciones que conforman este módulo.
4.4. RESULTADOS DE LA IMPLEMENTACIÓN
La primera aplicación que se desarrolló y se simuló dentro de la fase de implementación
fue una versión preliminar del módulo aritmético de ocho bits, en esta aplicación se
programaron y simularon las 4 operaciones matemáticas básicas dentro de un mismo
FPGA. El hecho de que las funciones básicas en ocho bits pud ieran ser codificadas en
conjunto dentro de un único dispositivo, hizo posible que esta aplicación fuera
implementada físicame nte con lo recursos materiales disponibles. Cuando se diseña un
sistema digital mediante las herramientas de software actuales, se to ma como un hecho
seguro que el sistema funcionará en una implementación física posterior, aunque es posible
que esto no se cumpla en todos los casos. Por este motivo se realizó esta implementación a
manera de etapa de pruebas.
Para realizar las pruebas físicas de esta aplicación se empleó el XCV200. Este FPGA es
mucho más pequeño que el XCV1000 en lo que a recursos se refiere, sin embargo, sus
recursos resultaron suficientes para realizar operaciones matemáticas en ocho bits. Los
puertos de E/S se configuraron de acuerdo a lo realizado en las simulaciones presentadas en
la primera etapa de este capítulo, mientras que para poder visualizar los resultados
obtenidos se acopló un arreglo de LEDS en el puerto de salida.
Los resultados obtenidos de las pruebas físicas concuerdan con los que se obtuvieron de las
simulaciones de esta aplicación, comprobándose que esta aplicación presenta el mismo
comportamiento tanto en las simulaciones como en su operación real. Con estos resultados
se asegura que si se mantiene la misma metodología de programación empleada en los
módulos que conforman la herramienta criptográfica, se obtendrá el resultado esperado
cuando se llegue a realizar la implementación física de todo el criptosistema.
Para desarrollar cualquier sistema digital en VHDL existen dos alternativas de diseño:
secuencial y concurrente. En el diseño secuencial las sentencias son interpretadas en el
orden en el cual ellas aparecen en el código, VHDL sólo permite incluir declaraciones de
este tipo en procesos y subprogramas. Mientras que en un diseño concurrente las sentencias
están agrupadas en bloques o procesos que se ejecutan simultáneamente y que describen el
67
Capítulo 4
Desarrollo y Resultados
diseño completo en términos del comportamiento o de la estructura. De manera más clara,
un diseño secue ncial se diferencía del concurrente en que el primero necesita una señal de
reloj para poder ejecutar cada una de las sentencias externas, mientras que un sistema
concurrente se basa en señales externas asíncronas.
Todas las aplicaciones descritas a lo largo de este capítulo se basan en un diseño secuencial,
por lo que fue necesario acoplarles internamente un contador que se encargara de ejecutar
ordenadamente cada uno de los pasos de los algoritmos implementados sobre cada pulso de
reloj.
El motivo por el que quedaron aplicaciones pendientes de simular (la función x y y las
correspondientes a los escenarios) es que dichas aplicaciones dependen de otras para poder
llegar al resultado que se desea. VHDL no tiene herramientas para poder simular
aplicaciones en conjunto, así que para poder validar su funciona miento estas aplicaciones
fueron probadas mediante simulaciones en MATLAB. Lo que se realizó durante las
pruebas en MATLAB fue programar el módulo matemático de 64 bits completo en
software, con el fin de generar operaciones matemáticas que se realizan durante una corrida
normal del algoritmo de encripción. Al final de esta etapa de pruebas se observó que el
resultado de la codificación y decodificación presenta un ligero margen de error en
comparación a cuando se emplea el formato numérico original de MATLAB. Este pequeño
error se solucionó mediante el redondeo del mensaje recuperado, con lo que se puede
considerar que la herramienta de codificación desarrollada presentará un funcionamiento
adecuado en una implementación física.
Al final de la etapa de implementación descrita en este capítulo se concluye que se
requieren cinco dispositivos XCV1000 para implementar completamente el esquema de
Hsu y Wu de manera física: dos dispositivos para el módulo aritmético (operaciones
básicas y potencia de un número), uno para el módulo de comunicaciones y dos para la
unidad central (escenarios y sus funciones).
El dispositivo seleccionado pertenece a la familia de FPGA´s de Virtex, los cuales pueden
alcanzar frecuencias de operación de hasta 200MHz, aunque la frecuencia máxima
recomendada para operar estos dispositivos es de 66MHz por razones de compatibilidad
(para transferir información a dispositivos externos). Tomando en cuenta esta
consideración, se calculó el tiempo de ejecución de cada uno de los escenarios con base en
el número de ciclos de reloj necesarios para completar su ejecución.
Los resultados obtenidos se muestran en la siguiente tabla:
68
Desarrollo y Resultados
Capítulo 4
Ciclos
134
Tiempo de
Ejecución (ns)
2.03 µs
Encripción
170
2.57 µs
Recuperación
386
5.84 µs
Escenario
Registro
Total:
8.44 µs
Tabla. 4.5. Tiempos de ejecución.
El esquema de encripción y recuperación fue programado para permitir el intercambio de
información segura dentro de un grupo de cinco elementos, para este grupo el flujo de
información puede variar, así como el número de personas dentro de ese grupo que
participan en ella. Estos cambios pueden ocasionar que la duración de los escenarios varíe.
Los tiempos que se presentan en la tabla 4.5 fueron estimados basándose en el peor de los
casos (haciendo referencia solamente a tiempo de ejecución), es decir, cuando los cinco
elementos del grupo participan en la comunicación.
4.5. SUMARIO
En este capítulo se presentan los resultados obtenidos de las simulaciones y los diagramas
de tiempo que definen el funcionamiento de cada una de las aplicaciones programadas en
los FPGAs. Antes de que estas aplicaciones fueran llevadas a través del proceso de
desarrollo en VHDL se implementó físicamente una versión reducida del módulo
aritmético, en la cual se comprobó el correcto funcionamiento de dicho módulo. Para
dichas pruebas se empleó el dispositivo XCV200, mientras que para el desarrollo final de la
herramienta se empleo el XCV1000.
69
Capítulo 4
70
Desarrollo y Resultados
Interfaz Gráfica
Capítulo 5
Capítulo 5
Interfaz gráfica
Como parte complementaria a la herramienta de
hardware, se diseñó y desarrolló el software necesario
para tener un criptosistema completo. Este software fue
desarrollado en JAVA 2 y tiene como objetivo ser una
interfaz gráfica entre el usuario y la tarjeta de
encripción, así como intercambiar información entre la
tarjeta y la computadora.
Fig. 5.1. Descripción de aplicación final.
Una herramienta de encripción de mensajes electrónicos tiene su aplicación en archivos
digitales residentes en un equipo de cómputo. Por lo tanto, es necesario un medio que se
encargue de proporcionar la vía de comunicación entre el usuario final y la tarjeta de
encripción a través de una PC.
Lo que se ha descrito en los capítulos anteriores, es una herramienta de hardware capaz de
codificar y decodificar archivos de software provenientes de una computadora personal. En
este capítulo se presenta una interfaz específica para esta herramienta que permite al
usuario trasladar sus archivos desde el lugar en donde residen a la tarjeta diseñada para ser
codificados. Una interfaz como la que se plantea debe de proporcionar, además de un
medio de comunicación entre las partes de software y hardware del criptosistema, un
entorno amigable para el usuario en donde él sea capaz de manipular todas las
características que presenta el criptosistema.
71
Capítulo 5
Interfaz Gráfica
Para este criptosistema en específico es necesario añadir algunos elementos extras a la
interfaz, los cuales se definieron en la etapa de diseño. El primero de estos elementos es el
escenario de inicialización del esquema de Hsu y Wu, el cual quedó definido para realizarse
mediante el software. El otro elemento que se añadirá a la interfaz de software es la
segunda parte del módulo de comunicaciones del criptosistema, la comunicación entre
computadoras vía puerto serial.
5.1. DISEÑO
Para la realización de la interfaz en software se eligió JAVA 2 como lenguaje de
programación para correr sobre una plataforma Windows (XP, ME, 98, etc.), siguiendo la
metodología de programación conocida como Programación Orientada a Objetos (OOP).
La razón para elegir este lenguaje es que los programas hechos en él pueden correr en
cualquier plataforma [1] (proporcionándole a la herramienta de hardware la versatilidad de
ser implementada en cualquier terminal), además de que JAVA le facilita al desarrollador la
creación de programas amigables para el usua rio mediante el empleo de herramientas GUI.
Por otra parte, la ventaja que se obtiene empleando OOP es que la seguridad propia de los
programas aumenta, ya que en un programa orientado a objetos se utilizan únicamente
variables protegidas.
Como parte inicial del diseño de un sistema de software es necesario analizar todos los
elementos que participaran en el proceso que se desea realizar, tanto externos como
internos, así como la participación que tendrá cada uno de ellos. Esta información se
establece en un diagrama de contexto [3] (figura 5.2).
El proceso de comunicación que se desea establecer comienza cuando una entidad decide
enviar un archivo codificado. En ese momento el individuo se convierte en el firmante,
inicia el esquema de encripción, se inicializan las variables y se entregan las llaves públicas
a cada uno de los firmantes. Con el sistema inicializado el firmante puede ahora seleccionar
cual archivo desea enviar y codificarlo, para después enviarlo a los verificadores que él
seleccione. Por su parte, el verificador recibirá el mensaje codificado y deberá introducir las
llaves públicas y privadas para recuperarlo.
Analizando el diagrama de contexto, la aplicación se puede dividir en tres procesos
principales:
- Encripción
- Recuperación
- Introducción de valores al sistema
72
Interfaz Gráfica
Capítulo 5
Fig. 5.2. Diagrama de contexto del sistema de software.
Fig. 5.3. Diagrama cero del sistema de software.
73
Capítulo 5
Interfaz Gráfica
En la figura 5.3 se pueden observar estos tres procesos y la forma en que interactúan entre
ellos. La OOP esta fundamentada en el empleo de clases y objetos pertenecientes a ellas
para el desarrollo de herramientas de software [2]. Tomando como apoyo el diagrama cero,
se puede establecer a partir de este momento qué clases son necesarias para poder
desarrollar la interfaz de software que se requiere. Las clases que se diseñaron son:
- ArchivosCl. Clase dedicada al manejo de archivos.
- pSerie. Clase dedicada al manejo del puerto serial de la computadora.
- VCompartida. Clase que contiene el esquema de verificación compartida de Hsu y
Wu.
La clase VCompartida es la más compleja de todas, ya que contiene cuatro métodos para
ejecutar cada uno de los escenarios del algoritmo de Hsu y Wu a nivel de software y a nivel
de hardware. Como propósito principal de esta clase se encuentra el ejecutar el escenario de
inicialización e intercambiar datos con la tarjeta de encripción para obtener los resultados
de los otros tres escenarios. Para poder cumplir con una etapa de pruebas del software se
diseñó esta clase de manera que se pueda intercambiar información con la tarjeta o generar
los resultados esperados internamente.
Con estas tres clases se puede completar el proceso de codificación, envío y recuperación
de mensajes de manera interna por el software, pero aún falta una parte primordial: la
interfaz gráfica con el usuario. Para ello, se diseñó una clase que proporcionara un ambiente
gráfico mediante el cual el usuario manipulará las otras tres clases. A esta nueva clase se le
llamó:
- Interfaz9
5.2. DESARROLLO
Un objeto de la clase Interfaz9 es un frame en el cual residen tres paneles, uno por cada
proceso de los que conforman al sistema que se desea desarrollar. El usuario puede
visualizar cualquiera de los tres paneles mediante un menú de pestañas. A cada vista del
frame en la que se visualiza alguno de estos paneles se le denomina ventana.
5.2.1. Panel de Transmisión
Dentro del proceso que conforma la encripción de un archivo se pueden identificar los
siguientes sub-procesos:
74
Interfaz Gráfica
Capítulo 5
- Seleccionar el archivo a codificar
- Encriptar el archivo
- Iniciar el proceso de comunicación con los receptores
- Enviar el archivo
Como ya se ha mencionado, esta interfaz debe de permitirle al usuario ser él quien
manipule las operaciones disponibles en un ambiente amigable. Para cumplir con este
propósito en el proceso de encripción, el software le ofrece al usuario la ventana mostrada
en la figura 5.4.
Fig.5.4. Ventana de transmisión.
La obligación primordial de esta ventana es ejecutar cada uno de los cuatro sub-procesos
arriba mencionados. Es por esto que se le añadió un contenedor de botones (2) con los que
el usuario puede llevar a cabo estos procesos a su conveniencia. Estos botones son:
Abrir. Muestra una ventana en donde se puede seleccionar y abrir el archivo que será
enviado. Este archivo es desplegado en (1).
Encriptar. Codifica el archivo abierto y lo almacena en un archivo temporal.
Iniciar Com. Notifica vía un mensaje a través del puerto serial a todos los verificadores a
los que está dirigido el me nsaje que un archivo será enviado.
Enviar. Una vez recibida la confirmación de los receptores, este botón se activa y está listo
para enviar el mensaje.
75
Capítulo 5
Interfaz Gráfica
Con el botón de Abrir entra en funcionamiento otra característica de esta ventana, el panel
(1). Este panel es un área destinada a los archivos que son seleccionados para su envío, y
consta de una etiqueta en dónde se puede consultar el nombre del archivo que esté se haya
seleccionado para ser enviado, además de un recuadro en donde éste archivo se puede
visualizar. Los archivos que se pueden desple gar en este recuadro son de texto y de
imágenes.
Otro panel que se añadió a esta primera ventana es el panel de confirmación (3), el cual está
compuesto por cinco radio botones que representan a cada uno de los elementos dentro del
sistema de comunicaciones. Estos botones se muestran seleccionados al momento de iniciar
la comunicación, dependiendo de los elementos a los que se les desea enviar el mensaje
codificado, regresando a su estado inactivo original cuando se confirma que han aceptado el
mensaje.
Finalmente, se desarrolló un panel que le muestra al usuario el estado del proceso de
encripción. Para esta tarea se incrustó el panel de visualización de mensajes (4), en el cual
se despliegan las siguientes etiquetas dependiendo del status en el que esté el proceso:
- Sistema iniciado…
- Archivo abierto.
- Archivo encriptado.
- Archivo enviado.
5.2.2. Panel de Recepción
En comparación con la sección anterior, el proceso de recuperación de mensajes esta
conformado de un menor número de sub-procesos. En este caso sólo se tienen dos:
- Aceptar los mensajes
- Decriptar los mensajes
La ventana dedicada a estas dos tareas es la que se muestra en la figura 5.5.
El medio con el que cuenta el usuario para interactuar con la ventana de recepción es el
empleo de un par de botones colocados en un contenedor dedicado a esa tarea (2). Esos dos
botones son:
Aceptar Tx. Envía un mensaje al transmisor para informarle que acepta la transmisión.
Este botón aparece inactivo en el contenedor hasta el momento en que el software
recibe la notificación de que la terminal en la que se enc uentra instalado ha sido
solicitada como receptor. Una vez que el mensaje de confirmación ha sido enviado a
través del puerto serial el botón vuelve a quedar en estado inactivo.
76
Interfaz Gráfica
Capítulo 5
Fig. 5.5. Ventana de recepción.
Decriptar. Decodifica el mensaje recibido y lo guarda en al archivo especificado como
destino. Este botón permanece inactivo mientras no haya ningún mensaje recibido.
Cuando un mensaje codificado llega a una terminal es almacenado en un archivo temporal
y desplegado en el panel destinado para los mensajes recibidos (2).
5.2.3. Panel de Opciones
Para el último proceso se diseñó una ventana que le permitiera al usuario no sólo manipular
las opciones del esquema de encripción como se tenía previsto, sino también que le
permitiera seleccionar cual será el archivo temporal en donde se almacenará el mensaje
codific ado y el nombre que tendrá el archivo que contenga el mensaje recuperado.
El primer elemento que aparece dentro de la ventana de la figura 5.6 es el panel de destino,
en el cual el firmante tiene la posibilidad de escoger a cuales verificadores les enviará el
mensaje especificado. Representando cada uno de los verificadores se colocaron cuatro
cajas de selección. El siguiente panel tiene dos propósitos, generar nuevos valores para los
números generadores en el caso de que el usuario sea el firmante; para el caso de que el
usuario sea algún verificador este panel se emplea para introducir el valor de las claves
necesarias para la recup eración del mensaje.
77
Capítulo 5
Interfaz Gráfica
Por último se encuentra el panel de archivos en la parte inferior de esta ventana, en el cual
se define el nombre que tendrá el archivo recuperado y el archivo que se empleará para
almacenar temporalmente el mensaje codificado.
Fig. 5.6. Ventana de opciones.
5.3. RESULTADOS
Debido a que la tarjeta de encripción sólo se llevó hasta su etapa de simulación fue
necesario hacer algunos ajustes al software para realizar pruebas a su funcionamiento.
Como ya se comentó brevemente, la ejecución de los escenarios del esquema de encripción
a nivel de software presentó algunas modificaciones. Originalmente el software sólo se
encargaría de realizar el primero de los cuatro escenarios, esperando obtener el resultado de
los otros tres de la tarjeta mediante el puerto paralelo. Con las modificaciones que se
hicieron, el software es capaz ejecutar los cuatro escenarios y de obtener por sí mismo
todos los resultados necesarios para completar la ejecución del esquema de encripción.
Para el software se generaron dos tipos de pruebas, la primera tenía como objetivo el
mostrar el funcio namiento del sistema en un ambiente que incluyera un firmante y a los
cuatro verificadores, mientras que en la segunda se mostró el sistema en funcionando en
dos equipos.
Con el objetivo de presentar el criptosistema funcionando con cuatro verificadores, se
ajustó la herramienta de software para que fuera capaz de simular en una misma PC la
78
Interfaz Gráfica
Capítulo 5
existencia de los 5 elementos dentro del sistema de comunicaciones establecido. Esta
alteración se hizo debido a los recursos insuficientes para poder establecer por completo un
sistema de comunicaciones compatible con este criptosistema, ya que esta prueba requiere
de cinco equipos de cómputo interconectados entre sí, pero únicamente se contó con uno
para probar el funcionamiento del software. Es por esto que la ventana de recepción se
modificó añadiéndole tres botones extra, mediante los cuales un solo usuario puede simular
que el resto de los verificadores ha aceptado recibir el mensaje. Por otra parte, la clase
dedicada al manejo del puerto serial también sufrió una el ve modificación para llevar a
cabo esta prueba. Esta modificación consistió en compartir el puerto serial de un PC en 2
interfaces diferentes, con lo cual la procedencia de los datos que entraban y salían por el
mismo puerto podía ser determinada. Esta entrada y salida de datos se realizó de manera
física mediante un corto circuito en las terminales de entrada y salida del puerto serial de la
PC.
Para la segunda etapa de pruebas se instaló el sistema desarrollado en dos PC’s diferentes,
interconectadas entre sí mediante el puerto serial. En este caso, la configuración del sistema
de comunicaciones quedó reducida a dos elementos, los cuales podían enviar y recibir
mensajes codificados, es decir, ambos podían tomar el papel de verificador o firmante
indistintamente.
El desarrollo de las dos etapas de pruebas consistió en enviar diferentes archivos a todos los
verificadores empleando todas las combinaciones posibles de números primos generadores,
obteniendo en todos los casos el mensaje original en el verificador. Estas pruebas al
software se emplearon teniendo como plataforma Windows 98, 2000, ME y XP, y para el
envío de datos se varío la velocidad de transmisión del puerto serial, utilizando un rango
entre 1200bps y 9200bps.
5.4. SUMARIO
En este capítulo se presenta el desarrollo de una interfaz gráfica especializada para la
herramienta de encripción elaborada en los capítulos anteriores. Esta interfaz fue
programada en JAVA 2, diseñada para poder funcionar sobre cualquier plataforma
Windows. La metodología de programación empleada fue la programación orientada a
objetos con el fin de aprovechar las ventajas que presenta, tales como encapsulamiento,
protección de variables, etc. Se creó una clase para el algoritmo de encripción, la cual
emula mediante software el funcionamiento de la tarjeta de encripción.
79
Capítulo 5
Interfaz Gráfica
5.5. REFERENCIAS
[1]
Ceballos, Javier: "Java 2 ", Alfaomega, México 1993.
[2]
Deitel, H. M; Deitel, P. J: “Como Programar en Java ”, 2ª Edición, Pearson
Educación, México 1998.
Kendall, Kenneth; Kendall, Julie: “Análisis y Diseño de Sistemas”, 3ª Edición,
Prentice Hall, México 1997.
[3]
80
Conclusiones
Capítulo 6
Capítulo 6
Conclusiones
6.1. RESULTADOS
Los resultados de este trabajo se pueden dividir en tres etapas: simulación del esquema a
nivel de software, implementación del algoritmo en VHDL e interfaz gráfica.
La simulación en software del esquema se desarrolló por completo en MATLAB,
empleando un formato numérico de 64 bits con punto flotante para una primera versión del
algoritmo. Esta primera versión que simulada tuvo como objetivo validar el esquema de
Hsu y Wu, y en ella se implementaron por completo los cuatro escenarios que conforman el
algoritmo:
- Inicialización
- Registro
- Encripción
- Recuperación del mensaje
Mensaje:
12
Firma:
(0.5, 1)
Texto cifrado: (4, 0.125, 1)
….
Mensaje recuperado:
12.0
Tabla 6.1. Corrida de simulación.
La tabla 6.1 muestra el resultado de la simulación en la encripción específica de un mensaje
(12). El código de este programa se enc uentra anexo en un CD.
De la implementación en VHDL del algoritmo, se obtuvieron como resultado cinco
archivos tipo “bit” que contienen el código a nivel de bits necesario para implementar el
esquema de Hsu y Wu en cinco FPGAs (XCV1000). Cada uno de estos dispositivos
contiene lo siguiente:
81
Capítulo 6
Conclusiones
- Módulo aritmético (operaciones básicas).
- Módulo aritmético (función x y).
- Módulo de comunicaciones.
- Unidad central (escenarios).
- Unidad central (funciones auxiliares para escenarios).
Para poder llegar a cada uno de los archivos “bit”, se siguieron los pasos que conforman el
proceso de desarrollo de sistemas en VHDL:
- Síntesis.
- Implementación de diseño.
- Generación de archivos de programa y programación del dispositivo.
En cada caso se elaboró un diseño previo que permitiera fraccionar los escenarios del
algoritmo de encripción en bloques lógicos que se amoldaran a las características de un
XCV1000. De los 4 escenarios que conforman el esquema sólo tres de ellos fueron
implementados en VHDL (el primero será ejecutado únicamente a nivel de software), y en
la tabla 62 se muestran sus tiempos de ejecución trabajando los dispositivos a 66Mhz:
Ciclos
134
Tiempo de
Ejecución (ns)
2.03 µs
Encripción
170
2.57 µs
Recuperación
386
5.84 µs
Escenario
Registro
Total:
8.44 µs
Tabla. 6.2. Tiempos de ejecución.
Finalmente, como resultado también se entrega un programa de software que tiene como
finalidad servir de interfaz gráfica entre el usuario (firmante o verificador) y la herramienta
de encripción. Este software fue elaborado en JAVA 2, empleando programación orientada
a objetos para su desarrollo. Las clases que conforman este software son:
- ArchivosCl. Manejo de archivos.
- pSerie. Manejo del puerto serie.
- VCompartida. Implementación del esquema de encripción.
- interfaz10. Ventana de presentación.
En particular, la versión de este software que se diseñó para la etapa de pruebas incluye
ciertas características adicionales. Una de ellas es la posibilidad de poder simular la
82
Conclusiones
Capítulo 6
comunicación dentro del sistema completo de comunicación (un firmante y cuatro
verificadores) en un solo nodo. Además, el software cuenta con una implementación del
esquema de Hsu y Wu para poder ser ejecutado sin necesidad de tener la tarjeta de
encripción conectada.
6.2. APORTACIÓN DEL TRABAJO
El objetivo central al realizar este trabajo de tesis fue tomar un esquema de codificación de
datos de desempeño comprobado y emplearlo como base para el diseño y desarrollo de una
herramienta criptográfica. El desarrollo de esta herramienta se realizó en VHDL, teniendo
como logro el generar los archivos necesarios para poder realizar a futuro una
implementación física del criptosistema en un dispositivo FPGA.
Los FPGA´s son dispositivos que han presentado un gran desarrollo en la actualidad, lo
cual se vio reflejado en el criptosistema que se desarrolló. En un principio, el diseño se
llevó a cabo tomando como base un dispositivo de la serie XCV300, el cual presentaba el
mayor número de compuertas lógicas (322,970) disponibles en ese momento. Al completar
la fase de desarrollo, la herramienta de encripción estaba lista para implementarse
físicamente en 13 dispositivos, cantidad demasiada elevada. Para este momento, se hicieron
las actualizaciones correspondientes al software de desarrollo en VHDL, obteniendo así la
capacidad de programar los dispositivos más actuales, de la familia XCV1000. La cantidad
de compuertas que este dispositivo maneja es de 1,124,022.
Teniendo como base este nuevo dispositivo se rediseñó la herramienta propuesta, con lo
que se redujo la cantidad de dispositivos necesarios a sólo cinco. La aplicación en conjunto
que cada uno de estos cinco FPGA’s realiza, le permite a un grupo de 5 elementos
intercambiar información entre sí de manera segura y confiable empleando el esquema de
verificación compartida de Hsu y Wu. Las pruebas que se le realizaron a la herramienta
desarrollada se efectuaron teniendo como apoyo principal dos recursos comp utacionales:
MATLAB y simulaciones VHDL.
Por falta de recursos en la etapa de una implementación física de la herramienta, se tomó la
determinación de cumplir con una etapa de pruebas físicas en una sola fracción de la
herramienta criptográfica antes de pasar a la fase de simulaciones. Para ello se diseñó un
módulo aritmético de ocho bits, el cual se acopla perfectamente a los recursos que presenta
un FPGA de la familia XCV200, dispositivo que se encuentra disponible en este centro.
Las pruebas consistieron en configurar el FPGA con dos buses de entrada y uno de salida
de ocho bits cada uno, de tal forma que manualmente su pudieran introducir los operandos
83
Capítulo 6
Conclusiones
deseados a esta versión preliminar del módulo aritmético; mientras que para seleccionar la
operación a realizar se configuró un bus de entrada de 3 bits. Las operaciones que se
realizaron con este módulo emplearon operandos aleatorios, obteniendo en cada una de
ellas el resultado correcto. La validez de los resultados obtenidos se comprobó mediante la
obtención de los resultados de forma manual, observándose que un FPGA es capaz de
realizar operaciones aritméticas con diversos grados de precisión. En este caso, tratándose
de un módulo reducido (8 bits), la exactitud del resultado está condicionada a 3 bits en la
parte fraccionaria, sin embargo, los procedimientos matemáticos se cumple n
satisfactoriamente el 100% de las ocasiones en las que se realizan, con lo cual se asegura
que al trasladar el módulo aritmético a su versión original de 64 bits éste va a proporcionar
la precisión requerida (la que se observó en las pruebas realizadas en MATLAB al
algoritmo de encripción). Por último, en estas pruebas se mantuvo el tiempo de
procesamiento mostrado en las simulaciones, el cual es equivalente a 1 ciclo de reloj (100ns
con la tarjeta empleada).
Con el avance que han tenido los HDL’s, no es necesario realizar una implementación
física de los diseños para corroborar su funcionamiento. Por lo tanto, como parte inicial de
las pruebas se simularon los módulos aritmético y de comunicaciones mediante las
herramientas proporcionadas por VHDL. Con estas simulaciones, se validaron los
algoritmos matemáticos en los que se fundamenta el esquema de Hsu y Wu mediante la
realización de operaciones representativas de las que se pueden presentar durante la
encripción o decripción de mensajes. Por otra parte, los procesos de entrada y salida de
datos de la unidad central se validaron mediante programas dedicados desarrollados en
MATLAB (ver anexo).
De los cinco FPGA’s resultantes, sólo dos de ellos realizan su funcionamiento de manera
independiente, sin necesidad de interconexión con alguno de los otros dispositivos. Estos
dos dispositivos fueron los que se validaron completamente dentro del entorno del lenguaje
descriptor de hardware, en otras palabras, se compararon los resultados experimentales de
la simulación del algoritmo en MATLAB con los resultados de las simulaciones generadas
en VHDL para estos dispositivos. Para la verificación de los dispositivos restantes, sus
algoritmos fueron trasladados a MATLAB para una comprobación de su correcto
funcionamiento. Con esta verificación en VHDL se asegura que se cuenta con una
implementación del algoritmo de encripción de Hsu y Wu en VHDL, con lo que se cuenta
con una herramienta de hardware capaz de codificar mensajes y enviarlos dentro de un
grupo de cinco participantes.
Los resultados obtenidos de estas simulaciones muestran de manera fiel cual será el
comportamiento de las aplicaciones diseñadas y los posibles errores que se pudieran
84
Conclusiones
Capítulo 6
presentar en caso de no realizar una selección correcta de los números generadores. Es por
estos resultados, que se determinó que la herramienta desarrollada cumple
satisfactoriamente con su propósito de codificar y decodificar mensajes electrónicos.
Otra aportación obtenida de estas simulaciones, fue la detección de pequeños huecos en la
descripción del algoritmo de Hsu y Wu. Aunque en su descripción este algoritmo define la
forma matemática de generar los parámetros necesarios para la encripción y recuperación
de mensajes, se encontró que existen ocasiones en la que estas definiciones matemáticas
producen parámetros que conducen a una recuperación incorrecta. Por lo tanto, de estas
simulaciones se obtuvo la tabla 6.3 que define los valores válidos para estos parámetros:
p
19
31
q
2
g
1, 3, 4, 5
XA
1
XG
1, 2, 4
3
2, 3, 4, 5, 6, 9, 10,
13, 14, 15, 16
3, 6, 11, 12, 13
1
1, 3, 5, 7, 9, 11
1
3, 5, 6, 7, 9, 10, 11,
12, 13, 14, 17, 18,
19, 20, 21, 22, 24,
25, 26, 28
1
1, 2, 3, 4, 5, 6, 7, 8,
9, 10
1, 2, 3, 4, 5, 6, 7, 8,
9, 10
2
3
Tabla 6.3. Posibles variables dentro del esquema de encripción.
Para poder implementar esta herramienta codificadora se estableció un formato numérico
ajeno a las características limitadas de VHDL para manejo de números, el cual sirvió de
base para trabajar dentro del módulo matemático. Para definir el formato adecuado se partió
del formato que emplea MATLAB (64 bits de punto flotante), para generar un formato
propio de 64 bits de punto fijo. El empleo de un formato de punto fijo causa que exista una
reducción de la precisión de las operaciones matemáticas con respecto a las pruebas hechas
al esquema en software. Para resolver este problema se aplicó una etapa de rendondeo
numérico al mensaje recuperado, con lo cual se obtiene un dato correcto al momento de
descifrar el mensaje. Esta etapa se añadió al software de computadora que sirve como
interfaz entre el usuario y esta tarjeta criptográfica.
Con la presentación de esta herramienta de cifrado, se está proporcionando una alternativa
más para combatir el problema de inseguridad en las comunicaciones electrónicas. Una
ventaja que se presenta en este criptosistema, que lo convierte en una alternativa viable, es
el empleo un esquema de codificación robusto, es decir, ofrece un nivel alto de seguridad
en lo que a dificultad de quebrantarlo y velocidad de encripción se refiere; características
que han sido analizadas en trabajos previos [2].
85
Capítulo 6
Conclusiones
En lo que se refiere a la velocidad de encripción, el esquema propuesto por Hsu y Wu se
puede comparar con el esquema de Harn, el cual también es un esquema de verificación
compartida. Siendo TE, TM y TI los tiempos requeridos para calcular la exponenciación
modular, multiplicación e inversa respectivamente, se considera que el tiempo requerido
por el algoritmo empleado en esta tesis requiere el siguiente tiempo para encripción [3]:
3 · (TE + TM)
(6.1)
mientras que para el algoritmo de Harn se requiere:
(2t + 3) · TE + t · TM (t + 1) · TI
(6.2)
Como se observa en estas ecuaciones, el tiempo empleado por el algoritmo de Harn para
encriptar un mensaje es dependie nte del número de verificadores (t ), caso contrario al
esquema de Hsu y Wu. Esto representa la gran ventaja que posee este algoritmo con
respecto a otros de verificación compartida en cuanto a velocidad de encripción.
El anterior análisis se hace únicamente al algoritmo empleado. Para hacer un análisis
similar a la tarjeta desarrollada es necesario compararla con alguna aplicación existente que
implemente el mismo esquema. Debido a la falta de una aplicación que presente esta
característica se buscaron trabajos que tuvieran otra característica en común, la cual pudiera
servir como punto de comparación entre ellos. En la tabla 6.4 comparativa que presenta tres
aplicaciones codificadoras desarrolladas en FPGA’s [1, 4, 5].
Criptosistema [1]
Algoritmo
DES
Dispositivos
1 XCV4000
Longitud de
Datos
64 bits
Velocidad
26.7 Mbps
Criptosistema [4]
DES
1 XCV4000
64 bits
60 Mbps
Criptosistema [5]
DES
3 XCV3000
64 bits
27.7 Mbps
Hsu y Wu
5 XCV1000
64 bits
3.11 Mbps
Criptosistema
aquí presentado
Tabla. 6.4. Comparación de tarjetas de encripción.
Lo primero que se observa en esta tabla es la diferencia entre los algoritmos de encripción
empleados en cada sistema. Los tres primeros trabajos implementan un algoritmo básico de
clave privada, mientras que en esta tesis se implementó un algoritmo más complejo
(verificación compartida). A pesar de esto, los recursos empleados en todos los casos son
muy parecidos. Para los tres primeros trabajos de la tabla se emplearon FPGA’s de la
familia XCV3000 o superior, pudiendo generarse una aplicación de un solo dispositivo.
Para este trabajo, debido a los recursos computacionales disponibles, el dispositivo que se
86
Conclusiones
Capítulo 6
utilizó fue el XCV1000 obteniéndose una aplicación de cinco dispositivos. La razón para
afirmar que los recursos empleados son parecidos es que el número de celdas lógicas que
hay en un dispositivo de la familia XCV4000 (4M) es muy cercano al empleado en una
aplicación de 5 dispositivos XCV1000 (5M). Finalmente, la última diferencia que se
observa es la velocidad de encripción. Esta diferencia es desfavorable en la aplicación
desarrollada en este trabajo debido única y exclusivamente a la mayor complejidad que
presenta este algoritmo de verificación compartida. Esta complejidad se refleja en una
mayor seguridad en las transmisiones de datos que empleen el esquema analizado en esta
tesis, característica que compensa la diferencia existente en la velocidad de encripción entre
el sistema aquí presentado y los ya existentes.
Una ventaja que presenta la herramienta codificadora desarrollada con respecto a las que se
encuentran ya existentes en el mercado es el precio. El costo aproximado de los
dispositivos FPGA empleados es de US$120, tomando en consideración que para
implementar de manera física el cripotosistema se necesitan cinco circuitos integrados
como estos, y algunos otros dispositivos extras (conectores, buffers, etc.), la herramienta
que se presentó en esta tesis tiene un costo aproximado de US$700. Los productos similares
existentes en el mercado (Lucent Accesspoint Encrypt MOD y Codecmicro 3com encrypt,
[6, 7]), que más se le acercan a este precio tienen un valor que oscila entre los US$2000 y
US$9000. Lo cual, le da una ventaja considerable a la herramienta que aquí se presentó.
Una vez que se terminó el desarrollo de la herramienta de codificación de datos en su parte
de hardware, ésta aun resultaba incompleta comparada con los criptosistema s comerciales
debido a que no contaba con ninguna interfaz mediante la cual se pudieran introducir los
mensajes a cifrar provenientes de una PC. Por este motivo se decidió llevar a cabo una
interfaz de software básica que le permitiera a cualquier usuario poder manipular una
herramienta de hardware como la que se diseñó durante esta tesis para codificar datos y
enviarlo s. Como resultado de esto, el trabajo final es capaz de intercambiar información
entre una tarjeta de codificación y la computadora personal en la que resida, así como de
mandar y recibir datos codificados entre dos o más PC’s. Se decidió añadir esta etapa a la
herramienta de encripción con la finalidad de contar con una herramienta completa, en lo
que a capacidad de funcio namiento se refiere, robusteciendo el criptosistema.
6.3. CONCLUSIONES
El primer punto relevante dentro de las conclusiones es el cotejar los resultados obtenidos
con los avances propuestos al inicio de este trabajo. A consideración personal, se
cumplieron con las expectativas generadas con la presentación de la tesis, ya que se diseñó
87
Capítulo 6
Conclusiones
y simuló satisfactoriamente un sistema de encripción cuya aceptación y confiabilidad está
comprobada. Pero es necesario comentar que aún cuando esto sucedió, hubo un punto
dentro de los alcances esperados que no se abarcó: la construcción de una tarjeta que fuera
capaz de emular las funciones de entrada y salida de datos del criptosistema. La razón por
la que se dejó este punto de lado fue porque se encontraron algunos puntos dentro del
esquema de encripción de Hsu y Wu que no habían sido aclarados en trabajos previos (tabla
6.3), por lo cual se dedicó una mayor cantidad de tiempo de la planeada al análisis y
validación del algoritmo, quedando de lado la tarea de la generación de dicha tarjeta
emuladora.
Otro aspecto importante para comentar de este trabajo de tesis es la tecnología empleada.
Hoy en día, existen herramientas que nos permiten diseñar y desarrollar sistemas digitales
sin requerir nada más que una computadora. Por una parte tenemos las herramientas de
hardware, cuya principal ventaja es que nos permiten programar y configurar dispositivos
acorde a las necesidades del usuario. Mientras que por otra parte se encue ntran el software.
Estas herramientas de software proporcionan varias opciones de programación (modelos
esquemáticos, sentencias, etc.), lo que ofrece una gran variedad de opciones de desarrollo al
programador. Pero su principal ventaja es que hoy en día se pueden simular los diseños
realizados antes de bajarlos a alguna plataforma física. Esto trae consigo ventajas como la
de no requerir una gran cantidad de equipo en la etapa de diseño, así como el eficiente
empleo de los recursos disponibles.
Durante el desarrollo de esta tesis se experimentaron las ventajas que trae consigo el
empleo de nueva tecnología en el desarrollo de sistemas digitales, en específico, la
programación en VHDL. La utilización de este lenguaje permitió desarrollar y simular la
herramienta criptográfica completa de manera eficiente, lo cual se comprobó en la etapa de
pruebas físicas a la versión reducida del módulo aritmético, en donde se observó un
comportamiento idéntico al obtenido en las simulaciones.
Como conclusión final es necesario hacer algunos comentarios acerca de los esquemas de
encripción. En la actualidad existen demasiados algoritmos matemáticos dedicados a
brindar seguridad a los sistemas de comunicaciones electrónicos con diferentes
características. Estas características dictaminan las aplicaciones en las que cada esquema
puede mostrarse como una solución adecuada. Para efectos de esta tesis se eligió el
algoritmo de Hsu y Wu y se diseño una aplicación específica en la cual pudiera mostrarse
como la solución adecuada (un sistema de comunicaciones con cinco terminales que
pueden enviar y recibir datos indistintamente, aplicable en un conjunto de oficinas
convencional). En este caso, el esquema de verificación compartida cumple con las
expectativas generadas, pero es posible que no sea la solución ideal para todas las
88
Conclusiones
Capítulo 6
aplicaciones (por ejemplo, aplicaciones en donde la velocidad de encripción sea
primordial), por lo que antes de diseñar una herramienta de codificación lo más importante
es establecer cual es el algoritmo de encripción que más se adapta a la aplicación.
6.4. TRABAJOS FUTUROS
El primer aspecto que se puede mejorar de la herramienta desarrollada en un trabajo a
futuro es la precisión numérica en los procesos de codificación y recuperación. Para
conseguir este propósito existen dos caminos a seguir. La primera alternativa que se debe
de aplicar para aumentar la precisión en las operaciones aritméticas es aplicar un formato
numérico de punto flotante. La recomendación que se hace es un formato de 64 bits, 53 bits
para la mantisa y 11 para el exponente de dos.
La segunda alternativa para conseguir una mejor precisión matemática es la de aplicar
teoremas matemáticos complejos para el manejo de números grandes. El criptosistema
presentado en este trabajo presenta la característica de codificar por cada mensaje dos
números de cuatro bits, en lugar de uno de ocho. Esta característica se estableció debido al
problema que representa el manipular nú meros primos generadores mayores a 256. El
dividir el mensaje en dos ocasiona que la velocidad de encripción y decripción se reduzca a
la mitad al tener que codificar el doble de mensajes, además de que al transmitir un mayor
número de mensajes el tiempo empleado en el envío de datos aumenta considerablemente.
Con el empleo de números más grandes a los actuales (al menos 128 bits), no sólo se
tendría una mejoría en la seguridad brindada por esta herramienta, también se aumentaría la
velocidad del criptosistema al doble de la actual. Por lo tanto, en un trabajo futuro se
tendrían que añadir al módulo aritmético teoremas y procedimientos que permitan el
manejo de números grandes, los cuales representarían un desarrollo importante a este
trabajo.
Otro aspecto del trabajo desarrollado en esta tesis que se puede mejorar es el área a la que
se aplique. Durante este trabajo se diseñó y desarrolló un criptosistema completo que está
listo para llevarse a una tarjeta física e instalarse dentro de un sistema de comunicación
específico (cinco elementos participando en el intercambio de información). Pero habrá
ocasiones en las que se desee implementar el criptosistema en un sistema de
comunicaciones ya establecido y que cuente con su propio estándar para intercambio de
información (diferente al RS232). En un caso como éste, se deberá realizar una etapa de
ajuste o acoplamiento al estándar de comunicaciones en cuestión. Esta etapa de ajuste
consistirá en la mayoría de los casos en emplear un protocolo de comunicaciones más
robusto. Por tal motivo, para no realizar modificaciones al criptositema en cada aplicación,
89
Capítulo 6
Conclusiones
una buena mejoría a este criptosistema se obtiene implementándolo en un ambiente de
trabajo estandarizado.
6.5. REFERENCIAS
[1]
Dawson, E; Wark, M; Wong, K: "A single-chip FPGA implementation of the data
encryption standard (DES) algorithm", Global Telecommunications Conference,
1998. GLOBECOM 98. The Bridge to Global Integration. IEEE, Volume: 2, 8-12
Nov. 1998 Pages: 827 - 832 vol. 2.
[2]
Hernández, Hector: “Esquema de Encripción Autentificado Empleando Verificación
Compartida”, Tesis de Maestría, CENIDET, Cuernavaca, 2001.
[3]
HSU C.L, WU T.C: "Authenticated encryption scheme with (t,n) shared
verification", IEE Proceedings, 117-121 January 1998.
[4]
Millan, W; Wong, K; Wark, M; Dawson, E: "A single-chip FPGA implement ation
of self-synchronous cipher", Proceedings of TENCO’ 97, IEEE, December 1997.
[5]
Tse, K. W; Dawson, E; Wark, M; Wong, K: "Implementation of the data
encryption standard (DES) algorithm with FPGA’s", Proceedings of the 1993
International Workshop on field programmable logic and applications, Oxford,
England, pp 412-419, September 1993.
[6]
3com Encrypt [en línea] [Fecha de consulta: Enero 2003], disponible en:
<http://www.calibex.com/serv/calibex1/buyer/outpdir.jsp?nxtg=1a347b_E274EE3248
1AAE3E&doSearch=y&template=may10kw&search=3com+encrypt>
[7]
Lucent Accesspoint Encrypt MOD 300299526 [en línea] [Fecha de consulta: Enero
2003], disponible en:
<http://www.nextag.com/Lucent_ACCESSPOINT_ENCRYPT_MOD~3038102z0znz
zz1zzzmainz2-htm>
90
Conclusiones
Capítulo 6
91
Capítulo 6
92
Conclusiones
Lista de referencias
Lista de Referencias
[1]
Adleman, L; Rivest, R: “The use of public key cryptography in communication system design”, Communications Magazine, IEEE, Vol. 16, Issue: 6, Nov 1978, Pages:
20 – 23
[2]
Armstrong, James; Gray, Gail: “VHDL Desing Representation and Syntehesis”, 2nd
Edition, Prentice Hall, N.J. 2000.
[3]
Brey, Barry: “The Advanced Intel Microprocessors”, Macmillan, USA 2000.
[4]
Ceballos, Javier: "Java 2 ", Alfaomega, México 1993.
[5]
Dawson, E; Wark, M; Wong, K: "A single-chip FPGA implementation of the data
encryption standard (DES) algorithm", Global Telecommunications Conference,
1998. GLOBECOM 98. The Bridge to Global Integration. IEEE, Volume: 2, 8-12
Nov. 1998 Pages: 827 - 832 vol. 2.
[6]
Deitel, H. M; Deitel, P. J: “Como Programar en Java ”, 2ª Edición, Pearson Educación, México 1998.
[7]
Hernández, Hector; “Criptografía de Verificación Compartida”, ELECTRO 2001
[8]
Hernández, Hector: “Esquema de Encripción Autentificado Empleando Verificación
Compartida”, Tesis de Maestría, CENIDET, Cuernavaca, 2001.
[9]
HSU C.L, WU T.C: "Authenticated encryption scheme with (t,n) shared verification", IEE Proceedings, 117-121 January 1998.
[10] Kendall, Kenneth; Kendall, Julie: “Análisis y Diseño de Sistemas”, 3ª Edición,
Prentice Hall, México 1997.
93
Lista de referencias
[11] Lidl, Rudolf; Pilz, Günter: “Applied Abstract Algebra”, 2nd Edition, Springer, N.Y.
1998.
[12] Lopez, J; Ortega, J.J; Troya, J.M; Vivas, J: “High- level specification of security
systems”, Global Telecommunications Conference, 2003. GLOBECOM '03. IEEE ,
Volume: 3, 1-5 Dec. 2003, Pages:1506 – 1510.
[13] Mano, Morris: “Arquitectura de Computadoras”, Prentice Hall, México 1983.
[14] Marchand, Patrick: “Graphics and GUI’s with MATLAB”, 2nd Edition, CRC Press,
N.Y. 1999.
[15] Menezes, Alfred; VanOorshot, Paul; Vanstone, Scott: “Handbook of Applied
Cryptography”, CRC Press, ISBN 0-8493-8523-7., Boca Ratón, Florida, 1996.
[16] Millan, W; Wong, K; Wark, M; Dawson, E: "A single-chip FPGA implement ation
of self-synchronous cipher", Proceedings of TENCO’ 97, IEEE, December 1997.
[17] Mompin, José: “Interconexión de Periféricos a Microcontroladores”, Marcombo,
México 1983.
[18] Phanthavong, Douang: “Re-timing for Performa nce Improvement in FPGA Designs”, Mentor Graphics, April 2003.
[19] Schne ier, Bruce: “Applied Cryptography”, 2nd Edition, John Wiley & Sons, N.Y.
1996.
[20] Sjoholm, Stefan; Lindh, Lennart: “VHDL for Designers”, Prentice Hall Europe,
1997.
[21] Swookowski, Earl: “Cálculo con Geometría Analítica”, 2ª Edición, Iberoamérica,
México 1988.
[22] Tanenbaum, Andrew: “Organización de Computadoras, un Enfoque Estructurado”,
Prentice Hall, México 1992.
[23] Tanenbaum, Andrew: “Redes de Computadoras”, 3rd Edition, Pearson, México
1997.
94
Lista de referencias
[24] Tse, K. W; Dawson, E; Wark, M; Wong, K: "Implementation of the data encryption standard (DES) algorithm with FPGA’s", Proceedings of the 1993 International
Workshop on field programmable logic and applications, Oxford, England, pp 412419, September 1993.
[25] Voydock, V; Kent, S: “Security in high- level network protocols”, Communications
Magazine IEEE, Volume: 23, Issue: 7, July 1985, Pages: 12 – 24
[26] Yalamanchili, Sudhakar: “Introductory VHDL from Simulation to Synthesis”, Prentice Hall, N.J. 2001.
[27] 3com Encrypt [en línea] [Fecha de consulta: Enero 2003], disponible en:
<http://www.calibex.com/serv/calibex1/buyer/outpdir.jsp?nxtg=1a347b_E274EE3248
1AAE3E&doSearch=y&template=may10kw&search=3com+encrypt>
[28] Apuntes Electrónica: Criptografía [en línea] [Fecha de consulta: Octubre 2002], disponible en: <http://www.infoapuntes.com.ar/Apuntes/criptografia.htm>
[29] Apuntes Electrónica: Criptografía [en línea] [Fecha de consulta: Octubre 2002], disponible en: <http://www.infoapuntes.com.ar/Apuntes/criptografia2.htm>
[30] DELTA Microelectronics [en línea] [Fecha de consulta: Noviembre 2002], disponible
en: <http://www.asic.dk/>
[31] Field Programmable Gate Arrays [en ílnea] [Fecha de consulta: Noviembre 2002],
disponible en: <http://www.ece.msstate.edu/~reese/EE4743/impltech/fpga.htm>
[32] EETIMES [en línea] [Fecha de consulta: Diciembre 2002], disponible en:
<http://www.eetimes.com/story/OEG20011214S0038>
[33] INEI: Metodologías Informáticas - Seguridad en Internet [en línea] [Fecha de consulta: Octubre 2002], disponible en:
<http://www.inei. gob.pe/biblioineipub/bancopub/Inf/Lib5010/indice.htm>
[34] Las Redes Informáticas [en línea] [Fecha de consulta: Mayo 2003], disponible en:
<http://www.mercadomercedino.com.ar/Lasredes.htm>
[35] Lucent Accesspoint Encrypt MOD 300299526 [en línea] [Fecha de consulta: Enero
2003], disponible en:
<http://www.nextag.com/Lucent_ACCESSPOINT_ENCRYPT_MOD~3038102z0znz
zz1zzzmainz2-htm>
95
Lista de referencias
[36] MicroUnity: Software Defined Broadband [en línea] [Fecha de consulta: Enero 2003],
disponible en: <http://www.microunity.com/ company/index.html>
[37] Seguridad Electrónica: Criptografía [en línea] [Fecha de consulta: Octubre 2002],
disponible en: <http://www.htmlweb.net/seguridad/cripto/>
96
Anexos
Anexos
ANEXO A. Puerto paralelo.
Salida
DB25
Pin
1
Nombre de
la señal
- Strobe
Salida
2-9
Entrada
10
Dato 0 –
Dato 7
- Ack
Entrada
11
+ Busy
Entrada
12
+ PaperEnd
Entrada
13
+ SelectIn
Salida
14
- AutoFd
Entrada
15
- Error
Salida
16
- Init
Salida
17
- Select
––
18 – 25
Ground
E/S
Tabla A.1. Señales del puerto paralelo.
Fig. A.1. Conector DB25 hembra.
97
Anexos
ANEXO B. Puerto serie.
Entrada
DB9
Pin
1
Nombre de
la señal
DCD
Entrada
2
RXD
Detección de
portadora
Recibir datos
Salida
3
TXD
Transmitir datos
Salida
4
DTR
––
5
GND
Terminal de datos
lista
Referencia
Entrada
6
DSR
Equipo de datos listo
Salida
7
RTS
Solicitud de envío
Entrada
8
CTS
Libre para envío
Entrada
9
RI
E/S
Descripción
Indicador de llamada
Tabla A.2. Señales del puerto serie.
Fig. A.2. Conector DB9 hembra.
98
Anexos
ANEXO C. VirtexTM 2.5 V – FPGA’s.
Device
System
Gates
CLB Array
Logic Cells
Maximum
Available I/O
BlockRAM
Bits
Max Select
RAM Bits
XCV50
57,906
16x24
1,728
180
32,768
24,576
XCV100
108,904
20x30
2,700
180
40,960
38,400
XCV150
164,674
24x36
3,888
260
49,152
55,296
XCV200
236,666
28x42
5,292
284
57,344
75,264
XCV300
322,970
32x48
6,912
316
65,536
98,304
XCV400
468,252
40x60
10,800
404
81,920
153,600
XCV600
661,111
48x72
15,552
500
98,304
221,184
XCV800
888,439
56x84
21,168
514
114,688
301,056
XCV1000
1,124,022
64x96
27,648
514
131,072
393,216
Tabla A.3. Virtex Field-Programmable Gate Array Family Members.
.
Function
Register-to-Register
Adder
Pipelined Multiplier
Address Decoder
Bits
Virtex -6
16
64
8x8
16 x 16
16
64
5.0 ns
7.2 ns
5.1 ns
6.0 ns
4.4 ns
6.4 ns
5.4 ns
4.1 ns
5.0 ns
6.9 ns
16:1 Multiplexer
Parity Tree
Chip-to-Chip
HSTL Class IV
LVTTL,16mA, fast slew
9
18
36
200 MHz
180 MHz
Tabla A.4. Performance for Common Circuit Functions.
99
Anexos
ANEXO C. VirtexTM 2.5 V – FPGA’s.
Features
• Fast, high-density Field-Programmable Gate Arrays
- Densities from 50k to 1M system gates
- System performance up to 200 MHz
- 66-MHz PCI Compliant
- Hot-swappable for Compact PCI
• Multi-standard SelectIO™ interfaces
- 16 high-performance interface standards
- Connects directly to ZBTRAM devices
• Built-in clock-management circuitry
- Four dedicated delay -locked loops (DLLs) for
advanced clock control
- Four primary low-skew global clock distribution nets,
plus 24 secondary global nets
• Hierachical memory system
- LUTs configurable as 16-bit RAM, 32-bit RAM, 16-bit
dual-ported RAM, or 16-bit Shift Register
- Configurable synchronous dual-ported 4k-bit RAMs
- Fast interfaces to external high-performance RAMs
• Flexible architecture that balances speed and density
- Dedicated carry logic for high-speed arithmetic
- Dedicated multiplier support
- Cascade chain for wide-input functions
- Abundant registers/latches with clock enable, and
dual synchronous/asynchronous set and reset
- Internal 3-state bussing
- IEEE 1149.1 boundary-scan logic
- Die-temperature sensing device
• Supported by FPGA Foundation™ and Alliance
Development Systems
- Complete support for Unified Libraries, Relationally
Placed Macros, and Design Manager
- Wide selection of PC and workstation platforms
• SRAM-based in-system configuration
- Unlimited reprogrammability
- Four programming modes
• 0.22-µm five-layer metal process
• 100% factory tested
Tabla A.5. Main Features.
100
Anexos
ANEXO C. VirtexTM 2.5 V – FPGA’s.
Virtex Device
# of Blocks
XCV50
XCV100
XCV150
XCV200
XCV300
XCV400
XCV600
XCV800
XCV1000
8
10
12
14
16
20
24
28
32
Total Block
SelectRAM+ Bits
32,768
40,960
49,152
57,344
65,536
81,920
98,304
114,688
131,072
Tabla A.6. Virtex Block SelectRAM+ Amounts.
Fig. A.3. Virtex Architecture Overview.
101
Anexos
ANEXO D. Programas Desarrollados (Disco).
§ sumultdiv.vhd (VHDL)
Descripción: Realiza las 4 operaciones básicas necesarias para la
codificación (suma, multiplicación, división y módulo).
No. de lineas: 180.
Empleado en: potencia.vhd, escenarios.vhd, funciones.vhd.
Pertenece a: Módulo aritmético.
Definición de puertos:
Port (
CLK:
FCNIN:
OPCIN:
SINA:
DATINA:
SOUT:
DATOUT:
in
in
in
in
in
out
out
STD_LOGIC;
STD_LOGIC_vector (1 downto 0);
STD_LOGIC_vector (2 downto 0);
STD_LOGIC;
STD_LOGIC_vector (LONBUS-1 downto 0);
STD_LOGIC;
STD_LOGIC_vector (LONBUS-1 downto 0));
-- Número de proceso de entrada
-- Número de proceso de entrada
-- Signo de entrada
-- Dato de entrada
-- Signo de salida
-- Dato de salida
Fragmento del cuerpo del programa (operación suma):
if (FCNIN = "00") then
if (OPCIN = "000") then
RAM(0) <= SINA & DATINA;
else
oper2 := DATINA;
oper1 := RAM (0)(LONBUS-1 downto 0);
signo := RAM(0)(LONBUS);
sss := false;
if (signo = SINA) then
sss := true;
end if;
if (oper1 < oper2) then
oper1 := DATINA;
oper2 := RAM (0)(LONBUS-1 downto 0);
signo := SINA;
end if;
if (sss = true) then
oper3 := SuMultDivBIT (oper1, oper2);
else
oper3 := RESTABIT (oper1, oper2);
end if;
DATOUT <= oper3;
SOUT <= signo;
end if;
102
--- Si es suma…
--- Entrada del dato A
--- Entrada del dato B
--- Verifica si los signos son iguales
--- Verifica si el dato 2 es mayor que el dato 1
--- Reacomoda los datos para que oper1 > oper2
--- Dependiendo de los signos se hace la operació n
--- El signo de salida es el del mayor
Anexos
ANEXO D. Programas Desarrollados (Disco).
§ potencia.vhd (VHDL)
Descripción: Eleva un número a una potencia dada.
No. de lineas: 418.
Empleado en: escenarios.vhd, funciones.vhd.
Emplea: sumultdiv.vhd.
Pertenece a: Módulo aritmético.
Definición de puertos:
Port (
CLK:
OPCIN:
DATOIN:
OPOUT:
SELOP:
DATOUT:
in
in
in
out
out
out
STD_LOGIC;
STD_LOGIC_vector (1 downto 0);
STD_LOGIC_vector (LONBUS downto 0);
STD_LOGIC_vector (2 downto 0);
STD_LOGIC_vector (1 downto 0);
STD_LOGIC_vector (LONBUS downto 0));
-- Número de proceso de entrada
-- Datos de entrada de módulos
-- Número de proceso de salida
-- Módulo a utilizar
-- Datos de salida
Fragmento del cuerpo del programa (cálculo de 2p ):
begin
opaux1 := A;
bande1 := false;
for I in 62 downto 31 loop
if (opaux1(I) = '1') then
if (bande1 = false) then
bande1 := true;
else
opaux1(I) := '0';
end if;
end if;
end loop;
opaux1(30 downto 0) := "0000000000000000000000000000000";
return opaux1;
end;
103
Anexos
ANEXO D. Programas Desarrollados (Disco).
§ compct.vhd (VHDL)
Descripción: Realiza la comunicación con la PC. Envía y recibe datos
numéricos.
No. de lineas: 77.
Empleado en: escenarios.vhd.
Pertenece a: Módulo de comunicaciones.
Definición de puertos:
Port (
CLK:
OPCIN:
DATOIN:
DATOIND:
DATOUTD:
DATOUT:
in
in
in
in
out
out
STD_LOGIC;
STD_LOGIC_vector (1 downto 0);
STD_LOGIC_vector (63 downto 0);
STD_LOGIC_vector (7 downto 0);
STD_LOGIC_vector (63 downto 0);
STD_LOGIC_vector (3 downto 0));
-- Número de proceso de entrada
-- Datos de entrada desde módulos
-- Datos de salida
-- Datos de entrada desde módulos
-- Datos de salida
Fragmento del cuerpo del programa (envío de datos):
--------Se recibe el dato de entrada
----------if (OPCIN = "00") then
RAM(0) <= DATOIN;
RAM2(0) <= "10000";
elsif (OPCIN = "01") then
-------Inicia el algoritmo para envio de datos
-------oper1 := RAM(0);
oper3 := RAM2(0);
if (oper3 > "00000") then
-- Ciclo de 16 tiempo
DATOUT <= oper1(63 downto 60);
-- Se envia los 4 bits + significativos
oper1 := oper1 (59 downto 0) & "0000";
-- Se hace un corrimiento a la izquierda
end if;
oper3 := oper3 - 1;
RAM2(0) <= oper3;
RAM(0) <= oper1;
104
Anexos
ANEXO D. Programas Desarrollados (Disco).
§ escenarios.vhd (VHDL)
Descripción: Contiene el código para realizar los tres escenarios definidos
para VHDL.
No. de lineas: 753.
Emplea: sumultdiv.vhd, potencia.vhd, compct.vhd, funciones.vhd.
Pertenece a: Unidad central.
Definición de puertos:
Port (
CLK:
FCNIN:
OPCIN:
DATINA:
DATOIN:
SELOP:
DATOUT:
in
in
in
in
in
out
out
STD_LOGIC;
STD_LOGIC_vector (1 downto 0);
STD_LOGIC_vector (3 downto 0);
STD_LOGIC_vector (4 downto 0);
STD_LOGIC_vector (LONBUS downto 0);
STD_LOGIC_vector (4 downto 0);
STD_LOGIC_vector (LONBUS downto 0));
-- Número de proceso de entrada
-- Número de proceso de entrada
-- Datos de entrada desde la PC
-- Datos de entrada desde módulos
-- Módulo a utilizar
-- Datos de salida
Fragmento del cuerpo del programa:
begin
if CLK='1' and CLK'event then
if (FCNIN = "00") then
-----------------Registro
elsif (FCNIN = "01") then
-----------------Encripción
elsif (FCNIN = "10") then
-----------------Recuperación
end if:
end if:
end:
----------------------------------------------
105
Anexos
ANEXO D. Programas Desarrollados (Disco).
§ funciones.vhd (VHDL)
Descripción: Contiene el código para realizar las operaciones más
robustas de los tres escenarios definidos para VHDL.
No. de lineas: 508.
Empleado en: escenarios.vhd.
Emplea: sumultdiv.vhd, potencia.vhd.
Pertenece a: Unidad central.
Definición de puertos:
Port (
CLK:
FCNIN:
OPCIN:
DATOIN:
SELOP:
DATOUT:
in
in
in
in
out
out
STD_LOGIC;
STD_LOGIC_vector (1 downto 0);
STD_LOGIC_vector (3 downto 0);
STD_LOGIC_vector (LONBUS downto 0);
STD_LOGIC_vector (3 downto 0);
STD_LOGIC_vector (LONBUS downto 0) );
Fragmento del cuerpo del programa:
begin
if CLK='1' and CLK'event then
if (FCNIN = "00") then
-----------------Función L
elsif (FCNIN = "01") then
-----------------Función Ei
elsif (FCNIN = "10") then
-----------------Función E
end if:
end if:
end:
106
----------------------------------------------
-- Número de proceso de entrada
-- Número de proceso de entrada
-- Datos de entrada desde módulos
-- Módulo a utilizar
-- Datos de salida
Anexos
ANEXO D. Programas Desarrollados (Disco).
§ tesis1.m (MATLAB)
Descripción: Implementación en software del algoritmo de verificación
compartida de Hsu y Wu.
No. de lineas: 173.
Fragmento del cuerpo del programa:
function regpol=polinomio (pxg, pt, pa, pv, pq)
resp=pxg;
for vfor=1:pt-2
resp=resp+pa(vfor)*pv^vfor;
end
regpol=resp+mod(pa(pt-1)*pv^(pt-1),pq);
-- Cálculo de polinomio
function regl=funcionele (pidg, pt, pq, pnl)
-- Cálculo de función L
regl=1;
for vfor=1:pt
if (vfor~=pnl)
regl=regl*mod(-pidg(vfor)/(pidg(pnl)-pidg(vfor)),pq);
end
end
107
Anexos
ANEXO D. Programas Desarrollados (Disco).
§ interfaz9.java (JAVA2)
Descripción: Implementa la clase interfaz9 descrita en el capítulo 5.
No. de lineas: 850.
Fragmento del cuerpo del programa (opción de encripción):
else if (cmd.equals("Encriptar"))
{
String caDoble1, caDoble2, caDoble3;
int dntsp1 = 0;
datoLl = 2;
afuente.resetPos();
// Reinicia posición en archivo fuente
atemporalax = new ArchivosCl("C:\\ArchivosTx\\auxiliar"+noVent+".avc", 1);
atemporalax.abrirArchivo();
// Abre archivo de almacenamiento temporal
conteoArch++;
iaux = afuente.regDato();
// Obtiene caracter de archivo fuente
while (iaux != -1)
{
dntsp1++;
datoAB[0] = iaux >>> 4;
datoAB[1] = iaux - (datoAB[0] * 16);
// Se divide byte en dos, se codifican y almacenan
codif1 = sistemaCr1.escenario3((double)datoAB[0]);
codif2 = sistemaCr1.escenario3((double)datoAB[1]);
caDoble1 = Double.toString(codif1[0]);
caDoble2 = Double.toString(codif1[1]);
caDoble3 = Double.toString(codif1[2]);
atemporalax.escDatod(caDoble1 + "," + caDoble2 + "," + caDoble3 + "\n");
caDoble1 = Double.toString(codif2[0]);
caDoble2 = Double.toString(codif2[1]);
caDoble3 = Double.toString(codif2[2]);
atemporalax.escDatod(caDoble1 + "," + caDoble2 + "," + caDoble3 + "\n");
iaux = afuente.regDato();
// Obtiene caracter de archivo fuente
}
atemporalax.escDatod("\n");
comunBoton.setEnabled(true);
}
108
Anexos
ANEXO D. Programas Desarrollados (Disco).
§ VCompartida.java (JAVA2)
Descripción: Implementa escenarios del esquema de encripción.
No. de lineas: 194.
Fragmento del cuerpo del programa (recuperación del mensaje):
public double escenario4 (double[] vectorC, double[] varxdx, double varqdx, double varpdx, double vargdx)
{
double[] Lv = new double [5];
double[] Ev = new double [5];
double E = 1, news, r2, resultado;
double qq = varqdx;
double pp = varpdx;
double gg = vargdx;
news = vectorC[2];
Xv = varxdx;
for (int i=0; i < t; i++)
{
Lv[i]=fele(IDv, t, qq, i);
Ev[i]=modulo(Math.pow(vectorC[0],modulo(Xv[i]*Lv[i],qq)),pp);
E = E * modulo (Ev[i], pp);
}
r2 = modulo(vectorC[1]*E, pp);
resultado = Math.rint(modulo(Math.pow(gg, news)*Math.pow(YA, r2)*r2,pp));
return resultado;
}
109
Anexos
ANEXO D. Programas Desarrollados (Disco).
§ pSerie.java (JAVA2)
Descripción: Clase para manejo del puerto serial.
No. de lineas: 181.
Fragmento del cuerpo del programa (recepción de caracteres):
while (in.available() > 0)
in.read(readBuffer);
if (pasoN == 0)
{
if ((char)readBuffer[0] == '0')
// Notificación de envío
{
areaExterna.setText("Solicitud de envio.\nAceptar transmisión...\n");
boton1.setEnabled(true);
pasoN++;
rboton2.setSelected(true);
}
else if ((char)readBuffer[0] == '1')
// Respuesta de aceptación de envío
{
boton0.setEnabled(true);
rboton2.setSelected(false);
}
lineas = 0;
}
else if (pasoN == 1)
// Mensaje cifrado
{
archivoDest1.escDato((int)readBuffer[0]);
// Almacenamiento de caracteres
areaExterna.append("" + (char)readBuffer[0]);
if ((char)readBuffer[0] == '\n')
lineas++;
}
110
Anexos
ANEXO D. Programas Desarrollados (Disco).
§ ArchivosCl.java (JAVA2)
Descripción: Clase para manejo de archivos.
No. de lineas: 186.
Fragmento del cuerpo del programa (constructor):
public ArchivosCl (String nx, int fd)
{
archivo = new File(nx);
StatusF = 0;
pos = 0;
longi = archivo.length();
tipoF = fd;
if (fd == 0)
{
longi = archivo.length();
if (!archivo.exists())
StatusF = 1;
else if (!archivo.canRead())
StatusF = 2;
}
else
{
longi = 0;
if (archivo.exists())
{
StatusF = 3;
archivo.delete();
}
else if (archivo.exists() && !archivo.canWrite())
StatusF = 4;
}
}
// Variable de estatus del elemento
// Nuevo archivo de sólo lectura
// Nuevo archive lectura/escritura
111
Puede agregar este documento a su colección de estudio (s)
Iniciar sesión Disponible sólo para usuarios autorizadosPuede agregar este documento a su lista guardada
Iniciar sesión Disponible sólo para usuarios autorizados(Para quejas, use otra forma )