
Полная версия:
Доверие в долг. Криптовалюты как деньги и кредит: механизм, циклы, правила
Эти числа называются ключами, и их всегда два. Закрытый ключ биткоина — это случайно выбранное число от нуля до величины чуть меньше 2256, примерно 1,16 × 1077249. Авторы «Mastering Bitcoin» для сравнения приводят оценку, по которой в видимой Вселенной около 1080 атомов250.251 Угадать чужое число в таком пространстве невозможно, если оно выбрано действительно случайно. Слабые генераторы случайных чисел и ключи, придуманные «из головы», — отдельная история, и до неё мы дойдём, когда будем говорить о безопасности252.
Из закрытого ключа по особой формуле вычисляется публичный, и вычисление это работает в одну сторону. Из закрытого ключа публичный получить можно, из публичного закрытый нельзя253. «Нельзя» здесь означает, что современным компьютерам на это не хватит никакого разумного времени254. (Угроза от квантовых компьютеров — отдельный спор, к нему я вернусь в последней главе.)
Подпись мы разобрали в первой главе. Подписывает владелец закрытого ключа, а проверить подпись может любой, не зная самого ключа. Для тетрадки без хранителя в ней важнее всего две черты. Цифровая подпись своя для каждой записи, потому что подписывают отпечаток самой записи255. Подпись под строчкой «10 доярке» не подойдёт к строчке «100 доярке», и перенести её под другую запись нельзя256 (подпись на бумаге одна на все документы, и умелый человек её перерисует). А проверяют её публичным ключом, в котором нет ничьего имени. Каждый может проверить каждую подпись в каждой транзакции, а создать действительную подпись может только владелец закрытого ключа257.258259
В первой главе я сказал, что строчка в биткоине принадлежит владельцу ключа. Теперь это можно уточнить. Монета у Накамото — та самая цепочка подписей из первой главы: каждый владелец передаёт её следующему, подписывая перевод на публичный ключ нового владельца260. Поэтому строчка в тетрадке биткоина говорит примерно следующее: «10 единиц может потратить тот, кто предъявит подпись, которую проверяет вот этот публичный ключ». Имени в строчке нет. Пекарь в такой тетрадке — просто тот, у кого есть закрытый ключ, и никто, включая сеть, не проверяет, пекарь ли он.
Украсть строчку в такой тетрадке значит скопировать чужой ключ. Кошелёк в кармане пропадает, и вы это замечаете. Скопированный ключ остаётся и у вас, и о краже вы узнаете только тогда, когда вор подпишет перевод, а его подпись сеть примет так же, как вашу, потому что проверяет она только подпись261. Отменить такой перевод некому, как некому было бы отменить и ваш собственный.
Публичный ключ в тетрадку обычно тоже не пишут целиком. Туда пишут адрес, короткий отпечаток публичного ключа. «Старые» адреса начинаются с единицы и получаются двойным хешированием ключа с особой кодировкой, а современные начинаются с «bc1»262. Адрес можно спокойно раздавать, как номер для переводов, потому что отпечаток обратно не разворачивается и ключа по нему не узнать263.
Подпись доказывает, кто распорядился строчкой, но ничего не прячет. Транзакцию подписывают и рассылают всем узлам в открытом виде264, и из этой простой детали вырастает всё, что будет сказано ниже о следах.
Что лежит в кошельке
Если строчки тетрадки принадлежат ключам, то что такое криптовалютный кошелёк? Ответ в «Mastering Bitcoin» короткий. То, что многие называют кошельком биткоина, содержит только ключи, а сами монеты записаны в блокчейне265.266 Приложение в телефоне — это связка ключей и программа, которая читает тетрадку, находит в ней строчки, которые эти ключи могут потратить, и подписывает новые.
Откуда такая программа знает, что платёж настоящий? Полный узел, то есть узел со всей тетрадкой, проверяет всё сам, но держать всю тетрадку в телефоне неудобно, и Накамото предусмотрел упрощённую проверку. Пользователь хранит только заголовки самой длинной цепочки и получает ветку дерева Меркла, которая связывает его транзакцию с блоком267. Заголовки весят мало. При блоке раз в десять минут их цепочка, по расчёту Накамото, растёт на 4,2 МБ в год, и это помещалось даже в оперативную память компьютера 2008 года268. Такая проверка, писал Накамото, надёжна, пока сеть контролируют честные узлы, и уязвимее, если сеть захватил атакующий269.270 А предприятия, которые часто принимают платежи, по его словам, скорее всего, всё же захотят держать собственные узлы271.
Выходит, что владелец лёгкого кошелька снова кому-то доверяет. Хранителя у него нет, зато верить приходится честному большинству узлов и программе, которую он поставил себе в телефон. Из всех способов проверить платёж этот я бы не назвал самым надёжным.
Ещё дальше от тетрадки стоит тот, кто держит монеты на бирже. Ключ в этом случае у биржи, и в тетрадке монеты записаны за её ключами272. У клиента остаётся обещание биржи выдать их по первому требованию, то есть строчка в её собственной тетрадке. Биржа в этом случае — держатель чужих ключей, посредник того самого рода, от которого биткоин задумывали избавить, и дальше в книге мы увидим, как такие посредники подводили своих клиентов.
Ключей в кошельке много, и хранить каждый по отдельности неудобно. Поэтому в 2013 году появился стандарт BIP-39 (BIP — так в сообществе биткоина нумеруют предложения по улучшению). Одно случайное число, из которого выводятся все ключи кошелька, записывается последовательностью слов из словаря в 2048 слов: 12 слов для 128 бит случайности и 24 слова для 256 бит273. Эти 12–24 слова кошелёк показывает при создании274. Вывод отсюда жёсткий. Фраза из слов — это всё, чем вы владеете в этой тетрадке. Кто её знает, тот и владеет, а кто потерял её и не сохранил копии, тот больше не владеет ничем.

