Una función hash o función digest es un algoritmo determinista que toma como entrada un mensaje de longitud arbitraria y devuelve una salida de tamaño fijo, comúnmente llamada digest o resumen. Se pueden computar de una manera eficiente y los valores de salida están uniformemente distribuidos en el espacio de salida evitando aglomeraciones. Las funciones hash se suelen denotar como $H:\{0,1\}^∗→\{0,1\}^n$ donde tenemos el conjunto de entrada de longitud indefinida representado como $\{ 0,1\}^*$ y el conjunto de salida de longitud fija $n$ como $\{0,1\}^n$.
Dada una funcion hash $H:\{0,1\}^∗→\{0,1\}^n$, sean $x,y \in \{0,1\}^*$ se tiene que
$$ P\left[ \mathcal{A} \text{ encuentra } x , y \in \{0,1\}^* \text{ tal que } x\neq y \text{ y } H(x)=H(y) \right] $$
$$ P\left[ x \leftarrow \mathcal{U}(\{0,1\}^*), \text{Dado } H(x) \text{, }\mathcal{A} \text{ encuentra } y \in \{0,1\}^n \text{ tal que } H(x)=H(y) \right]^{(1)} $$
Resistencia a la segunda preimagen: Dada una entrada $x$, no se puede hallar otra entrada $y$ distinta de $x$ tal que $H(x)=H(y)$. Es decir que una función $H$ es resistente a segunda preimagen si para todo adversario con tiempo polinomial probabilístico, la siguiente probabilidad es negligible:
$$ P\left[ x \leftarrow \mathcal{U}(\{0,1\}^), \mathcal{A} \text{ encuentra } y \in \{0,1\}^ \text{ tal que } H(x)=H(y) \right]^{(1)} $$
(1) $x \leftarrow \mathcal{U}(\{0,1\}^)$ significa que se elige de manera aleatoria con distribucion uniforme un elemento de $\{0,1\}^$.
Es importante observar que no toda función hash cumple con estas propiedaes, se le pueden pedir otras propiedades mas o quitar alguna de estas, dependiendo de la literatura. Estas cualidades hacen que las funciones hash sean ideales para proteger la integridad de los datos y verificar la autenticidad en aplicaciones, esquemas y protocolos criptograficos.
Las funciones hash juegan un papel fundamental en la criptografía, proporcionando seguridad en varias operaciones: