cryptography - tiempo - Descifrado de contraseñas en 2010 y más allá
password crackers ejemplos (5)
He analizado un poco sobre criptografía y asuntos relacionados durante los últimos días y estoy bastante confundido por ahora. Tengo una pregunta sobre la fortaleza de la contraseña y espero que alguien pueda aclarar mi confusión al compartir cómo piensan las siguientes preguntas. Me estoy obsesionando con estas cosas, pero necesito dedicarle mi tiempo de lo contrario :-)
Supongamos que tenemos una contraseña de ocho dígitos que consta de caracteres alfabéticos en mayúsculas y minúsculas, números y símbolos comunes. Esto significa que tenemos 96 ^ 8 ~ = 7.2 cuatrillones de contraseñas posibles diferentes.
Como entiendo, hay al menos dos enfoques para romper esta contraseña. Una es intentar un ataque de fuerza bruta donde tratamos de adivinar cada posible combinación de personajes. ¿Cuántas contraseñas pueden adivinar los procesadores modernos (en 2010, Core i7 Extreme por ej.) Por segundo (cuántas instrucciones adivina una contraseña y por qué)? Creo que se necesita un procesador moderno en el orden de los años para romper esa contraseña.
Otro enfoque consistiría en obtener un hash de mi contraseña almacenada por los sistemas operativos y luego buscar colisiones. Dependiendo del tipo de hash utilizado, podríamos obtener la contraseña mucho más rápido que por el ataque de fuerza bruta. Una cantidad de preguntas sobre esto:
- ¿Es correcta la afirmación en la oración anterior?
- ¿Cómo puedo pensar en el tiempo que lleva encontrar colisiones para hash MD4, MD5, etc.?
Y finalmente, independientemente de la solidez del cifrado de archivos usando AES-128/256, el enlace débil sigue siendo mi contraseña de en / descifrado utilizada. Incluso si romper el texto cifrado llevaría más tiempo que la vida del universo, un ataque de fuerza bruta en mi contraseña de de / cifrado (adivinar contraseña, luego intentar descifrar el archivo, probar la próxima contraseña ...), podría tener éxito mucho antes que el final del universo ¿Es eso correcto?
Estaría muy agradecido, si la gente pudiera tener piedad de mí y ayudarme a pensar en estas preguntas probablemente simples, para que pueda volver al trabajo.
Como entiendo, hay al menos dos enfoques para romper esta contraseña. Una es intentar un ataque de fuerza bruta donde tratamos de adivinar cada posible combinación de personajes. ¿Cuántas contraseñas pueden adivinar los procesadores modernos (en 2010, Core i7 Extreme por ej.) Por segundo (cuántas instrucciones adivina una contraseña y por qué)?
Como observa, esto depende del algoritmo utilizado. SHA1 es una opción común (aunque deficiente), así que consideremos eso.
Las mejores implementaciones de SHA1 en software reclaman tan solo 5,8 ciclos por byte en bloques de 1024 bytes; seamos generosos y supongamos que es tan eficiente en un solo bloque de 512 bits; eso implicaría 371.2 ciclos por bloque, o equivalentemente, por contraseña. En su procesador sugerido, que Wikipedia dice que tiene 147,600 MIPS, es muy optimista, aproximadamente 400 millones de intentos por núcleo por segundo, o un poco menos de 2,3 mil millones por segundo para todo el procesador. Tenga en cuenta que estos son muy optimistas, pero deberían estar en el estadio, al menos.
Otra posibilidad es el hardware dedicado: esta afirma que se ejecuta en un FPGA, hace 82 ciclos de reloj por bloque y funciona a 350mhz, lo que no suena impresionante con solo 4,2 millones de intentos por segundo, hasta que considera que solo 14,500 puertas por núcleo , puedes construir muchos de estos en el tamaño de un Core i7.
También tenga en cuenta que un buen esquema de hash de contraseñas repetirá la contraseña repetidamente, cientos o incluso miles de veces, lo que aumentará la cantidad de trabajo que tiene que hacer por el mismo factor.
Sin embargo, todo esto es algo irrelevante si no tiene acceso al hash de contraseña, que a menudo no tendría. En esa situación, está limitado por la velocidad con la que puede hacer conjeturas, y un sistema bien diseñado detectará fácilmente su ataque de fuerza bruta y lo cortará, haciendo que el tamaño de la contraseña sea algo irrelevante.
Otro enfoque consistiría en obtener un hash de mi contraseña almacenada por los sistemas operativos y luego buscar colisiones. Dependiendo del tipo de hash utilizado, podríamos obtener la contraseña mucho más rápido que por el ataque de fuerza bruta. Una cantidad de preguntas sobre esto:
¿Es correcta la afirmación en la oración anterior?
No exactamente. Parece que ya asumes que tienes el hash de la contraseña en la primera pregunta. Un ataque de fuerza bruta busca todas las contraseñas posibles, no son dos cosas distintas.
¿Cómo puedo pensar en el tiempo que lleva encontrar colisiones para hash MD4, MD5, etc.?
Actualmente no se conocen ataques de preimagen prácticos para MD5 o SHA1. No estoy seguro acerca de MD4, pero nadie en su sano juicio debería usarlo ahora.
Y finalmente, independientemente de la solidez del cifrado de archivos usando AES-128/256, el enlace débil sigue siendo mi contraseña de en / descifrado utilizada. Incluso si romper el texto cifrado llevaría más tiempo que la vida del universo, un ataque de fuerza bruta en mi contraseña de de / cifrado (adivinar contraseña, luego intentar descifrar el archivo, probar la próxima contraseña ...), podría tener éxito mucho antes que el final del universo ¿Es eso correcto?
Correcto, por lo que los buenos sistemas de cifrado no encriptan los mensajes directamente con una clave generada por contraseña, sino que usan otros sistemas como claves públicas de cifrado, requiriendo que el atacante primero obtenga su clave privada (lo cual debería ser difícil en primer lugar ), luego intente descifrar la contraseña sobre eso.
No estoy seguro de a qué ''afirmación'' te refieres? Por supuesto, podría ser más rápido. Sin embargo, en general, no tiene que preocuparse por usar el método hash como vector de ataque. Encontrar estas colisiones debería ser teóricamente extremadamente difícil (léase: poco práctico), pero si alguna vez hubo un algoritmo para determinar rápidamente una colisión, entonces el algoritmo hash correspondiente es simple y simplemente está roto y todas las aplicaciones que dependen de él tendrían que cambiarlo por otro.
Tu no Debería limitarse a usar algoritmos que no se sabe que están rotos. Por ejemplo, MD5 y SHA1 se consideran rotos. Aunque no parece haber una aplicación realmente eficiente disponible para encontrar colisiones, los investigadores creen que puede estar a la vuelta de la esquina. Actualmente, f.ex. el ataque de preimagen mejor conocido en MD5 tiene una complejidad de 2 a la potencia de algo mayor que 100. Considerando que esto es más que el número de átomos en el universo, pero ya se considera inseguro, ni siquiera tiene que preocuparse por aquellos Algoritmos considerados seguros.
No hay idea allí.
Y sí, en términos de ataques de fuerza bruta, todavía considero el enfoque de adivinar-intentar-adivinar de nuevo como el más practicable.
Para aclarar un poco su cabeza, considere esto: ¿Por cuánto tiempo quiere almacenar información de forma segura? La mayoría de las veces, uno o dos años es todo lo que se necesita realmente, en cuyo caso un AES-256 normal debería aguantar bien. Si necesita mayor seguridad, debe buscar las claves más grandes posibles y esperar lo mejor, pero no habrá garantía. Y ni siquiera el infame one-time-pad te salvará de ese problema.
El problema más grande con las contraseñas es que muy rara vez son realmente al azar. Muchas personas utilizarán palabras completas o parciales en sus contraseñas, lo que significa que hay ataques que utilizan diccionarios que reducen en gran medida el espacio sobre el que deben buscarse las posibles contraseñas. Incluso cuando una persona genera una contraseña ''aleatoriamente'' (sin ayuda mecánica, como un generador pseudoaleatorio), tenemos sesgos inconscientes que influyen en cómo tratamos de hacer algo ''aleatorio'', que puede ser explotado por los atacantes.
Otro problema es que las personas suelen usar las mismas contraseñas para numerosos inicios de sesión diferentes. No todos los inicios de sesión son criptográficamente seguros; de hecho, todavía hay aplicaciones que transmiten contraseñas en texto plano. También son vulnerables a la captura mediante registradores de pulsaciones de teclas, que a menudo pueden transmitirse mediante vectores aparentemente inocuos, como las memorias USB.
No puedo responder las preguntas cuantitativas, pero:
El cálculo de las posibilidades de una contraseña de 8 caracteres asume que todas las combinaciones son posibles, incluidas las que son muy difíciles de recordar o escribir. Generalmente, este tipo de contraseña tiende a estar en algún tipo de contenedor cifrado con otras contraseñas. Las contraseñas que usan las personas tienden a vivir en una parte más pequeña de ese rango. Sin mencionar que 7.2E15 no es suficiente contra un atacante determinado.
Los buenos sistemas operativos intentan ocultar las contraseñas reales lo mejor que pueden, y además saltan las contraseñas insertando algunos caracteres aleatorios en el hash de la contraseña (y, por supuesto, guardando la sal). Esto significa que hacer una "tabla arcoíris" de hashes de contraseñas probables es mucho menos práctico.
Sin embargo, lo que debe considerar es la amenaza, y aquí hay cuatro componentes importantes.
¿Contra quién te estás defendiendo? Hay una gran diferencia entre el chico adolescente de la calle y la NSA. El script kiddie intentará cosas que se transmiten por Internet en su casa, mientras que la NSA utilizará expertos y montones de poder de cómputo. Todos los demás están en el medio.
¿Qué tan directamente estás apuntado? Si un intruso intenta encontrar una cuenta en un sistema, su contraseña no tiene que ser irrompible, simplemente mucho más difícil que la cuenta más débil del sistema.
¿Cuánto tiempo esperas para mantener a los intrusos fuera? Parte de la información estará obsoleta dentro de dos años, otra información podría ser mucho más importante. Como corolario, ¿cuán determinado es el atacante esperado?
¿Qué tan malo sería si tu cuenta se rompiera? Si ingresas a mi cuenta de Facebook, podrás publicar cosas que supuestamente proceden de mí, y aparte de eso, no obtendrás información que no sea de fácil acceso. Si entraste en una de mis cuentas bancarias en línea, estaría mucho más preocupado.
Esta es una actualización de mi progreso en esta pregunta hasta el momento.
La cantidad de instrucciones del procesador que toma un solo ciclo de adivinar + descifrar la contraseña depende, por supuesto, del hardware y del algoritmo de desencriptación. No estoy seguro de cómo pensar sobre esto correctamente, pero creo que uno de esos ciclos podría tomar alrededor de 1,000 instrucciones. Ahora, si tomamos una CPU Intel Core i7 Extreme que es capaz de 150,000 MIPS, entonces esto nos da 150,000,000 de intentos por segundo que puede llevar a cabo una PC que puede comprar fácilmente hoy en día.
Por lo tanto, para una contraseña como se describe en la pregunta (por ejemplo, la contraseña de un archivo encriptado AES256), un intento de fuerza bruta para romperla, podría tener éxito en menos de 556 días.
Si la suposición de 1,000 instrucciones para un ciclo de adivinar y descifrar es correcta, entonces una sola PC estándar que pueda comprar hoy puede descifrar esa contraseña para sus archivos encriptados AES256 en menos de dos años. Uf, el acertijo está resuelto.
Mi conclusión sería que un carácter alfanumérico + símbolos de ocho dígitos es suficiente para la mayoría de los propósitos prácticos. Y en dos años, todos tendremos que aprender a recordar contraseñas aún más largas :-)