Dlaczego dobrą praktyką jest porównywanie sum kontrolnych podczas pobierania pliku?

16

Strony internetowe, które dostarczają pliki ISO do pobrania, często podają sumy kontrolne md5 tych plików, których możemy użyć do potwierdzenia, że ​​plik został pobrany poprawnie i nie został uszkodzony.

Dlaczego to jest konieczne? Z pewnością właściwości TCP dotyczące korekcji błędów są wystarczające. Jeśli pakiet nie zostanie poprawnie odebrany, zostanie ponownie przesłany. Czy sama natura połączenia TCP / IP nie gwarantuje integralności danych?

Aditya K
źródło
10
Nie zapomnij także o możliwych błędach w oprogramowaniu i sprzęcie wykonującym transfer danych, zarówno na punktach końcowych, jak i pomiędzy nimi.
sebix
Pobieranie mogło zostać zakończone kilka bajtów wcześniej. Nie koniecznie zauważyłbyś to po rozmiarze pliku, chyba że zwracasz uwagę, a korekcja błędów TCP zweryfikowałaby tylko część danych, które faktycznie dotarły.
Kevin Keane
Sumy kontrolne mogą się przydać, ale w ciągu 20 lat pracy z komputerami nie pamiętam, aby ich używać raz.
Pedro Lobito,
2
MD5 to skróty, a nie sumy kontrolne. Suma kontrolna służy do sprawdzania błędów, w szczególności błędów bitowych podczas transmisji. Skrypt kryptograficzny ma na celu zapewnienie, że dane są dokładnie takie same. W tym sensie skrót byłby nadzbiorem sumy kontrolnej, ale to nie to samo. Poza tym MD5 jest zepsuty od 10 lat (patrz artykuł w Wikipedii, sekcja Bezpieczeństwo ).
0xC0000022L

Odpowiedzi:

20

Jak zauważyli inni, istnieje wiele możliwości uszkodzenia danych, w których jakakolwiek suma kontrolna w warstwie transportowej nie jest w stanie pomóc, na przykład uszkodzenie występujące już przed obliczeniem sumy kontrolnej po stronie wysyłającej, MITM przechwytujący i modyfikujący strumień (również dane jako sumy kontrolne), uszkodzenie występuje po sprawdzeniu sumy kontrolnej na końcu odbierającym itp.

Jeśli pominiemy wszystkie inne możliwości i skupimy się na specyfice samej sumy kontrolnej TCP i na tym, co ona faktycznie robi w zakresie sprawdzania integralności danych, okaże się, że właściwości tej sumy kontrolnej wcale nie są wyczerpujące pod względem wykrywania błędów. Sposób, w jaki wybrano ten algorytm sumy kontrolnej, raczej odzwierciedla wymaganie dotyczące prędkości w połączeniu z okresem czasu (koniec lat siedemdziesiątych).

W ten sposób obliczana jest suma kontrolna TCP :

Suma kontrolna: 16 bitów

Pole sumy kontrolnej jest 16-bitowym uzupełnieniem sumy uzupełnień wszystkich 16-bitowych słów w nagłówku i tekście. Jeśli segment zawiera nieparzystą liczbę oktetów nagłówka i tekstu, które mają być sumowane, ostatni oktet jest dopełniany po prawej stronie zerami, tworząc 16-bitowe słowo do celów sumy kontrolnej. Pad nie jest przesyłany jako część segmentu. Podczas obliczania sumy kontrolnej samo pole sumy kontrolnej jest zastępowane zerami.

Oznacza to, że wszelkie uszkodzenia, które równoważą się podczas sumowania danych w ten sposób, pozostaną niewykryte. Istnieje wiele kategorii uszkodzenia danych, które na to pozwolą, ale jest to tylko trywialny przykład: zmiana kolejności 16-bitowych słów zawsze pozostanie niewykryta.


W praktyce wyłapuje wiele typowych błędów, ale wcale nie gwarantuje integralności. Pomaga to również to, w jaki sposób warstwa L2 wykonuje również kontrole integralności (np. CRC32 ramek Ethernet), chociaż tylko w przypadku transmisji na łączu lokalnym, a wiele przypadków uszkodzonych danych nawet nie jest przekazywanych do stosu TCP.

Sprawdzanie poprawności danych przy użyciu silnego skrótu, a najlepiej podpisu kryptograficznego, odbywa się na zupełnie innym poziomie, jeśli chodzi o zapewnienie integralności danych. Te dwa ledwo można nawet porównać.

