martes, 29 de noviembre de 2011

Introducción a la criptografía moderna (Anexo): Parte 1, atacando ARC4

Esta vez no toca ver como cifrar con otro algoritmo, que tal si hacemos una pausa para cambiar de aires y cambiamos de bando?, intentemos  atacar los cifrados que hemos visto... empezando por ARC4, con un ataque común a los cifrados de flujo.

Duro con ellos :)


Ataque a los cifrados de flujo

Si recordais cuando vimos ARC4, dijimos que pertenecía a una familia de algoritmos de cifrado llamados cifrados de flujo:
Un cifrado de flujo se llama así por que genera un "flujo" de datos a partir de la contraseña, que se combina usando la operación XOR con el "flujo" de texto plano para generar un "flujo" texto cifrado.
A diferencia del cifrado en bloque, que solo se aplica a una cierta cantidad de información a la vez, este tipo de cifrados no tienen un límite de cantidad a cifrar.
El ataque tiene que ver con la propiedad de XOR que hace de esta familia un tipo de cifrado simétrico, y es que el XOR de 'algo' con 0 es 'algo', y 'loquesea' con 'loquesea' (si son iguales) da 0.

A que viene eso, pues si hacer XOR de algo consigo mismo da 0, y el XOR de algo con 0 no lo modifica y, ojo aquí: la operación XOR es conmutativa como la suma (quiere decir que no importa el orden de las operaciónes ), entonces si se cifraran dos texto con la misma clave...

(M1 XOR K) XOR (M2 XOR K)
(M1 XOR M2) XOR (K XOR K)
(M1 XOR M2) XOR 0
M1 XOR M2

Siendo:

M1: Mensaje 1
M2: Mensaje 2
K: Flujo de la clave.

O dicho de otra forma, si hacemos XOR del resultado de XOR de M1 y K con XOR de M2 y K, nos quedamos con M1 XOR M2.
 
Si conocieramos uno de los dos mensajes, podríamos obtener el flujo de cifrado haciendo XOR del mensaje original con el cifrado, pudiendo así descifrar directamente cualquier otro mensaje con la misma clave (ojo, así recuperaríamos el flujo producido, no la clave en si).


Veamos un ejemplo, sabemos han cifrado dos mensajes con la misma clave, de uno conocemos el original, del otro queremos recuperarlo (está en hexadecimal para facilitar la operación XOR):

Mensaje original conocido: 48 61 63 6B 78 43 72 61 63 6B
El mismo mensaje cifrado : 0A 1B 2C 3D 4E 5F 99 88 77 66

Mensaje objetivo cifrado : 16 1F 37 22 59 3C 88 86 66 79 61 65 6D 2D 2A 2B

Ojo, el mensaje conocido es menor que el cifrado, así que solo podremos descifrar la misma longitud que la del mensaje original.

Primero, recuperemos el flujo de cifrado:

Mensaje original conocido: 48 61 63 6B 78 43 72 61 63 6B
El mismo mensaje cifrado : 0A 1B 2C 3D 4E 5F 99 88 77 66
--------------------------------------------------------
Flujo de cifrado     XOR : 42 7A 4F 56 36 1C EB E9 14 0D


Del flujo de cifrado podemos recuperar el mensaje:

Flujo de cifrado      : 42 7A 4F 56 36 1C EB E9 14 0D
Mensaje obj. cifrado  : 16 1F 37 22 59 3C 88 86 66 79 61 65 6D 2D 2A 2B
------------------------------------------------------------------------
Mensaje original (XOR): 54 65 78 74 6F 20 63 6F 72 74
Mensaje original      :  T  e  x  t  o     c  o  r  t 
(aquí se corta por falta de datos :P)


Hasta la próxima :D

Otros posts de la serie:

No hay comentarios:

Publicar un comentario en la entrada