Cómo saber si un archivo está descifrado o no

36

Para la escuela, tengo que hacer un ejercicio en el que tengo que descifrar archivos mediante un ataque de fuerza bruta.

Hay muchos archivos diferentes en diferentes formatos de archivo. Los archivos se han cifrado mediante XOR o el algoritmo de César.

Sé cómo probar todas las claves posibles para descifrar los archivos pero, ¿cómo puedo saber si el archivo se está descifrando con la clave correcta o no?

    
pregunta juan michelle 08.04.2016 - 16:45
fuente

7 respuestas

52

Realmente no puedes, si solo estás cifrando / descifrando texto.

Si sabe que la cadena encriptada es "kdo" y el método de encriptación es un cambio de Caesar, el texto en claro podría ser tan "IBM" como "HAL". Tendrías que tener alguna idea de cómo se ve el texto en claro. Por ejemplo, si sabes que el texto en claro es el nombre de un personaje de Stanley Kubrick, tendrías una buena idea de cuál debería ser.

Si tienes una cadena más larga, es mucho más fácil reducir las cosas. Un archivo de texto grande tiene muchos menos resultados inteligibles que el ejemplo de tres caracteres anterior. Pero todavía tendrás que determinar si se descifra tu mismo.

Por otra parte, si está descifrando un archivo completo en algún formato específico (.docx, etc.), puede estar razonablemente seguro de que el archivo se descifra si el programa de análisis (Word, etc.) puede leerlo.

    
respondido por el Dan Ambrogio 08.04.2016 - 16:56
fuente
18

Absolutamente puede determinar con cierto grado de certeza si un archivo, o incluso una cadena, se descifra correctamente. La mayoría de los desafíos en cryptopals dependen de ello . Comencé a hacer una herramienta para el cifrado de datos de fuerza bruta y el análisis que automatiza esta tarea. Puede encontrarlo aquí si desea echar un vistazo.
(necesita mucha limpieza, no me juzgues)

Mi objetivo originalmente en este proyecto era mejorar mi eficiencia en los desafíos de criptografía CTF con una herramienta simple de fuerza bruta, pero estoy empezando a trabajar en la implementación de mucho más análisis. Tal como está, puede aplicar fuerza bruta a todos los tipos de caesar, XOR de byte único, atbash y algunas codificaciones, con XOR de clave de repetición desarrollada pero no integrada aún.

La forma en que funciona ahora

  • toma la cadena de texto cifrado de entrada o el archivo de cadenas de texto cifrado delimitadas por nueva línea
  • intenta descifrar con el espacio de teclas completo de los cifrados admitidos
  • después de cada intento de descifrado, ejecuta una función de detección en texto claro para determinar si el texto descifrado es inglés
  • muestra las suposiciones más probables

Lo único que hace que este proceso sea complicado es cómo se deben ajustar los umbrales para la detección del inglés según la longitud del ciphetext. De manera predeterminada, se requiere que el 60% del texto claro sean palabras y el 75% del texto claro sean letras para registrar una coincidencia. Esta configuración rara vez da falsos positivos, y aún menos frecuentemente falsos negativos, en textos claros de longitud media a larga (cualquier cosa sobre unas pocas cadenas). Sin embargo, cuando se utiliza en textos cifrados de corta duración, aparecerán algunos falsos positivos y muchos falsos negativos se solucionarán. En las pruebas, tuve que bajar los umbrales en un 30% o más para detectar una coincidencia en algunas cadenas cortas, y en el proceso generar muchos más falsos positivos que tengo que examinar para encontrar la coincidencia real.

Recomiendo encarecidamente trabajar a través de los cryptopals desafios desde el principio, si está interesado en aprender más sobre cómo hacer oráculos y romper criptografía. Comienza fácilmente y avanza en ataques del mundo real, como hacer un Bleichenbacher Oracle , parte de lo que hace que DROWN trabajo de ataque.

tl; dr

necesitas crear un módulo que detecte el inglés y aplicarlo al resultado de cada intento de descifrado. o simplemente fork mine y hazlo mejor. En los casos en que el texto claro no sea inglés u otro idioma, se requiere un análisis más avanzado.

    
respondido por el cremefraiche 10.04.2016 - 12:58
fuente
10

Si tiene alguna idea de lo que es el texto claro, puede usar esa conjetura de conocimiento cuando haya podido descifrar el texto cifrado.

Si cree que el texto claro está en inglés, por ejemplo, comience a buscar palabras en inglés en su intento de descifrado.

Si cree que el texto claro es un archivo zip, los archivos zip tienen una firma al comienzo del archivo. Busca esa firma.

Si crees que el texto en claro es un correo electrónico, busca encabezados de correo electrónico reveladores.

En general, podría intentar buscar el "contenido de información" del intento de descifrado. Normalmente, el texto simple tiene un contenido de información más bajo que el texto cifrado, aunque esto no es cierto para un simple cifrado César.

Pero debe comenzar con algo de lo que podría contener el texto claro, incluso si (como en el ejemplo anterior) es simplemente "una puntuación de contenido de información más baja que el texto cifrado".

    
respondido por el Steve Sether 08.04.2016 - 20:26
fuente
7

Las otras respuestas aquí son excelentes para el caso general. Para una asignación de clase, sospecho que los profesores quieren que sea muy fácil saber cuándo tienes el archivo descifrado.

Por ejemplo, ¿son los archivos que está descifrando los archivos de texto que muestran un mensaje cuando se descifran correctamente? Si es así, puede tomar un diccionario en su idioma y verificar si una gran parte de las palabras en el mensaje están en el diccionario. Si está utilizando el inglés, supongo que un umbral del 50% de las palabras que se encuentran en un diccionario de inglés es un buen número para usar: un archivo descifrado de forma incorrecta será casi completamente incomprensible, pero no quiere ignorar el texto claro correcto. Si tiene algunas palabras, como los nombres propios o la jerga técnica, no están en su diccionario.

    
respondido por el Kevin 09.04.2016 - 01:00
fuente
2

Si el archivo encriptado es un texto, debe verificar si las frases dentro del archivo tienen sentido o no, pero si necesita descubrir algo que no es una palabra o una frase (es decir, contraseña o letras aleatorias) Debe probar todas las posibilidades diferentes. Por ejemplo, tengo una contraseña de inicio de sesión (letras aleatorias) cifrada con cifrado César. Debo intentar, en el peor de los casos, las 26 posibilidades (asumiendo que estamos usando un alfabeto internacional en minúsculas) para verificar si la contraseña es correcta.

    
respondido por el Cricco95 08.04.2016 - 16:55
fuente
1

Muchos formatos de archivo comienzan con un número mágico (una secuencia de bytes) que puede buscar. Wikipedia tiene una lista.

    
respondido por el Filip Haglund 11.04.2016 - 10:19
fuente
0

Otras respuestas han cubierto la mayoría de los aspectos, pero otro punto es que, si tiene acceso a la API que creó los archivos cifrados, podría cifrar su propio archivo conocido y utilizarlo como fuerza bruta (aquí tengo algo en contra para comparar).

Una vez que obtenga la clave, úsela en los otros archivos.

    
respondido por el Felipe Pereira 08.04.2016 - 20:32
fuente

Lea otras preguntas en las etiquetas