Закрыть

Виды хэш функций

В закладки
Аудио
Виды хэш функций
Содержание

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

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

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

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

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

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

Наиболее распространенный вид хэш функции

Хэш-функцией называется всякая функция h:X -> Y, легко вычислимая и такая, что для любого сообщения M значение h(M) = H (свертка) имеет фиксированную битовую длину. X — множество всех сообщений, Y — множество двоичных векторов фиксированной длины.

Как правило хэш-функции строят на основе так называемых одношаговых сжимающих функций y = f(x1, x2) двух переменных, где x1, x2 и y — двоичные векторы длины m, n и n соответственно, причем n — длина свертки, а m — длина блока сообщения. 

Для получения значения h(M) сообщение сначала разбивается на блоки длины m (при этом, если длина сообщения не кратна m то последний блок неким специальным образом дополняется до полного), а затем к полученным блокам M1, M2,.., MN применяют следующую последовательную процедуру вычисления свертки:

Ho = v,

Hi = f(Mi,Hi-1), i = 1,.., N,

h(M) = HN

Здесь v — некоторая константа, часто ее называют инициализирующим вектором. 

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

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

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

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

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

Стандарты хеширования: популярные варианты

Название

Краткий обзор

CRC-32

Полином CRC (Cyclic Redundancy Check, что значит «циклическая проверка излишков»). Применяется для защиты данных и обнаружении ошибок в потоке информации. Стал известен благодаря следующим качествам: легко и быстро обнаруживает ошибки, требует минимальные расходы, прост в эксплуатировании. Генерирует 32-битный хэш.

MD5

Базируется на 128-битном (16-байтном) фундаменте. Применяется для хранения паролей, создания уникальных криптографических ключей и ЭЦП. Используется для аудита подлинности и целостности документов в ПК. Недостаток – сравнительно легкое нахождение коллизий.

SHA-1

Реализует хеширование и шифрование по принципу сжатия. Входы такого алгоритма сжатия состоят из набора данных длиной 512 Бит и выходом предыдущего блока. Количество раундов – 80. Размер значения хэш – 32 Бит. Найденные коллизии – 252 операции. Рекомендовано для основного использования в госструктурах США.

SHA-2

Семейство протоколов – однонаправленных криптографических алгоритмов, куда входит легендарный SHA-256, используемый в Bitcoin. Размер блока – 512/1024 Бит. Количество раундов 64/80. Коллизий не найдено. Размер значения однонаправленных хэш-функций – 32 Бит.

ГОСТ Р 34.11-2012 «Стрибог»

Создан российскими программистами, состоит из двух хэш-функций, с длинами итогового значения 256 и 512 Бит, отличающимися начальным состоянием и результатом вычисления. Криптографическая стойкость – 2128. Преобразование массива данных основано на S-блоках, что существенно осложняет поиск коллизий.

 

Предыдущая статья Понравилась статья? 0 Следующая статья
Комментарии: 0
Оставить комментарий
Сервис подписки в данный момент находится на завершающей стадии разработки. Регулярная отправка новостных материалов на Ваш email начнется в ближайшее время. Повторная подписка не потребуется.
Добавить еще