¿cuánto tiempo lleva generar tablas arco iris?

27

He estado leyendo sobre las tablas del arco iris porque creo que son bastante interesantes porque en realidad son un concepto bastante simple.

De todos modos, me preguntaba, ¿alguien ha participado en la generación de uno? ¿Cómo es posible que se haga? Simplemente no veo cómo es posible generar cada combinación de cada personaje.

Si excluimos caracteres especiales, hay una cantidad de estos caracteres.

ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTU VWXYZ 1234567890

Eso suena como que hay 26 + 26 + 10 = 62 caracteres

Eso significa que una contraseña de longitud 8 tiene 62 ^ 8 combinaciones.

que es igual a 218340105584896

Eso solo suena como que llevaría mucho tiempo en generarse. ¿Qué pasa cuando aumentamos el número de caracteres a 12 y agregamos los caracteres especiales (digamos que hay otros 10 solo mirando los caracteres que se obtienen al presionar la tecla de mayúsculas)?

Obtendríamos 72 ^ 12 = 19408409961765342806016

ese es un número que es lo suficientemente grande como para que demore años en obtenerlo.

    
pregunta stickman 29.04.2011 - 09:27
fuente

4 respuestas

30

Una tabla de arco iris es "solo" una representación compacta de una tabla de valores hash precalculados. Durante la construcción de la tabla del arco iris, se prueban y se procesan muchas entradas posibles. Cada entrada que se haya encontrado durante la construcción de la tabla será atacada con éxito con esa tabla, y ninguna otra. La evaluación de hash concentra la mayor parte del costo de construcción de la tabla.

Entonces, básicamente, el costo de construir una tabla de arco iris que puede invertir las contraseñas de N es aproximadamente equivalente al costo de probar esas contraseñas de N a través de la función hash: el punto de la tabla del arco iris es que la construyes una vez y luego la uses para romper varias contraseñas. (Para ser precisos, debido a las colisiones de la cadena durante la construcción de la mesa, el costo es, de hecho, más cercano a 1.7 * N , pero ignoremos eso por el momento).

Una vez he hecho algunas experiencias con SHA-1. Un simple hash de contraseña con SHA-1 tiene el costo de procesar un solo "bloque" (SHA-1, como MD5, procesa datos por bloques de 64 bytes), que necesita aproximadamente 900 operaciones lógicas o aritméticas de 32 bits. Una implementación optimizada en un procesador Intel Core2 x86 puede hacer eso en aproximadamente 500 ciclos de reloj. Sin embargo, los ataques de contraseña (ya sea directamente o para la construcción de tablas de arco iris, no importa) son un trabajo altamente paralelo, por lo que uno podría usar las instrucciones SSE2 que ofrecen registros de 128 bits, y donde un solo código de operación puede realizar cuatro operaciones de 32 bits simultáneamente. SSE2 tiene menos tipos de operaciones disponibles (en particular, no ofrece rotaciones, solo cambios), por lo que el recuento de operaciones aumenta a aproximadamente 1200; pero, bajo ciertas condiciones, la unidad SSE2 ejecutará varios códigos de operación simultáneamente. Así que terminamos con 800 ciclos de reloj, para cuatro instancias de SHA-1 en paralelo. En pocas palabras: mi PC es una Intel Core2 Q6600, con cuatro núcleos que funcionan a 2.4 GHz. Cada núcleo puede ejecutar mi implementación SSE2, lo que da como resultado 48 millones de contraseñas con hash por segundo.

También tengo una tarjeta gráfica Nvidia no muy pequeña, y la GPU puede ejecutar código arbitrario a través de CUDA . Este es un 9800 GTX +, con 128 núcleos funcionando a 1.84 GHz. Cada núcleo puede ejecutar una operación de 32 bits por ciclo (hay una alta latencia, pero, gracias a la alta paralelización, se puede mantener este rendimiento de una instrucción por ciclo). Los núcleos no conocen las rotaciones, por lo que cada código utilizará 1200 ciclos de reloj por contraseña con hash. El rendimiento total es de 160 millones de contraseñas con hash por segundo.

Mi PC y la tarjeta gráfica son de principios de 2009 y no son de primera línea. Hoy en día se puede encontrar, por unos pocos cientos de dólares, una GPU que procesará las contraseñas tres veces más rápido que mi 9800 GTX +. Así que supongamos que un atacante con una PC común (que cuesta menos de $ 1000) puede hash de medio billón de contraseñas por segundo.

