Хэш-код и контрольная сумма-какая разница?


Я понимаю, что хэш-код и контрольная сумма похожи - числовое значение, вычисленное для блока данных, то есть относительно уникальный.

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

Итак, у нас есть два слова для одного и того же, или есть важные различия между хэш-кодами и контрольными суммами?

10 84

10 ответов:

Я бы сказал, что a контрольную суммуобязательно a hashcode. Однако не все хэш-коды делают хорошие контрольные суммы.

контрольная сумма имеет специальное назначение - - - она проверяет или проверки целостность данных (некоторые могут выйти за рамки этого, допуская исправление ошибок). "Хорошие" контрольные суммы легко вычисляются и могут обнаруживать многие типы искажений данных (например, один, два, три ошибочных бита).

A хэш-код просто описывает математические функции что сопоставляет данные с некоторым значением. При использовании в качестве средства индексирования в структурах данных (например, хэш-таблица), низкая вероятность столкновения желательна.

за каждым из них стоит своя цель:

  • хэш-код-предназначен для случайного использования в своем домене (для минимизации коллизий в хэш-таблицах и т. д.). Криптографические хэш-кодов являются вычислительно невозможным обратное.
  • Check sum-предназначен для обнаружения наиболее распространенных ошибок в данных и часто для быстрого вычисления (для эффективного контрольного суммирования быстрых потоков данных).

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

действительно, есть некоторые отличия:

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

Википедия правильно:

функции контрольной суммы связаны с хэшем функции, отпечатки пальцев, рандомизация функции и криптографический хэш функции. Тем не менее, каждый из них концепции имеют различные приложения и, соответственно, разные задачи. Контрольные цифры и биты четности особые случаи контрольных сумм, подходит для небольших блоков данных (например, номера социального страхования, банк номера счетов, компьютерные слова, одиночный байт и т. д.). Некоторые коды исправления ошибок основаны на специальные контрольные суммы, которые не только обнаруживают общие ошибки, но также позволяют исходные данные, подлежащие восстановлению в некоторые случаи.

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

наглядным примером являются строки. Контрольная сумма для строки должна включать каждый бит, и порядок имеет значение. С другой стороны, хэш-код часто может быть реализован как контрольная сумма префикса ограниченной длины. Это означало бы, что "aaaaaaaaaaba" будет хэшировать то же самое, что и "aaaaaaaaaaab", но хэш-алгоритмы могут иметь дело с такими коллизиями.

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

контрольная сумма защищает от случайного изменения.

криптографический хэш защищает от очень мотивированного злоумышленника.

когда вы отправляете биты по проводу, может случайно случиться, что некоторые биты либо перевернуты, либо удалены, либо вставлены. Чтобы позволить получателю обнаружить (или иногда исправить) такие несчастные случаи, отправитель использует контрольную сумму.

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

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

  • контрольная сумма используется, чтобы выяснить,если что-то во входных данных был изменен.

  • хэш-код используется, чтобы выяснить,если что-то во входных данных был изменен и чтобы иметь как можно больше" расстояния " между отдельными значениями хэш-кода.

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

    и если вы добавите некоторую общую начальную рандомизацию, вы получите концепцию современного шифрования/обмена ключами.


О Вероятность:

например, предположим, что входные данные всегда меняется (100% времени). И предположим, что у вас есть "идеальная" функция хэша / контрольной суммы, которая генерирует 1-битное значение хэша / контрольной суммы. Таким образом, вы получите различные хэш-значение контрольной суммы, 50% времени, для случайных входных данных.

  • Если ровно 1 бит в ваших случайных входных данных изменился, вы сможете обнаружить, что 100% времени, независимо от того, насколько велики входные данные.

  • Если 2 бита в ваших случайных входных данных изменились, ваша вероятность обнаружения "изменения" делится на 2, поскольку оба изменения могут нейтрализовать друг друга, и никакая функция хэша/контрольной суммы не обнаружит, что 2 бита на самом деле отличаются во входных данных.

    ...

Это означает, что если количество битов в ваших входных данных в несколько раз больше, чем количество битов в вашем значении хэша/контрольной суммы, ваша вероятность фактически получить разные значения хэша/контрольной суммы для разных входных значений уменьшается и не является константой.

Я обычно использую слово checksum при обращении к коду (числовому или другому), созданному для файла или фрагмента данных, которые могут быть использованы для Регистрация что файл или данные не были повреждены. Наиболее распространенное использование, с которым я сталкиваюсь, - это проверка того, что файлы, отправленные по сети, не были изменены (намеренно или иным образом).

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

источник: CompTIA ® Security+ руководство по основам сетевой безопасности-пятое издание-Mark Ciampa-страница 191