La trampa de contrasenas iguales, una pizca de sal
La leccion pasada aprendimos que una contrasena no se guarda tal cual sino convertida en hash. Pero, que pasa si dos personas usan la misma contrasena? La misma contrasena da el mismo hash. Si dos valores identicos quedan uno al lado del otro en la lista guardada de hashes, queda al descubierto que dos personas comparten contrasena. Por eso hace falta una forma de mezclar una pizca distinta para cada persona.
La misma contrasena se vuelve el mismo hash
Un hash da siempre el mismo resultado para la misma entrada.
Por eso justamente, al volver a introducir la misma contrasena,
se puede comparar con el hash guardado.
Pero esta propiedad arroja una sombra.
Si dos personas usan la misma contrasena,
sus dos hashes salen iguales tambien.
Con solo mirar la lista guardada de hashes,
si hay valores identicos uno al lado del otro,
se nota que las contrasenas son iguales.
Quiza no sepas la contrasena misma, pero el hecho de que coinciden se filtra.
Pon las contrasenas de las dos personas iguales o distintas. Cuando coinciden, los hashes salen identicos, uno junto al otro.
Al elegir la misma contrasena,
los dos hashes se veian identicos.
Solo con los hashes, la igualdad se nota de una.
Por que es eso un problema?
Aprendimos que un hash es dificil de revertir,
pero el punto de que el mismo valor da el mismo hash no cambia.
Entonces, que pasa si alguien hashea contrasenas comunes
de antemano y las anota?
Por que una tabla ya hecha es riesgosa
Las contrasenas de uso comun son menos variadas de lo que crees.
Asi que esas contrasenas
y sus hashes pueden anotarse de antemano, una linea cada una.
Con una tabla de busqueda ya hecha a mano,
un hash guardado puede buscarse en la tabla
y la contrasena adivinarse de vuelta.
No es romper el hash en si
sino comparar con respuestas escritas por adelantado.
Por eso una contrasena comun corre mas riesgo:
es mas probable que ya este en la tabla.
Toca un hash guardado. Fijate en que si el mismo hash esta en una tabla ya escrita, la contrasena puede adivinarse de vuelta.
Cuando un hash de la tabla coincidia con el guardado,
la contrasena de la casilla contigua quedaba al descubierto.
Un hash que no estaba en la tabla bloqueaba la adivinanza.
Aqui podemos captar el nucleo.
La raiz del riesgo es que la misma contrasena
siempre se vuelve el mismo hash.
Asi aparece tambien la forma de bloquearlo.
Si se hace que la misma contrasena se hashee distinto por persona,
ninguna tabla ya hecha por si sola puede coincidir.
Ese metodo es justamente el salting.
Anade una sal a la contrasena
Una sal es un valor pequeno fijado distinto para cada persona.
En vez de hashear la contrasena tal cual,
primero pegas la sal de esa persona a la contrasena.
Luego hasheas las dos combinadas.
Lo que importa es que la sal difiere por persona.
Una sal no es un secreto que ocultar.
Esta bien guardarla justo al lado del hash,
porque saber solo la sal
no te deja saber la contrasena.
La sal hace una sola cosa: vuelve el hash distinto por persona.
Toca para anadir la sal de cada persona a la contrasena. La sal se pega a la contrasena, y luego esa combinacion se hashea.
Anadir la sal cambio la propia entrada que alimenta el hash.
Aun con la misma contrasena,
si la sal pegada delante difiere,
los ingredientes que entran al hash difieren entre si.
Aprendimos que un hash, con un cambio minimo en la entrada,
da un resultado del todo distinto.
Asi que si las sales difieren, los hashes no pueden sino diferir.
Ahora comparemos directamente como se ven los hashes guardados
cuando dos personas usan la misma contrasena.
Hasta la misma contrasena se vuelve un hash distinto
Recuerda cuando no habia sal.
Los hashes de dos contrasenas identicas eran iguales.
Enciende la sal y la historia cambia.
Aunque las contrasenas de dos personas sean iguales,
las sales difieren, asi que los hashes guardados difieren entre si.
Ahora, aun mirando la lista guardada de hashes,
no puedes distinguir quien uso la misma contrasena.
Ademas, una tabla ya hecha queda sin fuerza.
Esa tabla se hizo con hashes de contrasenas sin sal,
asi que no coincide con un hash mezclado con sal.
Como la sal difiere por persona, en la practica haria falta una tabla aparte para cada persona.
Compara con la sal apagada y encendida. Apagada: misma contrasena, mismo hash. Encendida: hasta la misma contrasena tiene un hash distinto, y la tabla queda sin fuerza.
En cuanto la sal se encendio,
los dos hashes antes identicos se partieron en valores distintos.
La tabla ya hecha tampoco coincidia mas.
Una pequena pizca resolvio dos cosas a la vez.
Bloquea tanto saber la misma contrasena solo con los hashes guardados
como rastrear contrasenas comunes de vuelta por una tabla.
Y lo hace sin ocultar ningun secreto nuevo,
solo anadiendo un valor que difiere por persona.
Ahora resumamos todo.
Resumamos
Reunido en una linea, es esto.
La misma contrasena se vuelve el mismo hash.
Asi los hashes guardados revelan una contrasena compartida,
y una tabla ya hecha arriesga rastrear contrasenas comunes de vuelta.
La solucion es anadir una sal por persona
a la contrasena antes de hacer el hash.
Una sal no es un secreto; solo necesita diferir por persona.
Anade una sal y hasta la misma contrasena da hashes todos distintos,
asi la tabla queda sin fuerza y los hashes identicos ya no aparecen.
Deshaz la trampa con sal, la misma contrasena en un hash distinto. Eso es el salting.
Toca los puntos clave en orden para repasar. (misma contrasena es mismo hash -> el riesgo de una tabla ya hecha -> anade una sal -> hasta la misma contrasena un hash distinto)
Ahora sabes por que la misma contrasena se vuelve una trampa,
y como una sola pizca de sal
deshace esa trampa.
Es elegante que sin ocultar mas secretos,
solo haciendo que las cosas difieran por persona,
la defensa se vuelve mucho mas firme.
Esta idea de crear a proposito una pequena diferencia
la volveras a encontrar una y otra vez en seguridad.
La proxima, como se superponen estas protecciones
cada vez mas estrechamente?
Sigamos explorando juntos.