К основному содержимому

Введите слово из вопроса или названия статьи.

1 · Основы

Хеш-функции простыми словами: отпечаток данных, который нельзя подделать

Что такое хеш-функция, какими свойствами она обладает, зачем нужна в блокчейне, чем keccak256 отличается от SHA-256 и где вы встречаетесь с хешами каждый день.

3 мин чтенияОбновлено:
В этой статье

Хеш-функция - один из «кирпичиков», на которых стоит весь блокчейн. Она превращает любые данные - слово, письмо, файл на гигабайт - в короткую строку фиксированной длины. Эта строка называется хешем или «отпечатком» данных.

Пример, который можно проверить

Возьмём функцию keccak256, которую использует Ethereum, и применим к двум почти одинаковым словам:

text
keccak256("hello") = 0x1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8
keccak256("Hello") = 0x06b3dfaec148fb1bb2b066f10ec285e7c9bf402ab32aa78a5d38e34566810cd2

Разница - одна заглавная буква, а результаты не имеют ничего общего. Длина хеша при этом всегда одинакова: 32 байта, то есть 64 шестнадцатеричных символа (плюс 0x в начале). Что на входе - «привет» или «Война и мир» целиком, - не важно.

Четыре свойства хорошего хеша

  1. Детерминированность. Одни и те же данные всегда дают один и тот же хеш. Вы и ваш собеседник, независимо друг от друга, получите одинаковый результат.
  2. Лавинный эффект. Малейшее изменение входа меняет хеш до неузнаваемости. Поэтому правка даже одной запятой в договоре сразу видна.
  3. Односторонность. По хешу нельзя восстановить исходные данные. Единственный способ - перебирать варианты, пока хеш не совпадёт.
  4. Устойчивость к коллизиям. Практически невозможно найти два разных набора данных с одним хешем и невозможно «подогнать» документ под нужный хеш.

Где хеши работают в блокчейне

  • Связь блоков. Каждый блок содержит хеш предыдущего (как устроен блокчейн). Изменить старый блок значит изменить его хеш и сломать всю цепочку после него.
  • Адреса. Адрес в Ethereum - последние 20 байт хеша от открытого ключа (подробнее).
  • Идентификаторы. Номер функции в ABI и идентификатор события - первые байты хеша от их сигнатуры.
  • Дерево Меркла. Хеши объединяются в одно «корневое» значение, по которому можно проверить принадлежность элемента набору (Merkle-деревья).
  • Условия сделки. Мы записываем в контракт хеш документа, а не сам документ (хеш-обязательство).

SHA-256 и keccak256

Хеш-функций много. В блокчейне чаще всего встречаются две:

  • SHA-256 - используется в Bitcoin.
  • keccak256 - используется в Ethereum.

Они похожи по свойствам, но дают разные результаты для одного и того же входа. Путаница между keccak256 и стандартизированным SHA-3 - частая ошибка: у них один «родоначальник», но разные детали, поэтому хеши не совпадают. Если вы проверяете хеш «вручную» в онлайн-калькуляторе, убедитесь, что выбран именно keccak256.

Повседневные примеры

  • Скачивание файла. На странице загрузки указывают хеш файла. Вы считаете хеш у себя и сравниваете: совпал - файл не подменили.
  • Пароли. Сайты хранят не пароль, а его хеш (с добавкой - «солью»): утечка базы не раскрывает пароли напрямую.
  • Git. Номер коммита - хеш его содержимого.
  • Подпись документов. Подписывают не весь документ, а его хеш: быстрее и надёжнее (подписи).

Ограничения и тонкости

Короткие предсказуемые данные уязвимы к перебору. Хеш слова «123456» злоумышленник посчитает за секунду и сравнит со списком. Для коротких или угадываемых текстов к ним добавляют случайную строку, соль.

Хеш не доказывает, что данные правдивы. Он доказывает только, что они те же самые.

Нормализация имеет значение. «Тот же» текст с разными переводами строк даст разные хеши. Поэтому для условий сделки текст приводят к каноническому виду до хеширования.

Что почитать дальше

Хеш защищает данные от подмены, а чем доказывают, что действие совершил именно владелец? Ответ - в статье про криптографию с открытым ключом.

Упоминается в статьях

Готовы попробовать?

Создайте первую сделку за пару минут. Деньги блокируются в смарт-контракте и выплачиваются по правилам, которые видны заранее.