Как определить тип хеша
В статье «Хеши: определение типа, подсчёт контрольных сумм, нестандартные и итерированные хеши» мы уже знакомились с такими утилитами как hashID и HashTag, которые по строке хеша определяют, по какому алгоритму он был вычислен.
Упомянутые инструменты по-прежнему работают, но мир не стоит на месте (а развитие этих программ — стоит). Сейчас появились новые типы хешей, поддержка которых не реализована или имеет ошибки в данных инструментах.
Прямо сейчас, на момент написания, активно развиваются две новые программы для идентификации типов хешей. Они поддерживают больше алгоритмов хеширования и просто во всём лучше старых инструментов. Данная статья посвящена знакомству с новыми инструментами по идентификации типа хеша.
Зачем нужны новые инструменты идентификации типа хеша?
hashID не поддерживается с марта 2015 года, hash-identifier не поддерживается с 2011 года, Dagon с июня 2018 года и findmyhash с 2011 года. Все они не имеют вовсе, или имеют неправильную, ошибочную поддержку современных хешей, таких как Keccak/SHA3/Blake2 и т. д. Также такой инструмент, как hash-identifier, который является полностью интерактивным, не имеет параметров и не удобен для использования в скриптах. findmyhash имеет очень ограниченный набор обнаруживаемых хешей. Самый интересный инструмент — hashID (для идентификации хеша), но, поскольку он не поддерживается более 5 лет, проблемы и открытые PR (Pull Request — запросы на внесение изменения в исходный код) накапливаются, ошибки не исправляются, а некоторые функции отсутствуют.
Это всё могло побудить авторов создать новые инструменты с возможностями отсутствующими в предшественниках.
Посмотрим на сравнительную таблицу инструментов по определению типа хеша:
Инструмент | Поддерживается | Цветной вывод | Ref. | Библиотека | Язык | #️⃣ | 🔢 |
---|---|---|---|---|---|---|---|
haiti | ✅ (2019-настоящее время) | ✅ | ✅ | ✅ | 💎 | ✅ | 382 |
hashID | ❌ (2013-2015) | ❌ | ✅ | ❌ | 🐍 | ⭕️ | 275 |
hash-identifier | ❌ (2011-2011) | ❌ | ❌ | ❌ | 🐍 | ❌ | ~126 |
Dagon | ❌ (2017-2018) | ⭕️ | ❌ | ❌ | 🐍 | ⭕️ | ~48 |
findmyhash | ❌ (2011-2011) | ❌ | ❌ | ❌ | 🐍 | ❌ | ~17 |
Name-That-Hash | ✅ (2021-настоящее время) | ✅ | ✅ | ✅ | 🐍 | ✅ | 365 |
HashTag | ❌ (2013-2013) | ❌ | ❌ | ❌ | 🐍 | ⭕ | ~137 |
Условные обозначения:
- Ref.: показ рядом с типом хеша соответствующее название режима hashcat и john the ripper
- ✅: функция поддерживается
- ❌: функция не поддерживается
- ⭕️: функция частично поддерживается
- 💎: язык программирования Ruby
- 🐍: язык программирования Python
- #️⃣: корректная поддержка современных хешей
- 🔢: количество поддерживаемых хешей
Образцы хешей
Если вам нужны образцы хешей для поверки инструментов, то смотрите раздел «Где посмотреть примеры хешей».
Я отобрал несколько хешей для анализа:
- SHA3-224
412ef78534ba6ab0e9b1607d3e9767a25c1ea9d5e83176b4c2817a6c
- SHA3-512
7c2dc1d743735d4e069f3bda85b1b7e9172033dfdd8cd599ca094ef8570f3930c3f2c0b7afc8d6152ce4eaad6057a2ff22e71934b3a3dd0fb55a7fc84a53144e
- PKZIP Master Key
f1eff5c0368d10311dcfc419
- CRC32
c762de4a:00000000
- Keccak-512
2fbf5c9080f0a704de2e915ba8fdae6ab00bbc026b2c1c8fa07da1239381c6b7f4dfd399bf9652500da723694a4c719587dd0219cb30eabe61210a8ae4dc0b03
Хеши необходимо заключать в одинарные кавычки!
Хеши могу включать в себя специальные символы, которые имеют для оболочки специальное значение. Особенно это важно если вы работаете в Linux. Если вы не будете это учитывать, то программа по определению типа хеша хоть и не сообщит об ошибке, но получит строку отличную от той, которую вы думали что ввели.
Причём даже в двойных кавычках оболочка трактует некоторые символы как специальные. Поэтому чтобы не экранировать их, поместите весь хеш в одинарные кавычки.
Необязательно помещать в кавычки хеши, состоящие только из букв и цифр, но я предпочитаю все хеши передавать в одинарных кавычках.
HAITI
HAITI (HAsh IdenTifIer) — это инструмент командной строки (и библиотека) для идентификации типа заданного хеша. Библиотека особенно хороша для написания скриптов, поскольку не нужно заключать инструмент командной строки в подпроцесс.
Особенности:
- Определение типов 382+ хешей
- Поддержка современных алгоритмов (SHA3, Keccak, Blake2 и прочее)
- Краткая информация по использованию хеша с Hashcat и John the Ripper
- Инструмент командной строки и библиотека
- Цветной вывод
Полный список опций программы и инструкции по установке вы найдёте в карточке программы: https://kali.tools/?p=6638
Использование программы очень простое — укажите ваш хеш после имени программы:
haiti ОПЦИИ 'ХЕШ'
Причём ОПЦИИ являются необязательными, поведение программы по умолчанию очень сбалансированной и в большинстве случаев вам не захочется менять его какими-либо дополнительными параметрами.
Например:
haiti 7c2dc1d743735d4e069f3bda85b1b7e9172033dfdd8cd599ca094ef8570f3930c3f2c0b7afc8d6152ce4eaad6057a2ff22e71934b3a3dd0fb55a7fc84a53144e
Вывод:
SHA-512 [HC: 1700] [JtR: raw-sha512] SHA3-512 [HC: 17600] [JtR: raw-sha3] SHA3-512 [HC: 17600] [JtR: dynamic_400] Keccak-512 [HC: 18000] [JtR: raw-keccak] BLAKE2-512 [JtR: raw-blake2] Whirlpool [HC: 6100] [JtR: whirlpool] Salsa10 Salsa20 Skein-512 [JtR: skein-512] Skein-1024(512)
Среди вывода есть и правильный ответ: SHA3-512
В выводе HC — это сокращение для Hashcat, а последующие цифры (например, 1700, 17600 и так далее) это номера режимов в данной программе.
JtR — это сокращение от John the Ripper, а последующие строки — это название алгоритмов хешей для взлома в данной программе (raw-sha512, raw-sha3 и так далее).
Цвет очень хорошо улучшает читаемость вывода, особенно если он обширный. Если вы хотите отключить цветной вывод, то используйте опцию —no-color:
haiti --no-color 412ef78534ba6ab0e9b1607d3e9767a25c1ea9d5e83176b4c2817a6c
Хотя зачастую вывод содержит более одного предположения о типе хеша, по умолчанию из него исключены алгоритмы с солью. Чтобы показать все возможные алгоритмы хеширования, в том числе с использованием соли используйте опцию -e или —extended:
haiti -e 7c2dc1d743735d4e069f3bda85b1b7e9172033dfdd8cd599ca094ef8570f3930c3f2c0b7afc8d6152ce4eaad6057a2ff22e71934b3a3dd0fb55a7fc84a53144e
Если вы хотите только узнать тип хеша и информация о режимах hashcat и john the ripper для вас является излишней, то вы можете указать опцию —short для укороченного вывода:
haiti --short f1eff5c0368d10311dcfc419
Name-That-Hash
С января 2021 года, почти через два года после того, как началась работа над HAITI, появился проект под названием Name-That-Hash, потому что автору требовалась библиотека Python для Ciphey. Теперь есть два актуальных варианта для идентификации хеша.
Name That Hash определяет тип хеша. Программа поддерживает MD5, SHA256 и более 300 других хешей.
Особенности Name That Hash:
- Рейтинги популярности — Сначала вы увидите самые популярные хеши.
- Сводки хешей — Name-that-hash выведет краткую информацию об основах использования каждого хеша, позволяя вам сделать осознанный выбор.
- Цветной вывод — контрастный и наглядный.
- Вывод в JSON и в API — вы можете использовать Name-That-Hash в своём проекте, поскольку программа имеет API и интерфейс командной строки. Используйте вывод JSON или импортируйте программу как модуль Python!
- Актуальна — Name-That-Hash — это проект 2021 года.
- Продуманность — авторы продумали функции, интерфейс и опции с мыслью об удобстве использования.
- Расширяемость — добавляйте новые хеши так быстро, как только сможете редактировать текстовый файл.
- Работа с файлами — программа считывает построчно файл и проверяет тип каждого хеша.
- Поиск хешей — экстремальный режим, который пытается выделить хеш даже если строка содержит мусор.
Инструкцию по установке и полный список опций вы найдёте на странице https://kali.tools/?p=6626.
Для определения типа хеша укажите его с опцией -t (—text):
nth -t 'ХЕШ'
Например:
nth -t '7c2dc1d743735d4e069f3bda85b1b7e9172033dfdd8cd599ca094ef8570f3930c3f2c0b7afc8d6152ce4eaad6057a2ff22e71934b3a3dd0fb55a7fc84a53144e'
Пример вывода:
Хеши разбиты на две группы:
- Most Likely — более вероятные варианты
- Least Likely — менее вероятные варианты
Причём в этих группах они также отсортированы по частоте использования.
В выводе вы можете увидеть уже знакомые строки HC и JtR с номерами и названиями алгоритмов хеширования в Hashcat и John.
Кроме этого, имеется краткое описание применения, например:
- Summary: Used in Bitcoin Blockchain and Shadow Files.
- Summary: Used in Wireguard, Zcash, IPFS and more.
- Summary: Not considered a hash function
Причём обратите внимание, некоторые записи являются гиперсылками (они подчёркнуты точками) и для получения дополнительной информации можно пройти на веб-страницу. Всё это делается для того, чтобы вы могли сориентироваться в предлагаемых типах хешей и выбрать наиболее подходящий.
Для проверки множества хешей используйте опцию -f (—file):
nth -f 'ФАЙЛ'
Формат файла — один хеш на строку.
Одна из этих опций (-t или -f) являются обязательной.
Если ваши хеши кодированы в Base64, то используйте опцию -b64 (—base64). Она говорит программе перед идентификацией декодировать хеши из Base64. Для файлов со смешанными строками Base64 и в обычном тексте программа пытается вначале декодировать base64 и если это не получается, то трактует хеш как обычную строку без кодировки.
Пример:
nth -t 'ZjFlZmY1YzAzNjhkMTAzMTFkY2ZjNDE5Cg==' -b64
Обратите внимание, что в качестве хеша (после шапки) показана уже декодированная строка.
Опция -e (—extreme) включает поиск хешей в строке. Этот режим получит 5d41402abc4b2a76b9719d911017c592 из ####5d41402abc4b2a76b9719d911017c592###.
По идее, следующие две команды должны дать одинаковый результат:
nth -t '####5d41402abc4b2a76b9719d911017c592###' -e nth -t '5d41402abc4b2a76b9719d911017c592'
Но у меня они получились разные. Поэтому используйте этот режим скорее как экспериментальный.
Бесплатное онлайн определение типа хеша
Сервис Онлайн определение типа хеша существует уже давно. Он работает очень просто — вы вводите хеш и получаете тип хеша. Ранее он основывался на утилитах hashID и HashTag. Теперь сервис обновлён и работает с утилитами HAITI и Name That Hash — самыми актуальными инструментами для определения типа хеша.
Адрес сервиса: https://suip.biz/ru/?act=hashtag
Заключение
Как можно убедиться, трудно выбрать, какая из программ лучше — HAITI или Name That Hash. Можно пользоваться или двумя. Либо если вам нужен вывод в формате JSON или вам нужна поддержка API или библиотека для определения хешей, то вы можете выбрать наиболее подходящую для ваших потребностей.
Связанные статьи:
- Хеши: определение типа, подсчёт контрольных сумм, нестандартные и итерированные хеши (100%)
- Как взломать пароль Windows (55.6%)
- Расшифровка хранимых в Windows паролей с помощью mimikatz и DPAPI (55.6%)
- Полное руководство по John the Ripper. Ч.6: брут-форс нестандартных хешей (55.6%)
- Полное руководство по John the Ripper. Ч.7: Johnny — графический интерфейс для John the Ripper (55.6%)
- Атаки на HTTP Basic и Digest аутентификацию (RANDOM - 50%)