miércoles, 29 de junio de 2011

Parte 2 (descifrado de Hill) completada

La parte 2 (descifrado de texto cifrado usando el criptosistema de Hill) ya está completada.

Captura de pantalla: Descifrado de hill

En esta imagen podemos ver como el programa ha descifrado el texto cifrado "FVVHZQMCAJPGZVMPDUGXGNMUSVVKMYJOSSVG". El texto claro que se ha obtenido es "ATACAREMOSALASVEINTETREINTAYOCHOUTCX", que claramente se interpreta como "Atacaremos a las 20:38 (hora UTC) X". El receptor recibió y descifró el texto cifrado que el emisor le envió para hacerle saber la hora en la que piensa atacar.

Analizando la imagen podemos observar una particularidad del descifrado: El último carácter del texto claro es una "X". ¿De dónde salió esa "X"? No se trata de un error, ya que previamente está calculado que ocurra lo que ha ocurrido. Para explicarlo tendremos que volver a la etapa de cifrado explicada en la entrada anterior (¿Recuerdan cuando en la entrada anterior avisé de la incongruencia de que el tamaño del texto claro y el del texto cifrado fueran distintos? Pues bien, tiene mucho que ver con esa extraña "X" que apareció al final del texto claro descifrado como seguidamente veremos).

Supongamos que vamos a cifrar un texto que contiene m caracteres. Para ello usaremos una matriz clave privada con una dimensión n (tamaño del bloque a cifrar). Si m no es divisible por n, en el último paso del cifrado quedarán menos de n caracteres por computar. ¿Qué hacemos? Fácil. Agregamos tantos caracteres como sean necesarios hasta que m sea divisible por n. ¿Qué carácter agregamos? Cualquiera. Nosotros hemos convenido que agregaremos el carácter "X", ya que es un carácter poco usual en lengua española.

Por ejemplo, el texto claro "ATACAREMOSALASVEINTETREINTAYOCHOUTC" tiene 35 caracteres. Como estamos usando una matriz clave privada de dimensión 3 (véase la imagen) tenemos que 35 no es divisible entre 3, ya que obtenemos un resto 2. Para que sea divisible basta con que agreguemos al texto claro un carácter "X". De esta forma tendremos 36 caracteres y 36 sí es divisible por 3. Tras cifrar obtendremos el texto cifrado "FVVHZQMCAJPGZVMPDUGXGNMUSVVKMYJOSSVG", el cual tiene 36 caracteres. Una vez que descifremos el texto cifrado obtendremos el texto claro esperado más el carácter "X" que fue agregado al texto claro antes de cifrar por convenio. Basta con eliminar los últimos caracteres "X" que aparecen en nuestro texto claro recién descifrado (en el caso de que dichos caracteres "X" estén fuera del contexto de la frase) para conseguir el auténtico texto claro inicial y esperado.

¿Qué procedimiento se sigue para descifrar en el criptosistema de Hill? Veámoslo paso a paso:
  1. Primero calculamos la matriz inversa Kinversa de la matriz clave privada K.
  2. A continuación traducimos el texto cifrado en su equivalente numérico teniendo en cuenta que el carácter A corresponde al número 0, el B al 1, el C al 2, etc.
  3. Una vez obtenido el texto cifrado numérico tomamos sus primeros n números, donde n es la dimensión de la matriz clave privada K (número de filas o columnas de la matriz), es decir, el tamaño del bloque a cifrar. 
  4. Los n números obtenidos del paso anterior conforman los elementos de una matriz C de una única columna y n filas. Los elementos se colocan de forma ordenada en la matriz C.
  5. Se realiza el producto de la matriz Kinversa por la matriz C, obteniéndose una nueva matriz P de una única columna y n filas.
  6. Se traduce cada elemento numérico de la matriz P en su carácter equivalente teniendo en cuenta que el número 0 corresponde al carácter A, el 1 al B, el 2 al C, etc.
  7. Los caracteres obtenidos en el paso anterior corresponden al texto claro. Si queda texto cifrado por descifrar volvemos al paso 3 para volver a iterar con los siguientes n números del texto cifrado.
Lo veremos más claro con un simple ejemplo. Descifraremos el texto "YFSN" con una matriz clave privada formada por los elementos 4, 9, 13 y 18. NOTA: Recuérdese que estamos trabajando con aritmética modular 26.
    Matriz K
  1. Calculamos la matriz inversa de K, obteniéndose la siguiente matriz Kinversa:
    Matriz inversa de K
  2. El equivalente numérico del texto claro "YFSN" es 24, 5, 18 y 13. 
  3. ITERACIÓN 1. La dimensión de la matriz clave privada es 2, por tanto n = 2 en este ejemplo. Tomamos los 2 primeros números del texto claro numérico. Estos 2 números son 24 y 5.
  4. La matriz C que se obtiene del paso anterior está formada por los elementos 24 y 5. Estos elementos se colocan formando una única columna y 2 filas.
  5. Realizamos el producto Kinversa por C, obteniéndose P.
  6. Iteración 1
  7. Los elementos 7 y 14 que conforman la matriz P corresponden a los caracteres "H" y "O".
  8. Por tanto se ha obtenido el texto claro "HO". Como queda texto cifrado por descifrar (18 y 13) volvemos al paso 3.
  1. ITERACIÓN 2. Tomamos los 2 siguientes números del texto claro numérico. Estos 2 números son 18 y 13.
  2. La matriz C que se obtiene del paso anterior está formada por los elementos 18 y 13. Estos elementos se colocan formando una única columna y 2 filas.
  3. Realizamos el producto Kinversa por C, obteniéndose P.
  4. Iteración 2
  5. Los elementos 11 y 0 que conforman la matriz P corresponden a los caracteres "L" y "A".
  6. Por tanto se ha obtenido el texto claro "LA". Como no queda texto cifrado por descifrar terminamos.
Al descifrar el texto cifrado "YFSN" con la matriz clave privada K se ha obtenido el texto claro "HOLA" (que era lo esperado, ya que en la entrada anterior realizamos el cifrado de "HOLA" y obtuvimos "YFSN" con la misma matriz clave privada K).
    Como vimos en la entrada anterior, la matriz clave privada usada en el ejemplo cumple la restricción de tener obligatoriamente matriz inversa (su determinante es 7, con lo cual es distinto de cero; y además mcd(7,26) = 1).

    No hay comentarios: