PDA

Ver la versión completa : GPU vs CPU para análisis de contraseñas



LUK
15-01-2010, 10:56
El análisis de contraseñas es un proceso de los denominados “embarrassingly parallel workload (1)”, donde se puede dividir el problema inicial en subtareas totalmente independientes entre sí de forma trivial. En este caso, el análisis de una contraseña se puede dividir en tantos subprocesos como claves se quieran analizar.

La mayoría de los algoritmos de cifrado utilizados actualmente realizan operaciones simples para crear un hash a partir de una contraseña (operaciones sobre tipo de datos enteros que normalmente se ejecutan en la ALU (unidad aritmético lógica (2)) de los procesadores).

Además, las GPUs han pasado de sólo poder ejecutar tareas muy específicas a poder ejecutar tareas más generales. El cambio más notable se produjo con la introducción del hardware DX10 donde las unidades de geometría, procesado de píxeles y de vértices se cambiaron por los denominados “Unified Shaders (3)” y por un sistema de control de flujo más flexible.


Rendimiento teórico CPU
Los procesadores más rápidos disponibles actualmente en equipos de usuario son los Intel Core i7. Estos procesadores pueden ejecutar hasta 3 operaciones en la ALU por ciclo de reloj. Además, para maximizar el rendimiento es necesario utilizar las extensiones SSE y así poder utilizar los registros de 128bit divididos en 4 operandos de 32bit. De pico pueden ejecutar hasta 12 instrucciones / ciclo de reloj por core. En un quad core serían 48 instrucciones por ciclo.


Rendimiento teórico GPU
La GPU actual más rápida para análisis de contraseñas es el chip RV870 de las ATI 5970 (2 GPU) y ATI 5870 (1 GPU).

Esta GPU consta de 20 motores SIMD, cada motor tiene 16 procesadores y cada procesador tiene 5 stream cores. Cada stream core puede ejecutar una instrucción por ciclo de reloj con lo que el pico máximo teórico sería de 1600 instrucciones por ciclo de reloj (4).


http://img211.imageshack.us/img211/8614/cpugpu.png


Rendimiento en real life.

Existen muchos programas de análisis de contraseñas para CPU. Los hay que soportan muchos algoritmos diferentes (John the Ripper + Jumbo Patch, Cain, etc.), los hay que se especializan en algoritmos concretos programándolos de forma más eficiente (BarsWF (5) para MD5, Cacheebr para MSCache (6), etc).

Para la GPU RV870 el mejor programa actual que he visto es el IGHASHGPU (7). Soporta los algoritmos de cifrado siguientes:

•· MD4, MD5, SHA1
•· NTLM
•· MS Cache
•· MySQL5
•· MS SQL
•· vBulletin
•· Invision Power Board
•· Oracle 11g
•· Alguno más con MD5 anidados con salts

IGHASHGPU no tiene implementada la versión en CPU de los algoritmos de cifrado con lo que para poder comparar la velocidad de análisis hay que hacerlo contra programas diferentes.

Tests de rendimiento
El hardware utilizado para la comparativa de velocidad fue una ATI 5870 a 850MHz para las pruebas de GPU y un Intel Core 2 DUO a 2.0 GHz para las pruebas de CPU.


http://img685.imageshack.us/img685/3516/tablas.jpg

Como puede apreciarse, aquellos algoritmos que pueden ejecutarse de forma eficiente en una GPU ofrecen un rendimiento varias decenas de veces superior al de una CPU debido a la cantidad de ALUs disponibles y que los algoritmos usados son simples, apenas acceden a memoria y no requieren de un sistema de predicción de saltos complejo.

Hay otros algoritmos de cifrado, como DES, que no se ejecutan de forma eficiente en las GPUs actuales con lo que su análisis habrá que seguir dejándolo, por ahora, para las CPUs.

Links relacionados
(1) http://en.wikipedia.org/wiki/Embarrassingly_paralle
(2) http://en.wikipedia.org/wiki/Arithmetic_logic_unit
(3) http://en.wikipedia.org/wiki/Unified_shader_model
(4) http://www.anandtech.com/video/showdoc.aspx?i=3643&p=5
(5) http://3.14.by/en/md5
(6) http://blog.distracted.nl/2009/05/cacheebr-ms-cache-password-brute-forcer.html
(7) http://www.golubev.com/hashgpu.htm


S21sec, Departamento de Auditorías
http://blog.s21sec.com/2010/01/gpu-vs-cpu-para-analisis-de-contrasenas.html

Marchi
15-01-2010, 18:27
Muy bueno el post LUK.

Ha sido un gran acierto poner a disposición semejante capacidad de cálculo de las actuales placas de video para otros fines, como hizo nvidia con CUDA y mas tarde ATI con ASC.

Si bien es cierto que no cualquier aplicación puede hace un óptimo uso de una gpu actual, no es el caso de la fuerza bruta sobre algoritmos relativamente simples en cuanto al flujo del programa y al hecho de hacer uso de operaciones básicas a nivel de bit y aritméticas entre enteros (incluso md5 puede escribirse sin multiplicaciones ni divisiones ni restas).


El caso de DES es diferente a md5 y sha1 partiendo ya en que uno es un algoritmo de cifrado mientras que los otros son funciones resumen (hash functions).


Saludos