Jak CRC i sumy kontrolne zapewniają integralność danych w codziennym oprogramowaniu

11

Prawdopodobnie widziałeś ciąg skrótu lub wartość sumy kontrolnej podczas aktualizacji oprogramowania lub pobierania pliku. Wygląda jak losowy szum – długi ciąg cyfr szesnastkowych lub krótka liczba dołączona do pliku. Pełni jednak istotną funkcję. To jest cyfrowy odcisk palca. Jeśli zmieni się choć jeden bit danych, odcisk palca ulegnie całkowitej zmianie. Mechanizm ten gwarantuje, że pobrałeś dokładnie ten plik, który został wysłany, aż do ostatniego bajtu.

Dwa najpopularniejsze sposoby osiągnięcia tego to sumy kontrolne i kody cyklicznej nadmiarowości (CRC). Choć brzmią podobnie, opierają się na różnych zasadach i służą nieco innym niszom w świecie protokołów sieciowych i przechowywania danych. Zrozumienie różnicy między nimi jest ważne dla każdego, kto zajmuje się przesyłaniem plików, ruchem sieciowym lub diagnostyką sprzętu.

Prosta suma kontrolna

W swej istocie suma kontrolna jest wartością uzyskaną z bloku danych cyfrowych. Najbardziej podstawową wersją jest Internet Checksum, używana w starszych protokołach, takich jak IPv4 i UDP. Działa poprzez przetwarzanie danych w postaci sekwencji 16-bitowych słów i dodawanie ich do siebie. Jeśli liczba bajtów jest nieparzysta, dodawany jest bajt dopełniający. Następnie sumę odwraca się o jednostki (dopełnienie).

Ta metoda jest bardzo szybka. Bardzo szybko. Ale nie jest to szczególnie niezawodne. Może pomijać pewne typy błędów. Na przykład, jeśli zostaną zamienione dwa bajty lub jeśli inwersja bitu w jednej pozycji zostanie skompensowana inwersją bitu w innej, suma kontrolna może pozostać niezmieniona. Przypomina to sprawdzanie wagi walizki bez uwzględniania jej zawartości. Wiesz, że waga jest prawidłowa, ale nie wiesz, czy koszula nadal tam jest, czy została zastąpiona kamieniem o tej samej wadze.

Ze względu na te ograniczenia proste sumy kontrolne są obecnie rzadko używane do krytycznej kontroli integralności. Zostały one w większości zastąpione bezpieczniejszymi algorytmami, takimi jak CRC lub skrótami kryptograficznymi, takimi jak SHA-256. Jednak zrozumienie prostej sumy kontrolnej pomaga wyjaśnić, dlaczego potrzebujemy lepszych narzędzi do sprawdzania integralności danych.

Pojawia się cykliczny kod nadmiarowy (CRC).

Tutaj robi się ciekawie. CRC opiera się na dzieleniu wielomianów. Zamiast po prostu dodawać liczby, CRC traktuje dane jako dużą liczbę binarną i dzieli ją przez predefiniowany wielomian generujący. Pozostała część tego podziału to wartość CRC.

To matematyczne podejście sprawia, że ​​CRC jest znacznie skuteczniejszy w wykrywaniu błędów. Może wykryć wszystkie błędy jednobitowe, wszystkie błędy podwójnego przewrócenia bitu i dowolną nieparzystą liczbę błędów. Wykrywa także błędy serii — uszkodzone kolejne bity — które są powszechne w zaszumionych kanałach transmisji. Pomyśl o błędach serii jako o tymczasowej usterce sygnału radiowego lub zadrapaniu na płycie CD. CRC został zaprojektowany tak, aby radzić sobie z niedoskonałościami świata rzeczywistego.

Najbardziej popularną opcją jest CRC-32, która generuje wartość 32-bitową. Znajdziesz go wszędzie. Ramki Ethernet, archiwa ZIP, obrazy PNG, a nawet niektóre systemy baz danych korzystają z CRC-32. Nie jest to rozwiązanie kryptograficzne — nie można go użyć do udowodnienia, że ​​ktoś nie manipulował celowo danymi — ale doskonale nadaje się do wykrywania przypadkowego uszkodzenia.

Dlaczego jest to dla Ciebie ważne?

Możesz nie myśleć o CRC podczas przesyłania strumieniowego wideo lub wysyłania wiadomości e-mail. Ale to działa w tle. Kiedy pobierasz łatkę do gry, Twój system wykorzystuje sumy kontrolne, czyli CRC, do weryfikacji plików. Jeśli wartości się nie zgadzają