Sie sind auf Seite 1von 65

INSTITUTO TECNOLGICO

DE MORELIA

INSTITUTO TECNOLGICO DE MORELIA


JOS MARA MORELOS Y PAVN

REPORTE FINAL DE RESIDENCIAS


PROFESIONALES

PROYECTO:
IMPLEMENTACIN DE PROTOCOLO DE AUTENTICACIN EN RED
BASADO EN CRIPTOGRAFA DE CLAVE PBLICA
EMPRESA:
INSTITUTO TECNOLGICO DE MORELIA

RESIDENTES:
GUADALUPE YERALDIN MORALES HERNNDEZ
MARIO EDUARDO SNCHEZ GUTIERREZ

10121103
10121115

CARRERA:
INGENIERA EN TECNOLOGAS DE LA INFORMACIN Y
COMUNICACIN
ASESOR INTERNO:

ASESOR EXTERNO:

DR. ANASTACIO ANTOLINO


HERNNDEZ

DR. JUAN MANUEL GARCA


GARCA

MORELIA, MICHOACN

05 DE DICIEMBRE DE 2014

Reporte Final de Residencias Profesionales

INDICE
Carta de aceptacin.............................................................................3
Carta de terminacin...........................................................................5
Introduccin.........................................................................................7
Justificacin...........................................................................................8
Objetivos................................................................................................9
Caracterizacin del rea donde se particip.........................................9
Problemas a resolver...........................................................................10
Alcances y limitaciones........................................................................11
Fundamento terico.............................................................................15
Procedimiento y descripcin de las actividades realizadas.................32
Resultados, planos, graficas, prototipos y programas.........................45
Conclusiones y recomendaciones...................................................59
Referencias..........................................................................................59
Hoja de aprobacin de los asesores...............................................61

CARTA DE ACEPTACIN
2

Reporte Final de Residencias Profesionales

Reporte Final de Residencias Profesionales

CARTA DE TERMINACIN

Reporte Final de Residencias Profesionales

Reporte Final de Residencias Profesionales

INTRODUCCIN
A medida que la tecnologa gradualmente se hace ms indispensable en la vida
diaria y la productividad de las personas, notamos que la informacin transmitida
por stos medios se ha vuelto un blanco frecuente de ataques, robos y espionajes.
6

Reporte Final de Residencias Profesionales

Sin embargo el uso cotidiano de las tecnologas informticas contina en aumento,


y la ingeniera ha afrontado stos conflictos desarrollando tcnicas de seguridad
informtica. Con el objetivo especfico de proveer confiabilidad a los usuarios cuya
informacin viaja a travs de medios inseguros como la red internet se proponen
soluciones que permiten autenticar al emisor y al receptor de los mensajes.
El presente reporte describe el proceso de implementacin, as como los
resultados obtenidos del proyecto Implementacin de Protocolo de Autenticacin
en Red basado en Criptografa que se ha desarrollado en los ltimos meses, ste
hace uso de la aritmtica de curvas elpticas para generar las llaves con las que
cada usuario autenticar a la contraparte de la comunicacin.
Las actividades que se plantean corresponden al periodo comprendido del 05 de
Agosto al 05 de Diciembre de 2014, y son detalladas de acuerdo a lo realizado.

JUSTIFICACIN
En la actualidad el aumento en el inters de los atacantes por obtener informacin
financiera, confidencial o propiedad intelectual de las organizaciones ha dado
como resultado que los atacantes mejoren las herramientas y estrategias para
7

Reporte Final de Residencias Profesionales

conseguir dicho objetivo. Por lo tanto es fundamental desarrollar una forma que
garantice la mxima seguridad en los canales de comunicacin.
Durante los ltimos 30 aos, la criptografa de curvas elpticas se ha vuelto un pilar
de la comunicacin segura a travs de medios electrnicos. La criptografa de
llave pblica se usa para distribuir las llaves a usar en diversos algoritmos
criptogrficos (como DES). Tambin se usa en las firmas digitales para verificar el
origen y la integridad de los datos transmitidos.
En las ltimas dcadas se han desarrollado nuevas tcnicas que ofrecen mayor
seguridad y mejor rendimiento. Las tcnicas construidas sobre la aritmtica de
curvas elpticas han demostrado proveer mayor seguridad en el mismo nmero de
bits en las llaves y un menor consumo de recursos de procesamiento (National
Security Agency, 2009).
Por otro lado, la creciente capacidad de procesamiento a la que todos tenemos
acceso, resulta primordial migrar los algoritmos y tcnicas de criptografa a las que
confiaremos nuestra informacin.
Debido a esto, es importante que se desarrolle un sistema criptogrfico basado en
un nuevo protocolo de comunicacin que garantice alta seguridad a los usuarios .

OBJETIVOS
Objetivo General
Desarrollo de un sistema cliente/servidor que implemente la criptografa basada en curvas
elpticas para la recepcin y envi de mensajes de manera segura a travs de la Web.

Reporte Final de Residencias Profesionales

Objetivos Especficos

Comprender las operaciones realizadas en la librera de curvas elpticas.

Disear e implementar de manera correcta y segura un protocolo de


comunicacin que implemente curvas elpticas.

Contar con una documentacin de apoyo sobre el software desarrollado,


que cubra todos los elementos que expliquen de manera clara y concisa el
cdigo generado.

Generar los artefactos o entregables de la aplicacin cliente/ servidor.


De esta forma se logra comprobar la hiptesis que se establece en el proyecto, la
cual dice que:
El conjunto de tcnicas de encriptacin basado en aritmtica de Curvas Elpticas
es la mejor solucin para garantizar seguridad y rendimiento en los canales de
comunicacin a travs de la web

CARACTERIZACIN DEL REA DONDE SE PARTICIP


Por su aplicacin el proyecto se acota en el rea de las Tecnologas de la
Informacin y Comunicaciones, especficamente en el rea

de seguridad

informtica.
En la parte terica hace uso de la aritmtica de curvas elpticas, que pertenece al
rea de matemticas aplicadas.

PROBLEMAS A RESOLVER
Para lograr una alta seguridad del sistema, se vislumbraron las problemticas que
deberan ser resueltas a travs del protocolo de comunicacin, y las cuales son las
siguientes:

Reporte Final de Residencias Profesionales

Autenticacin de usuarios a travs de certificados digitales para garantizar


que los usuarios son quienes dicen ser y as mantener segura la
inicializacin de conexin con el servidor, y aceptar a los usuarios que estn
de alta en el sistema.

Cifrar y descifrar la informacin que viajar por internet a travs de un


algoritmo de cifrado por bloques llamado Twofish el cual se basa en llaves
simtricas, brindando as una solucin factible para la proteccin de
informacin.

Hacer uso de una base de datos para almacenar informacin del uso del
sistema, esta cuestin genera un problemtica en el aspecto que los datos
almacenados deben estar resguardados de manera segura, ya que son
datos confidenciales de los usuarios, por lo tanto se deben aplicar
algoritmos de cifrado para almacenar los datos registrados de cada usuario.
Adems se debe aplicar un buen diseo que nos garantice la atomicidad,
consistencia, aislamiento y durabilidad de la base de datos.

Soportar concurrencia en autenticacin y comunicaciones. Debido a que el


sistema debe soportar varias sesiones simultneas se debe implementar un
control de concurrencia, siendo este una problemtica de vital importancia,
ya que dos o ms procesos podran querer llevar a cabo una determinada
tarea concurrentemente, lo que provocara resultados incorrectos por no
saber el orden de ejecucin o cuando sern interrumpidos y su alternancia
de los procesos en la CPU, por ejemplo entrar dos procesos que quieran
entrar a la misma zona de memoria. Por lo tanto, se deben proporcionar
mecanismos de sincronizacin y comunicacin entre procesos, as como
una ejecucin ordenada.

Adecuada implementacin que garantice la seguridad y estabilidad del


canal. Esta problemtica hace referencia a una integracin adecuada de la
10

Reporte Final de Residencias Profesionales

teora de curvas elpticas, as como la implementacin del algoritmo de


cifrado y descifrado y el uso de sockets para establecer una conexin entre
el cliente y el servidor. Los aspectos anteriores, trabajado en conjunto
fortalecen la seguridad del protocolo de comunicacin.

