Metodología
Desarrollo del algoritmo
Para el desarrollo del algoritmo de S-AES se usó el lenguaje de programación python y algunas librerías extra. Puede encontrar el código fuente del proyecto y probarlo en este enlace de github.
Toda la lógica para la construcción de cada uno de los métodos y la integración de estos se basan en las referencias dispuestas.
El código proporciona los métodos para encriptar y desencriptar texto, además ofrece una interfaz de consola para la ejecución del mismo.
Implementación del algoritmo
Para implementar el algoritmo puede ejecutar directamente el proyecto por su interfaz de consola:

También puede utilizarlo como librería y ejecutar directamente los métodos para encriptar y desencriptar:

Se sugiere revisar el paquete de s_aes/test ya que ahí se muestra el correcto consumo de los métodos.
Generación de ataques
Para la generación de ataque también exsiten los métodos y la opción desde la interfaz de consola.
En este caso se trabaja desde un jupyter-notebook para la generación de ataque por fuerza bruta.
Pasos
- Se parte del hecho que hemos capturado un texto cifrado y el objetivo será encontrar la clave para descifrar el texto.
- Para ello se usarán multiples claves, la cuales surgen de permutar los caracteres imprimibles de ascii en pares de a 2 valores.
- Cada llave generará un resultado de desencripción diferente para el mismo texto.
-
A partir de esto se emplearán diferenetes métodos de analisis para limpiar los resultados y llegar así a encontrar la llave.
- Métodos de coincidencia y análisis de caracteres: se genera una lista de valores descifrados que contengan solo caracteres imprimibles de ascii, ya que no se espera que el texto inicial hubiera contenido estos valores.
- Filtros mediante regex: Cada texto descifrado del paso anterior es pasado por expresiones regulares con el fin de filtrar solo los textos que contengan valores numericos o letras del alfabeto, ya que son estos datos los que generalmente se cifran.
- Análisis manual: se analiza manualmente cada resultado del paso anterior observando si el texto descifrado representa algo significativo y si se podría afirmar que se encontró la clave