Kiedy CRC jest bardziej odpowiedni do stosowania niż MD5 / SHA1?

Kiedy właściwe jest użycie CRC do wykrywania błędów w porównaniu z bardziej nowoczesnymi funkcjami hashującymi, takimi jak MD5 lub SHA1? Czy ten pierwszy jest łatwiejszy do wdrożenia na sprzęcie wbudowanym?

Author: Gili, 2009-06-15

13 answers

CRC sprawdza się w wykrywaniu przypadkowych błędów w danych, które mogą wystąpić na przykład w wyniku zakłóceń sieciowych, szumów linii, zniekształceń itp.

CRC jest obliczeniowo znacznie mniej złożony niż MD5 czy SHA1. Używanie funkcji skrótu, takiej jak MD5, jest prawdopodobnie przesadą w wykrywaniu błędów losowych. Jednak użycie CRC do wszelkiego rodzaju kontroli bezpieczeństwa byłoby znacznie mniej bezpieczne niż bardziej złożona funkcja haszująca, taka jak MD5.

I tak, CRC jest znacznie łatwiejsze do wdrożenia na sprzęcie wbudowanym, można może nawet uzyskać różne pakiety rozwiązań dla tego NA IC.

 90
Author: defines,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-07 23:05:00

CRC jest zaprojektowany przed niezamierzonymi zmianami w danych. Oznacza to, że jest dobry do wykrywania niezamierzonych błędów, ale będzie bezużyteczny jako sposób upewnienia się, że dane nie zostały złośliwie potraktowane.

Zobacz też to .

 28
Author: Liran Orevi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-19 16:27:47

Znalazłem badanie, które pokazuje Jak nieodpowiednie CRC hashe są dla tabel hash. Wyjaśnia również rzeczywiste cechy algorytmu. badanie obejmuje również ocenę innych algorytmów hashowych i jest dobrym odniesieniem do zachowania.

Odpowiedni wniosek dotyczący CRC dla hashów:

CRC32 nigdy nie był przeznaczony do użycia w tabelach hash. Naprawdę nie ma dobrego powodu, aby używać go do tego celu i zalecam, aby tego unikać. Jeśli zdecyduj się na użycie CRC32, ważne jest, aby używać bitów skrótu od końca przeciwnego do tego, w którym są podawane oktety klucza. Jaki to koniec zależy od konkretnej implementacji CRC32. Nie traktuj CRC32 jako funkcji skrótu "czarnej skrzynki" i nie używaj jej jako skrótu ogólnego przeznaczenia. Pamiętaj, aby przetestować każdą aplikację pod kątem przydatności.

UPDATE

Wygląda na to, że strona nie działa. internet archive ma jednak kopię .

 17
Author: Andre Luus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-21 06:50:34