ALCANCES Y LIMITACIONES
El proyecto en el cual se est trabajando tiene como alcance la implementacin
del protocolo de autenticacin en red basado en criptografa de clave pblica en
un sistema cliente servidor para el envo y recepcin de mensajes.
Pero para conocer a detalle el alcance y limitaciones se desarrollaron estudios
tanto de factibilidad como de viabilidad.

Estudio de Viabilidad
El estudio de viabilidad aplicado al proyecto Implementacin de protocolo de
autenticacin en red basado en criptografa de clave pblica permite determinar la
conveniencia de desarrollar un nuevo sistema cliente - servidor. Se deben
considerar todos los aspectos que influyen, de tal manera que el nuevo sistema
cumpla con las expectativas del cliente, qu logre alcanzar realmente una alta
seguridad en las comunicaciones. Algunos de los factores considerados en este
estudio son:

Determinar si las necesidades y expectativas son realmente abarcadas en


el nuevo sistema de comunicacin. Para ello se tendrn que realizar un
conjunto de pruebas de caja negra como pruebas de caja blanca para
garantizar la funcionalidad de cada uno de los mdulos de cdigo, de igual
forma se consideran pruebas de integracin una vez que los mdulos sean

11

Reporte Final de Residencias Profesionales

unidos en un nico sistema. Las pruebas de estrs permitirn garantizar


que el sistema soporta fuertes cargas de peticiones de clientes.
En este caso de que se considere el sistema cliente - servidor si cumple
con las expectativas, se realizar el entregable correspondiente a los
responsables del proyecto.

Realizar una investigacin referente a los temas tericos relacionados con


el sistema. Se llev a cabo un profundo estudio en la red y algunas fuentes
bibliogrficas para comprender los temas relacionados con las curvas
elpticas, algoritmos de cifrado y descifrado, tambin se consideraron temas
de sockets y programacin de concurrencia. Los resultados obtenidos
fueron que a pesar de que era temticas muy avanzadas era posible llevar
a cabo su implementacin en sistema, sin embargo sera cuestin de
mantener un proceso constante de investigacin acerca de los mismo.

Determinar si el software est siendo desarrollado de acuerdo a los


requerimientos de manera correcta. A este respecto se estuvo trabajando
en constante comunicacin con el lder del proyecto quien iba determinando
las necesidades, requerimientos y caractersticas de para desarrollar el
protocolo de comunicacin segura desde el planteamiento, diseo,
desarrollo y pruebas y varias veces fue necesario llevar a cabo algunos
ajustes al respecto.

Costo de hardware necesario para el desarrollo del nuevo software. Se


destinaron recursos econmicos para la compra de hardware, pero el
equipo an no se ha adquirido, hasta el momento el desarrollo del software
se ha realizado utilizando nuestro propio equipo de cmputo y usando un
servidor provisional.

Costo hardware para el buen funcionamiento y operacin del nuevo


software. Para realizar la implantacin del nuevo sistema basado en un
12

Reporte Final de Residencias Profesionales

protocolo de comunicacin se requiere contar un con servidor dedicado, el


cual deber estar presente en una central. Las especificaciones de tal
equipo se determinaron con el cliente y el lder del proyecto.

Tipo de lenguaje en que se desarrollar el nuevo software. Se realiz un


anlisis de lenguajes de programacin con la finalidad de determinar cul
era el ms adecuado para el desarrollo de sistema cliente - servidor
concluyendo que C++ sera el lenguaje usado, ya que ofreca la aplicacin
de un paradigma orientado a objetos.

Los factores considerados anteriormente definidos permitieron determinar que el


diseo y desarrollo de Sistema cliente servidor basado en un protocolo de
comunicacin segura era posible y conveniente, ya que se contaba con completo
apoyo de los clientes en cuanto al costo requerido para su realizacin e
implantacin y que sus caractersticas traan beneficios significativos.

Estudio de Factibilidad
Se llev a cabo un anlisis de factibilidad que demostr que el sistema a
desarrollar era factible de construirse e implementarse, puesto que ya fue
elaborado dentro del de la fase de planeacin de ciclo de vida de desarrollo de
proyecto en la fase de planeacin por el lder del mismo.
El anlisis se orient a resolver 3 preguntas clsicas en todo anlisis de
factibilidad:
1 El sistema basado en un protocolo de alta seguridad contribuye con
los objetivos generales del cliente?
La respuesta a esta pregunta fue positiva, ya que el objetivo del
cliente es poder entablar comunicaciones seguras resguardando as
la informacin que viaje a travs de los canales de comunicacin
13

Reporte Final de Residencias Profesionales

entre el cliente y el servidor, y el sistema desarrollado justamente


aplica tcnicas criptogrficas que incrementan la seguridad en la
comunicacin.
2 El sistema cliente-servidor basado en un protocolo seguro se
puede implementar con las restricciones de tiempo?
Este es un proyecto que cuenta con un cronograma estricto de
actividades las cuales podrn realizarse en su tiempo y forma, el
mdulo inicial se realiz en un periodo de 5 meses y adems
participaron 3 personas y el asesor en todo el proceso de desarrollo.
3 El sistema cliente-servidor se puede implementar con las
restricciones de costo?
S, ya que el desarrollo el proyecto cuenta con el apoyo financiero
del cliente, la adquisicin del equipo, sin embargo se ha dado un
atraso en dicha actividad, pero no han surgido atrasos ya que el
desarrollo se realiz con las computadoras de cada uno de los
involucrados en su desarrollo.
Al hacer el planteamiento de las preguntas anteriores se buscaba saber si el
sistema contribua con los objetivos del cliente que lo solicito, as que al recopilar
la informacin necesaria para responder a las preguntas anteriores, se concluy
que el sistema desarrollado a travs del proyecto Implementacin de protocolo de
autenticacin en red basado en criptografa de clave pblica si proporcionara un
valor real, as que al demostrar que en este sentido era factible, se continu con el
desarrollo del sistema.

FUNDAMENTO TERICO
Las curvas elpticas son utilizadas para implementar criptosistemas basados en el
logaritmo discreto, con la ventaja de utilizar claves ms pequeas que repercute
directamente en la utilizacin de menos memoria y hardware ms pequeo.
14

Reporte Final de Residencias Profesionales

En criptografa se habla de curva elptica en referencia a una ecuacin


y=x+Ax+B que cumple una condicin 4A+27B0. Dando diferentes valores a A
y B se obtiene todo un conjunto de curvas que, al ser dibujadas, ofrecen una forma
similar a las que se muestran en la Ilustracin 1 (a) curvas elpticas y=x-x; (b)
curva elptica y=x-x+1.

b)
Ilustracin 1. Curvas elpticas

Las curvas elpticas tienen ciertas caractersticas que las hacen especiales en el
mundo de la criptografa. Una de estas caractersticas consiste en la posibilidad de
poder generar un punto en una curva partiendo de dos puntos dados (o incluso de
uno).
Usando como puntos de partida P y Q, dos puntos conocidos, se traza una lnea
entre P y Q. Si la lnea corta la curva en un tercer punto, se refleja a travs del eje,
dando lugar a un nuevo punto R. Esta operacin se representa como R=P+Q. En
caso de que la lnea que pasa por P y Q no corte a la curva en ningn otro punto,
se dice que corta la curva en un punto O en el infinito y se representa esta
operacin como P+Q=O.

15

Reporte Final de Residencias Profesionales

Ilustracin 2. Representacin de los puntos P, Q y R en una curva elptica

Partiendo de la suma, no es difcil encontrar un mecanismo que permita realizar


multiplicaciones de tipo kP, siendo k un escalar. Por ejemplo, si se realiza la
operacin 13P, es decir, multiplicar 13 por un punto P. Bastara con realizar la
siguiente secuencia de doblado de puntos:
P, 2P=P+P, 4P=2P+2P, 8P=4P+4P, 13P=8P+4P+P
Este simple mecanismo para generar nuevos puntos dota a una curva elptica de
la posibilidad de realizar operaciones aritmticas sobre ella, matemtica en la cual
se basan los criptosistemas que usan esta tcnica.
En criptografa, las curvas elpticas se usan sobre campos finitos (Fq) con q muy
grande. Un ejemplo de campo finito podra ser F5 = {0, 1, 2, 3, 4}. De manera que
el nmero 7 representado en el campo finito correspondera a 7 mod 5 = 2.
Cuando se usan campos finitos el nmero de puntos que hay en una curva
tambin es finito. Este nmero se llama orden de la curva y se representa cmo
#E. Debemos diferenciarlo del orden de un punto, que se refiere al valor k ms
pequeo (diferente de 0) que multiplicado por P da O.

