Las funciones de hash criptográficos deben tener varias propiedades:
- Resistencia a preimágenes : dado x , no debería ser posible encontrar m de manera que h (m) = x .
- Resistencia a segundas preimágenes : dado m , no debería ser posible encontrar m ' de manera que h (m) = h (m ') .
- Resistencia a colisiones : no debería ser posible encontrar m y m ' de manera que m ≠ m' y h (m) = h (m ') .
Estas propiedades no son equivalentes entre sí, y no necesariamente las necesita todas. Depende del protocolo en el que esté utilizando la función hash. Por ejemplo, las funciones hash se utilizan en el paso inicial de firmas digitales , para las cuales las colisiones no son un problema - a menos que el atacante esté en posición de elegir un mensaje exacto para ser firmado. Los detalles pueden ser sutiles.
Si la función hash tiene una salida de bits n , entonces existen ataques genéricos que encuentran preimágenes, segundas preimágenes y colisiones con costo, respectivamente, 2 n , 2 n y 2 n / 2 . Un ataque "genérico" significa que funciona para todas las funciones hash, independientemente de lo perfectas que sean. Esto establece el nivel máximo de seguridad alcanzable.
Si "comprime" la salida del SHA-256 a 128 bits (sea cual sea el procedimiento de compresión que quiera usar, incluso un simple truncamiento), en realidad está definiendo una nueva función hash con una salida de 128 bits. Como tal, la resistencia a las imágenes previas y las segundas imágenes previas de esa función será en el mejor de los casos 128 , y la resistencia a las colisiones será, en el mejor de los casos, 2 64 . Por lo tanto, su SHA-256 truncado ofrecerá "seguridad de 128 bits" solo en contextos de uso donde las colisiones no son un problema. Pero como puede ser bastante difícil determinar que las colisiones no son un problema, no se recomienda "comprimir" la salida de la función hash.
En general , preferimos estar seguros que lamentarnos; por lo tanto, cuando queremos "seguridad de 128 bits" usamos una función hash de 256 bits. De esa manera, no tenemos que preocuparnos por si las colisiones pueden ser aprovechadas en un ataque real o no. Las colisiones SHA-256 no son posibles con la tecnología existente.