Si está enviando un mensaje de un solo bloque con un solo cifrado, existe una posibilidad distinta de cero de que varias claves distintas asignen un texto sin formato específico a un texto cifrado específico o que no haya claves que funcionen.
Un cifrado de bloque es simplemente una permutación pseudoaleatoria. Idealmente, la tecla simplemente selecciona una permutación aleatoria del espacio de entrada a un espacio de salida, y es necesariamente una permutación para que la función de descifrado pueda revertirla.
Como ejemplo de juguete de una permutación pseudoaleatoria con un espacio de clave muy pequeño y un espacio de entrada / salida muy pequeño, imagine la siguiente función de cifrado que tiene una clave de 2 bits (0,1,2 o 3) que permite un mensaje de entrada de 2 bits en un mensaje de salida de 2 bits. Específicamente:
- con clave 0: las entradas {0,1,2,3} respectivamente se cifran en los textos cifrados {2,0,3,1}
- con la clave 1: {0,1,2,3} respectivamente cifradas a {1,0,3,2}
- con la clave 2: {0,1,2,3} respectivamente cifradas a {3,1,2,0}
- con la clave 3: {0,1,2,3} respectivamente cifradas a {3,1,0,2}
(Estas permutaciones se generaron aleatoriamente en python con scipy.random.permutation(range(4))
).
Note en este ejemplo de juguete, que para algunos pares como (m = 1, c = 2) y (m = 0, c = 0) donde no hay teclas que funcionen. Mientras tanto, para otros pares como (m = 0, c = 3) y (m = 1, c = 1) hay varias teclas (en ambos casos k = 2 o k = 3) que funcionarían.
Por lo tanto, como caso más desfavorable para esta función de encriptación de juguete, necesitarías 3 bloques para identificarte de manera única. (Por ejemplo, si sus dos primeros mensajes fueran 0 y 1, no podría distinguir entre las teclas 2 y 3 hasta que obtuviera una tercera entrada).
Sin embargo, con bloques grandes que tengan múltiples colisiones entre las mismas dos claves será muy poco probable. Por lo tanto, en la práctica, si fuerza dos pares de mensajes cifrados de un solo bloque / texto cifrado con una probabilidad abrumadora, solo habrá una clave que funcione para ambos.
Tenga en cuenta que hacer doble cifrado (con dos claves independientes K1, K2) funciona exactamente igual que el análisis de un solo cifrado de una clave que es la concatenación de K1 y K2.