En la Criptografa de curvas elpticas, el punto R se utiliza como clave pblica que


es la suma de los puntos P y Q, los cuales corresponden a la clave de tipo
privada.
De este modo, al conocer un punto de una curva, en este caso R, la informacin
cifrada con este valor no se compromete, ya que la curva elptica tiene infinidad de

16

Reporte Final de Residencias Profesionales

puntos y para poder descifrar un mensaje se necesitan conocer los parmetros P y


Q para obtener su suma y as poder descifrar el mensaje.
En curvas elpticas, un ataque por fuerza bruta para conseguir la clave privada
consiste en sumar todos los puntos de la curva elptica hasta obtener como
resultado el punto R. Para evitar que un ataque de este tipo sea exitoso y lograr
que las claves sean lo ms eficientes posible se escoge un campo de Galois lo
suficientemente amplio, tambin se cuida que la curva elptica elegida no sea
singular, es decir que no pase por el punto cero, y por ltimo se considera que la
curva no sea anmala, es decir que el campo de Galois sobre el que se define la
curva no tenga nmeros racionales.
Debido a que las aplicaciones criptogrficas requieren rapidez y precisin
algebraica, en la prctica se utilizan el grupo de curvas elpticas sobre el campo
finito de GF pertenecientes a los campos primos. Cabe mencionar que no existe
una interpretacin geomtrica de la aritmtica de curvas elpticas sobre los
campos finitos.
El procedimiento para obtener las claves pblica y privada es muy similar en la
multiplicacin de un punto por un escalar. De tal forma que se utiliza un punto de
una curva elptica que sea un generador de todos los dems puntos de la misma
para utilizarla como clave pblica junto con el campo de Galois sobre el que
definimos dicha curva y se utiliza un nmero entero aleatorio definido sobre el
mismo campo de Galois que ser la clave privada del algoritmo.
As, se tiene que sern pblicos el punto de la curva elptica, el campo de Galois
sobre el que se define dicha curva y finalmente el punto que se encuentra de
multiplicar el punto generador por la clave privada elegida. La clave privada ser el
nmero entero aleatorio que pertenezca al mismo campo. Se debe considerar que
el campo de Galois elegido debe ser un nmero primo lo suficientemente grande
como para evitar ataques por fuerza bruta que se puedan presentar.
17

Reporte Final de Residencias Profesionales

Curvas Elpticas
La teora de curvas elpticas sobre cuerpos finitos encuentra aplicaciones en
diversas disciplinas, como por ejemplo la teora de nmeros o la criptografa.
En un principio se puede pensar en una curva elptica como el conjunto de
soluciones de una ecuacin de la forma:
2

y =x +ax +b
Ecuacin 1. Forma de la curva elptica

En la criptografa de curvas elpticas se trata de obtener logaritmos. Recordando


que a partir de una expresin del tipo

a x =b , para despejar x se utiliza una

operacin inversa a la potenciacin, y eso es el logaritmo, es decir,

x=log a b

lo

cual se lee como x es el logaritmo en base a de b.


Dentro de las curvas elpticas se debe considerar un grupo, el cual es un conjunto
de elementos unidos a una operacin matemtica. Dicha operacin matemtica
debe cumplir las siguientes propiedades:

Si a y b son elementos del grupo, su combinacin a*b tambin es un


elemento del grupo.

La operacin cumple la propiedad asociativa:

Existe el elemento neutro 1, tal que

Existe el elemento opuesto, y, tal que

a( bc )=( ab )c .

1a=a1 para cualquier a.


xy= yx=1 .

Existen una amplia variedad de tipos de grupos. Los que interesan dentro de las
curvas elpticas son los que se denominan grupos cclicos. Un grupo cclico se
18

Reporte Final de Residencias Profesionales

caracteriza porque todos sus elementos se pueden obtener mediante un slo


elemento, llamado generador. Si la operacin es la multiplicacin, se denomina
grupo cclico multiplicativo (seguinfo, 2007).
El concepto de grupo multiplicativo permite complicar la obtencin de logaritmos.
Suponiendo un grupo G con n elementos, y sea b un generador. Eso significa que
podemos obtener todos los elementos del grupo como

{b , b2 , b3 , , bn1 } . Es

decir, habr un nmero entero k de forma que se podr escribir

g=b

para

cualquier nmero g del grupo. En realidad, existen muchos nmeros enteros k que
cumplan esta propiedad. Una de las propiedades nos indica que cualesquiera dos
enteros k y k capaces de representar el elemento g son congruentes mdulo n (o
dicho de otra forma: nos dan el mismo resto al dividirlos por n).
Una de las diferencias dentro de las curvas elpticas es que en lugar de movernos
por todo el campo de los nmeros reales, nos restringiremos al grupo cclico G. De
aqu que se emplee el logaritmo discreto de G en base b, ya que es la operacin
inversa a la potenciacin

g=b k =log b g

(seguinfo, 2007).

Entonces a travs de las curvas elpticas se puede crear el grupo G. Segn sea el
grupo, as de complicado ser el problema y, por tanto, as de seguro ser el
esquema a efectos de montar sistemas de cifrado. Dada la Ecuacin 1, para cada
pareja de valores (a, b), la curva elptica da un conjunto de puntos (x, y) que
forman un grupo.
Es importante aclarar que los puntos x y y son nmeros reales y forman un campo
finito, pero juntos son como una coordenada en un plano. Es por esta razn que
en las curvas elpticas se habla de grupos multiplicativos de campos finitos.

19

Reporte Final de Residencias Profesionales

El esquema utilizado empleado para la criptografa empleando curvas elpticas es


(seguinfo, 2007):
1. Escoger una curva elptica
2. La curva elptica tiene un conjunto de soluciones (x,y).
3. Si los valores x,y pertenecen a un campo finito, entonces los puntos (x,y) de
la curva forman un grupo.
4. Se toma un elemento del grupo, y se encuentra su logaritmo discreto para
una base dada. Esto servir de base para establecer algoritmos
criptogrficos de intercambio de claves y de firma digital.
Por ejemplo, sea K un cuerpo (campo) donde a, b, c, d, e K y la ecuacin:
2

y + axy +by=x +c x + dx+ e


Una curva elptica E(K) es el conjunto de puntos que satisfacen la ecuacin ms
un punto O en el infinito segn la caracterstica del cuerpo K, se usan
transformaciones lineales para simplificar la ecuacin (Goya, 2009).

Ecuacin de Weierstrass
Es uno de los aspectos de la teora de curvas elpticas, y se caracteriza por estar
definida en la recta y tomar valores reales. Lo que la hace particular es que es
continua en todo punto y no es derivable o diferenciable en ninguno. Adems
resulta que el grafo de la funcin de Weierstrass es una curva no rectificable de
dimensin fractal superior a 1.

Sea

un campo,

su cerradura algebraica y

En general, una curva elptica sobre un campo


plano proyectivo

2
P ( F )

F * su grupo multiplicativo.

es el conjunto de puntos en el

que satisfacen una ecuacin de la forma (Garca, 2003):

Y 2 Z +a1 XYZ + a3 Y Z 2=X 3 +a 2 X 2 Z +a 4 X Z 2 +a6 Z3


20

Reporte Final de Residencias Profesionales

Incluyendo a

.
O=[ 0, 1,0 ] , donde a1 , a2 , , a6 F

Utilizando coordenadas no-homogneas:

x=

X
Z

y=

Y
Z

La ecuacin anterior se transforma en:

: y 2+ a1 xy + a3 y =x 3+ a2 x 2 +a 4 x +a 6
La cual es denominada Forma Normal de Weierstrass (FNW).

Propiedades fundamentales de las Curvas Elpticas

Orden de la curva. Sea E una curva elptica sobre un campo finito GF(q).
Se establece que el nmero de puntos sobre una curva elptica (incluyendo
el punto al infinito) es:

|E|=q+ 1t , donde |t|<2 p . (Garca, 2003).

|E| es conocido como el orden de la curva y t es la traza de E.

Orden de un punto. Se refiere al valor k ms pequeo (diferente de 0) que


multiplicado por un punto P da un punto O en el infinito.

Problema del Logaritmo Discreto


