Почему для многих хеш-функций создаются хэши разной длины

Обновлено: 22.11.2024

SHA-1, SHA-2, SHA-256, SHA-384 — что все это значит!!

Если вы слышали о «SHA» во многих его формах, но не совсем уверены, что это за аббревиатура и почему это важно, сегодня мы попытаемся пролить на это немного света.< /p>

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

Что такое хэш?

Алгоритм хеширования – это математическая функция, сжимающая данные до фиксированного размера. Так, например, если бы мы взяли предложение…

…и прогнали его через специальный алгоритм хеширования, известный как CRC32, и мы получили:

Этот результат известен как хэш или хеш-значение. Иногда хеширование называют односторонним шифрованием.

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

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

Алгоритмы хэширования используются самыми разными способами — они используются для хранения паролей, в компьютерном зрении, в базах данных и т. д.

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

Для сегодняшнего обсуждения нам нужны только алгоритмы SHA. SHA расшифровывается как Secure Hash Algorithm — его название раскрывает его назначение — это криптографическая безопасность.

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

Примечание. Чтобы упростить чтение и понимание этой статьи, я использую в качестве примера строку данных и алгоритм хэширования, который значительно короче, чем тот, который фактически используется на практике. Хэши, которые вы видели до сих пор, НЕ являются хэшами SHA любого типа.

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

Протокол SSL/TLS используется для обеспечения безопасной передачи данных с одного устройства на другое через Интернет. Для краткости кажется, что SSL часто называют «шифрованием». Но не забывайте, что SSL также обеспечивает аутентификацию. Файл сертификата SSL предназначен для предоставления необходимой информации, необходимой для аутентификации. Другими словами, SSL-сертификаты связывают определенный открытый ключ с личностью.

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

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

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

Цифровые подписи — важная часть аутентификации с помощью SSL-сертификатов. Когда сертификат выпускается, он подписывается цифровой подписью Центра сертификации (ЦС), который вы выбрали в качестве поставщика сертификата (например, Sectigo, DigiCert и т. д.). Эта подпись обеспечивает криптографическое доказательство того, что ЦС подписал SSL-сертификат и что сертификат не был изменен или воспроизведен. Что еще более важно, подлинная подпись является криптографическим доказательством того, что информация, содержащаяся в сертификате, была проверена доверенной третьей стороной.

Теперь давайте поговорим о том, как создается, наносится и ставится цифровая подпись — вы выбираете терминологию. Асимметричные ключи, о которых мы упоминали ранее, снова используются, но для подписи, а не для шифрования. С математической точки зрения подписание включает в себя изменение способа объединения данных и ключей (мы не будем слишком углубляться в особенности создания подписей, потому что это быстро усложняется. Если вам это интересно, Джошуа Дэвис написал отличный пост о том, как работают цифровые подписи). Чтобы облегчить компьютерам быстрое, но безопасное создание и проверку этих подписей, ЦС сначала хеширует файл сертификата и подписывает полученный хэш. Это более эффективно, чем подписывать весь сертификат.

Эти цифровые подписи обеспечивают необходимое доказательство того, что выданный вам сертификат является именно тем сертификатом, который был выдан доверенным ЦС для рассматриваемого веб-сайта. Никаких трюков. Нет спуфинга. Никакие посредники не манипулируют файлом сертификата SSL/TLS.

Цифровые подписи невероятно конфиденциальны: любое изменение в файле приведет к изменению подписи. Если мы возьмем наше примерное предложение из предыдущего раздела и напишем его полностью строчными («быстрая коричневая лиса перепрыгивает через ленивую собаку»), результирующий хэш будет совершенно другим. Это означает, что результирующая подпись этого хэша также будет другой. Даже изменение одного бита в документе объемом в несколько тысяч гигабайт приведет к совершенно другому хэшу.

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

SHA-1 и SHA-2

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

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

В первую очередь люди обращают внимание на длину в битах как на важное различие. SHA-1 — это 160-битный хэш. SHA-2 на самом деле представляет собой «семейство» хэшей различной длины, самая популярная из которых — 256-битная.

