Хеш…

Хэш Браунов?

Нет ... Хеш.

Мне было интересно узнать имя и цель слова «хэш». Обращение только к имени означает тип данных для хранения информации. Ссылка на «хеш-значение» обычно делается в контексте аутентификации.

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

Возникает вопрос: для чего они используются и сколько существует различных видов?

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

Приставка «крипто» на чем-либо сразу заставляет звучать круто. Один из моих любимых романов - Криптономикон Нила Стивенсона, писателя, который не уклоняется от техногаббалов и даже заставляет их звучать поэтично. Вот краткая информация:

«Даже 768-битный ключ требует огромных ресурсов для взлома. Добавьте один бит, чтобы сделать его длиной 769 бит, и количество возможных ключей удвоится, проблема становится намного сложнее. 770-битный ключ намного сложнее и так далее. Используя 768-битные ключи, Рэнди и Ави могли сохранить в секрете свои сообщения практически от всех сущностей в мире, по крайней мере, в течение следующих нескольких лет. 1024-битный ключ было бы намного труднее взломать астрономически ».

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

Битовый массив называется «хеш-значением», «хешем» или «дайджестом сообщения». Сам алгоритм называется «односторонней функцией», которую «практически невозможно инвертировать». Вы понимаете, о чем я? Этот абзац из Криптономикона просто раскрывается, как цветок!

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

Основные свойства

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

Приложения

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

Честность

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

  1. Напишите ваше сообщение
  2. Вычислите хеш-значение перед отправкой сообщения.
  3. Получатель: вычислить значение хэша после получения сообщения.
  4. Отправитель и Получатель теперь сравнивают свои соответствующие хэш-значения. Если значения различаются, это означает, что сообщение или файл были каким-то образом подделаны.

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

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

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

Цифровые подписи

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

Асимметричное шифрование ключа

Важным аспектом цифровых подписей является реализация «шифрования с асимметричным ключом». Здесь абзац о Рэнди и Ави начинает расцветать и становится еще более понятным. Генерируются два ключа: открытый и закрытый.

  1. Отправитель шифрует сообщение с помощью открытого ключа.
  2. Получатель использует закрытый ключ для расшифровки сообщения.

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

Подтверждение пароля

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

Доказательство работы

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

  • BitCoin: доказательство работы открывает награду за майнинг
  • HashCash: доказательство работы открывает токен «доброй воли»

Поиск в хеш-таблице

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

Просвещение

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

Ресурсы: