Autor Tema: Criptografía

0 Usuarios y 1 Visitante están viendo este tema.

01 Enero, 2007, 02:46 pm
Leído 8477 veces

KaStarKo

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 23
  • Karma: +0/-0
Hola, me gustaría hacer una sugerencia...

¿No sería apropiado crear una sección específica de criptografía en estos foros?

Hay que pensar que es una rama de las matemáticas aplicadas, y que involucra gran cantidad de ramas teóricas. Por otro lado, ha sido una de las actividades que más impulso le ha dado a la investigación matemática en los últimos tiempos.

Por cierto, aprovecho para proponer un reto criptoanalítico:

Todos debéis saber en qué consiste el cifrado de César. Si la clave es \( K \) i \( L \) es una letra del mensaje, \( L_c \) (letra del mensaje cifrado) será de la siguiente forma \( L_c=L+K \pmod {26} \) , donde 26 es el tamaño del alfabeto utilizado.

Este sistema se puede criptoanalizar de diversas (demasiadas) formas, por fuerza bruta (probando todas las posibles claves), por análisis estadísticos, etc...

Ahora supongamos que le hacemos una modificación al sistema. Tenemos un registro al que llamaremos \( R \), en un principio este registro es igual a la clave, \( R = K \). Para cifrar usamos \( R \) en vez de \( K \), i cada vez que ciframos una letra, le sumamos al registro la letra que hemos cifrado(sin cifrar), de la siguiente forma...
\( R_n=R_{n-1}+L_{n-1}(mod26) \) (tanto podría ser 26 como 256 u otra cosa, dependiendo de si cifráis letras, bytes, o cualquier otra cosa).

Ahora mi pregunta es ... ¿Cómo descubrirías la clave o el mensaje cifrado si se utiliza este sistema en el que la clave va variando en función del mensaje en claro? (suponiendo que tenéis una cantidad suficiente de texto cifrado para analizarlo)

Está claro que la fuerza bruta siempre es un recurso, y en este caso es factible, pues lo mas probable es que se use un alfabeto con un cardinal pequeño (aún usado miles de letras sería factible la fuerza bruta, pues para algo tenemos los ordenadores). Pero el problema viene cuando aplicamos esto al cifrado de Viegenere.

Aclaro que es el cifrado de Viegenere. El cifrado de Viegenere es un cifrado en el que la clave tiene longitud arbitraria, a cada carácter del texto plano se le aplica el cifrado de César con un carácter diferente de la clave, cuando se ha llegado al final de la clave, se vuelven a usar sus caracteres desde el principio. La seguridad del cifrado de Viegener consiste en el desconocimiento del tamaño de la clave, pues una vez conocida ya se pueden aplicar las técnicas de análisis de frecuencias (si tenemos un texto lo suficientemente largo). (Aunque se puede criptoanalizar el cifrado de Viegenere gracias al método de Kasiski)

El método de Kasiski consiste en encontrar grupos de letras repetidos, que creeremos son las mismas letras cifradas de igual forma (o no, pero es muy probable), entonces miramos la distancia que las separa, buscamos mas grupos, y miramos la distancia, encontramos el máximo común divisor, y esa, supuestamente será la longitud de la clave. Si vemos que no hay máximo común divisor puede que haya sido una coincidencia el hecho de encontrar grupos de letras repetidos, tendremos que prestar más atención.

Bueno... ¿se le podría aplicar algún método similar a Kasiski a "mi" cifrado? ¿el análisis de frecuencias se podría adaptar de alguna forma para utilizarlo de forma provechosa en el criptoanálisis?

Estoy seguro de que existen métodos, porque no lo he inventado yo y está claro que se rompen estos sistemas, pero no sé cómo, y me gustaría conseguirlo.

02 Enero, 2007, 11:14 am
Respuesta #1

KaStarKo

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 23
  • Karma: +0/-0
Bueno, ya veo que aquí la gente no es demasiado aficionada a la criptografia, ni que decir que tampoco a los problemas... pues sólo postean cuando tienen algun problema que necesitan saber resolver para afrontar un examen o la entrega de unos ejercicios.

Ahí va mi solucion:

Si recordáis, utilizo el cifrado de viegenere y a cada paso, a parte de sumar la clave, sumo también el registro que ideé para evitar los análisis de frecuencias. En cierto modo lo consigo, pero...

