uk

Що таке хеш у блокчейні?

WhiteBIT
Опублікував 11 Січня 2024
546
Що таке хеш у блокчейні?

Зміст

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

Хеш-функція відіграє ключову роль у блокчейн-технології – основи, на якій працюють криптовалюти. Щобільше, хешування виходить за рамки простого шифрування даних, виступаючи як фундаментальний компонент таких криптографічних процесів, як доказ роботи (Proof-of-Work, PoW) – механізму, необхідного для підтвердження та додавання нових блоків у блокчейн. Це не тільки зміцнює безпеку, але й забезпечує прозорість, верифікованість та незмінність розподіленого реєстру даних.

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

Схожа стаття:
Що таке блокчейн? Пояснюємо простими словами

Схожа стаття:

Що таке блокчейн? Пояснюємо простими словами
Читати статтю

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

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

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

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

Уявіть собі, що у вас є юридичний договір — документ з кількох сторінок, де детально описано угоду між двома сторонами. Ви використовуєте хеш-функцію (наприклад, SHA-256) до цього документа. Ця функція обробляє весь текст договору, незалежно від його довжини та складності. В результаті з’являється унікальний рядок символів фіксованої довжини. Наприклад, цей хеш може виглядати так: 3f786850e387550fdab836ed7e6dc881de23001b.

Замість того, щоб завантажувати весь текст контракту в блокчейн, в ньому збережеться тільки хеш — це, наприклад 3f786850e387550fdab836ed7e6dc881de23001b. Такий підхід економить місце та підвищує конфіденційність. Як тільки хеш-значення «‎вбудується» в блок і додасться в блокчейн, воно стає несанкціонованим. Тобто зміна навіть одного символу в оригінальному контракті призведе до створення зовсім іншого хеша.

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

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

Як працює хешування у криптовалюті?

Розгляньмо процес хешування з прикладу роботи мережі Bitcoin.

Bitcoin використовує алгоритм SHA-256 (Secure Hash Algorithm 256-bit).

Заголовок Блоку

Кожен новий блок містить заголовок (з англ. Block Header), тіло (з англ. Block Body), до якого входить список транзакцій (з англ. List of Transactions), а також іншу службову інформацію.

Заголовок блоку (з англ. Block Header) — це важливий компонент, структурований набір інформації, з яким майнери «‎маніпулюють», щоб знайти правильний хеш нового блоку. Розгляньмо детальніше дані, які включаються до заголовка блоку в мережі Bitcoin:

  1. Версія блоку (з англ. Version): 4-байтове число, що вказує на поточну версію блоку.
  2. Попередній хеш блоку (з англ. Previous Block Hash): 32-байтовий хеш попереднього блоку в ланцюжку. Це критично важливий аспект безпеки блокчейну, оскільки цей процес створює безперервний взаємозалежний ланцюжок, де кожен блок криптографічно пов’язаний зі своїм попередником.
  3. Корінь Меркла (з англ. Merkle Root): 32-байтовий хеш, який представляє корінь дерева Меркла.
  4. Тимчасова мітка (з англ. Timestamp): 4-байтове число, яке відображає час створення нового блоку.
  5. Цільова складність (c англ. Target Difficulty/Difficulty Index): 4-байтове число, яке визначає умови складності. Вона регулюється мережею і має на меті, щоб новий блок створювався в середньому кожні 10 хвилин.
  6. Випадкове число (з англ. Nonce): 4-байтове число, яке підбирають майнери. Вони часто змінюють Nonce і перераховують хеш-значення, щоб знайти відповідний, той що задовольняє умовам складності.
Схожа стаття:
Що таке майнінг криптовалют?

Схожа стаття:

Що таке майнінг криптовалют?
Читати статтю

Створення нового блоку включає об’єднання цих кількох елементів з випадковим числом (Nonce) і подальше застосування алгоритму хешування (наприклад, SHA-256) до цієї комбінації.

Версія блоку (з англ. Version)

+

Попередній хеш блоку (з англ. Previous Block Hash)

+

Корінь Меркла (з англ. Merkle Root)

+

Тимчасова мітка (з англ. Timestamp)

+

Цільова складність (з англ. Target Difficulty)

+

Випадкове число (з англ. Nonce)

Хешування (наприклад, за допомогою SHA-256)

=

Хеш

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

«Хешрейт‎» (з англ. Hash Rate) — це загальна обчислювальна потужність мережі або, кількість хешів в секунду, які обчислює пристрій для майнінгу. Цей показник відображає ефективність та продуктивність пристроїв для майнінгу. Вимірюється в хешах за секунду (H/s).

Цей показник є ключовим індикатором «‎сили» мережі. Вона також вимірюється в таких одиницях, як кілохеш в секунду (KH/s), мегахеш в секунду (MH/s), гігахеш в секунду (GH/s), терахеш в секунду (TH/s) і так далі, збільшуючись у міру зростання обчислювальної потужності. У випадку Біткоїна йдеться про EH/s (екзахеш/сек).

«Тіло‎» блоку зберігає всі транзакції, які будуть у нього включені. Цікаво, що, попри теоретичну верхню межу розміру блоку — історично встановлену на рівні 1 МБ, — фактичний обсяг блоку з точки зору кількості транзакцій може змінюватись. Як правило, в блоці раніше могло зберігати від 2000 до 2500 транзакцій, враховуючи їхній середній розмір. А з оновленням Taproot цей ліміт лише збільшився. Дані транзакцій стали компактнішими, що дозволило більш ефективно використовувати наявний простір блоків.

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

Дерево Меркла

