Design principles for cryptographic hash functions: foundations, primitives and transforms
Cryptographic hash functions are arguably the most commonly used cryptographic object. They appear in nearly every security protocol, typically to prevent against en route manipulation of the data, to provide a measure of randomness, or to reduce a large data string to a short characteristic representation prior to applying another (often computationally expensive) cryptographic operation. Despite our heavy reliance on hash functions for security, we still know surprisingly little about their proper design and behavior under various adversarial situations. This project will examine these fundamental issues by 1) delving into the fundamental definitions of hash function security as well as the theoretical methods used to reason about them; 2) exploring new designs of primitive objects (like compression functions and blockciphers) used to build modern hash functions; and 3) researching methods to transform these primitives into hash functions that are fast and afford a wide range of inputs (from packets to the entire contents of a hard drive, say) and provide security over a range of output sizes.