005_Reporte Final.docx

65
MORELIA, MICHOACÁN 05 DE DICIEMBRE DE 2014 INSTITUTO TECNOLÓGICO DE MORELIA INSTITUTO TECNOLÓGICO DE MORELI “JOSÉ MARÍA MORELOS Y PAVÓN” REPORTE FINAL DE RESIDENCIAS PROFESIONALES PROYECTO: IMPLEMENTACIÓN DE PROTOCOLO DE AUTENTICACIÓN EN RED BASADO EN CRIPTOGRAFÍA DE CLAVE PÚBLICA EMPRESA: INSTITUTO TECNOLÓGICO DE MORELIA RESIDENTES: GUADALUPE YERALDIN MORALES HERNÁNDEZ 11!11" MARIO EDUARDO SÁNCHEZ GUTIERREZ 11!111# CARRERA: INGENIERÍA EN TECNOLOGÍAS DE LA INFORMACIÓN Y COMUNICACIÓN ASESOR INTERNO: ASESOR EXTERNO: DR$ ANASTACIO ANTOLINO HERNÁNDEZ DR$ JUAN MANUEL GARCÍA GARCÍA

Transcript of 005_Reporte Final.docx

Reporte Final de Residencias Profesionales

INSTITUTO TECNOLGICODE 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:

CARRERA:

INGENIERA EN TECNOLOGAS DE LA INFORMACIN Y COMUNICACIN

MORELIA, MICHOACN 05 DE DICIEMBRE DE 2014

INDICE

Carta de aceptacin3

Carta de terminacin5

Introduccin7

Justificacin8

Objetivos9

Caracterizacin del rea donde se particip9

Problemas a resolver10

Alcances y limitaciones11

Fundamento terico15

Procedimiento y descripcin de las actividades realizadas32

Resultados, planos, graficas, prototipos y programas45

Conclusiones y recomendaciones59

Referencias59

Hoja de aprobacin de los asesores61

CARTA DE ACEPTACIN

CARTA DE TERMINACIN

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. 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 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.

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:

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 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:

1. 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 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 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.

1. 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:

0. 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 entre el cliente y el servidor, y el sistema desarrollado justamente aplica tcnicas criptogrficas que incrementan la seguridad en la comunicacin.

0. 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.

0. 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.

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.

