¿Existe alguna defensa contra Brute-Force en un archivo cifrado local?

1

Permítanme comenzar diciendo que no sé mucho sobre cifrado, hash, cracking, etc. Soy solo un entusiasta de las computadoras, programador e investigador típico con muchas preguntas.

Entonces, descubrí que hay una cosa llamada "Cracking distribuido" que es cuando muchos sistemas se agrupan para enfocar y disparar un procesamiento de Fuerza Bruta en un solo objetivo.

Supongo que, en el caso de que el objetivo sea un archivo local en una computadora, con suficiente tiempo y recursos, Brute Force tiene una tasa de éxito del 100%. Corríjame si esta suposición es falsa.

El único objeto dependiente en este sistema es el software utilizado para descifrar el archivo fuente cifrado. Brute Force tiene que pasar por este programa para descifrar los contenidos.

¿Hay algo que el programa pueda hacer para defenderse de la Fuerza Bruta? ¿Podría el programa destruir el archivo de origen cifrado y luego autodestruirse si el número de intentos de inicio de sesión posteriores supera algún número ridículamente alto? Sin embargo, esto requerirá que el programa mantenga un conteo continuo de cuántos intentos fallidos ha habido, lo cual puede ser falsificado ... Tiene que escribir y leer el valor de en alguna parte . Eso o la característica de autodestrucción se pueden eliminar completamente en una versión agrietada y recompilada.

No puedo pensar en nada que funcione.

Si todo lo demás falla, ¿simplemente ayuda una contraseña ridículamente larga? ¿Algo así como 500 caracteres? Supongo que todavía debería estar roto. Sólo llevará exponencialmente más tiempo. Pero solo agregar más botnets de craqueo a la ecuación puede anular eso.

    
pregunta Lakitu 29.10.2014 - 23:41
fuente

4 respuestas

1

La única defensa que puede tener en un archivo cifrado localmente es la fuerza de la contraseña utilizada para cifrarlo. Además, el uso de un algoritmo de cifrado seguro es importante (AES es bastante estándar en este momento).

Es absolutamente correcto que el craqueo por fuerza bruta sea 100% exitoso. El problema radica en la cantidad de tiempo que se tarda en descifrar una contraseña. Una contraseña segura será muy larga y utilizará una combinación de mayúsculas y minúsculas, números y símbolos. Al hacerlo, le das al atacante un espacio de clave de 96 caracteres. Digamos que utiliza una contraseña de 32 caracteres. Eso sumaría un total de 2,708,192,040,014,184,559,945,134,363,758,220,403,329,959,047,434,832,829,218,816 combinaciones posibles de contraseñas de 32 caracteres.

Otro factor es la rapidez con la que una computadora puede generar cada contraseña cuando se aplica la fuerza bruta. En mi computadora, puedo generar aproximadamente 50,000,000 hashes MD5 por segundo. Del mismo modo, para las claves WPA (wifi), solo puedo generar aproximadamente 2,000.

Su idea de tener un programa con una función de "autodestrucción" cuando se prueban demasiadas contraseñas es una forma de seguridad bastante débil, mucho más débil que una contraseña. Tomemos por ejemplo el software de cifrado de disco, Truecrypt. Con truecrypt puedes crear contenedores de archivos encriptados. Sin embargo, existe un software que está específicamente diseñado para descifrar volúmenes cifrados de truecrypt, sin utilizar nunca el software de truecrypt. Lo mismo puede suceder con tu programa teórico también.

Al final, la mejor seguridad para un archivo cifrado localmente es tener una contraseña larga con una combinación de caracteres y usar un cifrado estándar que la comunidad considere seguro.

    
respondido por el Gogeta70 29.10.2014 - 23:56
fuente
1

Si el archivo se recupera del sistema de archivos al sistema del atacante, ya no hay ninguna puerta de enlace. La fuerza bruta puede continuar sin ningún impedimento.

Las claves o contraseñas más complejas aumentan el tiempo / costo de la fuerza bruta, pero 'eventualmente' (ojalá antes de la muerte térmica del universo), podría romperse.

    
respondido por el schroeder 29.10.2014 - 23:47
fuente
1

El problema es que no hay razón para que un atacante tenga que usar TU programa para realizar el descifrado. De hecho, para aumentar la velocidad, los atacantes casi siempre escriben programas personalizados para fuerza bruta, no el programa original utilizado para cifrar. Pueden hacerlo porque prácticamente todos los programas de cifrado de buena reputación, incluso los propietarios, utilizan algoritmos establecidos y ampliamente conocidos para realizar el cifrado. Esto facilita escribir un programa personalizado para descifrar en lugar de utilizar el programa original. Por lo tanto, cualquier protección de fuerza bruta en el programa original sería inútil.

