Skip to content

Luigiverde4/SegDRM

Repository files navigation

Secure DRM Lab (Segder)

Sistema academico de distribucion de contenidos con control de licencias, cifrado hibrido y firma digital.

El proyecto simula una arquitectura DRM con cuatro actores:

  • ServerContenidos: lista y entrega archivos.
  • UA (User Agent): interfaz de usuario y coordinador de peticiones.
  • CDM (Content Decryption Module): solicita licencia y descifra contenido.
  • ServerLicencias: valida firma, entrega licencia y claves de descifrado.

Caracteristicas

  • Cifrado simetrico de contenido con AES (CTR/CBC segun modulo).
  • Intercambio de claves con RSA.
  • Firma digital de la solicitud de licencia.
  • Marca de agua visible para imagenes antes de su distribucion.
  • Flujo completo UA <-> CDM <-> ServerLicencias.
  • Servidor de contenidos con comandos de consulta y descarga.

Estructura del repositorio

Segder/
  ServerContenidos.py
  ServerLicencias.py
  UA.py
  CDM.py
  funciones.py
  licencias.json
  licencias.txt

Requisitos

  • Python 3.10+
  • Dependencias:
    • cryptography
    • Pillow

Instalacion recomendada:

pip install cryptography pillow

Preparacion del entorno

Antes de ejecutar, crea estas carpetas en la raiz del proyecto si no existen:

  • contenido (archivos fuente que sirve el servidor de contenidos)
  • contenido_descargado (descargas y archivos descifrados)
  • logs (logs de servidores)

Ejemplo rapido en Windows PowerShell:

New-Item -ItemType Directory -Force contenido, contenido_descargado, logs

Arquitectura y puertos

  • ServerContenidos: 127.0.0.1:6000
  • ServerLicencias: 127.0.0.1:6001
  • UA (socket para CDM): 127.0.0.1:7000

Flujo principal:

  1. UA consulta contenidos (VER) al ServerContenidos.
  2. UA descarga archivo (DESCARGAR nombre).
  3. Si el contenido esta cifrado, UA pide al CDM una solicitud de licencia.
  4. CDM firma la solicitud y UA la reenvia al ServerLicencias.
  5. ServerLicencias responde con datos de licencia.
  6. CDM descifra el contenido y lo guarda en contenido_descargado.

Orden de ejecucion

Ejecuta en terminales separadas y en este orden:

  1. python ServerContenidos.py
  2. python ServerLicencias.py
  3. python UA.py
  4. python CDM.py

Nota:

  • UA.py abre socket en 7000 y espera la conexion de CDM.
  • Si ejecutas CDM.py antes que UA.py, puede fallar la conexion inicial.

Comandos de la UA

Comandos disponibles en consola de UA:

  • INFO muestra ayuda
  • VER lista contenidos disponibles
  • DESCARGAR <archivo> descarga contenido
  • CLS limpia consola
  • FIN cierra la aplicacion

Partes del proyecto (enunciado original)

Parte 1

  1. La aplicacion se comunica con el servidor de contenidos para consultar imagenes y videos disponibles.
  2. Tras elegir un contenido, la aplicacion lo solicita y el servidor lo envia.
  3. Si el contenido esta cifrado, la aplicacion debe obtener la clave de descifrado desde el servidor de licencias.

Parte 2

Como extension de la parte anterior:

  1. Cuando el contenido sea una imagen, el servidor de contenidos incluye una marca de agua visible asociada al usuario receptor.
  2. El mensaje de solicitud de la clave de cifrado debe ir firmado digitalmente por la aplicacion.

Parte 3

Flujo completo con UA, CDM y servidor de licencias:

  1. Igual que en Parte 1 para consulta y descarga de contenidos.
  2. Si la UA detecta contenido cifrado, pide al CDM un mensaje de solicitud de licencia.
  3. El CDM prepara y firma digitalmente ese mensaje, y lo devuelve a la UA.
  4. La UA reenvia la solicitud al servidor de licencias y recibe la respuesta.
  5. La respuesta de licencia viaja de vuelta al CDM a traves de la UA.
  6. El CDM interpreta la respuesta, obtiene clave/IV y descifra el contenido.

Entrega y evaluacion (resumen)

Elementos de entrega:

  • Video explicativo y demostrativo.
  • Memoria del proyecto con capturas y reparto de tareas.
  • Presentacion oral publica.

Evaluacion orientativa:

  • Parte 1 completada: hasta 0.75 puntos.
  • Parte 1 + 2 completadas: hasta 1.25 puntos.
  • Parte 1 + 2 + 3 completadas: hasta 1.5 puntos.
  • Con presentacion oral, posibilidad de maxima calificacion.

Operaciones de servidor de licencias

Comandos de consola en ServerLicencias.py:

  • encrypt <archivo_limpio> <archivo_sucio>
  • decrypt <archivo_sucio> <archivo_limpio>
  • log <mensaje>
  • exit

Notas tecnicas

  • El sistema de licencias usa licencias.txt como fuente activa (descifrada mediante clave fija en funciones.py).
  • El proyecto incluye licencias.json como referencia, pero la carga operativa se hace desde licencias.txt.
  • La marca de agua se aplica a imagenes en el servidor de contenidos para trazabilidad por cliente.

Limitaciones actuales

  • No hay requirements.txt.
  • Se asume entorno local (127.0.0.1) y ejecucion manual multi-proceso.
  • El manejo de errores de red puede mejorarse para reconexion automatica.

About

Plataforma DRM educativa en Python con UA/CDM, servidor de contenidos y servidor de licencias usando AES, RSA y firma digital.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages