Хеш-функція — ETH.BUILD
Демонстрація криптографічних хеш-функцій за допомогою освітнього інструменту ETH.BUILD. Дізнайтеся, як працюють хеш-функції та чому вони є фундаментальними для моделі облікових записів і цілісності даних Етеріуму.
Date published: 14 січня 2021 р.
Посібник від Остіна Гріффіта, який демонструє, як працюють криптографічні хеш-функції за допомогою інструменту візуального програмування ETH.BUILD, охоплюючи детермінованість, фіксовану довжину виводу, односпрямованість та дерева Меркла.
Ця стенограма є доступною копією оригінальної стенограми відео (opens in a new tab), опублікованої Остіном Гріффітом. Її було трохи відредаговано для зручності читання.
Вступ до хеш-функцій (0:00)
Це перше відео із серії під назвою ETH.BUILD. Ви можете перейти на eth.build, щоб скористатися цим інструментом, але це лише для того, щоб поекспериментувати та отримати уявлення про те, як усе працює під час розробки на Етеріумі.
Перший модуль, який ми розглянемо, — це хеш-функція. Що ж таке хеш-функція? Ну, це щось на зразок відбитка пальця. У вас є вхідні дані — це може бути що завгодно, — але поки що ми просто використаємо текст «hello world». З іншого боку ви отримаєте вихідні дані, і ці дані є 64-символьним шістнадцятковим рядком. Там вказано 66 символів через префікс «0x», але насправді це 64-символьний шістнадцятковий рядок.
Візуалізація хешів як кольорів (0:50)
Якщо ви подивитеся на шістнадцятковий формат, він дещо нагадує колір, і, можливо, буде простіше описати те, що ми тут бачимо, якщо ми просто перетворимо його на колір. Отже, ми візьмемо перші шість символів будь-якого рядка і відобразимо їх як колір. Якщо ми подивимося на це, то побачимо гарний фіолетовий колір.
Давайте подивимося, якого кольору моє ім'я — ось так, гарний лісовий зелений. Тепер повернімося до «hello world» — це знову той самий фіолетовий.
Детермінованість та фіксована довжина виводу (1:38)
Те, що ми щойно виявили, означає, що вона є детермінованою. По суті, що б ми не подали на вхід, ми завжди отримаємо те саме на виході.
Друга властивість полягає в тому, що ви можете ввести будь-що довільного розміру. Я можу бити по клавіатурі й бачити, як змінюється колір, але цей рядок залишається довжиною 66 символів. Незалежно від того, що ви сюди помістите — навіть файл — я міг би закинути цей файл із Лео, моїм хлопчиком, і подати його як хеш, отримавши гарний помаранчевий колір. Потім я міг би закинути текстовий документ зі списком слів BIP, і він став би гарним світло-блакитним. Якщо я поверну Лео, вгадайте, якого кольору він буде? Ми знаємо, що це буде той самий помаранчевий. Ви отримуєте цей детермінований відбиток того, що ви ввели.
Односпрямованість (2:37)
Наступна найважливіша властивість полягає в тому, що вона односпрямована. Якщо я знову введу «hello world», ми отримаємо цей хеш «4717». Якщо ми візьмемо цей хеш, надішлемо його комусь і скажемо: «Ось хеш мого секрету — якщо ти зможеш вгадати мій секрет, я дам тобі сто баксів», вони навіть не зможуть наблизитися до розгадки.
Припустімо, хеш починається з «4717», і вони починають перебирати варіанти, намагаючись знайти збіг. Ви не можете просто змінювати дрібні символи й наближатися до результату — ви або вгадуєте, або ні. По суті, вам доведеться вгадувати методом повного перебору. Якщо вони випадково вгадають «hello world», то отримають відповідь, але якщо не вгадають, то ніколи її не дізнаються. Немає жодного способу зрозуміти, чи наближаєтеся ви до мети.
Ви побачите, що криптографія іноді розчаровує розробників, тому що вона або працює, або ні — ви не отримуєте жодних підказок про те, чи наближаєтеся ви до правильного результату. Але це добре. Це саме та властивість, яку ми хочемо бачити в хеш-функції.
Підсумок властивостей хеш-функції (3:43)
Отже, ми маємо: будь-що будь-якого розміру можна подати в хеш-функцію, і вона видасть точний 64-символьний шістнадцятковий відбиток цих даних. Вона детермінована. Вона односпрямована — ви не можете повернутися у зворотному напрямку. Зробити хеш дуже легко, але вгадати секрет хешу дуже важко.
Дерева Меркла та об'єднання хешів (4:06)
З цим ми можемо робити дійсно цікаві речі, наприклад, дерево Меркла. У нас є три вхідні значення, і ми можемо об'єднати їх разом. Ми можемо об'єднати всі ці хеші, а потім хешувати цю комбінацію.
Ось цей колір — той фіолетовий — представляє хеш усіх цих хешів. Якщо я зміню «hello world» на «hello world one», цей фіолетовий колір зміниться. Будь-яка найменша зміна в будь-якому з цих вхідних даних призведе до зміни кінцевого хешу. Ви можете залучати всілякі дані найрізноманітнішими способами — навіть мати дерево хешів, дерево Меркла — або мати купу блоків поспіль, і цей кінцевий хеш буде базуватися на всіх цих речах. Якщо будь-яка дрібниця зміниться десь на цьому шляху, кінцевий хеш також зміниться.
Головний висновок (5:53)
Головний висновок полягає в тому, що хеш-функція — це, по суті, як відбиток пальця. Якщо я щось введу, вона детерміновано видасть мені очікуваний результат. Це і є хеш-функція — ласкаво просимо до ETH.BUILD. Давайте створювати круті речі та багато чому вчитися в процесі.