Jeśli ktoś ustawia nasiona stołowe Hash podczas zmiany rozmiaru lub stole do liczby losowej, to uniemożliwić atakami DDO na taką stół Hash lub, znając algorytm Hash, atakujący nadal będzie łatwo poruszać się z nasion? Co jeśli algorytm wykorzystuje funkcję Pearson Hash z losowo wygenerowanymi tabelami, nieznanym atakującym? Czy taka tabela jest nadal potrzebna nasion lub jest wystarczająco bezpieczna?

Kontekst: Chcę użyć tabeli hash na dysku dla bazy danych kluczowych dla mojego serwera WWW, gdzie klucze mogą zależeć od wejścia użytkownika.

1
Nash Gold 8 październik 2020, 22:18

1 odpowiedź

Najlepsza odpowiedź

Istnieje kilka podejść do ochrony podsystemu hasha z ataku "niekorzystnego wyboru", najpopularniejsze z nich jest nazwane Universal Hashing, gdzie funkcja Hash lub jego mienia losowo wybrana, przy inicjalizacji.

W moim własnym podejściu używam tej samej funkcji Hash, gdzie każdy znak dodający do wynika z mieszaniem nieliniowym, zależy od losowej tablicy uint32_t[256]. Tablica jest tworzona podczas inicjalizacji systemu, aw moim kodzie, na każdym uruchomieniu, czytając /dev/urandom. Zobacz Moja implementacja w Open Source Emerssl program. Zapraszamy do pożyczki tego całego wdrażania stołów Hash lub tylko funkcja hash.

Obecnie moja funkcja Hash z odniesionego źródła oblicza dwie niezależne skryski dla Algorytm wyszukiwania podwójnego.

Istnieje "zmniejszona" funkcja Hash, tworząc źródło, aby zademonstrować pomysł na mieszanie nieliniowe z tablicą S-Block "

uint32_t S_block[0x100]; // Substitute block, random contains

#define NLF(h, c) (S_block[(unsigned char)(c + h)] ^ c)
#define ROL(x, n) (((x) << (n)) | ((x) >> (32 - (n))))

int32_t hash(const char *key) {
  uint32_t h = 0x1F351F35; // Barker code * 2
  char c;
  for(int i = 0; c = key[i]; i++) {
    h  = ROL(h, 5);
    h += NLF(h, c);
  } 
  return h;
}
1
olegarch 11 październik 2020, 00:24