Кожна транзакція в блоці спочатку хешується індивідуально. Потім хеші кожної транзакції об’єднуються і хешуються разом. Цей процес також включає використання криптографічної хеш-функції для перетворення даних транзакції в хеш фіксованого розміру. Потім окремі хеші транзакцій об’єднуються в пари та хешуються. Якщо кількість транзакцій непарна, останній хеш дублюється і хешується сам із собою, щоб створити парну кількість хешів. Цей процес повторюється доки залишиться лише одне хеш — Кореневий, чи корінь Меркла (з англ. Merkle Root). Він є унікальним поданням всіх транзакцій в блоці, що включається в заголовок блоку. Дерево Меркла (з англ. Merkle Tree) дозволяє ефективно та безпечно перевіряти вміст кожної транзакції в блоці, включаючи id транзакції, та забезпечує їх цілісність, оскільки будь-яка зміна в одній транзакції призведе до появи іншого кореня Меркла.

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

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

Роль хешування у криптовалютах. Практичне застосування хешування в блокчейні

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

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

  1. Хешування транзакцій + дерево Меркла: Всі транзакції групуються в блок. Кожна окрема транзакція зазнає хешування. Потім вони поєднуються в пари і знову хешуються разом. Цей процес повторюється рекурсивно і хеші об’єднуються до тих пір, поки для всіх транзакцій у блоці не залишиться лише один хеш — корінь Меркла. Цей корінь Меркла є унікальним поданням всіх транзакцій у блоці і входить до заголовка.
  2. Хешування блоку: Після того, як блок заповнений транзакціями та обчислений їх корінь Меркла, весь заголовок блоку та значення в ньому піддаються хешуванню. Саме цей остаточний хеш і намагаються вирахувати майнери у процесі видобутку криптовалюти.
  3. Майнінг (в контексті PoW): У процесі майнінгу майнери змагаються у пошуку певного хеша, який відповідає певним критеріям, заданим рівнем складності мережі. Це передбачає багаторазове хешування заголовка блоку з різними значеннями Nonce доти, доки вони не знайдуть хеш, що відповідає певним критеріям. Перший майнер, якому це вдається, додає новий блок до блокчейну.
  4. Цілісність ланцюжка блоків: Кожен новий блок блокчейну містить хеш попереднього блоку. Це створює ланцюжок блоків і забезпечує цілісність блокчейну. Будь-яка зміна транзакції призведе не тільки до зміни хешу як блоку, що містить транзакцію, а й всіх наступних блоків.
  5. Безпека мережі: Коли майнер успішно видобуває новий блок (тобто знаходить правильний хеш, який відповідає критеріям складності мережі), цей блок відправляється до мережі та передається вузлам. Вони перевіряють достовірність нового блоку за допомогою хешування.

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

Особливості хеш-функції блокчейну. Що таке стійка хеш-функція?

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

  • Будь-який обсяг інформації — однакова довжина:

Щоб зрозуміти, як це працює, візьмемо текст:

Створення мережі WB було реалізовано у рамках розробки токена WhiteBIT Token (WBT), власного активу біржі WhiteBIT. Завдяки успішній реалізації блокчейну WB Network, WBT знайшов нове місце проживання, ставши повноцінною монетою WBT Coin (WBT).

Використовуємо алгоритм SHA-256 та отримуємо: 8b91d751f2773738c1b38e9ad25440aca3e99d59947345ec47bb04e5d9ce6493. Довжина тексту може бути різною, але довжина хеша завжди буде фіксованою.

  • Детермінованість: Одне і те повідомлення має призводити до одного й того ж хеш-коду. Ще раз подивіться на приклад вище. Будь-хто застосує функцію SHA-256 до цього ж тексту, отримає такий самий хеш. Ця властивість дозволяє всім учасникам досягати консенсусу.
  • Стійкість до колізій: Це означає, що практично неможливо знайти два різні набори даних, які створять однаковий хеш.

Тобто, грубо кажучи, вихідні дані, наприклад, «Привіт, WhiteBIT!‎» та «‎Hello, World!» не матимуть однакових хеш-значень. Імовірність отримати з однакових вхідних даних однаковий хеш має бути близькою до нуля. Стійкість до колізій важлива для гарантування цілісності та незамінності даних.

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

Чим хешування відрізняється від шифрування?

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

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

Наприклад:

Вихідні дані: “Hello, World!”

Алгоритм: SHA-256

Значення: a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e

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

Вихідні дані: «Привіт, WhiteBIT!‎».

Алгоритм: SHA-256

Значення: 165e2b73f08b889a5e7bee32a8c992c9d1c18de5a7bb88c358ffab2eae130bd5

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

Для хешування використовуються такі алгоритми, як SHA-256 (наприклад, у Bitcoin). А для шифрування — AES чи RSA. Вони також відрізняються між собою за довжиною даних, які виходять на виході. Хешування виробляє вихідні дані фіксованого розміру, незалежно від розміру вхідного сигналу. Наприклад, SHA-256 завжди видає 256-бітовий хеш.

Для шифрування довжина зашифрованого виведення прямо пропорційна довжині введення.

Поширені алгоритми хешування у блокчейні

У сфері блокчейна зазвичай використовується кілька алгоритмів хешування, кожен має унікальні властивості та можливості. Найбільш відомі:

  • SHA-256 (Secure Hash Algorithm 256-bit) — використовується в Bitcoin (BTC), Bitcoin Cash (BHC), та інших форках Bitcoin.
  • KECCAK (SHA-3) — використовується в деяких нових та менш поширених реалізаціях блокчейну. Є одним з останніх членів сімейства алгоритмів безпечного хешування..
  • Ethash — використовувався в Ethereum (ETH), до його переходу на Proof-Of-Stake (PoS).
  • Scrypt — використовується в Litecoin (LTC), Dogecoin (DOGE) та інших альткоїнах.
  • X11 — використовується у Dash (DASH).

Висновок

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

FAQ

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

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

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