Cryptographic hash functions play a fundamental role in modern cryptography. While related
to conventional hash functions commonly used in non-cryptographic computer applications
– in both cases, larger domains are mapped to smaller ranges – they differ in several
important aspects. Our focus is restricted to cryptographic hash functions (hereafter, simply
hash functions), and in particular to their use for data integrity and message authentication.