[16037] in cryptography@c2.net mail archive

home help back first fref pref prev next nref lref last post

Re: ?splints for broken hash functions

daemon@ATHENA.MIT.EDU (Ivan Krstic)
Tue Aug 31 14:20:22 2004

X-Original-To: cryptography@metzdowd.com
X-Original-To: cryptography@metzdowd.com
Date: Sun, 29 Aug 2004 14:40:22 +0200
From: Ivan Krstic <krstic@fas.harvard.edu>
To: Metzdowd Crypto <cryptography@metzdowd.com>
In-Reply-To: <412E95B0.2010009@av8n.com>

John Denker wrote:
> Here's another splint using the same general idea, but
> with less complexity:  calculate the hash once then
> prepend that to the message and hash again, i.e.
>    hash3(M) := hash1[hash1(M) (+) M]

This is Schneier's and Ferguson's solution to then-known hash function 
weaknesses in Practical Cryptography, Wiley Publishing, 2003:

"We do not know of any literature about how to fix the hash functions, 
but here is what we came up with when writing this book. ... Let h be 
one of the hash functions mentioned above. Instead of m->h(m), we use 
m->h(h(m) || m) as hash function. Effectively we put h(m) before the 
message we are hashing. This ensures that the iterative hash 
computations immediately depend on all the bits of the message, and no 
partial-message or length extension attacks can work. ... The 
disadvantage of this approach is that it is slow ... Another 
disadvantage is that this approach requires the whole message m to be 
buffered. You can no longer compute the hash of a stream of data as it 
passes by" (p. 93).

Cheers,
Ivan.

---------------------------------------------------------------------
The Cryptography Mailing List
Unsubscribe by sending "unsubscribe cryptography" to majordomo@metzdowd.com

home help back first fref pref prev next nref lref last post