Uruchomiłem każdą linię tego kodu PHP w pętli 1.000.000. Wyniki są w komentarzach (#).

hash('crc32', 'The quick brown fox jumped over the lazy dog.');#  750ms   8 chars
hash('crc32b','The quick brown fox jumped over the lazy dog.');#  700ms   8 chars
hash('md5',   'The quick brown fox jumped over the lazy dog.');#  770ms  32 chars
hash('sha1',  'The quick brown fox jumped over the lazy dog.');#  880ms  40 chars
hash('sha256','The quick brown fox jumped over the lazy dog.');# 1490ms  64 chars
hash('sha384','The quick brown fox jumped over the lazy dog.');# 1830ms  96 chars
hash('sha512','The quick brown fox jumped over the lazy dog.');# 1870ms 128 chars

Mój wniosek:

  • Użyj "crc32b", gdy potrzebujesz http://en.wikipedia.org/wiki/Cyclic_redundancy_check i nie dbasz o bezpieczeństwo.
  • Użyj "sha256" (lub wyższej), gdy potrzebujesz dodatkowej warstwy zabezpieczeń.

  • Nie używaj "md5" lub "sha1", ponieważ mają:

    1. niektóre problemy z bezpieczeństwem, gdy zależy ci na bezpieczeństwie
    2. dłuższy hash string i są wolniejsze niż "crc32b", gdy wszystko czego potrzebujesz to CRC
 16
Author: Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-06 12:21:36

Informacje o implementacji, szybkości i niezawodności CRC można znaleźć w a painless guide to CRC error detection algorithms. Ma wszystko na temat CRCs.

Chyba, że ktoś spróbuje złośliwie zmodyfikować Twoje dane i ukryć zmianę CRC wystarczy. Wystarczy użyć" dobrego " (standardowego) polinomialu.

 10
Author: Gerhard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-03 08:36:56

Nie mówisz, co próbujesz chronić.

CRC jest często używany w systemach wbudowanych jako zabezpieczenie przed przypadkowym uszkodzeniem danych, w przeciwieństwie do zapobiegania złośliwej modyfikacji systemu. Przykładami miejsc, w których CRC może być przydatny, jest Walidacja obrazu EPROM podczas inicjalizacji systemu w celu ochrony przed uszkodzeniem oprogramowania układowego. System bootloader obliczy CRC dla kodu aplikacji i porówna z zapisaną wartością przed zezwoleniem na kod biegać. Chroni to przed możliwością przypadkowego uszkodzenia programu lub nieudanego pobrania.

CRC może być również używany w podobny sposób do ochrony danych konfiguracyjnych przechowywanych w pamięci FLASH lub EEPROM. Jeśli CRC jest niepoprawne, dane mogą być oznaczone jako nieprawidłowe i używany jest domyślny lub zapasowy zestaw danych. CRC może być nieprawidłowy z powodu awarii urządzenia lub jeśli użytkownik usunął zasilanie podczas aktualizacji magazynu danych konfiguracyjnych.

Pojawiły się komentarze, że hash zapewnia większe prawdopodobieństwo wykrycia korupcji niż CRC z wieloma błędami bitowymi. Jest to prawda, a decyzja o tym, czy używać 16 lub 32-bitowego CRC, czy nie, będzie zależeć od konsekwencji bezpieczeństwa używanego uszkodzonego bloku danych i czy można uzasadnić 1 na 2^16 lub 2^32 szansę na niepoprawne uznanie bloku danych za ważny.

Wiele urządzeń posiada wbudowany generator CRC dla standardowych algorytmów. Seria MSP430F5X firmy Texas posiada sprzętową implementację Standard CRC-CCITT.

 7
Author: ʎəʞo uɐɪ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-16 12:16:39

CRC32 jest szybszy, a hash ma tylko 32 bity.

Użyj go, gdy chcesz tylko szybką i lekką sumę kontrolną. CRC jest używany w Ethernecie.

Jeśli potrzebujesz większej niezawodności, lepiej jest użyć nowoczesnej funkcji haszującej.

 6
Author: François,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-15 15:51:23

Używaj CRC tylko wtedy, gdy zasoby obliczeniowe są bardzo ciasne (np. niektóre środowiska osadzania) lub musisz przechowywać / transportować wiele wartości wyjściowych, a przestrzeń / przepustowość jest ciasna (ponieważ CRC są zwykle 32-bitowe, gdzie wyjście MD5 jest 128-bitowe, SHA1 160-bitowe i inne warianty SHA do 512-bitowe).

Nigdy nie używaj CRC do kontroli bezpieczeństwa, ponieważ CRC jest bardzo łatwy do"sfałszowania".

Nawet do wykrywania przypadkowych błędów (zamiast wykrywania złośliwych zmian) hashe są lepsze niż prosty CRC. Częściowo ze względu na prosty sposób obliczania CRC (a częściowo dlatego, że wartości CRC są zwykle krótsze niż typowe wyjścia hash, więc mają znacznie mniejszy zakres możliwych wartości) jest znacznie bardziej prawdopodobne, że w sytuacji, gdy występują dwa lub więcej błędów, jeden błąd zamaskuje drugi, więc kończy się z tym samym CRC pomimo dwóch błędów.

W skrócie: jeśli nie masz powodu , a nie , aby używać porządnego algorytmu hash, unikaj prostych CRC.

 5
Author: David Spillett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-15 16:48:22

CRC32 jest o wiele szybszy i czasami ma wsparcie sprzętowe (np. na procesorach Nehalem). Tak naprawdę, używasz go tylko wtedy, gdy łączysz się ze sprzętem, lub jeśli jesteś naprawdę mocno pod względem wydajności

 4
Author: Paul Betts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-15 15:47:07

Natknąłem się ostatnio na użycie CRC, które było mądre. Autor narzędzia jdupe File duplication identification and removal tool (ten sam autor popularnego narzędzia exif jhead) używa go podczas pierwszego przejścia przez pliki. CRC jest obliczany na pierwszych 32K KAŻDEGO pliku, aby zaznaczyć pliki, które wydają się być takie same, również pliki muszą mieć ten sam rozmiar. Pliki te są dodawane do listy plików, na których można wykonać pełne porównanie binarne. Przyspiesza sprawdzanie dużych nośników pliki.

 4
Author: John Wright,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-09 02:43:16

Wszystko zależy od twoich wymagań i oczekiwań.

Oto krótkie różnice między algorytmami funkcji hashowej:

CRC (CRC-8/16/32/64)

    Jest to algorytm kryptograficzny, który wykorzystuje funkcję liniową opartą na cyklicznych kontrolach nadmiarowości.]}
  • może wytworzyć 9, 17, 33 lub 65 bitów
  • nie jest przeznaczony do wykorzystania w celach kryptograficznych, ponieważ nie Gwarancje,
  • nie nadaje się do użycia w podpisach cyfrowych, ponieważ jest łatwo odwracalny2006,
  • nie powinny być używane do celów szyfrowania,
  • różne łańcuchy mogą generować kolizję,
  • wynaleziony w 1961 roku i używany w Ethernecie i wielu innych standardach,

