Какие требования предъявляются к криптографическим хеш функциям

Обновлено: 03.07.2024

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

СОДЕРЖАНИЕ

Характеристики

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

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

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

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

Функция, отвечающая этим критериям, может иметь нежелательные свойства. В настоящее время популярные криптографические хеш-функции уязвимы для атак с увеличением длины : учитывая хэш ( m ) и len ( m ), но не m , выбирая подходящее m ′ , злоумышленник может вычислить хэш ( mm ′ ) , где ∥ означает конкатенацию . Это свойство можно использовать для взлома простых схем аутентификации, основанных на хэш-функциях. Конструкция HMAC решает эти проблемы.

Степень сложности

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

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

Иллюстрация

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

Приложения

Генерация и проверка подписи

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

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

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

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

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

Идентификатор файла или данных

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

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

Хеш-функции на основе блочных шифров

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

Эти методы напоминают режимы работы блочного шифра, обычно используемые для шифрования. Многие хорошо известные хэш-функции, включая MD4 , MD5 , SHA-1 и SHA-2 , построены из компонентов, подобных блочному шифрованию, предназначенных для этой цели, с обратной связью, гарантирующей, что полученная функция не обратима. Финалисты SHA-3 включили функции с компонентами, подобными блочному шифрованию (например, Skein , BLAKE ), хотя окончательно выбранная функция Keccak была построена на криптографической губке .

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

Дизайн хеш-функции

Строительство Меркле-Дамгарда

Последний обработанный блок также должен быть однозначно дополнен по длине ; это имеет решающее значение для безопасности этой конструкции. Эта конструкция называется конструкцией Меркла – Дамгарда . Наиболее распространенные классические хеш-функции, включая SHA-1 и MD5 , принимают эту форму.

Широкая труба против узкой трубы

Между тем, усечение вывода более длинного хэша, например, используемого в SHA-512/256, также предотвращает многие из этих атак.

Использование при построении других криптографических примитивов

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

Так же, как блочные шифры могут использоваться для построения хеш-функций, хеш-функции могут использоваться для построения блочных шифров. Конструкции Luby-Rackoff, использующие хэш-функции, могут быть доказуемо безопасными, если базовая хеш-функция безопасна. Кроме того, многие хеш-функции (включая SHA-1 и SHA-2 ) построены с использованием блочного шифра специального назначения в конструкции Дэвиса-Мейера или другой конструкции. Этот шифр также можно использовать в обычном режиме работы без тех же гарантий безопасности. См. ШАКАЛ , МЕДВЕДЬ и ЛЬВ .

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

Некоторые хэш-функции, такие как Skein , Keccak и RadioGatún , выводят поток произвольной длины и могут использоваться в качестве потокового шифра , а потоковые шифры также могут быть построены из хеш-функций дайджеста фиксированной длины. Часто для этого сначала создают криптографически безопасный генератор псевдослучайных чисел, а затем используют его поток случайных байтов в качестве потока ключей . SEAL - это потоковый шифр, который использует SHA-1 для генерации внутренних таблиц, которые затем используются в генераторе потока ключей, более или менее не связанном с алгоритмом хеширования. Не гарантируется, что SEAL будет таким же сильным (или слабым), как SHA-1. Точно так же при расширении ключа потоковых шифров HC-128 и HC-256 интенсивно используется хеш-функция SHA-256 .

Конкатенация

Объединение выходных данных нескольких хэш-функций обеспечивает устойчивость к конфликтам на уровне самого сильного из алгоритмов, включенных в объединенный результат. Например, более старые версии Transport Layer Security (TLS) и Secure Sockets Layer (SSL) использовали сцепленные суммы MD5 и SHA-1 . Это гарантирует, что метод поиска коллизий в одной из хэш-функций не повредит данные, защищенные обеими хеш-функциями.

Криптографические хеш-алгоритмы

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

