Аннотация
В предложенной статье рассматриваются некоторые известные мифы о системе Bitcoin. Для полного понимания необходимо наличие общих знаний о Bitcoin и биткоинах.
Ключевые слова: биткоин, bitcoin
Даже в 2008 году, когда Сатоси Накамото разработал протокол и принцип работы системы Bitcoin, она уже тогда вызывала огромное количество вопросов. Когда ответ на вопрос не удается получить быстро, будь то в силу нежелания глубоко копать или прочих причин, то ответ на такой вопрос может быть додуман и превращен в миф. Не думаю, что стоит останавливаться на политических, идеологических и финансовых вопросах. В данной статье я бы хотел осветить ряд мифов, которые относятся к самой системеBitcoin, ее математическому устройству или к схеме протокола. Предполагаю, что базовые принципы ее устройства знакомы читателю. В противном случае, он с легкостью может получить общее представление из популяризаторских статей в интернете (например, [1-3]). В основном мифы будут связаны друг с другом, поэтому имеет смысл читать их именно последовательно.
1) Все транзакции - это перевод биткоинов с одного кошелька на другой
Чтобы разобраться в этом вопросе нужно сначала ответить на ряд более сложных. Раз криптовалюта так похожа на обычные деньги, то кажется, что и работа с ними должна быть похожа на работу с деньгами. Кошелек биткоинов в этом смысле для человека представляется чем-то вроде счета, и он волен переводить деньги свободно с одного счета на другой. Но это вовсе не так! Все транзакции в системе можно условно поделить на две части – входные и выходные. Входные транзакции – это такие переводы, которые ассоциированы с тем или иным кошельком, и владелец данного кошелька может ими распоряжаться. Выходная транзакция – это то, во что превращаются входные транзакции, когда владелец решает распорядиться своими средствами. Главное отличие транзакции в системе биткоин от транзакций, например, банковских, состоит в том, что транзакция не всегда указывает явно, куда будут переданы средства. Внутри транзакции передается скрипт на специальном языке программирования [4], результат исполнения которого и определяет принадлежность средств.
Напомню, что в основе протокола лежат, в том числе и следующие криптографические преобразования: пользователь генерирует закрытый ключ, из закрытого ключа выводится открытый ключ, из открытого ключа, путем хэширования выводится адрес кошелька в системе[5].
Одним из самых частых скриптов в транзакции является проверка обладания закрытым ключом. Для этого скрипт составлен так, что доказательством владения будет подпись данных. Но существуют и многие другие варианты скриптов. Сам скриптовый язык не прост, но он вполне позволяет переводить биткоины, например, на те кошельки, открытый ключ которых соответствует каким-то определенным требованиям, как-то: байтовое представление ключа является симметричным, или содержит байт 0xff ровно два раза. Использовать такую выходную транзакцию сможет любой человек, чей открытый ключ удовлетворяет данным требованиям. Более того, нельзя точно указать, кому принадлежит такая входная транзакция до тех пор, пока владелец явно не решит ей распорядиться. Именно в этот момент он укажет доказательство владения, опубликовав открытый ключ и подпись данных транзакции [6].
2) Все существующие (добытые) биткоины кому-то принадлежат
Этот миф легко развенчать, основываясь на том, что рассказано в предыдущем пункте. Дело в том, что раз транзакция имеет внутри себя некоторый скрипт, то есть вероятность, что скрипт будет написан неверно – это может быть как некорректный скрипт (имеющий ошибку в синтаксисе), так и корректный скрипт, для которого не существует возможности доказательства владения (например, одновременная проверка, что открытый ключ должен иметь все байты равные 0xff и сразу же, что эти же все байты равны 0xaa). Для таких скриптов уже никто не докажет владение, а соответственно никто не получит эти биткоины.
3) Одному закрытому ключу соответствует ровно один адрес кошелька в системе
Сразу ответим – одному закрытому ключу соответствует ровно два адреса в системе биткоин. Для того, чтобы разобраться почему так вышло, нужно немного рассказать о некоторых сущностях, лежащих в основе всей системы и протоколов. Закрытый ключ – это большое случайное число, а открытый ключ, который ему соответствует – это точка на эллиптической кривой. Из байтового представления открытого ключа и выводятся оба адреса кошелька. Дело в том, что один и тот же открытый ключ может иметь два различных байтовых представления, и для каждого из них адрес будет выведен свой.
Что же за представления это могут быть? Первое представление – это 65 байт. Первый байт содержит константу 0x04 (признак полной записи), затем следуют два набора по 32 байта, которые описывают координаты точки. Второе представление – короткая запись. Поскольку координаты x и уравнения кривой достаточно для восстановления координаты y. Единственно уточнение состоит в том, что при восстановлении возникает неопределенность в четности восстанавливаемой координаты. Поэтому в байтовом виде открытый ключ содержит 33 байта, первый из которых представляет собой одну из двух констант 0x02 или 0x03 (признак короткой записи и указание на четность), за которым следуют 32 байта координаты x точки.
Одним из следствий данной особенности является тот факт, что типовая транзакция проверяет не только обладание закрытым ключом, но и точное соответствие адресу. Не очень понятна, правда, необходимость такой проверки: минимальными затратами каждый владелец закрытого ключа может добавить и второй адрес в свой клиент, а значит и распоряжаться обоими кошельками.
4) Все кошельки имеют «файловую проекцию» и поэтому их легко украсть
Нередко можно встретить утверждение, что биткоины имеют проблему в безопасности следующего рода – основные клиенты для работы с биткоинами хранят данные владельца в файлах. Таким образом указывается, что потенциальный хакер может украсть такой файл и, узнав пароль от него, фактически похитить и все биткоины, ассоциированные с данным кошельком. Если провести аналогию с деньгами в банке, где потенциальный хакер может завладеть паролем от интернет-банкинга, то у пользователя такого интернет-банка есть хотя бы возможность обратиться в сам банк. Успешность такого обращения я оставлю за рамками статьи. А в случае с биткоинами обращаться куда-либо бесполезно – нет единого центра, который бы отменил транзакцию или оспорил ее.
Тем не менее, если у кого-то «достаточный» уровень паранойи, то он может сделать следующее: сам сгенерировать закрытый ключ, получить из него открытый и из него вывести нужный адрес, после чего с помощью типовой транзакции отправить на него средства. Таким образом, получатся биткоины ассоциированные с адресом, который не защищен каким бы то ни было файлом, а закрытый ключ может находится где угодно, от токенов, до памяти самого владельца. При необходимости воспользоваться средствами данного кошелька можно легко добавить данный кошелек в программу-клиент и вести типовую работу.
Выше я перечислил не все, но довольно-таки часто встречаемые мифы о биткоинах. Не буду даже пытаться утверждать, что большая их часть была охвачена: если рассматривать их все, то можно написать не один цикл книг. Чего только стоят вопросы об анонимности использования биткоинов, рассмотрение работы биткоин-миксеров, вопросы от том, что будет, когда Bitcoin исчерпает заранее установленный лимит создания новых биткоинов.
Обычно статьи о биткоинах принято заканчивать словами о том, что в будущем все деньги исчезнут и останутся системы, основанные на той же идеологии, что и биткоины. Или, наоборот, тем, что через полгода о биткоинах никто и не вспомнит. Я не могу делать такой прогноз, поскольку не обладаю нужной компетентностью. Но одно я могу сказать точно – Bitcoin – это отличная математическая и криптографическая система, анализировать которую можно долго и каждый раз найти что-то новое для себя. В этом качестве она точно займет свое место в книгах по криптографии. Например, программисты оценят открытый исходный код клиента, который прозрачно показывает реализацию всех используемых алгоритмов, а преподаватели могут приводить Bitcoin как хороший пример реализации криптографических протоколов, указывая какие уязвимости в системе электронных денег существуют и как они могут быть закрыты. Я разбираю протоколы, лежащие в основе системы Bitcoin, в рамках лекций «Криптографические протоколы» для 5 курса студентов МФТИ.