MD5

  • jest kryptograficznym algorytmem haszującym,
  • generowanie 128-bitowej (16-bajtowej) wartości skrótu (32-cyfrowy szesnastkowy liczby)
  • Jest to skrót kryptograficzny, ale jest uważany za przestarzały, jeśli martwisz się o bezpieczeństwo.]}
  • znane są łańcuchy, które mają tę samą wartość skrótu MD5
  • może być używany do celów szyfrowania,

SHA-1

  • jest kryptograficznym algorytmem haszującym,
  • W ten sposób możliwe jest wyświetlenie 160-bitowej (20-bajtowej) wartości skrótu znanej jako skrót wiadomości.]}
  • jest to hash kryptograficzny i od 2005 roku nie jest już brany pod uwagę secure,
  • może być używany do celów szyfrowania,
  • znaleziono przykład kolizji sha1
  • Po raz pierwszy opublikowana w 1993 roku (jako SHA-0), a następnie w 1995 roku jako SHA-1,
  • Seria: SHA-0, SHA-1, SHA-2, SHA-3,

    Podsumowując, używanie SHA-1 nie jest już uważane za bezpieczne wobec dobrze finansowanych przeciwników, ponieważ w 2005 roku kryptoanalitycy odkryli ataki na SHA-1, co sugeruje, że może nie być wystarczająco bezpieczne do ciągłego użytkowaniaschneier. USA NIST zaleca, aby agencje federalne przestały używać SHA1-1 do aplikacji, które wymagają odporności na kolizje i muszą używać SHA-2 po 2010NIST.

Dlatego, jeśli szukasz prostego i szybkiego rozwiązania do sprawdzania integralności plików( przed uszkodzeniem) lub do prostych celów buforowania pod względem wydajności, możesz rozważyć CRC-32, do haszowania możesz rozważyć użycie MD5, jednak jeśli tworzysz profesjonalną aplikację (które powinny być bezpieczne i spójne), aby uniknąć prawdopodobieństwa kolizji - użyj SHA-2 i wyższych (takich jak SHA-3).

Wydajność

Jakiś prosty test porównawczy w PHP:

# Testing static text.

$ time php -r 'for ($i=0;$i<1000000;$i++) crc32("foo");'
real    0m0.845s
user    0m0.830s
sys     0m0.008s

$ time php -r 'for ($i=0;$i<1000000;$i++) md5("foo");'
real    0m1.103s
user    0m1.089s
sys     0m0.009s

$ time php -r 'for ($i=0;$i<1000000;$i++) sha1("foo");'
real    0m1.132s
user    0m1.116s
sys   0m0.010s

# Testing random number. 

$ time php -r 'for ($i=0;$i<1000000;$i++) crc32(rand(0,$i));'
real    0m1.754s
user    0m1.735s
sys     0m0.012s\

$ time php -r 'for ($i=0;$i<1000000;$i++) md5(rand(0,$i));'
real    0m2.065s
user    0m2.042s
sys     0m0.015s

$ time php -r 'for ($i=0;$i<1000000;$i++) sha1(rand(0,$i));'
real    0m2.050s
user    0m2.021s
sys     0m0.015s

Powiązane:

 4
Author: kenorb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:10

Zacznijmy od podstaw.

W kryptografii algorytm haszujący konwertuje wiele bitów na mniej bitów poprzez operację digest. Hashe są używane do potwierdzenia integralności wiadomości i plików.