MD5 был разработан Рональдом Ривестом в 1991 году для замены более ранней хэш-функции, MD4, и был указан в 1992 году как RFC 1321. Коллизии с MD5 могут быть вычислены за секунды, что делает алгоритм непригодным для большинства случаев использования, когда требуется криптографический хеш. MD5 производит дайджест из 128 бит (16 байт).

SHA-1 был разработан в рамках проекта Capstone правительства США . Первоначальная спецификация алгоритма - теперь обычно называемая SHA-0 - была опубликована в 1993 году под названием Secure Hash Standard, FIPS PUB 180, правительственным агентством стандартов США NIST (Национальный институт стандартов и технологий). Он был отозван Агентством национальной безопасности вскоре после публикации и заменен пересмотренной версией, опубликованной в 1995 году в FIPS PUB 180-1 и обычно обозначаемой как SHA-1. Конфликты с полным алгоритмом SHA-1 могут быть произведены с использованием разбитой атаки, и хеш-функция должна считаться неработающей. SHA-1 создает хеш-дайджест из 160 бит (20 байт).

Документы могут ссылаться на SHA-1 как на «SHA», даже если это может конфликтовать с другими алгоритмами безопасного хеширования, такими как SHA-0, SHA-2 и SHA-3.

РИПЭМД-160

Водоворот

Whirlpool - это криптографическая хеш-функция, разработанная Винсентом Райменом и Пауло SLM Баррето, которые впервые описали ее в 2000 году. Whirlpool основан на существенно модифицированной версии Advanced Encryption Standard (AES). Whirlpool производит хеш-дайджест размером 512 бит (64 байта).

SHA-2 (Secure Hash Algorithm 2) - это набор криптографических хеш-функций, разработанный Агентством национальной безопасности США (NSA), впервые опубликованный в 2001 году. Они построены с использованием структуры Меркла – Дамгарда из функции одностороннего сжатия. сам построен с использованием структуры Дэвиса-Мейера из (секретного) специализированного блочного шифра.

SHA-2 в основном состоит из двух алгоритмов хеширования: SHA-256 и SHA-512. SHA-224 - это вариант SHA-256 с разными начальными значениями и усеченным выводом. SHA-384 и менее известные SHA-512/224 и SHA-512/256 являются вариантами SHA-512. SHA-512 более безопасен, чем SHA-256, и обычно быстрее, чем SHA-256 на 64-битных машинах, таких как AMD64 .

Размер вывода в битах задается расширением имени «SHA», поэтому SHA-224 имеет размер вывода 224 бита (28 байтов); SHA-256, 32 байта; SHA-384, 48 байт; и SHA-512, 64 байта.

SHA-3 (алгоритм безопасного хеширования 3) был выпущен NIST 5 августа 2015 года. SHA-3 является подмножеством более широкого семейства криптографических примитивов Keccak. Алгоритм Keccak - это работа Гвидо Бертони, Джоан Дэмен, Майкла Петерса и Жиля Ван Аше. Keccak основан на конструкции губки, которая также может использоваться для создания других криптографических примитивов, таких как потоковый шифр. SHA-3 обеспечивает те же размеры вывода, что и SHA-2: 224, 256, 384 и 512 бит.

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

BLAKE2

BLAKE2, улучшенная версия BLAKE, была анонсирована 21 декабря 2012 года. Она была создана Жан-Филиппом Аумассоном, Сэмюэлем Невесом, Зуко Уилкокс-О'Хирном и Кристианом Виннерлейном с целью замены широко используемых, но сломанных MD5 и Алгоритмы SHA-1. При запуске на 64-битных архитектурах x64 и ARM BLAKE2b работает быстрее, чем SHA-3, SHA-2, SHA-1 и MD5. Хотя BLAKE и BLAKE2 не были стандартизированы, как SHA-3, BLAKE2 использовался во многих протоколах, включая хэш пароля Argon2 , для обеспечения высокой эффективности, которую он предлагает на современных процессорах. Поскольку BLAKE был кандидатом на SHA-3, BLAKE и BLAKE2 оба предлагают те же размеры вывода, что и SHA-3, включая настраиваемый размер вывода.

BLAKE3