La criptografa de Clave Pblica basa su fuerza en la dificultad de resolver ciertos
problemas matemticos. Uno de los ms usados es el problema del logaritmo
discreto (Discrete Logarithm Problem - DLP).
Este problema se basa en la dificultad que representa resolver una ecuacin de
tipo

x=ay mod n , donde x, a y n son conocidas, mientras que la variable y es la

21

Reporte Final de Residencias Profesionales

que se busca. De hecho, para los valores de n e y suficientemente grandes es


computacionalmente imposible resolver el problema, al menos, con los algoritmos
y ordenadores actuales.
El algoritmo ms rpido conocido para resolver este problema es el Index Calculus
que permite resolverlo en tiempo subexponencial (Homeless, 2008).

Logaritmo Discreto sobre Curvas Elpticas


Existe un problema similar al problema del logaritmo discreto que puede usarse
con Curvas Elpticas. Partiendo de la operacin de tipo

Q=kP , obtener k y P

partiendo solo de Q es computacionalmente difcil. De hecho, el algoritmo ms


rpido que permite encontrar una solucin es el algoritmo Rho de Pollard, pero
este algoritmo es de tiempo exponencial, mucho ms lento que en el caso del
ataque a DLP mediante el Index Calculus (Homeless, 2008).
Algunos otros algoritmos para resolver este problema son:

Busqueda Exhaustiva. Por este mtodo, simplemente se calculan los


mltiplos sucesivos de P: P, 2P, 3P, . . . hasta que se obtiene Q. Este
mtodo puede tomar hasta n pasos en el peor caso (Garca, 2003).

Algoritmo de Paso-Enano Paso-Gigante. Este algoritmo representa un


compromiso tiempo-espacio en el algoritmo de bsqueda exhaustiva.
Requiere del almacenamiento de aproximadamente
tiempo de ejecucin es aproximadamente de

puntos, y su

n pasos en el peor caso

(Garca, 2003).

Algoritmo Rho de Pollard. Este algoritmo, es una versin aleatorizada del


algoritmo de paso-enano paso-gigante. Tiene aproximadamente el mismo
22

Reporte Final de Residencias Profesionales

tiempo esperado de ejecucin (

n/2 pasos) que dicho algoritmo, pero a

diferencia de este no requiere de almacenamiento significativo. Se ha


mostrado que es posible acelerar al algoritmo rho de Pollard por un factor
de

2 (Garca, 2003).

Este hecho es muy importante, pues la dificultad de resolver ECDLP frente a DLP
permite que los criptosistemas que se basan en el primero usen claves mucho
ms cortas. De manera que los sistemas que usan ECDLP requieren mucha
menos memoria y capacidad de proceso.
Una clave RSA de 4096 bits ofrece la misma seguridad que una clave de un
criptosistema de Curva Elptica de 313 bits (Homeless, 2008).

Criptosistemas de curvas elpticas


Para desarrollar un sistema criptogrfico basado en curvas elpticas se deben
considerar varios aspectos los cuales se consideran a continuacin.

Eleccin de una curva elptica apropiada


Una curva elptica E definida sobre un campo finito GF(q) es apropiada para
propsitos criptogrficos si se satisfacen las siguientes condiciones (Garca,
2003):

El orden u = |E/GF(q)| de la curva debe ser divisible por un nmero primo

grande r.
El divisor primo grande r no debe dividir q v1 para v = 1, 2, 3, . . . , 10.
Esta condicin asegura que el algoritmo de reduccin MOV no es factible.

La eleccin de la curva elptica se debe hacer teniendo en cuenta los ataques


informticos que puedan sufrir (Rotger, Rif Coma, & Tena Ayuso):
23

Reporte Final de Residencias Profesionales

Para resistir el ataque por el mtodo de Pollard, el nmero de puntos de


la curva debe ser divisible por un nmero primo lo suficientemente grande
( 2160 ) .

Para resistir el ataque de Semaev-Smart-Araki, el nmero de puntos de la

curva no debe ser mltiple de p.


Para resistir la reduccin MOV n (orden del punto escogido) no debe dividir
pk 1 , donde k es pequeo.

Para resistir los ataques contra curvas elpticas supersingulares, el nmero


de puntos de la curva no debe ser igual a 1 mdulo p.

Existen varios mtodos para llevar a cabo la eleccin de las curvas elpticas:
El Teorema de Hasse y la Conjetura de Weil. Proporciona una tcnica para
elegir curvas sobre

F2

, donde m es divisible por un entero l pequeo. De

hecho, como estos resultados son vlidos para cualquier

Fp

, se podra

extender esta tcnica a todos estos cuerpos.

Recordando que dada una curva elptica E, definida sobre

F p , podemos

considerarla tambin como una curva elptica sobre cualquier extensin


Fp .

Fp

de

Adems, sabemos calcular el nmero de puntos de la curva sobre el

cuerpo extendido, a partir del nmero de puntos de la curva sobre el cuerpo base.

Para elegir una curva adecuada sobre

F2

, primero tomaremos una curva sobre

F2 , con l dividiendo m y calcularemos el nmero de puntos de la curva sobre


l

F2

(que se puede hacer de forma exhaustiva puesto que hemos elegido l de


24

Reporte Final de Residencias Profesionales

forma que el cuerpo

F2

sea pequeo). Entonces calcularemos el nmero de

puntos de la curva sobre el cuerpo extendido y comprobaremos si es resistente a


los ataques anteriores. En caso de que no resista alguno de los ataques anteriores
repetimos el proceso hasta encontrar una curva adecuada.
El principal problema que presenta esta tcnica es que el nmero de curvas sobre
F2

era relativamente pequeo, y por lo tanto, es posible que dados m y l no

consigamos encontrar ninguna curva adecuada usando este mtodo (Rotger, Rif
Coma, & Tena Ayuso).

Mtodo Global. Esta manera de elegir la curva est basada en tomar una curva
sobre los racionales y reducirla mdulo un primo para tener la curva sobre un
cuerpo finito y comprobar si resiste los ataques anteriores.

Por ejemplo, si empezamos con

E : y =x + Ax +B , donde A y B son nmeros

racionales podemos considerar la misma ecuacin mdulo un primo p. Entonces,


tendremos la curva sobre

Fp

con

Np

puntos. Hay resultados tericos que

aseguran que para p lo suficientemente grande

Np

es mltiplo del nmero de

puntos de orden finito de la curva original sobre los racionales. As, conociendo el
nmero de puntos de orden finito sobre el cuerpo inicial tendremos una cota
inferior para el nmero de puntos de la curva sobre

Fp

(Rotger, Rif Coma, &

Tena Ayuso).

Mtodo de la multiplicacin compleja. Este mtodo permite la eleccin del


orden de la curva antes de construirla. Se debe comprobar que el orden que
25

Reporte Final de Residencias Profesionales

queremos supere los ataques mencionados. Este mtodo es eficiente cuando el


cardinal q del cuerpo y el valor t tal que #E = 1 +q t son escogidos de forma que
Q ( t 24 q )

el cuerpo

curvas elpticas sobre


sobre

F2

tiene un nmero pequeo de clases de ideales. Para


Fp

este mtodo se denomina mtodo de Atkin-Morain y,

, mtodo de Lay-Zimmerman (Rotger, Rif Coma, & Tena Ayuso).

Mtodo de eleccin aleatoria. Como su nombre indica, en este mtodo se elige


la curva de manera aleatoria. Fijado un cuerpo finito
char ( K ) 2,3

Fq , suponemos que

E : y 2=x 3+ Ax +B . Se selecciona A,B

y la curva

forma aleatoria, pero satisfaciendo


nmero de puntos de la curva sobre

Fq

de

4 A 3+ 27 B 2 0 . Calculamos entonces el
Fq

y lo factorizamos. Este proceso se

repetir hasta encontrar una curva que pueda resistir los ataques anteriores
(Rotger, Rif Coma, & Tena Ayuso).
Este mtodo es especialmente usado en el caso de trabajar con curvas elpticas
sobre

Fq , puesto que resultados de Lenstra demuestran su funcionalidad. Para

curvas elpticas sobre

F2

hay resultados similares en los trabajos de

Waterhouse y Schoof.

Generacin de llaves

26

Reporte Final de Residencias Profesionales

Para poder realizar la generacin de llaves se debe elegir un campo finito


