Хеш функция в блокчейне

Поделиться в соцсетях:

В основе технологии блокчейн лежит криптография — наука о методах обеспечения конфиденциальности информации и сохранения ее подлинности. Говоря простыми словами, это наука о шифровании данных (наука о криптосистемах).

Сегодня мы расскажем о ключевых понятиях криптографии, на которых строится блокчейн, и о главном элементе этой системы — хэш-функции.

Основные понятия криптографии

Главной задачей криптографии является защита данных от изменения и несанкционированного доступа к ним в процессе их хранения и передачи от отправителя к получателю. Это достигается путем использования следующих элементов в системе хранения, обработки и обмена информацией:

  • Криптографические ключи — случайная последовательность символов, упорядоченная по определенным правилам. Каждый ключ уникален, последовательности символов никогда не повторяются. Ключ может принадлежать одному пользователю или группе пользователей.
  • Конфиденциальность — достигается за счет использования специальных алгоритмов и методов шифрования (симметричного и асимметричного), взаимной аутентификации абонентов (обмен паролями), цифровых сертификатов и подписей, и т. п.
  • Целостность и подлинность передаваемых данных — сохраняется путем шифрования, подтверждается электронной подписью.
  • Аутентификация — установка соединения только между легальными участниками системы, защита от взломов. Для получения доступа в систему абонент должен пройти проверку и подтвердить свои права пользователя.
  • Шифрование данных — фундамент, на котором строится вся система защиты информации. Шифр — это преобразование исходной информации в иную форму ее представления, но с сохранением всех изначальных данных. Дешифрование — восстановление исходного сообщения при помощи ключа шифрования.

Все коммуникации внутри сети блокчейн функционируют по принципам криптографии, то есть подлинность внесения любых изменений в базу данных проверяется, подделка невозможна, все отправители и получатели информации идентифицируются, несанкционированное добавление нового блока в сеть невозможно.

Что такое хэш-функция

Криптографическая хэш-функция преобразует данные в буквенное или цифровое выражение, формируя строку букв или цифр, которая называется хэшем и имеет ограниченную длину. Так, хэш криптовалюты биткоин содержит 64 символа.

Трудно представить, что любой объем данных можно вместить в такую относительно короткую строку, но именно в этом и заключается уникальность хэш-функции. Например, хэш слова «пес» имеет такой вид:

Но и целый абзац из 5-6 строк будет умещаться в строчке точно такой же длины, но с иным набором символов.

Как хэш-функция используется в блокчейне

Чтобы блокчейн работал, должно все время происходить его обновление — добавление записей о новых транзакциях в сети. Именно в процессе добавления в систему новой информации она становится наиболее уязвимой для атак. Но благодаря строгой иерархии в блокчейне гарантируется подлинность всех записей и их защита от несанкционированного изменения.

Использование хэш-функции гарантирует неизменность уже существующей цепочки транзакций. Новый блок ссылается на хэш предыдущего.

Благодаря хэшам общее состояние блокчейна (все когда-либо проведенные операции в сети) можно выразить всего одним числом — хэшем нового блока. За счет этого обеспечивается неизменность и стабильность работы блокчейна.

Майнинг — это хэш-игра

Для функционирования сети блокчейн в ней должны создаваться все новые и новые блоки. Для добавления нового блока сеть должна прийти к консенсусу. Для этого майнеры предлагают свои версии блоков, они проходят верификацию, и сеть выбирает блок, который становится следующим элементом реестра. Но многие майнеры предлагают одинаковые блоки. Тогда каким же образом выбирается тот блок, который станет следующим звеном цепи?

Все очень просто: компьютеры в сети соревнуются в своеобразной хэш-игре, перебирая множество вариантов значения «нонс» (nonce). Это число дающее определенный хэш в комбинации с предыдущими данными при вводе в хэш-функцию.