BLAKE3, улучшенная версия BLAKE2, была анонсирована 9 января 2020 года. Ее создали Джек О'Коннор, Жан-Филипп Аумассон, Сэмюэл Невес и Зуко Уилкокс-О'Хирн. BLAKE3 - это единый алгоритм, в отличие от BLAKE и BLAKE2, которые представляют собой семейства алгоритмов с несколькими вариантами. Функция сжатия BLAKE3 в значительной степени основана на функции сжатия BLAKE2, с самой большой разницей в том, что количество раундов сокращено с 10 до 7. Внутренне BLAKE3 представляет собой дерево Меркла и поддерживает более высокие степени параллелизма, чем BLAKE2.

Атаки на криптографические хеш-алгоритмы

Существует длинный список криптографических хэш-функций, но многие из них оказались уязвимыми и не должны использоваться. Например, NIST выбрал 51 хэш-функцию в качестве кандидатов для первого раунда конкурса хеш-кодов SHA-3, из которых 10 были признаны неработающими, а 16 показали существенные недостатки и поэтому не прошли в следующий раунд; дополнительную информацию можно найти в основной статье о соревнованиях по хэш-функциям NIST .

Даже если хеш-функция никогда не нарушалась, успешная атака на ослабленный вариант может подорвать доверие экспертов. Например, в августе 2004 года коллизии были обнаружены в нескольких популярных тогда хеш-функциях, включая MD5. Эти недостатки поставили под сомнение безопасность более сильных алгоритмов, полученных на основе слабых хэш-функций, в частности, SHA-1 (усиленная версия SHA-0), RIPEMD-128 и RIPEMD-160 (обе усиленные версии RIPEMD).

12 августа 2004 г. Жу, Каррибо, Лемюэль и Джалби объявили о конфликте полного алгоритма SHA-0. Joux et al. сделал это, используя обобщение атаки Шабо и Жу. Они обнаружили, что коллизия имела сложность 2 51 и потребовала около 80 000 процессорных часов на суперкомпьютере с 256 процессорами Itanium 2 , что эквивалентно 13 дням постоянного использования суперкомпьютера.

В феврале 2005 года сообщалось об атаке на SHA-1, в ходе которой обнаруживалась коллизия примерно в 2 69 хэш-операциях, а не в 2 80, ожидаемых для 160-битной хеш-функции. В августе 2005 года сообщалось об очередной атаке на SHA-1, в результате которой были обнаружены коллизии в 2 63 операциях. Известны и другие теоретические недостатки SHA-1: в феврале 2017 года Google объявил о конфликте в SHA-1. Исследователи безопасности рекомендуют, чтобы новые приложения могли избежать этих проблем, используя более поздние члены семейства SHA, такие как SHA-2 , или такие методы, как рандомизированное хеширование, которые не требуют устойчивости к коллизиям.

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

Многие криптографические хэши основаны на конструкции Меркла-Дамгарда . Все криптографические хэши, которые напрямую используют полный вывод конструкции Меркла-Дамгарда, уязвимы для атак с увеличением длины . Это делает алгоритмы хеширования MD5, SHA-1, RIPEMD-160, Whirlpool и SHA-256 / SHA-512 уязвимыми для этой конкретной атаки. SHA-3, BLAKE2, BLAKE3 и усеченные варианты SHA-2 не уязвимы для этого типа атак.

Атаки на хешированные пароли

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

Однако большинство людей выбирают пароли предсказуемым образом. Списки общих паролей широко распространены, и многие пароли достаточно короткие, чтобы можно было проверить все возможные комбинации при использовании быстрых хэшей. Использование криптографической соли предотвращает некоторые атаки, такие как создание файлов с предварительно вычисленными хэш-значениями, например, радужных таблиц . Но поиски порядка 100 миллиардов тестов в секунду возможны с помощью высокопроизводительных графических процессоров , что делает возможными прямые атаки даже с использованием соли. США Национальный институт стандартов и технологий рекомендует хранить пароли , используя специальные хэши называемые ключевые функции деривации (KDFs) , которые были созданы для медленного поиска грубой силы. К медленным хешам относятся pbkdf2 , bcrypt , scrypt , argon2 , Balloon и некоторые недавние режимы шифрования Unix . Для KSF, которые выполняют несколько хешей для замедления выполнения, NIST рекомендует количество итераций 10 000 или больше.

