Пять способов потерять деньги при использовании адресов для сдачи Биткойна

0
ПОДЕЛИТЬСЯ

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

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

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

Дебетовая карта из ада

Представьте, что вы оплачиваете дебетовой картой покупки в продуктовом магазине. Кассир говорит вам общую сумму покупки и вы проводите картой, как обычно. Тем не менее, вы замечаете, что платежный терминал запрашивает всю сумму денег на вашем счёте.

Кассир улыбается, объясняя, что это новая программа вознаграждений вашего банка. У вас есть три варианта: (1) отправить сдачу обратно на ваш текущий счёт; (2) отправить сдачу на новый банковский счёт; (3) ничего не отвечать и отправить сдачу на платежный терминал компании.

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

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

Биткойн — это электронная валюта

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

Представьте, что вам нужно отслеживать разные пулы бумажных банкнот, например, в виде места сбора денег. Можно использовать так называемые «конверты с наличными», позволяющие хранить банкноты отдельно.

Биткойн-адрес можно рассмотреть в качестве цифрового эквивалента конверту с наличными.

Конверт с наличными. Биткойн-адрес в качестве цифрового «конверта с наличными».

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

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

Как работают транзакции Биткойна

Допустим, что у Алисы есть адрес, содержащий один непотраченный выход с 10 биткойнами (BTC). Она хочет заплатить Бобу 10 BTC. Алиса совершает транзакцию, отправляя один непотраченный выход на пустой адрес Боба. Таким образом, баланс адреса Алисы становится нулевым, а баланс адреса Боба теперь содержит 10 BTC.

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

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

Несколько дней спустя Алисе нужно заплатить Бобу 5 BTC с адреса, содержащего один непотраченный выход с балансом 10 BTC. Возникает проблема: Алисе нужно заплатить Бобу, но она не хочет отдавать ему все 10 BTC. Алисе не разрешили бы порвать купюру в $10 пополам, чтобы отдать Бобу $5. Таким образом, Биткойн требует от Алисы потратить все 10 BTC.

Для того чтобы решить эту проблему, Алиса совершает транзакцию, которая разделяет её платеж. Такие транзакции полностью поддерживаются Биткойном. Одна часть транзакции отправляет на адрес Боба 5 BTC, а другая возвращает оставшиеся 5 BTC обратно на адрес Алисы. Таким же образом Алиса могла бы порвать купюру в $10 в банке на две купюры по $5 и отдать одну из них Бобу, а вторую оставить себе.

Транзакция с адресом для сдачи. Алиса платит Бобу 5 BTC. У Алисы нет неопотраченного выхода на нужную сумму, и ей приходится разделить транзакцию на платеж в 5 BTC Бобу и разменный платеж (сдачу) в 5 BTC для себя. Теперь Алиса и Боб могут использовать свои непотраченные выходы в 5 BTC.

Через некоторое время у Алисы появляются непотраченные выходы от заплативших ей людей. Теперь её адрес содержит непотраченные выходы стоимостью 20 BTC, 10 BTC и 5 BTC.

Алиса вновь хочет заплатить Бобу, но на этот раз 8 BTC. Алиса создает транзакцию, которая делит непотраченный выход в 10 BTC, отправляет 8 BTC на адрес Боба и возвращает 2 BTC на адрес Алисы в качестве сдачи. Баланс адреса Алисы становится 27 BTC, а баланс адреса Боба — 8 BTC.

Адрес сдачи с несколькими выходами. Алиса платит Бобу 8 BTC. На её адресе нет непотраченного выхода в 8 BTC, поэтому она использует выход в 10 BTC и получает 2 BTC в качестве сдачи.

В предыдущих примерах Алиса направляла сдачу на тот же адрес, с которого отправляла биткойны. Хоть это решение и упростило расчёты, оно уменьшило безопасность Боба и самой Алисы.

Адреса для сдачи и безопасность

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

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

Разберём ситуацию подробнее. Допустим, что с адреса А на адрес B была отправлена транзакция. Если сдача возвращается на адрес А, то цепочка блоков раскрывает информацию о том, что владелец адреса А передал деньги владельцу адреса B. То же самое происходит, если в процесс вовлечено больше адресов. Отправитель напрямую раскрывает адрес А.

Адрес для сдачи является отправителем. Сдача возвращается на адрес отправителя. Определить получателя платежа легко методом дедукции.

Если личность человека, который контролирует, получает или отправляет средства, раскрывается, то личности остальных участников также становятся известны.

Теперь представьте, что с адреса А отправляется платеж на адрес B, но в этот раз сдача отправляется на новый адрес С. У нас нет информации о том, какой адрес получает сдачу, мы можем только догадаться, что транзакция разделила баланс адреса A между адресами B и C. Адресом B или C может владеть не тот же человек, что владеет адресом A. Ещё одна транзакция с адреса C только сильнее сгущает краски. Какой из переводов является платежом, а какой —получением сдачи?