Рисунок 2.3. Что лежит в кошельке
С остатком на счёте всё устроено ещё непривычнее. В банковской выписке есть строка «остаток», и хочется думать, что в тетрадке биткоина против адреса тоже написано «1 BTC». Там такой записи нет. Счетов и хранимых остатков в биткоине нет вообще. Каждая транзакция создаёт выходы, то есть строчки с суммой и условием, каким ключом её можно потратить. Каждый полный узел держит перечень непотраченных выходов (по-английски UTXO), а остаток, который показывает приложение, программа вычисляет сама, складывая выходы, которые могут потратить её ключи275.
В тетрадке посёлка это значит, что строки «у пекаря 16» в ней нет. Есть отдельные строчки, и в каждой написано, сколько единиц и какой ключ может их потратить (здесь 10, там 6), и обе можно потратить ключом пекаря. Когда строчку тратят, её вычёркивают целиком и пишут новые. Такое устройство упрощает главную проверку. Чтобы поймать двойную трату, узлу не нужно пересчитывать ничей остаток, достаточно посмотреть, есть ли выход, на который ссылается транзакция, в перечне непотраченных276.
Выход проще всего представить как купюру определённого номинала, которая тратится только целиком277. Допустим, у вас есть один выход на 1 BTC, а заплатить нужно 0,3 BTC (числа условные и круглые). Ваша транзакция сошлётся на этот выход (такую ссылку называют входом), израсходует его весь и создаст два новых: 0,3 BTC получателю и сдачу вам. Накамото описал это в разделе 9 статьи. Обычно, по его словам, у транзакции либо один крупный вход, либо несколько мелких, а выходов не больше двух, платёж и сдача278.
Где же комиссия майнеру? Отдельной строкой она нигде не записана. Это разница между суммой входов и суммой выходов транзакции279. Если в нашем примере вы создадите выходы на 0,3 BTC и 0,6999 BTC, майнер получит 0,0001 BTC. А если забудете про сдачу и создадите только выход на 0,3 BTC, остальные 0,7 BTC тоже достанутся майнеру, и спросить их будет не с кого280. Такую арифметику делает за вас программа кошелька, но знать механизм полезно, потому что в тетрадке без хранителя ошибку в расчёте исполнят так же точно, как правильный расчёт.
Платить комиссию заставляет теснота. Страница ограничена по размеру и заполняется почти до края281, а майнер получает комиссии со всех строчек, которые включил в свою страницу282. Когда желающих больше, чем мест, ему выгоднее взять строчки, за которые оставили больше, и строчка без комиссии рискует ждать своей очереди долго.
Считает программа в целых числах самой мелкой единицы. В одном биткоине 100 млн сатоши, и меньше одного сатоши в транзакции записать нельзя283. Эта деталь пригодится нам в последнем разделе.
В Ethereum, для сравнения, есть аккаунты с остатком, похожие на счета, и одними управляет закрытый ключ, другими — программный код284. К ним мы придём в главе 4.
Проследим один платёж от начала до конца. Допустим, вы платите знакомому 0,3 BTC с того самого выхода в 1 BTC (пример условный).
Программа кошелька находит в тетрадке выход, который может потратить ваш ключ, и составляет транзакцию: вход ссылается на этот выход, один новый выход на 0,3 BTC ведёт на адрес знакомого, другой, со сдачей, на ваш свежий адрес, а разница между входом и выходами остаётся майнеру285.
Программа подписывает транзакцию вашим закрытым ключом. Ключ из телефона никуда не уходит, уходит только подпись286.
Транзакция рассылается всем узлам, и каждый проверяет, что подпись действительна, а выход, на который она ссылается, ещё не потрачен287.
Майнер включает транзакцию в свой будущий блок. Она становится листом дерева Меркла, её хеш входит в корень, корень — в заголовок288.
Майнер перебирает nonce, пока отпечаток заголовка не окажется ниже порога, и рассылает найденный блок289.
Узлы проверяют блок целиком и начинают строить следующий поверх его отпечатка. Ваш выход в 1 BTC исчезает из их перечня непотраченных, а два новых в нём появляются290.
С каждым следующим блоком переписать вашу транзакцию становится дороже291.
Ни на одном шаге не участвует никто, кто знал бы ваше имя, и ни на одном шаге биткоины не «переезжают» из одного кошелька в другой. Меняется только перечень выходов в тетрадке, и в нём появляется строчка, которую может потратить ключ вашего знакомого.
Сборку полезно проверить на прочность тем же способом, каким мы собирали посёлок, только в обратную сторону: убирать по одной детали и смотреть, что сломается.
Без отпечатков в заголовках страницы ничем не связаны, и любой двор может тихо поправить свою копию, а спор о том, чья копия верна, решать будет нечем.
Без доказательства работы отпечатки остаются, но пересчитать их после правки стоит секунды, и переписанная тетрадка выглядит не хуже честной.
Без проверки каждым узлом майнер мог бы вшить в страницу строчку, которой не было, или потратить чужой выход, и остальным пришлось бы ему верить. Он стал бы хранителем.
Без подписей любой мог бы составить строчку, которая отдаёт чужие монеты ему, и узнать, кто её написал, было бы нечем.
Каждая деталь закрывает свою дыру, и ни одна не закрывает чужую. Поэтому вопрос «надёжен ли блокчейн» я советую всякий раз уточнять вопросом, о какой детали речь и против чего она защищает.
Всё на виду, кроме имён
Анонимен ли биткоин? В первой главе я обещал вернуться к строчке из анонса Накамото, где говорилось, что участники могут быть анонимны.
Статья осторожнее анонса. В разделе о приватности Накамото строит её на том, что публичные ключи не связаны с личностями. Все транзакции объявляются открыто, и посторонние видят, что кто-то отправил сумму кому-то, но не видят, кто и кому292.293 Он сравнивает это с лентой фондовой биржи, где время и объём сделок публичны, а стороны нет294.
Открытость здесь заложена в саму конструкцию, и причина нам знакома по первой главе. Там Накамото объяснял, что убедиться в отсутствии двойной траты можно, только зная обо всех транзакциях, и поэтому транзакции нужно объявлять публично295. Хранитель знает всё, а посторонние не знают ничего, и тайна вкладов держится на том, что тетрадку видит только он. Если хранителя убрать, тетрадку должны видеть все, иначе двойную трату ловить некому. Прятать записи стало нельзя, и приватность пришлось перенести с записей на имена.
Там же Накамото называет и слабые места. Он советует заводить новую пару ключей для каждой транзакции и признаёт, что транзакции с несколькими входами всё равно раскрывают общего владельца, а если раскрыт владелец одного ключа, по связям можно раскрыть и другие его транзакции296. Так что миф об анонимности биткоина держится скорее на строчке из анонса, чем на самой статье.
Допустим, вы выложили в сеть один адрес для пожертвований и годами получаете на него деньги. Любой, кто откроет этот адрес, увидит каждый платёж, его сумму и время, сложит их и узнает, сколько вы получили, а заодно увидит, куда вы эти деньги потом отправляли297. Новый адрес для каждого платежа делает такую картину труднее для чтения, но, как признавал сам Накамото, связать адреса одного владельца всё равно можно298.
Точное слово для того, что описал Накамото, — псевдонимность: имени в тетрадке нет, но каждый шаг каждого псевдонима записан навсегда и виден всем.
Посёлок показывает, как псевдоним превращается в имя. Допустим, в тетрадке вместо имён стоят номера, и пекарь для каждой строчки берёт новый номер. Однажды ему нужно заплатить 10, а на одном его номере 6 и на другом 4. Он подписывает платёж сразу двумя номерами, и с этой минуты весь посёлок знает, что оба номера принадлежат одному человеку. Сдачу он получает на свежий номер, но соседи могут догадаться, какой из новых номеров — сдача, и приписать пекарю и его, ведь сдача возвращается тому, кто платил. А если однажды он купил молоко у доярки, которая знает его в лицо, то имя получает весь связанный клубок номеров сразу.
В 2013 году группа исследователей, в основном из Калифорнийского университета в Сан-Диего, проделала это на настоящей тетрадке299.300 Они взяли все транзакции биткоина к апрелю 2013 года и применили к ним два правила из нашего посёлка: правило общих входов («ключи, подписавшие одну транзакцию, принадлежат одному владельцу») и правило адреса сдачи. Такое склеивание адресов в группы называют кластеризацией, и в этой работе она свела около 12 млн публичных ключей к 3,4 млн групп301.
Дальше группам нужно было дать имена, и исследователи просто стали покупать. Они платили биржам, онлайн-кошелькам, магазинам и игорным сайтам, заказывали в том числе кофе, серебряные монеты и кепку, и каждая покупка помечала адрес продавца302. Кластеризация разнесла эти метки по группам, и в итоге авторы назвали владельцев групп, в которых было больше 1,8 млн адресов303.
Авторы не скрывают, что метод небезупречен. Правило общих входов следует из самого устройства транзакций и почти не ошибается. Правило сдачи опирается на привычки программ-кошельков: его первая версия дала 13% ложных срабатываний, а после доработки всё равно слепила ложную «сверхгруппу» из 1,6 млн ключей, так что правило пришлось уточнять ещё раз304. Главный вывод статьи от этого не меняется. Деньги в биткоине сходятся к крупным сервисам, прежде всего к биржам, и ведомство, которое может затребовать у этих сервисов данные клиентов, сумеет выяснить, кто кому платит; поэтому авторы сочли биткоин непривлекательным для отмывания денег в больших масштабах305.
След остаётся и в самой сети. В 2014 году исследователи показали, что псевдоним можно связать с IP-адресом компьютера, с которого рассылают транзакции, и для этого хватает нескольких машин306.307 Сетевую часть биткоина с тех пор меняли, и я не знаю, работает ли эта атака сегодня308.
Теми же правилами пользуются и коммерческие аналитики, например компания Chainalysis309.310 Надёжность их выводов проверял американский суд. Романа Стерлингова обвиняли в том, что он держал биткоин-миксер Bitcoin Fog, сервис, который перемешивает монеты разных клиентов, чтобы запутать след311. Защита называла программу Chainalysis Reactor «лженаукой» без рецензирования и без известного уровня ошибок. В феврале 2024 года судья Рэндолф Мосс признал, что не все правила программы прошли рецензирование и учёта ошибок компания не ведёт, но счёл программу надёжной и допустил её выводы к присяжным312.313
В том же решении судья назвал транзакции биткоина одновременно исключительно анонимными и исключительно публичными и оговорил, что выводы программы можно проверить вручную по открытому блокчейну, с блокнотом, карандашом и несколькими часами работы314. Присяжные признали Стерлингова виновным, его приговорили к 12,5 года заключения315, а 25 сентября 2026 года апелляционный суд оставил приговор в силе и не нашёл ошибок в том, как районный суд допустил экспертные доказательства316.
Решение судьи касается того, можно ли показывать такие доказательства присяжным. Научной проверкой точности метода не было ни оно, ни апелляция, и сторонники Стерлингова после приговора называли его основанным на лженауке317. Суды этот спор решили, а вопрос о том, как часто ошибается кластеризация, остаётся открытым.
Два дела показывают, как след доводит следствие до самих денег. В первом 8 мая 2021 года американская компания Colonial Pipeline заплатила группе вымогателей DarkSide выкуп примерно в 75 BTC318. 7 июня Министерство юстиции США объявило, что изъяло из них 63,7 BTC. По тексту заявления, следствие изучило публичный реестр биткоина, проследило несколько переводов и установило, что монеты переведены на адрес, закрытый ключ от которого есть у ФБР319.320 Как ФБР получило ключ, не сказано ни в заявлении, ни в документах суда321.
Проследить деньги позволила открытая тетрадка, а забрать их — ключ. Без ключа следствие видело бы монеты на адресе, но сдвинуть их не смогло бы.
Второе дело длиннее. В 2016 году биржу Bitfinex взломали и вывели с неё 119 754 BTC322. Бо́льшая часть украденных монет почти шесть лет пролежала в кошельке, адреса которого видел весь мир323. Каждый, кто открывал эти адреса в обозревателе блоков, мог убедиться, что монеты на месте, и любой их сдвиг был бы виден так же открыто. В феврале 2022 года Министерство юстиции объявило об аресте Ильи Лихтенштейна и Хизер Морган по обвинению в сговоре с целью отмывания этих денег и об изъятии больше 94 000 BTC324.325 Изъятие и здесь прошло через ключ, а файлы с ключами следствие нашло в онлайн-аккаунте Лихтенштейна326. Во взломе его тогда не обвиняли, и признал он его сам в августе 2023 года, когда оба признали вину в сговоре с целью отмывания327.
По материалам Минюста 2024 года, Лихтенштейн стёр с серверов Bitfinex учётные данные и журналы, которые могли его выдать328. Журналы на серверах биржи стереть удалось, а строчки в тетрадке биткоина стереть не может никто, в том числе тот, кто их написал.
Биткоин, выходит, псевдонимен. Имени в тетрадке нет, зато каждый платёж каждого псевдонима записан навсегда и доступен любому, и достаточно одной точки, где след касается реального мира (биржи с проверкой личности, покупки с доставкой, IP-адреса), чтобы к псевдониму прикрепилось имя. Если приватность для вас важна, исходить разумнее из того, что каждый ваш платёж будет виден всегда.
Когда ключа больше нет
Обратная сторона той же конструкции видна в деле, которое в январе 2025 года рассмотрел Высокий суд Англии и Уэльса. Джеймс Хауэллс добивался от городского совета Ньюпорта доступа к свалке, куда в 2013 году попал его жёсткий диск. На диске, по словам истца, лежал ключ от 8000 BTC, намайненных им в начале 2009 года. Суд дело прекратил, потому что по британскому закону всё, что доставлено на свалку, становится собственностью совета329.330 Попутно суд написал, что биткоины — не материальное имущество и ни на жёстком диске, ни на свалке их быть не может331. Сам того не добиваясь, он дал лучшее определение кошелька, какое я знаю. Монеты лежат в тетрадке, доступной каждому, а на диске под слоем мусора лежит только возможность ими распорядиться.
Если вы забыли пароль от банка, вы идёте в отделение, показываете паспорт, и хранитель восстанавливает вам доступ, потому что он знает вас и ведёт вашу строчку сам. В тетрадке биткоина пойти не к кому. Сеть не знает, кто вы, и признаёт только подпись, а подписать без ключа нельзя332. На этом же правиле держится и то, что в обычное время вашу строчку никто не может заморозить (исключение появится в последнем разделе).
Пусть ключ потерял пекарь. Его строчки по-прежнему стоят в каждой копии тетрадки, их видят все сто дворов, но воспользоваться ими не может ни один двор, включая самого пекаря. Никому другому строчки тоже не переходят и так и стоят в тетрадке, пока она существует.
Защита от этого в тетрадке без хранителя одна, и это копия ключа, которую вы храните сами. Фраза из 12–24 слов, о которой шла речь выше, восстанавливает все ключи кошелька, если её копия записана и сохранена отдельно от телефона333. У Хауэллса такой фразы быть не могло, потому что стандарт появился только в 2013 году334, через четыре года после того, как он, по его словам, намайнил свои монеты335. Хранение такой копии и её слабые места я подробно разберу в главе 12.
Точного счёта строчкам, оставшимся без ключа, нет ни у кого. Одну из известных оценок сделала в 2020 году компания Chainalysis. По её подсчёту, около 3,72 млн BTC к тому времени не двигались пять лет и дольше, и компания сочла их, скорее всего, потерянными336. У этой оценки есть слабое место. Потерянной монету делает отсутствие ключа у владельца, а извне этого не проверить, поэтому на деле считали монеты, которые давно не двигались337. Часть давно лежащих монет, вероятно, намайнил в самом начале работы сети сам Накамото338, и никто не знает, лежат они или потеряны. Поэтому, когда вы читаете, что количество биткоинов строго ограничено, помните, что это предел записи в тетрадке, а сдвинуться с места из записанного может заметно меньше.
Ночь, когда тетрадку переписали
До сих пор я описывал тетрадку, которую нельзя тайно переписать. Осталось показать случай, когда её переписали открыто.
15 августа 2010 года, в 19:04 по всемирному времени, пользователь форума биткоина под ником lfm сообщил, что блок 74 638, судя по всему, использовал ошибку в сети: через переполнение целого числа в нём получена отрицательная общая сумма транзакции339.340 В блоке оказалась транзакция, которая создала 184 467 440 737,095 516 16 BTC на три адреса. Два адреса получили примерно по 92,2 млрд BTC, а майнер, нашедший блок, — лишние 0,01 BTC, которых до этой транзакции не существовало341. Всего же биткоинов по правилам выпуска будет чуть меньше 21 млн342.
Причина была в арифметике. Программа, как мы видели, считает в целых сатоши343, а целое число в компьютере занимает ограниченное число разрядов. Код, проверявший транзакции, не учитывал случая, когда выходы так велики, что при сложении переполняют это число344. Получившаяся сумма ровно равна 264 сатоши, а каждый из двух огромных выходов близок к 263, то есть к самому большому числу, которое помещается в 64-разрядную ячейку со знаком345. Похоже на механический счётчик пробега, который после последней девятки перескакивает на ноль. Сумма двух гигантских выходов «проворачивалась» в маленькое (по первому сообщению, отрицательное) число и проходила проверку, что выходы не больше входов346.
Дальше события шли быстро, и все они сохранились в архиве форума347. В 20:59 Накамото выложил первые проверки кода. В 21:06 он попросил участников остановиться: будет полезно, если люди перестанут генерировать блоки, потому что, вероятно, придётся заново построить ветку вокруг текущей, и чем меньше они генерируют, тем быстрее это получится348.349 Логика просьбы понятна из той же фразы. Каждый новый блок на ошибочной ветке удлинял её, и исправленной ветке пришлось бы догонять больше. Чем меньше блоков строилось поверх ошибки, тем быстрее её можно было обойти. В 21:40 исправление было в хранилище кода, а в 23:17 вышли готовые сборки версии 0.3.10350. От первого сообщения до исправления прошло около двух часов сорока минут, до готовой программы — около четырёх с четвертью351.
Новая версия добавила правило, по которому узлы отвергали транзакции с переполнением, а заодно и транзакции с выходом больше 21 млн BTC352. После этого тетрадка разветвилась. Узлы со старой программой продолжали строить на ошибочной ветке, а узлы с новой отвергали блок с ошибкой и строили другую. Когда исправленная ветка обогнала ошибочную (по вики сообщества, на блоке 74 691, примерно через пятьдесят блоков), её приняли все узлы353.354 Обычные транзакции из ошибочной ветки вошли в исправленную, и пострадали только те, кто успел намайнить блоки в ошибочной ветке после 74 638, потому что их награды по 50 BTC исчезли355.356
Представим то же самое в посёлке. Однажды утром в тетрадке обнаруживается страница, на которой кто-то приписал себе строчек больше, чем может быть во всём посёлке. Часть дворов уже подшила её и пишет следующие страницы поверх. Вырвать страницу из чужой копии никто не может. Тогда дворы договариваются о новом правиле, по которому такая страница недействительна, и продолжают тетрадку с последней честной страницы. Дворов с новым правилом больше, их версия растёт быстрее, и в какой-то момент отставшие переходят на неё.

