Logo
Поділитися цією статтею

Пояснення хеш-функцій Bitcoin

Все, що ви завжди хотіли знати про хешування Bitcoin , але боялися запитати.

Кожен, хто цікавиться Bitcoin , колись чув фразу «криптографічна хеш-функція». Але що саме це означає і як це пов’язано з Криптовалюта?

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

Продовження Нижче
Не пропустіть жодної історії.Підпишіться на розсилку Crypto for Advisors вже сьогодні. Переглянути Всі Розсилки

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

Що таке хеш-функція?

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

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

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

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

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

Прості хеш-функції в Python

Ви можете експериментувати з хеш-значеннями за допомогою Python, мови програмування, встановленої в операційних системах Mac і Linux за замовчуванням. (Цей підручник передбачає, що ви використовуєте певну версію OS X або Linux, оскільки використання Python у Windows складніше.)

Спочатку відкрийте термінал, введіть пітон і натисніть ENTER.

Це переведе вас у Python REPL, середовище, де ви можете випробувати команди Python безпосередньо, а не писати програму в окремому файлі.

Потім введіть наступне, натискаючи ENTER після кожного рядка та TAB, де позначено:

import hashlibdef hash(mystring):[TAB] hash_object = hashlib.md5(mystring.encode())[TAB] print(hash_object.hexdigest())[ENTER]

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

hash("CoinDesk rocks")

Натисніть клавішу ENTER, щоб переглянути хеш-дайджест цього рядка.

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

hash("CoinDesk rocks") => 7ae26e64679abd1e66cfe1e9b93a9e85hash("CoinDesk rocks!") => 6b1f6fde5ae60b2fe1bfe50677434c88

Хеш-функції в Bitcoin

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

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

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

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

>>> hash("CoinDesk rocks!!")66925f1da83c54354da73d81e013974d>>> hash("CoinDesk rocks!!!")c8de96b4cf781a6373766c668ceac0f0>>> hash("CoinDesk rocks!!!!")9ea367cea6a2cc4a6f5a1d9a334d0d9e>>> hash("CoinDesk rocks!!!!!")b8d43387d98f035e2f0ac49740a5af38>>> hash("CoinDesk rocks!!!!!!")0fe46518541f4739613b9ce29ecea6b6 => ВИРІШЕНО!

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

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

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

Будь-які основи Крипто, які ви хотіли б пояснити далі? Електронна пошта: editors@ CoinDesk.com.

Bitcoin на зображенні клавіатури через Shutterstock

Corin Faife

Корін Фейф є співавтором CoinDesk і висвітлював соціальні та політичні наслідки нових технологій для VICE, Motherboard і Independent. Корін не є інвестором у будь-які цифрові валюти чи блокчейн-проекти (Див.: Редакційна Політика). Соціальні мережі Коріном: corintxt

Picture of CoinDesk author Corin Faife