Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Java Crypto Sockets 🔐

Java Crypto Sockets Banner

Aplicación de Transferencia Segura de Archivos en Sistemas Distribuidos mediante Sockets TCP, Cifrado Simétrico (AES-GCM), Cifrado Asimétrico Híbrido (RSA) y Verificación de Integridad (SHA-256).


📌 ¿Qué es este proyecto?

Java Crypto Sockets es una aplicación desarrollada en Java para la asignatura de Sistemas Distribuidos. Su objetivo principal es demostrar cómo implementar mecanismos avanzados de seguridad de la información y criptografía en la transmisión distribuida de datos a través de sockets de red TCP.

El sistema permite transferir cualquier tipo de archivo (texto, imágenes, documentos, ejecutable, etc.) entre un cliente emisor y un servidor receptor de manera confidencial e íntegra.


🚀 Características Principales

  • 🔒 Cifrado Simétrico (AES-GCM):

    • Utiliza el algoritmo AES en modo GCM (Galois/Counter Mode) con vectores de inicialización (IV) de 12 bytes y etiquetas de autenticación de 128 bits.
    • Implementa la transmisión de la clave secreta por un puerto separado (Puerto 7001) y los datos cifrados por el puerto principal (Puerto 7000).
  • 🔑 Cifrado Asimétrico Híbrido (RSA + AES-GCM):

    • Generación dinámica de par de llaves RSA (Pública / Privada).
    • El receptor envía su clave pública RSA al emisor.
    • El emisor genera una clave de sesión AES, cifra el archivo con AES-GCM y cifra la clave AES utilizando la clave pública RSA.
    • Comunicación centralizada por el Puerto 6000.
  • 🛡️ Verificación de Integridad con SHA-256:

    • Calcula la huella digital (Hash SHA-256) del archivo original antes del envío y la compara automáticamente con el hash del archivo recibido y descifrado.
  • 🧰 Arquitectura Limpia para Apache NetBeans:

    • Proyecto optimizado y empaquetado para abrirse directamente en Apache NetBeans IDE mediante script Ant (build.xml) sin dependencias de IDEs de terceros.

🏗️ Estructura del Proyecto

java-crypto-sockets/
├── assets/
│   └── banner.png                # Imagen gráfica de presentación
├── nbproject/                    # Configuración nativa del proyecto Apache NetBeans
│   ├── build-impl.xml
│   ├── genfiles.properties
│   ├── project.properties
│   └── project.xml
├── src/
│   ├── EmisorSimetrico.java      # Cliente emisor (Cifrado Simétrico AES)
│   ├── ReceptorSimetrico.java    # Servidor receptor (Cifrado Simétrico AES)
│   ├── EmisorAsimetrico.java     # Cliente emisor (Cifrado Asimétrico Híbrido RSA+AES)
│   ├── ReceptorAsimetrico.java   # Servidor receptor (Cifrado Asimétrico Híbrido RSA+AES)
│   ├── Utilidades.java           # Métodos auxiliares de I/O, hashing SHA-256 y Sockets
│   └── Mensaje.txt               # Archivo de prueba para transmisión
├── build.xml                     # Script de construcción Ant para NetBeans
├── manifest.mf                   # Manifiesto Java
└── .gitignore                    # Reglas de exclusión de archivos temporales

🛠️ Requisitos Previos

  • Java JDK: Versión 8 o superior (Recomendado Java 11 / 17 / 21).
  • IDE: Apache NetBeans IDE (o ejecución directa por línea de comandos / Ant).

💻 ¿Cómo Usar y Ejecutar el Proyecto?

1. Abrir en Apache NetBeans IDE

  1. Abre Apache NetBeans IDE.
  2. Selecciona File > Open Project... (o Ctrl + Shift + O).
  3. Navega hasta la carpeta del proyecto y selecciónala (reconocerá el icono de proyecto Java Ant).
  4. Presiona Open Project.

2. Modos de Ejecución

Para probar el envío y recepción de archivos, siempre debes ejecutar primero el Receptor (Servidor) y luego el Emisor (Cliente).

🔹 Opción A: Cifrado Simétrico (AES-GCM en 2 Puertos)

  1. Ejecutar Receptor:
    • Haz clic derecho sobre ReceptorSimetrico.java > Run File (Shift + F6).
    • El receptor quedará a la espera en los puertos 7000 (Archivo) y 7001 (Llave AES).
  2. Ejecutar Emisor:
    • Haz clic derecho sobre EmisorSimetrico.java > Run File (Shift + F6).
    • Ingresa la ruta del archivo cuando te lo solicite en consola (ejemplo: src/Mensaje.txt).
    • El archivo se descifrará y guardará como recibido_simetrico_Mensaje.txt.

🔹 Opción B: Cifrado Asimétrico Híbrido (RSA + AES-GCM)

  1. Ejecutar Receptor:
    • Haz clic derecho sobre ReceptorAsimetrico.java > Run File (Shift + F6).
    • Generará las llaves RSA y esperará la conexión en el puerto 6000.
  2. Ejecutar Emisor:
    • Haz clic derecho sobre EmisorAsimetrico.java > Run File (Shift + F6).
    • Recibirá la clave pública RSA, cifrará la clave AES y el archivo, y los transmitirá.
    • El archivo se descifrará y guardará como recibido_asimetrico_Mensaje.txt.

📊 Flujo de Comunicación y Seguridad

sequenceDiagram
    autonumber
    participant E as Emisor (Cliente)
    participant R as Receptor (Servidor)

    Note over R: Genera par de claves RSA (Pública/Privada)
    R->>E: Envia Clave Pública RSA
    Note over E: Genera clave secreta AES-256
    Note over E: Cifra archivo con AES-GCM
    Note over E: Cifra clave AES con Clave Pública RSA
    E->>R: Transmite Clave AES Cifrada + IV + Archivo Cifrado
    Note over R: Descifra clave AES con Clave Privada RSA
    Note over R: Descifra el archivo mediante AES-GCM
    Note over R: Compara Hash SHA-256 del archivo
Loading

📝 Licencia y Créditos

Desarrollado como proyecto práctico de la asignatura Sistemas Distribuidos.
Autor: David Cevallos (@DavidCevallos15)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages