Что такое «уязвимость в биткоине»?

Уязвимость биткоина

Уязвимость биткоина угрожает работе бирж.

Болезнь, поразившая две из трех крупнейших бирж, потенциально лишившая пользователей биржи MtGox всех денег — не нова и давно известна (по крайней мере с 2011 года). Но никто до этого момента не осознавал, насколько опасной окажется даже не дыра, а маленькая оплошность. Место, в котором создатели биткоинов проявили непредусмотрительность привела к многомиллионым потерям.

Но это не вина одного только Сатоши Накамото. Этот баг сам по себе не опасен, но в комбинации с дырами в биллинговой системе бирж — привел к остановке двух крупнейших биткоин бирж, основном месте покупок биткоина. В чем же суть этого бага?

Уязвимость биткоина… Как это работает?

Чтобы понять, как работает уязвимость, начнем с начала: когда вы отправляете биткоины, это не значит, что они физически списываются с вашего счета, оказываются на транзитном счете и с него пересылаются на счет получателя. Так могло бы быть, если бы биткоин не был децентрализованной валютой (вы ведь уже знаете, что такое биткоин?), валютой, лишенной центра и не имеющей никаких транзитных счетов. Ваше право владеть биткоинами определяется записями в блокчейне. Количество денег у вас на счете определено входящими и исходящими транзакциями, которые записаны в блокчейне

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

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

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

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

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

Также, иногда использовалась другая уязвимость: к сумме платежа добавлялась незначащая цифра. Например, вместо 10,53 BTC становилось 10,530 — с точки зрения математики разницы нет, а с хэш будет другой.

Это плохо. И вот почему: по сути это идентичные платежи, но имеющие разный хэш, и выполнена может быть только одна из них.

Атака на биткоин биржи

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

Что происходило? Злоумышленник зачислял биткоины на счет биржи, скажем, 10 биткоинов. Затем, просил вывод денег и биржа генерировала транзакцию с номером ID 10001 и отправляла на обработку майнерам. А злоумышленник перехватывал ее транзакцию, менял подпись или добавлял незначащую цифру: таким образом получалась транзакция с номером ID 10002, другим хэшем, но фактически идентичная первой. Поясню: обе эти транзакции не могут быть исполнены. Может быть исполнена только одна из этих транзакций, ведь все остальные данные в них идентичны; блокчейн может включить только одну из них.

Далее есть шанс, что транзакция 10002 будет исполнена первой, а транзакция 10001. Как повысить этот шанс? Очень хорошо, когда есть доступ к майнинг пулам, которые по разным причинам обработают эту транзакцию в первую очередь (эти причины перечислять не будем, думаю, можно догадаться).  Далее, злоумышленник жалуется в биржу, что не получил свои деньги. Биржа проверяет блокчейн на наличие ID транзакции и не находит его там, ведь хакер заменил транзакцию 10001 транзакцией 10002, но фактически биткоины списаны. Поскольку ПО бирже слепо доверяет блокчейну, оно «не видит» этого несоответствия. И отправляет деньги вновь.

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

Эта новая уязвимость прикончит биткоин?

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

Но будут новые уязвимости.

Криптовалюта очень молода, и привлекла внимание масс только полгода назад. И риск того, что кто-то найдет какую-то новую уязвимость достаточно велик.

4 комментария

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

    • Прежде всего, нужно знать:
      а) откуда отправляете, каким кошельком пользуетесь
      б) какую сумму отправляете (если 60 на кошельке)

  2. Роман Алексеевич says:

    Здравствуйте, я зарегистрирован в блокчейне, при регистрации на другом сайте с меня потребовали цйфровую подпись я изрыл весь кошелёк но так и не мог ее найти, скажите пожалуйста где она находиться?

  3. Парни кто занимается биткоунами ( не знаю как слово это произносится) позвоните мне я нови—чёк в этом.9038062311 Александр.

Ответить

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*