"Mi estilo es el arte de luchar, sin luchar"
"Un caballero se avergüenza de que sus palabras sean mejores que sus hechos." Miguel de Cervantes Saavedra

Análisis probabilístico en criptoanalisís clásico

2010-07-09 20:05:10-05                  Esta entrada ha sido vista 298 veces.

Criptografia

El campo del criptoanalisís, dentro de la criptología tiene que ver con romper mensajes cifrados, es decir obtener de manera total o parcial el contenido de un mensaje sin el consentimiento de las partes que lo transmiten. 

Se puede decir que los algoritmos de cifrado clasicos (desde el principio de los tiempos hasta poco despues de la segunda guerra mundial) se pueden identificar por realizarse con dos técnicas o una combinación de ellas:

Transposición: Básicamente se revuelven los elementos del texto original, de tal manera que no puedan entenderse, pero que si puedan ser reordenados usando el método adecuado.

Ejemplos de cifrado por el método de transposición son: la transposición por columnas, Scytala, doble transposición, etc.

Substitución: Se substituyen las partes del mensaje (tokens o bits) por otros.

Ejemplos de cifrado por substitución son: Cesar, Affine, Vigènere, Nomenclador, etc.

Estos son principios todavía usados en los modernos cifrados por bloques y proveen una cantidad enorme de material para mostrar los procedimientos clásicos de análisis estadístico sobre cifrados de distintos tipos. Desde los tiempos en que el hombre envío los primeros mensajes cifrados, otros hombres trataron de descifrarlos, rápidamente los métodos de los bandos tendieron a la matemática, que es justamente la tendencia moderna en este campo. Las primeras aproximaciones al problema de reconstituir un mensaje en texto claro a partir de su contraparte cifrada vienen del amplio conocimiento del subconjunto particular del lenguaje en que fue escrito, por ejemplo el clásico análisis de frecuencias de cada letra del alfabeto, dupla o tercia. Es importante notar que no todos los símbolos presentes en la sintaxis de cada idioma eran usados durante el cifrado, por ejemplo y aunque parezca extraño, las maquinas Sigaba (EU) y Enigma (Alemania), usadas durante la segunda guerra mundial, no tenían teclas para los números arábigos.

La siguiente lista simple de las frecuencias de cada letra dentro del idioma ingles es el resultado del análisis de mas de 7834 textos distintos. Elegí la tabla del ingles para hacer un pequeño ejemplo mas adelante.

  • A(8.399%)    N(6.778%)
  • B(1.442%)   O (7.493%)
  • C(2.527%)   P (1.991%)
  • D(4.800%)   Q (0.077%)
  • E(12.15%)   R (6.063%)
  • F(2.132%)   S (6.319%)
  • G(2.323%)   T (8.999%)
  • H(6.025%)   U(2.783%)
  • I  (6.485%)   V (0.996%)
  • J(0.102%)    W(2.464%)
  • K(0.689%)    X (0.204%)
  • L(4.008%)    Y (2.157%)
  • M(2.566%)    Z(0.025%)

Estas frecuencias pueden considerarse una propiedad del idioma ingles y en teoría esta presente en todo texto escrito en dicho idioma.  Esta tabla de frecuencias puede ser usada directamente en cifrados de substitución simple o monoalfabetica como el cifrado cesar o camposanto que veremos mas adelante. Sin embargo, en cifrados polialfabeticos estas frecuencias son ocultadas por el algoritmo de cifrado y es necesario usar otros métodos que pueden o no incluir el uso de la lista anterior.

William F. Friedman (1891-1969) desarrollo la técnica llamada Indice de coincidencia, dado un texto cifrado C, el indice de coincidencia I es definido como la probabilidad de que dos letras seleccionadas de manera aleatoria en C representen la misma letra en el mensaje de texto claro M.

Tenemos n0, n1, n2, n3, ... , n25 es el conteo para cada letra (Frecuencia Absoluta) en el alfabeto A, B, C, D ...., Z. en C. 

ecuaciones

Disculpen en arreglo de ecuaciones para algo tan bobo, el código LaTeX lo pegue al final.  (La Mono no me dejo subir el archivo)

El indice de coincidencia es usado principalmente sobre textos cifrados con algoritmos que usan varios alfabetos. Las primeras ecuaciones son definiciones. la cuarta es resultado de aplicar la primera a la tercera, el resto es solo álgebra hasta llegar a la octava, que es la representación clásica del indice de coincidencia, es bueno saber de donde viene todo. 

