Funciones hash y HMAC
SHA-256, SHA-1, MD5 (envolviendo la librería estándar de Python), efecto avalancha, y HMAC.
¿Por qué funciona esto matemáticamente?
Una función hash criptográfica debe ser (1) determinista (mismo input → mismo output siempre), (2) de salida fija sin importar el tamaño de la entrada, (3) unidireccional (fácil calcular el hash, computacionalmente inviable recuperar el mensaje original a partir del hash), y (4) resistente a colisiones (inviable encontrar dos mensajes distintos con el mismo hash). El efecto avalancha (que un solo bit de diferencia en la entrada cambie ~50% de los bits de salida) es una consecuencia deseable de estas propiedades: si los hashes de entradas parecidas se parecieran entre sí, eso filtraría información sobre la entrada, rompiendo la propiedad unidireccional.