Блокчейн Bitcoin (BTC) следует набору правил, устанавливаемых при помощи 642 000 строк кода, хранение которого осуществляется в открытом репозитории на GitHub. Правом вносить изменения в него обладают лишь несколько человек.
Хотя сеть биткоина децентрализована, элементу разработки присуща централизация, потенциально являющаяся одним из уязвимых мест системы.
- Что произойдет, если кто-то сможет вмешаться в код и внедрить баг в биткоин?
- Могут ли этой особенностью воспользоваться власти, чтобы вывести сеть криптовалюты из строя?
Чтобы ответить на эти вопросы, портал Decrypt опросил несколько экспертов и разработчиков.
Кто обслуживает код биткоина?
Сперва необходимо разобраться в том, как работает система. Только администраторы Bitcoin Core могут вносить существенные изменения в репозиторий на GitHub. Фактически эта роль закреплена за шестью разработчиками: Владимиром ван дер Лааном, Йонасом Шнелли, Марко Фальке, Сэмюэлом Добсоном, Майклом Фордом и Питером Вюлле.
Биткоин представляет собой ПО с открытым кодом, поэтому администраторы не назначаются официально, а ситуативно получают соответствующие полномочия от существующих администраторов, если кто-то из разработчиков демонстрирует достаточную квалификацию. Предположительно, основатель Bitcoin Foundation Гэвин Андресен назначил ведущим администратором Владимира ван дер Лаана, который несет основную ответственность за загрузку изменений в Bitcoin Core.
Для обновления кодовой базы биткоина команда Bitcoin Core изучает предлагаемый тысячами разработчиков код и может одобрить его, если посчитает уместным. У каждого администратора есть доступ к PGP-ключу, который необходим для подписания включаемых в репозиторий изменений.
Техдиректор кастодиального стартапа Casa Джеймсон Лопп сообщил:
«Хотя существует несколько администраторских аккаунтов на организационном уровне, которым доступно включение кода в основную ветвь, это в большей степени техническая функция, чем наделяющая властью позиция».
Две проблемы биткоина
По словам Страуструпа, главная проблема биткоина – масштабное энергопотребление. С ростом сложности майнинга (добычи криптовалюты) растут и затраты энергии, которую потребляет все более мощная техника.
Сложность майнинга снижается, только когда курс идет вниз. Часть майнеров отключает свои устройства, чтобы не работать себе в убыток: так, на отметке в 6,5-7 тыс. долларов в странах с дешевой электроэнергией находится порог безубыточности. Если курс биткоина ниже, то за электричество придется заплатить больше, чем можно получить от продажи криптовалюты на бирже.
Вторая проблема – использование биткоина в незаконных целях. Наркодилеры, торговцы оружием и другими незаконными товарами, террористические организации оценили анонимность, которую обеспечивают криптовалюты. Отследить оплату в биткоинах до конкретного человека куда сложнее, чем перевод в банке или платежной системе.
Хотя блокчейн биткоина открыт и все транзакции, как на ладони, для регистрации в системе не требуется документов. Вывести криптовалюту можно через полулегальные биржи или частных обменщиков, которые также не спрашивают паспорт.
Неавторизованный доступ к Bitcoin Core
Любая атака на кодовую базу биткоина, даже если она будет осуществлена сотрудниками GitHub, потребует наличия PGP-ключа.
«Работники GitHub могли бы из зловредных побуждений изменить код в репозитории Bitcoin Core. Вот почему разработчики подписывают релизы PGP-ключом. Если код на GitHub будет изменен злоумышленником, подписи не совпадут», – сказал исследователь Эндрю Янг.
Но что, если организатор атаки действительно завладеет PGP-ключом?
«Если один из этих ключей подвергнется утечке, злоумышленник потенциально сможет изменить код в репозитории, – заявил исследователь Blockchain Research Lab Элиас Штреле, добавив, что разработчики предусмотрели и эту ситуацию.
Я предполагаю, что администраторы быстро создадут новый репозиторий с новыми PGP-ключами, загрузят в него неповрежденный код и попросят сообщество использовать этот репозиторий вместо измененного».
Просто и недорого
Если найм целой команды программистов, юристов и маркетологов не по карману, то можно прибегнуть к более простому способу — скопировать уже готовую монету и создать форк. Форком называют клон оригинальной цифровой монеты. Например, Litecoin является форком биткоина, поскольку за основу был взят исходный код флагманской криптовалюты. Исходный код многих цифровых монет располагается в открытом доступе на GitHub, однако для работы с ним также нужны элементарные знания языков программирования.
Обычно при создании форка в исходном коде заменяют только основную информацию: название монеты, настройку портов, параметры генерации криптовалюты и прочие аспекты. На этом техническая сторона вопроса закончена и созданная цифровая монета готова к дистрибуции.
Администратор-злоумышленник
Рассмотрим сценарий, в котором злоумышленником оказался один из администраторов. В теории он может загрузить вредоносный код в надежде, что его никто не заметит.
«Из-за разнообразия игроков, которые должны принять изменения, достаточно сложно скрыть вредоносное изменение в Bitcoin Core, но, вероятно, это можно было бы сделать в рамках обновления, которое большинство считало бы хорошим, – сказал CEO Nym Technologies Харри Хэлпин.
По-настоящему злостные изменения распространялись бы с обновлениями, которые нравятся большинству!»
Это, однако, тоже вряд ли сработает, так как другие администраторы или кто-то из тысяч разработчиков с высокой долей вероятности заметит неладное. Тем не менее, даже если вредоносное изменение пройдет эту стадию, существует еще одна защита.
«Я считаю, что оно будет выловлено скриптом подтверждения подписи, когда в следующий раз кто-то оформит запрос на добавление кода или проведет тест, – сказал разработчик Томас Керин.
Внимание всех разработчиков сразу же будет приковано к произошедшему».
Противоречивое заявление
Бьерн Страуструп стал гостем подкаста Лекса Фридмана, эксперта по искусственному интеллекту и передовым технологиям разработки программного обеспечения. Создатель С++ заявил, что не видит у биткоина будущего – криптовалюта обречена.
Страуструп искренне сожалеет, что для создания кода биткоина использовали именно С++. Но он признал, что создатель биткоина Сатоши Накамото, кем бы он ни был, внес огромный вклад в развитие технологии.
Эксперт подчеркнул: людей, которые совершили великие технологические революции, часто осуждали. Но не за то, что они создали, а за то, как другие использовали их изобретения. Страуструп также обратил внимание, что популярность биткоина стремительно снижается.
В то же время Страуструп назвал блокчейн гениальным изобретением. Но он огорчен тем, что такой передовой технологии пока не нашлось более достойного применения, чем криптовалюты.
Похищение администраторов
В теории возможно и такое, что все администраторы будут похищены, информация об этом не распространится достаточно быстро в сообществе и значительная часть нод биткоина перейдет на уязвимый код. Опасения по поводу того, что власти могут попытаться вывести биткоин из строя, периодически возникают среди пользователей.
Предположим, что все администраторы были арестованы, а злоумышленники сразу же начали распространять вредоносное обновление Bitcoin Core. Керин считает, что такой подход тоже не возымеет успеха:
«Сообщество проведет форк репозитория, воспользовавшись последней полноценной версией, и будет отталкиваться от нее».
Он также считает, что провести подобную операцию без предания огласки произошедшему, например семьями администраторов, будет невозможно.
«Подвергшиеся манипуляциям ноды и функциональные ноды, вероятно, не смогут достичь консенсуса касаемо состояния блокчейна, что приведет к возникновению форка», – сказал Штреле.
Обновления не распространяются автоматически по сети биткоина; каждый оператор ноды сам решает, устанавливать их или нет. Таким образом пользователи могут не поддерживать даже полноправные изменения, если они не согласны с их содержимым.
На грани провала
Любые разработки с открытым исходным кодом можно очень легко скопировать и изменить, однако сообщество с большой долей вероятности не оценит очередной криптовалютный «клон», поскольку он не несет в себе никакой ценности и уникальности. Об этом рассказал основатель платформы стабильных криптовалют STASIS Григорий Клумов.
«Если вы скопируете код, это будет просто скопированный продукт, в котором нет ценности для построения нового комьюнити — в нем нет мотивации присоединяться к вам», — отмечает эксперт.
Клумов добавил, что сегодня компании создают свои усовершенствованные блокчены, однако тратят десятки миллионы долларов, чтобы вывести их на рынок и привлечь пользователей. В пример он привел Flow, Graph, Near и Avalanche. По его словам, сейчас в мире криптовалют наблюдается самая большая конкуренция за всю историю его существования, которую можно сравнить с «пузырем доткомов» в 2000 году.
Что такое ферма?
Биткоин ферма – это специальное оборудование – Asic (Асики), которые добывают биткоины.
Простыми словами, Асики – это очень мощные видеокарты, которые делают в Китае. Они выглядят следующим образом:
Цена за один асик может доходить до несколько сотен тысяч рублей.
Почему биткоин ферма называется именно так? На самом деле все очень просто: человек, который хочет заняться добычей (майнингом) биткоина, покупает несколько асиков, размещает их, и настраивает. Расположенные вместе асики просто напросто принято называть фермой.
Если же у человека всего 1 асик, фермой это называться не будет, так как ферма – это несколько асиков, установленных в одном месте сразу.
Обозначение и назначение ВТС-е кодов
Внутренняя валюта биржи представляет своеобразную виртуальную денежную единицу ВТС-е код, которую можно обменять, купить, использовать в процессе валютных спекуляций. Внешне она выглядит как длинная комбинация случайно подобранных символов: BTCE-USD-KSWСY8ОU-V6S2Y55T-VХ9RNRTV-AОZO5HRE-T410КKPR. В ней зашифрованы сумма и эквивалент валюты, указанные пользователем при покупке. Если понадобится, к примеру, передать денежные средства другому пользователю, но отправитель не знает его аккаунта, можно легко справиться с этой задачей при помощи кодов. Они также помогут выйти из ситуации, когда пользователь биржи должен срочно передать другому участнику Биткоины, но не имеет возможности долго ждать подтверждения.
В целом, BTC-e код это весьма мобильный и надежный финансовый инструмент от одноименной криптовалютной биржи, предназначенный для обеспечения защищенного режима торговли и осуществления удачных валютных спекуляций.
Как выглядит биткоин?
Поскольку биткоин существует только в интернете, потрогать или увидеть его нельзя. Каждая монета представлена в виде хэш-функции. Совокупность данных о каждой монете хранится в электронном файле биткоин-кошелька. Этот файл можно скачать на компьютер либо он будет хранится на сервере того сервиса, где вы завели виртуальный кошелёк. Доступ к кошельку обеспечивается с помощью адреса — последовательности букв и цифр. По этому адресу вы можете отправлять биткоины со своего счёта или получать их о других пользователей.
Как выглядит биткоин? Фото монеты с сайта CNN, как и другие подобные изображение, скорее вводит обывателей в заблуждение относительно того, как выглядит настоящий биткоин.
Многочисленные изображение в интернете порождают вопрос о биткоине: как выглядит монета? Как мы уже сказали, биткоин не является монетой или купюрой, то есть любое его физическое воплощение носит скорее символический характер. Однако, есть компании и частные лица, которые выпускают монеты из различных металлов, имеющих два QR-кода: открытый с адресом (для переводов и операций) и закрытый с приватным ключом (известный только владельцу и дающий доступ к балансу и истории транзакций). Такие монеты представляют интерес скорее для коллекционеров и по сути являются способом хранения адреса криптокошелька. С тем же успехом его можно записать на бумаге, просто это будет выглядеть не столь презентабельно.
К особенностям площадки btc-e стоит отнести:
— Доступность торгового API, что открывает пути для применения стороннего софта при торговле. Так, многие пользователи могут задействовать АТС — автоматизированные торговые системы.
— Для удобства пользования представлено три вида чатов — на русском, английском и китайском. Наличие китайского языка привело к массовым регистрациям со стороны пользователей из Китая. Первоначально через такие чаты оказывалась техническая помощь клиентам, но с ростом числа пользователей удержать запросы стало невозможно, и была разработана «тикетная» система, которая расширила возможности ресурса.
— Несколько уровней аутентификации с помощью Гугл-аутентификации способствует надежной защите пользователей от взлома.
Открытый исходный код повсюду
Трудно подсчитать, сколько раз за день вы пользуетесь Linux, ведь именно эта операционная система лежит в основе работы большинства серверов в интернете. Всякий раз, когда вы посещаете Facebook, Google, Pinterest, Википедию и тысячи других крупных сайтов, сервисы, которые предоставляют вам эти (такие разные) сайты, вы имеете дело с компьютерами, которые, скорее всего, работают на операционной системе Linux. Linux можно найти и гораздо ближе; скорее всего, он у вас под рукой. Скажем, операционная система Android-смартфонов основана на Linux. Если у вас есть Chromebook, то вы пользуетесь ноутбуком на основе Linux. Эта операционная система всё чаще используется в телевизорах, термостатах, мультимедийных системах в самолётах, автомобилях и т.д.
Почему это интересно? Потому что Linux — это не продукт одного программиста или даже группы программистов; в отличие от MacOS или Windows, его не разрабатывала одна или даже дюжина корпораций. У Linux есть тысячи соавторов. Как сообщила в 2015 году Linux Foundation (некоммерческая организация, способствующая открытому развитию операционной системы), приблизительно 14 000 разработчиков из более чем 1300 различных компаний внесли вклад в виде фрагментов программного кода. В одном лишь 2015 году в усовершенствовании кода впервые поучаствовали 2355 разработчиков. Таким образом, путём экстраполяции можно подсчитать, что к 2017-му свою лепту внесли приблизительно 18 000 человек, и это число будет расти.
В 1996 году автор книги «Собор и Базар» Эрик Рэймонд написал:
Кто бы мог подумать даже пять лет назад (в 1991 году), что операционная система мирового класса может, словно по волшебству, быть слеплена в единое целое из фрагментов внештатной работы нескольких тысяч разработчиков, разбросанных по всему земному шару и связанных только призрачными нитями интернета?
Адреса могут быть созданы в автономном режиме
Создание адресов может происходить без подключения к Интернету и не требует каких-либо контактов или регистрации в сети Биткойн.
Можно создавать большое количество адресов в автономном режиме, используя свободно доступные программные инструменты. Генерация пакетов адресов полезна в нескольких сценариях, например, на веб-сайтах интернет-магазинов, где уникальный предварительно сгенерированный адрес предоставляется каждому клиенту, который выбирает опцию «платить при помощи BTC».
Где я могу рассчитаться?
Во многих странах уже узаконили криптовалюту, а многие мировые компании начали принимать биткоины в качестве оплаты за свои товары или услуги.
В России пока нет законодательства, регулирующего обращение криптовалюты, поэтому многие компании пока не вводят оплату криптовалютой. Но в некоторых городах уже существуют места, где можно расплатиться биткоинами. Например, в Москве на улице Вавилова есть кофейня, где можно купить кофе и круссаны за биткоины.
В дальнейшем сфера применения криптовалюты в России может значительно увеличиться и дорасти до размеров зарубежья.
SX
Есть два альтернативных инструментов командной строки для работы с биткоин-транзакциями: pyBitcointools и . SX был создан Амиром Тааки, pyBitcointools написал Виталик Бутерин. Синтаксис очень похож, хотя есть и отличия. Установка SX является относительно простым делом — все, что вам нужно сделать, это загрузить скрипт install-sx.sh, установить пару библиотек, и запустить этот скрипт. В Ubuntu, скажем, последовательность команд выглядит следующим образом:
wget https://sx.dyne.org/install-sx.sh sudo apt-get install git build-essential autoconf libtool libboost-all-dev pkg-config libcurl4-openssl-dev libleveldb-dev libzmq-dev libconfig++-dev libncurses5-dev qrencode chmod +x install-sx.sh ./install-sx.sh
После установки SX, вы с ним можете много чего сделать. Скажем, если вы просто создаете платформу для обработки платежей, вам достаточно загрузить историю по какому-то адресу и, возможно, посмотреть подробно его транзакции:
> sx history 114tTpMrJHJpNvkPZmz8KVcJoQjD5Utosd Address: 114tTpMrJHJpNvkPZmz8KVcJoQjD5Utosd output: eb84dd62287a1d85e3f31b0de869534a8f800fad559e36f779a45470aa4e8976:0 output_height: 277978 value: 100000 spend: 3216bc4b8294532cddab1ae2a95a336ee841be02e6246c1ad9cf1e7db788d10e:0 spend_height: 277979
Address: 114tTpMrJHJpNvkPZmz8KVcJoQjD5Utosd output: 5a45c86c5aff8200db4c7f8a91b9a3e51932510cbeb2dc173fc8611bee5aeaaf:1 output_height: 278076 value: 70000 spend: 4817f863ace4337be7ea95476b2c73723fb83fbe0e1a6236fbf30f2a8aa14dee:0 spend_height: 278076
> sx fetch-transaction 516f0bfe2ed3703112434f645fdc7d805bba51c94c9d8f88b666f1c832eb423c
010000000142f2e85e078a214d5c61b58276da5cec01311e026355c570b650c2e66558 5011010000008a47304402203aa40adefd0dc4a3f960b230a9e1b284d78a4b4dec9119 368fdeb006af3b6c7b022071165df64ea4502003d8b6e9c46c28b5c5c748226737b4fe1 ee8fc4269b50ee5014104a70f7c8b0a835f549f061b725bd3e06744963a07cb2f76097b afe040f939d6e6d23c6cc89e5b50aa944d26b7d1c8a1f3b8b4e6f7c2f54cf35fb46b0e4b94 42e1ffffffff02a0860100000000001976a914ba55b9859c7356c5e5549c8a30c463e3db6 4e84488ac80054800000000001976a9145a35a4558b8a0140f4a73aaac0be891b99e37 90e88ac00000000
Если вы хотите вычислить баланс адреса, вы должны получить всю его историю (ключ –j даст вам результат в легко разбираемом JSON -формате), отфильтровать те входы, которые уже были потрачены, и суммировать значения остальных. Это даст вам общее количество сатоши на данном адресе, которые можно потратить (напоминаю, 100 миллионов сатоши = 1 BTC). Если же вы хотите подробно разобрать транзакцию, скопируйте ее в файл и запустите:
> sx showtx имя_файла
Вы также можете работать с секретными ключами и адресами:
> sx newkey > priv1 > cat priv1 5JRLqUG1FwSimZwSzNLPG1BKCENCRhDwkVveL59AEqt97bbkCD1 > cat priv1 | sx pubkey 04bfc8181cd833567e078cb03ec44034c226bf23dbb2482db53513e0fcea205c40bd6dc73db0c33296d8fa8e0bd347099e07787e17a2a40293004efdb512ff51e2 > cat priv1 | sx addr 1B772AGqphjSQqqeecdTBmnBdgMBPYDXt7
Ну, и можно совершать транзакции. Здесь мы используем выход 819171fa2eaa33fc684c800ae2ce34cff8400d4d966e995c6a2f0e970b6f703d:0 чтобы отправить 90000 сатоши на адрес 18qk7SqRHuS4Kf3f6dmsvqqv7iw1xy77Z6:
> sx mktx txfile.tx -i 819171fa2eaa33fc684c800ae2ce34cff8400d4d966e995c6a2f0e970b6f703d:0 -o 18qk7SqRHuS4Kf3f6dmsvqqv7iw1xy77Z6:90000 > cat txfile.tx 01000000013d706f0b970e2f6a5c996e964d0d40f8cf34cee20a804c68fc33aa2efa7191810000000000ffffffff01905f0100000000001976a9145600d581a94f65067a09103609e919e3c01141ed88ac00000000 > sx rawscript dup hash160 [ `echo 1B772AGqphjSQqqeecdTBmnBdgMBPYDXt7 | sx decode-addr` ] equalverify checksig > raw.script > cat raw.script 76a9146ed8c762b24ba024df09cb323ea525b06da3acb788ac > echo 5JRLqUG1FwSimZwSzNLPG1BKCENCRhDwkVveL59AEqt97bbkCD1 | sx sign-input txfile.tx 0 `cat raw.script` > sig > cat sig 3044022069f05eacfe93fc6c028bd078228d7807af07c5ed7566491c709b181950d735830220788e089c63512c07239b94740a36de724b54c076192dbd27584b5b729986420d01 > sx rawscript [ `cat sig` ] [ 04bfc8181cd833567e078cb03ec44034c226bf23dbb2482db53513e0fcea205c40bd6dc73db0c33296d8fa8e0bd347099e07787e17a2a40293004efdb512ff51e2 ] | sx set-input txfile.tx 0 > txfile2.tx > cat txfile2.tx 01000000013d706f0b970e2f6a5c996e964d0d40f8cf34cee20a804c68fc33aa2efa719181000000008a473044022069f05eacfe93fc6c028bd078228d7807af07c5ed7566491c709b181950d735830220788e089c63512c07239b94740a36de724b54c076192dbd27584b5b729986420d014104bfc8181cd833567e078cb03ec44034c226bf23dbb2482db53513e0fcea205c40bd6dc73db0c33296d8fa8e0bd347099e07787e17a2a40293004efdb512ff51e2ffffffff01905f0100000000001976a9145600d581a94f65067a09103609e919e3c01141ed88ac00000000 > sx broadcast-tx txfile2.tx
Можно также проверить правильность транзакции:
> sx validtx txfile2.tx Status: Validation of inputs failed Unconfirmed: 0
Ошибка имеет смысл, поскольку выходы, которые я здесь использовал, были уже потрачены. По существу, SX позволяет вам быстро сделать кастомный биткоин-клиент: вы можете выбирать непотраченные выходы по вашим адресам и вручную собирать транзакции. Предупреждение: не работайте сразу с крупными суммами – ведь это же живые деньги! Пока вы не разобрались в создании транзакций основательно, запросто можно случайно опустить ноль в числе на выходе транзакции. Это низкоуровневая система, она не отловит вашу ошибку, и в итоге вы заплатите комиссию в 90% от транзакции, вовсе того не желая. Ну, или потренируйтесь на testnete, для начала.