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

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

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

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


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

Різні хеш-функції створюють виходи різного розміру, але розмір виходу кожного алгоритму хешування завжди однаковий. Наприклад, алгоритм 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-512 та іншими варіантами є частиною групи SHA-2. Наразі лише групи SHA-2 і SHA-3 вважаються безпечними.


Яке значення хеш-функцій?

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

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

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


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

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

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

Перш ніж обговорювати кожен атрибут окремо, давайте коротко підсумуємо логіку кожного атрибута.

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

  • Антиобразність: неможливо «відновити» хеш-функцію (тобто вхідні дані не можуть бути знайдені з заданого виводу).

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


конфліктостійкість

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

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

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


Антиобразність

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

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

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


Стійкість до другого прообразу

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

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

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


Майнінг криптовалюти

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

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

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

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

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


Підведіть підсумки

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