Lección 1

¿Qué es un hash?

Comprende los resúmenes unidireccionales y dónde usan los hashes los desarrolladores.

Una función hash toma datos de entrada de cualquier tamaño y produce un resumen de tamaño fijo, a menudo mostrado como texto hexadecimal. La misma entrada y el mismo algoritmo siempre producen el mismo resumen. Incluso un cambio de un carácter en la entrada suele producir un resumen completamente distinto.

Los hashes son unidireccionales

Puedes calcular un hash a partir de datos, pero no puedes revertir de forma fiable un hash para recuperar la entrada original. Por eso los hashes se usan como huellas digitales, no como forma de recuperar secretos.

Los hashes son deterministas

Si hasheas los bytes Hello con SHA-256 dos veces, obtienes el mismo resultado ambas veces. Esta propiedad hace que los hashes sean útiles para comparar:

  • ¿Este archivo descargado coincide con el checksum publicado?
  • ¿Esta config cambió desde ayer?
  • ¿Estos dos payloads de API son idénticos byte a byte?

Dónde ven los hashes los desarrolladores

Lugares habituales:

  • Campos de integridad en lockfiles de gestores de paquetes
  • IDs de commit de Git (basados en SHA-1, con formato específico de Git)
  • Cabeceras HTTP ETag y claves de caché
  • Almacenamiento de contraseñas cuando se combina con key stretching adecuado (nunca MD5 sin sal)
  • Huellas de blockchain y certificados (normalmente algoritmos más fuertes)

Los hashes detectan cambios, no intención

Un hash te dice si dos secuencias de bytes coinciden bajo un algoritmo elegido. No te dice quién creó los datos, si son seguros de ejecutar o si un tercero los manipuló, a menos que ya confíes en la fuente del hash de referencia.

Volver al resumen del curso