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

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

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

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

Ответ 1

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

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

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

Ответ 2

Для каждого из них существует другая цель:

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

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

Ответ 3

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

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

Ответ 4

Wikipedia ставит его хорошо:

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

Ответ 5

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

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

Ответ 6

Контрольная сумма защищает от случайных изменений.

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

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

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

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

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

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


О вероятности:

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

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

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

    ...

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