Giter VIP home page Giter VIP logo

cypher-chat's Introduction

Chat Cifrado

Desarrollo del programa

Este proyecto consiste en la implementación de un chat cifrado entre dos instancias. Una vez establecida la conexión, se negocian las claves de cifrado empleando el algoritmo Diffie-Hellman, la clave debe ajustarse a 256 bits, para emplearla con el algoritmo AES.

Herramientas

  • Java: lógica del programa.
  • Maven: herramienta de automatización de compilación, para gestionar las dependencias necesarias.
  • JavaFX: interfaz gráfica.

Implementación

El primer paso fue crear los paquetes para el client y para el server. Para cada caso se manejaron dos carpetas model y ui. Ahora, dentro del model del client se encuentra la clase principal Client y la clase DiffieHellman. Mientras que, dentro de la ui, se encuentra la clase ClientController y el Main, estas últimas siendo necesarias para el manejo de la interfaz. Asimismo, la carpeta model del server contiene la clase Server y la implementación del DiffieHellman. Y dentro de la ui, está la clase ServerController y el Main.

El segundo paso consistió en establecer la conexión entre cliente y servidor a través de Sockets. En el Servidor se específica el puerto y en el Cliente se indica la dirección del host y el puerto proporcionado por el Servidor. Después, para la implementación del Diffie-Hellman se realizó lo siguiente:

  • Se generan las claves públicas y privadas tanto del Cliente como del Servidor
  • Intercambian las llaves
  • Se genera la llave secreta común a partir de las llaves generadas previamente
  • Los mensajes enviados se encriptan
  • Una vez se recibe el mensaje, este se desencripta y se presenta en texto plano.

Dificultades

Por la añadidura de una interfaz gráfica, hubo algunas complicaciones en la implmentación a cabalidad de la visión gráfica pensada para el programa, principalmente por la falta de práctica con JavaFX y CSSFX. En cuanto a la arquitecura del código, definir la estructura del proyecto fue un desafío en sí mismo, y hubo al menos 2 implementaciones anteriores a la actual.

Una vez implementada la versión actual, el mayor problema consistía en la inhabilidad de terminar correctamente el proceso de servidor y cliente, los cuales se conectan a través d eun socket en un puerto, ya que los procesos del puerto quedan activos, y con cada nueva ejecución de los dos artefactos era necesario terminar el proceso manualmente. Esto se efectuó con la ayuda de dos comandos: netstat -ano | findstr :5130, el cual busca y lista los procesos que se ejecutan en el puerto 5310; y taskkill /pid -F, comando que permite terminar los procesos en el PID especificado.

Finalmente, la ejecución de las instancias en máquinas separadas fue dificultosa por las configuraciones relaciondas con los sockets de Java, y la logistica para probar la solución desplegada en varias máquinas. No obstante, el estado actual de la solución permite tener dos instancias corriendo en 127.0.0.0, o la red de loopback, y permite la transmisión bidireccional de mensajes encriptados.

Conclusiones

Utilizar Diffie-Hellman como método de encripción resulta útil para asegurar el intercambio de información entre dos partes, y las librerías criptográficas de Java proveen un framework robusto para hacerlo. El desarrollo brinda una experiencia de código altamente configurable, y eso causa una mayor versatilidad en la implementación, pero complica de igual manera el desarrollo de la misma. Aún así, el API criptográfico de Java es una buena alternativa para la implementación de metodos de claves simétricas como lo es Diffie-Hellman.

cypher-chat's People

Contributors

eggsforbacon avatar lauramartinezo avatar

Watchers

 avatar

Forkers

lauramartinezo

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.