Cifrado Camposanto

Este cifrado es monoalfabetico, se llama así por que se encontró en una tumba, se presume es un código Mason del siglo XVII, planeaba usar el cifrado cesar para hacer una pequeña demostración del uso del análisis de frecuencias, sin embargo, yo no conocia camposanto y ha sido divertido buscar la respuesta, el texto original es este: 

(Lo vi en este articulo de kriptopolis http://www.kriptopolis.org/criptografia-clasica-v , parte de una serie muy recomendable)

Se sabe que el texto esta en ingles y que el cifrado tiene una relación con el juego del gato (#), bastaría saber que es un texto en ingles, entrando en materia debemos suponer una de tres cosas:

  • Que cada símbolo representa una letra
  • Que cada símbolo representa una silaba
  • Que cada símbolo representa una palabra completa

Observando los símbolos notamos que las variaciones son pocas y carecen de la complejidad para representar palabras completas, excluir las silabas es mas difícil y es donde notamos que al menos 3 símbolos se repiten varias veces reduciendo las posibles palabras que repitan silabas con tanta frecuencia, si bien no podemos descartar la representación silábica podemos decir que es menos probable.

Ahora, ¿Como puede representar cada símbolo una de 26 letras?, un buen punto de inicio es formular una primera hipótesis sobre la identidad del símbolo que mas se repite (el cuadrado con el punto en medio), diremos que es la letra E. Esto no es tan arbitrario, pues según el análisis de frecuencias es la letra mas probable. Se podría especular sobre el valor de los siguientes símbolos frecuentes, pero esta vez es mejor teorizar sobre como se representan las letras bajo la hipótesis de el cuadrado con el punto en medio es la E.

Observemos que el símbolo de en medio pueden ser 1, 2 o 0 puntos y que las lineas pueden conformar un cuadrado o al menos un angulo (dos ángulos con un lado en común también es posible), sin embargo las lineas nunca aparecen solas, esta configuración en particular permite ordenar 27 símbolos que cumplen con las características mencionadas anteriormente (nueve combinaciones de lineas por tres de puntos). Sobre las lineas pueden apuntar usando las aristas o los espacios. El símbolo para la letra E me sugiere que funciona con los espacios. 

Ordenando las letras del alfabeto ingles dentro de una matriz de 3x3, De izquierda a derecha, arriba hacia abajo, los símbolos aun no adquieren sentido, sin embargo, se entienden palabras con un pequeño corrimiento de una posición en los símbolos con con dos puntos y ninguno. se concluye que una casilla representa al mismo tiempo dos letras y esta tiene que ser la ultima posición en la matriz señalada con un punto, se arregla agregando j e i para ese símbolo para quedar así (después de todo se parecen =)):

A *,K **,T _ B *,L **,U _ C *,M **,V _
D *,N **,W _ E *,O **,X _ F *,P **,Y _
G *,Q **,Z _ H *,R ** I-J *,S **

Notación: * representa un punto, ** dos puntos, _ vacio.

Usando esta matriz el mensaje se traduce como:

"REMEMBER DEATH"

Este quiza no sea el mejor ejemplo del uso de métodos estadísticos en el criptoanalisis, dado que el texto es muy pequeño y hay que tomar ciertas decisiones un poco arbitrarias en vez de usar resultados matemáticos, pero ha sido un muy divertido reto para su servidor, por cierto, dado que la muestra es pequeña, no es posible usar el indice de coincidencia (ademas solo suele usarce en cifrados polialfabeticos).  

LaTeX  ic.tex

 

\documentclass[12pt]{minimal}
\usepackage[spanish]{babel}
\date{}
\begin{document}
\begin{eqnarray}
{a \choose b} = \frac{a!}{b! (a - b)!}  \\
 n = n_0 + n_1 + n_2 + ... + n_{25} \\
 I = \frac {{n_0 \choose 2} + {n_1 \choose 2} + {n_2 \choose 2} +... + { n_{25} \choose 2}}{{n \choose 2}} \\ 
 I = \frac { {\frac {n_0!}{2!{(n_0 - 2)!}}} + {\frac {n_1!} {2! (n_1 - 2)!}} + ... + {\frac {n_{25}!}{2! (n_{25} - 2)! }}}{\frac {n!}{2! (n -2)!}} \\
 I = \frac {(\frac {1}{2!})( {\frac {n_0!}{{(n_0 - 2)!}}} + {\frac {n_1!} {(n_1 - 2)!}} + ... + {\frac {n_{25}!}{(n_{25} - 2)! }}) }{(\frac{1}{2!}) (\frac {n!}{(n -2)!})} \\
 I = \frac {{\frac {n_0!}{{(n_0 - 2)!}}} + {\frac {n_1!} {(n_1 - 2)!}} + ... + {\frac {n_{25}!}{(n_{25} - 2)! }}}{\frac {n!}{(n -2)!}} \\
 I = \frac { (n_0(n_0 - 1)) + (n_1(n_1 - 1)) + ... + (n_{25}(n_{25} - 1))}{n(n - 1)} \\
 I = (\frac {1}{n(n-1)}) \sum_{i=0}^{25} {n_i(n_i -1)} 
\end{eqnarray}
\end{document}
 

Permalink: http://www.mononeurona.org/entries/view/vendaval/2296


Comments Commentblogs:
New Commentblog
CAPTCHA Image




Join us!
Forgot your password?
This blog has been visited
31,125 times
vendaval
Alberto Rodriguez Sanchez Estudiante de Ingenieria en Computación en la UAM-A, programo en C, C++, C#, Python, Scheme, PHP,y Haskell. Uso Archlinux, Debian GNU/Linux, Mac OS X, OpenSolaris, NetBSD, FreeBSD, Plan9 y Win2. Pienso especializarme en computo científico y criptografía, que son mis grandes pasiones.

También pienso que la programación computacional es un Arte y que muchos programas son elegantes, muchos exquisitos, muchos son brillantes. Mi pensar es que se pueden escribir grandes programas, programas nobles y programas verdaderamente magníficos,por ello prefiero la Sintaxis Avanzada en los programas por que muestra un dominio del lenguaje y un buen grado de abstracción.

FreeBSD, C, Enlightenment y VI(M); son mis SO, Lenguaje de programación, manejador de ventanas y editor favoritos.

Practico Kali Filipino, Limalama y JKD (soy seguidor de la filosofía de Bruce Lee). Ademas soy el guardian la Sexta Casa del Zodiaco y también escribo con cierta regularidad en este blog.

"Se como el agua, piensa como el fuego"
Powered by
Despabilando la MonoNeurona.org
Livechat
<-Nombre

reiken wrote:
http://tinyurl.com/782vp5u
4 days, 3 hours ago

vendaval wrote:
Daniel Dahink wrote: Es poesía tu artículo de "Anatomía de un Hola Mundo" gracias por compartir, amigo
on 27/6/11

wrote:

on 26/6/11

wrote:
eres un PENDEJO
on 8/4/11

ethel wrote:
hola muchas garcías por toda la ayuda espero tengas un lindo fin
on 12/3/11

vendaval wrote:
sudo wireshark en la terminal
on 6/3/11

tony wrote:
una pregunta? despues de installar wireshark con con su -c"yum install wireshark" y k se complete la instalacion k ago para abrirl
on 5/3/11

vendaval wrote:
su -c "apt-get install amsn"
on 3/3/11

ethel wrote:
hola podrías decirme como instalar el amsn en debian ya lo intente y no lo logro de hecho ningún otro programa gracias
on 3/3/11

ethel wrote:
hola esta padre tu blog, me gusta mucho tu forma de explicar y lomas agradable es que seas pasiente, sigue asi :)
on 3/3/11


Llevo todo el día nostálgico, sera que el cielo gris me pone el corazón sentimental.
6 days, 4 hours ago
Haciendo imágenes .eps para un "paper"
1 week, 6 days ago
chingon, pero ya duermete aarkerio, todo lo andas testeando.
on 20/12/11
tengo que volver a arreglar mi i3.conf es lo malo de estar al día con las actualizaciones, dios nos libre de que sea administrador
on 16/12/11
que hacen los mononeurones tan tarde por aca???
on 30/11/11
Recupérate pronto @aarkerio
on 23/11/11
@chilicuil: thx.
on 3/11/11
Tristeando y sin sueño
on 2/11/11
@rnstux: muchos estamos así, pero date tiempo.
on 25/10/11
o de beber
on 17/10/11
Mis Albums
FirefoxjEdit.orgGimpOpenOffice.orgHacker
Top
Colectivo MonoNeurona.org © 2002-2011.