Криптографические хэш-функции
Современная криптография предлагает широкий спектр инструментов и методов для защиты данных при передаче и хранении. Криптографические хэш-функции относятся к типу криптографических протоколов, основанных на блочных шифрах. Они играют важную роль в обеспечении безопасности современных систем связи и служат барьером для злоумышленников, обеспечивая достоверность данных. Безопасное сохранение и извлечение паролей и анонимных криптографических транзакций — это лишь некоторые из многих приложений хеш-функций.
В статье представлен широкий обзор и использование криптографических хеш-функций. Мы объясняем свойства хэшей, их использование в различных областях, возможные атаки и слабые места и, самое главное, способы усиления хэшей и улучшения хеш-функций.
Что такое хэш-функция?
Это односторонняя функция или уникальный идентификатор, который при вводе переменной длины выводит хеш-дайджест фиксированной длины. Однако длина вывода зависит от алгоритма хеширования. В общем, самые популярные алгоритмы имеют длину хэша 160-512 бит.
Но для вывода данных фиксированной длины хеш-функции сначала принимают предварительно установленный блок данных, известный как блоки данных. Размер блока данных варьируется от одного алгоритма к другому, но всегда одинаков для одного алгоритма. Например, хэш-функция SHA-1 принимает размер блока 512 бит, и если входные данные имеют такой же размер, она выполняется только один раз, то есть 80 раундов. Если размер ввода равен 1024, алгоритм запустится дважды.
На самом деле размер входных данных редко бывает кратным 512 битам. В таких случаях мы используем метод, известный как заполнение, который делит сообщение/данные на блоки данных одинаковой длины. Таким образом, функция выполняется на основе общего количества блоков данных и обрабатывает каждый блок данных одновременно. Он принимает выходные данные первого блока в качестве входных данных для второго блока и так далее. Следовательно, окончательный хэш представляет собой объединенное значение всех выходных значений.
Хеширование и шифрование
Хеширование и шифрование — это уникальные и отдельные процессы со своим собственным набором функций, свойств и процедур.
Шифрование — это двусторонний/обратимый процесс, поскольку он включает использование ключа, который является либо общим, либо математически связанным, но не идентичным открытому и закрытому ключам. В отличие от шифрования, хэши легко вычисляются, и их трудно преобразовать в исходный открытый текст.
Хэширование обеспечивает целостность данных. Шифрование, с другой стороны, обеспечивает конфиденциальность данных.
Польза хэшей
Несмотря на то, что хеширование не является шифрованием, это форма криптографии, которая обеспечивает:
защита паролем
целостность данных/проверка файлов
цифровые подписи и
сигнатуры вирусов.
Защита паролем
Всякий раз, когда пользователь вводит пароль для аутентификации, хэш пароля сравнивается с файлом, содержащим системные хэши на компьютере. Система разрешает доступ только после успешной аутентификации. Например, Windows хранит хэши паролей в файле диспетчера учетных записей безопасности (SAM), тогда как Linux хранит хэши паролей в файле /etc/shadow.
Проверка файлов
Точно так же некоторые веб-сайты совместно используют значение хеш-функции для проверки целостности загруженного программного обеспечения, которое гарантирует, что оно не повреждено или кто-то не подделал файл во время загрузки.
Например, веб-сайт для загрузки ISO-образа Linux Mint 20.2 «Uma»-Cinnamon (64-разрядная версия) делится своим хэшем SHA256 в файле sha256sum.txt. Чтобы проверить целостность образа, перейдите в каталог загруженного образа и сгенерируйте сумму SHA256 следующим образом:
Файл sha256sum.txt содержит четыре хэша в зависимости от разных выпусков Desktop. Сравните сгенерированное хеш-значение с хэшем ISO-образа рабочего стола Cinnamon в файле, чтобы проверить его целостность, если они совпадают; это означает, что образ ISO готов к использованию.
До SHA256 алгоритм хеширования MD5 использовался для проверки целостности загруженного файла, но он больше не является настоящим криптографическим алгоритмом хеширования, поскольку он не устойчив к коллизиям (подробнее об этом позже).
Цифровые подписи
Цифровая подпись аутентифицирует отправителя, добавляя к исходному сообщению зашифрованный дайджест сообщения. Отправитель шифрует с помощью закрытого ключа, чтобы гарантировать неотказуемость, в то время как хэш защищает от подделки данных и обеспечивает целостность, т. е. цифровая подпись=закрытый ключ отправителя (хэш (сообщение)).
Получатель расшифровывает дайджест сообщения с помощью открытого ключа отправителя и берет хэш исходного сообщения для сравнения с расшифрованным хэшем.
Сигнатуры вирусов
В антивирусных решениях используются различные подходы к выявлению вредоносных программ; один из них — сопоставление хэшей. Они берут часть или блок исполняемого файла для создания хэша и сравнивают его с хэшами вредоносных программ, хранящимися в их базах данных.
Свойства хэшей
Набор свойств, благодаря которым хеш-функции играют решающую роль в криптографии с открытым ключом, выглядит следующим образом:
Хороший хеш-алгоритм возвращает хеш-значение фиксированного размера/длины независимо от размера входных данных.
Он обеспечивает устойчивость к предварительному изображению, что означает, что невозможно восстановить исходное значение путем реверсирования хэша.
Сильный алгоритм хеширования обеспечивает устойчивость к коллизиям. То есть никакие два разных входа не могут иметь одинаковый выход.
-
Незначительное изменение на входе порождает значительные изменения на выходе. Это свойство хэшей помогает обеспечить целостность файлов/данных.
Скорость вычислений криптографических хеш-функций — еще одно идеальное свойство. Однако он субъективен и варьируется в зависимости от цели и области применения.
Режимы хэшей
Наиболее известными хеш-функциями являются алгоритм Message-Digest (MDA), безопасный алгоритм хэширования (SHA), NTLM и т. д.
MD5: MD5 — это пятая версия алгоритмов Message-Digest, длина вывода которой составляет 128 бит. Это был наиболее широко известный алгоритм хеширования, пока он не стал подвержен атакам столкновений (подробнее об этом позже). Например, до алгоритмов безопасного хеширования (SHA) алгоритм хеширования MD5 был наиболее часто используемым методом проверки целостности файлов.
SHA: Алгоритм безопасного хеширования был представлен АНБ. Это набор алгоритмов, содержащий четыре варианта функций SHA-224, SHA-256, SHA-384 и SHA-512. Имя каждого варианта представляет размер его вывода. Это более безопасный алгоритм хеширования, поскольку до сих пор не известно ни о каком компромиссе алгоритмов хеширования.
NTLM: алгоритм хеширования NT LAN Manager используется для хеширования паролей. NTLM использует проверки циклическим избыточным кодом и дайджесты сообщений, но его единственный недостаток в том, что он основан на шифре RC4, который, в отличие от новых криптографических протоколов, AES и SHA-256, был целью успешной атаки. NTLMv2 решает эти проблемы с помощью 128-битной системы HMAC-MD5.
Плохие хэши
Как обсуждалось ранее, хэши большого размера могут замедлить атакующих, а реверс-инжиниринг криптографического хэша может быть сложным, но не невозможным. Все, что требуется злоумышленникам, — это время, которым они могут легко управлять, используя быстрое оборудование и создавая коллизии или атаки по сторонним каналам. В этом разделе обсуждаются некоторые способы эксплуатации хэшей.
Столкновение
Конфликт при хешировании возникает, когда два входных параметра возвращают одно и то же выходное значение. Надежные хеш-функции предназначены для обеспечения устойчивости к коллизиям. Но это неизбежно из-за эффекта сортировки. В соответствии с эффектом «ячейки» существует заданное количество выходных значений для входных данных любого размера. Это означает, что поскольку входных данных всегда будет больше, чем выходных, столкновение является неизбежным событием.
Радужные столы
Как упоминалось ранее, операционные системы не хранят пароли в открытом виде. Следовательно, радужные таблицы представляют собой предварительно вычисленные базы данных или таблицы поиска, которые сопоставляют хэши с паролем в виде открытого текста. Веб-сайт Crackstation, например, предоставляет огромную базу данных для взлома хэшей паролей без добавления соли. Тем не менее, радужные таблицы торгуют временем для взлома хэшей с большим объемом памяти.
Преимущество радужных таблиц перед перебором заключается в простой операции поиска и сравнения в отличие от автоматизированных попыток проб и ошибок с проблемой вычисления хэша. Более того, он не требует точного совпадения пароля, что означает, что если хэш совпадает с каким-либо паролем/фразой, система разрешает аутентификацию.
Джон Потрошитель
John — мощный и универсальный инструмент, помогающий взламывать хэши. Это похоже на автоматическую атаку по словарю, которая использует список слов или словарь для вычисления хэша и сравнения. Следовательно, он допускает грубую силу массива режимов хеширования. Примером списка слов является файл rockyou.txt, который содержит пароли от взлома на веб-сайте rockyou.com. Список слов доступен на Github SecLists в разделе /Passwords/Leaked-Databases.
Самый простой способ взломать хеш — использовать команду john с параметром формата, чтобы указать тип хэша, путь к списку слов и файл со значением хэша. В Kali Linux путь к файлу rouckyou.txt — /usr/share/wordlists.
Передайте хэш
Передача хеша — это кража учетных данных, которая может привести к горизонтальному повышению привилегий. Несмотря на то, что атака может происходить в системах Linux/Unix, она более распространена в Windows. Windows аутентифицирует законного пользователя, сопоставляя хэш введенного пароля, который является статическим и изменяется только при изменении пароля. Кроме того, пароли доступны в различных местах Windows, например, в памяти процесса SAM и подсистемы локальной безопасности (LSASS) и т. д.
Следовательно, злоумышленники манипулируют моделью запроса и ответа протокола безопасности NTLM, что позволяет им аутентифицировать себя как действительных пользователей. Злоумышленник сбрасывает хэши целевой системы и использует инструмент «pass-the-hash», чтобы выдать себя за подлинного пользователя. Следовательно, злоумышленнику не нужно вводить пароль или перебирать пароль или реконструировать значение хеш-функции. Подробнее об атаке читайте здесь.
Атака в день рождения
Атака относится к классу атак грубой силы и основана на парадоксе дня рождения в теории вероятностей. Он использует проблему дня рождения для отправки двух разных сообщений с одним и тем же криптографическим хеш-протоколом, чтобы вызвать коллизию. Атака обычно направлена на манипулирование коммуникацией. Более подробная информация об атаке «День рождения» доступна здесь.
Хэши Power Up
Существуют различные способы защиты от атак на хэши и ограничения их от криптографических хеш-функций.
Соленые хэши
Соление — это процесс добавления случайно сгенерированных данных (соли) к входным данным хеш-функции. Этот процесс помогает защититься от атак с использованием радужных таблиц. Пользователи могут включать значение соли в начале или в конце пароля перед созданием хэша, который генерирует разные выходные данные, даже если пароли похожи. Кроме того, пользователь может оставить соль общедоступной.
Хэши с ключами
HMAC — это пример хэшей с ключами, в которых используются криптографические ключи и хеш-функции для улучшения ограничений алгоритма кода аутентификации сообщений (MAC). Это помогает достичь конфиденциальности и целостности информации одновременно.
Адаптивная хеш-функция
Адаптивные хеш-функции предназначены для повторения их внутренней работы, поскольку название предполагает, что пользователь может настроить количество итераций. Растяжение ключей — это один из методов, при котором слабый ключ используется в качестве входных данных, обрабатывается и итерируется процесс для вывода мощного ключа большого размера. Процесс может увеличить размер ключа до 128 бит, что затрудняет атаку методом грубой силы. PBKDF2 и bcrypt — примеры адаптивных хеш-функций.
Заключение
В статье представлен обширный обзор криптографических хеш-протоколов. Он демонстрирует, как проверить целостность файлов, и дает обзор того, как можно взломать хэши паролей с помощью инструмента John the Ripper. Мы также обсудим ряд атак и мер по созданию неподдающихся взлому хэшей с помощью солей, хэшей с ключами и адаптивных хеш-функций.