1 of 28

Longinos Recuero Bustos

PROYECTO CHAT P2P

2 of 28

OBJETIVO

  • Aprendizaje de:
    • Lenguaje JAVA.
    • POO.
    • Creación de GUI.
    • Patrones de diseño (Modelo tres capas, Modelo Vista Controlador, …).
    • Arquitectura cliente / servidor.
    • Manejo de Sockets TCP/IP.
    • Protocolos y serialización de datos.

3 of 28

OBJETIVO

    • Herramientas para control de versiones y trabajo en equipo (Subversion).
    • Sistemas concurrentes (Hilos, sincronización, exclusión mutua, ...).
    • Introducción a la criptología:
      • Cifrado XOR.
      • Cifrado simétrico (DES, 3DES, RC5, AES, Blowfish, IDEA, …).
      • Cifrado asimétrico (RSA, DSA, Diffie-Hellman, ...).
    • Codificación en Base64.

4 of 28

META

  • Chat Peer to peer.

5 of 28

MODO DE TRABAJO

  • INDIVIDUAL:
    • Aprendizaje global del proyecto.
  • PARALELO:
    • Aprendizaje de partes especificas del proyecto.

6 of 28

ARQUITECTURA CLIENTE / SERVIDOR

  • Es una relación entre procesos corriendo en máquinas separadas.
  • El servidor es un proveedor de servicios.
  • El cliente es un consumidor de servicios.
  • Ambos extremos dialogan mediante un protocolo de aplicación:
    • Petición de servicio.
    • Respuesta

7 of 28

SOCKET

  • Interfaz normalizado de comunicación entre procesos utilizado inicialmente en la arquitectura TCP/IP. Su objetivo es permitir que un proceso pueda enviar y/o recibir datos a través de la red.

8 of 28

SOCKET

  • Concepto abstracto por el cual dos programas pueden intercambiar cualquier flujo de datos, de manera Fiable y ordenada.
  • Un socket queda definido por:
    • una dirección IP.
    • un protocolo de transporte.
    • un número de puerto.

9 of 28

SOCKET: Servicios

  • Orientado a la conexión (TCP):
    • Flujos de bytes (Streams) que incorporan control de errores y control del flujo
    • Comunicación uno a uno.
  • Sin conexión (UDP):
    • Bloques de datos de usuario de hasta 64 KB (Datagramas). No hay control de errores, ni control del flujo.
    • Admiten multicast (comunicación uno a varios).

10 of 28

Socket: Interfaz

SOCKET

SOCKET

R E D

11 of 28

Socket: Java

  • Clases definidas en el paquete java.net.
  • Tres clases de sockets:
    • Con conexión (TCP)
      • Clase ServerSocket (Servidor)
      • Clase Socket (Cliente)
    • Sin conexión (UDP)
      • Clase DatagramSocket

12 of 28

Clase ServerSocket

  • Constructores:
    • ServerSocket(int puerto)
      • Abre un socket en modo escucha en el puerto indicado. Si puerto=0, elige un puerto cualquiera.
    • ServerSocket(int puerto, int max)
      • Abre un socket en modo escucha en el puerto indicado.
      • El parámetro max indica la longitud máxima de la cola de conexiones. Se rechazarán las peticiones que lleguen si la cola esta llena.

13 of 28

Clase ServerSocket

  • Métodos:
    • accept()
      • Acepta una conexión de un cliente y devuelve un socket asociado a ella.
      • La operación se bloquea hasta que se establece la conexión.
    • close()
      • Cierra el socket servidor.

14 of 28

Clase Socket

  • Constructores:
    • Socket(String nombreHost, int puerto);
      • Conecta un socket al puerto especificado del host cuyo nombre se especifica.
    • Socket(InetAddress dirHost, int puerto);
      • Conecta un socket al puerto especificado en el host cuya dirección IP se especifica.

15 of 28

STREAM

  • Una vez conectado, un socket TCP dispone de dos streams, uno para recibir datos (InputStream) y otro para enviar datos (OutputStream) a los que se puede acceder mediante los siguientes métodos de la clase Socket:
    • InputStream getInputStream();
    • OutputStream getOutputStream();

16 of 28

PROTOCOLO DE APLICACIÓN

  • Formato de trama de aplicación:
    • #:CIFRADO:NICK:TEXTO:CHECKSUM$
  • Tokens:
    • # = Cabecera de trama.
    • : = Comienzo de token de información.
    • $ = Cola de trama.
    • CIFRADO = Tipo de cifrado empleado.
    • CHECKSUM = Suma de comprobación.

17 of 28

