Enumeración completa (o método de "fuerza bruta" , ing. fuerza bruta ): un método para resolver problemas matemáticos . Se refiere a la clase de métodos para encontrar una solución agotando todas las opciones posibles . La complejidad de la búsqueda exhaustiva depende del número de todas las posibles soluciones al problema. Si el espacio de soluciones es muy grande, es posible que la búsqueda exhaustiva no dé resultados durante varios años o incluso siglos.
Cualquier problema de la clase NP puede resolverse mediante una búsqueda exhaustiva. Al mismo tiempo, incluso si el cálculo de la función objetivo de cada posible solución específica al problema se puede realizar en tiempo polinomial , dependiendo del número de todas las soluciones posibles, la enumeración exhaustiva puede requerir un tiempo de ejecución exponencial .
En criptografía , la complejidad computacional de la búsqueda exhaustiva se utiliza para estimar la fuerza criptográfica de los cifrados . En particular, se dice que un cifrado es seguro si no existe un método de "descifrado" sustancialmente más rápido que la búsqueda por fuerza bruta . Los ataques criptográficos de fuerza bruta son los más versátiles, pero también los más largos.
En inglés, el término " fuerza bruta " discutido en este artículo generalmente se refiere a una clase de ataques de piratas informáticos . Al mismo tiempo, un concepto más general, un método matemático de agotar todas las opciones posibles para encontrar una solución a un problema, corresponde al término " Demostración por agotamiento ".
El "método de agotamiento" incluye toda una clase de métodos diferentes. Usualmente, el enunciado del problema implica la consideración de un número finito de estados de un sistema lógico dado para identificar la verdad de un enunciado lógico a través de un análisis independiente de cada estado [1] . El método de prueba de la afirmación consta de dos partes:
Aunque la búsqueda exhaustiva no se usa en la práctica en la mayoría de los problemas aplicados (especialmente no relacionados con descifrar cifrados ), hay una serie de excepciones. En particular, cuando la búsqueda exhaustiva resulta, no obstante, óptima o representa la etapa inicial en el desarrollo de un algoritmo, su uso está justificado. Un ejemplo de la optimización de la búsqueda exhaustiva es el algoritmo para estimar el tiempo de cálculo de los productos de la cadena de matrices, que no se puede acelerar en comparación con el algoritmo basado en el método de "fuerza bruta" [2] . Este algoritmo se utiliza para resolver el problema clásico de la programación dinámica : determinar las prioridades para calcular los productos matriciales de la siguiente forma: .
La tarea inicial es calcular la cadena dada (producto de matriz) en el menor tiempo posible. Es posible implementar un algoritmo secuencial trivial que calcule el producto requerido. Dado que el producto de matrices es una operación asociativa , se puede calcular el producto de cadenas eligiendo arbitrariamente un par de elementos de la cadena y reemplazándolos con la matriz resultante . Si repite el procedimiento descrito veces, entonces la matriz resultante restante será la respuesta: . Esta fórmula se puede ilustrar de la siguiente manera. Considere la cadena matriz: . Existen las siguientes 5 formas de calcular el producto correspondiente a esta cadena :
Al elegir el orden correcto de los cálculos, puede lograr una aceleración significativa de los cálculos. Para ver esto, considere un ejemplo simple de una cadena de 3 matrices. Suponemos que sus tamaños son iguales, respectivamente . El algoritmo estándar para multiplicar dos matrices por tamaño requiere un tiempo de cálculo proporcional al número (el número de productos internos a calcular) [3] . Por lo tanto, al evaluar la cadena en orden , obtenemos los productos escalares para calcular , más productos escalares adicionales para calcular el segundo producto matricial. El número total de productos escalares: 7500. Con una elección diferente del orden de los cálculos, obtenemos más productos escalares, es decir, 75000 productos escalares [3] .
Por lo tanto, la solución de este problema puede reducir significativamente el tiempo dedicado al cálculo de la cadena de matrices. Esta solución se puede obtener por enumeración exhaustiva: es necesario considerar todas las secuencias de cálculos posibles y elegir entre ellas la que, al calcular la cadena, ocupa el menor número de productos escalares. Sin embargo, debe tenerse en cuenta que este algoritmo en sí mismo requiere un tiempo de cálculo exponencial [2] , por lo que para cadenas de matrices largas, la ganancia de calcular la cadena de la manera más eficiente ( estrategia óptima ) puede perderse por completo en el tiempo que lleva para encontrar esta estrategia [4] .
Hay varios conceptos generales ampliamente aplicables en la teoría de algoritmos . El método de la fuerza bruta es uno de ellos. De hecho, la búsqueda exhaustiva se puede utilizar en aquellos casos en los que se trata de un sistema determinista discreto, cuyos estados se pueden analizar fácilmente [5] .
Otro excelente ejemplo de un concepto fundamental en la teoría de los algoritmos es el principio de " divide y vencerás ". Este concepto es aplicable cuando el sistema se puede dividir en muchos subsistemas, cuya estructura es similar a la estructura del sistema original [6] . En tales casos, los subsistemas también son susceptibles de separación, o son triviales [6] . Para tales sistemas, el problema planteado inicialmente es trivial. Así, la implementación del concepto de “divide y vencerás” es recursiva .
A su vez, la recursividad es una especie de búsqueda exhaustiva. Entonces, la recursividad es aplicable solo para sistemas discretos [7] . Sin embargo, este requisito no se aplica a los estados de un sistema dado, sino a su subestructura . La consideración consistente de todos los niveles da una solución exhaustiva al problema planteado para todo el sistema discreto.
En comparación con otros ejemplos de enumeración completa, una característica del método de recursión es que la solución final se basa en más de un subsistema trivial. En el caso general, la solución se forma sobre la base de un conjunto completo de subsistemas.
Para los siguientes ejemplos de problemas clásicos de divide y vencerás, la fuerza bruta es la única solución conocida o la implementación original, que se ha optimizado aún más:
En criptografía , un ataque criptográfico de fuerza bruta, o fuerza bruta [12] ( Eng. Brute-force attack ) se basa en un ataque de fuerza bruta : descifrar una contraseña buscando todas las opciones de clave posibles. Su característica es la capacidad de usarlo contra cualquier cifrado utilizado en la práctica [13] ( para las excepciones, es decir, la seguridad desde el punto de vista de la teoría de la información, consulte también el bloque de cifrado y la seguridad de la teoría de la información ). Sin embargo, esta posibilidad existe solo teóricamente, y a menudo requiere costos de tiempo y recursos poco realistas. Si el espacio de decisión es demasiado grande, este tipo de ataque puede fallar durante varios años o incluso siglos. El uso de un ataque de fuerza bruta está más justificado en los casos en que no es posible encontrar puntos débiles en el sistema de encriptación bajo ataque (o no hay puntos débiles en el sistema de encriptación bajo consideración). Cuando se encuentran tales deficiencias, se desarrollan técnicas de criptoanálisis basadas en sus características, lo que ayuda a simplificar la piratería.
La resistencia al ataque de fuerza bruta determina la clave de cifrado utilizada en el criptosistema. Entonces, con un aumento en la longitud de la clave, la complejidad del craqueo por este método aumenta exponencialmente. En el caso más simple, un cifrado de N bits se rompe, en el peor de los casos, en un tiempo proporcional a 2 N [14] [15] . El tiempo promedio de piratería en este caso es dos veces menor y es de 2N - 1 . Hay formas de aumentar la resistencia del cifrado a la "fuerza bruta", por ejemplo, la ofuscación ( ofuscación ) de los datos cifrados, lo que hace que no sea trivial distinguir los datos cifrados de los datos no cifrados.
Los ataques criptográficos basados en el método de "fuerza bruta" son los más versátiles, pero al mismo tiempo los más lentos. Utilizado principalmente por piratas informáticos novatos . Eficaz para algoritmos de cifrado simples y claves de hasta 64 bits de longitud. Para las claves modernas con una longitud de 128 bits o más (a veces se factoriza una gran cantidad de 200 dígitos para una clave), son ineficientes. Cualquier contraseña se puede adivinar mediante una búsqueda exhaustiva. Al mismo tiempo, incluso si el cálculo de la función objetivo de cada posible solución específica al problema se puede realizar en tiempo polinomial, dependiendo del número de todas las soluciones posibles, el ataque puede requerir un tiempo de ejecución exponencial.
Para aumentar la velocidad de selección de claves, se utiliza la paralelización de los cálculos. Hay dos tipos de paralelización:
El procesador th realiza tres operaciones al mismo tiempo:
Esta operación puede durar tan solo una centésima de segundo. Luego , los procesadores conectados en paralelo y sincrónicamente operan a una velocidad (ya que solo hay tres operaciones), donde es la velocidad de realizar una operación por un procesador.
En un ataque de fuerza bruta inversa, una sola contraseña (generalmente compartida) se prueba con varios nombres de usuario. En este caso, también se aplica la paralelización, pero los procesadores deben verificar si otro usuario tiene esa contraseña. En tal estrategia, el atacante generalmente no intenta piratear la cuenta de un usuario en particular. Frente a ataques inversos, se establece una política de contraseñas que prohíbe el uso de contraseñas idénticas.
La tabla muestra el tiempo estimado para la búsqueda de contraseñas por fuerza bruta en función de su longitud. Se supone que se pueden usar 36 caracteres diferentes en la contraseña ( letras latinas de un caso + números), y la tasa de fuerza bruta es de 100 000 contraseñas por segundo ( clase de ataque B , típica para la recuperación de contraseñas de la memoria caché de Windows ( archivos .PWL ) en Pentium 100 ) [ 16 ] .
Número de caracteres | Número de opciones | Fortaleza | Tiempo de búsqueda |
---|---|---|---|
una | 36 | 5 bits | menos de un segundo |
2 | 1296 | 10 bits | menos de un segundo |
3 | 46 656 | 15 bits | menos de un segundo |
cuatro | 1 679 616 | 21 bits | 17 segundos |
5 | 60 466 176 | 26 bits | 10 minutos |
6 | 2176782336 | 31 bits | 6 horas |
7 | 78 364 164 096 | 36 bits | 9 días |
ocho | 2.821 109 9x10 12 | 41 bits | 11 meses |
9 | 1.015 599 5x10 14 | 46 bits | 32 años |
diez | 3.656 158 4x10 15 | 52 bits | 1162 años |
once | 1.316 217 0x10 17 | 58 bits | 41,823 años |
12 | 4.738 381 3x10 18 | 62 bits | 1.505.615 años |
Por lo tanto, las contraseñas de hasta 8 caracteres, inclusive, generalmente no son seguras. Para las computadoras modernas, esta cifra es mucho mayor. Entonces, una clave de 64 bits (contraseña) se clasifica en una computadora moderna en aproximadamente 2 años y la búsqueda se puede distribuir fácilmente entre muchas computadoras.
Las computadoras personales modernas permiten el descifrado de contraseñas por fuerza bruta con la eficiencia ilustrada en la tabla anterior. Sin embargo, con la optimización de fuerza bruta basada en computación paralela , la efectividad del ataque puede incrementarse significativamente [18] . Esto puede requerir el uso de una computadora adaptada a la computación de subprocesos múltiples . En los últimos años se han generalizado las soluciones informáticas que utilizan GPU , como Nvidia Tesla . Desde la creación de la arquitectura CUDA por parte de Nvidia en 2007, han aparecido muchas soluciones (ver, por ejemplo, Cryptohaze Multiforcer , Pyrit Archivado el 20 de noviembre de 2012 en Wayback Machine ) que permiten adivinar claves aceleradas utilizando tecnologías como CUDA, FireStream , OpenCL .
En el proceso de mejora del sistema de seguridad de la información frente a un ataque de fuerza bruta, se pueden distinguir dos direcciones principales:
Por lo tanto, es imposible lograr un alto nivel de protección mejorando solo uno de estos parámetros [19] . Hay ejemplos de cómo un sistema de autenticación basado en la complejidad óptima de la contraseña resultó ser vulnerable al copiar la base de datos en la computadora local del atacante, después de lo cual fue sometido a un ataque de fuerza bruta usando optimizaciones locales y herramientas computacionales que no están disponibles con criptoanálisis remoto [20] . Este estado de cosas ha llevado a algunos expertos en seguridad informática a recomendar un enfoque más crítico de las prácticas estándar de seguridad, como el uso de contraseñas lo más largas posible [21] . A continuación se muestra una lista de algunos métodos prácticos [22] [23] [24] para aumentar la confiabilidad de un criptosistema en relación con un ataque de fuerza bruta:
Para acelerar la enumeración , el método de ramificación y acotación utiliza la eliminación de subconjuntos de soluciones factibles que obviamente no contienen soluciones óptimas [25] .
Uno de los métodos para aumentar la velocidad de selección de claves es la paralelización de los cálculos . Hay dos enfoques para la paralelización [26] :
Los sistemas informáticos que utilizan contraseñas para la autenticación deben determinar de alguna manera si la contraseña ingresada es correcta. Una solución trivial a este problema es mantener una lista de todas las contraseñas válidas para cada usuario, pero este enfoque no es inmune a las filtraciones de bases de datos. Una forma simple pero incorrecta de protegerse contra una fuga de base es calcular una función hash criptográfica a partir de la contraseña.
El método es incorrecto porque es posible realizar una búsqueda por adelantado y, cuando necesite descifrar la contraseña, mire el resultado. La tabla del arco iris es una optimización de este método [27] . Su principal ventaja es una reducción significativa en la cantidad de memoria utilizada [28] [27] .
UsoLa tabla del arcoíris se crea construyendo cadenas de posibles contraseñas. Cada cadena comienza con una posible contraseña aleatoria, luego se somete a una función hash y una función de reducción. Esta función convierte el resultado de la función hash en alguna posible contraseña (por ejemplo, si asumimos que la contraseña tiene 64 bits, entonces la función de reducción puede tomar los primeros 64 bits del hash, sumando bit a bit todos los 64 bits). bloques del hash, etc.). Las contraseñas intermedias de la cadena se descartan y solo se escriben en la tabla el primer y el último elemento de la cadena. La creación de tales tablas requiere más tiempo que el que se necesita para crear tablas de búsqueda ordinarias, pero mucha menos memoria (hasta cientos de gigabytes, con el volumen para tablas ordinarias de N palabras, las del arco iris solo necesitan alrededor de N 2/3 ) [28 ] . Al mismo tiempo, aunque requieren más tiempo (en comparación con los métodos convencionales) para recuperar la contraseña original, son más factibles en la práctica (construir una tabla regular para una contraseña de 6 caracteres con caracteres de byte, 256 6 = 281 474 976 Se requerirán 710 656 bloques de memoria, mientras que para el arco iris, solo 256 6 ⅔ \u003d 4,294,967,296 bloques).
Para recuperar la contraseña, se reduce este valor hash y se busca en la tabla. Si no se encuentra ninguna coincidencia, se vuelven a aplicar la función hash y la función de reducción. Esta operación continúa hasta que se encuentra una coincidencia. Después de encontrar una coincidencia, la cadena que la contiene se restaura para encontrar el valor descartado, que será la contraseña deseada.
El resultado es una tabla que puede, con una alta probabilidad, recuperar la contraseña en poco tiempo [29] .
Si bien cualquier protección de un sistema de información debe, en primer lugar, ser confiable en relación con un ataque de fuerza bruta, los casos de uso exitoso de este ataque por parte de intrusos son bastante comunes.
Inventada en 1918, la máquina de cifrado Enigma fue ampliamente utilizada por la Armada alemana desde 1929 en adelante. En los años siguientes, el sistema se modificó y, desde 1930, el ejército y el gobierno alemanes lo utilizaron activamente durante la Segunda Guerra Mundial [31] .
Las primeras intercepciones de mensajes cifrados con el código Enigma datan de 1926. Sin embargo, no pudieron leer los mensajes durante mucho tiempo. A lo largo de la Segunda Guerra Mundial, hubo un enfrentamiento entre criptógrafos polacos y alemanes. Los polacos, al obtener otro resultado al romper el sistema criptográfico alemán, enfrentaron nuevas dificultades que introdujeron los ingenieros alemanes que constantemente actualizaban el sistema Enigma. En el verano de 1939 , cuando se hizo evidente la inevitabilidad de una invasión de Polonia, la Oficina entregó los resultados de su trabajo a la inteligencia británica y francesa [32] .
Se organizaron más trabajos de allanamiento en Bletchley Park . La herramienta principal de los criptoanalistas era la máquina descifradora Bomba . Su prototipo fue creado por matemáticos polacos en vísperas de la Segunda Guerra Mundial para el Ministerio de Defensa polaco. En base a este desarrollo y con el apoyo directo de sus creadores, se diseñó en Inglaterra una unidad más “avanzada”.
La parte teórica del trabajo fue realizada por Alan Mathison Turing [33] . Su trabajo sobre el análisis criptográfico del algoritmo implementado en la máquina de cifrado Enigma se basó en el criptoanálisis anterior de versiones anteriores de esta máquina, que fueron realizados en 1938 por la criptoanalista polaca Marian Rejewski . El principio de funcionamiento del descifrador desarrollado por Turing era enumerar posibles opciones para la clave de cifrado e intentos de descifrar el texto si se conocía la estructura del mensaje que se descifraba o parte del texto sin formato [34] .
Desde un punto de vista moderno, el cifrado Enigma no era muy confiable, pero solo la combinación de este factor con la presencia de muchos mensajes interceptados, libros de códigos, informes de inteligencia, los resultados de esfuerzos militares e incluso ataques terroristas hicieron posible " abrir" el cifrado [32] .
Después de la guerra , Churchill , por razones de seguridad, ordenó la destrucción de estas máquinas.
En 2007, un grupo de empresas miembros de la organización Wi-Fi Alliance comenzó a vender equipos inalámbricos para redes domésticas compatibles con el nuevo estándar Wi-Fi Protected Setup. Entre los fabricantes de enrutadores inalámbricos compatibles con esta tecnología se encontraban empresas tan grandes como Cisco/Linksys , Netgear , Belkin y D-Link . El estándar WPS estaba destinado a simplificar en gran medida el proceso de configuración de una red inalámbrica y su uso para personas que no tienen amplios conocimientos en el campo de la seguridad de redes. Sin embargo, a finales de 2011 se publicó información sobre serias vulnerabilidades en WPS, que permitían a un atacante adivinar el código PIN [35] de una red inalámbrica en tan solo unas horas, contando con los recursos de cómputo de una computadora personal ordinaria [36 ] .
Por el momento, el Centro Coordinador del CERT no recomienda a los fabricantes lanzar nuevos equipos que soporten esta tecnología. [37]
En 2010, en la conferencia DEFCON18 , se presentó un vehículo aéreo no tripulado WASP , diseñado para la recopilación masiva de estadísticas sobre las redes Wi-Fi domésticas. El UAV está equipado con una computadora de a bordo compacta que ejecuta BackTrack Linux Una de sus características era la capacidad de descifrar automáticamente las contraseñas de la red inalámbrica usando fuerza bruta [38] [39] .