Håkan Lindqvist
źródło
Najlepsza odpowiedź! Nienawidzę tego, jak inne odpowiedzi mieszają pojęcia kryptograficznych skrótów i sum kontrolnych.
0xC0000022L
20

Prawdopodobnie istnieje milion powodów, dla których warto sprawdzić sumę md5, ale kilka przychodzi mi do głowy:

  • Szkodliwe działanie - twoje ISO mogło zostać zmienione w drodze z serwera
  • Sama strona jest sfałszowana (najlepiej podpisać też md5sums :))
  • Niepoprawne pobieranie (pomimo korekcji błędów TCP) (sprawdź to )
  • ISO spłonęło niepoprawnie

I tak to zajmuje tylko kilka sekund.

Konrad Gajewski
źródło
21
Oznacza to również, że pobieranie pliku ISO z losowej witryny lustrzanej jest dość bezpieczne, pod warunkiem, że sumy kontrolne pochodzą z zaufanego miejsca; na przykład podpisany post PGP na liście mailingowej foo-announce.
richardb
2
W rzeczywistości nie ma to nic wspólnego z ochroną przed złośliwą aktywnością. Gdyby ISO można było zastąpić złośliwym, wartość sumy kontrolnej MD5 również. Ich podpisanie to inna sprawa, ale nie to, o co prosi OP. Dlatego zamiast „szkodliwej aktywności” znajdującej się na liście jako pierwsza (na pewno brzmi dobrze), tak naprawdę nie powinna nawet znajdować się na liście. Dajesz ludziom fałszywe poczucie bezpieczeństwa, co jest niebezpieczne. superuser.com/questions/849845/…
Austin 'Niebezpieczeństwo' Potęgi
1
@ Austin''Danger''Powers Umm, nie, Konrad ma rację. Z jednej strony, pobieranie lustro zazwyczaj jest różna od strony wykazujące sumę kontrolną, a po drugie, istnieje dość dużo dostawców usług internetowych na świecie, które manipulują ruchu - sumy kontrolne TCP będzie dobrze, ale jesteś pobierając inny plik. I oczywiście brakuje mu jeszcze jednego punktu - plik mógł zostać uszkodzony na serwerze po utworzeniu sumy kontrolnej. Dzieje się tak przez cały czas, szczególnie w przypadku serwerów bardziej „hobbystycznych” (bez odpowiednich ustawień RAID itp.).
Luaan
2
Odpowiedź od 2015 powinien doradzić przeciwko hashe MD5 . Algorytm ten został złamany przez ostatnie dziesięć lat (bez przesady!). Ponadto miksujesz sumę kontrolną i skrót. Są to dwie różne rzeczy o różnych intencjach.
0xC0000022L
1
Aby dodać, aby dodać do komentarza przez @ 0xC0000022L, SHA1 najlepiej unikać, jeśli bezpieczeństwo jest już poważnym problemem, chociaż zarówno on, jak i MD5 są w pełni wystarczające do obrony przed przypadkowym uszkodzeniem.
David Spillett,
6

TCP / IP gwarantuje integralność danych *. Ale to nie gwarantuje, że 100% pliku zostało pobrane. Może być wiele powodów, dla których tak się może stać. Na przykład: Możliwe jest zamontowanie ISO, w którym brakuje jednego lub dwóch bajtów gdzieś pośrodku. Nie będziesz mieć z tym problemu, dopóki nie potrzebujesz jednego lub dwóch określonych plików, które są uszkodzone. Porównując sumy kontrolne upewnij się, że naprawdę pobrałeś cały plik.

* patrz komentarz

Daniel
źródło
8
Myślę, że „gwarantuje integralność danych” naprawdę przecenia to, co faktycznie robi. Podejmuje próbę sprawdzenia integralności danych przy użyciu bardzo uproszczonego podejścia, które nie jest szczególnie silne.
Håkan Lindqvist
6

Suma kontrolna TCP ma tylko 16 bitów. Oznacza to, że przy braku innych sum kontrolnych, jeden na 65536 uszkodzonych pakietów zostanie zaakceptowany jako nieuszkodzony. Jeśli na przykład pobierałeś 8 GB obrazu DVD za pośrednictwem hałaśliwego łącza z 1% współczynnikiem korupcji, możesz oczekiwać 81 niewykrywalnie uszkodzonych pakietów.

MD5 jest znacznie większą sumą kontrolną, o 128 bitach. Szanse na 81 pakietów produkujących coś z taką samą sumą kontrolną jak oryginał wynosi około 1 na 1 000 000 000 000 000 000 000 000 000 000 000 000.

znak
źródło
6

