Cifrado de Gronsfeld

Cifrado de Gronsfeld

El cifrado de Gronsfeld surgió como una mejora al cifrado Vigenère, ya que era susceptible a un análisis críptico con ciertas condiciones previstas. Al evaluar algunas características, era posible definir la longitud de la clave, y luego, al analizar las filas de letras, cifradas por la misma fila de la tabla, uno podía emplear un método estándar basado en la frecuencia de ciertas letras del lenguaje

El primero en efectuar un ataque exitoso en la modificación del cifrado Vigenère en 1854, fue Charles Babbage, un pionero de la informática, pero el análisis fue publicado nueve meses después por otro investigador, Friedrich Kasiski

Por más extraño que parezca, esto ayudó a fortalecerlo, dando lugar al cifrado de Gronsfeld. Una de las mejoras fue el uso de la palabra clave, el cual es igual a la longitud del propio mensaje, eliminando de este modo, la posibilidad de un análisis de frecuencia

Sin embargo, esta actualización trajo otra vulnerabilidad: el uso de texto sensible como frase clave, aportaba al criptoanalista información estadística sobre la clave, sirviendo como una pista al momento de querer descifrar el texto

Como está basado en el cifrado Vigenère, es también un cifrado de sustitución simple polialfabético. Esto significa que se usa más de un alfabeto cifrado para poner en clave el mensaje y que se cambia de uno a otro según se pasa de una letra del texto en claro a otra. Es decir que deben tenerse un conjunto de alfabetos cifrados y una forma de hacer corresponder cada letra del texto original con uno de ellos

El número de alfabetos cifrado está limitado a 10, codificados del 0 al 9 y la clave se genera con una combinación de esos dígitos, sin repeticiones. Altera la frecuencia de las letras del texto, pues por ejemplo la letra más corriente en castellano, la E, se cifra de forma diferente según su posición en el texto original

A lo largo de este articulo usaré por simplicidad el alfabeto inglés estándar de 26 letras:

\tiny\begin{pmatrix} 0& 1& 2& 3& 4& 5& 6& 7& 8& 9& 10& 11& 12& 13& 14& 15& 16& 17& 18& 19& 20& 21& 22& 23& 24& 25 \\ A& B& C& D& E& F& G& H& I& J& K& L& M& N& O& P& Q& R& S& T& U& V& W& X& Y& Z \\ \end{pmatrix}

Y el siguiente cuadro correspondiente al cifrado de Gronsfeld

\tiny\begin{pmatrix}&A&B&C&D&E&F&G&H&I&J&K&L&M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z\\0&C&D&E&F&G&H&I&J&K&L&M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&A&B\\1&D&E&F&G&H&I&J&K&L&M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&A&B&C\\2&F&G&H&I&J&K&L&M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&A&B&C&D&E\\3&H&I&J&K&L&M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&A&B&C&D&E&F&G\\4&L&M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&A&B&C&D&E&F&G&H&I&J&K\\5&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&A&B&C&D&E&F&G&H&I&J&K&L&M\\6&R&S&T&U&V&W&X&Y&Z&A&B&C&D&E&F&G&H&I&J&K&L&M&N&O&P&Q\\7&T&U&V&W&X&Y&Z&A&B&C&D&E&F&G&H&I&J&K&L&M&N&O&P&Q&R&S\\8&X&Y&Z&A&B&C&D&E&F&G&H&I&J&K&L&M&N&O&P&Q&R&S&T&U&V&W\\9&C&D&E&F&G&H&I&J&K&L&M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&A&B\end{pmatrix}

este cuadro no es el único posible, se ha usado como desplazamiento los 9 primeros números primos, pudiendo usar otro método para crear los 10 alfabetos

Ejemplo de cifrado de Gronsfeld

Tenemos el siguiente mensaje que queremos cifrar:

C=MENSAJE ENVIADO AYER

Tomamos como clave:

K = 1203456987

Es aconsejable que la clave sea de tamaño inferior al mensaje. Juntamos mensaje y clave, repitiendo tantas veces como sea necesaria la clave

\tiny\begin{pmatrix} M& E& N& S& A& J& E& E& N& V& I& A& D& O& A& Y& E& R \\ 1& 2& 0& 3& 4& 5& 6& 9& 8& 7& 1& 2& 0& 3& 4& 5& 6& 9 \\ \end{pmatrix}

Vamos a la tabla de cifrado y tomamos la fila del primer número de la clave en la tabla de Gronsfeld y la columna de la primera letra del mensaje. La intersección de ambas será la letra que se usará para cifrado. Repetiremos el proceso hasta obtener el mensaje cifrado

Así nos queda que el mensaje cifrado es:

M=PJPZLWVGKOLFFVLLVT

Desciframos el M anterior

Vamos a la tabla de cifrado y tomamos la fila del primer número de la clave en la tabla de Gronsfeld y buscamos la primera letra del mensaje. La fila de la intersección de ambas será la letra que se usará en el mensaje descifrado. Repetiremos el proceso hasta obtener el mensaje en claro

\tiny\begin{pmatrix} 1& 2& 0& 3& 4& 5& 6& 9& 8& 7& 1& 2& 0& 3& 4& 5& 6& 9 \\ P& J& P& Z& L& W& V& G& K& O& L& F& F& V& L& L& V& T \end{pmatrix}

Obteniendo el C original:

C=MENSAJEENVIADOAYER