У цій статті ми розповімо вам, що таке хеш, хешування і розглянемо, що таке алгоритми хешування.

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

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

На наведеній нижче ілюстрації показано односторонній процес хешування:

Процес хешування

Як цей процес працює між пристроями? Уявіть собі, що відправник, Хост А, хоче надіслати повідомлення на пристрій призначення, хост B. Замість хоста A, що надсилає повідомлення як є, Хост А створить дайджест повідомлення. Після того, як повідомлення буде створено в дайджесті, Хост A надішле як повідомлення, так і дайджест хосту B. На рисунку показано, що Хост А надсилає повідомлення з дайджестом хосту B:

І повідомлення, і хеш надсилаються адресату

Коли хост B отримує повідомлення з джерела, він також створює дайджест повідомлення і порівнює його з дайджестом, отриманим від хоста A. Якщо обидва хеш-значення (дайджести) збігаються, це означає, що повідомлення не було змінено під час передачі. Однак, якщо значення дайджесту відрізняються, це означає, що десь по шляху повідомлення було змінено, і тому зміст повідомлення не збігається.

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


АЛГОРИТМИ ХЕШУВАННЯ

Повідомлення Дайджест 5 (MD5) – це алгоритм хешування, який створює 128-бітний дайджест. Алгоритм MD5 був реалізований в багатьох системах протягом багатьох років і працював добре, поки не сталося хеш-зіткнення. Це зробило MD5 вразливим алгоритмом хешування, який більше не рекомендується.

На наведеній нижче ілюстрації показано процес хешування MD5:

Процес хешування MD5

Як показано на попередній схемі, повідомлення відправляється алгоритму MD5, який потім перетворюється в 128-бітний дайджест. Хоча MD5 все ще використовується в багатьох системах, рекомендується використовувати більш безпечну функцію, таку як Secure Hashing Algorithm 2 (SHA-2).

Ще однією відомою функцією хешування є безпечний алгоритм хешування 1 (SHA-1). Цей алгоритм хешування був створений ще в 1990-х роках Національним інститутом стандартів і технологій (NIST). NIST розробила цей алгоритм з функціями, подібними до MD5. Однією з головних переваг використання SHA-1 для перевірки цілісності є те, що він створює 160-бітний дайджест будь-якого повідомлення або файлу.

На наведеній нижче ілюстрації показано функцію SHA-1:

Хеш-функція SHA-1

Хоча SHA-1 вважається кращим, ніж MD5, оскільки він створює більший дайджест, він повільніше MD5 і містить уразливості в самому алгоритмі. Однак NIST розробила новішу версію, відому як SHA-2.

SHA-2 дозволяє створювати дайджест за допомогою великих бітів, таких як:

  • SHA-224 (224 біт)
  • SHA-256 (256 біт)
  • SHA-384 (384 біт)
  • SHA-512 (512 біт)

Майте на увазі, що навіть якщо ви знаєте, що хешування було використано для перевірки цілісності повідомлення, воно все одно вразливе до атаки MiTM. Уявіть, що джерело надсилає повідомлення з хеш-значенням. Зловмисник може перехопити повідомлення, змінити його вміст і переобчислити новий хеш, перш ніж надсилати його одержувачу. Щоб допомогти одержувачу автентифікувати джерело, нам потрібно застосувати код автентифікації хеш-повідомлень (HMAC) до нашого процесу хешування.

Щоб додати вихідну автентифікацію під час хешування, додається HMAC. HMAC – це секретний ключ, який поєднує вхідне повідомлення з алгоритмом хешування, таким як MD5 або SHA-1, для створення унікального дайджеста.

На наведеній нижче ілюстрації показано використання HMAC з хешуванням:

Використання HMAC з хешуванням

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

На знімку екрана показано секретний ключ (HMAC), застосований до рядка тексту:

HMAC з алгоритмом хешування

Як показано на попередньому малюнку, текстовий рядок (повідомлення) був об’єднаний з секретним ключем і оброблений за допомогою алгоритму хешування MD5 і SHA-1 для створення унікального дайджесту.