При нахождении правильного значения, его добавлении в блокчейн и вводе в хэш-функцию формируется рандомный хэш — так называемое «решение задачи». Вычисливший его компьютер получает «приз» — криптовалюту биткоин.

Таким образом поддерживается консенсус в сети блокчейн и предотвращаются хакерские атаки. Все хэши абсолютно уникальны, и только в ходе нахождения правильного значения нонс в комбинации с верными, ранее верифицированными данными получается новый хэш, решающий уравнение.

Если данные искажены, решить задачу невозможно. На этом основан принцип блокчейна и механизм безопасности хранения данных в нем.

Сейчас практически невозможно взломать систему, работа которой построена на использовании криптографической хэш-функции. Для этого потребуются запредельные вычислительные мощности и огромное количество времени на решение задачи. С добавлением каждого нового элемента в системе, ее устойчивость к атакам растет. Технология блокчейн по уровню надежности многократно превосходит все другие системы защиты информации.

Для меня ключ к познанию блокчейна – это понимание криптографических хешей. Мне кажется, многие из нас, обычных людей, делают ошибку, представляя себе блокчейн как, в первую очередь, списки анонимных транзакций, распределённых по децентрализованным сетям. Хотя отдельный блокчейн действительно таков, иногда упускается из виду, что основой блокчейновой технологии является не децентрализация, анонимность или даже распредёленные реестры, а собственно криптография. Хотя это, наверное, очевидно для человека с базовым пониманием компьютерных наук, для большинства из нас это нечто совершенно новое.

Очень краткая история цифровых денег

Биткойн – новый подход к предыдущим экспериментам с цифровыми деньгами. В 1990-х это была горячая, но спекулятивная тема. Даже Алан Гринспен в своей речи в 1996 г. сказал:

Мы предвидим в близком будущем предложения эмитентам электронных платёжных обязательств, таких как карты с хранимой стоимостью или «цифровые деньги», создать специализированные эмиссионные корпорации с сильными балансовыми отчетами и публичными кредитными рейтингами

Таким образом, использование цифровой валюты истеблишментом было на повестке дня задолго до Биткойна. Для того чтобы освободить цифровую валюту от истеблишмента, требовалось ещё одно новшество. Этим новшеством стала криптография.

Читайте также:  Драйвера для lenovo b575e

Когда Гринспен произносил свою речь, шифропанки уже экспериментировали с цифровыми валютами с явным намерением дестабилизировать банки. В числе их экспериментов, существовавших до Биткойна, были Hashcash Адама Бэка, BitGold Ника Сабо, B-Money Вэй Дая и RPOW Хэла Финни. Все они использовали возможности криптографических хеш-функций, и вместе они образуют гигантские плечи, на которых сегодня стоит Биткойн.

Что такое криптографические хеш-функции?

Криптографическая хеш-функция берёт данные и, по сути, переводит их в строку букв и цифр. Вы когда-нибудь пользовались URL-сокращалками типа Bitly или TinyURL? Это нечто похожее. Вы вводите что-то длинное, а на выходе получается что-то короткое, олицетворяющее то длинное. Только в случае криптографических хеш-функций ввод не обязательно должен быть длинным. Это может быть что-то очень короткое (например, слово «пёс») или почти бесконечно длинное (например, весь текст «Повести о двух городах»), и на выходе вы получите уникальную строку установленной длины. Кроме того, в отличие от сокращателей ссылок, хеш-функции, применяемые в Биткойне, действуют только в одном направлении. Хотя одни и те же данные всегда дадут один и тот же хеш, воспроизвести изначальные данные по полученному из них хешу невозможно.

Итак, данные вводятся в хеш-функцию, функция выполняется и получается строка букв и цифр (можете попробовать самостоятельно здесь). Эта строка называется хешем. В блокчейне Биткойна хеши состоят из 256 бит или 64 символов.

