Технологии криптовалют

Как Биткоин достигает децентрализации

Показывать лекцию целиком

Централизация против Децентрализации

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

Децентрализация - это важное понятие не только для Биткоина. Противостояние централизации и децентрализации проявляется во многих цифровых технологиях. Необходимо отметить, что почти ни одна система не может быть полностью децентрализована или централизована. Хороший пример этому – электронная почта, которая является по существу децентрализованной системой. Она основана на децентрализованном Протоколе обмена почтовыми сообщениями. Но в последние несколько десятилетий наблюдается доминирование нескольких почтовых провайдеров, своего рода централизованных поставщиков услуг. Это может служить образцом того, что может произойти с Биткоином в будущем.

Рассмотрим некоторые технические аспекты децентрализации Биткоина. Для этого разберем 5 следующих вопросов:

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

    Рассмотрим три разных аспекта Биткоина с точки зрения централизации и децентрализации.

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

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

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

    Терминологический словарь

    Биткоин - новое поколение децентрализованной цифровой валюты, созданной и работающей только в сети интернет

    Криптовалюта – это цифровая валюта, единица которой – цифровая монета. Цифровая монета защищена от подделки, так как представляет собой зашифрованную информацию, скопировать которую невозможно.

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

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

    Скруджкойн - централизованная криптовалюта, предшественник Биткоин

    Узел Биткоина - концептуальная единица хранения данных, несущая в себе также ссылки на связанные с ней элементы.

    Централизация сетевой работы — выделение сервера, выполняющего особые функции.

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

    Распределенный консенсус

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

    Десятилетия исследований в информатике были потрачены на протоколы консенсуса. Традиционно, цель таких исследований – обеспечение надежности распределенных систем. Что имеется в виду? Допустим, администратор отвечает за серверное приложение такой компании, как Google или Facebook. Эти компании, как правило, имеют тысячи или даже миллионы серверов, которые образуют массивную распределенную базу данных. Она записывает все действия, которые происходят в системе, комментарии пользователей, сообщения и так далее.

    Таким образом, когда появляется новый комментарий, в этом массивном серверном пространстве может быть 10 или 15 различных узлов, которые содержат его копии.

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

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

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

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

    Рассмотрим техническое определение распределенного консенсуса. Представьте, что существует фиксированное число n узлов или процессов. И каждый из этих узлов имеет некоторое входное значение.

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

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

    Чтобы понять, как распределенный консенсус работает с Биткоин, необходимо вспомнить, что Биткоин - это одноранговая система. Когда Алиса хочет заплатить Бобу, она должна транслировать эту операцию для всех Биткоин-узлов, входящих в одноранговую сеть (оповестить эти узлы). Это похоже на операции с Гуфикойн из первой лекции. Транзакция состоится, если будет получена подпись Алисы. Другие узлы нужны для того, чтобы знать, что действие на самом деле идет от Алисы. В транзакции так же нужен открытый ключ Боба, обращающийся к адресу, по которому он хочет получить Биткоины (рис 2.1).

    (рис 2.1) Алиса платит Бобу

    Хэш-указатель позволяет Алисе связать эту транзакцию со всеми предыдущими транзакциями этой монеты. И Алиса собирается разослать это всем одноранговым узлам Биткоин. Отметим, что компьютера Боба нет на рис 2.1.

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

    Консенсус может работать в Биткоин, так как в любой момент времени все узлы одноранговой сети будут иметь последовательность блоков транзакций, по которым они достигли консенсуса. В Скруджкойн для оптимизации и для эффективности транзакции помещаются в блоки и затем соединяются в цепочку блоков. Здесь используется аналогичный принцип. Можно достичь консенсуса по транзакциям одна за другой, и это было бы правильно. Но неэффективно. Поэтому консенсус достигается по блоку за блоком. Таким образом, в любой момент все эти узлы в одноранговой сети будут иметь последовательность блоков, о которой они уже договорились. И каждый узел будет иметь набор незавершенных транзакций, о которых он получал информацию. По этим транзакциям консенсуса пока не произошло. Одноранговая сеть несовершенна, так что какой-то узел, возможно, слышал о сделке, а другие узлы нет. Может случиться, что есть последовательность блоков, с которой все согласились.

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

    (рис 2.2) Как консенсус может работать в Биткоин

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

    Если какая-то транзакция не вошла в блок, который выбирается в результате протокола консенсуса, то она может просто подождать и попасть в следующий блок.

    Применение традиционной теории распределенного консенсуса в Биткоин выглядит похоже, но не совсем так. Причина несоответствия в том, что действовать согласно теории - это очень трудная техническая проблема, по целому ряду очевидных причин. Узлы могут рухнуть или могут оказаться вредоносными.

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

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

    Из-за этих ограничений, большая часть литературы по распределенному консенсусу несколько пессимистична. Было множество доказательств невозможности добиться результата. Одно из доказательств, которое хорошо известно и довольно просто в понимании, называется задачей византийских генералов. Существует также гораздо более тонкая, известная по именам авторов, Теорема Фишера, Линча и Патерсона о невозможности консенсуса в системе со сбоями. В некоторых условиях, которые включают узлы, действующие определенным образом, они доказали, что консенсус невозможен даже при одном неисправном процессе. Несмотря на эти доказательства, существует несколько известных протоколов. И Paxos (Паксос), вероятно, один из самых известных. Он создает определенные компромиссы. Никогда не производится непоследовательный результат,но допускается, что при определенных условиях, хотя и редких, протокол может застрять и не добиться какого-либо прогресса.

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

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

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

    Терминологический словарь

    Альткойн-альтернативный вариант криптовалюты, появились после успеха Биткоина. Они позиционируют себя как лучшие заменители Биткоин. Создатели пытаются преодолеть минусы, которые имеет Биткоин и получить новые конкурентные преимущества.

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

    Открытый ключ - ключ, используемый в асимметричном криптографическом алгоритме, который может быть сделан общедоступным.

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

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

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

    Транзакция - группа логически объединённых последовательных операций по работе с данными, обрабатываемая или отменяемая целиком.

    Хэш –блок данных фиксированного размера.

    Консенсус без идентификации: блокчейн

    Рассмотрим технические детали алгоритма консенсуса Биткоина. Биткоин действует без узлов, имеющих какие-либо постоянные долгосрочные идентификаторы. В этом отличие от работы традиционных алгоритмов распределенного консенсуса. Если узлы имеют идентификационные данные, то это значительно облегчает работу по нескольким причинам. Во-первых, это позволяет, например, указать в протоколе, что узел с самым низким числовым идентификатором должен сделать такой-то шаг. Если узлы являются полностью анонимными, это становится труднее сделать. Идентификация могла бы помочь с обеспечением безопасности.Если узлы были идентифицированы, и они не были причастны к созданию новых идентификационных узлов, то можно сделать предположение, что менее 50% узлов являются вредоносными. Но почему узлы Биткоин не имеют идентификаторов? По нескольким причинам. Одна из них состоит в том, что в децентрализованной модели в одноранговой системе нет центрального органа власти, чтобы предоставить удостоверения узлам и убедиться, что они не создают новые узлы по своему желанию. Технический термин для атаки с созданием узлов -атака Сибиллы. При атаке Сибиллы злоумышленник создает копии узлов, чтобы возникло ощущение, будто в сети есть много разных участников, когда на самом деле все эти псевдоучастники действительно контролируются одним человеком.

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

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

    Есть несколько раундов. Каждый раунд соответствует различным блокам в цепочке блоков. В каждом раунде случайный узел выбирается случайным, "волшебным" образом. И этот узел получает возможность предложить следующий блок в цепочке. Алгоритм консенсуса отсутствует. Нет голосования. Этот узел просто в одностороннем порядке предлагает, каким будет следующий блок в цепочке блоков.

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

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

    Упрощенный алгоритм консенсуса:

  • О новых транзакциях оповещаются все узлы
  • Каждый узел собирает новые транзакции в блоки
  • В каждом круге произвольный узел принимается транслировать свой блок
  • Другие узлы принимают этот блок только если все транзакции – действующие (имеют действующие подписи)
  • Узлы выражают принятие блока, включая его хэш в следующий блок, который они создают.
  • Именно так выглядит общий алгоритм консенсуса в Биткоин.

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

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

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

    (рис 2.3) Что может сделать вредоносный узел?

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

    Предположим, есть злоумышленник, назовем его Алиса. Что она может сделать?

    Может ли она просто украсть Биткоины, принадлежащие другому пользователю с другим адресом, который она не контролирует?

    Даже если сейчас очередь Алисы предложить следующий блок в блокчейн, она не может украсть Биткоины другого пользователя. Почему? Она не может подделать его подписи.

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

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

    Таким образом, единственное, что вредоносный узел может попытаться сделать, называется атакой двойного расхода (double-spend). Чтобы разобраться, предположим, что Алиса является клиентом какого-то интернет-магазина или веб-сайта под управлением Боба, который предоставляет некоторый онлайн-сервис в обмен на оплату в Биткоин. Допустим, он позволяет скачать какое-то программное обеспечение. Как может сработать двойной расход? Алиса заходит на сайт Боба и решает купить товар, платит Биткоинами, в техническом плане, это значит, что она собирается перевести Биткоин со своего адреса на адрес Боба. Она транслирует это в сеть. И какой-то правильный узел создает следующий блок, принимает транзакцию и включает ее в блок (рис 2.4).

    (рис 2.4) Что может сделать вредоносный узел? Алиса заплатила Бобу.

    Итак, есть блок, созданный правильным узлом, который содержит транзакцию, представляющую платеж от Алисы продавцу Бобу. Под "С" имеется в виду монета, принадлежащая Алисе, и она сейчас отправляется на адрес Боба.

    Сделка - это структура данных, которая содержит подпись Алисы, инструкцию для оплаты с помощью открытого ключа Боба, а также хэш. Хэш представляет собой указатель на транзакцию, где Алиса, по сути, получила эту монету от кого-то другого. И это должно быть указателем на транзакцию, которая была включена в какой-то предыдущий блок в цепочке консенсуса (рис 2.5).

    (рис 2.5) Что может сделать вредоносный узел? Алиса заплатила Бобу.

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

    (рис 2.6) Что может сделать вредоносный узел? Указатель на предшествующий блок.

    Предположим, что при следующем вызове случайного узла этот узел будет вредоносным узлом, контролируемым Алисой.

    Боб уже посмотрел на этот Блокчейн, решил, что Алиса заплатила ему, и позволил Алисе скачать программное обеспечение (то, что она покупала на своем сайте).

    Боб доволен, сделка завершена, Алиса теперь получила свой товар в обмен на оплату.

    Теперь, Алиса могла бы предложить блок, который выглядит так.

    (рис 2.7) Что может сделать вредоносный узел? Появляется блок для двойного расхода.

    Он полностью игнорирует допустимый блок, и вместо этого содержит указатель на предыдущий блок. Кроме того, он будет содержать транзакцию с переводом монет Алисы на другой адрес, который также контролируется Алисой.

    Это классический случай двойного расхода. Алиса создает новую транзакцию, которая переводит монету, вместо адреса Боба, на другой адрес, принадлежащий ей (рис 2.8).

    (рис 2.8) Что может сделать вредоносный узел? Атака двойного расхода

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

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

    (рис 2.9) Что может сделать вредоносный узел? Атака двойного расхода: правильные (честные) узлы будут расширять наиболее длинную действующую ветвь.

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

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

    Итак, после еще одного блока ситуация выглядит как на рисунке 2.9. Теперь начинает казаться довольно вероятным, что двойной расход преуспел. Фактически же цепь консенсуса заканчивается, и в дальнейшем этот блок полностью игнорируется сетью. Такой блок называется сиротским блоком. Рассмотрим эту ситуацию с точки зрения торговца Боба. То, как Боб может защитить себя от этой атаки двойного расхода, будет ключевой частью понимания безопасности Биткоин (рис 2.10).

    (рис 2.10) Ситуация с точки зрения предпринимателя Боба

    У нас есть пара блоков в Блокчейн. И на данный момент Алиса транслирует транзакцию, которая представляет ее платеж Бобу. И поэтому Боб узнает об этом в одноранговой сети даже до того, как будет создан следующий блок.

    (рис 2.11) Ситуация с точки зрения предпринимателя Боба. Услышана информация о сделке. Ноль подтверждений.

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

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

    (рис 2.12) Ситуация с точки зрения предпринимателя Боба. Одно подтверждение.

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

    (рис 2.13) Ситуация с точки зрения предпринимателя Боба. Попытка двойного расхода.

    Теперь он видит, что его транзакция имеет уже два подтверждения в цепочке блоков.

    Он получает немного больше уверенности в том, что его транзакция закончится долгосрочной консенсусной цепью.

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

    (рис 2.14) Ситуация с точки зрения предпринимателя Боба. 3 подтверждения.

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

    (рис 2.15) Ситуация с точки зрения предпринимателя Боба

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

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

    И, наконец, никогда нельзя иметь 100% уверенности, что интересующая транзакция находится на консенсусной ветви, но вероятность этого довольно велика. После шести транзакций практически нет шансов ошибки.

    Терминологический словарь

    Блокчейн - выстроенная по определённым правилам непрерывная последовательная цепочка блоков, содержащих информацию.

    Стимулы и проверка работы

    Рассмотрим механизмы стимулирования, использующиеся в биткоин.

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

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

    (рис 2.16) Достижение честности проблематично

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

    (рис 2.17) Достижение честности проблематично

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

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

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

    Фактически, цена этой транзакции создания монеты имеет интересное свойство. В настоящее время она зафиксирована на 25 биткоинах, но на самом деле она уменьшается вдвое каждые четыре года. Сейчас идет второй этап. В первые четыре года существования Биткоинов это стоило 50. Теперь 25, и уменьшение будет продолжаться. Это имеет некоторые интересные последствия, которые будут рассмотрены на рис 2.18. На основании вышесказанного, узел получает награду за блок, независимо от того, предлагает ли он блок с действительными транзакциями или он вредоносный. Как же тогда создать стимулы для честного поведения?

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

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

    (рис 2.18) Общее количество биткоинов в обращении

    На рис 2.18 виден первый период, когда каждый блок приводил к созданию 50 новых Биткоинов. И примерно в конце прошлого года эта награда за блок уменьшилась в два раза с 50 до 25. Можно увидеть, что каждые четыре года, расширяясь в будущее, наклон этой кривой будет уменьшаться вдвое. Это геометрическая прогрессия, у которой существует конечная сумма. То есть существует полная конечная сумма создаваемых Биткоинов. И если сложить члены геометрической прогрессии, то получится 21 миллион, исходя из скорости создания нового блока в секунду.

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

    Получается, что награда за создание нового блока на самом деле закончится. Означает ли это, что система перестанет работать и станет небезопасной, потому что у узлов больше не будет стимулов вести себя честно? Не совсем, потому что это только первый из двух механизмов стимулирования. Существует еще один, называемый транзакционным сбором.

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

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

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

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

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

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

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

    Все эти проблемы связаны и имеют одно и то же решение. И это решение называется Доказательством выполнения работы (proof-of-work).

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

    В качестве альтернативной модели можно использовать пропорцию владения валютой. Она не используется в Биткоин, но используется в его аналогах. Это называется доказательством владения долей (proof-of-stake), которое будет рассмотрено в следующих лекциях.

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

    Рассмотрим, что такое точная система доказательств выполнения работы в Биткоин.

    (рис 2.19) Хэш-головоломка. Чтобы создать блок, найди случайное число. Поскольку хэш-функция секретна, есть только один путь добиться успеха: пробуй каждый раз, пока не улыбнется удача

    Для создания блока узел, который предлагает этот блок, должен найти случайное число. В блок включаются число, предыдущий хэш и список транзакций, которые составляли этот блок. После этого вычисляется хеш всей строки. Выведенный хэш должен быть очень маленьким числом, которое попадает в небольшое целевое пространство (target space) являющейся частью довольно большого пространства, которое является выходным пространством этой хэш-функции (output space).

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

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

    Фактически размер этого целевого пространства не превышает 1% от объема вывода. Это намного меньше, чем можно получить за секунду.

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

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

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

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

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

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

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

    Если майнер вложил определенное количество аппаратного обеспечения в Биткоин майнинг, но общая экосистема майнинга растет. В нее входят другие майнеры, либо они все быстрее развертывают аппаратное обеспечение. Это означает, что в течение двух недель будет найдено несколько больше блоков, чем ожидалось. И поэтому узлы будут автоматически перенастраивать параметры цели. И поэтому объем работы, которую необходимо сделать, чтобы найти блок, будет увеличиваться. Если майнер вложил в оборудование фиксированный объем инвестиций, скорость, с которой он сможет находить блоки, фактически зависит от того, что будут делать другие майнеры. Есть очень хорошая формула, чтобы проиллюстрировать это. А именно, вероятность того, что любой майнер (например, Алиса) сможет выиграть следующий блок, эквивалентна той части глобальной хэш-мощности, которую она контролирует. Если у нее есть аппаратное оборудование около 0,1% от общей мощности хэширования, она будет вычислять примерно один в каждой тысяче блоков.

    Так почему эта перестройка происходит? Почему необходимо сохранить этот десятиминутный интервал постоянным? Причина проста.

    Если бы время между созданием блоков было слишком мало, это было бы неэффективно – потерялось бы преимущество оптимизации, позволяющие делать много транзакций. В настоящий момент несколько сотен транзакций содержатся в одном блоке. Если бы время создания блока снизилось с десяти минут до пяти минут, это, вероятно, было бы хорошо, и есть много дискуссий об оптимальном времени создания блока альткойна. Но все согласны с тем, что время ожидания блока должно быть фиксированным. Нельзя позволять уменьшать его без ограничений, и именно поэтому необходимо автоматический пересчет цели. Благодаря тому, что функция стоимости и доказательство работы настроены, можно заявить, что большинство атак на Биткоин недопустимы, если большинство майнеров, оцененные по хэш-мощности, следуют протоколу. Это дает, как минимум, 50% вероятности того, что следующий блок будет предложен от правильного узла, а не от вредоносного.Зачем нужно, чтобы решение хэш-головоломок носило случайный характер? Никто не может предсказать, какое из случайных чисел приведет к решению. Единственный способ сделать это - попробовать варианты один за другим и надеяться, что это удастсяЭтот процесс называется тестом Бернулли. Как правило, узлы испытывают так много случайных чисел, что дискретный вероятностный процесс, называемый тестом Бернулли, может быть приближен к непрерывному процессу вероятности, называемым процессом Пуассона. И конечным результатом всего этого является то, что функция плотности распределения вероятности времени на то, чтобы найти следующий блок любым узлом в глобальной сети, выглядит как экспоненциальное распределение. Благодаря этому существует небольшая вероятность того, что если блок найден сейчас, следующий блок будет найден очень скоро, в течение нескольких секунд или через минуту. Вероятность того, что это займет много времени (например, час) также небольшая. В целом сеть автоматически регулирует сложность, так что время межблочного периода поддерживается в среднем длительностью в десять минут.

    На рис 2.20 приведен график, который показывает, как часто блоки будут создаваться всей сетью.

    (рис 2.20) Решение хеш-головоломок проблематично

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

    Для конкретного майнера среднее время, чтобы найти блок, учитывая, что он только что нашел блок, будет 10 минут, деленные на долю хэш-мощности, которую он контролирует. Итак, если у майнера есть 0,1% от общей хэш-мощности сети, он будет искать блоки каждые 10 000 минут, что составляет несколько дней. Таким образом, не только основное время между блоками будет очень высоким, дисперсия времени между найденными блоками также будет высока.

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

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

    Терминологический словарь

    Атака двойного расхода – атака, при которой данное количество монет тратится более чем в одной сделке.

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

    Доказательство выполнения работы (Proof-of-work, POW) — принцип защиты распределенных систем от злоупотребления услугами (например, рассылок спама), основанный на необходимости выполнения запрашивающей стороной некоторой достаточно сложной длительной работы (POW-задачи), результат которой легко и быстро проверяется обслуживающей стороной (односторонняя функция). Главная особенность этих схем заключается в асимметрии затрат времени.

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

    Тест Бернулли - Любой тест или ситуация с двумя взаимно исключающими и исчерпывающими возможными результатами; например, орел/решка при подбрасывании монеты. В серии тестов Бернулли получается биноминальное распределение.

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

    Хэширование или хеширование (hashing) — преобразование массива входных данных произвольной длины в (выходную) битовую строку фиксированной длины, выполняемое определённым алгоритмом. Функция, реализующая алгоритм и выполняющая преобразование, называется "хеш-функцией" или "функцией свёртки". Исходные данные называются входным массивом, "ключом" или "сообщением". Результат преобразования (выходные данные) называется "хешем", "хеш-кодом", "хеш-суммой", "сводкой сообщения".

    Экспоненциальное распределение - абсолютно непрерывное распределение, моделирующее время между двумя последовательными свершениями одного и того же события.

    Обобщение

    Добывать биткоины очень дорого, так как поиск одного блока требует вычисления от 10 до 20 хэшей. Вознаграждение за блок составляет около 25 биткоинов. Экономика майнинга сводится к тому, выгодно ли майнеру добывать биткоины.

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

    (рис 2.21) Экономика майнинга

    Если вознаграждение больше, чем стоимость, майнер имеет прибыль. Если же нет – теряет.

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

    Еще одно осложнение заключается в том, что вознаграждение, которое получает майнер, зависит от скорости, с которой он находит блоки, которая в свою очередь зависит не только от мощности его аппаратного обеспечения, но и от его доли от мощности оборудования всех майнеров. Можно назвать её долей от общей хэш-ставки.

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

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

    Поэтому это уравнение не отражает все нюансы различных стратегий, которые может использовать майнер. Хотя можно составить простое уравнение, на самом деле анализ того, что имеет смысл для майнеров, - сложный вопрос теории игр, и на него нет простых ответов.

    Давайте сделаем краткое изложение нескольких основных аспектов биткоина.

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

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

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

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

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

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

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

    Рассмотрим еще один тонкий момент. Представим, что Алиса и Боб – два разных майнера, и у Алисы в 100 раз больше вычислительной мощности, чем у Боба. Это означает не то, что Алиса всегда будет выигрывать гонку против Боба, чтобы найти следующий блок. Вместо этого Алиса и Боб имеют соотношение, коэффициент вероятности, чтобы найти следующий блок в пропорции 100 к 1. Таким образом, в долгосрочной перспективе Боб найдет в среднем 1% блоков, которые делает Алиса.

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

    Чтобы понять, насколько глубоко понятие распределенного консенсуса пронизывает Биткоин, рассмотрим традиционную валюту.

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

    Биткоин имеет три типа консенсуса:

  • Значение
  • Положение
  • Правила
  • Таким образом, даже то, сколько у конкретного узла биткоинов является субъективным консенсусом. Когда кто-то говорит, что владеет определенной суммой биткоинов, имеется в виду, что одноранговая сеть биткоин, путем записи в блочной цепочке всех сумм, относящейся к его адресам, считает его владельцем определенного количества биткоинов.

    Наконец, нужен консенсус относительно правил системы, потому что иногда правила системы должны меняться.

    Рассмотрим сложное взаимодействие между тремя вещами в биткоине: безопасность цепочки блоков, стоимость валюты, жизнеспособность экосистемы майнинга (рис 2.22). Начнем с безопасности цепи блоков. Чтобы валюта была платежеспособна, цепь блоков должна быть безопасной для Биткоина. Это значит, что противник не должен преодолеть процесс консенсуса.

    (рис 2.22) Биткоин как самонастраивающаяся система

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

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

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

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

    И последнее. Для понимания консенсуса и того, за что он несет ответственность и за что не несет, хороший способ - спросить, что произойдет, если консенсус потерпит неудачу и на самом деле появится 51% злоумышленников, которые так или иначе, контролируют 51% или более от мощности добычи в сети Биткоин.

    Прежде всего, может ли этот злоумышленник украсть монеты из существующего адреса? Предположим, что 51% злоумышленников создали недопустимый блок, содержащий недопустимую транзакцию. Это означает кражу биткоинов из существующего адреса, который злоумышленник не контролирует и перенос их на свой адрес.

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

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

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

    Также необходимо отметить, что наличие в сети 51% вредоносных узлов было бы замечено разработчиками. Это вызвало бы изменение правил системы и обновление программного обеспечения, чтобы нейтрализовать угрозу.

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

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

    А может ли злоумышленник изменить вознаграждение за блок? Может ли он солгать, что награда за блок вместо 25 биткоинов, дает 100 биткоинов? Это похоже на изменение правил системы и это невозможно, так как злоумышленник не контролирует копию программного обеспечения Биткоин, в котором работают все правильные узлы.

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

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

    Но ни одна из описанных угроз невозможна, учитывая количество финансовых расходов, которые злоумышленник должен был бы потратить, чтобы достигнуть 51% большинства.

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

    Вернуться к учебному плану