Гибкость системы (Malleability)

Гибкость системы (Malleability)

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

Содержание

Описание свойства «гибкости транзакций»

Сравнительно недавно появился термин, который многие пользователи криптовалюты биткоин не слышали раньше – «гибкость транзакций». Mt Gox назвала его одной из основных причин временной приостановки снятия средств. Также гибкость транзакций упоминалась в качестве ошибки, которая на этой неделе использовалась для массированной атаки на сеть Bitcoin. Итак, что же это такое, как это работает, и следует ли нам беспокоиться? Вот то, что мы знаем.

Это то же самое, что и двойная трата (double spending)?

Нет. При атаке двойная трата или двойной расход биткоины тратятся один раз, а затем создается другая транзакция, прежде чем первая будет подтверждена. Хитрость заключается в том, чтобы затем получить подтверждение мошеннической транзакции в сети Bitcoin до того, как будет выполнена первая транзакция. Это фактически означает, что вы понесете двойной расход.

Как работает гибкость транзакций?

Чтобы понять это, вы должны знать, как выполняется транзакция биткоинов.

При отправке биткоинов кому-либо, вы не снимаете их со счета и не отправляете их «со свистом» по сети. Биткоины так никогда не отправляются. Вместо этого, транзакция создается в цепочке блоков Bitcoin.

Цепочка блоков играет роль гигантской бухгалтерской книги для всей сети Bitcoin. В ней ведется учет адресов биткоинов, с которых средства отправляются на другие адреса биткоинов, и времени отправки. Это обеспечивает полный отчет о том, сколько биткоинов можно отнести определенному адресу в сети в любой момент времени.

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

Зачем нужна гибкость транзакций?

«Гибкость транзакций поможет доказать устойчивость децентрализованной сети к дискретным сетевым событиям»

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

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

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

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

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

Как это может вызвать проблемы?

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

Отдельные атаки злоумышленников

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

Но Боб делает вид, что Алиса никогда не отправляла их. Он использует слабое место «гибкости транзакций», воспроизводя оригинальную транзакцию Алисы, внося небольшие изменения в подпись для формирования другого хэша. Затем она повторно пересылает данную транзакцию с другим ID.

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

Благонамеренные случаи

Если вы используете специальное программное обеспечение для работы со своими биткоинами, оно может ошибочно генерировать неверные хэши. Эти хэши могут быть «исправлены» в другом кошельке, который отформатирует их должным образом. Но он может и изменить идентификатор транзакции (TX ID). Если ваш кошелек не отличает транзакции с одинаковыми характеристиками, но с различными ID, то это может, в конечном итоге, привести к наличию «застрявших» транзакций, которые находятся в подвешенном состоянии. Что еще хуже, программа может воспринять, что в кошельке до сих пор имеются биткоины, которые можно потратить.

Так или иначе, если ваше программное обеспечение не может справиться с такой проблемой – это бухгалтерский кошмар. Разработчик ядра Bitcoin Грегори Максвелл (Gregory Maxwell) задумывается здесь о такой возможности.

Атаки массового отказа в обслуживании

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

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

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

В системе Bitcoin присутствует сбой?

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

Согласно объявлению Bitcoin Foundation, сделанному на этой неделе, в ходе этой последней атаки с использованием свойства гибкости передавались измененные версии транзакций, которые «разоблачали ошибки, как в ссылочном клиенте, так и в программном обеспечения некоторых бирж», что означает, что в разных местах экосистемы Bitcoin есть программные дефекты, которые должны быть устранены.

Основные разработчики также рассказали CoinDesk о двух «крайних случаях» для ссылочного клиента (те дефекты, которые могли бы вызываться очень редко). Они относятся к части программного обеспечения, связанного с кошельком.

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

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

Как решается этот вопрос?

В сообществе знали о наиболее часто обсуждаемом вопросе, что позволило передавать неправильно сформированные подписи, еще в 2011 году (см. обсуждение этого вопроса). Проблема здесь состоит в том, что ключевая часть программного обеспечения, используемая клиентом Bitcoin, должным образом не справлялась с такими подписями. Это не было ошибкой разработчиков Bitcoin, но что они не сделали, так это то, чтобы клиент Bitcoin перепроверял правильность формирования подписи перед ее передачей. Эта ошибка была исправлена в версии 0.8 ссылочного клиента.

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

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

Точно так же, на серверной стороне полезной будет функция некоторой ручной проверки снятия биткоинов с биржи.

То есть биткоинам грозит конец света? Неужели мы столкнулись с криптографическим апокалипсисом?

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

В нашем примере биржи выше, можно было бы надеяться, что Алиса ведет достаточно подробный бухгалтерский учет, чтобы суметь решить вопрос с биткоинами, которые она отправила. Если она послала Бобу, скажем, 1 биткоин в 12:10 GMT 5 февраля – это довольно уникальная транзакция. Она могла просто сказать «по моим данным эта транзакция была осуществлена в это время, с этими параметрами. Должно быть, изменился ID транзакции, так что я не отправлю биткоины повторно».

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

Во всяком случае, гибкость транзакций поможет доказать устойчивость децентрализованной сети к дискретным сетевым событиям. В конце концов, децентрализация – это одна из вещей, которая делает сеть «денежным медоедом» (“honey badger of money”).

См. также на BitcoinWiki