
Хеш-функции: тихий механизм под всем в криптовалютах
Если разобрать блокчейн до основных деталей, окажется, что почти всю работу выполняют два вида криптографии. Цифровые подписи решают, кто может тратить. Хеш-функции скрепляют всё остальное — блоки, адреса, майнинг, идентификаторы транзакций и даже то, как кошелёк расшифровывает то, что вы собираетесь подписать.
Хеш-функции редко объясняют, потому что их редко замечают. Они стоят десяти минут: поняв их, вы обнаружите, что удивительно многое в криптовалютах перестаёт выглядеть волшебством.
Что делает хеш-функция
Хеш-функция берёт любые входные данные — слово, файл, целый блок транзакций — и выдаёт отпечаток фиксированного размера. SHA-256, которую использует биткоин, всегда выдаёт 256 бит, обычно записываемых как 64 шестнадцатеричных символа, — неважно, дали вы ей одну букву или гигабайт.
Полезной её делают три свойства:
Детерминированность. Одни и те же данные всегда дают один и тот же результат. Любой и где угодно может пересчитать и проверить.
Односторонность. По отпечатку нет практического способа вернуться к исходным данным. Единственный путь — перебирать входы, пока один не совпадёт, а для хорошего хеша это безнадёжно.
Стойкость к коллизиям. Практически невозможно найти два разных входа с одинаковым отпечатком. Измените один символ — и результат изменится полностью и непредсказуемо.
Вот и всё, что такое хеш: короткий, проверяемый и неподделываемый отпечаток чего-то большего.
Где вы встречаете хеши, не замечая этого
Идентификаторы транзакций. Txid — это просто хеш транзакции. Поэтому он уникален и поэтому именно его вы вставляете в обозреватель блоков: он обозначает ровно одну транзакцию, и никто не может создать другую с тем же идентификатором.
Сама цепочка. Каждый блок содержит хеш предыдущего блока. Измените что-нибудь в старом блоке — и его хеш изменится, разорвав связь со всеми последующими блоками. Эта цепочка отпечатков делает любое вмешательство в историю заметным.
Майнинг. Доказательство работы — это хеш-лотерея: майнеры снова и снова хешируют заголовки блоков, каждый раз меняя число, пока не найдут результат ниже цели. Поскольку хеши непредсказуемы, коротких путей нет — только больше попыток, и потому доказательство работы стоит реальной энергии, а эти затраты покупают безопасность.
Адреса. Большинство адресов — это хеши чего-то. Классический биткоин-адрес — хеш открытого ключа. Биткоин-адреса SSP — P2WSH: хеш SHA-256 скрипта свидетеля, описывающего правило траты 2-из-2. До траты в цепочке лежит этот отпечаток, а не сами ключи.
Хеши внутри кошелька
Хеширование — не только понятие уровня цепочки. Оно присутствует и в программе, которой вы подписываете.
Когда SSP Key расшифровывает транзакцию Ethereum перед вашим одобрением, он узнаёт, что делает вызов, по селекторам функций — первым четырём байтам хеша Keccak-256 от сигнатуры функции. transfer(address,uint256) даёт значение, начинающееся с a9059cbb; approve(address,uint256) — с 095ea7b3. Увидев эти четыре байта в начале транзакции, расшифровщик знает, какая функция вызывается, и может простыми словами показать, что вы отправляете токены или выдаёте одобрение.
Это хорошая иллюстрация того, для чего нужны хеши: компактный, однозначный отпечаток чего-то более длинного. И напоминание об их пределах: четыре байта так мало, что две разные функции могут иметь один селектор. Это одна из причин, по которой расшифровщик намеренно отказывает в закрытую сторону: всё неожиданное возвращается к сырым данным, а не к уверенной догадке.
Чего хеши не умеют
Они не скрывают маленькие входы. Хеш односторонний, но если вход берётся из небольшого набора вариантов, злоумышленник может просто захешировать каждый и сравнить. Поэтому захешированный PIN или короткий пароль защищают очень мало, и поэтому сид-фразы — это длинные случайные слова, а не что-то запоминающееся.
Они ничего не доказывают о смысле. Хеш доказывает, что две вещи идентичны. О честности любой из них он ничего не говорит. Безупречно проверенный хеш вредоносной транзакции остаётся вредоносной транзакцией.
Это не шифрование. Хеш нельзя «расшифровать», чтобы вернуть оригинал. Всё, что заявляет, будто обращает хеш, гадает.
Почему это касается вас
Вы редко будете считать хеш вручную. Но понимание их объясняет несколько вещей, которые иначе выглядят как правила для зубрёжки:
Почему txid доказывает, что платёж существует. Почему нельзя отредактировать подтверждённую транзакцию. Почему майнинг потребляет энергию. Почему непотраченный адрес раскрывает отпечаток, а не ваши ключи. Почему длинная случайная сид-фраза безопасна, а короткая и хитроумная — нет.
Хеш-функции — та часть криптовалют, которая просто работает, тихо, миллиарды раз в день. Знать, что они гарантируют, — и чего нет, — один из самых дешёвых способов понять систему, которой вы доверяете свои деньги.


