Download IMPLEMENTACIÓN DE UNA API JAVA DE CRIPTOGRAFÍA RSA

Document related concepts
no text concepts found
Transcript
Implementación de una API Java de Criptografía RSA
IMPLEMENTACIÓN DE UNA API JAVA DE CRIPTOGRAFÍA RSA
Autor: Ruiz de Ojeda Fernández, Javier.
Director: Contreras Bárcena, David.
Entidad Colaboradora: ICAI – Universidad Pontificia de Comillas.
RESUMEN DEL PROYECTO
Desde hace más de 2000 años, la criptografía ha caminado de la mano del hombre, y
desde las campañas romanas hasta la Segunda Guerra Mundial, se ha encargado de
determinar los vencedores y los vencidos. Poder disponer de un sistema que permita
enviar un mensaje que sólo pudiera ser leído por el destinatario objetivo ha sido y sigue
siendo una necesidad crucial. La ciencia de la criptografía presenta múltiples problemas,
pero por ser un sistema destinado a usarse por unos pocos, siempre se han podido paliar
con soluciones rudimentarias y poco creativas. Sin embargo el mundo en el que vivimos
hoy, la ‘Era de la Información’, lleva todos estos problemas a una nueva dimensión, y
por tanto requiere soluciones innovadoras y revolucionarias en campos tan modernos
como la informática, y tan antiguos como las matemáticas.
Este proyecto pretende explicar los avances criptográficos de la última mitad del siglo
XX, y plasmarlos en una implementación al alcance de todos, que permita un uso fácil
de la criptografía en nuestras comunicaciones. Para ello proveerá una serie de funciones
que faciliten el cifrado de información para su viaje por canales no seguros, así como
algunas aplicaciones de ejemplo.
El desarrollo de software conoce muchas metodologías, y es difícil que ningún
proyecto, alcanzada una determinada envergadura, se ciña solamente por una de ellas.
Así, para la consecución de este proyecto, se ha empleado una mezcla de varias.
I
Implementación de una API Java de Criptografía RSA
La metodología que ha gobernado todas las demás ha sido algo que aprendí estudiando
en Estados Unidos, y que los americanos llaman ‘scrum’. El término deriva del mundo
del deporte, en particular del fútbol americano, y pretende describir el proceso por el
cual los jugadores se reúnen constantemente para analizar la situación, y seleccionar la
estrategia adecuada a seguir hasta la próxima reunión. Se trata, pues, de una versión
extrema del modelo en espiral (que pretendía solucionar los problemas ocasionados por
la rigidez del modelo en cascada), en la que es difícil definir objetivos o prever
problemas a largo plazo.
La mayor fortaleza de esta metodología reside en que, dado el número de revisiones
realizadas del proceso del proyecto, el avance de este es bastante rápido y optimizado,
ya que en cada momento sólo se centra en las cuestiones pertinentes. La otra gran
ventaja respecto a modelos tradicionales es la rapidez con la que empieza a generar
resultados que, si bien en un principio no son ni de lejos los apropiados, permiten tener
desde el principio una base sobre la que trabajar, incluso aunque se trate de un sistema
nuevo.
Al finalizar el proyecto, se dispondrá de una API Java que permita el cifrado y
descifrado de texto, de manera que sólo pueda ser leído por sus destinatarios. Además
se presentarán dos aplicaciones de demostración. Las características del proyecto serán
las siguientes.
La longitud del mensaje no influye en la aplicación, ya que la encriptación se realiza por
bloques.
La complejidad matemática de la criptografía empleada se mantendrá oculta del usuario,
que podrá cifrar y descifrar mensajes con transparencia.
Las claves empleadas serán distintas para comunicación, para aumentar la seguridad. A
su vez, un usuario no podrá utilizar su juego de claves para descifrar mensajes de otros
usuarios.
II
Implementación de una API Java de Criptografía RSA
El estándar criptográfico empleado es RSA, por ser el algoritmo matemático de
encriptación más potente en la actualidad, y por tratarse de un estándar de criptografía
de clave pública y asimétrica (ambas cualidades y su importancia serán explicadas más
adelante).
El código será público, con lo que cualquiera podrá utilizarlo o modificarlo para su uso
particular.
RSA CRYPTOGRAPHY INTERFACE FOR JAVA
For more than 200 years cryptography and man have walked together, and from the first
Roman campaigns to the Second World War, it has determined success. A system that
allows sending a message only readable by its intended receiver has been and still is a
crucial need. The science of cryptography has, however, many flaws, and generates
many problems. Traditionally, these could be solved in rudimentary ways, for
cryptography was only intended for a small group of people. But, in today’s world, the
‘Information Age’, all these problems acquire a new dimension, and thus require new
and revolutionary solutions that reside in fields as modern as programming, and as old
as math.
This project will try to explain the cryptographic advances since the middle 20th
century, and implement them in a way that is easy for anyone to use, allowing a simple
use of cryptography in our communications. With this in mind, it shall provide a series
of functions that enable the encryption of information so it can travel through an open
channel.
There are many methodologies in software engineering, and it is complicated for any
considerable project to use any single one of them. Thus, a mixture of several has been
used in this one.
III
Implementación de una API Java de Criptografía RSA
The methodology that has governed the rest is one I learned while studying abroad in
the US, something they call ‘scrum’. The word comes from the world of sports, football
in particular, and attempts to describe the process in which the players will gather once
and again to analyze the situation and choose the appropriate strategy to use until the
next gathering. It is, therefore, an extreme version of the spiral model (which solved
many of the problems caused by the strictness of the waterfall model), where it is
difficult to define goals or predict problems long-term.
The greatness of this methodology is that, because of the amount of revisions the project
suffers, it progresses quite fast, since it only focuses in the questions at hand. The other
great advantage is how fast it starts generating results, as opposed to other traditional
methodologies. These results might not be the correct ones at first, but they provide a
base which we can build upon, even when we are creating a new system.
By the end of the project, a Java library will be available that will enable the encryption
and decryption of messages sent between processes, so that only their intended readers
can access them. The project specifications are the following.
The length of the message does not affect the application, since the encryption will
happen in blocks.
The mathematical complexity of the existing cryptography will be hidden from the user,
who can encrypt and decrypt messages transparently.
The keys will vary from use to use, making it more difficult for an eavesdropper to
break them. Also, one user will not be able to use his/her set of keys to decrypt another
user’s information.
The cryptography used will be RSA, since it is the most powerful mathematical system
available, and because it is an asymmetric, public key system (both these concepts will
be further explained).
The code will be public, so anyone can use it or modify it for their particular use.
IV
Implementación de una API Java de Criptografía RSA
V