InicioInfo``Hashin´´ de contraseñas

``Hashin´´ de contraseñas

Info10/8/2013

La criptología es un tema muy complicado, por lo que aquí vamos a mantener las cosas simples, tratando de presentar un método razonablemente seguro de cómo almacenar las contraseñas en una aplicación web
Qué es lo que hace el “Hashing”?
El Hashing convierte un trozo de datos (ya sea pequeño o grande), en una relativamente pequeña pieza de datos como una cadena (string) o un entero.
Esto se logra usando una función hash unidireccional. “Sólo de ida” significa que es muy difícil (o prácticamente imposible) de revertirla.
Un ejemplo conocido de una función hash es md5(), la cual es muy popular en diferentes lenguajes y sistemas.

Con md5(), el resultado siempre será un string de 32 caracteres de longitud. Pero, contendrá únicamente caracteres hexadecimales; técnicamente también puede ser representado como un entero de 128-bit (16 byte). Es posible que enviamos cadenas de caracteres o datos muy grandes, pero con md5() siempre obtendremos un hash de la misma longitud. Este hecho por si sólo puede darnos una idea de porque se le considera una función de “Sólo de ida”.
Usando una función hash para almacenar las contraseñas
El proceso habitual durante el registro de un usuario es:

El usuario llena el formulario de registro, incluyendo el campo de contraseña
Los scripts almacenan toda la información en una base de datos
Sin embargo, el password es convertido con una función hash, antes de ser almacenado.
La versión original del password no ha sido almacenada en ningún lado, por lo que es técnicamente borrada

Y el proceso de login es:

El usuario ingresa su nombre de usuario (o e-mail) y contraseña
El script convierte la contraseña utilizando la misma función hash
El script busca el registro del usuario en la base de datos y lee la “contraseña hasheada” almacenada
Ambos valores (contraseña introducida y hasheada vs. contraseña hasheada almacenada) son comparados, y si coinciden el acceso es concedido.

Hay que tener en cuenta que la contraseña original nunca ha sido almacenada en la base de datos. Si esta fuera robada, los datos de inicio de sesión del usuario no estarían comprometidos, ¿no? Bueno, la respuesta es “depende”. Veamos algunos problemas potenciales.
Problema #1 Colisión Hash
Una “colisión” hash se produce cuando dos entradas de datos diferentes generan el mismo hash resultante. La probabilidad de que esto ocurra depende de la función que uno usa.
¿Cómo puede ser explotado?
Como ejemplo, podemos ver algunos scripts antiguos que utilizan la función crc32() para cifrar las contraseñas. Esta función genera un número de 32 bits como resultado. Esto significa que hay sólo 2 ^ 32 (es decir, 4294967296) posibles resultados.

Vamos a hashear una contraseña:

Ahora, vamos a asumir el papel de una persona que ha robado una base de datos y tiene el valor hash. Puede que no seamos capaces de convertir 323322056 en 'supersecretpassword'; sin embargo, podemos encontrar otra contraseña que se convierta en el mismo valor hash, con un simple script:

Esto puede ejecutarse durante un tiempo, aunque, finalmente, devolverá una cadena. Podemos usar esta cadena en lugar de 'supersecretpassword' y, con ello, iniciar sesión correctamente en la cuenta de esa persona.

Por ejemplo, después de ejecutar este script por un momento, obtuvimos esta cadena ‘MTIxMjY5MTAwNg==’. Ahora, hagamos la prueba:

¿Cómo podemos prevenir esto?
Hoy en día, un potente ordenador casero puede ejecutar una función hash casi mil millones de veces por segundo. Por lo que necesitamos una función hash que tenga un rango muy grande.

Por ejemplo, md5() puede ser adecuado, ya que genera hashes de 128 bits. Esto se traduce en 340,282,366,920,938,463,463,374,607,431,768,211,456 posibles resultados. Lo que hace prácticamente imposible realizar tantas iteraciones para encontrar colisiones. Sin embargo, algunas personas todavía encuentran maneras de lograrlo.
Sha1
Sha1() es una mejor alternativa, ya que genera un valor hash de 160 bits.
5. Problema #2: Las tablas arcoíris
Incluso si se solucionara el problema de colisión, todavía no estaríamos completamente seguros.

Una tabla arcoíris se construye mediante el cálculo de los valores hash de las palabras utilizadas y de sus combinaciones.

Estas tablas pueden tener millones o incluso miles de millones de filas.

Por ejemplo, podemos usar un diccionario y generar valores hash para cada palabra. También podemos combinar palabras y generar hashes de los mismos. Eso no es todo, incluso se pueden añadir dígitos antes/después/o entre las palabras y almacenarlas en la tabla, también.

Teniendo en cuenta lo cómodo del almacenamiento de hoy en día, las tablas arcoíris gigantes pueden producirse y ser utilizadas.
¿Cómo puede ser explotada?
Imaginemos que una gran base de datos es robada, con cerca de 10 millones de hashes de contraseñas. Es bastante fácil buscar en la tabla arcoíris para encontrar cada una de ellas. No todas serán encontradas, sin duda, pero, sin embargo... si algunos de ellas!
¿Cómo podemos evitar esto?
Podemos tratar de añadir un “salt”. Por ejemplo:

Lo que hacemos es básicamente concatenar la cadena “salt” ( o “sal”) con la cadena hash de las contraseñas, antes de ellas. La cadena resultante, obviamente, no se encontrará en ninguna tabla arcoíris. Sin embargo, no estamos seguros aún!
buenon eso es todo x ahora
Datos archivados del Taringa! original
10puntos
281visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
3visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

b
bumesar🇦🇷
Usuario
Puntos0
Posts23
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.