-------
| Библиотека iknigi.net
|-------
| Даниэль Дрешер
|
| Основы блокчейна: вводный курс для начинающих в 25 небольших главах
-------
Даниэль Дрешер
Основы блокчейна: вводный курс для начинающих в 25 небольших главах
Daniel Drescher
Blockchain Basics
A Non-Technical Introduction in 25 Steps
Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
Copyright © 2017 by Daniel Drescher
© Оформление, издание, перевод, ДМК Пресс, 2018
//-- * * * --//
Об авторе
Даниэль Дрешер (Daniel Drescher) – опытный профессионал в банковской сфере, работавший в области электронной торговли ценными бумагами в нескольких банках. В последнее время его деятельность сосредоточена на задачах автоматизации, машинного обучения и обработки больших данных в сфере торговли ценными бумагами. Кроме того, Даниэль имеет докторскую степень по эконометрике (метематической экономике) в Берлинском Техническом университете и степень магистра инженерии программного обеспечения, присвоенную Оксфордским университетом.
О Техническом рецензенте

Лоренс Керк (Laurence Kirk) после успешной карьеры автора оперативного финансового прикладного программного обеспечения для делового центра Сити в Лондоне заинтересовался потенциальными возможностями технологии создания распределенного программного обеспечения для финансового учета. Он поступил в Оксфордский университет для получения степени магистра и основал компанию Extropy.io, консультирующую стартапы по разработке прикладных программ для платформы Ethereum. Увлеченный возможностями технологии распределенного программного обеспечения, сейчас он является разработчиком, экспертом-консультантом и инструктором по вопросам использования платформы Ethereum.
Предисловие
Данное предисловие отвечает на самый важный вопрос, на который обязан ответить любой автор: зачем читать эту книгу? Или на более конкретный вопрос: зачем читать еще одну книгу по технологии Blockchain? Продолжайте читать, и вы поймете, зачем написана эта книга, чего ждать от нее и чего в ней не следует искать. Вы также узнаете, для какой аудитории написана эта книга и как она организована.
Зачем нужна еще одна книга о технологии блокчейна?
Технология блокчейна (Blockchain, или цепочка блоков транзакций) сразу после своего появления привлекла большое внимание при крупномасштабных обсуждениях и в специализированных средствах массовой информации. Некоторые энтузиасты даже объявили блокчейн самым великим изобретением с момента появления Интернета. Поэтому за несколько последующих лет о блокчейне было написано большое количество книг и статей. Но если вы хотите узнать больше о том, как устроен и как работает блокчейн, то вскоре можете просто потеряться в бездне книг, в которых технические подробности описываются весьма поверхностно, или базовые технические концепции излагаются на чрезмерно формализованном уровне. Первый вариант не удовлетворяет любознательного читателя, поскольку не дает описания технических деталей, необходимых для понимания и оценки по достоинству технологии блокчейна, во втором случае при изучении требуется владение именно теми знаниями, которые вы хотите получить.
Эта книга предназначена для заполнения разрыва между абсолютно технической литературой по блокчейну, с одной стороны, и книгами, в которых почти все внимание сосредоточено на специализированных приложениях, или на описаниях предполагаемого экономического эффекта от применения этих приложений, или даже на рассуждениях о будущем блокчейна, с другой стороны.
Эта книга написана, потому что концептуальное понимание технических основ блокчейна необходимо, чтобы понять функциональность специализированных блокчейн-приложений, исследовать бизнес-варианты деятельности блокчейн-стартапов или полноправно участвовать в обсуждении ожидаемых экономических эффектов. Без хорошего понимания базовых теоретических концепций невозможно дать числовую оценку реального эффекта или потенциального воздействия блокчейна вообще или числовую оценку полезности, добавляемой специализированными блокчейн-приложениями. Главное внимание в этой книге уделено основополагающим теоретическим концепциям блокчейна, так как недостаточное понимание новой технологии может привести к чрезмерному увлечению внешними ее сторонами и последующему разочарованию, когда не оправдываются иллюзорные, ничем не обоснованные ожидания.
В этой книге излагаются теоретические концепции, на основе которых сформирована технология блокчейна, в лаконичном и понятном стиле, рассчитанном на неподготовленных (с технической точки зрения) читателей. Книга отвечает на три главных вопроса, возникающих при знакомстве с любой новой технологией: что это такое? зачем это нужно мне? как это работает?
Чего не следует ждать от этой книги
В этой книге преднамеренно не рассматриваются приложения, использующие блокчейн. Несмотря на то что криптовалюты в целом и Bitcoin в частности являются основными приложениями на основе блокчейна, в книге блокчейн описывается как «технология вообще». Такой подход выбран для того, чтобы ярче выделить общие ключевые концепции и технические шаблоны блокчейна, а не ограничиваться более узкими специализированными частными случаями конкретных приложений. Таким образом:
• эта книга не о Bitcoin или какой-либо другой криптовалюте;
• эта книга не рассматривает какого-то одного специализированного блокчейн-приложения;
• в этой книге нет математических доказательств основных концепций блокчейна;
• эта книга не о программировании с использованием технологии блокчейна;
• в этой книге не обсуждаются последствия применения технологии блокчейна с точки зрения законодательства;
• в этой книге не рассматриваются социальное, экономическое и этическое воздействия технологии блокчейна на наше общество или на человечество в целом.
Тем не менее некоторые из этих тем в некоторой степени обсуждаются в соответствующих подразделах данной книги.
Чего следует ожидать от этой книги
Книга подробно описывает технические концепции технологии блокчейна, такие как транзакции, хэш-значения, криптография, структуры данных, пиринговые системы, распределенные системы, целостность систем и консенсус в распределенной среде в стиле, понятном для читателей с недостаточно высоким уровнем технической подготовки. Дидактический подход к изложению материала основан на четырех элементах:
• диалоговый («разговорный») стиль;
• отсутствие математических выкладок и формул;
• постепенное продвижение по проблемной области;
• использование метафор и аналогий.
//-- Диалоговый («разговорный») стиль --//
Эта книга преднамеренно написана в диалоговом, или «разговорном», стиле. Здесь абсолютно не применяется математический и компьютерный жаргон, чтобы устранить все препятствия для читателей, не вполне подготовленных с технической точки зрения. Но здесь представлена и объяснена вся терминология, необходимая для участия в обсуждениях и для понимания других публикаций по теме блокчейна.
//-- Отсутствие математических выкладок и формул --//
Главные элементы технологии блокчейна, такие как криптография и алгоритмы, основаны на сложных математических концепциях, которые, в свою очередь, предъявляют свои особые требования к их пониманию, а также приводят к необходимости изучения математических выкладок и формул, устрашающих на вид. И все же в книге намеренно не используются ни математические выкладки, ни формулы, чтобы избежать ненужной сложности и не создавать дополнительных затруднений для читателей с недостаточной технической подготовкой.
//-- Постепенное продвижение по проблемной области --//
Главы в этой книге соответствуют своего рода шагам, или этапам, по вполне обоснованной причине. Такие шаги, или этапы, формируют процесс обучения, в котором последовательно, уровень за уровнем наращиваются знания о технологии блокчейна. Порядок этапов обучения был выбран с особой тщательностью. Они охватывают основы программной инженерии, подробно описывают терминологию, дают обоснование необходимости использования блокчейна и подробно рассматривают отдельные концепции, заложенные в основу технологии блокчейна, и взаимодействие ее составляющих. Строгая последовательность глав-этапов подчеркивает их взаимозависимость и дидактические цели. Тем самым обеспечивается логически связное изложение материала, а не набор отдельных глав, которые можно читать в любом порядке.
//-- Использование метафор и аналогий --//
Каждая глава-этап, представляющая новую концепцию, начинается с образного описания ситуации из реальной жизни. Такие метафоры служат четырем основным целям. Во-первых, они готовят читателя к правильному восприятию новой технической концепции. Во-вторых, объединяя техническую концепцию с простой жизненной ситуацией, метафора устраняет психологический барьер при «исследовании новой территории». В-третьих, метафоры позволяют изучать новые концепции с помощью подобия и аналогий. Наконец, метафоры формируют простые практические правила для запоминания новых концепций без затруднений.
Как организована эта книга
Книга состоит из 25 глав-этапов, сгруппированных по пяти основным темам (частям), которые в совокупности формируют процесс обучения с постепенным наращиванием знаний о технологии блокчейна. В главах рассматриваются основы программной инженерии, объясняется необходимая терминология, обосновывается необходимость применения технологии блокчейна, описываются отдельные концепции, заложенные в основу этой технологии, а также взаимодействие между ее компонентами, рассматриваются приложения блокчейна и направления разработок и активных исследований в этой области.
//-- Часть I: Терминология и основы технологии --//
В главах 1-3 рассматриваются основные концепции программной инженерии и группа терминов, необходимых для понимания последующих глав. К концу главы 3 вы получите общее представление об основных концепциях и общую картину области использования технологии блокчейна.
//-- Часть II: Зачем нужна технология блокчейна --//
В главах 4-7 объясняется, зачем нужна технология блокчейна, какие задачи она решает, почему решение этих задач важно, а также описываются потенциальные возможности блокчейна. К концу главы 7 вы будете хорошо понимать проблемную область технологии блокчейна, среды, в которой применение блокчейна наиболее эффективно, и почему в этих областях применение блокчейна рассматривается в первую очередь.
//-- Часть III: Как работает блокчейн --//
Третья часть является главной частью книги, поскольку подробно описывает внутреннее устройство и функционирование блокчейна. В главах 8-21 последовательно представлены 15 различных технических концепций, в совокупности составляющих основу технологии блокчейна. К концу главы 21 вы будете полностью понимать все основные концепции блокчейна, их функционирование по отдельности, а также их взаимодействие для создания крупного комплексного механизма, называемого блокчейн.
//-- Часть VI: Ограничения и способы их преодоления --//
В главах 22 и 23 главное внимание уделено основным ограничениям технологии блокчейна, описываются их причины и кратко намечаются способы их преодоления. К концу главы 23 вы будете понимать, почему основополагающая идея технологии блокчейна, подробно описанная в предыдущих главах, может оказаться не подходящей для крупных коммерческих приложений с потенциальной возможностью масштабирования, какие изменения были внесены для преодоления этих ограничений и как эти изменения повлияли на свойства блокчейна.
//-- Часть V: Использование технологии блокчейна, общие выводы и перспективы --//
В главах 24 и 25 рассматриваются возможные варианты практического применения технологии блокчейна в реальном мире, а также вопросы, на которые необходимо найти ответы при выборе блокчейн-приложения. В этой части также определяются области разработок и активных исследований технологии блокчейна. К концу главы 25 вы будете полностью понимать технологию блокчейна и обладать вполне достаточной подготовкой для чтения более сложных технических материалов и участия в постоянно продолжающихся обсуждениях технологии блокчейна.
Дополнительные материалы
Веб-сайт www.blockchain-basics.com предоставляет дополнительные материалы по темам некоторых глав данной книги.
Часть I
Терминология и основы технологии
В этой части описываются основные концепции программной инженерии, а также устанавливаются правила организации и стандартизации при обсуждении основ технологии. Этот этап обучения также представляет концепции программной архитектуры и целостности программного обеспечения, а еще их связь с технологией блокчейна. К концу этого этапа вы будете хорошо понимать цели и задачи технологии блокчейна и ее потенциальные возможности.
Глава 1
Понимание уровней и аспектов
Анализ систем посредством разделения их на уровни и аспекты
Эта глава закладывает основу для дальнейшего процесса изучения технологии блокчейна, четко определяя правила и способы организации и стандартизации при обсуждении основ технологии. В главе рассматриваются возможные методики анализа программных систем, объясняется, почему важно рассматривать программную систему как совокупность уровней. Далее наглядно демонстрируется, какие преимущества можно извлечь при анализе различных уровней системы и как такой подход помогает понять технологию блокчейна. В конце главы приводится краткое вводное описание концепции целостности программного обеспечения и подчеркивается ее важность.
//-- Метафора --//
У вас есть мобильный телефон? Я почти уверен, что есть, так как у подавляющего большинства людей имеется, по крайней мере, один мобильный телефон. Что вы знаете о разнообразных протоколах беспроводного обмена информацией, используемых для отправки и приема данных? Что вы знаете об электромагнитных волнах, являющихся основой мобильной связи? Большинству из нас не слишком много известно об этих технических подробностях, потому что такие знания не являются необходимыми для практического использования мобильного телефона. К тому же почти все мы настолько заняты, что у нас вряд ли найдется время на изучение этих тонкостей. Мысленно разделяя мобильный телефон на общеизвестные составные части, мы учитываем, что обязательное присутствие этих частей невозможно игнорировать или считать само собой разумеющимся.
Такой подход к технологии не ограничивается только мобильными телефонами. Мы используем его во всех случаях, когда приходится осваивать новый телевизор, компьютер, стиральную машину и т. п. Но такие «мысленные» составные части в высшей степени индивидуальны, так как каждый по-своему решает, что считать важным, а что не зависит от наших индивидуальных предпочтений, от конкретной технологии, от наших целей и практических знаний. В результате ваше мысленное разделение мобильного телефона на составные части может отличаться от моего разделения того же самого мобильного телефона. Обычно это приводит к проблемам при обмене информацией, особенно если я пытаюсь объяснить вам, что необходимо знать об устройстве конкретной модели мобильного телефона. Таким образом, единый универсальный подход к разделению системы на составляющие компоненты является ключевым моментом при изучении и обсуждении любой технологии. В этой главе описывается, как следует разделять систему на составные части или уровни и соответствующим образом формулировать основные положения при обсуждении технологии блокчейна.
//-- Уровни программной системы --//
На протяжении всей книги при разделении любой системы на составные части используются следующие две методики:
• сопоставление приложения и его реализации;
• разделение на функциональные и нефункциональные аспекты.
Сопоставление приложения и его реализации
Мысленное отделение потребностей пользователя от технических подробностей внутреннего устройства системы приводит к разделению уровня приложения и уровня реализации. Все, принадлежащее к уровню приложения, рассматривается как потребности пользователя (например, прослушивание музыки, фотографирование, заказ номера в отеле и т. д.). Все, принадлежащее к уровню реализации, рассматривается с точки зрения обеспечения выполнения вышеперечисленных действий (например, преобразование цифровой информации в акустические сигналы, определение цвета пиксела в цифровой видеокамере или передача сообщения по сети Интернет в систему бронирования номеров отеля). Элементы уровня реализации являются техническими по своей сущности и рассматриваются как средства достижения той или иной цели.
Разделение на функциональные и нефункциональные аспекты
Различие между тем, что система делает и как она это делает, приводит к разделению функциональных и нефункциональных аспектов. Примерами функциональных аспектов являются: передача данных по сети, воспроизведение музыки, фотографирование и редактирование отдельных пикселов в изображении. Примеры нефункциональных аспектов: удобный графический пользовательский интерфейс, быстрое программное обеспечение, возможность безопасного хранения пользовательских данных и защита их приватности. Другими важными нефункциональными аспектами системы являются безопасность и целостность. Целостность (integrity) означает, что система ведет себя именно так, как от нее ожидают, в то же время понятие целостности включает в себя и многие другие аспекты, такие как, например, безопасность (защищенность) и корректность [8]. Эффективным способом запоминания различий между функциональными и нефункциональными аспектами системы является аналогия с грамматикой русского или английского языка: глаголы описывают действия (что делается), а наречия – как выполняются эти действия. Например, человек может идти быстро или медленно. В обоих случаях действие «идти» одинаково, но способы выполнения этого действия различны. Поэтому в качестве практического правила можно предложить аналогию: функциональные аспекты соответствуют глаголам, нефункциональные аспекты соответствуют наречиям.
//-- Одновременное изучение двух уровней --//
Определение функциональных и нефункциональных аспектов и разделение на уровень приложения и уровень реализации можно выполнять одновременно, получая в результате двумерную таблицу. В табл. 1.1 показан результат мысленного разделения на уровни системы «мобильный телефон» с одновременным определением функциональных и нефункциональных аспектов.
Таблица 1.1 Пример мысленного разделения на уровни мобильного телефона

Таблица 1.1 может описывать видимость (или невидимость) конкретных элементов системы для ее пользователей. Функциональные аспекты уровня приложения в большинстве своем являются видимыми элементами системы, поскольку предназначены для удовлетворения очевидных потребностей пользователей. Эти элементы обычно хорошо знакомы пользователям. С другой стороны, нефункциональные аспекты уровня реализации редко проявляют себя как основные элементы системы. Их наличие считается само собой разумеющимся.
//-- Целостность --//
Целостность (integrity) – это важный нефункциональный аспект любой программной системы. Понятие целостности включает три главных компонента [5]:
• целостность данных (data integrity): данные, используемые и сопровождаемые системой, должны быть полными, корректными и непротиворечивыми;
• целостность поведения (behavioral integrity): система ведет себя, как предполагается, и не допускает логических ошибок;
• безопасность (защита) (security): система способна ограничить доступ к своим данным и функциональным возможностям, разрешая его только авторизованным пользователям.
Возможно, большинство людей считает целостность программных систем фактом, не требующим подтверждения, потому что большую часть времени имеет дело с системами, сохраняющими свою целостность. Это становится возможным благодаря тому, что программисты и инженеры затратили огромное количество времени и усилий на разработку систем, обеспечивающих собственную целостность. Иногда возможна не совсем верная оценка труда инженеров по созданию систем, обеспечивающих высокий уровень целостности. Но наше мнение может измениться, как только мы встретимся с системой, не обладающей этим свойством. Это могут быть случаи потери данных, необъяснимого поведения программного обеспечения или обнаружения факта доступа посторонних лиц к вашим личным закрытым данным. Это ситуации, когда ваш мобильный телефон, компьютер, программа электронной почты, текстовый процессор или электронная таблица заставляет вас разозлиться и забыть о хороших манерах. Во всех подобных случаях мы действительно начинаем понимать, насколько важным аспектом является целостность программного обеспечения. Поэтому не должно вызывать удивления то обстоятельство, что профессиональные разработчики программного обеспечения затрачивают огромное количество времени на кажущийся незначительным аспект уровня реализации.
//-- Перспектива --//
В этой главе представлена вводная информация о некоторых общих принципах программной инженерии. Здесь рассматривались концепции целостности, функциональные и нефункциональные аспекты, уровни приложения и реализации программной системы. Понимание этих концепций поможет вам более широко взглянуть на среду, в которой существует технология блокчейна. В следующей главе будет представлена более подробная картина применения концепций, описанных в данной главе.
//-- Резюме --//
• Анализ систем может выполняться с помощью разделения:
– на уровень приложения и уровень реализации;
– на функциональные и нефункциональные аспекты.
• Уровень приложения сосредоточен на потребностях пользователя, уровень реализации – на способах удовлетворения этих потребностей.
• Функциональные аспекты определяют, что делать, нефункциональные аспекты определяют, как это делать.
• Большинству пользователей хорошо известны функциональные аспекты уровня приложения системы, в то время как нефункциональные аспекты системы, особенно относящиеся к уровню реализации, практически невидимы для пользователя.
• Целостность является важным нефункциональным аспектом любой программной системы и включает три главных элемента:
– целостность данных;
– целостность поведения;
– безопасность (защита).
• Большинство критических сбоев программного обеспечения, таких как потери данных, необъяснимое поведение, доступ посторонних лиц к личным закрытым данным, является результатом нарушения целостности системы.
Глава 2
Более подробная картина
Архитектура программного обеспечения и ее связь с технологией блокчейна
В этой главе не только представлена более подробная картина среды, в которой существует технология блокчейна, но и более точно определяется место расположения этой технологии в общей картине. Чтобы лучше увидеть все это, в главе вводится концепция архитектуры программного обеспечения и объясняется ее связь с концепцией разделения системы на уровни и аспекты. Чтобы помочь вам в определении места расположения технологии блокчейна в общей картине, здесь особо отмечаются взаимосвязи между технологией блокчейна и архитектурой программного обеспечения. В конце главы главная цель технологии блокчейна формулируется буквально в одном предложении. Правильное восприятие этой главной цели является важнейшей основой понимания всей технологии блокчейна и содержимого всех последующих глав.
//-- Метафора --//
У вас есть автомобиль? Большинство людей имеет автомобили. Даже если вы никогда не покупали машину, вероятнее всего, вы все же знаете, что машины оснащены различными типами двигателей (например, дизельными, бензиновыми или электрическими). Это пример применения принципа модульности как результата реализации идеи разделения на уровни для автомобилей. Возможность выбора одного из нескольких типов двигателя при покупке машины может привести к значительным различиям функциональных возможностей транспортных средств.
Две машины, внешне выглядящие абсолютно одинаково, могут совершенно отличаться по мощности их двигателей, следовательно, обеспечивать различные скорости вождения. Кроме того, выбор двигателя повлияет и на другие характеристики автомобиля, такие как цена, стоимость техобслуживания, тип потребляемого топлива, система отвода выхлопных газов, размеры тормозных колодок. Мысленно представляя схему этих взаимосвязей, можно гораздо быстрее понять роль технологии блокчейна в общей картине программной среды.
//-- Платежная система --//
Применим концепцию разделения на уровни к платежной системе. В табл. 2.1 показаны некоторые потребности пользователей и некоторые нефункциональные аспекты на уровне приложения и на уровне реализации.
Таблица 2.1 Аспекты и уровни платежной системы

Вы обратили внимание на знак вопроса в той части таблицы, где обычно находится информация о технологии, обеспечивающей работу системы? Часть таблицы, помеченная знаком вопроса, оставлена незаполненной с определенной целью. Это то место, где вы решаете, какой «двигатель» должен использоваться, чтобы система работала. В следующем разделе более подробно рассматривается аналог двигателя в программных системах.
//-- Два типа архитектуры программного обеспечения --//
Существует много способов реализации программных систем. Но одним из основных решений в процессе реализации системы становится определение ее архитектуры, то есть схемы организации ее компонентов и взаимосвязей между ними. Двумя основными типами архитектуры программных систем являются централизованная и распределенная [32].
В централизованных программных системах выделяется один центральный компонент, с которым соединяются отдельные периферийные компоненты. В противоположность такой схеме компоненты распределенных систем формируют сеть взаимосвязанных элементов без выделения какого-либо центрального элемента с функциями координации и управления.
Рис. 2.1 Распределенная (слева) и централизованная (справа) архитектуры системы
На рис. 2.1 схематично изображены эти две противоположные архитектуры. Закрашенные серым цветом кружки представляют компоненты системы, также называемые узлами (nodes), а линии обозначают связи между ними. В этот момент несущественны подробности, касающиеся того, что эти компоненты делают и какая информация передается между узлами. Здесь самым важным является сам факт существования двух различных способов организации программных систем. В левой части рис. 2.1 распределенная архитектура демонстрирует, как соединяются друг с другом компоненты без какого-либо центрального элемента. Важно понять, что в этой схеме нет компонентов, напрямую связанных со всеми прочими компонентами. Но при этом все компоненты взаимосвязаны друг с другом, по крайней мере, не напрямую. В правой части рис. 2.1 показана централизованная архитектура, в которой каждый компонент связан с одним центральным компонентом. Периферийные компоненты не имеют прямых связей друг с другом. Для каждого периферийного компонента существует единственная прямая связь с центральным компонентом.
//-- Преимущества распределенных систем --//
Ниже перечислены основные преимущества распределенной системы по сравнению с отдельными компьютерами [32]:
• более высокая вычислительная мощность;
• снижение стоимости (накладных расходов, издержек);
• более высокая надежность;
• возможность естественного роста.
Более высокая вычислительная мощность
Вычислительная мощность распределенной системы определяется как сумма объединенных вычислительных мощностей всех компьютеров, входящих в состав такой системы. Таким образом, распределенные системы обычно обладают более высокой вычислительной мощностью, чем каждый компьютер в отдельности. Этот факт подтверждается даже при сравнении распределенных систем, состоящих из компьютеров с относительно низкой вычислительной мощностью, с отдельными суперкомпьютерами.
Снижение стоимости (накладных расходов, издержек)
Цены на обычные типовые компьютеры, устройства памяти, дисковые накопители и сетевое оборудование постоянно и очень быстро снижаются в течение последних 20 лет. Поскольку распределенные системы состоят из множества компьютеров, первоначальная стоимость распределенных систем выше, чем первоначальная стоимость отдельного компьютера. Но затраты на создание, обслуживание и поддержку функционирования суперкомпьютера остаются гораздо более высокими, чем затраты на создание, сопровождение и обеспечение функционирования распределенной системы. Наиболее ярким подтверждением этого факта является отсутствие какого-либо заметного воздействия на систему в целом при замене отдельных компьютеров в распределенной среде.
Более высокая надежность
Повышенная надежность распределенной системы основана на том факте, что сеть компьютеров как единое целое способна продолжать работу даже при выходе из строя отдельных машин, составляющих ее. В распределенной системе нет так называемой единой точки отказа (single point of failure – SPOF). При отказе одного элемента все прочие элементы продолжают работу. Таким образом, отдельный суперкомпьютер обладает меньшей надежностью, чем распределенная система.
Возможность естественного роста
Вычислительная мощность распределенной системы определяется как сумма объединенных вычислительных мощностей всех ее компонентов. Вычислительную мощность всей системы можно увеличить, просто подключив к ней дополнительные компьютеры. Следовательно, вычислительную мощность распределенной системы можно регулировать с достаточно высокой точностью, постепенно наращивая ее. Такая методика поддерживает запросы многих организаций, которым требуется постоянное увеличение вычислительных мощностей. Постепенный рост распределенной системы абсолютно отличается от наращивания мощностей отдельных компьютеров. Вычислительная мощность отдельного компьютера остается неизменной до тех пор, пока он не будет заменен на более мощный компьютер. Такое дискретное повышение вычислительной мощности далеко не всегда является приемлемым вариантом для потребителей разнообразных современных сервисов.
//-- Недостатки распределенных систем --//
Ниже перечислены недостатки распределенных систем по сравнению с отдельными компьютерами:
• издержки на координацию работы;
• издержки на организацию обмена информацией;
• зависимость от сетевой среды;
• более высокая сложность программного обеспечения;
• проблемы безопасности.
Издержки на координацию работы
В распределенных системах нет центральных объектов, которые координируют работу прочих объектов. То есть координацию осуществляют сами элементы системы. Координация совместно работающих компонентов распределенной системы представляет собой трудную задачу и требует существенных трудозатрат и вычислительных мощностей, отвлекаемых от выполнения основной задачи. Это и называется издержками, или накладными расходами на координацию работы.
Издержки на организацию обмена информацией
Для осуществления координации необходим обмен информацией. Следовательно, компьютеры, составляющие распределенную систему, должны обмениваться информацией друг с другом. Для этого обязательно требуется наличие коммуникационного протокола, а также средства отправки, приема и обработки сообщений, что также требует трудозатрат и вычислительных мощностей, отвлекаемых от выполнения основной задачи. Таким образом, и здесь возникают издержки (накладные расходы) на организацию обмена информацией.
Зависимость от сетевой среды
Для любого вида обмена информацией требуется носитель. Носитель отвечает за передачу информации между объектами, ведущими диалог. Компьютеры в распределенных системах обмениваются информацией в виде сообщений, передаваемых по сети. Сети обладают собственными недостатками и создают дополнительные затруднения, в свою очередь отрицательно воздействуя на координацию и обмен информацией между компьютерами распределенной системы. Но без сети распределенную систему создать невозможно, так как отсутствует обмен информацией, следовательно, нет средств координации узлов. Таким образом, распределенная система зависит от сетевой среды.
Более высокая сложность программного обеспечения
Для выполнения вычислительных (и прочих) задач требуется написание отдельных программ и комплексного программного обеспечения. Из-за проблем, описанных выше, программное обеспечение для распределенных систем обязательно должно обеспечивать решение вспомогательных задач, таких как координация, обмен информацией и поддержка работы в сетевой среде. Это увеличивает сложность программного обеспечения.
Проблемы безопасности
Обмен информацией в сетевой среде означает передачу и совместное использование данных, чрезвычайно важных для выполнения основной задачи. Но передача информации в сети создает проблемы защиты данных, так как ненадежные посторонние объекты могут воспользоваться сетью для несанкционированного доступа к приватной информации и нелегального ее использования. Следовательно, любая распределенная система непременно должна обеспечивать защиту информации. Чем меньше ограничений доступа к сети, по которой осуществляется обмен информацией между распределенными узлами, тем больше угроз для безопасности распределенной системы.
//-- Распределенные пиринговые системы --//
Пиринговые (peer-to-peer), или одноранговые, сети представляют собой особый тип распределенных систем. Они состоят из отдельных компьютеров (также называемых узлами), вычислительные ресурсы которых (например, все средства обработки данных, емкость внешних накопителей, хранимые данные, пропускная способность сети и т. д.) напрямую доступны всем прочим узлам этой сети без какого-либо центрального пункта координации. Все узлы такой сети имеют равные права и одинаковые роли в системе. Более того, все они являются как поставщиками, так и потребителями ресурсов.
Для пиринговых систем существуют весьма полезные способы применения, например совместное использование файлов, распространение контента, защита частной секретной информации. Большинство этих приложений использует простую, но мощную идею: превращение обычных пользовательских компьютеров в узлы, формирующие единую распределенную систему. В результате чем больше пользователей или клиентов-покупателей использует такую программную среду, тем больше и мощнее становится система в целом. Эта идея, ее развитие, трудности, связанные с ее реализацией, будут более подробно рассматриваться в следующих главах.
//-- Объединение централизованных и распределенных систем --//
Централизованные и распределенные системы являются полными противоположностями с точки зрения архитектуры. Технические противоположности, казалось бы, не совместимые друг с другом, всегда вдохновляли инженеров на создание объединенных, гибридных систем, наследующих все сильные стороны своих предков. В этом плане централизованные и распределенные системы не являются исключением. Существуют два основных прототипа объединения противоположных архитектур, и их необходимо хорошо понимать, потому что сущность подобного объединения чрезвычайно важна для изучения функционирования блокчейн-приложений в реальном мире. Первый прототип – это центральное положение одного из узлов в распределенной системе, второй – распределенная система как управляющий узел централизованной системы.
Схема в левой части рис. 2.2 изображает архитектуру, в которой определен центральный компонент в распределенной системе. На первый взгляд кажется, что это обычная распределенная система с обычными компонентами. Но если приглядеться, то выясняется, что все кружки-узлы соединены с одним кружком большего размера, расположенным в центре схемы. Таким образом, подобная система только кажется распределенной при поверхностном осмотре, но в действительности это централизованная система.
Рис. 2.2 Прототипы объединения распределенной и централизованной архитектур
Схема в правой части рис. 2.2 демонстрирует противоположный подход. Система выглядит централизованной на первый взгляд, поскольку все периферийные кружки-узлы имеют только одно соединение с большим центральным компонентом. Но внутри центрального компонента размещена распределенная система. При этом периферийные компоненты могут даже не знать о существовании распределенной системы внутри центрального узла.
Описанные выше подходы объединяет затруднение при определении их истинной сущности. Эти системы являются распределенными или централизованными? Возможно, нет необходимости в однозначном определении названий таких архитектур. Здесь гораздо важнее понять их двойственную сущность, потому что далеко не всегда можно с легкостью увидеть признаки централизованности или распределенности в сложных системах. К этой теме я вернусь позже, при обсуждении способа коммерциализации технологии блокчейна.
//-- Идентификация распределенных систем --//
Появление смешанных архитектур затрудняет однозначную идентификацию распределенных систем. Впрочем, формулирование общего приемлемого определения распределенных систем выходит за рамки тематики данной книги. Но при изучении книги важно четко понимать, что такое распределенная система и чем она отличается от других программных систем. Если вы сомневаетесь, является ли рассматриваемая конкретная система распределенной, то найдите в ней отдельный компонент (например, базу данных, имя или пользовательскую запись в реестре, компонент регистрации в системе или выхода из нее, кнопку аварийного выключения, наконец), который может завершить работу всей системы в целом. Если такой компонент найден, то рассматриваемая система не является распределенной.
Примечание
Если существует отдельный компонент, например кнопка выключения, который может остановить работу всей системы в целом, то такая система не является распределенной.
//-- Цель технологии блокчейна --//
При проектировании программной системы можно выбрать используемый тип архитектуры, подобно тому, как выбирается двигатель для автомобиля. Решение по выбору архитектуры может быть принято независимо от функциональных аспектов уровня приложения. Кто-то может создать распределенную систему, кто-то – централизованную систему, но с одинаковой функциональностью на уровне приложения. Архитектура является всего лишь одним из средств достижения конечной цели при реализации системы. Таким образом, платежная система, описанная в табл. 2.1, может быть реализована либо как распределенная, либо как централизованная система.
Каждая из двух описанных выше архитектурных концепций обладает собственными достоинствами и недостатками, а также своими особыми способами достижения конечной цели. Выбор конкретной архитектуры определяет в дальнейшем, как вы будете реализовывать функциональные и нефункциональные аспекты системы. В частности, эти архитектурные концепции предлагают совершенно различные подходы к обеспечению целостности. Это как раз тот момент, когда на сцене появляется блокчейн. Технология блокчейна (blockchain) (цепочка блоков транзакций) представляет собой инструментальное средство обеспечения целостности распределенных программных систем. Таким образом, блокчейн можно рассматривать как инструмент реализации нефункционального аспекта на уровне реализации.
Примечание
Главная цель технологии блокчейна – реализация и поддержка целостности в распределенных системах.
//-- Перспектива --//
Обеспечение целостности в распределенной системе является исключительно технической задачей, поэтому ее изучение может показаться достаточно скучным занятием. Тем не менее это вопрос чрезвычайной важности для многих людей, вопрос, который зависит от того, что именно будет делать распределенная система и какой тип централизованной системы она заменяет. В следующей главе вы узнаете, как пиринговые системы изменили наш мир и почему блокчейн как инструмент обеспечения целостности в распределенных программных системах также способен изменить весь мир.
//-- Резюме --//
• Архитектура программной системы определяет, как организованы ее компоненты и как они связаны друг с другом.
• Централизованная и распределенная программные архитектуры могут считаться полностью противоположными друг другу.
• Распределенная система состоит из некоторого количества независимых компьютеров, которые взаимодействуют друг с другом, используя среду обмена информацией для достижения определенной цели, без какого-либо центрального управляющего или координирующего элемента.
• Практическое правило: если в системе имеется отдельный элемент, способный полностью остановить ее работу, то можно с уверенностью утверждать, что такая система не является распределенной, вне зависимости от сложности ее архитектуры.
• Технология блокчейна является частью уровня реализации распределенной программной системы.
• Цель технологии блокчейна – реализация конкретного нефункционального аспекта распределенной программной системы, а именно реализация и поддержка целостности системы.
Глава 3
Определение потенциальных возможностей
Как пиринговые системы могут изменить мир
В этой главе мы углубляем понимание главной цели технологии блокчейна, рассматривая конкретный тип распределенной системы: пиринговую систему. Это поможет лучше понять, почему блокчейн вызывает столь высокий интерес у технических специалистов и бизнес-профессионалов. Здесь также описана область приложений, в которой от блокчейна ожидается наибольшая отдача. Кроме того, в этой главе оцениваются некоторые последствия практического применения пиринговых систем.
//-- Метафора --//
Вы можете вспомнить, когда в последний раз покупали компактдиск (CD) в музыкальном магазине или в универсальном торговом центре? В наши дни люди уже давно не покупают компакт-дисков, потому что музыкальная отрасль изменилась коренным образом. Сейчас люди скачивают отдельные композиции с музыкальных порталов, делятся файлами в формате mp3 с друзьями или используют потоковые музыкальные программы на мобильных устройствах вместо покупки компакт-дисков. Эти изменения начались вместе с появлением программных средств, которые позволили делиться музыкальными файлами друг с другом. Но что такое особенное предлагают подобные программы? Вот что сказал по этому поводу один из создателей нового направления в музыкальной индустрии:
«Самым интересным в этой системе является то, что вы взаимодействуете с равными партнерами, вы обмениваетесь информацией с такими же людьми, как вы сами».
Шон Фэннинг (Shawn Fanning), сооснователь пиринговой сети Napster
Фэннинг и его коллеги изобрели пиринговую (peer-to-peer), или одноранговую, систему для совместного использования музыкальных файлов. В конце 1990-х гг. это программное обеспечение открыло новый путь формирования бизнес-модели в музыкальной индустрии. Далее в этой главе подробно рассматривается, как появление сети Napster, снижение продаж компакт-дисков и коренные изменения в музыкальной индустрии повлияли на технологию блокчейна.
//-- Как пиринговая система изменила целую отрасль промышленности --//
В течение долгих лет музыкальная индустрия работала по следующей схеме: музыканты заключали контракты со студиями, которые выполняли записи композиций, переносили записи на различные виды носителей (винил, магнитная лента или компактдиск) и приводили их в товарный вид, затем товарные экземпляры носителей продавались потребителям по разнообразным каналам, включая универсальные торговые центры и специализированные музыкальные магазины. В действительности студии звукозаписи выступали как посредники между музыкантами и любителями музыки. Студии звукозаписи способны были выполнять функции посредников благодаря своим особым знаниям и практическому опыту в продюссировании, маркетинге и распространении музыкальных записей. Но в первом десятилетии XXI века среда, в которой действовали студии звукозаписи, изменилась коренным образом.
Возможность оцифровки музыкальных записей, доступность записывающего оборудования по приемлемым ценам, бурный рост количества персональных компьютеров, находящихся в частном владении, появление и быстрое развитие Интернета – все это привело к тому, что студии звукозаписи перестали быть обязательным компонентом музыкальной индустрии. Три основные функции студий – продюссирование, маркетинг, распространение – теперь могли выполнять сами музыканты и потребители. Сеть Napster сыграла главную роль в устранении студий звукозаписи как посредников. Пользуясь Napster, люди перестали считать студии звукозаписи единственным источником доступа к самым свежим хитам. Появилась возможность совместного использования отдельных музыкальных файлов людьми по всему миру без необходимости покупки каких-либо компакт-дисков. Методика одноранговой сети, реализованная в Napster, в действительности стала разновидностью общедоступного цифрового огромного торгового зала для файлов в формате mp3, предоставляющего потребителям доступ к более широкому ассортименту музыки, чем когда-либо ранее. При этом студии звукозаписи оказались в определенной степени не у дел и понесли значительные убытки [15, 22].
//-- Потенциальные возможности пиринговых систем --//
Успех сети Napster наглядно показал, что пиринговые системы обладают потенциальными возможностями, способными изменять целые отрасли промышленности, и основаны на простой идее: замена посредника на прямое взаимодействие между равными партнерами. В случае с музыкальной индустрией давно существующие студии звукозаписи и их каналы маркетинга и распространения, действующие как посредники между музыкантами и слушателями, были заменены пиринговыми системами совместного использования файлов. Основными характеристиками, которые сделали музыкальную индустрию столь уязвимой и способствовали распространению пиринговых систем, являлись нематериальная сущность музыки и низкие накладные расходы на копирование и передачу данных.
Мощь пиринговых систем не ограничивается музыкальной индустрией. Любая сфера деятельности, которая в основном играет роль посредника между производителями и потребителями нематериальной или цифровой продукции или услуг, в любой момент может быть заменена на пиринговую систему. Возможно, подобное заявление звучит несколько абстрактно, но вы сами можете убедиться в его справедливости, если внимательнее присмотритесь ко множеству окружающих вас посредников, предлагающих нематериальную и цифровую продукцию и услуги, и самой крупной из них является финансовая сфера.
Что именно хранится на вашем банковском счете, на вашей кредитной или дебетовой карте? Настоящие деньги? Деньги, которые вы держали в руках, уже давно превратились в нематериальные биты и байты. Сейчас лишь небольшой объем денежных средств существует в виде физически осязаемых банкнот и монет. Подавляющее большинство мировых денежных средств и активов воплотилось в форме невидимых глазу битов и байтов в централизованных информационных системах финансовой индустрии. Банки и многие другие деятели финансовой сферы являются просто посредниками между производителями и потребителями битов и байтов, которые теперь олицетворяют наши деньги и наше благополучие. Операция займа, кредитования или перевода денег с одного счета на другой – это всего лишь передача нематериальной сущности, выполняемая посредником, также называемым комиссионером. Удивительно, как много посредников привлечено к выполнению с виду простых транзакций (например, при переводе денег с одного счета на счет, расположенный в другой стране, могут принять участие до пяти посредников, и все они требуют оплаты времени, затраченного на обработку данных, и своих комиссионных). В результате для простой операции перевода денег на счет в другой стране время обработки увеличивается, и возникают значительные накладные расходы на выполнение транзакций. В пиринговой системе тот же перевод можно выполнить намного проще и быстрее, а накладные расходы будут меньшими, поскольку операция выполняется «как есть», без лишних сущностей: передача битов и байтов между двумя равноправными партнерами или узлами.
Преимущество пиринговых систем перед централизованными системами заключается в возможности прямых взаимодействий между партнерами, связанными контрактом, вместо непрямого взаимодействия через посредника, следовательно, с более коротким временем обработки и с меньшими накладными расходами.
Пиринговые системы дают преимущества не только для операций денежных переводов. Любая сфера деятельности, которая в основном играет роль посредника между производителями и потребителями нематериальной или цифровой продукции или услуг, в любой момент может быть заменена на пиринговую систему. При непрерывно продолжающейся всеобщей оцифровке все больше и больше объектов повседневной жизни и постоянно увеличивающееся количество товаров и услуг становятся нематериальными, позволяя извлекать пользу из функционирования пиринговых систем. Активные сторонники применения пиринговых систем убеждены, что почти все аспекты нашей жизни так или иначе изменятся с наступлением «цифровой эры» и массового использования пиринговых сетей в платежных системах, системах управления денежными сбережениями, кредитами, страховками, а также в системах выдачи и проверки подлинности свидетельств о рождении, водительских прав, паспортов, удостоверений личности, дипломов об образовании, патентов и трудовых контрактов. Большинство этих документов уже существует в цифровой форме в централизованных системах, функционирующих в организациях, являющихся просто посредниками между обычными производителями и потребителями.
Примечание
Устранение посредника называют также устранением промежуточного звена (disintermediation). Этот процесс вызывает острое беспокойство у многих организаций и компаний, основная деятельность которых как раз и заключается в посредничестве между различными группами людей, как, например, между продавцами и покупателями, заемщиками и кредиторами, производителями и потребителями.
//-- Терминология и связь с технологией блокчейна --//
После того как вы узнали больше о потенциальных возможностях пиринговых систем, необходимо уточнить терминологию этой проблемной области и описать ее взаимосвязь с технологией блокчейна. В частности, необходимо более подробно рассмотреть следующие темы:
• определение пиринговой системы;
• архитектура пиринговых систем;
• связь между пиринговыми системами и технологией блокчейна.
Определение пиринговой системы
Пиринговая система (peer-to-peer system) – это распределенная программная система, состоящая из узлов (nodes) (отдельных компьютеров), которые предоставляют прямой доступ к своим вычислительным ресурсам (процессорный ресурс, объем внешней памяти и/или средства распространения информации) другим узлам. После присоединения к пиринговой сети пользователи превращают свои комьютеры в узлы этой системы, обладающие равными правами и исполняющие одинаковые роли. Несмотря на то что предоставляемые пользователями ресурсы могут быть различными, все узлы системы получают одни и те же функциональные возможности и несут равную ответственность. Таким образом, компьютеры всех пользователей одновременно являются поставщиками и потребителями ресурсов [32].
Например, в пиринговой системе совместного использования файлов отдельные файлы хранятся на компьютерах пользователей. При необходимости скачать какой-либо файл пользователь загружает его с компьютера другого человека, который может оказаться соседом по дому или иностранцем, живущим в другой части света.
Архитектура пиринговых систем
Пиринговые системы по своей структуре являются распределенными компьютерными системами, так как состоят из отдельных узлов, совместно использующих свои вычислительные ресурсы. Но при этом пиринговые системы также используют и элементы централизации. Централизованные пиринговые системы поддерживают центральные узлы для обеспечения взаимодействия между участниками сети, для обслуживания каталогов, описывающих сервисы, предлагаемые пиринговыми узлами, или для выполнения поиска и идентификации узлов [11]. В централизованных пиринговых системах обычно применяется смешанная архитектура, приблизительно похожая на схему в левой части рис. 2.2. Такая архитектура позволяет объединить преимущества централизованных и распределенных систем. С другой стороны, «чистые» распределенные пиринговые системы не содержат каких-либо элементов центрального управления или координации. Таким образом, все узлы этих систем выполняют одни и те же задачи, действуя и как поставщики, и как потребители ресурсов и сервисов.
Примером централизованной пиринговой системы является сеть Napster, обеспечивающая сопровождение центральной базы данных всех узлов, соединенных с системой, и музыкальных композиций, доступных всем этим узлам.
Связь между пиринговыми системами и технологией блокчейна
В главе 2 уже отмечалось, что технология блокчейна может рассматриваться как инструментальное средство для достижения и поддержки целостности в распределенных системах. Распределенные пиринговые системы могут использовать блокчейн для обеспечения целостности системы. Следовательно, связь между полностью распределенными пиринговыми системами и технологией блокчейна означает использование последней для обеспечения целостности таких систем.
//-- Потенциальные возможности технологии блокчейна --//
Итак, полностью распределенные пиринговые системы используют технологию блокчейна для обеспечения целостности. Следовательно, потенциальные возможности блокчейна можно описать следующим образом: полностью распределенные пиринговые системы обладают огромным коммерческим потенциалом, так как способны заменить централизованные системы и полностью изменить целые отрасли индустрии посредством исключения промежуточных звеньев (посредников). Поскольку полностью распределенные пиринговые системы могут использовать технологию блокчейна для обеспечения целостности, эта технология становится не менее важной. Но главным фактом, привлекающим внимание, все же остается исключение посредников. Технология блокчейна представляет собой всего лишь одно из средств, служащих достижению этой цели.
Примечание
Внимание, которое привлекает технология блокчейна, основано на том, что она может служить в качестве инструментального средства обеспечения целостности в полностью распределенных пиринговых системах, обладающих потенциальными возможностями для коренного изменения целых отраслей индустрии посредством исключения промежуточных звеньев (посредников).
//-- Перспектива --//
В этой главе было приведено определение пиринговых систем и описаны их потенциальные возможности. Кроме того, было подчеркнуто особое внимание, которое привлекает технология блокчейна благодаря своей способности обеспечивать целостность распределенных пиринговых систем при выполнении их задач. Но вопрос «Почему так важно обеспечение целостности в распределенных системах?» пока остался без ответа. В следующей главе этот вопрос будет рассмотрен более подробно.
//-- Резюме --//
• Пиринговые системы состоят из компьютеров, предоставляющих прямой доступ к своим вычислительным ресурсам другим членам системы.
• Преимущество пиринговых систем состоит в возможности прямого взаимодействия пользователей друг с другом вместо взаимодействия через посредников.
• Замена посредников на пиринговые системы увеличивает скорость обработки данных и снижает накладные расходы.
• Пиринговые системы могут быть централизованными или полностью распределенными.
• Полностью распределенные пиринговые системы формируют сеть равных партнеров, напрямую взаимодействующих друг с другом без какой-либо центральной координации.
• Сеть Napster продемонстрировала мощь пиринговых систем, так как ее система совместного использования файлов открыла эпоху новых бизнес-моделей в сложившейся годами музыкальной индустрии, которая в основном действовала как посредник между музыкантами и слушателями.
• Каждая отрасль индустрии, действующая главным образом как посредник между производителями и потребителями нематериальной или цифровой продукции или услуг, может быть заменена пиринговыми системами.
• Почти вся существующая ныне финансовая система является просто посредником между поставщиками и потребителями денежных средств, в наши дни главным образом имеющих форму цифровых или нематериальных объектов. Следовательно, переход к полной оцифровке и использованию пиринговых систем может коренным образом изменить сферу финансовой деятельности, подобно тому, как сеть Napster изменила музыкальную индустрию.
• По мере продолжения процесса оцифровки все больше аспектов повседневной жизни, а также все больший объем продукции и услуг становится нематериальным, тем самым извлекая пользу из преимуществ пиринговых систем.
• Внимание, которое привлекает технология блокчейна, основано на том, что она может служить в качестве инструментального средства обеспечения целостности в полностью распределенных пиринговых системах, обладающих потенциальными возможностями для коренного изменения целых отраслей индустрии посредством исключения промежуточных звеньев (посредников).
Часть II
Зачем нужна технология блокчейна
В этой части книги подробно описывается задача, которую призвана решить технология блокчейна, а также объясняется, почему решение этой задачи столь важно. Материал этой части обеспечивает более глубокое понимание проблемной области, в которой функционирует блокчейн, и среды, где эта технология может предоставить наибольшие преимущества. Кроме того, рассматривается взаимосвязь блокчейна с задачами обеспечения доверительности, целостности и управления владением (собственностью). После изучения этой части книги вы будете глубже понимать основную цель технологии блокчейна и отличительные особенности самого термина «блокчейн».
Глава 4
Исследование основной задачи
Как сформировать группу независимых компьютеров
В предыдущих двух главах была в общих чертах сформулирована главная цель технологии блокчейна и особо подчеркнута ее важность для полностью распределенных пиринговых систем. Очевидно, что обеспечение целостности в распределенных системах является главной целью технологии блокчейна. Но почему обеспечение целостности в распределенных системах вообще и в частности в полностью распределенных пиринговых системах представляет собой столь трудную и важную задачу? Данная глава отвечает на этот вопрос, исследуя трудноуловимые взаимосвязи между задачами обеспечения доверительности и целостности в полностью распределенных пиринговых системах. Материал этой главы существенно углубляет понимание важности обеспечения целостности и подробно описывает основную задачу, решаемую технологией блокчейна. В конце главы рассматривается среда, в которой технология блокчейна способна принести максимальную пользу.
//-- Метафора --//
Во многих естественных языках существуют образные выражения или поговорки, описывающие ситуацию, в которой кто-либо пытается привести в порядок, организовать беспорядочную группу лиц или объектов. Например, в английском языке этой ситуации соответствует выражение «herding cats» (попытка собрать кошек в стадо) (в русском языке для подобных ситуаций могут подойти крыловские «лебедь, рак и щука» и «квартет»), описывающее трудности объединения группы упрямых, трудно контролируемых и неуступчивых животных, которые не подчиняются или даже полностью игнорируют какие-либо попытки централизованного управления ими. Вам знакомы трудности при попытках как-то организовать группу людей, не желающих подчиняться единому органу управления или игнорирующих этот орган? Вот это и есть ситуация, в которой формируется полностью распределенная пиринговая система, состоящая из отдельных независимых узлов без какого бы то ни было центрального пункта управления или координации. В данной главе рассматриваются сложная задача создания полностью распределенной пиринговой системы и ее взаимосвязь с технологией блокчейна.
//-- Обеспечение доверительности и целостности в пиринговых системах --//
Доверительность и целостность – это две стороны одной монеты. В контексте программных систем целостность (integrity) является нефункциональным аспектом системы: система должна быть безопасной (защищенной), полнофункциональной, непротиворечивой, корректной и свободной от сбоев и ошибок. Доверительность (trust) – это твердая убежденность людей в надежности, честности и/или компетентности (правомочности) кого-либо или чего-либо без свидетельств, доказательств или экспертных исследований. Доверительность существует изначально и может непрерывно увеличиваться или уменьшаться в зависимости от текущих результатов взаимодействия.
С точки зрения пиринговых систем это означает, что люди присоединяются к системе и продолжают сотрудничать с ней, если доверяют этой системе и если результаты взаимодействия постоянно подтверждают и укрепляют доверие. Целостность системы необходима для удовлетворения ожиданий пользователей и укрепления доверия к системе. Если доверие пользователей не укрепляется самой системой из-за отсутствия целостности, пользователи покидают систему, и в конце концов она просто прекращает свое существование. Осознание важности доверия для существования пиринговых систем приводит к ключевому вопросу: как обеспечить и поддерживать целостность в полностью распределенной пиринговой системе?
Обеспечение и поддержка целостности в полностью распределенных пиринговых системах зависят от множества факторов, наиболее важными из которых являются:
• знание количества узлов или партнеров;
• знание степени доверия (уровня надежности) между партнерами.
Вероятность обеспечения целостности в распределенной пиринговой системе повышается, если точно известно количество узлов и степень доверительности между ними. Эту ситуацию можно сравнить с деятельностью частного клуба, установившего высокие моральные стандарты и использующего жесткие процедуры приема для новых членов. Разумеется, наихудшие условия для обеспечения целостности в распределенной пиринговой системе – неизвестное количество узлов и отсутствие информации о степени доверия между ними. Это характерно для варианта создания полностью распределенной пиринговой системы в Интернете, открытой для всех.
//-- Угрозы целостности в пиринговых системах --//
Для упрощения можно рассматривать два основных источника опасности для целостности в пиринговых системах:
• технические отказы (сбои);
• злоумышленники-партнеры в системе.
Технические отказы (сбои)
Пиринговые системы состоят из отдельных компьютеров, пользователи которых обмениваются информацией по сети. Для любого аппаратного и программного компонента компьютера, а также для любого компонента сети постоянно существует опасность возникновения аварийного сбоя или критической ошибки. Таким образом, в любой распределенной системе в любой момент может появиться проблема из-за отказа компонента или из-за случайного искажения результата обработки данных.
Злоумышленники-партнеры в системе
Злоумышленники-партнеры являются вторым основным источником опасности для целостности в пиринговых системах. Это не техническая проблема, это проблема, создаваемая намерениями отдельных лиц, которые решили воспользоваться системой в своих корыстных целях. Можно утверждать, что эта опасность в большей степени относится к области социальной психологии и групповой динамики, чем к технологии. Нечестные и злонамеренные партнеры создают самую большую угрозу для пиринговой системы, потому что нападают на саму основу построения пиринговой системы: на доверие. Когда пользователи перестают доверять своим партнерам, они покидают систему и прекращают предоставлять ей свои вычислительные ресурсы. Количество партнеров уменьшается, и система в целом теряет свою привлекательность для оставшихся участников, что, в свою очередь, приводит к снижению возможностей системы и в конечном итоге к прекращению ее существования.
//-- Главная задача, решаемая технологией блокчейна --//
Обеспечение целостности и доверительности при всех наилучших условиях осуществляется очень просто. Но реальная (и весьма трудная) задача состоит в обеспечении целостности и доверительности в самых наихудших условиях. Именно эту задачу призвана решить технология блокчейна. Главная задача блокчейна – обеспечение и поддержка целостности в полностью распределенной пиринговой системе, состоящей из неизвестного количества партнеров с неизвестным уровнем надежности и доверительности. Задача эта не нова, это общеизвестная и часто обсуждаемая проблема в области информационных технологий. Используя метафору из военного дела (если говорить более точно, то из области криптологии), можно в широком смысле считать ее задачей византийских генералов [20].
Примечание
Главная задача, решаемая технологией блокчейна, – обеспечение и поддержка целостности в полностью распределенной пиринговой системе, состоящей из неизвестного количества партнеров с неизвестным уровнем надежности и доверительности.
//-- Перспектива --//
В этой главе особо выделена важность обеспечения целостности и доверительности в пиринговых системах. Далее определяется главная задача, решаемая технологией блокчейна, и подчеркивается ее важность для обеспечения целостности и доверительности в пиринговых системах. Но пока еще не было дано точное определение термина «блокчейн». Это будет сделано в следующей главе.
//-- Резюме --//
• Целостность и доверительность – главные характеристики, которые необходимо обеспечить в пиринговых системах.
• Люди присоединяются к системе и продолжают сотрудничать с ней, если доверяют этой системе и если результаты взаимодействия постоянно подтверждают и укрепляют доверие.
• Если доверие пользователей не укрепляется самой системой из-за отсутствия целостности, пользователи покидают систему, и в конце концов она просто прекращает свое существование.
• Два основных источника опасности для целостности в пиринговых системах:
– технические отказы (сбои);
– злоумышленники-партнеры в системе.
• Обеспечение целостности в пиринговой системе зависит от следующих основных факторов:
– знание количества узлов или партнеров;
– знание степени доверия (уровня надежности) между партнерами.
• Главная задача, решаемая технологией блокчейна, – обеспечение и поддержка целостности в полностью распределенной пиринговой системе, состоящей из неизвестного количества партнеров с неизвестным уровнем надежности и доверительности.
Глава 5
Однозначное определение термина
Четыре способа определения технологии блокчейна
Из предыдущих глав вы узнали о главной цели технологии блокчейна, о взаимосвязи между доверительностью и целостностью в программной системе. Это позволило с полным обоснованием дать верную оценку цели блокчейна, но сам термин «блокчейн» пока еще не был определен. В этой главе основное внимание уделено определению этого термина и объяснению различных вариантов его использования. Здесь представлено предварительное общее определение технологии блокчейна, которым мы будем руководствоваться при изучении следующих глав книги. В конце главы рассматривается, почему управление владением (собственностью) является самым широко распространенным вариантом применения технологии блокчейна.
//-- Определение термина --//
При изложении материала данной книги термин «блокчейн» используется следующим образом:
• как имя структуры данных;
• как имя алгоритма;
• как имя набора (стека) технологий;
• как гипероним (обобщающее понятие) для полностью распределенных пиринговых систем с общей прикладной областью.
Структура данных
В информатике и программной инженерии структура данных (data structure) обозначает способ организации данных, не зависящий от конкретного информационного содержимого. Структуру данных можно сравнить с планом строящегося здания. На плане здания отображаются разделение и соединение пространства с помощью стен, этажей и лестниц независимо от способов их конкретного применения. При использовании в качестве имени структуры данных блокчейн обозначает данные, объединенные в комплекты, называемые блоками (block). Блоки данных во многом похожи на страницы в книге. Блоки соединяются друг с другом в цепочку, отсюда и название блокчейн (или цепочка блоков данных). В книге слова и предложения представляют хранимую информацию. Они записаны на отдельных страницах, а не на одном большом свитке. Страницы связаны друг с другом на основе их физического расположения в книге и соответствующих номеров страниц. Вы можете заметить, что какой-то страницы не хватает, проверяя непрерывность последовательности номеров страниц. Более того, информация на страницах книги, так же как и сами страницы, упорядочена. Такая упорядоченность является важной деталью, используемой повсеместно. Кроме того, цепочка блоков данных в структуре формируется с использованием специализированной системы нумерации, которая отличается от нумерации страниц в обычных бумажных книгах.
Алгоритм
В программной инженерии термин алгоритм означает последовательность инструкций, выполняемых компьютером. Инструкции часто пользуются структурами данных. При использовании в качестве имени алгоритма блокчейн обозначает последовательность инструкций, обрабатывающих информационное содержимое структур данных блокчейна (blockchain-data-structures) в полностью распределенной пиринговой системе. Это несколько напоминает схему демократического голосования.
Набор (стек) технологий
При использовании в качестве названия набора (стека) технологий блокчейн обозначает сочетание структуры данных блокчейна, алгоритма блокчейна, а также криптографических технологий и технологий обеспечения безопасности, которое в совокупности может быть использовано для обеспечения целостности в полностью распределенных пиринговых системах, независимо от их прикладной цели.
Гипероним (обобщающее понятие) для полностью распределенных пиринговых систем с общей прикладной областью
Термин блокчейн также может применяться в качестве гиперонима (обобщающего понятия) для полностью распределенных пиринговых программных систем, использующих набор технологий блокчейна. Отметим, что в этом контексте блокчейн обозначает полностью распределенную систему как единое целое, а не какой-то программный модуль, являющий частью распределенной системы.
//-- Использование термина блокчейн в данной книге --//
На протяжении всей оставшейся части книги термин блокчейн будет использоваться для краткого обозначения гиперонима (обобщающего понятия) для полностью распределенных пиринговых программных систем, использующих набор технологий блокчейна. Если будет подразумеваться что-либо другое, то будут явно использоваться термины струтура данных блокчейна, алгоритм блокчейна и набор (стек) технологий блокчейна.
Примечание
Технология, обозначаемая в наши дни термином блокчейн, была предложена в 2008 году автором, скрывавшимся под псевдонимом Сатоши Накамото (Satoshi Nakamoto) [26]. Настоящее имя автора до сих пор неизвестно.
//-- Предварительное определение термина --//
Следующее определение не является полным. В нем отсутствуют важные подробности, которые пока еще не рассматривались. Тем не менее это определение станет важным промежуточным шагом к более полному пониманию термина блокчейн:
Блокчейн (blockchain) (цепочка блоков транзакций) – это полностью распределенная пиринговая система журналов учета, использующая программный модуль, реализующий алгоритм, который обрабатывает информационное содержимое упорядоченных взаимосвязанных блоков данных как единое целое с помощью криптографических технологий и технологий защиты данных для обеспечения и поддержки целостности этой системы.
//-- Роль управления правом владения --//
В предварительном определении, приведенном выше, ничего не говорится ни о Bitcoin, ни об управлении правом владения криптографическими денежными средствами. Это может показаться странным, поскольку многие статьи и книги о блокчейне утверждают, что основной целью блокчейна является управление правом владения цифровыми валютами. Дело в том, что управление правом владения криптографическими денежными средствами является самым широко распространенным и вполне естественным вариантом практического применения технологии блокчейна, но далеко не единственным. Диапазон применения блокчейна широк и разнообразен. И все же существуют две причины, по которым управление правом владения цифровой продукцией стало самым обсуждаемым приложением блокчейна. Во-первых, этот вариант проще всего понять и объяснить. Во-вторых, это пример практического применения с наибольшей степенью воздействия на реальную экономику. Концепция права владения собственностью и законное обеспечение прав собственности являются главнейшими элементами практически каждого сообщества людей (даже у некоторых животных существует концепция владения собственностью, и они отстаивают свое право владения в жестокой борьбе). Почти вся деятельность банков, страховых компаний, опекунских советов, юристов, судей, адвокатов и юрисконсультов сосредоточена на управлении правами собственности или на их соблюдении. Таким образом, сфера управления правами собственности представляет собой рынок с оборотом в миллиарды долларов, и любая техническая инновация, способная изменить метод управления правом владения, будет воздействовать на этот рынок с огромной силой. Поэтому можно считать, что блокчейн действительно может коренным образом изменить методики управления правом собственности.
//-- Область применения блокчейна, рассматриваемая в данной книге --//
Блокчейн как набор технологий, используемый для управления распределенных пиринговых программных систем, может обеспечить множество специализированных вариантов практического применения, таких как управление правом владения цифровой продукцией или криптографическими денежными средствами. Но в этой книге преднамеренно не рассматриваются какие-то отдельные специальные приложения блокчейна, потому что не следует отвлекать внимание читателей от основополагающих концепций, подробно описывая только один специализированный вариант приложения. Но для упрощения понимания технологии блокчейна в книге все же приводится обобщенный пример применения управления правом владения и его защиты без указания конкретного типа продукции. Таким образом, определяется общая цель управления правом собственности, весьма подходящая для предлагаемого здесь процесса обучения и помогающая создать общую мысленную схему функционирования блокчейна.
//-- Перспектива --//
В этой главе был объяснен термин блокчейна и приведено предварительное определение этого термина. В книге рассматривается обобщенный пример применения управления правом владения и защиты без указания конкретного типа продукции для описания функциональности блокчейна, но без подробностей механизма осуществления владения. Расширенное описание права владения собственностью поможет лучше понять функционирование блокчейна. В следующей главе будут более подробно рассматриваться основы права владения собственностью.
//-- Резюме --//
• Термин блокчейн неоднозначен; разные люди придают ему различный смысл, зависящий от контекста обсуждения.
• Термин блокчейн может обозначать:
– структуру данных;
– алгоритм;
– набор (стек) технологий;
– группу полностью распределенных пиринговых систем с общей прикладной областью.
• Управление правом владения собственностью и его осуществление являются наиболее распространенным вариантом практического применения блокчейна, но далеко не единственным.
• Блокчейн (blockchain) (цепочка блоков транзакций) – это полностью распределенная пиринговая система журналов учета, использующая программный модуль, реализующий алгоритм, который обрабатывает информационное содержимое упорядоченных взаимосвязанных блоков данных как единое целое с помощью криптографических технологий и технологий защиты данных для обеспечения и поддержки целостности этой системы.
Глава 6
Понимание сущности права владения собственностью
Как мы осознаем, что владеем чем-либо
В главе 5 были приведены предварительное определение термина блокчейн и обоснование причин, по которым управление правом владения считается наиболее распространенным вариантом применения технологии блокчейна. В этой главе более глубоко рассматривается взаимосвязь между блокчейном и этим наиболее распространенным вариантом применения для управления правом владения. В частности, описывается связь между доверительностью и целостностью в полностью распределенных пиринговых системах, с одной стороны, и управлением правом владения – с другой. Кроме того, в этой главе также приводятся некоторые общие положения, касающиеся сущности права владения собственностью, и вводятся основополагающие концепции обеспечения безопасности.
//-- Метафора --//
Представьте себе следующую ситуацию. Дома вы кладете в сумку яблоко для ланча. По дороге на работу вы решаете зайти в супермаркет, чтобы купить сэндвич и немного печенья. У кассы вы открываете сумку, чтобы сложить в нее купленные товары, и тут сотрудник супермаркета видит в вашей сумке яблоко, которое совершенно случайно оказывается как две капли воды похожим на яблоки, продающиеся в этом супермаркете. О чем сразу же подумает сотрудник супермаркета? Он может сделать ошибочный вывод о том, что вы, возможно, украли это яблоко. К сожалению, в супермаркете нет видеокамер наблюдения за покупателями, нет контролеров в торговых залах, а вы в текущий момент – единственный покупатель. Как вы можете доказать, что яблоко не краденое, а ваше собственное?
//-- Право владения и доказательства --//
Размышляли ли вы когда-либо над тем, что именно делает вас владельцем вещей, принадлежащих вам? Возможно, размышляете сейчас, продолжая обдумывать рассказ о яблоке из супермаркета. Так что же именно делает вас владельцем яблока, лежащего в сумке? Как можно доказать, что оно не украдено из супермаркета?
Теперь предположим, что вы предстали перед судом, разбирающим ошибочно предъявленное вам обвинение в краже яблока. Как доказать, что вы владелец этого яблока? Из описанного выше примера с супермаркетом мы знаем, что достаточным доказательством вашей невиновности должно являться отсутствие свидетелей, которые могут с полной уверенностью подтвердить, что вы украли яблоко. Но снятие предварительных обвинений в воровстве еще не доказывает права владения. Поэтому более подробно остановимся на рассмотрении проблемы доказательства права на владение.
Большую помощь может оказать свидетельское показание, подтверждающее, что вы купили яблоко до похода в супермаркет. К счастью, вы запомнили магазин и продавца, у которого приобрели яблоко, и теперь хотите, чтобы он подтвердил это. Но вы недооценили квалификацию обвинителя. Он устроил перекрестный допрос свидетеля и задавал очень трудные вопросы: может ли он точно вспомнить то яблоко, которое продал вам? Является ли яблоко, которое он продал, в точности тем же яблоком, которое обнаружено в вашей сумке? Может ли он определенно утверждать, что вы тот самый человек, которому он продал именно это конкретное яблоко? В конце концов, почему он вдруг сразу вспомнил все эти подробности? А может быть, вы заплатили свидетелю за подтверждение вашей невиновности? Все это сводится к основному принципу: один свидетель – хорошо, но наличие многих независимых свидетелей является главным фактором, позволяющим убедить обвинителя в вашей невиновности.
Последнее утверждение особенно важно. Чем больше независимых свидетелей подтверждают один и тот же факт, тем выше вероятность того, что этот факт действительно является правдой. Вскоре вы убедитесь, что эта идея является одной из основополагающих концепций блокчейна.
//-- Основания права владения --//
Рассматривая все изложенное в предыдущем разделе на более абстрактном уровне, можно утверждать, что доказательство права владения подразумевает три обязательных элемента:
• идентификация владельца;
• идентификация объекта владения;
• установление связи владельца с объектом.
Показание свидетеля включает все эти элементы. Исторически свидетель-очевидец часто являлся единственным источником установления перечисленных фактов. Но устные показания свидетелей отнимают слишком много времени. Поэтому их заменили документами из надежных источников, заслуживающих доверия. В наше время личность можно установить по служебным удостоверениям, свидетельствам о рождении и водительским правам. Серийные номера, даты производства, сертификаты на продукцию могут использоваться для идентификации объектов. Эти документы не изменяются после создания, потому что характерные отличительные черты людей и объектов не меняются.
Соответствие между владельцами и объектами обычно устанавливается с помощью журнала (книги) учета (ledger) или реестра (register) (запись актов гражданского состояния, бухгалтерская книга, финансовый реестр и т. п.). Но это не тот документ, который остается неизменным после создания. Каждый факт передачи права владения должен быть задокументирован в подобном реестре, потому что устаревший реестр или журнал (книга) не может являться достоверным доказательством для подтверждения права владения. Важность наличия реестра, содержащего самые последние сведения и оформляемого в надлежащем порядке, привела к появлению специализирующихся на этой области деятельности учреждений во многих сообществах. Чем большую ценность имеют некоторые типы объектов, тем больше вероятность существования управляемого на государственном уровне реестра, в котором документируются права владения этими объектами. Большинство таких реестров открыто для всех, чтобы упростить проверку и доказательство прав владения. Вы сами можете проверить наличие подобных реестров в вашей стране и узнать, какие именно права они удостоверяют. Я нашел реестры, документирующие права владения недвижимостью, патентами, судами, самолетами и компаниями. Кроме того, я даже обнаружил журналы регистрации браков, рождений и смертей.
На рис. 6.1 отображена взаимосвязь различных концепций, используемых для проектирования программного обеспечения, управляющего правами владения.
Рис. 6.1 Концепции права владения
На рис. 6.1 концепции верхних уровней являются более обобщенными по сравнению с концепциями более низких уровней. Концепции каждого уровня могут рассматриваться как реализации концепции уровней, расположенных выше. Например, доказательство права владения требует идентификации владельцев и объектов собственности, а также установления связи между владельцами и собственностью. Применение права владения требует идентификации, а также аутентификации и авторизации для полной уверенности в том, что собственностью пользуется личность, имеющая на это юридическое право. В самой нижней строке на рисунке представлен уровень реализации. Например, здесь показано, что пароль и подпись являются концепциями, используемыми для реализации процедур аутентификации и авторизации. Журнал (книга) и соответствующее программное обеспечение могут рассматриваться как конкретная реализация концепции установления связи между владельцами и их собственностью.
//-- Небольшое отступление, касающееся безопасности --//
На рис. 6.1 отображены три главные концепции, относящиеся к задаче обеспечения безопасности, которые необходимо рассмотреть более подробно, так как их смысловое значение в контексте программных систем несколько отличается от используемого в повседневной жизни:
• идентификация;
• аутентификация;
• авторизация.
Общий смысл и взаимосвязь между этими тремя концепциями можно проиллюстрировать на примере из реальной жизни. Предположим, что вы хотите купить бутылку вина в винном магазине. Винным магазинам запрещается продавать алкогольные напитки лицам, не достигшим определенного возраста. Как сотрудники винного магазина могут удостовериться в том, что они продают вино только разрешенной категории людей? Это осуществляется с помощью идентификации, аутентификации и авторизации. Рассмотрим подробнее, как работают эти концепции на практике.
Идентификация
Идентификация означает подтверждение подлинности личности посредством установления имени или каких-либо других признаков, которые могут использоваться как идентификатор [37]. В примере с винным магазином покупатель может назвать свое имя. Идентификация еще не доказывает, что человек действительно носит то имя, которым он назвался. Идентификация не предоставляет доказательств того, что покупатель не является несовершеннолетним. Идентификация – это всего лишь объявление имени конкретного человека.
Аутентификация
Цель аутентификации – предотвратить попытку выдать себя за другого человека. Аутентификация означает проверку или доказательство того, что вы действительно являетесь тем человеком, имя которого вы назвали [37]. Подтвердить личность может что-то или кто-то с доказательствами, значимыми с юридической точки зрения (например, служебное удостоверение, водительские права или некоторые подробности жизни человека, имя которого было названо). Важно, чтобы доказательства, подтверждающие вашу личность, были однозначно связаны с вами (например, фотография на удостоверении, отпечатки пальцев или что-то другое, характерное только для вас, не допускающее двусмысленного толкования). В примере с винным магазином вы можете подтвердить личность, показав водительские права с фотографией. Сравнение вашего лица с фотографией в правах соответствует процедуре верификации. Если вы действительно выглядите так же, как на фото, то аутентификация считается успешной. В противном случае аутентификация не пройдена. Сопоставление лица человека с фотографией в водительских правах дает возможность предотвратить попытку незаконного использования чужих документов.
Авторизация
Авторизация означает предоставление доступа к конкретно определенным ресурсам или услугам в соответствии с характеристиками или свойствами личности, подлинность которой установлена [37]. Авторизация представляет собой последовательность успешной процедуры аутентификации и дальнейшего определения характеристик или прав установленной личности. В примере с винным магазином авторизация означает принятие решения о возможности покупки вами бутылки вина на основе даты рождения, указанной в водительских правах. Сотрудник магазина может отказать вам, если по дате рождения в документе определит, что вы несовершеннолетний. Отметим, что в данном случае отказ происходит не из-за неудачной аутентификации. Процедуры идентификации и аутентификации были пройдены успешно, но именно благодаря корректной идентификации сотрудник магазина смог определить, что вы несовершеннолетний. Таким образом, авторизация всегда является результатом определения по некоторым заданным правилам характеристик и/или свойств личности, установленной перед этим с помощью процедуры аутентификации.
Примечание
Идентификация означает объявление своего имени. Аутентификация означает доказательство того, что вы действительно являетесь тем человеком, именем которого назвались. Авторизация означает получение доступа к чему-либо на основании предварительно проведенной успешной процедуры аутентификации с целью подтверждения личности.
//-- Цели и свойства регистра --//
На рис. 6.2 показано, каким образом доказательство права владения и передача права владения связаны с целями и свойствами реестра (ledger).
Рис. 6.2 Концепции и основные принципы реестра
Главным на рис. 6.2 является тот факт, что реестр должен выполнять две противоположные функции. С одной стороны, реестр служит средством доказательства права владения, основываясь на чтении хронологических данных, хранимых в данном реестре. С другой стороны, в реестре должны документироваться все факты передачи права владения, что подразумевает создание новых данных и запись их в реестр. Одним из наиболее важных различий этих двух целей может стать противоположная сущность прозрачности и приватности.
Доказательство права владения упрощается, если реестр доступен всем. Таким образом, прозрачность является основой процедуры доказательства права владения подобно тому, как свидетели дают показания в открытом для публики суде. Но при передаче права владения доступ к процедуре непременно должен быть открыт исключительно для законного владельца. В этом случае обеспечение приватности становится основой передачи права владения. Поскольку запись в реестр означает изменение права владения, право на запись должно предоставляться только объектам, доверие к которым не вызывает никаких сомнений.
Действительно существующие противоречия между прозрачностью и приватностью, между процедурами доказательства права владения и передачи права владения, между чтением и записью в реестр также можно обнаружить и в блокчейн-системе. Таким образом, блокчейн представляет собой огромную распределенную пиринговую систему, состоящую из структур данных, очень похожих на реестр (ledger), доступных для чтения любому желающему.
//-- Право владения и блокчейн --//
Доказательство в форме управляемого на государственном уровне реестра является главным действующим фактором при определении права владения ценной продукцией. Но что произойдет, если такой реестр поврежден или уничтожен? Или если некто, ответственный за обновление реестра, допустит ошибки или фальсифицирует запись в корыстных целях? В этом случае реестр перестает соответствовать действительности. Это настоящая катастрофа, потому что все уверены, что реестр дает правдивую информацию, подобно свидетелю в суде.
Проблема наличия только одного реестра как источника определения права владения может быть решена тем же способом, который применяется в судебном разбирательстве. Судебное решение на основании показаний одного свидетеля является сомнительным, так как свидетель может оказаться не вполне честным. Лучше собрать показания нескольких свидетелей. Чем больше независимых свидетелей опрошено, тем выше вероятность того, что факты, подтвержденные в большинстве свидетельских показаний, действительно соответствуют истине. Это положение можно доказать с помощью методов статистики и закона больших чисел. Наличие множества свидетелей, которые независимо друг от друга рассказывают о том, что они видели, является основой такого подхода к установлению истины.
Применение подобной методики к использованию реестра для определения права владения становится очевидным: вместо обслуживания единственного реестра, который можно подделать или испортить, необходимо создать полностью распределенную пиринговую систему реестров и выполнять запросы, касающиеся права владения, в такой версии отображения реального мира, с которой согласно большинство равноправных действующих партнеров. Здесь может возникнуть вопрос: как все это связано с блокчейном? Взаимосвязь между управлением правами владения с помощью реестра и технологией блокчейна определяется следующим образом:
• отдельный реестр, используемый для сопровождения информации о правах владения, равнозначен одной структуре данных блокчейна, хранящей данные, относящиеся к правам владения;
• отдельные реестры хранятся на компьютерах (узлах) пиринговой системы;
• алгоритм блокчейна отвечает за объединение отдельных узлов в единую согласованную версию, представляющую состояние прав владения, на которой основывается окончательное юридическое решение;
• целостность такой системы основывается на ее способности формировать истинные утверждения о праве владения;
• криптография необходима для создания надежных средств идентификации, аутентификации и авторизации, а также для обеспечения защиты данных.
//-- Перспектива --//
В этой главе рассматривались важные характеристики права владения, а также их взаимосвязь со свойствами реестров (журналов учета). Далее кратко объяснялась связь технологии блокчейна с правами владения и реестрами. В следующей главе объясняется, какие важные последствия имеет перевод управления правами владения в полностью распределенную пиринговую систему реестров.
//-- Резюме --//
• Доказательство права владения состоит из трех элементов:
– идентификация владельца;
– идентификация объекта владения;
– установление связи владельца с объектом.
• Служебные удостоверения, свидетельства о рождении, водительские права, а также серийные номера, даты производства, сертификаты на продукцию или подробные описания объекта могут использоваться для идентификации владельцев и объектов.
• Соответствие между владельцами и объектами может быть зафиксировано в реестре, который играет ту же роль, что и свидетельские показания в судебном разбирательстве.
• Наличие только одного реестра связано с риском, так как реестр может быть испорчен, уничтожен или подделан. В этом случае реестр перестает быть надежным средством определения права владения.
• Вместо использования единственного централизованного реестра можно воспользоваться группой независимых реестров для документирования прав владения и выполнения запросов, касающихся права владения, в такой версии отображения реального мира, с которой согласно большинство равноправных действующих партнеров.
• Возможно создание полностью распределенной пиринговой системы реестров с использованием структуры данных блокчейна. Каждая структура данных блокчейна представляет один реестр и поддерживается одним узлом системы. Алгоритм блокчейна отвечает за объединение отдельных узлов в единую согласованную версию, представляющую состояние прав владения. Криптография используется для реализации процедур идентификации, аутентификации и авторизации.
• Целостность полностью распределенной пиринговой системы реестров основывается на ее способности формировать истинные утверждения о праве владения и обеспечить возможность передачи права владения только законными владельцами.
Глава 7
Двойное расходование
Использование уязвимости распределенных пиринговых систем
В предыдущей главе вы узнали о взаимосвязи между полностью распределенными пиринговыми системами и наиболее частым вариантом практического применения технологии блокчейна в качестве средства управления правами владения. Вы также узнали, что целостность полностью распределенной пиринговой системы реестров основывается на ее способности формировать истинные утверждения о праве владения и обеспечить возможность передачи права владения только законными владельцами. Но что означает это утверждение в реальной жизни? Что происходит при нарушении целостности? Эти вопросы рассматриваются в данной главе во всех подробностях. В частности, здесь представлен один из самых важных примеров нарушения целостности в распределенных пиринговых системах: проблема двойного расходования.
//-- Метафора --//
Подделка денежных знаков – серьезное преступление в любой стране, поскольку это деяние подрывает экономику страны, создавая средства платежа, в действительности не обеспеченные финансовыми ресурсами. Поэтому большинство банковских билетов (купюр) снабжено средствами защиты, которые делают подделку невозможной или, по крайней мере, слишком дорогостоящей. Средства защиты, такие как уникальные серийные номера, водяные знаки, флуоресцентные волокна, вполне подходят для банковских билетов и другой материальной продукции. А если деньги и товары становятся цифровыми и управляются распределенными пиринговыми системами реестров? В этой главе рассматривается особый случай уязвимости распределенных пиринговых систем, используемых для управления правом владения, и этот случай равнозначен подделке денежных купюр. Кроме того, эта уязвимость представляет собой типичный пример нарушения целостности системы.
//-- Проблема двойного расходования --//
Рассмотрим пиринговую систему для управления правом владения недвижимостью. В такой системе реестры, отслеживающие информацию о правах владения, обслуживаются отдельными компьютерами, включенными в эту сеть, а не какой-либо централизованной базой данных. Таким образом, партнеры-участники осуществляют поддержку собственной копии реестра. Сразу после передачи права владения некоторым домом от одного человека другому все копии реестра должны быть обновлены для соответствия самым последним изменениям в реальной жизни. Но передача информации между партнерами и процедура обновления отдельных реестров требует времени. До тех пор, пока все участники системы не получат новую информацию и не обновят свою копию реестра, система не является согласованной. Некоторые партнеры уже знают о последней передаче права владения, другие еще не получили эту информацию. Тот факт, что не все реестры содержат свежую информацию, создает возможность некорректного использования этих реестров лицом, которое уже обладает такой информацией.
Представим следующую ситуацию. Лицо А продает дом лицу Б. Передача права владения от А к Б документируется в одном из реестров в пиринговой системе. Этот реестр должен проинформировать других партнеров о передаче права владения, партнеры, в свою очередь, должны передать информацию другим партнерам – и так до тех пор, пока в конце концов все партнеры в сети не будут осведомлены о передаче права владения от А к Б. Теперь предположим, что лицо А быстро получает доступ к другому реестру системы и оформляет другой документ на передачу права владения тем же самым домом: продажу лицом А лицу В. Если этому партнеру еще не известен факт передачи прав владения от А к Б, только что произведенной, то он примет и задокументирует передачу права владения тем же домом от А к В. Таким образом, лицо А продало свой дом дважды, используя тот факт, что для распространения информации о первой продаже требуется некоторое время. Но в действительности лица Б и В не могут одновременно владеть одним и тем же домом. Только один из них должен считаться новым законным владельцем. Подобная ситуация называется проблемой двойного расходования.
//-- Уточнение термина --//
Как и термин блокчейн, термин двойное расходование (double spending) является неоднозначным, поскольку используется для обозначения следующих концепций:
• проблема, связанная с копированием цифровой продукции;
• проблема, которая может возникать в распределенных пиринговых системах реестров;
• пример нарушения целостности в полностью распределенных пиринговых системах.
Двойное расходование как проблема копирования цифровой продукции
В контексте копирования цифровой продукции проблема двойного расходования обозначает тот факт, что данные могут копироваться с некоторого компьютера без каких-либо заметных ограничений. Это создает проблемы использования цифровых денег или любых других данных, считающихся принадлежащими только одному владельцу в текущий момент. Копирование создает возможность размножения данных, представляющих элементы цифровых денег, и использования их более одного раза в нескольких платежных операциях. Это цифровая аналогия размножения денежных купюр на копировальной машине. Если не принимать во внимание чисто техническую возможность, то копирование цифровых денег нарушает основной принцип денежной системы: одни и те же деньги (или их элементы) не могут принадлежать одновременно различным людям. Возможность многократно копировать и тратить одни и те же цифровые деньги фактически делает такие деньги бесполезными, таким образом, возникает проблема двойного расходования.
Двойное расходование как проблема распределенной пиринговой системы реестров
При использовании для описания уязвимости распределенной пиринговой системы реестров проблема двойного расходования обозначает тот факт, что передача информации всем компонентам системы требует времени, то есть не все партнеры получают информацию о правах владения в одно и то же время. Поскольку не все партнеры обладают актуальной информацией, появляется возможность их некорректного использования неким лицом, уже обладающим самой свежей информацией. В результате это лицо может многократно передавать права владения, создавая проблему двойного расходования.
Двойное расходование как пример нарушения целостности в полностью распределенных пиринговых системах
Практическое применение распределенных пиринговых систем не ограничивается управлением права владения. Но проблема постепенной передачи информации между партнерами и неодновременное обновление данных, обслуживаемых участниками такой системы, остается неизменной, вне зависимости от конкретной прикладной области. Таким образом, на более абстрактном уровне проблему двойного расходования можно рассматривать как проблему обеспечения логической согласованности данных в распределенных пиринговых системах. Поскольку согласованность данных является одним из аспектов целостности системы, можно сказать, что проблема двойного расходования представляет собой частный пример нарушения целостности системы.
//-- Как решить проблему двойного расходования --//
Так как термин двойное расходование может употребляться в нескольких различных смыслах, не существует единого универсального способа устранения этой проблемы. В следующих разделах рассматриваются некоторые возможные решения конкретных проблем двойного расходования.
Решение проблемы двойного расходования как проблемы копирования цифровой продукции
Проблема расходования цифровых денег или любых других цифровых активов более одного раза посредством простого копирования данных в действительности является проблемой, связанной с сущностью права владения. Любые приемлемые меры по установлению связи данных, представляющих цифровую продукцию, с их владельцами решают эту проблему независимо от конкретной реализации. Даже единый централизованный физический журнал (книга регистрации) или электронный реестр (что более реалистично в современных условиях) может обеспечить однократное расходование цифровой продукции, при условии что реестр корректно работает все время.
Решение проблемы двойного расходования как проблемы в распределенных пиринговых системах реестров
В этом контексте учитываются архитектура и прикладная область конкретной системы. Распределенные пиринговые системы реестров часто считаются классическим примером реализации технологии блокчейна. Материал главы 6 подчеркивает взаимосвязь блокчейна и распределенных пиринговых систем реестров. Таким образом, блокчейн как термин, используемый в данной книге, может рассматриваться как решение проблемы двойного расходования в распределенных пиринговых системах реестров.
Решение проблемы двойного расходования как примера нарушения целостности распределенных пиринговых систем
В этом контексте учитывается только архитектура системы, а прикладная область не рассматривается. То есть решения на этом уровне сосредоточены на обеспечении и поддержке целостности в распределенных пиринговых системах независимо от области их применения. Тем не менее конкретные варианты применения распределенных пиринговых систем определяют смысл понятия целостности. Например, аспекты определения целостности для простого приложения, обеспечивающего совместное использование файлов, могут совершенно отличаться от аспектов определения целостности для системы, управляющей правами владения цифровыми денежными средствами. Таким образом, на вопрос о том, является ли набор технологий блокчейна подходящим средством для обеспечения и поддержки целостности системы, невозможно ответить без знания конкретных целей приложения. Возможно, для обеспечения целостности в некоторых особенных прикладных областях применения распределенных пиринговых систем больше подходят другие технологии, структуры данных и алгоритмы.
Примечание
Проблема двойного расходования представляет собой типичный пример нарушения целостности распределенных пиринговых систем, а набор технологий блокчейна является инструментальным средством для решения этой проблемы.
//-- Использование термина двойное расходование в этой книге --//
В этой книге термин двойное расходование (double spending) используется для обозначения уязвимости, которая может возникать в полностью распределенных пиринговых системах реестров.
//-- Перспектива --//
В этой главе рассмотрена проблема двойного расходования и подчеркнута важность технологии блокчейна для обеспечения целостности в полностью распределенных пиринговых системах. В следующей главе основное внимание будет сосредоточено на том, как блокчейн обеспечивает и поддерживает целостность системы.
//-- Резюме --//
• Термин двойное расходование (double spending) является неоднозначным; он используется в различных смыслах.
• Термин двойное расходование может обозначать следующее:
– проблему, связанную с копированием цифровой продукции;
– проблему, которая может возникать в распределенных пиринговых системах реестров;
– пример нарушения целостности в полностью распределенных пиринговых системах.
• В этой книге термин двойное расходование используется для обозначения уязвимости, которая может возникать в полностью распределенных пиринговых системах реестров.
• Технология блокчейна является инструментальным средством для решения проблемы двойного расходования.
Часть III
Как работает блокчейн
Этот этап обучения является главной частью данной книги, так как здесь описываются внутреннее устройство и функционирование блокчейна. В 14 главах этой части представлены все концепции блокчейна, а также технологии, на которых они основаны. К концу этой части вы будете хорошо понимать все основные концепции блокчейна, знать, как они работают в отдельности и как взаимодействуют друг с другом для создания мощного механизма под названием блокчейн.
Глава 8
Проектирование блокчейна
Основные концепции управления правом владения с помощью блокчейна
В предыдущих главах рассматривались взаимосвязи между понятиями доверительности, целостности, полностью распределенными пиринговыми системами и технологией блокчейна. После изучения этих глав вы хорошо понимаете, что такое блокчейн, зачем нужна эта технология и какие проблемы она решает. Но вы пока еще не знаете внутреннего устройства и функционирования блокчейна. Эта глава дает общее представление о том, как работает блокчейн, описывая обобщенный сценарий приложения, который будет использоваться и в последующих главах. Также рассматриваются основные задачи при проектировании блокчейна для управления правом владения, дается обзор соответствующих основных концепций. Данная глава служит отправным пунктом для изучения последующих глав, в которых подробно описываются концепции и технологии, формирующие блокчейн.
//-- Цель --//
Главная цель – понять концепции, заложенные в основу технологии блокчейна. Для более действенного обучения я буду последовательно демонстрировать все сложности проектирования вашей собственной системы для управления правом владения. Таким образом, вы встретитесь лицом к лицу с теми же затруднениями, с которыми уже сталкивался автор блокчейна и успешно преодолел их: проектирование программного обеспечения, управляющего правом владения в полностью распределенной пиринговой системе, которое функционирует в абсолютно открытой среде, не заслуживающей доверия.
//-- Исходный пункт --//
В качестве отправного пункта можно сформулировать основные факты о рассматриваемой системе следующим образом:
• это будет полностью распределенная пиринговая система, состоящая из вычислительных ресурсов, предоставленных пользователями;
• рассматриваемая пиринговая система использует Интернет как сеть для соединения отдельных узлов;
• неизвестно ни количество узлов, ни их надежность и степень доверительности;
• цель этой пиринговой системы – управление правом владения цифровой продукцией (например, продажа бонусных баллов или цифровых денежных средств).
//-- План проектирования и разработки --//
При проектировании и разработке программного обеспечения, управляющего правом владения в полностью распределенной пиринговой системе, которое функционирует в абсолютно открытой среде, не заслуживающей доверия, необходимо решить семь основных задач:
• описание права владения;
• защита права владения;
• хранение данных транзакций;
• подготовка реестров к распространению в ненадежной среде;
• распространение реестров;
• добавление новых транзакций в реестры;
• определение, в каких реестрах представлены правильные данные.
Задача 1: описание права владения
Прежде чем начать разработку блокчейна, необходимо ответить на вопрос: что именно вы хотите делать с помощью разрабатываемой технологии. Поскольку вы намерены спроектировать программную систему, управляющую правом владения, необходимо сначала решить, как описать право владения. Выясняется, что транзакции являются вполне подходящим способом описания любой передачи права владения, а полная хронология (история) транзакций представляет собой основное важное средство идентификации текущих владельцев. Поэтому в главе 9 будут подробно описаны транзакции, их сущность, вы узнаете, как можно их описать и как использовать их для однозначного установления права владения.
Задача 2: защита права владения
Описание права владения с использованием транзакций – это всего лишь исходный пункт. Далее необходим способ предотвращения доступа посторонних к частным секретным данным владельцев. В реальной жизни вы можете защитить свою машину или дом от использования посторонними людьми с помощью дверей с замками. В нашем случае криптография предоставляет способ защиты транзакций на индивидуальном уровне, подобно тому, как двери с замками обеспечивают защиту личной машины или дома.
Механизм защиты права владения включает три основных элемента: идентификация и аутентификация владельцев, а также разрешение доступа к объекту собственности только его законному владельцу. В главах 12 и 13 эти концепции описываются более подробно. Указанные выше три элемента связаны с концепцией хэш-значений (hash values). Если вы никогда не слышали о хэш-значениях, не беспокойтесь. В главах 10 и 11 вы найдете подробное объяснение хэш-значений. В этих двух главах также будет предложена интересная информация для тех, кто уже обладает некоторой технической подготовкой и кое-что знает о хэш-значениях.
Задача 3: хранение данных транзакций
Описание права владения средствами транзакций и принятие мер защиты прав владения на уровне отдельных транзакций являются важными шагами к цели проектирования программной системы, управляющей правами владения. Но необходим также определенный способ хранения полной хронологии всех транзакций, так как эта хронология (история) используется для однозначной установки права владения. Поскольку хронология транзакций представляет собой основополагающий элемент процедуры однозначной установки права владения, ее хранение должно быть надежно защищено. Мы уже выяснили ранее, что структура данных блокчейна является цифровым эквивалентом реестра. В главах 14 и 15 определяются требования, которые должна выполнять структура данных блокчейна, чтобы использоваться в качестве цифрового реестра, а также способы реализации этих требований.
Задача 4: подготовка реестров к распространению в ненадежной среде
Наличие отдельного реестра или структуры данных блокчейна, содержащей данные транзакций, – это уже определенное достижение, но нашей целью является проектирование распределенной пиринговой системы реестров, работающей в ненадежной среде. Следовательно, необходимо получить копии реестра на всех ненадежных узлах ненадежной сети. После этого потребуется организовать управление всеми реестрами в сети без какого-либо центрального пункта управления или координации. Как можно защитить реестры от подделок или некорректных действий (например, от удаления транзакций из хронологии или от добавления незаконных транзакций)? Самый эффективный способ защиты хронологии транзакций состоит в том, чтобы сделать ее неизменяемой. Это означает, что реестры, следовательно, и хронология транзакций не имеют возможности изменять ранее сделанные записи. Если записи в реестрах изначально защищены от изменения, то можно не опасаться, что они будут искажены или подделаны. Но распределенная пиринговая система реестров, которые невозможно изменить, выглядит весьма защищенной, но практически бесполезной, потому что не позволяет добавлять новых транзакций. Таким образом, трудность при использовании структуры данных блокчейна заключается в том, что она должна быть неизменяемой, с одной стороны, но при этом допускать возможность добавления новых транзакций – с другой. Эти требования кажутся несовместимыми, тем не менее это осуществимо с помощью технического приема, описанного в главе 16. В результате в структуру данных блокчейна становится возможным только добавление данных: разрешено добавление новых транзакций, но практически невозможно изменение данных, добавленных ранее.
Задача 5: распространение реестров
Сделав реестр доступным только для добавления новых данных, вы уже можете создать распределенную пиринговую систему реестров, разрешив копирование всем партнерам. Но простое копирование реестров с защитой от изменения хронологии не соответствует главной цели. В распределенной системе управления правами владения предполагается соответствующее взимодействие между партнерами или узлами. В главе 17 рассматривается, каким образом взаимодействуют узлы системы и какой информацией они обмениваются.
Задача 6: добавление новых транзакций в реестры
Распределенная пиринговая система формируется из участников, компьютеры которых обслуживают отдельные копии структуры данных блокчейна с единственной возможностью добавления новых записей. Поскольку структура данных позволяет только добавлять данные новых транзакций, необходимо так организовать эту процедуру, чтобы добавлялись только законные и авторизованные транзакции. Это возможно, если разрешить всем участникам пиринговой системы добавлять новые данные и сделать каждого участника пиринговой системы контролером, наблюдающим за всеми остальными партнерами. В результате все партнеры будут контролировать друг друга и обнаруживать любые ошибки в системе. В главе 18 эта методика описана более подробно, а кроме того, рассматриваются мотивы, побуждающие партнеров исполнять подобные обязанности.
Задача 7: определение, в каких реестрах представлены правильные данные
После обеспечения возможности добавления новых транзакций в отдельные реестры пиринговой системы возникает проблема, типичная для любой распределенной пиринговой системы: разные партнеры могут принимать различные транзакции, и хронология обрабатываемых разными узлами транзакций очень быстро становится несогласованной. То есть в пиринговой системе могут существовать отличающиеся друг от друга версии хронологии транзакций. Так как хронология транзакций является основой для определения законных владельцев, наличие противоречащих друг другу хронологий транзакций становится серьезной угрозой целостности всей системы. Поэтому важно найти способ предотвращения появления различных версий хронологии транзакций или методику, определяющую, в какой версии хронологии транзакций представлены правильные данные. Первый подход невозможен из-за самой сущности полностью распределенных пиринговых систем. Поэтому необходим критерий определения и выбора одной хронологии транзакций, содержащей корректные данные. Но здесь возникает другая проблема: отсутствие в полностью распределенной пиринговой системе центрального узла авторизации, который мог бы определить, какая из хронологий транзакций должна быть выбрана. Эту проблему можно решить, если предоставить каждому узлу пиринговой системы право самостоятельного выбора корректной хронологии транзакций. При таком подходе большинство партнеров независимо приходит к единому решению. К тому же оказывается, что способ, которым блокчейн обеспечивает только добавление новых транзакций в структуру данных блокчейна, уже содержит решение описанной выше проблемы. В главе 19 подробно рассматриваются критерии выбора корректной хронологии транзакций и способы их применения.
//-- Перспектива --//
В этой главе определены семь задач, из которых состоит процесс проектирования в соответствии с концепциями, заложенными в основу блокчейна. После выполнения этих задач вы достигнете вершины: полного понимания технологии блокчейна. В главе 21 все эти концепции будут сведены в единое целое и позволят вам увидеть общую картину результата обучения. Глава 21 является обзорной, так же как и текущая глава, но она обобщает все технические знания, полученные вами на этом этапе обучения.
//-- Резюме --//
• При проектировании и разработке программного обеспечения, управляющего правом владения в полностью распределенной пиринговой системе, необходимо решить следующие задачи:
– описание права владения;
– защита права владения;
– хранение данных транзакций;
– подготовка реестров к распространению в ненадежной среде;
– распространение реестров;
– добавление новых транзакций в реестры;
– определение, в каких реестрах представлены правильные данные.
• Задачи, кратко описанные в этой главе, будут более подробно рассматриваться в следующих двенадцати главах.
Глава 9
Документирование права владения
Использование хронологической последовательности в качестве подтверждения текущего состояния прав владения
В этой главе рассматривается задача описания права владения способом, удобным для применения в полностью распределенной пиринговой системе реестров. Здесь объясняется, как блокчейн документирует право владения и выполняет процедуру передачи прав владения. Кроме того, в этой главе особенно отмечается важность порядка, в котором документируется передача прав владения. В конце главы также подчеркивается важность обеспечения целостности данных транзакций для сохранения целостности всей системы.
//-- Метафора --//
Эстафета – это забег команд бегунов, в котором каждый член команды пробегает только часть всей дистанции. Во время забега каждый бегун обязательно должен передать специальный предмет, так называемую эстафетную палочку, следующему бегуну в пределах определенной зоны, обозначенной на беговой дорожке. В любой момент забега только один член каждой соревнующейся команды несет эстафетную палочку. Чтобы определить, какой именно спортсмен из конкретной команды несет эстафетную палочку в текущий момент, достаточно знать, кому из членов этой команды была передана палочка во время последней передачи.
Для постоянного отслеживания владения эстафетной палочкой в любой момент времени необходимо фиксировать время каждой передачи и имена спортсменов, принимающих участие в эстафете. В этой главе рассматривается, как блокчейн трактует право владения в форме, до некоторой степени напоминающей владение и передачу палочки в эстафете.
//-- Цель --//
Главной целью является документирование права владения абсолютно понятным для всех способом. Каждому читающему документацию должна быть предоставлена возможность сделать однозначное заключение о связи объектов и их владельцев.
//-- Главная задача --//
Главная задача – поиск документации, которая не только объявляет владельца какого-либо объекта, но и предоставляет обоснование факта владения, следовательно, является доказательством права владения.
//-- Основная идея --//
Вместо описания текущего состояния прав владения по инвентаризационным данным (то есть по списку имеющихся в настоящее время объектов собственности всех владельцев) обслуживается список всех фактов передачи права владения в реестре в оперативном режиме. Каждая передача права владения описывается данными транзакции, которые ясно указывают, какой владелец передает право владения, передаваемый объект, кому передается право и в какое время. Полная хронологическая запись данных транзакции, сохраняемая в реестре, становится контрольной журнальной записью, которая свидетельствует о том, каким образом то или иное лицо получило объект собственности [26]. Это равнозначно отслеживанию факта передачи палочки в эстафетном забеге, что позволяет впоследствии воспроизвести ход всего забега в целом.
//-- Краткое отступление по поводу инвентаризационной ведомости и данных транзакции --//
Существуют два противоположных способа описания права владения – данные инвентаризационной ведомости и данные транзакций. Данные инвентаризационной ведомости (inventory data) описывают текущее состояние объектов собственности. Это похоже на проверку банковского счета, при которой предъявляется только денежная сумма, доступная в текущий момент. Данные транзакций (transaction data) описывают факты передачи права владения. Это похоже на проверку банковского счета, при которой предъявляется список всех операций по вкладам, снятиям и переводам денег. По полному списку данных транзакций можно сформировать данные инвентаризационной ведомости. За исключением того, что и инвентаризационная ведомость, и данные транзакций описывают права владения, основополагающие принципы этих двух подходов полностью противоположны. Данные инвентаризационной ведомости лишь утверждают или объявляют право владения, тогда как данные транзакций разъясняют, следовательно, обосновывают право владения. Тем не менее данные инвентаризационной ведомости часто считаются более удобными, так как они непосредственно отображают факт, в котором заинтересовано большинство людей, а именно текущее состояние объектов собственности.
//-- Как это работает --//
Документирование прав владения с помощью блокчейна связано со следующими аспектами:
• описание передачи права владения;
• обслуживание хронологии передач права владения.
Описание передачи права владения
Транзакция (transaction) – это акт передачи права владения от текущего владельца другому лицу. Акт передачи права владения основан на данных, которые описывают предполагаемую передачу. Эти данные содержат всю информацию, необходимую для осуществления передачи права владения. Примером данных, описывающих предполагаемую передачу права владения, может служить форма банковского перевода, используемого для запроса к банку на перевод определенной денежной суммы от лица клиента. Форма банковского перевода предлагает предоставить всю информацию, необходимую для того, чтобы банк смог выполнить этот перевод от лица клиента. Подобным образом информация, используемая блокчейном для описания транзакции, содержит следующие элементы:
• идентификатор учетной записи, из которой право владения передается в другую учетную запись;
• идентификатор учетной записи, которая принимает право владения;
• количество передаваемых объектов владения (продукции);
• время, в которое выполняется данная транзакция;
• выплата системе за выполнение транзакции;
• подтверждение того, что владелец учетной записи, из которой передается право владения, действительно согласен с фактом передачи права.
Большинство этих данных знакомо каждому, кто когда-либо переводил деньги через банк. Но аналогия с банковским переводом перестает быть верной, когда рассматриваются платежи. Банки являются централизованными учреждениями, поэтому используют централизованную систему обслуживания платежей, применяемую для всех клиентов. В противоположность этому блокчейн представляет собой распределенную систему без центрального пункта управления. То есть блокчейн не имеет возможности централизованно выполнять платежи. При использовании блокчейна каждый пользователь должен заранее сообщить системе, сколько он собирается заплатить за выполнение планируемой транзакции. Учетная запись, передающая право владения, оплачивает также и саму транзакцию.
Обслуживание хронологии актов передачи прав
Данные транзакций предоставляют обязательную информацию, необходимую для выполнения передачи права владения в надлежащем порядке. Выполнение транзакции означает проведение процедуры передачи права владения в полном соответствии с данными этой транзакции. Выполнение транзакции означает добавление данных транзакции в реестр. После добавления данных транзакции в реестр эта транзакция становится частью хронологии транзакций, которая используется для точного определения права владения. Когда в очередной раз реестр применяется для определения права владения, объединяя все содержащиеся в нем данные транзакций, новая добавленная транзакция тоже будет включена в эту совокупность, следовательно, повлияет на итоговое состояние прав владения.
Блокчейн обслуживает полную хронологию всех выполненных транзакций, сохраняя соответствующие данные транзакций в структуре данных блокчейна в том порядке, в котором они выполнялись. Если какая-то транзакция не является частью этой хронологии, то считается, что она никогда не выполнялась. Таким образом, добавление данных транзакции в структуру данных блокчейна означает, что эта транзакция действительно имела место, и позволяет ей оказывать воздействие на результат обработки хронологии с целью точного определения текущего владельца.
//-- Почему это работает --//
Поскольку данные транзакции содержат всю информацию об учетной записи, передающей право владения, об учетной записи, принимающей право владения, об объектах передачи и передаваемом количестве, информация о текущем состоянии прав владения для каждой учетной записи может быть сформирована в любое время при условии доступности полной хронологии транзакций. Таким образом, полная хронология всех данных транзакций вполне достаточна для документирования прав владения.
//-- Важность упорядоченности --//
Объединение данных транзакций выполняется для восстановления текущего состояния прав владения и точного определения конкретных прав владения. Важно понимать, что порядок выполнения транзакций должен быть сохранен для получения корректного результата при каждой операции объединения данных транзакций. Изменение порядка данных транзакций искажает результат их объединения. На первый взгляд, результат не должен существенно измениться, если я сначала получил от друга денежный перевод на сумму $50, затем перевел эти $50 для оплаты счета, даже если эти транзакции взять в обратном порядке. Но что произойдет, если мой банковский счет абсолютно пуст и снятие денег невозможно? В этом случае возможность оплатить счет зависит от того, получил ли я сначала перевод от друга. В противном случае банк запретит перевод денег для оплаты счета из-за отсутствия денег на банковском счете. Поэтому порядок выполнения транзакций чрезвычайно важен.
//-- Целостность хронологии транзакций --//
Можно без преувеличения сказать, что хронология транзакций является сердцем любой блокчейн-системы, управляющей правами владения, потому что хронология есть основа восстановления состояния прав владения. Поэтому необходимо следить за тем, чтобы хронология данных транзакций была защищенной, полной, корректной и логически согласованной для обеспечения целостности всей системы и для того, чтобы сохранять возможность вывода правильных заключений о текущем состоянии прав владения. Таким образом, блокчейн-система должна обеспечить средства защиты, гарантирующие, что в структуру данных блокчейна добавляются только действительно законные данные транзакций. При определении законности данных транзакций рассматриваются три аспекта:
• формальная корректность;
• семантическая (смысловая) корректность;
• авторизация.
Формальная корректность
Формальная корректность (formal correctness) означает, что описание транзакции содержит все требуемые данные, представленные в корректном формате.
Семантическая (смысловая) корректность
Семантическая (смысловая) корректность (semantic correctness) основное внимание уделяет смысловому значению данных транзакции и предполагаемому воздействию этих данных на результат. Таким образом, при проверке семантической корректности необходимы знания из прикладной области. Исследование семантической корректности часто основано на практических правилах ведения дел, таких как:
• не передает ли учетная запись количество объектов собственности, превышающее текущее количество объектов, находящееся в ее владении;
• предотвращение двойного расходования;
• ограничение количества объектов, передаваемых в одной транзакции;
• ограничение количества транзакций для одного пользователя;
• ограничение суммарного количества объектов, расходуемых (передаваемых) за определенный интервал времени;
• установление минимального интервала времени, в течение которого объект обязательно должен оставаться в собственности учетной записи, прежде чем появится возможность дальнейшей передачи права владения этим объектом.
Авторизация
Только владельцу учетной записи, передающей право владения, разрешено обращаться к блокчейн-системе для выполнения транзакции от своего лица. Поэтому блокчейн требует, чтобы в каждой транзакции содержалась информация, подтверждающая, что владелец учетной записи, выполняющей передачу права, действительно согласен с фактом этой передачи.
//-- Перспектива --//
В этой главе рассматривались транзакции и их роль в определении права владения. Следующие главы в основном посвящены тому, как технология блокчейна обеспечивает добавление только проверенных корректных данных транзакций в хронологию и как осуществляется защита хронологии транзакций от искажений и подделок.
//-- Резюме --//
• Данные транзакций предоставляют следующую информацию для описания передачи прав владения:
– идентификатор учетной записи, из которой право владения передается в другую учетную запись;
– идентификатор учетной записи, которая принимает право владения;
– количество передаваемых объектов владения (продукции);
– время, в которое выполняется данная транзакция;
– денежный взнос, выплачиваемый системе за выполнение транзакции;
– подтверждение того, что владелец учетной записи, из которой передается право владения, действительно согласен с фактом передачи права.
• Полная хронологическая запись данных транзакции, сохраняемая в реестре, становится контрольной журнальной записью, которая свидетельствует о том, каким образом то или иное лицо получило объект собственности.
• Если какая-то транзакция не является частью хронологии транзакций, то считается, что она никогда не выполнялась.
• Добавление данных транзакции в структуру данных блокчейна означает, что эта транзакция действительно имела место, и позволяет ей оказывать воздействие на результат обработки хронологии с целью точного определения текущего владельца.
• Порядок выполнения транзакций и добавления их в хронологию должен быть сохранен для получения корректного результата при каждой операции объединения данных транзакций.
• Для обеспечения целостности в структуру данных блокчейна добавляются только данные транзакций, соответствующие следующим трем критериям:
– формальная корректность;
– семантическая (смысловая) корректность;
– авторизация.
Глава 10
Хэширование данных
Идентификация данных по их цифровым отпечаткам пальцев
В этой главе рассматривается одна из наиболее важных технологий, лежащих в основе блокчейна: хэш-значения (hash values). Здесь обсуждаются важные свойства криптографических хэш-функций и демонстрируются типовые примеры применения хэш-функций к данным.
//-- Метафора --//
Отпечатки пальцев – это следы контакта с какой-либо поверхностью складок кожи всех или некоторых пальцев человеческой руки. Считается, что с помощью отпечатков пальцев можно однозначно идентифицировать человека. Исследование отпечатков пальцев применяется при расследовании преступлений, для установления личности правонарушителей и для оправдания невиновных. В этой главе вводится концепция идентификации данных, которую можно рассматривать как цифровой аналог отпечатков пальцев. Эта концепция называется криптографическим хэш-значением (cryptographic hash value), и технология блокчейна активно ее использует. Таким образом, понимание криптографического хэширования является обязательным условием для понимания технологии блокчейна.
//-- Цель --//
В распределенной пиринговой системе вы имеете дело с огромным объемом данных транзакций. При этом необходимы однозначная идентификация этих данных и их сравнение наиболее быстрым и простым способом. Следовательно, устанавливается цель – идентифицировать данные транзакций и, возможно, любые типы данных вполне однозначным образом по их цифровым отпечаткам пальцев.
//-- Как это работает --//
Хэш-функции – это небольшие компьютерные программы, которые выполняют преобразование любого типа данных в число определенной длины вне зависимости от размера исходных данных [38]. Хэш-функции получают доступ только к одному фрагменту данных в любой рассматриваемый момент времени, используют этот фрагмент как входные данные и создают хэш-значение (hash value) на основе значений битов и байтов, составляющих исходные данные. Хэш-значения могут содержать начальные незначащие нули для обеспечения требуемой длины числа. Существует много версий хэш-функций, отличающихся друг от друга длиной генерируемых ими хэш-значений. Важная группа хэш-функций носит название криптографические хэш-функции (cryptographic hash functions). Эти функции создают цифровые отпечатки пальцев для любых типов данных. Криптографические хэш-функции обладают следующими свойствами [31]:
• быстрая генерация хэш-значений для любого типа данных;
• детерминированность;
• обеспечение псевдослучайности хэш-значений;
• односторонние функции;
• устойчивость к коллизиям.
Быстрая генерация хэш-значений для любого типа данных
Это свойство в действительности является сочетанием двух свойств. Во-первых, хэш-функция способна вычислять хэш-значения для любых типов данных. Во-вторых, хэш-функция производит эти вычисления быстро. Оба эти свойства важны, поскольку крайне нежелательно, чтобы хэш-функция делала бесполезные вещи, например выдавала сообщения об ошибках или тратила огромное количество времени на получение результатов.
Детерминированность
Детерминированность (deterministic) означает, что хэш-функция всегда выдает одинаковые хэш-значения для одинаковых входных данных. Таким образом, любые замеченные несовпадения в хэш-значениях всегда должны считаться следствием несоответствий во входных данных, а не внутренних действий хэш-функции.
Обеспечение псевдослучайности хэш-значений
Псевдослучайность (pseudorandom) означает, что значение, возвращаемое хэш-функцией, непредсказуемо изменяется при изменении входных данных. Даже если изменение входных данных крайне незначительно, выдаваемое хэш-значение будет другим, и предсказать его невозможно. Другими словами, хэш-значение измененных данных всегда должно быть неожиданным. Поэтому необходимо обеспечить невозможность предсказания хэш-значения на основе входных данных.
Односторонние функции
Односторонняя функция (one-way function) не позволяет никаким способом получить входные данные из возвращаемого значения. То есть одностороннюю функцию невозможно использовать в обратном порядке. Другими словами, невозможно восстановить исходные данные по полученному хэш-значению. Это означает, что хэш-значения ничего не сообщают о содержимом входных данных – точно так же, как отдельный отпечаток пальца ничего не говорит о человеке, оставившем его. Односторонние функции также называют необратимыми (noninvertible).
Устойчивость к коллизиям
Хэш-функцию называют устойчивой к коллизиям (collision resistant), если очень трудно найти два или более различных фрагмента данных, для которых она выдает одинаковые хэш-значения. Другими словами, если вероятность получения одинаковых хэш-значений для различных фрагментов данных мала, то такая хэш-функция является устойчивой к коллизиям. В этом случае можно считать, что хэш-значения, генерируемые этой хэш-функцией, уникальны и могут использоваться для однозначной идентификации данных. Если получены одинаковые хэш-значения для различных фрагментов данных, то налицо коллизия хэш-функции. Коллизия хэш-функций (hash collision) представляет собой цифровой эквивалент наличия двух людей с одинаковыми отпечатками пальцев. Устойчивость к коллизиям является обязательным условием для хэш-значений, применяемых в качестве цифровых отпечатков пальцев. Внутренняя реализация устойчивости к коллизиям в хэш-функциях не рассматривается в данной книге, но вы можете быть уверенными в том, что разработчики затратили немало усилий для снижения вероятности возникновения хэш-коллизий.
//-- Проверка на практике --//
Этот раздел поможет вам приобрести уверенность при использовании хэш-функций. Для этого приводится простой пример. Я предлагаю читателям посетить веб-сайт, предоставляющий инструментальное средство создания хэш-значений для простых текстовых данных: http://www.blockchain-basics.com/HashFunctions.html.
После перехода на эту веб-страницу в браузере вы увидите панель ввода и панель вывода, как показано на рис. 10.1. Введите текст «Hello World!» в панели ввода слева и щелкните по кнопке с надписью «Calculate Hash Value» (Вычислить хэш-значение), расположенной ниже текстового поля ввода. Будьте внимательны и точно наберите текст в поле ввода, иначе выведенные результаты будут отличаться от показанных на рис. 10.1.
Рис. 10.1 Вычисление хэш-значений короткого фрагмента текста
После щелчка по кнопке в панели вывода справа появятся хэш-значения для введенного текста, вычисленные с помощью четырех различных хэш-функций. Хэш-значения часто рассматриваются как хэш-числа, поскольку в них используются не только цифры от 0 до 9, но и буквы латинского алфавита от A до F, представляющие значения от 10 до 15 соответственно. Такие числа называются шестнадцатеричными (hexadecimal numbers). ИТ-специалисты используют эти числа по причинам, которые мы не будем здесь обсуждать. Отметим, что показанные на рисунке хэш-значения неодинаковы из-за различий в подробностях реализации хэш-функций, генерирующих эти значения. Будем считать доказанной правильность этих значений, иначе можно просто заблудиться в хитросплетениях обширной темы реализации хэш-функций.
Длина криптографических хэш-значений достаточно велика, поэтому они трудны для чтения, тем более для сравнения человеком. Но по ходу текущей главы мы все же будем сравнивать различные методы хэширования данных, применяя для этого чтение и сравнение хэш-значений. Подобные действия с криптографическими хэш-значениями быстро становятся утомительной задачей. Поэтому в учебных целях я воспользовался укороченной версией криптографического хэш-значения SHA256 в оставшейся части главы. Все хэш-значения можно воспроизвести с помощью инструментального средства, предоставленного страницей вебсайта: http://www.blockchain-basics.com/Hashing.html.
После перехода на эту веб-страницу в браузере вы увидите панель ввода простых текстов и кнопку со стрелкой, указывающей на панель вывода, как показано на рис. 10.2. При щелчке по кнопке со стрелкой в панели вывода появится укороченное хэш-значение для текста, набранного в панели ввода.
Рис. 10.2 Вычисление укороченного хэш-значения для текста
//-- Шаблоны хэширования данных --//
К настоящему моменту вы узнали, что фрагмент данных может использоваться как входные данные для хэш-функции, которая генерирует хэш-значение для этих данных. Предполагается, что каждый независимый фрагмент данных имеет собственное уникальное криптографическое хэш-значение. Но что следует делать, если вас попросили предоставить единое хэш-значение для набора независимых фрагментов данных? Ведь мы помним, что хэш-функции принимают только один фрагмент данных. Нет хэш-функций, принимающих одновременно набор независимых данных, но на практике часто необходимо объединенное хэш-значение для большого набора данных. В частности, структура данных блокчейна работает со множеством данных транзакций и требует одного хэш-значения для всего объема данных в целом. Как решить эту задачу?
Ответ заключается в использовании следующих шаблонов применения хэш-функций к данным:
• независимое хэширование;
• повторяющееся хэширование;
• комбинированное хэширование;
• последовательное хэширование;
• иерархическое хэширование.
Независимое хэширование
Независимое хэширование (independent hashing) означает применение хэш-функции к каждому фрагменту данных независимо друг от друга. На рис. 10.3 схематически показана эта концепция, согласно которой отдельно вычисляется укороченное хэш-значение для двух различных слов.
Каждый белый прямоугольник на схеме содержит слово, представляющее хэшируемые данные, а в серых кругах показаны соответствующие хэш-значения. Стрелки, направленные от прямоугольников к кругам, обозначают процедуру преобразования данных в хэш-значения. По рис. 10.3 можно видеть, что по различным словам генерируются различные хэш-значения.
Рис. 10.3 Схема независимого хэширования двух различных фрагментов данных
Вам уже известно, что хэш-функции выполняют преобразование любого произвольного фрагмента данных в хэш-значение. Само хэш-значение может рассматриваться как фрагмент данных. Поэтому существует возможность передачи хэш-значения как входных данных в хэш-функцию и вычисления нового хэш-значения. Это действительно работает. Повторяющееся хэширование – это повторное применение хэш-функции к ее собственным выходным данным. На рис. 10.4 схематически изображена концепция повторного вычисления укороченного хэш-значения. Для текста «Hello World!» генерируется хэш-значение 7F83B165, которое, в свою очередь, дает укороченное хэш-значение 45A47BE7.
Рис. 10.4 Схема повторного вычисления хэш-значений
Комбинированное хэширование
Цель комбинированного хэширования – получение единственного хэш-значения для нескольких фрагментов данных за одно обращение к функции. Объединение всех независимых фрагментов данных в один блок данных с последующим вычислением его хэш-значения является способом достижения этой цели. В частности, это удобно, если нужно создать одно хэш-значение для набора данных, доступных в определенный момент времени. Поскольку операция объединения данных требует вычислительных ресурсов, времени и некоторого объема памяти, комбинированное хэширование должно применяться только для небольших фрагментов данных. Другой недостаток комбинированного хэширования – хэш-значения отдельных фрагментов данных недоступны, так как хэш-функция обрабатывает только объединенные данные.
На рис. 10.5 показана схема концепции комбинированного хэширования. Сначала отдельные слова объединяются в одно слово с символом пробела между ними, после чего полученная фраза хэшируется. Полученное хэш-значение, показанное на рис. 10.5, совпадает с первым хэш-значением на рис. 10.4, что вполне объяснимо. Отметим, что хэш-значение объединенных данных напрямую зависит от способа объединения данных. На рис. 10.5 два слова были объединены простым последовательным размещением с символом пробела между ними, что в результате составило фразу «Hello World!». Иногда для обозначения места объединения данных используются специальные символы, такие как плюс (+) или хэштег (#), и это влияет на итоговое хэш-значение.
Рис. 10.5 Объединение данных и последующее вычисление хэш-значения
Последовательное хэширование
Цель последовательного хэширования – последовательное (инкрементальное) обновление хэш-значения по мере поступления новых данных. Для этого одновременно используются комбинированное и повторяющееся хэширования. Существующее хэш-значение объединяется с новыми данными, затем передается в хэш-функцию для получения обновленного хэш-значения. Последовательное хэширование особенно удобно, если нужно сопровождать единственное хэш-значение в течение некоторого времени и обновлять его сразу же после поступления новых данных. Преимущество этого типа хэширования заключается в том, что в любой момент времени имеется определенное хэш-значение, изменения которого можно проследить в обратном порядке, восстановив состояние до получения новых данных.
На рис. 10.6 схематично показана концепция последовательного хэширования, в соответствии с которой сначала отдельно обрабатывается слово Hello, и в результате получается укороченное хэш-значение 185F8DB3. После получения новых данных, представленных словом World! эти данные объединяются с существующим хэш-значением, и объединенный блок передается как входные данные в хэш-функцию. Для исходного текста World! 185F8DB3 генерируется укороченное хэш-значение 5795A986.
Рис. 10.6 Последовательное вычисление хэш-значений
Иерархическое хэширование
На рис. 10.7 показана концепция иерархического хэширования.
Рис. 10.7 Вычисление хэш-значений по иерархической схеме
Применение комбинированного хэширования к паре хэш-значений образует небольшую иерархию с отдельным хэш-значением в вершине. Подобно комбинированному хэшированию, основная идея иерархического хэширования состоит в создании единственного хэш-значения для набора данных. Иерархическое хэширование более эффективно, потому что в этом случае объединяются хэш-значения, уже имеющие фиксированный размер, а не исходные данные, размер которых может быть произвольным. Кроме того, при иерархическом хэшировании на каждом шаге объединяются только два хэш-значения, в то время как при комбинированном хэшировании объединяются все одновременно обрабатываемые фрагменты данных.
//-- Перспектива --//
В этой главе описывались теоретические концепции хэш-функций. В главе 11 рассматривается, как хэш-значения используются в реальной жизни, и особое внимание уделяется их применению в технологии блокчейна.
//-- Резюме --//
• Хэш-функции выполняют преобразование любого типа данных в число определенной длины вне зависимости от размера исходных данных.
• Существует много версий хэш-функций, отличающихся друг от друга длиной генерируемых ими хэш-значений.
• Криптографические хэш-функции представляют собой важную группу хэш-функций, которые создают цифровые отпечатки пальцев для любых типов данных.
• Криптографические хэш-функции обладают следующими свойствами:
– быстрая генерация хэш-значений для любого типа данных;
– детерминированность;
– обеспечение псевдослучайности хэш-значений;
– односторонние функции;
– устойчивость к коллизиям.
• Применение хэш-функций к данным может быть выполнено по следующим шаблонам или типовым схемам:
– независимое хэширование;
– повторяющееся хэширование;
– комбинированное хэширование;
– последовательное хэширование;
– иерархическое хэширование.
Глава 11
Хэширование на практике
Рассказ о сравнении данных и создании вычислительных головоломок
В главе 10 были представлены криптографические хэш-функции, а также рассматривались различные схемы применения хэш-функций к данным. Глава 10 может показаться скучной теоретической лекцией, но в действительности она имеет большое практическое значение. В текущей главе все внимание сосредоточено на практическом применении хэш-функций и хэш-значений в реальном мире. Рассматриваются основные варианты использования хэш-функций на практике и излагаются идеи, на которых основаны эти варианты. Также кратко объясняется, почему описываемые варианты использования работают именно так, как предполагается. В конце главы рассматривается применение хэш-значений в технологии блокчейна.
//-- Сравнение данных --//
Это самый распространенный и самый понятный вариант использования хэш-значений, поэтому сравнение данных на основе их хэш-значений рассматривается в первую очередь.
Цель
Целью является сравнение данных (например, файлов или данных транзакций) без выполнения последовательного сравнения их содержимого по отдельным компонентам, а также реализация сравнения любых типов данных вне зависимости от их размера и содержимого в такой же простой форме, как сравнение двух чисел.
Основная идея
Вместо явного последовательного сравнения содержимого данных по отдельным компонентам сравниваются их криптографические хэш-значения.
Как это работает
Вычисляются и сравниваются криптографические хэш-значения всех исследуемых данных. Если все криптографические хэш-значения различны, то все рассматриваемые данные также различны. Если какие-либо криптографические хэш-значения одинаковы, то соответствующие исходные данные также одинаковы [36].
Почему это работает
Сравнение данных по их криптографическим хэш-значениям работает благодаря устойчивости к коллизиям криптографических хэш-функций.
//-- Обнаружение изменений в данных --//
Концепцию сравнения данных на основе их хэш-значений легко расширить до варианта обнаружения изменений в данных.
Цель
Определить, изменялись ли данные (например, файл или данные транзакции), которые не должны подвергаться каким-либо изменениям, после конкретной даты, или после передачи их кому-либо, или после операции их сохранения в базе данных.
Основная идея
Сравнение криптографического хэш-значения исследуемых данных, вычисленного ранее, с новым криптографическим хэш-значением для тех же данных является основой процедуры обнаружения изменений. Если оба хэш-значения одинаковы, то данные не изменялись с момента генерации старого хэш-значения.
Как это работает
Генерируется криптографическое хэш-значение для данных, которые должны оставаться неизменными. В дальнейшем при необходимости проверки неизменности этих данных генерируется новое криптографическое хэш-значение этих же данных. Затем сравниваются новое и старое хэш-значения. Если оба значения одинаковы, то данные не изменились. В противном случае данные были изменены в интервале времени, прошедшем с момента создания первого хэш-значения. Точно такой же подход можно применять при передаче данных кому-либо. Перед отправкой данных генерируется первое хэш-значение, затем получатель вычисляет хэш-значение для принятых данных, после чего отправитель и получатель сравнивают оба хэш-значения. Если значения одинаковы, то в процессе передачи данные не изменились.
Почему это работает
Обнаружение изменений в данных в действительности представляет собой процесс сравнения одних и тех же данных до и после определенных событий, например по истечении некоторого интервала времени, после сохранения или извлечения из базы данных или после передачи данных по сети. Обнаружение изменений в данных, которые должны оставаться неизменными, работает благодаря устойчивости к коллизиям криптографических хэш-функций.
//-- Обращение к данным, которые не должны изменяться --//
Сравнение данных и обнаружение изменений на основе соответствующих хэш-значений можно считать основными вариантами применения хэш-значений. Немного более сложный вариант – обращение к данным по хэш-ссылкам – рассматривается ниже.
Цель
Целью являются обращение к данным (например, к данным транзакции), которые хранятся где-либо отдельно (например, на жестком диске или в базе данных), и подтверждение того, что эти данные не изменились.
Основная идея
Объединение криптографического хэш-значения для хранимых данных с информацией о месте размещения этих данных. При каких-либо изменениях данных обе части информации перестают быть согласованными, следовательно, хэш-ссылка становится некорректной.
Как это работает
Ссылки на данные являются цифровым аналогом номерков (жетонов) в гардеробе. Гардеробный жетон указывает место хранения вашей куртки на гардеробных вешалках. Жетон необходим для получения своей куртки после хранения. В ИТ-области ссылки на данные работают аналогичным образом: это фрагменты данных, которые указывают (ссылаются) на другие данные. Компьютерные программы используют ссылки для обозначения мест хранения данных и последующего извлечения этих данных при необходимости. Хэш-ссылки (hash references) – это особый тип ссылок, использующих мощь криптографических хэш-значений. Для упрощения можно считать хэш-ссылки «гардеробными номерками», на которых обозначены хэш-значения вместо обычных чисел.
Хэш-ссылки указывают на другие данные, а кроме того, позволяют проверить тот факт, что данные не изменились с момента создания этой ссылки. В случае изменения данных по ссылке сама ссылка уже не позволяет извлечь данных. Такая хэш-ссылка считается поврежденной или некорректной. Это похоже на ситуацию с гардеробным номерком, который соответствует крючку вешалки, на котором уже нет вашей куртки. Гардеробщик не может выдать отсутствующую куртку.
Общая концепция хэш-ссылки – предотвращение извлечения пользователями данных, которые были изменены случайно из-за технических ошибок или преднамеренно некоторым лицом, не сообщившим об этом пользователям. Таким образом, хэш-ссылки используются во всех случаях, когда предполагается неизменность данных после их создания.
Схематическое описание
Технология блокчейна тесно связана с хэш-ссылками. Поэтому понимание их функционирования чрезвычайно важно для понимания блокчейна и для дальнейшего изучения материала книги. Следующие три рисунка позволяют достичь двух целей: во-первых, они схематически изображают функционирование хэш-ссылок. Во-вторых, на них показано графическое представление хэш-ссылок, которое будет использоваться и в следующих главах на схемах функционирования структур данных блокчейна.
На рис. 11.1 показана схема функционирования корректной хэш-ссылки. Серый кружок с надписью R1 обозначает корректную хэш-ссылку. Белый прямоугольник представляет некоторые данные, которые предположительно не должны изменяться. Стрелка от кружка к прямоугольнику соответствует функциональности хэш-ссылки и указывает направление от ссылки к соответствующим данным.
Рис. 11.1 Схематическое изображение корректной хэш-ссылки
На рис. 11.2 показано символическое представление поврежденной или некорректной хэш-ссылки.
Рис. 11.2 Схематическое изображение некорректной хэш-ссылки
Черный прямоугольник содержит измененную фразу, представляющую данные, изменения в которые были внесены после создания ссылки. Серый кружок продолжает обозначать изначально созданную хэш-ссылку. Молниеобразная стрелка от кружка к прямоугольнику подчеркивает, что хэш-ссылка R1 повреждена и больше не может обеспечить доступ к данным, потому что они были недавно изменены.
На рис. 11.3 показана ситуация, в которой новая хэш-ссылка была создана после изменения данных. Это состояние обозначено в виде черного прямоугольника с измененными данными, черного кружка, соответствующего новой созданной хэш-ссылке, и прямой стрелки, указывающей направление от кружка к прямоугольнику.
Рис. 11.3 Схематическое изображение новой созданной хэш-ссылки после изменения данных
Почему это работает
Главной особенностью хэш-ссылок является использование криптографических хэш-значений, которые могут рассматриваться как неповторяющиеся отпечатки пальцев данных. Поэтому весьма маловероятно, что два различных фрагмента данных будут иметь одинаковое хэш-значение. Таким образом, поврежденная хэш-ссылка рассматривается как доказательство факта изменения данных после создания этой ссылки.
//-- Хранение данных, которые не должны изменяться --//
Концепцию ссылки на данные на основе их хэш-значений можно развивать и дальше. Естественным продолжением является хранение данных, изменение которых нежелательно или вообще недопустимо.
Цель
Хранение большого объема данных, например данных транзакций, которые должны оставаться неизменными. Любые изменения таких данных необходимо выявлять быстро и просто.
Основная идея
Номерки в гардеробе указывают на крючки вешалки, на которых висят куртки. Это просто и понятно. Но что мешает положить номерок в карман другой куртки и также сдать эту вторую куртку в гардероб? Второй номерок указывает на куртку, в кармане которой находится номерок, указывающий на другую куртку. В действительности можно создавать длинные и сложные цепочки курток с номерками в их карманах, указывающими на другие куртки, в карманах которых также находятся номерки, и так до бесконечности. Точно так же можно хранить данные с хэш-ссылками, указывающими на другие данные, в которых содержатся хэш-ссылки на следующие данные, и т. д. Если какие-либо данные или хэш-ссылки изменяются после создания, то все ссылки становятся поврежденными. Поскольку поврежденные хэш-ссылки служат доказательством факта изменения данных после создания этих ссылок, вся структура в целом хранит данные способом, при котором любые изменения сразу выявляются.
Как это работает
Существуют два типовых общеизвестных шаблона использования хэш-ссылок для хранения данных, которые не должны изменяться:
• цепочка (chain);
• дерево (tree).
Цепочка
Цепочка связанных данных, также называемая связанным списком (linked list) [9], образуется, когда каждый фрагмент данных содержит хэш-ссылку на другой фрагмент данных. Такая структура удобна для хранения и объединения данных, если не требуется одновременный доступ ко всем данным сразу, а выполняется последовательный проход по фрагментам. На рис. 11.4 показана схема этого подхода с использованием условных символьных обозначений, введенных в предыдущем разделе. Создание цепочки начинается с фрагмента данных «Данные 1» и хэш-ссылки R1. Как начальный фрагмент «Данные 1» не содержит никакой хэш-ссылки. Когда поступают новые данные, они размещаются вместе с хэш-ссылкой, указывающей на фрагмент «Данные 1». Хэш-ссылка R2 указывает на новые, только что полученные данные и на хэш-ссылку R1. Хэш-ссылка R3, которая указывает на фрагмент «Данные 3» и хэш-ссылку R2, создается точно так же.
Рис. 11.4 Данные, объединяемые в цепочку
Хэш-ссылка R3 – это все, что необходимо для доступа ко всем данным в цепочке в порядке, обратном по отношению ко времени их получения. Ссылка R3 также называется головой цепочки (head of the chain), потому что указывает на самый последний добавленный фрагмент данных. Очень важно не путать термин «голова» (head) (обозначающий фрагмент данных, который был добавлен самым последним) и термин «заголовок» (header), который будет рассматриваться в главе 14 при описании структуры данных блокчейна.
Дерево
На рис. 11.5 показано, как данные транзакций могут быть объединены с помощью хэш-ссылок в структуру, имеющую форму дерева.
Такую структуру также называют деревом Меркле (Merkle tree) [24], потому что ее впервые предложил использовать специалист по компьютерной криптографии Меркле (Merkle) и она действительно похожа на дерево, только перевернутое вверх корнем. Эта структура удобна для объединения множества различных фрагментов данных, доступ к которым обеспечивается одновременно через одну хэш-ссылку. Для формирования дерева, показанного на рис. 11.5, сначала создаются четыре фрагмента данных транзакций, изображенных в виде прямоугольников в нижней части схемы. В первую очередь создаются хэш-ссылки на отдельные фрагменты данных транзакций (R1-R4), после чего эти ссылки объединяются в пары. Далее создаются хэш-ссылки, указывающие на пары первых хэш-ссылок (R12 и R34). Процедура повторяется до тех пор, пока не будет создана единственная хэш-ссылка, которую также называют корнем (root) дерева Меркле (на схеме обозначена как R).
Рис. 11.5 Данные, объединяемые в древовидную структуру
Почему это работает
Описанные выше структуры хранят данные с возможностью обнаружения изменений в них, потому что в этих структурах данные объединяются и связываются с помощью хэш-ссылок. После создания ссылок любые изменения в соответствующих данных приводят к тому, что ссылки становятся поврежденными (некорректными). Таким образом, обнаружение поврежденной ссылки в подобной структуре является доказательством того факта, что данные были изменены после создания структуры. При корректности всех ссылок можно сделать вывод, что вся структура данных в целом не изменялась с момента своего создания.
//-- Выполнение долговременных вычислений --//
Хэш-значения пригодны не только для безопасного и эффективного выполнения простых операций, таких как сравнение, хранение и обеспечение доступа по ссылкам. Хэш-значения также можно использовать, чтобы позволить компьютерам обращаться к другим компьютерам для привлечения их к разработке головоломок (puzzles). Возможно, сейчас это кажется несколько странным, но в дальнейшем вы увидите, что такое применение хэш-значений является одной из наиболее важных концепций технологии блокчейна.
Цель
По причинам, которые станут понятными в следующих главах, может возникать необходимость в создании головоломок, требующих для решения определенных вычислительных ресурсов. Эти головоломки не должны решаться на основе знаний или данных, хранящихся где-либо, или с помощью мыслительных процессов, как при прохождении IQ-теста или теста, проверяющего знания в какой-либо области. Единственным способом решения таких головоломок являются использование только вычислительных мощностей и выполнение огромного объема вычислений.
Основная идея
Замок с секретным кодом – это особенный замок, открыть который можно только с помощью специальной последовательности цифр. Если такая последовательность неизвестна, то можно попытаться систематически перебирать все возможные комбинации до тех пор, пока не будет набрана правильная последовательность, открывающая замок. Эта процедура гарантирует, что замок будет открыт, но на ее выполнение затрачивается очень много времени. Систематический перебор всех возможных комбинаций не требует каких-либо знаний или логических рассуждений. Методика вскрытия кодового замка основана исключительно на усердной и кропотливой работе. Хэш-головоломки – это вычислительные головоломки, решение которых можно считать аналогом решения задачи вскрытия кодового замка методом проб и ошибок.
Как это работает
Ниже перечислены элементы хэш-головоломки [1]:
• исходные данные, которые не должны изменяться;
• данные, которые можно свободно изменять, так называемый одноразовый случайный код (nonce);
• применяемая хэш-функция;
• ограничения для хэш-значения по объединенному хэшированию, также называемые уровнем сложности (difficulty level).
На рис. 11.6 показано формирование хэш-головоломки. Метод объединенного хэширования применяется к исходным данным и одноразовому случайному коду (nonce). Полученное хэш-значение должно соответствовать заданным ограничениям.
Рис. 11.6 Схема создания хэш-головоломки
Хэш-головоломки можно решить только методом проб и ошибок. Требуется угадать одноразовый случайный код, вычислить хэш-значение для объединенных данных с помощью заданной хэш-функции, затем вычислить итоговое хэш-значение на основе заданных ограничений. Если полученное хэш-значение соответствует ограничениям, то хэш-головоломка решена, иначе нужно продолжать вычисления с другим одноразовым случайным кодом до тех пор, пока не будет найдено решение. Одноразовый случайный код nonce, который при объединении с исходными данными дает хэш-значение, соответствующее ограничениям, называется решением. Если вы объявляете, что решили хэш-головоломку, то обязательно должны предъявить правильный одноразовый случайный код nonce.
Практический пример
Чтобы лучше понять функциональность хэш-головоломок, рассмотрим пример с реальными данными. В главе 10 для фразы Hello World! было вычислено укороченное хэш-значение 7F83B165. Но какие данные, объединенные с этой фразой, выдают итоговое укороченное хэш-значение, начинающееся с трех нулей? Таким образом, сформирована хэш-головоломка: найти одноразовый случайный код nonce, который при объединении с фразой Hello World! выдает укороченное хэш-значение, начинающееся с трех нулей.
Приступим к рутинной работе и попробуем несколько значений одноразового случайного кода. В табл. 11.1 приведены значения одноразового случайного кода, хэшируемого объединенного текста и полученного в результате вычислений итогового укороченного хэш-значения. Из таблицы можно видеть, что одноразовый случайный код 614 решает хэш-головоломку. Для поиска решения пришлось начать со значения 0 и с шагом 1 постепенно увеличивать значение одноразового случайного кода, то есть потребовалось 615 шагов. Если бы ограничение предписывало найти хэш-значение, начинающееся с одного нуля, то задача была бы решена после четырех шагов, так как объединенному тексту Hello World! 3 соответствует хэш-значение, начинающееся с одного нуля.
Таблица 11.1 Подбор значения одноразового случайного кода для решения хэш-головоломки

Вы можете самостоятельно проверить решение этой головоломки на веб-странице http://www.blockchain-basics.com/HashPuzzle.html.
Уровень сложности
Условие соответствия хэш-значения определенным требованиям является ключевым для хэш-головоломки. Это означает, что ни само ограничение, ни его описание не выбираются произвольным образом. Напротив, ограничение, используемое в головоломках такого типа, стандартизировано таким образом, чтобы компьютеры могли предлагать другим компьютерам хэш-головоломки. В данном контексте ограничения часто называют сложностью (difficulty) или уровнем сложности (difficulty level). Сложность выражается натуральным числом и обозначает количество начальных нулей в искомом хэш-значении. Таким образом, сложность 1 означает, что хэш-значение должно начинаться (как минимум) с одного нуля, тогда как при сложности 10 необходимо найти хэш-значение, начинающееся, по меньшей мере, с 10 нулей. Чем выше сложность, тем больше начальных нулей требуется и тем труднее решить хэш-головоломку. Для решения более сложных хэш-головоломок необходим больший объем вычислительных ресурсов и/или большее время.
Почему это работает
Функциональность хэш-головоломок напрямую зависит от того факта, что хэш-функции являются односторонними функциями. Невозможно решить хэш-головоломку, изучив ограничения, которым должно соответствовать хэш-значение, и применив хэш-функцию в обратном направлении (то есть от желаемого выходного значения к требуемому входному значению). Хэш-головоломки можно решить только методом проб и ошибок, который требует огромного объема вычислительных мощностей, следовательно, много времени и энергии. Уровень сложности напрямую влияет на количество попыток, в среднем необходимых для решения головоломки, что, в свою очередь, влияет на потребление вычислительных ресурсов и/или расход времени при поиске решения.
Хэш-функции являются детерминированными и быстро генерируют хэш-значения для любых типов данных. Поэтому сразу после того, как решение найдено, легко проверить, что данные, объединенные с найденным одноразовым кодом nonce, действительно дают хэш-значение, соответствующее заданным ограничениям. Если вычисленное значение не соответствует заданному ограничению, то нельзя обвинять в этом хэш-функцию, потому что несоответствие возникает только из-за того, что головоломка не решена или решена неправильно.
Примечание
В контексте блокчейн хэш-головоломки часто называют подтверждением проделанной работы, так как предъявленное решение доказывает, что требуемая работа действительно выполнена.
//-- Использование хэширования в блокчейне --//
В технологии блокчейна хэширование используется для выполнения следующих задач:
• хранение данных транзакций способом, при котором отслеживаются и контролируются любые изменения данных;
• создание цифровых отпечатков для данных транзакций;
• методика управления накладными расходами при обработке изменений структуры данных блокчейна.
//-- Перспектива --//
В этой главе описаны основные варианты использования хэш-значений и кратко перечислены методы их применения в технологии блокчейна. В следующих главах будет подробно рассматриваться методика хэширования, используемая блокчейном.
//-- Резюме --//
• Хэш-значения могут использоваться:
– для сравнения данных;
– для выявления фактов изменения данных, которые предположительно должны оставаться неизменными;
– для ссылок на данные способом, при котором отслеживаются и контролируются любые изменения предположительно неизменяемых данных;
– для хранения наборов данных способом, при котором отслеживаются и контролируются любые изменения предположительно неизменяемых данных;
– для создания задач, связанных с большими объемами вычислений и интенсивным потреблением вычислительных ресурсов.
Глава 12
Идентификация и защита учетных записей пользователей
Введение в криптографию для начинающих
Помимо хэш-функций в блокчейне активно используется еще одна базовая технология – асимметричная криптография (asymmetric cryptography). Это основа для идентификации пользователей в блокчейне и для защиты их собственности. Криптографию часто считают сложной и трудной для понимания. Поэтому в данной главе представлено постепенное введение в криптографию, доступное для начинающих и достаточное для понимания концепции обеспечения безопасности в блокчейне.
//-- Метафора --//
Задолго до изобретения электронной почты, факсов, телефонов и чат-приложений для передачи сообщений люди использовали обычные письма, которые применяются многими людьми и поныне вместе с современными средствами связи. Обычные письма и сейчас доставляются почтальонами, разносящими конверты по почтовым ящикам адресатов. Почтовые ящики устроены так, чтобы можно было без затруднений опустить письмо в щель (расположенную обычно в верхней части ящика), но очень трудно вытащить его обратно. Извлечь письмо с легкостью может только адресат, у которого есть ключ от личного почтового ящика. Эта концепция применялась очень долго, и в наши дни продолжает использоваться похожая концепция, когда мы посылаем электронное письмо на какой-либо адрес электронной почты, или отправляем сообщение в чат, или переводим деньги на банковский счет. Во всех этих случаях принцип обеспечения безопасности основан на разделении двух типов информации: открытая для всех информация, аналогичная адресу, по которому расположен обычный почтовый ящик, и закрытая, секретная информация, выполняющая функции ключа, с помощью которого можно открыть ящик и получить доступ к его содержимому. Блокчейн применяет ту же концепцию для защиты частных секретных данных. Поэтому описанная выше метафора может существенно помочь при знакомстве с миром криптографии.
//-- Цель --//
Однозначная идентификация владельцев и объектов собственности, а также гарантия того, что только законный владелец может получить доступ к своей собственности.
//-- Главная задача --//
Блокчейн – пиринговая система, открытая для всех. Каждый может присоединиться к системе и предоставить свои вычислительные ресурсы или передать новые данные транзакции в систему. Но при этом крайне нежелательно, чтобы любой участник получал доступ к собственности, принадлежащей конкретным учетным записям, управляемым блокчейн-системой. Неотъемлемой характеристикой права владения частной собственностью является его исключительность. Право передачи владения другой учетной записи принадлежит только владельцу той учетной записи, которая выполняет акт передачи. Таким образом, основная задача блокчейна – защита собственности, принадлежащей конкретным учетным записям, без ограничения функциональности открытой архитектуры распределенной системы.
//-- Основная идея --//
Основная идея состоит в трактовке учетных записей как почтовых ящиков: каждый может передать собственность в любой «ящик», но только владелец учетной записи получает доступ к содержимому. Главная характеристика почтового ящика: его местоположение общеизвестно, следовательно, любой человек может что-то положить в него, но только владелец может открыть свой ящик ключом. Двойственность ситуации – общедоступность почтового ящика, с одной стороны, и личный ключ владельца, с другой стороны, – имеет аналог и в цифровом мире: шифрование с использованием пары ключей – открытого и секретного. Открытые ключи (public keys) используются для идентификации учетных записей, которым можно передать право владения, тогда как доступ к конкретным учетным записям разрешен только владельцам соответствующих секретных ключей (private keys) [26].
//-- Краткий обзор криптографии --//
Чтобы помочь читателю лучше понять сущность криптографии, ниже будут рассматриваться следующие ее аспекты:
• основная задача криптографии;
• терминология;
• симметричная криптография;
• асимметричная криптография.
Основная задача криптографии
Основная задача криптографии – защита данных с целью предотвращения доступа к ним неавторизованных лиц. Это цифровая аналогия дверных замков или банковских сейфов, которые также защищают содержимое от доступа к нему людей, не имеющих на это прав. Подобно замкам и ключам в физическом мире, криптография точно так же использует ключи для защиты данных.
Терминология [37]
Цифровым аналогом процедуры запирания замка является операция зашифрования (encryption), а процедуры отпирания замка – операция расшифрования (decryption). Таким образом, в контексте криптографии мы используем термины зашифрование и расшифрование для обозначения применения защиты данных и снятия защиты соответственно. Зашифрованные данные называются зашифрованным текстом (cypher text) (или шифртекстом). Зашифрованный текст выглядит как бессмысленный набор букв и символов для тех, кто не знает, как расшифровать его. Только тот, кто владеет ключом, необходимым для расшифрования, сможет извлечь пользу из зашифрованного текста. Расшифрованный текст идентичен исходным данным, которые ранее были зашифрованы. Таким образом, полный цикл применения криптографии можно описать следующим образом: берутся некоторые исходные данные, с помощью операции зашифрования с криптографическим ключом генерируется зашифрованный текст, который сохраняется где-либо или передается кому-либо, наконец, выполняется восстановление исходных данных с помощью операции расшифрования зашифрованного текста с криптографическим ключом. На рис. 12.1 показана общая схема функционирования криптографии.
Рис. 12.1 Общая схема основных концепций криптографии с указанием соответствующих терминов
Что произойдет, если кто-то попытается расшифровать зашифрованный текст, используя некорректный ключ? Он получит бессмысленный набор цифр, букв и символов, совершенно не похожий на исходные данные.
Симметричная криптография
В течение многих лет люди использовали методы криптографии с одинаковыми ключами как для зашифрования, так и для расшифрования данных. При этом тот, кто зашифровывал данные, автоматически получал возможность расшифровать зашифрованный текст с помощью того же ключа. Поскольку один и тот же ключ применялся и для зашифрования, и для расшифрования, эта методика получила название симметричной криптографии (symmetric cryptography). На рис. 12.2 изображена общая схема симметричной криптографии с использованием одного и того же ключа для зашифрования и расшифрования короткого сообщения.
Рис. 12.2 Общая схема симметричной криптографии
Но со временем выяснилось, что использование одного ключа для зашифрования и расшифрования не всегда приемлемо. Поэтому была изобретена асимметричная криптография.
Асимметричная криптография
В асимметричной криптографии всегда используются два взаимосвязанных ключа. Хитрость заключается в том, что зашифрованный текст, созданный при помощи одного из этих ключей, можно расшифровать только с помощью второго ключа, и наоборот.
На рис. 12.3 показан полный цикл зашифрования-расшифрования с использованием асимметричной криптографии. Эту схему можно интерпретировать так: в верхней части изображена операция зашифрования, а в нижней части – операция расшифрования. Здесь показаны два ключа: черный и белый. Исходное сообщение зашифровывается с помощью черного ключа, и зашифрованный текст представлен как черный прямоугольник с белыми буквами. Исходное сообщение можно также зашифровать с помощью второго ключа, получив другой зашифрованный текст, представленный в белом прямоугольнике с черными буквами. Для упрощения понимания совпадающие цвета прямоугольников с зашифрованным текстом и ключей подчеркивают их связь: черный ключ генерирует зашифрованный текст в черном прямоугольнике, белый ключ – в белом прямоугольнике.
В нижней части схемы показано, как выполняется операция расшифрования в асимметричной криптографии. Зашифрованный текст в черном прямоугольнике можно расшифровать только с помощью белого ключа, и наоборот.
Рис. 12.3 Общая схема асимметричной криптографии
Главная отличительная особенность асимметричной криптографии состоит в том, что вы никогда не сможете расшифровать зашифрованный текст с помощью ключа, который использовался для зашифрования. Вы сами решаете, какой ключ применить для зашифрования, а какой для расшифрования. Роли ключей можно менять в любой момент для каждого нового шифруемого фрагмента данных, но взаимосвязанные пары ключей всегда необходимо хранить для выполнения операций зашифрования и расшифрования. Если у вас остался только один ключ, то ваши возможности ограничиваются. Вы можете создать зашифрованный текст с помощью этого ключа, но не сможете расшифровать его из-за отсутствия второго связанного ключа. Тем не менее сохраняется возможность расшифровки текста, ранее зашифрованного с помощью второго связанного ключа. Отделенный от своего напарника ключ похож на улицу с односторонним движением: можно проехать по ней в одном направлении, но вернуться по той же улице нельзя. Благодаря асимметричному распределению криптографических функций между двумя ключами можно отделить группу людей, которым предоставлена возможность зашифрования текста, от группы людей, которые могут расшифровать этот текст.
//-- Асимметричная криптография на практике --//
Использование асимметричной криптографии в практической деятельности состоит из двух основных шагов:
• создание и распространение ключей;
• использование ключей.
Создание и распространение ключей
При использовании асимметричной криптографии в повседневной практической деятельности необходимо иметь два ключа, специальные названия которых подчеркивают роль каждого из них. Обычно их называют секретный, или закрытый, ключ (private key) и открытый ключ (public key). Поэтому асимметричную криптографию часто называют криптографией с открытым ключом. Сами по себе ключи в асимметричной криптографии не являются закрытыми и открытыми, поскольку можно зашифровывать данные любым ключом, а расшифровывать парным ему ключом. Сам пользователь назначает ключам роли, которые делают их закрытыми или открытыми. Открытый ключ раздается всем желающим независимо от степени доверия к ним. Практически каждый может иметь копию открытого ключа. Но закрытый ключ нужно хранить в безопасном и защищенном от постороннего доступа месте.
Таким образом, в любом приложении, использующем асимметричную криптографию, в первую очередь необходимо выполнить следующие действия:
1. Создать пару взаимодополняющих ключей с помощью криптографического программного обеспечения.
2. Определить один ключ как открытый ключ.
3. Определить второй ключ как закрытый или секретный ключ.
4. Сохранить закрытый ключ в надежном месте.
5. Раздать открытый ключ всем желающим.
Использование ключей
Существуют два способа практического применения пары ключей, отличающихся направлением потока данных:
• от открытого ключа к закрытому ключу;
• от закрытого ключа к открытому ключу.
От открытого ключа к закрытому ключу
При использовании ключей этим способом поток информации направлен от открытого ключа, который применяется для зашифрования, к закрытому ключу, который применяется для расшифрования. Такой подход напоминает функционирование почтового ящика, в который каждому разрешено положить письмо, но только владелец может открыть ящик. Это самый очевидный и понятный способ применения асимметричной криптографии, поскольку он соответствует нашему общему представлению о секретности и открытости: адрес и почтовый ящик доступен всем, но содержимое ящика является секретом. Таким образом, этот способ использования асимметричной криптографии представляет собой процедуру секретной передачи защищенной информации владельцу закрытого ключа. При этом любой может зашифровать исходные данные открытым ключом, но только владелец закрытого ключа способен расшифровать зашифрованный текст и прочесть сообщение.
От закрытого ключа к открытому ключу
При использовании ключей этим способом поток информации направлен от закрытого ключа, который применяется для зашифрования, к открытому ключу, который применяется для расшифрования. Это похоже на общедоступную доску объявлений и новостей, на которой каждый имеющий копию открытого ключа может читать сообщения, но создавать сообщения может только владелец закрытого ключа. Таким образом, подобный способ применения асимметричной критографии полностью обеспечивает подтверждение авторства. При этом любой обладатель открытого ключа может расшифровать зашифрованный текст, созданный при помощи соответствующего закрытого ключа. Тот факт, что зашифрованный текст, созданный с помощью закрытого ключа, может быть расшифрован только с использованием соответствующего открытого ключа, служит доказательством того, что сообщение действительно зашифровал владелец этого закрытого ключа.
//-- Асимметричная криптография в технологии блокчейна --//
В технологии блокчейна асимметричная криптография используется для достижения двух целей:
• идентификации учетных записей;
• авторизации транзакций.
Идентификация учетных записей
При использовании технологии блокчейна необходимо идентифицировать пользователей или учетные записи пользователей, для того чтобы поддерживать однозначное соответствие между владельцем и собственностью. Блокчейн использует способ передачи информации от открытого ключа к закрытому ключу для идентификации учетных записей пользователей и передачи права владения между ними. Номера учетных записей в блокчейне в действительности являются открытыми критографическими ключами. Таким образом, данные транзакций используют открытые криптографические ключи для идентификации учетных записей, участвующих в операции передачи права собственности. С этой точки зрения блокчейн рассматривает учетные записи пользователей как почтовые ящики: они имеют общеизвестный адрес, и любой пользователь может отправить сообщение по этому адресу.
Авторизация транзакций
Данные транзакции всегда должны содержать элемент, служащий доказательством того, что владелец учетной записи, передающей право владения, действительно согласен с фактом описываемой передачи права владения. Поток информации о согласии исходит от владельца учетной записи, передающей право владения, при этом предполагается, что информация будет передана всем, кто контролирует данные этой транзакции. Такой тип потока информации соответствует варианту передачи информации от закрытого ключа к открытому ключу в асимметричной криптографии.
Владелец учетной записи, передающей право владения, создает некоторый зашифрованный текст с помощью своего закрытого ключа. Все прочие пользователи могут проверить достоверность согласия владельца с помощью копий соответствующего открытого ключа, который одновременно является номером учетной записи этого владельца. Более подробно эта процедура, называемая цифровой подписью, рассматривается в следующей главе.
//-- Перспектива --//
В этой главе рассматривались концепция асимметричной криптографии и варианты практического применения криптографии с открытым ключом в повседневной жизни. Также были описаны использование криптографических открытых ключей в технологии блокчейна для идентификации учетных записей пользователей и процедура подтверждения транзакции законным владельцем посредством создания цифровой подписи, истинность которой можно подтвердить с помощью криптографического закрытого ключа. В следующей главе последняя концепция рассматривается более подробно, поскольку подобный вариант применения асимметричной криптографии менее очевиден, по сравнению с простой идентификацией учетных записей по открытым ключам.
//-- Резюме --//
• Главная цель криптографии – защита данных от несанкционированного доступа.
• Основные криптографические операции:
– зашифрование – защита данных посредством преобразования их в зашифрованный текст с использованием криптографического ключа;
– расшифрование – обратное преобразование зашифрованного текста в исходные данные с использованием соответствующего криптографического ключа.
• В асимметричной криптографии всегда используются два взаимодополняющих ключа: зашифрованный текст, созданный с помощью одного из этих ключей, может быть расшифрован только при помощи второго ключа, и наоборот.
• При практическом применении асимметричной криптографии эти ключи обычно называют открытым ключом и закрытым, или секретным, ключом, чтобы подчеркнуть их конкретные роли. Открытый ключ совместно используется всеми пользователями, тогда как закрытый ключ хранится в секрете. Поэтому асимметричную криптографию часто называют криптографией с открытым ключом.
• Существуют два типовых варианта использования открытых и закрытых ключей:
– открытый ключ применяется для зашифрования данных, которые могут быть расшифрованы только владельцем соответствующего закрытого ключа. Это цифровой аналог общедоступного почтового ящика, в который каждый может положить письмо, но только владелец может открыть его;
– владелец использует свой закрытый ключ для зашифрования данных, которые может расшифровать любой обладатель копии соответствующего открытого ключа. Это цифровой аналог общедоступной доски объявлений, которая служит подтверждением авторства.
• Технология блокчейна использует асимметричную криптографию для достижения двух целей:
– идентификации учетных записей: учетные записи пользователей представляют собой криптографические открытые ключи;
– авторизации транзакций: владелец учетной записи, передающей право владения, создает элемент зашифрованного текста с помощью своего закрытого ключа. Подлинность этого элемента зашифрованного текста может быть проверена с помощью соответствующего открытого ключа, который одновременно является номером учетной записи, передающей право владения.
Глава 13
Авторизация транзакций
Использование цифрового аналога обычных подписей
В главе 12 было представлено введение в асимметричную криптографию для начинающих. Также было отмечено, что блокчейн использует криптографические открытые ключи в качестве номеров учетных записей, а способ направления информации от открытого к закрытому ключу применяется для передачи права владения между учетными записями. Но это лишь часть того, что вам следует знать. Блокчейн-система должна быть абсолютно уверена в том, что только законный владелец имеет возможность передавать свою собственность другим учетным записям. Именно здесь на первый план выходит концепция авторизации. Таким образом, в этой главе рассматривается использование асимметричной криптографии в технологии блокчейна для авторизации транзакций. Особое внимание здесь уделено концепции цифровой подписи, применяющей способ передачи информации от закрытого к открытому ключу.
//-- Метафора --//
Рукописные подписи предназначены для важной цели: они подтверждают согласие с содержимым подписанного документа и с вводом его в действие с момента подписания. Рукописные подписи принимаются в качестве доказательства согласия, потому что особенности почерка любого человека неповторимы. Каждый пишет свою фамилию и имя особенным, характерным только для него способом. Таким образом, при идентификации фамилии, написанной особенным способом, мы можем прийти к выводу о том, что данная рукописная подпись действительно выполнена конкретным человеком, следовательно, этот человек согласен с содержимым подписанного документа и со вступлением документа в силу. В этой главе рассматривается концепция подтверждения согласия с выполнением транзакций в электронном реестре, аналогичная концепции использования рукописных подписей. Эта концепция чрезвычайно важна для защиты отдельных транзакций в блокчейн-системе.
//-- Цель --//
Важна полная уверенность в том, что только владелец учетной записи может передавать собственность, связанную с этой учетной записью, другим учетным записям. Любая попытка доступа к учетной записи и соответствующей собственности, выполняемая кем-либо, кроме законного владельца, должна быть определена как несанкционированная и запрещена.
//-- Главная задача --//
Рассматриваемая здесь пиринговая система открыта для всех. Любой пользователь может создавать транзакции и передавать их в систему. Данные транзакции являются основой для описания и утверждения права владения. Только законному владельцу должна быть разрешена передача собственности или прав владения, связанных с его учетной записью, другой учетной записи. Главная задача блокчейна – сохранять открытость системы, при этом разрешая передавать права владения только законным владельцам.
//-- Идея --//
Основная идея, гарантирующая, что только законный владелец может передавать право владения, состоит в использовании цифрового средства защиты, аналогичного рукописной подписи и служащего той же цели: идентификации учетной записи, подтверждению согласия ее владельца с содержимым конкретных данных транзакции и утверждению ее выполнения, позволяющему добавить данные этой транзакции в общую хронологию данных транзакций.
//-- Краткий обзор цифровых подписей --//
Цифровые подписи (digital signatures) являются аналогом рукописных подписей. Они используют функции криптографического хэширования и метод асимметричной криптографии, направляющий поток информации от закрытого к открытому ключу. Ниже приведен небольшой пример, демонстрирующий три основных элемента технологии цифровых подписей:
• создание цифровой подписи;
• проверка данных с использованием цифровой подписи;
• выявление факта мошенничества с использованием цифровой подписи.
Создание цифровой подписи
Предположим, что я намерен передать всему миру приветствие Hello World! с подтверждением своего авторства. Я создаю сообщение, содержащее это приветствие и соответствующую цифровую подпись. На рис. 13.1 показана полная схема процесса создания цифровой подписи данных. Процесс начинается с белого прямоугольника в верхнем левом углу рис. 13.1, в котором размещено мое приветствие. Я создаю хэш-значение для этого приветствия – 7F83B165 – и зашифровываю это хэш-значение с помощью своего закрытого ключа. Зашифрованный текст хэш-значения (черный прямоугольник с белыми буквами) представляет собой мою цифровую подпись к приветствию. Эта цифровая подпись уникальна с двух точек зрения: во-первых, можно выполнить обратное прослеживание и убедиться, что это моя подпись, поскольку я создал ее с помощью личного закрытого ключа. Во-вторых, подпись уникальна по отношению к тексту приветствия, так как основана на цифровых отпечатках этого приветствия. После этого текст приветствия и цифровая подпись размещаются в одном файле (серый прямоугольник), который, собственно, и является моим сообщением, адресованным всему миру и заверенным цифровой подписью.
Рис. 13.1 Схема создания цифровой подписи
Сообщение, то есть мое приветствие с цифровой подписью, посылается всему миру. Каждый может проверить, действительно ли я являюсь автором этого сообщения, используя для этого мой открытый ключ. На рис. 13.2 показан процесс проверки сообщения с использованием цифровой подписи. Процесс начинается с текста сообщения. Сначала читатель сообщения вычисляет хэш-значение текста приветствия и получает результат 7F83B165. Затем читатель расшифровывает приложенный к приветствию зашифрованный текст (цифровую подпись) с помощью моего открытого ключа. Это дает значение 7F83B165, то есть хэш-значение для той версии приветствия, которую я намеревался послать миру. Сравнение обоих хэш-значений завершает процесс проверки. Так как хэш-значения равны, читатель вполне обоснованно приходит к выводу, что, во-первых, сообщение подписано именно мной, потому что он смог расшифровать подпись с помощью моего открытого ключа, во-вторых, текст приветствия, содержащийся в сообщении, действительно тот, который я отправил, поскольку расшифрованная подпись совпала с хэш-значением, вычисленным для текста приветствия.
Рис. 13.2 Использование цифровой подписи для проверки подлинности сообщения
На рис. 13.3 показано, как цифровая подпись позволяет выявить факт подделки текста приветствия.
Рис. 13.3 Использование цифровой подписи для выявления факта мошенничества
На рис. 13.3 показано сообщение, доставленное в почтовый ящик моего друга. Обратите внимание на изменение в тексте приветствия. Какой-то злоумышленник заменил восклицательный знак на вопросительный, тем самым полностью исказив изначальный смысл приветствия. Это совсем не та фраза, которой я хотел приветствовать мир. К счастью, цифровая подпись позволяет узнать об изменениях в тексте сообщения, сделанных без моего согласия.
Сначала читатель сообщения вычисляет хэш-значение текста приветствия и получает результат 8A0B7C66. Затем читатель расшифровывает приложенный к приветствию зашифрованный текст (цифровую подпись) с помощью моего открытого ключа. Это дает значение 7F83B165, то есть хэш-значение для той версии приветствия, которую я намеревался послать миру. При сравнении хэш-значений обнаруживается, что они не равны. Это явно указывает на то, что текст в принятом сообщении не является тем приветствием, которое я хотел послать миру. Таким образом, любой читатель приходит к выводу, что я не являюсь автором принятого сообщения, следовательно, не несу никакой ответственности за его содержимое.
//-- Как это работает --//
Цифровые подписи в блокчейн-системе соответствуют следующим требованиям:
• они подтверждают согласие владельца учетной записи, передающего право владения собственностью, с конкретными данными транзакции;
• они уникальны для всего содержимого данных транзакции в целом, что позволяет запретить их использование для авторизации других транзакций без согласия автора/владельца;
• только владелец учетной записи, передающий право владения собственностью, может создать подтверждающую цифровую подпись;
• цифровые подписи легко проверяются любым пользователем.
Существуют два варианта практического применения цифровых подписей в блокчейн-системе:
• цифровая подпись транзакции;
• проверка (верификация) транзакции.
Цифровая подпись транзакции
Для создания цифровой подписи транзакции владелец учетной записи, передающий право владения собственностью, выполняет следующие действия:
1. Описание транзакции с помощью всей необходимой информации, например номера всех учетных записей, участвующих в транзакции, передаваемое количество объектов собственности и т. п., за исключением самой цифровой подписи, которая пока еще недоступна.
2. Создание криптографического хэш-значения для данных этой транзакции.
3. Зашифрование хэш-значения транзакции с помощью закрытого ключа учетной записи, передающей право владения.
4. Добавление зашифрованного текста, созданного на шаге 3, в транзакцию в качестве цифровой подписи.
Проверка (верификация) транзакции
Для проверки транзакции необходимо выполнить следующие действия:
1. Создание хэш-значения для данных транзакции, подлежащей проверке, без учета самой цифровой подписи.
2. Расшифрование цифровой подписи рассматриваемой транзакции с помощью номера учетной записи, передающей право владения.
3. Сравнение хэш-значения, вычисленного на шаге 1, с хэш-значением, полученным на шаге 2. Если значения равны, то транзакция считается санкционированной и подтвержденной владельцем закрытого ключа, соответствующего учетной записи, передающей право владения. Если хэш-значения не равны, то транзакция незаконна.
//-- Почему это работает --//
Цифровые подписи для данных транзакций представляют собой комбинацию следующих элементов:
• криптографические хэш-значения для данных транзакции;
• зашифрованный текст, подлинность которого можно проверить, выполнив прослеживание в обратном направлении до соответствующего закрытого ключа в проверяемой учетной записи.
Благодаря тому что криптографические хэш-значения могут считаться цифровыми отпечатками, они неповторимы для каждой транзакции. Неотъемлемым свойством криптографии с открытым ключом является то, что зашифрованный текст, созданный с помощью одного ключа, может быть расшифрован только с помощью соответствующего парного ключа. Совокупность двух ключей также является неповторимой. Таким образом, успешное расшифрование зашифрованного текста с помощью конкретного открытого ключа является доказательством того, что этот текст был создан с помощью соответствующего парного закрытого ключа. Объединение обеих концепций используется для создания зашифрованного текста, происхождение которого можно проследить в обратном направлении до конкретных исходных данных транзакции и единственного закрытого ключа в одном процессе. Это свойство делает цифровые подписи вполне пригодными в качестве доказательства того факта, что владелец закрытого ключа, примененного для создания цифровой подписи, действительно согласен с содержимым рассматриваемой транзакции.
//-- Перспектива --//
В этой главе завершено описание процесса, с помощью которого блокчейн защищает право владения на уровне отдельного набора данных конкретной транзакции. В результате транзакции и их задачи по передаче и подтверждению права владения становятся безопасными и защищенными. Но, кроме этого, очень важно, чтобы данные транзакций были защищены не только на уровне отдельных транзакций. Необходимо также хранить всю хронологию данных транзакций с соблюдением секретности и закрытости, то есть обеспечить защиту. В следующей главе более подробно рассматриваются пути достижения этой цели.
//-- Резюме --//
• Рукописные подписи подтверждают согласие с содержимым подписанного документа и с вводом его в действие с момента подписания.
• Доказательная юридическая сила рукописных подписей основана на неповторимости почерка различных людей.
• Цифровые подписи являются цифровыми аналогами рукописных подписей.
• Цифровые подписи служат для достижения двух целей:
– недвусмысленная идентификация автора подписи;
– подтверждение согласия автора подписи с содержимым подписанного документа и вступлением его в законную силу.
• В блокчейн-системе цифровые подписи транзакций представляют собой криптографические хэш-значения данных транзакций, зашифрованных с помощью закрытого ключа, связанного с учетной записью, от имени которой происходит передача права владения собственностью.
• Цифровые подписи в блокчейн-системе можно проследить в обратном направлении до конкретных исходных данных транзакции и единственного закрытого ключа в одном процессе.
Глава 14
Хранение данных транзакций
Создание и сопровождение хронологии данных транзакций
После изучения пяти предыдущих глав вы получили возможность проследить историю права владения собственностью на основе полной хронологии данных транзакций, а также описать отдельные процедуры передачи права владения безопасным способом посредством авторизации транзакций с помощью цифровых подписей и недвусмысленной идентификации учетных записей пользователей. Но пока еще ничего не было сказано о том, как обеспечивается защищенное хранение всех этих данных транзакций, формирующих полную хронологию. Для этого применяются структуры данных блокчейна. В этой главе рассматриваются структура данных блокчейна и способ ее создания.
//-- Метафора --//
Попробуйте вспомнить, когда вы в последний раз ходили в библиотеку и пользовались обычными карточными каталогами. Библиотечные каталоги представляют собой реестры всех книг, принадлежащих библиотеке. В некоторых библиотеках продолжают использоваться бумажные карточные каталоги для контроля и управления библиотечными фондами. Каждая карточка в таком каталоге представляет одну книгу, а также сообщает общую информацию об этой книге, например фамилию автора, название, дату выхода из печати и местонахождение данной книги в библиотеке: этаж, зал, номер стеллажа и номер полки. Для более точной идентификации книг в карточках каталога часто указывают уникальные библиотечные номера, которые также записаны на корешках книг. В большинстве библиотек имеется несколько карточных каталогов, отличающихся по критериям упорядочения карточек. Например, в каталоге авторов карточки отсортированы по фамилиям авторов в алфавитном порядке, в каталоге названий – по заглавиям книг также в алфавитном порядке. Может существовать даже особый каталог, в котором сортировка выполнена в порядке поступления книг в библиотеку. В этой главе рассматривается способ хранения данных транзакций блокчейна, похожий на способ, применяемый для библиотечных каталогов.
//-- Цель --//
Цель блокчейн-системы – поддержание полной хронологии данных транзакций в упорядоченном виде.
//-- Главная задача --//
Главная задача – организовать хранение данных всех выполненных транзакций таким способом, который позволяет сохранить порядок выполнения транзакций, а также быстро и просто обнаружить любые изменения, внесенные в эти данные. Быстрое обнаружение изменений важно, потому что это является основой для предотвращения искажений или подделок хронологии транзакций.
//-- Идея --//
Основная идея заключается в создании библиотеки данных транзакций и в обслуживании упорядоченного каталога, сохраняющего порядок, в котором транзакции добавлялись в библиотеку. Чтобы упростить обнаружение любых изменений, внесенных в порядок ведения каталога или в данные отдельных транзакций, данные обязательно должны храниться с обеспечением строгого контроля за изменениями, что подразумевает использование хэш-ссылок.
//-- Преобразование обычной книги в структуру данных блокчейна --//
В этом разделе рассматривается постепенное превращение обычной книги в небольшую библиотеку с упорядоченным каталогом, которая в итоге оказывается упрощенной версией структуры данных блокчейна.
Исходная позиция: обычная книга
В течение многих веков информация записывалась на громоздких листах пергамента, которые назывались свитками. В наши дни мы привыкли пользоваться печатной информацией в другом виде: жестко скрепленные пачки пронумерованных страниц, которые мы называем книгами. Поскольку книги стали привычной вещью, их полезность можно принять без доказательств. Ниже перечислены некоторые наиболее важные свойства книг:
• хранение содержимого: книги хранят содержимое на своих страницах;
• упорядоченность: предложения на страницах и сами страницы в книге размещены в определенном порядке;
• связанность страниц: страницы физически объединены с помощью переплета и логически связаны содержимым и номерами страниц.
Благодаря этим свойствам мы можем просматривать книги в прямом и обратном направлениях, листая страницы, или сразу переходить к нужной странице по ее номеру. Посмотрим, чего можно достичь, если изменить некоторые из этих свойств.
Преобразование 1: создание явной зависимости между страницами
На рис. 14.1 показано схематическое изображение двух страниц из простейшей книги. На каждой странице имеются верхнее поле с номером страницы и область содержимого, в которой размещено только одно слово.
Рис. 14.1 Схематическое изображение страниц книги
Номера страниц служат важной цели: вы сразу же можете обнаружить отсутствие страницы в книге, проверяя правильность последовательности номеров без пропусков. Предположим, что в настоящий момент вы читаете страницу 42 нашей простейшей книги. Какой номер должна иметь предыдущая страница? Это очень просто: номер предыдущей страницы 41, то есть 42 минус 1. Для проверки действительного существования предыдущей страницы мы сравниваем ее фактически обозначенный номер с ожидаемым, то есть с номером текущей страницы, уменьшенным на 1. Если оба числа равны, то можно сделать вывод, что предыдущая страница не удалена.
Откуда мы знаем, что номер предыдущей страницы должен быть равен разности номера текущей страницы и единицы? Мы предполагаем, что во всех книгах соблюдается соглашение о последовательной нумерации страниц с помощью натуральных чисел. Но что, если наше предположение неверно, потому что автор или издатель книги решил использовать другую схему нумерации страниц (например, с помощью только четных чисел или с помощью чисел, кратных трем)? В этом случае наш подход к проверке существования предыдущей страницы не работает. Для упрощения процедуры проверки того факта, что предыдущая страница не была удалена из книги, можно установить явную связь каждой страницы с предыдущей. На рис. 14.2 показано, как это сделано в нашей простейшей книге. На каждой странице указан не только ее номер, но и номер предыдущей страницы. Такая схема нумерации страниц создает явную зависимость между любой страницей и предшествующей ей страницей. Явная ссылка на предыдущую страницу существенно упрощает процедуру проверки ее наличия, поскольку при этом не делается никаких неявных предположений.
Рис. 14.2 Страницы книги с явными ссылками на предыдущие страницы
Преобразование 2: отделение содержимого
На страницах нашей книги хранятся содержимое и информация, необходимая для поддержания порядка: номера страниц. Можно сделать книгу более удобной, если отделить содержимое и сосредоточить внимание на задаче поддержания порядка страниц. На рис. 14.3 показано, как выглядят страницы нашей условной книги после отделения содержимого. Теперь содержимое расположено вне страниц, а вместо этого на страницах размещены числовые ссылки, указывающие на содержимое, которое можно хранить в любом месте по нашему выбору (например, в ящике стола, на полке или где-то еще).
Рис. 14.3 Страницы книги с числовыми ссылками на отделенное содержимое
На этом этапе мы преобразовали книгу в небольшую библиотеку. Книга, ранее хранившая содержимое и номера страниц вместе, превращена в каталог, единственной задачей которого является сохранение порядка содержимого отдельных страниц, идентифицируемых по неповторяющимся числовым ссылкам.
Преобразование 3: замена номеров страниц
Теперь наша книга представляет собой упорядоченный каталог, поддерживающий порядок страниц двумя различными способами: во-первых, по физическому расположению страниц книги, скрепленных переплетом, во-вторых, по номерам страниц и явным ссылкам на предыдущие страницы. Благодаря своей физической структуре книга сохраняет порядок страниц, поэтому мы можем экспериментировать с различными схемами нумерации страниц. Можно заменить натуральные числа в верхних полях страниц числовыми ссылками. На рис. 14.4 показан результат этого преобразования. Например, страница, ранее определяемая номером 42, теперь идентифицируется по числовой ссылке 8118E736. Аналогично страница, прежде имевшая номер 41, теперь определяется по числовой ссылке B779E800. Отметим, что ссылки на предыдущие страницы также изменились соответствующим образом. Страница с числовой ссылкой 8118E736 содержит корректную числовую ссылку на предшествующую ей страницу.
Рис. 14.4 Страницы книги, использующие числовые ссылки в качестве номеров страниц
Преобразование 4: создание числовых ссылок
В предыдущем преобразовании номера страниц книги были заменены числовыми ссылками. Но ничего не было сказано о том, как эти ссылки должны создаваться. Наилучший способ создания неповторяющихся числовых ссылок – использование криптографических хэш-значений. Таким образом, можно идентифицировать страницы нашего каталога и соответствующие страницы содержимого с помощью криптографических хэш-значений, являющихся цифровыми отпечатками содержимого. Для упрощения на рис. 14.3 и 14.4 используются укороченные хэш-значения. (Вы можете проверить результаты вычислений с помощью инструмента, представленного на веб-странице http://www.blockchain-basics.com/Hashing.html.) Например, страница, содержащая слово Hello, идентифицируется по укороченному хэш-значению для этого слова, равному 185F8DB3. Числовые ссылки на страницы книги вычисляются на основе их содержимого, то есть на основе числовой ссылки на содержимое и числовой ссылки на предыдущую страницу. Например, числовая ссылка на страницу B779E800 является хэш-значением, вычисленным для комбинации данных 011C01C1 185F8DB3.
Преобразование 5: отказ от переплета книги
Созданный выше упорядоченный каталог представляет собой не совсем обычную книгу, поскольку каждая его страница содержит собственную числовую ссылку, числовую ссылку на предыдущую страницу и числовую ссылку на соответствующую страницу содержимого. Но этот каталог все еще остается книгой в привычном понимании, так как ее страницы скреплены переплетом.
Что произойдет, если удалить переплет и превратить упорядоченную книгу в стопку ничем не связанных листов? Сделав это, мы разрушим физическую связанность страниц и потеряем возможность сохранения их физического порядка. К счастью, возможность поддержания порядка страниц не утрачена полностью. На каждой странице есть числовая ссылка на предыдущую страницу. Поэтому мы можем перемещаться по страницам в обратном порядке, используя для этого числовые ссылки на предыдущие страницы. Если мы отдельно сохраним самую последнюю страницу нашего упорядоченного каталога, то всегда будем иметь возможность просмотра всех страниц в обратном порядке.
Цель достигнута: оценка результата
Подведем итог наших достижений в этом примере. Мы превратили обычную книгу в две физически неупорядоченные стопки отдельных страниц, которые связаны друг с другом с помощью уникальных числовых ссылок. В одной стопке собраны страницы содержимого, в другой стопке хранятся страницы, обеспечивающие порядок. Для упрощения мы называем вторую стопку страниц упорядоченным каталогом. На каждой странице этого упорядоченного каталога указаны числовая ссылка на предыдущую страницу и числовая ссылка на соответствующую страницу содержимого. В итоге мы отделили схему упорядочения от хранимой информации, а логическое место расположения (установленный порядок) – от физического места расположения страниц. Благодаря использованию хэш-значений в качестве числовых ссылок можно без затруднений проверить их корректность простым повторным вычислением. Так как страницы в упорядоченном каталоге уже не скреплены переплетом, мы можем просматривать их только постранично в обратном порядке, следуя по числовым ссылкам на предыдущие страницы. В табл. 14.1 описаны свойства книги, рассмотренной в примере, до и после выполнения преобразований.
Таблица 14.1 Сравнение свойств книги до и после выполнения всех преобразований
//-- Структура данных блокчейна --//
Что такое структура данных блокчейна? В действительности вы уже знаете ответ, потому что в рассмотренном выше примере фактически разработана упрощенная структура данных блокчейна. Но мы использовали другую терминологию. В этом разделе подводится итог обсуждения примера с использованием аналогии, и элементы преобразованной книги связываются с терминами, применяемыми в контексте блокчейна.
Преобразованная книга состоит из следующих элементов:
• воображаемый элемент, состоящий из страницы упорядоченного каталога и соответствующей ему страницы содержимого;
• стопка отдельных страниц, называемая упорядоченным каталогом;
• стопка отдельных страниц, называемая содержимым;
• числовые ссылки на страницы для идентификации и установления связей между страницами упорядоченного каталога;
• числовые ссылки на страницы содержимого для идентификации и установления связей между ними.
В конце текущего раздела приведена табл. 14.2, объединяющая результаты сравнения элементов простейшей книги из примера после ее преобразования с элементами структуры данных блокчейна.
Таблица 14.2 Сравнение преобразованной книги со структурой данных блокчейна

Воображаемый элемент, состоящий из страницы упорядоченного каталога и соответствующей ему страницы содержимого
Воображаемый элемент, состоящий из страницы упорядоченного каталога и соответствующей ему страницы содержимого, соответствует одному блоку в структуре данных блокчейна. Вместе все эти блоки формируют структуру данных блокчейна. Важно понимать, что элемент, состоящий из страницы упорядоченного каталога и соответствующей ему страницы содержимого, существует только в нашем воображении, потому что страницы упорядоченного каталога и страницы содержимого являются физически разделенными, независимыми объектами. Страницы каталога указывают на страницы содержимого с помощью хэш-ссылок, которые позволяют мысленно представить эту связь как воображаемый элемент.
Упорядоченный каталог
Упорядоченный каталог преобразованной книги равнозначен цепочке заголовков блоков в структуре данных блокчейна. Каждая страница упорядоченного каталога соответствует одному заголовку блока в структуре данных блокчейна. Поскольку заголовки блоков связаны друг с другом с помощью ссылок в линейную последовательность, они образуют цепочку заголовков блоков. Как и упорядоченный каталог, цепочка заголовков блоков не хранит самих данных транзакции, а содержит только хэш-ссылки на соответствующие данные транзакции. Здесь особенно важным становится понимание роли воображаемого элемента, объединяющего упорядоченный каталог и содержимое.
Страницы содержимого
Содержимое преобразованной книги соответствует данным транзакции, выполняемой блокчейн-системой. В рассматриваемой прикладной области эти данные предназначены для управления правом владения. В реальных блокчейн-приложениях нет страниц содержимого, здесь этот термин введен исключительно в учебных целях. Реальные блокчейн-приложения хранят данные содержимого (то есть данные транзакции) напосредственно в базе данных, и мы ссылаемся на эти данные как на деревья Меркле, корни которых сохранены в заголовках блоков.
Числовые ссылки на страницы каталога
Числовые ссылки на страницы каталога преобразованной книги, используемые для идентификации страниц упорядоченного каталога, соответствуют криптографическим хэш-значениям отдельных заголовков блоков в структуре данных блокчейна. Они называются хэшем блока или хэшем предыдущего блока соответственно и используются для недвусмысленной идентификации каждого заголовка блока и для ссылки на заголовок предыдущего блока. Действительный переход от одного заголовка блока к предшествующему заголовку выполняется с помощью хэш-ссылки.
Числовые ссылки на содержимое
Числовые ссылки на содержимое преобразованной книги, используемые для идентификации страниц содержимого, соответствуют хэш-ссылкам в цепочке заголовков блоков, указывающим на связанные с ними данные транзакции. Если говорить точнее, то числовая ссылка на содержимое, хранимая в заголовке блока, является корнем дерева Меркле, то есть данных транзакции, сохраненных в базе данных. Именно здесь создается воображаемый элемент, связывающий упорядоченный каталог (заголовок блока) с соответствующим содержимым (дерево Меркле с данными транзакции).
//-- Хранение транзакций в структуре данных блокчейна --//
На рис. 14.5 схематически показаны все рассмотренные ранее элементы в виде структуры данных блокчейна, хранящей четыре транзакции. На этой схеме показана упрощенная структура данных блокчейна, состоящая из двух блоков: БЛОК 1 и БЛОК 2. Эти блоки изображены штриховыми линиями, чтобы подчеркнуть их воображаемую, нематериальную сущность. Блоки содержат заголовки, обозначенные как Заголовок блока 1 и Заголовок блока 2 соответственно. БЛОК 1 – самый первый блок в этой структуре данных, поэтому у него нет предыдущего блока, значит, нет и ссылки на заголовок предыдущего блока. Для БЛОКа 2 имеется предшествующий блок, поэтому в Заголовке блока 2 содержится хэш-ссылка B1 на заголовок предыдущего блока. В этой структуре данных блокчейна также содержатся хэш-ссылки на два различных дерева Меркле с корнями R12 и R34 соответственно. Метки корней деревьев Меркле указывают непосредственно на данные транзакций, которые они содержат (например, дерево Меркле с корнем R12 содержит первые две транзакции, обозначенные как Транзакция 1 и Транзакция 2, а также соответствующие хэш-ссылки R1 и R2, указывающие на эти транзакции).
Если вы присоединитесь к пиринговой системе, поддерживающей структуру данных блокчейна, как показано на рис. 14.5, то сможете получить все данные транзакций, все значения хэш-ссылок и все заголовки блоков. На основе этих данных локальный компьютер способен создать структуру данных блокчейна, включающую хэш-ссылки на данные, хранимые на этом локальном компьютере. Имея в распоряжении все данные и ссылку на самый последний текущий заголовок блока, вы можете последовательно в обратном порядке просматривать полную хронологию всех данных транзакций, когда-либо выполненных в системе с момента ее создания, то есть в нашем примере – все четыре транзакции. Следует обратить особое внимание на то, что ссылка на текущий заголовок блока, добавленного самым последним, называется головой (head) структуры данных блокчейна, потому что именно здесь будет добавляться следующий блок. Иногда головой структуры данных блокчейна называют заголовок блока, добавленного последним, и ссылку на него. На рис. 14.5 головой структуры данных блокчейна является ссылка B2. Очень важно не путать термины голова (head) и заголовок (header): структура данных блокчейна состоит из множества блоков, у каждого из которых есть собственный заголовок, но вся структура в целом имеет только одну голову.
Рис. 14.5 Упрощенная схема структуры данных блокчейна, содержащей четыре транзакции
Примечание
Структура данных блокчейна, рассматриваемая в этой главе и показанная на рис. 14.5, упрощена в учебных целях. Многие подробности, касающиеся информации, хранимой в заголовках блоков, преднамеренно опущены. Некоторые из этих подробностей будут рассматриваться в следующих главах, помогая вам лучше понять технологию блокчейна.
//-- Перспектива --//
В этой главе рассматривались структура данных блокчейна и ее внутреннее устройство. Способ применения хэш-ссылок делает структуру данных блокчейна весьма чувствительной к изменениям структуры хранения данных. В следующей главе это свойство рассматривается более подробно, поскольку является ключом к пониманию того, как обеспечить безопасность блокчейн-системы.
//-- Резюме --//
• Структура данных блокчейна – это особый тип структуры данных, составленной из упорядоченных элементов, называемых блоками.
• Каждый блок структуры данных блокчейна состоит из заголовка блока и дерева Меркле, содержащего данные транзакции.
• Структура данных блокчейна состоит из двух основных структур данных: упорядоченная цепочка заголовков блоков и деревья Меркле.
• Упорядоченную цепочку заголовков блоков можно мысленно представить как цифровой аналог традиционных библиотечных карточных каталогов, в которых отдельные карточки отсортированы в порядке их добавления в каталог.
• Каждый заголовок блока ссылается на предшествующий ему заголовок блока, тем самым сохраняя порядок отдельных заголовков и соответствующих блоков, формирующих структуру данных блокчейна.
• Каждый заголовок блока в структуре данных блокчейна идентифицируется по собственному криптографическому хэш-значению и содержит хэш-ссылку на предыдущий заголовок блока, а также хэш-ссылку на специализированные прикладные данные, порядок которых необходимо сохранять.
• Хэш-ссылка на специализированные прикладные данные обычно является корнем дерева Меркле, которое поддерживает хэш-ссылки на конкретные данные приложения.
Глава 15
Использование хранилища данных
Создание цепочки блоков данных
В главе 14 рассматривалась структура данных блокчейна, состоящая из двух основных компонентов: упорядоченной цепочки заголовков блоков и деревьев Меркле, содержащих данные транзакций. Предназначение этой структуры данных – хранение данных транзакций с обеспечением их защиты. Но что означает обеспечение защиты хранимых данных в текущем контексте? Ответ на этот вопрос является основной целью данной главы. Здесь рассматриваются последовательности изменяемых данных в блокчейн-системе и демонстрируется, как структура данных блокчейна обнаруживает изменения. Далее особо подчеркивается важная роль хэш-ссылок при хранении данных, чувствительных к изменениям. В конце главы описывается корректный способ добавления новых блоков в структуру данных блокчейна.
//-- Метафора --//
Ткачество – это искусство превращения отдельных нитей в ткань или материю посредством создания последовательности многочисленных взаимосвязанных петель, так называемых переплетений или петельных швов (stitches). При ручном производстве размеры петель существенно отличаются. Таким образом, в производственном процессе иногда возникает необходимость в корректировке отдельных петель. Для того чтобы поправить петельный шов, расположенный где-то в структуре ткани, необходимо распустить все последующие петли в обратном порядке, начиная с конца ряда, до тех пор, пока не встретится петля, требующая корректировки. После исправления этой петли восстанавливаются все последующие петли ряда. Это очень трудоемкая процедура, поэтому важно, чтобы все петли соответствовали требованиям по качеству сразу после своего первоначального создания. В этой главе показано, что использование структуры данных блокчейна похоже на ткацкое ремесло: добавление нового блока в конец структуры данных выполняется просто, но изменение данных где-либо в середине цепочки связано с существенными трудностями. С помощью описанной выше метафоры будет проще понять, как структура данных блокчейна обнаруживает изменения, с одной стороны, и каким образом выполняется корректное добавление и изменение данных – с другой.
//-- Добавление новых транзакций --//
Чтобы лучше понять процедуру добавления новых транзакций в существующую структуру данных блокчейна, рассмотрим простой пример. На рис. 15.1 показано начальное состояние структуры данных блокчейна, состоящей из одного блока. Эта структура содержит только две транзакции. Транзакция 3 и Транзакция 4 в нижней части рис. 15.1 пока еще не добавлены в рассматриваемую структуру данных. Чтобы добавить новые данные транзакции, необходимо выполнить следующие действия:
1. Создать новое дерево Меркле, содержащее все данные новой транзакции, которую нужно добавить, как показано на рис. 15.2.
2. Создать заголовок нового блока (Заголовок блока 2), содержащий хэш-ссылку (B1), указывающую на заголовок предыдущего блока (Заголовок блока 1), и корень дерева Меркле, содержащий данные новой транзакции (R34), как показано на рис. 15.3.
3. Создать новую хэш-ссылку (B2) на заголовок нового блока, как показано на рис. 15.4, и объявить ее новой головой обновленной структуры данных блокчейна. Следует помнить, что ссылка, которая указывает на самый последний добавленный элемент данных, называется головой (head) всей цепочки в целом (см. главу 11).
Рис. 15.1 Начальное состояние: в существующую структуру данных блокчейна нужно добавить две новые транзакции (Транзакция 3 и Транзакция 4)
Рис. 15.2 Шаг 1: создание нового дерева Меркле, которое содержит новые транзакции
Рис. 15.3. Шаг 2: создание заголовка нового блока, содержащего хэш-ссылку на заголовок предыдущего блока и корень дерева Меркле, в котором сохранены данные новых транзакций
Рис. 15.4 Шаг 3: создание новой хэш-ссылки, указывающей на заголовок нового блока, являющегося теперь новой головой всей обновленной структуры данных блокчейна
//-- Обнаружение изменений --//
Действие, показанное на рис. 15.4, представляет собой начальное состояние для исследования воздействия изменений в данных, которые уже являются частью структуры данных блокчейна. Ниже будут рассматриваться следующие ситуации:
• изменение содержимого данных транзакции;
• изменение ссылки на дерево Меркле;
• замена транзакции;
• изменение корня дерева Меркле;
• изменение ссылки на заголовок блока.
Изменение содержимого данных транзакции
На рис. 15.5 показано, что происходит при изменении Транзакции 2. Эта транзакция является частью дерева Меркле, состоящего из хэш-ссылок. При изменении некоторых свойств Транзакции 2 (например, количества передаваемой продукции или учетной записи, принимающей право владения) изменяется также соответствующий отпечаток или криптографическое хэш-значение. После этого хэш-ссылка R2, указывающая на исходные данные транзакции, становится некорректной. Это свидетельствует о том, что первоначальные данные указываемой транзакции были изменены после их фиксации, следовательно, нарушено правило неизменяемого состояния данных. В итоге вся структура данных блокчейна становится неправильной.
Рис. 15.5 Изменение элементов транзакции приводит к некорректности хэш-ссылки, указывающей на первоначальные данные, в результате чего нарушается вся структура данных в целом
Изменение ссылки на дерево Меркле
На рис. 15.6 показано, что происходит, если изменяются не только элементы транзакции, но и хэш-ссылка, указывающая на эту обновленную транзакцию. Измененная хэш-ссылка (R2) корректна, так как правильно указывает на новые данные транзакции. Но эта обновленная хэш-ссылка является частью дерева Меркле, корень которого также представляет собой хэш-ссылку. Корень дерева Меркле R12 указывает на элемент данных, содержащий хэш-ссылки R1 и R2. Вторая ссылка была изменена для сохранения логической согласованности с измененной версией Транзакции 2. При этом изменилось и криптографическое хэш-значение элемента данных, включающего обновленную версию R2, поэтому корень дерева Меркле R12 стал некорректным.
Рис. 15.6 Изменение транзакции и хэш-ссылки на нее в дереве Меркле приводит к некорректности корня дерева Меркле, из-за чего вся структура данных становится неправильной
Замена транзакции
На рис. 15.7 рассматривается случай замены всей транзакции полностью, отличающийся от варианта изменения элементов существующей транзакции, а также обновление соответствующей хэш-ссылки.
При сравнении рис. 15.6 и 15.7 можно заметить минимальное различие в имени транзакции и соответствующей хэш-ссылки. В целом отображение последовательностей на обеих схемах одинаково. И в том, и в другом случае корень дерева Меркле R12 становится некорректным из-за изменений, внесенных в само дерево.
В итоге обнаруживается, что изменение транзакции и полная замена транзакции оказывают одинаковое воздействие на структуру данных блокчейна. Изменения выявляются в обоих вариантах, но в любом случае вся структура данных становится некорректной.
Рис. 15.7 Замена транзакции и хэш-ссылки на нее в дереве Меркле приводит к некорректности корня дерева Меркле, из-за чего вся структура данных становится неправильной
Примечание
Изменение или замена данных в структуре данных блокчейна приводит к одинаковому результату, так как оба варианта оказывают одинаковое воздействие на хэш-ссылки.
Изменение корня дерева Меркле
На рис. 15.8 показано, что происходит при изменении всего дерева Меркле, включая его корень.
Корень измененного дерева Меркле R12 является частью заголовка блока (Заголовок блока 1). При изменении корня изменяется и криптографическое хэш-значение Заголовка блока 1, что, в свою очередь, приводит к некорректности хэш-ссылки B1 на этот заголовок. После обнаружения изменения хэш-ссылка B1, обеспечивающая соединение или служащая связью между Заголовком блока 2 и Заголовком блока 1, становится некорректной. В итоге становится некорректной и вся структура данных блокчейна.
Рис. 15.8 Изменение дерева Меркле приводит к некорректности хэш-ссылки, указывающей на заголовок блока, содержащий эту ссылку, из-за чего вся структура данных становится неправильной
Изменение ссылки на заголовок блока
На рис. 15.9 показано, что происходит при изменении не только всего дерева Меркле, но и хэш-ссылки на заголовок изменяемого блока.
Рис. 15.9 Изменение хэш-ссылки в заголовке блока приводит к некорректности хэш-ссылки, указывающей на заголовок изменяемого блока, из-за чего вся структура данных становится неправильной
При изменении хэш-ссылки B1 на заголовок изменяемого блока (Заголовок блока 1) происходит следующее: начиная с хэш-ссылки B1, все хэш-ссылки, указывающие на изменяемые данные, остаются согласованными и корректными, поскольку они были отредактированы в соответствии с внесенными изменениями. Но измененная хэш-ссылка B1 является частью Заголовка блока 2, следовательно, ее криптографическое хэш-значение изменилось, после чего стала некорректной хэш-ссылка B2, указывающая на заголовок блока, содержащего первоначальную версию хэш-ссылки B1. Поэтому вся структура данных блокчейна становится некорректной.
//-- Корректное изменение данных --//
После рассмотрения нескольких способов изменения структуры данных блокчейна, приводящих к нарушению ее корректности, необходимо объяснить, что нужно сделать, чтобы правильно изменить или обновить структуру данных блокчейна. На рис. 15.10 показано, как внести изменения в структуру данных блокчейна корректным способом.
Рис. 15.10 При корректном изменении транзакции последовательно изменяются все связанные с ней хэш-ссылки
Если нужно изменить или обновить некоторые элементы Транзакции 2, то необходимо соответствующим образом обновить всю последовательность хэш-ссылок: R2, R12, B1 и B2. Это означает, что все хэш-ссылки, начиная с той, которая указывает непосредственно на измененные данные, и заканчивая той, которая ссылается на самый последний заголовок блока (разумеется, и все хэш-ссылки между ними), должны быть изменены или обновлены таким образом, чтобы отображались изменения в указываемых объектах. Это достаточно трудная задача, и затруднена она преднамеренно. Вся описанная выше работа необходима для сохранения логической связанности всей структуры данных блокчейна и для поддержания ее целостности. Другие способы изменения или редактирования данных, являющихся частью структуры данных блокчейна, приведут к некорректности хэш-ссылок, из-за чего вся структура данных станет некорректной.
//-- Преднамеренные и непреднамеренные изменения --//
В предыдущем разделе было показано, что структура данных блокчейна применяет бескомпромиссный подход «все или ничего» при необходимости изменения данных: изменяется вся структура данных полностью, от места исходного редактирования данных до головы всей цепочки, или вся структура остается неизменной. Все прочие нерешительные, половинчатые и частичные изменения приводят всю структуру данных блокчейна в несогласованное состояние, которое быстро и легко обнаруживается благодаря свойствам хэш-ссылок, хотя структура данных блокчейна и не различает преднамеренных и непреднамеренных изменений. В действительности с точки зрения блокчейна вообще не существует преднамеренных и непреднамеренных изменений. Эти слова обозначают оценку причин или намерений человека, вносящего изменения. Но структура данных блокчейна не оценивает ни людей, ни каких-либо других факторов, приводящих к несогласованности. Блокчейн-система заботится только о корректности и логической связности всех своих хэш-ссылок. Если одна из ссылок некорректна, то некорректна и вся структура данных, вне зависимости от того, кто или что внес изменение и с какой целью оно было сделано. Именно благодаря этому свойству структура данных блокчейна становится весьма полезной.
//-- Перспектива --//
В этой главе подробно рассматривались возможные варианты изменений в структуре данных блокчейна и особо отмечено, что структура данных блокчейна весьма чувствительна к изменениям. При необходимости внесения каких-либо изменений применяется бескомпромиссный подход «все или ничего». В следующей главе будет показано, как это свойство можно применить, чтобы сделать данные неизменяемыми, благодаря чему структура данных блокчейна становится превосходным средством хранения данных в ненадежной и не внушающей доверия среде.
//-- Резюме --//
• Чтобы добавить новые данные транзакции, необходимо выполнить следующие действия:
– создать новое дерево Меркле, содержащее все данные новой транзакции, которую нужно добавить;
– создать заголовок нового блока, содержащий хэш-ссылку, указывающую на заголовок предыдущего блока, и корень дерева Меркле, содержащий данные новой транзакции;
– создать хэш-ссылку на заголовок нового блока и объявить ее текущей головой обновленной структуры данных блокчейна.
• Изменение данных в структуре данных блокчейна требует обновления всех хэш-ссылок, начиная с той, которая указывает непосредственно на измененные данные, и заканчивая той, которая ссылается на самый последний заголовок блока (разумеется, и всех хэш-ссылок между ними).
• Структура данных блокчейна применяет бескомпромиссный подход «все или ничего» при необходимости изменения данных: изменяется вся структура данных полностью, от места исходного редактирования данных до головы всей цепочки, или вся структура остается неизменной.
• Все прочие нерешительные, половинчатые и частичные изменения приводят всю структуру данных блокчейна в несогласованное состояние, которое быстро и легко обнаруживается благодаря свойствам хэш-ссылок.
• Полноценное изменение структуры данных блокчейна преднамеренно сделано весьма трудоемким процессом.
• Высокая чувствительность структуры данных блокчейна к изменениям обеспечивается свойствами хэш-ссылок.
Глава 16
Защита хранимых данных
Исследование возможностей свойства неизменяемости
Глава 15 завершалась констатацией того факта, что структура данных блокчейна хранит данные способом, чрезвычайно чувствительным к каким-либо изменениям. Любое изменение данных, хранящихся в структуре данных блокчейна, сразу же обнаруживается и требует выполнения трудоемкого процесса правильного включения этого изменения в существующую структуру. В этой главе рассматривается, как указанное выше свойство можно использовать для подготовки хронологии данных транзакций, совместно используемой и распределенной в ненадежной, не внушающей доверия среде, не опасаясь того, что нечестные участники пиринговой системы смогут изменять содержимое хронологии в личных корыстных целях.
//-- Метафора --//
Предположим, что я надеюсь стать членом престижной аристократической семьи. Как я могу добиться этого? Здесь может помочь составление генеалогического древа моей семьи. Например, в таком генеалогическом древе я мог бы создать дедушку-аристократа и установить связь между ним и мной. Будет ли это достаточно убедительным аргументом, чтобы убедить окружающих в существовании моих поддельных аристократических корней? Эта фальсификация будет быстро разоблачена, так как родословные редко существуют в полной изоляции, они объединяются и пересекаются с другими родословными с помощью семейных взаимоотношений. Следовательно, если ни в одном генеалогическом древе настоящих аристократических семей не упоминается мой выдуманный дед, то быстро обнаружится, что история моей, якобы аристократической семьи является поддельной. Чтобы семейная хронология была признана настоящей, необходимо подредактировать архивные документы некоторых настоящих аристократических семей, включив ссылки на мое генеалогическое древо в их историю. Но даже это может оказаться недостаточным. Люди проживают реальную жизнь и оставляют различные следы в нашем мире. Мой выдуманный дедушка никогда не существовал в действительности. Поэтому я должен «создать» его жизнь, чтобы моя уловка выглядела вполне настоящей. Предполагается, что мне следует придумать всю жизнь вымышленного деда, включая его детство, школьные годы, дальнейшую карьеру и прочее. Кроме того, потребуются соответствующие поддельные документы, такие как свидетельство о рождении, документы о поступлении в школу, аттестат об окончании школы, университетские дипломы, свидетельства о профессиональной деятельности, о членстве в различных организациях и т. п. Школы, университеты и организации хранят архивные записи о своих учениках и сотрудниках и публикуют альманахи-ежегодники и фотографии групп и подразделений. Таким образом, необходимо подредактировать и эти документы, чтобы сделать моего вымышленного деда бывшим членом некоторых организаций. Поскольку тайное редактирование всех перечисленных документов с большой вероятностью станет очень сложным и дорогим занятием, я, скорее всего, приму решение оставить неизменной историю моей действительной неаристократической семьи.
Эта интеллектуальная игра показывает, что фальсификация прошлого возможна, но чрезвычайно трудна и связана с немалыми затратами, так как требует редактирования и подмены большого количества хронологических документов и свидетельств, чтобы внести в них ложную информацию, искажающую реальную историю. Затраты на подобные действия непомерно высоки, следовательно, гораздо проще и дешевле работать с правдивой информацией. В этой главе рассматривается, как в технологии блокчейна применяется эта концепция для защиты хронологии данных транзакций от подделок.
//-- Цель --//
Важно, чтобы вся хронология данных транзакций в целом, поддерживаемая блокчейн-системой, всегда представляла истинную информацию, следовательно, являлась бы надежным источником подтверждения фактов, связанных с правами владения собственностью.
//-- Главная задача --//
Блокчейн-система – это полностью распределенная пиринговая система, открытая для всех. Поэтому существует опасность того, что нечестные участники могут изменить или подделать хронологию данных транзакций в своих корыстных целях. Главной задачей является сохранение полной открытости системы с обеспечением защиты хронологии данных транзакций от возможных подделок и изменений.
//-- Идея --//
В открытой системе заранее отличить честных участников от нечестных очень трудно или даже невозможно. Поэтому, чтобы защитить хронологию данных транзакций от манипуляций нечестных участников, необходимо в первую очередь запретить кому-либо любые действия, изменяющие хронологию. Если никто не имеет возможности изменять хронологию данных транзакций, независимо от честности или нечестности его намерений, можно не опасаться каких бы то ни было манипуляций с этими данными. Таким образом, изначальное сохранение неизменяемости данных транзакций решает возникшую проблему. В результате система остается открытой для всех, но исключается возможность внесения каких-либо изменений в хронологию транзакций.
//-- Краткий обзор свойства неизменяемости --//
Неизменяемость (immutability) означает, что невозможно изменить объект, обладающий этим свойством. Неизменяемые данные не могут быть изменены после того, как они были созданы или записаны. Именно поэтому такие данные называют данными только для чтения (read-only data). Главное их преимущество – представление информации исключительно для чтения или в демонстрационных целях. Это свойство особенно необходимо, если данные передаются сторонним лицам и теряется возможность управления способом использования этих данных. Передача неизменяемых данных представляет собой эффективную методику предотвращения изменений или прочих манипуляций с данными. В реальной жизни примерами неизменяемых объектов являются водительские права, паспорта и дипломы о высшем образовании. Компетентные органы выдают эти документы, чтобы подтвердить указанные в них факты, а законодательство ограничивает их использование только предъявлением и чтением.
//-- Как это работает: общая схема --//
Основная идея, используемая технологией блокчейна для сохранения неизменяемости хронологии транзакций, заключается в том, чтобы сделать любые изменения чрезвычайно затруднительными и дорогостоящими, то есть сложность должна заставить отказаться от попыток внесения изменений. Методика обеспечения неизменяемости хронологии данных транзакций включает три элемента:
1) сохранение хронологии данных транзакций таким способом, при котором даже минимальное изменение содержимого сразу обнаруживается и становится заметным;
2) установление такого порядка внесения изменений в хронологию транзакций, при котором требуются редактирование и перезапись огромной части всей хронологии;
3) операции добавления, записи и перезаписи данных в хронологию преднамеренно делаются многозатратными с точки зрения вычислительных мощностей.
Обнаружение любых изменений
Структура данных блокчейна, хранящая данные с обеспечением высокой чувствительности к изменениям, соответствует первому элементу. Никто не сможет незаметно изменить данных, являющихся частью структуры данных блокчейна, и при этом надеяться, что это изменение останется незамеченным. Любое изменение вызовет «большой шум» из-за нарушенных хэш-ссылок, ставших некорректными в результате изменений в данных, на которые они указывают.
Принудительная перезапись всей хронологии при внутренних изменениях
Структура данных блокчейна также поддерживает второй элемент, поскольку применяет бескомпромиссный подход «все или ничего», когда возникает необходимость в изменении существующих данных: либо изменяется вся структура данных полностью, начиная с того места, где вносится изменение, и заканчивая головой всей цепочки, либо данные остаются в своем первоначальном состоянии, без изменений.
Добавление данных чрезвычайно многозатратно с точки зрения вычислительных мощностей
Третий элемент предназначен для тех, кто не испугался перезаписи крупных частей структуры данных блокчейна с целью внесения изменений в существующую хронологию транзакций. Но поскольку запись или перезапись структуры данных блокчейна связана с огромными накладными расходами на вычислительные мощности, следует хорошенько подумать, прежде чем принять окончательное решение о целесообразности попытки внесения изменений.
Комплект технологий блокчейна делает содержимое структуры данных блокчейна неизменяемым, устанавливая при этом весьма высокий уровень стоимости затрат на вычислительные мощности для каждой операции записи, перезаписи или добавления блока в структуру данных блокчейна. Высокая стоимость вычислительных мощностей создается при помощи хэш-головоломок, различных для каждого заголовка блока [26]. Таким образом, тот, кто пытается внести изменения, принимает на себя полностью все затраты по изменению структуры данных с места внесения изменений до головы всей цепочки, решая при этом хэш-головоломки для каждого заголовка блока, вовлеченного в этот процесс, или оставляет всю структуру неизменной.
//-- Как это работает: подробности --//
Процедура добавления нового блока в структуру данных блокчейна, описанная в главе 15, не связана с чрезмерными накладными расходами, потому что она требует лишь добавления хэш-ссылки, указывающей на заголовок нового блока в цепочке и объявление этой ссылки как новой головы цепочки. Главная задача создания состояния неизменяемости структуры данных блокчейна заключается в том, чтобы сделать добавление нового блока задачей, дорогостоящей с точки зрения вычислительных мощностей. Для достижения этой цели необходимо рассмотреть следующие аспекты:
• обязательность данных заголовков блоков;
• процесс создания заголовка нового блока;
• правила проверки для заголовков блоков.
Обязательность данных
Заголовок каждого блока структуры данных блокчейна обязательно должен содержать, как минимум, следующие данные [27]:
• корень дерева Меркле, содержащего данные транзакции;
• хэш-ссылка на заголовок предыдущего блока;
• уровень сложности хэш-головоломки;
• время начала решения хэш-головоломки;
• одноразовый случайный код (nonce), который решает данную хэш-головоломку.
Процесс создания нового блока
При создании нового блока выполняются следующие действия:
1. Сформировать корень дерева Меркле, содержащего данные добавляемой транзакции.
2. Создать хэш-ссылку на заголовок блока, являющегося предшествующим с точки зрения заголовка нового блока.
3. Установить требуемый уровень сложности.
4. Установить текущее время.
5. Создать подготовительный заголовок блока, содержащий данные, перечисленные в пунктах 1-4.
6. Решить хэш-головоломку для подготовительного заголовка блока.
7. Завершить создание нового блока, добавив одноразовый случайный код (nonce), решающий хэш-головоломку для подготовительного заголовка.
На рис. 16.1 показана хэш-головоломка, которую необходимо решить при добавлении нового блока в структуру данных блокчейна. Здесь изображены данные заголовка блока, хэш-значение которого должно соответствовать заданному ограничению или уровню сложности. Отметим, что уровень сложности является частью заголовка блока, следовательно, и частью хэш-значения этого блока. Это дает уверенность в том, что никто не сможет обойтись без непомерных издержек на вычислительные мощности при решении хэш-головоломки, произвольным образом снижая уровень сложности.
Рис. 16.1 Схема хэш-головоломки, которую необходимо решить при добавлении нового блока в структуру данных блокчейна
Правила проверки
Каждый заголовок блока должен выполнять следующие правила:
1. Обязательно содержать корректную хэш-ссылку на предыдущий блок.
2. Обязательно содержать корректный корень дерева Меркле, содержащий данные транзакции.
3. Обязательно содержать корректный уровень сложности.
4. Метка времени должна быть более поздней, чем метка времени предыдущего заголовка блока.
5. Обязательно содержать одноразовый случайный код (nonce).
6. Хэш-значение всех пяти элементов данных, взятых вместе, должно соответствовать заданному уровню сложности.
Эти правила проверки гарантируют, что в структуру данных блокчейна добавляются только те блоки, для которых решена соответствующая хэш-головоломка и «погашены» все вычислительные издержки. Правило 4 обеспечивает правильное расположение блоков и соответствующих данных транзакций в том порядке, в котором они были добавлены по времени.
Примечание
Операция добавления нового блока в структуру данных блокчейна посредством решения хэш-головоломки также называется майнингом (mining) или майнингом блока (block mining).
//-- Почему это работает --//
Структура данных блокчейна позволяет сразу обнаружить любое изменение в своих данных благодаря высокой чувствительности соответствующих хэш-ссылок. При внесении изменений необходимо перезаписывать все блоки, на которые воздействует производимое изменение. Хэш-головоломка создает вычислительные накладные расходы для каждого блока, требующего перезаписи из-за внесения изменения. Суммарные вычислительные накладные расходы на перезапись всей структуры данных блокчейна из-за внесения единственного изменения сразу же заставляют задуматься о целесообразности каких-либо попыток изменить хронологию транзакций. В итоге структура данных блокчейна становится хранилищем неизменяемых данных, в которое можно только добавлять новые блоки.
//-- Накладные расходы при изменении структуры данных блокчейна --//
Предположим, что мы все-таки решили сделать попытку внесения изменений в конкретный элемент данных транзакции, являющихся частью дерева Меркле, на которые указывает заголовок блока, расположенный 20 блоками ниже текущей головы структуры данных блокчейна. Внесение изменений в данные транзакции потребует выполнения следующих операций:
1) перезаписи дерева Меркле, которому принадлежит изменяемая транзакция;
2) перезаписи заголовка блока, в котором содержится корень перезаписанного дерева Меркле;
3) перезаписи всех последующих заголовков блоков вплоть до головы структуры данных блокчейна.
В пункте 2 требуется решение хэш-головоломки, так как изменение корня дерева Меркле повлекло за собой изменение хэш-значения заголовка блока, поэтому соответствующая хэш-головоломка должна быть решена заново. В пункте 3 требуется решение 20 хэш-головоломок из-за последовательного изменения хэш-ссылок на предыдущие заголовки блоков. Если предположить, что решение хэш-головоломки занимает в среднем 10 минут, то потребуется 210 минут на внесение единственного изменения в транзакцию, принадлежащую заголовку блока, расположенного 20 блоками ниже текущей головы структуры. Значительные накладные расходы на вычисления должны удержать узлы от попыток изменения структуры данных блокчейна.
//-- Хранилище неизменяемых данных в реальном мире --//
Неизменяемость структуры данных блокчейна зависит от накладных расходов на вычисления, создаваемых хэш-головоломкой. Сложность хэш-головоломок определяет объем вычислений, следовательно, время, необходимое для их решения, которое, в свою очередь, определяет неизменяемость структуры данных блокчейна. Если уровень сложности слишком низкий, то вычислительные накладные расходы при изменении структуры данных блокчейна уменьшаются и, возможно, перестают быть фактором, удерживающим узлы от попыток изменения хронологии данных транзакций. С другой стороны, если уровень сложности слишком высокий, то накладные расходы даже на добавление нового блока могут стать непомерно большими, и это становится препятствием для добавления данных новой транзакции. Таким образом, главной задачей при проектировании блокчейн-системы является определение правильного уровня сложности хэш-головоломок. Эта задача становится еще более важной с учетом постоянного роста вычислительных мощностей компьютеров как следствия технического прогресса. Вероятно, уровень сложности должен определяться динамически.
Блокчейн-приложения в реальном мире редко используют постоянный уровень сложности для всех блоков. Вместо этого обычно применяется динамически изменяемый уровень сложности, основанный на скорости, с которой добавляются новые блоки [27, 39]. Это гарантирует, что время, необходимое для решения хэш-головоломки, остается на уровне, препятствующем изменению хронологии данных транзакций, тогда как действительные затраты на вычисления могут увеличиваться.
//-- Перспектива --//
В этой главе рассматривалась методика, применяемая блокчейном для защиты хронологии данных транзакций от изменений и подделок посредством превращения структуры данных блокчейна в хранилище неизменяемых данных, в которое можно только добавлять новые блоки. В следующей главе основное внимание будет уделено тому, как сделать это хранилище данных общедоступным в распределенной пиринговой системе.
//-- Резюме --//
• Блокчейн защищает хронологию данных транзакций от изменений и подделок, сохраняя данные транзакций в неизменяемом хранилище.
• Неизменяемость хронологии транзакций реализуется на основе двух идей:
– хранение данных транзакций в чувствительной к изменениям структуре данных блокчейна, в которой при любых изменениях требуется перезапись данных структуры, начиная с места внесения изменений и заканчивая головой всей цепочки в целом;
– обязательное требование решения хэш-головоломки для записи, перезаписи или добавления каждого отдельного заголовка блока в структуру данных блокчейна.
• Хэш-головоломка является единственной в своем роде для каждого заголовка блока, потому что зависит от его уникального содержимого.
• Необходимость перезаписи структуры данных блокчейна при ее изменении и значительные накладные расходы, связанные с этим, создают существенные трудности в изменении хронологии данных транзакций.
• Обязательность решения хэш-головоломки для каждой операции записи, перезаписи или добавления заголовков блоков в структуре данных блокчейна превращает ее в хранилище с возможностью только добавления данных.
• Заголовок блока содержит как минимум следующие данные:
– хэш-ссылка на заголовок предыдущего блока;
– корень дерева Меркле, содержащего данные транзакции;
– уровень сложности хэш-головоломки;
– время начала решения хэш-головоломки;
– одноразовый случайный код (nonce), который решает данную хэш-головоломку.
Глава 17
Распространение хранилища данных в пиринговой системе
Когда компьютеры беседуют
В главе 16 рассматривалось превращение структуры данных блокчейна в неизменяемое хранилище с возможностью только добавления данных, которое может использоваться как защищенный от изменений реестр данных транзакций. Наличие единственной неизменяемой, а лишь обновляемой хронологии данных транзакций мало значит с точки зрения определения права владения собственностью, основанного на действиях группы компьютеров как свидетелей, подтверждающих события, связанные с правами владения. Таким образом, в этой главе основное внимание уделяется созданию полностью распределенной пиринговой системы, позволяющей совместно использовать информацию о транзакциях.
//-- Метафора --//
Как лучше всего распространять некоторые новости, предназначенные для личного пользования, среди всех сотрудников компании, если у вас нет доступа к общему списку рассылки электронной почты? Один способ, гарантирующий, что все сотрудники в итоге получат новости, – совместное использование их с одним или двумя взаимосвязанными и общительными коллегами, если попросить их хранить новости в секрете. Такой подход работает, потому что практически нет никакой другой информации, которой можно было бы быстро поделиться с коллегами, кроме личных новостей, распространяемых с условием сохранения их секретности. Причина довольно проста: люди – существа социальные, им присущ искренний интерес к окружающим, поэтому совместное использование информации в некоторой группе людей является обычным поведенческим шаблоном для установления или укрепления социальных связей. В этой главе рассматривается один из аспектов блокчейна, который может представить пиринговые системы с несколько необычной и почти человеческой точки зрения. Обсуждаемый здесь аспект – это обмен информацией между компьютерами с помощью обычных средств связи.
//-- Цель --//
Блокчейн-система – это полностью распределенная пиринговая система для управления правами владения собственностью. Она состоит из отдельных компьютеров, поддерживающих собственную версию неизменяемого реестра, хранящего полную хронологию данных транзакций. Таким образом, отдельные компьютеры равнозначны свидетелю, который может проверить, действительно ли некоторая конкретная транзакция была выполнена в соответствии с личными записями этого свидетеля. Но каким образом отдельные компьютеры изначально узнают о транзакциях? Главная цель этой главы – убедить читателя в том, что отдельные компьютеры, составляющие пиринговую систему, действительно получают всю информацию о транзакциях, следовательно, способны обслуживать собственную хронологию данных транзакций.
//-- Главная задача --//
В полностью распределенной пиринговой системе нет центрального пункта координации или управления. Следовательно, нет центрального компонента, распространяющего информацию по всем компьютерам системы. Существование подобного центрального информационного пункта противоречило бы самой сущности системы. Кроме того, из-за любых технических проблем распространение информации становилось бы невозможным. Таким образом, главная задача состоит в том, чтобы все узлы системы получали полную информацию обо всех транзакциях без обращений к какому-либо центральному компоненту.
//-- Идея --//
Основная идея состоит в том, чтобы позволить компьютерам, образующим пиринговую систему, совместно использовать и свободно обмениваться информацией тем же способом, которым люди делятся новостями. Если узлы пиринговой системы передают информацию соседним узлам, а те, в свою очередь, отправляют информацию своим соседям, то в конечном итоге все узлы системы получат эту информацию.
Если объяснять более подробно, то пиринговая система имитирует способ, которым некоторая группа людей, например сотрудники компании, группа друзей, члены спортклуба, общаются между собой. Члены таких групп используют три типа беседы для различных ситуаций:
• разговор ни о чем (или «легкая светская беседа»), важный с социальной точки зрения, так как позволяет поддерживать существующие взаимоотношения, но не содержит какой-либо важной информации;
• обмен новостями, то есть беседы, в которых участники обмениваются важной информацией;
• представление новых членов группы, то есть тип беседы, необходимый для присоединения новых людей к существующей группе друзей или коллег. Установление новых взаимоотношений и прием нового члена в группу всегда требуют некоторой формы своеобразного ритуала вступления. В этот момент новички знакомятся с историей группы, в то же время формируется первое впечатление о них самих в процессе представления наиболее значимым членам группы.
//-- Как это работает: общий обзор [32, 33] --//
Пиринговые системы компьютеров являются цифровым аналогом групп людей. Отдельные компьютеры, образующие пиринговую систему, точно так же болтают ни о чем, обмениваются новостями и принимают новых членов группы, проводя ритуал вступления. Эти взаимодействия являются неотъемлемой частью любой пиринговой системы. Подобно людям, беседующим друг с другом с помощью произносимых слов, компьютеры в распределенной пиринговой системе общаются с помощью цифровой сети. Самой крупной сетью, соединяющей огромное количество компьютеров, является Интернет. Таким образом, самый дешевый способ создания пиринговой системы – организация обмена информацией между узлами через Интернет. Распределенная пиринговая система, использующая Интернет в качестве среды передачи информации, обладает следующими характеристиками:
• каждый компьютер соединен с системой через Интернет;
• каждый компьютер идентифицируется по своему адресу, отличающемуся от других адресов;
• каждый компьютер может разорвать соединение с системой и восстановить его в любой момент времени;
• каждый компьютер независимо от других поддерживает список равнозначных партнеров, с которыми он обменивается информацией;
• обмен информацией между узлами системы основан на передаче сообщений;
• сообщения передаются с одного узла на другой через Интернет, используя для этого уникальные интернет-адреса.
Обмен информацией в сетевой среде и возможность разрыва и восстановления соединения в любой момент влияют на методику доставки сообщений. Доставка сообщений в сетевой среде такого рода обладает следующими характеристиками:
• нет никаких гарантий, что сообщение дойдет до адресата, сообщения могут быть потеряны;
• сообщения могут приходить к адресату более одного раза;
• сообщения могут приходить в порядке, отличающемся от порядка их отправки.
Эти характеристики создают некоторые затруднения при обмене информацией, но указанные проблемы решаются следующими способами:
• сообщения отправляются в стиле протокола gossip. Каждый узел, получающий новую информацию, перенаправляет своим партнерам, которые обрабатывают новую информацию точно таким же образом. При таком подходе в конечном итоге каждый узел получит новости, даже если некоторые отдельные сообщения были потеряны;
• так как сообщения можно идентифицировать по их цифровым отпечаткам или по криптографическим хэш-значениям, узлы без затруднений могут обнаруживать повторяющиеся сообщения и игнорировать их;
• тот факт, что данные транзакций и заголовки блоков содержат метки времени, позволяет узлам восстановить правильный порядок сообщений по четко определенному критерию.
//-- Как это работает: подробности --//
Обмен информацией между узлами распределенной пиринговой системы должен выполнять три основные задачи:
• сохранение существующих соединений в работоспособном состоянии;
• установление новых соединений;
• распространение новой информации.
Первые два типа обмена информацией в основном сосредоточены на обеспечении функциональности самой пиринговой системы, то есть на сохранении общей работоспособности сети равных партнеров и на выполнении определенной цифровой «административно-хозяйственной» работы. Но главной целью пиринговой системы не является полная занятость работой ради самой занятости. Пиринговая система предназначена для управления правами владения собственностью. Поэтому третий тип обмена информацией сосредоточен на добавлении новых данных транзакций и новых блоков в структуру данных блокчейна. Эта информация необходима каждому узлу системы для обслуживания собственной версии хронологии транзакций.
Сохранение существующих соединений в работоспособном состоянии
Каждый компьютер в сети независимо от других поддерживает собственный список партнеров, с которыми он обменивается информацией. Этот список содержит лишь некоторое подмножество всех узлов, образующих всю систему в целом. Это похоже на сотрудников, поддерживающих социальные связи только с некоторыми коллегами, формируя тем самым лишь отдельную подгруппу всех сотрудников одной компании. Каждый компьютер регулярно проверяет работоспособность своих партнеров, отправляя короткое сообщение под названием пинг (ping) с запросом ответа в форме сообщения, называемого понг (pong). Партнеры, которые упорно не отвечают на эти сообщения, удаляются из списка. Это похоже на «светскую беседу» между коллегами, главной целью которой является сохранение социальных взаимоотношений.
Установление новых соединений
Каждый компьютер может послать запрос на присоединение к пиринговой системе, отправив соответствующее сообщение любому узлу, входящему в эту систему. Запрашиваемый узел добавляет адрес претендента в свой список партнеров и отправляет подтверждение в ответном сообщении. После получения ответа новый узел также добавляет адрес отправителя в свой список партнеров. В результате устанавливается новое соединение, а к системе добавляется новый узел. Наличие только одного соединения с системой крайне ненадежно, так как любой узел может закрыть соединение, завершить работу корректно или даже аварийно в любой момент. Поэтому, присоединяясь к пиринговой системе, компьютер обычно устанавливает соединения с несколькими различными узлами, уже являющимися частью системы. Это обеспечивает сохранение соединения с системой в целом, даже если отдельные узлы разорвали свои соединения или завершили работу.
Распространение новой информации
Этот тип обмена информацией служит для достижения основной прикладной цели системы – управления правом владения собственностью. Цель достигается посредством передачи новых данных транзакций и новых блоков, добавляемых в структуру данных блокчейна, в соответствии с принципами протокола gossip с обеспечением пересылки информации для дальнейшего ее распространения. Совместное использование информации о правах владения собственностью осуществляется в следующих трех вариантах:
• непрерывно: новая информация (данные новых транзакций и новые блоки) распространяется по мере ее создания. Каждый узел, соединенный с системой, в конце концов получит все новости;
• единовременное обновление: узлы, которые восстанавливают соединение с системой после временного отключения, получают все данные транзакций и блоки, появившиеся в системе во время отсутствия этих узлов;
• как часть адаптационной процедуры: новые узлы, присоединяющиеся к системе, не имеют возможности сформировать собственную хронологию транзакций, так как до этого система была для них недоступна. Следовательно, такие узлы должны получить всю хронологию транзакций, завершенных до момента подключения их к системе. Передача копии полной актуальной версии структуры данных блокчейна новым узлам гарантирует, что после присоединения к системе каждый новый узел становится полноправным партнером. Этот тип доставки информации можно рассматривать как особый случай обновления: полное обновление всей хронологии транзакций, когда-либо выполненных в системе.
//-- Почему это работает --//
Различные типы обмена информацией обеспечивают возможность присоединения к системе новых компьютеров, соответственно, и возможность роста и развития всей системы в целом. Кроме того, это сохраняет единство системы на основе обмена информацией об установлении новых и поддержании существующих соединений. И что более важно, система использует принципы протокола gossip в плане обмена информацией, гарантируя, что в конечном итоге все члены пиринговой системы получат все данные транзакций и блоки, добавляемые в структуру данных блокчейна.
//-- Перспектива --//
В этой главе основное внимание было сосредоточено на том, как отдельные компьютеры становятся узлами распределенной пиринговой системы и как компьютеры, образующие такую систему, обмениваются информацией. Особое внимание было уделено подробностям доставки сообщений в ненадежной сетевой среде. Но здесь ничего не было сказано о том, что делают узлы системы с информацией после ее получения, хотя обработка информации не менее важна, чем получение информации. Поэтому в следующей главе рассматривается, как данные транзакций обрабатываются на отдельных узлах системы.
//-- Резюме --//
• Компьютеры в распределенной пиринговой системе обмениваются информацией с помощью цифровой сети.
• Интернет является самой распространенной и общедоступной сетью, поэтому является наиболее подходящим вариантом для создания распределенной пиринговой системы с установлением соединений между отдельными узлами через Интернет.
• Пиринговая система, использующая Интернет в качестве среды передачи информации, обладает следующими характеристиками:
– каждый компьютер соединен с системой через Интернет;
– каждый компьютер идентифицируется по своему адресу, отличающемуся от других адресов;
– каждый компьютер может разорвать соединение с системой и восстановить его в любой момент времени;
– каждый компьютер независимо от других поддерживает список равнозначных партнеров, с которыми он обменивается информацией;
– обмен информации между узлами системы основан на передаче сообщений;
– сообщения передаются с одного узла на другой через Интернет, используя для этого уникальные интернет-адреса.
• Из-за ненадежности существующих сетевых сред при обмене информацией между узлами характерны следующие факты:
– нет никаких гарантий, что сообщение дойдет до адресата, сообщения могут быть потеряны;
– сообщения могут приходить к адресату более одного раза;
– сообщения могут приходить в порядке, отличающемся от порядка их отправки.
• Технология блокчейна устраняет недостатки обмена информацией в ненадежной сетевой среде следующими способами:
– сообщения отправляются в стиле протокола gossip. Каждый узел, получающий новую информацию, перенаправляет своим партнерам, которые обрабатывают новую информацию точно таким же образом;
– повторяющиеся сообщения, содержащие транзакции и блоки, идентифицируются и отфильтровываются по их криптографическим хэш-значениям;
– каждый узел может восстановить правильную последовательность сообщений и упорядочить информацию, поскольку данные транзакций и заголовки блоков содержат метки времени.
• Обмен информацией между узлами распределенной пиринговой системы должен выполнять три основные задачи:
– сохранение существующих соединений в работоспособном состоянии;
– установление новых соединений;
– распространение новой информации.
• Распространение информации о правах владения собственностью осуществляется в следующих трех вариантах:
– непрерывно, то есть информация о данных новых транзакций и о новых блоках сразу передается всем узлам, соединенным с системой;
– единовременное обновление для всех узлов, которые восстанавливают соединение с системой после временного отключения;
– как часть адаптационной процедуры, передающей копию полной актуальной версии структуры данных блокчейна новым узлам, которая гарантирует, что после присоединения к системе каждый новый узел становится полноправным партнером.
Глава 18
Методы проверки и добавления транзакций
Управление группой компьютеров с помощью кнута и пряника
В главе 17 рассматривалось превращение отдельных компьютеров в узлы полностью распределенной пиринговой системы, которая предоставляет возможность обмена информацией о данных транзакций и новых блоках, добавляемых в структуру данных блокчейна. В этой главе объясняется, что происходит после того, как узел получает данные транзакции, и как убедиться в том, что в структуру данных блокчейна добавляются только корректные данные транзакции и блоки.
//-- Метафора --//
Предположим, что существует некая компания, предлагающая простую услугу: оценка тестов с несколькими вариантами ответов для школьников и студентов. Школы и университеты могут присылать в эту компанию заполненные формы с помеченными вариантами ответов, которые выбрали учащиеся, вместе с правильными решениями. Компания выставляет оценки по каждой форме с ответами. К сожалению, сотрудники этой компании выполняют свою работу спустя рукава из-за слишком низкой мотивации. Поэтому компания вынуждена превратить всех своих штатных сотрудников в лиц, работающих по договору (контракту) и получающих вознаграждение только за качественно выполненную работу. При этом обязательным является соблюдение следующих трех правил:
1. Все формы с ответами, требующие обработки, все решения и все обработанные (и помеченные соответствующим образом) формы с ответами в любое время доступны всем контрагентам, работающим по договору. Это обеспечивает программная система компании.
2. Только тот контрагент, который первым правильно обработал и пометил форму с ответами, получает один доллар в качестве вознаграждения.
3. Если контрагент обнаруживает, что другой контрагент обработал и пометил форму с ответами неправильно, то контрагент, допустивший ошибку, возвращает полученную сумму, а контрагент, обнаруживший и исправивший ошибку, получает эту же сумму.
//-- Последствия --//
Правила, введенные в описанном выше сценарии, приводят к нескольким заслуживающим внимания последствиям:
• поскольку контрагенты получают оплату только за качественно выполненную работу, у них появляется мощный экономический стимул для строгого соблюдения правил;
• благодаря правилу 1 все контрагенты имеют равные возможности для качественного выполнения работы и получения оплаты за нее;
• благодаря правилу 1 все контрагенты получают информацию, необходимую для проверки и корректировки работы своих коллег;
• благодаря правилу 2 каждый контрагент действительно заинтересован в том, чтобы выполнить работу как можно быстрее. Но при этом из-за спешки может пострадать качество работы;
• благодаря правилу 3 каждый контрагент заинтересован в добросовестном и качественном выполнении своей работы;
• благодаря правилу 3 каждый контрагент заинтересован в выполнении проверок и корректировок работы своих коллег.
Благодаря вводу этих правил продуктивность компании значительно увеличилась, но через несколько месяцев стали поступать многочисленные жалобы от клиентов. Качество работы резко снизилось. Складывалось впечатление, что все формы с выбранными ответами были обработаны и помечены абсолютно случайным образом. После некоторого расследования ситуации компания выяснила, что контрагенты заключили между собой тайное соглашение. Они решили не проверять результатов работы коллег, а обрабатывать и помечать формы ответов как можно быстрее. Поскольку маркировка форм случайным произвольным образом – самый быстрый способ выполнения такой работы, в конце концов все контрагенты стали использовать эту стратегию.
Из этой метафоры можно извлечь следующий урок: сочетание поощрений, наказаний, давления на коллег и конкуренции может использоваться для управления группой независимо действующих лиц до тех пор, пока они не начинают совместного противодействия этой политике.
В этой главе рассматривается алгоритм блокчейна, представляющий собой искусную реализацию метода кнута и пряника в сочетании с конкуренцией и давлением на партнеров и работающий в том же ключе, что и компания в приведенном выше примере. Но главная трудность заключается в правильной реализации всех мельчайших подробностей.
//-- Цель --//
Основная цель – позволить всем добавлять данные новой транзакции в хронологию транзакций с сохранением целостности.
//-- Главная задача --//
Технология блокчейна полностью открыта. Любой человек, даже самый нечестный, может подключать компьютеры к системе и после этого создавать транзакции и передавать их всем прочим узлам, образующим систему. Поэтому невозможно с уверенностью утверждать, что транзакции, передаваемые по сети, являются корректными. Таким образом, главная задача – сохранить открытость системы для всех, но при этом обеспечить добавление только корректных транзакций.
//-- Идея --//
Чтобы обеспечить добавление только корректных транзакций в систему, всем узлам системы разрешается также действовать как супервизоры по отношению к своим партнерам и поощрять их за добавление корректных и авторизованных транзакций и за обнаружение ошибок в работе других узлов. В итоге все узлы системы заинтересованы в правильной обработке транзакций, в контроле и обнаружении всех ошибок, сделанных каким-либо партнером [26].
//-- Как это работает: структурные элементы системы --//
Алгоритм блокчейна – это последовательность инструкций, управляющих способом обработки новых данных транзакций и блоков узлами. Отдельные правила и процедуры можно проследить в обратном направлении, возвращаясь к следующим структурным элементам:
• правила проверки;
• поощрение;
• наказание;
• конкуренция;
• управление партнерами.
Правила проверки
Конечная цель алгоритма блокчейна – убедиться в том, что в структуре данных блокчейна содержатся только корректные блоки, которые, в свою очередь, состоят из корректных данных транзакций и корректных заголовков блоков. Корректность этих данных проверяется на основе двух различных групп правил:
• правила проверки для данных транзакций;
• правила проверки для заголовков блоков.
Правила проверки для данных транзакций
Правила проверки для данных транзакций определяют, какие данные обязательно требуются для описания транзакции. В эти правила включены условия формальной корректности, семантической (смысловой) корректности и авторизации. В главе 9 обсуждались правила проверки для данных транзакций. Эти правила специально предназначены для прикладных целей технологии блокчейна. Таким образом, правила проверки в блокчейн-системе для управления правом владения цифровыми бонусными баллами могут совершенно отличаться от правил проверки в блокчейн-системе, управляющей правом владения недвижимостью.
Правила проверки для заголовков блоков
Правила проверки для заголовков блоков сосредоточены на соблюдении формальной и семантической корректности заголовков блоков. Эти правила не имеют никакого отношения к содержимому данных транзакций, они относятся к способу добавления информации в структуру данных блокчейна. В главе 16 рассматривались обязательные данные заголовков блоков и соответствующие правила проверки. Главным элементом проверки заголовков блоков является верификация доказательства проделанной работы или решения соответствующей хэш-головоломки. Обработка будет продолжена только для тех блоков, заголовки которых содержат правильное решение конкретной хэш-головоломки, связанной с этим блоком. Каждый блок, заголовок которого не прошел верификацию доказательства выполненной работы, немедленно отбрасывается.
Поощрение
Создание корректных блоков требует затрат энергии, времени и денег, поскольку при этом необходимо решить сложную хэш-головоломку, специально предназначенную для каждого блока. Такая хэш-головоломка является неотъемлемым элементом обеспечения неизменяемости структуры данных блокчейна. Следовательно, решение хэш-головоломки обязательно, поэтому неизбежны и сопутствующие затраты. Единственный способ убедить партнеров взять на себя все трудности решения хэш-головоломки – предложить им вознаграждение как компенсацию за проделанную работу. Таким образом, алгоритм блокчейна определяет, как поощряются узлы, которые подтверждают корректность блоков. Если взглянуть с более абстрактной точки зрения, то кто-то может установить, что вознаграждение является компенсацией за все трудности, связанные с обеспечением и поддержкой целостности всей системы.
Наказание
Поощрение представляет собой лишь один инструмент, мотивирующий партнеров выполнять проверки данных транзакций и создавать корректные блоки. В блокчейн-системе также необходим способ наказания партнеров за противодействие сохранению целостности системы. Обычным средством наказания является отмена поощрения за блоки, которые в прошлом были приняты, но в дальнейшем были идентифицированы как некорректные или бесполезные. Другая форма наказания – отсутствие поощрения. Узлам позволяется подтверждать выполненную работу, но поощрение за это не следует, если блок признан дублирующимся, слишком старым или бесполезным. Это оправданная мера, так как создание корректного блока требует решения хэш-головоломки, связанного с большими накладными расходами. Неполучение поощрения за создание блока означает, что затраты на его создание не компенсируются. Таким образом, отсутствие поощрения также является одной из форм наказания.
Конкуренция
Поощрение узлов за добавление корректных блоков представляет собой основную концепцию алгоритма блокчейна, но выдача поощрений также связана с затратами ресурсов. Следовательно, важно предотвратить неоправданные траты ресурсов на раздачу поощрений узлам, которые не внесли существенного вклада в обслуживание системы. Наилучший способ достижения высокого качества работы при снижении накладных расходов – введение режима конкуренции за поощрения на основе четко определенного критерия. Алгоритм блокчейна поддерживает постоянное состояние конкуренции за поощрения на основе двух критериев. В действительности конкуренция представляет собой комбинацию из двух последовательных этапов:
• конкуренция по скорости;
• конкуренция по качеству.
Только те узлы, которые преуспели на обоих этапах конкуренции, получают поощрение за добавление нового блока. Хитрый прием в конкуренции такого рода состоит в том, что проигравшие по скорости становятся арбитрами в конкуренции по качеству и проверяют корректность блока, который добавляет победитель по скорости. Такой подход обеспечивает строгую проверку добавляемого блока.
Конкуренция по скорости
Соревнование в скорости между узлами основано на решении хэш-головоломки. Главным элементом создания корректного блока является создание подтверждения выполненной работы, то есть решение хэш-головоломки, специально предназначенной для этого нового блока. С учетом сущности криптографических хэш-функций неизвестно, сколько времени займет решение хэш-головоломки. Невозможно заранее решить хэш-головоломку, потому что каждая конкретная головоломка зависит от содержимого самого блока. В итоге все узлы принимают участие в соревновании по решению хэш-головоломки для нового блока. После того как какой-то узел добавляет новый блок, этап конкуренции по скорости завершается. Узел, первым добавивший новый блок с правильным решением соответствующей хэш-головоломки, становится победителем этапа конкуренции по скорости и кандидатом на победу в этапе конкуренции по качеству.
Конкуренция по качеству
На этапе конкуренции по качеству все внимание сосредоточено на корректности добавленного блока. Новый блок, только что добавленный некоторым узлом, сразу же рассылается всем узлам системы. После получения нового блока каждый узел должен выступить в роли арбитра на этапе конкуренции по качеству, то есть проверить корректность нового блока на основе правил проверки для данных транзакций и заголовков блоков. Если блок признан корректным, то узел, добавивший новый блок, получает поощрение, после чего начинается новый этап конкуренции по скорости с обработкой данных транзакции, которые еще не использовались или были получены во время проведения этапа конкуренции по качеству. Если блок признан некорректным, он отбрасывается, и снова начинается этап конкуренции по скорости для всех транзакций, уже ожидающих своей очереди.
На этапе конкуренции по качеству имеется один любопытный аспект управления партнерами. Получив новый блок, каждый узел осознает, что он уже проиграл соревнование по скорости и должен работать как арбитр на этапе конкуренции по качеству. Очевидно, что проигравшие узлы являются самыми дотошными и строгими арбитрами, и кому-то может показаться, что из-за поражения на этапе конкуренции по скорости им уже нечего терять. На самом деле все узлы знают, что могут вернуться в игру, конкурируя за поощрение, если смогут доказать, что добавленный блок некорректен. В этом случае возобновляется этап конкуренции по скорости, и узлы получают шанс завершить этот этап добавлением своего блока, обработка которого была прервана, и победить в соревновании. Таким образом, этап конкуренции по качеству или оценка корректности добавленного блока будет выполнена с высоким уровнем точности.
Управление партнерами
Даже самые лучшие правила бесполезны, если никто им не следует, не следит за их соблюдением и не обеспечивает их выполнения. К сожалению, в полностью распределенных пиринговых системах абсолютно неприемлем какой-либо центральный пункт управления и координации, который мог бы обеспечить соблюдение и действительную реализацию выполнения правил. Следовательно, алгоритм блокчейна делает все узлы системы супервизорами всех прочих узлов. Узлы системы одновременно являются и обыкновенными рабочими, и супервизорами, потому что они проверяют транзакции и создают новые блоки, в то же время принимают, исследуют и проверяют блоки, созданные другими узлами. Работа каждого узла вносит вклад как в создание новых корректных блоков, так и в определение, отклонение или удаление некорректных данных транзакции или некорректного блока.
//-- Как это работает: общая схема --//
Правила конкуренции устанавливают простой двухфазный режим, управляющий работой каждого узла в сети. В любой момент времени все узлы системы находятся в одной из двух фаз:
1) исследование нового блока, созданного и добавленного одним из партнеров;
2) упорная попытка стать следующим узлом, создающим новый блок, который обязательно будет исследоваться и оцениваться всеми прочими партнерами.
Один из наиболее важных результатов применения алгоритма блокчейна заключается в том, что он не только обеспечивает проверку корректности данных транзакций и блоков, но и дает уверенность в том, что все узлы находятся в одинаковой рабочей фазе. Эта одинаковая рабочая фаза является главной концепцией, гарантирующей, что все блоки поддерживают одинаковую хронологию данных транзакций. Но общая рабочая фаза не применяется к узлам по единому центральному хронометру, потому что это противоречило бы самой сущности полностью распределенной системы. Точное время рабочей фазы определяется по времени прибытия сообщений на отдельные узлы. Сразу после получения сообщения, содержащего новый блок, узел переключается в фазу исследования, а после завершения фазы исследования узел возвращается в фазу проверки новых данных транзакции и создания нового блока.
//-- Как это работает: подробности --//
Процедура, управляющая тем, как узлы обрабатывают новые данные транзакции и блоки, полученные от своих партнеров, состоит из следующих правил (правила, выделенные полужирным шрифтом, устанавливают двухфазовый режим):
1. Новые данные транзакций и новые блоки передаются всем узлам в стиле протокола gossip.
2. Каждый узел собирает новые данные транзакций в почтовом ящике для приема сообщений и выбирает необходимые для обработки.
3. Каждый узел обрабатывает новые блоки немедленно с наивысшим приоритетом.
4. Каждый узел обрабатывает новые данные транзакций, проверяя их авторизацию, а также формальную и семантическую корректность.
5. Каждый узел объединяет только проверенные корректные данные транзакций в дерево Меркле и начинает процесс создания нового блока посредством решения соответствующей хэш-головоломки.
6. После того как узел завершает решение хэш-головоломки, он рассылает только что созданный блок всем прочим узлам.
7. Каждый узел обрабатывает новые блоки, проверяя решение соответствующей хэш-головоломки, а также проверяя все содержащиеся в блоке данные транзакции на формальную корректность, семантическую корректность и авторизацию.
8. Каждый узел добавляет корректные проверенные блоки в собственную копию структуры данных блокчейна.
9. Если новый полученный блок идентифицирован как некорректный, то он отвергается, и узлы продолжают обработку данных транзакции или завершают решение хэш-головоломки нового блока.
10. Если новый полученный блок идентифицирован как корректный, то узлы удаляют те транзакции, которые содержатся в этом блоке, из своих почтовых ящиков и начинают обработку новых данных транзакции и создание нового блока.
11. Если блок, ранее добавленный в структуру данных блокчейна, впоследствии идентифицируется как некорректный или бесполезный, то такой блок и все связанные с ним последующие блоки будут удалены [1 - В действительности блоки, идентифицированные как некорректные через некоторое время после их добавления, не удаляются физически из структуры данных блокчейна. Вместо этого они помечаются как некорректные, после чего считается, что они как бы удалены. В результате все изменения структуры сохраняются в качестве документации.] из структуры данных блокчейна, а данные транзакций из этих блоков снова добавляются в почтовый ящик для повторной обработки.
12. Узел, чей блок был принят, в качестве поощрения получает вознаграждения за все транзакции, содержащиеся в этом блоке.
13. Если блок удаляется из структуры данных блокчейна, то вся сумма вознаграждения снимается с узла, добавившего этот блок.
//-- Почему это работает --//
Обоснования функционирования правил из предыдущего раздела приведены ниже:
• благодаря правилу 1 все узлы получают в полном объеме информацию, необходимую для проверки и добавления данных транзакций;
• благодаря правилу 2 узлы обрабатывают полученные новые данные транзакций;
• благодаря правилу 3 блоки, созданные другими узлами, обрабатываются сразу же после прибытия их в почтовые ящики узлов;
• благодаря правилу 4 в структуру данных блокчейна добавляются только проверенные корректные данные транзакций;
• благодаря правилу 5 все узлы принимают участие в состязании по решению хэш-головоломки. Невозможно предсказать, какой узел решит первым эту задачу, из-за самой сущности хэш-головоломки;
• благодаря правилу 6 все узлы оповещаются о том, что некоторый узел решил хэш-головоломку для нового блока;
• благодаря правилам 6 и 3 все узлы получают новый созданный блок и узнают победителя состязания по решению хэш-головоломки;
• благодаря правилу 7 все узлы системы контролируют и проверяют новые созданные блоки и гарантируют, что принимаются только корректные блоки;
• благодаря правилу 8 все узлы добавляют новые блоки в собственную копию структуры данных блокчейна, следовательно, дополняют хронологию транзакций;
• благодаря правилу 9 совместно обслуживаемая хронология транзакций защищается от некорректных транзакций, таким образом обеспечивается ее целостность;
• благодаря правилу 10 данные транзакций не добавляются повторно;
• благодаря правилу 11 ни одна корректная транзакция не будет потеряна, даже если ранее обработанные блоки обрабатываются повторно;
• благодаря правилу 11 система получает возможность выполнять дополнительные ретроспективные проверки хронологии транзакций и исправлять сделанные ранее записи;
• благодаря правилу 12 узлы получают стимул для выполнения обработки транзакций и создания новых блоков как можно быстрее;
• благодаря правилу 12 все узлы получают стимул для оповещения прочих узлов о создании нового блока, потому что получение поощрения (вознаграждения) зависит от того, будут ли новые транзакции проверены и приняты всеми прочими узлами;
• благодаря правилу 13 поощряется корректная работа узлов, позволяющая избежать принятия любых некорректных данных транзакций или создания некорректных блоков;
• благодаря правилу 13 все узлы получают стимул для выполнения ретроспективных исследований и проверок блоков и транзакций.
//-- Реакция на нечестное поведение --//
Блокчейн-система нацелена на создание и обеспечение целостности и атмосферы доверия в полностью открытой пиринговой системе, состоящей из неизвестного количества узлов с неизвестной надежностью и степенью доверия друг другу. Ниже перечислены наиболее часто встречающиеся типы нечестного поведения в пиринговых системах, управляющих правом владения собственностью:
• добавление транзакций с попыткой выдать себя за другое лицо;
• подтверждение некорректных данных транзакций или блоков;
• перегрузка узла огромным объемом данных транзакций с целью вывода его из строя;
• отказ от обработки определенных данных транзакций;
• отказ от распространения информации.
Вот почти полный список средств противодействия всем перечисленным вариантам нечестного поведения:
• концепция защиты транзакций (идентификация, аутентификация и авторизация с помощью асимметричной криптографии и цифровых подписей), ограничивающая доступ к учетной записи владельца соответствующего закрытого ключа;
• модель обмена информацией в стиле протокола gossip (распространение слухов), гарантирующая, что в конце концов каждый узел получит полную информацию;
• архитектура системы, обеспечивающая жизнеспособность всей системы в целом, даже если некоторые отдельные узлы выходят из строя или прекращают обработку данных;
• алгоритм блокчейна.
Самым важным оружием блокчейн-системы против нечестных узлов является явное преобладание честных партнеров и средства поощрения и наказания. Даже если некоторые узлы посылают поддельные транзакции или подтверждают некорректные данные транзакций, большинство честных узлов и их стремление к вознаграждению за счет своего численного превосходства не допустят попыток обмана, нарушающих целостность системы. Проще говоря, успех этого подхода зависит от исходного предположения, что в системе действительно имеется подавляющее большинство честных узлов.
//-- Перспектива --//
В этой главе рассматривались обработка данных транзакций в блокчейн-системе и добавление обработанных данных в структуру данных блокчейна, то есть включение их в официальную хронологию данных транзакций. Инструкции, обсуждаемые в этой главе, предназначены для обеспечения уверенности в том, что все узлы системы обслуживают одинаковые версии структуры данных блокчейна, следовательно, и одинаковую хронологию данных транзакций. Но иногда узлы работают с разными версиями хронологии, а это означает, что они не согласованы с единой хронологией данных транзакций. Устранение подобных конфликтов представляет собой еще одну задачу алгоритма блокчейна, о которой пойдет речь в следующей главе.
//-- Резюме --//
• Алгоритм блокчейна – это последовательность правил и инструкций, управляющих способом обработки новых данных транзакций и блоков и добавления их в систему.
• Главная задача, решаемая алгоритмом блокчейна, – сохранение открытости системы для всех с одновременной гарантией того, что будут добавляться только корректные и авторизованные транзакции.
• Алгоритм блокчейна применяет метод «кнута и пряника» в сочетании с созданием конкуренции и самоуправления партнерами в системе.
• Основная идея алгоритма блокчейна – позволить всем узлам системы действовать как супервизоры по отношению к прочим партнерам и поощрять их за добавление корректных и авторизованных транзакций, а также за обнаружение ошибок в работе других узлов.
• Благодаря правилам алгоритма блокчейна все узлы системы получают стимул к правильной обработке транзакций, к выполнению роли супервизора и к обнаружению всех ошибок, сделанных другими партнерами.
• Алгоритм блокчейна основан на следующих принципах:
– правила проверки данных транзакций и заголовков блоков;
– поощрение создания корректных блоков;
– наказание за противодействие сохранению целостности системы;
– конкуренция между партнерами за получение вознаграждения на основе оценки скорости и качества обработки данных;
– самоуправление равных партнеров.
• Правила конкуренции устанавливают двухфазный режим, управляющий работой каждого узла в сети. В любой момент времени все узлы системы находятся в одной из двух фаз:
– исследование нового блока, созданного и добавленного одним из партнеров;
– упорная попытка стать следующим узлом, создающим новый блок, который обязательно будет оцениваться всеми прочими партнерами.
• Точное время рабочей фазы определяется по времени прибытия сообщений на отдельные узлы.
• Подавляющее большинство честных узлов и их стремление к вознаграждению за счет своего численного превосходства не допустят попыток обмана, нарушающих целостность системы.
Глава 19
Выбор хронологии транзакций
Пусть компьютеры голосуют своими ногами
В главе 18 рассматривалось, как узлы блокчейн-системы обрабатывают данные транзакций и новые блоки. Но версии хронологии транзакций, обслуживаемые отдельными узлами системы, могут различаться из-за задержек или ошибок при передаче сообщений. В этой главе все внимание уделено устранению конфликтов между различными версиями хронологии транзакций, поддерживаемыми отдельными узлами системы.
//-- Метафора --//
Когда вы в последний раз гуляли по парку? Обращали ли вы внимание на одно явление, которое можно наблюдать в большинстве парков мира? В них есть вымощенные дорожки, созданные по планам и идеям ландшафтных архитекторов, и тропинки, протоптанные посетителями. Чаще всего тропинки протоптаны по прямой линии прямо по газонам и являются кратчайшими путями между двумя зданиями или сооружениями, между двумя скамейками или любыми другими часто посещаемыми объектами. Протоптанные тропинки появляются в тех местах, где много людей независимо друг от друга и постоянно решают сойти с вымощенной дорожки, так как новый путь им кажется более предпочтительным, чем существующий. Таким образом, создание грунтовых тропинок в парках может рассматриваться как проявление простейшей формы демократии. Это не официальные опросы или голосования по поводу создания таких тропинок, но каждый посетитель вносит свой вклад в их появление, самостоятельно решая, пройти ли по определенному пути, оставить ли свои следы на земле. Малоиспользуемые протоптанные тропинки исчезают, поскольку природа возвращает свою территорию, другие остаются, потому что многие люди продолжают ходить по ним. В этой главе рассматривается блокчейн-система с точки зрения функционирования, похожего на процесс появления и исчезновения протоптанных тропинок в парках.
//-- Цель --//
Основная цель – сохранение и поддержание единой непротиворечивой версии хронологии данных транзакции всеми узлами сети как результата одинаковых ответов на запросы по определению и уточнению прав владения собственностью независимо от того, к какому конкретному узлу обращен запрос.
//-- Главная задача --//
В соответствии с описанием в главе 18 алгоритм блокчейна определяет двухфазовый режим для всех узлов системы. В любой рассматриваемый момент времени каждый узел системы либо проверяет новый блок, созданный одним из партнеров, либо настойчиво пытается стать следующим узлом, сформировавшим новый блок, который в дальнейшем будет проверяться всем партнерами. Но при этом не существует общих для всех часов, управляющих узлами и обусловливающих, какой именно тип работы должен выполняться в определенный момент времени. Прибытие новых блоков в почтовые ящики отдельных узлов является генератором тактового сигнала, который управляет работой каждого отдельного узла. Но на рассылку новых блоков в почтовые ящики узлов очень сильно влияют возможности службы доставки сообщений конкретной сетевой среды, обладающей собственными характеристиками. Сообщения могут теряться, доставляться с задержкой и приходить в произвольном порядке. В итоге узлы сети не имеют в своем распоряжении одинаковую информацию одновременно. Более того, переключение между двумя рабочими фазами не происходит в одно и то же время для всех узлов. Вместо этого каждый узел переключается в другую рабочую фазу в момент времени, определяемый прибытием сообщений в индивидуальный почтовый ящик. Это приводит к частичному несогласованию рабочих фаз отдельных узлов. Оба описанных выше явления становятся значительным препятствием для сохранения единой непротиворечивой хронологии данных транзакций для всех партнеров в сети. Таким образом, главная задача – найти способ определения единой непротиворечивой хронологии данных транзакций с учетом всех сложностей доставки сообщений, без возврата к централизованному решению.
//-- Идея --//
Пример с протоптанными тропинками в парках показывает, что группа людей может достичь соглашения или прийти к единому мнению при коллективном решении задач, независимо друг от друга и постоянно голосуя собственными ногами. Результат такого типа голосования часто называют распределенным консенсусом (соглашением) (distributed consensus), потому что к этому консенсусу пришли независимо действующие отдельные люди без какого-либо центрального органа управления или координации.
Примечание
Консенсус – это синоним соглашения между независимыми отдельными лицами. Распределенный консенсус – это соглашение между членами полностью распределенной пиринговой системы.
Ситуации, в которых большая группа независимо действующих отдельных лиц решает общую задачу, можно охарактеризовать с помощью следующих условий [14]:
1. Группа отдельных лиц действует в одинаковой среде.
2. Существует задача, требующая принятия коллективного решения.
3. Все отдельные лица независимо друг от друга стремятся достичь единой цели.
4. Индивидуальные действия, выполняемые для достижения этой цели, оставляют ощутимые метки в среде, которые помогают решить поставленную задачу, требующую коллективного решения.
5. Отдельные лица используют одинаковые критерии для оценки поставленной задачи и процесса ее решения на основе изменения текущей среды.
Основная идея блокчейн-системы заключается в том, чтобы позволить всем узлам независимо голосовать собственными ногами, следовательно, достигать коллективного соглашения в отношении выбора единственной версии хронологии транзакций. К этому моменту нам уже известно, что технология блокчейна позволяет выполнить первые четыре условия процесса коллективного принятия решения:
1. Все узлы действуют в одинаковой среде, состоящей из сети, узлов, обслуживающих собственные копии структуры данных блокчейна, и алгоритма блокчейна, управляющего поведением узлов.
2. Задача, требующая решения, – это коллективный выбор единой хронологии транзакций.
3. Все узлы стремятся увеличить до максимума свой индивидуальный доход, полученный как поощрение за добавление новых корректных блоков в структуру данных блокчейна.
4. Чтобы достичь своих целей, узлы посылают новые блоки всем партнерам для проверки и приема. В результате каждый узел оставляет индивидуальные отпечатки в среде, которые совместно обслуживают структуру данных блокчейна.
Здесь пропущен пятый пункт: критерий, который все узлы используют для принятия решения на основе изменения среды. Процесс выбора хронологии данных транзакций основан на том, как новые блоки добавляются в структуру данных блокчейна и как данные защищаются от изменений. Благодаря процедуре подтверждения выполненной работы добавление нового блока связано со значительными издержками на вычисления, а попытки изменить хронологию транзакций приводят к еще большим накладным расходам на вычисления. Таким образом, объем суммарных вычислительных затрат на создание хронологии данных выглядит вполне естественным критерием для выбора правильной хронологии в том случае, когда существует несколько конфликтующих версий. Если все узлы системы применяют одинаковый критерий для выбора хронологии транзакций, то все узлы в итоге приходят к соглашению по единой одинаковой для всех версии хронологии. Совместно выбранную версию хронологии транзакций часто называют заслуживающей доверия цепочкой или хронологией (authoritative chain or history).
//-- Как это работает --//
Идея выбора хронологии транзакций по объему вычислительных затрат на ее создание приводит к следующим двум критериям:
• критерий самой длинной цепочки (longest-chain-criterion) [26];
• критерий самой затратной цепочки (heaviest-chain-criterion) [39, 27].
Критерий самой длинной цепочки
Критерий самой длинной цепочки (longest-chain-criterion) основан на предположении, что структура данных блокчейна, состоящая из наибольшего количества блоков, представляет максимальный суммарный объем вычислений. Чтобы лучше понять этот критерий, рассмотрим исходную ситуацию, в которой все узлы распределенной системы поддерживают и согласовывают одинаковую версию структуры данных блокчейна, как показано на рис. 19.1, где схематически изображена структура данных блокчейна, для упрощения показанная без большинства подробностей. Каждый прямоугольник представляет один блок, идентифицируемый по укороченному хэш-значению. Стрелка, направленная от одного прямоугольника к другому, обозначает хэш-ссылку, связывающую заголовок блока с предшествующим заголовком. В этой исходной ситуации все узлы согласны с единой хронологией данных транзакций и стараются увеличить существующую цепочку на один блок, который ссылается на блок A397 как на предшествующий.
Рис. 19.1 Исходная структура данных блокчейна в распределенной системе
Создание нового блока – это состязание между всеми узлами, потому что этот процесс требует решения специальной хэш-головоломки для этого блока. На рис. 19.2 показана структура данных блокчейна, которую поддерживает большинство узлов, после того как один узел решил хэш-головоломку нового блока и разослал его всем партнерам. В результате те узлы, которые поддерживают структуру данных блокчейна в виде, показанном на рис. 19.2, стараются расширить ее с помощью нового блока, ссылающегося на блок AB12 как на предшествующий. С точки зрения большинства существует только одна версия структуры данных блокчейна, состоящая из трех блоков. Но рассылка нового блока по сети требует времени, и с этим сталкиваются все типы конкурентов. Из-за задержки при передаче сообщений некоторые узлы (они в меньшинстве) еще не получили блока AB12. Поэтому они продолжают попытки наращивания цепочки, изображенной на рис. 19.1. В конце концов, один из этих узлов успешно решает хэш-головоломку для нового блока, получает хэш-значение DD01 и передает блок партнерам. Таким образом, большинство узлов получает и блок AB12, и блок DD01. В итоге большинство узлов поддерживает структуру данных блокчейна, показанную на рис. 19.3, в которой имеются две ветви на вершине общего ствола. В этой ситуации критерий самой длинной цепочки не позволяет получить недвусмысленный результат, так как обе цепочки (AB12 → A397 → 33FF и DD01 → A397 → 33FF) имеют одинаковую длину.
Рис. 19.2 Результат добавления нового блока в существующую структуру данных блокчейна
В ситуации, показанной на рис. 19.3, узлам предоставлена свобода выбора ветви, по которой произойдет наращивание цепочки.
Рис. 19.3 Структура данных блокчейна после доставки «опоздавшего» блока
Некоторые узлы могут продолжать попытки поиска нового блока, ссылающегося на блок AB12 как на предшествующий, в то время как другие узлы пытаются найти новый блок, ссылающийся на блок DD01 как на предшествующий. Неожиданно большинство блоков получает два новых блока BB11 и CCC1, и оба этих блока ссылаются на AB12 как на предшествующий блок. Это может произойти из-за того, что два узла завершили процедуру подтверждения выполненной работы для своих блоков приблизительно в одно и то же время. Включение этих двух новых блоков в структуру данных блокчейна приводит к тому, что структура содержит три цепочки (ветви цепочки), как показано на рис. 19.4. Одна цепочка состоит из трех блоков, две другие – из четырех.
По критерию самой длинной цепочки несомненно удаляется самая короткая цепочка, то есть DD01 → A397 → 33FF. Но этот критерий не дает окончательного недвусмысленного результата, поскольку остаются две цепочки одинаковой длины. И снова некоторые узлы пытаются найти новый блок, который ссылается на BB11 как на предшествующий блок, тогда как другие узлы стремятся найти новый блок, ссылающийся на предшествующий блок CCC1.
Рано или поздно приходит блок, ссылающийся на BB11 как на предшествующий блок, и структура данных принимает вид, показанный на рис. 19.5. В структуре данных блокчейна на рис. 19.5 содержится несколько конфликтующих версий хронологии транзакций, но критерий самой длинной цепочки позволяет получить единственный недвусмысленный результат, а именно цепочку, состоящую из блоков 0101 → BB11 → AB12 → A397 → 33FF. Большинство узлов, а в конечном итоге и все узлы системы, будет стараться расширить именно эту ветвь и искать новый блок, который ссылается на блок 0101 как на предшествующий.
Рис. 19.4 Структура данных блокчейна, после того как два узла почти одновременно завершили процедуру подтверждения выполненной работы
Рис. 19.5 Схема структуры данных блокчейна, содержащей единственную цепочку максимальной длины после прибытия нового блока
Здесь важно отметить, что структура данных блокчейна в действительности не выглядит как прямая цепочка, а больше похожа на дерево или на колоннообразный кактус, так сказать, блок-кактус. Ветви этого дерева представляют конфликтующие версии хронологии транзакций, но на основе критерия самой длинной цепочки все узлы в конечном итоге единогласно определяют единственную правильную версию хронологии транзакций.
Примечание
По внешней форме структуру данных блокчейна часто называют древовидной структурой данных. Самый первый, следовательно, самый старый блок в этой структуре – это единственный блок, который не имеет предшественников, поэтому его часто называют корнем древовидной структуры данных. Блок, не имеющий последующих блоков, называют листом (leaf). Упорядоченная последовательность блоков от корня к листу называется путем (path).
Критерий самой затратной цепочки
Из главы 16 вы узнали, что блокчейн-приложения редко используют постоянный уровень сложности хэш-головоломок, которые необходимо решить, чтобы добавить новый блок в структуру данных блокчейна. Уровень сложности обычно определяется динамически, и из-за этого блоки по-разному оцениваются с точки зрения вычислительных затрат, требуемых при добавлении конкретного блока в структуру данных блокчейна. С другой стороны, и в основе критерия самой длинной цепочки заложена идея выбора пути, содержащего наибольшее количество блоков, то есть представляющего самый большой объем затрат на вычисления. Но при существующем разнообразии уровней сложности самый длинный путь не всегда соответствует максимальным затратам на вычисления.
Для каждого пути фактические затраты на вычисления могут быть измерены посредством суммирования уровней сложности для всех блоков, принадлежащих конкретному пути. Это значение можно вычислить, воспользовавшись тем, что заголовок блока содержит уровень сложности соответствующей хэш-головоломки. Суммарный уровень сложности пути часто называют его весом (weight). На рис. 19.6 изображена та же структура данных блокчейна, что и на рис. 19.5, но здесь также показаны значения уровней сложности для каждого блока структуры. Самая длинная цепочка (путь от корня 33FF до листа 0101) имеет вес 5, в то время как вторая по длине цепочка (путь от корня 33FF до листа CCC1) имеет вес 6. Таким образом, структура данных блокчейна на рис. 19.6 отображает ситуацию, когда критерий самой длинной цепочки заставляет узлы выбрать цепочку, затраты на вычисления которой не являются максимальными.
В итоге блокчейн-системы, динамически определяющие уровни сложности, не применяют критерия самой длинной цепочки. Вместо этого они используют критерий самой затратной цепочки (heaviest-chain-criterion): выбирается та хронология данных транзакций, которая характеризуется наивысшим суммарным уровнем вычислительных затрат в цепочке. В том случае, когда уровень сложности одинаков для всех блоков, самый длинный путь совпадает с самым затратным путем, поэтому оба критерия дают одинаковый результат.
Рис. 19.6 Схема структуры данных блокчейна с указанием уровней сложности для блоков
//-- Следствия выбора единственной цепочки --//
Следствия выбора конкретной цепочки из нескольких конфликтующих версий и утверждения ее в качестве единственной корректной цепочки перечислены ниже:
• появление блоков-«сирот»;
• отмена поощрений;
• уточнение права владения;
• повторная обработка транзакций;
• увеличение размера общего ствола;
• сохранение общей целостности;
• устойчивость против сторонних манипуляций.
Блоки-«сироты»
Структура данных блокчейна, наращиваемая коллективными усилиями, выглядит как дерево, ветви которого представляют конфликтующие версии хронологии транзакций. Применение какого-либо критерия выбора в действительности означает выбор одного пути в этом дереве и объявление его единственной корректной версией хронологии данных транзакций. Все блоки в древовидной структуре данных, которые не являются частью корректного пути, отбрасываются узлами и называются блоками-сиротами [27]. Например, в результате применения критерия самой длинной цепочки в ситуации, изображенной на рис. 19.4, блок DD01 становится блоком-сиротой, а в схеме на рис. 19.5 блоки DD01 и CCC1 не являются частью самой длинной цепочки и отбрасываются. После применения критерия самой затратной цепочки в ситуации на рис. 19.6 блоки 0101, BB11 и DD01 не принадлежат выбранной корректной цепочке, следовательно, исключаются из работы.
Отмена поощрений
Блоки-«сироты» бесполезны для процедуры уточнения прав владения, поскольку не входят в выбранную корректную цепочку. Поэтому вознаграждение, выданное узлам, создавшим и распространившим эти блоки, отменяется. Основанием для этого являются правила 11 и 13 алгоритма блокчейна, описанного в главе 18, в соответствии с которыми блоки, добавленные в структуру данных блокчейна, но в дальнейшем признанные некорректными или бесполезными, а также все последующие блоки логически удаляются из структуры данных блокчейна, а вознаграждение за их добавление снимается с узлов, создавших эти блоки.
Уточнение права владения
Только те транзакции, которые являются частью выбранной корректной цепочки, считаются полностью завершенными и используются для точного определения ответов на запросы, связанные с правами владения. Блоки-«сироты» не являются частью коллективно выбранной цепочки. Следовательно, представленные в них данные транзакций не являются частью хронологии данных транзакций. Считается, что эти транзакции никогда не выполнялись, поэтому они классифицируются как несуществующие при ответах на запросы по уточнению прав владения.
Повторная обработка транзакций
Данные транзакций, содержащиеся в блоках-«сиротах», были изначально предложены для добавления их в хронологию транзакций. Заранее не предусматривается тот факт, что они «вообще никогда не существовали», это результат случайной по своей сущности процедуры подтверждения выполненной работы и ее роли в наращивании структуры данных блокчейна. Данные транзакций, которые неудачно завершают свой жизненный цикл в блоках-«сиротах», получают еще один шанс стать частью выбранной хронологии транзакций – они снова помещаются в почтовый ящик узла для повторной обработки и последующей попытки добавления в структуру данных блокчейна. Это соответствует правилу 11 алгоритма блокчейна, описанного в главе 18. В результате транзакции, которые ранее уже стали частью утвержденной корректной цепочки, могут быть через некоторое время удалены из нее, если большинство узлов откажется от блока, содержащего эти транзакции, но впоследствии могут появиться вновь сразу после надлежащей повторной обработки.
Увеличение размера общего ствола
Применение какого-либо критерия выбора не всегда дает недвусмысленный результат. Например, в ситуациях, подобных показанным на рис. 19.3 и 19.4, имеется более одной самой длинной цепочки. Здесь структура данных блокчейна содержит два пути одинаковой длины, ответвляющихся от общего ствола. На рис. 19.3 общий ствол состоит только из двух блоков, образующих короткую цепочку A397 → 33FF. На рис. 19.4 общий ствол включает уже три блока, то есть цепочку AB12 → A397 → 33FF, в которую включен общий ствол из предыдущего состояния. Таким образом, даже если критерий выбора дает неоднозначный результат, конфликтующие версии хронологии транзакций «вырастают» из менее двусмысленного общего ствола. Чем глубже вы исследуете ствол блокчейн-системы, тем менее спорными выглядят решения о принятии или непринятии того или иного блока как части самой длинной цепочки.
Сохранение общей целостности
Рассмотрим ситуацию на рис. 19.4, где критерий самой длинной цепочки не дает недвусмысленного результата. На рис. 19.5 можно видеть, что следующий блок, добавляемый в структуру данных блокчейна, определяет, станет ли блок BB11 или CCC1 частью самой длинной цепочки или будет отброшен. Но кто принимает решение о том, что следующий блок, добавляемый в структуру, показанную на рис. 19.4, ссылается именно на блок BB11 как на предшествующий, следовательно, исключает блок CCC1? Неожиданный и, возможно, разочаровывающий ответ: это абсолютно случайный выбор. В ситуации на рис. 19.4 узлам предоставляется полная свобода выбора наращиваемой ветви. Некоторые узлы попытаются найти новый блок, ссылающийся на BB11 как на предшествующий блок, другие узлы стараются создать новый блок со ссылкой на предшествующий блок CCC1. Кто из них первым найдет новый блок, зависит от решения хэш-головоломки, требующего конечного, но неопределенного интервала времени. Узел, первым решивший хэш-головоломку нового блока, определяет, какая из конфликтующих ветвей будет наращиваться и какие блоки будут исключены. Таким образом, для процесса роста древовидной структуры данных блокчейна характерно случайное поведение, определяемое состязанием в скорости решения хэш-головоломок и непредсказуемыми перемещениями сообщений, передаваемых по сети. Следующий блок, время появления которого зависит от случайного интервала времени, необходимого для решения соответствующей хэш-головоломки, определяет, какой путь будет увеличен и какой блок будет исключен.
Как уже было отмечено ранее, конфликтующие ветви древовидной структуры данных блокчейна совместно используют общий ствол, остающийся постоянным независимо от исключения некоторых блоков или листов. Следовательно, блоки, расположенные на вершине корректной цепочки или в непосредственной близости от нее, испытывают наибольшее влияние случайной природы процесса добавления новых блоков, в то время как блоки, расположенные более глубоко в структуре данных блокчейна, в меньшей степени подвержены этому влиянию. Таким образом, можно сформулировать следующую группу утверждений: чем глубже в утвержденной корректной цепочке расположен блок:
• тем раньше по времени он добавлен;
• тем больше времени прошло с момента его включения в структуру данных блокчейна;
• тем больше суммарных усилий было затрачено на добавление последующих блоков;
• тем меньше он подвержен воздействию случайных изменений в блоках, принадлежащих самой длинной цепочке;
• тем меньше вероятность его удаления;
• тем больше обосновано его включение в структуру узлами системы;
• тем более прочно он закреплен в общей хронологии узлов.
Тот факт, что достоверность, связанная с включением блоков в утвержденную корректную цепочку, зависит от прошедшего времени и от количества блоков, добавленных на текущий момент, называется сохранением общей целостности (eventually consistency).
Устойчивость против сторонних манипуляций
Путь в древовидной структуре данных блокчейна, в котором представлены наибольшие вычислительные затраты, является утвержденной корректной версией хронологии транзакций. Установление и поддержание корректного пути является объектом управления большей части вычислительных мощностей всей системы в целом. Определение нового корректного пути, начинающегося с одного из внутренних блоков структуры данных блокчейна, требует перехвата и установления контроля для пути, поддерживаемого большинством узлов. Этот факт является основой устойчивости и надежности блокчейн-системы.
Пока честные узлы владеют большинством вычислительных ресурсов всей системы, поддерживаемый ими путь будет расти с максимальной скоростью и обгонять все конкурирующие пути. Для получения возможности манипулирования каким-либо внутренним блоком атакующий должен непременно выполнить повторно процедуру подтверждения совершенной работы для этого блока и последовательно решить хэш-головоломки для всех последующих блоков, затем перехватить путь, поддерживаемый честными узлами, и установить контроль над ним [26]. Но установление нового пути посредством захвата и установления контроля над путем, поддерживаемым большинством узлов, невозможно для любого атакующего узла, обладающего меньшей вычислительной мощностью, чем большинство. Таким образом, любую попытку установления нового «официального» пути, содержащего мошеннические транзакции, опередит и, следовательно, исключит путь, поддерживаемый большинством честных узлов. Поэтому хронология транзакций, обслуживаемая системой, является устойчивой против сторонних манипуляций.
//-- Опасности для схемы голосования --//
Любая процедура коллективного принятия решения становится целью различных манипуляций, если в ней обнаруживается потенциальная возможность повлиять на результат всего процесса в целом. В этом плане не является исключением и блокчейн-система, и ее алгоритм распределенного согласования. Уже неоднократно обсуждались возможные способы манипулирования алгоритмом согласования блокчейна. Вне зависимости от того, насколько разнообразными могут выглядеть эти манипуляции, все они преследуют единственную цель: превращение блоков, являющихся частью корректной цепочки, в блоки-«сироты» и создание новой утвержденной цепочки, которая представляет хронологию данных транзакций и измененное распределение прав владения собственностью, более предпочтительное по мнению атакующих.
Все манипуляции подобного рода можно рассматривать с различных точек зрения. С экономических позиций эти манипуляции пытаются изменить распределение прав владения посредством изменения общей хронологии данных транзакций. С точки зрения коллективного принятия решений эти манипуляции пытаются собрать подавляющее большинство голосов, чтобы получить желаемый результат. С технической точки зрения любая попытка воздействия на процесс принятия коллективного решения направлена на нарушение целостности системы. С учетом распределенной сущности системы эти манипуляции направлены на установку, по меньшей мере, временную, скрытого элемента централизации, который изменяет состояние системы. Эти атаки часто называют атаками 51 процента (51 percent attacks).
Примечание
Атака 51 процента – это попытка собрать или установить контроль над большинством голосов в процессе коллективного принятия решений.
//-- Важная роль хэш-головоломок --//
В главе 16 вы узнали, как сделать структуру данных блокчейна неизменяемой. С чисто технической точки зрения хэш-головоломка является всего лишь средством, обеспечивающим неизменяемость структуры данных блокчейна. Но при внимательном рассмотрении использования структуры данных блокчейна становится очевидным другой аспект хэш-головоломки. При достижении коллективного соглашения по хронологии транзакций отдельные блоки, составляющие структуру данных блокчейна, могут интерпретироваться как избирательные бюллетени, а хэш-головоломка – как цена за предоставление бюллетеня, достаточно высокая для того, чтобы нечестные избиратели отказались от участия в голосовании.
Любая попытка воздействия на процесс коллективного принятия решения в блокчейн-системе направлена на получение большинства голосов. Благодаря тому что технология блокчейна связывает право на голосование с вычислительной мощностью посредством хэш-головоломки, любая попытка завладеть большинством голосов в действительности означает захват большей части вычислительных мощностей всей пиринговой системы в целом. Надежность и достоверность методики достижения коллективного соглашения в блокчейн-системе основаны на предположении, согласно которому ни один человек или какой-либо объект не может захватить или каким-то другим способом получить большую часть общих вычислительных мощностей всей пиринговой системы.
//-- Почему это работает --//
Коллективное создание структуры данных блокчейна немного похоже на участие в непрерывной процедуре голосования. Каждый отдельный узел обладает лишь правом одного незначительного голоса в происходящем опросе по выбору конкретной хронологии транзакций, но все узлы вместе образуют мощное «население», которое согласованно выбирает свою историю. Это работает, потому что участие в происходящем голосовании по предложенной схеме невозможно без уплаты определенной цены, но также невозможно и при проявлении крайней неуступчивости. Ценой участия в голосовании является работа, необходимая для решения хэш-головоломки, и, посылая свой голос или новый блок, узел заявляет себя как кандидата на получение поощрения. Поскольку все узлы независимо применяют одинаковый критерий выбора хронологии транзакций, в конечном итоге все узлы приходят к единому мнению.
//-- Перспектива --//
В этой главе основное внимание было уделено способу, с помощью которого узлы полностью распределенной пиринговой системы приходят к соглашению о коллективно обслуживаемой хронологии данных транзакций, а также особо подчеркнута важность хэш-головоломки для достижения полной согласованности и поддержания целостности. В следующей главе рассматривается важное значение поощрения и инструментального средства оплаты (вознаграждения), используемого для предоставления партнерам компенсации за вклад в поддержание целостности системы.
//-- Резюме --//
• Задержка при отправке новых блоков по сети или почти одновременное создание двумя узлами новых блоков приводит к превращению структуры данных блокчейна в дерево или в колоннообразный кактус с ветвями, вырастающими из общего ствола и представляющими конфликтующие версии хронологии транзакций.
• Выбор правильной версии хронологии транзакций – это задача коллективного принятия решения.
• Распределенное согласование – это соглашение между членами полностью распределенной пиринговой системы в процессе коллективного принятия решения поставленной задачи.
• Процесс коллективного принятия решения в блокчейн-системе обладает следующими характеристиками:
– все узлы действуют в одинаковой среде, состоящей из сети, узлов, обслуживающих собственные копии структуры данных блокчейна, и алгоритма блокчейна, управляющего поведением узлов;
– задача, требующая решения, – это коллективный выбор единой хронологии транзакций всеми узлами;
– все узлы стремятся увеличить до максимума свой индивидуальный доход, полученный как поощрение за добавление новых корректных блоков в структуру данных блокчейна;
– чтобы достичь своих целей, узлы посылают новые блоки всем партнерам для проверки и приема. В результате каждый узел оставляет индивидуальные отпечатки в среде, которые совместно обслуживают структуру данных блокчейна;
– все узлы применяют одинаковый критерий для выбора хронологии транзакций;
– в соответствии с критерием самой длинной цепочки каждый узел независимо выбирает в древовидной структуре данных блокчейна путь, который содержит наибольшее количество блоков;
– в соответствии с критерием самой затратной цепочки каждый узел независимо выбирает в древовидной структуре данных блокчейна путь с максимальным суммарным значением сложности.
• Выбор одного пути в древовидной структуре данных блокчейна приводит к перечисленным ниже последствиям:
– появление блоков-«сирот»;
– отмена поощрений;
– уточнение права владения;
– повторная обработка транзакций;
– увеличение размера общего ствола;
– сохранение общей целостности;
– устойчивость против сторонних манипуляций.
• Чем глубже в утвержденной корректной цепочке расположен блок:
– тем раньше по времени он добавлен;
– тем больше времени прошло с момента его включения в структуру данных блокчейна;
– тем больше суммарных усилий было затрачено на добавление последующих блоков;
– тем меньше он подвержен воздействию случайных изменений в блоках, принадлежащих самой длинной цепочке;
– тем меньше вероятность его удаления;
– тем больше обосновано его включение в структуру узлами системы;
– тем более прочно он закреплен в общей хронологии узлов. О Тот факт, что достоверность, связанная с включением блоков в утвержденную корректную цепочку, зависит от прошедшего времени и от количества блоков, добавленных на текущий момент, называется сохранением общей целостности.
• Атака 51 процента – это попытка собрать или установить контроль над большинством голосов в процессе коллективного принятия решений с целью превращения блоков, являющихся частью корректной цепочки, в блоки-«сироты» и создания новой утвержденной цепочки, которая представляет хронологию данных транзакций и измененное распределение прав владения собственностью, более предпочтительное по мнению атакующих.
• Атака 51 процента обладает следующими характерными особенностями:
– с экономической точки зрения: изменение распределения прав владения посредством изменения общей хронологии данных транзакций;
– с точки зрения принятия решений: получение большинства голосов для навязываемого получения желаемого результата;
– с технической точки зрения: нарушение целостности системы;
– с архитектурной точки зрения: установка, по меньшей мере временная, скрытого элемента централизации, который изменяет состояние системы.
Глава 20
Плата за сохранение целостности
За поддержание целостности и создание доверительных отношений нужно платить
Обсуждение способа обработки блокчейн-системой новых данных транзакций и способа, которым узлы достигают соглашения о корректной хронологии транзакций, приводит к пониманию важности хэш-головоломки. Решение хэш-головоломки играет важную роль при обеспечении и сохранении целостности системы. Но решение хэш-головоломки требует затрат вычислительных ресурсов, следовательно, стоит денег. Поэтому необходимо возвращать некоторую компенсацию узлам за их вклад в поддержание целостности системы. До сего момента в процессе обсуждения предполагалось, что узлы получают какую-то компенсацию, но не уточнялось, какой именно инструмент оплаты используется для этой цели. В этой главе все внимание сосредоточено на том, каким образом узлы получают компенсацию за свой вклад в обеспечение целостности системы.
//-- Метафора --//
Представьте себе, что вы являетесь владельцем хлебопекарни. Однажды вам в голову пришла великолепная идея, как улучшить свой бизнес. Вы понимаете, что денег недостаточно, а в булочной при пекарне всегда есть хлеб на продажу и в конце большинства рабочих дней остается достаточно много хлеба. Поэтому вы решаете платить своим работникам хлебом вместо денег. Это, во-первых, позволит сэкономить деньги, во-вторых, избавит от необходимости выбрасывать оставшийся хлеб. Вашим работникам не очень нравится эта идея, но вскоре другие компании стали подражать вам, и в конце концов на всех предприятиях стала применяться эта схема компенсации: производители автомобилей платят своим сотрудникам автомобилями, строительные компании расплачиваются со своими работниками домами и т. д. Однажды ваши друзья стали жаловаться на непрактичную и неудобную компенсацию – все, кроме одного, продолжавшего получать оплату деньгами. Как вы думаете, в какой компании или организации работает этот человек? Оказалось, что он является сотрудником центрального банка, который производит… деньги.
В приведенном выше примере рассматривается зависимость между продукцией, которую мы создаем, выполняя свою работу, и продукцией, которую мы получаем в качестве компенсации. В этой главе обсуждается взаимосвязь такого рода в контексте технологии блокчейна. Выясняется, что при некоторых условиях для блокчейн-системы, возможно, наиболее желательным вариантом может стать некоторое подобие центрального банка, который платит своим сотрудникам призводимыми им же банкнотами. Но, прежде чем перейти к обсуждению этого особого варианта, рассмотрим более подробно роль вознаграждений и важность компенсации в блокчейн-системе.
//-- Роль вознаграждений в блокчейн-системе --//
В главе 18 особо подчеркивается, что блокчейн использует метод кнута и пряника, чтобы предоставить партнерам, образующим систему, возможность управления друг другом и взаимного контроля. Конкуренция за вознаграждение и угроза наказания – вот две движущие силы, которые заставляют партнеров в системе проверять корректность транзакций и выбирать ту хронологию транзакций, в которой объединен максимальный объем коллективных усилий. Поощрения и наказания реализованы с помощью вознаграждений на основе оплаты транзакций и подтверждения выполненной работы [26]. Проявление этого эффекта единообразно во всех приложениях блокчейна независимо от их конкретных целей. Тем не менее выбор инструментального средства оплаты, используемого для предоставления компенсации участникам системы, индивидуален для каждого блокчейн-приложения. Определение и практическое применение инструмента оплаты, который будет предоставлен в распоряжение партнерам для проверки и добавления новых блоков в блокчейн-системе, считается одной из самых главных и трудных задач при создании блокчейн-приложения. Таким образом, при выборе инструмента оплаты необходимо учитывать перечисленные ниже последствия:
• воздействие на целостность системы;
• воздействие на открытость системы;
• воздействие на распределенную сущность системы;
• воздействие на философию системы.
Воздействие на целостность системы
Действенность поощрения и наказания является основой обеспечения и сохранения целостности блокчейн-системы. Это работает, потому что партнеры в системе получают полезную компенсацию за поддержку целостности системы. Но, во-первых, как мы узнаем, что партнеры действительно получают полезную компенсацию за свою работу? Это самый главный вопрос. Какой инструмент обеспечения компенсации считается полезным и наиболее подходящим для выполнения работы по обслуживанию системы? Что происходит, когда становится известно, что этот инструмент компенсации становится бесполезным или теряет доверие? Можно ли ожидать, что партнеры будут продолжать поддержку блокчейн-системы при выплате компенсаций с помощью потерявшего доверие и ненадежного инструмента? Нет, на это надеяться нельзя. Отсутствие доверия к инструменту, используемому для предоставления компенсаций партнерам в системе, оказывает пагубное влияние на всю систему. Таким образом, инструмент обеспечения компенсации членам системы напрямую воздействует на степень доверия к самой блокчейн-системе и на ее надежность.
Воздействие на открытость системы
Предполагается, что блокчейн-система является открытой пиринговой системой. Каждый может подключить свой компьютер к такой системе и будет поощрен за вклад в обеспечение ее целостности. Но что происходит, если инструмент обеспечения компенсации не является открытым в той же степени, что сама блокчейн-система? Что, если компенсация производится с помощью инструмента, доступного или разрешенного только в отдельных странах, или является субъектом законов, ограничивающих движение денежных средств (капиталов)? В этом случае конкретный инструмент обеспечения компенсации противодействует технической открытости системы из-за экономических ограничений.
Воздействие на распределенную сущность системы
Блокчейн представляет собой полностью распределенную пиринговую систему без каких-либо элементов централизованного управления или координации. Но что происходит, если инструмент обеспечения компенсации управляется и контролируется единственной центральной организацией? Фактически это означает тайное внедрение в систему централизованного управления. Это противоречит самой сущности распределенной системы.
Воздействие на философию системы
В предыдущих разделах выяснилось, что некоторые свойства инструмента обеспечения компенсаций за поддержку системы партнерами могут противодействовать главным аспектам блокчейн-системы. При этом возникает принципиальный вопрос: каким образом можно спроектировать полностью распределенную пиринговую систему без централизованного управления и с сохранением высокой степени доверия, если в ней используется инструмент обеспечения компенсаций, который противодействует основным свойствам этой системы? Каждая блокчейн-система, объявляющая себя абсолютно открытой и полностью распределенной, должна найти исчерпывающий ответ на этот вопрос.
Требуемые свойства инструмента обеспечения компенсаций для партнеров в блокчейн-системе
Для того чтобы оказывать как можно меньшее воздействие на цели и основные характеристики блокчейн-системы, инструмент обеспечения компенсаций для партнеров в такой системе должен обладать следующими свойствами:
• доступность в цифровой форме. В противном случае инструмент невозможно включить в блокчейн-систему;
• приемлемость инструмента как средства платежей в реальном мире, иначе члены блокчейн-системы не смогут использовать свой доход от поддержки системы для оплаты счетов в реальном мире;
• приемлемость инструмента как средства платежей во всех странах, иначе поддержка системы потеряет привлекательность для партнеров, проживающих в странах, в которых неприемлемо такое средство платежей;
• инструмент не должен являться субъектом законодательных ограничений на движение денежных средств, в противном случае возможности предоставления компенсации партнерам становятся ограниченными;
• стабильная стоимость, иначе члены системы подвергаются экономическому риску, связанному с падением покупательной способности;
• высокая степень доверия, в противном случае снижается возможность создания доверительных отношений во всей блокчейн-системе;
• отсутствие управления и контроля со стороны единственной центральной организации или учреждения, в противном случае возникает серьезный конфликт с распределенной сущностью блокчейн-системы.
Этот список свойств выглядит как набор требований к совершенной мировой валюте. Поэтому совсем неудивительно, что ни одна из ныне существующих реальных валют не соответствует в полной мере перечисленным здесь свойствам.
//-- Краткое отступление: появление криптографических валют --//
В предыдущем разделе перечислены желательные свойства инструмента обеспечения компенсаций членам блокчейн-системы. Тот факт, что существующие реальные валюты не соответствуют этим требованиям, заставляет несколько более рассудительно относиться к ним, потому что деньги необходимы сами по себе. Валюта или любой другой инструмент оплаты, обладающий перечисленными выше свойствами, должны быть полезными и во многих других ситуациях, отличающихся от предоставления компенсации членам распределенной системы. Оказывается, множество людей уже размышляет над этой проблемой. Первое и наиболее распространенное блокчейн-приложение было создано как раз для решения этой задачи. Идея применения технологии блокчейна великолепна: полностью распределенная пиринговая система, управляющая правом владения новым типом цифровых денег, которые, в свою очередь, используются для выплаты компенсаций членам этой системы за проверку и добавление новых блоков в структуру данных блокчейна. Такие особенные новые деньги объединяют собственную прикладную цель, управление правом владения новым типом денег с необходимостью иметь заслуживающий доверия инструмент выплаты компенсаций за вклад в поддержку системы. Я имею в виду биткойн (Bitcoin). Биткойн-система не только управляет правом владения новыми цифровыми деньгами в полностью распределенной пиринговой системе, но и выплачивает компенсации своим членам теми же самыми деньгами, целостность которых они поддерживают. Благодаря тому что технология блокчейна основана главным образом на криптографии, этот новый тип денег называют криптографической валютой, или сокращенно криптовалютой (cryptocurrency). С изрядной долей упрощения можно сказать, что биткойн и многие другие криптовалюты похожи на хлебопекарни, которые оплачивают работу своих сотрудников производимым хлебом, а различие заключается лишь в том, что «хлебом» здесь является новая цифровая валюта.
//-- Перспектива --//
В этой главе особое внимание было уделено важности инструмента обеспечения компенсаций для членов блокчейн-системы. Это последняя глава, в которой рассматривались основные принципы технологии блокчейна по отдельности. В следующей главе все отдельные элементы будут собраны в единое целое, что позволит объединить все знания, полученные из предыдущих глав.
//-- Резюме --//
• В блокчейн-системе применяется практика вознаграждения как компенсация за вклад участников в поддержку целостности системы.
• Инструмент оплаты, используемый для предоставления компенсаций членам системы, воздействует на следующие аспекты блокчейн-системы:
– целостность;
– открытость;
– распределенная сущность;
– философия системы.
• Инструмент обеспечения компенсаций для членов системы должен обладать следующими свойствами:
– доступность в цифровой форме;
– приемлемость инструмента как средства платежей в реальном мире;
– приемлемость инструмента как средства платежей во всех странах;
– инструмент не должен являться субъектом законодательных ограничений на движение денежных средств;
– стабильная стоимость;
– высокая степень доверия;
– отсутствие управления и контроля со стороны единственной центральной организации или учреждения.
• Криптовалюта – это независимая цифровая валюта, право владения которой управляется блокчейн-системой, использующей ту же валюту как инструмент выплаты компенсаций своим членам за поддержку целостности системы.
Глава 21
Соединяем все элементы
Это больше, чем простой набор составных частей
Эта глава представляет собой своеобразное подведение итога нашего мысленного пути к пониманию технологии блокчейна. В главах 9-20 поочередно излагались отдельные концепции, на основе которых выстроена технология блокчейна, а в данной главе все эти составные части собираются в единое целое. В итоге вы не только полностью поймете технологию блокчейна в целом, но и увидите, как различные концепции работают совместно. Глава начинается с общего обзора основных концепций и технологий блокчейна, затем демонстрируется, что в основе блокчейна заложены технические знания, полученные вами из предыдущих глав. В конце главы определяется и кратко описывается комплект технологий блокчейна, который открывает возможности применения блокчейна в широком диапазоне прикладных областей.
//-- Обзор концепций и технологий --//
Наш мысленный путь к пониманию технологии блокчейна начался с главы 8, где мы составляли план проекта полностью распределенной пиринговой системы для управления правами владения собственностью. В табл. 21.1 представлены эти задачи, их цели, соответствующие этапы выполнения и соответствующие концепции технологии блокчейна.
Важно знать, что эти основные концепции, формирующие сущность технологии блокчейна, основаны на других концепциях и технологиях. Для хорошего понимания блокчейна требуется хотя бы общее представление об этих концепциях. Поэтому в табл. 21.2 приведено несколько более подробное описание технологий, на которых основана технология блокчейна. В оставшейся части главы будут разъясняться концепции, представленные в этих двух таблицах.
Таблица 21.1 Обзор задач по проектированию распределенной пиринговой системы для управления правами владения собственностью

Таблица 21.2 Технические концепции технологии блокчейна, их цели и соответствующие метафоры Окончание табл. 21.2

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

Предназначение блокчейн-системы: функциональные аспекты уровня приложения
Блокчейн-система предназначена для достижения следующих двух целей:
• уточнение и подтверждение права владения собственностью;
• передача права владения собственностью.
Уточнение и подтверждение права владения собственностью
Сущность уточнения и подтверждения права владения собственностью состоит в ответе на главный вопрос, непосредственно связанный с правами владения: кто владеет, каким объектом, в каком количестве и в какое время?
Передача права владения собственностью
Передача права владения собственностью означает изменение текущего состояния прав владения. С учетом этой целевой задачи блокчейн-система позволяет владельцам передавать свою собственность другим лицам. Таким образом, эта процедура позволяет ответить на другой, не менее важный вопрос, связанный с правами владения собственностью: кто передал право владения, на какой объект, в каком количестве, кому и в какое время?
Свойства блокчейн-системы: нефункциональные аспекты
При взаимодействии с блокчейн-системой вы наверняка обратите внимание на то, как она выполняет свои функции. Качество выполнения этих обязательных функций определяется нефункциональными аспектами системы:
• высокая доступность;
• защита от цензуры;
• надежность;
• открытость;
• псевдоанонимность;
• безопасность;
• гибкость (эластичность);
• общая согласованность;
• сохранение целостности.
Высокая доступность
Блокчейн-система никогда не прекращает свою работу. Более того, блокчейн-система доступна постоянно: 24 часа в сутки, 7 дней в неделю, в любое время года. В системе даже нет кнопки отключения.
Защита от цензуры
Ни один из членов системы не имеет возможности единолично устанавливать содержимое блокчейн-системы или отключить всю систему.
Надежность
Блокчейн-система выполняет свои функции сообразно цели и с высоким качеством. Любой человек может быть вполне уверен в корректном установлении, подтверждении и передаче прав владения собственностью.
Открытость
Блокчейн-система не запрещает конкретным пользователям или компьютерам использовать ее сервисы. Она открыта для всех.
Псевдоанонимность
В блокчейн-системе владельцы идентифицируются недвусмысленно, но в ней не используются и не публикуются какие-либо реальные идентификационные данные о владельце.
Безопасность
Блокчейн-система безопасна с двух точек зрения: во-первых, на уровне отдельных транзакций, во-вторых, на уровне всей системы. На уровне отдельных транзакций блокчейн-система гарантирует. что право владения сохраняется исключительно в распоряжении законного владельца. На общесистемном уровне блокчейн защищает права всех владельцев от любых изменений, подделок, фальшивок, а также от двойного расходования и от несанкционированного доступа.
Гибкость
Блокчейн-система способна корректно подтверждать и передавать права владения собственностью даже в самых трудных условиях. Она выдерживает многие типы атак, такие как поддельные данные, двойное расходование, фальшивые документы и попытки доступа посторонних лиц к объектам собственности.
Общая согласованность
Результаты работы блокчейн-системы не всегда являются полностью согласованными. Но вероятность получения согласованных результатов возрастает со временем, и в конечном итоге вся система приходит к состоянию полной общей согласованности.
Сохранение целостности
Блокчейн-система сохраняет свою целостность, демонстрируя поведение, при котором устранены логические ошибки. Она поддерживает согласованность данных и обеспечивает защиту как на уровне отдельных транзакций, так и для всей хронологии данных транзакций в целом.
Внутренняя функциональность: функциональные аспекты уровня реализации
Внутреннюю функциональность блокчейн-системы можно прослеживать по следующим основным компонентам:
• логика прав владения собственностью;
• защита транзакций;
• логика обработки транзакций;
• логика хранения (данных);
• пиринговая архитектура;
• логика согласования.
Логика прав владения собственностью
Логика прав владения собственностью определяет процедуры установления, подтверждения и передачи прав владения. Блокчейн-система использует данные отдельной транзакции для описания передачи прав владения и обслуживает весь комплект данных транзакций для подтверждения права владения. На рис. 21.1 схематично изображена логика прав владения собственностью вместе с концепциями, на которых она основана. Названия концепций размещены в прямоугольниках, при этом концепции более высоких уровней зависят от концепций, расположенных непосредственно под ними по схеме. На самом нижнем уровне прямоугольников показаны базовые концепции, от которых зависит логика прав владения собственностью. Эти концепции следует рассмотреть более подробно.
Логика прав владения собственностью, используемая блокчейн-системой, основана на логике хранения, которая поддерживает полную хронологию данных транзакций, и на логике согласований, которая обеспечивает логическую согласованность данных. Кроме того, в основе логики прав владения собственностью заложена логика обработки транзакций, благодаря которой добавляются только корректные данные транзакций, а также концепция защиты транзакций, обеспечивающая возможность передачи прав собственности в другую учетную запись только для законного владельца конкретного объекта собственности. На эти четыре концепции опираются остальные компоненты блокчейн-системы.
Рис. 21.1 Логика прав владения собственностью и концепции, на которых она основана
Защита транзакций
Защита транзакций гарантирует, что только законный владелец может получить доступ к своей собственности и передать право на нее другой учетной записи. На рис. 21.2 изображены концепции, применяемые при реализации защиты транзакций. Базовые концепции, такие как криптографические хэш-значения и асимметричная криптография, расположены на самом нижнем уровне прямоугольников, так как они служат основанием для всех прочих концепций, показанных на более высоких уровнях. Например, цифровая подпись размещена ниже авторизации, потому что является средством авторизации транзакции, но выше криптографических хэш-значений и закрытого ключа, поскольку для реализации цифровой подписи используются эти концепции. Подобным образом на рис. 21.2 наглядно отображены зависимости аутентификации и идентификации от криптографических концепций более низких уровней.
Рис. 21.2 Защита транзакций и концепции, на которых она основана
Логика обработки транзакций
Логика обработки транзакций обеспечивает добавление только корректных данных транзакций в коллективно поддерживаемую хронологию данных транзакций. Она непосредственно зависит от процедуры проверки данных транзакций, которая представляет подлинную цель системы. Каждый отдельный узел системы может независимо от других выполнять проверку данных транзакций. Но каждый отдельный узел может совершать ошибки при проверке данных транзакций или преднамеренно принять некорректные данные транзакции. В обоих случаях возникает угроза нарушения целостности всей системы. Поэтому для обработки транзакций предусмотрен изощренный механизм, обеспечивающий проверку новых блоков и их заголовков соответственно: пиринговая архитектура, распределенное управление и конкуренция между партнерами, которые, в свою очередь, основаны на средствах поощрения и наказания. На рис. 21.3 изображены взаимосвязи между этими концепциями в виде прямоугольников, распределенных по соответствующим уровням.
Рис. 21.3 Логика обработки транзакций и концепции, на которых она основана
Логика хранения
Результаты обработки корректных транзакций добавляются в общую хронологию данных транзакций, точнее, в хранилище данных, обслуживающее общую хронологию данных транзакций. Целостность всей системы и ее способность выполнять поставленную задачу по определению, подтверждению и передаче прав владения собственностью зависит от целостности этого хранилища данных. Таким образом, логика хранения связана с обслуживанием общей хронологии данных транзакций и с защитой хронологии от изменений, подделок и фальсификаций. Сложность и высокая стоимость любых изменений обеспечивают такую защиту. Как показано на рис. 21.4, логика хранения достигает своей цели, поддерживая неизменяемое хранилище, в котором разрешено только добавление данных и которое основано на процедуре подтверждения выполненной работы и на структуре данных блокчейна. Функционирование хранилища можно прослеживать с помощью хэш-головоломок, хэш-ссылок и структур данных, чувствительных к изменениям, которые, в свою очередь, прослеживаются до базовых концепций криптографических хэш-значений. На рис. 21.4 изображены взаимосвязи между этими концепциями в виде прямоугольников, распределенных по соответствующим уровням.
Рис. 21.4 Логика хранения и концепции, на которых она основана
Пиринговая архитектура
Архитектура определяет, каким образом связаны и соединены компоненты или узлы системы. Как показано на рис. 21.5, блокчейн использует полностью распределенную пиринговую систему, состоящую из независимых партнеров, называемых узлами (nodes). Узлы соединяются друг с другом через сеть, которая служит средой, обеспечивающей обмен информацией. Каждый член системы обслуживает собственную копию структуры данных блокчейна, содержащую полную хронологию данных транзакций. Партнеры обмениваются информацией, используя протокол передачи сообщений в стиле gossip (распространение слухов), который гарантирует, что в конечном итоге каждый член системы получит всю необходимую информацию.
Рис. 21.5 Архитектура и концепции, на которых она основана
Логика согласования
Поскольку все узлы распределенной системы обслуживают собственную версию хронологии транзакций независимо друг от друга, содержимое разных версий может быть различным из-за задержек и прочих препятствий для сообщений, распространяемых в сети. Поэтому хранилище данных, для которого изначально предполагалась форма прямолинейной цепочки связанных блоков данных, в действительности принимает форму древовидной структуры, в которой каждая ветвь представляет конфликтующую версию хронологии транзакций. Логика согласования, схематично изображенная на рис. 21.6, в конечном итоге приводит к полной согласованности всех узлов системы, заставляя их выбирать одинаковую версию хронологии транзакций, в которой объединены наибольшие коллективные усилия.
Рис. 21.6 Логика согласования и концепции, на которых она основана
//-- Повышаем уровень абстракции --//
Повысить уровень абстракции можно, если определить и отделить компоненты блокчейна, специально предназначенные для решения задачи по управлению правами владения собственностью, от прочих компонентов, ориентированных на конкретные прикладные цели. Это полностью согласуется с нашим пониманием набора технологий блокчейна, описанного в главе 5. Очевидно, что логика прав владения собственностью и данные транзакций являются компонентами, специфическими для конкретного приложения, так как они определяют, как именно право владения описывается данными транзакций и каким образом происходят установление, подтверждение и передача прав владения собственностью. С другой стороны, защита транзакций и логика обработки транзакций в меньшей степени привязаны к целям конкретного приложения.
Для защиты транзакций применяются общие концепции идентификации, аутентификации, авторизации и цифровой подписи, которые могут использоваться любым другим приложением. По рис. 21.3 понятно, что логика обработки транзакций представляет собой гигантский аппарат обработки данных, большинство компонентов которого не связано с конкретными прикладными целями. Единственный компонент логики обработки данных, тесно связанный с целью конкретного приложения, – это процедура проверки корректности данных транзакций. Все прочие компоненты, такие как конкуренция, разделение управления между партнерами, поощрение, наказание и проверка корректности заголовков блоков, не имеют отношения к обрабатываемым в конкретном приложении данным. На рис. 21.7 показан результат разделения компонентов блокчейна, связанных с конкретным приложением, и компонентов, не зависящих от целей и задач конкретного приложения, которые, в свою очередь, формируют комплект технологий блокчейна.
Рис. 21.7 Набор технологий блокчейна в блокчейн-системе
//-- Перспектива --//
Эта глава объединяет все составные части, которые рассматривались в предыдущих главах, в единое целое, позволяющее увидеть общую картину использования технологии блокчейна. Открытость и отсутствие какой-либо формы централизованного управления или координации являются основой такой системы, поскольку позволяют своим узлам выступать в роли независимых свидетелей при установлении и подтверждении прав владения собственностью и решать все связанные с этим вопросы. Тем не менее рассматриваемые здесь характеристики могут приводить и к нежелательным последствиям. В следующей главе будут рассматриваться такие нежелательные последствия и потенциально возможные ограничения использования технологии блокчейна, связанные с этими последствиями.
//-- Резюме --//
• Блокчейн-система – это полностью распределенная пиринговая система, предназначенная для решения следующих задач, обеспечивающих управление правами владения собственностью:
– описание прав владения собственностью: хронология данных транзакций;
– защита прав владения собственностью: цифровая подпись;
– хранение данных транзакций: структура данных блокчейна;
– подготовка реестров для распространения: неизменяемость;
– распространение реестров: передача информации по сети в стиле протокола gossip;
– обработка новых транзакций: алгоритм блокчейна;
– принятие решения о едином реестре, содержащем корректные данные: распределенное согласование.
• Анализ блокчейн-системы выполняется по следующим характеристикам:
– цель приложения;
– свойства;
– внутренняя функциональность.
• Для блокчейн-системы определены две прикладные цели:
– установление и подтверждение права владения собственностью;
– передача права владения собственностью.
• Блокчейн-система выполняет свои прикладные задачи, предъявляя следующие качественные характеристики:
– высокая доступность;
– защита от цензуры;
– надежность;
– открытость;
– псевдоанонимность;
– безопасность;
– гибкость;
– полная окончательная согласованность;
– сохранение целостности.
• Блокчейн-система состоит из компонентов двух типов: тесно связанных с задачей приложения, ориентированной на управление правами владения собственностью, и независимых от задачи приложения.
• Специфические для конкретного приложения компоненты блокчейн-системы:
– логика прав владения собственностью;
– данные транзакций;
– логика обработки транзакций;
– защита транзакций;
– независимые от конкретного приложения компоненты блокчейн-системы;
– набор технологий блокчейна;
– полностью распределенная пиринговая архитектура.
• Набор технологий блокчейна состоит из следующих компонентов:
– логика хранения;
– логика согласования;
– логика обработки данных;
– асимметричная криптография.
Часть IV
Ограничения и способы их преодоления
На этом этапе обучения все внимание сосредоточено на основных ограничениях, присущих технологии блокчейна, на причинах их возникновения и на возможных способах их преодоления. К концу этого этапа вы будете хорошо понимать, почему основная идея технологии блокчейна, подробно описанная в предыдущих главах, может оказаться не подходящей для крупномасштабных коммерческих приложений и какие изменения необходимо внести для преодоления существующих ограничений и их последствий. В конце этапа вы познакомитесь с терминологией, используемой в основных вариантах реализации технологии блокчейна.
Глава 22
Обзор ограничений
Даже совершенный механизм имеет свои ограничения
В главе 21 все составные части были собраны вместе, и это позволило увидеть блокчейн-систему как единое целое и особо подчеркнуть важность взаимозависимости всех технических концепций, заложенных в ее основу. В итоге мы пришли к выводу, что блокчейн-система представляет собой сложную и чрезвычайно хитроумную техническую конструкцию. Можно утверждать без преувеличения, что эта система – плод работы весьма изобретательного интеллекта. Тем не менее блокчейн не является абсолютно совершенным программным продуктом и не обходится без некоторых ограничений. Поэтому в данной главе подробно рассматриваются основные ограничения технологии блокчейна и причины, по которым эти ограничения создают серьезные затруднения для коммерческого применения этой технологии. В конце главы кратко описываются способы преодоления ограничений блокчейна.
//-- Главная задача --//
Блокчейн-система является полностью распределенной пиринговой системой, которая позволяет каждому читать хронологию транзакций и добавлять новые данные транзакций в совместно обслуживаемое хранилище данных. Открытость и отсутствие какой-либо формы централизованного управления или координации являются основой такой системы, так как позволяют ее узлам действовать подобно независимым свидетелям, подтверждающим факты, связанные с определением прав владения собственностью. Но открытость и отсутствие централизованного управления могут приводить к нежелательным последствиям, которые ограничивают применимость этой системы. Таким образом, главная задача заключается в том, чтобы определить и понять эти нежелательные последствия, после чего создать стратегии их преодоления.
//-- Технические ограничения блокчейна --//
Наиболее важные технические ограничения блокчейн-системы перечислены ниже:
• недостаточная секретность;
• модель защиты;
• ограниченная масштабируемость;
• высокий уровень накладных расходов;
• скрытая централизация;
• недостаточная гибкость;
• критический размер.
Недостаточная секретность
Блокчейн-система является полностью распределенным пиринговым реестром, обслуживающим полную хронологию данных транзакций. Все подробности транзакций, такие как передаваемые объекты и их количество, учетные записи, участвующие в передаче, и время передачи, доступны всем [26]. Это необходимо для того, чтобы каждый член системы получил возможность определить и подтвердить право владения, а также проверить новую транзакцию (например, для обнаружения атаки типа двойное расходование). Таким образом, недостаточная секретность операций является неотъемлемым составным элементом блокчейн-системы. Без такого уровня открытости блокчейн-система не смогла бы выполнять свои функции. Но такой уровень открытости часто становится ограничивающим фактором для применения в приложениях, которые требуют большей секретности.
Модель защиты
Технология блокчейна использует асимметричную криптографию для идентификации и аутентификации пользователей, а также для авторизации транзакций. Номера учетных записей в блокчейн-системе в действительности являются открытыми криптографическими ключами. Только владелец соответствующего закрытого (секретного) ключа может получить доступ к объектам собственности, принадлежащим конкретной учетной записи. Только те данные транзакции, которые содержат цифровую подпись, созданную с помощью соответствующего секретного ключа, являются корректными и могут осуществить передачу объектов собственности из одной учетной записи в другую. Секретный ключ (private key) – это единственный инструмент защиты, позволяющий выполнить авторизацию законного владельца. После того как секретный ключ учетной записи получает постороннее лицо преднамеренно, случайно, по ошибке или в результате перехвата данных, такая учетная запись уже не является защищенной.
Для защиты объектов собственности, принадлежащих конкретной учетной записи, не существует каких-либо дополнительных средств. Здесь важно отчетливо понимать, что асимметричная криптография, применяемая в блокчейн-системе, считается наилучшей и самой надежной из всех доступных методик. Поэтому сама по себе концепция защиты в блокчейн-системе не является ошибочной и не содержит дефектов. Но при этом отсутствуют и дополнительные страховочные средства, защищающие пользователей блокчейн-системы от потери или случайной передачи секретного ключа другим лицам. Это похоже на способ использования секретных ключей в реальной жизни для защиты домов или автомобилей или на способ, при котором числовые персональные идентификаторы (PIN) применяются для защиты кредитных или дебетовых банковских карт. Как только вы даете кому-то ключ, не важно, при каких обстоятельствах и по каким причинам, защита перестает действовать, и каждый, получивший ваш PIN или ключ, может снять деньги с вашей кредитной карты или угнать вашу машину. То же самое в полной мере относится и к секретному ключу учетной записи в блокчейн-системе. Именно поэтому некоторые люди считают отсутствие дополнительных защитных средств ограничивающим фактором для использования технологии блокчейна.
Ограниченная масштабируемость
Блокчейн – это пиринговая система, ориентированная на достижение двух целей: с одной стороны, она позволяет каждому добавлять новые транзакции в совместно обслуживаемую хронологию транзакций, с другой – она обеспечивает защищенность хронологии данных транзакций от изменений и подделок. Блокчейн-система соблюдает баланс между обеими целями, используя неизменяемую структуру данных с возможностью только добавления, которая требует решения хэш-головоломки при каждой операции добавления нового блока. Решение хэш-головоломки требует значительных затрат времени, поэтому любая попытка изменения хронологии транзакций будет связана с неприемлемо большими накладными расходами. К сожалению, за такое средство защиты приходится платить снижением скорости обработки данных, следствием чего является ограниченная масштабируемость системы. Эта характеристика блокчейн-системы считается серьезным препятствием для использования ее в тех случаях, когда требуются высокая скорость обработки данных, высокая масштабируемость и высокая пропускная способность.
Высокий уровень накладных расходов
Проблема больших накладных расходов связана с проблемой ограниченной масштабируемости. Решение хэш-головоломки или подтверждение выполненной работы преднамеренно сделано чрезвычайно трудоемким и затратным в плане объема вычислений. Это средство защиты, которое делает хронологию данных транзакций практически не изменяемой. Затраты на вычисления могут быть отображены в различных единицах измерения, например в количестве вычислительных циклов, в затраченном времени, в единицах израсходованной электроэнергии или в денежном выражении. Но результат будет одним и тем же: подтверждение выполненной работы требует больших затрат. Следовательно, вся блокчейн-система связана с накладными расходами. Подавляющее большинство этих накладных расходов зависит от уровня сложности хэш-головоломок.
Скрытая централизация
Обязательность решения хэш-головоломки для каждого блока, добавляемого в структуру данных блокчейна, и правила распределенных поощрений за вклад в поддержку целостности системы неизбежно приводят к конкуренции между членами системы. Обладатели необходимых финансовых ресурсов вкладывают деньги в специализированные аппаратные средства, которые позволяют решать хэш-головоломки, тем самым внося полезный вклад в систему [34]. С другой стороны, рискованные действия по проверке и добавлению новых данных транзакций становятся невыгодными для тех, кто не имеет доступа к специализированной аппаратуре, следовательно, такие пользователи вынуждены отказываться от предоставления своих вычислительных ресурсов системе. В результате предположительно большая и разнородная группа равноправных партнеров, совместно поддерживающая целостность системы, в конечном итоге становится очень маленькой группой объектов, каждый из которых обладает огромной вычислительной мощностью в форме специализированных аппаратных средств. Эта оставшаяся группа партнеров образует своеобразную монополию (или даже олигархию), в которой ответственность за поддержку целостности системы разделена между немногими членами группы. Подобно монополиям (и олигархам) в других отраслях промышленности, такая небольшая группа может позволить себе злоупотребление властью (например, намеренное игнорирование некоторых конкретных транзакций или дискриминацию определенных пользователей). В итоге устанавливается скрытая форма централизации, которая разрушает распределенную сущность всей системы [18]. С технической точки зрения такая система остается распределенной системой, но фактически это система, целостность которой поддерживается лишь небольшим количеством партнеров.
Недостаточная гибкость
Блокчейн-система – это сложная техническая конструкция, которая сформирована на основе разнообразных концепций и протоколов, оптимизированных и адаптированных для совместной работы. Любые изменения в этой тонко настроенной экосистеме могут быть чрезвычайно затруднительными. На самом деле не существует конкретно определенной процедуры изменения или обновления основных компонентов блокчейн-системы, после того как она начала свою работу. Это неявно обусловливает долгий срок сопровождения технологий, на основе которых сформирована технология блокчейна. Например, криптографические процедуры должны быть корректными на протяжении всего жизненного цикла блокчейн-системы, то есть в перспективе – в течение десятков и даже сотен лет. То же самое относится и к алгоритму блокчейна, и к методикам разрешения конфликтов. Кроме того, определенные проблемы для разработчиков блокчейн-системы связаны с ее неизменяемостью, поэтому трудно исправлять ошибки и вносить усовершенствования в протокол блокчейна. Эти характеристики делают весь комплект (стек) технологий блокчейна менее гибким, чем другие технологии.
Критический размер
Сопротивляемость различным манипуляциям и вытекающая из этого степень доверительности к совместно обслуживаемой хронологии данных транзакций основаны на предположении, что основные вычислительные мощности системы управляются честными узлами. Тем не менее в маленьких пиринговых системах с ограниченной вычислительной мощностью это управляющее большинство может оставаться весьма незначительным (в абсолютном выражении), что, в свою очередь, может создавать потенциальную возможность для проведения атак типа «51 процент». Эта проблема особенно опасна для криптовалют с низкой рыночной капитализацией и небольшим количеством пользователей-участников. Таким образом, любая блокчейн-система требует критической массы честных узлов для поддержки и обеспечения сопротивляемости атакам с применением значительных вычислительных мощностей. Достижение критического размера, при котором атаки типа «51 процент» становятся невозможными, представляет собой очень трудную задачу, с необходимостью решения которой неизбежно сталкивается каждая новая блокчейн-система.
//-- Нетехнические ограничения блокчейна --//
Самыми важными нетехническими ограничениями блокчейн-систем являются:
• недоверие с юридической точки зрения;
• недоверие со стороны пользователей.
Недоверие с юридической точки зрения
Блокчейн – это технология, которая предоставляет пользователям возможность управления и передачи прав владения собственностью в открытой и полностью распределенной пиринговой системе. Способ, которым независимые равноправные партнеры совместно управляют правами владения собственностью с помощью распределенного согласования, поставил вопросы, касающиеся законности последовательностей транзакций, выполняемых и управляемых в блокчейн-системе. Вопросы, относящиеся к юридической правомочности и приемлемости с точки зрения законодательства транзакций, выполняемых в блокчейн-системе, должны обсуждаться вне зависимости от безопасности, защищенности и сложности соответствующей технологии. Это вопрос включения новой методики управления правами владения собственностью в существующую систему законодательства. Те, кто застал времена появления и начального развития Интернета, могут заметить сходство между юридическим статусом блокчейна в наши дни и недоверием с точки зрения законодательства к интернет-коммерции в 1990-е гг.
Недоверие со стороны пользователей
Недоверие со стороны пользователей, их предвзятое отношение является еще одним ограничением, которое нельзя недооценивать. Открытый (общедоступный) юридический статус блокчейн-системы вызывает чувство неуверенности у пользователей, в свою очередь, снижая их заинтересованность в использовании этой системы. Дополнительным фактором, влияющим на доверительное отношение пользователей, является уровень их знаний и образования. Не следует ожидать, что клиенты будут пользоваться блокчейн-системой и полностью доверять ей, если им непонятны основные принципы ее функционирования.
//-- Преодоление ограничений --//
Технические и нетехнические ограничения рассматриваются как главные препятствия для применения технологии блокчейна в реальных приложениях. Способы преодоления конкретных ограничений всегда были и остаются предметом интенсивных исследований и перспективных разработок. Подробное обсуждение этих исследований не относится к тематике данной книги. Тем не менее в следующих разделах кратко описываются способы преодоления ограничений технологии блокчейна.
Технические ограничения
Преодоление технических ограничений технологии блокчейна может потребовать вмешательства во все компоненты и на всех технических уровнях. Одна из главных трудностей в процессе преодоления технических ограничений технологии блокчейна – различие между усовершенствованием этой технологии и изменением ее основ. В следующей главе эта тема рассматривается более подробно.
Нетехнические ограничения
Нетехнические ограничения технологии блокчейна могут рассматриваться как социальные, экономические, юридические и психологические аспекты перехода к новой технологии. Образовательные и законодательные инициативы могут стать дополнительными средствами для перехода к использованию блокчейна. Пример Интернета и электронной коммерции уже показал, что требуется определенное время для ответа на вопросы, связанные с законодательством, которые возникают вместе с новыми технологиями, а кроме того, время также требуется для того, чтобы пользователи поняли новые технологии, стали им доверять и практически применять. К счастью, тот же пример Интернета и электронной коммерции также показал, что образовательные инициативы, направленные на изучение функциональности новых технологий, увеличивают степень доверия к ним, их распространение среди пользователей и способствуют решению юридических проблем.
//-- Перспектива --//
В этой главе все внимание было сосредоточено на главных технических и нетехнических ограничениях технологии блокчейна, которые вполне обоснованно могут считаться факторами, препятствующими практическому применению этой технологии. Образовательные и законодательные инициативы могут рассматриваться как способы преодоления нетехнических ограничений технологии блокчейна. В следующей главе будут рассматриваться методики преодоления некоторых технических ограничений.
//-- Резюме --//
• Открытость блокчейн-системы и отсутствие какой-либо формы централизации являются основой функционирования этой системы, но также становятся причинами ограничений для ее практического применения.
• Основные технические ограничения блокчейн-системы:
– недостаточная секретность;
– модель защиты;
– ограниченная масштабируемость;
– высокий уровень накладных расходов;
– скрытая централизация;
– недостаточная гибкость;
– критический размер.
• Наиболее важные нетехнические ограничения блокчейн-системы:
– недоверие с юридической точки зрения;
– недоверие со стороны пользователей.
• Технические ограничения технологии блокчейна можно преодолеть путем усовершенствования существующей технологии или путем внесения концептуальных изменений.
• Нетехнические ограничения технологии блокчейна могут быть преодолены с помощью образовательных и законодательных инициатив.
Глава 23
Новая жизнь блокчейна
Появление четырех различных разновидностей блокчейна
В главе 22 рассматривались основные ограничения технологии блокчейна и кратко перечислялись возможные пути их преодоления. В этой главе проводится более подробный анализ двух существенных технических ограничений блокчейна. Объясняется главная причина возникновения основных технических ограничений, и более подробно описываются способы их преодоления. Кроме того, здесь сообщается о появлении четырех отличающихся друг от друга версий блокчейна, рассматриваются различия между ними и разъясняются последствия такого разветвления на четыре версии.
//-- Метафора --//
Мы многократно пытаемся достичь нескольких целей, несмотря на невозможность одновременного выполнения соответствующих целевых задач, например выполнение работы быстро и аккуратно или вождение автомобиля быстро и безопасно. Несовместимость между двумя или несколькими задачами или целями называется конфликтом, который может быть разрешен либо поиском компромисса, либо выбором одной предпочтительной задачи (цели) в ущерб всем прочим. В этой главе рассматриваются два главных конфликта технологии блокчейна, выражающихся в двух основных технических ограничениях, а также попытки преодоления этих ограничений, которые привели к созданию четырех различных версий блокчейна, отличающихся друг от друга.
//-- Конфликтующие цели блокчейн-системы --//
В блокчейн-системе существуют два конфликта:
• прозрачность (открытость) и секретность;
• безопасность и скорость.
Конфликт прозрачности (открытости) и секретности
Блокчейн-система устанавливает и подтверждает права владения собственностью на основе полной хронологии данных транзакций, которая доступна всем. В итоге блокчейн-система похожа на общедоступный журнал регистрации транзакций или на общедоступный реестр. Открытость и прозрачность – это основная концепция блокчейна для проверки прав владения собственностью. Открытость и общедоступность являются основой для устранения проблемы двойного расходования, поскольку каждый член системы может проверить транзакции любого другого члена, следовательно, без труда обнаружить атаки типа двойного расходования.
Но этот подход противоречит концепции секретности. Секретность означает сохранение данных транзакций или их подробностей, таких как номера учетных записей, участвующих в операциях, или количество передаваемых объектов собственности, в секрете, то есть они не должны быть общедоступными. Таким образом, возникает конфликт между открытостью и прозрачностью, необходимыми для определения и подтверждения прав владения собственностью, с одной стороны, и высокими требованиями к обеспечению секретности для личных данных пользователей системы – с другой.
Безопасность и скорость
Можно утверждать без преувеличения, что хронология данных транзакций является сердцем блокчейн-системы. Хронология данных транзакций защищена от каких-либо изменений и подделок тем, что хранится в неизменяемой структуре данных блокчейна, в которой разрешены только операции добавления данных, к тому же для каждого добавляемого или перезаписываемого блока обязательным требованием является решение хэш-головоломки. Это не только делает любую попытку изменения или подделки хронологии данных транзакций непомерно затратной, но и существенно замедляет операции добавления новых транзакций в структуру данных блокчейна. Это противоречит требованиям к скорости и масштабируемости для многих коммерческих приложений. Таким образом, возникает конфликт между обеспечением безопасности хронологии данных транзакций на основе процедуры подтверждения выполненной работы, требующей большого количества времени, с одной стороны, и пользовательскими требованиями к скорости и масштабируемости системы – с другой.
//-- Главные причины конфликтов --//
Главными причинами двух описанных выше конфликтов являются две основные операции в блокчейн-системе: чтение и запись данных транзакций. Истоки конфликта открытости и секретности можно проследить в обратном направлении к операции чтения структуры данных блокчейна, а истоки конфликта безопасности и скорости прослеживаются также в обратном направлении до операции записи в структуру данных блокчейна. В табл. 23.1 показаны взаимосвязи между двумя рассматриваемыми в этой главе основными техническими ограничениями, возникающий из-за этого конфликт и соответствующие базовые функциональные характеристики блокчейн-системы.
Таблица 23.1 Технические ограничения блокчейн-системы и их причины
//-- Разрешение конфликтов --//
Конфликты могут быть разрешены либо поиском компромисса, создающего баланс между конфликтующими целями, либо предпочтением одной цели за счет всех прочих. В блокчейн-системе, как утверждалось до сего момента, предпочтение отдается прозрачности (открытости) и безопасности в ущерб секретности и скорости. Но существуют и другие способы разрешения этих конфликтов, которые более подробно рассматриваются в следующих разделах.
Разрешение конфликта открытости и секретности
Принятие решения по конфликту открытости и секретности фактически сводится к решению вопроса: кому предоставить доступ с правом чтения. Если рассматриваются только крайние случаи предоставления прав на чтение, то существуют два варианта: предоставление права чтения всем или предоставление права чтения только ограниченной группе узлов или пользователей. Можно выделить следующие типы блокчейн-систем, различающихся по тому, каким пользователям или узлам предоставлено право читать структуру данных блокчейна и создавать новые транзакции [2]:
• открытые блокчейн-системы (public blockchains) предоставляют доступ с правом чтения и право создания новых транзакций всем пользователям или узлам;
• закрытые блокчейн-системы (private blockchains) ограничивают доступ с правами чтения и создания новых транзакций только для предварительно выбранной группы пользователей или узлов.
Разрешение конфликта безопасности и скорости
Принятие решения по конфликту безопасности и скорости фактически сводится к решению вопроса: кому предоставить доступ с правом записи. Если рассматриваются только крайние случаи предоставления прав на запись, то существуют два варианта: предоставление права записи всем, но при этом выдвигается требование подтверждения выполнения работы, связанного с весьма высокими накладными расходами на вычисления, или предоставление права записи только ограниченной предварительно выбранной группе пользователей или узлов, которые были признаны заслуживающими доверия, и для них предлагается менее затратная версия операции подтверждения выполнения работы. Можно выделить следующие типы блокчейн-систем на основе предоставления доступа с правом записи [3]:
• блокчейн-системы без ограничений прав доступа (permissionless blockchains) предоставляют права на запись всем. Каждый пользователь или узел может проверять транзакции и создавать и добавлять новые блоки в структуру данных блокчейна;
• блокчейн-системы с ограничением прав доступа (permissioned blockchains) предоставляют право на запись только ограниченной группе предварительно выбранных узлов или пользователей, которые признаны заслуживающими доверия в ходе основного системного процесса. В результате только группе узлов, обладающих правом записи, разрешена проверка транзакций и обеспечено участие в процедуре распределенного согласования.
//-- Четыре версии блокчейн-системы --//
Решения, касающиеся предоставления прав на чтение и запись, могут быть приняты независимо друг от друга. В табл. 23.2 представлены четыре версии блокчейн-системы, основанные на различных сочетаниях ограничений прав на чтение и на запись.
Таблица 23.2 Четыре версии блокчейн-системы как результат сочетаний ограничений прав на чтение и на запись

Блокчейн-система, определение которой было дано в главе 5 и которая рассматривалась во всех последующих главах вплоть до текущей, является открытой блокчейн-системой без ограничения прав доступа (public permissionless blockchain). Любое ограничение прав чтения или записи в структуру данных блокчейна приводит к появлению одной из альтернативных версий. Самой защищенной и секретной является закрытая блокчейн-система с ограничением прав доступа (private permissioned blockchain). Эта версия воспринимается как наиболее полезная в коммерческих средах благодаря более высокой скорости обработки данных и возможности защиты данных транзакций от общего доступа.
//-- Последствия --//
Ограничения доступа с правами чтения или записи к хронологии данных транзакций воздействуют на следующие аспекты блокчейн-системы:
• пиринговая архитектура;
• распределенная сущность;
• главная цель.
Пиринговая архитектура
Из главы 3 вы узнали о пиринговых системах и их свойствах. Одним из главных свойств, которое часто считают основополагающей характеристикой пиринговых систем, является то, что они включают компьютеры с одинаковыми правами и ролями. Хотя отдельные узлы могут отличаться по предоставляемым ими ресурсам, все узлы системы обладают одинаковыми функциональными возможностями и одинаковыми обязанностями. Но, как отмечено выше, все четыре версии блокчейн-системы различаются по уровням прав чтения и записи, предоставляемым узлам, входящим в состав системы. Если узлы отличаются по возможности читать или записывать данные транзакции, то они перестают быть равноправными. Таким образом, важная характеристика пиринговых систем может пострадать в результате ввода ограничений прав чтения и записи в данной системе.
Распределенная сущность
Из главы 2 вы узнали о распределенных системах и некоторых их свойствах. Одним из главных свойств, которое часто считают основополагающей характеристикой распределенных систем, является отсутствие любого вида централизованного управления и координации. Но появление четырех различных версий блокчейн-системы, как отмечено выше, основано на предоставлении предварительно выбранной группе узлов или пользователей прав чтения или записи в хронологию данных транзакций, тогда как все прочие таких прав лишены. Но кто решает вопрос о предоставлении или лишении прав чтения или записи в системе? Кто устанавливает правила, по которым назначаются или отменяются права чтения и записи для членов системы?
Если правила, определяющие назначение прав чтения и записи, не регулируются и не управляются самой полностью распределенной системой, то в системе непременно появляется центральный элемент, который, в свою очередь, противоречит распределенной сущности блокчейн-системы. Архитектуру предположительно распределенной системы, которая использует центральный элемент для администрирования и выполнения правил, управляющих назначением прав чтения и записи, можно изобразить с помощью схемы, показанной на рис. 2.2. Это означает, что в системе присутствует скрытый элемент централизации или сама система выглядит как централизованная для всех узлов, доступ ограничен, хотя внутри системы применяется распределенная архитектура. В обоих случаях вся система в целом имеет много общего с гибридной системой, состоящей из распределенных и централизованных элементов.
Главная цель
Из главы 4 вы узнали, что основная задача, решаемая блокчейн-системой, – обеспечение и поддержка целостности в полностью распределенной пиринговой системе, состоящей из неизвестного количества равноправных партнеров с неопределенной надежностью и степенью доверия. Установление ограничений на операции чтения и записи не только изменяет основополагающие свойства распределенных пиринговых систем, но и воздействует на степень доверия узлов. Если пользователи или узлы, которым разрешено записывать данные в структуру данных блокчейна, определяются по степени доверия к ним, заслуженной ранее при выполнении общесистемного внутреннего процесса, то, вероятнее всего, итоговая среда уже не будет состоять из узлов, степень доверия к которым неизвестна. Таким образом, кто-то может прийти к выводу, что в созданной среде способность блокчейн-системы создавать среду с полным взаимным доверием из ненадежной в этом отношении среды больше не нужна.
Блокчейн-система сохраняет свое важное значение даже в среде, состоящей из известного количества узлов с достаточно хорошо известной надежностью и доверительностью, по следующим причинам. Во-первых, количество узлов в такой системе может изменяться из-за технических сбоев или обычных отключений. Во-вторых, каждая распределенная система испытывает затруднения в сетевой среде, которые делают обмен информацией на уровне отдельных сообщений ненадежным. Наконец, даже внутрисистемный процесс не может обеспечить 100-процентную гарантию полного доверия ко всем узлам. Кроме того, даже узлы, заслуживающие доверия, могут выдавать некорректные результаты из-за технических сбоев.
//-- Немного пересмотрим определение главной задачи блокчейна --//
Изучая последствия ввода ограничений для узлов в связи с основными аспектами блокчейн-системы, мы можем пересмотреть наше понимание ее главной задачи. Ввод ограничений на операции чтения и записи может создавать конфликты с определяющими свойствами пиринговой системы, с распределенной сущностью систем и с основной целью блокчейн-системы. Тем не менее технология блокчейна полезна для сохранения целостности даже в наиболее ограниченной версии полностью закрытой блокчейн-системы с установлением прав доступа. В итоге мы можем прийти к решению, допускающему ослабление условий, при которых предполагается, что блокчейн-система создает ценности. Вместо утверждения о том, что главной целью блокчейна является поддержка целостности открытых полностью распределенных пиринговых систем, мы можем немного изменить свое восприятие и утверждать, что главной целью блокчейна являются обеспечение и сохранение целостности любых распределенных систем.
//-- Использование термина блокчейн в оставшейся части книги --//
В оставшейся части книги термин блокчейн продолжает использоваться для обозначения полностью открытой системы без установления прав доступа. Во всех прочих случаях будет явно указываться, какой тип ограничений рассматривается.
//-- Перспектива --//
В этой главе рассматривались два способа преодоления двух основных технических ограничений технологии блокчейна. Отмечено появление четырех версий блокчейна, различающихся по назначаемым правам чтения и записи в структуру данных блокчейна. До настоящего момента в книге обсуждались основные функциональные принципы технологии блокчейна и концепции, лежащие в ее основе. Но ничего не было сказано о возможностях практического применения этой технологии в реальном мире. В следующей главе будут рассматриваться как общие, так и более специализированные варианты практического применения технологии блокчейна.
//-- Резюме --//
• В блокчейн-системе неизбежно возникают следующие конфликты:
– конфликт открытости (прозрачности) и секретности: с одной стороны, открытость необходима для определения и подтверждения прав владения собственностью и для предотвращения двойного расходования, с другой – пользователям необходима защита их секретных данных;
– конфликт безопасности и скорости: с одной стороны, защита хронологии данных транзакций от изменений обеспечивается чрезвычайно высоким уровнем затрат на вычисления при подтверждении выполненной работы, с другой – в большинстве коммерческих сред требуются скорость и масштабируемость.
• Конфликт открытости (прозрачности) и секретности возникает при назначении прав чтения структуры данных блокчейна.
• Конфликт безопасности и скорости возникает при назначении прав записи в структуру данных блокчейна.
• Разрешение конфликта открытости (прозрачности) и секретности привело к появлению следующих версий блокчейн-системы:
– открытые блокчейн-системы предоставляют право чтения и право создания новых транзакций всем пользователям или узлам;
– закрытые блокчейн-системы ограничивают право чтения и право создания новых транзакций и разрешают эти операции только предварительно определенной группе пользователей или узлов.
• Разрешение конфликта безопасности и скорости привело к появлению следующих версий блокчейн-системы:
– блокчейн-системы без назначения прав доступа предоставляют право записи всем. Каждый пользователь или узел может проверить данные транзакции, а также создавать и добавлять новые блоки в структуру данных блокчейна;
– блокчейн-системы с назначением прав доступа предоставляют право записи только ограниченной группе предварительно выбранных узлов или пользователей, определяемых по степени доверия, ранее заслуженной ими в общесистемном процессе.
• Попарное объединение этих ограничений привело к появлению четырех различных версий блокчейн-системы.
• Ограничения доступа с правами чтения или записи к хронологии данных транзакций воздействуют на следующие аспекты блокчейн-системы:
– пиринговая архитектура;
– распределенная сущность;
– главная цель.
• Блокчейн-система сохраняет свое важное значение даже в средах с установленными ограничениями по следующим причинам:
– количество узлов в такой системе может изменяться из-за технических сбоев или обычных отключений;
– каждая распределенная система испытывает затруднения в сетевой среде, которые делают обмен информацией на уровне отдельных сообщений ненадежным;
– даже внутрисистемный процесс не может обеспечить 100-процентную гарантию полного доверия ко всем узлам;
– даже узлы, заслуживающие доверия, могут выдавать некорректные результаты из-за технических сбоев.
Часть V
Практическое использование блокчейна, обзор и перспективы
Эта часть завершает наш курс изучения технологии блокчейна. Здесь рассматриваются возможные способы практического применения технологии блокчейна в реальной жизни, существующие обобщенные варианты ее использования, а также методики анализа существующих блокчейн-приложений. Кроме того, обозначаются области активных исследований и перспективных разработок. После изучения этой части вы будете хорошо понимать основные сценарии практического применения технологии блокчейна, ее наиболее важные преимущества и потенциальные достоинства и недостатки в далекой перспективе.
Глава 24
Практическое применение технологии блокчейна
Инструмент для тысяч приложений
В главах 1-23 было подробно описано, что такое блокчейн, какие задачи решает эта технология и как она работает. Но технология блокчейна была разработана не для изучения и обсуждения ее идей и технологических концепций, а для практического применения в реальном мире. Поэтому в данной главе более подробно рассматриваются возможности использования блокчейна. Здесь также описываются обобщенные шаблоны блокчейн-приложений и их взаимосвязь с функциональными свойствами блокчейна. Кроме того, в этой главе кратко рассматриваются некоторые специализированные блокчейн-приложения и объясняется, какие подробности следует учесть при анализе специализированного блокчейн-приложения.
//-- Метафора --//
Зачем люди используют полки, шкафы, ящики стола, коробки? Эти средства широко распространены, потому что они обеспечивают надежный способ хранения и позволяют аккуратно сохранять вещи в чистоте и порядке независимо от их предназначения. Например, можно воспользоваться коробкой для хранения документов, технических запчастей, офисных принадлежностей, фотографий, денег, DVD-дисков, одежды или бутылок с вином. Разнообразие вариантов использования коробок, ящиков стола, шкафов и полок ограничивается лишь различием свойств предметов, хранимых в них. В этой главе рассматривается практическое применение технологии блокчейна с особым вниманием к разнообразию объектов, которые можно хранить в блокчейн-системе, и к разнообразию контекстов применения технологии блокчейна. Но сначала сделаем краткий обзор свойств блокчейн-системы как особого типа коробки для цифровых объектов.
//-- Характеристики блокчейн-системы --//
Блокчейн-система – это полностью распределенное пиринговое хранилище данных, обладающее следующими свойствами:
• неизменяемость;
• возможность только добавления данных;
• упорядоченность;
• маркировка метками времени;
• открытость и прозрачность;
• безопасность (идентификация, аутентификация и авторизация);
• общая конечная (итоговая) целостность.
Эти свойства блокчейн-системы не зависят от особенностей данных, хранимых в ней. Поэтому с упрощенной точки зрения мы можем рассматривать блокчейн-систему как особый тип коробки для хранения цифровых объектов. Такой подход создает огромное разнообразие потенциальных возможностей для практического применения технологии блокчейна.
//-- Обобщенные шаблоны приложений --//
На основе свойств блокчейн-системы и ее характеристик в качестве хранилища данных общего назначения мы можем предположить следующие обобщенные варианты ее использования:
• подтверждение существования;
• подтверждение несуществования;
• подтверждение времени (наступления какого-либо события);
• подтверждение порядка следования;
• подтверждение подлинности личности;
• подтверждение авторства;
• подтверждение права владения собственностью.
Подтверждение существования
Этот вариант использования блокчейн-системы сосредоточен на хранении данных с единственной целью – подтверждение их существования. Следовательно, данный вариант не пользуется возможностями блокчейн-системы, позволяющими упорядочивать данные и снабжать их метками времени. Например, конкретные приложения регистрируют объекты, предположительно не повторяющиеся, такие как названия брендов, патенты, лицензионные коды, интернет-адреса или адреса электронной почты.
Подтверждение несуществования
Этот вариант использования блокчейн-системы полностью противоположен варианту подтверждения существования. Он предоставляет способы проверки фактов отсутствия в блокчейн-системе определенных записей или объектов. В конкретных приложениях это могут быть записи о рекламациях (исках), штрафах или судимостях.
Подтверждение времени наступления какого-либо события
В этом случае важен не только сам факт существования записи в блокчейн-системе, но и время добавления этой записи. Технология блокчейна позволяет выполнить эту задачу, поскольку в блоках структуры данных блокчейна сохраняется время начала процесса их добавления. Возможность выставления меток времени в блокчейн-системе позволяет извлечь пользу приложениям, которые прослеживают наступление событий по времени, например почтовая доставка или отслеживание уведомлений, мониторинг платежей, прослеживание упорядоченного открытия и закрытия общедоступных процедур торгов на аукционах (или приема ставок), управление прогнозами.
Подтверждение порядка следования
Этот шаблон использует свойство упорядоченности записей в блокчейн-системе. Это свойство позволяет извлечь пользу приложениям, которые прослеживают порядок наступления событий относительно друг друга вне зависимости от физического времени их возникновения, например мониторинг процессов приложения, аудиторские проверки общедоступных процедур торгов на аукционах (или приема ставок) и службы условного депонирования или временного блокирования средств. Доказательство того, что некоторое событие было первым или последним в цепочке событий соответствующего типа, является типичным примером подтверждения порядка следования. Этот вариант подтверждения может иметь важное значение при распределении ресурсов и средств в том же порядке, в каком были поданы конкретные требования или документы, например заявки колледжей или университетов, заявки на патенты или заявки на авторское право.
Подтверждение подлинности личности
Подтверждение подлинности личности может рассматриваться как особый случай подтверждения существования, поскольку доказывает, что определенный объект (в данном случае личность) уже существует. Блокчейн-система выполняет эту задачу, поскольку не просто хранит данные, используемые для идентификации кого-либо или чего-либо, но и реализует концепции безопасности в плане идентификации и аутентификации. Этот шаблон применяется приложениями, которые работают с цифровыми документами, удостоверяющими личность, а также с цифровыми документами на животных, товары, продукцию и т. п. Административные учреждения могут использовать такие блокчейн-системы как часть своей стратегии электронного управления для обработки личных документов, водительских прав или паспортов.
Подтверждение авторства
Главная цель этого шаблона – подтверждение того факта, что определенный человек или организация действительно добавили конкретные данные в блокчейн-систему. Блокчейн-система способна выполнять эту задачу, поскольку не только хранит данные, идентифицируемые по своим криптографическим отпечаткам, но и реализует концепции безопасности в плане идентификации, аутентификации и авторизации. Идентификация и аутентификация необходимы для определения личности авторов и проверки их подлинности. Авторизация необходима именно в рассматриваемом здесь варианте использования, для того чтобы предотвратить добавление данных в блокчейн-систему лицами, которые не имеют на это права. Например, этот шаблон могут использовать приложения, работающие с электронными публикациями (электронные издательства), приложения, прослеживающие изменения содержимого документов, приложения, обеспечивающие доставку содержимого (контента), приложения совместного редактирования документов и сервисы защиты авторских прав.
Подтверждение права владения собственностью
Этот шаблон обеспечивает управление, определение и подтверждение прав владения собственностью. Он основан на описанных выше шаблонах, таких как подтверждение существования, подтверждение порядка следования, подтверждение подлинности личности и подтверждение авторства, в совокупности с тремя основными концепциями безопасности: идентификация, аутентификация и авторизация. Примеры приложений, использующих этот шаблон: системы управления правами владения недвижимостью, автомобилями, паевыми долями компаний, бонами (облигациями), цифровыми деньгами или криптографическими валютами.
//-- Особые варианты использования --//
Для блокчейн-системы не имеет значения, какие именно данные в ней хранятся. Таким образом, диапазон данных, которые можно хранить в блокчейн-системе, и спектр областей ее применения практически не ограничены, как не ограничены и области человеческой деятельности. Полностью описать все варианты и области применения технологии блокчейна невозможно. Поэтому в данном разделе представлен лишь небольшой выборочный список конкретных областей применения, в которых уже используется технология блокчейна или может быть использована в ближайшем будущем [40, 41, 12]:
• платежные системы: управление правами владения и передачей цифровых денежных средств в официальных валютах;
• криптовалюты: управление правами владения и созданием цифровых инструментов платежей, которые существуют независимо от любых правительств, центральных банков и прочих централизованных административных органов;
• микроплатежи: переводы небольших денежных сумм, которые потребовали бы слишком больших накладных расходов, если бы выполнялись обычными способами денежных переводов;
• цифровые активы (имущество): управление созданием, правами владения и передачей цифровых объектов, которые обладают ценностью сами по себе или представляют ценную продукцию (товар) в реальном мире;
• цифровая идентификация: подтверждение подлинности и выполнение аутентификации на основе уникальности цифровых объектов;
• нотариальные службы: оцифровка, хранение и проверка документов или контрактов, а также подтверждение прав владения собственностью или передачи этих прав;
• рекламации и аудиторские проверки: операции аудиторской проверки людей и организаций в контролируемых отраслях промышленности с мониторингом процесса аудита;
• налоговая служба: вычисление и сбор налогов на основе выполненных транзакций или единовременный налог на собственность, противодействие уклонению от уплаты налогов [2 - С другой стороны, использование по-настоящему анонимных криптовалют может значительно упростить уклонение от уплаты налогов.], исключение двойного налогообложения;
• системы голосования: создание, распространение и обработка (подсчет голосов) цифровых бюллетеней;
• управление историями болезней: создание и хранение записей в историях болезней (медицина).
//-- Анализ блокчейн-приложений --//
Анализ блокчейн-приложений может потребоваться в различных ситуациях, например для нового клиента компании, использующей блокчейн, при намерении инвестирования стартапа на основе блокчейн-системы или при использовании блокчейн-приложения в собственной организации. Во всех этих случаях необходимо решить, действительно ли блокчейн-система приносит пользу или действительно ли блокчейн-система создает реальные материальные ценности. Поскольку блокчейн-система представляет собой сложную техническую конструкцию, возможно, будет весьма затруднительно получить ясную картину возможностей исследуемой программной системы и прийти к полностью осознанному решению по приобретению, инвестированию или использованию блокчейн-системы. В этой ситуации могут помочь ответы на некоторые или на все вопросы, приведенные ниже:
• какой тип блокчейн-системы используется?
• выполнены ли требования к использованию блокчейн-системы?
• каков размер добавленной стоимости при использовании распределенной пиринговой системы?
• какова основная идея (замысел) данного приложения?
• какой бизнес-вариант используется?
• как реализована компенсация для партнеров за предоставление ресурсов рассматриваемой системе?
Выполнены ли требования к использованию блокчейн-системы?
Блокчейн – это полностью распределенная пиринговая система, состоящая из неизвестного количества равноправных партнеров, с неопределенной надежностью и степенью доверия. Поэтому при анализе конкретного блокчейн-приложения в первую очередь должна рассматриваться его архитектура и определяться, действительно ли эта архитектура соответствует условиям применения комплекта технологий блокчейна. Здесь важно получить достаточно полные ответы на следующие вопросы:
• какова архитектура рассматриваемой системы?
• из каких компонентов состоит рассматриваемая система и как они связаны друг с другом?
• является ли рассматриваемая система полностью распределенной или имеется центральный компонент, критический сбой которого может сделать неработоспособной всю систему?
• каким образом новые узлы добавляются в систему?
• может ли кто-либо (без ограничений) присоединиться к системе и предоставить в ее распоряжение свои вычислительные ресурсы?
• существует ли какой-либо тип внутреннего системного процесса, обязательного процесса или обязательная проверка безопасности новых узлов, которые могут создать центральный элемент управления?
• все ли узлы выполняют одинаковые роли и обладают одинаковыми правами в рассматриваемой системе или между узлами существуют различия, касающиеся предоставления им прав на чтение и запись данных?
Ответы на эти вопросы помогут лучше понять рассматриваемую систему и определить, действительно ли необходимо применение комплекта технологий блокчейна. Возможно, вы обнаружите, что рассматриваемая блокчейн-система в действительности является централизованной системой.
Какой тип блокчейн-системы используется?
Не все распределенные системы являются открытыми для каждого, и не все системы предоставляют права чтения и записи для всех своих узлов. Существуют версии блокчейн-систем, отличающиеся по распределению прав чтения и записи среди своих узлов. Эти различия воздействуют на архитектуру и на распределенную сущность системы, а также на главную задачу блокчейна в составе этих систем. Поэтому важно получить достаточно полные ответы на следующие вопросы:
• какой тип блокчейн-системы используется (общедоступная или закрытая, с назначением прав доступа или без оного)?
• какие права ограничиваются?
• каким группам узлов и какие именно права назначаются?
• почему был выбран именно этот тип блокчейн-системы?
• кто решает, какие права назначаются и каким группам узлов назначаются те или иные права?
• кто определяет и следит за выполнением правил назначения или отмены прав чтения и записи в системе?
• кто запускает главный внутрисистемный процесс?
• существуют ли какие-либо требования по секретности или масштабируемости, связанные с конкретным решением, которые могли бы оправдать ввод ограничений определенных прав доступа?
Каков размер добавленной стоимости при использовании полностью распределенной пиринговой системы?
Полностью распределенные пиринговые системы и централизованные системы обладают собственными достоинствами и недостатками. Централизованные системы не всегда являются плохим выбором, они просто основаны на другой архитектурной концепции, хорошо подходящей для многих вариантов приложений, поэтому продолжают использоваться. При наличии определенных характеристик централизованные системы могут быть более предпочтительными, чем распределенные пиринговые системы. Это особенно верно в тех случаях, когда целостность в полностью распределенных пиринговых системах поддерживать чрезвычайно трудно и такая поддержка требует дополнительных трудозатрат и накладных расходов. Таким образом, необходимы веские причины для выбора распределенной пиринговой системы, а не централизованной. При анализе конкретного блокчейн-приложения важно получить достаточно полные ответы на следующие вопросы:
• почему рассматриваемая система изначально была реализована как полностью распределенная пиринговая система?
• какие альтернативные решения существуют?
• каковы преимущества использования полностью распределенной пиринговой системы по сравнению с альтернативными вариантами и каковы недостатки этой системы?
• каков размер добавленной стоимости при использовании распределенной пиринговой архитектуры?
• перевешивают ли преимущества пиринговой архитектуры ее недостатки?
Ответы на эти вопросы важны для того, чтобы отличить тех, кто осознанно выбирает распределенную пиринговую архитектуру, от тех, кто использует блокчейн только потому, что она существует.
Какова основная идея (замысел) данного приложения?
Анализ архитектуры системы важен, но он не дает ответов на вопросы, связанные с идеей рассматриваемого приложения, и на вопросы о том, каким образом система создает добавленную стоимость для своих пользователей. Важно всегда помнить, что даже самая хитроумная системная архитектура никогда не сможет компенсировать недостатки и уязвимости основной идеи приложения. Излишний энтузиазм по отношению к комплекту технологий блокчейна может легко привести к недооценке или даже игнорированию слабости и неэффективности концепции приложения. Таким образом, при анализе конкретного блокчейн-приложения важно получить достаточно полные ответы на следующие вопросы:
• какова изначальная цель (задача) рассматриваемого приложения?
• какова основная проблемная область рассматриваемой системы?
• может ли рассматриваемая система быть связана с конкретными отраслями или секторами промышленности, и если может, то с какими именно?
• какой тип обслуживания эта система предлагает своим пользователям?
• каков размер добавленной стоимости при использовании этой системы?
• какой тип обобщенного шаблона блокчейна использует рассматриваемая система?
• существуют ли какие-либо юридические проблемы, связанные с приемлемостью использования технологии блокчейна в данной прикладной области?
• какой тип данных хранится в блокчейн-системе?
• какой тип операций или транзакций может выполняться?
• какой тип средств защиты используется?
• каким образом все вышеперечисленные аспекты связаны с основной идеей прикладного применения данной системы?
Какой бизнес-вариант используется?
Еще одним важным аспектом анализа блокчейн-приложений является собственно коммерческая концепция программной системы. Создание и функционирование любого программного обеспечения требуют затрат ресурсов, следовательно, и финансовых затрат. Блокчейн-система не является исключением. Анализ коммерческих особенностей применения программного обеспечения блокчейна – это важный этап, поскольку попытки внедрения многих новых продуктов и технических инноваций завершались неудачей из-за упущений в соответствующих коммерческих концепциях. Поэтому необходимо получить достаточно полные ответы на следующие вопросы:
• каков объем затрат на приобретение и/или использование рассматриваемого программного обеспечения?
• каковы постоянные и переменные затраты (издержки) на поддержку функционирования и использования рассматриваемого программного обеспечения?
• кто оплачивает (компенсирует) эти затраты (издержки)?
• какая модель лицензирования используется?
• кто получает выгоду или кто должен покрывать затраты (издержки)?
Как реализована компенсация для партнеров за предоставление ресурсов рассматриваемой системе?
В блокчейн-системе целостность обеспечивается обязательным применением механизма поощрений и наказаний, реализованного посредством поощрительных вознаграждений и процедуры подтверждения выполненной работы. В главе 18 подчеркивается важность вознаграждений для компенсации участников блокчейн-системы, в то время как в главе 20 особо отмечено воздействие механизма вознаграждений на целостность, открытость и распределенную сущность системы. Знание и понимание того, как члены системы получают компенсацию за поддержку целостности, является важнейшим аспектом при анализе блокчейн-приложений. Таким образом, необходимо получить достаточно полные ответы на следующие вопросы:
• каковы правила компенсации для членов системы?
• действительно ли правила компенсации в совокупности с определенными теоретическими аспектами (теория игр) гарантируют и позволяют по достоинству вознаграждать всех, кто вносит реальный вклад в систему?
• каковы формы вознаграждения за операции или транзакции, проверяемые и выполняемые рассматриваемой системой?
• какое средство поощрения используется для выплаты компенсаций за выполненные транзакции?
• какое средство поощрения используется для выплаты компенсаций членам системы за выполненные процедуры проверки и записи данных в структуру блокчейна?
Некоторые блокчейн-приложения используют криптографическую валюту, например биткойн (Bitcoin), как средство выплаты вознаграждений и компенсации для членов системы. Но зависимость от биткойна или от любого другого блокчейн-приложения может оказаться нежелательной при любых обстоятельствах.
//-- Перспектива --//
В этой главе обсуждались разнообразные аспекты практического применения блокчейна в реальном мире. Но это пока еще не завершение общего процесса изучения технологии блокчейна. Следующая глава подводит итоги и кратко описывает области и направления дальнейших разработок.
//-- Резюме --//
• Блокчейн-система может рассматриваться как полностью распределенное пиринговое хранилище данных со следующими свойствами: неизменяемость, возможность только добавления данных, упорядоченность, маркировка метками времени и окончательная общая целостность.
• Поскольку блокчейн-система является хранилищем данных общего назначения, она может хранить широкий диапазон разнообразных типов данных, что, в свою очередь, существенно расширяет область ее практического применения.
• На основе свойств блокчейн-системы можно предположить следующие обобщенные варианты ее использования:
– подтверждение существования;
– подтверждение несуществования;
– подтверждение времени (наступления какого-либо события);
– подтверждение порядка следования;
– подтверждение подлинности личности;
– подтверждение авторства;
– подтверждение права владения собственностью.
• Конкретными областями применения технологии блокчейна, которые уже привлекли всеобщее внимание или могут привлечь внимание в ближайшем будущем, являются:
– платежные системы;
– криптовалюты;
– микроплатежи;
– цифровые активы (имущество);
– цифровая идентификация;
– нотариальные службы;
– рекламации и аудиторские проверки;
– налоговая служба;
– системы голосования;
– управление историями болезней (медицина).
• При анализе конкретных блокчейн-приложений или блокчейн-сервисов необходимо получить ответы на следующие вопросы:
– какой тип блокчейн-системы используется?
– выполнены ли требования к использованию блокчейн-системы?
– каков размер добавленной стоимости при использовании распределенной пиринговой системы?
– какова основная идея (замысел) данного приложения?
– какой бизнес-вариант используется?
– как реализована компенсация для партнеров за предоставление ресурсов рассматриваемой системе?
Глава 25
Подводим итоги и двигаемся дальше
Перспективные разработки, альтернативные варианты и будущее технологии блокчейна
Эта глава завершает наш курс изучения технологии блокчейна. После краткого описания областей и направлений дальнейших разработок и исследований здесь рассматриваются возможные достижения технологии блокчейна в современном обществе. В завершающей части главы приводятся некоторые замечания о возможных перспективах использования технологии блокчейна, а также отмечаются некоторые недостатки этой технологии, которые могут возникнуть в будущем.
//-- Метафора --//
В 1994 году один из ученых-исследователей в области информационных технологий описал программную систему, которую он начинал разрабатывать [42]:
• децентрализация: отсутствие централизованной авторизации и отсутствие единственного пункта критического сбоя;
• исключение дискриминации: каждый свободно выбирает свой способ подключения к системе;
• открытость: разработка системы будет полностью открытой для всеобщего обозрения с поощрением максимально возможного участия всех желающих и обеспечения возможности экспериментирования;
• универсальность: все компьютеры вовлечены в процесс обмена информацией друг с другом независимо от их аппаратных средств и места расположения;
• согласование: система и ее пользователи будут соответствовать стандартам, создающимся в полностью открытом для всех процессе, основанном на (распределенном) консенсусе (соглашении).
Этот список свойств выглядит как краткое описание технологии блокчейна. Но в 1994 году технология блокчейна еще не появилась. В действительности системой, обладающей перечисленными свойствами, был Интернет или, по крайней мере, общее представление Тима Бернерса-Ли (Tim Berners-Lee) о разрабатываемой им сети Интернет [3 - Тим Бернерс-Ли разрабатывал не Интернет (Интернет изначально был продуктом программы DARPA Пентагона), а World Wide Web в среде Интернета.].
В условиях непрерывного технического прогресса, возникновения интернет-коммерции, формирования и развития гигантских интернет-компаний в наши дни Интернет, возможно, имеет не так уж много общего с представлением Тима Бернерса-Ли об этой сети, сформированным в 1994 году. Тот факт, что технологии постоянно развиваются и результаты этого развития могут отличаться от начальных представлений их создателей, необходимо учитывать при прогнозировании будущего технологии блокчейна. В связи с этим путь развития Интернета можно рассматривать как обобщенный план будущего развития технологии блокчейна.
//-- Будущие направления разработок и альтернативные варианты --//
Блокчейн – это не статическая конструкция, остающаяся неизменной с момента своего появления на протяжении всего жизненного цикла. Технология блокчейна в том виде, в котором она описана в данной книге, представляет лишь уже существующую основу, но продолжает оставаться объектом исследований, усовершенствований и дальнейших разработок [4, 43]. Некоторые из них можно считать минимальными техническими усовершенствованиями, другие становятся концептуальными и даже коренными изменениями, которые могут привести к полному разделению подходов и их конкуренции в дальнейшем. Необходимо особо отметить следующие области усовершенствования и перспективных разработок, не претендуя на полноту этого списка:
• минимальные технические усовершенствования и вариации;
• улучшение масштабируемости;
• концептуальное развитие и альтернативные варианты.
Минимальные технические усовершенствования и вариации
Технология блокчейна использует широкий спектр концепций и принципов программной инженерии и информационных технологий, таких как хэш-функции, хэш-ссылки, структуры данных, хранилища данных, криптография, сетевые архитектуры, процесс обмена информацией между компьютерами и вычислительные головоломки. Каждая из этих концепций и технологий была и остается областью активных исследований. Например, существует большое разнообразие хэш-функций, структур данных, криптографических процедур, протоколов обмена информацией и вычислительных головоломок, которые могут быть использованы в блокчейн-системе. Поэтому можно создавать различные версии блокчейн-систем, просто применяя разнообразные хэш-функции, криптографические методы для создания ключей или вычислительные головоломки для подтверждения выполненной работы. Тем не менее все эти вариации оказывают лишь минимальное воздействие на технологию блокчейна, так как не изменяют основы ее функционирования и отличаются лишь некоторыми деталями реализации.
Улучшение масштабируемости
Основными областями исследований, которые сосредоточены на улучшении масштабируемости блокчейн-систем, являются эффективность использования сетевой среды, хранилищ, обработки данных, а также алгоритм согласования [10, 7].
Многообещающими в этой области являются сетевые системы Lightning Network (lightning channel) [29] и специализированные двунаправленные каналы платежей (payment channels) в этих системах [35], которые обеспечивают время выполнения транзакций, приемлемое с коммерческой точки зрения.
Концептуальное развитие
Концептуальное развитие предусматривает действительные усовершенствования методик функционирования блокчейн-систем, предлагаемых ими сервисов или способов взаимодействия пользователей с ними. Наиболее важными областями концептуального развития технологии блокчейна являются:
• права доступа;
• секретность;
• (распределенный) консенсус;
• транзакции;
• данные реестра;
• структура данных.
Права доступа
Ограничение прав чтения и/или записи в структуру данных блокчейна привело к разработке различных версий блокчейн-системы [2, 3]. Как было отмечено в главе 23, комбинации ограничений, касающихся прав чтения данных в блокчейн-системе, позволили создать закрытые и общедоступные системы, а ограничения прав записи данных определили существование блокчейн-систем с установлением прав доступа и без установления прав доступа. Появление четырех различных типов блокчейн-систем можно считать концептуальным усовершенствованием, поскольку это воздействует на основные характеристики блокчейна, такие как главная цель, распределенная сущность и архитектура.
Секретность
Открытость общедоступных блокчейн-систем уже обсуждалась ранее, и в контексте некоторых прикладных областей требуются дополнительные разработки в этом направлении из-за противоречий полной открытости с обеспечением необходимого уровня секретности системы. Закрытые блокчейн-системы ограничивают права на чтение, поэтому не могут больше применяться любыми пользователями для определения и подтверждения прав владения собственностью на основе хронологии данных транзакций. Другими методами обеспечения секретности являются оверлейные структуры над существующими блокчейн-системами [23] или распределенные вычислительные платформы, на которых особое внимание уделено обеспечению секретности [44]. Еще один подход – доказательство с нулевым разглашением (zero knowledge proof) – позволяет подтвердить корректность утверждений (например, утверждений о текущем владельце цифровой продукции) без предоставления полного доступа к данным, на основе которых создается такое доказательство [17]. Эта технология, примененная в блокчейн-системе, предоставляет любому пользователю возможность подтвердить утверждения, относящиеся к конкретным правам владения собственностью, без получения права чтения всех подробностей данных транзакций [25].
Распределенный консенсус
Ключевым элементом блокчейн-системы является методика выбора единственной версии хронологии транзакций посредством непрерывно продолжающейся процедуры, во время которой все узлы последовательно приходят к единому соглашению. Подтверждение выполненной работы, требующее вычислительных затрат, формирует основу критерия, используемого при выборе версии хронологии транзакций и для устранения конфликтов между ранее созданными конкурирующими версиями. Но выбор хронологии транзакций на основе объема выполненных вычислений при создании той или иной версии не удовлетворяет требованиям специалистов в области информационных технологий, так как огромные вычислительные мощности могут быть сконцентрированы в одной организации, которая может воздействовать на процедуру согласования в соответствии со своими намерениями.
Поэтому были разработаны широко обсуждаемые различные критерии и алгоритмы достижения консенсуса в распределенных системах. Доказательство (или подтверждение) доли владения (proof-of-stake) [16] и скорость доказательства доли владения (proof-of-stake velocity) [30] являются критериями согласования, которые могут успешно применяться для криптовалют, поскольку они связывают квоты для голосования с владением или оборотом той продукции, которая, собственно, управляется самой процедурой согласования. Совершенно независимыми друг от друга алгоритмами поиска консенсуса являются Paxos [19] и Raft [28]. Они были разработаны задолго до появления технологии блокчейна. Тем не менее практическое использование алгоритма Raft или Paxus на приемлемом уровне само по себе является трудной задачей и в данной книге не рассматривается. Главное затруднение применения альтернативных механизмов согласования состоит в том, что зачастую они концептуально более сложны, следовательно, более трудно найти формальное доказательство. Если в них обнаруживаются недостатки, присущие теории игр, то становится возможным повреждение блокчейн-системы, использующей эти алгоритмы, и как следствие такая блокчейн-система уже не вызывает никакого доверия.
Транзакции
Транзакции – это средства передачи прав владения собственностью от одной учетной записи в другую, кроме того, транзакции предназначены для описания и проверки права владения. Выясняется, что транзакции в действительности представляют собой небольшие самодостаточные контракты. Они содержат всю необходимую информацию для выполнения процедуры передачи прав владения. Такой взгляд на транзакции привел к разработке смартконтрактов (smart contract), выполняемых блокчейн-системой. Подобно данным транзакций, смарт-контракты являются машинно читаемыми описаниями волеизъявления сторон, участвующих в контракте. Но, в отличие от простых данных транзакций, смартконтрактам присуща большая гибкость в отношении объектов, субъектов, операций и условий, которые могут использоваться для описания требуемой процедуры передачи права владения. С технической точки зрения смарт-контракты представляют собой самодостаточные компьютерные программы, написанные на языке программирования, специально ориентированном на технологию блокчейна. Для адаптации смарт-контрактов технология блокчейна была усовершенствована: в блокчейн-системе появилась возможность выполнения программного кода. Это расширение преобразовало блокчейн из распределенной системы, в которой главное внимание было сосредоточено на хранении данных транзакций, в распределенную систему виртуальных машин, выполняющих смарт-контракты [6].
Выполнение программного кода открыло возможности для разработки полноценных программных приложений на основе технологии блокчейна вместо простого сопровождения данных транзакций. Но при обсуждении смарт-контрактов необходимо соблюдать осторожность – несмотря на то что изначально этот термин подразумевал контракт между противными сторонами (с юридической точки зрения), в настоящее время он используется для обозначения фрагмента программного кода, который управляется и выполняется в соответствующей блокчейн-системе. Тем не менее положение дел меняется: от профессии юриста, разрабатывающего контракты подобного рода, до изначальной идеи, основанной на методике Ricardian Contract [13].
Благодаря своей гибкости смарт-контракты могут использоваться для описания широкого диапазона контрактов реального мира, например по выплате ренты на регулярной основе, по страховым выплатам в случае повреждения имущества или в особо сложных случаях. Таким образом, смарт-контракт становится наиболее важным и перспективным направлением разработки в области технологии блокчейна на ближайшие несколько лет.
Данные реестра
Исходная блокчейн-система, описанная в предыдущих главах, основное внимание уделяет сохранению целостности неизменяемого хранилища с возможностью только добавления данных, которое, как и многие другие варианты, может быть использовано для обслуживания полной хронологии данных транзакций. Но в главе 9 было отмечено, что право владения собственностью может управляться на основе данных транзакций и данных реестра. Первый подход выглядит более подходящим для управления простыми данными, тогда как второй подход доказал свою полезность в контексте смарт-контрактов, когда вся система в целом часто рассматривается как набор состояний, которые могут содержать произвольную информацию, например балансы счетов, ставки, страховые контракты, репутационные характеристики или данные, представляющие объекты физического мира [39]. Таким образом, состояние всей системы в целом сохраняется как данные реестра и преобразуется посредством выполнения смартконтрактов, которые хранятся отдельно в неизменяемом хранилище с возможностью только добавления данных.
Структура данных
Структура данных блокчейна не является прямолинейной цепочкой блоков, в действительности это древовидная структура данных, ветви которой представляют конфликтующие версии хронологии данных транзакций. Главная задача алгоритма блокчейна – позволить узлам распределенной системы согласованно выбрать одну из ветвей как самую корректную цепочку. Другой подход к организации хранения данных транзакций состоит в использовании ориентированного ациклического графа блоков вместо древовидной структуры данных. Можно представить ориентированный ациклический граф блоков как древовидную структуру данных блокчейна, ветви которой впоследствии объединяются. Применение такого ациклического графа для хранения хронологии транзакций создает хорошие перспективы для улучшения производительности, определения и подтверждения права владения собственностью и достижения консенсуса между членами блокчейн-системы [21].
//-- Основные перспективы технологии блокчейна --//
Общеизвестно, что людям свойственна переоценка краткосрочных эффектов от внедрения той или иной технологии, в то же время игнорируется ее долгосрочное воздействие. Развитие Интернета и его воздействие на общество не только подтверждают этот факт, но также позволяют сделать вывод о том, что очень трудно предварительно оценить долгосрочные эффекты технических инноваций. Тем не менее перечисленные ниже аспекты вполне могут стать долговременными эффектами от применения технологии блокчейна:
• устранение посредников;
• автоматизация;
• стандартизация;
• ускорение процессов;
• увеличение скорости обработки данных;
• снижение стоимости;
• смещение доверительных отношений в область технических протоколов и технологии;
• формирование доверительного отношения к предметам потребления (товарам);
• более полная информированность о технологии.
Устранение посредников
Технология блокчейна не отменяет роли посредников, а сама утверждает себя в роли цифрового посредника, строго соблюдающего определенные правила. Замена одного посредника на другого – возможно, не такой уж важный факт, но замена организации, состоящей из людей, которые полагаются на доверительные отношения со своими клиентами, на программную систему, в которой изначально заложены доверительные отношения, – это огромное достижение. Более того, замена цепочки посредников на одну систему, которая обеспечивает прямое взаимодействие равноправных партнеров и защищает их, несомненно, является огромным достижением. Таким образом, устранение посредников представляет собой очевидное достижение технологии блокчейна, воздействие которого, возможно, сохранится и в будущем.
Автоматизация
Чтобы исполнить свою роль цифрового посредника, блокчейн-система использует автоматизацию. Чем шире применяется технология блокчейна, тем больше ручных операций, ранее выполняемых традиционными посредниками, будет заменено автоматизированными взаимодействиями между членами системы. Следовательно, это достижение технологии блокчейна обладает потенциалом, способствующим автоматизации.
Стандартизация
Автоматизированная обработка транзакций, обеспечиваемая блокчейн-системой, основана на существовании определенных правил и стандартов. Чем шире применяется технология блокчейна, тем больше транзакций и взаимодействий между сторонами, заключающими контракты, будет стандартизировано. Таким образом, поддержка стандартизации взаимодействий между партнерами может стать еще одним достижением технологии блокчейна, имеющим долгосрочную перспективу.
Ускорение процессов
Благодаря развитию стандартизации и автоматизации бизнеспроцессы становятся более прозрачными и быстрыми. Многие организации уже исследовали и проанализировали свои бизнеспроцессы как побочный эффект подготовки к переходу на технологию блокчейна. Таким образом, исследования существующих бизнес-процессов, их перепроектирование и ускорение могут стать очередным достижением технологии блокчейна, возможно, сохраняющимся и в будущем.
Увеличение скорости обработки данных
Устранение посредников, стандартизация, ускорение бизнеспроцессов и автоматизация способствуют существенному увеличению скорости обработки данных во внутрисистемных процессах. Можно ожидать, что при более широком применении технологии блокчейна все больше транзакций и взаимодействий между сторонами, заключившими контракт, будет выполняться своевременно. Ускорение процессов, которые когда-то требовали выполнения вручную задач, отнимающих много времени, становится еще одним достижением блокчейна с долгосрочной перспективой.
Снижение стоимости
Автоматизация, устранение посредников и стандартизация часто приводят к снижению стоимости (сокращению накладных расходов). История показала, что эффекты снижения стоимости от внедрения автоматизации оказали огромное воздействие и буквально изменили облик многих отраслей промышленности, что стало причиной массовой доступности разнообразной продукции и товаров более широкому кругу людей. Но эффект снижения стоимости от внедрения автоматизации не ограничивается производством автомобилей, телевизоров, мобильных телефонов и одежды. Эффект снижения стоимости при устранении посредников, возможно, является наиболее значимым долговременным вкладом технологии блокчейна с экономической точки зрения.
Смещение доверительных отношений в область технических протоколов и технологии
Технология блокчейна заменяет доверительные отношения между людьми или организациями на доверительные отношения, основанные на точных правилах логики компьютерных процедур проверки и на мощных возможностях распределенного консенсуса. Это может изменить наше восприятие доверительных отношений и надежности как для отдельного человека, так и для всего общества в целом. Таким образом, смещение доверительных отношений в область протоколов, обеспечивающих безопасность, и достижения консенсуса на основе вычислений можно считать одним из наиболее важных долговременных эффектов технологии блокчейна с социологической точки зрения.
Формирование доверительного отношения к предметам потребления (товарам)
Автоматизация и стандартизация не только сократили время производства и стоимость продукции во многих отраслях промышленности, но и сделали многие потребительские товары, в прошлом достаточно дорогие, доступными огромному количеству людей. Вспомним, например, цены на карманные калькуляторы, персональные компьютеры и мобильные телефоны 30 лет назад. В настоящее время калькуляторы практически не пользуются спросом как рыночный товар, а настольные компьютеры, обладающие значительно большей мощностью, чем компьютеры, работавшие в первых космических программах НАСА, стали вполне доступными даже для людей и организаций с небольшими бюджетами. Это стало возможным в основном благодаря автоматизации и стандартизации производства компьютерных микросхем и полупроводников. Можно ожидать, что доверительное отношение и безопасное формирование, выполнение и урегулирование бизнес-взаимодействий станут такими же дешевыми и повсеместно доступными, как в свое время стали карманные калькуляторы, вследствие автоматизации и стандартизации, вводимых технологией блокчейна. Возможно, это самое заметное долгосрочное воздействие технологии блокчейна на тех, кто ежедневно должен заниматься формированием, выполнением и урегулированием бизнес-взаимодействий в ходе своей обычной деятельности.
Более полная информированность о технологии
Блокчейн-система – это весьма сложная техническая конструкция, которая решает техническую задачу высокого уровня по достижению и сохранению целостности в распределенных пиринговых системах, используя для этого неизменяемые структуры данных и алгоритм (распределенного) согласования. Этот аспект не привлекает особого внимания со стороны бизнес-сообщества. Тем не менее технология блокчейна уже привлекла и продолжает привлекать внимание многих групп людей из различных сфер деятельности. Растущий интерес к этой технологии и более полная осведомленность о ее роли в нашей жизни можно обозначить как побочный эффект использования блокчейна, но разработки в этой области одобряются, поскольку достигнутые успехи во многих отраслях промышленности, а также благосостояние нашего общества в высшей степени зависят от степени овладения технологическими достижениями.
//-- Вероятные недостатки --//
Помимо положительных эффектов и достижений, технология блокчейна также может стать источником нежелательных побочных эффектов или даже негативных последствий ее применения. К наиболее важным недостаткам можно причислить следующие:
• недостаточная закрытость (секретность);
• отсутствие личной ответственности;
• потеря рабочих мест;
• возобновление посредничества.
Недостаточная закрытость (секретность)
Общедоступные блокчейн-системы не скрывают содержащихся в них данных. Напротив, каждый может прочитать полную хронологию транзакций. Такой уровень прозрачности вызывает страх у тех, кто хочет защитить свою личную жизнь. Подобные опасения понятны, если принять во внимание тот уровень, на котором личные данные собираются и используются крупными корпорациями и агентствами по сбору информации (в том числе и спецслужбами). Но этот недостаток может способствовать разработке и распространению закрытых блокчейн-систем или использованию более надежных протоколов защиты. Кроме того, при этом может родиться идея о том, что люди, владеющие правами на собственные личные данные, могли бы передавать кому-либо право доступа к ним или их использования. В результате посредники, такие как ныне существующие провайдеры механизмов поиска и платформы медийных соцсетей, могут лишиться благосклонного отношения пользователей и, соответственно, доли на рынке IT-услуг.
Отсутствие личной ответственности
Отсутствие личной ответственности часто рассматривается как следствие устранения посредников. Посредники не только объединяют различные стороны, участвующие в заключении контракта, но и могут обеспечить определенные гарантии. Они занимаются урегулированием разногласий в случаях, когда транзакции выполняются не так, как было предусмотрено, они также принимают на себя ответственность за свои действия и действия участников контракта. Смещение доверительных отношений между людьми и организациями в область технических протоколов и технологий может привести к исчезновению этой сферы услуг и отсутствию личной ответственности при формировании, выполнении и урегулировании взаимодействий по контракту. Вопрос о приемлемости блокчейн-систем с юридической точки зрения остается открытым, поэтому люди сомневаются, сможет ли блокчейн-система как полностью автоматизированный управляемый определенным протоколом механизм выполнения транзакций нести ответственность за свои действия точно таким же образом, как это делают более привычные посредники-люди. Но этот недостаток может способствовать появлению законодательных инициатив, помогающих ответить на поставленные вопросы с точки зрения юридического статуса технологии блокчейна.
Потеря рабочих мест
Автоматизация и стандартизация не только изменили процесс производства и стоимость продукции, но и привели к конфликтам на рынке труда. Многие деятели финансовой сферы, такие как банки, брокеры, опекуны, агентства, занимающиеся денежными переводами, и нотариальные конторы, неотделимы от своей посреднической роли. Много рабочих мест в этих учреждениях может оказаться под угрозой сокращения, если огромная доля финансовых транзакций будет выполняться автоматизированным способом с помощью блокчейн-систем.
Возобновление посредничества
Сложность и неопределенный юридический статус могут стать препятствием для использования блокчейн-систем как отдельными людьми, так и организациями. Блокчейн может стать причиной возникновения эффекта, противодействующего устранению посредников. Вместо применения блокчейн-системы для прямого взаимодействия между сторонами, заключающими контракт, люди могут предпочесть услуги посредников, которые сами используют блокчейн-системы. Это может привести к возрождению сферы посредничества, хотя предполагалось, что она будет полностью заменена блокчейн-системами. Такой эффект может существенно замедлить внедрение технологии блокчейна и обесценить некоторые из основных достижений этой технологии.
//-- Перспективы на будущее --//
Прогнозировать будущее сложно, особенно будущее новой технологии, которая активно развивается и разрабатывается. Тем не менее можно назвать некоторые факторы, определяющие наиболее вероятный сценарий дальнейшего развития. Вероятнее всего, использование общедоступных блокчейн-систем без назначения прав доступа в коммерческих целях будет весьма ограниченным из-за плохой масштабируемости и недостаточного обеспечения секретности. С другой стороны, закрытые блокчейн-системы с назначением прав доступа получают основную долю внимания со стороны бизнеса. В итоге можно предположить следующие направления развития в будущем:
• небольшие проекты энтузиастов;
• крупномасштабное коммерческое применение;
• государственные (и муниципальные) проекты.
Небольшие проекты энтузиастов
Небольшие проекты энтузиастов могут использовать общедоступные блокчейн-системы без назначения прав доступа. Вероятнее всего, такие проекты будут создаваться и поддерживаться убежденными сторонниками технологии блокчейна и борцами за «изначальную чистоту» блокчейна, ратующими за полную открытость и полностью распределенную сущность системы. Группы поддержки этих проектов могут воспринимать это как политическую акцию или определенный вклад в развитие альтернативных программных систем, которые освобождают их от всех видов государственного или коммерческого управления и координации. Криптовалюты как альтернативные денежные средства, позволяющие получить независимость от государственного регулирования, а также как системы, объявляющие о своей независимости, или системы управления процедурами определения подлинности личности независимо от государственных удостоверений личности и прочих документов могут стать основными вариантами использования блокчейна в этом контексте.
Крупномасштабное коммерческое применение
Предполагается, что крупномасштабные коммерческие проекты будут использовать закрытые блокчейн-системы с назначением прав доступа. Вероятнее всего, такие проекты будут создаваться и развиваться консорциумами ведущих компаний в конкретных отраслях промышленности. Получение выгоды от стандартизации, автоматизации, ускорения бизнес-процессов и снижения стоимости станут основными причинами для поддержки этих проектов. Подобные проекты также могут быть основаны на идее поиска компромисса, позволяющего участникам воспользоваться преимуществами технологии блокчейна, не отказываясь полностью от услуг посредников. Возможно, каждый крупный сектор, такой как банковское дело, финансовые биржи, страхование имущества, медицинское страхование, платежные системы и розничная торговля, будет развивать и предлагать собственное специализированное для данного сектора решение на основе технологии блокчейна.
Государственные (и муниципальные) проекты
Предполагается применение технологии блокчейна в государственных проектах для налоговых служб, следовательно, эти проекты будут свободны от большинства коммерческих ограничений, препятствующих внедрению блокчейна в частном секторе. Вероятнее всего, такие проекты будут создаваться и развиваться как составная часть инициатив по формированию электронной администрации и управления, ориентированных на перевод в цифровую форму процессов, ранее выполнявшихся вручную, или на замену старой инфраструктуры. Сбор налогов, контроль, цифровое удостоверение личности, управление регистрационными записями, финансовая политика могут получить выгоду от использования функциональных свойств блокчейн-систем. Тем не менее нерешенные юридические вопросы, существующие средства защиты данных и законы о защите личной жизни могут существенно ограничить полезный эффект от применения технологии блокчейна в государственном (и муниципальном) управлении.
//-- Подводим итоги --//
Эта глава завершает наш вводный курс изучения технологии блокчейна. После подробного описания областей исследования и направлений дальнейшего развития технологии блокчейна в этой главе были отмечены некоторые альтернативные варианты, а также рассмотрены наиболее вероятные долговременные перспективы, недостатки и области использования этой технологии в будущем. История развития Интернета показала нам, что внедрение и применение новой технологии может иметь не только непредвиденные и непредсказуемые последствия, но и давать многообещающий положительный эффект. Каким бы ни было будущее технологии блокчейна, можно предположить, что мы будем не только пассивно наблюдать, но и активно участвовать в этих захватывающих и интересных технологических преобразованиях, обладающих потенциалом для самых значимых изменений в нашей жизни со времени создания Интернета.
//-- Резюме --//
• Технология блокчейна всегда была и продолжает оставаться объектом исследований, усовершенствований и дальнейших разработок, таких как варианты реализации, улучшение эффективности и масштабируемости, а также концептуальные усовершенствования.
• Смарт-контракты, доказательства с нулевым разглашением и альтернативные способы достижения распределенного консенсуса являются основными областями концептуальных усовершенствований технологии блокчейна.
• Помимо технических достоинств, технологию блокчейна можно заслуженно признать обладательницей следующих достижений, имеющих хорошую долгосрочную перспективу:
– устранение посредников;
– автоматизация;
– стандартизация;
– ускорение процессов;
– увеличение скорости обработки данных;
– снижение стоимости;
– смещение доверительных отношений в область технических протоколов и технологии;
– формирование доверительного отношения к предметам потребления (товарам);
– более полная информированность о технологии.
• Вероятные недостатки технологии блокчейна:
– недостаточная закрытость (секретность);
– отсутствие личной ответственности;
– потеря рабочих мест;
– возобновление посредничества.
• Предположительные направления развития технологии блокчейна в будущем:
– небольшие проекты энтузиастов;
– крупномасштабное коммерческое применение;
– государственные (и муниципальные) проекты.
Список литературы
1. Back A. Hashcash – a denial of service counter-measure. 2002. http://www.hashcash.org/papers/hashcash.pdf.
2. BitFury Group. Public versus private blockchains. Part 1: Permissioned blockchains. White paper, 2015. http://bitfury.com/content/5-white-papers-research/public-vs-private-pt1-1.pdf.
3. BitFury Group. Public versus private blockchains. Part 2: Permissioned blockchains. White paper, 2015. http://bitfury.com/content/5-white-papers-research/public-vs-private-pt2-1.pdf.
4. Bonneau J., Miller A., Clark J., Narayanan A., Kroll J. A., Felten E. W. Research perspectives and challenges for Bitcoin and cryptocurrencies. In IEEE Symposium on Security and Privacy. IEEE, 2015, 104-121.
5. Boritz J. E. IS practitioners’ views on core concepts of information integrity. International Journal of Accounting Information Systems 6.4 (2005): 260-279.
6. Buterin V. A next-generation smart contract and decentralized application platform. White paper. 2014.
7. Buterin V., Coleman J., Wampler-Doty M. Notes on scalable blockchain protocols (verson 0.3). 2015. https://pdfs.semanticscholar.org/ae5b/c3aaf0e02a42f4cd41916072c87db0e04ac6.pdf?_ga=1.234210142.1100460187.1484935336.
8. Chung L., et al. Non-functional requirements in software engineering. Vol. 5. New York: Springer Science & Business Media, 2012.
9. Cormen T. H. Introduction to algorithms (3 -------
| Библиотека iknigi.net
|-------
|
-------
ed.). Cambridge: MIT Press, 2009.
10. Croman K., et al. On scaling decentralized blockchains. In Proceedings of the 3 -------
| Библиотека iknigi.net
|-------
|
-------
workshop on Bitcoin and Blockchain Research. 2016. https://www.researchgate.net/publication/292782219_On_Scaling_Decentralized_Blockchains_A_Position_Paper.
11. Eberspacher J., Schollmeier R. First and second generation of peer-to-peer systems. In Peer-to-peer systems and applications. Berlin Heidelberg: Springer Verlag, 2005: 35-56.
12. Foroglou G., Tsilidou A.-L. Further applications of the blockchain.
2015. Paper presented at the Columbia University PhD in Sustainable Development 10 Year Anniversary Conference, February 28, 2014.
13. Grigg I. The Ricardian contract. 2004. In Proceedings of the 1st IEEE International Workshop on Electronic Contracting. IEEE, 2004: 25-31.
14. Hassanien A. E., Emary E. Swarm intelligence: Principles, advances, and applications. Boca Raton, FL: CRC Press, 2016.
15. Hong S.-H. The effect of Napster on recorded music sales: evidence from the consumer expenditure survey. Stanford Institute for Economic Policy Research Working Paper (2004): 3-18.
16. King S., Nadal S. Ppcoin: Peer-to-peer crypto-currency with proof-of-stake. Self-published paper. August 19, 2012.
17. Krantz S. G. Zero knowledge proofs. July 2007. AIM Preprint Series, Volume 10-46.
18. Kroll J. A., Davey I. C., Felten E. W. The economics of Bitcoin mining, or Bitcoin in the presence of adversaries. Proceedings of WEIS. 2013.
19. Lamport L. The part-time parliament. ACM Transactions on Computer Systems (TOCS) 16.2 (1998): 133-169.
20. Lamport L., Shostak R., Pease M. The Byzantine generals problem. ACM Transactions on Programming Languages and Systems (TOPLAS) 4.3 (1982): 382-401
21. Lewenberg Y., Sompolinsky Y., Zohar A. Inclusive block chain protocols. In International Conference on Financial Cryptography and Data Security. Berlin Heidelberg: Springer, 2015.
22. Leyshon A. Scary monsters? Software formats, peer-to-peer networks, and the spectre of the gift. Environment and Planning D: Society and Space 21.5 (2003): 533-558.
23. Meiklejohn S., Orlandi C. Privacy-enhancing overlays in bitcoin. In International Conference on Financial Cryptography and Data Security. Berlin Heidelberg: Springer, 2015.
24. Merkle R. C. Protocols for Public Key Cryptosystems. IEEE Symposium on Security and Privacy 122 (1980).
25. Miers I., et al. Zerocoin: Anonymous distributed e-cash from bitcoin. In Proceedings of the IEEE Symposium on Security and Privacy. 2013. Washington, DC. May 19-22, 2013. Pp. 397-411.
26. Nakamoto S. Bitcoin: A peer-to-peer electronic cash system. 2008. https://bitcoin.org/bitcoin.pdf.
27. Okupski K. Bitcoin developer reference. Working paper. 2014.
28. Ongaro D., Ousterhout J. In search of an understandable consensus algorithm. In Proceeding of 2014 USENIX Annual Technical Conference (USENIX ATC 14). 2014.
29. Poon J., Dryja T. The bitcoin lightning network: Scalable off-chain instant payments. Technical Report (draft). 2015. https://lightning. network.
30. Ren L. Proof of stake velocity: Building the social currency of the digital age. Self-published white paper. 2014.
31. Rogaway Ph., Shrimpton T. Cryptographic hash-function basics: definitions, implications, and separations for preimage resistance, second-preimage resistance, and collision resistance. In Roy B., Meier W. (eds.). Fast software encryption. FSE 2004. Lecture Notes in Computer Science, vol. 3017. International Workshop on Fast Software Encryption. Berlin Heidelberg: Springer, 2004.
32. Tanenbaum A. S., Van Steen M. Distributed systems: principles and paradigms (2 -------
| Библиотека iknigi.net
|-------
|
-------
ed.). Upper Saddle River, NJ: Pearson Prentice Hall, 2007.
33. Tanenbaum A. S., Wetherall D. J. Computer networks (5 -------
| Библиотека iknigi.net
|-------
|
-------
ed.). Upper Saddle River, NJ: Prentice Hall, 2010.
34. Taylor M. B. Bitcoin and the age of bespoke silicon. In Proceedings of the 2013 International Conference on Compilers, Architectures and Synthesis for Embedded Systems. Montreal: IEEE Press, 2013.
35. Tremback J., Hess Z. Universal payment channels. 2015. http://altheamesh.com/documents/universal-payment-channels.pdf.
36. Tsudik G. Message authentication with one-way hash functions. ACM SIGCOMM Computer Communication Review 22.5 (1992): 29-38.
37. Van Tilborg H., Jajodia S., eds. Encyclopedia of cryptography and security. New York: Springer Science & Business Media, 2014.
38. Weisstein E. W. Hash function. From MathWorld: http://mathworld.wolfram.com/HashFunction.html.
39. Wood G. Ethereum: A secure decentralized generalized transaction ledger. 2014. http://gavwood.com/paper.pdf.
40. World Economic Forum. The future of financial infrastructure. – An ambitious look at how blockchain can reshape financial services. An Industry Project of the Financial Services Community,
2016.
41. World Economic Forum. The future of financial services. – How disruptive innovations are reshaping the way financial services are structured, provisioned and consumed. An Industry Project of the Financial Services Community, 2015.
42. World Wide Web Foundation. History of the Web. 2016. http://web-foundation.org/about/vision/history-of-the-web/.
43. Yli-Huumo J., et al. Where is current research on blockchain technology? – A systematic review. PloS One 11.10 (2016), e0163477: doi:10.1371/journal.pone.0163477.
44. Zyskind G., Nathan O., Pentland A. Enigma: Decentralized computation platform with guaranteed privacy. 2015. arXiv preprint arXiv:1506.03471.