Содержание статьи
- Бухгалтерия Дикого Запада
- Скованные одной цепью
- Золотая лихорадка
- Программируемый нотариус
- Умные контракты
- Фантазии и реальность
- Технический FAQ
- Чем Blockchain лучше других систем?
- Если любой человек может добавить блок в блокчейн, почему получается цепочка, а не дерево?
- Сколько транзакций может быть в блоке?
- Почему считается, что создавать новые блоки тяжело?
Таинственная технология, на которой основана широко известная криптовалюта Bitcoin, подходит не только для финансовых операций. Покончив с автоматизацией экономики, ее апологеты мечтают децентрализовать бизнес, коммунальные услуги, регулирующие органы и даже само государство. Но для этого нужно преодолеть множество технических и политических проблем.
Сторонники Bitcoin возлагали на первую децентрализованную электронную валюту огромные надежды. Удастся ли их оправдать — большой вопрос, особенно в России. Дело идет к тому, что в нашей стране Bitcoin просто запретят. Но даже в том случае, если сбудутся самые пессимистические прогнозы, Bitcoin рано сбрасывать со счетов. Самое интересное в нем — это технология, а не деньги.
Бухгалтерия Дикого Запада
В основе Bitcoin лежит так называемая цепочка блоков транзакций, или блокчейн (blockchain), — грандиозная база данных, в которой хранятся сведения обо всех операциях, совершенных с этой валютой. Блокчейн можно сравнить с гроссбухом — главной бухгалтерской книгой, где фиксируют приход и расход средств на балансе организации.
В настоящем гроссбухе каждая строка представляет собой проводку — запись об изменении баланса организации. В столбце «Дебет» бухгалтер указывает, насколько уменьшился ее баланс. В столбце «Кредит» — насколько он вырос.
Записи в блокчейне очень похожи. У каждой отраженной в нем проводки, или, если использовать жаргонное наименование, «транзакции», есть «входы» и «выходы». Баланс отправителя транзакции сокращается на сумму, которая указана на ее входах. Выходы сообщают, насколько увеличится баланс получателей.
Xakep #207. Дистанционное банковское ограбление
Похожие базы данных имеются у любой платежной системы или банка. При совершении платежа они проверяют, что на счету клиента хватает средств, а затем снимают деньги с его баланса и прибавляют к балансу получателя.
Отличие сети Bitcoin в том, что она децентрализована. У нее нет верховного сервера, который контролирует внесение изменений в базу данных и следит, чтобы никто не тратил больше денег, чем имеет. Действующая копия блокчейна хранится на тысячах равноправных узлов, и добавлять туда новые записи может кто угодно.
Для банков и платежных систем такая ситуация немыслима. Если бы в их базах данных могли копаться посторонние, этим тут же воспользовались бы мошенники. Ничто не помешало бы им переписать себе средства с чужих счетов или расплатиться деньгами, которых у них нет.
Но блокчейн — это не обычная база данных. Он с самого начала рассчитан на использование в тех ситуациях, когда никому нельзя доверять. Именно это и делает его интересным.
Скованные одной цепью
Главное свойство блокчейна — его неизменяемость. Если однажды туда попали сведения о проведенной сделке, то они останутся там навсегда. Их нельзя ни удалить, ни отредактировать. И не потому, что это запрещено. Просто блокчейн устроен так, что даже мизерная правка требует невероятных вычислительных ресурсов.
Механизм, обеспечивающий неизменяемость, на удивление прост. Блокчейн похож на башню из детских кубиков. Нельзя вытащить кубик из середины и заменить его на другой, потому что тогда рухнет вся конструкция.
Новые записи добавляют в блокчейн не по одной, а большими блоками. Они в нашей метафоре соответствуют кубикам. У каждого блока есть уникальный идентификатор, которым служит криптографический хеш его заголовка. Вычисление такого хеша — это сложная задача, которая занимает по меньшей мере десять минут.
Поскольку в заголовке каждого блока хранится идентификатор предыдущего, модификация одного блока вызывает цепную реакцию: меняются хеши заголовков у всех блоков, которые добавлены позднее. Злоумышленнику придется пересчитать хеши для каждого из них. Это безумно дорогая и сложная задача, особенно если учесть, что каждый час блокчейн становится длиннее на шесть блоков. Для победы злоумышленник должен догнать и перегнать все честные узлы сети.
Генерацией новых блоков для добавления в блокчейн занимаются майнеры. Ты о них наверняка слышал — это те самые люди со специализированным железом, которые будто бы делают деньги из воздуха. В действительности майнерам отведена роль своего рода распределенной клиринговой палаты. Грубо говоря, их работа гарантирует, что сделка проведена без нарушений, а информация о ней достоверна. Генерация биткойнов — это лишь приятный побочный эффект их деятельности.
Золотая лихорадка
Когда один из участников сети Bitcoin создает транзакцию, он сообщает о ней всем соседним узлам, а те проверяют и передают ее дальше. Спустя несколько секунд о сделке узнают все. Майнеры тоже участвуют в этой эстафете, но для них она важна еще и по другой причине.
Они независимо друг от друга составляют из принятых и проверенных транзакций новый блок, а затем наперегонки выполняют «доказательство выполнения работы» (proof of work). Это самый долгий и трудоемкий этап создания блока, но именно его продолжительность и трудоемкость гарантируют незыблемость блокчейна.
«Доказательство работы» заключается в подборе идентификатора нового блока. Им, как мы знаем, служит криптографический хеш его заголовка. При этом согласно правилам его величина не должна превышать значения параметра под названием «сложность» (difficulty). Для подгона результата под «сложность» в заголовке блока выделено четыре байта (nonce). Туда подставляют различные числа и пересчитывают хеш до тех пор, пока условие не будет выполнено. Значение «сложности» подобрано таким образом, чтобы поиск подходящего числа занимал примерно десять минут.
Это гонка, в которой есть победители и проигравшие. Вознаграждение получит лишь тот майнер, который первым закончил работу, а остальные останутся ни с чем. Сейчас награда составляет 25 биткойнов (около 715 тысяч рублей) плюс «чаевые», прилагающиеся к каждой транзакции. К июлю эта сумма, скорее всего, сократится вдвое.
Когда блок готов, победитель распространяет его по сети. Получив новый блок, другие участники сети проверяют его. Только в том случае, если и с ним, и с образующими его транзакциями все в порядке, они добавят его в свои копии блокчейна.
Неизменяемость блокчейна мешает злоумышленникам отредактировать историю транзакций задним числом, но этого мало. Нужно, чтобы туда попадала только верная информация. Эта задача решается на уровне отдельных транзакций.
Программируемый нотариус
Транзакции не просто сообщают, откуда и куда будут переданы деньги. Они указывают на происхождение этих денег. Входы новой транзакции связаны с выходами предыдущей. Иными словами, они представляют собой ссылки на суммы, заработанные в результате одной из прошлых сделок. Переходя по ссылкам от транзакции к транзакции, можно проследить путь денег от момента создания до текущего обладателя.
Сослаться на чужие деньги не дают замысловатые танцы с электронными подписями и криптографическими ключами. Для нас в данном случае интерес представляет не столько крипто, сколько тот факт, что условия сделки встроены в саму транзакцию и представляют собой программы на примитивном стековом языке, напоминающем Forth. Можно сказать, что в Bitcoin скрипты играют роль контрактов.
Скрипты делятся на два типа: запирающие (scriptPubKey) и отпирающие (scriptSig). Запирающий скрипт находится на одной стороне ссылки, соединяющей выход старой транзакции с входом новой, а отпирающий — на другой. Чтобы ссылка сработала, отпирающий скрипт получателя денег должен подойти к запирающему скрипту отправителя.
Для проверки ссылки запускают сначала отпирающий скрипт, а затем запирающий. Отпирающий скрипт размещает на стеке данные для запирающего скрипта, а запирающий изучает их и определяет, соблюдены ли условия, которые поставил отправитель. Деньги можно использовать только в том случае, если проверка увенчалась успехом.
Обычно отпирающий скрипт предъявляет электронную подпись, которая сгенерирована на основе закрытого ключа создателя новой транзакции. Запирающий скрипт сверяет подпись с открытым ключом получателя и убеждается, что отправитель адресовал перевод именно этому участнику сети. Это не единственный возможный вариант, но примерно так работает большинство транзакций с биткойнами.
Каждый узел сети, в том числе и получатель денег, может проверить, откуда взялись отправленные средства и обладал ли создатель транзакции правом их тратить. Для незначительных переводов этого, как правило, достаточно, но риск можно уменьшить, дождавшись включения транзакции в блокчейн. Это даст гарантию, что переводимые деньги не были использованы раньше. Подтверждение более крупных переводов занимает больше времени: блокчейн должен вырасти настолько, чтобы расходы на пересчет добавленных блоков превысили доходы от обмана.
Умные контракты
Возможности транзакции не исчерпываются передачей биткойнов от одного участника другому по электронной подписи. Встроенный язык программирования позволяет ставить любые условия. Например, запирающий скрипт может не требовать подписей вовсе. В этом случае отправленные деньги получает первый желающий. Можно поступить наоборот и запросить подпись не одного пользователя, а нескольких. Такой механизм бывает полезен в ситуациях, когда для проведения сделки нужно согласие третьей стороны.
В этом с самого начала заключалась задумка анонимного изобретателя криптовалюты, скрывающегося под псевдонимом Сатоси Накамото. В одном из писем, датируемых 2010 годом, он объяснял, что протокол Bitcoin позволяет реализовать огромное множество разновидностей транзакций: сделки с эскроу, контракты с поручительством, разрешение споров третьей стороной и многое другое. Это было сознательным заделом на будущее.
Апологеты блокчейна идут еще дальше. Они полагают, что биткойн — это лишь начало. Если криптовалюта конкурирует с традиционной финансовой системой, не оставляя места ни для государственных центральных банков, ни для частичного банковского резервирования, то другие применения этой технологии должны взять на себя функции, которые выполняет государственная бюрократическая машина.
С технической точки зрения в этом есть логика. Если блокчейн справляется с хранением глобального гроссбуха, он подойдет и для, скажем, земельного кадастра. Блокчейн мог бы служить публичным репозиторием данных целого общества, в том числе реестров различных документов, событий и имущества. С его помощью предлагают отслеживать права собственности на землю и недвижимость, регистрацию коммерческих предприятий и браков, даже свидетельства о рождении и смерти. Без коррупции, без лоббистов, без бюрократов, без налогов и без регулирования.
Практическим примером невалютного использования блокчейна могут служить так называемые умные контракты. В отличие от обычных контрактов, которые составляют и интерпретируют люди, умные контракты представляют собой компьютерные программы. Это делает их более предсказуемыми, объективными и точными.
Вот как они могут действовать. Предположим, кто-то хочет оставить своему внуку денежную сумму. Условием получения наследства будет либо смерть владельца денег, либо совершеннолетие получателя. Критерии оформляют в виде транзакции, размещенной в блокчейне реестра умных контрактов. Для проверки первого критерия программный агент следит за официальными сообщениями о смерти, которые публикуются в различных источниках. Для проверки второго критерия текущую дату сравнивают с датой, когда внуку исполнится 18 лет. Когда один из критериев срабатывает, сумма, прикрепленная к умному контракту, автоматически отправляется адресату.
Все это — не только теория. Стартапы и разработчики проектов с открытыми исходниками уже работают над реализацией новых применений блокчейна. Компания Ripple предлагает банкам услуги по сделкам на базе блокчейна, в котором, среди прочего, действуют умные контракты. Проект Colored Coins позволяет использовать биткойны в качестве виртуального отображения имущества и проводить с ним различные операции. PrecedentCoin должна стать программным эквивалентом прецедентной судебной системы. LiquidFeedback — это, по сути дела, представительская демократия на базе блокчейна. Наконец, в рамках проекта World Citizenship разрабатывают криптографические распределенные удостоверения личности.
Фантазии и реальность
Увы, утопический анархо-капитализм, о котором фантазируют любители блокчейна, с трудом выдерживает проверку реальностью. Показательнее всего трудности, с которыми в последнее время сталкивается сама сеть Bitcoin.
Децентрализация — не только свойство, но и условие работы Bitcoin. Если значительное количество узлов будет сосредоточено в одних руках, механизм проверки подлинности транзакций начнет давать сбои. Сегодня эта угроза уже не кажется фантастической.
Жестокая конкуренция между майнерами привела к тому, что для участия в гонке требуется специализированное оборудование и значительный стартовый капитал. В результате майнинг централизуется семимильными шагами. Большинство новых блоков давно добавляют не одиночки, а один из немногочисленных майнерских пулов. Их вычислительные ресурсы приближаются к 51 проценту ресурсов всей сети — порогу, который позволяет контролировать, что считается правдой, а что ложью.
Другая серьезная проблема связана с пропускной способностью сети Bitcoin. По данным 2015 года, она обрабатывает одну транзакцию в секунду. При этом теоретический предел соответствует семи транзакциям в секунду. Для сравнения: платежная система VISA обслуживает 2000 транзакций в секунду при пиковой нагрузке 10 000 транзакций в секунду.
Если пропускную способность Bitcoin удастся увеличить до уровня VISA, возникнет другое затруднение. При таком количестве сделок блокчейн будет каждый год удлиняться на 1,42 Пбайт. Между тем огромные размеры блокчейна уже сейчас один из факторов, вредящих децентрализации.
В начале апреля 2016 года блокчейн Bitcoin занимал 64 Гбайт и продолжал стремительно расти. Из-за этого большинство узлов сети не хранят полную копию блокчейна, а лишь запрашивают выдержки из него у других. В прошлом году количество копий блокчейна оценивалось в семь тысяч. Это ужасающе мало.
Еще пагубнее для Bitcoin то, что государственные органы многих стран либо не доверяют криптовалютам, либо полностью отвергают их. Кое-где Bitcoin уже запрещен. В частности, криптовалюту нельзя использовать в Исландии, Бангладеш, Боливии, Эквадоре, Кыргызстане и Вьетнаме. В декабре 2013 года китайские власти запретили финансовым организациям проводить операции с Bitcoin.
В России перспектива запрета криптовалюты тоже становится все более и более реальной. В конце 2015 года Роскомнадзор заблокировал несколько крупных сайтов о Bitcoin. Причиной якобы стал законодательный запрет на выпуск денежных суррогатов. Впрочем, сам по себе Роскомнадзор — это не столько проблема, сколько ее симптом.
В начале марта 2016 года стало известно, что Минфин разрабатывает поправки к уголовному кодексу: за выпуск денежных суррогатов, к которым могут быть отнесены и криптовалюты, хотят ввести суровые наказания. Если этому предложению дадут ход, за выпуск биткойнов будут сажать на срок до четырех лет и штрафовать на 500 тысяч рублей. Для руководителей банков и финансовых компаний наказание еще жестче: семь лет и штраф до 2,5 миллиона рублей.
Впрочем, кто обещал, что будет легко?
Технический FAQ
Чем Blockchain лучше других систем?
Внутреннее устройство блокчейна успешно решает так называемую «задачу византийских генералов». Это криптологическая проблема, связанная с устойчивостью криптосети в условиях внутренней конкуренции и вероятного «предательства» ее членов.
Как же ее устраняет блокчейн? Строго говоря, никак. Блокчейн всего лишь:
- усложняет подделку каждого конкретного «приказа» достаточно для того, чтобы это стало невыгодно для атакующего;
- вовлекает в принятие решения достаточно большое количество узлов сети, чтобы борьба с ними стала менее выгодной, чем кооперация.
Современные платежные системы не предоставляют даже такого уровня надежности. Однако, проблема 50% + 1 остается и в блокчейне: достаточно завладеть более чем 1/3 всех узлов сети, чтобы парализовать ее работу, и более чем 1/2 — чтобы полностью подчинить ее себе. Это не единственная проблема — есть и другие.
Если любой человек может добавить блок в блокчейн, почему получается цепочка, а не дерево?
Это второе жесткое условие, «зашитое» изобретателем технологии блокчейна Сатоси Накамото в алгоритм: цепь постоянно отбрасывает «лишние» блоки.
Блокчейн, фактически, не совсем цепь: это «публичный коллективный реестр», где понятие «коллективный» не менее важно, чем «реестр». Слово «реестр» здесь указывает на технологию выстраивания связей; «коллективный» — на технологию их отбора. Без отбора вся структура действительно превратилась бы в «дерево» (и называлась бы Blocktree). Но в каждый момент времени сеть просчитывает длину порожденных майнерами «ветвей» и простым голосованием узлов выбирает самую длинную ветвь. Остальные безжалостно выбрасываются, усилия майнеров, их породивших, не вознаграждаются, а транзакции исчезают, словно их и не было. Избыточность — не самая большая цена за устойчивость.
Важно понимать, что «длина» ветви — это не только количество блоков в ней, но и кумулятивные «сложность» и «информативность» этих блоков. Поэтому выбор всегда однозначен, двух одинаковых ветвей быть не может.
К сожалению, подробности не сообщают ни члены Core Team, ни сам Сатоси. Но если ты заинтересовался — будет нелишним почитать оригинальное описание технологии.
Сколько транзакций может быть в блоке?
Теоретически — сколько угодно. Однако, например, в биткоине, самой популярной на сегодня реализации блокчейна, размер блока ограничен и составляет 1 Мб, что позволяет уместить в него максимум порядка 5000 простейших транзакций (с одним отправителем и одним получателем). Отсюда, кстати, высчитывается и максимальная пропускная способность сети Bitcoin, которая составляет семь транзакций в секунду.
Почему считается, что создавать новые блоки тяжело?
Ответом опять же будет «так решил Сатоси». Надежность системы достигается благодаря криптографической защите с помощью функции Hashcash, изобретенной еще в 1997 году. Hashcash — это обертка, внутри которой по мере исторического развития использовались MD5, SHA1, SHA256, ECDSA и другие криптоалгоритмы. Сейчас блокчейн шифрует блоки двойным проходом SHA256 (это называется «SHA256 squared function») по заголовку блока, содержащему всю важную информацию:
Block_Header = [Version, hashPrevBlock, hashMerkleRoot, Time, Bits, Nonce]
Hash = SHA256(SHA256(Block_Header))
Одноразовое создание такого хеша на хорошем оборудовании занимает менее 1 мс. Вся сложность в том, что оно не одноразовое: вычисление должно повторяться столько раз, сколько понадобится, чтобы добиться необходимого количества нулей в начале хеша (которое каждые две недели автоматически подстраивается сетью). Именно этим способом Сатоси и добился «тяжелого» вычисления proof-of-work и одновременно — «легкого» вычисления его валидности.