Como comentamos en el artículo anterior, en este artículo vamos a ver como aplicar un programa de fuerza bruta para tratar de adivinar la contraseña cifrada con Caesar.
Vamos a intentar descifrar la contraseña RxJcn66025pJq6JPÑPÑghÑ por fuerza bruta con python, para ello primero vamos a explicar en que consisten los Ataques de fuerza bruta para romper contraseñas.
Ataques de fuerza fruta
Los ataques de fuerza bruta consisten en intentar adivinar un password cifrado mediante un proceso en bucle donde vamos generando todos los posibles passwords. Si recordamos en el anterior artículo dijimos que la llave era importante para saber cuantas posiciones había que desplazar nuestros caracteres para encontrar su correspondiente carácter que usaremos para cifrarlo, pues en el ataque de fuerza bruta para este cifrado lo que vamos a hacer es generar todos los passwords posibles pasando por todas las longitudes de llaves posibles.
Veamos un código simple que dado un mensaje cifrado y una serie de símbolos, nos va a generar todas las combinaciones posibles de cifrado, pasando por todas las longitudes de clave.
mensaje="RxJcn66025pJq6JPÑPÑghÑ"
SIMBOLOS='ABCDEFGHIJKLMÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyz1234567890 !?.'
for llave in range(len(SIMBOLOS)):
traducion=''
for simbolo in mensaje:
if simbolo in SIMBOLOS:
simboloindex=SIMBOLOS.find(simbolo)
indextranslado=simboloindex-llave
if indextranslado < 0:
indextranslado=indextranslado+len(SIMBOLOS)
#print(indextranslado)
traducion=traducion + SIMBOLOS[indextranslado]
else:
traducion=traducion+ simbolo
print('clave #%s: %s' % (llave,traducion))
La salida del programa nos devolverá lo siguiente:
clave #0: RxJcn66025pJq6JPÑPÑghÑÑ
clave #1: QwIbm55914oIp5IOMOMfgMÑ
clave #2: PvHal448z3ñHo4HÑLÑLefLÑ
clave #3: OuGZk337y2nGñ3GMKMKdeKÑ
clave #4: ÑtFYj226x1mFn2FLJLJcdJÑ
clave #5: MsEXi115wzlEm1EKIKIbcIÑ
clave #6: LrDWhzz4vykDlzDJHJHabHÑ
clave #7: KqCVgyy3uxjCkyCIGIGZaGÑ
clave #8: JpBUfxx2twiBjxBHFHFYZFÑ
clave #9: IoATeww1svhAiwAGEGEXYEÑ
clave #10: Hñ.Sdvvzrug.hv.FDFDWXDÑ
clave #11: Gn?Rcuuyqtf?gu?ECECVWCÑ
clave #12: Fm!Qbttxpse!ft!DBDBUVBÑ
clave #13: El Password es CACATUAÑ
clave #14: Dk0OZrrvñqc0dr0B.B.ST.Ñ
clave #15: Cj9ÑYqqunpb9cq9A?A?RS?Ñ
clave #16: Bi8MXpptmoa8bp8.!.!QR!Ñ
clave #17: Ah7LWooslñZ7ao7? ? PQ Ñ
clave #18: .g6KVññrknY6Zñ6!0!0OP0Ñ
clave #19: ?f5JUnnqjmX5Yn5 9 9ÑO9Ñ
clave #20: !e4ITmmpilW4Xm40808MÑ8Ñ
Si nos fijamos en la clave #13 obtendremos nuestro password ;)
¿Cómo funciona el proceso?
En el artículo anterior vimos que la clave 13 que elegimos era el número de posiciones que debíamos mover los caracteres de nuestra contraseña para cifrarla, en el ejemplo de este artículo, puesto que no conocemos la longitud de la clave, lo que vamos a hacer es ir pasando por todas las claves posibles empezando por 0.
Si nos fijamos en la clave 1 QwIbm55914oIp5IOMOMfgMÑ
nos daremos cuenta de que esta clave la hemos obtenido moviendo una posición cada carácter de la clave inicial 0, por eso la letra R corresponde a la letra Q en la clave 1, P en la clave 2 y así sucesivamente para todos los caracteres en todas las claves.
Lo que nuestro programa ha realizado es simplemente los cálculos del cifrado de caracteres en cada posición de la clave hasta que ha construido un texto legible en español «El Password es CACATUA
»
Como podemos verlos cifrados por desplazamiento como Caesar,ROT13 no tienen ningún sentido y son totalmente inseguros, en el siguiente artículo daremos una nueva vuelta a los cifrados con los «cifrados de transposición».
Happy Cracking