Sistema de cifrado por lote de texto plano

Iniciado por JoseluCross, 29 Marzo 2016, 17:37 PM

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

LaiaxanIV

#10
Parece que se haría igual, solo tendrías que modificar el alfabeto que se usa, incluso te podría decir que me lo pones más facil ya que los espacios permiten detectar la longitud de la clave muy facilmente. Ahora solo variaria la frecuencia (no se si el espacio sería más frecuente). Además al diferenciar entre mayúsculas y minúsculas permitiria conocer aún mejor el texto, ya que un punto indica mayúscula y, al detectar una mayúscula se podria saber si el caracter anterior es un punto...
Como ves hay muchas cosas a tener en cuenta.

JoseluCross

Ok, entonces una expansión del alfabeto no lo haría mas seguro. Una cosa que se me ocurre, quizás es una tontería de principiante pero total, ya lo soy. ¿Si cambio de manera aleatoria los espacios por caracteres que no afectarían a la interpretación del texto como "-" "_" "~" o el mismo espacio afectaría a la búsqueda de patrones con el espacio o no? Gracias nuevamente, y lo siento si lo que pregunto puede sonar estúpido, soy muy nuevo en esto.
No hay problema sin solución, solo personas que no quieren resolverlo.

kub0x

JoseluCross he de comunicarte que tu cifrado tiene una vulnerabilidad en la forma que cifra los espacios, por lo que puedo deducir facilmente la clave de cifrado, me explico poniendo como ejemplo el que tu has puesto antes:

