On 28.01.2012 00:54, Bojan Smojver wrote: > ------- Original message ------- >> + hash = ht->seed ^ ht->hash_func(key, &klen); > > Actually, when I think about this, it will probably be inefective. If > two keys produce the same hash, the xor-ed value against the seed will > most certainly be the same as well. So, this won't actually do > anything to stop the attack, except change which bucket attack picks. > > So, we probably do need to seed the hash function instead.
Seeding the hash function is essentially the same as not using a simple XOR to do the randomization. Which is why my original suggestion said randomize_hash(), not XOR. Seeding the hash function is effectively the same as using the hash function's output to seed the randomizer, right? So what remains is to pick a good randomizer, which XOR is not. There's still no no need to change the hash_func_t signature. What randomizer you pick really depends on how secure you want to be. You can use XOR (which you note is useless), or rerun the result + seed through the built-in hash function (which is probably a bit better), or run both through a secure hash algorithm (which sounds like overkill). -- Brane
