На этой неделе стало сенсацией, что австралиец Крейг Райт объявил себя легендарным создателем Биткоина, признавшись: он и есть Сатоши Накамото. Новость вызвала огромное волнение в криптовалютном сообществе. Многие стали на сторону Райта, так как его доказательства показались им достаточно существенными.
Масла в огонь подлил Гэвин Андерсен, один из основных разработчиков Биткоина. Он сказал по этому поводу:
«Во время пребывания в Лондоне я встречался с уважаемым доктором Райтом. Небольшая переписка по электронной почте практически убедила меня, что я общаюсь с тем же человеком, что и в 2010, и в 2011 году. Личная встреча только закрепила мою уверенность в том, что Крейг Райт это Сатоши.»
Однако, есть не менее убедительные доказательства того, что Райт не может быть Сатоши. Давайте сократим количество предположений до минимума и будем смотреть только на неопровержимые факты.
Крейг взял девятый по счёту блок из блокчейна, который был добыт 9 января 2009 года. Затем он взял сделку coinbase, то есть майнинговую транзакцию, создавшую 50 новых биткоинов для адреса 12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S
Хэш этой сделки 0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9
Затем транзакция была послана по адресу 12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S, который соответствует следующему открытому ключу:
0411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf974446
f82e160bfa9b8b64f9d4c03f999b8643f656b412a3
Теперь давайте найдём случай использования этого приватного ключа. Очевидно, что это будет любая транзакция, которая тратит выходы из кошелька, номер которого начинается с 12cb…
У нас есть открытый ключ, начинающийся с 0411.., и ему должен отвечать свой закрытый ключ. Он известен только Сатоши, поскольку это один из первых кошельков, созданных в сети Биткоина.
Крэйг выбрал транзакцию с хэшем
828ef3b079f9c23829c56fe86e85b4a69d9e06e5b54ea597eef5fb3ffef509fe.
Здесь мы видим, что из 28 биткоинов 10 переслали на следующий адрес: 1ByLSV2gLRcuqUmfdYcpPQH8Npm8cccsFg
А 18 биткоинов вернулись на кошелёк, номер которого начинается с 12cb… Чтобы создать такую подпись, нам нужно взять транзакцию, изменить её немного (выделив тело транзакции), применить процедуру хеширования дважды и использовать получающиеся данные в качестве входа для алгоритма подписи. Таким образом, подпись 3045 … = ECDSA (sha (sha (тело транзакции)). Важно иметь в виду, что тело транзакции известно всем или по крайней мере, получено из общеизвестных данных. Грубо говоря, оно содержит данные об адресе, на который отправитель пересылает деньги.
Крейг совершает следующие действия, но без последнего шага. Для этого он использовал такой алгоритм:
Запрашивается сырая транзакция
828ef3b079f9c23829c56fe86e85b4a69d9e06e5b54ea597eef5fb3ffef509fe:
биткоин-cli getrawtransaction
828ef3b079f9c23829c56fe86e85b4a69d9e06e5b54ea597eef5fb3ffef509fe
Результат:
0100000001ba91c1d5e55a9e2fab4e41f55b862a73b24719aad13a527d169c1fad3b63b512010000004948
3045022100c12a7d54972f26d14cb311339b5122f8c187417dde1e8efb6841f55c34220ae0022066632c5c
d4161efa3a2837764eee9eb84975dd54c2de2865e9752585c53e7cce01ffffffff0200ca9a3b0000000043410
4bed827d37474beffb37efe533701ac1f7c600957a4487be8b371346f016826ee6f57ba30d88a472a0e4ecd
2f07599a795f1f01de78d791b382e65ee1c58b4508ac00d2496b0000000043410411db93e1dcdb8a016b4
9840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c
03f999b8643f656b412a3ac00000000
В транзакции 828ef3b079f9c23829c56fe86e85b4a69d9e06e5b54ea597eef5fb3ffef509fe тратится первый выход:
12b5633bad1f9c167d523ad1aa1947b2732a865bf5414eab2f9e5ae5d5c191ba.
Тогда мы берём подлинник для этой транзакции:
12b5633bad1f9c167d523ad1aa1947b2732a865bf5414eab2f9e5ae5d5c191ba.
0411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf974446
4f82e160bfa9b8b64f9d4c03f999b8643f656b412a3
10.3. Используя сырую транзакцию
828ef3b079f9c23829c56fe86e85b4a69d9e06e5b54ea597eef5fb3ffef509fe
и подлинник, который мы имеем как результат предыдущей стадии, мы получаем данные, которые будут тогда хэшироваться и подписываться.
Результат:
0100000001ba91c1d5e55a9e2fab4e41f55b862a73b24719aad13a527d169c1fad3b63b512010000004341
0411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf974446
4f82e160bfa9b8b64f9d4c03f999b8643f656b412a3acffffffff0200ca9a3b00000000434104bed827d37474b
effb37efe533701ac1f7c600957a4487be8b371346f016826ee6f57ba30d88a472a0e4ecd2f07599a795f1f01
de78d791b382e65ee1c58b4508ac00d2496b0000000043410411db93e1dcdb8a016b49840f8c53bc1eb68
a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b
412a3ac000000000
Затем мы прилагаем hashcode (в нашем случае это 01000000) до конца данных. Результат:
0100000001ba91c1d5e55a9e2fab4e41f55b862a73b24719aad13a527d169c1fad3b63b512010000004341
0411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf974446
4f82e160bfa9b8b64f9d4c03f999b8643f656b412a3acffffffff0200ca9a3b00000000434104bed827d37474b
effb37efe533701ac1f7c600957a4487be8b371346f016826ee6f57ba30d88a472a0e4ecd2f07599a795f1f01
de78d791b382e65ee1c58b4508ac00d2496b0000
Эта строка является телом транзакции, готовой к созданию подписи. После этого Крэйг взял тело транзакции, полученное ранее, и прогнал его через SHA, чтобы получить строку
479f9dff0155c045da78402177855fdb4f0f396dc0d2c24f7376dd56e2e68b05
Которую он и разместил на своём сайте.
Далее мы раскрываем обман:
Крэйг взял тело транзакции, полученное выше, и положил в файл sn7-message.txt, приложенный к его статье. Естественно, если мы вычислим хэш, он будет таким, как нужно:
479f9dff0155c045da78402177855fdb4f0f396dc0d2c24f7376dd56e2e68b05
И, по-видимому, чтобы доказать факт, что он владеет приватным ключом, Крейг упоминает,
что 3045…= ECDSA (sha (479f9dff0155c045da78402177855fdb4f0f396dc0d2c24f7376dd56e2e68b05))
Но это только напоминает ключ по своей структуре. Также стоит отметить что следующая последовательность
MEUCIQDBKn1Uly8m0UyzETObUSL4wYdBfd4ejvtoQfVcNCIK4AIgZmMsXNQWHvo6KDd2Tu6euEl13VTC3ihl6X
UlhcU+fM4 =
Фактически другая последовательность, закодированная через Base64:
3045022100c12a7d54972f26d14cb311339b5122f8c187417dde1e8efb6841f55c34220ae0022066632c5c
d4161efa3a2837764eee9eb84975dd54c2de2865e9752585c53e7cce
Таким образом, даже при том, что статья Крэйга содержала определенные технические данные, которые могли ввести в заблуждение читателей, едва ли оказывается, что Крэйг владеет частными ключами Сатоши. К тому же, мы могли бы применить тот же самый процесс к другой сделке, чтобы произвести подобное «доказательство». Давайте применим логику, описанную выше, к абсолютно произвольной сделке:
Возьмём блок под номером 286
Возьмём его майнинговую транзакцию
00ff9e64c9a2e7793e6f8c2b04072b4b22648cdedd46cd1c3ae3d6a23c8ec1eb.
Которая посылает вознаграждение за блок на такой кошелёк:
1Jhk2DHosaaZx1E4CbnTGcKM7FC88YHYv9
У этого адреса есть следующий открытый ключ:
048b48e109f432a490522f8d0e9e833443809f65b8aa2558b94c1c15eb0fd3e24f32d58a088a2b0e5e694d0
5e7b981e5c9750827646eb81debc816c3c667eea5fd
Возьмите все транзакции для следующего адреса
1Jhk2DHosaaZx1E4CbnTGcKM7FC88YHYv9
Есть всего одна транзакция, которая тратит деньги с этого адреса:
d71fd2f64c0b34465b7518d240c00e83f6a5b10138a7079d1252858fe7e6b577.
Следовательно, сделка подписана приватным ключом, соответствуя тому же самому адресу:
1Jhk2DHosaaZx1E4CbnTGcKM7FC88YHYv9.
6. Тогда мы извлекаем сырую транзакцию
d71fd2f64c0b34465b7518d240c00e83f6a5b10138a7079d1252858fe7e6b577
биткоин-cli getrawtransaction
d71fd2f64c0b34465b7518d240c00e83f6a5b10138a7079d1252858fe7e6b577
Результат:
0100000001ebc18e3ca2d6e33a1ccd46ddde8c64224b2b07042b8c6f3e79e7a2c9649eff000000000048473
044022038ea59740da72eec2490a0b32fa6004139524fefba7e78c5d0aed40a5c07f39b02205b1adea529c3
cc5cdbb900a8515d778b8e982d63b13386d955962a93f70cd27101ffffffff0200f9029500000000434104f36
c67039006ec4ed2c885d7ab0763feb5deb9633cf63841474712e4cf0459356750185fc9d962d0f4a1e08e1a
84f0c9a9f826ad067675403c19d752530492dcac00f90295000000004341048b48e109f432a490522f8d
Транзакция
d71fd2f64c0b34465b7518d240c00e83f6a5b10138a7079d1252858fe7e6b577 тратит выход номер #0 от майнинговой транзакции:
00ff9e64c9a2e7793e6f8c2b04072b4b22648cdedd46cd1c3ae3d6a23c8ec1eb.
Возьмём первоисточник этого выхода и получим:
bitcoin-cli getrawtransaction
00ff9e64c9a2e7793e6f8c2b04072b4b22648cdedd46cd1c3ae3d6a23c8ec1eb 0
Результат:
048b48e109f432a490522f8d0e9e833443809f65b8aa2558b94c1c15eb0fd3e24f32d58a088a2b0e5e694d0
5e7b981e5c9750827646eb81debc816c3c667eea5fd
Используя сырую сделку и подлинник, мы извлекаем тело сделки, которая будет хэшироваться и подписываться.
Результат:
0100000001ebc18e3ca2d6e33a1ccd46ddde8c64224b2b07042b8c6f3e79e7a2c9649eff000000000041048
b48e109f432a490522f8d0e9e833443809f65b8aa2558b94c1c15eb0fd3e24f32d58a088a2b0e5e694d05e7
b981e5c9750827646eb81debc816c3c667eea5fdffffffff0200f9029500000000434104f36c67039006ec4ed2
c885d7ab0763feb5deb9633cf63841474712e4cf0459356750185fc9d962d0f4a1e08e1a84f0c9a9f826ad06
7675403c19d752530492dcac00f90295000000004341048b48e109f432a490522f8d0e9e833443809f65b8
aa2558b94c1c15eb0fd3e24f32d58a088a2b0e5e694d05e7b981e5c9750827646eb81debc816c3c667eea5f
dac00000000
10. Тогда мы добавляем последовательность hashcode, которая является 01000000.
Результат:
0100000001ebc18e3ca2d6e33a1ccd46ddde8c64224b2b07042b8c6f3e79e7a2c9649eff000000000041048
b48e109f432a490522f8d0e9e833443809f65b8aa2558b94c1c15eb0fd3e24f32d58a088a2b0e5e694d05e7
b981e5c9750827646eb81debc816c3c667eea5fdffffffff0200f9029500000000434104f36c67039006ec4ed2
c885d7ab0763feb5deb9633cf63841474712e4cf0459356750185fc9d962d0f4a1e08e1a84f0c9a9f826ad06
7675403c19d752530492dcac00f90295000000004341048b48e109f432a490522f8d0e9e833443809f65b8
aa2558b94c1c15eb0fd3e24f32d58a088a2b0e5e694d05e7b981e5c9750827646eb81debc816c3c667eea5f
dac0000000001000000
После этого мы применяем SHA256 к этим данным и получаем:
6b2bbb486994a570c0d3bcde506035a1f858983ac3c89881c6cbc63265ad9b66
Теперь мы имеем:
Данные мы подписываем:
6b2bbb486994a570c0d3bcde506035a1f858983ac3c89881c6cbc63265ad9b66
Открытый ключ:
048b48e109f432a490522f8d0e9e833443809f65b8aa2558b94c1c15eb0fd3e24f32d58a088a2b0e5e694d0
5e7b981e5c9750827646eb81debc816c3c667eea5fd
И цифровая подпись:
3044022038ea59740da72eec2490a0b32fa6004139524fefba7e78c5d0aed40a5c07f39b02205b1adea529c
3cc5cdbb900a8515d778b8e982d63b13386d955962a93f70cd27101
Та же самая подпись, закодированная через base64:
MEQCIDjqWXQNpy7sJJCgsy+mAEE5Uk/vun54xdCu1ApcB/ObAiBbGt6lKcPMXNu5AKhRXXeLjpgtY7EzhtlVliq
T9wzScQE =
13. В результате подпись была вынута из подлинника транзакции с выходом #0, которая тратит деньги со следующего адреса:
1Jhk2DHosaaZx1E4CbnTGcKM7FC88YHYv9.
После анализа вышеупомянутой информации можно с уверенностью сказать, что Крейг Райт не предоставил убедительных доказательств, и его новость является фальшивкой. Некоторые могут сказать, что это было очевидным с самого начала: в конце концов, уже многие люди утверждали, что они и есть Сатоши Накамото, и ни одному из них не удалось стать достаточно убедительным. Два года активно работая над развитием сети Биткоина, в один прекрасный момент он выбрал исчезнуть и не оставить следа.
Тем не менее, остаётся вероятность того, что Сатоши Накамото таким образом запутывает следы. Что может быть проще для этого, чем предоставить заведомо ложные доказательства и отвести от себя в дальнейшем все подозрения?