Перейти к основному контенту

Хеш-функция — 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. Давайте создавать крутые вещи и узнавать много нового в процессе.

Была ли эта страница полезной?