cenidet T E S I S

Anuncio
S.E.P.
S.E.S.
D.G.E.S.T.
CENTRO NACIONAL DE INVESTIGACIÓN Y
DESARROLLO TECNOLÓGICO
cenidet
Sistema de Encripción de Datos Empleando
Verificación Compartida para Redes de Área Local
T
E
S
I
S
QUE PARA OBTENER EL GRADO DE:
MAESTRO EN CIENCIAS EN
INGENIERÍA ELECTRÓNICA
P R E S E N T A :
EDSON GEOVANNY ESTRADA LÓPEZ
DIRECTOR DE TESIS:
M.C. JAVIER MENESES RUIZ
CUERNAVACA, MORELOS
ABRIL DE 2006
Wxw|vtàÉÜ|t
TzÜtwxv|Å|xÇàÉá
Resumen
La criptografía moderna surgió como una solución a la fuerte necesidad de poder
transmitir de manera segura códigos militares durante la Segunda Guerra Mundial. Desde
entonces, esta área de la criptología ha experimentado un crecimiento espectacular, aún
cuando la mayor parte de estos avances se mantienen – y se seguirán manteniendo – en
secreto.
En los últimos años, investigaciones serias del tema en numerosas universidades de
todo el mundo han logrado que la criptografía sea una ciencia al alcance de todos, y que se
haya convertido en la piedra angular de áreas tan importantes como el comercio
electrónico, la telefonía móvil, las redes de computadoras y la banca electrónica, entre
otras. La seguridad de la información en estos casos es fundamental, sobre todo para una
sociedad que tiende al uso cada vez más frecuente de medios electrónicos para el
procesamiento, almacenamiento y transporte de datos, información y conocimientos.
Aunado a esta problemática, el creciente uso de redes públicas, como la Internet, para el
envío y recepción de información desde y hacia cualquier lugar del mundo, impone también
fuertes requerimientos de seguridad para el transporte de dicha información.
Debido a la creciente necesidad de nuevas soluciones prácticas se propone, en esta
tesis, un esquema de seguridad para las comunicaciones dentro de una red de área local
(LAN); atacando de manera directa el área de la seguridad de la información en redes de
computadoras. El algoritmo implementado es conocido como el esquema de encripción de
firma empleando verificación compartida; de manera específica la solución matemática
propuesta por Hsu y Wu. Esta solución en particular, ha comprobado en trabajos anteriores,
requerir un menor ancho de banda y ofrecer una mayor protección de la información que
muchas otras soluciones comúnmente empleadas.
Se desarrolló un prototipo electrónico (hardware y controlador software) de cifrado,
validando su correcto funcionamiento mediante su operación dentro de una red de área
local. El criptosistema cumplió el objetivo planteado de implementar un dispositivo cuya
principal función fuera liberar, a cada computadora personal dentro de la red, de todo el
exigente procesamiento criptográfico.
Se encontraron varias limitantes prácticas durante el desarrollo del prototipo,
principalmente: la velocidad de transferencia de datos y la capacidad de procesamiento del
procesador criptográfico. Estos aspectos tienen un impacto inicial directo en el desempeño
del criptosistema, por lo que se analizan varios esquemas y propuestas posibles para un
mejoramiento posterior del dispositivo. También existen aspectos de impacto secundario en
el desempeño, como lo son: la cantidad de memoria del procesador criptográfico, y
tamaños del buffer de transmisión y del buffer de recepción. En este trabajo se analiza el
desempeño del criptosistema bajo diferentes configuraciones de memoria, y se presenta una
comparación entre varias plataformas posibles.
Abstract
Modern cryptography arose as a solution to the strong need of being able to securely
transmit military codes during World War II. Since then, this cryptology area has
experienced a spectacular growth, even though most of these advances stay - and will stay confidential.
Over the last years, serious investigations of this subject in numerous universities
worldwide have achieved that cryptography can be a science within the reach of all, and
that it has become the angular stone of important areas as it is the electronic commerce,
mobile telephony, computer networks and electronic banking, among others. Information
security on these cases is fundamental, mainly for a society that tends to the more and more
frequently use of electronic means for processing, storage and transport of data, information
and knowledge. Added to this problematic, the increasing use of public networks, as it is
the Internet, for transmission and reception of information from and towards any place of
the world, also imposes strong requirements of security for the transport of this
information.
Due to the increasing need of new practical solutions, this thesis proposes a
communications security scheme within a local area network (LAN); directly attacking the
area of information security over computer networks. The implemented algorithm is known
as the Authentication Encryption System using Shared Verification; specifically the
mathematical solution proposed by Hsu and Wu. This individual solution has demonstrated,
on previous thesis, that it requires less bandwidth and that offers more information
protection that many other solutions commonly used.
A cipher electronic prototype was developed (hardware and software controller),
validating its correct operation by running it within a local area network scenario. The
cryptosystem fulfilled the proposed objective of implementing a device whose main
function was to eliminate the demanding cryptographic processing from every personal
computer within the network.
Several practical limits were found during the prototype development, mainly: the
data transfer rate and the processing capacity of the cryptographic processor. These aspects
have a direct initial impact in the cryptosystem performance, reason why several possible
schemes and proposals for a later improvement of the device are analyzed. Also secondary
impact aspects in the performance exist, as known: the available memory amount of the
cryptographic processor, and the size of the transmission and reception buffers. In this
thesis the cryptosystem performance under different memory configurations was analyzed,
and it shows a comparison between several possible platforms.
CONTENIDO
Lista de Figuras…………………………………………………………………………
iv
Lista de Tablas………………………………………………………………………….
vii
Simbología……………………………………………………………………………...
viii
Capítulo 1
1.1
1.2
1.3
1.4
1.5
Capítulo 2
2.1
2.2
2.3
INTRODUCCIÓN……………………………………………………..
1
Antecedentes…………………………………………………………….
1.1.1 Objetivos de la criptografía……………………………...
1.1.2 Características de un criptosistema……………………...
1.1.3 Aplicaciones de la criptografía…………………………..
1.1.4 Criptografía de llave pública…………………………….
Planteamiento del problema……………………………………………..
Objetivo………………………………………………………………….
Alcances………………………………………………………………….
Organización de la tesis………………………………………………….
1
2
2
4
5
13
14
14
14
FUNDAMENTOS TEÓRICOS DE LA CRIPTOGRAFÍA
DE LLAVE PÚBLICA…………………………………………………
16
Teoría de números……………………………………………………….
2.1.1 Números primos y relativamente primos………………...
2.1.2 Aritmética modular………………………………………
2.1.3 Teoremas de Fermat y de Euler………………………….
2.1.4 Probando si un número es primo………………………...
2.1.5 Algoritmo de Euclides…………………………………...
2.1.6 El teorema del residuo chino…………………………….
2.1.7 Logaritmos discretos…………………………………….
2.1.8 Campo finito GF – Galois Field…………………………
2.1.9 Algoritmo para el cálculo de (ab mod n)………………...
Criptografía y números aleatorios……………………………………….
2.2.1 Tipos de secuencias aleatorias…………………………...
2.2.2 Generación de secuencias criptográficamente aleatorias...
2.2.3 Generadores aleatorios criptográficamente seguros……..
Esquemas de verificación compartida……………………………….......
2.3.1 Esquema umbral (t, n) de Shamir……………………......
17
17
20
25
27
30
33
35
40
41
42
42
44
46
47
49
i
Capítulo 3
3.1
3.2
3.3
3.4
Capítulo 4
4.1
4.2
4.3
4.4
4.5
ESQUEMA DE ENCRIPCIÓN AUTENTIFICADA CON
VERIFICACIÓN COMPARTIDA (t, n) DE HSU Y WU….
52
Introducción…………………………………………………………….
Descripción del esquema……………………………………………….
3.2.1 Inicialización del sistema……………………………….
3.2.2 Registro…………………………………………………
3.2.3 Encripción de firma……………………………………..
3.2.4 Recuperación del mensaje………………………………
Análisis de seguridad…………………………………………………...
3.3.1 Ataque 1………………………………………………...
3.3.2 Ataque 2………………………………………………...
3.3.3 Ataque 3………………………………………………...
Simulación matemática…………………………………………………
3.4.1 Inicialización del sistema……………………………….
3.4.2 Registro…………………………………………………
3.4.3 Encripción de firma……………………………………..
3.4.4 Recuperación del mensaje………………………………
52
53
54
55
57
58
60
61
62
62
63
64
65
66
67
DISEÑO DEL CRIPTOSISTEMA…………………………………...
69
Diseño general del criptosistema………………………………………..
4.1.1 Seguridad de la información en una LAN…………….....
4.1.2 Análisis de las posibles topologías………………………
4.1.3 Requerimientos de implementación……………………..
4.1.4 Diagrama a bloques del criptosistema……………….......
Implementación física del módulo de cifrado/descifrado……………….
4.2.1 Diagrama a bloques del dispositivo de cifrado/
descifrado………………………………………………..
4.2.2 Elección del CPU………………………………………...
4.2.3 Esquemáticos del dispositivo de cifrado / descifrado……
Programación del procesador de cifrado/descifrado…………………….
Programación de la interfaz LAN……………………………………….
Interfaz gráfica…………………………………………………………..
4.5.1 Pantallas de la aplicación SA ENCRIPTOR……………..
4.5.2 Pantallas de la aplicación AUI ENCRIPTOR…………….
69
69
71
75
78
79
79
80
82
85
86
92
92
97
Capítulo 5
RESULTADOS………………………………………………………... 101
5.1
5.2
5.3
Esquemas de pruebas…………………………………………………… 101
Desempeño del criptosistema…………………………………………... 104
Comparativa entre plataformas…………………………………………. 107
ii
Capítulo 6
6.1
6.2
CONCLUSIONES…………………………………………………….. 112
Conclusiones…………………………………………………………....
6.1.1 Software generado……………………….……………...
6.1.2 Firmware generado………………………...……………
6.1.3 Algoritmos empleados……………....….……………….
6.1.4 Criptosistema desarrollado………………..…………….
Trabajos futuros………………………………………………………....
6.2.1 Mejoras en las capacidades actuales del criptosistema….
6.2.2 Conexión segura a Internet………………………………
6.2.3 Autorización colectiva remota para el acceso de una
cuenta……………………………………………………
112
112
113
114
115
120
120
121
122
Abreviaturas y acrónimos……………………………………………………………… 123
Referencias……………………………………………………………………………... 128
Anexo A………………………………………………………………………………… 131
Anexo B………………………………………………………………………………… 132
Anexo C………………………………………………………………………………… 133
iii
Lista de figuras
1-1
Intromisión pasiva (intercepción)………………………………………..
3
1-2
Intromisión activa (inserción o fabricación y modificación)…………….
4
1-3
Criptosistema de llave pública: Confidencialidad……………………….
7
1-4
Criptosistema de llave pública: Autentificación…………………………
8
1-5
Criptosistema de llave pública: Confidencialidad y Autentificación……
10
2-1
La relación a = qn + r, 0 ≤ r < n…………………………………………
20
3-1
Etapa de inicialización del sistema del esquema de encripción
autentificada con verificación compartida (t, n) de Hsu y Wu…………..
54
3-2
Etapa de registro (a) del esquema de encripción autentificada con
verificación compartida (t, n) de Hsu y Wu……………………………... 55
3-3
Etapa de registro (b) del esquema de encripción autentificada con
verificación compartida (t, n) de Hsu y Wu……………………………... 57
3-4
Etapa de encripción de firma del esquema de encripción autentificada
con verificación compartida (t, n) de Hsu y Wu…………………………
58
Etapa de recuperación del mensaje del esquema de encripción
autentificada con verificación compartida (t, n) de Hsu y Wu…………..
60
3-5
4-1
Topología #1: Criptosistema es un dispositivo externo de cifrado/
descifrado entre la tarjeta de red y el medio físico LAN………………… 72
4-2
Topología #2: Criptosistema es una tarjeta interna de red con cifrado/
descifrado automático……………………………………………………
72
Topología #3: Criptosistema es una tarjeta interna de cifrado/descifrado
paralela a una tarjeta de red en la PC…………………………………….
73
Topología #4: Criptosistema es un dispositivo externo de cifrado/
descifrado paralelo a una tarjeta de red en la PC………………………...
74
4-3
4-4
4-5
Diagrama general a bloques del criptosistema…………………………... 78
4-6
Diagrama a bloques del módulo (dispositivo) de cifrado / descifrado…... 79
iv
4-7
Esquemático del bloque: fuente de alimentación………………………... 82
4-8
Esquemático del bloque: procesador criptográfico……………………....
83
4-9
Esquemático del bloque: interfaz de programación en circuito………….
84
4-10
Esquemático del bloque: interfaz de comunicaciones a la PC…………... 85
4-11
WinSock y su relación con el modelo OSI de ISO………………………
4-12
Diagrama de flujo de los procesos de creación de los sockets en la
aplicación servidora y en la aplicación cliente…………………………... 91
4-13
Pantalla de presentación de la aplicación SA……………………………. 93
4-14
Pantalla principal de la aplicación SA…………………………………… 94
4-15
Pantalla de la opción menú “Archivo” Æ “Cargar Configuración”
de la aplicación SA………………………………………………………. 95
4-16
Pantalla de la opción menú “Archivo” Æ “Guardar Configuración”
de la aplicación SA………………………………………………………. 95
4-17
Pantallas de la opción menú “Configuración” Æ “Opciones” de la
aplicación SA…………………………………………………………….
87
96
4-18
Pantalla de la opción menú “Ayuda” Æ “Acerca de…” de la aplicación
SA………………………………………………………………………... 97
4-19
Pantalla principal de la aplicación AUI………………………………….. 98
4-20
Pantalla de la opción de menú “Configuración” Æ “Opciones”
de la aplicación AUI……………………………………………………... 100
5-1
Esquema de medición del desempeño del criptosistema: Cifrado………. 102
5-2
Esquema de medición del desempeño del criptosistema: Descifrado…… 102
5-3
Tiempos de cifrado del criptosistema basado en el 56F8323………….... 105
5-4
Tiempos de descifrado del criptosistema basado en el 56F8323………... 106
5-5
Tiempos de descifrado del criptosistema basado en el 56F801…………. 108
5-6
Tiempos de descifrado del criptosistema basado en el
MC9S12DP256B………………………………………………………... 109
v
5-7
Tiempos de cifrado y descifrado del criptosistema emulado en la PC….. 111
6-1
Comparación de velocidades de descifrado entre plataformas………….. 116
6-2
Comparación de tiempos de descifrado entre plataformas……………… 117
6-3
Comparación de DSPs comerciales……………………………………... 118
vi
Lista de tablas
1.1
Aplicaciones de algunos algoritmos conocidos de llave pública……….
11
2.1
Ejemplo de aritmética modular: (a) Adición módulo 8 y
(b) Multiplicación módulo 8……………………………………………
22
2.2
Propiedades de la aritmética modular dentro del conjunto Zn………….
23
2.3
Existencia de inverso multiplicativo en la multiplicación módulo un
número primo…………………………………………………………...
24
2.4
Propiedad del inverso multiplicativo en la aritmética modular………...
24
2.5
Algunos valores de la función de Euler φ(n) …………………………...
26
2.6
Cálculo del máximo común divisor por medio del algoritmo de
Euclides…………………………………………………………………
31
Cálculo del máximo común divisor e inverso multiplicativo por
medio del algoritmo extendido de Euclides…………………………….
31
2.8
Potencias de enteros, módulo 19………………………………………..
37
4.1
Comparativa entre las posibles topologías de implementación del
Criptosistema……………………………………………………………
74
4.2
Comparativa de las características de los procesadores empleados…….
81
5.1
Análisis de desempeño del criptosistema 56F8323: cifrado…………… 105
5.2
Análisis de desempeño del criptosistema 56F8323: descifrado………..
107
5.3
Análisis de desempeño del criptosistema 56F801: descifrado…………
108
5.4
Análisis de desempeño del criptosistema MC9S12DP256B:
descifrado………………………………………………………………
110
Comparativa de desempeño de las diferentes implementaciones
del criptosistema………………………………………………………..
116
2.7
6.1
6.2
Soluciones alternativas del dispositivo de cifrado/descifrado, que
ofrecen un mejor balance costo/desempeño……………………………. 119
vii
Simbología
(t, n)
Esquema umbral
a mod b
Operación modular
a ≡ b mod n
Congruencia modular
a≠b
a es diferente de b
a⊕b
a XOR b
a-1
Elemento inverso
b|a
b es divisor de a
k
Número de puntos en función polinomial
inda, p (b)
Índice de un número b, para la base a mod p
mcd(a ,b)
Máximo común divisor de a y b
n
Participantes del esquema umbral
p
Número primo
p(x)
Función polinomial
r
Número aleatorio
t
Participantes del esquema umbral
xA
Llave personal de A
xG
Llave personal de G
yA
Llave pública de A
yG
Llave pública de G
A
Firmante del esquema de Hsu y Wu
C
Texto cifrado
Di
Porciones del esquema umbral
G
Grupo de participantes o verificadores del esquema umbral
GF(p)
Campo finito de de orden p
K
Llave pública
M
Mensaje
P
Conjunto de todos los números primos
S
Clave secreta
viii
Ui
Verificador i del grupo G
X
Texto original sin cifrar
Y
Texto cifrado
⎣x ⎦
Entero más grande menor o igual a x
φ(n)
Función de Euler
ix
Capítulo 1: Introducción
Capítulo 1
Introducción
1.1 Antecedentes
La seguridad de la información es fundamental, en la actualidad, para una sociedad
que tiende al uso cada vez más frecuente de medios electrónicos para el procesamiento,
almacenado y transporte de datos, información y conocimientos. El constante surgimiento
de nuevas y poderosas tecnologías de procesamiento de datos, impone también de manera
continua, rigurosos requisitos hacia los procesos e infraestructura de seguridad. La continua
aparición de poderosas plataformas de cómputo, permiten implementar algoritmos cada vez
más complejos con el objetivo de incrementar la confiabilidad de un esquema de seguridad.
Esto también se ha vuelto una gran desventaja, debido a que esta misma capacidad en el
nivel de procesamiento queda disponible para la creación de algoritmos cuya única función
sea la violación o “ruptura” de dicho esquema de seguridad.
Aunado a la problemática anterior, el creciente uso de redes públicas, como Internet,
para el envío y recepción de información desde y hacia cualquier lugar del mundo, impone
también fuertes requerimientos de seguridad para el transporte de dicha información.
Muchas de estas conexiones se realizan a través de medios físicos públicos no seguros,
como podrían ser: una conexión telefónica o una conexión remota inalámbrica.
1
Capítulo 1: Introducción
La criptografía es la rama de las matemáticas que trata sobre la protección de la
información [1]; esta área de la ciencia surgió como la respuesta a la gran necesidad de
seguridad del mundo informático moderno. A pesar de que la criptografía tiene una historia
milenaria, con algunos métodos de cifrado ingeniosos, hace sólo unos 30 años que dejó de
ser un arte o un conjunto de técnicas empíricas, para convertirse en ciencia. Entre las
disciplinas que emplea destacan la teoría de la información, la teoría de números – o
matemática discreta, que estudia las propiedades de los números enteros – y la teoría de la
complejidad algorítmica [2].
El conocimiento de métodos para el cifrado de mensajes, del que se ocupa la
criptografía, se desarrolla en paralelo con los avances en la violación o ruptura de estos
métodos, es decir, la forma de descifrar los mensajes que se envían, que teóricamente sólo
podrían entender los legítimos destinatarios. A esta segunda disciplina se le denomina
criptoanálisis. Ambas conforman la criptología. Los avances en una de ellas impulsan la
investigación en la otra, disputándose así una carrera, que además está marcada por el
secreto en el que se mantienen muchos de los progresos que se obtienen en ellas.
1.1.1 Objetivos de la criptografía
Los objetivos de la criptografía son:
•
Transmitir mensajes que no puedan ser interpretados por un receptor no autorizado.
•
Que agentes autorizados si puedan interpretar el mensaje transmitido.
•
Que las operaciones de codificación y decodificación no sean costosas, en términos
computacionales.
•
Que un intento de análisis será demasiado complejo para ser factible.
1.1.2 Características de un criptosistema
La solución a los problemas de seguridad inherentes a un sistema de información,
define cuatro características o metas para el diseño de un criptosistema [3], siendo estas:
2
Capítulo 1: Introducción
•
Confidencialidad.
•
Autentificación.
•
No repudiación.
•
Integridad.
La confidencialidad asegura que la información sólo sea accesible para entidades
autorizadas. Esta característica está expuesta a un ataque de seguridad clasificado como
intromisión pasiva o intercepción, en donde alguien, sin interferir o alterar un mensaje que
no está dirigido a él, logra captarlo y enterarse de su contenido. Esto se logra en mensajes
de radio de manera muy simple, o en telefonía, por ejemplo, interviniendo una línea.
Figura 1-1 Intromisión pasiva (intercepción).
Otra característica de un criptosistema es la autentificación, la cual asegura que el
origen de la información sólo sea accesible para entidades autorizadas. Esta característica
está expuesta a un ataque clasificado como intromisión activa de tipo inserción o
fabricación en la cual una entidad no autorizada inserta información en el sistema.
La tercera característica de la criptografía es la integridad, la cual asegura que sólo
entidades autorizadas tienen acceso a la modificación de la información transmitida. Esta
característica está expuesta a un ataque clasificado como intromisión activa de tipo
modificación en la cual una entidad no autorizada no sólo tiene acceso a la información
sino que lleva a cabo una alteración de la misma.
3
Capítulo 1: Introducción
Figura 1-2 Intromisión activa (inserción o fabricación y modificación).
La cuarta y última característica de la criptografía es la no repudiación, la cual
asegura que ni el receptor ni el transmisor puedan negar que se efectuó una transmisión.
1.1.3 Aplicaciones de la criptografía
La criptografía se encuentra en una gran variedad de aplicaciones como lo son:
•
Diplomacia
•
Guerra
•
Correo electrónico
•
Redes de computadoras
•
Transferencias electrónicas bancarias
•
Seguridad en Internet: IPSec, SSL (Security Socket Layer, por sus siglas en inglés)
•
Comercio electrónico
•
Acceso remoto
•
Telefonía
4
Capítulo 1: Introducción
1.1.4 Criptografía de llave pública
El desarrollo de la criptografía de llave pública es la más grande y quizás la única
verdadera revolución en toda la historia de la criptografía. La criptografía de llave pública
proporciona una separación radical de todo lo que se había desarrollado con anterioridad.
Para empezar, los algoritmos de llave pública se basan más en funciones matemáticas que
en la simple combinación de sustituciones y permutaciones. Aún más importante, la
criptografía de llave pública es asimétrica, involucrando el uso de dos llaves distintas, en
contraste con el cifrado convencional simétrico, el cual sólo utiliza una llave. El uso de dos
llaves tiene consecuencias profundas en las áreas de confidencialidad, distribución de
llaves, y autentificación.
El concepto de criptografía de llave pública evolucionó de un intento de atacar los
dos problemas más difíciles asociados con el cifrado convencional. El primer problema es
el de distribución de llaves. La distribución de llaves mediante cifrado convencional
requiere que dos entidades: a) compartan ya en ese momento una llave, o b) hagan uso de
un centro de distribución. Whitfield Diffie, uno de los descubridores del cifrado de llave
pública (junto con Martin Hellman, ambos en la Universidad de Stanford), llegaron a la
conclusión de que este segundo requerimiento negaba la esencia misma de la criptografía:
la habilidad de mantener en secreto total la misma comunicación [4].
El segundo problema que Diffie señaló era el de las “firmas digitales”. Si el uso de
la criptografía iba a ser ampliamente difundido, y no sólo en situaciones militares sino para
propósitos comerciales y privados, entonces los mensajes y documentos electrónicos
necesitarían el equivalente de las firmas que se emplean en los documentos en papel. Diffie
y Hellman [5] lograron un asombroso descubrimiento en 1976 al desarrollar un método
dirigido a la solución de ambos problemas y que era radicalmente diferente a todas las
soluciones propuestas durante más de cuatro milenios atrás.
Un concepto erróneo que se tiene de la criptografía pública es que ésta es una
técnica de propósito general que ha vuelto obsoleta la criptografía convencional. Por el
5
Capítulo 1: Introducción
contrario, debido al enorme esfuerzo computacional requerido por los esquemas modernos
de cifrado de llave pública, no parece ser que el cifrado convencional vaya a ser
abandonado. Como Diffie-Hellman señalaron en uno de sus más reconocidos artículos: “la
restricción de la criptografía de llave pública para aplicaciones de distribución de llaves y
de firma es casi universalmente aceptada” [4].
Criptosistemas de llave pública
Los algoritmos de llave pública se basan en una llave para cifrado y en una llave
diferente para descifrado. Estos algoritmos poseen una característica muy importante:
•
No es computacionalmente factible determinar la llave de descifrado dado sólo el
conocimiento del algoritmo criptográfico y la llave de cifrado.
Además, algunos algoritmos, como el RSA [6], exhiben también que:
•
Cualquiera de las dos llaves relacionadas pueden ser utilizadas para cifrado, con la
otra siendo empleada para descifrado.
La figura 1-3 ilustra de una manera sencilla el proceso de cifrado de llave pública.
Esencialmente, los pasos son:
1. Cada usuario final en una red genera un par de llaves.
2. Cada usuario publica su llave de cifrado colocándola en un registro o archivo
público. Ésta es la llave pública; la llave complementaria se mantiene privada.
3. Si A desea mandar un mensaje a B, cifra el mensaje empleando la llave pública de
B.
4. Cuando B recibe el mensaje, éste descifra el mensaje empleando su llave privada.
Nótese que sólo B puede llevar a cabo el proceso de descifrado.
6
Capítulo 1: Introducción
Criptoanálisis
X’
KRa’
KRb’
Fuente A
Fuente del
Mensaje
X
Destino B
Algoritmo de
Cifrado
Y
Algoritmo de
Descifrado
KUb
X
Destino
KRb
Fuente de par
de llaves
Figura 1-3 Criptosistema de llave pública: Confidencialidad.
Con este enfoque todos los participantes tienen acceso a las llaves públicas, en tanto
que las llaves privadas son generadas localmente por cada usuario y por lo mismo nunca
necesitan ser distribuidas. Mientras un sistema controle su llave privada, su comunicación
entrante es segura. En cualquier instante, un sistema puede cambiar su llave privada y
publicar la correspondiente llave pública para reemplazar la anterior.
Como se puede apreciar en la figura 1-3, entre los elementos esenciales del cifrado
de llave pública se encuentra una fuente A del mensaje, la cual produce un mensaje en texto
puro, X = [X1, X2,…, XM]. Los M elementos de X son caracteres de un alfabeto finito. El
mensaje se pretende enviar al destino B. B genera un par de llaves relacionadas: una llave
pública, KUb, y una llave privada, KRb. KRb es conocida sólo para B, por el contrario KUb
está disponible públicamente y por lo tanto es accesible por A. Con el mensaje X y la llave
de cifrado KUb como entrada, A produce el texto cifrado Y = [Y1, Y2,…, YN]:
Y = EKUb (X)
El receptor, en posesión de la llave privada correspondiente, es capaz de invertir la
transformación:
X = DKRb (Y)
7
Capítulo 1: Introducción
Un oponente, observando el texto cifrado Y y teniendo acceso a KUb pero no a KRb
o al mensaje original X, debe intentar recuperar X y/o KRb. Se asume que el oponente tiene
conocimiento de los algoritmos de cifrado (E) y descifrado (D). Si el oponente está
interesado sólo en este mensaje en particular, entonces el objetivo del esfuerzo es recuperar
X, generando un estimado del texto puro X’. Sin embargo, frecuentemente, el oponente
también está interesado en ser capaz de recuperar mensajes futuros, por lo que se realiza un
intento de recuperar KRb generando un estimado KRb’.
Se mencionó con anterioridad que cualquiera de las dos llaves podía ser utilizada
para llevar a cabo el cifrado, con la otra siendo utilizada entonces para el descifrado. Esto
permite más bien implementar un esquema criptográfico diferente. Este esquema, mostrado
en la figura 1-4, proporciona autentificación.
Criptoanálisis
KRa’
Fuente A
Fuente del
Mensaje
X
Destino B
Algoritmo de
Cifrado
Y
Algoritmo de
Descifrado
KRa
X
Destino
KUa
Fuente de par
de llaves
Figura 1-4 Criptosistema de llave pública: Autentificación.
En este caso, A prepara el mensaje a B y lo cifra utilizando la llave privada de A
antes de transmitirlo. B descifra el mensaje utilizando la llave pública de A. Debido a que el
mensaje fue cifrado empleando la llave privada de A, sólo A pudo haber preparado el
mensaje. De este modo, la totalidad del mensaje cifrado sirve como una firma digital.
Además, es imposible alterar el mensaje si no se tiene acceso a la llave privada de A, de
modo que el mensaje está autentificado tanto en términos de la fuente como de integridad.
8
Capítulo 1: Introducción
En el esquema anterior, el mensaje se cifra por completo, el cual, aunque validando
tanto al autor como su contenido, requiere una gran capacidad de almacenamiento. Cada
documento debe mantenerse en formato de texto puro para propósitos prácticos. Una copia
en formato de texto cifrado debe ser almacenada de modo que el origen y el contenido
puedan ser verificados en cualquier instante. Una manera mucho más eficiente de lograr los
mismos resultados es descifrar un pequeño bloque de bits que sea una función del
documento. Tal bloque, llamado un autentificador, debe poseer la propiedad de que sea
imposible alterar el documento original sin alterar el autentificador. Si el autentificador es
cifrado con la llave privada de la fuente, sirve como una firma que verifica el origen, el
contenido y la secuencia.
Y = EKRa (X)
X = DKUa (Y)
El proceso de cifrado descrito no proporciona confidencialidad. Esto es, el mensaje
enviado está protegido contra una modificación pero no contra espionaje. Esto es obvio en
el caso de una firma basada en una porción del mensaje, debido a que el resto del mensaje
se transmite libremente. Aún en el caso de un completo cifrado mediante una firma, no
existe protección alguna sobre la confidencialidad del documento debido a que cualquier
observador puede descifrar el mensaje empleando la llave pública del transmisor. A pesar
de esto, es posible proporcionar tanto una función de autentificación como de
confidencialidad mediante un doble uso del esquema de llave pública (figura 1-5).
Z = EKUb[ EKRa (X) ]
X = DKUa[ EKRb (Z) ]
En este caso, se cifra primero el mensaje empleando la llave privada del transmisor.
Esto proporcionará la firma digital. A continuación, se cifra de nuevo, empleando la llave
pública del receptor. El texto cifrado final puede ser descifrado sólo por el receptor
pretendido, quien solamente posee la llave privada adecuada para el proceso de descifrado.
En este esquema aunque se proporciona tanto confidencialidad como autentificación, tiene
9
Capítulo 1: Introducción
la desventaja de ser demasiado complejo y tardado, ya que el proceso de cifrado/descifrado
para cada comunicación, tiene que ser realizado cuatro veces en vez de sólo dos.
Destino B
Fuente A
Fuente del
Mensaje
X
Algoritmo
de Cifrado
Y
Algoritmo
de Cifrado
Z
KUb
Algoritmo
de
Descifrado
Y
Algoritmo
de
Descifrado
X
Destino
KRb
Fuente de par
de llaves
KUa
KRa
Fuente de par
de llaves
Figura 1-5 Criptosistema de llave pública: Confidencialidad y Autentificación.
Aplicaciones de criptosistemas de llave pública
Se puede clasificar el uso de criptosistemas de llave pública en tres categorías:
•
Cifrado/Descifrado: El transmisor cifra el mensaje con la llave pública del
receptor.
•
Firma Digital: El transmisor firma un mensaje con su llave privada. Esto se logra al
aplicar un algoritmo criptográfico al mensaje o a un pequeño bloque de datos,
función del mensaje.
•
Intercambio de llaves: Dos entidades cooperan para intercambiar una sesión de
llaves.
10
Capítulo 1: Introducción
Algunos algoritmos son adecuados para las tres aplicaciones, por el contrario otros
sólo pueden ser empleados en una o dos de estas aplicaciones. La tabla 1.1 muestra los
algoritmos más conocidos en cada una de estas aplicaciones.
Tabla 1.1 Aplicaciones de algunos algoritmos conocidos de llave pública.
Algoritmo
RSA [6]
ElGamal [7]
DSS [8]
Diffie–Hellman[5]
Cifrado/Descifrado
X
X
Firma Digital
X
X
X
Intercambio de llaves
X
X
Requerimientos de criptosistemas de llave pública
Los criptosistemas mostrados en las figuras 1-3 a la 1-5 dependen de un algoritmo
criptográfico basado en dos llaves relacionadas. Diffie y Hellman postularon este sistema
sin demostrar que tales algoritmos existieran. Sin embargo, ellos plasmaron las condiciones
que dichos algoritmos debían cumplir [4]:
1. Es computacionalmente fácil para una entidad B generar un par de llaves (llave
pública KUb, llave privada KRb).
2. Es computacionalmente fácil para un transmisor A, conociendo la llave pública y el
mensaje original M, generar el texto cifrado correspondiente:
C = EKUb (M)
3. Es computacionalmente fácil para el receptor B el descifrar el texto cifrado
resultante utilizando la llave privada para recuperar el mensaje original:
M = DKRb (C) = DKRb [EKUb (M)]
4. No es computacionalmente factible para un oponente, conociendo la llave pública,
KUb, determinar la llave privada, KRb.
11
Capítulo 1: Introducción
5. No es computacionalmente factible para un oponente, conociendo la llave pública,
KUb, y un texto cifrado, recuperar el mensaje original, M.
Podemos añadir un sexto requerimiento que, aunque útil, no es necesario para todas
las aplicaciones de llave pública:
6. Las funciones de cifrado y descifrado pueden ser aplicadas en cualquier orden:
M = EKUb [DKRb (M)]
Los requerimientos resultan en la necesidad de una función de dirección única con
trampa. Una función de dirección única es una que “mapea” un dominio dentro de un rango
de modo que cada valor de la función posea una inversa única, con la condición que el
cálculo es fácil en tanto que el cálculo de la inversa no sea factible computacionalmente
hablando:
Y = f (X)
-1
X = f (Y)
Æ
fácil
Æ
no factible
Una función de dirección única con trampa es fácil de calcular en una dirección y no
es factible el cálculo en la otra dirección a menos que se conozca cierta información
adicional. Con la información adicional la inversa puede ser calculada en tiempo
polinomial. Una función de dirección única es una familia de funciones invertibles fk, tales
que:
Y = fk(X)
Æ
fácil, si se conocen k y X
X = fk-1(Y)
Æ
fácil, si se conocen k y Y
X = fk-1(Y)
Æ
no factible, si se conoce Y pero no k
12
Capítulo 1: Introducción
1.2 Planteamiento del problema
La rápida expansión y popularización de Internet ha convertido a la seguridad en
redes en uno de los tópicos más importantes dentro de la Informática moderna. Con tal
nivel de interconexión, los virus y los “hackers” se mueven con gran libertad,
aprovechando las deficientes medidas de seguridad tomadas por administradores y usuarios
a los que esta nueva revolución tecnológica ha tomado por sorpresa.
Para intentar saciar esta creciente demanda han surgido una gran diversidad de tipos
y topologías de redes privadas y públicas, así como también una gran diversidad de formas
y medios de comunicación. Hemos de tener en cuenta que la complejidad de las grandes
redes y su acceso por parte del personal de las empresas públicas y/o privadas convierten la
protección física de los canales de comunicación en algo tremendamente difícil por los
costos que implica y sus efectos en la operación de las redes [11].
Las ventajas de las redes en Informática son evidentes, pero es un error común el no
valorar ciertos riesgos, lo cual a menudo expone en peligro la seguridad de los sistemas. Se
tiene previsto que en unos pocos años la inmensa mayoría de las empresas y centros
educativos operarán a través de una red con conexión a Internet, lo cual crea la urgente
necesidad de crear nuevas y eficientes soluciones que garanticen la seguridad de la
información.
Este trabajo de tesis propone una solución de seguridad para las comunicaciones
dentro de una red de área local. El algoritmo a implementar es conocido como el esquema
de encripción de firma empleando verificación compartida, de manera específica la
solución matemática propuesta por Hsu y Wu [9]. Esta solución en particular ha
comprobado requerir un menor ancho de banda y ofrecer una mayor protección de la
información que muchas otras soluciones comúnmente empleadas [10].
13
Capítulo 1: Introducción
1.3 Objetivo
Esta tesis tiene como objetivo desarrollar un prototipo electrónico (hardware y
controlador software) de cifrado / descifrado utilizando el esquema de encripción con
verificación compartida definido por Hsu y Wu. El correcto funcionamiento de este
dispositivo se validará mediante su operación dentro de una red de área local (LAN).
1.4 Alcances
•
Propuesta de un esquema teórico para el diseño de un sistema de encripción de
datos con verificación compartida para una aplicación en redes de área local.
•
Implementación de un sistema práctico para la validación del algoritmo y de la
funcionalidad del esquema propuesto.
•
Desarrollo de firmware del criptosistema.
•
Desarrollo de software para la PC.
•
Interfaz de comunicaciones entre la PC y el criptosistema.
1.5 Organización de esta tesis
La tesis está compuesta de 6 capítulos y su contenido es el siguiente:
Capítulo 1: Introducción, presenta una introducción al tema de la criptografía. Se
realiza el planteamiento del problema y se definen el objetivo y los alcances de este trabajo
de investigación. Se presenta también una breve descripción por capítulos del documento.
14
Capítulo 1: Introducción
Capítulo 2: Conceptos y algoritmos de criptografía de llave pública, desarrolla la
parte matemática del trabajo de investigación, listando los conceptos básicos y algoritmos
necesarios para el control y operación del prototipo.
Capítulo 3: Esquema de encripción autentificada con verificación compartida (t,
n) de Hsu y Wu, presenta el modelo de operación de un criptosistema, basado en el
algoritmo de verificación compartida de Hsu y Wu, aplicándolo a una red de área local
(LAN). Se analizan algunos aspectos de seguridad del mismo, y por último, se desarrolla
una simulación matemática de la operación del mismo.
Capítulo 4: Diseño del criptosistema, realiza el diseño de una solución teórica en
diagramas de bloques, así como una propuesta de las especificaciones ideales deseadas. Se
propone también un desarrollo práctico y realizable desde el punto de vista económico, así
como también un panorama de todo el desarrollo de software y controladores necesarios
para su implementación.
Capítulo 5: Resultados, detalla la respuesta y comportamiento del sistema bajo
diferentes condiciones de operación. Se analiza el desempeño del mismo, realizando una
comparativa entre cada una de las implementaciones realizadas.
Capítulo 6: Conclusiones, resume los aspectos más importantes en relación al
trabajo desarrollado, los resultados obtenidos así como las aportaciones del mismo. Se
finaliza con una serie de sugerencias para la realización de trabajos futuros relacionados
con el tema.
15
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
Capítulo 2
Fundamentos teóricos de la criptografía de llave pública
Para el desarrollo de un criptosistema de llave pública basado en logaritmos
discretos, como lo es el esquema de Hsu y Wu implementado en esta tesis, hace falta una
revisión exhaustiva de diversos conceptos y algoritmos matemáticos esenciales. El dominio
y comprensión de estos últimos combinado con un profundo conocimiento y experiencia en
una plataforma específica de hardware/software, permitirá generar código de alta velocidad
y que utilice de manera confiable y óptima los recursos computacionales disponibles.
Este capítulo presenta como primer tema una introducción a la teoría de números,
sobre la cual está basada la criptografía de llave pública. Los conceptos y técnicas de la
teoría de números son bastante abstractos y generalmente difíciles de comprender sin el
adecuado uso de ejemplos. Debido a esto, se ha añadido un ejemplo matemático después de
la presentación de los conceptos o algoritmos más abstractos.
Se incluyen también al final de algunos algoritmos de la teoría de números su
respectiva implementación en código C++. Este lenguaje de programación fue elegido para
el desarrollo de esta tesis ya que actualmente su uso está muy difundido ya no sólo para la
PC, sino también para la llamada programación C++ embebida (terminó inglés embedded);
esta última siendo ampliamente asimilada como el nuevo estándar de programación de
sistemas basados en microcontroladores, así como también de los potentes DSPs.
16
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
Posteriormente, como segundo tema, se realizará una rápida revisión de algunos
esquemas de criptografía pública, en los que será fácil apreciar la aplicación directa de los
conceptos matemáticos analizados con anterioridad. Algunos de ellos, como el esquema
Diffie-Hellman, tienen su aplicación directa en el algoritmo implementado en esta tesis.
2.1 Teoría de números
Un tema importante en la teoría de números son los números primos. En esta
sección se realizará una revisión sólo de los conceptos y algoritmos relevantes para los
propósitos de esta tesis.
2.1.1 Números primos y relativamente primos
Divisores
Se dice que b ≠ 0 divide a a si a = mb para algún valor de m, donde a, b y m son
números enteros. Esto es, b divide a a si de su división no se obtiene un residuo. Se utiliza
comúnmente la notación b|a para indicar que b divide a a. También, si b|a, se dice que b es
divisor de a. Por ejemplo, los divisores positivos de 28 son 1, 2, 4, 7, 14 y 28. Se tienen las
siguientes relaciones:
•
Si a|1, entonces a = ±1.
•
Si a|b, y b|a, entonces a = ±b.
•
Cualquier b ≠ 0 divide a 0.
•
Si b|g y b|h, entonces b|(mg + nh) para cualesquiera enteros m y n.
Números primos
Un entero p > 1 es un número primo [3] si sus únicos divisores son ±1 y ±p.
17
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
Cualquier entero a > 1 puede ser factorizado de forma única como
α
α
a = p1 1 p2 2 L pn
αn
(2.1)
donde p1 > p2 > … > pn son números primos y donde cada αi > 0. Por ejemplo, 94325 = 52
× 73 × 11.
Es de gran utilidad para las siguientes secciones el visualizar (2.1) en otra forma. Si
P es el conjunto de todos los números primos, entonces cualquier entero positivo puede ser
escrito de modo único en la siguiente forma:
a=∏p
ap
(2.2)
P
donde cada ap ≥ 0. El lado izquierdo de (2.2) es el producto de todos los posibles números
primos p; para un valor particular de a, la mayoría de los exponentes ap serán 0. El valor de
cualquier entero positivo puede ser especificado al simplemente listar todos los exponentes
diferentes de cero en la formulación anterior. La multiplicación de dos números es
equivalente a sumar sus correspondientes exponentes, esto es
12 = 22 × 31
18 = 21 × 32
216 = 23 × 33
La anterior formulación significa para a|b, expresado en términos de sus factores
primos, que cualquier entero de la forma pk puede ser dividido sólo por un entero con un
menor o igual exponente en el mismo número primo pj, con j ≤ k. Esto es,
a | b → a p ≤ b p , para todo p
18
(2.3)
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
Números relativamente primos
Utilizaremos la notación mcd(a, b) para indicar el máximo común divisor de a y b.
El entero positivo c se dice que es el máximo común divisor de a y b si
1. c es divisor de a y de b.
2. Cualquier divisor de a y de b es un divisor de c.
Una definición equivalente es:
k = mcd (a, b) = max[k , de modo que k | a y k | b]
(2.4)
Debido a que se requiere que el máximo común divisor sea positivo, se tiene
entonces que mcd(a, b) = mcd(-a, b) = mcd(a, -b) = mcd(-a, -b). En general, mcd(a, b) =
mcd(|a|, |b|). También, debido a que todos los enteros diferentes de 0 dividen a 0, tenemos
que mcd(a, 0) = |a|.
Es fácil determinar el máximo común divisor de dos enteros positivos si estos se
encuentran expresados en términos de sus factores primos. Por ejemplo,
300 = 2 2 × 31 × 52
18 = 21 × 32 × 50
mcd (300, 18) = 21 × 31 × 50 = 6
En general,
k = mcd (a, b) → k p = min( a p , b p ) , para todo p
(2.5)
Determinar los factores primos de un número grande no es una tarea fácil, Así que
la relación (2.5) no es una manera directa de calcular el máximo común divisor.
Revisaremos una mejor forma más adelante en la sección 2.1.5.
19
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
Los enteros a y b son relativamente primos si no tienen factores primos en común,
esto es, si su máximo común divisor es 1. Esto es equivalente a decir que a y b son
relativamente primos si mcd(a, b) = 1. Por ejemplo, 8 y 15 son números relativamente
primos; esto es cierto debido a que los factores primos de 8 son 1, 2, 4 y 8, y los factores
primos de 15 son 1, 3 y 5.
2.1.2 Aritmética modular
Dado un entero positivo n y cualquier entero a, si dividimos a entre n, obtenemos un
cociente q y un residuo r que obedecen la siguiente relación:
a = qn + r ,
⎣ n⎦
0 ≤ r ≤ n; q = a
(2.6)
donde ⎣x ⎦ es el entero más grande menor o igual a x.
n
2n
3n
a
qn
(q+1)n
012
Figura 2-1 La relación a = qn + r, 0 ≤ r < n.
r
La figura 2-1 demuestra que, dado un entero a y un valor positivo n, es siempre
posible el encontrar q y r que satisfagan (2.6). Por ejemplo,
a = 11;
n = 7;
11 = 1 × 7 + 4;
r=4
a = −11;
n = 7;
−11 = (−2) × 7 + 3;
r=3
Si a es un entero y n es un entero positivo, definimos a mod n como el residuo
cuando a es dividido entre n. Por lo tanto, para cualquier entero a,
⎣ n ⎦× n + (a mod n)
a= a
20
(2.7)
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
La criptografía utiliza abundantemente las operaciones de aritmética modular [8],
debido a la relativa facilidad de su manejo en los registros de las computadoras. Para una
operación de k-bit módulo n, los resultados intermedios de cualquier suma, resta o
multiplicación no tendrán una longitud mayor a los 2k-bits.
Se dice que dos enteros a y b son congruentes módulo n, si (a mod n) = (b mod n).
Esto se escribe también como a ≡ b mod n. Nótese que si a ≡ 0 mod n, entonces n|a. El
operador módulo posee las siguientes características:
7. a ≡ b mod n, si n|(a−b).
8. (a mod n) = (b mod n), implica que a ≡ b mod n.
9. a ≡ b mod n, implica que b ≡ a mod n.
10. a ≡ b mod n y b ≡ c mod n, implica que a ≡ c mod n.
Operaciones de aritmética modular
Nótese que, por definición en la figura 2-1, el operador (mod n) realiza un mapeo
de todos los enteros al subconjunto de enteros [0, 1, …, (n − 1)]. Es posible realizar
operaciones aritméticas dentro de este subconjunto, y el conjunto de éstas recibe el nombre
de aritmética modular. Ésta posee las siguientes propiedades:
1. [(a mod n) + (b mod n)] mod n = (a + b) mod n.
2. [(a mod n) – (b mod n)] mod n = (a – b) mod n.
3. [(a mod n) × (b mod n)] mod n = (a × b) mod n.
Las tablas 2.1(a) y 2.1(b) proporcionan una ilustración de las operaciones
aritméticas modulares de adición y multiplicación. Analizando los resultados de la
operación de adición podemos observar claramente un patrón en la matriz resultante.
También, como en la adición aritmética ordinaria, existe un inverso aditivo, o negativo,
para cada número en la aritmética modular. En este caso, el negativo de un número x es el
número y de modo que (x + y) ≡ 0 mod 8.
21
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
En la aritmética ordinaria, existe también un inverso multiplicativo o recíproco,
para cada número. En la aritmética modular, el inverso multiplicativo de x es un número y
de modo que (x + y) ≡ 1 mod 8. Nótese que no todos los números (mod 8) poseen un
inverso multiplicativo, esta característica la analizaremos posteriormente con mayor
detenimiento, ya que su aplicación es directa y de mucha importancia en muchos de los
algoritmos criptográficos de llave pública.
Tabla 2.1 Ejemplo de aritmética modular: (a) Adición módulo 8 y (b) Multiplicación módulo 8.
+
0
1
2
3
4
5
6
7
+
0
1
2
3
4
5
6
7
0
0
1
2
3
4
5
6
7
0
0
0
0
0
0
0
0
0
1
1
2
3
4
5
6
7
0
1
0
1
2
3
4
5
6
7
2
2
3
4
5
6
7
0
1
2
0
2
4
6
0
2
4
6
3
3
4
5
6
7
0
1
2
3
0
3
6
1
4
7
2
5
4
4
5
6
7
0
1
2
3
4
0
4
0
4
0
4
0
4
5
5
6
7
0
1
2
3
4
5
0
5
2
7
4
1
6
3
6
6
7
0
1
2
3
4
5
6
0
6
4
2
0
6
4
2
7
7
0
1
2
3
4
5
6
7
0
7
6
5
4
3
2
1
(a)
(b)
Propiedades de la aritmética modular
Defínase el conjunto Zn como el conjunto de enteros no negativos menores que n:
Z n = {0, 1, K, (n − 1)}
(2.8)
A (2.8) se le conoce como el conjunto de residuos módulo n. Si se realizan
operaciones de aritmética modular dentro de este conjunto, se mantienen las propiedades
para los enteros en Zn, listadas en la tabla 2.2.
22
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
Tabla 2.2 Propiedades de la aritmética modular dentro del conjunto Zn.
Propiedad
Expresión
Leyes conmutativas
Leyes asociativas
Leyes distributivas
Identidad
Inverso aditivo (−w)
(w + x) mod n = (x + w) mod n
(w × x) mod n = (x × w) mod n
[ (w + x) + y ] mod n = [ w + (x + y) ] mod n
[ (w × x) × y ] mod n = [ w × (x × y) ] mod n
[ (w × (x × y) ] mod n = [(w × x) × (w × y) ] mod n
(0 + w) mod n = w mod n
(1 × w) mod n = w mod n
Para cada w ∈ Zn, entonces existe z de modo que w + z ≡ 0 mod n.
Inverso aditivo e inverso multiplicativo
Existe una peculiaridad de la aritmética modular que la sitúa aparte de la aritmética
ordinaria. Primero, como en la aritmética ordinaria, podemos escribir lo siguiente:
si (a + b) ≡ (a + c) mod n entonces b ≡ c mod n
(2.9)
La ecuación (2.9) es consistente con la existencia del inverso aditivo. Al sumar el
inverso aditivo de a a ambos lados de la ecuación obtenemos
((− a ) + a + b) ≡ ((− a ) + a + c ) mod n
b ≡ c mod n
Sin embargo, la siguiente sentencia sólo es verdadera cuando se cumple la
condición adjunta:
si ( a × b) ≡ ( a × c) mod n entonces b ≡ c mod n
si a es relativamente primo a n
(2.10)
Para comprobar esto, considérese un ejemplo en el cual la condición no se cumple,
6 × 3 = 18 = 2 mod 8
6 × 7 = 42 = 2 mod 8
Sin embargo, 3 ≠ 7 mod 8
23
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
La razón de este extraño fenómeno, mencionado anteriormente al analizar la tabla
2.1(b), es que al aplicar un multiplicador a al conjunto de números en Zn para cualquier
módulo n en general, fallará en producir un conjunto de residuos completo; esto si y sólo si
a y n poseen factores en común. Esto se puede observar claramente en la tabla 2.1(b) en las
filas correspondientes a los números 2, 4 y 6; estos números tienen factores en común con
8, es decir, que para a = { 2, 4, 6 } se tiene que mcd(a, 8) ≠ 1. En otras palabras, lo anterior
significa que para un conjunto Zn, no todos sus elementos poseerán un inverso
multiplicativo, sino solamente aquellos que cumplan la condición mcd(a, n) = 1. Una
particularidad de este fenómeno se presenta cuando n es un número primo, en cuyo caso
todos los elementos de Zn poseerán un inverso multiplicativo; esto se muestra en la tabla
2.3 para n = 11:
Tabla 2.3 Existencia de inverso multiplicativo en la multiplicación módulo un número primo.
+
0
1
2
3
4
5
6
7
8
9
10
0
0
0
0
0
0
0
0
0
0
0
0
1
0
1
2
3
4
5
6
7
8
9
10
2
0
2
4
6
8
10
1
3
5
7
9
3
0
3
6
9
1
4
7
10
2
5
8
4
0
4
8
1
5
9
2
6
10
3
7
5
0
5
10
4
9
3
8
2
7
1
6
6
0
6
1
7
2
8
3
9
4
10
8
7
0
7
3
10
6
2
9
5
1
8
4
8
0
8
5
2
10
7
4
1
9
6
3
9
0
9
7
5
3
1
10
8
6
4
2
10
0
10
9
8
7
6
8
4
3
2
1
Estos conceptos nos permitirán añadir una propiedad del inverso multiplicativo.
Tabla 2.4 Propiedad del inverso multiplicativo en la aritmética modular.
Propiedad
Expresión
–1
Inverso multiplicativo (w )
Para cada w ∈ Zp, existe z de modo que w × z ≡ 1 mod p.
24
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
Debido a que w siempre será relativamente primo a p, si multiplicamos todos los
elementos de Zp por w, los residuos resultantes incluirán todos los elementos de Zp sólo que
permutados en posición. De esta manera, al menos un residuo tendrá el valor de 1. Por lo
tanto, siempre existirá un número en Zp que multiplicado por w, de como resultado 1. Este
número es el inverso multiplicativo de w, y se designa como w–1. Por lo tanto, la ecuación
2.10 es consistente con la existencia de un inverso multiplicativo. Al multiplicar ambos
lados de la ecuación 2.10 por el inverso multiplicativo de a, se tiene
((a −1 ) × a × b) ≡ ((a −1 ) × a × c) mod n
b ≡ c mod n
2.1.3 Teoremas de Fermat y de Euler
Dos teoremas que juegan un papel importante en la criptografía de llave pública son
el teorema de Fermat y el teorema de Euler [3, 8, 12].
Teorema de Fermat
El teorema de Fermat declara lo siguiente: Si p es un número primo y a es un entero
positivo no divisible entre p, entonces
a p −1 ≡ 1 mod p
(2.11)
Para una prueba de este teorema véase [3]. Una forma alternativa útil de este
teorema es: Si p es un número primo y a es cualquier entero positivo, entonces
a p ≡ a mod p
(2.12)
Función de Euler
Antes de presentar el teorema de Euler, necesitamos introducir una cantidad
importante en la teoría de números, referida como la función de Euler y escrita como φ(n),
25
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
la cual es el número de enteros positivos menores que n y relativamente primos a n. La
tabla 2.5 lista todos los primeros 30 valores de φ(n).
Tabla 2.5 Algunos valores de la función de Euler φ(n).
n
φ(n)
n
φ(n)
n
φ(n)
1
1
11
10
21
12
2
1
12
4
22
10
3
2
13
12
23
22
4
2
14
6
24
8
5
4
15
8
25
20
6
2
16
8
26
12
7
6
17
16
27
18
8
4
18
6
28
12
9
6
19
18
29
28
10
4
20
8
30
8
Para un número primo p queda claro que
φ ( p) = p − 1
(2.13)
Suponiendo que tenemos dos números primos p y q. Entonces, para n = pq,
φ (n) = φ ( pq) = φ ( p) × φ (q) = ( p − 1)× (q − 1)
(2.14)
Teorema de Euler
El teorema de Euler declara que para cada a y n que son relativamente primos,
aφ ( n ) ≡ 1 mod n
26
(2.15)
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
Una forma alternativa de este teorema es también útil:
aφ ( n )+1 ≡ a mod n
(2.16)
Este teorema tiene aplicación directa en la demostración de la validez de algoritmos
como lo es el RSA [3], así como también en el planteamiento del problema del logaritmo
discreto (DLP), como se verá más adelante en este capítulo.
2.1.4 Probando si un número es primo
Método de Lehmann
No existe una forma sencilla y eficiente a la vez, para determinar si un número
grande es primo o no lo es. Si un número p es primo, entonces la ecuación
x 2 ≡ 1 (mod p)
sólo tiene dos soluciones, siendo éstas x ≡ 1 y x ≡ –1. El teorema puede ser expuesto en
modo diferente: si existen soluciones a x2 ≡ 1 (mod n) además de ±1, entonces n no es un
número primo. El método de Lehmann [11] es uno de los métodos más sencillos para saber
si un número p es o no primo. El algoritmo se muestra a continuación:
PRIMO (a, n)
1.
Escoger un número aleatorio a < p
2.
Calcular b = a(p-1)/2(mod p)
3.
Si b ≠ 1 (mod p) y b ≠ -1 (mod p), p no es primo
4.
Si b ≡ 1 (mod p) o b ≡ -1 (mod p), la probabilidad de que p
sea primo es igual o superior al 50%
Repitiendo el algoritmo n veces, la probabilidad de que p supere la prueba y sea
compuesto – es decir, no primo – será de 1 contra 2n.
27
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
Método de Rabin – Miller [13, 14]
A continuación se muestra el algoritmo propuesto por Miller y Rabin para
probar la primalidad de un número grande. Los parámetros de entrada a este algoritmo son
un número n, del cual se desea conocer si es primo o no, y un entero a menor que n. Si la
función PRIMO devuelve un valor TRUE, entonces n definitivamente no es un número
primo; si PRIMO devuelve un valor FALSE, entonces n podría ser primo.
PRIMO (a, n)
5.
Sea bk bk–1 … b0 la representación binaria del número (n–1)
6.
d ← 1
7.
para i ← k hasta 0
8.
hacer x ← d
9.
d ← (d * d) mod n
10.
si d = 1 y x ≠ 1 y x ≠ n–1
11.
entonces devuelve TRUE
12.
si bi = 1
13.
entonces d ← (d * a) mod n
14.
si d ≠ 1
15.
entonces devuelve TRUE
16.
devuelve FALSE
Un análisis del algoritmo nos muestra que en las líneas 3 a la 9 se calcula d como el
valor an–1 mod n. Se sabe por el teorema de Fermat en la ecuación 2.11 que an–1 ≡ 1 mod n
si n es un número primo. Por lo tanto, si el resultado final para d no es un valor de 1,
nosotros sabemos que n no es un número primo, y se devuelve el valor TRUE. Ahora si
consideramos la prueba en la línea 6, debido a que (n – 1) ≡ −1 mod n, aquí se prueba si x2
≡ 1 mod n con una raíz diferente de ±1. Por el teorema mencionado anteriormente, esta
condición se mantiene sólo si n no es un número primo. Por lo tanto, si la prueba es
aprobada, el algoritmo PRIMO devuelve un valor TRUE.
Así que si PRIMO devuelve un valor TRUE, el número n no es un número primo.
Se puede demostrar que dado un número impar n que no es primo y eligiendo de manera
aleatoria un entero a < n, la probabilidad de que PRIMO devuelva FALSE es menor que
0.5. Esto nos da un fundamento para determinar si un entero impar n es primo alcanzando
un grado razonable de seguridad. El procedimiento es el siguiente: repetidamente llamar a
28
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
la función PRIMO empleando valores de a elegidos al azar. Si, en cualquiera de estas
llamadas, PRIMO devuelve TRUE, entonces n no es un número primo. Si PRIMO devuelve
un valor FALSE s veces consecutivas, entonces la probabilidad de que n sea un número
primo es menor que 1 – 2–s. Por lo tanto, para un número s lo suficientemente grande,
podremos estar confiados de que el número n es primo.
Para números pequeños y en aplicaciones donde se necesita de extrema seguridad
resulta apropiado, si también se poseen los recursos de cómputo adecuados, realizar una
prueba al 100% en busca de probar si un número es o no un número primo. Esta prueba
matemática consiste en simplemente dividir un número impar n entre cada uno de los
números entre 3 y n–1; si el número es primo todos los residuos de las divisiones darán
como resultado valores diferentes de 0. En el caso de nuestro criptosistema al tratarse de
números pequeños y con objetivo de aumentar la seguridad del mismo, se optó por la
implementación de este algoritmo, el cual se muestra en código C++ a continuación:
BOOL es_primo(INT_32BITS n)
{
if (n == 0)
return(FALSE);
else if (n <= 2)
return(FALSE);
else if (n % 2 == 0)
return(FALSE);
for (INT_32BITS i=3; i<n ; i+=2)
if (n % i == 0)
return(FALSE);
return(TRUE);
}
Consideraciones prácticas
A efectos prácticos, el algoritmo que se suele emplear para generar aleatoriamente
un número primo p es el siguiente:
1. Generar un número aleatorio p de n bits.
2. Poner a uno el bit más significativo – garantizamos que el número es de n bits – y el
menos significativo – debe ser impar para poder ser primo.
29
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
3. Intentar dividir p entre una tabla de primos precalculados (usualmente aquellos que
sean menores que 2000). Esto elimina gran cantidad de números no primos de una
forma muy rápida. Basta decir que el 99.8% de los números impares no primos es
divisible por algún número primo menor que 2000.
4. Ejecutar la prueba de Rabin – Miller sobre p como mínimo cinco veces.
5. Si la prueba falla, incrementar p en dos unidades y volver al paso 3.
2.1.5 Algoritmo de Euclides
Una de las técnicas básicas de la teoría de números es el algoritmo de Euclides [3, 8,
12], el cual es un sencillo procedimiento para determinar el máximo común divisor de dos
enteros positivos. Una forma extendida del algoritmo de Euclides determina el máximo
común divisor de dos enteros positivos, y si estos números son relativamente primos,
también se obtiene el inverso multiplicativo de uno con respecto al otro.
EUCLID (d, f)
1.
X ← f; Y ← d
2.
si Y = 0 devuelve X = gcd(d, f)
3.
R = X mod Y
4.
X ← Y
5.
Y ← R
6.
goto 2
Es aceptable el restringir el algoritmo a los enteros positivos, es decir, mcd(a, b) =
mcd(|a|, |b|). Por ejemplo, para encontrar el máximo común divisor de 1970 y 1066, el
algoritmo obtiene consecutivamente los resultados mostrados en la tabla 2.6. Este proceso
siempre tendrá un final. Si no fuera así, se obtendría una secuencia infinita de enteros
positivos, cada uno estrictamente menor que el anterior, y esto es obviamente imposible.
Si mcd(d, f) = 1, entonces d posee un inverso multiplicativo módulo f. Esto es, para
un entero positivo d < f, existe un d–1 < f de modo que dd–1 = 1 mod f. El algoritmo de
Euclides es extendido a continuación de modo que, además de calcular el mcd(d, f), si este
es 1, el algoritmo también devuelve el inverso multiplicativo de d.
30
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
Tabla 2.6 Cálculo del máximo común divisor por medio del algoritmo de Euclides.
X
1970
1066
904
162
94
68
26
16
10
6
4
Y
1066
904
162
94
68
26
16
10
6
4
2
R
904
162
94
68
26
16
10
6
4
2
0
EXTENDED EUCLID (d, f)
1.
(X1, X2, X3) ← (1, 0, f); (Y1, Y2, Y3) ← (0, 1, d)
2.
si Y3 = 0 devuelve X3 = gcd(d, f); no existe inverso
3.
si Y3 = 1 devuelve Y3 = gcd(d, f); Y2 = d–1 mod f
4.
Q = ⎣X3/Y3⎦
5.
(T1, T2, T3) ← (X1 – QY1, X2 – QY2, X3 – QY3)
6.
(X1, X2, X3) ← (Y1, Y2, Y3)
7.
(Y1, Y2, Y3) ← (T1, T2, T3)
8.
goto 2
La tabla 2.7 es un ejemplo de la ejecución de este algoritmo. Se muestra el cálculo
del máximo común divisor de 550 y 1769, y debido a que el resultado obtenido es mcd(550,
1769) = 1, se demuestra que bajo esta condición este algoritmo calcula también el inverso
multiplicativo.
Tabla 2.7 Cálculo del máximo común divisor e inverso multiplicativo por medio del algoritmo
extendido de Euclides.
Q
3
4
1
1
1
1
1
4
---
X1
1
0
1
-4
5
-9
14
-23
37
X2
0
1
-3
13
-16
29
-45
74
-119
X3
1769
550
119
74
45
29
16
13
3
Y1
0
1
-4
5
-9
14
-23
37
-171
Y2
1
-3
13
-16
29
-45
74
-119
550
31
Y3
550
119
74
45
29
16
13
3
1
T1
1
-4
5
-9
14
-23
37
-171
---
T2
-3
13
-16
29
-45
74
-119
550
---
T3
119
74
45
29
16
13
3
1
---
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
De la tabla 2.7 se puede apreciar que mcd(550, 1769) = 1, y el inverso
multiplicativo es 550, esto es, (550×550) = 1 mod 1769. A continuación se muestra el
código C++ de la implementación de este algoritmo:
INT_32BITS inverso_multiplicativo(INT_32BITS a, INT_32BITS modulo)
{
INT_32BITS x1 = 1, x2 = 0, x3 = modulo;
INT_32BITS y1 = 0, y2 = 1, y3 = a;
INT_32BITS t1, t2, t3;
for(;;)
{
if (y3 == 0) return -1;
if (y3 == 1) return y2;
int q = x3 / y3;
t1 = x1 - q * y1;
t2 = x2 - q * y2;
t3 = x3 - q * y3;
x1 = y1;
x2 = y2;
x3 = y3;
}
}
y1 = t1;
y2 = t2;
y3 = t3;
Para calcular el inverso multiplicativo de un número módulo n, tanto el teorema de
Euler como el algoritmo de Euclides pueden ser extendidos a un problema más específico y
útil para propósitos de esta tesis, esto es, si mcd(a, n) = 1.
Utilizando el teorema de Euler, la solución es x = (b × aφ(n)–1) mod n. Utilizando el
algoritmo de Euclides, la solución es: x = (b × (a–1 mod n)) mod n. En general, el algoritmo
de Euclides es más rápido que el teorema de Euler para el cálculo de inversos
multiplicativos, especialmente en rangos de 500 bits.
32
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
2.1.6 El teorema del residuo chino
Uno de los elementos más útiles de la teoría de números es el teorema del residuo
Chino (CRT). En esencia, el CRT enuncia que es posible el reconstruir enteros en un cierto
rango a partir de sus residuos módulo un conjunto de números relativamente primos entre
ellos. Por ejemplo, los 10 enteros en Z10 = { 0, 1, 2, …, 9 } pueden ser reconstruidos a partir
de sus dos residuos módulo 2 y 5 (los factores relativamente primos de 10). Digamos que
los residuos conocidos de un dígito decimal x son r2 = 0 y r5 = 3; esto es, x mod 2 = 0 y x
mod 5 = 3. Entonces, x es un entero par en Z10 cuyos residuos, en su división entre 5, es 3.
La única solución es x = 8.
EL CRT puede ser enunciado en diversas formas. Aquí se presenta una formulación
que es más útil para los propósitos de este trabajo de tesis. Entonces, si tenemos
k
M = ∏ mi
(2.17)
i =1
en donde mi es un conjunto de números relativamente primos entre ellos; esto es que
mcd(mi, mj) = 1 para 1 ≤ i, j ≤ k, e i ≠ j. Podemos representar cualquier entero en ZM por un
conjunto de k números cuyos elementos están en Z mi empleando las siguientes
correspondencias:
A ↔ (a1 , a2 ,..., ak )
(2.18)
en donde A ∈ ZM, ai ∈ Z mi , y ai = A mod mi para 1 ≤ i ≤ k. El CRT hace dos afirmaciones:
1. El mapeo de la ecuación 2.18 es una correspondencia uno a uno (llamada biyección)
entre ZM y el producto cartesiano Z m1 × Z m2 × … × Z mk . Esto es, para cada entero A
en donde 0 ≤ A ≤ M, existe un conjunto único (a1, a2, …, ak) con 0 ≤ ai < mi que lo
representa, y para cada conjunto (a1, a2, …, ak) existe una única A en ZM.
33
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
2. Las operaciones realizadas en los elementos de ZM pueden ser realizadas de forma
equivalente sobre los correspondientes conjuntos (a1, a2, …, ak) al realizar la
operación de manera independiente en cada posición de las coordenadas en el
sistema apropiado.
Esta segunda afirmación puede ser enunciada como:
si
A ↔ ( a1 , a2 , K, ak ) ; B ↔ ( b1 , b2 , K, bk
)
entonces
( A + B ) mod M ↔ ((a1 + b1 ) mod m1 ,L, (ak + bk ) mod mk )
( A − B ) mod M ↔ ((a1 − b1 ) mod m1 ,L, (ak − bk ) mod mk )
( A × B ) mod M ↔ ((a1 × b1 ) mod m1 ,L, (ak × bk ) mod mk )
Una de las más útiles aplicaciones del teorema del residuo Chino es que proporciona
un método para manipular números potencialmente grandes módulo M en términos de un
conjunto de números más pequeños. Esto puede volverse realmente útil cuando M es un
número con una cantidad de dígitos mayor o igual a los 150.
Por ejemplo, para representar 814 mod 2057 como un par de números módulo 17 y
121, definimos
m1 = 17
m2 = 121
M = 2057
A = 814
Tenemos también M1 = 121 y M2 = 17. Empleando el algoritmo extendido de
Euclides, calculamos M1–1 = 9 mod m1 y M2–1 = 57 mod m2. (Nótese que sólo se necesita
calcular cada Mi y cada Mi–1 en esta ocasión). Tomando residuos módulo 17 y 121, nuestra
representación de 814 es (15, 88), debido a que 814 mod 17 = 15 y 814 mod 121 = 88.
34
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
Ahora, suponiendo que se quisiera añadir 1436 a 814 módulo 2057. Primero,
calculamos también (1436) ↔ (1436 mod 17, 1436 mod 121) = (8, 105). Entonces
añadimos (8, 105) + (15, 88), esto es, (8 + 15) mod 17 = 6 y (105 + 88) mod 121 = 72; esto
da como resultado (6, 72). Para verificar que esto es correcto se calcula
(6, 72) ↔ a1M 1M 1−1 + a2 M 2 M 2 −1 mod M
= [(6 )(121)(9 ) + (72 )(17 )(57 )]mod 2057
= 76302 mod 2057
= 193
y se compara con el resultado obtenido directamente de (814 + 1436) mod 2057 = 2250
mod 2057 ≡ 193.
2.1.7 Logaritmos discretos
Los logaritmos discretos son fundamentales para una variedad de algoritmos de
criptografía de llave pública, incluyendo entre estos el esquema de intercambio de llaves de
Diffie – Hellman y el algoritmo de firma digital (DSA).
Las potencias de un entero, módulo n
Recordando del teorema de Euler, ecuación 2.15, de que para cada a y n que son
relativamente primos aφ(n) ≡ 1 mod n, donde φ(n), el coeficiente de Euler, es el número de
enteros positivos menores que n que son relativamente primos a n. Si consideramos la
expresión más general
a m ≡ 1 mod n
(2.19)
Si a y n son relativamente primos, entonces existe al menos un entero m que
satisfaga la ecuación 2.19, a saber, m = φ(n). El menor exponente positivo m, para el cual la
relación 2.19 se mantiene, es conocido de varias maneras:
35
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
•
El orden de a (mod n)
•
El exponente al cual a pertenece (mod n)
•
La longitud del periodo generado por a
Para ver este último punto consideremos las potencias de 7, módulo 19:
71 =
7 mod 19
7 2 = 49 = 2 ×19 + 11 =
11 mod 19
7 3 = 343 = 18 × 19 + 1 =
1 mod 19
7 = 2401 = 126 ×19 + 7 =
7 mod 19
4
7 = 16807 = 884 × 19 + 11 = 11 mod19
5
No hay razón para continuar debido a que la secuencia se está repitiendo. Esto
puede ser probado al observar que 73 = 1 (mod 19) y entonces 73+j = 737j = 7j (mod 19), y
por lo tanto si dos potencias de 7 cuyos exponentes difieren por 3 (o por un múltiplo de 3)
serán congruentes módulo 19. En otras palabras, la secuencia es periódica, y la longitud del
periodo es el exponente positivo más pequeño m de modo que 7m = 1 (mod 19).
La tabla 2.8 muestra todas las potencias de a, módulo 19, para todos los positivos a
< 19. La longitud de la secuencia para cada valor de base se indica por medio del
sombreado. Nótese lo siguiente:
1. Todas las secuencias terminan en 1. Esto es consistente con el razonamiento de los
anteriores párrafos.
2. La longitud de la secuencia divide a φ(19) = 18. Esto es, un número íntegro de
secuencias ocurre en cada fila de la tabla.
3. Algunas de las secuencias son de longitud 18. En este caso, se dice que el entero
base a genera (vía potencias) el conjunto de enteros diferentes de 0 módulo 19.
Cada uno de estos enteros es denominado una raíz primitiva del módulo 19.
36
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
Tabla 2.8 Potencias de enteros, módulo 19.
a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
a2
1
4
9
16
6
17
11
7
5
5
7
11
17
6
16
9
4
1
a3
1
8
8
7
11
7
1
18
7
12
1
18
12
8
12
11
11
18
a4
1
16
5
9
17
4
7
11
6
6
11
7
4
17
9
5
16
1
a5
1
13
15
17
9
5
11
12
16
3
7
8
14
10
2
4
6
18
a6
1
7
7
11
7
11
1
1
11
11
1
1
11
7
11
7
7
1
a7
1
14
2
6
16
9
7
8
4
15
11
12
10
3
13
17
5
18
a8
1
9
6
5
4
16
11
7
17
17
7
11
16
4
5
6
9
1
a9
1
18
18
1
1
1
1
18
1
18
1
18
18
18
18
1
1
18
a10
1
17
16
4
5
6
7
11
9
9
11
7
6
5
4
16
17
1
a11
1
15
10
16
6
17
11
12
5
14
7
8
2
13
3
9
4
18
a12
1
11
11
7
11
7
1
1
7
7
1
1
7
11
7
11
11
1
a13
1
3
14
9
17
4
7
8
6
13
11
12
15
2
10
5
16
18
a14
1
6
4
17
9
5
11
7
16
16
7
11
5
9
17
4
6
1
a15
1
12
12
11
7
11
1
18
11
8
1
18
8
12
8
7
7
18
a16
1
5
17
6
16
9
7
11
4
4
11
7
9
16
6
17
5
1
a17
1
10
13
5
4
16
11
12
17
2
7
8
3
15
14
6
9
18
a18
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
De una manera más general, se puede decir que el exponente más alto posible para
el cual un número puede pertenecer (mod n) es φ(n). Si un número es de este orden, es
referido como una raíz primitiva de n. La importancia de este concepto es que si a es una
raíz primitiva de n, entonces sus potencias
a, a 2 , K , a φ ( n )
son todas distintas entre ellas y son relativamente primas a n. En particular, para un número
primo p, si a es una raíz primitiva de p entonces
a, a 2 , K, a p −1
son todas distintas entre ellas (mod n). Para el número primo 19, sus raíces primitivas son
2, 3, 10, 13, 14 y 15. No todos los enteros poseen raíces primitivas. De hecho, los únicos
enteros con raíces primitivas son aquellos que son de la forma 2, 4, pα, y 2pα, en donde p es
un número primo impar.
37
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
Índices
Con números positivos reales ordinarios, la función logaritmo es la inversa de la
operación de elevar a una potencia. Una función análoga existe para la aritmética modular.
Para entender esto, revisaremos brevemente las propiedades de los logaritmos ordinarios.
El logaritmo de un número se define como la potencia a la cual algún número positivo base
(excepto 1) debe ser elevado de modo que sea igual a dicho número. Esto es, para la base x
y para un valor y,
y = z log x ( y )
Las propiedades de los logaritmos incluyen las siguientes:
log x (1) = 0
log x ( x ) = 1
log x ( yz ) = log x ( y ) + log x (z )
( )
log x y r = r × log x ( y )
Considerando una raíz primitiva para un número primo p (el argumento puede ser
desarrollado también para los números no primos). Entonces se sabe que las potencias de a
desde 1 hasta (p – 1) producen cada entero desde 1 hasta (p -1) exactamente una vez.
También se sabe que cualquier entero b puede ser expresado en la forma
b ≡ r mod p,
donde 0 ≤ r ≤ ( p − 1)
por definición de la aritmética modular. Se sigue que para cualquier entero b y una raíz
primitiva a de un número primo p, uno puede encontrar un único exponente i tal que
b ≡ a i mod p,
donde 0 ≤ i ≤ ( p − 1)
38
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
El exponente i es conocido como el índice de un número b para la base a (mod p).
Esto se expresa como inda,p(b). Nótese que
ind a , p (1) = 0, porque a 0 mod p = 1 mod p = 1
ind a , p (a ) = 1, porque a1 mod p = a
Ahora si consideramos
x=a
y=a
xy = a
ind a , p ( x )
ind a , p ( y )
mod p
mod p
ind a , p ( xy )
mod p
Empleando las leyes de la multiplicación modular,
a
ind a , p ( xy )
(
= (a
mod p = a
ind a , p ( x )
)( ( ) mod p )
( )
)mod p
mod p a
ind a , p y
ind a , p ( x )+ ind a , p y
Ahora si consideramos el teorema de Euler, el cual declara que, para cada a y n que
son relativamente primos,
aφ ( n ) ≡ 1 mod n
Cualquier entero positivo puede ser expresado en la forma z = q + kφ(n). Por lo tanto, por el
teorema de Euler,
a z ≡ a q mod n,
si z = q mod φ (n)
Aplicando esto a la siguiente igualdad se tiene que
[
]
ind a , p ( xy ) = ind a , p ( x ) + ind a , p ( y ) mod φ ( p )
y generalizando,
39
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
( ) [
]
ind a , p y r = r × ind a , p ( y ) mod φ ( p )
Esto demuestra la analogía entre los logaritmos ordinarios y los índices. Por esta
razón, estos últimos son denominados logaritmos discretos. Es muy importante tener
siempre en mente que un logaritmo discreto único, módulo m base a, existe sólo si a es una
raíz primitiva de m.
Cálculo de logaritmos discretos
Considere la ecuación
y = g x mod p
Dado g, x y p, es un asunto directo y sencillo el calcular y. En el peor escenario, uno
tendría que realizar repetidas multiplicaciones de x, y existen algoritmos para lograr una
gran eficiencia en esto. Sin embargo, dados y, g, y p, es, en general, muy difícil calcular x
(es decir, calcular el logaritmo discreto). El grado de dificultad parece ser del mismo orden
de magnitud que la factorización de números primos requerido por el algoritmo RSA. Se ha
encontrado que el algoritmo más rápido para obtener el logaritmo discreto módulo un
número primo está en el orden de:
e
⎛⎜ (ln p ) 13 ln (ln p ) ⎞⎟
⎝
⎠
2
3
lo cual es totalmente impráctico para números primos grandes.
2.1.8 Campo finito GF – Galois Field
Un campo finito, también llamado Galois Field GF [10], es un campo con un orden
finito (número de elementos). El orden de un campo finito siempre es un número primo o
potencia de un número primo. Por cada potencia de un número primo, existe exactamente
un campo finito GF(pn), comúnmente escrito como Fp n .
40
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
GF(p) es llamado campo de números primos de orden p y es el campo de residuos
módulo p, donde a los p elementos se les llama por 0, 1,…, p–1. a = b en GF(p) significa lo
mismo que a ≡ b (mod p).
2.1.9 Algoritmo para el cálculo de (ab mod n)
Un algoritmo muy utilizado para la implementación de criptosistemas de llave
pública es la exponenciación módulo un número n [3]. El pseudo código de un algoritmo de
este tipo sería:
ABMODN (a, b, n)
1.
c ← 0; d ← 1
2.
para i ← k hasta 0
3.
hacer c ← 2 * c
4.
d ← (d * d) mod n
5.
si bi = 1
6.
entonces c ← c + 1
7.
d ← (d * a) mod n
La variable c se incluyó sólo por propósitos didácticos. El valor final de c es el
exponente. A continuación se muestra el algoritmo en código C++.
// Función para calcular a^b(mod n)
ENTERO_32BITS abmodn (ENTERO_32BITS a, ENTERO_32BITS b, ENTERO_32BITS n)
{
ENTERO_32BITS d = 1;
ENTERO_32BITS aux = NUMERO_MAYOR_HEX;
for (short i=NUMERO_BITS-1; i>=0; i--)
{
d = MODULO((d * d), n);
if ((aux>>=1) & b)
d = MODULO((d * a), n);
}
return d;
}
41
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
2.2 Criptografía y números aleatorios
Los algoritmos de llave pública, debido a su mayor orden de complejidad, suelen ser
empleados en conjunto con algoritmos de llave privada de la siguiente forma: el mensaje
primero se codifica empleando un algoritmo simétrico y la llamada clave de sesión, que
será diferente en cada ocasión [11]. Es la clave de sesión la que se codifica empleando
criptografía asimétrica. La única manera de que estas claves sean seguras es que no exista
ningún tipo de dependencia entre una clave y la siguiente, esto es, que sean aleatorias. De
aquí surge el interés por los números aleatorios en criptografía.
2.2.1 Tipos de secuencias aleatorias
Secuencias pseudoaleatorias
En realidad es casi del todo imposible generar secuencias auténticamente aleatorias
en una computadora, puesto que estas máquinas son – al menos en teoría – completamente
deterministas. Todos los generadores pseudoaleatorios producen secuencias finitas y
periódicas de números empleando operaciones aritméticas y/o lógicas. Lo único que
podremos conseguir es que estas secuencias sean lo más largas posible antes de comenzar a
repetirse y que superen las pruebas estadísticas de aleatoriedad. En este sentido podríamos
hablar de:
Secuencias estadísticamente aleatorias: Secuencias que superan las pruebas
estadísticas de aleatoriedad.
Un generador congruencial lineal cumple esta propiedad, pero en criptografía será
del todo inútil, debido a que cada valor de la secuencia se emplea como semilla para
calcular el siguiente, lo cual nos permite conocer toda la serie a partir de un único valor.
Supongamos que tenemos un sistema que se basa en emplear claves aleatorias para cada
sesión y usamos un generador de este tipo. Bastaría con que una de las claves quedara
comprometida para que todas las comunicaciones – pasadas y futuras – pudieran ser
42
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
descifradas sin problemas. Incluso se ha demostrado que conociendo únicamente un bit de
cada valor de la secuencia, ésta puede ser recuperada completamente con una cantidad
relativamente pequeña de valores.
Secuencias criptográficamente aleatorias
El problema de las secuencias estadísticamente aleatorias, y lo que las hace poco
útiles en criptografía, es que son completamente predecibles. Definiremos, por tanto:
Secuencias criptográficamente aleatorias: Para que una secuencia pseudoaleatoria
sea criptográficamente aleatoria, ha de cumplir la propiedad de ser impredecible. Esto
quiere decir que debe ser computacionalmente intratable el problema de averiguar el
siguiente número de la secuencia, teniendo total conocimiento acerca de todos los números
anteriores y del algoritmo de generación empleado.
Existen generadores pseudoaleatorios criptográficamente resistentes que cumplen
esta propiedad. Sin embargo no son suficientes para nuestros propósitos, debido a que se
necesita una semilla para inicializar el generador. Si un atacante lograra averiguar la semilla
que estamos empleando en un momento dado, podría de nuevo comprometer nuestro
sistema. Necesitamos para ella valores realmente impredecibles, de forma que nuestro
adversario no pueda averiguarlos ni tratar de simular el proceso de generación que nosotros
hemos llevado a cabo. Necesitamos, pues, valores auténticamente aleatorios.
Secuencias totalmente aleatorias
Como ya se ha dicho antes, no existe la aleatoriedad cuando se habla de
computadoras. En realidad se puede decir que no existen en el Universo sucesos cien por
cien aleatorios. En cualquier caso, y a efectos prácticos, consideraremos un tercer tipo de
secuencias pseudoaleatorias:
43
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
Secuencias aleatorias: Diremos que una secuencia es totalmente aleatoria (o
simplemente aleatoria) si no puede ser reproducida de manera fiable.
Llegados a este punto parece claro que nuestro objetivo no va a ser generar
secuencias aleatorias puras, sino más bien secuencias impredecibles e irreproducibles. Sería
suficiente, pues, con emplear un generador criptográficamente aleatorio alimentado por una
semilla totalmente aleatoria.
2.2.2 Generación de secuencias criptográficamente aleatorias
Para poder obtener secuencias a la vez impredecibles e irreproducibles, haremos uso
de generadores de secuencias criptográficamente aleatorias, en conjunto con algún
mecanismo de recolección de bits aleatorios, que nos va a permitir inicializar la semilla del
generador. Un esquema de este tipo sería seguro siempre que se proteja adecuadamente la
semilla empleada. Se ilustrarán primero algunos mecanismos para obtener los bits de la
semilla para posteriormente centrarnos en los generadores criptográficamente aleatorios.
Obtención de bits aleatorios
Como se menciono anteriormente, las operaciones aritméticas y lógicas que realiza
una computadora son completamente deterministas. Sin embargo, las computadoras, como
se verá posteriormente en esta sección, poseen elementos menos deterministas que pueden
ser útiles para nuestros propósitos. Para obtener n bits aleatorios bastaría con que una
persona lanzara una moneda al aire n veces y nos fuera diciendo el resultado. En la
actualidad apenas hay computadoras que incorporen hardware específico para esta tarea,
aunque existe y sería bastante barato y sencillo incorporarlo a la arquitectura de cualquier
computadora.
Existen valores obtenidos del hardware de la computadora que suelen proporcionar
algunos bits de aleatoriedad. Parece razonable que leer en un momento dado el valor de un
reloj interno de alta precisión proporcione un resultado más o menos impredecible, por lo
44
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
que podríamos emplearlo para recolectar valores aleatorios. Diferentes pruebas han
demostrado sin embargo que mecanismos de este tipo, que pueden ser útiles en ciertas
arquitecturas y sistemas operativos, dejan de servir en otras versiones del mismo sistema o
en arquitecturas muy similares, por lo que debemos de tener mucho cuidado con esto.
Algunas veces se ha propuesto el uso de los números de serie de los componentes
físicos (hardware) de un sistema, pero recordemos que estos números tienen una estructura
muy rígida, y a veces conociendo simplemente el fabricante y la fecha aproximada de
fabricación podemos adivinar casi todos sus dígitos, por lo que van a ser demasiado
predecibles. Tampoco son útiles las fuentes públicas de información, como por ejemplo los
bits de un CD de audio, puesto que nuestros atacantes pueden disponer de ellas, con lo que
el único resto de aleatoriedad que nos va a quedar es la posición que escojamos dentro del
CD para extraer los bits.
Fuentes adecuadas de obtención de bits aleatorios
Cuando no disponemos de un elemento físico en la computadora específicamente
diseñado para producir datos aleatorios, podemos emplear algunos dispositivos
relativamente comunes en las computadoras actuales:
Tarjetas digitalizadoras de sonido o video. Un dispositivo digitalizador de audio (o
video) sin ninguna entrada conectada, siempre que tenga ganancia suficiente, capta
esencialmente ruido térmico, con una distribución aleatoria, y por lo tanto puede ser apto
para nuestros propósitos.
Unidades de Disco. Las unidades de disco presentan pequeñas fluctuaciones en su
velocidad de giro debido a turbulencias en el aire. Si se dispone de un método para medir el
tiempo de acceso de la unidad con suficiente precisión, se pueden obtener bits aleatorios de
la calidad necesaria.
45
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
Si no se dispone de una fuente fiable de bits aleatorios se puede efectuar la
combinación de varias fuentes de información menos fiables. Por ejemplo, podríamos leer
el reloj del sistema, algún identificador del hardware, la fecha y la hora local, el estado de
los registros de interrupciones del sistema, etc. Esto garantizaría que en total se ha recogido
una cantidad suficiente de bits realmente aleatorios. La mezcla de todas esas fuentes puede
proporcionarnos suficiente aleatoriedad para nuestros propósitos.
2.2.3 Generadores aleatorios criptográficamente seguros
Suponiendo que ya se tiene una cantidad suficiente de bits auténticamente aleatorios
(impredecibles e irreproducibles), se analizará un par de generadores pseudoaleatorios que
permiten obtener secuencias lo suficientemente seguras como para ser empleadas en
aplicaciones criptográficas.
Generador X9.17
Propuesto por el Instituto Nacional de Estándares Norteamericano (ANSI por sus
siglas en inglés), permite, a partir de una semilla inicial s0 de 64 bits, obtener secuencias de
valores también de 64 bits. El algoritmo para obtener cada uno de los valores de la
secuencia es el siguiente:
g n = DES (k , DES (k , t ) ⊕ S n )
g n+1 = DES (k , DES (k , t ) ⊕ g n )
donde k es una clave aleatoria reservada para la generación de cada secuencia, y t es el
tiempo en el que cada valor es generado – cuanta más resolución tenga (hasta 64 bits),
mejor –. DES(K,M) representa la codificación de M mediante el algoritmo DES,
empleando la clave K, y ⊕ representa la función XOR. Nótese que el valor k ha de ser
mantenido en secreto para que la seguridad de este generador sea máxima.
46
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
Generador Blum Blum Shub
Es quizá el algoritmo que más pruebas de resistencia ha superado, con la ventaja
adicional de su gran simplicidad, aunque es computacionalmente mucho más costoso que el
algoritmo X9.17. Consiste en escoger dos números primos grandes, p y q, que cumplan la
siguiente propiedad:
p ≡ 3 mod 4
q ≡ 3 mod 4
Sea entonces n = pq. Escogemos un número x aleatorio primo relativo con n, que
será nuestra semilla inicial. Al contrario que x, que debe ser mantenido en secreto, n puede
ser pública. Calculamos los valores si se cumple lo de la serie de la siguiente forma:
s0 = x 2 mod n
2
si +1 = si mod n
Hay que tener cuidado de emplear únicamente como salida unos pocos de los bits
menos significativos de cada si. De hecho, si elegimos no más que log2(log2(si)) bits en
cada caso podemos asegurar que predecir el siguiente valor de la serie es al menos tan
difícil como factorizar n.
2.3 Esquemas de verificación compartida
El concepto original de los esquemas de verificación compartida fue inventado en
forma independiente por George Blakley y Adi Shamir en 1979 [15]. En un sistema
criptográfico normal existe una llave privada o secreta la cual, en caso de extraviarse,
imposibilitaría el acceso a la información cifrada. Esto podría ocurrir por descuido, pérdida
u olvido del responsable de la seguridad de dicha llave, o por alguna otra circunstancia
externa ajena al mismo. En algunos casos extremos, esta pérdida podría ocurrir también por
un desperfecto en una computadora, muerte de la persona responsable o incluso por robo.
47
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
El principal objetivo de la criptografía es proteger la información, no las llaves. Para
realizar esto necesitamos métodos diferentes. Son obvios los riesgos de mantener la llave
almacenada en un solo lugar, como vimos en el párrafo anterior. Una solución obvia es
almacenar simultáneamente múltiples copias de la llave en diferentes localidades, pero esto
aumenta considerablemente los problemas como lo son el riesgo de errores humanos y
robos. La búsqueda de la solución a esta problemática dio origen a los esquemas de
verificación compartida.
La idea detrás de un esquema de verificación compartida es la de dividir la llave
privada o secreta en porciones, con la finalidad de que la información pueda ser recuperada
en forma conjunta por los propietarios de dichas porciones. Shamir planteó el problema de
dividir una llave K en n partes, K1, …, Kn, de modo que:
1. El conocimiento de cualesquiera t o más partes permita que K sea fácilmente
calculable.
2. El conocimiento de cualesquiera t-1 o menos partes dejen a K completamente
indeterminada.
A tal esquema se le denomina como esquema de umbral (t, n).
Entonces, si t y n son números enteros positivos, siendo t<n, el esquema de umbral
(t, n) es un método que comparte una llave secreta K entre un grupo de participantes G, de
tal manera que cualesquiera t participantes puedan calcular el valor de K, y un grupo de t-1
participantes no lo puedan hacer.
Existe una diversidad de diferentes esquemas de verificación compartida, la cual ha
surgido como respuesta a la gran variedad de condiciones y características requeridas en
ciertas aplicaciones en particular. Héctor Hernández [10], en su tesis, realizó una
investigación de los diferentes esquemas de verificación compartida así como de los
diversos algoritmos que actualmente se consideran de relevancia en el área.
48
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
2.3.1 Esquema umbral (t, n) de Shamir
El algoritmo implementado en esta tesis, utiliza ecuaciones polinomiales en un
campo finito para construir el esquema de umbral (t, n). Este algoritmo fue propuesto
originalmente por Adi Shamir para esta aplicación [15].
Dados k puntos en un plano bidimensional (x1, y1),…, (xk, yk), siendo xi ≠ xj, sólo
existe un y sólo un polinomio p(x) de grado k-1 de modo que p(xi) = yi para toda i. Para
dividir la llave D en porciones Di, podemos elegir de modo aleatorio un polinomio de grado
k-1:
p ( x ) = a0 + a1 x + L + ak −1 x k −1
(2.20)
D1 = p(1), K, Di = p(i), K, Dn = p(n)
(2.21)
en el cual a0 = D y evaluar:
Dado un subconjunto de k de estos Di valores (incluyendo los índices), podemos
encontrar los coeficientes de p(x) por interpolación, y entonces evaluar D = p(0).
El conocimiento de exactamente k-1 de estos valores, por otro lado, no es suficiente
para poder calcular D.
Para hacer esto más claro, utilizaremos aritmética modular en lugar de aritmética
real. Al aplicar al conjunto de números enteros la operación módulo con un número primo
p, formamos un campo finito en el cual es posible la interpolación polinomial. Dado un
dato de valor entero D, elegimos un número primo p el cual es mayor tanto de D como de
n. Los coeficientes a1, …, ak-1 en q(x) se eligen de modo aleatorio de una distribución
uniforme sobre los enteros en [0, p), y los valores D1, …, Dn son calculados con la
operación módulo p.
49
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
Por ejemplo, si se tiene la llave D = 9, en un esquema de verificación compartida
(3, 5), y siendo p = 17, entonces:
1. Generamos la ecuación cuadrática con valores elegidos de modo aleatorio,
(
)
p( x) = 10 x 2 + 3x + 9 mod17
2. Calculamos las 5 porciones,
D1 = p(1) = (10 + 3 + 9) mod17 = (22) mod17 = 5 mod17
D2 = p(2) = (40 + 6 + 9 ) mod17 = (55) mod17 = 4 mod17
D3 = p(3) = (90 + 9 + 9 ) mod 17 = (108) mod17 = 6 mod17
D4 = p(4) = (160 + 12 + 9 ) mod17 = (181) mod17 = 11 mod 17
D5 = p (5) = (250 + 15 + 9 ) mod 17 = (274) mod17 = 2 mod17
3. Ahora se procederá a recuperar D a partir de un subconjunto de 3 porciones (D1, D3,
D4). Planteando las ecuaciones:
(a ⋅1 + b ⋅1 + D )mod17 = 5 mod17
(a ⋅ 3 + b ⋅ 3 + D )mod17 = 6 mod17
(a ⋅ 4 + b ⋅ 4 + D )mod17 = 11 mod17
2
2
2
Resolviendo el sistema de ecuaciones lineales se obtiene a = 10, b = 3 y D = 7.
Por lo tanto la llave original es D = 7. Se puede apreciar de manera muy clara en el
planteamiento anterior, que si sólo se tuvieran 2 porciones, el sistema de ecuaciones
lineales tendría un número infinito de soluciones, imposibilitando la recuperación de la
llave original.
50
Capítulo 2: Fundamentos teóricos de la criptografía de llave pública
Algunas de las propiedades de gran utilidad de este esquema, cuando se compara
con los métodos tradicionales de seguridad para llaves de un criptosistema, son:
1. El tamaño de cada porción no excede el tamaño de la llave original.
2. Cuando k se mantiene fija, las porciones Di pueden ser añadidas o eliminadas
dinámicamente del sistema, sin afectar a las demás.
3. Es fácil cambiar todas las porciones Di sin cambiar la llave original D; todo lo que
se necesita es un nuevo polinomio p(x). Un cambio frecuente de este tipo puede
incrementar la eficiencia y seguridad del sistema, debido a que diferentes llaves Di
no pueden ser empleadas a menos que pertenezcan al mismo polinomio p(x).
4. Al asignar a cada usuario diferentes cantidades de porciones Di, es posible
implementar un esquema jerárquico, en el cual, el número de usuarios necesarios
para recuperar la información dependerá de su importancia o jerarquía en la
organización. Por ejemplo, el director de la compañía podría tener 4 llaves
permitiéndole un acceso directo a la información, mientras que los gerentes de área
podrían tener 2, haciendo necesario la presencia de por lo menos dos de ellos para
recuperar la misma.
51
Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu
Capítulo 3
Esquema de encripción autentificada con verificación
compartida (t, n) de Hsu y Wu
3.1 Introducción
C. L. Hsu y T. C. Wu son autores de un reciente esquema de cifrado muy completo
y eficiente denominado esquema de encripción autentificada empleando verificación
compartida (t, n) [9]. Este esquema de cifrado es el adoptado en la implementación del
criptosistema desarrollado en esta tesis, por lo que será importante dejar bien establecidos
los fundamentos matemáticos sobre los cuales se encuentra definido.
El término “encripción autentificada” se refiere a un nuevo tipo de esquema de
firma digital, que proporciona recuperación del mensaje, propuesto por Nyberg y Rueppel
[16, 17]. Este esquema es una combinación de técnicas criptográficas, ya que permite
realizar de manera simultánea el cifrado de datos y la firma digital. Se puede deducir que el
uso de la encripción autentificada para obtener confidencialidad e integridad en nuestros
datos requerirá un menor ancho de banda para la transmisión de datos, comparándolo con el
enfoque directo que emplea de forma separada los esquemas de cifrado y de firma digital.
Al firmar primero y luego cifrar, cualquier firmante puede proteger un mensaje de tal forma
que sólo los receptores autorizados (o verificadores) que tengan la habilidad de descifrar el
mensaje, puedan verificar la firma digital. El esquema propuesto por Hsu y Wu integra
52
Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu
eficientemente las ideas de diseño de un esquema de encripción autentificada con un
esquema de umbral (t, n).
3.2 Descripción del esquema
El esquema se encuentra dividido en cuatro etapas: inicialización del sistema,
registro, encripción de firma y recuperación del mensaje. En la etapa de inicialización del
sistema, la autoridad del sistema (SA) define los parámetros del sistema y los hace
públicos. Después de esto, SA puede aceptar el registro solicitado por un firmante o por un
grupo de verificadores.
Para el registro del firmante, SA le genera una llave secreta y una llave pública. Para
el registro del grupo de verificadores, SA primero genera un solo par de llave secreta y
llave pública para todo el grupo. Posteriormente, emplea el esquema umbral (t, n) de
Shamir para dividir la llave secreta del grupo en n porciones, cada una de las cuales es
entregada a su respectivo verificador en el grupo a través de un canal seguro. La porción
guardada por cada uno de los verificadores se utilizará después para la recuperación del
mensaje. Por motivos de simplicidad, la llave secreta del firmante o de los verificadores
será llamada llave personal. En la etapa de encripción de firma, el firmante primero utiliza
su propia llave personal para generar la firma de un mensaje dirigido a un determinado
grupo, y luego emplea la llave pública del grupo para producir el texto cifrado de la firma,
la cual se envía al grupo de verificadores. En la etapa de recuperación del mensaje
cualesquiera t de los n verificadores en el grupo, teniendo la habilidad de descifrar el texto
cifrado de firma recibido, pueden cooperar de manera colectiva para recuperar y verificar el
mensaje sin hacer públicas sus respectivas llaves personales.
Este esquema de verificación compartida se implementó, en esta tesis, como una
aplicación de transferencia de archivos a través de una red LAN, permitiendo el envío
seguro de un archivo de manera simultánea a varios usuarios, los cuales necesitan cooperar
53
Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu
posteriormente para poder recuperar y visualizar correctamente el archivo recibido por cada
uno de ellos. Los detalles para cada una de las etapas se ilustran en las siguientes secciones.
3.2.1 Inicialización del sistema
La autoridad del sistema SA selecciona dos números primos de gran magnitud p y q,
donde q | p-1; selecciona también un generador g de orden q en GF(p), esto es,
g=h
p −1
q
mod p
(3.1)
donde 1<h<(p-1), ∀ g>1. Por último SA hace a p, q y g del dominio público (véase figura
3-1).
Figura 3-1 Etapa de inicialización del sistema del esquema de encripción autentificada con
verificación compartida (t, n) de Hsu y Wu.
En esta primera etapa del proceso sólo interviene una computadora en la red LAN, a
la cual se le ha denominado como autoridad del sistema. Esta computadora podría bien ser
54
Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu
el servidor de la red, aunque esto no es del todo necesario y la implementación final estará
realmente en función de la infraestructura LAN que se tenga disponible. Esto hace ver que
es necesaria una aplicación, realizada en lenguaje de programación de alto nivel, para la
administración de las comunicaciones y la verificación continua de la integridad y
seguridad del sistema.
3.2.2 Registro
Si A es el firmante, G = { U1, U2, …, Un } el grupo de n verificadores, e IDi ≠ 0 los
identificadores asociados a Ui. Para el registro de A, SA selecciona de modo aleatorio un
entero xA ∈ Zq* (Zq* = {a ∈ Zq | mcd(a,q) = 1} ) para que sea la llave personal de A, y
emplea el esquema de Diffie-Hellman [5] para calcular la correspondiente llave pública,
como se muestra en la figura 3-2:
y A = g x A mod p
(3.2)
Figura 3-2 Etapa de registro (a) del esquema de encripción autentificada con verificación
compartida (t, n) de Hsu y Wu.
55
Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu
Para el registro de G y todos los verificadores de G, SA selecciona de modo
aleatorio un entero xG ∈ Zq* para que sea la llave secreta de G y calcula su correspondiente
llave pública
yG = g xG mod p
(3.3)
Posteriormente, SA genera de modo aleatorio un polinomio de grado (t-1)
p (v ) = xG + a1v + a2v 2 + L + at −1v t −1 mod q
(3.4)
donde ai ∈ Zq (para i = 1, 2, …, t-1) y calcula la llave personal xi y su correspondiente llave
pública yi para cada Ui ∈ G, donde
xi = p( IDi ),
yi = g xi mod p
(3.5)
Por último, SA entrega cada llave personal a su dueño (firmante o verificador) a
través de un canal seguro y da a conocer todas las llaves públicas. Existen varios métodos
apropiados para hacer pública cierta información en una red LAN. Una de ellas podría ser
el envío de la misma a cada uno de los participantes; otra sería depositarla en un directorio
de acceso público en la red. Nótese que SA no guarda algún parámetro secreto una vez que
la etapa de registro ha finalizado.
En este segundo paso de la etapa de registro intervienen n+2 computadoras de la
red, la autoridad del sistema (SA), el firmante y los n verificadores (G). De aquí se puede
observar la necesidad de una segunda aplicación en lenguaje de alto nivel que administre:
(1) el proceso de encripción de firma que estará en la computadora firmante, y (2) el
proceso de descifrado el cual será el mismo para cada una de las computadoras del grupo G
de verificadores (véase figura 3-3).
56
Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu
Figura 3-3 Etapa de registro (b) del esquema de encripción autentificada con verificación
compartida (t, n) de Hsu y Wu.
3.2.3 Encripción de firma
Supongamos que el firmante A quiere enviar de manera segura un mensaje M ∈ Zp a
los verificadores de G, en donde M contiene suficiente redundancia para una posterior
verificación cuando sea recuperada. Primero, A selecciona de modo aleatorio un entero k ∈
Zq* y emplea el esquema de firma AMV [18], el cual es una modificación del esquema de
firma de ElGamal [19], para genera la firma (r, s) de M, en donde
r = Mg − k mod p
s = k − x A r mod q
(3.6)
Entonces A selecciona de modo aleatorio un entero d ∈ Zp* y genera el texto cifrado
de firma (c1, c2, c3) para M, en donde
57
Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu
c1 = g d mod p
c2 = ryG
−d
mod p
(3.7)
c3 = s
Finalmente, SA envía el texto cifrado de firma (c1, c2, c3) de M al grupo G (véase
figura 3-4).
Figura 3-4 Etapa de encripción de firma del esquema de encripción autentificada con verificación
compartida (t, n) de Hsu y Wu.
3.2.4 Recuperación del mensaje
Sin pérdida de generalidad, sea W = { U1, U2, …, Ut } el subconjunto de t
verificadores de G que desean recuperar cooperativamente el mensaje M a partir del texto
cifrado de firma recibido (c1, c2, c3). Primero, cada Ui ∈ W utiliza su propia llave personal
para calcular el mensaje auténtico
( xi Li mod q )
Ei = c1
58
mod p
(3.8)
Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu
Li =
donde
∏ − ID (ID − ID )
t
−1
j
i
j
mod q
(3.9)
j =1,i ≠ j
y lo presenta a los demás participantes en W. Con el conocimiento de
t
E = ∏ E j mod p
(3.10)
j =1
cada Ui ∈W recalcula la firma de M como
r = c2 E mod p
(3.11)
s = c3
y entonces recupera M calculando
M = g s y A r mod p
r
(3.12)
El mensaje M recuperado puede ser verificado analizando la validez de la
redundancia que contiene. A continuación se mostrará que el esquema propuesto funciona
correctamente bajo la hipótesis que todos los participantes en W son honestos. De las
ecuaciones 3.3, 3.7(a) y 3.8
E=
∏c
( xi Li mod q )
1
U i ∈W
(
xi Li mod q )
= c1 U∑
i∈W
( p (0) )
= c1
( )
= gd
xG
= yG (mod p )
d
Esto implica que con el conocimiento de (c1, c2, c3) y E, cada verificador en W
puede recalcular r mediante la ecuación 3.11(a). Es más, elevando ambos lados de la
ecuación 3.6(b) a exponentes de base g se obtiene
59
Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu
−r
g s = g k g − x A r = g k y A (mod p )
(3.13)
De las ecuaciones 3.6(a) y (3.13), puede deducirse fácilmente que cada verificador
en W obtendrá el mensaje correcto M mediante la ecuación 3.12 (véase figura 3-5).
Figura 3-5 Etapa de recuperación del mensaje del esquema de encripción autentificada con
verificación compartida (t, n) de Hsu y Wu.
3.3 Análisis de seguridad
Tomando en cuenta los detalles de implementación de los esquemas de umbral (t,
n), es razonable suponer que se presentarán un máximo de t-1 verificadores del grupo G,
con objeto de proporcionarse entre ellos sus llaves personales y planear de esta manera un
ataque directo a la seguridad del criptosistema.
60
Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu
En esta sección se analizarán tres posibles ataques directos a la seguridad del
criptosistema basado en el esquema de verificación compartida de Hsu y Wu. En el
esquema propuesto cualquier adversario dentro o fuera del grupo G, se enfrentará a la
dificultad de resolver el problema del logaritmo discreto (DLP) [5, 19], para revelar
cualquier llave personal (o la llave secreta de G) y crearse un texto cifrado de firma válido
para un mensaje dado direccionado a G. Los ataques que se analizarán son ataques de
conspiración, los cuales son perpetrados por algunos verificadores dentro de G o por un
verificador malicioso en complicidad con un firmante deshonesto en la etapa de encripción
de firma.
3.3.1 Ataque 1
Dado un texto cifrado de firma (c1, c2, c3) para M y toda la información pública
disponible, un grupo de menos de t verificadores en conspiración dentro de G trata de
revelar la llave personal del firmante, la llave personal de cualquier otro verificador, o la
llave secreta del grupo G.
Análisis del ataque 1:
Estos verificadores en conspiración pueden obtener la llave personal de A (xA) ya
sea mediante la ecuación 3.2 ó la ecuación 3.6(b). Sin embargo, como se analiza en [18,
19], ellos tendrán que enfrentarse al DLP para poder calcular xA a partir de estas
ecuaciones. Por otro lado, ellos primero tendrían que reconstruir el polinomio p(x) y
obtener la llave personal xi = f(IDi) para cualquier otro Ui ∈ G, o la llave secreta de xG =
f(0) para G. Sin embargo, p(x) puede ser reconstruido sólo al obtener el conocimiento de las
llaves personales xi de al menos t verificadores del grupo G. De este modo, menos de t
verificadores dentro de G no podrán revelar la llave personal de cualquier otro verificador o
la llave secreta de G, aún cuando ellos publiquen los valores de sus llaves personales.
61
Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu
3.3.2 Ataque 2
Menos de t verificadores en conspiración dentro de G intentan actuar como el
firmante A para crearse un texto cifrado de firma válido para un mensaje escogido M; todo
esto sin conocer la llave personal de A.
Análisis del ataque 2:
Sin pérdida de generalidad, se supondrá que U1, U2, …, y Ut-1 son t-1 verificadores
de G en conspiración, los cuales desean crear un texto cifrado de firma válido para un
mensaje escogido M, de modo que Ut pensará que el mensaje recuperado M es un mensaje
legal enviado por A. Ellos deben calcular primero una firma válida (r, s) para M
satisfaciendo la ecuación 3.12, y entonces crear un texto cifrado de firma válido (c1, c2, c3)
para M mediante las ecuaciones 3.7. Como se analizó en [18, 19, 20], ellos se encontrarán
con el DLP para poder calcular una firma válida (r, s) para M, satisfaciendo la ecuación
3.12 sin conocer xA. De este modo, la falsificación de un texto cifrado de firma válido para
un mensaje M escogido, a cargo de menos de t verificadores de G en conspiración, está
basada en la dificultad de resolver el DLP.
3.3.3 Ataque 3
Un verificador malicioso dentro de G se ha puesto en complicidad con el firmante A
para conocer el parámetro secreto d en la etapa de encripción de firma. El verificador trata
de impedir que otros t-1 verificadores honestos en W recuperen el mensaje de texto cifrado
de firma enviado subsecuentemente por un firmante B, de tal modo que sólo el pueda
recuperar correctamente el mensaje.
Análisis del ataque 3:
Supongamos que (c1, c2, c3) es el texto cifrado de firma para M, generado por el
firmante A con el parámetro d seleccionado de modo aleatorio, y (c1’, c2’, c3’) es el texto
62
Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu
cifrado de firma para M’ generado por el firmante B con el parámetro d’ seleccionado de
modo aleatorio. A partir de las ecuaciones 3.7a y 3.8 se puede observar que el valor de E
depende directamente de c1, el cual depende directamente del parámetro d. Esto es,
E = c1
f (0)
= c1
xG
= yG (mod p )
d
y
d'
E ' = c1 ' f ( 0 ) = c1 ' xG = yG (mod p )
En caso de que a un verificador malicioso le sea revelado el valor del parámetro d
en la etapa de encripción de firma, entonces sólo él conoce E y además tiene la capacidad
de recuperar M por él mismo sin la participación de los otros t-1 verificadores en W. Si el
firmante B de manera fortuita selecciona d’ = d en la etapa de encripción de firma, esto
implica que E’ = E, o si se encuentra que c1’ = c1Z mod p (para 1 ≤ z ≤ q), esto implica que
E’ = Ez mod p, entonces el verificador malicioso conocerá E’. Por lo tanto podrá recuperar
correctamente M’ a partir del texto cifrado de firma (c1’, c2’, c3’) generado por el firmante
B. Sin embargo, la probabilidad de éxito en un ataque multiplicativo como éste es de 1/q.
Este esquema será lo suficientemente seguro si |q| ≥ 160 bits, como se sugiere en [21].
3.4 Simulación matemática
Supongamos el siguiente escenario hipotético. Se tienen 7 computadoras personales
(PC’s) interconectadas a través de una red LAN en un edificio de oficinas bancarias; el
usuario de una de ellas requiere compartir un archivo con otros 5 usuarios de la misma red,
pero por motivos de seguridad y confidencialidad de la información necesita que estén
presentes por lo menos 3 de ellos para poder abrir y visualizar correctamente el archivo que
han recibido. Se tiene una PC disponible en el centro de cómputo del edificio la cual opera
como servidor de archivos.
63
Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu
Este escenario es una aplicación directa para el esquema de verificación compartida
implementado en esta tesis. El servidor de archivos podría operar como la autoridad del
sistema (SA). Se tiene también el firmante A, el cual es el usuario que necesita el archivo. Y
por último se tienen las 5 PC’s, todas ellas interconectadas a través de una LAN, siendo
necesario la presencia de sólo 3 de ellos para visualizar posteriormente el archivo que les ha
sido enviado. Es importante recordar que bajo el esquema de Hsu y Wu es posible también
poseer la certeza de que ha sido la PC A quien envió originalmente el archivo. Bajo este
escenario realizaremos la simulación matemática de todo el proceso. Esto se muestra a
detalle a continuación.
3.4.1 Inicialización del sistema
SA selecciona dos números primos p y q, donde q | p-1.
p = 103
q = 17
donde 17 | 102. Selecciona también un generador g de orden q en GF(p). De 3.1 y
seleccionando h = 13 (1<h<102), se tiene que
g=h
p −1
q
102
17
=h
mod p
mod 103
= 13 mod 103
6
= 23
SA calcula los anteriores parámetros y los hace públicos al depositarlos en un
directorio conocido para los otros usuarios de la red.
64
Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu
3.4.2 Registro
Se tiene al firmante A y al grupo de 5 verificadores G = { U1, U2, …, U5 } con
identificadores ID’s = { 1, 10, 3, 9, 13 }. A continuación SA selecciona de modo aleatorio
de Zq* las llaves públicas del firmante A y del grupo G, y a continuación calcula las
respectivas llaves privadas. De 3.2 y 3.3 se tiene que
x A = 13
xG = 5
y A = g x A mod p
yG = g xG mod p
= 2313 mod 103
= 72
= 235 mod 103
= 79
SA genera de modo aleatorio el polinomio p(x) de grado 2, esto con el propósito de
dividir la llave secreta de G en 5 porciones. De 3.4 se tiene
p( x) = 5 + 3x + 15 x 2 mod 17
De aplicar 3.5 sobre todos los verificadores de G se tiene que
x1 = 5 + 3 ⋅ 1 + 15 ⋅ 12 mod 17
x2 = 5 + 3 ⋅ 10 + 15 ⋅ 102 mod 17
=6
=5
y1 = 236 mod 103
y2 = 235 mod 103
= 66
= 79
x4 = 5 + 3 ⋅ 9 + 15 ⋅ 92 mod 17
x3 = 5 + 3 ⋅ 3 + 15 ⋅ 32 mod 17
=6
= 13
y4 = 236 mod 103
y3 = 2313 mod 103
= 66
= 72
65
Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu
x5 = 5 + 3 ⋅ 13 + 15 ⋅ 132 mod 17
= 12
y5 = 2312 mod 103
= 30
Después de realizar el cálculo SA entrega las respectivas llaves privadas a través de
un canal seguro. Es importante hacer notar que después de esto SA no almacena ningún
parámetro secreto.
3.4.3 Encripción de firma
A quiere enviar el siguiente mensaje M = { 1, 2, 3, 4, 5 }. Primero de la ecuación 3.6
se genera la firma digital seleccionando de modo aleatorio k = 5, esto es
( )
= M (9 ) mod 103
5
ri = M 23−1 mod 103
5
= 30M mod 103
si = 5 − 13ri mod 17
Sustituyendo M se obtiene la firma r y s,
M = {1 2 3 4 5 }
r = { 30 60 90 17 47 }
s = {6 7 8 5 6 }
Se selecciona de modo aleatorio d =11, y se genera el texto cifrado de firma a partir
de la ecuación 3.7, con lo que se obtiene
66
Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu
c1 = 2311 mod 103
= 64
( ) mod 103
= r (30 ) mod 103
c2 = r 79 −1
11
11
= 72r mod 103
c3 = s
Sustituyendo la firma digital (r, s) se obtiene
c1 = 64
c2 = {100 97 94 91 88 }
c3 = { 6 7 8 5 6 }
El texto cifrado de firma (c1, c2, c3) son los datos que se envían a cada uno de los 5
verificadores del grupo G.
3.4.4 Recuperación del mensaje
Supóngase ahora que W = { U1, U3, U5 } es el subgrupo de 3 verificadores que
desean recuperar el mensaje M a partir del texto cifrado de firma (c1, c2, c3). Primero cada
Ui ∈ W utiliza su propia llave personal para calcular Ei. Primero, a partir de la ecuación 3.9
[
][(− 13)(1 − 13) ]mod 17
= [(14 )(15) ][(4)(5) ] mod 17
L1 = (− 3)(1 − 3)
−1
−1
−1
−1
= [(14 )(8)] [(4 )(7 )] mod 17
=8
Calculando de manera similar L3 y L5 se obtiene Li = { 8 7 3 }. Con esta
información, se obtiene a partir de la ecuación 3.8
67
Capítulo 3: Esquema de encripción autentificada con verificación compartida (t, n) de Hsu y Wu
E1 = 64(6*8 mod 17 ) mod 103
= 23
E2 = 64(13*7 mod 17 ) mod 103
= 81
E3 = 64(12*3 mod 17 ) mod 103
= 79
Cada uno de los 3 verificadores Ui presenta su respectiva Ei a los demás t-1
verificadores de W, y cada uno de ellos, sin haber revelado su llave secreta calcula a partir
de la ecuación 3.10
E = (23 ⋅ 81 ⋅ 79) mod 103
= 93
Por medio de la ecuación 3.11 cada uno de ellos recalcula la firma (r, s)
r = {100 97 94 91 88 }⋅ 93 mod 103
r = { 30 60 90 17 47 }
s = {6 7 8 5 6 }
Por último, para recuperar el mensaje original aplican la ecuación 3.12 y se obtiene
( )(
)
( )(
)
M 1 = 236 7230 (30 ) mod 103
= (66 )(9 )(30 ) mod 103
=1
M 2 = 237 7260 (60 ) mod 103
= (76)(81)(60 ) mod 103
=2
Aplicando el mismo procedimiento para el resto de (r, s) se obtiene el mensaje
original M = { 1, 2, 3, 4, 5 }.
68
Capítulo 4: Diseño del Criptosistema
Capítulo 4
Diseño del Criptosistema
4.1 Diseño general del Criptosistema
El objetivo primario de este trabajo de investigación es el desarrollo de un
dispositivo electrónico que permita añadir seguridad al tráfico de información actual en un
ambiente específico de comunicaciones; el cual es en este caso particular una red de
computadoras de área local, conocida comúnmente como una LAN (Local Area Network).
4.1.1 Seguridad de la información en una LAN
Una LAN es el caso más sencillo de red que nos podemos encontrar [11], de ámbito
muy limitado geográficamente – usualmente en un único edificio – con todas las
computadoras interconectadas a través de cableado propietario. Esto último nos va a
permitir ejercer un control total sobre el canal de comunicaciones, pudiendo protegerlo
físicamente, lo cual evita prácticamente cualquier peligro de falta de privacidad en la
información, aunque esto no es posible en todos los casos, como se analizará más adelante.
Otro riesgo que se presenta en las redes de área local, a menudo no valorado, es el
que viene del uso inadecuado del sistema por parte de los propios usuarios. Ya sea por mala
fe o descuido, un usuario con demasiados privilegios podría destruir información, por lo
69
Capítulo 4: Diseño del Criptosistema
que estos permisos deben ser asignados con mucho cuidado por parte de los
administradores. Esta circunstancia es muy importante, ya que, sobre todo en pequeñas
empresas, el dueño muchas veces cree que debe conocer la clave del administrador, y luego
es incapaz de resistir la tentación de jugar con ella, poniendo en serio peligro la integridad
del sistema y entorpeciendo el trabajo del administrador de la red.
Existen también redes internas en las que un control exhaustivo sobre el medio
físico de transmisión de datos es en la práctica imposible. Consideremos el siguiente
escenario: un edificio corporativo con un acceso no muy restringido, como podrían ser las
aulas de una universidad, que poseen conexiones Ethernet en todas sus dependencias. En
principio, nada impediría a una persona conectar una computadora portátil a una de esas
conexiones para llevar a cabo un análisis del tráfico de la red sin ser descubierta, o
suplantar a cualquier otra computadora. En estos casos será conveniente llevar a cabo algún
tipo de control, como la deshabilitación dinámica de las conexiones de red no utilizadas en
cada momento, la verificación del identificador único de la tarjeta de red concreta que debe
estar conectada en cada punto o la adopción de protocolos de autentificación de las
computadoras dentro de la red.
Uno de los últimos avances en redes locales son las denominadas WLAN, muy en
boga en la actualidad, que basan su funcionamiento en el empleo de ondas de radio como
canal de comunicaciones, proporcionando una flexibilidad sin precedentes a las redes. Sin
embargo, las plataformas actuales han probado ser inseguras debido a algunas deficiencias
cometidas en su implementación. El estándar 802.11i, de reciente ratificación, intentará
proporcionar una nueva alternativa para la implementación segura y confiable de redes
inalámbricas LAN [22, 23, 41, 43].
Otra gran serie de problemas de seguridad que se presentan en una red de área local,
proviene del hecho que es una gran realidad, de que muchas de estas redes locales se
encuentran interconectadas con otras redes y sistemas remotos ajenos por medio de lo que
conocemos como Internet. La lista de amenazas contra la seguridad de una computadora
conectada a Internet parece interminable [3] y asimismo se han desarrollado e
70
Capítulo 4: Diseño del Criptosistema
implementado una gran cantidad de posibles soluciones que varían en precio y
complejidad, tanto como varían las condiciones y capacidades de las redes locales actuales.
En general todas las redes de computadoras se construyen conceptualmente sobre
diferentes capas de abstracción, que desarrollan tareas distintas y proporcionan un
protocolo unificado a las capas superiores. La criptografía podría entonces ser empleada en
diferentes niveles de abstracción. Por ejemplo, podemos cifrar un archivo antes de
transmitirlo por la red, lo cual correspondería al nivel de abstracción mayor o podemos
enviarlo de manera transparente, pero a través de un protocolo de bajo nivel que cifre cada
uno de los paquetes de información en los que se va a subdividir el archivo en el momento
de transmitirlo.
4.1.2 Análisis de las posibles topologías
Tomando en cuenta los puntos tratados en la sección anterior, a continuación se
analizarán las diferentes topologías de un criptosistema que permitirán añadir seguridad en
las comunicaciones entre dos computadoras ubicadas dentro del ámbito de operación de
una LAN.
Topología #1: Criptosistema entre la tarjeta de red y el medio físico LAN.
Esta solución es similar a lo que conocemos como dispositivos “firewall”, sólo que
para esta aplicación se utilizaría un dispositivo por cada computadora que se encuentre
presente en la red. Es quizás el enfoque que tomaría un dispositivo comercial, ya que ofrece
a simple vista varias características deseables como lo son: portabilidad y fácil instalación,
siendo un dispositivo transparente para la computadora, es decir, no necesitaría de
configuración o conocimiento alguno por parte del usuario para su uso. Es quizás la
solución más exigente debido a que al ser transparente para la computadora, ésta no tomará
ninguna medida para evitar utilizar el máximo ancho de banda que ella considere que tiene
disponible. Esto repercute en la necesidad de utilizar circuitería de alto costo y alta
velocidad, así como el uso de memorias intermedias o “buffers” para el cifrado en sitio.
71
Capítulo 4: Diseño del Criptosistema
Figura 4-1 Topología #1: Criptosistema es un dispositivo externo de cifrado/descifrado entre la
tarjeta de red y el medio físico LAN.
Topología #2: Criptosistema es una tarjeta de red de cifrado/descifrado.
Esta segunda solución sugiere el diseño de una tarjeta de red que realice de manera
automática el cifrado/descifrado de la información. Aunque en principio esta solución
aparenta ser la ideal, se debe tomar en cuenta varios aspectos relacionados con la tecnología
de las computadoras personales: el muy bajo costo de tecnologías estándar y la reutilización
y abstracción de software que proporcionan los nuevos lenguajes de programación y
sistemas operativos. En otras palabras, el costo de utilizar el hardware y software, ya
desarrollados y estandarizados en las computadoras personales, es excesivamente bajo; esto
último en comparación con el costo de desarrollo e implementación propietario. Incluso la
mayoría de los fabricantes de tarjetas madre para computadoras ya incluyen como hardware
básico una o más interfaces LAN en sus productos. Este esquema se muestra en la figura 42.
Figura 4-2 Topología #2: Criptosistema es una tarjeta interna de red con cifrado/descifrado
automático.
72
Capítulo 4: Diseño del Criptosistema
Topología #3: Criptosistema interno paralelo a una tarjeta de red.
Tomando en cuenta los distintos puntos discutidos en el planteamiento de la anterior
topología, es entonces la mejor opción, enfocar toda la inversión y esfuerzo en diseñar un
dispositivo de procesamiento digital de datos. Esto es, el diseño de una tarjeta de
procesamiento de datos que se instale en un puerto de la PC (por ejemplo, en el bus PCI), y
que opere de manera paralela e independiente a una tarjeta de red en particular. Esta
topología permite enfocar todo el esfuerzo de diseño a los diferentes aspectos y recursos
que requiere la implementación del esquema de cifrado/descifrado elegido, dejando a un
lado todos los aspectos relacionados con una topología e interfaz de red específicas.
Inclusive, como más adelante se ilustrará, este enfoque de diseño permite utilizar librerías
estándar que permiten en la programación del sistema una abstracción total de la
complejidad y topología particular de la red en donde se encuentre instalado el
criptosistema.
Figura 4-3 Topología #3: Criptosistema es una tarjeta interna de cifrado/descifrado paralela a una
tarjeta de red en la PC.
Topología #4: Criptosistema externo paralelo a una tarjeta de red.
Esta topología es similar a la anterior, en el sentido de que se hace un uso de la
tecnología y software ya existentes para redes de computadoras. La diferencia estriba en el
hecho de que el dispositivo electrónico que implementa los algoritmos de
cifrado/descifrado no se encuentran como un elemento interno a la PC, sino que se
interconectan a ella de manera externa a través de una interfaz estándar como podrían ser:
puerto serie RS-232, puerto paralelo o algún otro de alta velocidad como el estándar USB.
73
Capítulo 4: Diseño del Criptosistema
Figura 4-4 Topología #4: Criptosistema es un dispositivo externo de cifrado/descifrado paralelo a
una tarjeta de red en la PC.
En la tabla 4.1 se presenta un resumen de las diferentes topologías estudiadas
anteriormente, realizando una comparativa de las diferentes características que cada una de
ellas ofrece, así como un estudio de las ventajas y desventajas que cada una de ellas
presenta.
Tabla 4.1 Comparativa entre las posibles topologías de implementación del criptosistema.
Topología #1
Topología #2
Topología #3
Topología #4
Velocidad
Alta
Alta
Alta
Bajo
Portabilidad
Alta
Baja
Baja
Media
Transparencia al usuario
Alta
Media
Media
Media
No
Si
Si
No
Si
Si
No
No
3
1
1
1
Si
No
No
No
Controlador PC
No
Si
Si
Si
Emulación de usuarios
No
No
Si
Si
Costo
Alto
Alto
Medio
Bajo
Dependiente de la
arquitectura de la PC
Dependiente de la
arquitectura de la LAN
# de interfaces LAN
Necesidad de grandes
buffers de memoria
De un estudio minucioso de las características listadas, se llegó a la conclusión de
que hay dos posibles soluciones: la solución ideal y la solución práctica. La solución ideal
emplearía la topología #3, tanto en costo como en versatilidad; esta solución también
74
Capítulo 4: Diseño del Criptosistema
permite un desarrollo rápido del criptosistema, ya que en la actualidad se cuenta con una
gran cantidad de tarjetas de desarrollo y librerías de software de diferentes fabricantes [24,
25]. Como una solución práctica se eligió la implementación de un dispositivo basado en la
topología #4, la cual presenta numerosas ventajas para la realización de un proyecto de
investigación con recursos económicos muy limitados. La topología #4 es la de menor
costo así como también es la que permite una emulación sencilla de este dispositivo por
medio de un programa en la PC. Esto último permitirá la prueba y desarrollo del
criptosistema con varios usuarios con dispositivos “emulados” por software, permitiendo la
prueba del concepto del esquema de verificación compartida a un bajo costo.
4.1.3 Requerimientos de implementación
Al iniciar cualquier desarrollo práctico, que involucre cierto procesamiento digital,
la primera decisión que se debe tomar es qué tipo de procesador se utilizará como el
cerebro del sistema. Según los expertos de BDTI (Berkeley Design Technology, Inc.) [26]
el factor más importante para tomar esta decisión es analizar la naturaleza del algoritmo a
implementar.
La criptografía de llave pública, como ya se había mencionado, utiliza una gran
cantidad de métodos de la teoría de números, los cuales han probado ser en su mayoría
algoritmos que requieren un gran esfuerzo computacional. Esto es debido en su mayor parte
a la necesidad de emplear, como en cualquier otro algoritmo criptográfico, números muy
grandes para poder obtener un esquema que ofrezca una seguridad aceptable y duradera a
pesar del paso de tiempo; son comunes utilizar números decimales mayores a 130 dígitos,
que equivalen a números de 431 bits [3]. Tomando en cuenta estos requerimientos la
opción resulta ser un procesador digital de señales, el cual es un microprocesador
optimizado para el procesamiento de algoritmos que:
•
Son muy demandantes computacionalmente.
•
Requieran atención a la fidelidad numérica.
•
Requerimientos de gran ancho de banda.
75
Capítulo 4: Diseño del Criptosistema
•
Capacidad para procesar grandes flujos de datos.
•
Patrones predecibles de acceso a datos.
•
Localidad en tiempo de ejecución.
•
Centralizados en el procesamiento matemático.
•
Requerimientos de tiempo real.
Este tipo de procesadores digitales, a diferencia de los microprocesadores de
propósito general han sido diseñados desde su concepción para solucionar los
requerimientos anteriores [26]. Entre las características que ofrecen están:
•
Múltiples unidades de procesamiento paralelo, aceleración por hardware.
•
Tipo de arquitectura VLIW (8 instrucciones por ciclo), instrucciones SIMD.
•
Registros de propósito especial, acumuladores, hardware de saturación (punto
flotante).
•
Arquitectura Harvard, permitiendo transferencias paralelas.
•
Modos de dirección especializados (auto-incremento, módulo, inversión de bits,
etc.).
•
Ciclos por hardware, manejo de interrupciones, etc.
•
Unidades MAC de un solo ciclo.
•
No acceso a través de caché, sino DMA.
•
Pocas prestaciones dinámicas (caché, predicción de saltos, instrucciones con tiempo
dependiente de los datos, etc.).
La opción a elegir será entonces un procesador digital de señales conocido por sus
siglas como DSP (Digital Signal Processor). Para encontrar dispositivos de este tipo que
pudieran alcanzar un buen desempeño en esta aplicación criptográfica se revisaron
tecnologías disponibles en compañías como:
•
PLX Technology [27].
•
Applied Micro Circuits Corporation (AMCC) [28].
•
Advanced Micro Devices (AMD) [29].
76
Capítulo 4: Diseño del Criptosistema
•
Motorola (Freescale Semiconductor) [30].
•
Texas Instruments [31].
•
SonicWALL [32].
•
SafeNet [33].
Ethernet
A lo largo de este documento se ha estado mencionando de manera repetida
Ethernet como el tipo de topología para redes de área local a utilizar. Existen varias razones
por las que se tomó esta decisión, pero primero veamos la definición de Ethernet [34]:
Ethernet: Una arquitectura de redes de área local desarrollada por la compañía
Xerox en conjunto con DEC e Intel en 1976. Ethernet utiliza una topología en bus o en
estrella y permite transferencias de datos hasta velocidades de 10Mbps. La especificación
Ethernet sirvió como base para el estándar IEEE 802.3, el cual especifica las capas físicas y
las capas bajas de software. Ethernet utiliza el método de acceso al medio CSMA/CD para
permitir varios esquemas de demanda de ancho de banda. Ethernet es el estándar LAN más
ampliamente implementado.
Todas aquellas personas que se mueven en el mundo de las redes de computadoras
saben que esto último es muy cierto, sobre todo porque Ethernet [35]:
•
Es fácil de entender, implementar, controlar y mantener.
•
Permite implementaciones de redes de bajo costo.
•
Proporciona extensiva flexibilidad en topologías para la implementación de redes.
•
Garantiza una conexión exitosa y un modo de operación y funcionamiento estándar,
independientemente del fabricante de algún dispositivo en particular.
Estas razones, además de contar con amplio soporte de hardware y software, se
tomaron en cuenta para adoptar Ethernet como la arquitectura LAN a utilizar en este trabajo
de investigación.
77
Capítulo 4: Diseño del Criptosistema
4.1.4 Diagrama a bloques del criptosistema
En la figura 4-5 se muestra el diagrama a bloques general del criptosistema a ser
implementado:
Figura 4-5 Diagrama general a bloques del criptosistema.
Como se puede ver es una sencilla red Ethernet en topología estrella interconectada
mediante un switch o hub Ethernet. Como ya se había mencionado, la topología del
criptosistema elegida nos permitirá emular a cualesquiera de los participantes del esquema
de verificación compartida.
78
Capítulo 4: Diseño del Criptosistema
4.2 Implementación física del módulo de cifrado/descifrado
4.2.1 Diagrama a bloques del módulo de cifrado/descifrado.
En la figura 4-6 se muestra el diagrama a bloques del módulo ó dispositivo de
cifrado / descifrado. En la figura 4-5 se puede apreciar la ubicación de este módulo en el
criptosistema en general. Cada uno de los integrantes del criptosistema, esto es, el firmante,
el verificador y la autoridad del sistema, poseerán uno de estos módulos, el cual se
encargará del procesamiento criptográfico de la aplicación.
Figura 4-6 Diagrama a bloques del módulo (dispositivo) de cifrado / descifrado.
El diseño realizado consta de 4 bloques funcionales:
1) Interfaz de programación en circuito (in circuit programming), por medio del
puerto paralelo de la PC.
2) Interfaz de comunicaciones serie a la PC.
3) Procesador criptográfico.
4) Fuente de alimentación.
79
Capítulo 4: Diseño del Criptosistema
El bloque interfaz de programación en circuito permite la reprogramación del
dispositivo “en línea” sin necesidad de retardos por tiempos adicionales de borrado o
verificación. Esta zona está conformada por una colección de circuitos integrados lógicos
de bajo costo que en acción conjunta con la PC, a través del puerto paralelo, permiten llevar
a cabo de manera rápida y sencilla la reprogramación del procesador. También proporciona
una potente herramienta de depuración mediante la emulación en tiempo real del código del
programa. La circuitería es estándar para toda la familia de controladores híbridos 56800/E
de Motorola y puede encontrarse en las hojas de datos y de aplicaciones del fabricante [30].
El bloque interfaz de comunicaciones hacia la PC se implementó con la
ampliamente utilizada circuitería del estándar RS-232 [42]. La velocidad de transmisión de
datos elegida es de 57,600 bits por segundo; esto para obtener el mayor ancho de banda
posible de dicha interfaz. Este ancho de banda se encuentra muy limitado ante las nuevas y
más veloces versiones como lo son por ejemplo las interfaces USB con velocidades de
decenas y centenas de megabits por segundo. A diferencia de las nuevas interfaces, el
estándar RS-232 sobresale por su amplio uso y reconocida facilidad de implementación a
bajos costos.
El bloque del procesador criptográfico incluye el CPU conectado de modo que toda
su capacidad de procesamiento pueda ser enfocada al algoritmo de cifrado/descifrado. Para
detalles de su conexión puede consultarse la hoja de datos de este dispositivo en el anexo
A. Por último, se incluye algo de circuitería para la regulación “en tarjeta” de un voltaje de
alimentación externo; la regulación se realiza a +3.3V para un bajo voltaje de operación y
por consiguiente un menor consumo.
4.2.2 Elección del CPU
La solución práctica se desarrolló basada en el controlador híbrido 56F8323 de la
familia 56800E de Motorola (Freescale Semiconductor). La familia 56800/E de Motorola
se denomina como controladores híbridos, ya que combinan en un solo núcleo tanto la
arquitectura como ciertas características tanto de un DSP como de un microcontrolador de
80
Capítulo 4: Diseño del Criptosistema
propósito general. Se desarrollaron además en paralelo dos soluciones con motivos de
comparación: la primera solución se implementó también con un controlador híbrido de la
familia 56800, y la segunda sobre un microcontrolador de 16 bits de la familia HC(S)12,
ambos de Motorola, el 56F801 y el MC9S12DP256B, respectivamente. Las características
que ofrecen esta familia de dispositivos se encuentran listadas ampliamente en el apéndice
A. En la tabla 4.2 se muestra, a manera de resumen, una comparativa de las diversas
características que ofrecen cada uno de los dispositivos empleados.
Tabla 4.2 Comparativa de las características entre los procesadores empleados.
56F8323
56F801
MC9S12DP256B
Arquitectura Harvard
Sí
Sí
No
Unidades de ejecución paralela
3
3
---
Ejecución de programa en RAM
Sí
Sí
Sí
Terminales externas dedicadas de interrupción
1
1
2 (Opcionales)
Terminales de uso de propósito general
27
11
49
Memoria FLASH de programa
32 KB
16 KB
256 KB
Memoria FLASH de datos
8 KB
4 KB
---
Memoria RAM de programa
4 KB
1 KB
---
Memoria RAM de datos
8 KB
1 KB
12 KB
Memoria de arranque
8 KB
4 KB
---
Memoria EEPROM
No
No
4 KB
Módulo PWM
Sí
Sí
Sí
Decodificador de cuadratura
Sí
No
No
Temporizador watchdog
Sí
Sí
Puertos serie asíncrono (SCI)
2
1
2
Puertos serie síncrono (SPI)
2
1
3
2 / 16 / 4
1 / 16 / 4
1 / 16 / 8
CAN
Ninguno
CAN, BDLC, I2C
2 / 12 / 4
2 / 12 / 4
1 / 10 / 8
Sensor de temperatura
Sí
No
No
PLL
Sí
Sí
Sí
Oscilador de relajación interno
Sí
Sí
No
MIPS
60
40
---
Costo (Dólares)
9.5
3.5
15
Temporizadores / Resolución / Canales
Puertos adicionales
Convertidores ADC / Resolución (bits) / Canales
81
Capítulo 4: Diseño del Criptosistema
Una gran ventaja de todas estas nuevas familias de controladores Motorola es que
utilizan un compilador en C/C++ muy eficiente, el cual produce código muy optimizado en
espacio y velocidad gracias a la arquitectura optimizada para C/C++ de estos CI’s. El
código fuente empleado para estas 3 plataformas, a excepción de nombres de registros,
permanece casi sin cambio al migrar el código de una plataforma a otra. El compilador
utilizado es el CodeWarrior, de Metrowerks. En el anexo B se da un listado del código
implementado en la plataforma 56800E de Motorola.
4.2.3 Esquemáticos del dispositivo de cifrado / descifrado.
En el anexo A se puede encontrar la información más relevante de las hojas de datos
de los dispositivos empleados para la implementación del criptosistema. La circuitería es
relativamente sencilla, esto es ofrecido por el fabricante como una de las ventajas
competitivas de estos productos, en comparación con otras plataformas DSP [30]. En este
tipo de aplicaciones muchas veces la complejidad recae en el programa de la aplicación. En
la sección 4.2.1 se dividió el módulo de cifrado / descifrado en cuatro bloques funcionales.
En la figura 4-7 se muestra el esquemático de la fuente de alimentación propuesta por el
fabricante: sencilla pero lo necesario para una aplicación de este tipo.
Figura 4-7 Esquemático del bloque: fuente de alimentación.
En la figura 4-8 se muestra el procesador criptográfico elegido: el controlador
híbrido DSP56F8323, de la familia 56800E de Motorola. El controlador incluye una amplia
gama de periféricos internos como lo son los temporizadores, RAM, FLASH ROM, entre
82
Capítulo 4: Diseño del Criptosistema
otros. Esto permite que las conexiones con dispositivos externos sean mínimas o en algunos
casos no necesarias.
Figura 4-8 Esquemático del bloque: procesador criptográfico.
En la figura 4-9 se muestra la circuitería lógica necesaria para la implementación de
la interfaz de programación en circuito.
83
Capítulo 4: Diseño del Criptosistema
Figura 4-9 Esquemático del bloque: interfaz de programación en circuito.
84
Capítulo 4: Diseño del Criptosistema
Por último, en la figura 4-10 se muestra la implementación del puerto de
comunicaciones hacia la PC. Esta interfaz está basada en una circuitería RS-232
ampliamente conocida y utilizada.
Figura 4-10 Esquemático del bloque: interfaz de comunicaciones a la PC.
4.3 Programación del procesador de cifrado/descifrado
Todos los algoritmos contenidos en el dispositivo externo de cifrado/descifrado se
implementaron en lenguaje ANSI C. Se eligió este lenguaje por encima del lenguaje
ensamblador por varios motivos, entre los cuales están:
1) Reutilización del código para la implementación “emulada” del criptosistema en
el programa de alto nivel en la PC (portabilidad del código).
2) Enfocar esfuerzos en el desarrollo de los algoritmos y no en la implementación
particular en una plataforma específica.
3) Menor tiempo de desarrollo y de depuración del código del programa.
85
Capítulo 4: Diseño del Criptosistema
Para propósitos de prueba y comparación se desarrolló el criptosistema, como se
mencionó en una sección anterior, en tres plataformas distintas, siendo estas las familias
HC(S)12, 56800 y 56800E de Motorola. El uso del lenguaje ANSI C permitió también la
rápida elaboración de una comparativa entre dichas plataformas, ya que todas estas familias
utilizan un lenguaje ensamblador distinto. En el anexo B se puede encontrar un listado del
código de las principales funciones que se elaboraron para el criptosistema.
4.4 Programación de la interfaz LAN
El lenguaje utilizado para desarrollar la interfaz de usuario fue Visual C++. Este
lenguaje incluye una gran cantidad de librerías de software ya optimizadas y ampliamente
usadas y probadas por los programadores profesionales. Este lenguaje nos proporciona una
API, llamada Winsock [37, 38, 39 40], para propósitos de comunicación de computadoras
entre redes e inclusive en Internet.
La solución a implementar puede utilizarse con cualquier tarjeta de red comercial,
así como también en una amplia gama de topologías y protocolos de red. Esto fue posible
gracias a la tecnología Winsock de Windows, con la que se realiza una abstracción total de
la capa física de red actualmente presente en la computadora, y se deja todo el
procesamiento en manos de las muy completas librerías desarrolladas para la computadora
personal bajo la plataforma Windows.
Winsock es la API de menor nivel de Windows para programar con TCP/IP,
DECNet, IPX/SPX y otros protocolos. Parte del código (las funciones exportadas a las que
llama la aplicación desarrollada) reside en la librería Wsock32.dll y parte reside en el
núcleo de Windows. Es posible escribir programas servidores y cliente para Internet
utilizando la API Winsock. Esta API se basa en la API original de conectores de Berkeley
para UNIX. Windows NT 4.0 incluye, por primera vez, Winsock 2, una versión nueva y
más potente, aunque en este trabajo de investigación se utilizará la versión 1.1, ya que está
disponible en todas las versiones de Windows. Winsock es una parte de la WOSA
86
Capítulo 4: Diseño del Criptosistema
(Arquitectura de Sistemas Abiertos de Windows) que especifica interfaces con las que se
pueden desarrollar aplicaciones cliente, así como interfaces que los fabricantes utilizan para
desarrollar proveedores de servicios que implementan Winsock para redes específicas.
Se sabe que las funciones de una red se agrupan en capas de servicios de la red
(modelo OSI de ISO, [41]), y que estas capas definen el camino por el que debe pasar un
paquete de información cuando recorre el camino de una computadora a otra, conectadas a
diferentes puntos dentro de Internet. En cada una de las capas se distinguen unos servicios
que operan bajo unos protocolos. Los servicios de una capa definen la interfaz de
comunicación con la misma y los protocolos definen la forma en que se transmite la
información. De esta manera cada capa ofrece una interfaz a la capa superior y utiliza la
interfaz de la capa inferior para interpretar los mensajes o paquetes a medida que van
pasando. En la figura 4-11 se muestra la ubicación lógica del protocolo WinSock.
Figura 4-11 WinSock y su relación con el modelo OSI de ISO.
87
Capítulo 4: Diseño del Criptosistema
Utilizar una interfaz de programación, como la API de Windows Sockets, libera al
programador de tratar con los detalles de cómo se pasan los paquetes de información entre
las capas inferiores.
Sockets
En general, los sockets son más útiles cuando se están desarrollando aplicaciones en
ambos lados de la comunicación. Por ejemplo, cuando se está desarrollando tanto el cliente
como el servidor para una aplicación en particular, se pueden utilizar sockets para
intercambiar sus propias estructuras de datos o paquetes, para establecer la comunicación
entre las aplicaciones.
Un socket representa un punto final de una comunicación; en otras palabras, un
objeto a través del cual una aplicación puede enviar o recibir paquetes de datos a través de
la red. Un socket tiene un tipo y está asociado con un proceso en ejecución y puede tener un
nombre. En la actualidad, los sockets intercambian datos sólo con otros sockets en el mismo
dominio de comunicación bajo el protocolo IP. En el caso de los sockets para Windows,
vienen en dos tipos: sockets de datagramas y sockets de flujos.
Sockets de datagramas
Los sockets de datagramas proporcionan una comunicación de paquetes no
confiable y sin conexión. En este caso, “no confiable” significa que no se garantiza la
entrega de un paquete, así como tampoco se garantiza que los paquetes llegarán en el
mismo orden en que fueron enviados. De hecho, el mismo paquete de datagramas puede ser
enviado más de una vez. Para las implementaciones TCP/IP de Winsock, los sockets de
datagramas utilizan el UDP (Protocolo de datagramas de usuario), aunque Winsock 2
también soporta otros protocolos.
En muchos casos, tales como la comunicación entre dos procesos en la misma
máquina o entre dos máquinas en una LAN con poca carga, puede que no se vean paquetes
88
Capítulo 4: Diseño del Criptosistema
que no se entregan, llegue fuera de orden o que estén duplicados. Sin embargo, su
aplicación deberá ser capaz de manejar estas posibilidades.
Si se están escribiendo aplicaciones para comunicarse a través de redes más
complicadas, como Internet, seguramente uno se topará con la naturaleza no confiable de
los sockets de datagramas. Si la aplicación no maneja estos casos de manera adecuada, se
tendrán errores. No obstante, los sockets de datagramas son útiles en situaciones en las que
se desee enviar datos basados en paquetes o en registros. Los sockets de datagramas
también proporcionan la capacidad de enviar paquetes de difusión a más de una dirección
de destino.
Sockets de flujo
Si se necesita asegurar que los datos que se envían llegarán – en orden y sin
duplicados – se necesitará los sockets de flujo, que proporcionan un transporte basado en
una conexión confiable. Como su nombre lo implica, los sockets de flujo proporcionan un
flujo de datos, en lugar de datagramas individuales o paquetes. Para las implementaciones
TCP/IP de Winsock, los sockets de flujo utilizan el protocolo TCP (Protocolo de Control de
Transmisión). Los sockets de flujo son más útiles en situaciones en que se están enviando
grandes cantidades de datos o cuando se desea asegurar de que todos los datos lleguen en
orden y no duplicados. Además, sus aplicaciones serán notificadas si se cierra la conexión.
Por estas últimas razones para el desarrollo de esta tesis se hizo uso de los sockets de flujo.
Los sockets son objetos de programación que proporcionan funciones para:
•
Creación de un socket
•
Asignación de números de puerto
•
Manejo de direcciones IP
•
Funciones de nombre y dirección
•
Funciones de búsqueda asíncrona de usuarios en una red
•
Funciones de sincronización
89
Capítulo 4: Diseño del Criptosistema
•
Uso de múltiples protocolos
•
Calidad de servicio
•
Conexiones multipunto
•
Destrucción de sockets
WinSock
Visual C++ proporciona dos maneras de utilizar sockets: a través de las clases
CAsyncSocket o CSocket de la biblioteca MFC, o por medio del control WinSock. Este
control es la forma más fácil de establecer una conexión entre dos máquinas en una red.
El control WinSock le permite conectarse a un equipo remoto e intercambiar datos
con el protocolo UDP (Protocolo de datagramas de usuario) o con el protocolo TCP
(Protocolo de control de transmisión). Ambos protocolos se pueden utilizar para crear
aplicaciones cliente y servidor. Este control de Windows no tiene una interfaz visible en
tiempo de ejecución.
Comunicación orientada a conexión
En la implementación de este proyecto de investigación se utilizó WinSock en un
ambiente de comunicación orientado a conexión, es decir, se basó la implementación en el
uso de sockets de flujo. En una comunicación orientada a conexión es necesario que exista
una aplicación que ofrezca ciertos servicios (un servidor), como por ejemplo, en el caso de
este proyecto se tratará de la aplicación que se ejecutará en la computadora SA (autoridad
del sistema) del esquema de verificación compartida. También deberán existir una o más
aplicaciones que soliciten esos servicios (clientes), como también en este caso lo son, las
computadoras del firmante (A) y los n verificadores del esquema. Ahora bien, un servidor
no puede saber a priori qué aplicaciones ni qué número le van a hacer peticiones, por lo que
debe estar a la escucha. Cuando reciba una petición, la aceptará, la procesará y responderá
al cliente. A continuación se volverá a poner a la escucha.
90
Capítulo 4: Diseño del Criptosistema
En la figura 4-12 se puede ver desde un punto de vista gráfico, los procesos de
creación de los sockets de la aplicación servidora y en el cliente, así como la comunicación
entre ambas. Éste es el diagrama de flujo de la interfaz LAN que se implementó para el
esquema de verificación compartida.
Figura 4-12 Diagrama de flujo de los procesos de creación de los sockets en la aplicación
servidora y en la aplicación cliente.
91
Capítulo 4: Diseño del Criptosistema
En el anexo C se hace un listado del código implementado en Visual C++ tanto para
la aplicación servidora como para la aplicación del cliente. El código se encuentra
clasificado en los diferentes procesos mostrados en el diagrama de flujo de la figura 4-12.
4.5 Interfaz gráfica
El lenguaje de programación C++ se eligió por ser el lenguaje con mayor aceptación
en una gran diversidad de plataformas (transportabilidad), es un lenguaje conocido como de
mediano nivel, ya que proporciona todas las características tan poderosas de la
programación en lenguajes de alto nivel además que proporciona instrucciones y grandes
facilidades para el manejo y control del hardware de un dispositivo, incluso hasta el nivel
de los registros físicos. Estas y muchas otras características del lenguaje C++ lo han llevado
a ser conocido como el lenguaje óptimo para la programación de sistemas.
La interfaz de usuario desarrollada para implementar el esquema de encripción de
firma con verificación compartida de Hsu y Wu, se realizó en el lenguaje de programación
de alto nivel Visual C++. Se implementó de manera eficiente en una LAN Fast Ethernet,
aunque el código tiene compatibilidad con otro tipo de redes, es decir, es independiente de
la tecnología de red subyacente. Se tienen dos programas: el programa servidor y el
programa de usuarios. Visto desde el punto de vista del esquema de Hsu y Wu, el programa
de la Autoridad del Sistema (SA) y el programa del firmante y del grupo de verificadores
(A y Ui). A En los siguientes apartados se irán mostrando primero las diferentes pantallas
disponibles en la interfaz de usuario de la Autoridad del Sistema (SA) y se dará una breve
explicación de cada uno de sus elementos.
4.5.1 Pantallas de la aplicación SA ENCRIPTOR
En la figura 4-13 se muestra la pantalla de entrada y de presentación del programa.
92
Capítulo 4: Diseño del Criptosistema
Figura 4-13 Pantalla de presentación de la aplicación SA.
La figura 4-14 muestra la interfaz principal de la aplicación de la autoridad del
sistema (SA). Los elementos que contiene son:
•
Parámetro de cifrado p. Calculado por SA.
•
Parámetro de cifrado q. Calculado por SA.
•
Parámetro de cifrado g. Calculado por SA.
•
Un botón “Generar” para realizar un nuevo cálculo de parámetros. Esto se realiza
automáticamente cuando se entra por primera vez al programa.
•
Un LED por cada usuario que muestra el estado de su conexión.
•
Una etiqueta por usuario donde se muestran los identificadores de cada uno, los
cuales serán los nombres de sus PC’s en el entorno de red.
•
Un área de mensajes del estado actual del programa. Aquí se muestra cuando se está
realizando un cálculo o una transferencia de información entre los participantes.
•
Una barra de progreso para mostrar el desarrollo del cálculo o procedimiento del
mensaje anterior.
93
Capítulo 4: Diseño del Criptosistema
•
Un botón “Conectar”/”Desconectar” con el cual se inicia la espera de conexiones
entrantes de los diversos participantes.
•
Un botón “Salir” para abandonar la aplicación.
Figura 4-14 Pantalla principal de la aplicación SA.
Cada una de estas opciones genera las siguientes pantallas (ventanas).
(1) Esta opción solicita la selección de un archivo de configuración por parte del
usuario para su lectura, la cual reflejará la nueva configuración de manera inmediata. Se
proporciona un formato por omisión “*.cfg” reconocido automáticamente por la aplicación
(véase figura 4-15).
94
Capítulo 4: Diseño del Criptosistema
Figura 4-15 Pantalla de la opción menú “Archivo” Æ “Cargar Configuración” de la aplicación SA.
(2) Esta opción solicita la selección de un archivo de configuración del programa o
la especificación de uno nuevo, para guardar en disco la configuración actual de la
aplicación. Se proporcionan tanto un nombre por omisión “parámetros”, como un formato
por omisión “*.cfg” reconocido automáticamente por la aplicación (véase figura 4-16).
Figura 4-16 Pantalla de la opción menú “Archivo” Æ “Guardar Configuración” de la aplicación SA.
(3) Esta opción abre una hoja de propiedades en la cual se pueden seleccionar varios
aspectos de la configuración de la aplicación (véase figura 4-17).
95
Capítulo 4: Diseño del Criptosistema
Figura 4-17 Pantallas de la opción menú “Configuración” Æ “Opciones” de la aplicación SA.
En las diferentes pestañas de esta ventana se puede configurar lo siguiente:
•
Número mínimo de verificadores por los cuales se esperará conexión para la
recuperación del mensaje (parámetro t del esquema de Hsu y Wu)
•
Número máximo de verificadores por los cuales se esperará conexión para la
encripción de firma del mensaje (parámetro n del esquema de Hsu y Wu)
•
Si la sesión de conexión será en modo registro y cifrado, o en modo descifrado.
•
Si se desea enmascarar los parámetros, identificadores y resultados visualmente con
caracteres ‘*’.
Nota: Por seguridad esta configuración sólo se puede alterar al inicio de la
aplicación, por lo que no podrá ser alterada una vez que se reciban conexiones de usuarios.
(4) Esta opción es una simple pantalla “Acerca de” (véase 4-18).
96
Capítulo 4: Diseño del Criptosistema
Figura 4-18 Pantalla de la opción menú “Ayuda” Æ “Acerca de…” de la aplicación SA.
En las siguientes secciones se mostrarán las diferentes pantallas disponibles en la
interfaz de usuario del Firmante A y del grupo de verificadores Ui, y se dará una breve
explicación de cada uno de sus elementos.
4.5.2 Pantallas de la aplicación AUI ENCRIPTOR
La primera pantalla de entrada y de presentación del programa es muy similar a la
de la aplicación SA ENCRIPTOR, por lo que no será necesaria incluirla en esta sección. La
segunda pantalla de la aplicación AUI ENCRIPTOR es la interfaz principal del Firmante
(A) y del grupo de verificadores (Ui) (véase figura 4-19). Los elementos que contiene son:
•
Parámetro de cifrado p. Calculado por SA.
•
Parámetro de cifrado q. Calculado por SA.
•
Parámetro de cifrado g. Calculado por SA.
•
Parámetro de cifrado k. Calculado por A. No aplica a Ui.
•
Parámetro de cifrado d. Calculado por A. No aplica a Ui.
•
Dos LED’s indicadores de estado de conexión (Firmante/Verificador).
•
Una etiqueta donde se muestran el identificador actual de la PC, será el nombre de
la PC en el entorno de red.
•
Un área de mensajes del estado actual del programa. Aquí se muestra cuando se está
realizando un cálculo o una transferencia de información entre los participantes.
97
Capítulo 4: Diseño del Criptosistema
•
Una barra de progreso para mostrar el desarrollo del cálculo o procedimiento del
mensaje anterior.
•
Una etiqueta donde se muestre la llave pública del firmante o del verificador.
•
Una etiqueta donde se muestre la llave privada del firmante o del verificador.
•
Un botón “Registrar” para iniciar la conexión con SA.
•
Un botón “Cifrar”, el cual abre una ventana de selección del archivo a cifrar y
posteriormente a ser enviado a cada uno de los verificadores.
•
Un botón “Salir” para abandonar la aplicación.
Figura 4-19 Pantalla principal de la aplicación AUI.
La estructura del menú del programa es:
•
Archivo
o Cargar configuración (1)
o Guardar configuración (2)
•
Configuración
o Opciones (3)
98
Capítulo 4: Diseño del Criptosistema
•
Ayuda
o Acerca de… (4)
Cada una de estas opciones genera las siguientes pantallas (ventanas).
(1) Esta opción solicita la selección de un archivo de configuración del programa
para cargarlo y reflejar los diversos cambios de manera inmediata. Se proporciona un
formato por omisión “*.cfg” reconocido automáticamente por la aplicación. Es idéntica a la
de la aplicación SA ENCRIPTOR.
(2) Esta opción solicita la selección de un archivo de configuración del programa o
la especificación de uno nuevo, para guardar la configuración actual de la aplicación. Se
proporcionan tanto un nombre por omisión “parámetros”, como un formato por omisión
“*.cfg” reconocido automáticamente por la aplicación. Es idéntica a la de la aplicación SA
ENCRIPTOR.
(3) Esta opción abre una hoja de propiedades en la cual se pueden seleccionar varios
aspectos de la configuración de la aplicación. Es muy similar a la de la aplicación SA
ENCRIPTOR (véase figura 4-20).
En las diferentes pestañas de esta ventana se puede configurar lo siguiente:
•
Si la conexión será como Firmante o como Verificador.
•
La dirección IP de la PC donde se encuentra la aplicación de SA.
•
Si el cifrado será por Software o por Hardware.
•
Si se desea enmascarar los parámetros, identificadores y resultados visualmente con
caracteres ‘*’.
(4) Esta opción es una simple pantalla Acerca de…. Es idéntica a la de la aplicación
SA ENCRIPTOR.
99
Capítulo 4: Diseño del Criptosistema
Figura 4-20 Pantalla de la opción de menú “Configuración” Æ “Opciones” de la aplicación AUI.
100
Capítulo 5: Resultados
Capítulo 5
Resultados
En este capítulo se analizará el desempeño obtenido en la operación del
criptosistema. Para esto, primeramente, se mostrará el esquema de pruebas utilizado,
incluyendo un listado de las principales características de las plataformas utilizadas, en
específico, del procesador criptográfico elegido así como de la plataforma PC que se utilizó
para la ejecución de los programas cliente y servidor. Se hará un listado de las funciones de
software que se implementaron en cada una de las plataformas, lo cual permitirá visualizar
de manera más clara la cantidad de trabajo de procesamiento de datos que se confió al
dispositivo de cifrado/descifrado. Por último, se mostrarán los resultados obtenidos para las
implementaciones alternativas del módulo de cifrado/descifrado, esto con el propósito de
realizar una comparativa y poder llegar a una conclusión más precisa en cuanto a los
requerimientos de procesamiento de un sistema como el implementado en esta tesis.
5.1 Esquemas de pruebas
En las figuras 5-1 y 5-2 se puede observar el criptosistema implementado para la
realización de pruebas bajo dos posibles configuraciones: a) Cifrado, b) Descifrado. Para
ambos casos, en el módulo de cifrado/descifrado, se implementaron los siguientes módulos
de software:
101
Capítulo 5: Resultados
•
Módulo de criptografía.
o Prueba de la primalidad de un número.
o Exponenciación módulo binaria.
o Cálculo del inverso multiplicativo.
o Operación módulo (residuo)
•
Controlador del criptosistema.
o Protocolo de comunicaciones serie.
o Cifrado / Descifrado.
•
ƒ
Bloques de datos de 4 bits.
ƒ
Llaves públicas y privadas de 8 bits.
Controlador del puerto serie.
o Puerto RS-232, 57.6 Kbps, 8bits, 1bit de parada, 1bit de inicio, sin paridad.
Figura 5-1 Esquema de medición del desempeño del criptosistema: Cifrado.
Figura 5-2 Esquema de medición del desempeño del criptosistema: Descifrado.
102
Capítulo 5: Resultados
Como se puede apreciar de las figuras 5-1 y 5-2, se utilizaron dos esquemas de
prueba en los cuales la diferencia radicó en la ejecución aislada de las aplicaciones cliente y
servidor. Revisando los conceptos matemáticos del capítulo 3 se hace notoria que el trabajo
de procesamiento de cifrado lo realiza casi en su totalidad el agente Firmante, mientras que
el trabajo de procesamiento de descifrado lo realizan casi en su totalidad y de manera
simultánea los t de n verificadores del sistema.
En ambos esquemas se utilizaron computadoras personales sobre las cuales se
realizaron todas las pruebas del dispositivo de cifrado/descifrado, tanto las pruebas con la
aplicación cliente como con la aplicación servidora. Estas computadoras poseen las
siguientes características:
•
Sistema operativo Windows XP Profesional.
•
Procesador Intel Pentium IV HT a 3.0GHz.
•
Motherboard FSB 800MHz.
•
512MB DDR400.
•
Disco Duro de 120GB.
•
Tarjeta de red integrada.
•
Puertos: serie, paralelo, USB.
En esta plataforma se ejecutaron la aplicación cliente (programa del Firmante /
Verificador) y la aplicación servidora (programa de la Autoridad del Sistema). Para la
elaboración de estos programas se implementaron los siguientes módulos de software:
•
Módulo de criptografía.
o Generación de semilla aleatoria.
o Generación de números aleatorios.
o Prueba de la primalidad de un número.
o Exponenciación módulo binaria.
o Cálculo del inverso multiplicativo.
o Operación módulo (residuo)
103
Capítulo 5: Resultados
•
Ventanas:
o Pantalla principal.
o Pantalla de configuración.
o Pantalla de presentación.
o Pantalla de ayuda.
•
Controlador del criptosistema.
o Protocolo de comunicaciones serie.
o Cifrado / Descifrado.
•
ƒ
Bloques de datos de 4 bits.
ƒ
Llaves públicas y privadas de 8 bits.
Controlador del puerto serie.
o Puerto RS-232, 57.6Kbps, 8bits, 1bit de parada, 1bit de inicio, sin paridad.
•
Controlador del puerto Ethernet.
o Protocolo utilizando sockets de Windows.
El protocolo de comunicaciones entre la computadora personal y el dispositivo de
cifrado permite programar opciones como lo son la velocidad de comunicación y el tamaño
del paquete de datos a enviar y recibir. En el controlador 56F8323 se implementaron dos
buffers internos, uno para el proceso de cifrado y un segundo para el proceso de descifrado;
esto debido a la necesidad de transmitir paquetes de diferentes tamaños para el cifrado y el
descifrado de los datos. Esto resultó ser de gran relevancia ya que se encontró que el
desempeño del criptosistema es afectado en función del tamaño de estos paquetes.
5.2 Desempeño del criptosistema
Se realizaron repetidas pruebas de cifrado y descifrado sobre archivos desde 20, 50,
100, 200, 500 y hasta 1000KB, con el propósito de obtener un tiempo promedio de
ejecución. En la figura 5-3 se muestran los resultados obtenidos en estas pruebas, tomando
en cuenta también dos diferentes tamaños de buffers de transmisión / recepción.
104
Capítulo 5: Resultados
Figura 5-3 Tiempos de cifrado del criptosistema basado en el 56F8323.
Los resultados mostrados en la gráfica anterior muestran el desempeño medido del
criptosistema. Para un análisis más detallado del desempeño del criptosistema es necesario
tomar en cuenta los tiempos de transmisión entre el dispositivo y la PC; este tipo de análisis
se muestra en la tabla 5.1.
Tabla 5.1 Análisis de desempeño del criptosistema 56F8323: cifrado.
CIFRADO EN EL CRIPTOSISTEMA 56F8323
Tamaño
de
archivo
Tamaño de
paquete
Tiempo
promedio de
cifrado
“Medido”
Bytes
20,000
50,000
100,000
20,000
50,000
100,000
Bytes
20
20
20
60
60
60
segs
119.30
298.25
596.50
55.38
137.75
277.63
Velocidad de
transmisión del
puerto
Tiempo de
transmisión de
archivo
Tiempo
promedio de
cifrado
“Real”
Desempeño
promedio real de
cifrado
Bits/seg
57,600
57,600
57,600
57,600
57,600
57,600
segs
18.40
46.01
92.01
18.32
45.79
91.58
msegs/byte
5.04
5.04
5.04
1.85
1.84
1.86
bytes/seg
198.22
198.22
198.22
539.61
543.71
537.49
105
Capítulo 5: Resultados
Los resultados obtenidos se pueden también interpretar como:
•
Velocidad de cifrado promedio (aparente):
•
Tiempo de cifrado promedio (aparente):
•
Velocidad de cifrado promedio (real):
•
Tiempo de cifrado promedio (real):
361.44 bytes/seg
2.77 mseg/byte
540.27 bytes/seg
1.85 mseg/byte
Los valores aparentes se refieren a aquellos que reflejan el tiempo total transcurrido
para el usuario del sistema e incluyen los tiempos de transmisión hacia y desde el
criptosistema. Los valores reales son aquellos que reflejan únicamente el tiempo en el cual
el dispositivo realizó las operaciones matemáticas sobre los datos.
Se realizaron las mismas series de pruebas en el caso del descifrado, los resultados
se muestran en la figura 5-4.
Figura 5-4 Tiempos de descifrado del criptosistema basado en el 56F8323.
106
Capítulo 5: Resultados
Tomando en cuenta los tiempos de transmisión, al igual que en el caso del cifrado,
se obtuvieron los resultados de la tabla 5.2:
Tabla 5.2 Análisis de desempeño del criptosistema 56F8323: descifrado.
DESCIFRADO EN EL CRIPTOSISTEMA 56F8323
Tamaño
de
archivo
Tamaño de
paquete
Tiempo
promedio de
descifrado
“Medido”
Velocidad de
transmisión del
puerto
Tiempo de
transmisión de
archivo
Tiempo promedio
de descifrado
“Real”
Desempeño
promedio real de
descifrado
Bytes
20,000
50,000
100,000
20,000
50,000
100,000
Bytes
20
20
20
60
60
60
segs
47.50
118.00
237.75
46.50
116.00
231.75
Bits/seg
57,600
57,600
57,600
57,600
57,600
57,600
segs
18.40
46.01
92.01
18.32
45.79
91.58
msegs/byte
1.45
1.44
1.46
1.41
1.40
1.40
bytes/seg
687.35
694.51
686.17
709.62
712.15
713.42
Estos resultados se pueden interpretar también como:
•
Velocidad de descifrado promedio (aparente): 426.34 bytes/seg
•
Tiempo de descifrado promedio (aparente):
•
Velocidad de descifrado promedio (real):
•
Tiempo de descifrado promedio (real):
2.35 mseg/byte
700.54 bytes/seg
1.43 mseg/byte
5.3 Comparativa entre plataformas
El criptosistema también se implementó en otras dos plataformas: el primero basado
en el controlador híbrido 56F801 y el segundo basado en el microcontrolador de propósito
general de 16 bits MC9S12DP256B, ambos de Freescale Semiconductors. Los dos
dispositivos anteriores son procesadores muy conocidos por los desarrolladores e
investigadores de dispositivos embebidos, y el objetivo de la comparación fue el de
comprobar que se realizó la elección de un buen procesador de datos para la
implementación práctica del criptosistema. La información relativa a estos dispositivos se
puede también encontrar en el capítulo anterior, en donde se hace una revisión completa de
sus características y sus capacidades de procesamiento.
107
Capítulo 5: Resultados
Se llevó a cabo la misma metodología de pruebas para ambas plataformas,
obteniendo los resultados que se muestran en la figura 5-5. Debido a que el
comportamiento de los algoritmos criptográficos es lineal, cuando se mantiene constante el
tamaño del dato a cifrar (en este caso 8 bits), la variación en el tiempo de descifrado será
proporcional a la variación en el tiempo de cifrado, esto, entre plataformas; por lo tanto,
sólo se realizaron pruebas para el procedimiento de descifrado.
Figura 5-5 Tiempos de descifrado del criptosistema basado en el 56F801.
Tomando en cuenta los tiempos de transmisión se obtuvo la tabla 5.3:
Tabla 5.3 Análisis de desempeño del criptosistema 56F801: descifrado.
DESCIFRADO EN EL CRIPTOSISTEMA 56F801
Tamaño
de
archivo
Tamaño de
paquete
Tiempo
promedio de
descifrado
“Medido”
Bytes
20,000
50,000
100,000
Bytes
20
20
20
segs
68.00
169.50
344.25
Velocidad de
transmisión del
puerto
Tiempo de
transmisión de
archivo
Tiempo promedio
de descifrado
“Real”
Desempeño
promedio real de
descifrado
Bits/seg
57,600
57,600
57,600
segs
18.23
45.57
91.15
msegs/byte
2.49
2.48
2.53
bytes/seg
401.84
403.46
395.09
108
Capítulo 5: Resultados
Estos resultados se pueden interpretar también como:
•
Velocidad de descifrado promedio (aparente): 293.20 bytes/seg
•
Tiempo de descifrado promedio (aparente):
•
Velocidad de descifrado promedio (real):
•
Tiempo de descifrado promedio (real):
3.41 mseg/byte
400.13 bytes/seg
2.50 mseg/byte
El controlador híbrido 56F801 no posee una cantidad de memoria tan favorable
como el 56F8323. Por esta causa, el máximo tamaño de buffer para este dispositivo es
precisamente 20 bytes de entrada / 80 bytes de salida. En la figura 5-6 se muestran también
los resultados de las pruebas realizadas en el controlador de 16 bits MC9S12DP256B.
Figura 5- 6 Tiempos de descifrado del criptosistema basado en el MC9S12DP256B.
109
Capítulo 5: Resultados
Tomando en cuenta los tiempos de transmisión se obtuvo la tabla 5.4:
Tabla 5.4 Análisis de desempeño del criptosistema MC9S12DP256B: descifrado.
DESCIFRADO EN EL CRIPTOSISTEMA MC9S12DP256B
Tamaño
de
archivo
Tamaño de
paquete
Tiempo
promedio de
descifrado
“Medido”
Velocidad de
transmisión del
puerto
Tiempo de
transmisión de
archivo
Tiempo promedio
de descifrado
“Real”
Desempeño
promedio real de
descifrado
Bytes
20,000
50,000
100,000
20,000
50,000
100,000
Bytes
20
20
20
60
60
60
segs
83.00
206.50
405.75
79.50
198.25
398.00
Bits/seg
57,600
57,600
57,600
57,600
57,600
57,600
segs
18.40
46.01
92.01
18.32
45.79
91.58
msegs/byte
3.23
3.21
3.14
3.06
3.05
3.06
bytes/seg
309.61
311.54
318.74
326.88
327.95
326.35
Los resultados del microcontrolador MC9S12DP256B se pueden interpretar
también como:
•
Velocidad de descifrado promedio (aparente): 247.43 bytes/seg
•
Tiempo de descifrado promedio (aparente):
•
Velocidad de descifrado promedio (real):
•
Tiempo de descifrado promedio (real):
4.04 mseg/byte
320.18 bytes/seg
3.12 mseg/byte
Toda la información mostrada en las gráficas y tablas anteriores se refiere a
criptosistemas basados en dispositivos embebidos para su implementación. Se decidió, para
poder realizar una comparación exhaustiva, medir los tiempos de cifrado y descifrado de la
PC; los resultados obtenidos se muestran en la figura 5-7.
Estos resultados se pueden interpretar también como:
•
Velocidad de cifrado promedio:
•
Tiempo de cifrado promedio:
•
Velocidad de descifrado promedio:
•
Tiempo de descifrado promedio:
1,543.20 bytes/seg.
649.34 µseg/byte.
35,676.32 bytes/seg.
31.13 µseg/byte.
110
Capítulo 5: Resultados
Figura 5-7 Tiempos de cifrado y descifrado del criptosistema simulado en la PC.
Los resultados obtenidos en esta sección serán interpretados en el siguiente capítulo,
en donde se realizará una comparativa de esta información, y se propondrán esquemas de
implementación que permitirán obtener un mejor desempeño de un criptosistema basado en
el algoritmo de verificación compartida implementado.
111
Capítulo 6: Conclusiones
Capítulo 6
Conclusiones
6.1 Conclusiones
Para la presentación de las conclusiones obtenidas en la presente investigación, se
clasificarán de acuerdo a los siguientes aspectos:
1) Software generado.
2) Firmware generado.
3) Algoritmos empleados.
4) Criptosistema.
6.1.1 Software generado
La aplicación cliente y la aplicación servidora fueron desarrolladas en el lenguaje de
programación C++, y en particular, la versión para Windows conocida como Visual C++.
Se eligió este lenguaje de programación debido a su amplia aceptación como un lenguaje de
programación de sistemas, y su alta eficiencia para generar código similar en desempeño al
lenguaje ensamblador [40]. En particular este lenguaje es muy eficiente para generar código
que manipule matemáticamente números, a diferencia de otros lenguajes como pueden ser
Visual Basic o Java.
112
Capítulo 6: Conclusiones
El código se diseñó siguiendo las especificaciones de programación estrictas de
ANSI, permitiendo una alta portabilidad del código. La gran ventaja de generar código de
esta forma es la reutilización del mismo, ya que fue el mismo código el que se utilizó en la
implementación de simulación del criptosistema en la PC, como el que se implementó en
las tres distintas plataformas de nuestro criptosistema; en todas estas se utilizó el mismo
archivo de código sin cambios en la codificación del mismo. Esto permitió generar código
eficiente en todas las plataformas sin la necesidad de conocer el lenguaje máquina de cada
una de ellas en forma individual.
Para la comunicación mediante una tarjeta de red Ethernet se utilizó la tecnología de
software conocida como sockets, la cual ya es un estándar de programación reconocido en
una gran variedad de sistemas operativos para las comunicaciones entre computadoras en
una red. En el criptosistema desarrollado nos mantuvimos dentro del ámbito de operación
de una red de computadoras de área local (LAN). Esto último tuvo gran relevancia en el
diseño del criptosistema debido principalmente a dos puntos: 1) El manejo de direcciones
IP se mantuvo local, 2) No se contempla una conexión por medio de Internet. Estos puntos
tienen un impacto directo en el esquema de seguridad del software generado, ya que una
conexión por medio de la Internet por ejemplo, posee requerimientos de seguridad más
estrictos, así como el establecimiento de la aplicación servidora como un servicio ofrecido
por el servidor, además de las restricciones de seguridad y de configuración de un firewall,
por ejemplo.
6.1.2 Firmware generado
Se realizó la programación de tres diferentes plataformas, a saber: 1) el
microcontrolador de 16 bits de la familia HC(S)12, 2) el controlador híbrido 56F801 de la
familia 56800, y 3) el controlador híbrido de la familia 56800E, todos ellos de Freescale
Semiconductors. Para la elaboración del firmware respectivo de estos procesadores se
emplearon compiladores específicos para cada una de las familias, los cuales proporcionan
gran número de herramientas para la generación de código y administración de los recursos
internos del procesador. El lenguaje de programación utilizado fue también el lenguaje de
113
Capítulo 6: Conclusiones
programación C/C++, lo cual permitió gran reutilización del código entre cada una de las
plataformas con un mínimo ajuste de aplicación individual.
La tecnología empleada en la elaboración de estos microcontroladores y DSPs,
como se analizó en el capítulo 4, es tecnología de punta, proporcionando capacidades de
procesamiento y periféricos que en antaño se implementaban con circuitos periféricos
adicionales. Una gran ventaja y flexibilidad de estos procesadores es la gran cantidad de
memoria interna que proporcionan, permitiendo un modelo de programación flexible así
como también la optimización de la velocidad de ejecución de los algoritmos contra un uso
extendido de recursos de memoria.
En la actualidad ya es de aceptación generalizada el uso de compiladores para este
tipo de plataformas e incluso para microcontroladores de 8 bits. El código generado de
ninguna manera se queda rezagado en cuanto a su migración a nuevas plataformas de 32
bits, ya que un código C/C++ bien diseñado posee una alta portabilidad.
6.1.3 Algoritmos empleados
Durante la fase de implementación de los algoritmos de cifrado y descifrado se
encontró una gran limitante: la magnitud necesaria de los números utilizados en este tipo de
algoritmos criptográficos. Para obtener una buena seguridad en un criptosistema basado en
un algoritmo de criptografía de llave pública, son comúnmente necesarios números de 1024
a 2048 bits. Los registros de la mayoría de los microcontroladores son de 8 a 16 bits, siendo
en los DSPs y en la mayoría de las computadoras personales de 32 bits. Esto hace necesario
el desarrollo específico de rutinas matemáticas y de manejo en memoria, no disponibles de
manera nativa como operaciones de bajo nivel en ninguno de estos procesadores.
En criptosistemas prácticos aún un tamaño de llave de 128 bits, para un algoritmo
de criptografía de llave pública, es considerado como inseguro [3]. Debido a que la
complejidad inherente al desarrollo de rutinas de suma, multiplicación, exponenciación y
división de números tan grandes no era de tanta relevancia como la demostración de los
114
Capítulo 6: Conclusiones
conceptos pertinentes a la validación de este tema de tesis, se decidió el uso de un tamaño
de dato de prueba de 8 bits. Una vez desarrolladas e implementadas estas rutinas
matemáticas aumentarían los tiempos de procesamiento, aunque los tiempos de transmisión
de los datos serían idénticos a los actuales.
Es importante considerar que la gran mayoría de los algoritmos de llave pública
modernos sólo encuentran su uso para el intercambio inicial de llaves de una sesión, así
como para servicios de autentificación y firma digital, esto debido a que aún para una
computadora sería una gran carga de procesamiento el realizar un cifrado completo con uno
de estos algoritmos de llave pública. En la actualidad es común encontrar esquemas donde
se utiliza la criptografía de llave pública para el intercambio de llaves de criptografía
privada, por ejemplo, es común observar el uso del algoritmo de Diffie–Hellman para el
intercambio de llaves de sesión (llaves de criptografía privada), para posteriormente utilizar
un algoritmo de cifrado como el DES para el intercambio de la información [3]. La
tecnología de comunicaciones segura de Internet, conocida como conexiones SSL, utiliza
un esquema similar al descrito para establecer una conexión segura.
De esta gran carga de procesamiento surgió la idea original del desarrollo de una
plataforma, que aunque no tuviera la capacidad de procesamiento de una computadora
personal, le permitiera a esta operar en un ambiente seguro sin procesar una fuerte carga
extra, como lo son todos los algoritmos de criptografía de llave pública. La aplicación de un
criptosistema así sería muy deseable, sobre todo en ambientes en donde una respuesta
inmediata no es necesaria, sino que pudiera ser aceptable o aun deseable una ejecución en
segundo plano dejando a las computadoras o estaciones de trabajo libres para procesar
tareas de otra índole.
6.1.4 Criptosistema desarrollado
La tabla 6.1 muestra un resumen del desempeño obtenido en las diferentes
plataformas que se utilizaron en la implementación del dispositivo de cifrado/descifrado.
En esta tabla, a diferencia de las presentadas en el capítulo anterior, se muestra el
115
Capítulo 6: Conclusiones
desempeño real de los dispositivos de cifrado, sin tomar en cuenta los tiempos de
transmisión de los datos; esto permitió realizar una comparación directa de las diferentes
capacidades de procesamiento de las diferentes plataformas. En las figuras 6-1 y 6-2 se
muestra de manera gráfica la información de la tabla 6.1, esto para una mejor visualización
de las magnitudes a comparar.
Tabla 6.1 Comparativa de desempeño de las diferentes implementaciones del criptosistema.
56F8323
Velocidad
Promedio (KB/seg)
Tiempo Promedio
(mseg/byte)
Costo $ (Dólares)
[30]
56F801
MC9S12DP256B
PENTIUM IV HT
Cifrado
Descifrado
Cifrado
Descifrado
Cifrado
Descifrado
Cifrado
Descifrado
540.27
700.54
x
400.13
X
320.18
1543.2
35676.32
1.85
1.43
x
2.5
X
3.12
0.65
0.03
9.5
3.5
15
> 250
Figura 6-1 Comparación de velocidades de descifrado entre plataformas.
Las figuras 6-1 y 6-2 ilustran de manera gráfica una conclusión directa: la capacidad
de procesamiento de la computadora personal y en particular una de alto desempeño como
la utilizada en este trabajo, es en gran manera superior al desempeño obtenido en las
116
Capítulo 6: Conclusiones
implementaciones propias. Esta conclusión, aunque evidente, puede ser un poco
apresurada, ya que para realizar una comparación objetiva es necesario tomar en cuenta
factores muy importantes como lo es por ejemplo, el costo real de cada uno de estos
sistemas. Es necesario hacer notar que los costos de la tabla 6.1 nos muestran el costo por
unidad para bajos volúmenes, y además, que en el caso de la computadora personal no se
está contabilizando el costo de la demás circuitería necesaria para su operación. Es muy
probable que tomando en cuenta los costos adicionales, tanto del hardware como del
software, posicionen a este procesador como una solución no óptima para esta aplicación.
Figura 6-2 Comparación de tiempos de descifrado entre plataformas.
Los resultados obtenidos durante el desarrollo alentaron la búsqueda de otras
alternativas que ofrecieran el balance adecuado entre costo y desempeño, sin estar en el
extremo de los muy altos costos de una computadora personal ni en el otro extremo con un
desempeño menor y limitado. La figura 6-3, proporcionada por BDTI [26], una compañía
dedicada al benchmarking de procesadores, nos proporciona un panorama de la capacidad
de procesamiento de los Microprocesadores/DSP a ser elegidos en una implementación
117
Capítulo 6: Conclusiones
teórica. Esta gráfica y los datos, que a continuación se analizarán, presentan una solución
viable y balanceada en costo/desempeño.
Figura 6-3 Comparación de DSPs comerciales.
Como punto interesante de la gráfica anterior se hace notar que en ella figura el
procesador utilizado en el criptosistema implementado: el DSP56F83XX, aunque la versión
aquí mostrada es la de 120MHz/120MIPS. También se puede observar el desempeño de la
familia de procesadores DSP MSC81XX de Freescale Semiconductors, la cual a una
frecuencia de 300MHz ofrece un desempeño casi 10 veces mayor en magnitud que el
procesador actual del criptosistema.
Es importante mencionar que el MSC81XX ilustrado en la anterior gráfica se refiere
a un DSP de Freescale Semiconductors con un núcleo SC140, siendo este DSP mayor en
capacidad de procesamiento que un Intel Pentium III (como punto de referencia de
conocimiento público). Recordando además que entre los procesadores elegidos como
posibles candidatos se encuentra el MSC8122 el cual incluye 4 de estos núcleos SC140 y
118
Capítulo 6: Conclusiones
que en capacidad de procesamiento equivaldría a un solo núcleo SC140 con velocidades de
hasta 2.0GHz. Este último procesador ofrecería la asombrosa capacidad de procesamiento
de hasta 8000 MIPS [30] contra la actual de 60 MIPS de nuestro criptosistema. En la tabla
6.2 se hace un listado de las diferentes opciones que se encontraron en esta revisión de
posibles soluciones alternativas. Información sobre estos procesadores se encuentra de
manera muy amplia en el sitio WEB del fabricante.
Tabla 6.2 Soluciones embebidas alternativas del dispositivo de cifrado/descifrado, que ofrecen un
mejor balance costo/desempeño.
Costo
unitario
($)
MIP/$
56F8323
60 MIPS
MSC8101
250 MIPS
MSC8101
300 MIPS
MSC8122
6400 MIPS
MSC8122
8000 MIPS
MSC8126
6400 MIPS
MSC8126
8000 MIPS
9.5
88.06
105.70
198.24
237.84
208.08
249.72
6.316
2.839
2.838
32.284
33.636
30.757
32.036
La tabla 6.2 ofrece un dato importante: la razón de unidad de desempeño por dólar.
De los resultados se puede observar que la mejor opción tomando en cuenta el criterio de
menor costo por unidad de desempeño sería el MSC8122 de 6400 MIPS a 200 dólares. Se
podría pensar también en una versión de alto desempeño y de mayor costo basado en el
MSC8126 de 8000 MIPS a 250 dólares, o en una versión de bajo costo pero mucho menor
desempeño del MSC8101 de 300 MIPS a 100 dólares. La elección óptima se realizará
dependiendo del mercado al cual se enfocaría el producto o de los requerimientos de una
aplicación en particular.
Es importante recalcar que el criptosistema diseñado cumplió el objetivo planteado,
el cual era implementar un dispositivo cuya principal función fuera liberar a la PC de todo
el procesamiento criptográfico y que además fuera un dispositivo de bajo costo. El
problema en la implementación realizada en la práctica radicó principalmente en dos
aspectos: 1) En la baja velocidad de la interfaz de transferencia de datos basada en el
estándar RS-232, y 2) La limitante económica para adquirir una plataforma de mayor
capacidad de procesamiento. La interfaz RS-232 no es una interfaz adecuada para una
constante y masiva transferencia de datos, aun a velocidades que pudieran alcanzar los
115.2 Kbps; en la actualidad interfaces como la USB 2.0 con velocidades de hasta 400
119
Capítulo 6: Conclusiones
Mbps, son la solución ideal, aunque de mayor complejidad intrínseca. De la tabla 5.4 se
puede obtener un dato interesante que afirma el bajo desempeño de la interfaz RS-232 a
57.6 Kbps para nuestra aplicación; de esta tabla se puede extraer que el 22.71% del tiempo
total de cifrado fue empleado únicamente para la transmisión de los datos. Con una interfaz
de comunicaciones como la USB 1.1 a 12 Mbps, se podría obtener un porcentaje de 0.21%
para el tiempo de transmisión y con la USB 2.0 a 480 Mbps podría ser menor al 0.01%.
6.2 Trabajos futuros
El tema de la seguridad de la información en redes es en la actualidad de gran
relevancia y motivo de grandes proyectos de investigación y desarrollo. El actual uso cada
vez más pronunciado de tecnología inalámbrica para la implementación de redes de
computadoras agudiza esta problemática [41]. Son cada vez más constantes, intensos e
ingeniosos los ataques que se idean para romper la seguridad de una red. Algoritmos de
cifrado que anteriormente se consideraban seguros han quedado rezagados al ser
desarrollados algoritmos muy eficientes para romperlos en cuestión de unas cuantas horas e
inclusive minutos. En la actualidad es necesario el desarrollo y propuesta de nuevas
plataformas que ofrezcan un mayor nivel de seguridad o como en términos criptográficos se
dice, sean computacionalmente seguros.
El desarrollo de una plataforma como la implementada en este trabajo de tesis y el
estudio profundo de los algoritmos de cifrado de llave pública, permiten visualizar de
manera más clara una serie de trabajos futuros que permitirían considerar la plataforma
desarrollada como candidata a ser un producto profesional digno de ser comercializado.
6.2.1 Mejoras en las capacidades actuales del criptosistema
Lo primero que se propone como un trabajo futuro inmediato es la mejora del
hardware y software desarrollados. Es necesario que se implementen los algoritmos para
realizar un cifrado/descifrado con números de 1024 ó 2048 bits, siendo estas cantidades
120
Capítulo 6: Conclusiones
consideradas en la actualidad como seguras y prudentes para implementarse en sistemas de
seguridad críticos. Es muy probable que al implementar estos algoritmos, la capacidad de
procesamiento de las plataformas de 8 ó 16 bits se vea rezagada; la migración a una
plataforma de 32 bits sería entonces necesaria.
Un segundo requerimiento es el cambio de la interfaz RS-232 por una interfaz de
alto ancho de banda como podría ser el estándar USB; esto con el propósito de derribar la
limitante de ancho de banda impuesto por la interfaz actual. Todas estas mejoras sólo
apuntan a desarrollar de manera práctica la implementación teórica propuesta, con alguno
de los procesadores de la tabla 6.2.
También es necesario optimizar y por consiguiente disminuir los tiempos de
transferencia masiva de datos. Se sugiere el uso de buffers adicionales para el intercambio
de información de un bloque, mientras de manera concurrente se realiza el procesamiento
de cifrado/descifrado sobre un segundo bloque. Es posible optimizar el comportamiento
promedio del dispositivo al realizar también una búsqueda del mejor tamaño de paquete,
aunque esto en realidad variará por una amplia gama de factores como lo pueden ser las
condiciones de ejecución del programa de la PC, velocidad del procesador, cantidad de
programas en ejecución, etc. Una limitante para esto es, obviamente, la poca memoria
disponible en un dispositivo embebido de bajo costo; es en la variación de estos
parámetros, para adecuarlo a la necesidad en particular, donde se definirá el costo del nuevo
diseño.
6.2.2 Conexión segura a Internet
En la programación de la interfaz de software para la conexión LAN se utilizó la
tecnología winsock, sin la activación de esquemas de seguridad adicionales. Es posible
agregar código que permite realizar una conexión segura al servidor además de proveer
autentificación. Este cambio permitiría que el criptosistema desarrollado pudiera operar
bajo un ambiente de mayor ámbito como podría ser Internet y ejecutar la aplicación cliente
desde diferentes lugares del mundo. La conexión segura de mayor uso que implementa la
121
Capítulo 6: Conclusiones
tecnología winsock es una conexión SSL con autentificación mediante certificados
digitales.
6.2.3 Autorización colectiva remota para el acceso de una cuenta
Las aplicaciones de un criptosistema como el desarrollado sólo se encuentra
limitado por la imaginación de los diseñadores e innovadores. Una propuesta para la
aplicación de este criptosistema podría ser el acceso a una cuenta de banco requiriendo la
autorización colectiva de un grupo de inversionistas que confirmarán la cantidad a retirar.
Se autorizaría el retiro si t de n inversionistas están presentes al mismo tiempo que el
criptosistema ofrece confidencialidad y autentificación de cada uno de los participantes.
122
Abreviaturas y acrónimos
A
A
Firmante
ADC
Convertidor analógica a digital
Analog to Digital Converter
ALU
Unidad aritmética lógica
Arithmetic Logic Unit
AMD
American Micro Devices
API
Interfaz del programa de aplicación
Application Program Interface
ANSI
Instituto Nacional Americano de Estándares
American National Standard Institute
ASCII
Código estándar americano para el intercambio de información
American Standard Code for Information Interchange
B
bps
Bits por segundo
BDTI
Berkeley Design Technology Inc.
C++
Lenguaje de programación de alto nivel
COP
Computadora operando apropiadamente
C
Computer Operating Properly
CPU
Unidad central de procesamiento
Central Processing Unit
CRT
Teorema del residuo chino
Chinese Reminder Theorem
CSMA/CD
Acceso múltiple con detección de portadora y detección de colisiones
Carrier Sense Multiple Access with Collision Detection
D
DAC
Convertidor digital a analógico
Digital to Analog Converter
123
DES
Estándar de cifrado de datos
Data Encryption Standard
DLP
Problema del logaritmo discreto
Digital Logarithm Problem
DMA
Acceso directo a memoria
Direct Memory Access
DSA
Algoritmo de firma digital
Digital Signature Algorithm
DSS
Estándar de firma digital
Digital Signature Standard
DSP
Procesador digital de señales
Digital Signal Processor
E
EEPROM
Memoria de sólo lectura borrable y programable eléctricamente
Electrical Erasable & Programmable Read Only Memory
F
FTP
Protocolo para la transferencia de archivos
File Transfer Protocol
G
GF
Campo Finito
Galois Field
GPIO
Entrada/Salida de propósito general
General Purpose Input Output
I
ID
Identificador
Identification
IEEE
Instituto de Ingenieros en Electricidad y Electrónica
Institute of Electrical and Electronics Engineers
IP
Protocolo de Internet
Internet Protocol
124
ISO
Organización Internacional de Estándares
International Standard Organization
K
Kbps
Kilobits por segundo
LAN
Red de área local
L
Local Area Network
LCD
Pantalla de cristal líquido
Liquid Crystal Display
LLC
Control del enlace de datos
Logical Link Control
M
MAC
Control de acceso al medio
Media Access Control
MAC
Multiplicar y sumar con acarreo
Multiply and Accumulate with Carry
Mbps
Megabits por segundo
MDI
Interfaz dependiente del medio
Media Dependent Interface
MII
Interfaz independiente del medio
Media Independent Interface
MIPS
Millones de instrucciones por segundo
Million Instructions per second
O
OnCE
Emulación en circuito
On Chip Emulation
OSI
Interconexión de sistemas abiertos
Open Systems Interconnection
P
PC
Computadora personal
Personal Computer
125
PCI
Interfaz de componentes periféricos
Peripheral Component Interface
PLL
Lazo de amarre de fase
Phase Locked Loop
PWM
Modulación de ancho de pulso
Pulse Width Modulation
R
RAM
Memoria de acceso aleatorio
Random Access Memory
ROM
Memoria de sólo lectura
Read Only Memory
RSA
Algoritmo de criptografía pública de uso común
Rivest Shamir Adleman
S
SA
Autoridad del sistema
System Authority
SCI
Interfase de comunicación serie
Serial Communication Interface
SIMD
Instrucción simple con datos múltiples
Single Instruction Multiple Data
SCI
Interfase serie de periféricos
Serial Peripheral Interface
SSL
Capa de conexión segura
Security Socket Layer
T
TCP
Protocolo de control de la transmisión
Transmission Control Protocol
U
UDP
Protocolo de datagrama de usuario
User Datagram Protocol
126
USB
Bus serie universal
Universal Serial Bus
V
VLIW
Palabra de instrucción muy grande
Very Long Instruction Word
W
WLAN
Red inalámbrica de área local
Wireless Local Area Network
WOSA
Arquitectura de sistemas abiertos de Windows
Windows Open Systems Architecture
WWW
World Wide Web
127
Referencias
[1]
Manual de Criptografía [Fecha de consulta: Agosto 2005], disponible en
http://www.htmlweb.net/seguridad/cripto/cripto_2.html.
[2]
Jaime Gutiérrez Gutiérrez, Criptografía, Seguridad en Redes Informáticas y de
Telecomunicaciones, Universidad de Cantabria, Laredo, agosto de 2003.
[3]
William Stallings, Cryptography and Network Security, Second Edition, 1999.
[4]
Diffie, W.; and Hellman, M. “The first ten years of public key cryptography”.
Proceedings of the IEEE, May 1988.
[5]
Diffie, W.; and Hellman, M. “New directions in cryptography”, IEEE Trans.
Inform. Theory, 1976, IT-22.
[6]
Rivest, R.; Shamir, A.; and Adleman, L., “A method for obtaining Digital
Signatures and public key Cryptosystems”, Communications of the ACM, February
1978.
[7]
ElGamal T., “A public key Cryptosystem and a signature Scheme based on discrete
logarithms”. IEEE Transactions on Information Theory, July 1985, IT-31.
[8]
Scheiner Bruce, Applied Cryptography, 2nd Edition, John Wiley & Sons, New
York, 1996.
[9]
Hsu C.L., Wu T.C., “Authenticated encryption scheme with (t, n) shared
verification”. IEEE Proceedings, 117-121, January 1998.
[10]
Héctor Ricardo Hernández de León, Esquema de encripción autentificado
empleando verificación compartida, Tesis de Maestría, cenidet, junio de 2001.
[11]
Lucena López Manuel José, Criptografía y Seguridad en computadores, Tercera
Edición, marzo de 2003.
[12]
Menezes Alfred, VAN OORSCHOT Paul, VANSTONE Scott, Handbook of
Applied Cryptography. CRC Press. ISBN 0-8493-8523-7. Boca Ratón, Florida,
1996.
[13]
Miller, G., “Riemann’s Hypothesis and Tests for Primality”. Proceedings of the
Seventh Annual ACM Symposium on the Theory of Computing, May 1975.
[14]
Rabin, M., “Probabilistic Algorithms for Primality Testing”. Journal of Number
Theory, December 1980.
128
[15]
Shamir A., “How to share a secret”, Communications of the ACM, 1979, 24, (11),
pp. 612-613.
[16]
Nyberg K., Rueppel R.A., “A new signature scheme based on the DSA giving
message recovery”, Proceedings of the 1st ACM conference on Computer and
communications security, 1993, pp. 58-61.
[17]
Nyberg K., Rueppel R.A., “Message recovery for signature scheme based on the
discrete logarithm problem”, Des., Codes, Cryptogr., 1996, 7, (1-2), pp. 61-81.
[18]
Agnew G.B., Mullin B.C., y Vanstone S.A., “Improved digital signature scheme
based on discrete exponentiation”. Electron. Lett., 1990, 26, (14), pp. 1024-1025.
[19]
ElGamal T., “A public key Cryptosystem and a signature Scheme based on discrete
logarithms”. IEEE Transactions on Information Theory, July 1985, IT-31, (4), pp.
469-472.
[20]
Hoster P., Michels M., y Peterson H., “Comment: Digital signatura with (t, n)
shared verification based on discrete logarithms”. Electron. Lett., 1995, 31, (14), pp.
1137.
[21]
Harn L., “Digital signature with (t,n) shared verification based on discrete
logarithms”. Electron. Lett., 1993, 29, (24), pp. 2094-2095.
[22]
Owens Les, Karygiannis Tom, “Wireless Network Security: 802.11, Bluetooth and
Hanheld devices”. NIST Special Publication 800-48, 1993.
[23]
DELL, “Wireless security in 802.11 (Wi-Fi) networks”. White Paper, January 2003.
[24]
Texas Instruments, Búsqueda de tarjetas de evaluación y desarrollo de tarjetas PCI
con procesadores DSP’s [en línea] [Fecha de consulta: Agosto 2005]. Disponible en
http://www.ti.com.
[25]
Freescale Semiconductors, Búsqueda de tarjetas de evaluación y desarrollo de
tarjetas PCI con procesadores DSP’s [en línea] [Fecha de consulta: Agosto 2005].
Disponible en http://www.freescale.com.mx.
[26]
Microprocessors vs. DSPs: Fundamentals and Distinctions. Embedded Systems
Conference (Workshop 324), http://www.BDTI.com, 2004.
[27]
http://www.plxtech.com, Agosto de 2004.
[28]
http://www.amcc.com, Agosto de 2004.
[29]
http://www.amd.com, Agosto de 2004.
[30]
http://www.freescale.com.mx, Agosto de 2004.
129
[31]
http://www.ti.com, Agosto de 2004.
[32]
http://www.sonicwall.com, Agosto de 2004.
[33]
http://www.safenet-inc.com, Agosto de 2004.
[34]
Webopedia, Enciclopedia en línea dedicada a la tecnología de computadoras [Fecha
de consulta: Agosto 2005]. Disponible en http://www.webopedia.com.mx.
[35]
Cisco Systems Inc., Internetworking Technology Handbook, Cisco Documentation
Online, Agosto 2005. Disponible en
http://www.cisco.com/univercd/cc/td/doc/cisintwk/ito_doc/ethernet.htm.
[36]
Motorola 8/16 bit Controller Continuum, http://www.freescale.com.mx, 2004.
[37]
Kruglinski, David J.; Shepherd, George, Programación Avanzada con Microsoft
Visual C++ .NET. Microsoft Press, McGraw Hill, 2003.
[38]
Bennett, D., Visual C++ 5 para desarrolladores. Prentice Hall, 1997.
[39]
Pappas, Chris H.; Murray, William H., Visual C++ 6, Manual de referencia.
McGraw Hill, 1999.
[40]
Ceballos, Javier Francisco: Microsoft Visual C++ 6, Programación Avanzada en
Win32. Alfaomega, 1999.
[41]
Tanenbaum, Andrew: Computer Networks, Cuarta Edición, Prentice Hall, 2003.
[42]
Brey, Barry B.; Los microprocesadores de Intel, arquitectura, programación e
interfaces, Tercera Edición, Prentice Hall, 1995.
[43]
García Andrew, “802.11i Strengthens Wi-Fi Security”, http://www.eweek.com,
Enero de 2005.
130
Anexo A
131
Descargar