Algoritmos de descifrado de computadora y conocer la solución

7

Esta es una pregunta general sobre el uso de computadoras para descifrar información. Me ha desconcertado por un tiempo.

La pregunta es en realidad dos partes:

  1. ¿Cómo verifica una computadora si una clave "adivinada" es la clave correcta? Un humano podría hacerlo porque el resultado es legible, para los humanos. Entonces, ¿qué significa decir que la computadora está revisando una clave?

  2. ¿Cómo sabe alogirthm que ha encontrado la clave correcta? Por ejemplo, si la computadora solo fuerza bruta verifica las claves posibles una por una (si usa un algoritmo mejor para esto, no es tan relevante), en qué punto se detiene y dice "¡esta es la clave y el mensaje!" ?

pregunta 31.07.2012 - 12:20
fuente

3 respuestas

4

Tomando sus dos preguntas:

  1. Si el texto normal esperado es un texto normal, la computadora buscará las frecuencias de las letras para el idioma esperado. Si el texto sin formato es una especie de archivo, digamos una hoja de cálculo, entonces la computadora buscará coincidir con el formato de dicho archivo, generalmente el encabezado. Nuevamente, las estadísticas de frecuencia pueden ayudar; un archivo de mapa de bits con mucho espacio en blanco contendrá muchos más 0x00 bytes que un archivo aleatorio.

  2. No lo hace. Encuentra un descifrado que parece ajustarse al patrón esperado, o uno que se desvía significativamente de la aleatoria. Correspondería a un ser humano determinar si esto era correcto, o simplemente un falso positivo.

respondido por el rossum 31.07.2012 - 13:00
fuente
3

Depende del sistema de cifrado y su implementación: no hay garantía de que la computadora pueda indicar el descifrado correcto de uno incorrecto.

Sin embargo, la mayoría de los sistemas diseñados para el cifrado de datos estáticos (es decir, el cifrado de archivos o correos electrónicos, en lugar de solo cifrar temporalmente los datos para transferirlos a través de una red no confiable) incluyen alguna forma de detectar cuando un error es incorrecto. Se ha dado la clave. El mecanismo exacto varía, pero algunos de los más utilizados incluyen:

  • Comprueba la clave antes que intenta descifrar e incluye un hash criptográfico de como parte de los datos encriptados. (Para los mensajes encriptados usando criptografía de clave pública , uno podría simplemente incluir la clave pública, o un hash de ella, en el mensaje cifrado.)

  • Verifique la clave al comienzo del descifrado, añadiendo un encabezado conocido a los datos de texto simple (esto podría ser tan simple como un bloque de bytes nulos) y verificando que se descifre correctamente.

  • Verifique la clave, y la integridad de los datos, incluyendo un código de autenticación del mensaje en el cifrado datos (o utilizando un modo de cifrado autenticado ). El propósito principal de un MAC es proteger los datos cifrados contra la manipulación, pero como efecto secundario, también sirve para detectar descifrados incorrectos. Sin embargo, el MAC no se puede verificar sin leer y procesar primero todos los datos, por lo que, por motivos de facilidad de uso, aún puede ser útil combinar esto con uno de los otros métodos de verificación clave descritos anteriormente.

En cualquier caso, un formato de cifrado bien diseñado permitirá que se notifique rápidamente al usuario, si intentan descifrarlo con la clave incorrecta, pero no también , ya que eso solo lo haría Más fácil de descifrar la clave por la fuerza bruta sin hacer nada para ayudar a los usuarios legítimos. La forma recomendada de lograr esto, para el cifrado simétrico con una clave derivada de una frase de contraseña, es utilizar una función de derivación de claves ( como PBKDF2 o scrypt ) con un parámetro ajustable que controla la cantidad de trabajo necesario para calcular la clave de la frase de contraseña. Esta clave derivada (que debería ser lo suficientemente larga, por ejemplo, de 128 bits o más, para no ser inteplegable por fuerza bruta) se puede verificar con uno de los métodos descritos anteriormente.

    
respondido por el Ilmari Karonen 31.07.2012 - 15:53
fuente
0

necesita una forma de validar una clave con una computadora con un algoritmo, podría hacer algunas heurísticas para cortar el árbol, esto es un pseudocódigo

  

foreach (claves como clave) {

     

if (isPossibleKey (key)) {

result=tryBruteForce(key);
if (result) break; 
     

}

     

}

usted podría hacer cualquier tipo de heurística en el método isPossibleKey como "la clave está presente en el diccionario en línea" o "es legible por humanos" usando algunas reglas. Más sintonía en el método isPossibleKey, menos llamadas al método tryBrutoForce que haces.

    
respondido por el Clot 31.07.2012 - 12:43
fuente

Lea otras preguntas en las etiquetas