Как известно, несколько дней назад в платёжной сети Bitcoin случился сбой с раздвоением цепочки транзакций. Сбой произошёл из-за совершенно незначительной ошибки в старой версии клиентского обеспечения Bitcoin 0.7. Этой версией по-прежнему пользуются многие майнеры биткоинов, которые одновременно занимаются подтверждением транзакций. Из-за бага родилась параллельная цепочка транзакций, которую генерировали пользователи Bitcoin 0.8.
Если посмотреть на историю не с технической точки зрения, а с экономическо-криминальной, то этот маленький баг вполне можно использовать для… ограбления обменного пункта! В течение нескольких дней транзакции вносились в две цепочки по отдельности, то есть можно потратить биткоины сначала в одной цепочке транзакций, а потом в другой цепочке.
Такое «ограбление» или «мошенничество» возможно минимальными усилиями, ведь спровоцировать двойную цепочку транзакций оказалось совершенно несложно. Судя по всему, обнаружена самая главная уязвимость в платёжной системе Bitcoin: это баги в программном обеспечении, то есть в клиентах Bitcoin.
Ограбление обменного пункта — не просто теоретическая возможность. Позавчера один из пользователей на Bitcoin Forum рассказал реальную историю, как ему удалось успешно потратить свои монеты дважды (https://bitcointalk.org/index.php?topic=152348)
Вот краткая хронология событий, время указано для часового пояса UTC +8:00.
08:08 – До того, как пользователь узнал о баге, он перечислил биткоинов на $10000 в обменник BTC-e через OKPAY, на адрес 12z2n8YCJw1BEsJhhQPLCTuLqwH341nKnE отправлено 211,9093 BTC с комиссией 0,0005 BTC.
09:30 – Транзакция включена в цепочку версии 0.8, блок 225446.
10:08 – Депозит осуществлён, $9800 перечислено на счёт BTC-e.
12:53 – После изучения цепочки пользователь обнаружил, что транзакция включена в форк 0.8, но так и не была подтверждена в форке 0.7, так что он решил поэкспериментировать и отправил команду OKPAY на осуществление транзакции через API, комиссия 0,001 BTC.
13:01 – Вторая транзакция на те же биткоины включена в форк 0.7, блок 225446.
Как известно, именно форк 0.7 впоследствии решено было сделать «настоящим», а 0.8 — аннулировать.
Таким образом, пользователь дважды обменял свои биткоины на доллары, используя две цепочки транзакций от клиентов с веток Bitcoin 0.7 и Bitcoin 0.8. Неудивительно, что с такими багами рыночный курс BTC одномоментно упал на 25%. Кто может гарантировать, что из-за нового бага в программе цепочка снова не раздвоится? И если так, то как гарантировать необратимость транзакций при сохранении высокой скорости проведения платежей?
Автор: contango