🗄️ Хеш-код и контрольная сумма |

🗄️ Хеш-код и контрольная сумма

Статьи

Введение

В этом руководстве мы изучим хэш-коды и контрольные суммы.

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

По этой причине их неоднократно путают друг с другом.

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

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

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

Таким образом, в пятом разделе подводятся итоги и сравниваются обе техники, а шестой раздел завершает учебное пособие.

Исходные понятия

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

Поэтому сначала поговорим об общей идее и назначении хэшей, а затем сосредоточимся на их применении.

Основная идея процессов хеширования заключается в преобразовании кучи данных любого размера в код с заранее определенным размером.

Методы хэширования используют функции хэширования для выполнения процесса преобразования данных.

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

На следующем рисунке на высоком уровне абстракции показан процесс создания хэш-кодов:

Кроме того, необходимо подчеркнуть, что хэш-коды по определению необратимы.

Это означает, что хэширование – односторонний процесс: они генерируют код для заданных данных.

Однако сгенерировать исходные данные из хэш-кода невозможно.

Представленные характеристики методов хэширования делают их пригодными для решения ряда задач.

Среди наиболее популярных аспектов хеширования можно выделить следующие:

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

Далее мы сосредоточимся на изучении хэшей как структур данных и криптографических стратегий.

Так, в разделе, посвященном контрольным суммам, мы рассмотрим хэши как функции целостности.

Шифрование и Хэширование. Отличие и применение

Основные концепции

Прежде всего, необходимо отметить, что контрольные суммы – это хэш-коды.

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

Поэтому сначала поговорим об общей идее и назначении хэшей, а затем сосредоточимся на их применении.

Основная идея процессов хеширования заключается в преобразовании кучи данных любого размера в код с заранее определенным размером.

Методы хэширования используют функции хэширования для выполнения процесса преобразования данных.

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

Хэш-коды (общее применение)

Как мы уже говорили, хэш-код – это широкое понятие.

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

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

В следующих подразделах мы немного расскажем о каждом из этих применений.

Хеш-таблицы

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

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

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

Однако с точки зрения пользователя ключи могут иметь разные типы данных и длину.

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

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

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

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

Криптографическое хеширование

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

Основная идея здесь заключается в создании хэш-кода для шифрования и безопасного хранения конфиденциальных данных.

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

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

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

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

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

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

Контрольная сумма

Контрольные суммы также являются хэш-кодами.

Но, в отличие от случаев использования, рассмотренных в предыдущем разделе, контрольные суммы в основном ориентированы на проверку целостности данных.

Мы можем понимать контрольные суммы как отпечаток некоторых данных.

🔒 Как проверить контрольную сумму SHA с помощью bash скрипта

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

Если отпечатки (контрольные суммы) совпадают, можно с высокой степенью надежности утверждать, что целостность данных не нарушена.

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

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

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

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

Изучаем Linux приемы для создания контрольных сумм и проверки целостности данных

Наконец, для реализации процессов контрольного суммирования мы можем использовать несколько алгоритмов хэширования, например:

  • MD5: алгоритм, который вычисляет 128-битные хэш-коды, подходящие для проверки целостности данных. Описание MD5 приведено в документе RFC1321.
  • SHA-1: стратегия, генерирующая 160-битный хэш-код, который мы можем использовать для контрольного суммирования. В RFC3174 описывается SHA1

💣 Сравнение различных форматов отпечатков (фингерпринтов) SSH на Linux

Систематическое резюме

Хэш-коды стали важнейшим ресурсом в вычислительной технике.

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

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

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

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

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

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

В следующей таблице приведены общие концепции хэш-кодов и их конкретное применение для проверки целостности данных

см. также:

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий