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.
- 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.
Segder/
ServerContenidos.py
ServerLicencias.py
UA.py
CDM.py
funciones.py
licencias.json
licencias.txt
- Python 3.10+
- Dependencias:
cryptographyPillow
Instalacion recomendada:
pip install cryptography pillowAntes 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- ServerContenidos:
127.0.0.1:6000 - ServerLicencias:
127.0.0.1:6001 - UA (socket para CDM):
127.0.0.1:7000
Flujo principal:
- UA consulta contenidos (
VER) al ServerContenidos. - UA descarga archivo (
DESCARGAR nombre). - Si el contenido esta cifrado, UA pide al CDM una solicitud de licencia.
- CDM firma la solicitud y UA la reenvia al ServerLicencias.
- ServerLicencias responde con datos de licencia.
- CDM descifra el contenido y lo guarda en
contenido_descargado.
Ejecuta en terminales separadas y en este orden:
python ServerContenidos.pypython ServerLicencias.pypython UA.pypython CDM.py
Nota:
UA.pyabre socket en7000y espera la conexion de CDM.- Si ejecutas
CDM.pyantes queUA.py, puede fallar la conexion inicial.
Comandos disponibles en consola de UA:
INFOmuestra ayudaVERlista contenidos disponiblesDESCARGAR <archivo>descarga contenidoCLSlimpia consolaFINcierra la aplicacion
- La aplicacion se comunica con el servidor de contenidos para consultar imagenes y videos disponibles.
- Tras elegir un contenido, la aplicacion lo solicita y el servidor lo envia.
- Si el contenido esta cifrado, la aplicacion debe obtener la clave de descifrado desde el servidor de licencias.
Como extension de la parte anterior:
- Cuando el contenido sea una imagen, el servidor de contenidos incluye una marca de agua visible asociada al usuario receptor.
- El mensaje de solicitud de la clave de cifrado debe ir firmado digitalmente por la aplicacion.
Flujo completo con UA, CDM y servidor de licencias:
- Igual que en Parte 1 para consulta y descarga de contenidos.
- Si la UA detecta contenido cifrado, pide al CDM un mensaje de solicitud de licencia.
- El CDM prepara y firma digitalmente ese mensaje, y lo devuelve a la UA.
- La UA reenvia la solicitud al servidor de licencias y recibe la respuesta.
- La respuesta de licencia viaja de vuelta al CDM a traves de la UA.
- El CDM interpreta la respuesta, obtiene clave/IV y descifra el contenido.
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.
Comandos de consola en ServerLicencias.py:
encrypt <archivo_limpio> <archivo_sucio>decrypt <archivo_sucio> <archivo_limpio>log <mensaje>exit
- El sistema de licencias usa
licencias.txtcomo fuente activa (descifrada mediante clave fija enfunciones.py). - El proyecto incluye
licencias.jsoncomo referencia, pero la carga operativa se hace desdelicencias.txt. - La marca de agua se aplica a imagenes en el servidor de contenidos para trazabilidad por cliente.
- 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.