a) 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.

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 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.

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:

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 , para despejar x se utiliza una operacin inversa a la potenciacin, y eso es el logaritmo, es decir, 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 para cualquier a. Existe el elemento opuesto, y, tal que .

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 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 . Es decir, habr un nmero entero k de forma que se podr escribir 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 (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.

El esquema utilizado empleado para la criptografa empleando curvas elpticas es (seguinfo, 2007):1. Escoger una curva elptica2. 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:

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 * su grupo multiplicativo. En general, una curva elptica sobre un campo es el conjunto de puntos en el plano proyectivo que satisfacen una ecuacin de la forma (Garca, 2003):

Incluyendo a , donde

Utilizando coordenadas no-homogneas:

;

La ecuacin anterior se transforma en:

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: , donde . (Garca, 2003). 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 , donde x, a y n son conocidas, mientras que la variable y es la 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 , 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 puntos, y su tiempo de ejecucin es aproximadamente de 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 tiempo esperado de ejecucin ( 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 (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 qv1 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): 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 . 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 , 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 , donde m es divisible por un entero l pequeo. De hecho, como estos resultados son vlidos para cualquier , se podra extender esta tcnica a todos estos cuerpos.

Recordando que dada una curva elptica E, definida sobre , podemos considerarla tambin como una curva elptica sobre cualquier extensin 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 , primero tomaremos una curva sobre , con l dividiendo m y calcularemos el nmero de puntos de la curva sobre (que se puede hacer de forma exhaustiva puesto que hemos elegido l de forma que el cuerpo 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 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 , donde A y B son nmeros racionales podemos considerar la misma ecuacin mdulo un primo p. Entonces, tendremos la curva sobre con puntos. Hay resultados tericos que aseguran que para p lo suficientemente grande 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 (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 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 el cuerpo tiene un nmero pequeo de clases de ideales. Para curvas elpticas sobre este mtodo se denomina mtodo de Atkin-Morain y, sobre , 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 , suponemos que y la curva . Se selecciona A,B de forma aleatoria, pero satisfaciendo . Calculamos entonces el nmero de puntos de la curva sobre 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 , puesto que resultados de Lenstra demuestran su funcionalidad. Para curvas elpticas sobre hay resultados similares en los trabajos de Waterhouse y Schoof.

Generacin de llaves

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 E 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.Descripcin

1Elegir un nmero entero aleatorio d tal que

2Calcular el punto

3 es equivalente a la llave pblica en caso de que la llave pblica sea corta

4La 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

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 y punto pblicamente conocido. Cada usuario elige al azar un nmero secreto y hace pblico el valor . Para compartir una clave secreta, A y B deben hacer:

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.

4. Alice calcula aPB=abP

5. Bob calcula bPA=abP

ALICEBOB

Elige una curva elptica E sobre un campo finito F(q).Elige una curva elptica E sobre un campo finito F(q).

Elige un entero grande a

Calcula

Enva PA a BOBRecibe PA de ALICE.

Elige un entero grande b

Calcula

Recibe PB de BOBEnva PB a ALICE

Calcula Calcula

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 de la curva de forma que su orden sea un nmero primo grande.Suponiendo que la curva elptica es sobre . 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 . Tomando que tiene orden , 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 , . Sea el mensaje que el usuario A quiere enviar a B. Cada usuario U tiene una clave privada tal que .

Criptosistema ElGamal aplicando curvas elpticas

Sea E una curva elptica sobre , sea un punto de la curva de orden grande (sera deseable que ),

Para cada usuario U, sea su clave privada, donde ; (bastara tomar ). La clave pblica de U ser .

1. El usuario A quiere enviar el mensaje cifrado al usuario B: A escoge al azar un nmero , A calcula el punto de la curva asociado al mensaje m, Cifra como , Enva a B .

2. B para descifrar el mensaje deber hacer: 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 sobre como . Para generar la clave pblica el usuario B escoger dos nmeros primos grandes tales que , como en el esquema clsico, calcular y publicar , donde y 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 donde . El usuario A determina el valor b de la curva de forma que . Especficamente, calcula . Cifra el punto calculando sobre Enva el texto cifrado a B.

2. El usuario B para descifrar el mensaje c deber hacer: 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 y construye la curva . A partir de la clave privada calcula sobre

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.

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.

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, auto-gestin 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.

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 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 elProduct Ownerpara 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 enhistoriasa incorporar en elProduct Backlogy 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 lashistoriasa 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.

Eclipse IDE

Ilustracin 4. Eclipse IDEEclipse 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++.

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. 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:

DESCRIPCINCOMANDO

Crear duplicado de un proyecto git existente#git clone username@host:/ruta/al/repositorio/proyecto.git

Comienza a trackear el archivo#git add nombre_archivo

Congela una versin del proyecto en el repositorio local#git commit m Comentario

Sube la rama master al servidor remoto#git push origin master

Muestra el estado de los ficheros del directorio del trabajo#git status

Descarga los cambios realizados en el repositorio remoto.#git fetch origin master

Impacta en la rama en la que te encuentras parado, los cambios realizados en la rama.#git merge origin master

Unifica los comandos fetch y merge en un nico comando.#git pull origin master

Borra el fichero del directorio de trabajo#git rm r nombre_fichero

Mover o renombrar un fichero#git mv nombre_fichero

VNC

Es un programa debasado 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 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 unsistema 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 enGUIcomo paraJava. 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.

Tabla 2. Ventana inicial de Doxygen

ComandoSintxisDescripcin

\e\e Escribe en cursiva

\a\a Usa una fuente especial

\arg\arg{descripcin}Crea una vieta

\b\b En negrita

\c\c Escribe con fuente de ancho fijo

\code ..\endcode\code..\endcodeEl texto es tratado como cdigo C/C++

\n\nNueva lnea

\f$\f$ formula \f$Escribe una frmula en la lnea

\f[\f[formula\f]Escribe una frmula, en una nueva lnea y centrada

@param@param xDetermina los parmetros de entrada en alguna funcin.

@return@return descripcinDefine el valor de retorno de un mtodo

@note@note descripcinAgrega notas a la documentacin

\author\author nombreEspecifica el autor del cdigo

\file\file archivoDescripcin de algn archivo

\date\date fechaFecha en que fue desarrollado el 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:

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:

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: 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

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

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

Diagrama 3. Procesos realizados por el cliente para inicializar conexin

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

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

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

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

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 #include #include #include #include #include #include #include #include #include #include #include

#define PORT "3490"

#define BACKLOG 10

void sigchld_handler(int s){ while(waitpid(-1, NULL, WNOHANG) > 0);}

// 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; } 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);

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 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 #include #include #include #include #include #include #include #include

#include

#define PORT "3490"

#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) { 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); 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;}

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 u 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.

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-cryptography-support-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-criptografia-de-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/encryption-patents-could-be-blackberrys-biggest-asset/

HOJA DE APROBACIN DE LOS ASESORES

DR. JUAN MANUEL GARCA GARCALDER DEL PROYECTOAsesor Externo

DR. ANASTASIO ANTOLINO HERNNDEZDOCENTE DEL ITMAsesor Interno

_____________________________________________

GUADALUPE YERALDIN MORALES HERNNDEZResidente

61