clave: hola
texto plano (plaintext): este es un mensaje super secreto y nadie nunca lo va a descifrar
texto cifrado (ciphertext): OdbHhVaa__lPO_aDTVlV_aSU]VQUOe]aco\DNZSaXf\FKoZRhgOaKoRH]TWI\R`
alfabeto:  (espacio)!"#$%&'()*+´-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz{|}~

Vamos paso por paso, cogemos las primeras cuatro letras -> "este" y vemos como cifra:

'e' corresponde a O mediante 'h'
's' corresponde a d mediante 'o'
't' corresponde a b mediante 'l'
'e' corresponde a H mediante 'a'

hasta aquí todo bien, ahora toca el espacio entre "este" y "es"

(espacio) corresponde a 'h' mediante 'h' (está dándonos parte de la clave)

Sigo...

'e' corresponde a V mediante 'o'
's' corresponde a 'a' mediante 'l'

Toca otro espacio entre "es" y "un"

(espacio) corresponde a 'a' mediante 'a' (sigue dándonos parte de la clave)

y así sucesivamente hasta obtener la clave entera o parte de la clave "hola".

Simplemente he analizado el texto en el notepad mirando el mapeo entre ciphertext y plaintext, un analisis estádistico en base a tu alfabeto sería lo ideal.

Saludos!
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


LaiaxanIV

Citar
JoseluCross he de comunicarte que tu cifrado tiene una vulnerabilidad en la forma que cifra los espacios.

Este problema existirá siempre y cuando tu algoritmo de cifrado use operaciones con elementos neutros. Es decir, al sumar 0 siempre tendrás la clave. Lo mismo ocurre en el caso del Vigènere con la A.
No se si eso llega a afectar de gran manera ya que tampoco conoces la posición de los espacios. Lo que, al ser el caracter más repetido, solo haria falta mirar los carácteres mas repetidos en el texto cifrado para tener una idea de los caracteres que forman la clave.

JoseluCross

Cita de: kub0x en 30 Marzo 2016, 19:39 PM
JoseluCross he de comunicarte que tu cifrado tiene una vulnerabilidad en la forma que cifra los espacios, por lo que puedo deducir facilmente la clave de cifrado, me explico poniendo como ejemplo el que tu has puesto antes:
Saludos!
No me había fijado, obviamente necesitas saber donde están pero una ves deducido ya se tiene el valor. Si consideramos lo que planteaba de cambiar los espacios de manera aletoria entre otros caracteres que no perjudiquen a la interpretacion del texto esto no debería ocurrir no? y si tenemos en cuenta lo del texto aleatorio al final quizas los patrones sean algo mas dificiles, aunque claro, al estar al final con ignorar los patrones mas cercanos al final...
Muchas gracias por la anotación. La verdad es se nota lo mucho que sabéis  ;-). Gracias
No hay problema sin solución, solo personas que no quieren resolverlo.

LaiaxanIV

Casi parece mejor no cifrar los espacios xD
Si conozco donde van los espacios podré saber la longitud de las palabras. Si las conozco sabre que por ejemplo palabras de 2 de longitud contendrán una vocal, si es solo de 1 es probable que sea una vocal o una y...
Recuerda que cuanta más información me des, más fácil será romper el algoritmo.

JoseluCross

Cita de: LaiaxanIV en 30 Marzo 2016, 20:37 PM
Casi parece mejor no cifrar los espacios xD
Si conozco donde van los espacios podré saber la longitud de las palabras. Si las conozco sabre que por ejemplo palabras de 2 de longitud contendrán una vocal, si es solo de 1 es probable que sea una vocal o una y...
Recuerda que cuanta más información me des, más fácil será romper el algoritmo.
Si no los cifro no daría ya la información de donde están? o lo que me propones es que los borre?
No hay problema sin solución, solo personas que no quieren resolverlo.

LaiaxanIV

#17
Cita de: JoseluCross en 30 Marzo 2016, 21:04 PM
Si no los cifro no daría ya la información de donde están? o lo que me propones es que los borre?
JAJAJJAJA
Tienes razón xD Si no los cifras aparecen igual :^D Nada se me ha ido la pinza.
Borrarlos... Bueno, puede que modifiques el texto asi que no me parece una buena opción.
Para mejorar la seguridad yo lo que haría seria modificar el texto de alguna manera, a partir de la clave, para intentar cambiar el patrón de repeticiones.
Por ejemplo, si la palabra es HOLA coges el valor de la primera letra (en este caso H) y añades un valor a esa posición, y así para todos los caracteres. Almenos haces más difícil encontrar patrones y el descifrado es relativamente sencillo.

kub0x

Te dejo un post muy interesante sobre el cracking de múltiples cifrados de substitución, lo encuentro interesante pues tu cifrado es similar a las características aquí descritas, el post está en inglés, y la comunidad es muy extensa (actualmente soy miembro y hago mis preguntillas ahí). Segro que te ayuda a mejorar la seguridad y a emprender un criptoanálisis sobre el mismo.

https://crypto.stackexchange.com/questions/3826/possible-ways-to-crack-simple-substitution-ciphers

Si tienes alguna duda no dudes en comentarla.

Saludos!
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


arget

No he mirado tu código (pereza jeje), pero si lo que haces es simplemente implementar ASCII 32-126 será igual pero empleando un alfabeto más grande, cuál es el carácter del ASCII que más se repite en inglés y en castellano?, la 'e' y después la 'E'.
De todas formas el método que te ha dicho Laiaxan no es válido contra el cifrado de Vigenère. Vigenère es polialfabético, por tanto un carácter no será siempre el mismo en el criptograma, del mismo modo, un carácter en el criptograma no representará siempre al mismo carácter. Sin embargo tiene su técnica similar. En textos largos con claves de cierto tamaño aparecen en el criptograma cadenas que se repiten cada cierto tiempo, esas cadenas, si suponemos que no son coincidencia, son zonas en las que un texto cifrado coincide de nuevo con la clave, veamos (clave "ABCDEFG"):

asdasdasdasdEJEMPLOasdasdasdEJEMPLOasdasdasda...
ABCDEFGHABCDEFGHABCDEFGHABCDEFGHABCDEFGHABCD...

En el criptograma se verá que en donde EJEMPLO coincide con EFGHABC se repetirán los caracteres cifrados. Con esto podemos saber que la distancia entre repetición y repetición es un múltiplo de la longitud de la clave. Esto se evita mediante el one-time-pad, que es la generación de una clave aleatoria de la longitud del texto a cifrar.
La gestión manual de bloques de memoria en C es como hacer malabarismos con pastillas de jabón en la ducha de la prisión: todo diversión hasta que cometes un fallo.