Чому корисно порівнювати контрольні суми під час завантаження файлу?


16

Веб-сайти, які постачають ISO-файли для завантаження, часто дають контрольні суми md5 цих файлів, які ми можемо використовувати для підтвердження того, що файл завантажено правильно та не був пошкоджений.

Чому це потрібно? Звичайно, властивості TCP, що виправляють помилки, є достатніми. Якщо пакет отримано неправильно, він буде повторно переданий. Чи не сама природа з'єднання TCP / IP не гарантує цілісність даних?


10
Також не забувайте про можливі помилки в програмному та апаратному забезпеченні, що здійснюють передачу даних, як і між кінцевими точками.
sebix

Завантаження може закінчитися на кілька байт раніше. Ви не обов'язково помічаєте це за розміром файлу, якщо ви не звернете увагу, і виправлення помилок TCP підтвердило б лише частину даних, які фактично надійшли.
Кевін Кін

Контрольні суми можуть бути корисними, але, за 20 років роботи з комп’ютерами, я не пам’ятаю жодного разу використовувати їх.
Педро Лобіто

2
MD5 - хеші, а не контрольні суми. Контрольна сума використовується для перевірки помилок, зокрема бітових помилок під час передачі. Криптографічний хеш покликаний забезпечити точно збіг даних. У цьому сенсі хеш був би набором контрольної суми, але вони не однакові. Крім того, що MD5 порушено вже 10 років (див. Статтю Вікіпедії, розділ Безпека ).
0xC0000022L

Відповіді:


20

Як зазначають інші, існує багато можливостей для корупції даних, коли будь-яка контрольна сума на транспортному шарі не може допомогти, наприклад, пошкодження, що відбувається вже до того, як контрольна сума буде розрахована на стороні відправки, MITM перехоплює та змінює потік (дані також як контрольні суми), корупція, що відбувається після перевірки контрольної суми на кінці прийому тощо.

Якщо ми нехтуємо всіма цими іншими можливостями і зосередимось на специфіці самої контрольної суми TCP та тому, що вона насправді робить з точки зору перевірки цілісності даних, виявиться, що властивості цієї контрольної суми зовсім не є вичерпними з точки зору виявлення помилок. Спосіб вибору цього алгоритму контрольної суми швидше відображає вимогу швидкості в поєднанні з періодом часу (кінець 1970-х).

Ось як обчислюється контрольна сума TCP :

Контрольна сума: 16 біт

Поле контрольної суми - це 16-бітове доповнення суми доповнення всіх 16-бітних слів у заголовку та тексті. Якщо в сегменті є непарна кількість заголовка та текстових октетів, які підлягають контрольній сумі, останній октет вкладається праворуч із нулями, щоб утворити 16-бітове слово для цілей контрольної суми. Накладка не передається як частина сегмента. Під час обчислення контрольної суми саме поле контрольної суми замінюється нулями.

Це означає, що будь-яка корупція, яка врівноважується при підсумовуванні даних таким чином, не виявиться. До даних, що це дозволить, є ряд категорій корупції, але це лише тривіальний приклад: зміна порядку 16-ти бітових слів завжди залишатиметься невизначеною.


На практиці він виявляє багато типових помилок, але зовсім не гарантує цілісності. Допомагає також те, як рівень L2 також здійснює перевірку цілісності (наприклад, CRC32 кадрів Ethernet), хоча і лише для передачі по локальній лінії зв'язку, і багато випадків пошкоджених даних навіть не передаються до стеку TCP.

Перевірка даних за допомогою сильного хешу або, переважно, криптографічного підпису, відбувається на зовсім іншому рівні з точки зору забезпечення цілісності даних. Їх навряд чи можна порівняти.


Найкраща відповідь! Я ненавиджу, як інші відповіді змішують поняття криптографічних хешів і контрольних сум.
0xC0000022L

20

Напевно, є мільйон причин, чому варто перевірити md5sum, але мені спадають на думку декілька:

  • Зловмисна активність - ваш ISO може бути підроблений на шляху з сервера
  • Сама сторінка підроблена (найкраще, щоб md5sums також були підписані :))
  • Помилка завантаження (незважаючи на виправлення помилок TCP) (перевірте це )
  • ISO записаний неправильно

І це все одно займає лише кілька секунд.


21
Це також означає, що завантажувати ISO з випадкового дзеркального сайту досить безпечно, за умови отримання контрольних сум звідкись, де довіряють; наприклад, підписаний PGP пост до списку розсилки foo-messages.
Річардб

2
Це насправді не має нічого спільного із захистом від зловмисної діяльності. Якщо ISO можна було б замінити шкідливим, то це могло б і значення контрольної суми MD5. Підписання їх - це інша справа, але не те, про що йдеться в ОП. Тож замість того, щоб "зловмисна активність" була першою у вашому списку (це впевнено звучить добре), насправді вона навіть не повинна бути у вашому списку. Ти даєш людям помилкове почуття безпеки, що небезпечно. superuser.com/questions/849845/…
Остін "Небезпека" Повноваження

1
@ Austin''Danger''Powers Ум, ні, справа Конрада. З одного боку , завантажити дзеркало зазвичай це відрізняється від сайту з зазначенням суми, а по- друге, є досить багато інтернет - провайдерів в світі , які маніпулюють трафік - TCP контрольних сум буде добре, але ви завантажуєте інший файл. І звичайно, він також пропускає ще один момент - файл, можливо, був пошкоджений на сервері після створення контрольної суми. Це відбувається постійно, особливо для більш "хобістських" серверів (без належних налаштувань RAID тощо).
Луань

