QuoteDie beste Abhilfe gegen das Problem liefert den Forschern zufolge die Verwendung zufälliger Hashfunktionen, wie dies bei Perl bereits seit 2003 nach einer konkreten Sicherheitswarnung der Fall sei.
2011-12-30T11:25:42 topeg[...]
Da kein Hash-Algorithmus perfekt ist, kann es vorkommen, das zwei Werte den selben Hash erzeugen und damit den selben Speicherort beanspruchen. Um das Problem zu lösen werden Die Werte als verlinkte Liste an diesem Speicherort hinterlegt.
[...]
2011-12-30T16:05:16 murphy
- In genau den Spezialfällen wo man alle möglichen Schlüssel im Vorfeld kennt kann man das Problem durchaus dadurch verhindern, dass man eine perfekte Hashfunktion erzeugt.
2011-12-30T16:05:16 murphy
- Man kann das Problem auch dadurch umgehen, dass man zum Speichern aller Schlüssel-Wert-Paare mit gleichem Schlüsselhash eben keine einfache sequentielle Datenstruktur verwendet, sondern zum Beispiel einen Binärbaum.
2011-12-30T16:40:41 topeg2011-12-30T16:05:16 murphy
- Man kann das Problem auch dadurch umgehen, dass man zum Speichern aller Schlüssel-Wert-Paare mit gleichem Schlüsselhash eben keine einfache sequentielle Datenstruktur verwendet, sondern zum Beispiel einen Binärbaum.
Sicher das reduziert das Problem, schafft es aber nicht aus der Welt. Denn auch das Abarbeiten und Erweitern eines Baumes braucht Zeit. Man kann einen immer tiefer verschachtelten Baum konstruieren, dessen bearbeiten immer länger dauert. Der Extremfall wäre äquivalent zu einer verketteten Liste.
2011-12-30T11:25:42 topegUm das für ältere Perl Versionen (oder PHP etc.) zu simulieren, erzeuge ein Zufallszahl und wende sie mit XOR auf den hash-key an, oder füge ihn vor den Wert, oder hänge ihn an den Wert an.