Когда CRC более подходит для использования, чем MD5 / SHA1? - PullRequest
117 голосов
/ 15 июня 2009

Когда целесообразно использовать CRC для обнаружения ошибок по сравнению с более современными функциями хеширования, такими как MD5 или SHA1? Первый легче реализовать на встроенном оборудовании?

Ответы [ 13 ]

4 голосов
/ 09 ноября 2013

Давайте начнем с основ.

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

Все алгоритмы хеширования генерируют коллизии. Коллизия - это когда несколько многоразрядных комбинаций производят одинаково меньшее количество битов. Криптографическая стойкость алгоритма хеширования определяется неспособностью индивида определить, какими будут выходные данные для данного ввода, потому что, если бы они могли, они могли бы создать файл с хешем, который соответствует допустимому файлу, и поставить под угрозу предполагаемую целостность системы. Разница между CRC32 и MD5 заключается в том, что MD5 генерирует больший хэш, который труднее предсказать.

Если вы хотите реализовать целостность сообщения - то есть сообщение не было подделано при передаче - невозможность предсказать коллизии является важным свойством. 32-битный хэш может описывать 4 миллиарда различных сообщений или файлы, использующие 4 миллиарда различных уникальных хэшей. Если у вас есть 4 миллиарда и 1 файл, вы гарантированно получите 1 столкновение. Битпейс 1 ТБ имеет возможность для миллиардов столкновений. Если я злоумышленник и могу предсказать, каким будет этот 32-битный хеш, я могу создать зараженный файл, который сталкивается с целевым файлом; с таким же хешем

Кроме того, если я выполняю передачу со скоростью 10 Мбит / с, вероятность повреждения пакета просто в обход обхода crc32 и продолжения по направлению к месту назначения и выполнения очень мала. Допустим, на скорости 10 Мбит / с я получаю 10 ошибок \ сек . Если я увеличу скорость до 1 Гбит / с, теперь я получаю 1000 ошибок в секунду . Если я увеличиваю до 1 exabit в секунду, то у меня уровень ошибок 1,000,000,000 ошибок в секунду . Допустим, у нас есть частота столкновений, равная 1 \ 1,000,000 ошибок передачи. Это означает, что 1 из миллиона ошибок передачи приводит к тому, что поврежденные данные проходят через незамеченные. При скорости 10 Мбит / с я получаю данные об ошибках, которые отправляются каждые 100 000 секунд или примерно раз в день. На скорости 1 Гбит / с это происходит раз в 5 минут. С частотой 1 раз в секунду мы говорим несколько раз в секунду.

Если вы откроете Wireshark, вы увидите, что ваш типичный заголовок Ethernet имеет CRC32, ваш IP-заголовок имеет CRC32, а ваш TCP-заголовок имеет CRC32, и это в дополнение к тому, что могут делать протоколы более высокого уровня; например IPSEC может использовать MD5 или SHA для проверки целостности в дополнение к вышеуказанному. Существует несколько уровней проверки ошибок в типичных сетевых коммуникациях, и они ВСЕГДА бездельничают со скоростью менее 10 Мбит / с.

Циклическая проверка избыточности (CRC) имеет несколько распространенных версий и несколько необычных, но обычно предназначена для того, чтобы просто сообщать, когда сообщение или файл были повреждены при передаче (перебрасывание нескольких битов). CRC32 сам по себе не очень хороший протокол проверки ошибок по современным стандартам в больших, скалярных корпоративных средах из-за частоты конфликтов; на жестком диске обычного пользователя может быть более 100 тыс. файлов, а на общем файловом ресурсе в компании - десятки миллионов. Отношение хеш-пространства к количеству файлов слишком мало. CRC32 вычислительно дешев в реализации, тогда как MD5 нет.

MD5 был разработан для предотвращения преднамеренного использования коллизий, чтобы вредоносный файл выглядел доброкачественным. Это считается небезопасным, потому что хэш-пространство было достаточно отображено, чтобы позволить некоторым атакам произойти, а некоторые коллизии предсказуемы. SHA1 и SHA2 - новые дети на блоке.

Для проверки файлов Md5 начинает использоваться многими поставщиками, поскольку с его помощью вы можете быстро создавать мультигигабайтные или многотерабайтные файлы и размещать их поверх обычной ОС и поддержки CRC32. Не удивляйтесь, если в течение следующего десятилетия файловые системы начнут использовать MD5 для проверки ошибок.

4 голосов
/ 15 июня 2009

CRC32 намного быстрее и иногда имеет аппаратную поддержку (т.е. на процессорах Nehalem). Действительно, единственный раз, когда вы используете его, это если вы взаимодействуете с аппаратным обеспечением, или если вы действительно ограничены в производительности

1 голос
/ 15 июня 2009

Код CRC проще и быстрее.

Для чего тебе нужно?

...