Адрес для сдачи отличается от адреса отправителя. Сдача возвращается на новый адрес для сдачи. Получатель платежа неизвестен.

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

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

Кошельки и адреса для сдачи

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

  • Кошельки с одним адресом используют один адрес для получения платежей и сдачи. Дополнительные адреса появляются во время создания адреса для получения вручную или в случае импорта приватного ключа. Примером может послужить уже не поддерживающийся MultiBit Classic.
  • Кошельки со случайным пулом адресов используют пул определённого размера с адресами, сгенерированными случайным образом. Сдача отправляется на следующий доступный пустой адрес, после чего на его месте создается новый пустой адрес. Самым известным примером был Bitcoin-Qt, пока его функционал обработки ключей не был обновлён.
  • Кошельки с детерминированным пулом адресов содержат практически бесконечное количество определённых адресов. Часть этого пула содержит адреса для получения сдачи. Примеры таких кошельков: Electrum и Armory.
  • Гибридные кошельки используют несколько стратегий в зависимости от контекста. Примеры: MultiBit, Mycelium и Electrum.

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

Предотвращение проблем с адресами для сдачи и восстановление

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

1. Проблема с резервными файлами

Алиса использует старую версию Bitcoin-Qt. Поняв всю важность резервных файлов, она уже давно создала зашифрованную резервную версию кошелька, которая хранится в безопасном месте. После совершения нескольких десятков транзакций с Bitcoin-Qt жёсткий диск Алисы сломался.

Алиса купила новый жёсткий диск и вновь установила Bitcoin-Qt. Затем она восстановила кошелёк из резервных файлов. К её ужасу, Алиса обнаружила, что восстановленный кошелёк оказался пустым.

Объяснение: Алиса создала больше адресов для сдачи, чем есть в изначальном пуле из 100 адресов. На сотой расходной транзакции Bitcoin-Qt отправил сдачу Алисы (где были все её средства) на адрес не из резерва. Из резерва восстановились только пустые адреса.

Восстановление: Даже если жёсткий диск не загружает операционную систему, отдельные файлы можно восстановить. Используя инструменты восстановления данных, Алиса может спасти свой кошелёк Bitcoin-Qt вместе с деньгами.

Предотвращение:

  • Подсчитывайте число созданных вручную адресов и расходных транзакций с момента создания последнего бэкапа. Когда это число превышает 80, создавайте новые резервные файлы. Для большинства пользователей достаточно будет создавать бэкап каждую неделю.
  • Установите очень высокое значение (например 10 000) для функции -keypool.Это можно сделать в параметре командной строки или в файле bitcoin.conf.
  • Переключитесь на определённый кошелёк.

2. Адрес для сдачи не просматривается

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

Боб решил просматривать активность адреса с помощью blockchain.info. Кошелёк Electrum Боба содержал несколько адресов, но только на одном из них были биткойны (0,3 BTC). Предположив, что это единственный адрес, который используется, Боб вставил его в поиск blockchain.info и поместил открывшуюся страницу в закладки.

Несколько недель спустя Боб совершил платёж в размере 0,2 BTC в пользу Overstock, используя кошелёк Electrum. Получив свою покупку, Боб решил проверить баланс с помощью blockchain.info.

С ужасом Боб обнаружил, что часть платежа Overstock была переведена на неизвестный адрес. Посчитав, что его компьютер, на котором установлен кошелёк Electrum, был взломан, Боб отформатировал жёсткий диск.

Объяснение: Может показаться, что мошенник изменил транзакцию Боба перед отправлением в Overstock. Но Боб увидел результат обычной работы кошелька. Electrum отправил сдачу с транзакции Боба на один из специально сгенерированных адресов для сдачи. Адрес отправления стал пустым, а именно за ним Боб и наблюдал.

Восстановление: Electrum советует хранить сид из 12 слов в безопасном месте. Если у Боба есть доступ к этому сиду, то он может восстановить свой старый кошелёк вместе со сдачей с транзакции Overstock.

Предотвращение:

  • Для детерминированных кошельков необходимо создавать дополнительный кошелёк с единственной функцией просмотра, позволяющий следить за адресами.
  • Если используется Bitcoin-Qt, то необходимо вручную обновлять список адресов наблюдения после каждого платежа либо перейти на детерминированный кошелёк.

3. Расходы с бумажного кошелька

Карлос копит деньги. Какое-то время назад он купил 20 биткойнов по $10 и отправил их на бумажный кошелёк, созданный с помощью bitaddress.org. С тех пор он ничего не делал с этими биткойнами.

