Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 15 Nov 2006 14:01:16 +0100 (CET)
From:      Oliver Fromme <olli@lurza.secnetix.de>
To:        freebsd-hackers@FreeBSD.ORG, freebsd-net@FreeBSD.ORG, max@love2party.net
Subject:   Re: ipv6 connection hash function wanted ...
Message-ID:  <200611151301.kAFD1G9d095074@lurza.secnetix.de>
In-Reply-To: <200611151126.kAFBQSQr090632@lurza.secnetix.de>

next in thread | previous in thread | raw e-mail | index | archive | help
Oliver Fromme wrote:
 > Max Laier wrote:
 > > David Malone wrote:
 > > > Assuming you don't want to use one of the standard cryptographic
 > > > ones (which I can imagine being a bit slow for something done
 > > > per-packet), then one option might be to use a simpler hash that
 > > > is keyed. Choose the key at boot/module load time and make it hard
 > > > to produce collisions unless you know the key.
 > > 
 > > That's exactly what I am looking for ... now I need someone[tm] - with 
 > > better Math-Knowledge than mine - to write such a thing down in a simple 
 > > formula :-) i.e. take those bits from there and there and XOR them with 
 > > your canary yada-yada-yada ...
 > 
 > In that case, simply use crc32 (available from libkern.h)
 > and xor with a random key generated at boot time.  crc32
 > is fast to calculate and has the properties that you need.

Uhm, sorry, after reading that sentence again and thinking
about it, it seems to be misleading.

You have to xor with a random key _first_, and _then_
calculate the crc32 value.  If you did it the other way,
the random key would not prevent from collisions at all,
because:  same_crc ^ same_key == same_hash.  ;-)

Suppose a malicious user is able to create two different
sets of connections parameters (P1 and P2) which have the
same CRC32 value (without using a key):

   P1 != P2
   crc32(P1) == crc32(P2)

If you xor (or add) the random key K to the parameters,
it will change the outcome of the crc32 calculation in
different ways:

   crc32(P1 ^ K) != crc32(P2 ^ K)

Best regards
   Oliver

-- 
Oliver Fromme,  secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing
Dienstleistungen mit Schwerpunkt FreeBSD: http://www.secnetix.de/bsd
Any opinions expressed in this message may be personal to the author
and may not necessarily reflect the opinions of secnetix in any way.

"I made up the term 'object-oriented', and I can tell you
I didn't have C++ in mind."
        -- Alan Kay, OOPSLA '97



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200611151301.kAFD1G9d095074>