Может показаться невозможным, чтобы почти бесконечное количество данных могло последовательно переводиться в уникальную строку всего из 64 символов, но именно таким чудесным образом действуют криптографические функции. С помощью этой невероятной технологии целые книги, заполненные текстом, могут быть переведены в одну строку из 64 цифр и букв. И каждый раз, когда вы вводите одни и те же данные, вы получите не только один и тот же хеш, но уникальный и отличный от любого другого хеша.

Пример

Это было самое прекрасное время, это было самое злосчастное время, – век мудрости, век безумия, дни веры, дни безверия, пора света, пора тьмы, весна надежд, стужа отчаяния, у нас было всё впереди, у нас впереди ничего не было, мы то витали в небесах, то вдруг обрушивались в преисподнюю, – словом, время это было очень похоже на нынешнее, и самые горластые его представители уже и тогда требовали, чтобы о нём – будь то в хорошем или в дурном смысле – говорили не иначе, как в превосходной степени:

Тогда как хеш слова «пёс»:

Как работают криптографические хеш-функции

Существуют разные виды криптографических хеш-функций, и каждая из них работает по-разному. Использовавшаяся выше хеш-функция – SHA-256, хеш-функция, применяемая в Биткойне, – работает на основе безумно сложной формулы, связанной с отражением света от эллипсов. Вам не стоит слишком из-за этого переживать. Суть в том, что криптографические хеш-функции – это чертова магия, и вы никогда их до конца не поймете, если только вы не математик.

Как хеш-функции применяются в блокчейне

Чтобы блокчейн работал, он должен обновляться. Подобно банку, он должен вести актуальные записи всех транзакций и активов (например, биткойнов), имеющихся у каждого участника сети. Именно при обновлении транзакционной информации любая аутентифицирующая система уязвима для атаки. Банк сглаживает этот риск благодаря наличию строгой централизованной иерархии, гарантирующей подлинность на свой собственный риск. Так как блокчейну удаётся обновляться, оставаясь децентрализованным? Он использует криптографическую вероятностную хеш-игру, называемую «доказательство выполнения работы» (Proof of Work).

Криптография обеспечивает консенсус

Чтобы продолжать функционировать, блокчейн должен создавать новые блоки. Так как блокчейны – это децентрализованные системы, новые блоки должны создаваться не единственным аутентифицирующим субъектом, а сетью в целом. Чтобы решить, каким будет новый блок, сеть должна достичь консенсуса. Чтобы достичь консенсуса, майнеры предлагают определённые блоки, блоки верифицируются, и, наконец, сеть выбирает единственный блок, который будет следующей частью реестра. Однако очень много майнеров предлагают идентичные блоки, проходящие верификацию. Так каким образом конкретный блок выбирается, чтобы стать следующим в цепи?

Компьютеры соревнуются в хеш-игре. Всё очень просто. По сути, чтобы выиграть игру, майнящий компьютер должен угадать число, называемое «нонс» (nonce), которое в комбинации со всеми предыдущими данными блокчейна даёт при вводе в хеш-функцию SHA-256 определённый хеш.

Помните хакеров из фильмов, использующих программу, угадывающую миллион паролей в минуту, чтобы взломать компьютер? Это что-то вроде этого. Все майнеры мира одновременно используют похожую программу-угадайку, ищущую правильный нонс, который при добавлении к данным блокчейна и вводе в хеш-функцию SHA-256 даст рандомный хеш, который сам блокчейн «определил» как «решение» задачи. Компьютеры, в каком-то смысле, работают совместно, так как каждый предложенный хеш не может быть предложен снова. Компьютер, первым отгадавший правильное число, выигрывает право на создание следующего блока и получает 12,5 биткойна, что сейчас равно примерно $50 000.

Читайте также:  Прошивка биоса материнской платы ecs

