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