martes, 26 de junio de 2012

Curiosidades BruteForce

Hace unos días andaba algo interezado en criptografia y computo de alto rendimiento, me dio la curiosidad de realizar un BruteForce para MD5 y verificar los tiempos que tarda en romper palabras muy simples en diferentes plataformas, arquitecturas y modelos de ejecución, el algoritmo es muy simple(lo adjunto), pero hubo algo que me dio una gran sorpresa...

Inicialmente empezé con el algoritmo utilizando C#, debido a que es uno de mis lenguajes favoritos aunque solo pensaba utilizarlo para probar el algoritmo, posteriormente me percate de que funcionaba muy bien, tenia un rango de comprobación de palabras con buenos tiempos aun para ser un lenguaje precompilado y me propuse a portar el algoritmo a ANSI C++ y compilarlo para la plataforma Windows nativa a 64 bits con lo cual debería darme mejores resultados teniendo mi creencia que los lenguajes precompilados e interpretados son considerablemente mas lentos que los nativos, mi sorpresa fue la siguiente:

C++
C#

Podemos observar que el mismo algoritmo implementado sobre C# realiza la tarea de fuerza bruta considerablemente mas rapido que en C++ utilizando el mismo hash de entrada ademas de que el tiempo requerido para la tarea, es exponencial, si pongo como palabra de entrada "zzzzzz" el tiempo que tarda C++ 64 bits en realizarlo es 15 veces mas de lo que C# requiere.

esto habla muy bien de la optimización de C#, aunque pretendo realizar el algoritmo con soporte multicore utilizando la GPU(NVIDIA CUDA), utilizando Cores del procesador, asi como migrar este algoritmo a JAVA y a Linux para realizar una comparación sobre mas plataformas, ademas de añadir mas algoritmos de encriptación y una interfaz grafica una vez que determine sobre que plataforma, arquitectura y modelo de ejecución son los mas convenientes.

No hay comentarios:

Hooks en React (I), Utilizar el estado en componentes Stateless.

¿Qué son los Hooks? Los hooks son una nueva característica agregada a React (16.8), la cual consiste en un conjunto de funciones que nos p...