Так обеспечивается консенсус, а также предотвращаются атаки, нацеленные на манипулирование системой. Так как результатом каждого ввода является совершенно уникальный хеш, только определенный нонс в комбинации с верными ранее верифицированными блокчейновыми данными даст хеш, решающий уравнение. При вводе неточных или мошеннических предшествующих записей не может быть угадан верный хеш. Таким образом, криптография делает блокчейны более безопасными, чем любой банк с человеческой верификацией.

Тем не менее, поскольку постепенно всё больше людей выделяли всё больше компьютерной мощности на майнинг биткойнов, возникла новая проблема. Новаторы разработали мощные компьютеры, предназначенные исключительно для майнинга биткойнов. Эти компьютеры способны предлагать хеши намного чаще, чем средний компьютер, что позволяет им прийти к верной догадке намного быстрее и, как следствие, намайнить больше биткойнов.

Проблема заключается в том, что когда всё меньше людей могут позволить себе майнинговые технологии, риск централизации возрастает. Блоки создаются и биткойны майнятся, как только находится решение следующего блока. Таким образом, имеющий ресурсы может просто собрать более мощную майнинговую машину, чем у всех других, и майнить огромный процент остающихся биткойнов быстрее всех других, просто предлагая больше догадок в более короткий срок.

10-минутное решение

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

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

Но теперь представьте, что вы задаёте определённые критерии того, в какое животное должна перевести ваши данные хеш-функция, чтобы работать. Это влияет на вероятность хеширования тех или иных данных в животное, удовлетворяющее вашим критериям. Например, данные «abc123» с большей вероятностью выдадут любое животное (на самом деле в данном примере вероятность 100%), чем любое двуногое, потому что существует намного больше потенциальных догадок, подходящих под любое животное, чем под любое двуногое. Ещё меньше вероятность получить любую обезьяну.

Блокчейн Биткойна работает так, что игра на отгадывание самокорректируется, чтобы всегда быть достаточно сложной, чтобы все компьютеры сети могли угадывать только каждые 10 минут, независимо от мощности отгадывающих компьютеров. Это значит, что угадывание хеша и майнинг блока сегодня теоретически намного сложнее, чем при запуске Биткойна в 2009 г., потому что в сети очень много сверхмощных компьютеров. И в самом деле, сегодня невозможно майнить биткойны с помощью обычного ноутбука, тогда как в ранние дни Биткойна все участники сети использовали стандартные компьютеры.

Так как же протокол Биткойна гарантирует, что игра на отгадывание будет становиться достаточно сложной, чтобы даже чрезвычайно мощным майнинговым компьютерам на отгадывание требовалось примерно 10 минут? Вспомните пример с обезьяной. Чем более конкретные критерии заданы для выхода хеш-функции, тем больше догадок нужно сделать, чтобы получить этот более конкретный выход. Вместо того чтобы «правильным» ответом было животное (легко), двуногое (сложно) или обезьяна (сложнее), для «правильной» строки хеша, выигрывающей игру, задаются всё более конкретные критерии. В частности, игра усложняется посредством требования наличия у правильного хеша в начале определённого количества нулей.

Представьте себе это следующим образом. Если я попрошу вас отгадать рандомное трёхзначное число, чтобы получить шоколадку, у вас больше шансов угадать, если правильное число – любое трёхзначное число, чем если это любое трёхзначное число, начинающееся с 0. Это сложно понять, но в основе лежит математический закон, говорящий, что достаточно квадратного корня N рандомных событий, чтобы вероятность их совпадения составляла 50%. Та же самая математика поддерживает парадокс дней рождения – если в комнате всего 23 человека, существует 50% вероятность, что у двух из них день рождения в один и тот же день.

К сожалению, делая угадывание числа всё сложнее и сложнее, блокчейн Биткойна неизбежно пришел к исключению из майнинга обычных людей. Но это справедливая цена децентрализации. Без этого одна богатая компания могла бы теоретически создать чрезвычайно мощный компьютер, способный мгновенно добыть все оставшиеся биткойны.

Должен заметить, что я лишь (с трудом) понимаю, как работает блокчейн Биткойна.