Криптовалюта
August 29, 2022

Криптовалюта для хакера. Часть 2.

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

Что же делает транзакция? Транзакция сообщает сети, что владелец какого-то биткоин адреса санкционировал передачу определённого количество биткоинов с этого адреса другому владельцу:

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

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

Давайте рассмотрим простой пример который поможет вам разобраться в устройстве биткоин транзакций. Предположим что вы купили 0.01 BTC и продавец отправляет вам его на ваш адрес. Теперь на вашем адресе образовался непотраченный выход (UTXO - Unspent Transaction Output):

Далее вы решили отправить своему другу 0.005 BTC. Транзакция будет выглядеть следующим образом:

Ваш UTXO (непотраченный выход) 0.01 BTC используется в данной транзакции как вход, а выходов будет два. Первый выход это 0.005 BTC, которые идут на адрес вашего друга, а оставшиеся 0.0049 BTC идут на ваш новый биткоин адрес в виде сдачи. Таким образом ваш непотраченный выход разделился на две части, одна из которых ушла на адрес вашего друга и образовала у него на адресе UTXO в 0.005 BTC, а вторая часть отправилась как сдача на ваш новый адрес, который был создан вашим биткоин кошельком. Большинство биткоин транзакций будут похожи на ту, которую я сейчас рассмотрела, и чаще всего транзакции будут содержать сдачу, которая отправляется на ваш новый адрес автоматически.

Транзакции в биткоине могут быть и без сдачи. Это происходит в том случае, если UTXO полностью используется для формирования одного выхода:

То есть, если бы захотели отправить своему другу именно 0.0099 BTC, то сдачи бы на ваш новый адрес не было, потому что вы полностью потратили UTXO на один выход.

Но самая популярная структура биткоин транзакции выглядит вот так:

В случае с примером, на адресе вашего друга, после того как была отправлена ваша транзакция, сформировался новый UTXO размером в 0.005 BTC.

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

Далее вы хотите отправить кому-то 0.1 BTC из своего кошелька, но ни одного из ваших UTXO не хватает, чтобы организовать такую транзакцию, потому что по отдельности они все меньше чем 0.1 BTC. В биткоин транзакции можно объединить несколько UTXO с разных биткоин адресов, тем самым создав выход на нужную сумму. Транзакция будет выглядеть следующим образом:

Четыре UTXO с четырёх разных адресов используются для формирования двух выходов. Первый выход это 0.1 BTC который идёт получателю, а второй выход оставшаяся сдача, которая идёт на ваш новый адрес. Биткоин транзакции могут также иметь один вход и несколько выходов. Такая транзакция формируется при использовании одного UTXO для отправки средств сразу на несколько адресов:

Из всего выше написанного мной сделаем следующие выводы:

  • Биткоин транзакции работают в определённом формате, который не похож на стандартные денежные переводы.
  • Биткоин транзакции состоят из входов и выходов. Непотраченный выход (UTXO) на биткоин адресе образуется каждый раз при получении входящей транзакции.
  • UTXO с биткоин адреса используется вами для создания исходящей транзакции.
  • Биткоин транзакции связаны между собой через входы и выходы.
  • Выходы одной транзакции используеются как вход или входы для другой транзакции, которые впоследствии формируют выходы для новой транзакции и так далее. Именно по анализу входов и выходов определённых транзакций можно связать несколько биткоин адресов, а далее узнать личность человека скрывающегося за этими адресами.

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

В этом случае мы видим, что у вас есть два входа на 0.5 BTC и 0.3 BTC. Вы хотите отправить кому-то 0.7 BTC, у вас одного входа по отдельности не хватает, поэтому в транзакцию объединяются эти два входа и формируют один непотраченный выход 0.7 BTC, а оставшаяся часть в виде 0.0999 BTC будет сдачей на ваш новый адрес, которая также формирует на вашем новом адресе непотраченный выход, который потом вы можете использовать для создания новой транзакции.

Вот пример того как выглядит стандартная биткоин транзакия где есть два входа и два выхода:

Input (вход). То есть кошелёк берёт два входа со своих адресов, объединяет их и отправляет на адрес получателя следующую сумму:

А оставшаяся часть идёт в виде сдачи:

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

Вернусь опять же к примеру:

Если у вас выход 0.5 BTC, то вы не можете от него отщепнуть 0.25 BTC и оставить 0.25 BTC себе на адресе, абсолютно всегда идёт сдача. Вы отщипываете 0.7 BTC в данном случае от общей суммы, но сдача всегда возвращается вам на ваш новый адрес.

