Bitcoin напоминает швейцарские механические часы: снаружи четко выполняет задачу, в понимании которой нет ничего сложного. Но если открыть заднюю крышку, то можно увидеть нетривиальный механизм, состоящий из множества шестеренок и прочих деталей. Однако полностью разобраться в том, как все это работает, технически подкованному человеку вполне реально.
Bitcoin. Как это работает
Одно из первых подробных технических описаний Bitcoin на русском было опубликовано в начале десятых годов на Хабре в статье «Bitcoin. Как это работает». Как правильно написано: «У Bitcoin есть такая особенность — чем больше начинаешь в нем разбираться, тем больше возникает новых вопросов. Есть только два выхода —либо разобраться до конца, либо просто научиться пользоваться интерфейсом программы. Иначе не будет покидать чувство, что где-то обязательно должен быть подвох».

Что такое криптовалюта?
Если кратко, то это децентрализованная валюта с защитой от повторного использования, основанной на достижениях современной криптографии. Идея состоит в том, что каждая транзакция необратима и подтверждается вновь генерируемыми блоками, отвечающими определенным требованиям. Эти блоки вычисляются всем сообществом, объединяются в цепочку и доступны всем для просмотра в виде единой базы данных. Процедура вычисления блоков называется майнинг.
Сеть построена таким образом, что один блок находится с определенной периодичностью, независимо от вычислительных мощностей, — то есть сложность вычислений саморегулируется. При этом, пока сеть растет, каждый вновь сгенерированный блок содержит еще и новые монеты. В случае с Bitcoin и еще некоторыми видами криптовалют количество монет, которые могут находиться в обращении, ограничено на уровне протокола, и количество вновь добываемых монет постепенно уменьшается в геометрической прогрессии так, что оно никогда не превысит заданного лимита. Каждый пользователь, который сгенерировал блок, получает фиксированную награду, а также комиссию транзакций, которые он подтвердил, включив их в блок.
Технология Bitcoin является одним из первых успешных практических решений так называемой задачи о византийских генералах. Кратко она формулируется так: как установить доверие между сторонами, связанными только по каналу связи, которому нельзя доверять? Одним из ключевых моментов в решении служит криптографический метод proof-of-work — те самые «бесполезные» вычисления, которые заведомо должны проводиться долго, но доказательство того, что они были, должно проверяться моментально.
Bitcoin-клиенты делятся на два вида: толстые/тяжелые (Bitcoin-Qt, Armory) и тонкие/легкие (Electrum, Multibit). Отличие заключается в том, что толстые клиенты для своей работы требуют локальную копию всей базы данных с логом всех транзакций за все время существования сети, а тонкие клиенты выкачивают информацию из децентрализованной сети только по мере необходимости. Для существования сети необходимо наличие в ней толстых клиентов, однако и тонкие клиенты дают возможность полноценно использовать Bitcoin — например, это особенно логично на смартфонах.
Со временем размер базы данных будет только расти, так же как и емкость носителей информации. Из чего же состоит БД? БД — это блокчейн, цепочка блоков данных в формате JSON. Каждый блок содержит всю необходимую для функционирования сети информацию, свой порядковый номер и хеш-сумму предыдущего блока. Естественно, в самом первом блоке такой хеш-суммы нет. Причем к хешу (шестнадцатеричному числу) выдвигаются строгие требования: он должен начинаться с определенного количества нулей, а если точнее, должен быть меньше специального параметра под названием «bits». Обратно пропорциональный ему параметр называется «сложность». Этот механизм позволяет надежно хранить все прочие необходимые данные в распределенной сети, ведь если изменить хотя бы один символ в блоке, то его хеш изменится целиком и все нули моментально пропадут.
Что же за вычисления происходят при майнинге и как добиться таких красивых хешей, которые, по сути, являются абсолютно случайными числами? Майнинг — это не что иное, как брутфорс. Брутфорс, который осуществляется не с целью атаки, а с целью защиты. Система такова, что брутфорсить в ней с целью защиты намного выгоднее, чем с целью атаки. Просто потому, что с целью защиты брутфорсит большинство (а на практике все).
Несмотря на то что хеш-функция вычисляется по строгому математическому алгоритму, брутфорс с целью поиска красивого хеша возможен за счет параметра nonce. Программа-майнер просто перебирает различные значения nonce одно за другим, вычисляет хеш блока, и если в один прекрасный момент повезет и хеш будет отвечать параметру сложности, то счастливчик получит награду в виде новых биткоинов и комиссий всех транзакций, включенных в блок.
А возможна ли утечка криптовалюты?
Особую опасность представляет синергия атаки 51% и манипуляций на уровне протокола BGP. При помощи BGP route leaking (утечки маршрутов) или BGP route injection (инъекции маршрутов) грамотный темщик может осуществить разделение сети (network partitioning), изолируя значительную часть легитимных майнеров или целые майнинговые пулы от основного блокчейна. В таком сценарии продвинутому темщику вовсе не обязательно обладать 51% общемирового хешрейта; достаточно контролировать большинство мощностей внутри какого-то одного изолированного сегмента сети передачи данных. Это позволяет скрытно формировать альтернативную цепочку блоков, которая при последующем «слиянии» сегментов (после прекращения BGP route Hijack) может оказаться длиннее основной, вызывая глубокую реорганизацию (reorg) и открывая возможности для двойных трат (double spending).
Такие инфраструктурные воздействия подчеркивают уязвимость децентрализованных сетей перед централизованными протоколами маршрутизации интернета, такими как BGP или IS-IS. На видео содержит подробный разбор того, как именно устроена внутренняя маршрутизация в сети крупного телекоммуникационного провайдера, манипуляции с которой могут быть использованы для изоляции криптовалютных узлов и захвата контроля над значительной долей хешрейта в отдельном сегменте сети.
Более подробно обсудить со мной вопрос практического применения описанных инструментов можно в личных сообщениях. Контактные данные указаны в соответствующем разделе этого сайта.