Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

Википедия излагает это хорошо:

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    ...

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

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

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

Источник:CompTIA ® Security+ Руководство по основам сетевой безопасности - Пятое издание - Марк Чампа -Страница 191

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top