A esa velocidad, todas las contraseñas con 8 caracteres alfanuméricos (letras mayúsculas y minúsculas y dígitos) se pasan en aproximadamente 5 días . Con una PC de 1000 $. Si usa MD5, las cosas son aproximadamente un 30% más rápidas (MD5 usa un poco menos operaciones que SHA-1). Sin embargo, los buenos esquemas de hash de contraseñas no utilizan una invocación de hash simple: usan hash iterado con, por ejemplo, 2000 invocaciones de hash anidadas: esto multiplica el costo para el atacante por el mismo factor de 2000 (por lo que convierte los "5 días" en aproximadamente 28 años, literalmente "edades" como lo pones).

    
respondido por el Thomas Pornin 29.04.2011 - 15:59
fuente
18

¿Cuánto tiempo se tarda en generar una tabla de arco iris para un hash muy simple, utilizando una sola iteración? ¡Lleva una hora! O menos, si lo deseas.

Si bien las respuestas anteriores son totalmente correctas, hay un desarrollo importante que no mencionan. Amazon EC2 y otros proveedores de servidores 'cloud computing'.

Hoy en día, todos los que tengan una tarjeta de crédito pueden ir a aws.amazon.com y enviar un varias instancias puntuales de EC2 , por menos de cien dólares. O si tiene un buen código CUDA disponible, alquile 50 de las instancias "Cluster GPU" más caras de Amazon con dos procesadores gráficos NVIDIA Tesla M2050.

(Algo parecido a las aerolíneas, Amazon tiene precios diferenciados. Si necesita un servidor EC2 específico con disponibilidad garantizada, los precios son más altos. Por ejemplo, puede obtener una instancia "Hi-CPU Large" con 8 núcleos de CPU virtuales para 0,68 USD por hora. Si está dispuesto a comprar la misma instancia que el exceso de permisos de suministro en las horas libres, puede obtenerla con 40% -50% de reembolso .)

La creación de tablas de arco iris se puede hacer en paralelo con un aumento de rendimiento lineal, es decir, con 100 computadoras funcionando, es 100 veces más rápido que una sola computadora.

Amazon no te cobra por instancia, cobra por hora de instancia. Por lo tanto, ejecutar 1,000 servidores por una hora cuesta lo mismo que un servidor por 1,000 horas.

La naturaleza paralela de la creación de tablas de arco iris, tomada junto con servicios como Amazon EC2, significa que ya no existe la pregunta de "cuánto tiempo se tarda". Existe un "cuánto está dispuesto a pagar para obtenerlo rápido , en lugar de pagar menos y obtenerlo en unos pocos días?". La diferencia en costo y amp; el tiempo proviene principalmente de la diferenciación de precios de Amazon entre las instancias "regulares" de EC2 frente a las "instancias puntuales" más baratas.

    
respondido por el Jesper Mortensen 30.04.2011 - 09:47
fuente
6

Usando una prueba simple de 26 ^ 5, pude generar una tabla hexadecimal ascii en Ruby que generó 228488 salidas MD5 por segundo. Todas las 11881376 entradas tardaron 52 segundos en mi Core i7 de 1.5 años. Si no hice ninguna mejora en mi programa, esperaría que se ejecute durante 26 semanas para generar su lista de 62 ^ 8.

Probablemente podría realizar mejoras en mi programa ejecutando ocho programas separados, uno por hipervínculo, para particionar el espacio del problema. Si cada programa guardara la salida en su propia unidad, no competirían por el ancho de banda de IO. Esperaría un factor de aceleración de cuatro a seis en comparación con mi estúpido programa de un solo subproceso durante 4-6 semanas de tiempo de ejecución. Si tuviera que volver a escribir en C, podría esperar otro factor de aceleración de 1.5. (¿Quizás más? Por un lado, es un programa simple, por otro lado, una matriz C de 13 bytes de longitud, modificada en tiempo de ejecución, probablemente se ejecutará en mucha menos memoria y, por supuesto, no habrá recolección de basura en comparación con la creación y destrucción de Objetos de cadena de rubí.)

Espero que el trabajo de una tarde y unos cuantos cientos de dólares de equipo nuevo me permitan terminar las 62 ^ 8 mesas en dos semanas en hardware básico.

Y seguro, nadie usa MD5 de ejecución única en las contraseñas; solo escala los resultados finales por mucho más costoso que sea el hash de una vía que el MD5. :)

    
respondido por el sarnold 29.04.2011 - 10:13
fuente
1

Vea los cálculos de la tasa de hash de mi red de minería de bitcoins en Cómo hacer hash de forma segura contraseñas - Seguridad de TI para lo que determinadas personas con tarjetas GPU más modernas pueden lograr en términos de hash sin procesar. La comunidad se está ejecutando a 11 Thash / s (11 * 10 ^ 12 hash / s) a principios de julio de 2011 ....

    
respondido por el nealmcb 14.07.2011 - 02:11
fuente

Lea otras preguntas en las etiquetas