Análisis probabilístico en criptoanalisís clásico
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.

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
Commentblogs:









