Блокчейн - Краткое руководство

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

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

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

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

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

Рассмотрим ситуацию, показанную на изображении -

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

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

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

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

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

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

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

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

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

Биткойн был введен в этот мир Сатоши Накамото через исследовательский документ под названием Биткойн: одноранговая электронная денежная система в 2008 году.

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

Только представьте себе, в этом мире социальных сетей, когда на карту поставлена ​​конфиденциальность каждого человека, мир не может так далеко отследить, кто такой Сатоши? Фактически, мы не знаем, является ли Сатоши отдельным лицом или группой людей. Поиск в Google также показал, что биткойны, которые держит Сатоши Накамото, стоят около 19,4 миллиарда долларов - эти деньги теперь остаются невостребованными в системе Биткойн. Итак, что такое биткойн - давайте посмотрим!

Что такое биткойн?

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

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

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

Эта базовая архитектура является Blockchainи это то, о чем этот учебник. Чтобы понять архитектуру блокчейна, вам необходимо понять несколько ключевых функций, на которых она основана. Итак, давайте начнем с PKI - криптографии с открытым ключом.

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

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

PKI выполняет две функции - аутентификацию и конфиденциальность сообщений с помощью механизма шифрования / дешифрования. Теперь я объясню обе эти функции -

Аутентификация

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

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

Теперь Боб говорит, что отправляет Лизе 10 долларов. Поэтому он создает сообщение (текстовое сообщение), содержащее открытый ключ Боба (отправителя), открытый ключ Лизы (получателя) и сумму (10 долларов США).

В сообщение также добавляется цель этого перевода, такая как «Я хочу купить у вас тыкву». Теперь все сообщение подписано с использованием закрытого ключа Боба. Когда Лиза получит это сообщение, она будет использовать алгоритм проверки подписи PKI и открытого ключа Боба, чтобы убедиться, что сообщение действительно исходит от Боба. Как работает PKI, выходит за рамки этого руководства. Заинтересованный читатель может перейти на этот сайт для более подробного обсуждения PKI. Это устанавливает подлинность отправителя сообщения. Теперь давайте посмотрим на конфиденциальность сообщений.

Конфиденциальность сообщений

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

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

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

Увидев обе функции, аутентификацию и конфиденциальность сообщений, подразумеваемые PKI, давайте продвинемся вперед и посмотрим, как Биткойн использует PKI для защиты публичной книги, о которой я упоминал в главе «Что такое Биткойн?».

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

Одна из наиболее важных функций PKI - функция хеширования. Хеш-функция отображает данные любого произвольного размера на данные фиксированного размера. Биткойн использует хеш-функцию SHA-256, которая производит хэш (вывод) размером 256 бит (32 байта). Это показано на изображении -

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

Убедившись в важности хеширования, давайте перейдем к другой концепции Биткойна - майнингу.

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

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

Горный процесс

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

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

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

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

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

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

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

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

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

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

Теперь я резюмирую шаги, описанные выше; вот что происходит в сети -

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

  • В течение определенного периода времени такие транзакции могут совершать множество отправителей (покупателей) и получателей (продавцов).

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

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

  • Теперь узел работает над поиском доказательства работы для своего собранного блока.

  • Когда узел находит доказательство работы, он транслирует собранный блок в сеть.

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

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

  • Точно так же блокчейн продолжает расти.

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

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

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

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

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

Проблема дискового пространства в узле легко преодолевается, потому что все транзакции в блоке хешируются в дереве Меркла, как показано на изображении -

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

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

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

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

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

Как мы видели, сеть Биткойн содержит несколько майнеров. Возможно, что два разных майнера решат Proof-of-Work одновременно и, таким образом, добавят свои блоки к последнему известному блоку в цепочке. Это показано на изображении ниже -

Теперь у нас есть две ветви после блока 3. Обе ветви действительны. Таким образом, следующий добытый блок может быть добавлен в любую из веток. Предположим, майнер добавляет новый добытый блок в блок 104-A, ветвь, содержащая блок 104-A, будет длиннее, чем ветвь, содержащая блок 104-B. Это показано на изображении ниже -

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

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

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

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

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

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

Я рассмотрю три различных типа возможных атак в системе Биткойн:

Расовая атака

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

Атака Финни

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

Атака 51%

В этом виде атаки мы делаем непрактичное предположение, что кто-то владеет 51% вычислительной мощности сети. Злоумышленник в этом виде атаки добывает частный блокчейн, на который он дважды тратит монеты.

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

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

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

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

  • Оригинальная статья Сатоши - Биткойн: одноранговая электронная денежная система

  • Официальный сайт - Bitcoin.org