Хеш-функція: що це таке, навіщо потрібна і який буває
Нерідко при скачуванні торрентів або безпосередньо самих файлів в описі варто щось на кшталт «ad33e486d0578a892b8vbd8b19e28754» (наприклад, в ex.ua), нерідко з припискою «md5». Це хеш-код - результат, який видає хеш-функція після обробки вхідних даних. У перекладі з англійської хеш позначає плутанину, марихуану, травичку або блюдо з дрібно нарізаного м`яса і овочів. Розшифрувати хеш дуже і дуже складно, можна сказати, що практично неможливо. Тоді виникає питання: «Навіщо взагалі потрібні всі ці хеш-функції, якщо вони видають незрозумілу абракадабру, яка ще й не піддається розшифровці?». Про це і піде мова в даній статті.
Що таке хеш-функція і як вона діє?
Ця функція призначена для перетворення вхідних даних як завгодно великого розміру в результат фіксованої довжини. Сам процес такого перетворення називається хешуванням, а результат - хешем або хеш-кодом. Часом ще використовують слова «відбиток» або «дайджест повідомлення», але на практиці вони зустрічаються набагато рідше. Існує маса різних алгоритмів того, як можна перетворити будь-який масив даних в якусь послідовність символів певної довжини. Найбільшого поширення набув алгоритм під назвою md5, який був розроблений ще в 1991 році. Незважаючи на те, що на сьогоднішній день md5 є дещо застарілим і до використання не рекомендується, він досі все ще в ходу і часто замість слова «хеш-код», на сайтах просто пишуть md5 і вказують сам код.
Навіщо потрібна хеш-функція?
Знаючи результат, практично неможливо визначити вихідні дані, але одні й ті ж вхідні дані дають однаковий результат. Тому хеш-функція (її ще називають функція згортки) часто використовується для зберігання дуже важливої інформації, такої як пароль, логін, номер посвідчення й інша персональна інформація. Замість порівнювання відомостей, що вводяться користувачем, з тими, які зберігаються в базі даних, відбувається зіставлення їх хешів. Це дає гарантію, що при випадковому витоку інформації ніхто не зможе скористатися важливими даними для своїх цілей. Шляхом порівняння хеш-коду також зручно перевіряти правильність завантаження файлів з інтернету, особливо якщо під час викачування відбувалися перебої зв`язку.
Хеш-функції: якими вони бувают
Залежно від свого призначення хеш-функція може бути одного з трьох типів:
1. Функція для перевірки цілісності інформації
Коли відбувається передача даних по мережі, відбувається розрахунок хеша пакету, і цей результат також передається разом з файлом. При прийомі знову обчислюється хеш-код і порівнюється з отриманим по мережі значенням. Якщо код не збігається, то це говорить про помилки, і зіпсований пакет знову буде переданий. У такої функції швидка швидкість розрахунку, але мала кількість хеш значень і погана стабільність. Приклад такого типу: CRC32, у якої всього лише 232 відрізняються між собою значення.
2. Криптографічний функція
Цей тип використовується для захисту від несанкціонованого доступу (НД). Вони дозволяють перевірити, чи не відбулося спотворення даних в результаті НД під час передачі файлів по мережі. Істинний хеш в цьому випадку загальнодоступний, а хеш отриманого файлу можна обчислити за допомогою безлічі різних програм. У таких функцій довгий і стабільний термін роботи, а пошук колізій (можливих збігів результату від різних вихідних даних) дуже ускладнений. Саме такі функції використовують для зберігання в БД паролів (SH1, SH2, MD5) та іншої цінної інформації.
3. Функція, призначена для створення ефективної структури даних
Її метою є компактна і досить упорядкована організація відомостей у спеціальній структурі, яка носить назву хеш-таблиці. Така таблиця дозволяє додавати нову інформацію, видаляти відомості і виконувати пошук потрібних даних з дуже високою швидкістю.