Современная криптография предлагает широкий спектр инструментов и методов для защиты данных при передаче и хранении. Криптографические хеш-функции относятся к типу криптографических протоколов, основанных на блочных шифрах. Они играют важную роль в защите современных систем связи и служат барьером для злоумышленников, обеспечивая аутентичность данных. Безопасное сохранение и получение паролей и анонимные криптографические транзакции – вот лишь некоторые из многих приложений хеш-функций.
В статье представлен широкий обзор и использование криптографических хеш-функций. Мы объясняем свойства хешей, их использование в различных доменах, возможные атаки и слабые места, и, самое главное, способы усиления хешей и улучшения хеш-функций.
Это односторонняя функция или уникальный идентификатор, который при вводе переменной длины выводит хэш-дайджест фиксированной длины. Однако длина вывода зависит от алгоритма хеширования. Как правило, наиболее известные алгоритмы имеют длину хеширования 160–512 бит.
Но для вывода данных с фиксированной длиной хэш-функции сначала принимают заранее установленный блок данных, известный как блоки данных. Размер блока данных варьируется от одного алгоритма к другому, но всегда один и тот же для одного алгоритма. Например, хеш-функция SHA-1 принимает размер блока 512 бит, и если вход имеет тот же размер, он запускается только один раз, то есть 80 раундов. Если размер входных данных равен 1024, алгоритм будет выполняться дважды.
На самом деле размер ввода редко бывает кратным 512 битам. В таких случаях мы используем метод, известный как Padding, который разделяет сообщение/данные на блоки данных одинаковой длины. Таким образом, функция выполняется на основе общего количества блоков данных и обрабатывает каждый блок данных за раз. Он принимает выход первого блока как вход второго блока и так далее. Следовательно, окончательный хеш – это совокупное значение всех выходных значений.
Хеширование и шифрование – это уникальные и отдельные процессы со своим собственным набором функций, свойств и процедур.
Шифрование – это двусторонний/обратимый процесс, поскольку он включает в себя использование ключа, который либо является общим, либо является математически связанным, но неидентичным открытым и закрытым ключами. В отличие от шифрования, хэши легко вычислить, и их сложно преобразовать в исходный открытый текст.
Хеширование обеспечивает целостность данных. С другой стороны, шифрование обеспечивает конфиденциальность данных.
Хотя хеширование не является шифрованием, это форма криптографии, которая обеспечивает:
Каждый раз, когда пользователь вводит пароль для аутентификации, хэш пароля сравнивается с файлом, содержащим системные хэши на компьютере. Система разрешает доступ только после успешной аутентификации. Например, Windows хранит хэши паролей в файле Security Account Manager (SAM), тогда как Linux хранит хэши паролей в файле /etc/shadow.
Точно так же некоторые веб-сайты используют хеш-значение для проверки целостности загруженного программного обеспечения, которое гарантирует, что оно не повреждено или кто-то не вмешался в файл во время загрузки.
Например, веб-сайт для загрузки ISO-образа Linux Mint 20.2 «Uma» -Cinnamon (64-разрядный) использует хеш-код SHA256 в файле sha256sum.txt. Чтобы проверить целостность образа, перейдите в каталог загруженного образа и сгенерируйте сумму SHA256 следующим образом:
ubuntu@ubuntu:~$ sha256sum -b *.iso
Sha256sum.txt файл содержит четыре хэш в зависимости от разных версий Desktop. Сравните сгенерированное значение хэша с хешем образа ISO рабочего стола Cinnamon в файле, чтобы проверить его целостность, если они совпадают; это означает, что образ ISO готов к использованию.
До SHA256 алгоритм хеширования MD5 использовался для проверки целостности загруженного файла, но он больше не является настоящим криптографическим алгоритмом хеширования, поскольку он не устойчив к коллизиям (подробнее об этом позже).
Цифровая подпись подтверждает подлинность отправителя, добавляя к исходному сообщению зашифрованный дайджест сообщения. Отправитель выполняет шифрование с помощью закрытого ключа, чтобы гарантировать невозможность отказа, в то время как хэш защищает от подделки данных и обеспечивает целостность, т. е. digital signature=sender’s private key(hash(message)).
Получатель расшифровывает дайджест сообщения с помощью открытого ключа отправителя и берет хэш исходного сообщения для сравнения с расшифрованным хешем.
Антивирусные решения используют различные подходы к выявлению вредоносных программ; один из них – сопоставление хешей. Они берут часть или блок исполняемого файла, чтобы создать хэш и сравнить его с хешами вредоносного ПО, хранящимися в их базах данных.
Набор свойств, которые заставляют хэш-функции играть важную роль в криптографии с открытым ключом, следующие:
Наиболее известными хэш-функциями являются алгоритм дайджеста сообщений (MDA), алгоритм безопасного хеширования (SHA), NTLM и т. д.
Как обсуждалось ранее, хэши большого размера могут замедлить злоумышленников, а обратное проектирование криптографического хэша может быть трудным, но не невозможным. Все, что требуется злоумышленникам, – это время, которым они могут легко управлять, используя быстрое оборудование и создавая коллизии или атаки по побочным каналам. В этом разделе обсуждаются некоторые способы использования хешей.
Коллизия при хешировании возникает, когда два входа возвращают одно и то же выходное значение. Надежные хеш-функции предназначены для обеспечения устойчивости к коллизиям. Но это неизбежно из-за эффекта ящика. В соответствии с эффектом ячейки, существует заданное количество выходных значений по сравнению с входными данными любого размера. Это означает, что, поскольку входов всегда будет больше, чем выходов, столкновение – неизбежное событие.
Как упоминалось ранее, операционные системы не хранят пароли в виде открытого текста. Следовательно, радужные таблицы – это предварительно вычисленные базы данных или таблицы поиска, которые сопоставляют хэши с паролем в виде открытого текста. Однако радужные таблицы используют время для взлома хэшей с большим объемом памяти.
Преимущество радужных таблиц перед грубым форсированием заключается в простоте операции поиска и сравнения в отличие от автоматических попыток проб и ошибок с проблемой вычисления хэша. Более того, он не требует точного совпадения пароля, что означает, что если хэш совпадает с каким-либо паролем/фразой, система разрешает аутентификацию.
John – мощный и универсальный инструмент, помогающий взламывать хеш-коды. Это похоже на автоматическую атаку по словарю, которая использует список слов или словарь для вычисления хэша и сравнения. Следовательно, он допускает грубую силу для массива режимов хеширования. Примером словаря является файл rockyou.txt, содержащий пароли от взлома на сайте rockyou.com. Список слов доступен в Github SecLists в /Passwords/Leaked-Databases.
Самый простой способ взломать хэш – использовать команду john с опцией формата, чтобы указать тип хеша, путь к списку слов и файл с хеш-значением. В Kali Linux путь к файлу rouckyou.txt – /usr/share/wordlists.
ubuntu@ubuntu:~$ john --format= --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
Pass-the-hash – это кража учетных данных, которая может привести к горизонтальному повышению привилегий. Хотя атака может происходить в системах Linux/Unix, она более распространена в Windows. Windows аутентифицирует законного пользователя, сопоставляя хэш введенного пароля, который является статическим и изменяется только при изменении пароля. Кроме того, пароли доступны в различных местах Windows, например, в памяти процессов SAM и Local Security Authority Subsystem (LSASS) и т. д.
Следовательно, злоумышленники манипулируют моделью запроса и ответа протокола безопасности NTLM, которая позволяет им аутентифицировать себя как действительных пользователей. Злоумышленник сбрасывает хэши целевой системы и использует инструмент «передать хеш», чтобы выдать себя за аутентичного пользователя. Следовательно, злоумышленнику не нужно вводить пароль, подбирать пароль или реконструировать хэш-значение.
Атака относится к классу атак грубой силы и основана на парадоксе дня рождения в теории вероятностей. Он использует проблему дня рождения для отправки двух разных сообщений с одним и тем же протоколом криптографического хеширования, чтобы вызвать коллизию. Атака обычно направлена на манипулирование общением.
Существуют различные способы защиты от атак на хэши и ограничения их против криптографических хеш-функций.
Посоление – это процесс добавления случайно сгенерированных данных (соли) на вход хеш-функции. Этот процесс помогает защититься от атак радужной таблицы. Пользователи могут включать значение соли в начало или конец пароля перед созданием хэша, который генерирует разные выходные данные, даже если пароли похожи. Кроме того, пользователь может держать соль в открытом доступе.
HMAC – это пример хэшей с ключами, в которых используются криптографические ключи и хэш-функции для улучшения ограничений алгоритма кода аутентификации сообщения (MAC). Это помогает одновременно добиться конфиденциальности и целостности информации.
Адаптивные хеш-функции предназначены для повторения их внутренней работы, поскольку название предполагает, что пользователь может регулировать количество итераций. Растягивание ключа – это один из методов, который принимает слабый ключ в качестве входных данных, обрабатывает его и повторяет процесс для вывода мощного ключа большого размера. Процесс может увеличить размер ключа до 128 бит, что затруднительно для атаки методом перебора. PBKDF2 и bcrypt – примеры адаптивных хэш-функций.
В статье представлен обширный обзор протоколов криптографического хеширования. Он демонстрирует, как проверить целостность файла, и дает обзор того, как можно взломать хэши паролей с помощью инструмента John the Ripper. Мы также обсуждаем ряд атак и мер по созданию невзламываемых хэшей с помощью соления, хэшей с ключами и адаптивных хеш-функций.