[Хеш-алгоритмы] | |
---|---|
Основные понятия | |
хеш-функции ·SHA ·DSA | |
Основные стандарты | |
SHA-0 ·SHA-1 ·SHA-2 ·SHA-3 |
A криптографическая хеш-функция (CHF ) - математический алгоритм, который отображает данные произвольных размер (часто называемый «сообщением») в битовый массив фиксированного размера («хеш-значение», «хэш» или «дайджест сообщения»). Это односторонняя функция , то есть функция, которую практически невозможно инвертировать. В идеале единственный способ найти сообщение, генерирующее данный хеш, - это попытаться выполнить перебор возможных входных данных, чтобы увидеть, дают ли они совпадения, или использовать радужную таблицу сопоставленных хешей. Криптографические хеш-функции являются основным инструментом современной криптографии.
Идеальная криптографическая хеш-функция имеет следующие основные свойства:
Криптографические хеш-функции имеют много приложений информационной безопасности, особенно в цифровых подписях, кодах аутентификации сообщений (MAC), и другие формы аутентификации. Их также можно использовать как обычные хэш-функции для индексации данных. в хэш-таблицах для снятия отпечатков для обнаружения дублирующихся данных или однозначной идентификации файлов, а также в качестве контрольных сумм для обнаружения случайного повреждения данных. Действительно, в контексте информационной безопасности криптографические хеш-значения иногда называют (цифровыми) отпечатками пальцев, контрольными суммами или просто хеш-значениями, хотя все эти термины обозначают более общие функции с довольно разными свойствами и целями.
Большинство криптографических хеш-функций предназначены для принятия на вход строки строки любой длины и создания хеш-значения фиксированной длины.
Криптографическая хеш-функция должна выдерживать все известные типы криптоаналитических атак. В теоретической криптографии уровень безопасности криптографической хеш-функции был определен с использованием следующих свойств:
Сопротивление столкновениям подразумевает сопротивление второму предварительному изображению, но не подразумевает сопротивление предварительному изображению. Более слабое предположение всегда предпочтительнее в теоретической криптографии, но на практике хеш-функция, которая устойчива только ко второму прообразу, считается небезопасной и поэтому не рекомендуется для реальных приложений.
Неформально эти свойства означают, что злоумышленник не может заменить или изменить входные данные без изменения их дайджеста. Таким образом, если две строки имеют один и тот же дайджест, можно быть уверенным, что они идентичны. Сопротивление второму прообразу не позволяет злоумышленнику создать документ с тем же хешем, что и документ, который злоумышленник не может контролировать. Устойчивость к конфликтам не позволяет злоумышленнику создать два разных документа с одним и тем же хешем.
Функция, отвечающая этим критериям, может все еще иметь нежелательные свойства. Популярные в настоящее время криптографические хеш-функции уязвимы для атак с расширением длины : учитывая хэш (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 система (или протокол, или функция) - это экономическая мера для предотвращения атак типа «отказ в обслуживании» и другие злоупотребления службами, такие как спам в сети, когда требуется некоторая работа со стороны запрашивающей службы, обычно подразумевающая время обработки на компьютере. Ключевой особенностью этих схем является их асимметрия: работа должна быть умеренно сложной (но выполнимой) со стороны запрашивающей стороны, но легкой для проверки поставщиком услуг. Одна популярная система, используемая в майнинге биткойнов и 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 был разработан Рональдом Ривестом в 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.
RIPEMD (Дайджест сообщения оценки примитивов целостности RACE) - это семейство криптографических хеш-функций, разработанных в Лёвене, Бельгия, Хансом Доббертином, Антуном Босселаерсом и Барт Пренелем в исследовании COSIC. группа Католикского университета в Лёвене, и впервые опубликована в 1996 году. RIPEMD был основан на принципах проектирования, используемых в MD4, и по своим характеристикам аналогичен более популярному SHA-1. Однако RIPEMD-160 не сломался. Как следует из названия, RIPEMD-160 создает хеш-дайджест размером 160 бит (20 байтов).
Whirlpool - это криптографическая хеш-функция, разработанная Винсентом Рейменом и Пауло SLM Баррето, которые впервые описали ее в 2000 году. Whirlpool основан на существенно модифицированной версии Advanced Encryption Standard (AES). Whirlpool производит хеш-дайджест размером 512 бит (64 байта).
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 (алгоритм безопасного хеширования 3) был выпущен NIST 5 августа 2015 года. SHA-3 является подмножеством более широкого семейства криптографических примитивов Keccak. Алгоритм Keccak - это работа Гвидо Бертони, Джоан Дэемен, Майкла Петерса и Жиля Ван Аше. Keccak основан на конструкции губки, которая также может использоваться для создания других криптографических примитивов, таких как потоковый шифр. SHA-3 обеспечивает те же размеры вывода, что и SHA-2: 224, 256, 384 и 512 бит.
Настраиваемые размеры вывода также можно получить с помощью функций SHAKE-128 и SHAKE-256. Здесь расширения имени -128 и -256 означают степень безопасности функции, а не размер вывода в битах.
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, улучшенная версия 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 не уязвимы для этого типа атак.
|
|journal=
()