Теперь я постараюсь объяснить это более простым примером. Давайте представим так, что входы это обычные физические денежные купюры и любая транзакция, которая приходит на ваш адрес, формирует на нём новую купюру. Допустим я получила на свой первый адрес 150, на второй 250, на третий 500 и на четвёртый 70:

У меня на каждом адресе сформировалась купюра в соответствии с суммой на которую мне пришла входящая транзакция, 150, 250, 500 и 70. Эти купюры как раз таки и являются UTXO (непотраченными выходами). Теперь я могу эти купюры использовать для формирования новой транзакций, чтобы отправить свои деньги кому-то другому.

Допустим я хочу отправить человеку 120 рублей, представим что это рубли. Я ищу подходящий выход, в этом случае за меня это делает всё кошелёк автоматически, он подбирает самый подходящий выход, который более ближе подходит к вашей отправляемой сумме, в моём случае это 150. Я беру купюру в 150 рублей, отправляю человеку 120, а сдача от купюры идёт мне на мой новый адрес:

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

Далее ваш адрес 5 уже находится в списке ваших выходов, а купюра с первого адреса убирается потому что мы её уже использовали:

Но не всегда хватает одной купюры чтобы оплатить транзакцию. Допустим вы хотите отправить транзакцию на сумму 800 рублей. У вас не хватает по отдельности каждого выхода, потому что каждый из них составляет меньше чем 800. Поэтому транзакция автоматически объединяет сразу три ваших купюры вместе и они в сумме составляют 900 рублей. Они объединяются вместе. Купюры суммой в 800 рублей идут на адрес получателя, а сдача в 99 рублей идёт на ваш шестой адрес:

Именно так работают биткоин транзакции. Предположим, что я эти купюры потратила, в 150, 250 и 500. У меня остаются только вот эти:

Абсолютно тот же принцип применяется к биткоинам. Просто заменяем рубли на BTC:

Допустим я хочу отправить сумму в 1.5 BTC, но у меня нет на одном выходе столько средств, поэтому объединяется два моих выхода в одну транзакцию и она идёт на адрес получателя, а оставшаяся сдача идёт обязательно мне, на мой седьмой адрес:

Так выглядит любая стандартная транзакция в сети биткоина. Сдачи не может быть только в том случае, если вы абсолютно полностью тратите свой выход. Это базовый принцип работы биткоина который необходимо вам знать. Именно биткоина, потому что в эфириуме и эфироподобных монетах транзакции работают по другому. В эфириуме как раз таки используются более простой принцип транзакций. В эфириуме есть один адрес, там просто есть баланс, который как раз таки отщипывается. Допустим у меня на балансе в эфириуме лежит 1500 рублей, а я хочу отправить человеку 1000. Я отправляю ему 1000, но при этом никакой сдачи нет, у меня просто отщипывается 1000 и у меня остаётся 500:

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

Зачем это вообще нужно в биткоине? Это очень важная вещь для понимания того, как сохранить анонимность своих средств. Вам нужно понимать как контролировать свои непотраченные выходы. Я сейчас покажу небольшой пример для того, чтобы вы понимали почему это важно.

Давайте представим, что у вас есть четыре непотраченных выхода:

В рублях буду опять же объяснять для лучшего понимания. Вы всегда принимали каждую транзакцию на свой новый адрес, то есть, эти адреса никак не связаны между собой. Допустим транзакцию на адрес номер 1 вы получили с биржи Binance, транзакцию на адрес 2 вы получили от друга Миши, на третий ваш адрес пришла сдача с той суммы на которую вы купили что-то в даркнете, а на четвёртый адрес пришла сдача с покупки какой-то вещи в обычном легальном магазине:

Вы знаете, что данные транзакции нельзя никак связать, потому что вы сделали всё отдельно. С Binance вы вывели на один адрес, от Миши вы приняли транзакцию на второй адрес, вы купили запрещёнку в даркнете, а сдача пришла на третий адрес, а с белой покупки в магазине сдача пришла на чётвёртый адрес.

Что же теперь произойдёт если вы будете неграмотно заниматься отслеживанием своих входов и выходов? Например вы захотели отправить своему другу Пете 800 рублей. Из-за того, что у вас не хватает купюр по отдельности, у вас объединяются три купюры и формируют выход на адресе Пети:

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

И допустим человек, который продал вам вещь в даркнете знает, что третий адрес это ваш, потому что с данного адреса ему пришла оплата. Но теперь увидев вашу новую транзакцию, он знает что ещё и ваши 2 и 4 адреса, тоже ваши. Например вы указали свой адрес номер 4 где-то для сбора пожертвования вконтакте или на ютубе, думая что он чист. А тут вам напишет в личные сообщения этот самый продавец и настойчивого попросит денег, иначе расскажет родственникам и вашим друзьям, что вы покупали что-то незаконное. Это ещё повезёт если напишет именно он, а не ФСБ придёт домой, ведь они также мониторят транзакции таким же образом, смотрят откуда они приходят человеку который продаёт что-то незаконное, а потом пытаются всё связать в одну цепочку.

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