2
Відповідь від 2015 року має порадити проти хешів MD5 . Цей алгоритм був порушений протягом останніх десяти років (без перебільшення!). Також ви змішуєте контрольну суму і хеш. Це дві різні речі з різним наміром за ними.
0xC0000022L

1
Для додання, щоб додати коментар від @ 0xC0000022L SHA1 найкраще уникати, якщо безпека вже є головним питанням, хоча і він, і MD5 цілком адекватні для захисту від випадкової корупції.
Девід Спіллетт

6

TCP / IP гарантує цілісність даних *. Але це не гарантує, що 100% файлу було завантажено. Причин, чому це могло статися, може бути багато. Наприклад: Можливо, ви можете встановити ISO, який пропускає один-два байти десь посередині. У вас не буде проблем з цим, поки вам не знадобляться один або два конкретні файли, які є пошкодженими. Порівняння контрольних сум гарантує, що ви дійсно завантажили весь файл.

* див. коментар


8
Я думаю, що "гарантує цілісність даних" насправді перепродаж того, що він насправді робить. Він робить спробу перевірити цілісність даних дуже худим підходом, який не особливо сильний.
Хокан Ліндквіст

6

Контрольна сума TCP становить лише 16 біт. Це означає, що за відсутності інших контрольних сум один з кожні 65536 зіпсованих пакетів буде прийнятий як некорумпований. Якщо, наприклад, ви завантажували зображення DVD з 8 Гб через галасливе посилання з коефіцієнтом корупції 1%, ви очікували б 81 непомітно зіпсованих пакетів.

MD5 - набагато більша контрольна сума, на 128 біт. Шанс цих 81 пакета, що виробляє щось з тією ж контрольною сумою, що і оригінал, становить приблизно 1 на 1 000 000 000 000 000 000 000 000 000 000 000 000.


6

Існує кілька причин для перевірки контрольної суми файлу, завантаженого через HTTP:

  • Переконайтеся, що ви отримали весь файл
    • Деякі клієнти, такі як Firefox , можуть сприймати перерване з’єднання як вдале завантаження, залишаючи вам усічений файл, але заявляючи, що його завантажено ОК
  • Переконайтеся, що ви отримали правильний файл
    • наприклад, баггі, зламаний або шкідливий сервер може надіслати вам щось інше
    • хтось може підробити передачу (атака "людина-посеред") - навіть HTTPS не є безпечним від цього, якщо ваша система порушена, наприклад, Superfish, або метод шифрування, який використовується, слабкий
    • Вони можуть просто представити вам помилкову сторінку завантаження, тому ви навіть не підключені до реального сервера (але в цьому випадку контрольні суми не дуже допоможуть, якщо ви отримаєте їх з того ж підробленого сервера)
    • З різних причин ряд провайдерів спіймали введення Javascript на сторінки при передачі 1 ; залежно від того, наскільки добре це реалізовано, це може також забруднити деякі завантаження файлів
    • У дзеркалі може бути розміщена застаріла версія файлу, або адміністратор може завантажити інший файл
  • Переконайтесь, що файл не був пошкоджений чимось тим, що TCP не може виявити
    • наприклад, файл може бути пошкоджений на сервері, тому TCP лише гарантуватиме, що вже пошкоджений файл не отримав подальших помилок при передачі
    • або вона може бути пошкоджена після того, як ви приїдете до кінця, через несправну пам'ять / диск, помилковий драйвер файлової системи тощо
    • Контрольні суми TCP лише 16-бітні, тому шанси не є астрономічними (1 на 65536), що пошкоджений пакет не буде виявлений
  • Із ISO, гарантуючи правильне записування диска

1 джерела в коментарі, тому що lol респ


2
Джерела: * security.stackexchange.com/questions/70970/… * adblockplus.org/forum/viewtopic.php?t=8156 "Сценарії / вбудовані агресивні провайдери / вбудовані скрипти / оголошення блокуються" * iamsrijit.wordpress.com/2012/09/ 14 /… * більше можна легко знайти в Google, але це насправді не тематична тема тут
Рена,

2

Даніель, залежно від інструменту, який ви використовуєте для завантаження ISO за кожну думку. Якщо це Say Firefox .. Це може відобразити завантаження файлу. Однак у вас може бути не повний ISO недоторканим. Якщо ви записали його, то спробуйте використовувати його, інформація може бути відсутня. Час від часу трапляється на різних веб-серверах, що розміщують файли.

Це хороша практика хоча б порівняти розмір файлу (загальний байт чи біт), щоб переконатися, що вони відповідають. Windows покаже, що кількість байтів файлів відрізняється, ніж скажімо, Linux. Перевірка суми MD5 не відображатиме однакові значення, не використовуючи яку ОС. Сподіваюсь, це трохи допомагає. Ура ...


2
Windows показує кількість байтів інакше, ніж це показує Linux? Дійсно? Я подумав, що животик вийшов з файлової системи CP / M-файлу розміру-як-блоків. (Тепер, якщо ви дивитесь на щось інше, ніж кількість байтів - скажімо, відображення розміру файлу в Провіднику - воно може цілком відрізнятися. Але жоден здоровий sysadmin не повинен перевіряти цілісність завантаженого файлу таким чином, тому це не випуск.) Байти - байти. Дивитись на це з точки зору бітів немає сенсу, хоча; коли ви востаннє завантажували та зберігали півбайта?
CVn

2

Я помічаю багато цікавих відповідей, але є останнє, що слід врахувати: проблема двох генералів

Проблема двох генералів та проблема візантійських генералів конкретно розглядають наслідки надійної передачі інформації через ненадійні канали.

Контрольні суми - це ще один шар "підвищення надійності", і він має дуже малий шанс виходу з ладу. Це причина, чому вона така популярна.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.