domingo, 10 de agosto de 2014

ROT13

ROT13 es un método de cifrado simple, en el que las letras de un mensaje son remplazadas por la letra que se encuentra trece posiciones después de la misma en el abecedario.

Ya que este método trabaja con el abecedario, para convertir una letra en su equivalente en ROT13 es necesario conocer su posición y sumar trece, así se encuentra la posición de la letra que se utilizará para encriptar la original. Así, la letra A (1) se convierte en N  (14), la letra B (2) se convierte en O (15), la letra M (13) se convierte en Z (26), etcétera.

El método se puede ver de dos maneras: si son las primeras trece letras, se suman sus posiciones, y si son las últimas trece, se restan. Pero también es posible auxiliarse del módulo, por ejemplo, la letra U está en la posición 21 del abecedario, su suma sería 34, que claramente no existe. Para "dar la vuelta" al abecedario es necesario conocer el residuo entre la suma y el número total de letras. Así pues, ya que 21 cabe una vez en 34, "sobra" 8, es decir, la letra cifrada sería H. De esa manera es posible realizar la operación de una manera práctica y directa. Dado a que estamos sumando la mitad del número de letras en el abecedario, eso quiere decir que se puede implementar una sóla función en ROT13 que trabaje para cifrar y decifrar el contenido de los mensajes.


Además de que es un método muy conocido, y por eso mismo poco fiable, existe una razón por la que es fácil romper la seguridad de un mensaje cifrado en ROT13, y es conocer la frecuencia en la que aparecen las letras del abecedario en el texto. Es decir, si sabemos que la letra E (5) aparece con más frecuencia en el idioma inglés, ¿no es fácil deducir que la letra R (18) se encontrará más veces en un texto cifrado con ROT13?

A pesar de que hay muchas fuentes que está de acuerdo en la distribución de las frecuencias de las letras del abecedario, decidí realizar un experimento con un texto de la Wikipedia para probar esta teoría. Los resultados se muestran a continuación.

Análisis de frecuencia

El programa anterior realiza un conteo de las letras del abecedario en Inglés -que previamente se define en una lista- que aparecen con mayor frecuencia en un texto. El texto se encuentra almacenado en un archivo de texto, al cual es accedido cuando el usuario manda el nombre del archivo como parámetro. Al final el programa guarda en otro archivo los resultados del análisis de frecuencia, en donde cada fila hace referencia a la letra y su correspondiente porcentaje de frecuencia.

El formato en el que se guarda la información no es simple casualidad, ya que si está almacenado de esta manera es más fácil realizar una gráfica de dicha información con el siguiente comando de Gnuplot.



En base a esta gráfica, las letras que más aparecen son la e, a, t, n y o. En cambio, las que menos aparecen son las q, j, x, z, v. Conociendo esa información, eso quiere decir que las letras r, n, g, l y b van a aparecer mucho más que las letras d, w, k, m y i en un texto cifrado con ROT13. El mismo programa fue utilizado en un texto distinto que fue cifrado en ROT13 para comprobar la hipótesis.


Más o menos se puede observar una semejanza, ¿verdad? Si se sospecha tan siquiera que una letra aparece con más frecuencia que otras, este ataque puede acabar rápido con un mensaje cifrado en ROT13.

Además de este pequeño análisis también implementé ROT13 con Python, pudiendo analizar cadenas pequeñas o inclusive textos enteros para luego cifrarlos.




1 comentario:

  1. Ahora que veo un poco más el código me doy cuenta que es necesario añadir una validación cuando abro los archivos :S

    ResponderEliminar