2009-05-13 9 views
11

Szukam utworzyć 32-bitowy skrót niektórych obiektów danych. Ponieważ nie mam ochoty pisać własnych funkcji skrótu, a md5 jest dostępne, moje obecne podejście polega na użyciu pierwszych 32 bitów (tj. Pierwszych 8 cyfr szesnastkowych) z tablicy mieszania md5. Czy to jest do przyjęcia?Czy pierwsze 32 bity sumy kontrolnej md5 są tak samo "losowe" jak każdy inny podciąg?

Innymi słowy, czy pierwsze 32 bity sumy kontrolnej md5 są tak samo "losowe" jak każdy inny podciąg? Czy jest jakikolwiek powód, dla którego wolałbym, powiedzmy, ostatnie 32 bity? a może XOR'ing razem cztery 32-bitowe podciągi?

Niektóre wyjaśnienia poboru:

  • hashe te nie muszą być kryptograficznie bezpieczne.
  • Nie przejmuję się wydajnością md5 - jest więcej niż wystarczająco szybki dla moich potrzeb.
  • Te skróty muszą być "przypadkowe" na tyle, aby zderzenia były rzadkie.
  • W tym systemie liczba przedmiotów nie powinna przekraczać 10 000 (realistycznie prawdopodobnie nie osiągnie połowy tego poziomu). Tak więc w najgorszym przypadku prawdopodobieństwo wystąpienia jakichkolwiek kolizji powinno wynosić około 1% (zakładając wystarczająco "losowy" skrót).
+0

czy masz już skasowany MD5? (np. jako część metadanych sprawdzania Subversion) lub czy musisz sam obliczać wartość skrótu MD5? Jeśli to drugie, zgadzam się z komentarzem w/@Johannesa, CRC32 byłoby znacznie prostsze. –

+1

Wygląda na to, że nie ma sposobu, aby zapobiegawczo zaadresować "twoje pytanie jest nieważne, ponieważ powinieneś zrobić to w ten sposób" komentarze ... – Kip

+0

Niestety, nie miałem na myśli * nie * używaj skrótu MD5, po prostu oznacza, że ​​CRC32 jest prostszy. Ty lub Twoi klienci jesteście jedynymi, którzy mogą ocenić, jakie algorytmy spełniają wasze wymagania. –

Odpowiedz

10

Dla każdej dobrej funkcji skrótu poszczególne bity powinny być w przybliżeniu losowe. Dlatego należy bezpiecznie używać tylko pierwszych 32 bitów skrótu MD5.

Alternatywnie można również użyć CRC32, który powinien być znacznie szybszy do obliczenia (a kod ma około 20 linii).

+0

"Nie przejmuję się wydajnością md5 - to więcej niż wystarczająco szybko dla moich potrzeb." – Kip

+3

Kip: wydajność lub nie, CRC32 daje 32-bitowy skrót, który jest dokładnie tym, czego potrzebujesz. – dwc

9

Innymi słowy, to pierwsze 32 bity z mieszania MD5 prostu jako „random” jak każdy inny podciąg?

Tak. Jeśli odpowiedź brzmiałaby nie, MD5 nie byłaby wystarczająco bezpieczna. (Oczywiście, ma kilka drobnych słabości kryptograficznych, ale nie jestem świadomy żadnych statystycznych)

+0

MD5 nie jest wystarczająco bezpieczne, jak pokazały liczne ataki :) – Joey

+4

To stwierdzenie jest prawdziwe tylko wtedy, gdy zostaną dodane kwalifikacje. Nie jest wystarczająco bezpieczny, aby uniemożliwić wszystkie ataki kolizyjne. Jest (do tej pory) wystarczająco bezpieczny, aby uniemożliwić atak przedobrazowy. zobacz http://www.vpnc.org/hash.html –

+0

również nie spierać się, ale mój post nie powiedział, że MD5 był wystarczająco bezpieczny. :-) –

1

Stare pytanie tutaj, ale pojawia się często. Odpowiedź jest na pewno NIE, w przeciwnym razie ciąg MD5 nie musiałby mieć więcej niż 32 bity.

Bez względu na to, ciąg MD5 nie jest w ogóle losowy - jest w pełni powtarzalny i powtarzalny przy tym samym wejściu (co jest prawie anty-losowe ;-)).

To, czy jest wystarczająco unikatowy, czy nie, zależy od celu.

Powiązane problemy