Este repositorio contiene una aplicación sencilla en Python para cifrar y descifrar mensajes de texto usando el algoritmo Kyber (estandarizado como ML-KEM).
El enfoque está diseñado para un trabajo universitario de 4º de Ingeniería Informática: solución limpia, profesional y sin complejidad innecesaria.
- Implementar un flujo funcional de cifrado/descifrado basado en Kyber.
- Mantener una arquitectura clara y fácil de revisar por el profesorado.
- Incluir documentación académica y estructura lista para GitHub.
- Python 3.11+
- pqcrypto (implementación de algoritmos post-cuánticos, incluyendo ML-KEM)
- Tkinter (incluido en Python estándar, para interfaz opcional)
project-name/
│
├── src/
│ ├── main.py
│ ├── crypto/
│ │ ├── kyber_service.py
│ │ └── __init__.py
│ ├── ui/
│ │ ├── app.py
│ │ └── __init__.py
│ └── __init__.py
│
├── docs/
│ └── technical_explanation.md
│
├── examples/
│ └── example_usage.txt
│
├── README.md
├── LICENSE
├── requirements.txt
├── .gitignore
└── run.py
-
Clonar el repositorio:
git clone <URL_DEL_REPOSITORIO> cd project-name
-
Crear y activar entorno virtual (recomendado):
python -m venv .venv source .venv/bin/activate # En Windows: .venv\\Scripts\\activate
-
Instalar dependencias:
pip install -r requirements.txt
python run.pypython run.py --uiLa interfaz contiene únicamente:
- Área de entrada.
- Botón Cifrar.
- Botón Descifrar.
- Área de salida.
Ver archivo: examples/example_usage.txt.
Flujo básico:
- Ejecutar
python run.py. - Elegir opción de cifrado.
- Copiar el paquete cifrado en Base64.
- Elegir opción de descifrado y pegar el paquete.
- Verificar recuperación del texto original.
Kyber (ML-KEM) es un mecanismo de encapsulación de claves, no un cifrador directo de texto.
Por ello, la solución usa un esquema híbrido simplificado:
- Se encapsula un secreto compartido con ML-KEM.
- Se deriva un flujo pseudoaleatorio mediante SHA-256.
- Se cifra el mensaje aplicando XOR con ese flujo.
- Para descifrar, se regenera el mismo flujo y se aplica XOR inverso.
Este planteamiento es adecuado para fines didácticos y para demostrar integración de Kyber de forma simple.
- Es una implementación académica y simplificada, no un producto listo para producción.
- Se utiliza XOR con flujo derivado para mantener el código minimalista; en sistemas reales se recomienda un esquema autenticado consolidado.
- La clave pública/privada se genera al iniciar la aplicación y no se persiste.
- El cifrado/descifrado está orientado a texto UTF-8 y pruebas locales.
- La disponibilidad de
pqcryptopuede variar según sistema operativo, arquitectura o versión de Python.
- Persistencia segura de pares de claves.
- Inclusión de pruebas automatizadas (
pytest). - Uso de un esquema de cifrado autenticado más robusto en la capa simétrica.
- Intercambio de claves entre dos usuarios/procesos diferenciados.
Trabajo académico de ejemplo para Ingeniería Informática (4º curso).
Este proyecto se distribuye bajo MIT License. Consulta el archivo LICENSE.