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

редактировать
Хеш-функция, подходящая для использования в криптографии
[Хеш-алгоритмы]
Основные понятия
хеш-функции ·SHA ·DSA
Основные стандарты
SHA-0 ·SHA-1 ·SHA-2 ·SHA-3
Криптографическая хеш-функция (в частности, SHA- 1 ) на работе. Небольшое изменение во вводе (в слове «сверх») резко меняет вывод (дайджест). Это так называемый лавинный эффект.

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

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

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

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

Содержание

  • 1 Свойства
    • 1.1 Степень сложности
  • 2 Иллюстрация
  • 3 Приложения
    • 3.1 Проверка целостности сообщений и файлов
    • 3.2 Генерация и проверка подписи
    • 3.3 Пароль проверка
    • 3.4 Доказательство работы
    • 3.5 Идентификатор файла или данных
  • 4 Хеш-функции на основе блочных шифров
  • 5 Дизайн хеш-функции
    • 5.1 Конструкция Меркла – Дамгарда
    • 5.2 Сравнение широкой трубы узкая труба
  • 6 Использование при построении других криптографических примитивов
  • 7 Конкатенация
  • 8 Криптографические хеш-алгоритмы
    • 8.1 MD5
    • 8.2 SHA-1
    • 8.3 RIPEMD-160
    • 8.4 Whirlpool
    • 8.5 SHA-2
    • 8.6 SHA-3
    • 8.7 BLAKE2
    • 8.8 BLAKE3
  • 9 Атаки на криптографические хэш-алгоритмы
  • 10 См. Также
  • 11 Ссылки
    • 11.1 Цитаты
    • 11.2 Источники
  • 12 Внешние ссылки

Свойства

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

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

  • Устойчивость к предварительному изображению
    Учитывая значение хеш-функции h, должно быть трудно найти какое-либо сообщение m такое, что h = хэш (м). Эта концепция связана с концепцией односторонней функции . Функции, у которых отсутствует это свойство, уязвимы для атак на прообраз.
  • Сопротивление второму прообразу
    Учитывая входное значение m 1, должно быть трудно найти другой вход m 2 так, что хэш (m 1) = хэш (m 2). Это свойство иногда называют слабым сопротивлением столкновению. Функции, у которых отсутствует это свойство, уязвимы для атак второго прообраза.
  • Устойчивость к столкновениям
    Должно быть трудно найти два разных сообщения m 1 и m 2, например этот хэш (m 1) = hash (m 2). Такая пара называется криптографической хеш-коллизией. Это свойство иногда называют сильным сопротивлением столкновениям. Он требует, чтобы значение хеш-функции было как минимум в два раза длиннее, чем требуется для сопротивления прообразу; в противном случае коллизии могут быть обнаружены посредством атаки дня рождения.

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

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

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

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

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

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

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

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

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

Иллюстрация

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

Приложения

Проверка целостности сообщений и файлов

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

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

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

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

Проверка пароля

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

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

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

Proof-of-work

Proof-of-work система (или протокол, или функция) - это экономическая мера для предотвращения атак типа «отказ в обслуживании» и другие злоупотребления службами, такие как спам в сети, когда требуется некоторая работа со стороны запрашивающей службы, обычно подразумевающая время обработки на компьютере. Ключевой особенностью этих схем является их асимметрия: работа должна быть умеренно сложной (но выполнимой) со стороны запрашивающей стороны, но легкой для проверки поставщиком услуг. Одна популярная система, используемая в майнинге биткойнов и Hashcash, использует частичную инверсию хэша, чтобы доказать, что работа была сделана, разблокировать награду за майнинг в биткойнах и в качестве токена доброй воли для отправки электронное письмо в Hashcash. Отправитель должен найти сообщение, хеш-значение которого начинается с числа нулевых битов. Средняя работа, которую отправитель должен выполнить, чтобы найти допустимое сообщение, экспоненциально зависит от количества нулевых битов, требуемых в хэш-значении, в то время как получатель может проверить достоверность сообщения, выполнив одну хеш-функцию. Например, в Hashcash отправителю предлагается сгенерировать заголовок, чье 160-битное хеш-значение SHA-1 имеет первые 20 бит как нули. Отправителю в среднем придется попытаться найти верный заголовок 2 раза.

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

Дайджест сообщения также может служить средством надежной идентификации файла; несколько систем управления исходным кодом, включая Git, Mercurial и Monotone, используют sha1sum различных типов контент (содержимое файла, деревья каталогов, информация о происхождении и т. д.) для их уникальной идентификации. Хэши используются для идентификации файлов в одноранговых сетях обмена файлами. Например, в ссылке ed2k хэш-вариант MD4 комбинируется с размером файла, предоставляя достаточную информацию для поиска источников файлов, загрузки файла и проверки его содержимого. Магнитные ссылки - еще один пример. Такие хеш-коды файлов часто являются верхним хешем хеш-списка или хеш-дерева, что дает дополнительные преимущества.

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

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

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

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

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

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

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

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

Хэш-конструкция Меркла-Дамгарда.

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

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

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

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

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

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

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

Коды аутентификации сообщений (MAC) (также называемые ключевыми хэш-функциями) часто создаются из хеш-функций. HMAC - такой MAC.

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

Генераторы псевдослучайных чисел (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. Это гарантирует, что метод поиска коллизий в одной из хэш-функций не повредит данные, защищенные обеими хэш-функциями.

Для хэш-функций конструкции Меркла – Дамгарда объединенная функция выглядит как столкновение -устойчивый как самый сильный компонент, но не более устойчивый к коллизиям. Антуан Жу заметил, что 2-коллизии приводят к n-коллизиям: если злоумышленник может найти два сообщения с одинаковым хешем MD5, злоумышленник может найти столько сообщений, сколько хочет злоумышленник, с идентичными хэшами MD5 без особого труда. Среди n сообщений с одинаковым хешем MD5, вероятно, будет конфликт в SHA-1. Дополнительная работа, необходимая для поиска коллизии SHA-1 (помимо экспоненциального поиска по дням рождения), требует только полиномиального времени.

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

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

MD5

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

SHA-1

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.

RIPEMD-160

RIPEMD (Дайджест сообщения оценки примитивов целостности RACE) - это семейство криптографических хеш-функций, разработанных в Лёвене, Бельгия, Хансом Доббертином, Антуном Босселаерсом и Барт Пренелем в исследовании COSIC. группа Католикского университета в Лёвене, и впервые опубликована в 1996 году. RIPEMD был основан на принципах проектирования, используемых в MD4, и по своим характеристикам аналогичен более популярному SHA-1. Однако RIPEMD-160 не сломался. Как следует из названия, RIPEMD-160 создает хеш-дайджест размером 160 бит (20 байтов).

Whirlpool

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

SHA-2

SHA-2 (алгоритм безопасного хеширования 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

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

21 декабря 2012 года была анонсирована улучшенная версия BLAKE2 под названием BLAKE2. Она была создана Жан-Филиппом Омассоном, Сэмюэлем Невесом, Зуко Уилкокс-О'Хирном и Кристианом Виннерлейном. с целью замены широко используемых, но неработающих алгоритмов 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). 85>

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

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

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

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

См. Также

Ссылки

Цитаты

Источники

Внешние ссылки

Последняя правка сделана 2021-05-16 10:21:05
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте