Новость о том, что биржа биткойнов Mt Gox прекратила свою деятельность, не оказала действительно большого влияния на кибервалюту, как вы могли ожидать, но она может содержать урок о трудностях при смешивании валют и программного обеспечения.
Есть аргумент, что кибервалюты следует рассматривать как критически важные для безопасности системы. В большинстве случаев ошибка раздражает, но в критически важной для безопасности системе ошибка может привести к травмам или смерти — возможно, многим смертельным случаям.
Вы можете подумать, что это слишком, чтобы относить программно реализованную валюту к той же категории, что, скажем, автомобильная система управления, но есть признаки того, что пока что случайный подход к реализации программного обеспечения безопасности и транзакций биткойнов неприемлем.
Биткойн имеет очень хорошо проработанный, хотя и немного низкотехнологичный, подход к безопасности. Можно сказать, что в используемых алгоритмах нет ничего нового — именно то, как они работают вместе, плюс умная социальная инженерия, сделали биткойн явлением, которым он является сегодня.
Однако биткойн — это не только методы безопасности. Он также определяет ряд механизмов транзакций, которые гораздо менее известны и изучены.
Например, каждая транзакция содержит небольшой сценарий, который необходимо выполнить, прежде чем биткойны можно будет потратить. Первоначальное намерение состояло в том, чтобы этот сценарий можно было использовать для обеспечения уровня гибкости транзакции, который компенсировал бы отсутствие центрального банка биткойнов. Например, сценарий можно использовать для реализации сложных контрактов, таких как условное депонирование и размещение депозитов, которые нельзя потратить, пока не будет завершена полная сделка.
Сценарий по умолчанию просто проверяет, что лицо, у которого есть биткойны, является лицом, уполномоченным их тратить. Для этого он включает адрес назначения и требует, чтобы новый владелец предоставил открытый ключ и подпись, чтобы доказать, что он владеет соответствующим закрытым ключом.
Пока все хорошо, но еще в 2011 году Mt Gox допустила программную ошибку и включила нулевой адрес в транзакции, в результате чего было невозможно потратить монеты. То есть транзакция завершена, и монеты были переведены, но новый владелец никогда не мог их потратить. Эта простая ошибка удалила из обращения 2609 биткойнов и потеряла около 1,5 миллиона долларов по сегодняшним ценам.
Существуют и другие способы потери биткойнов из системы — обычно с использованием адреса назначения без доступа к закрытому ключу. Однако сценарий также является причиной второй проблемы — гибкости транзакций. Можно изменить коды операций в скрипте, чтобы он продолжал работать, но это изменит хэш транзакции. Это фактически создает две транзакции, которые перемещают один и тот же биткойн от владельца в одно и то же место назначения. Если все пойдет по плану, только один из них будет добавлен в цепочку блоков биткойн-майнерами.
Есть еще одна небольшая проблема, связанная с частичными расходами. Если вы потратите один из двух биткойнов, которыми владеете, вы можете сделать это, только передав право собственности на оба биткойна — одну транзакцию лицу, которому вы платите, и одну обратно себе в качестве «сдачи». Если цепочка блоков принимает измененную форму первой транзакции, это может привести к сбою второй транзакции «изменения», потому что хеш-код другой. Ваше решение — повторно отправить транзакцию изменения.
Часть картины, которая не ясна, заключается в том, можно ли использовать гибкость для удвоения расходов или иного кражи биткойнов. Mt Gox изначально приостановил вывод средств, обвиняя в атаке на податливость. Похоже, что происходило то, что хеш-значение использовалось для отслеживания транзакций, и когда измененный блок был принят, предполагалось, что транзакция не удалась, хотя на самом деле она работала. В этом случае говорят, что Mt Gox отправил биткойны второй раз, поэтому заплатил дважды.
Теперь Mt Gox признал, что 750 000 клиентских биткойнов были «потеряны», а 100 000 собственных «исчезли». После этой потери примерно в 500 миллионов долларов неудивительно, что компания объявила о банкротстве. Точные детали того, как пропали биткойны, не были объяснены, но, скорее всего, это еще одна ошибка в механизме транзакции. Цитата из недавнего пресс-релиза Mt Gox:
«В начале февраля 2014 года незаконный доступ через злоупотребление ошибкой в системе биткойнов привел к увеличению числа незавершенных транзакций передачи биткойнов, и мы обнаружили, что существует вероятность того, что биткойны были незаконно перемещены в результате злоупотребления этой ошибкой. В результате нашего внутреннего расследования мы обнаружили, что исчезло большое количество биткойнов. Хотя полный объем еще не известен, мы обнаружили, что примерно 750 000 биткойнов, депонированных пользователями, и примерно 100 000 биткойнов, принадлежащих нам, исчезли. высока вероятность того, что эти биткойны были украдены в результате злоупотребления этой ошибкой, и мы попросили эксперта изучить возможность подачи жалобы о преступлении и принять соответствующие меры «.
Так что в следующий раз, когда вы обнаружите давнюю ошибку в каком-либо коде, просто почувствуйте себя уверенным в том, что вы не кодируете валютные транзакции — если, конечно, вы этого не делаете.