Русский
Русский
English
Статистика
Реклама

Хеш-функция, что это такое?

Приветствую уважаемого читателя!

Сегодня я хотел бы рассказать о том, что из себя представляет хеш-функция, коснуться её основных свойств, привести примеры использования и в общих чертах разобрать современный алгоритм хеширования SHA-3, который был опубликован в качестве Федерального Стандарта Обработки Информации США в 2015 году.

Общие сведения

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

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

Для идеальной хеш-функции выполняются следующие условия:

а) хеш-функция является детерминированнои, то есть одно и то же сообщение приводит к одному и тому же хеш-значению
b) значение хеш-функции быстро вычисляется для любого сообщения
c) невозможно наити сообщение, которое дает заданное хеш-значение
d) невозможно наити два разных сообщения с одинаковым хеш-значением
e) небольшое изменение в сообщении изменяет хеш настолько сильно, что новое и старое значения кажутся некоррелирующими

Давайте сразу рассмотрим пример воздействия хеш-функции SHA3-256.

Число 256 в названии алгоритма означает, что на выходе мы получим строку фиксированной длины 256 бит независимо от того, какие данные поступят на вход.

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

Любой заинтересованный читатель задаст себе вопрос: "А что будет, если на вход подать данные, бинарный код которых во много раз превосходит 256 бит?"

Ответ таков: на выходе получим все те же 256 бит!
Дело в том, что 256 бит - это 2^{256} соответствий, то есть 2^{256} различных входов имеют свой уникальный хеш.
Чтобы прикинуть, насколько велико это значение, запишем его следующим образом:

2^{256} \approx 1,158 \times 10 ^{77}

Надеюсь, теперь нет сомнений в том, что это очень внушительное число!

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

Свойства

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

Pre-image resistance

Имея заданное значение h должно быть сложно найти любое сообщение m такое, что h = hash(m)

Second pre-image resistance

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

hash(m_1) = hash(m_2)

Collision resistance

Должно быть сложно найти два различных сообщения m1 и m2 таких, что

hash(m_1)=hash(m_2)

Такая пара сообщений m1 и m2 называется коллизией хеш-функции

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

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

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

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

Second pre-image resistance. Это свойство называют сопротивлением второму прообразу. Для упрощения можно сказать, что это свойство находится где-то посередине между двумя предыдущими. Атака по нахождению второго прообраза происходит, когда злоумышленник находит определенный вход, который генерирует тот же хеш, что и другой вход, который ему уже известен. Другими словами, злоумышленник, зная, что hash(m_1) = h, пытается найти m_2 такое, что hash(m_2) = h

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

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

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

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

Применение хеш-функций

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

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

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

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

Предлагаю также рассмотреть следующий бытовой пример:

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

Теперь давайте поговорим о SHA-3.

SHA-3

Национальный институт стандартов и технологий (NIST) в течение 20072012 провёл конкурс на новую криптографическую хеш-функцию, предназначенную для замены SHA-1 и SHA-2.

Организаторами были опубликованы некоторые критерии, на которых основывался выбор финалистов:

Безопасность

Способность противостоять атакам злоумышленников

Производительность и стоимость

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

Гибкость и простота дизайна

Гибкость в эффективной работе на самых разных платформах, гибкость в использовании параллелизма или расширений ISA для достижения более высокой производительности

В финальный тур попали всего 5 алгоритмов:

BLAKE

Grstl

JH

Keccak

Skein

Победителем и новым SHA-3 стал алгоритм Keccak.

Давайте рассмотрим Keccak более подробно.

Keccak

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

Любая губчатая функция Keccak использует одну из семи перестановок Keccak-f, которая обозначается Keccak-f[b] , где b \in \{25, 50, 100, 200, 400, 800, 1600\}

Keccak-fперестановки представляют собои итерационные конструкции, состоящие из последовательности почти одинаковых раундов. Число раундов n_r зависит от ширины перестановки и задаётся как n_r = 12+2l, где 2l = b/25

В качестве стандарта SHA-3 была выбрана перестановка Keccak-f[1600], для неё количество раундов n_r=24

Далее будем рассматривать Keccak-f[1600]

Давайте сразу введем понятие строки состояния, которая играет важную роль в алгоритме.

Строка состояния представляет собой строку длины 1600 бит, которая делится на r и c части, которые называются скоростью и ёмкостью состояния соотвественно.

Соотношение деления зависит от конкретного алгоритма семейства, например, для SHA3-256 r = 1088, c = 512

В SHA-3 строка состояния S представлена в виде массива 5 \times 5 слов длины w=64 бит, всего 5 \times 5 \times 64 = 1600 бит. В Keccak также могут использоваться слова длины w , равные меньшим степеням 2.

Алгоритм получения хеш-функции можно разделить на несколько этапов:

С помощью функции дополнения исходное сообщение M дополняется до строки P длины кратнои r

Строка P делится на n блоков длины r: P_0, P_1, , P_{n-1}

Впитывание: каждыи блок P_{i} дополняется нулями до строки длиной b бит (b = r+c) и суммируется по модулю 2 со строкой состояния S , далее результат суммирования подаётся в функцию перестановки f и получается новая строка состояния S , которая опять суммируется по модулю 2 с блоком P_{i+1} и дальше опять подаётся в функцию перестановки f . Перед началом работы криптографической губки все элементыSравны 0.

Отжимание: пока длина результата Z меньше чем d , где d - количество бит в выходном массиве хеш-функции, r первых бит строки состояния S добавляется к результату Z . После каждой такой операции к строке состояния применяется функция перестановок f и данные продолжают отжиматься дальше, пока не будет достигнуто значение длины выходных данных d .

Все сразу станет понятно, когда вы посмотрите на картинку ниже:

Функция дополнения

В SHA-3 используется следующий шаблон дополнения 10...1: к сообщению добавляется 1, после него от 0 до r - 1 нулевых бит и в конце добавляется 1.

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

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

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

Функция перестановок

Базовая функция перестановки состоит из 12 + 2l раундов по пять шагов:

  1. Шаг \theta

  2. Шаг \rho

  3. Шаг \pi

  4. Шаг \chi

  5. Шаг \iota

Тета, Ро, Пи, Чи, Йота

Далее будем использовать следующие обозначения:

Так как состояние S имеет форму массива 5 \times 5 \times 64 , то мы можем обозначить каждый бит состояния как a[x][y][z]

Обозначим A[x][y][z] результат преобразования состояния функцией перестановки

Также обозначим ROT(a,d) функцию, которая выполняет следующее соответствие:

ROT(a[x][y][z], d) = a[x][y][z+d\:\: mod \:w]


ROT(a,d) - обычная функция трансляции, которая сопоставляет биту z бит z+d\:\: mod \:w ,

где w - длина слова (64 бит в нашем случае)

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

Шаг \theta

Эффект отображения \theta можно описать следующим образом: оно добавляет к каждому биту a[x][y][z] побитовую сумму двух столбцов a[x-1] [\cdot] [z] и a[x+1][\cdot][z-1]

Схематическое представление функции:

Псевдокод шага:

Шаг \rho

Отображение \rho направлено на трансляции внутри слов (вдоль оси z).

Проще всего его описать псевдокодом и схематическим рисунком:

Шаг \pi

Шаг \pi представляется псевдокодом и схематическим рисунком:

Шаг \chi

Шаг \chi является единственный нелинейным преобразованием в Keccak-f

Псевдокод и схематическое представление:

Шаг \iota

Отображение \iota состоит из сложения с раундовыми константами и направлено на нарушение симметрии. Без него все раунды Keccak-f были бы эквивалентными, что делало бы его подверженным атакам, использующим симметрию. По мере увеличения l раундовые константы добавляют все больше и больше асимметрии.

Ниже приведена таблица раундовых констант RC[i] для w = 64 бит

Все шаги можно объединить вместе и тогда мы получим следующее:

Где константы r[x,y] являются циклическими сдвигами и задаются таблицей:

Итоги

В данной статье я постарался объяснить, что такое хеш-функция и зачем она нужна
Также в общих чертах мной был разобран принцип работы алгоритма SHA-3 Keccak, который является последним стандартизированным алгоритмом семейства Secure Hash Algorithm

Надеюсь, все было понятно и интересно

Всем спасибо за внимание!

Источник: habr.com
К списку статей
Опубликовано: 23.12.2020 14:04:12
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Информационная безопасность

It-стандарты

Hash

Hash function

Sha-3

Хеш

Хеш-функция

Хеширование

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru