August 31, 2009
Recent Contributions to Cryptographic Hash FunctionsJesse Walker, Michael E Kounavis, Shay Gueron, Gary Graunke
Hash functions are cryptography's most widely used primitives
Jesse Walker is an Applied Cryptographer in Intel's Communication Technology Laboratory. He can be contactes at jesse.walker@intel.com. Michael E Kounavis is a Senior Research Scientist working with Intel Labs. His e-mail is michael.e.kounavis@intel.com. Shay Gueron is an Intel Principal Engineer. He can be reached at shay.gueron@intel.com. Gary Graunke is a Senior Staff Architect for cryptography at Intel. His e-mail is gary.graunke@intel.com. Copyright (c) 2009 Intel Corporation. All rights reserved.
Hash functions are one of cryptography's most fundamental building blocks, even more so than encryption functions. For example, hash functions are used for digital fingerprinting and commitment schemes, such as message authentication and random number generation, as well as for digital signature schemes, stream ciphers, and random oracles.
Recently, Antoine Joux, one of the leading cryptographers of our time, discovered multi-collision attacks against the general framework in which hash functions are constructed [1], and Xiaoyun Wang created an attack that breaks the collision-resistance property of the most widely deployed hash functions [2], including MD5 and SHA-1. In 2005, Arjen Lenstra and Wang demonstrated how to forge two digital certificates, based on the MD5 hash function, by using different keys but the same signature -- something that was hitherto thought to be impossible [3]. These attacks that were discovered, and other vulnerabilities that were exposed by researchers have stimulated a resurgence of research into hash functions. This research has also spawned an international competition, sponsored by the National Institute of Standards and Technology (NIST), an agency responsible for standards used by the U.S. Government, to create a next-generation hash function design.
In this article we highlight some recent work in hash function development. We begin by providing some background on hash functions and look at the problems that hash functions address. We then sketch how to build a hash function. Moving on, we outline recent seminal work in the field of hash functions. We describe two radically different designs entered in the NIST competition, the Skein and Vortex designs, created in part with Intel participation. This is followed by a discussion of the design rationale for each where we also compare and contrast the basic design decisions. We end with a summary of our findings.
Hash Functions
A hash functions is usually defined as a function H satisfying three properties [4]:
A hash function maps the set of all bit strings into a "message digest" of defined length, called the hash function's "block size." Since there are many more strings than message digests, at least one digest output by the hash function must be the image of more than one input string. It is therefore remarkable that it is possible to build a function h that has the three properties previously noted. These properties imply that h essentially acts like a randomly selected compression function.
It is instructive to describe some typical use cases:
|
|
||||||||||||||||||||||||||||||
|
|
|
|