Ещё есть такая вещь как пылевая атака. Предположим у вас есть биткоин адрес, вы купили что-то незаконное в даркнете и потратили с него полностью всю сумму, у вас там осталось 0. Вы забыли про этот адрес и пользуетесь другим. Вы ведёте свой ютуб канал, телеграм блог, вк страницу и оставили новый чистый адрес для сбора пожертвований, или ещё для какой-то цели, например дали его кому-то при продаже какой-то белой услуги. Хакер смотрит откуда приходили деньги на кошелёк продавца в даркнете и отыскивает полностью потраченные биткоин адреса покупателей с нулевым балансом. Далее он закидывает на эти адреса по 0,0000001 BTC. Сумма настолько маленькая, что её называют пылью и очень часто люди не обращают внимание на подобные транзакции даже не замечая изменения на балансе. Транзакция хакера образует непотраченный выход на вашем чёрном биткоин адресе. И когда вы в следующий раз что-то покупаете со своего чистого биткоин адреса, вполне законное и чистое, либо меняете деньги на валюту своей страны в обменнике и вам не хватает на нём средств, то ваш чистый адрес добавляет те самые 0,0000001 с чёрного адреса к чистому, а также других ваших адресов и объединяет это в одну транзакцию. Всё. Это отображается в открытом доступе блокчейна и хакер связывает ваши адреса. А далее просто вставляет в гугл поиск ваш чистый адрес и находит вашу страницу вк или ютуб канал где вы оставили свой чистый адрес, а потом начинает вас шантажировать и просит перевести деньги, либо расскажет вашим друзьям и родственникам о вашей покупке в даркнете. Таким же методом очень часто пользуются спецслужбы для вычисления покупателей запрещёнки.

Покажу на примере.

Я отправила себе две транзакции по 0.00003 BTC. В общей сумме у меня получилось 0.0006 BTC:

Можно посмотреть, что у меня сформировалось два непотраченных выхода с разными адресами которые я могу потом использовать для создания новой транзакции:

Давайте сейчас это продемонстрирую, вписываю сумму которую я хочу перевести:

Нажимаю предпросмотр:

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

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

Теперь я могу посмотреть в любом блокчейн обозревателе, как и любой другой человек абсолютно все транзакции всех людей. Давайте посмотрим как это будет выглядеть. Например в этом https://blockstream.info:

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

Теперь поговорим о том как контролировать свои UTXO (непотраченные выходы). Это очень важно делать, чтобы сохранить анонимность своих средств.

Сейчас у меня открыт мой кошелёк Wasabi Wallet на котором есть несколько непотраченных выходов:

У данного кошелька есть отличная функция. Данная функция позволяет выбирать UTXO которые вы хотите потратить. Как вы видите у меня здесь есть 10 непотраченных выходов, то есть это было 10 транзакций на 10 моих разных адресов:

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

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

Но 9 выходов на этом кошельке у меня грязные:

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

Если я выберу вот так вот, то объединю эти 2 выхода в одну транзакцию, грязные и чистые:

Если вы не выбираете это вручную, то кошелёк автоматически может это делать за вас, многие об этом даже не задумываются. А далее тут уже будет видно https://blockstream.info что два этих ваших выхода связаны между собой и принадлежат одному человеку. Соответственно вы сразу же свой чистый выход деанонимизируете полностью, потому что вы его использовали вместе со своими грязными деньги. Это делать ни в коем случае нельзя. Поэтому в Wasabi Wallet это невероятно полезная функция для сохранения вашей анонимности.

Если же я возьму Trust Wallet, то в нём такой функции нет:

Кошелёк сам, на своё усмотрение возьмёт выходы, соединит их вместе и отправит транзакцию. Это может привести к тому, что транзакция сформируется из выходов, из которых один будет чистым, а другой грязным. Поэтому я им не пользуюсь, потому что я не могу быть уверена в том, что данный кошелёк не сформирует мне такую ненужную транзакцию. Соответственно очень много кошельков также не имеют подобной функции. Если вы на это забиваете, то рано или поздно все ваши выходы перемешаются и стороннему наблюдателю будет известно какие адреса точно принадлежат вам. Очень много новичков даже не слышали о том, что существует UTXO, они используют один и тот же адрес, отправляют транзакции налево направо не задумываясь об этом.

Продолжим разбор анонимности в третьей части.