Kiedy należy używać CRC do wykrywania błędów w porównaniu z nowszymi funkcjami mieszającymi, takimi jak MD5 lub SHA1? Czy to pierwsze jest łatwiejsze do wdrożenia na sprzęcie wbudowanym?
130
CRC działa dobrze w przypadku wykrywania przypadkowych błędów w danych, które mogą wystąpić, na przykład z powodu zakłóceń sieciowych, szumów linii, zniekształceń itp.
CRC jest obliczeniowo znacznie mniej skomplikowane niż MD5 lub SHA1. Używanie funkcji skrótu, takiej jak MD5, jest prawdopodobnie przesadą w przypadku wykrywania przypadkowych błędów. Jednak użycie CRC do dowolnego rodzaju kontroli bezpieczeństwa byłoby znacznie mniej bezpieczne niż bardziej złożona funkcja mieszająca, taka jak MD5.
I tak, CRC jest znacznie łatwiejsze do wdrożenia na sprzęcie wbudowanym, możesz nawet uzyskać różne pakiety rozwiązań do tego na układach scalonych.
MD5
,SHA-1
należy go również unikać,SHA-2
zalecany jest pewien wariant .CRC jest zaprojektowany przed niezamierzonymi zmianami danych. Oznacza to, że jest dobry do wykrywania niezamierzonych błędów, ale będzie bezużyteczny jako sposób na upewnienie się, że dane nie zostały złośliwie przetworzone.
Zobacz także to .
źródło
Znalazłem badanie, które pokazuje, jak nieodpowiednie są skróty CRC dla tabel skrótów . Wyjaśnia również rzeczywistą charakterystykę algorytmu. Badanie obejmuje również ocenę innych algorytmów wyznaczania wartości skrótu i jest dobrym źródłem informacji.
Odpowiedni wniosek dotyczący CRC dla hashów:
AKTUALIZACJA
Wygląda na to, że witryna nie działa. Archiwum internetowego ma kopię chociaż.
źródło
Uruchomiłem każdą linię tego kodu PHP w pętli 1.000.000. Wyniki są w komentarzach (#).
Mój wniosek:
Użyj "sha256" (lub nowszego), gdy potrzebujesz dodatkowej warstwy bezpieczeństwa.
Nie używaj „md5” ani „sha1”, ponieważ mają:
źródło
"The quick brown fox jumped over the lazy dog."
), zobaczysz, o ile szybsze jest CRC niż MD5.Aby uzyskać informacje o CRC na temat implementacji, szybkości i niezawodności, zobacz Bezbolesny przewodnik po algorytmach wykrywania błędów CRC . Ma wszystko na CRC.
Chyba że ktoś spróbuje złośliwie zmodyfikować twoje dane i ukryć zmianę CRC jest wystarczające. Po prostu użyj „dobrego” (standardowego) wielomianu.
źródło
Wszystko zależy od Twoich wymagań i oczekiwań.
Oto krótkie krótkie różnice między tymi algorytmami funkcji skrótu :
CRC (CRC-8/16/32/64)
MD5
SHA-1
jest kryptograficznym algorytmem mieszania,
generuje 160-bitową (20-bajtową) wartość skrótu zwaną skrótem wiadomości
jest to hash kryptograficzny i od 2005 roku nie jest już uważany za bezpieczny,
może służyć do szyfrowania,
znaleziono przykład kolizji sha1
pierwszy raz opublikowany w 1993 roku (jako SHA-0), a następnie 1995 jako SHA-1,
serie: SHA-0, SHA-1, SHA-2, SHA-3,
Podsumowując, przy użyciu SHA-1 nie jest już uważane za bezpieczne przeciwko dobrze finansowanych przeciwników, bo w 2005 roku, znaleziono kryptoanalitycy ataki na SHA-1, co sugeruje, że być może nie wystarczająco bezpieczne dla ciągłego użytkowania Schneier . NIST USA zaleca, aby agencje federalne zaprzestały używania SHA1-1 do zastosowań wymagających odporności na kolizje i muszą używać SHA-2 po NIST 2010 .
Dlatego jeśli szukasz prostego i szybkiego rozwiązania do sprawdzania integralności plików (pod kątem uszkodzenia) lub do prostych celów buforowania pod względem wydajności, możesz rozważyć CRC-32, jako haszowanie, które możesz rozważyć. MD5, jeśli jednak tworzysz profesjonalną aplikację (która powinna być bezpieczna i spójna), aby uniknąć prawdopodobieństwa kolizji - użyj SHA-2 i nowszych (takich jak SHA-3).
Występ
Kilka prostych testów porównawczych w PHP:
Związane z:
źródło
Nie mówisz, co próbujesz chronić.
CRC jest często używany w systemach wbudowanych jako kontrola przed przypadkowym uszkodzeniem danych, w przeciwieństwie do zapobiegania złośliwej modyfikacji systemu. Przykładami miejsc, w których CRC może być przydatna, jest walidacja obrazu EPROM podczas inicjalizacji systemu w celu ochrony przed uszkodzeniem oprogramowania układowego. Program ładujący system obliczy CRC dla kodu aplikacji i porówna go z zapisaną wartością przed zezwoleniem na uruchomienie kodu. Chroni to przed możliwością przypadkowego uszkodzenia programu lub niepowodzeniem pobierania.
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 można oznaczyć jako nieważne i użyć domyślnego lub zapasowego zestawu danych. CRC może być nieważne z powodu awarii urządzenia lub jeśli użytkownik odłączył zasilanie podczas aktualizacji magazynu danych konfiguracyjnych.
Pojawiły się komentarze, że hash zapewnia większe prawdopodobieństwo wykrycia uszkodzenia niż CRC z wieloma błędami bitów. To prawda, a decyzja, czy użyć 16- lub 32-bitowego CRC, będzie zależeć od konsekwencji bezpieczeństwa użycia uszkodzonego bloku danych i czy można uzasadnić szansę 1 na 2 ^ 16 lub 2 ^ 32 blok danych został nieprawidłowo zadeklarowany jako ważny.
Wiele urządzeń ma wbudowany generator CRC dla standardowych algorytmów. Seria MSP430F5X z Teksasu posiada sprzętową implementację standardu CRC-CCITT.
źródło
CRC32 jest szybszy, a hash ma tylko 32 bity.
Użyj go, gdy chcesz uzyskać szybką i lekką sumę kontrolną. CRC jest używany w sieci Ethernet.
Jeśli potrzebujesz większej niezawodności, lepiej jest użyć nowoczesnej funkcji mieszania.
źródło
Używaj CRC tylko wtedy, gdy zasoby obliczeniowe są bardzo ograniczone (np. Niektóre środowiska osadzone) lub musisz przechowywać / transportować wiele wartości wyjściowych, a przestrzeń / przepustowość jest niewielka (ponieważ CRC są zwykle 32-bitowe, a wyjście MD5 jest 128-bitowe, SHA1 160 bit i inne warianty SHA do 512 bitów).
Nigdy nie używaj CRC do kontroli bezpieczeństwa, ponieważ CRC jest bardzo łatwe do „sfałszowania”.
Nawet w przypadku wykrycia przypadkowych błędów (zamiast wykrywania złośliwych zmian) skróty są lepsze niż zwykłe CRC. Częściowo z powodu prostego sposobu obliczania CRC (a częściowo dlatego, że wartości CRC są zwykle krótsze niż typowe wartości wyjściowe skrótu, więc mają znacznie mniejszy zakres możliwych wartości), jest znacznie bardziej prawdopodobne, że w sytuacji, gdy wystąpią dwa lub więcej błędów jeden błąd maskuje inny, więc mimo dwóch błędów otrzymujesz ten sam CRC.
W skrócie: jeśli nie masz powodu, aby nie używać przyzwoitego algorytmu mieszającego, unikaj prostych CRC.
źródło
Niedawno natknąłem się na zastosowanie CRC, które było sprytne. Autor narzędzia do identyfikacji i usuwania duplikatów plików jdupe (ten sam autor popularnego narzędzia exif jhead) używa go podczas pierwszego przejścia przez pliki. CRC jest obliczane na pierwszych 32K każdego pliku, aby oznaczyć pliki, które wydają się takie same, również pliki muszą mieć ten sam rozmiar. Pliki te są dodawane do listy plików, dla których ma zostać wykonane pełne porównanie binarne. Przyspiesza sprawdzanie dużych plików multimedialnych.
źródło
CRC32 jest znacznie szybszy i czasami obsługuje sprzęt (np. Na procesorach Nehalem). Naprawdę, jedyny raz, kiedy go użyjesz, to połączenie ze sprzętem lub jeśli masz naprawdę małą wydajność
źródło
Zacznijmy od podstaw.
W kryptografii algorytm mieszający konwertuje wiele bitów na mniej bitów poprzez operację skrótu. Hashe służą do potwierdzania integralności wiadomości i plików.
Wszystkie algorytmy haszujące generują kolizje. Kolizja ma miejsce, gdy kilka kombinacji wielobitowych daje taką samą mniejszą liczbę bitów na wyjściu. Siła kryptograficzna algorytmu haszującego jest definiowana przez niezdolność osoby do określenia, jakie będą dane wyjściowe dla danego wejścia, ponieważ gdyby mogli skonstruować plik z hashem pasującym do legalnego pliku i naruszyć zakładaną integralność systemu. Różnica między CRC32 i MD5 polega na tym, że MD5 generuje większy hash, który jest trudniejszy do przewidzenia.
Kiedy chcesz zaimplementować integralność wiadomości - co oznacza, że wiadomość nie została naruszona podczas przesyłania - niemożność przewidywania kolizji jest ważną właściwością. 32-bitowy hash można opisać 4 miliardy różnych komunikatów lub plików za 4 miliardy różnych unikatowych skrótów. Jeśli masz 4 miliardy i 1 pliki, masz gwarancję 1 kolizji. 1 TB przestrzeni bitowej umożliwia miliardy 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 wykonuję transmisję z prędkością 10 Mb / s, prawdopodobieństwo uszkodzenia pakietu tylko po to, aby ominąć crc32 i kontynuować do miejsca docelowego i wykonać jest bardzo niskie. Powiedzmy, że przy 10 Mb / s pojawia się 10 błędów \ sekunda . Jeśli zwiększę to do 1 Gb / s, teraz otrzymuję 1000 błędów na sekundę . Jeśli staram się do 1 exabit na sekundę, wówczas wskaźnik błędów wynosi 1000000000 błędów na sekundę . Powiedzmy, że mamy współczynnik kolizji 1 \ 1 000 000błędy transmisji, co oznacza, że 1 na milion błędów transmisji powoduje, że uszkodzone dane przechodzą niewykryte. Przy 10 Mb / s dane o błędach były wysyłane co 100 000 sekund lub mniej więcej raz dziennie. Przy 1 Gbps zdarzało się to raz na 5 minut. Przy 1 eksabitie na sekundę rozmawiamy kilka razy na sekundę.
Jeśli otworzysz Wireshark, zobaczysz, że typowy nagłówek Ethernet ma CRC32, nagłówek IP ma CRC32, a nagłówek TCP ma CRC32, i to dodatkowo do tego, co mogą robić protokoły wyższych warstw; np. IPSEC może używać MD5 lub SHA do sprawdzania integralności oprócz powyższych. Istnieje kilka warstw sprawdzania błędów w typowej komunikacji sieciowej, które NADAL czasami zawodzą przy prędkościach poniżej 10 Mb / s.
Cykliczna kontrola nadmiarowa (CRC) ma kilka popularnych wersji i kilka rzadkich, ale generalnie jest zaprojektowana tak, aby po prostu stwierdzić, kiedy wiadomość lub plik został uszkodzony podczas przesyłania (przerzucanie wielu bitów). Sam CRC32 nie jest dobrym protokołem sprawdzania błędów według dzisiejszych standardów w dużych, skalarnych środowiskach korporacyjnych ze względu na współczynnik kolizji; przeciętny dysk twardy użytkownika może mieć do 100 tys. plików, a udziały plików w firmie mogą mieć dziesiątki milionów. Stosunek przestrzeni mieszania do liczby plików jest po prostu za mały. CRC32 jest obliczeniowo tani do wdrożenia, podczas gdy MD5 nie.
MD5 został zaprojektowany, aby powstrzymać celowe użycie kolizji, aby złośliwy plik wyglądał łagodnie. Jest uważany za niezabezpieczony, ponieważ obszar skrótu został wystarczająco zmapowany, aby umożliwić wystąpienie niektórych ataków, a niektóre kolizje są przewidywalne. SHA1 i SHA2 to nowe dzieciaki w okolicy.
Wielu dostawców zaczyna używać Md5 do weryfikacji plików, ponieważ można z nim szybko tworzyć pliki wielobajtowe lub wielobajtowe i układać je na szczycie ogólnego wykorzystania i obsługi CRC32 przez system operacyjny. Nie zdziw się, jeśli w ciągu następnej dekady systemy plików zaczną używać MD5 do sprawdzania błędów.
źródło
Kod CRC jest prostszy i szybszy.
Do czego potrzebujesz?
źródło