Obtención de múltiples coincidencias de teclas en pares de texto simple / texto cifrado en doble DES

1

Estoy tratando de implementar un ataque Meet-in-the-Middle y solo para probarlo, he hecho algunos códigos de valores, que son simplemente este bloque de código simple:

byte[] key1 = new byte[] { 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
byte[] key2 = new byte[] { 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

string p1 = "Hello Dear World";
string p2 = "Hello Evil World";

//SimpleDES is just a C# implementation of DES that I've wrapped in its own class
SimpleDES des1 = new SimpleDES(key1);
SimpleDES des2 = new SimpleDES(key2);

byte[] toEncrypt1 = Encoding.ASCII.GetBytes(p1);           
c1 = Convert.ToBase64String(des2.Encrypt(des1.Encrypt(toEncrypt1)));

byte[] toEncrypt2 = Encoding.ASCII.GetBytes(p2);
c2 = Convert.ToBase64String(des2.Encrypt(des1.Encrypt(toEncrypt2)));

Dejaré de lado cualquier otro código, a menos que lo solicite alguno de ustedes.

El problema es que, dadas las sencillas claves de prueba y los textos de prueba anteriores, obtengo varios pares de claves diferentes que, cuando se cifran con clave1 y luego clave2, producen el mismo texto cifrado.

Hay algo obvio, por lo que he dicho hasta ahora, lo cual lo explica, o necesito mirar más de cerca mi código de fuerza bruta.

¿Se debe a la tecla corta que estoy usando?

    
pregunta DSF 23.06.2015 - 22:23
fuente

1 respuesta

2

Para un cifrado, cada clave define una permutación diferente, pero eso no significa que no pueda haber relaciones 1: 1 idénticas. Tome AES-256, que asigna valores de 2 ^ 128 a otros valores de 2 ^ 128 utilizando una clave de 256 bits y usted cifra un texto plano de 16 bytes, digamos todos los cero. La salida también tendrá 2 ^ 128 valores. Por lo tanto, debe haber claves que asignen el mismo texto simple al mismo texto cifrado.

Eso probablemente no es lo que te está mordiendo. Las claves DES tienen bits de paridad, que es el bit inferior en cada byte. Este bit garantiza que el número de bits en el byte siempre sea impar. Una implementación puede optar por ignorar el bit de paridad. Si tiene una clave que solo difiere con respecto a la paridad, entonces el valor de clave utilizado para derivar las subclaves es idéntico. Por lo tanto, solo importan los 7 bits más altos de cada byte, lo que otorga a DES un tamaño de bit efectivo de 64 - 8 = 56 bits.

    
respondido por el Maarten Bodewes 23.06.2015 - 23:53
fuente

Lea otras preguntas en las etiquetas