Разнообразие хэшей SHA-2 может привести к некоторой путанице, поскольку веб-сайты и авторы выражают их по-разному. Если вы видите «SHA-2», «SHA-256» или «SHA-256 бит», эти имена относятся к одному и тому же. Если вы видите «SHA-224», «SHA-384» или «SHA-512», это относится к альтернативной битовой длине SHA-2. Вы также можете увидеть, что некоторые сайты являются более подробными и указывают как алгоритм, так и длину в битах, например «SHA-2 384». Но это так же отвратительно, как заставлять людей включать свой инициал отчества, когда вы произносите свое имя.

Индустрия SSL выбрала SHA в качестве алгоритма хеширования цифровых подписей

С 2011 по 2015 год SHA-1 был основным алгоритмом. Растущее количество исследований, показывающих слабые стороны SHA-1, вызвало переоценку. На самом деле, Google даже зашел так далеко, что создал коллизию SHA-1 (когда две части разрозненных данных создают одно и то же значение хеш-функции) просто для обеспечения. Итак, с 2016 года SHA-2 является новым стандартом. Если вы получаете сертификат SSL/TLS сегодня, он должен использовать как минимум эту подпись.

Иногда вы увидите сертификаты, использующие 384-битный алгоритм SHA-2.Вы редко встретите 224-разрядную версию, которая не одобрена для использования с общедоступными доверенными сертификатами, или 512-разрядную версию, которая менее широко поддерживается программным обеспечением.

SHA-2, скорее всего, будет использоваться не менее пяти лет. Однако может быть обнаружена непредвиденная атака на алгоритм, которая вызовет более ранний переход.

Вот как выглядит хэш SHA-1 и SHA-2 SSL-сертификата нашего веб-сайта:

Так что да. Вот из-за этого вся суета. Это может показаться не таким уж большим, но цифровые подписи невероятно важны для обеспечения безопасности SSL/TLS.

По теме: Защитите свой веб-сайт с помощью SSL-сертификата Comodo.

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

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

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

Бит имеет два возможных значения: 0 и 1. Возможное количество уникальных хэшей можно выразить как количество возможных значений, возведенное в число битов. Для SHA-256 существует 2 256 возможных комбинаций.

Итак, 2 256 комбинаций. Сколько это? Что ж, это огромное число. Серьезно. Это ставит такие числа, как триллион и септиллион, в позор. Это намного превышает количество песчинок в мире.

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

Существует (технически) бесконечное количество возможных входов[1], но ограниченное количество выходов. Таким образом, в конечном итоге каждый алгоритм хеширования, включая безопасный, приводит к коллизии. Но нас больше всего беспокоит, насколько легко это будет сделать. SHA-1 был признан небезопасным, поскольку из-за его размера и конструкции можно было создать коллизию.

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

Переход на SHA-2

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

Крайний срок выпуска новых SSL-сертификатов с хешами SHA-1 – 31 декабря 2015 года. По большей части отрасль уложилась в этот срок. С тех пор было допущено несколько ошибок и разрешено несколько особых случаев.

Браузеры обрабатывали сертификаты, подписанные SHA-1, срок действия которых истекает в 2017 году, с более строгим предупреждением. Это связано с тем, что безопасность подписи напрямую связана с тем, как долго она действительна.

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

Защита подписей

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

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

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

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

Время от времени нам нравится повторно хешировать некоторые из наших лучших старых материалов в надежде, что они понравятся нашим новым читателям. Эта статья, первоначально написанная Винсентом Линчем 29 июня 2016 г., была обновлена ​​и исправлена ​​Патриком Ноэ в 2018 г.

Хеширование подходит не только для картофеля. Так что же значит хешировать что-то в цифровом мире?

Что такое криптографический хэш?

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

Примеры хеширования

Для этих примеров я использую генератор хэшей MD5. Я хэшировал несколько типов данных: немного текста, документ и файл MP3. Обратите внимание, что все данные имеют разный размер, но хэши всегда имеют одинаковую длину.

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

Для чего используется хеширование?

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

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

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

Хранение паролей

Существует два способа хранения паролей на компьютере или веб-сайте. Первый — в «простом тексте». Если мошенник украдет базу данных паролей в виде простого текста, он сможет увидеть пароли в открытом виде. Это неправильный способ хранения паролей.

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

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

