Як визначити тип хешу?

10 травня 2023 1 хвилина Автор: Lady Liberty

Хеш: функції та інструменти

Хешування є перетворенням будь-якого обсягу інформації в унікальний набір символів, який властивий тільки цьому масиву вхідної інформації. Цей набір символів і називатиметься хеш. Практично можна використовувати хеш у роботі з великими об’ємами інформації, перевірці цілосності даних при передачі, шифруванні, у використанні електронних підписів, при зберіганні паролів, тощо. Визначити тип хешу можна за допомогою спеціальних утиліт та сервісів. Існує дуже багато онлайн-сервісів. Але у деяких випадках лізти в інтернет для визначення типу хеша буде важко. У таких ситуаціях можна використати спеціальні утиліти. Одна з найпопулярніших на сьогоднішній день утиліта – інструмент hashID. hashID – це надзвичайно корисна тулза на Python 3, яка спробує визначити, який тип хешу перед нею.

У хеш-функції є кілька обов’язкових властивостей:

  • При незначній зміні вхідної інформації її хеш повністю змінюється.

  • Хеш-функція повинна вміти наводити будь-який обсяг даних до заданої довжини.

  • Хешування дозволяє досить швидко обчислити потрібний хеш для великого обсягу інформації.

  • Хеш завжди є унікальним для кожного масиву інформації. Однак іноді трапляються так звані колізії, коли для різних вхідних блоків інформації обчислюються однакові хеш-коди.

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

  • Алгоритм роботи хеш-функції, як правило, робиться відкритим, щоб при необхідності можна було оцінити її стійкість до відновлення початкових даних по хеш, що видається.

Навіщо потрібні нові інструменти для ідентифікації типу хеша?

hashID не підтримується з березня 2015 року, hash-identifier не підтримується з 2011 року, Dagon з червня 2018 року та findmyhash з 2011 року. Всі вони не мають зовсім, або мають неправильну, хибну підтримку сучасних хешей, таких як Keccak/SHA3/Blake2 і т. д. Також такий інструмент, як hash-identifier, який є повністю інтерактивним, не має параметрів і не зручний для використання в скриптів. findmyhash має дуже обмежений набір хешів, що виявляються. Найцікавіший інструмент — hashID (для ідентифікації хешу), але оскільки він не підтримується більше 5 років, проблеми та відкриті PR (Pull Request — запити на внесення зміни до вихідного коду) накопичуються, помилки не виправляються, а деякі функції відсутні. Це все могло спонукати авторів до створення нових інструментів з можливостями відсутніми в попередниках. Подивимося на порівняльну таблицю інструментів визначення типу хешу (Скріншот 1):

Умовні позначення

Скріншот 1. Порівняльна таблиця.
Функція не підтримується
Функція підтримується
Функція частково підтримується
Мова програмування Python
Мова програмування Ruby
Коректна підтримка сучасних хешів

Я відібрав декілька хешів для аналізу:

SHA3-224

SHA3-512

Keccak-512

PKZIP Master Key

CRC32

Хеші можу включати спеціальні символи, які мають для оболонки спеціальне значення. Особливо це важливо, якщо ви працюєте в Linux. Якщо ви не враховуватимете це, то програма з визначення типу хеша хоч і не повідомить про помилку, але отримає рядок відмінний від того, який ви думали що ввели. Причому навіть у подвійних лапках оболонка трактує деякі символи як спеціальні. Тому щоб не екранувати їх, помістіть весь хеш в одинарні лапки. Необов’язково поміщати в лапки хеші, що складаються тільки з букв і цифр, але я волію всі хеші передавати в одинарних лапках.

HAITI

HAITI (HAsh IdenTifIer) — інструмент командного рядка (і бібліотека) для ідентифікації типу заданого хеша. Бібліотека особливо хороша для написання скриптів, оскільки не потрібно укладати інструмент командного рядка у підпроцес. особливості:

  • Визначення типів 382+ хешів

  • Підтримка сучасних алгоритмів (SHA3, Keccak, Blake2 та інше)

  • Коротка інформація щодо використання хешу з Hashcat та John the Ripper

  • Інструмент командного рядка та бібліотека

  • Кольоровий висновок

Використання програми дуже просте – вкажіть ваш хеш після імені програми:

Причому ОПЦІЇ є необов’язковими, поведінка програми за умовчанням є дуже збалансованою і в більшості випадків вам не захочеться змінювати її додатковими параметрами.

Наприклад:

Висновок:

Висновок.

Серед висновків є правильна відповідь: SHA3-512 У висновку HC – це скорочення для Hashcat, а наступні цифри (наприклад, 1700, 17600 тощо) – це номери режимів у даній програмі. JtR – це скорочення від John the Ripper, а наступні рядки – це назва алгоритмів хешів для злому в даній програмі (raw-sha512, raw-sha3 і так далі).

Колір дуже добре покращує читання висновку, особливо якщо він великий. Якщо ви хочете вимкнути кольоровий висновок, використовуйте опцію –no-color (Скріншот 2):

Скріншот 2. Вимикаємо кольоровий висновок.

Хоча найчастіше висновок містить більше одного припущення про тип хешу, за замовчуванням з нього виключено алгоритми із сіллю. Щоб показати всі можливі алгоритми хешування, у тому числі з використанням солі, використовуйте опцію -e або –extended (Скріншот 3):

Скріншот 3. Опція -е.

Якщо ви хочете тільки дізнатися тип хешу та інформація про режими hashcat та john the ripper для вас є зайвою, то ви можете вказати опцію –short для укороченого висновку (Скріншот 4):

Скріншот 4. Опція -short.

Name-That-Hash

З січня 2021 року, майже через два роки після того, як почалася робота над HAITI, з’явився проект під назвою Name-That-Hash, тому що автору була потрібна бібліотека Python для Ciphey. Тепер є два актуальні варіанти для ідентифікації хешу. Name That Hash визначає тип хешу. Програма підтримує MD5, SHA256 та більше 300 інших хешів.

Особливості Name That Hash:

  • Кольоровий висновок –  контрастний і наочний.

  • Актуальна Name-That-Hash – це проект 2021 року.

  • Рейтинги популярності – Спочатку ви побачите найпопулярніші хеші.

  • Робота з файлами – програма зчитує рядковий файл і перевіряє тип кожного хеша.

  • Розширюваність – додавайте нові хеші так швидко, як тільки зможете редагувати текстовий файл.

  • Продуманість – автори продумали функції, інтерфейс та опції з думкою про зручність використання.

  • Пошук хешів – екстремальний режим, який намагається виділити хеш навіть якщо рядок містить сміття.

  • Зведення хешей – Name-that-hash виведе коротку інформацію про основи використання кожного хешу, дозволяючи вам зробити усвідомлений вибір.

Для визначення типу хешу вкажіть його з опцією -t (–text):

Наприклад:

Приклад виводу.

Хеші розбиті на дві групи:

  • 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):

Формат файлу – один хеш на рядок. Одна з цих опцій (-t чи -f) є обов’язковою. Якщо ваші хеші кодовані в Base64, використовуйте опцію -b64 (–base64). Вона говорить програмі перед ідентифікацією декодувати хеші Base64. Для файлів зі змішаними рядками Base64 та у звичайному тексті програма намагається спочатку декодувати base64 і якщо це не виходить, то трактує хеш як звичайний рядок без кодування.

Приклад:

Зверніть увагу, що в якості хешу (після шапки) показана вже декодована строка (Скріншот 5)

Скріншот 5. Опція -b64.

Опція -е (-extreme) вмикає пошук хешів у строці:

2  команди повинні дати однаковий результат:

Інші статті по темі
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.