Tip:
Highlight text to annotate it
X
Entonces, tus contraseñas están en hash. ¿Estás completamente a salvo? ¡NO!
Perdón por llevarte por este camino. Tenemos más cosas que hacer.
El problema es que existe un puñado de buenos algoritmos de hash
que la gente puede usar para este tipo de cosas.
Pretendamos que estamos utilizando Sha256, debido a que es un muy buen algoritmo hash.
Si alguien fuera a revisar esto y crear un mapa de cada palabra con el hash de cada palabra,
sería un problema, porque toda la fuerza de este problema de hash
es que realmente es difícil pasar del hash al texto simple que derivó en el hash.
Si tienes H(a), el hash de a, es muy difícil darse cuenta de a,
pero si ya lo has ingresado para cada palabra,
todo lo que tienes que hacer es ingresarlo una vez y crear la tabla a la inversa.
Una vez que alguien tiene esta tabla de todas esas palabras ingresadas una vez, "están listos".
Si creaste un mapa de Sha256 de cada palabra a la palabra original,
de pronto obtienes una base de datos de un grupo de contraseñas de Sha256.
Puedes ver inmediatamente cual es la contraseña.
Esta tabla tiene un nombre. Se llama "Tabla Rainbow".
Ahí se encuentran estas cosas, estos mapas, estas bases de datos de la versión hash de una contraseña
para la contraseña en texto simple. Existen.
Puedes buscar una tabla rainbow en google y así conseguir un algoritmo hash de tu elección
y descargar esa tabla hash o descargar ese mapa, convertirlo en una tabla hash
y estarías listo.
Hay una manera muy sencilla de lograr esto.
Puede que recuerdes de nuestro enfoque cookie que todo lo que tenemos que hacer es añadirle algunos secretos.
Pero no queremos añadirle el mismo secreto una y otra vez.
De lo contrario, estarías básicamente vulnerable a la misma técnica muy similar.
Por lo que utilizamos algo llamado "ataque".
Entonces, en nuestra tabla de usuario, almacenamos nuestro nombre y el hash de nuestra contraseña.
En lugar de sólo almacenar el hash de la contraseña, le añadiremos un secreto,
similar a como lo hicimos con las cookies, sólo que esto no es en realidad un secreto.
Sólo diremos que este hash va a igualar
nuestra función hash de la contraseña más salt.
Por lo tanto, esto se ve muy similar a lo que hicimos con las cookies ¿cierto?
Estábamos usando HMAC y teníamos una contraseña y un secreto.
Excepto que salt son solo caracteres escogidos al azar que inventamos.
Puedes inventarlos y almacenarlos en el espacio en blanco del hash.
En realidad tendremos el hash en este espacio, y sólo tendremos que abreviar eso como "H",
y justo a su lado, tendremos salt.
Lo que esto hace es evitar la búsqueda rápida de trabajo
ya que, de repente, hemos añadido estas cadenas aleatorias.
En lugar de establecer H(a) = a, tenemos que averiguar qué es H(a) + salt.
De pronto, esta tabla es completamente inválida.
Cuando almacenas un usuario, este es el tipo de algoritmo que puedes usar.
Ahora bien, fuera de esta clase, quiero que pienses mucho acerca de hacer esto tú mismo.
Al igual que con toda la encriptación, esto no debieses hacerlo tú mismo,
porque la gente ha pensado en esto. Lo han hecho de forma segura.
Y tú aún no estás calificado para hacerlo.
Quiero que pienses muy bien acerca del uso de bibliotecas de terceros,
ya que una gran cantidad de bibliotecas de terceros también comprende esto mal.
Principalmente, piénsalo mucho. Quieres hacerlo correctamente.
Hay un par de cosas más que te aconsejaré que busques
cuando estés evaluando una biblioteca de terceros, pero muchas ya han arruinado esto.
Y no es aconsejable confiar ciegamente en ellas.
Preferiría que lo hicieras tú mismo sabiendo cómo hacerlo, a que confiaras ciegamente en una biblioteca de terceros.
Pero el mejor conocimiento que puedes conseguir es buscando en
una biblioteca de autenticación de terceros.
Vamos a continuar y poner en práctica algunas inocentes funciones hash y "salar" una contraseña,
para que puedas ver cómo funciona el flujo.
Y luego hablaremos acerca de algunas cosas que debieras buscar
al evaluar el "enfoque" de alguien.