Поиск в базе данных

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

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

Чем хеширование отличается от шифрования?

Шифрование — это двусторонняя функция. Данные шифруются с целью их расшифровки в более позднее время. Это единственный хороший способ безопасного хранения или перемещения данных.

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

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

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

Алгоритм Дайджест сообщения 5 создает хэши длиной 128 бит, выраженные в виде 32 шестнадцатеричных символов. Представлен в 1991 году.

У Алгоритма безопасного хеширования есть несколько разновидностей. Наиболее часто для общих целей сегодня используются SHA-1 и SHA-256, которые создают 160- и 256-битные хэши соответственно (выражаются как 40 и 64 символа).

Проблема столкновений

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

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

Имейте в виду следующее, касающееся хэшей:

  • Хорошие алгоритмы хеширования имеют высокое усиление, также известное как лавинный эффект. Небольшое изменение в сообщении приводит к большому изменению хэш-значения.
  • Надежные выходные данные хэша должны содержать большое количество битов. Это затрудняет дублирование хеш-значения злоумышленником.
  • Хэши должны создаваться из всего сообщения, а не только из его части.
  • Конфликт – это термин, используемый для описания ситуации, когда два разных сообщения создают одно и то же значение хеш-функции. Это указывает на то, что следует использовать более надежный алгоритм хеширования.
  • Атака дня рождения – это атака методом полного перебора, при которой злоумышленник хэширует сообщения до тех пор, пока не будет найдено сообщение с таким же хэшем. Этот тип атаки основан на статистике, согласно которой вероятность того, что у двух из 23 человек в комнате дни рождения совпадают, составляет более 50%. Чтобы соответствовать выбранному дню, в комнате должно быть 253 человека.
  • Хеши часто используются для подтверждения целостности загружаемых файлов. После загрузки файла получатель создает хэш результирующего файла. Если хэш получателя совпадает с хэшем исходного файла, вы знаете, что:
    • Загруженный файл завершен (нет недостающих частей).
    • Загруженный файл не был поврежден во время загрузки.
    • Загруженный файл аналогичен исходному и не был изменен путем вставки вредоносного кода или замены исходного файла вирусом или другим деструктивным файлом. По этой причине файлы, доступные для скачивания, обычно не шифруются, так как целостность данных файла может быть подтверждена с помощью хэша.

    Два алгоритма хэширования: Message Digest v5 (MD-5) и SHA-1 (алгоритм безопасного хеширования 1) – наиболее распространенные алгоритмы хеширования, используемые сегодня. В следующей таблице описаны эти два алгоритма и менее часто используемый алгоритм HAVAL.

    Новые версии, называемые SHA-2, включают 224-битный, 256-битный, 384-битный, 512-битный алгоритм хэширования.

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

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

    Алгоритмы хеширования

    Алгоритмы хеширования столь же многочисленны, как и алгоритмы шифрования, но некоторые из них используются чаще, чем другие. Некоторые распространенные алгоритмы хеширования включают MD5, SHA-1, SHA-2, NTLM и LANMAN.

    SHA-1: это вторая версия стандарта алгоритма безопасного хеширования, первой является SHA-0. SHA-1 создает 160-битные выходные данные. SHA-1 — один из основных алгоритмов, который начал заменять MD5 после обнаружения уязвимостей. SHA-1 получил широкое распространение и признание.Фактически SHA-1 был обозначен как алгоритм хеширования, соответствующий стандарту FIPS 140.

    SHA-2: на самом деле это набор алгоритмов хеширования. Набор содержит SHA-224, SHA-256, SHA-384 и SHA-512. Каждый алгоритм представлен длиной его вывода. Алгоритмы SHA-2 более безопасны, чем алгоритмы SHA-1, но SHA-2 не получил широкого распространения.

    LANMAN: Microsoft LANMAN — это алгоритм хеширования Microsoft LAN Manager. LANMAN использовался устаревшими системами Windows для хранения паролей. LANMAN использовал алгоритмы DES для создания хэша. Проблема в том, что реализация алгоритма DES в LANMAN не очень безопасна, и поэтому LANMAN подвержен атакам грубой силы. Хэши паролей LANMAN действительно могут быть взломаны всего за несколько часов. Microsoft больше не использует LANMAN в качестве механизма хранения по умолчанию. Он доступен, но больше не включен по умолчанию.

    NTLM: это алгоритм NT LAN Manager. Алгоритм NTLM используется для хеширования паролей при аутентификации. Это преемник алгоритма LANMAN. За NTLM последовал NTLMv2. NTLMv2 использует для хеширования алгоритм HMAC-MD5.

    Шифрование личных данных

    Работа с алгоритмами хеширования

    Обзор: Алгоритмы хеширования — это односторонние функции, используемые для проверки целостности данных
    Угрозы: Утечка информации, повреждение данных, атаки типа «человек посередине», атаки методом грубой силы

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

    Они принимают входные данные любой длины и производят выходные данные фиксированной длины.

    Они должны быть эффективными и быстрыми для вычислений.

    Их нельзя инвертировать с вычислительной точки зрения.

    Они должны быть абсолютно свободными от коллизий.

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

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

    < td >SHA-1
    ИмяКлассДлина хеша
    MD5MD5CryptoServiceProvider128 бит
    SHA1CryptoServiceProvider SHA1Managed160 бит
    SHA-256SHA256Managed256 бит
    SHA-384SHA384Managed< /em>384 бита
    SHA-512SHA512Управляемый512 бит

    SHA – это алгоритм, разработанный Агентством национальной безопасности (АНБ) и опубликованный NIST как FIPS PUB 180. Разработанный для использования со стандартом цифровой подписи (DSS), SHA создает 160-битное хеш-значение.

    Исходная спецификация SHA, опубликованная в 1993 г., вскоре была отозвана АНБ и заменена пересмотренной версией FIPS PUB 180-1, обычно называемой SHA-1. АНБ отозвало исходную спецификацию, чтобы исправить ошибку в оригинальный алгоритм, который снизил его криптографическую безопасность. Однако АНБ никогда не сообщало подробностей об этом недостатке, что побудило исследователей внимательно изучить оба алгоритма. Из-за этого тщательного изучения SHA-1 считается достаточно безопасным.

    С тех пор NIST опубликовал три варианта SHA-1, которые производят более крупные хэши: SHA-256, SHA-384 и SHA-512. Хотя с большими размерами хэшей эти алгоритмы должны быть более безопасными, они не подвергались такому тщательному анализу, как SHA-1. Тем не менее, длина хэша важна для защиты от атак грубой силы и атак дня рождения.

    Взлом кода…

    Об атаках на дни рождения

    Атаки по случаю дня рождения основаны на уникальной проблеме с алгоритмами хеширования, основанной на концепции, называемой парадоксом дня рождения.Эта головоломка основана на том факте, что в комнате из 183 человек вероятность того, что один из них совпадает с вашим днём рождения, составляет 50%. Однако, если вам нужен 50-процентный шанс найти любых двух людей с одинаковыми днями рождения, вам, как ни странно, потребуется всего 23 человека в комнате. Для хеш-функций это означает, что гораздо проще найти любые два совпадения, если вам все равно, какие именно. Можно предварительно вычислить хэши для заданной длины пароля, чтобы определить, возникают ли конфликты.

    Проверка целостности

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

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

    HMACSHA1 Эта функция создает код проверки подлинности сообщения на основе хэша на основе алгоритма хеширования SHA-1. HMACSHA1 объединяет исходное сообщение и секретный ключ и использует SHA-1 для создания хэша. Затем он снова объединяет этот хэш с секретным ключом и создает второй хэш SHA-1. Как и SHA-1, алгоритм HMACSHA1 создает 160-битный хэш.

    MACTripleDES Этот алгоритм использует TripleDES для шифрования сообщения, отбрасывая все, кроме последних 64 бит зашифрованного текста.

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

    Хеширование паролей

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

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

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

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

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

    Политика безопасности

    Используйте алгоритмы хеширования для проверки целостности и хранения паролей.

    Для проверки данных вы можете разрешить другим просматривать хэш, но вы должны защитить его от изменения.

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

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

    Добавьте соль в хэш, чтобы обеспечить случайность.

    Шифрование

    III.Б. MD5

    Хэш текста ASCII «MD5» с использованием алгоритма MD5: 0x7f138a09169b250e9dcb378140907378 Изменение последнего бита в «MD5» с 1 на 0 приводит к тексту ASCII «MD4». Даже 1-битное изменение создает совершенно другой хэш. Использование MD5 для текста «MD4» приводит к хешу: 0x59b6d1f8ea235402832256aa62415fe0

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

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

    Шубхани Аггарвал, Нирадж Кумар, Достижения в области компьютеров, 2021 г.

    1 SHA-256 или SHA-2

    SHA — безопасный алгоритм хеширования. SHA-1 и SHA-256 — это две разные версии этого алгоритма. Они отличаются как конструкциями, так и разрядностью подписи. SHA-1 — это 160-битный хэш, а SHA-256 генерирует почти уникальную 256-битную (32-байтовую) подпись для текста. SHA-256 — одна из самых сильных хеш-функций, которая является преемником SHA-1. Кодировать его ненамного сложнее, чем SHA-1, и он еще никоим образом не скомпрометирован [1]. Графическое представление SHA-256 показано на рис. 2.

    Рис. 2 . Алгоритм хэширования.

    Управление учетными записями по умолчанию

    Джош Шауль, Аарон Ингрэм, в книге «Practical Oracle Security», 2007 г.

    Алгоритм хэширования паролей Oracle

    Алгоритм хеширования паролей Oracle довольно прост. Начните с объединения имени пользователя с паролем, а затем преобразуйте полученную строку в верхний регистр. Затем преобразуйте строку в двухбайтовые символы (Американский стандартный код для обмена информацией [ASCII] преобразуется путем простой установки старшего байта в 0) и добавляйте заполнение (нулевые байты) до тех пор, пока длина строки не станет кратной 8 байтам. . Зашифруйте строку с помощью тройного стандарта шифрования данных (3DES), используя фиксированный ключ в режиме CBC. Возьмите последние 8 байт зашифрованного текста и используйте их в качестве ключа для повторного шифрования всей зашифрованной строки, используя 3DES в режиме CBC. Хэш пароля — это последние 8 байт результирующей строки, преобразованные в печатный шестнадцатеричный формат.

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

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

    Введение в хэширование и его использование

    Автор: Конрад Чанг, 2BrightSparks Pte. ООО

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

    Что такое хеширование?

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

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

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

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

    Каковы преимущества хеширования?

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

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

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

    Типы хеширования

    Существует множество различных типов алгоритмов хеширования, таких как RipeMD, Tiger, xxhash и другие, но наиболее распространенными типами хеширования, используемыми для проверки целостности файлов, являются MD5, SHA-2 и CRC32.

    SHA-2. SHA-2, разработанный Агентством национальной безопасности (АНБ), представляет собой криптографическую хеш-функцию. SHA-2 включает в себя существенные отличия от своего предшественника SHA-1. Семейство SHA-2 состоит из шести хеш-функций с дайджестами (хеш-значениями) размером 224, 256, 384 или 512 бит: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA. -512/256.

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

    Использование хеширования в программе 2BrightSparks

    В программе резервного копирования и синхронизации SyncBackPro/SE/Free хеширование в основном используется для проверки целостности файлов во время или после сеанса передачи данных. Например, пользователь SyncBack может включить проверку файлов («Изменить профиль» > «Копировать/удалить») или использовать более медленный, но более надежный метод («Изменить профиль» > «Параметры сравнения»), который позволит использовать хеширование для проверки различий между файлами. В зависимости от того, какой параметр используется и где находятся файлы резервных копий, будут использоваться разные хэш-функции.

    Другие области, где используется хеширование, включают возобновление работы на FTP, проверку целостности данных, сценарии и иногда аутентификацию в облачных профилях (скрипты и резервное копирование в облако поддерживаются только SyncBackPro).

    У 2BrightSparks также есть служебная программа HashOnClick, которую можно использовать для обеспечения идентичности файлов. HashOnClick является частью утилиты OnClick, которая совершенно бесплатна. В HashOnClick доступно несколько типов алгоритмов хеширования.

    Вы можете посетить нашу страницу загрузок, если хотите попробовать какое-либо программное обеспечение 2BrightSparks.

    Обзор

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

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