Giter Site home page Giter Site logo

hpc's Introduction

HPC

Parallel Brute Force Algorithm

Autores

El equipo será conformado por:

Daniel Enrique Hernández Stalhuth

Ricardo Ocampo Castro

Alejandro Gil

Problema o caso de estudio a resolver

En temas de seguridad existe un algoritmo conocido como Brute-Force (Fuerza bruta) generalmente usado para descifrar contraseñas (Crackear) que consiste en probar uno a uno caracteres sobre una posición específica del espacio de la contraseña. A este uso del algoritmo se le conoce como Brute Force attack y es una de las formas más lentas y menos precisas de descifrar una clave, pues se debe ensayar cada una de las posibles opciones que hay disponibles en el arreglo de caracteres.

Objetivos-y-alcance

Para este proyecto el equipo de trabajo se concentrará en mejorar el rendimiento de este algoritmo haciendo uso del paralelismo, con herramientas como OpenMP y MPI para lograr reducir tiempos de ejecución. El objetivo final sería lograr una relación inversamente proporcional entre los núcleos de la máquina y el tiempo de ejecución.

Requerimientos-técnicos

La programación en paralelo ofrece una herramienta computacional imprescindible para aprovechar el uso de múltiples procesadores y en la resolución de problemas que no pueden resolverse mediante técnicas clásicas. En el proceso de diseño de programas paralelos hay que tener en cuenta lo siguiente:

  • Descomposición: involucra el proceso de dividir el problema y la solución en partes más pequeñas. Es decir, determinar qué parte del software realiza qué tarea.
  • Comunicación: se debe determinar cómo se lleva a cabo la comunicación entre los distintos procesos o computadoras, cómo sabe un componente de software cuando otro terminó o falló, como se solicita un servicio a otro componente, que componente debe iniciar la ejecución, etc.
  • Sincronización: se debe determinar el orden de ejecución de los componentes, si todos los componentes inician su ejecución simultáneamente, o alguno debe esperar mientras otros trabajan, etc.

De lo anterior es posible identificar los siguientes obstáculos que surgen al programar en paralelo:

  • Dividir el trabajo de forma eficiente y efectiva entre dos o más componentes del software
  • Implementar una comunicación adecuada para entre los componentes
  • Implementar la coordinación de la ejecución paralela de los componentes
  • Manejar excepciones, errores y fallas que puedan surgir

Para todo lo mencionado, se deben tomar en cuento unos requerimientos mínimos para el funcionamiento correcto de la programación en paralelo:

  • Requerimientos mínimos de hardware: Computador con mínimos 2 núcleos de procesador. para lograr evidenciar un cambio en el manejo de la paralelización entre cores.

Plan-de-trabajo

Inicialmente se desarrollará el algoritmo Brute Force de manera serial, se tomarán los tiempos de ejecución para luego pasar a desarrollar el mismo algoritmo de manera paralela, haciendo uso de OpenMP con lo que posteriormente se pasará a comparar estos tiempos para ver en qué casos sí es justificado el uso de paralelismo y en casos no. Con ello pasaremos a describir algunas conclusiones del proyecto.

Compilación, ejecución y análisis

Serial

Para el codigo en serial, la compilacion es:

  • g++ -o main.exe BruteCrack.cpp

Para ejecutarse, en el terminal se usa lo siguiente:

  • ./main.exe

Paralelo

Para el codigo en paralelo, la compilación en el terminal es la siguiente:

  • g++ -o main.exe BruteCrackParallel.cpp -fopenmp

Para ejecutarse, se utiliza en el terminal:

  • ./main.exe

En cuanto al análisis, cuando se hacen procesos muy pequeños es probable que el programa serial sea más eficiente ya que no tarda mucho el proceso en conseguir un resultado. Al ejecutar el programa en paralelo, trabaja de forma más eficiente debido a que divide los nucleos para trabajar y crackear la contraseña estipulada con una forma denominada fuerza bruta, teniendo dos o más nucleos buscando de forma simultánea la contraseña. Cuando el programa encuentra una secuencia de carácteres igual a la contraseña, el nucleo envía una señal que indica al programa a terminar la búsqueda y continuar con el programa demostrado cual es la contraseña.

Links a Youtube

Referencias

Conclusiones

Se hizo evidente que no siempre paralelizar es la opción más rápida para resolver un problema, siempre y cuando no sea complejo el proceso (ejemplo 0000 o a0a0), al realizar un proceso que no exije tanto puede ser incluso mejor que de manera serial sea la forma más óptima en este caso, en el que en casos específicos simplemente el tiempo que se ahorra no es significativo en comparación con una solución serial. Cuando se realiza un proceso más complejo ya sea con más dificultad en los carácteres o más extenso (ejemplo, jaaa, h2mx), utilizar paralelismo siempre va a ser viable y más óptimo, y mientras de más núcleos se disponga, más eficiente va a ser la ejecución.

Se comenzó a experimentar con la librería de Multiprocessing de Python para complementar el proyecto pero por falta de tiempo no fue posible.

hpc's People

Contributors

danidehs avatar ggilmay avatar rocampocastro604 avatar

Watchers

James Cloos avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.