SkillGridAprende informática practicando

Hashes, cifrado y firmas

Una herramienta esconde datos, otra solo toma una huella y una tercera demuestra quién lo envió. Confundirlas rompe sistemas reales.

15 min · 45 XP

Hay tres herramientas que se confunden constantemente, y esa confusión causa brechas reales. Un hash es una huella dactilar: demuestra que dos cosas son idénticas sin mostrar el original. El cifrado es una caja con llave: esconde datos para que la persona correcta pueda abrirlos después. Una firma digital es un sello de cera: demuestra quién lo escribió y que nadie lo cambió por el camino. Distintas tareas, distintas herramientas.

Una función hash toma cualquier entrada y produce un valor de longitud fija, siempre el mismo para la misma entrada. Cambia un carácter y el resultado cambia por completo, sin forma de predecir cómo. Y no funciona hacia atrás: del hash no se puede recuperar la entrada. Esa última propiedad es la razón entera de que las contraseñas se guarden como hash y no como texto.

input            hash of the input
---------------  --------------------------------
hello            2cf24dba5fb0a30e26e83b2ac5b9e29e...
HELLO            5d41402abc4b2a76b9719d911017c592...
hello!           ce06092c8f0e3f0e2b8f6ec9c8f4b1f2...

one character changed  ->  a completely different hash
same input every time  ->  the same hash, alwaysUn hash es una huella, no una caja cerrada: demuestra que la entrada fue la misma y nunca revela la entrada.

El cifrado es lo contrario del hash: está pensado para ser reversible. Una clave convierte texto legible en bytes ilegibles, y la clave correcta los devuelve. Esa reversibilidad es justo la razón de no guardar nunca así las contraseñas: si el servidor puede descifrarlas, también podrá quien robe la clave. El cifrado es para datos en tránsito y para archivos que habrá que volver a leer.

BrowserShop serverHTTPS: here is my card numbereverything below happens inside TLSlock and key agreed oncescrambled bytesanyone reading the cable sees noise, not the card

Una firma digital responde a otra pregunta: no "qué dice esto", sino "quién lo escribió y sigue intacto". Firmas con una clave privada que nunca sale de tu máquina; cualquiera puede comprobar la firma con la clave pública correspondiente. En esto se apoyan los certificados HTTPS, y por eso una página de descargas puede dejarte verificar que el archivo es el que publicaron sus autores.

openssl dgst -sha256 -sign release.key -out app.sig app.bin
openssl dgst -sha256 -verify release.pub -signature app.sig app.binEl patrón en una línea cada uno: firmar produce un pequeño archivo .sig, y verificar lo acepta o lo rechaza.

Práctica

  1. Relaciona cada herramienta con la tarea para la que está pensada de verdad.

    Pistas
    • Pregúntate por cada herramienta: ¿se puede volver al texto original?
    • Una huella identifica, una caja esconde y una firma demuestra quién lo escribió.

    15 XP

  2. Dos usuarios eligen la misma contraseña. Sus hashes guardados en la base de datos se ven completamente distintos. ¿Qué lo provocó?

    Pistas
    • La sal se guarda junto al hash, así que no es un secreto.
    • Su trabajo es que dos personas con la misma contraseña no acaben con el mismo valor guardado.

    14 XP

  3. ¿Por qué TLS usa un intercambio de claves en lugar de simplemente enviar una clave secreta compartida a ambos lados?

    Pistas
    • Un secreto compartido tiene que llegar antes a los dos lados, y ese viaje es el punto débil.
    • Firmar funciona al revés: la clave que demuestra la autoría nunca sale de su dueño.

    16 XP