Рейтинг@Mail.ru

Mt.Gox ошибается. Никакой уязвимости в протоколе Биткоин нет.

Сегодня MtGox выступил с заявлением, что в связи с «проблемой» в протоколе Bitcoin, они прекращают все биткоин-выплаты до устранения этой уязвимости.

На самом деле — никакой ошибки в протоколе Биткоин нет.

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

Что это означает? Вы можете отправить ABC123 транзакцию, а кто-то может увидеть ее в сети и по-тихому изменить, в результате чего ее вид чего будет — ABC124. Если ему повезет, то ABC124 будут включена первой, а исходная ABC123 никогда не будет включена (для предотвращения даблспендинга).  Но это не вызовет никаких проблем для адресата — он все равно получат все свои деньги. Однако в blockchain транзакции ABC123 не будет.

Используя примерно такую схему у биржи Mt.Gox воровали криптоваюту:

  1. Пользователь делает запрос на вывод биткоинов из MtGox на свой адрес
  2. MtGox принимает некоторые из его собственных «неизрасходованных выходов» и составляет транзакцию, которая посылает средства на адрес пользователя.
  3. MtGox помнит хэш этой транзакции и проверяет,  появилась ли она в blockchain.
  4. Пользователь, или кто-то другой, видит неподтвержденную транзакцию MtGox в p2p сети и изменяет в ней некоторые байты. Сама транзакция остается в силе, но ее хэш меняется.
  5. Новая, измененная, транзакция включается в blockchain. MtGox послал деньги, но еще не знает об этом. Пользователь же, уже получил средства на кошелек и уже видит их.
  6. Затем пользователь пишет в поддержку MtGox, что деньги не поступили. Или, MtGox может автоматически, повторно, отправить другую транзакцию, если он видит, что средства не поступают слишком долго. Эта транзакция повторяет отправку. Таким образом, можно выводить одни и те же средства с биржи несколько раз.

Является ли возможность подобной модификации транзакций проблемой сети Биткоин? Да, является. Честно говоря, не совсем ясно, как ее вообще можно избежать.

Надо отметить, что информация об этом была доступна на публичной вики более года и странно, что в mtgox не знали про это. То ли у них некомпетентные разработчики, не знающие в деталях протокол, который они реализуют (у них свой биткоин-клиент), то ли они намеренно всех обманывают.

Решение проблемы может быть, например, таким: вместо того, чтобы использовать blockchain для наблюдения за появлением хэша конкретной транзакции, следует смотреть, если адрес X ( задается пользователем ) получил сумму N ( указанную пользователем ) с выходами Y, Z и W (используется MtGox ). Это гарантировало бы, что даже если сделка будет изменена, они наверняка это увидят и узнают, получил ли пользователь деньги, предназначенные для него или нет.

http://blog.oleganza.com/post/76213549017/mtgox-and-malleable-transactions

top