Istnieje kilka powodów weryfikacji sumy kontrolnej pliku pobranego przez HTTP:

  • Zapewnienie, że otrzymałeś cały plik
    • Niektóre klienty, takie jak Firefox , mogą traktować przerwane połączenie jako udane pobieranie, pozostawiając plik obcięty, ale twierdząc, że pobrał OK
  • Zapewnienie, że otrzymałeś poprawny plik
    • np. błędny, przejęty lub złośliwy serwer może wysłać ci coś innego
    • ktoś może manipulować transferem (atak typu man-in-the-middle) - nawet HTTPS nie jest przed tym bezpieczny, jeśli Twój system jest zagrożony przez np. Superfish lub zastosowana metoda szyfrowania jest słaba
    • Mogą również przedstawić ci fałszywą stronę pobierania, więc nawet nie jesteś podłączony do prawdziwego serwera (ale w tym przypadku sumy kontrolne niewiele pomogą, jeśli otrzymasz je z tego samego fałszywego serwera)
    • Z różnych powodów przyłapano wielu dostawców Internetu, którzy wstrzykiwali Javascript do stron w trakcie transmisji 1 ; w zależności od tego, jak dobrze jest to zaimplementowane, może to również zaburzyć pobieranie niektórych plików
    • Lustro może hostować nieaktualną wersję pliku lub administrator mógł załadować niewłaściwy plik
  • Zapewnienie, że plik nie został uszkodzony przez coś, czego TCP nie może wykryć
    • np. plik może zostać uszkodzony na serwerze, więc TCP upewni się tylko, że już uszkodzony plik nie ulegnie dalszemu zakłóceniu w transmisji
    • lub może zostać uszkodzony po przybyciu na twój koniec, z powodu wadliwej pamięci / dysku, błędnego sterownika systemu plików itp
    • Sumy kontrolne TCP są tylko 16-bitowe, więc szanse nie są astronomiczne (1 na 65536), że uszkodzony pakiet nie zostanie wykryty
  • Z ISO, zapewniającym prawidłowe nagrywanie płyty

1 źródła w komentarzu, ponieważ rep. Lol

Rena
źródło
2
Źródła: * security.stackexchange.com/questions/70970/… * adblockplus.org/forum/viewtopic.php?t=8156 „Agresywne wstrzykiwane / osadzone skrypty / reklamy blokowane przez reklamy” * iamsrijit.wordpress.com/2012/09/ 14 /… * więcej można łatwo znaleźć w Google, ale nie jest to tak naprawdę na ten temat
Rena
2

Daniel, w zależności od narzędzia, którego używasz do pobierania ISO na słowo. Jeśli tak, powiedz Firefox. Może to pokazywać pobieranie pliku. Jednak możesz nie mieć pełnego ISO nienaruszonego. Jeśli go wypalisz, spróbuj go użyć, może brakować informacji. Zdarza się to od czasu do czasu na różnych serwerach hostingowych.

Dobrą praktyką jest przynajmniej porównywanie rozmiaru pliku (całkowita liczba bajtów lub bitów), aby upewnić się, że pasują do siebie. Windows pokaże liczbę bajtów pliku inną niż Linux. Kontrola sumy MD5 pokaże te same wartości bez względu na używany system operacyjny. Mam nadzieję, że to trochę pomoże. Twoje zdrowie...

David Thomson
źródło
2
Windows pokazuje liczbę bajtów inaczej niż pokazuje Linux? Naprawdę? Myślałem, że abdominacja wyszła z systemem plików CP / M-size-as-blocks-count. (Teraz, jeśli patrzysz na coś innego niż liczba bajtów - powiedzmy, rozmiar pliku wyświetlany w Eksploratorze - może się różnić. Ale żaden rozsądny sysadmin nie powinien sprawdzać integralności pobranego pliku w ten sposób, więc to nie jest problem.) Bajty są bajtami. Patrzenie na to w kategoriach bitów nie ma jednak sensu; kiedy ostatni raz pobrałeś i zapisałeś pół bajta?
CVn
2

Dostrzegam wiele interesujących odpowiedzi, ale należy wziąć pod uwagę ostatnią rzecz: problem dwóch generałów

Problem dwóch generałów i problem bizantyjskich generałów szczegółowo rozważają konsekwencje rzetelnego przekazywania informacji przez niewiarygodne kanały.

Suma kontrolna to kolejna warstwa „zwiększającej się niezawodności”, która ma bardzo małą szansę na awarię. To jest powód, dla którego jest tak popularny.

Fernando Cordeiro
źródło