

Хешування — це процес, під час якого вхідні дані довільного розміру перетворюються на вихід фіксованої довжини. Для цього застосовують математичні формули, які називають хеш-функціями (реалізовані як алгоритми хешування).
Не всі хеш-функції базуються на криптографії. Проте саме криптографічні хеш-функції лежать в основі криптовалют. Завдяки цим функціям блокчейни та інші розподілені системи забезпечують високий рівень цілісності й захищеності даних.
Звичайні й криптографічні хеш-функції є детермінованими. Це означає, що якщо вхідні дані не змінюються, алгоритм хешування завжди формує той самий вихідний результат (який також називають дайджестом або хешем).
Алгоритми хешування у криптовалютах, як правило, розробляють як односторонні функції. Вони не підлягають легкому оберненню без значних витрат обчислювальних ресурсів. Тобто створити вихід з вхідних даних просто, а отримати вхідні дані зі значення хешу — вкрай складно. Чим складніше відновити вхідні дані, тим вищою вважають безпеку алгоритму хешування.
Різні хеш-функції створюють результати різної довжини, проте для кожного алгоритму ця довжина стала. Наприклад, алгоритм SHA-256 формує лише 256-бітний результат, а SHA-1 завжди дає дайджест із 160 біт.
Для прикладу пропустимо слова "ExampleText" і "exampletext" через хешування алгоритмом SHA-256 (який застосовується у Bitcoin).
| Вхід | Вихід (256 біт) |
|---|---|
| ExampleText | f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191 |
| exampletext | 59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2 |
Зверніть увагу: невелика зміна (реєстр першої літери) призвела до повністю іншого хеш-значення. Проте завдяки SHA-256 розмір результату завжди буде фіксованим — 256 біт (64 символи) незалежно від розміру вхідних даних. Також не має значення, скільки разів ці слова пропускати через алгоритм — результати залишаться незмінними.
Якщо ж ті самі вхідні дані пропустити через SHA-1, отримаємо такі результати:
| Вхід | Вихід (160 біт) |
|---|---|
| ExampleText | 7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1 |
| exampletext | 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 потребує великих витрат, тому майнери не мають підстав обманювати систему, адже це призводить до фінансових збитків. Чим більше майнерів приєднується до блокчейну, тим сильнішою стає мережа.
Хеш-функції — це ключовий інструмент у комп’ютерних науках при роботі з великими обсягами даних. У поєднанні з криптографією алгоритми хешування забезпечують захист і автентифікацію різними способами. Криптографічні хеш-функції є базовим елементом майже всіх мереж криптовалют. Розуміння їх властивостей і принципів роботи важливе для всіх, хто цікавиться блокчейн-технологіями.
Хешування — це функція, яка перетворює дані будь-якого розміру у вихід фіксованої довжини. Вона забезпечує цілісність і захист даних у блокчейні шляхом створення унікальних відбитків. Навіть незначні зміни даних дають зовсім інші хеші, що робить цей механізм ідеальним для перевірки та криптографічного захисту.
Хеш-функції обробляють вхідні дані та формують вихід фіксованої довжини за допомогою математичних алгоритмів. Ті самі вхідні дані завжди дають однаковий результат завдяки детермінованості хеш-функцій — вони виконують сталі обчислювальні правила, що забезпечує повторюваність і надійність криптографічних операцій.
Хешування використовують для перевірки цілісності даних, цифрових підписів, автентифікації паролів і захисту блокчейну. Воно гарантує, що дані не були змінені, і дає змогу безпечно підтверджувати ідентичність у криптографічних системах.
Хешування формує незворотний вихід фіксованої довжини та використовується для перевірки цілісності даних. Шифрування оборотне й забезпечує конфіденційність інформації. Хешування не дає змоги відновити дані, а шифрування дозволяє розшифрувати дані з використанням правильного ключа.
Надійна хеш-функція має бути стійкою до колізій, реагувати на найменші зміни даних (навіть незначні зміни створюють зовсім інший результат) і забезпечувати швидкий пошук для ефективного доступу до інформації.
Серед поширених алгоритмів хешування — MD5, SHA-1 і SHA-256. MD5 формує 128-бітні хеш-значення, але відомий проблемами безпеки. SHA-256 створює 256-бітні хеші та забезпечує вищий рівень захисту. SHA-1 вважають застарілим. У блокчейні найчастіше використовують SHA-256 через його стійкість і захищеність від колізій.











