Прежде чем рассматривать блокчейн, стоит вспомнить о том, что существуют два типа архитектуры систем: централизованные и распределенные.
 
Если есть какой либо компонент, который может остановить работу всей системы, то такая система не является распределенной.
В общем смысле блокчейн можно воспринимать как распределенные пиринговые системы, использующие технологию блокчейна.
Основная задача блокчейна – создание и поддержание целостности в распределенных системах.
 
Сам термин блокчейн можно воспринимать как сочетание структуры данных блокчейна, алгоритма блокчейна, а также криптографических технологий и технологий обеспечения безопасности.
Структура данных блокчейна представляет собой данные, которые объединены в блоки (block). Блоки объединяются друг с другом, образуя цепочку блоков. Отсюда и название блокчейн (block chain) – цепочка блоков.

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

 

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

 

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

 

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

 

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

 

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

 

Хеш-значения также используются для создания головоломок. Для головоломки придумывают ограничения (или еще можно назвать уровень сложности), налагаемые на хеш-значение.
Представим, что у нас есть исходные данные, которые не должны меняться. Мы можем воспользоваться одноразовым паролем (его называют nonce), который мы будем объединять с нашими данными.
Головоломка может выглядеть следующим образом: надо подобрать такое число nonce, чтобы комбинированное хеш-значение (число nonce + хеш-ссылка) содержало три нуля в начале значения.
Мы начинаем процедуру с чисел 0, 1, 2, 3, … и т.д. до тех пор, пока не сможем подобрать требуемое хеш-значение.
Далее, когда это значение подобрано, оно добавляется в операцию и каждый желающий может убедиться, что головоломка решена. Так как хеш функция является детерминированной, подставив найденный код можно очень быстро убедиться в том, что полученное хеш-значение удовлетворяет условию.
Количество впереди идущих нулей в головоломке для хеш-значения называется уровнем сложности. Чем выше уровень, тем сложнее решать головоломку и тем больше вычислительных ресурсов требуется применить для нахождения одноразового пароля.

 

Таким образом хеш значения используются для:
– сравнения данных
– выявления фактов изменения данных
– для создания задач, связанных с большими объемами вычислений

 

Когда решается хеш-головоломка, создается новый блок, и этот факт анонсируется другим узлам сети.
Операция добавления нового блока в структуру данных блокчейна посредством решения хеш-головоломки называется майнингом (mining/block mining).
Структура данных блокчейна позволяет сразу обнаружить изменение в данных благодаря чувствительности хеш-ссылок. Изменив один блок, придется изменить и все последующие блоки вплоть до головы цепочки. А изменение каждого блока является дорогостоящей операцией. Таким образом обеспечивается защита данных. Можно сказать, что сама структура является неизменяемой и позволяет проследить всю хронологию изменений.

 

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

 

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

 

Новый блок, который был добавлен узлом, тут же рассылается остальным узлам для проверки. Если блок был признан корректным, то узел, добавивший этот блок, получает поощрение. Если блок признается некорректным, то он отбрасывается. Этот этап является своего рода конкуренцией между узлами по качеству и скорости создания блоков.
Общая процедура выглядит следующим образом:
  1. Новые блоки передаются узлам в стиле протокола gossip
  2. Каждый узел получает новые данные транзакций и выбирает необходимые для обработки
  3. Узел обрабатывает новые блоки с наивысшим приоритетом
  4. Узел проверяет транзакции на формальную и семантическую корректность
  5. Проверенные корректные данные объединяются в дерево Меркле, начинается процесс создания нового блока при помощи решения хеш-головоломки
  6. Как только головоломка будет решена, узел рассылает остальным узлам созданный блок
  7. Каждый узел обрабатывает новые блоки, проверяет решение хеш-головоломки, а также данные транзакции
  8. Если данные корректны, то такой блок добавляется в локальную копию блокчейна
  9. Если блок некорректный, он отбрасывается, берется следующий блок
  10. Если блок корректный, то узлы удаляют данные транзакции в этом блоке из своей очереди задач и приступают к созданию нового блока
  11. Если блок, ранее добавленный в блокчейн, позднее будет признан некорректным, то этот блок и последующие блоки удаляются из блокчейна и вносятся в очередь для повторной проверки
  12. Узел, чей блок принят, получает вознаграждения за все транзакции в этом блоке
  13. Если блок удаляется из блокчейна, то с узла, добавившего блок, снимаются вознаграждения за этот блок

 

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

 

Критерий самой длинной цепочки.

Критерий самой длинной цепочки говорит, что структура данных блокчейна, которая состоит из наибольшего количества блоков, представляет максимальный суммарный объем вычислений.
Создание нового блока – это всегда состязание между всеми узлами. Как только узел решает хеш-головоломку, он рассылает новый блок всем узлам. Однако передача по сети не является мгновенным процессом. Поэтому во время этой передачи другой узел, не получивший еще новый блок, так же может решить хеш-головоломку и отправить новый блок остальным узлам. В результате в структуре данных блокчейна появятся две ветви.
Часть узлов будет пытаться создать новый блок (назовем его блок 3), который ссылается на блок 1. Другая часть узлов будет пытаться создать новый блок (назовем его блок 4), который ссылается на блок 2.
Если от блока 3 создается новый блок (блок 5), то согласно правилу будет удалена более короткая цепочка.
Таким образом в конечном итоге структура придет в согласованное состояние.

 

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

 

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

 

Дополнительная литература:

Related Post

Leave a Reply

Leave a Reply

Your email address will not be published. Required fields are marked *