Podría estar pensando, ¿por qué no idear un algoritmo de cifrado personalizado o hacer algunos ajustes a los existentes, y mantener el programa cerrado para evitar que las personas escriban sus propios programas de descifrado? La razón principal por la que esto es una mala idea es que los algoritmos seguros son difíciles de encontrar, y ajustar los algoritmos bien establecidos y probados es peligroso: es MUY fácil introducir accidentalmente una puerta trasera. Además, es la seguridad a través de la oscuridad, que generalmente está mal vista. Con el tiempo, alguien va a aplicar ingeniería inversa a su programa con el tiempo y se dará cuenta de qué ajustes ha agregado, haciendo que estas medidas sean inútiles.

Realmente, ninguna medida de software puede proteger completamente contra los ataques de fuerza bruta (teóricamente hablando). Sin embargo, en términos prácticos, una frase de contraseña larga y algoritmos de computación intensivos pueden hacer que sea completamente imposible incluso para las supercomputadoras más poderosas.

PUEDE hacer que se borren los datos después de x intentos, pero debe implementar eso en el nivel de hardware, es decir, diseñar el hardware para que sea imposible obtener una copia de los datos cifrados sin desbloquearlos primero. Luego agregue medidas a prueba de manipulación al hardware. Creo que algunas unidades flash de alta seguridad, como Ironkey, son capaces de hacer esto.

    
respondido por el tlng05 30.10.2014 - 00:58
fuente
0

Comenzaré diciendo que tienes razón, eventualmente, la fuerza bruta rompería cualquier esquema de cifrado. Sin embargo, eventualmente podrían ser millones de años en el futuro, dependiendo de la complejidad de la clave de cifrado, la fortaleza del cifrado, etc. En realidad, existen algunas defensas contra los intentos fuera de línea de descifrar un archivo de contraseñas que generalmente se consideran las mejores prácticas.

Como dice que no está claro cómo funcionan las contraseñas y el hash, le daré un breve resumen de esto que también se aplica al cifrado de datos en general. Estoy seguro de que has escuchado a gente mencionar que las contraseñas de texto claro son un problema. La solución a eso es usar un algoritmo hash.

Cualquier algoritmo de hash de contraseña tiene tres partes clave. Siempre debe resultar en el mismo hash con el mismo texto que se produce. Debe ser computacionalmente costoso de calcular. Debería ser de 1 manera o tendría el mismo problema que la lista de contraseñas de cleartext. Una vez que el hashing comenzó a hacerse popular, los atacantes se adaptaron rápidamente. Generarían hashes de las contraseñas de uso común, conocidas como tablas de arco iris y, a continuación, coincidirán con estos hashes con los de la base de datos. Esto es mucho menos costoso computacionalmente que el cálculo de cada hash sobre la marcha, ya que estos algoritmos de hash son deliberadamente lentos.

La suposición que debes hacer es que un atacante puede robar tu base de datos de contraseñas. Cuanto más tiempo le lleve descifrarla, es más probable que puedas detectar su ataque y restablecer tus credenciales. Esta es también una razón por la cual se recomiendan 90 días para la rotación de la contraseña, ya que reduce una ventana durante la cual esas credenciales son utilizables. De todos modos, voy a resumir los conceptos básicos de estas defensas para que pueda continuar su aprendizaje sobre este tema y palabras específicas en negrita que sean de interés específico.

En primer lugar, cualquier esquema de cifrado de la base de datos de contraseñas debe incluir un salt . Un ejemplo de un esquema de cifrado de contraseña que incluye un salt es bcrypt , que es una buena línea de base de lo que se debe buscar con cualquier cosa que realice esta función. Se genera un salt para cada contraseña y ayuda a prevenir un ataque usando tablas arco iris . Las tablas de arco iris utilizan una lista de hashes precomputados, y una sal hace que esto no sea práctico para almacenar en el disco debido a los requisitos de gran tamaño.

También hay formas en que puede hacer que sea difícil calcular cada hash. Esto hace que cada búsqueda sea más lenta, pero es lo suficientemente rápida como para no molestar a los usuarios. Simplemente hace que un ataque de fuerza bruta sea mucho más lento. bcrypt nuevamente es un buen ejemplo de esto.

La tercera es la defensa más conocida, mejores prácticas de contraseña . Parece bastante mundano, pero puede ayudar a garantizar que cualquier ataque basado en el uso de diccionarios de contraseñas comunes fallará y que es necesario utilizar técnicas mucho más lentas de bruce force.

    
respondido por el theterribletrivium 30.10.2014 - 01:24
fuente

Lea otras preguntas en las etiquetas