Convertirlo en algo que no se puede revertir, el hash
Pon fruta en una licuadora y sale jugo. Mirando solo el jugo, no puedes recuperar con exactitud que fruta entro. Un hash de seguridad es asi. Metes un valor y sale una huella corta, pero desde esa huella no puedes recuperar el valor original. Por eso, en vez de guardar una contrasena tal cual, guardamos solo esta huella que no se puede revertir.
Va en un solo sentido
Imagina una herramienta donde metes un valor
y sale una huella corta de longitud fija.
A esta herramienta la llamamos hash de seguridad.
Mete el mismo valor y siempre sale la misma huella.
Pero una propiedad es especial.
De la entrada la huella es facil de hacer,
pero de la huella no puedes volver a la entrada original.
Una licuadora puede convertir fruta en jugo
pero no puede convertir el jugo de vuelta en la fruta original.
Por eso la llamamos de un solo sentido.
Usa la flecha derecha para convertir la entrada en una huella. Intenta volver a la izquierda y el camino esta bloqueado.
El camino hacia adelante se abrio facil
pero el camino de vuelta estaba bloqueado.
Este bloqueo es el corazon de la seguridad,
porque con la huella sola no puedes conocer de forma directa el valor original.
Entonces, donde usamos esta propiedad?
El lugar mas comun es la contrasena.
Si una contrasena se guarda tal cual,
cualquiera que mire el almacen la sabe enseguida.
Por eso hacemos lo siguiente.
Guarda la huella en lugar de la contrasena
Guardar una contrasena letra por letra es arriesgado,
porque si el almacen se filtra o alguien mira dentro,
esa contrasena se revela de golpe.
Por eso no guardamos la contrasena misma.
En cambio pasamos la contrasena por el hash
y guardamos solo la huella que sale.
Como la huella es de un solo sentido,
ella sola no revela de forma directa la contrasena original.
Aun mirando el almacen,
solo hay huellas que no se pueden revertir, en fila.
Toca para comparar las dos formas. El guardado en texto plano muestra la contrasena tal cual, el guardado por huella deja solo una huella que no se puede revertir.
El lado guardado en texto plano mostraba la contrasena al descubierto.
El lado guardado por huella dejaba solo una huella ilegible.
Asi que para guardar, el lado de la huella es mucho mas seguro.
Pero surge una pregunta.
Si no guardamos la contrasena,
entonces cuando un usuario inicia sesion,
como comprobamos que la contrasena es correcta?
No hay un original con que comparar.
Aqui brilla otra propiedad de la huella.
Verifica convirtiendo la entrada en una huella
Dijimos que el mismo valor siempre da la misma huella.
Usamos esta propiedad para verificar.
Cuando un usuario ingresa una contrasena al iniciar sesion,
pasamos esa entrada por el hash de nuevo
y hacemos una huella nueva.
Luego comparamos esta huella nueva
con la huella guardada.
Si las dos coinciden, se ingreso la misma contrasena. Pasas.
Si las dos difieren, es otra contrasena. Se bloquea.
Sin sacar la contrasena original,
verificamos comparando solo las huellas.
Elige una entrada y toca verificar. Si la huella de la entrada coincide con la guardada pasas, si no, se bloquea.
Solo cuando se ingreso la contrasena correcta las huellas coincidieron y pasaron.
Un valor distinto se volvio una huella distinta y fue bloqueado.
Asi, sin guardar el original,
podemos distinguir lo correcto de lo erroneo.
Guardar solo la huella, verificar comparando huellas.
Una sola propiedad, ser de un solo sentido,
hace seguros tanto el guardado como la verificacion.
Pero hemos oido la palabra hash
en otra unidad tambien.
Es ese hash el mismo que este hash?
Su proposito difiere del hash de data
Vimos un hash en la unidad de data tambien.
Alli convertia un valor en un numero de casilla
para encontrar rapido el dato que quieres.
El proposito era fijar un lugar rapido.
El hash de seguridad puede parecerse en forma,
pero su proposito es el opuesto.
Aqui el punto no es encontrar rapido
sino hacerlo imposible de revertir.
Por eso un hash de seguridad se construye
para que ir de la huella de vuelta al valor original sea dificil.
Mismo nombre, uso distinto.
Toca cada lado para contrastar los propositos. El hash de data es para encontrar rapido, el de seguridad para ser irreversible.
Aun con la misma palabra hash, data lo usa para encontrar rapido, seguridad lo usa para ser irreversible. El proposito fija la propiedad de la herramienta.
Asi, aun una herramienta del mismo nombre
tiene una propiedad distinta que importa segun donde se use.
En seguridad, ser irreversible
es la propiedad mas valiosa.
Ahora repasemos de principio a fin.
Resumamos
Reunido en una linea, es esto.
Un hash de seguridad convierte la entrada en una huella de un solo sentido.
De la huella de vuelta a la entrada no se puede.
Por eso, en vez de la contrasena misma,
guardamos solo su huella.
Al iniciar sesion convertimos la entrada en una huella de nuevo
y vemos si coincide con la huella guardada.
Coincide y pasas, difiere y se bloquea.
A diferencia del hash de data hecho para encontrar rapido,
este es un hash hecho para ser irreversible.
Huella de un solo sentido, guardar solo la huella, verificar comparando. Asi protege un hash.
Toca los puntos clave en orden para repasar. (huella de un solo sentido -> guardar solo la huella -> verificar por la huella de la entrada -> el proposito difiere del hash de data)
Ahora sabes como proteger una contrasena
sin dejarla tal cual.
Una sola huella que no puedes revertir
hace seguros juntos el guardado y la verificacion.
Ni las personas ni los sistemas guardan el original,
asi que hay menos secreto que perder.
La proxima, como movemos la informacion protegida asi
de forma segura por los caminos donde se intercambia?
Sigamos explorando juntos.