Книга: Биткойн для чайников
Получаем подтверждения
Разделы на этой странице:
Получаем подтверждения
Биткойн-транзакциям необходимы подтверждения — они появляются в сети, как только транзакции включаются в новый блок майнерами. (Читайте главу 4 для получения детальной информации о майнерах; это слово является производным от англ, miner — шахтер. Подсказка: кирка и фонарик вам не понадобятся.) Каждый блок, найденный в сети, включает некоторое количество биткойн-транзакций, произошедших чуть раньше. Эти транзакции затем распространяются по сети среди всех биткойн-узлов с целью определения подлинности.
Каждый блок, найденный в биткойн-сети после того, как транзакция была распространена, сможет — при условии, что транзакция подлинная, — предоставить одно сетевое подтверждение. Как уже упоминалось, минимум шесть подтверждений сети необходимо, чтобы "официально" считать биткойн-транзакцию расходуемой (см. следующий раздел).
Подтверждение в мире биткойна означает, что транзакция была признана действительной узлами сети. Без подтверждений транзакция все еще "происходит между" пользователями, и пока на блокчейне не появится некая форма подтверждения, транзакция представляет собой риск для отправителя и получателя. Определенно, транзакциям на подтверждение понадобится время, но это требование в большей степени — мера безопасности, чем просто досадный раздражитель.
Большинство биткойн-кошельков покажут биткойн-транзакцию как "потраченную" (spent), вне зависимости от количества подтверждений сети. Пользователи ПК могут увидеть статус вида "n/unconfirmed", где п показывает количество подтверждений, полученных транзакцией. Получение шести подтверждений в большинстве случаев может потребовать до часа времени, хотя бывают и исключения (в сторону увеличения).
Биткойн-клиент не может "заставить? сеть генерировать подтверждения, это действие всецело зависит от майнеров биткойна. Учитывая, что время между появлением биткойн-блоков равняется примерно 10 минутам, не существует способа повлиять на скорость получения подтверждения в период между блоками. Учитывая сказанное, становится понятным, что существует только один решающий фактор, т. е. момент, когда ваша транзакция будет включена в сетевой блок.
Если предположить, что информация о вашей биткойн-транзакция была распространена в сети как раз перед тем. как был найден новый блок, то первое подтверждение может быть получено довольно быстро. Однако, если ваша транзакция будет включена только в следующий блок — а данный процесс является совершенно случайным, — придется ждать чуть больше времени, чтобы получить первое подтверждение.
Главное правило в отношении транзакций следующее: биткойн-транзакция, у которой нет подтверждений, всегда является относительно высоким риском в смысле атаки двойной траты. Говоря упрощенно, двойная трата означает, что биткойн-пользователь может потратить свои средства в биткойн-кошельке дважды (подробнее о двойной трате читайте в главе 10). По факту любая транзакция, у которой еще нет шести подтверждений, несет в себе аналогичный риск. Тем не менее торговцы или платежные процессоры могут устанавливать собственное число необходимых подтверждений. Это правило не касается пользователей, которые пользуются кошельками на ПК, так как средства будут оставаться "неподтвержденными" до тех пор, пока не наберется именно шесть подтверждений сети. Пользователи мобильных устройств, в зависимости от того, какой кошелек они выбрали, обычно могут тратить поступившие им средства значительно раньше.
Обычные шесть подтверждений
Учитывая, что каждое подтверждение транзакции происходит в момент, когда в биткойн-сети найден новый блок — что происходит примерно раз в 10 минут, — шесть подтверждений могут появиться только спустя час. Как только транзакция обрела эти шесть подтверждений, монеты становятся доступными к трате для получателя.
Тот час, за который транзакция будет подтверждена, в общем случае может выступать в роли как благословения, так и проклятья. К тому же ожидание появления шести (или более) подтверждений дает дополнительную уверенность, что транзакция настоящая и что вы не стали жертвой атаки двойной траты на сеть биткойна. В конце концов, транзакции биткойна — не возмещаемые, и согласие на транзакцию, не получившую шести подтверждений, может оказаться финансовой катастрофой для получателя.
Имеются сведения о случаях, когда транзакция набрала шесть подтверждений в течение нескольких часов. Тем не менее подтверждения задерживаются все реже и реже, а время зависит от общей используемой для нахождения блоков вычислительной мощности.
Даже несмотря на то, что транзакция считается "подтвержденной" биткойн кошельком по получении шести и более подтверждений, это совсем не делает ее "подлинной" для протокола биткойна. Когда биткойн был создан, в его протокол была вписана некоторая часть кода, отвечающая за признание новых намайненных монет (найденных блоков) подлинными только после того, как они наберут 100 подтверждений. По факту большинство майнинговых пулов биткойна (как было упомянуто в главе 4) не будут высылать майнерам вознаграждения за блоки, пока не получат 120 подтверждений от сети.
Двойная трата
Сеть биткойна очень безопасна сама по себе, однако всегда присутствует риск двойной траты. С помощью двойной траты, как уже упоминалось, пользователь может потратить одну и ту же сумму дважды. Чтобы уменьшить шансы проведения подобной атаки, сеть биткойна закрепляет каждую отдельную транзакцию с помощью подтверждений.
В общих чертах самый большой потенциал для атак двойной траты появляется, когда торговцы или поставщики выдают товар или деньги сразу, как только транзакция появилась в сети. Эти неподтвержденные транзакции — также известные как транзакции нулевого подтверждения (zero confirmation transactions) — являются основным риском в смысле двойной траты. В результате всем биткойн-пользователям рекомендуется ждать как минимум 6 подтверждений перед тем, как пытаться пересылать полученные средства. Чем больше подтверждений имеет конкретная транзакция, тем выше шансы, что она подлинная и не является двойной тратой.
Шансы на успешное выполнение двойной граты биткойнов практически равны нулю. Нет системы, которая полностью устойчива к взломам, но протокол биткойна — это дру г ая разновидность технологии, которая потребовала бы достаточно больших усилий для обеспечения успешности атаки двойной траты. Ввиду вышесказанного существует пять потенциальных форм атак, связанных с двойной тратой. О них говорится в следующих подразделах.
"Гонка" (Race attack)
Торговцы и поставщики, принимающие платеж незамедлительно после тою, как заметят "0/unconfirmed"?транзакцию в своем кошельке, открыты к атаке двойной траты, если имела место мошенническая попытка успешно переслать торговцу одну транзакцию, одновременно отправив другую транзакцию, которая тратит ту же монету, запись о передаче которой естественным образом должна была первой попасть в блокчейн.
"Атака Финни" (Finney attack)
Атака Финни — это ложная двойная трата, которая требует участия майнера, как только блок был найден. Риск атаки Финни нельзя ликвидировать, вне зависимости от предосторожностей, предпринятых торговцем, однако необходимы участие майнера и особая последовательность обстоятельств. Таким образом, эта атака не тривиальна, не дешева в исполнении и имеет смысл для атаку ющего только в том случае, если его ждет существенная добыча.
Атака Вектор76 (Vector76 attack)
Вариант Вектор76 также иногда называют атакой одного подтверждения. Это комбинация атак Гонка и атаки Финни, при которой транзакция, имеющая одно подтверждение, все еще может быть потрачена дважды. Те же защитные действия, которые используются против атаки Гонка, заметно уменьшают риск успешности этой операции.
Брутфорс-атака (Brute force attack)
Атака грубой силы заключается в следующем. Атакующий присылает торговцу/сети транзакцию, которая платит торговцу, и в то же время тайно майнит форк (разветвление, создание ложного дубликата) блокчейна, в котором транзакция двойной траты включается вместо настоящей. После ожидания n подтверждений торговец отправляет товар. Если атакующий сможет найти больше чем n блоков к этому моменту, он останавливает свой форк и получает свои монеты обратно: в другом случае он может продолжить расширять свой форк с надеждой, что сможет поспевать за сетью.
Атака >50 (>50 percent attack)
Также известна как атака 51 процента. Если атакующий заполучил контроль более чем над 50 % мощности сети биткойна, вышеописанная брутфорс-атака имеет гарантированный шанс на успех. Так как атакующий может генерировать блоки быстрее, чем остальные участники сети, он может упорно развивать свой личный форк до тех пор, пока его ветка не станет длиннее, чем та, которая ведется честной сетью, преодолев любые препятствия. Больше деталей по этому вопросу можно найти по адресу: https://en.bitcoin.it/wiki/Double-spending.
Нулевые подтверждения
В мире биткойна назрел тренд: продавцы зачастую даже не беспокоятся о шести подтверждениях, сразу помечая транзакцию как завершенную. Такой отказ от ожидания шести подтверждений повышает шанс стать жертвой атаки двойной траты. Пока сама сеть биткойна не покажет подтверждения для транзакции, считать ее "выполненной" рискованно.
Тем не менее торговцы и платежные процессоры имеют право определять количество подтверждений, необходимое для подтверждения подлинности биткойн-транзакции. Тогда как большинство сервисов видят это число в пределах трех-шести подтверждений, остальные сервисы действуют, как только транзакция начинает распространяться по сети в своем неподтвержденном состоянии. Это не только позволяет быстрее завершить покупку на вебстраничке, но и вообще ускоряет завершение заказов.
Большинство торговцев, завершающих сделку при нуле подтверждений, продают недорогие или цифровые активы. Например, большинство баров и ресторанов будут считать транзакцию "завершенной? после нуля подтверждений, так как они защищены платежным процессором на случай двойной траты. Платежные процессоры вроде BitPay, BitKassa или Coinbase предоставляют торговцам некоторый вид защиты от двойной траты, даже если установлено нулевое число подтверждений для завершения транзакции.
Биткойн-транзакции нулевою подтверждения являются хорошим средством для бизнесменов и частных лиц получать биткойны быстро и безопасно, несмотря на риски, ассоциированные с таким подходом. Тем не менее раз получатель может подать в суд на платежный процессор с целью защититься от потери средств из-за атаки двойной траты, у него нет никаких причин не установить для своего сервиса нулевое число необходимых подтверждений.