UTNianos

Versión completa: MD5 - Buscando claves que den el mismo resultado
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
Bueno... esto tal vez de más para El Psiquiátrico que para HW/SW, pero no importa...


Siempre tuve un trauma... Desde que vi que phpBB y algunos otros proyectos de SL en php usaban md5 para guardar los passwords, siempre quise saber qué otras claves podría usar para entrar a mi cuenta... Porque estaba convencido de que tenía que haber más de una clave que genere el mismo resultado md5...

Alguna vez intenté usar prolog para pedirle claves que se codifiquen como la mia, pero no encontré implementación de md5 en prolog (y, seguramente, iba a ser lentísimo y pesadísimo correr eso... probablemente se iba a empachar el stack)...


Así que anoche me agarró un ataque, y me puse a escribir... Y, como php es lo que mejor/más fácil me sale, en php lo hice... El código es este:

<?php
function haceloString($numero){ //recibo un integer y lo convierto a un string con "ese orden"
$respuesta="";
$caracteres='0123456789abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ _-|°!"#$%&/()=?¡*[]';
$cantidad=strlen($caracteres);
while($numero > $cantidad){ //esto lo aprendí cuando SGP nos enseñó a sumar en discreta (-:
$respuesta.=$caracteres[$numero % $cantidad];
$numero = intval($numero / $cantidad);
}
$respuesta=$caracteres[$numero].$respuesta;
return $respuesta;
}
if($_GET['inicio']!=null) //si no tengo nada en inicio, es porque recién entro. osea, pongo 0. sino, arranco desde inicio
$inicio = $_GET['inicio'];
else
$inicio=0;
$fin = $inicio + 500; //termino 500 números después
$archivo = fopen('respuestas.txt','a');//abro el archivo para appendarle cosas
fwrite($archivo,"Empiezo en $inicio\n");
for($i=$inicio;$i<$fin;$i++){
$jose = haceloString($i);
fwrite($archivo,md5($jose)."\t$jose\n");//escribo cada string y su conversión a md5
}
fwrite($archivo,"Termino en $fin\n");
fclose($archivo);
echo "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"5; URL=?inicio=".++$fin."\]"; //hago refresh en 5 segundos para que la compu descanse y que empieze donde terminé (-:
?>



Cuestión que lo dejé ejecutando anoche, a las 4am habrá arrancado... y estuvo hasta hace un rato...

110 hermosos MB de códigos md5 y strings raros, que creo que recién iban por 4 caracteres de longitud...

Ahora mismo, gEdit está intentando ordenar el archivo, para buscar duplicados más facilmente...


Como vi que, a pesar de haber hecho bastante, sigue faltando mucho, me pasé al lado de las matemáticas...

un hash en md5 son 32 caracteres hexadecimales... osea, 32 caracteres con 16 posibilidades cada uno... osea, 32^16 = 1208925819614629174706176 (1,2 . 10^24 - un poquito más que dos moles =) )

viendo ese número (y la conversión a moles) me dio miedito... pensé que mi teoría se caía...

pero no... con 8 caracteres de longitud y los 48 posibles caracteres que elegí para mi script (creo que son todos legales en un password), las posibles combinaciones son 7237005577332262213973186563042994240829374041602535252466099000494570602496... un poquito más grande el número... y eso sólo con las pass de 8 caracteres (osea, no incluye las de 7, 6, 5...)


así que confirmé lo que ya sabía, pero voy a seguir buscando cuáles son los otros pass que matchean con el mio...


aburrido yo?


salutes!
[Imagen: geek-gang-signs.jpg]

A mi también me habia agarrado el ataque md5 hace un tiempo, lo reemplacé por el uso de keyloggers lol

Una vuelta encontré un pdf muy copado de md5, con varias funciones ya codeadas explicadas y todo ademas de explicar a fondo el algoritmo... pero no tengo idea donde fue a parar =P
http://es.wikipedia.org/wiki/MD5#Seguridad

ya lo vulneraron, mediante ataques de fuerza bruta, y tablas rainbow, si no entendi mal.

http://www.securiteam.com/tools/5XP0X0040G.html <- cracker en php

se me ocurre que si vas a buscar duplicados deberias guradarlo en alguna forma ordenada.

poruqe no probas haciendolo en haskell? si algo le entendi a spigariol es que para este tipo de calculos funcional es lo mejor.