subyacente GF(q), el cual es comn a todos los usuarios. Existen dos opciones
para generar el resto de los parmetros:

Claves pblicas cortas. Los parmetros de la curva elptica, es decir los


elementos a y b (los cuales definen la curva elptica), y un punto P

de orden primo n, son elegidos por el administrador del sistema. Los


parmetros a, b, P = (xP , yP), n son pblicos y comunes a todos los
usuarios (Garca, 2003).

Claves pblicas largas. Cada usuario elige sus propios parmetros de curva
elptica, es decir los elementos a y b (los cuales definen a la curva elptica)
y el punto P de orden primo n. Para hacer la clave pblica ms corta, el
parmetro a se restringe a a = 0 si el campo subyacente es GF(2m) y a = 1
si el campo subyacente es GF(p). Los parmetros b, P = (xP , yP ), deben
ser parte de la clave pblica del usuario (Garca, 2003).
No.
1

Descripcin
Elegir un nmero entero aleatorio d tal que

1 d <n
2
3
4

Calcular el punto

Q=( x Q , y Q )

Q:=dP

es equivalente a la llave pblica en

caso de que la llave pblica sea corta


La clave privada del principal es el entero d.
Tabla 1. Proceso de generacin de llaves

Protocolos criptogrficos basados en curvas elpticas


En esta seccin del fundamento terico, se manejara una notacin, cuando se hable de

Intercambio de Claves de Diffie-Hellman


27

Reporte Final de Residencias Profesionales

El intercambio de claves de Diffie-Hellman es un protocolo que permite un


intercambio secreto y seguro de claves entre dos partes que no han tenido un
contacto previo. Se usa ampliamente en criptografa y se basa en el problema del
logaritmo discreto (DLP). Por lo tanto, puede usarse el mismo algoritmo a travs
del problema ECDLP.
La versin de este algoritmo empleando curvas elpticas se plantea as:

Sea E una curva elptica sobre


Cada usuario

Fp

P E

punto pblicamente conocido.

elige al azar un nmero secreto

nU

Fp

y hace pblico

el valor nU P . Para compartir una clave secreta, A y B deben hacer:

A
nAP B

B
A nBP

La clave secreta ser K = (nA nB)P que solo es conocida por A y B.


Al algoritmo puede resumirse en los siguientes pasos:
1. Alice y Bob eligen una curva elptica E sobre un campo finito F(q) de
manera que el ECDLP sea computacionalmente difcil. Tambin eligen un
punto P en dicha curva de manera que su orden sea un nmero primo
grande.
2. Alice elige un entero grande a, calcula PA=aP y enva PA a Bob.
3. Bob elige un entero grande b, calcula PB=bP y enva PB a Alice.

28

Reporte Final de Residencias Profesionales

4. Alice calcula aPB=abP


5. Bob calcula bPA=abP
ALICE
BOB
Elige una curva elptica E sobre un Elige una curva elptica E sobre un
campo finito F(q).
Elige un entero grande a
Calcula PA=aP

campo finito F(q).

Enva PA a BOB

Recibe PA de ALICE.
Elige un entero grande b
Calcula P B=b P
Enva PB a ALICE
Calcula b P A=abP

Recibe PB de BOB
Calcula aPB=abP

Diagrama 1. Intercambio de Claves de Diffie-Hellman

Al finalizar el algoritmo, tanto Alice como Bob disponen de abP. Pero un usuario
que

escuche el canal solo habr podido obtener PA y PB, los cuales no le

permiten calcular abP a menos que resuelva el ECDLP. Alice y Bob solo tendrn
que extraer una clave a partir de abP y usarla para enviar datos cifrados. Para tal
propsito podrn usar cualquier algoritmo simtrico como DES, AES, etc.
Ejemplo de la implementacin de este algoritmo se puede ver a continuacin:

Los usuarios A y B eligen una curva elptica E sobre un cuerpo finito


Tambin eligen un punto

Zp .

de la curva de forma que su orden sea un nmero

primo grande.
Suponiendo que la curva elptica es

E : y 2=x 3+ 5 x +7

sobre

Z 113 . El nmero

de puntos racionales de esta curva es 127 que es un nmero primo y, por lo tanto,
los puntos de la curva elptica constituyen un grupo isomorfo a

Z 127 . Tomando
29

Reporte Final de Residencias Profesionales

P=(16,51) que tiene orden

ord ( P)=127 , o sea P es un generador de la curva

E.

A B. El usuario A elige un entero grande nA, calcula KA = nA P y enva


KA a B.
Si A toma, por ejemplo, nA = 98, entonces, KA = nA P = (24,74).

B A. El usuario B elige un entero grande nB, calcula KB = nB P y enva


KB a A.
Si B toma, por ejemplo, nB = 101; entonces, KB = nB P = (3,7).

A B. El usuario A calcula K = nA KB = nA nB P = 98(3,7) = (5,48).

B A. El usuario B calcula K = nB KA = nB nA P = 101(24,74) = (5,48).

Al finalizar el algoritmo, tanto A como B disponen del mismo punto que tomarn
como clave de sesin: K = (5,48).

Protocolo de tres-pasos de Shamir


Implementando curvas elpticas, este protocolo especifica:

Sea E una curva elptica sobre

Fp ,

N= E (q) . Sea

P E

el mensaje que

el usuario A quiere enviar a B. Cada usuario U tiene una clave privada

nU

tal

que mcd(nU , N )=1 .

A
nAP B

A nB(nAP)B

A
nBP B

30

Reporte Final de Residencias Profesionales

Criptosistema ElGamal aplicando curvas elpticas


Z / p , sea

Sea E una curva elptica sobre


grande

(sera deseable que

Para cada usuario U, sea

nU

un punto de la curva de orden

P =E ), N E( p).

su clave privada, donde

tomar nU < p+1 2 p ). La clave pblica de U ser

1. El usuario A quiere enviar el mensaje

A escoge al azar un nmero

A calcula

Cifra

Enva a B (C , kP) .

1<nU < N ; (bastara

PU =n U P .

cifrado al usuario B:

k Z/p ,

Pm el punto de la curva asociado al mensaje m,

Pm como C=EB(Pm)=Pm+ k PB ,

2. B para descifrar el mensaje deber hacer:


Pm=C nB(kP)

Encuentra el mensaje m asociado con el punto Pm.

Criptosistema RSA
En este esquema se representan los puntos de una curva elptica de la forma
y 2=x 3 +b

sobre

Zn

como

En (b) . Para generar la clave pblica el usuario B

escoger dos nmeros primos grandes

( p , q)

tales que

p=q=2(mod 3) y ,

31

Reporte Final de Residencias Profesionales

como en el esquema clsico, calcular y publicar

(e ,n) , donde

n=pq

( p , q , (n), d ) .

mantendr en secreto las claves privadas

1. Cada vez que A quiere enviar un mensaje m a B deber seguir los


siguientes pasos:

El usuario A divide su mensaje

en dos partes

m=( m1 , m 2)

donde

m1 , m2 Z n .

El usuario A determina el valor b de la curva de forma que

Especficamente, calcula

Cifra el punto

Enva el texto cifrado

m En (b) .

b=m2m1 (mod n) .

calculando

c=E (m)=em

sobre

En (b)

c=(c 1 , c 2 ) a B.

2. El usuario B para descifrar el mensaje c deber hacer:

c=(c 1 , c 2 )

A partir del mensaje cifrado

el usuario B puede determinar

el valor de b puesto que este no cambia en el proceso de cifrado.


Especficamente, calcula

b=c 2c 1 (mod n)

y construye la curva

y 2=x 3 +b .

A partir de la clave privada calcula

m=D(c)=dc

sobre

En (0, b)

Algoritmo de firma digital (ECDSA)


El algoritmo de firma digital para curvas elpticas est basado en el estndar de
firma digital DSA. Este algoritmo ofrece un esquema que permite firmar
documentos y verificar las firmas.
32

Reporte Final de Residencias Profesionales

Los pasos a seguir para generar claves, firmar y verificar la firma, se muestran a
continuacin.
1. Alice genera un par de claves:

Alice elige una curva E con orden |E| = fr, de manera que r sea un primo
grande.

Alice busca un punto en la curva de orden r.

Alice elige un nmero aleatorio d situado en el intervalor [2, r-2] y calcula


Q=dP.

La clave pblica corresponde a (E,P,r,Q) y la clave privada a d.

2. Alice firma un documento M. (h(M) corresponde al hash de M)

Alice elige un nmero aleatorio k en el intervalo [2, r-2].

Se calcula el punto (x, y)=kP

R=x mod r

s=k (h(M) +Rd) mod r, si s es igual cero, empezamos de nuevo.

La firma de Alice es (R,s) y se transmite junto con el mensaje M.

3. Bob verifica la firma de Alice.

Bob obtiene la clave pblica de Alice.

w = s mod r

u1 = h(M) w mod r

u2 = Rw mod r

(x, y) = u1P + u2P

v = x mod r

Si v es igual a R, la firma es vlida.

33

Reporte Final de Residencias Profesionales

PROCEDIMIENTO Y DESCRIPCIN DE LAS ACTIVIDADES


REALIZADAS
1. Capacitacin sobre metodologa SCRUM
Se expuso la forma de trabajo por el cual se estara rigiendo el proyecto y la cual
est basada en la metodologa SCRUM, esta es una metodologa gil y flexible
para gestionar el desarrollo de software, cuyo principal objetivo es maximizar el
retorno de la inversin. Se basa en construir primero la funcionalidad de mayor
valor para el cliente y en los principios de inspeccin continua, adaptacin, autogestin e innovacin.
Para lograr entender cmo funciona la metodologa se proporcionaron un conjunto
de videos ilustrativos al respecto, donde se pudo comprender de mejor manera las
definiciones principales que maneja la metodologa SCRUM:

Product Backlog. Conjunto de requisitos denominados historias descritos


en un lenguaje no tcnico y priorizados por valor de negocio, o lo que es lo
mismo, por retorno de inversin considerando su beneficio y coste. Los
requisitos y prioridades se revisan y ajustan durante el curso del proyecto a
intervalos regulares.

Sprint Planning. Reunin durante la cual el Product Owner presenta las


historias del backlog por orden de prioridad. El equipo determina la cantidad
de historias que puede comprometerse a completar en ese sprint, para en
una segunda parte de la reunin, decidir y organizar cmo lo va a
conseguir.

Sprint. Iteracin de duracin prefijada durante la cual el equipo trabaja para


convertir las historias del Product Backlog a las que se ha comprometido,
en una nueva versin del software totalmente operativo.

34

Reporte Final de Residencias Profesionales

Sprint Backlog. Lista de las tareas necesarias para llevar a cabo las
historias del sprint.

Daily sprint meeting. Reunin diaria de cmo mximo 15 min. en la que el


equipo se sincroniza para trabajar de forma coordinada. Cada miembro
comenta que hizo el da anterior, que har hoy y si hay impedimentos.

Demo y retrospectiva. Reunin que se celebra al final del sprint y en la


que

el

equipo

presenta

las

historias

conseguidas

mediante

una

demonstracin del producto. Posteriormente, en la retrospectiva, el equipo


analiza qu se hizo bien, qu procesos seran mejorables y discute acerca
de cmo perfeccionarlos.

Ilustracin 3. Proceso de la metodologa SCRUM

Se plante que el desarrollo del sistema se realizar de forma iterativa e


incremental. Cada iteracin, denominada Sprint, tiene una duracin preestablecida
de entre 2 y 4 semanas, obteniendo como resultado una versin del software con
nuevas prestaciones listas para ser usadas. En cada nuevo Sprint, se va

35

Reporte Final de Residencias Profesionales

ajustando la funcionalidad ya construida y se aaden nuevas prestaciones


priorizndose siempre aquellas que aporten mayor valor de negocio.
Por otro lado, tambin hay una serie de roles que son establecidos por la
metodologa y que se manejan dentro del proyecto:

Scrum master: Persona que lidera al equipo guindolo para que cumpla
las reglas y procesos de la metodologa. Gestiona la reduccin de
impedimentos del proyecto y trabaja con el Product Owner para maximizar
el ROI.

Product owner (PO): Representante de los clientes que usan el software.


Se focaliza en la parte de negocio y es el responsable del ROI del proyecto
(entregar un valor superior al dinero invertido). Traslada la visin del
proyecto al equipo, formaliza las prestaciones en historias a incorporar en
el Product Backlog y las reprioriza de forma regular.

Team: Grupo de profesionales con los conocimientos tcnicos necesarios y


que desarrollan el proyecto de manera conjunta llevando a cabo
las historias a las que se comprometen al inicio de cada sprint.

2. Conocimiento sobre herramientas a utilizar para el


desarrollo del proyecto
Para la realizacin del proyecto, se emplearn ciertas herramientas para ello fue
necesaria una breve explicacin de cmo se utilizarn, es decir, cul es su
principal finalidad, conocer su entorno, as tambin como mostrar el
funcionamiento de stas con un ejemplo sencillo.

36

Reporte Final de Residencias Profesionales

Eclipse IDE

Ilustracin 4. Eclipse IDE

Eclipse es un programa compuesto por un conjunto de herramientas de


programacin de cdigo abierto multiplataforma para desarrollar "Aplicaciones de
Cliente Enriquecido. Esta plataforma, tpicamente ha sido usada para desarrollar
entornos de desarrollo integrados (IDE).
Las principales caractersticas con las que cuenta Eclipse son:

Dispone de un Editor de texto con resaltado de sintaxis.

La compilacin es en tiempo real.

Tiene pruebas unitarias con JUnit.

Control de versiones con CVS.

Integracin con Ant.

Asistentes para creacin de proyectos, clases, tests, etc.

Refactorizacin.

Asimismo, a travs de plugins libremente disponibles es posible aadir


capacidades adicionales, tal como ocurri para la compilacin de proyectos en c+
+, fue requerido instalar el eclipse-cdt ms el compilar g++.

37

Reporte Final de Residencias Profesionales

Ilustracin 5. Entorno de Eclipse con el plugin eclipse-cdt

GIT
Git es un software de control de versiones que fue diseado pensando en la
eficiencia y la confiabilidad del mantenimiento de versiones de aplicaciones
cuando estas tienen un gran nmero de archivos de cdigo fuente.
Entre las caractersticas ms relevantes de GIT se encuentran:

Fuerte apoyo al desarrollo no lineal, por ende rapidez en la gestin de


ramas y mezclado de diferentes versiones. Git incluye herramientas
especficas para navegar y visualizar un historial de desarrollo no lineal.

Gestin distribuida. Proporciona a cada programador una copia local del


historial del desarrollo entero, y los cambios se propagan entre los
repositorios locales.

Gestin eficiente de proyectos grandes, dada la rapidez de gestin de


diferencias entre archivos, entre otras mejoras de optimizacin de velocidad
de ejecucin.

38

Reporte Final de Residencias Profesionales

Todas las versiones previas a un cambio determinado, implican la


notificacin de un cambio posterior en cualquiera de ellas a ese cambio
(denominado autenticacin criptogrfica de historial).

Los comandos ms utilizados durante el desarrollo del proyecto para actualizar las
versiones en el repositorio son:
DESCRIPCIN
COMANDO
Crear duplicado de un proyecto #git clone username@host:
git existente

ruta/al/repositorio/proyecto.git
#git add nombre_archivo
Comienza a trackear el archivo
Congela una versin del proyecto #git commit m Comentario
en el repositorio local
Sube la rama master al servidor #git push origin master
remoto
Muestra el estado de los ficheros #git status
del directorio del trabajo
Descarga los cambios realizados #git fetch origin master
en el repositorio remoto.
Impacta en la rama en la que te #git merge origin master
encuentras parado, los cambios
realizados en la rama.
Unifica los comandos fetch y #git pull origin master
merge en un nico comando.
Borra el fichero del directorio de #git rm r nombre_fichero
trabajo
Mover o renombrar un fichero

#git mv nombre_fichero

VNC
Es un programa de basado en una estructura cliente-servidor el cual permite tomar
el control del ordenador servidor remotamente a travs de un ordenador cliente.
VNC no impone restricciones en el sistema operativo del ordenador servidor con
39

Reporte Final de Residencias Profesionales

respecto al del cliente: es posible compartir la pantalla de una mquina con


cualquier sistema operativo que soporte VNC conectndose desde otro ordenador
o dispositivo que disponga de un cliente VNC portado.
La herramienta a usar es un cliente VNC en un sistema operativo que se
conectar a un servidor VNC en la misma o de cualquier otro sistema operativo.
Hay clientes y servidores tanto para muchos sistemas operativos basados
en GUI como para Java. Varios clientes pueden conectarse a un servidor VNC al
mismo tiempo.

Ilustracin 6. Establecer conexin con el cliente VNC

Doxygen
Doxygen es un generador de documentacin para C++, C, Java, Objective-C,
Python, IDL (versiones Corba y Microsoft), VHDL y en cierta medida para PHP, C#
y D. Dado que es fcilmente adaptable, funciona en la mayora de sistemas Unix
as como en Windows y Mac OS X.
Doxygen tiene la capacidad de recorrer todos los archivos fuente (esto se
especifica en la configuracin) y busca en todos ellos la documentacin las
funciones. La documentacin que se genera esta en HTML y en latex.

40

Reporte Final de Residencias Profesionales

Tabla 2. Ventana inicial de Doxygen

Comando
\e
\a
\arg

Sintxis
\e <palabra>
\a <palabra>
\

Descripcin
Escribe en cursiva
Usa una fuente especial

\b
\c
\code

arg{descripcin}
\b <palabra>
\c <palabra>
\code

..

..

El texto es tratado como cdigo C/C++

\endcode
\n
\f$
\f[

\endcode
\n
\f$ formula \f$
\f[formula\f]

Nueva lnea
Escribe una frmula en la lnea
Escribe una frmula, en una nueva

@param

@param x

lnea y centrada
Determina los parmetros de entrada

@return

@return

en alguna funcin.
Define el valor de retorno de un

@note

descripcin
@note

mtodo
Agrega notas a la documentacin

\author
\file
\date

descripcin
\author nombre
\file archivo
\date fecha

Especifica el autor del cdigo


Descripcin de algn archivo
Fecha en que fue desarrollado el

Crea una vieta


En negrita
Escribe con fuente de ancho fijo

41

Reporte Final de Residencias Profesionales

cdigo
Tabla 3. Palabras claves usadas en Doxygen

3. Planeacin de las actividades a realizar


En esta seccin se busca explicar las tareas realizadas en el periodo de
residencias reportado.

Planeacin de las historias de usuario


Las historias de usuario hacen referencia al primer mdulo del proyecto
relacionado con la generacin de una llave de sesin. Estas historias fueron
definidas tras varias sesiones de anlisis en las cuales se establecieron todos los
posibles escenarios en los cuales el software cliente-servidor debera funcionar
correctamente.
A partir de esto se dividieron las funcionalidades que se iban a abarcar en el
software, de las cuales se pudieron obtener seis historias de usuario (tanto del
software cliente como del software servidor), que van desde el diseo y creacin
de base de datos hasta la validacin de la llave de sesin entre el cliente y el
servidor.
Posterior a esto, se asign una prioridad a las historias obtenidas y un tiempo de
desarrollo asignado por los programadores, de acuerdo a la dificultad de la
historia. Para finalizar, con la asignacin de las historias que hara cada
programador.
El formato empleado en las historias es:

42

Reporte Final de Residencias Profesionales

Ilustracin 7. Formato de Historias de Usuarios

Codificacin del programa cliente


Ya que las historias asignadas como residente giran en torno a la programacin
del software cliente, fue necesario dividir esta tarea en tres subtareas:

43

Reporte Final de Residencias Profesionales

1. Investigar la programacin de sockets en C++.


Se recurri a varios sitios web y libros para entender el funcionamiento de los
sockets en C++, de lo cual se aprendi:
Un socket es canal de comunicacin entre dos programas que corren sobre
ordenadores distintos o incluso en el mismo ordenador. Existen varios tipos de
sockets, entre ellos destacan los orientados a conexin (stream socket
[SOCK_STREAM]) y en los cuales hasta que no est establecida correctamente la
conexin, ninguno de los extremos del canal puede transmitir datos. Esta es la
parte TCP del protocolo TCP/IP, y garantiza que todos los datos van a llegar de un
programa al otro correctamente. Se utiliza cuando la informacin a transmitir es
importante, no se puede perder ningn dato y no importa que los programas se
queden "bloqueados" esperando o transmitiendo datos. Si uno de los programas
est atareado en otra cosa y no atiende la comunicacin, el otro quedar
bloqueado hasta que el primero lea o escriba los datos.
Al momento de establecer la estructura a usar en los sockets, existen varios tipos
segn las direcciones IP que se vayan a usar, es decir IPv4 o IPv6. En este caso,
se indago sobre struct addr_info y la cual es de reciente invencin y se utiliza para
preparar las estructuras de direccin de un conector para su uso posterior.
Tambin se utiliza en operaciones de bsqueda de nombre de host, nombre de
servicio y operaciones de bsqueda. De igual modo se ley sobre los mtodos que
son empleados.

2. Disear la estructura del programa cliente.


Fue requerido disear la manera en que se comunicara el cliente con el servidor,
por lo tanto se bas en la siguiente estructura:
44

Reporte Final de Residencias Profesionales

Crear un socket que haga una llamada al sistema con el mtodo socket().

Conectar el socket a la direccin del servidor utilizando el mtodo connect().

Enviar y recibir datos. Hay un nmero de maneras de hacerlo, ya sea por


medio de los mtodos write() y read() send() y recv(), estos ltimos
permiten un mayor control en la transmisin de datos.

Cerrar la comunicacin por medio de close().

Ilustracin 8. Arquitectura cliente-servidor

3. Codificar el software cliente.


Del primer mdulo surgi como entregable un software cliente con varias clases
que van desde la inicializacin de los sockets hasta el manejo de llave de sesin y
el cual fue desarrollado en C++ y emplendose as libreras estndar.

Documentacin del software desarrollado

45

Reporte Final de Residencias Profesionales

Tras la codificacin del software cliente fueron realizadas pruebas preliminares


para verificar que no existieron bugs que no permitieran el correcto funcionamiento
del programa.
Una vez realizado esto, fue requerido realizar la documentacin de las clases
desarrolladas para lo cual se emplearon diagramas UML y diagramas BPMN para
representar las interacciones.
Para llevar a cabo esta tarea, fue requerido usar el programa Visio de Microsoft.

RESULTADOS, PLANOS, GRAFICAS, PROTOTIPOS Y


PROGRAMAS
46

Reporte Final de Residencias Profesionales

El sistema desarrollado dentro de Implementacin de protocolo de autenticacin


en red basado en criptografa de clave pblica fue modelado a travs de
diagramas UML y tambin se usaron diagramas BPMN.
Para lo cual se muestran los diagramas necesarios de casos de uso, de
actividades y de clases con responsabilidades.
En la Diagrama 1Diagrama 2, se muestra el diagrama general de casos de uso, o
mejor conocido como diagrama de contexto. En dicho diagrama se hace referencia
a la conexin de un cliente (actor), el cual requiere la direccin IP y el nmero de
puerto para establecer la conexin con el servidor. Una vez que adquiera un
estado de conectado se prepara un hilo para poder enviar mensaje o recibir
mensajes de manera continua, hasta que se pierda la conexin o la comunicacin
sea terminada correctamente.

Diagrama 2. Caso de uso de conexin de un cliente

47

Reporte Final de Residencias Profesionales

Diagrama 3. Procesos realizados por el cliente para inicializar conexin

48

Reporte Final de Residencias Profesionales

En elDiagrama 4, se describe lo que har en servidor una vez que un cliente envi
una solicitud de conexin a travs de la direccin IP y el nmero de puerto, ya que
la conexin sea aceptada se establece un hilo que esta contantemente recibiendo
o enviando mensaje, una vez que ya se pierda o se termine la conexin, se
elimina al cliente y por lo tanto se matan los hilos que se hayan generado en el
proceso.

Diagrama 4. Caso de uso de conexin servidor

49

Reporte Final de Residencias Profesionales

50

Reporte Final de Residencias Profesionales

Diagrama 5. Procesos realizados por el servidor al iniciar una conexin con el cliente

51

Reporte Final de Residencias Profesionales

Se desarroll el cdigo para la inicializacin de la curva en base a los algoritmos


base que se exponen en la criptografa de curvas elpticas:

Diagrama 6. Inicializacin y Calculo de Q y d

52

Reporte Final de Residencias Profesionales

En cuanto a la generacin de las llaves tambin se sigui el algoritmo propuesto


en la criptografa de curvas elpticas:

Diagrama 7. Generacin de las llaves

53

Reporte Final de Residencias Profesionales

Una vez diseados los procesos que se deban abarcar, se pas a la codificacin
del cliente y del servidor, algunas partes del cdigo son presentados a
continuacin:
CDIGO DEL SOFTWARE SERVIDOR
/*
** SoftwareServer.cpp
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <sys/wait.h>
#include <signal.h>
#define PORT "3490"
#define BACKLOG 10
void sigchld_handler(int s)
{
while(waitpid(-1, NULL, WNOHANG) > 0);
}

54

Reporte Final de Residencias Profesionales

// get sockaddr, IPv4 or IPv6:


void *get_in_addr(struct sockaddr *sa)
{
if (sa->sa_family == AF_INET) {
return &(((struct sockaddr_in*)sa)->sin_addr);
}
return &(((struct sockaddr_in6*)sa)->sin6_addr);
}
int main(void)
{
int sockfd, new_fd;
struct addrinfo hints, *servinfo, *p;
struct sockaddr_storage their_addr;
socklen_t sin_size;
struct sigaction sa;
int yes=1;
char s[INET6_ADDRSTRLEN];
int rv;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
if ((rv = getaddrinfo(NULL, PORT, &hints, &servinfo)) !=
0) {
fprintf(stderr,

"getaddrinfo:

%s\n",

gai_strerror(rv));
return 1;
55

Reporte Final de Residencias Profesionales

}
for(p = servinfo; p != NULL; p = p->ai_next) {
if ((sockfd = socket(p->ai_family, p->ai_socktype,
p->ai_protocol)) == -1) {
perror("server: socket");
continue;
}
if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR,
&yes,
sizeof(int)) == -1) {
perror("setsockopt");
exit(1);
}
if (bind(sockfd, p->ai_addr, p->ai_addrlen) == -1) {
close(sockfd);
perror("server: bind");
continue;
}
break;
}
if (p == NULL)

fprintf(stderr, "server: failed to bind\n");


return 2;
}
freeaddrinfo(servinfo);

56

Reporte Final de Residencias Profesionales

if (listen(sockfd, BACKLOG) == -1) {


perror("listen");
exit(1);
}
sa.sa_handler

sigchld_handler;

//

reap

all

dead

processes
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_RESTART;
if (sigaction(SIGCHLD, &sa, NULL) == -1) {
perror("sigaction");
exit(1);
}
printf("server: waiting for connections...\n");
while(1) {

// main accept() loop

sin_size = sizeof their_addr;


new_fd

accept(sockfd,

(struct

sockaddr

*)&their_addr, &sin_size);
if (new_fd == -1) {
perror("accept");
continue;
}
inet_ntop(their_addr.ss_family,
get_in_addr((struct sockaddr *)&their_addr),
s, sizeof s);
printf("server: got connection from %s\n", s);
if (!fork()) { // this is the child process
57

Reporte Final de Residencias Profesionales

close(sockfd); // child doesn't need the listener


if (send(new_fd, "Hello, world!", 13, 0) == -1)
perror("send");
close(new_fd);
exit(0);
}
close(new_fd);

// parent doesn't need this

}
return 0;
}

CDIGO DEL SOFTWARE CLIENTE


/*
** SoftwareClient.c
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#define PORT "3490"
58

Reporte Final de Residencias Profesionales

#define MAXDATASIZE 100


void *get_in_addr(struct sockaddr *sa)
{
if (sa->sa_family == AF_INET) {
return &(((struct sockaddr_in*)sa)->sin_addr);
}
return &(((struct sockaddr_in6*)sa)->sin6_addr);
}
int main(int argc, char *argv[])
{
int sockfd, numbytes;
char buf[MAXDATASIZE];
struct addrinfo hints, *servinfo, *p;
int rv;
char s[INET6_ADDRSTRLEN];
if (argc != 2) {
fprintf(stderr,"usage: client hostname\n");
exit(1);
}
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
if

((rv

getaddrinfo(argv[1],

PORT,

&hints,

&servinfo)) != 0) {
59

Reporte Final de Residencias Profesionales

fprintf(stderr,

"getaddrinfo:

%s\n",

gai_strerror(rv));
return 1;
}

for(p = servinfo; p != NULL; p = p->ai_next) {


if ((sockfd = socket(p->ai_family, p->ai_socktype,
p->ai_protocol)) == -1) {
perror("client: socket");
continue;
}
if (connect(sockfd, p->ai_addr, p->ai_addrlen) == -1)
{
close(sockfd);
perror("client: connect");
continue;
}
break;
}
if (p == NULL) {
fprintf(stderr, "client: failed to connect\n");
return 2;
}
inet_ntop(p->ai_family, get_in_addr((struct sockaddr *)p>ai_addr),
s, sizeof s);
60

Reporte Final de Residencias Profesionales

printf("client: connecting to %s\n", s);


freeaddrinfo(servinfo);
if ((numbytes = recv(sockfd, buf, MAXDATASIZE-1, 0)) ==
-1) {
perror("recv");
exit(1);
}
buf[numbytes] = '\0';
printf("client: received '%s'\n",buf);
close(sockfd);
return 0;
}

61

Reporte Final de Residencias Profesionales

CONCLUSIONES Y RECOMENDACIONES
Se considera que el objetivo se cumpli porque el mdulo desarrollado es capaz
de establecer un canal seguro haciendo uso de criptografa de curvas elpticas,
cumpliendo su propsito eficiente y efectivamente.
Se considera altamente recomendable el uso de una metodologa de desarrollo
estandarizada/probada

como

SCRUM

alguna

otra

ya

que

demostr

efectivamente coordinar los esfuerzos de programadores, testers y dems roles


involucrados permitindoles cumplir los objetivos en tiempo y forma.
Finalmente se puede afirmar que un software de calidad es fcilmente alcanzable
con un adecuado dominio de las bases tericas, un diseo que involucre a todo el
equipo activamente y una planeacin oportuna de cada fase que se identifique.

62

Reporte Final de Residencias Profesionales

REFERENCIAS
Colangelo, A. (10 de Junio de 2014). Microsoft adding Elliptic Curve Cryptography
support to Azure Web Sites. Obtenido de Microsoft adding Elliptic Curve
Cryptography
support
to
Azure
Web
Sites:
http://cloudacademy.com/blog/microsoft-adding-elliptic-curve-cryptographysupport-to-azure-web-sites/
Garca, J. M. (2003). Criptografa de curvas elpticas. Mxico.
Goya, D. (Febrero de 2009). Criptografa de Curva Elptica. Una introduccin
bsica. Obtenido de Criptografa de Curva Elptica. Una introduccin bsica:
http://www.ime.usp.br/~dhgoya/ecc
Homeless. (Mayo de 2008). Criptografa de Curva Eliptica. Obtenido de
Criptografa
de
Curva
Eliptica:
http://filosofiahacker.blogspot.mx/2008/05/criptografa-de-curva-eliptica.html
National Security Agency. (19 de Enero de 2009). The Case for Elliptic Curve
Cryptography. Obtenido de The Case for Elliptic Curve Cryptography:
https://www.nsa.gov/business/programs/elliptic_curve.shtml
Rotger, L. H., Rif Coma, J., & Tena Ayuso, J. (s.f.). Criptografa con Curvas
Elpticas.
seguinfo. (Octubre de 2 de 2007). Qu es la criptografa de curva elptica?
Obtenido de Qu es la criptografa de curva elptica?:
https://seguinfo.wordpress.com/2007/10/02/%C2%BFque-es-la-criptografiade-curva-eliptica/
Simonite, T. (19 de Agosto de 2013). Encryption Patents Could Be Blackberry's
Biggest Asset. Obtenido de Encryption Patents Could Be Blackberry's
Biggest Asset: http://www.technologyreview.com/view/518476/encryptionpatents-could-be-blackberrys-biggest-asset/

63

Reporte Final de Residencias Profesionales

HOJA DE APROBACIN DE LOS ASESORES

DR. JUAN MANUEL GARCA GARCA


LDER DEL PROYECTO
Asesor Externo

DR. ANASTASIO ANTOLINO


HERNNDEZ
DOCENTE DEL ITM
Asesor Interno

_____________________________________________
GUADALUPE YERALDIN MORALES HERNNDEZ
Residente

64

Reporte Final de Residencias Profesionales

65

Das könnte Ihnen auch gefallen