Caracteristicas y Especificaciones
Desarrollé un script en Python que automatiza el criptoanálisis del cifrado por transposición de columnas, implementando un ataque de fuerza bruta por permutaciones que recupera el mensaje original utilizando únicamente una palabra probable del texto.
El desafío
El cifrado por transposición reordena los caracteres de un mensaje según una clave numérica, haciendo el texto ilegible para quien desconoce el orden. Mi objetivo fue construir una herramienta versátil que no solo cifre y descifre, sino que sea capaz de romper el cifrado sin conocer la clave, recorriendo todas las combinaciones posibles hasta dar con la correcta.
La solución: 4 modos de uso
El script ofrece una experiencia completa, tanto por terminal (modo CLI) como con un menú interactivo:
- Cifrado: Convierte texto plano en mensaje cifrado usando una clave numérica (índices en base 0, por ejemplo:
2 0 1). - Descifrado con clave: Reconstruye el mensaje original cuando la clave es conocida.
- Ataque por palabra probable: Cuando la clave se desconoce, pero se intuye una palabra del mensaje original (ej:
HOLA,SECRETO). El script prueba todas las permutaciones de la longitud de clave indicada y filtra aquellas que contienen esa palabra. - Fuerza bruta total: Cuando ni siquiera se conoce la longitud de la clave. El script itera sobre longitudes de 2 hasta un máximo definido (por defecto 8), probando sistemáticamente hasta encontrar la solución.
Complejidad técnica: El número de intentos crece factorialmente (
N!). Por eso, el script limita la longitud de clave a 8 por defecto, donde8! = 40.320intentos, garantizando un rendimiento óptimo.
Arquitectura modular
El código está estructurado siguiendo buenas prácticas de desarrollo, con una clara separación de responsabilidades que lo hace mantenible y adaptable a otros cifrados clásicos:
main.py: Punto de entrada que gestiona la interfaz CLI y el menú interactivo.decodification.py: Orquesta la lógica central (cifrar, descifrar y ataque).myarrays.py: Maneja las operaciones de bajo nivel con matrices (construcción, lectura por filas y columnas).arraypermutation.py: Genera todas las permutaciones de índices utilizandoitertools.permutations.inputdata.py: Valida y parsea los argumentos de línea de comandos, asegurando combinaciones correctas (ej:--encryptrequiere--plaintexty--key).
Tecnologías y técnicas aplicadas
- Python 3.10+ (únicamente librería estándar, sin dependencias externas).
- Algoritmo de fuerza bruta personalizado: Implementado desde cero con permutaciones.
- Ataque de texto claro conocido (Known-Plaintext Attack): Filtrado por coincidencia de palabra clave.
- Doble interfaz: Modo interactivo para aprendizaje y modo CLI para automatización en CTFs.
- Programación defensiva: Validación rigurosa de argumentos y manejo de errores.
- Suite de tests unitarios:
test_transposition.pygarantiza el correcto funcionamiento de cada módulo.
¿Por qué importa?
Este proyecto refleja mi interés en combinar conocimientos profundos de programación con principios fundamentales de ciberseguridad ofensiva. Comprender cómo se vulneran los algoritmos criptográficos clásicos es la base para entender las debilidades de los sistemas modernos.
Para conocer mas:
¿Interesado en la implementación? Explora el código fuente y la documentación detallada del proyecto en mi repositorio de GitHub.
Ver codigo del proyecto