27d7cc8cd45daee62938fa13ea8eef19 4o($
Termino en 2885258



hasta acá llegué con el cálculo...

así que todavía me falta bastante para llegar a los 1,2 .10^24 =P



en la página de wikipedia aparece una md5db... voy a ver qué onda (osea, debe ser esto mismo, pero desde antes, más ordenado, y con más recursos..)

y pensé en guardar los resultados ordenados, pero me pareció que alentecía demasiado el proceso... preferí ordenarlo después de tener todos los resultados juntos, para hacer el ordenamiento una única vez (es más rápido que hacer un "insertarOrdenado" de cuello =P)

lo que pensé fue en separar los resultados en 16 archivos de texto, ordenando según el caracter inicial del hash... tal vez lo haga...

y también modificar el límite... no hacer el ciclo hasta 500 veces, sino tener el proceso corriendo 15 o 20 segundos, y 5 que pare...


por qué no haskell? porque no se si existe md5, y, en caso de existir, no hay mucho más cálculo funcional que ese... y ni idea cómo escribir archivos y toda esa cosa en haskell... osea, no hay ganancia...
De puro ignorante:

En haskell no seria algo infinitamente lento?

Creo que te conviene usar algun lenguaje mas tipo-C, envez de algo interpretado (como php o haskell).

Si tenes varias PCs en tu casa, podes hacer que cada una busque desde X valor. Hace unos dias en la casa de uno de los chicos (reyiyo) teniamos unas 4 o 5 maquinas (entre K6 y pentium 2)... las desarmamos porque el proyecto que teniamos pensado se cayo... de haber sabido antes, las conectabamos y haciamos el experimento =P.


Deberias de optimizar todo al mango (no solo el codigo, tambien meterle, un SO liviano, y si es monotarea, mejor)... pero creo que igual vas a tardar uno largo rato =P...

Por ultimo... habria que ver como es el algoritmo en si, ya que talvez estas repitiendo el calculo de informacion. (osea, suponiendo que es algo asi como un Checksum, si tenes la cadena "ABCDE" y la cadena "ABCDEMANZANA", el calculo del checksum de "ABCDE" ya lo hiciste). Igual, por google se que podes conseguir tablas MD5, dejando que el cluster de google haga el trabajo por vos.


Perdon si estoy diciendo giladas... el laburo ya me tiene quemado =P
sí, haskell no da ganancia...

y, no... creo que la joda del md5 es que hacerle md5 a "a", a "b" y a "ab" no se parecen ni un poquito...

Cita:0cc175b9c0f1b6a831c399e269772661 md5('a')
92eb5ffee6ae2fec3ad71c777531578f md5('b')
187ef4436122d1cc2f40dc2b92f0eba0 md5('ab')


el tema más crucial es todo el rígido que se necesita... ando MUY escaso de espacio en disco...

pero buen, seguiré jugando... hoy busqué si mi password (de 6 caracteres) se podía sacar con otra clave de 1, 2, 3, 4 o 5 caracteres, y no.. no salía...

y con las de 6 caracteres tarda BAAAAAANDA de tiempo en probar... 9600 claves por segundo probaba...
tengo un conocido con un i7 a 4.0ghz y raid de 5 ssd...
si queres le robamos la maquina

Off-topic:
count me in
ninja
todo sea por la ciencia
Eaz, sería un honor...

habría que adaptar el scriptcito a C, para hacerlo más eficiente todavía...
Bueno, si alguien sabe programar screensavers, todos los utnianos podriamos hacer un cluster como SETI@HOME.

Si alguien tiene alguna fuente de la cual aprender, me ofrezco como programador =P.
Obviamente... pero eso si, nunca perdamos el objetivo principal... bajar pornografía mucho más rápido (?)
ebric escribió:Obviamente... pero eso si, nunca perdamos el objetivo principal... bajar pornografía mucho más rápido (?)

No hace falta que bajes nada de eso....

No se pueden poner links a sitios de pornografía. Lean el reglamento por favor. Saludos, LeandroDG.

Despues conta como te fue jejeje
you name it
you got it

que necesitamos -> http://es.wikipedia.org/wiki/Berkeley_O ... _Computing
como se instala -> http://docs.google.com/Doc?id=dfjfhhdk_49gd7zsnfc

igualmente yo creo que alguien ya deber tener las tablas hechas...
ElChacal escribió:
ebric escribió:Obviamente... pero eso si, nunca perdamos el objetivo principal... bajar pornografía mucho más rápido (?)

No hace falta que bajes nada de eso....

No se pueden poner links a sitios de pornografía. Lean el reglamento por favor. Saludos, LeandroDG.

Despues conta como te fue jejeje

Perdon!!!!
updateé el script:


<?php
function haceloString($numero){
$respuesta="";
$caracteres='0123456789abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ _-|°!"#$%&/()=?¡*[]';
$cantidad=strlen($caracteres);
while($numero > $cantidad){
$respuesta.=$caracteres[$numero % $cantidad];
$numero = intval($numero / $cantidad);
}
$respuesta=$caracteres[$numero].$respuesta;
return $respuesta;
}
if($_GET['inicio']!=null)
$i = $_GET['inicio'];
else
$i=0;
$tiempo_fin = time() + 15;
$archivo = fopen('respuestas.txt','a');
$log = fopen('control.txt','a');
fwrite($archivo,"Empiezo en $i\n");
fwrite($log,"Empiezo en $i\n");
while(time() < $tiempo_fin){
$jose = haceloString($i++);
fwrite($archivo,md5($jose)."\t$jose\n");
}
fwrite($archivo,"Termino en $i\n");
fwrite($log,"Termino en $i\n");
fclose($archivo);
fclose($log);
echo "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"3; URL=?inicio=".$i."\]";
?>



cambios:
* ahora la condición de corte son 15 segundos en lugar de 500 claves (en 15 segundos en una buena máquina hacés como 140mb de archivo (osea, muchas claves)
+ escribe un archivo de control aparte, para saber en dónde terminamos cuando se nos llenó el disco ( :jeje: ) sin tener que abrir un archivo gigantosauresco


en minutitos (muy pocos minutitos) llené los 700mb libres que tenía en esta máquina (un "Celeron M 440 @ 1.86 GHz", según Ubuntu - nunca supe los modelos de intel)... y en pocas horas (2?) llené los 1.8GB libres de un duron 1300 (@890 MHz)

osea, el script es rápido... se puede optimizar más, seguramente... pero tampoco es lento... en el duron, en 2 llenadas de disco (osea, 4hs aprox) llegó hasta el 50836875 (osea, en string sería "2885258d"... 8 digitos O.o)

el tema es el disco...

en estos días tengo que comprar rígido, así que... muejejeje

(sí, después me lo meto en el *"#%"%U/% el archivo gigantesco ese... pero buen xD)
Páginas: 1 2
URLs de referencia