Що таке хешування?
Головна сторінка
Статті
Що таке хешування?

Що таке хешування?

Просунутий рівень
Опубліковано Jul 29, 2019Оновлено Jan 31, 2023
7m

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

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

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

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


Як працює хеш-функція?

Різні хеш-функції будуть давати виходи різного розміру, але можливі розміри виходу кожного алгоритму хешування завжди постійні. Наприклад, алгоритм SHA-256 може видавати тільки 256-бітні виходи, тоді як SHA-1 завжди генеруватиме 160-бітний дайджест.

Для ілюстрації давайте пропустимо слова "Binance" і "binance" через алгоритм хешування SHA-256 (той, що використовується у Bitcoin).

SHA-256

Вхід

Вихід (256 біт)

Binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

binance

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


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

А якщо ми пропустимо ті ж самі входи через алгоритм хешування SHA-1, ми отримаємо такі результати:

SHA-1

Вхід

Вихід (160 біт)

Binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

binance

e58605c14a76ff98679322cca0eae7b3c4e08936


Цікаво, що абревіатура SHA розшифровується як Secure Hash Algorithms (безпечні алгоритми шифрування). Це набір криптографічних хеш-функцій, які включають алгоритми SHA-0 та SHA-1, а також групи SHA-2 та SHA-3. SHA-256 є частиною групи SHA-2, поряд із SHA-512 та іншими варіантами. Наразі безпечними вважаються лише групи SHA-2 та SHA-3.


У чому важливість цієї технології?

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

Справжня сила хешування проявляється під час роботи з величезними обсягами інформації. Наприклад, можна запустити великий файл або набір даних через хеш-функцію, а потім використовувати його виходи для швидкої перевірки точності та цілісності даних. Це можливо завдяки детермінованому характеру хеш-функцій: вхід завжди призводить до спрощеного, стисненого виходу (хешу). Такий метод позбавляє необхідності зберігати та "запам'ятовувати" великі обсяги даних.

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


Криптографічні хеш-функції

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

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

Перш ніж описати кожну властивість, давайте узагальнимо їхню логіку в трьох коротких реченнях.

  • Стійкість до колізії: неможливість знаходження двох різних входів, які виробляють однаковий хеш.

  • Стійкість до знаходження першого першовзору: відсутність можливості "розвороту" хеш-функції (знаходження входу через заданий вихід).

  • Стійкість до знаходження другого першовзору: відсутність можливості знайти будь-який другий вхід, який би мав такий самий хеш, що і перший.


Стійкість до колізії

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

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

Серед різних алгоритмів SHA, групи SHA-0 та SHA-1 більше не є безпечними, оскільки в них було виявлено колізії. Наразі тільки групи SHA-2 та SHA-3 вважаються стійкими до колізій.


Стійкість до знаходження першого першовзору

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

Зверніть увагу, що ця властивість відрізняється від попередньої, оскільки зловмиснику потрібно вгадати вхід, спираючись на певний вихід. Такий вид колізії відбувається, коли хтось знаходить два різні входи, які виробляють однаковий вихід, не надаючи значення які конкретно входи для цього використовувалися.

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


Стійкість до знаходження другого першовзору

Цей вид стійкості знаходиться десь між двома попередніми властивостями. Атака знаходження другого першовзору полягає у знаходженні конкретного входу, за допомогою якого можна згенерувати такий вихід, що вже утворився за допомогою іншого входу, який був попередньо відомий.

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

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


Майнінг

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

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

У цьому випадку, хешрейт є мірою потужності вашого комп'ютера, яку ви інвестуєте у майнінг Bitcoin. Якщо хешрейт починає збільшуватися, протокол Bitcoin автоматично відрегулює складність майнінгу так, щоб середній час, необхідний для майнінгу блоку, становив близько 10 хвилин. Якщо кілька майнерів ухвалять рішення припинити майнінг, що призведе до значного зниження хешрейту, складність майнінгу буде скоригована таким чином, щоб тимчасово полегшити обчислювальну роботу (доки середній час формування блоку не повернеться до 10 хвилин).

Зверніть увагу, що майнерам не потрібно шукати колізії, тому що є кілька хешів, які вони можуть згенеровані як допустимий вихід (починаючись з певної кількості нулів). Таким чином, для певного блоку є кілька можливих рішень, і майнери повинні знайти тільки одне з них – відповідно до порогу, що визначається складністю майнінгу. 

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


Підсумки

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