Wszystkie algorytmy haszujące generują kolizje. kolizja występuje wtedy, gdy kilka kombinacji wielobitowych wytwarza taką samą ilość bitów wyjściowych. Siła kryptograficzna algorytmu haszującego jest definiowana przez niezdolność jednostki do określenia, jaki wynik będzie dla danego wejścia, ponieważ gdyby mogli, mogliby skonstruować Plik z Hashem, który pasuje do legalnego pliku i zagrozić zakładanej integralności systemu. Różnica między CRC32 a MD5 polega na tym, że MD5 generuje większy hash, który jest trudniejszy do przewidzenia.

Gdy chcesz zaimplementować integralność wiadomości - co oznacza, że wiadomość nie została naruszona podczas transportu - niemożność przewidywania kolizji jest ważną właściwością. A 32-bitowy hash może opisać 4 miliardy różne wiadomości lub pliki wykorzystujące 4 miliardy różnych unikalnych skrótów. Jeśli masz 4 miliardy i 1 Plików, masz gwarancję 1 kolizji. 1 TB przestrzeni bitowej ma możliwość miliardów kolizji. Jeśli jestem atakującym i mogę przewidzieć, jaki będzie ten 32-bitowy hash, mogę skonstruować zainfekowany plik, który koliduje z plikiem docelowym; który ma ten sam hash.

DODATKOWO jeśli robię transmisję 10mbps to możliwość uszkodzenia pakietu tylko prawo do ominięcia crc32 i kontynuowania wzdłuż do miejsca docelowego i wykonania jest bardzo niskie. Powiedzmy, że przy 10mbps dostaję 10 błędów \ second. Jeśli zwiększę to do 1Gbps, teraz dostaję 1,000 błędów na sekundę. Jeśli ramuję do 1 exabit na sekundę, to mam wskaźnik błędu 1,000,000,000 błędów na sekundę. Powiedzmy, że mamy współczynnik kolizji1\1,000,000 błędy transmisji, co oznacza, że 1 na milion błędów transmisji powoduje, że uszkodzone dane przedostają się niezauważony. Przy 10 MB / s otrzymywałbym dane o błędach wysyłane co 100 000 sekund lub około raz dziennie. Przy 1gbps zdarza się to raz na 5 minut. Przy 1 eksabicie na sekundę, mówimy kilka razy na sekundę.

Jeśli otworzysz wireshark, zobaczysz, że twój typowy nagłówek ethernet ma CRC32, Twój nagłówek IP ma CRC32, a Twój nagłówek TCP ma CRC32, i to jest dodatek do tego, co mogą robić protokoły wyższej warstwy; np. powyżej. Istnieje kilka warstw sprawdzania błędów w typowej komunikacji sieciowej i nadal wygłupiają się od czasu do czasu przy prędkościach poniżej 10 MB / s.

Cyclic Redundancy Check (CRC) ma kilka popularnych wersji i kilka niecodziennych, ale zazwyczaj jest zaprojektowany tak, aby po prostu powiedzieć, kiedy wiadomość lub plik został uszkodzony podczas transportu (przewracanie wielu bitów). CRC32 sam w sobie nie jest bardzo dobrym protokołem sprawdzania błędów według dzisiejszych standardów w dużych, skalarnych środowiskach korporacyjnych z powodu kolizji Oceń; Przeciętny dysk twardy użytkownika może mieć ponad 100k plików, a akcje plików w firmie mogą mieć dziesiątki milionów. Stosunek przestrzeni hash do liczby plików jest po prostu zbyt niski. CRC32 jest obliczeniowo Tani do implimentu, podczas gdy MD5 nie.

MD5 został zaprojektowany, aby powstrzymać celowe użycie kolizji, aby złośliwy plik wyglądał złośliwie. Jest uważany za niepewny, ponieważ przestrzeń hashspace została wystarczająco zmapowana, aby umożliwić wystąpienie niektórych ataków, a niektóre kolizje są / align = "left" / SHA1 i SHA2 to nowe dzieciaki z bloku.

Do weryfikacji plików, Md5 zaczyna być używany przez wielu dostawców, ponieważ możesz szybko z nim robić wielogabajtowe pliki lub wieloterbyte pliki i układać je na szczycie ogólnego użytkowania systemu operacyjnego i obsługi CRC32. nie zdziw się, jeśli w ciągu następnej dekady systemy plików zaczną używać MD5 do sprawdzania błędów.

 3
Author: bobinator,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-09 10:08:45

Kod CRC jest prostszy i szybszy.

Po co ci jakieś?

 1
Author: Macarse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-15 15:47:51