Si lo pensáis bien, podemos usar la estadística para suponer que el registro en el paso n del cifrado será algo así como:

\( R_n\approx{}\displaystyle\sum_{i=1}^{|A|}{a_i\cdot{}f_{a_i}\cdot{}n} \)

donde \( |A| \) es el cardinal del alfabeto utilizado, \( a_i \) es una letra situada en la posicion i del alfabeto, y \( f_{a_i} \) es la frecuencia de aparición de dicha letra. Si os fijáis, eso es sólo una aproximacion, pues el texto no tiene por que seguir las estadísticas exactas del lenguaje. El problema que le veo yo es el siguiente:

A medida que el texto crece, la formula \( \displaystyle\sum_{i=1}^{|A|}{a_i\cdot{}f_{a_i}} \) se parece más a \( R_n/n \) , pero normalmente con un pequeño margen de error... lo que no sé es si multiplicando por n podria acentuar tanto el error que no me serviria de nada esa aproximacion...


Si a alguien le interesa esto, que cree al respecto?

P.D. : esto también sería aplicable a la operación xor , sólo que en vez de multiplicar por \( n\cdot{}f_{a_i} \), se aplicaria la operacion \( n\cdot{}f_{a_i} \) veces, lo que es equivalente a decir que si \( n\cdot{}f_{a_i} \) es par no se hace nada(haciendo redondeo, claro), y si es impar, se aplica un solo xor.

03 Enero, 2007, 09:44 am
Respuesta #2

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 58,894
  • País: es
  • Karma: +0/-0
Hola

 La Criptografía, para bien o para mal, no es demasiado estudiada en una licenciatura de matemáticas. Cuando hice la carrera creo que ni aparecía como optativa. En fin, digo esto para justificar un poco que este tema se nos escape a muchos.

 En cualquier caso estuve echando un vistazo a lo que escribiste. No tengo claro al 100% como compaginas exactamente tu sistema de cifrado con el de Viegenere. Supon que tienes un clave de longitud 3, K1,K2,K3. Entonces para un mensaje L1,L2,L3,L4,L5,L6,L7,L8,L9... el cifrado sería:

L1+K1,L2+K2,L3+K3,L4+K1,L5+K2,L6+K3,L7+K1,...

 Ahora bien si añadimos tu modifiación, ¿quedaría así?:

L1+K1,L2+L1+K2,L1+L2+L3+K3,L1+L2+L3+L4+K1,L1+L2+L3+L4+L5+K2,...

 Si fuese así (no estoy seguro si es a lo que te refieres), restando en el mensaje cifrado a cada elemento el anterior obtenemos:

L1+K1,L2+(K2-K1),L3+(K3-K2),L4+(K1-K3),L5+(K2-K1),...

es decir, tras esta transformación y descartado el primer elemento esencialmente el cifrado vuelve a ser el anterior de Viegenere sin tu modificación (para la clave K2-K1,K3-K2,K1-K3). Por ello podría ser "atacado" exactamente con las mismas técnicas. ¿No?.

 En fin, perdona si la notación no es la usual, pero como te decía al principio no conozco demasiado sobre este tema.

Saludos.

03 Enero, 2007, 12:01 pm
Respuesta #3

KaStarKo

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 23
  • Karma: +0/-0
Sí, has acertado, justo ése es el sistema que describía.

Y por cierto, tienes razón :) . Tu método es bastante mejor que el mio, jeje.

Ahora mi pregunta és la siguiente... y si aplico operaciones diferentes con el registro y con la clave?

Por ejemplo \( L_{c_n}=(L + R_n) xor K \) ,
o \( L_{c_n}=(L xor R_n) + K \) .

¿Se podría despejar de la misma forma? \( L_{c_n} \) es la letra cifrada de la posicion \( n \) .

Yo creo que se podrá encntrar una solución sencilla como la propuesta por el_manco . ""talvez": esta palabra no existe en castellano" se pueda hacer basándose en las propiedades de la operacion xor respecto de la operacion suma.

Por cierto, aclaro lo que es xor:

xor es una operacion(booleana) que se aplica sobre numeros expresados en base binaria(para facilitar los calculos, supongo que se podria hacer sobre otras bases)

0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0

Ejemplo:
\( 10011101 xor 11101001=01110100 \)