¿Cómo hace el cifrado obliga a un procesador a "pausar"?

0

A menudo me dicen que el cifrado obliga a los procesadores a "hacer una pausa" al realizar los cálculos matemáticos para descifrar un hash, por lo que la fuerza bruta puede llevar tanto tiempo. No entiendo lo que significa para un procesador "hacer una pausa" ni cómo una serie de números podría forzar esa pausa. ¿Alguien puede explicar esto usando tanto inglés como sea posible?

Reconozco que es posible que no esté compartiendo todos estos términos de una manera precisa: mi ciencia computacional y los fundamentos matemáticos son débiles en el mejor de los casos.

    
pregunta trosborn 18.02.2016 - 22:59
fuente

3 respuestas

3

Tu pregunta me suena un poco vaga, así que puedo pensar en dos cosas que podrías querer al forzarla a hacer una pausa:

Una pausa programada: en el caso de que no tenga acceso a los hashes de contraseña y esté intentando ingresar una contraseña en el dispositivo, el dispositivo puede esperar arbitrariamente una cierta cantidad de tiempo antes de indicarle si has tenido éxito o no Esta cantidad de tiempo puede aumentar con cada intento fallido, aunque en general las primeras veces tienen poca penalización, debido a la tendencia humana a mezclar contraseñas o escribir cosas incorrectamente. Si alguien tiene acceso a sus hash de contraseña y está utilizando su propio software para probar todas las combinaciones (un ataque de fuerza bruta), entonces no es necesario que incluya esa pausa, y no tendrá ningún efecto.

Comprobación de contraseñas computacionalmente costosa: ciertas estrategias de hash requieren MUCHO cálculo * para verificar que la contraseña sea correcta. Estos se usan intencionalmente para verificar las contraseñas porque no puede escribir su propio software para evitar esto. Si bien puede parecer que sería una mala idea forzar a los usuarios a esperar por este costoso cálculo, tener que esperar un segundo entero en realidad no es tan importante para el usuario válido, pero es un gran problema cuando se trata de una persona que está tratando de adivinar la contraseña por fuerza bruta, ya que esa penalización se incurre por cada suposición incorrecta que hacen. Debo mencionar que si bien esto puede parecer una simple pausa desde la perspectiva del usuario, desde la perspectiva de la computadora, es una gran cantidad de trabajo, que simplemente no tiene ningún resultado visible dibujado en la pantalla.

* muchos cálculos en comparación con los pocos milisegundos que tardan la mayoría de las operaciones; el retardo real puede ser de aproximadamente un segundo, dependiendo del hardware.

    
respondido por el childofsoong 18.02.2016 - 23:15
fuente
3

Creo que confunde un par de conceptos y está preguntando específicamente sobre el hashing de la contraseña, ¿correcto?

El hashing de la contraseña, cuando se realiza correctamente, introduce un factor de trabajo, lo que significa que lleva un tiempo calcular un hash, no estrictamente una "pausa" como la describe, aunque esté involucrado, aunque el usuario final perciba algo Retraso, que podría interpretarse de la misma manera.

Una corrección adicional de la nota: un hash es unidireccional. No hay oportunidad para el descifrado. Por lo tanto, si tiene un hash de una contraseña y quiere averiguar qué contraseña se usó para crear ese hash, la forma en que lo hace es usar la misma función de hash, y enviar las contraseñas candidatas, y comparar el hash resultante. Para el hash que tienes, para ver si coinciden. Esto es lo que normalmente hacen los sitios web (por ejemplo). En términos muy simples, cuando creas una cuenta, se te pide que proporciones una contraseña, que está hash y el hash está almacenado. Cuando vuelva a iniciar sesión, ingrese nuevamente su contraseña, el sitio web trocó lo que le dio y lo comparó con el hash que almacenó. Si coinciden, estás autenticado. Si no, te piden que lo intentes de nuevo.

Por lo tanto, el problema con una función hash simple es que es bastante fácil crear los hashes de muchas contraseñas candidatas muy rápidamente. Entonces, cuando el atacante roba un hash de contraseña de una base de datos, puede crearlos de un diccionario de posibles contraseñas y comparar los hashes resultantes con el hash robado para averiguar cuál es la contraseña a un ritmo asombroso. Para muchas funciones hash comunes, puede probar literalmente miles de millones de contraseñas posibles cada segundo.

La solución para esto, a la que creo que te refieres en tus preguntas, es el factor de trabajo que mencioné, que generalmente se implementa como iteraciones. Entonces, cuando se envía una contraseña para el hashing, no se hace hash una vez, sino 10,000 veces, o 100,000 veces, o 1,000,000 veces. Esto significa que cuando un atacante roba este hash, él también tiene que hashear cada una de sus contraseñas de candidato tantas veces como para averiguar si el candidato es correcto. Así que ahora ha limitado sus intentos posibles de miles de millones por segundo, a miles de millones dividido por 10,000, o dividido por 100,000, o por 1,000,000. Mucho más caro para él, y mucho menos probable que consiga lo suficiente en su lista de contraseñas posibles para encontrar la contraseña real.

En la práctica es un poco más complicado que esto. Debe tener en cuenta detalles como las sales, la dureza computacional y la dureza de la memoria, y otras variables similares, pero en general, a un nivel alto, Este es un mecanismo por el cual hacer que los hash de contraseña de ataque sean difíciles.

    
respondido por el Xander 18.02.2016 - 23:17
fuente
2

Creo que hay dos cosas que podrías haber escuchado para darte esa idea.

Primero, un buen algoritmo hash para el almacenamiento de contraseñas está diseñado para llevar mucho tiempo a la fuerza bruta. Sin embargo, esto no se logra haciendo que el procesador se detenga. Por el contrario, se logra haciendo que el procesador funcione mucho.

El algoritmo hash está diseñado para requerir muchos cálculos (y, por lo tanto, mucho tiempo). Para aplicar fuerza bruta a un hash, es necesario ejecutar el algoritmo hash miles de millones de veces, y si el algoritmo es bueno, debería llevar años incluso en una buena computadora. Pero esos son años de computación activa, no de pausa.

Para obtener más información sobre el hash de contraseñas, consulte este artículo, especialmente la sección sobre funciones hash lentas.

En segundo lugar, es posible que haya escuchado que en muchos sistemas de inicio de sesión no aceptará ningún número de intentos para ingresar una contraseña sin obligarlo a hacer una pausa, para evitar que brute la contraseña. Esto no tiene nada que ver con el cifrado. Además el procesador no se detiene. Es solo que, independientemente de lo que inicie sesión (puede ser un servidor remoto, o puede ser un circuito integrado en su iPhone) se niega a probar sus credenciales porque está programado de esa manera.

    
respondido por el Anders 18.02.2016 - 23:16
fuente

Lea otras preguntas en las etiquetas