ENVIO DE TRAMA

  • Se cifran los tokens NICK y TEXTO por separado con el tipo de cifrado seleccionado.
  • A continuación, esos mismos tokens se codifican en Base 64.
  • Se encapsula todo serializando la trama y se envía al end point.

18 of 28

RECEPCION DE TRAMA

  • Se decodifican los tokens NICK y TEXTO por separado.
  • A continuación, esos mismos tokens se descifran.
  • Se tratan los tokens recibidos como se haya acordado.

19 of 28

CIFRADO XOR

  • En criptografía, el cifrado XOR, es un algoritmo de cifrado simple, basado en los siguientes conceptos:
    • a XOR b = c
    • c XOR b = a
  • Por sí solo el cifrado XOR es muy vulnerable y es muy fácil obtener la clave a través del análisis de varios mensajes cifrados con la misma clave.

20 of 28

CIFRADO XOR: Ejemplo

  • Mensaje: ALEJANDRO
  • Clave: ALBERTITO
  • Cifrado:
    • (A)41 ^ 41(A) = 00
    • (L)4C ^ 4C(L) = 00
    • (E)45 ^ 42(B) = 07
    • (J)4A ^ 45(E) = 0F
    • (A)41 ^ 52(R) = 13
    • (N)4E ^ 54(T) = 1A
    • (D)44 ^ 49(I) = 0D
    • (R)52 ^ 54(T) = 06
    • (O)4F ^ 4F(O) = 00
  • Resultado:
    • 0000070F131A0D0600
  • Descifrado:
    • 00 ^ 41(A) = (A)41
    • 00 ^ 4C(L) = (L)4C
    • 07 ^ 42(B) = (E)45
    • 0F ^ 45(E) = (J)4A
    • 13 ^ 52(R) = (A)41
    • 1A ^ 54(T) = (N)4E
    • 0D ^ 49(I) = (D)44
    • 06 ^ 54(T) = (R)52
    • 00 ^ 4F(O) = (O)4F

21 of 28

CODIFICACION BASE64

  • Sistema de numeración posicional que usa 64 como base.
  • Es la mayor potencia de dos que puede ser representada usando únicamente los caracteres imprimibles de ASCII.
  • Todas las variantes famosas que se conocen con el nombre de Base64 usan el rango de caracteres A-Z, a-z y 0-9 en este orden para los primeros 62 dígitos.

22 of 28

CODIFICACION BASE64

  • Fundamento:

23 of 28

CRIPTOGRAFÍA DE CLAVE SIMÉTRICA

  • La criptografía simétrica es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes.
  • Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar.
  • Una vez ambas tienen acceso a esta clave, el remitente cifra un mensaje usándola, lo envía al destinatario, y éste lo descifra con la misma.
  • Algunos ejemplos de algoritmos simétricos son DES, 3DES, RC5, AES, Blowfish e IDEA.

24 of 28

CRIPTOGRAFIA DE CLAVE ASIMÉTRICA

  • Las claves se dan en pares:
    • Una clave pública para el cifrado;
    • Una clave secreta para el descifrado.
  • Los usuarios eligen una clave aleatoria que sólo ellos conocen (ésta es la clave privada).
  • A partir de esta clave, automáticamente se deduce un algoritmo (la clave pública).
  • Los usuarios intercambian esta clave pública mediante un canal no seguro.
  • Cuando un usuario desea enviar un mensaje a otro usuario, sólo debe cifrar el mensaje que desea enviar utilizando la clave pública del receptor.
  • El receptor podrá descifrar el mensaje con su clave privada (que sólo él conoce).
  • Algunos ejemplos de algoritmos asimétricos son Diffie-Hellman, RSA, DSA, ElGamal

25 of 28

CRIPTOGRAFÍA HÍBRIDA

  • La criptografía híbrida es un método criptográfico que usa tanto un cifrado simétrico como un asimétrico.
  • Emplea el cifrado de clave pública para compartir una clave para el cifrado simétrico.

26 of 28

CONTROL DE VERSIONES

  • El estado en el que se encuentra una aplicación en un momento dado de su desarrollo o modificación se denomina versión de la aplicación.
  • Se llama control de versiones a la gestión de los diversos cambios que se realizan sobre los elementos de algún producto o una configuración del mismo.

27 of 28

SUBVERSION

  • Es software libre bajo una licencia de tipo Apache/BSD.
  • Servidor subversion:
    • Montado sobre plataforma LINUX.
  • Cliente subversion:
    • Tortoise: implementado como una extensión al shell de Windows.
    • SubEclipse para Eclipse IDE.
    • NetBeans IDE.

28 of 28

DESPEDIDA