Хэш-код создается функцией Н :

  1. Хэш-функция Н должна применяться к блоку данных любой длины.
  2. Хэш-функция Н должна создавать выход фиксированной длины.
  3. Н(М) относительно легко (за полиномиальное время) вычисляется для любого значения М .
  4. Для любого данного значения хэш-кода h вычислительно невозможно найти M такое, что Н(M)=h .
  5. Для любого данного М вычислительно невозможно найти М′ ≠ M такое, что H(M)=H(M′) .
  6. Вычислительно невозможно найти произвольную пару (M,M′) такую, что H(M)=H(M′) .

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

"Парадокс дня рождения"

Так называемый "парадокс дня рождения" состоит в следующем.

Первая задача. Каким должно быть число k , чтобы для данного значения X и значений Y1, …, Yk , каждое из которых принимает значения от 1 до n, вероятность того, что хотя бы для одного Yi выполнялось равенство X=Y

Для одного значения Y вероятность того, что X=Y , равна 1/n .

Соответственно, вероятность того, что X ≠ Y , равна 1 – 1/n .

Если создать k значений, то вероятность того, что ни для одного из них не будет совпадений, равна произведению вероятностей, соответствующих одному значению, т.е. (1 – 1/n) k .

Следовательно, вероятность по крайней мере одного совпадения равна

P (X = Yi) = 1 – (1 – 1/n) k

По формуле бинома Ньютона

(1 – a)k = 1 – ka + \frac <k(k-1)></p>
 a^2 - … \approx 1 – ka

1 – (1 – k/n) = k/n = 0.5

k = n/2

Теперь рассмотрим вторую задачу. Обозначим P(n,k) вероятность того, что в множестве из k элементов, каждый из которых может принимать n значений, есть хотя бы два с одинаковыми значениями. Чему должно быть равно k , чтобы P(n,k) была бы больше 0,5 ?

Число различных способов выбора элементов таким образом, чтобы при этом не было дублей, равно

n (n-1) … (n-k+1) \frac <n!></p>

Всего возможных способов выбора элементов равно

n^k

Вероятность того, что дублей нет, равна

\frac <n!></p>

Вероятность того, что есть дубли, соответственно равна

1 - \frac <n!></p>

P (n, k) = 1 – n! / ((n-k)! \times n^k) = 1 – (n \times (n-1) \times … \times (n-k-1)) / n^k = 1 – [ (n-1)/n \times (n-2)/n \times … \times (n-k+1)/n] = 1 – [( 1- 1/n) \times (1 – 2/n) \times … \times (1 – (k-1)/n)]

Известно, что Если хэш-код имеет длину m бит, т.е. принимает 2 m значений, то

k_1 – x \leg e^-^x

P (n, k) > 1 – [e^-1^/^n \times e^-^2^/^n \times … \times e^-^k^/^n]

P (n, k) > 1 – e^-^k^(^k^-^1^)^/^n

\frac 1 2 = 1 – e^-^k^(^k^-^1^)^/^n

2 = e^k^(^k^-^1^)^/^n

ln 2 = k (k-1) / 2n

k (k-1) \approx k^2

k = \sqrt <(2n \times ln 2)></p>
= 1,17 \sqrt n \approx \sqrt n = \sqrt = 2^m^/^2

Подобный результат называется "парадоксом дня рождения", потому что в соответствии с приведенными выше рассуждениями для того, чтобы вероятность совпадения дней рождения у двух человек была больше 0,5, в группе должно быть всего 23 человека. Этот результат кажется удивительным, возможно, потому, что для каждого отдельного человека вероятность того, что с его днем рождения совпадет день рождения у кого-то другого в группе, достаточно мала.