Однажды Карлос увидел акцию со скидками на ноутбуки на Overstock и решил оплатить покупку этими биткойнами. Но у него возникла проблема: для того чтобы заплатить Overstock, ему нужно было перенести бумажный кошелёк в кошелёк с программным обеспечением.

Карлос загрузил MultiBit и импортировал приватный ключ бумажного кошелька. Заплатив Overstock, он вышел из программы.

Карлос беспокоился, что оставил следы приватного ключа на своём компьютере, поэтому он безопасно удалил MultiBit и папку с данными программы. Затем он вернул свой бумажный кошелёк в надёжное место.

Спустя несколько недель, Карлос проверил баланс бумажного кошелька. К своему ужасу он увидел, что биткойны пропали. 19 биткойнов были отправлены на неизвестный адрес в тот день, когда он заплатил Overstock.

Объяснение: Карлос решил, что его обманули, но это естественный результат работы кошелька. 19 пропавших биткойнов были отправлены на адрес для сдачи, а бумажный кошелёк остался пустым.

Восстановление: Удалив папку с данными MultiBit, Карлос сделал невозможным восстановление биткойнов.

Предотвращение:

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

4. Общий кошелёк

Дейв использует Bitcoin-Qt на двух компьютерах: на ноутбуке и на ПК в гараже. Он хочет использовать оба компьютера для совершения платежей, поэтому Дейв скопировал чистый резервный файл wallet.dat с ноутбука на ПК.

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

Объяснение: Компьютерная сеть Дейва не была взломана, и это не баг Bitcoin-Qt. Копия Bitcoin-Qt на ПК использовала последний доступный адрес из пула, который был общим для ПК и ноутбука. Во время последней транзакции сдача Дейва была отправлена на адрес, сгенерированный на ПК и неизвестный кошельку на ноутбуке.

Восстановление: Нужно создать резервные копии обоих кошельков на ноутбуке и ПК. Экспортируйте все приватные ключи с обоих компьютеров и сделайте свип в новый кошелек. Если всё же необходимо использовать общие кошельки, не используйте Bitcoin-Qt.

Предотвращение:

  • Не используйте старые версии Bitcoin-Qt для общих кошельков на нескольких компьютерах. Используйте Electrum или последнюю версию Bitcoin Core, которые были разработаны с учётом такой возможности.

5. Кража с импортированного бумажного кошелька

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

Через некоторое время у Фрэнка кончились биткойны. Он купил 2 BTC на Coinbase и перевёл их на свой кошелёк MultiBit.

Вскоре после этого Фрэнк купил комплект простыней на Overstock за 0,1 BTC. Несмотря на то что оплата прошла без проблем, Фрэнк заметил нечто странное. Была произведена вторая расходная операция на неизвестный адрес без его подтверждения, которая опустошила его кошелёк, сняв 1,9 BTC.

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

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

MultiBit, как и задумано в его коде, использовал адрес импортированного бумажного кошелька, чтобы получить 1,9 BTC в качестве сдачи с платежа Фрэнка в пользу Overstock. Программа Евы отследила этот перевод и моментально изъяла средства.

Ева украла средства, не получая доступа к компьютеру Фрэнка, ей даже не было известно, что это его кошелёк. План сработал, потому что Ева знала один из приватных ключей, которые используются для получения сдачи на кошелек Фрэнка MultiBit.

Восстановление: Фрэнк не сможет восстановить свои средства, а также не сможет узнать личность вора.

Предотвращение:

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

Частичная потеря средств

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

  1. Все средства кошелька находятся на одном адресе.
  2. Этот адрес содержит один непотраченный выход.

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

Допустим, что в кошельке Алисы есть два адреса: адрес 1 и адрес 2 на общую сумму 15 BTC. Для того чтобы совершить платёж на 6 BTC кошелёк берет непотраченный выход размером в 7 BTC с адреса 1 и получает сдачу в размере 1 BTC на адрес 2. Как и ожидалось, баланс кошелька Алисы уменьшится до 9 BTC.

Непотраченные выходы потерянного адреса. Алиса теряет 1 BTC после восстановления, в котором утерян адрес сдачи.

Происходит катастрофа — жёсткий диск Алисы ломается. Установив новый жёсткий диск и восстановив кошелёк, Алиса замечает нечто странное. До того как сломался её жёсткий диск, баланс кошелька составлял 9 BTC. Но после восстановления баланс оказался 8 BTC. Куда делся 1 BTC?

Алиса использовала кошелёк с пулом случайных адресов, а в изначально созданных файлах восстановления адреса 2 не было. После восстановления адрес 2 «исчез» вместе с непотраченным выходом в размере 1 BTC.

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

Выводы

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

Слова благодарности

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

Источник

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here