Глава 2: Отказываемся от посредника
В предыдущей главе мы обсуждали, что Биткоин представляет собой одноранговую систему для передачи ценности. Прежде чем мы углубимся в то, как это работает, давайте сначала разберемся, как традиционный банк или платежная система отслеживает переводы и владение активами.
Банки — это просто реестры
Как работает цифровой платеж, осуществляемый вашим банком, PayPal или ApplePay? Очень просто: эти посредники действуют как общеизвестные реестры, отслеживающие счета и переводы.
Цель банка — хранить и защищать ваши депозиты. Но депозиты в наши дни, в основном, электронные, а не физические, как монеты или бумага. Таким образом, основная задача банка на сегодняшний день состоит в том, чтобы поддерживать и охранять базу данных счетов. Поскольку данные являются электронными, средства охраны также, в основном, электронные. Банки используют системы обнаружения вторжений в программное обеспечение, резервные копии для защиты от потери данных, ревизии, проводимые третьими лицами, чтобы убедиться, что их внутренние процессы не скомпрометированы, и страховку, на случай если что-то пойдет не так.
Вот как они работают. В этом примере мы будем говорить банк, но на самом деле будем иметь ввиду любую третью сторону, которая обрабатывает платежи. Мы начнем с реестра, который показывает, что Элис и Боб внесли деньги на счет.
Банковский реестр
1. Элис: Кредит за наличный депозит + 2 доллара
2. Боб: Кредит за наличный депозит + 10 долларов
Когда Элис хочет отправить 2 доллара Бобу, она звонит в свой банк или использует веб- или мобильный кошелек, предоставленный ее банком, аутентифицирует себя перед банком, используя имя пользователя и пароль или пин-код, а затем вводит запрос на перевод. Банк записывает это в своем реестре.
Банковский реестр
1. Элис: Кредит за наличный депозит + 2 доллара
2. Боб: Кредит за наличный депозит + 10 долларов
3. Элис: Дебит - 2 доллара
4. Боб: Кредит + 2 доллара
Таким образом, банк зарегистрировал новые дебиты и кредиты, и теперь деньги переведены.
Проблема двойного расходования
Что произойдет, если Элис попытается снова потратить эти 2 доллара? Это называется проблемой двойного расходования. Элис подает запрос в банк, но банк говорит: “Извините, мы видим, что Вы уже потратили 2 доллара, чтобы заплатить Бобу. У Вас больше нет денег для отправки”.
Когда у вас есть центральный орган, такой как банк, ему очень легко определить, что вы пытаетесь перевести уже потраченные деньги. Это потому, что только центральный орган может изменить реестр и у него есть внутренние процессы, включая системы резервного копирования и ревизии, проводимые как компьютерами, так и людьми, чтобы убедиться, что реестр достоверен и не был подделан.
Мы называем такую систему централизованной, потому что она имеет единую точку контроля.
В банке хранится реестр, доступ к которому можно получить, но только через банк.
Распределение реестра
Первая проблема, которую Биткоин стремится решить, это отказ от доверенного посредника путем создания пиринговой системы. Давайте представим, что банки исчезли и нам нужно воссоздать нашу финансовую систему. Как мы можем вести реестр без какого-либо контролирующего центрального органа?
Если у нас нет единого централизованного реестра, то реестр теперь, должно быть, принадлежит людям. Vive la révolution. Вот как это работает.
Сначала мы собираемся вместе и создаем сеть. Это просто означает, что у нас есть возможность друг с другом общаться. Допустим, мы обмениваемся телефонными номерами или аккаунтами Snapchat. Когда Элис хочет отправить деньги Бобу, вместо того, чтобы позвонить в банк, она говорит всем своим друзьям: “Я посылаю Бобу 2 доллара”. Все подтверждают эту транзакцию, отвечая: “Круто, мы поняли”, и записывают ее в свою собственную копию реестра. Теперь картина выглядит так:
У каждого есть копия реестра, к которой он имеет свободный доступ.
Так что теперь, вместо одной копии, хранящейся в банке, копия реестра есть у каждого. Каждый раз, когда кто-то хочет потратить деньги, он просто должен сообщить об этом всем своим друзьям. Все документируют транзакции. Когда реестр не находится в одном месте, мы называем систему распределенной, а когда отсутствует контролирующий орган, такая система называется децентрализованной. Это решает проблему отказа от посредника.
Теперь, когда у нас нет посредников, как мы будем решать проблему двойного расходования? С кем мы будем консультироваться вместо банка, чтобы проверить, не тратятся ли уже потраченные деньги? Поскольку у каждого есть копия реестра, мы должны консультироваться со всеми. Эта система называется основанной на консенсусе, потому что она опирается на согласие всех участников с определенной версией правды.
Если Элис попытается повторно потратить 2 доллара, которые она уже отправила Бобу, ее транзакция будет отклонена всеми участниками сети, поскольку они будут консультироваться со своими реестрами и сообщать ей, что согласно их записям она уже потратила деньги. Поэтому они не будут записывать ее вторую попытку потратить уже потраченные ею деньги. Теперь у нас есть одноранговая консенсусная сеть для регистрации права собственности и перевода средств.
До тех пор, пока наш распределенный реестр требует разрешения на присоединение, и мы можем быть уверены, что каждая сторона — честна, система работает. Но данная архитектура не может быть использована миллионами людей во всем мире. Распределенные системы, состоящие из произвольных участников, по своей сути ненадежны. Некоторые люди могут иногда выходить из сети. Это означает, что они могут не услышать о наших транзакциях во время их трансляции. Другие могут активно пытаться обмануть нас, говоря, что определенные транзакции произошли или не произошли. Новые люди могут присоединиться к сети и получить противоречивые копии реестра.
Давайте рассмотрим, как кто-то может попытаться нас обмануть.
Атака двойного расходования
На месте Элис, я могу вступить в сговор с другими людьми и сказать им: “Когда я трачу деньги, не записывайте это в свои реестры. Притворитесь, будто этого никогда не было”. Элис может выполнить двойную атаку следующим образом.
Имея баланс в 2 доллара, Элис делает следующее:
1. Она отправляет свои 2 доллара Бобу, чтобы купить шоколадку. Теперь у нее должно остаться 0 долларов.
2. Дэвид, Ева и Филип вступают в сговор с Элис и не записывают транзакцию Элис Бобу в свои реестры. В их копиях Элис никогда не тратила свои деньги и у нее на балансе все еще 2 доллара.
3. Шарлотта — честный хранитель реестра. Она отмечает перевод Элис Бобу. В ее реестре у Элис — 0 долларов.
4. Генри был неделю в отпуске и не слышал ни об одной из этих транзакций. Он присоединяется к сети и запрашивает копию реестра.
5. Генри получает 4 фальшивых копии (Дэвид, Ева, Филип, Элис) и одну честную копию (Шарлотта). Как ему определить, какая из них настоящая? Не имея другого выхода, он доверяет большинству участников и, соответственно, принимает фальшивый реестр за правильный.
6. Элис покупает шоколадку у Генри за 2 доллара, которых у нее на самом деле нет. Генри принимает деньги, потому что, насколько ему известно, у Элис на балансе все еще 2 доллара в соответствии с реестром, копию которого он получил от остальных участников.
7. У Элис теперь есть 2 шоколадки, и в системе было создано 4 фальшивых доллара. Она платит своим друзьям шоколадками, и они повторяют атаку 100 раз на каждого нового участника, присоединившегося к сети.
8. У Элис теперь — все шоколадки, а у всех остальных — большие сумки, полные поддельных денег.
9. Когда они пытаются потратить деньги, которые Элис им якобы прислала, Дэвид, Ева и Филип, которые контролируют бóльшую часть сети, отвергают эти транзакции, потому что они знают, что деньги изначально фальшивые.
Это называется провалом консенсуса. Люди в сети не пришли к общему мнению о состоянии реальности. Не имея лучшей системы, они шли по принципу большинства, что приводило к тому, что нечестные люди контролировали сеть и тратили деньги, которых у них не было.
Если мы хотим создать открытую систему, в которой каждый может участвовать, не нуждаясь в разрешении, то она также должна быть устойчивой к действиям нечестных участников.
Решение проблемы распределенного консенсуса
Теперь мы можем решить одну из самых сложных проблем в области компьютерных наук: распределенный консенсус между сторонами, где некоторые участники являются нечестными или ненадежными. Эта проблема известна как проблема византийских генералов и является основой, которую Сатоши Накамото использовал при изобретении Биткоина. Нам нужно, чтобы группа людей согласилась с записями в реестре, не зная, какие хранители реестра правильно и честно записывают все транзакции.
Опрометчивым решением будет просто назначить честных хранителей реестра. Вместо того, чтобы каждый мог вносить информацию в реестр, мы выбираем горстку друзей, таких как Шарлотта, Гэри, Фрэнк и Зои, потому что они не лгут и все знают, что они такие ответственные, что не веселятся даже на выходных.
Поэтому каждый раз, когда нам приходится обрабатывать транзакцию, вместо того, чтобы говорить всем нашим друзьям, мы просто вызываем Шарлотту и ее команду. Они рады вести для нас реестр за небольшую плату. После того, как они обновляют информацию в реестре, они звонят всем остальным и рассказывают им о новых записях, которые все по прежнему сохраняют в качестве резервной копии.
Эта система работает очень хорошо, за исключением одного дня, когда появляются правительственные агенты и хотят знать, кто управляет этой теневой финансовой системой. Они арестовывают Шарлотту и друзей и забирают их, положив конец нашему распределенному реестру. У всех нас есть ненадежные резервные копии, мы не можем доверять друг другу и не можем выяснить, чья резервная копия должна использоваться для запуска новой системы.
Вместо того, чтобы полностью закрыть систему, правительство может также скрытно угрожать нашим хранителям реестра тюремным заключением, если они подтвердят транзакции Элис (которая подозревается в продаже наркотиков). Теперь система фактически находится под контролем центрального органа, и мы больше не можем называть ее не требующей разрешения.
Что, если попробовать демократический подход? Давайте найдем группу из 50 честных людей и будем проводить выборы каждый день, чтобы чередовать тех, кто обновляет информацию в реестре. Каждый в сети имеет право голоса.
Эта система будет прекрасно работать до тех пор, пока не появятся люди, которые будут применять насилие или экономическое принуждение для достижения тех же целей, что и раньше:
1. Заставить электорат голосовать за хранителей реестра по своему выбору.
2. Принудить избранных хранителей вносить ложные записи в реестр или запретить обработку определенных транзакций.
У нас появилась проблема. Каждый раз, когда мы назначаем конкретных людей для ведения реестра, нужно доверять их честности, и у нас нет никакого способа защитить их от принуждения кем-либо к совершению нечестных поступков и изменения записей в нашем реестре.
Ошибочная идентификация и Сибил-атаки
На данный момент мы рассмотрели два безуспешных способа обеспечения честности: один использовал определенных известных хранителей реестра, а другой использовал избираемых и сменяющихся хранителей. Провал обеих систем заключался в том, что основа нашего доверия была привязана к реальной личности: нам все еще приходилось конкретно определять лица, которые будут нести ответственность за наш реестр. Всякий раз, когда мы принимаем доверие, основанное на личности, мы становимся уязвимы к так называемой Сибил-атаке. Это, по сути, модный термин, означающий кражу личности, названный так в честь женщины с диссоциативным расстройством.
Вы когда-нибудь получали странный текст от одной из ваших подруг, позже выясняя, что ее телефон был похищен? Когда речь идет о миллиардах или даже триллионах долларов, люди оправдывают все виды насилия, необходимые, чтобы украсть этот телефон и отправить это сообщение. Крайне важно, чтобы мы никоим образом не подвергали опасности людей, хранящих наш реестр. Как нам это сделать?
Давайте устроим лотерею
Если мы не хотим, чтобы люди подвергались взяточничеству или угрозам насилия, нам нужна система с таким количеством участников, что никто не сможет им угрожать. Более того, мы вообще не хотим знать их личности. Мы должны сделать так, чтобы кто угодно мог участвовать в нашей системе и чтобы у нас не было никакой системы голосования, потому что системы голосования легко могут подвергнуться покупке голосов и насильственному принуждению со стороны.
Что, если бы мы проводили лотерею, где каждый раз для обновления записи в книге, случайно выбирали бы кого-то нового? Вот наш первый набросок проекта:
1. Любой человек в мире может участвовать. Десятки тысяч человек могут присоединиться к нашей лотерее хранителей реестра.
2. Когда мы хотим отправить деньги, мы, как и раньше, сообщаем всей сети о тех транзакциях, которые мы хотим осуществить.
3. Вместо того, чтобы все документировали транзакции, мы проводим лотерею, чтобы узнать, кто получит право записать эти транзакции в реестр.
4. Когда мы выбираем победителя, этот участник получает возможность записать в реестр все транзакции, о которых он только что услышал.
5. Если человек записывает в реестр валидные транзакции, которые исполняются по правилам, соблюдаемым всеми другими участниками, он получает награду.
6. Каждый хранит копию реестра, добавляя информацию, которую ввел последний победитель лотереи.
7. Мы ждем некоторое время, чтобы у большинства участников было время обновить свой реестр до последней записи, а затем снова запускаем лотерею.
Эта система — лучше. Невозможно скомпрометировать участников этой системы, поскольку невозможно выяснить, кто является участником и кто станет следующим победителем.
Однако у нас нет четкого ответа на вопрос о том, как проводить эту лотерею без ответственного лица или почему мы должны верить, что победитель будет вести себя честно, добавляя данные в реестр. Далее мы выясним, как решить эту проблему.