Тем не менее, возможны различного рода атаки, основанные на "парадоксе дня рождения". Возможна следующая стратегия:

Вследствие этого длина хэш-кода должна быть достаточно большой. Длина, равная 64 битам, в настоящее время не считается безопасной. Пред-почтительнее, чтобы длина составляла не менее 100 битов.

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

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

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

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

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

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

Идентификация с использованием паролей

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

Другие сферы использования хэш-функций

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

  1. Блочные шифры (например, Shacal-2).
  2. Поточные шифры.
  3. Генераторы псевдослучайных чисел.

Итеративная конструкция Меркля-Дамгорда

По итеративному принципу построено абсолютное большинство хэш-функций, используемых в настоящее время на практике (например, хэш-функции MD5, SHA-1, семейство хэш-функций SHA-2, отечественный стандарт на хэш-функцию ГОСТ Р 34.11-94).

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

Конструкция HMAC позволяет построить ключевую функцию хэширования на основе любой бесключевой хэш-функции. Данную конструкцию предложили в 1996 году М. Белларе (Mihir Bellare), Р. Канетти (Ran Canetti), Х. Кравчук (Hugo Krawczyk).

Ключевую хэш-функцию, построенную на основе бесключевой хэш-функции H с использованием конструкции HMAC, принято обозначать HMAC-H (например, HMAC-MD5).

Стойкость конструкции HMAC-H основана на криптографических свойствах хэш-функции H и длине используемого ключа. Конструкция HMAC стандартизирована организациями ANSI, IETF, ISO и NIST. Конструкция HMAC получила столь широкое применение, что само название «HMAC» стало по существу синонимом термина «ключевая хэш-функция».

Favorite

Добавить в избранное (1 оценок, среднее: 5,00 из 5)

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

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

Что такое хеш-функция?

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

Но для вывода данных с фиксированной длиной хэш-функции сначала принимают заранее установленный блок данных, известный как блоки данных. Размер блока данных варьируется от одного алгоритма к другому, но всегда один и тот же для одного алгоритма. Например, хеш-функция SHA-1 принимает размер блока 512 бит, и если вход имеет тот же размер, он запускается только один раз, то есть 80 раундов. Если размер входных данных равен 1024, алгоритм будет выполняться дважды.

Хеширование и шифрование

Хеширование обеспечивает целостность данных. С другой стороны, шифрование обеспечивает конфиденциальность данных.

Полезность хешей

Хотя хеширование не является шифрованием, это форма криптографии, которая обеспечивает:

  • защита паролем
  • целостность данных/проверка файла
  • цифровые подписи
  • сигнатуры вирусов.

Защита паролем

Каждый раз, когда пользователь вводит пароль для аутентификации, хэш пароля сравнивается с файлом, содержащим системные хэши на компьютере. Система разрешает доступ только после успешной аутентификации. Например, Windows хранит хэши паролей в файле Security Account Manager (SAM), тогда как Linux хранит хэши паролей в файле /etc/shadow.

Проверка файла

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

Например, веб-сайт для загрузки ISO-образа Linux Mint 20.2 «Uma» -Cinnamon (64-разрядный) использует хеш-код SHA256 в файле sha256sum.txt. Чтобы проверить целостность образа, перейдите в каталог загруженного образа и сгенерируйте сумму SHA256 следующим образом:

Sha256sum.txt файл содержит четыре хэш в зависимости от разных версий Desktop. Сравните сгенерированное значение хэша с хешем образа ISO рабочего стола Cinnamon в файле, чтобы проверить его целостность, если они совпадают; это означает, что образ ISO готов к использованию.

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

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

Сигнатуры вирусов

Свойства хешей

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

Режимы хэшей

Плохие хэши

Коллизия

Радужные таблицы

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

Читать Электронные замки безопасности, как их улучшить

John the Ripper

Pass The Hash

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

Атака по случаю дня рождения

Усиление хэшей

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

Соленые хэши.

Хэши с ключами

Адаптивная хеш-функция

Заключение

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Читайте также: