Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-05-2007
Wellnic Wellnic is offline
Miembro
 
Registrado: mar 2007
Posts: 68
Poder: 18
Wellnic Va por buen camino
Talking Generador de contraseñas

Hola,
Se me ha ocurrido hacer el siguiente procedimiento para generar contraseñas prácticamente imposibles de crackear (?) a partir de palabras o frases comunes:

Código Delphi [-]
procedure TForm1.Button6Click(Sender: TObject);
Var c, hs, sumhs: String;
      x, ch: Integer;
 
begin
c:= Edit1.Text; //cadena de caracteres inicial
//RxSpinEdit3.AsInteger es el número de transformaciones de la contraseña
For x:= 1 To RxSpinEdit3.AsInteger Do
  Begin
  hs:= MD5DigestToStr(MD5String(c));
 
//en sumsh se van almacenando y desplazando los sucesivos hash generados:
//con un tamaño máximo para no provocar un desbarajuste:
  sumhs:= Copy(hs+sumhs, 1, 666);
 
//se generan los correspondientes carcteres ASCII de cada hash generado...:
//(un hash es un valor hexadecimal)
  c:='';
  For ch:=1 To Length(sumhs) Div 2 Do c:= c+Chr(StrToInt('$'+Copy(sumhs, (2*ch)-1, 2)));
//...de los que se obtendrá a su vez un nuevo hash en cada ciclo del bucle
  End;
 
c:= Base64EncodeStr(c); x:= Length(c);//resultado final en Base64
While c[x]= '=' Do Dec(x); //quita los posibles '=' del final
Edit2.Text:= Copy(c, 1, x);
end;

Como se ve, la idea es ir deformando una palabra o frase sencilla una y otra vez mediante la función MD5 (o cualquier otra). En principio, cualquier programa crackeador se verá obligado a perder el tiempo siguiendo este procedimiento para cada una de las ingentes cantidades de combinaciones de caracteres, o bien hacerlo por fuerza bruta, y como este algoritmo (?) genera contraseñas de hasta 444 caracteres como si nada...

Última edición por dec fecha: 01-05-2007 a las 22:59:48.
Responder Con Cita
  #2  
Antiguo 02-05-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Hola y gracias por el aporte.
Estaría bien (si te apetece) que lo subieras a los trucos del Clucb Delphi; Así quedaría ahí para poder consultarlo.

Otra cosas (tanto si lo subes como si no) estaría bien que comentas de dónde salen las funciones referentes a MD5;
¿En alguna Unit? ¿Paquete externo? ¿Versión de Delphi que la incluye?
Ya que si alguien intenta compilar este código (como he inentado hacerlo yo en Delphi 6) le dará el mismo error que a mi (que no encuentra esas funciones).

Un saludo y gracias de nuevo por este código.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 02-05-2007
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 22
Bicho Va por buen camino
Hola,

la verdad es que tiene muy buena pinta. Muchas gracias por el aporte.

Cita:
Empezado por Neftali
Otra cosas (tanto si lo subes como si no) estaría bien que comentas de dónde salen las funciones referentes a MD5;
¿En alguna Unit? ¿Paquete externo? ¿Versión de Delphi que la incluye?
Ya que si alguien intenta compilar este código (como he inentado hacerlo yo en Delphi 6) le dará el mismo error que a mi (que no encuentra esas funciones).
Buscando en los enlaces que ha puesto Wellnic en su código nos aparece esta dirección http://www.killa.com.ar/bk/
Y yendo un poco más allá llegamos al tema en cuestión
http://www.killa.com.ar/bk/http:/www...riptacion/Allí explica de donde saca las funciones de MD5
y en el segundo enlace www.cityinthesky.co.uk/files/dcpcrypt2.zip, estan los fuentes con la función de Base64EncodeStr.

Espero sirva de aclaración. (Si al final no voy a ser tan vago )

Saludos
Responder Con Cita
  #4  
Antiguo 02-05-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Bicho
Espero sirva de aclaración.
Sirve, sirve,...
La verdad es que copié/pegué y no me fijé que estaban los links.

Gracias.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 02-05-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Hola Wellnic,

solo un par de comentarios. Lo primero que, según tengo entendido, la fortaleza de un algoritmo de cifrado, como md5, se debe al propio algoritmo y no al numero de veces que este se repite. ¿No seria entonces mas fácil e igual de seguro usar un solo md5?, a esa cuestión nos tendría que responder un matemático, yo no me veo cualificado. Aunque se me ocurre que el motivo sea obtener claves de mas de 16 bytes de longitud y no aumentar la seguridad, si es así, ignora mi ultimo comentario

Por otro lado veo que primero calculas el md5 a partir de un string (MD5String), y lo conviertes es un string (MD5DigestToStr), para luego hacer el paso inverso (c:= c+Chr(StrToInt('$'+Copy(sumhs, (2*ch)-1, 2)));) ¿No nos podríamos ahorrar este paso?

La idea es interesante. Si necesitas de una función para calcular el hash md5 que puedas adaptar a tus necesidades puedes usar esta (Hashes.zip):

http://www.clubdelphi.com/foros/show...22&postcount=4

Es sencilla así que puedes modificarla fácilmente.
Responder Con Cita
  #6  
Antiguo 02-05-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por seoane
(c:= c+Chr(StrToInt('$'+Copy(sumhs, (2*ch)-1, 2)));) ¿No nos podríamos ahorrar este paso?
¿la cuestión no era marear al cracker? ... no sé yo no he mirado mucho el código.

SAludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 02-05-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por Lepe
¿la cuestión no era marear al cracker? ... no sé yo no he mirado mucho el código.
Un "cracker" no creo que se moleste tanto, simplemente parcheara el código para que se salte toda la función.

Yo pensaba que las contraseñas se generaban para utilizarlas como clave del correo, por ejemplo, no como protección en un programa. Pero si se trata de marear a un posible atacante, entonces podemos darnos una vuelta por el hilo de "código inútil",y en ultimo caso generamos la contraseña utilizando brainfucker. Eso si que tiene que marear
Responder Con Cita
  #8  
Antiguo 02-05-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
A mi personalmente nunca me ha gustado utilizar contraseñas de este tipo...
Me gusta más utilizar alguna que tenga sentido para mí, pero no para otros y que no sea fácil de descifrar usando fuerza bruta.

Por ejemplo:
2711MeganeScenic4528
Para mi es fácil de recordar -porque tiene cierto sentido- (más fácil que esta: 2h4Kw3CN95Lsr4DG2CAF2A) y entiendo que no es fácil de sacar usando fuerza bruta; Algun entendido me dirá si mucho menos fácil o no que la otra, personalmente no entiendo mucho (normalmente letras y números y alguna palabra que no entre en diccionario).

El problema que le veo a las anteriores es que debes guardarlas en algun sitio:
* En el explorador, en el correo,... o en algun programa que las almacene.

En los primeros casos creo que ese es el punto débil; ¿De qué sirve tener una "supercontraseña" si luego te la roban utilizando un bug del Browser (sea el que sea)?
En este caso está el agravante de que cuando se borra la caché o las contraseñas del navegador, tienes muchos problemas para entrar en todos los sitios donde antes entrabas directamente.

El el segundo caso, si es un programa que almacena todas las contraseñas, debes ponerle contraseña... ¿Y esa dónde la almacenas? ¿en otro programa? ¿Con contraseña? -esto me suena, es como si ya hubiera pasado por aquí...-

Bueno, es sólo un comentario; Ya se que se deben utilizar contraseñas seguras, pero es que "me da mucha mandra hacerlo" y además pienso que los problemas/agujeros de seguridad están en otros lugares que no en las contraseñas de entrada (en muchos casos).

Un saludo desvariado.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 02-05-2007
d-hugo d-hugo is offline
Miembro
 
Registrado: abr 2007
Posts: 34
Poder: 0
d-hugo Va por buen camino
La idea de usar hashes es justamente no guardar las propias contraseñas. Uno puede usar una contraseña fácil de recordar, pero lo que se guarda es el hash de esta, no la contraseña misma. Y obviamente, como los hashes son unidireccionales, es extraordinariamente difícil generar una contraseña válida conociendo el hash.

Como hash, MD5 ha sido roto varias veces, probablemente sería mejor utilizar alguna de las variantes altas del Secure Hashing Algoritm, SHA-256, SHA-384 o SHA-512 (SHA-1 ha sido roto alguna que otra vez).

Por otra parte, es cierto que un hacker puede simplemente saltarse las funciones de verificación, a menos que dentro de ellas se encuentre código esencial sin el cual el programa no funcione, esto complica un poco más las cosas.

Al final, la realidad es que si un hacker está determinado a romper un algoritmo de protección, y tiene los conocimientos necesarios y la cantidad de tiempo y recursos disponibles, lo conseguirá.

De modo que la tarea consiste precisamente en hacer que el costo en tiempo y recursos sea lo mayor posible, de manera que cuando se pueda acceder a la información, esta ya sea inútil.

Ah y otro detalle a tener en cuenta es la posibilidad de que en la máquina en que tecleemos la contraseña tengan instalado un keylogger. Hay controles que impiden obtener el texto enmascarado en un edit, pero aun no he encontrado uno que impida que se pueda generar un registro de las teclas pulsadas. A primera vista esto lleva intercepciones de las APIs y otras cosas que no deben ser sencillas.

En fin, que en esto de la seguridad hay para nunca acabar.

Última edición por d-hugo fecha: 02-05-2007 a las 17:44:25.
Responder Con Cita
  #10  
Antiguo 02-05-2007
Wellnic Wellnic is offline
Miembro
 
Registrado: mar 2007
Posts: 68
Poder: 18
Wellnic Va por buen camino
Smile

Ante todo, gracias por los halagos, no pensé que provocara tanto interés (bueno, sí, en mis sueños ).

He usado el md5 como podría haber usado cualquier otra función similar. No entiendo lo de la fortaleza de cifrado a la que se refería Seoane. He utilizado el md5 para un propósito muy distinto de su función propia (un poco a lo McGiver ). Mi intención era "retorcer" una y otra vez una palabra de entrada, sin más historias, que la capacidad de servidor no da para más.

Os adjunto las fuentes como me pedís, y así os hacéis una idea de adonde quería llegar. No está muy acabado, porque estuve trabajando en una versión más simple y lo dejé abandonado. Si realmente lo encontráis útil lo subo también .
Archivos Adjuntos
Tipo de Archivo: zip Transcon.zip (8,0 KB, 41 visitas)
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Contraseñas erick_jesus Conexión con bases de datos 2 29-05-2006 18:48:37
Contraseñas en Access diegolf Conexión con bases de datos 5 30-12-2004 10:58:31
Guardar contraseñas acrophet Conexión con bases de datos 3 25-11-2004 16:54:07
Contraseñas y Paradox Letty Conexión con bases de datos 1 01-12-2003 14:48:06
contraseñas y password alfgonvar Conexión con bases de datos 1 02-10-2003 15:31:32


La franja horaria es GMT +2. Ahora son las 06:13:14.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi