Blockchain
Прежде чем рассматривать блокчейн, стоит вспомнить о том, что существуют два типа архитектуры систем: централизованные и распределенные.
Если есть какой-либо компонент, который может остановить работу всей системы, то такая система не является распределенной.
В общем смысле блокчейн можно воспринимать как распределённые пиринговые системы, использующие технологию блокчейна. Основная задача блокчейна — создание и поддержание целостности в распределённых системах.
Сам термин блокчейн можно воспринимать как сочетание структуры данных блокчейна, алгоритма блокчейна, а также криптографических технологий и технологий обеспечения безопасности. Структура данных блокчейна представляет собой данные, которые объединены в блоки (block). Блоки объединяются друг с другом, образуя цепочку блоков — отсюда и название block chain.
Криптография в блокчейне
Так как криптография является неотъемлемой частью блокчейна, рассмотрим её подробнее.
Главная цель криптографии — защита данных от несанкционированного доступа. Для этой цели применяют шифрование данных. Есть две методики шифрования данных: симметричная и ассиметричная.
- Симметричная криптография — используется один ключ для зашифрования и расшифрования данных.
- Ассиметричная криптография — используется пара открытый–закрытый ключ. Зашифрование данных происходит одним ключом, а расшифрование — другим.
При зашифровании открытым ключом информацию может расшифровать только лицо, обладающее закрытым ключом. Хеш-значение видно всем, но получить доступ к содержимому может только тот, кому сообщение предназначено.
При зашифровании закрытым ключом сообщение адресуется всем адресатам, у кого есть открытый ключ. Таким образом можно проверить, что конкретное лицо действительно является автором сообщения.
В блокчейне используется ассиметричная криптография — при создании транзакций применяются цифровые подписи.
Цифровые подписи
Цифровые подписи являются аналогами рукописных подписей. Они позволяют произвести идентификацию автора и подтвердить его согласие с содержимым подписанного документа.
Процесс работает следующим образом:
- Создаётся хеш-значение данных транзакции.
- При помощи закрытого ключа это значение шифруется и добавляется в данные транзакции в качестве подписи.
- При проверке транзакции извлекается цифровая подпись, затем создаётся хеш-значение данных транзакции без учёта подписи.
- При помощи открытого ключа расшифровывается подпись, и полученное значение сравнивается с хеш-значением данных транзакции.
- Если два хеш-значения совпали — транзакция считается формально валидной.
Хеширование и дерево Меркле
Хеширование играет важную роль при выполнении вычислений. Хеш-значения называются хеш-ссылками.
Две хеш-ссылки объединяются в один узел и включаются в дерево — дерево Меркле. Эта структура удобна для объединения множества фрагментов данных, доступ к которым обеспечивается одновременно через одну хеш-ссылку. То же самое можно организовать при помощи цепочек на основе связных списков, однако в этом случае появляются ограничения, присущие операциям со связными списками.
Хеш-значения используются для:
- сравнения данных
- выявления фактов изменения данных
- создания задач, связанных с большими объёмами вычислений
Хеш-головоломки и майнинг
Хеш-значения также используются для создания головоломок. Для головоломки придумывают ограничения (уровень сложности), налагаемые на хеш-значение.
Представим, что у нас есть исходные данные, которые не должны меняться. Мы воспользуемся одноразовым паролем — nonce, который будем объединять с нашими данными. Головоломка может выглядеть следующим образом: надо подобрать такое число nonce, чтобы комбинированное хеш-значение содержало три нуля в начале.
Мы перебираем числа 0, 1, 2, 3, … и так далее, пока не подберём требуемое значение. Когда значение найдено, оно добавляется в операцию, и каждый желающий может убедиться, что головоломка решена. Количество нулей в начале хеш-значения называется уровнем сложности — чем он выше, тем больше вычислительных ресурсов требуется.
Операция добавления нового блока в структуру данных блокчейна посредством решения хеш-головоломки называется майнингом (mining / block mining).
Структура данных блокчейна позволяет сразу обнаружить изменение данных. Изменив один блок, придётся изменить и все последующие блоки — а это дорогостоящая операция. Таким образом обеспечивается защита данных, и структура позволяет проследить всю хронологию изменений.
Структура заголовка блока
Заголовок блока содержит, как минимум, следующие данные:
- хеш-ссылка на заголовок предыдущего блока
- корень дерева Меркле, содержащего данные транзакции
- уровень сложности хеш-головоломки
- время начала решения хеш-головоломки
- одноразовый случайный код, который решает данную хеш-головоломку
Распределённая пиринговая сеть
В полностью распределённой пиринговой системе нет центрального компонента, который бы распространял информацию всем узлам. Главная задача состоит в том, чтобы все узлы получали полную информацию обо всех транзакциях. При этом нет никаких гарантий, что сообщение дойдёт до адресата, сообщения могут быть потеряны, прийти более одного раза или в другом порядке.
Эти проблемы решаются следующими способами:
- Использование протокола в стиле gossip — узел, получая информацию, отправляет её своим партнёрам. При таком подходе каждый узел в итоге получит все данные, даже если некоторые сообщения были потеряны.
- В сообщениях используются криптографические хеш-ссылки, однозначно идентифицирующие сообщения — это позволяет исключать дубликаты.
- Данные транзакций содержат метки времени — это позволяет восстановить правильный порядок.
В любой момент времени узлы системы находятся в одной из двух фаз:
- исследование нового блока
- попытка стать новым узлом, создающим новый блок
Новый блок, добавленный узлом, сразу рассылается остальным узлам для проверки. Если блок признан корректным — узел получает поощрение. Если некорректным — блок отбрасывается.
Общая процедура добавления блока
- Новые блоки передаются узлам в стиле протокола gossip.
- Каждый узел получает новые данные транзакций и выбирает необходимые для обработки.
- Узел обрабатывает новые блоки с наивысшим приоритетом.
- Узел проверяет транзакции на формальную и семантическую корректность.
- Проверенные корректные данные объединяются в дерево Меркле, начинается процесс создания нового блока путём решения хеш-головоломки.
- Как только головоломка решена, узел рассылает созданный блок остальным узлам.
- Каждый узел проверяет решение хеш-головоломки и данные транзакции.
- Если данные корректны — блок добавляется в локальную копию блокчейна.
- Если блок некорректный — он отбрасывается, берётся следующий блок.
- Если блок корректный — узлы удаляют данные транзакции из очереди задач и приступают к созданию нового блока.
- Если блок, ранее добавленный в блокчейн, позднее признаётся некорректным — он и последующие блоки удаляются и вносятся в очередь для повторной проверки.
- Узел, чей блок принят, получает вознаграждения за все транзакции в этом блоке.
- Если блок удаляется из блокчейна — с узла снимаются вознаграждения за этот блок.
Алгоритм блокчейна и консенсус
Алгоритм блокчейн — это последовательность правил, которые регулируют способ обработки данных и добавления их в систему. В такой системе возникает вопрос о сохранении единой хронологии транзакций. Для решения этой задачи используются два варианта.
Критерий самой длинной цепочки
Структура данных блокчейна, которая состоит из наибольшего количества блоков, представляет максимальный суммарный объём вычислений.
Создание нового блока — это состязание между всеми узлами. Как только узел решает хеш-головоломку, он рассылает новый блок всем узлам. Однако передача по сети не является мгновенным процессом, поэтому во время передачи другой узел тоже может решить головоломку и отправить новый блок — в результате в структуре данных блокчейна появятся две ветви.
Если от одной из ветвей создаётся новый блок, согласно правилу будет удалена более короткая цепочка. Таким образом структура в конечном итоге придёт в согласованное состояние.
Критерий самой затратной цепочки
Уровень сложности при решении хеш-головоломки редко является константой — он определяется динамически, поэтому блоки по-разному оцениваются с точки зрения вычислительных затрат. Выбирается путь, являющийся самым затратным с точки зрения мощностей. Самая длинная цепочка при этом не обязательно будет самой затратной. Суммарный уровень сложности пути называется его весом.
Блокчейн-системы используют критерий самой затратной цепочки и практику вознаграждения как компенсацию за вклад участников в поддержку целостности системы.
Заключение
Блокчейн сейчас бурно развивается — появляется огромное количество проектов в совершенно разных сферах. Это абсолютно нормальная ситуация для новой технологии, которая оказалась востребованной.