Блокчейн-тайник: сообщения, которые майнеры шифруют в блокчейне



Первым майнером в сети Bitcoin стал Сатоши Накамото: 3 января 2009 года он добыл первый блок, награда за который на тот момент составляла 50 биткоинов. Тогда же он оставил первое сообщение в блокчейне биткоина: «The Times 03/Jan/2009 Chancellor on brink of second bailout for banks». Это заголовок статьи из британской газеты The Times, выпущенной в тот же день. Таким образом Сатоши подтвердил дату запуска биткоина, и, возможно, — учитывая, что это был период финансового кризиса — этим сообщением он также хотел обратить внимание на проблемы банковского сектора, на смену которому должны прийти децентрализованные криптовалюты.

Шифрование в блокчейне

Всемогущие майнеры

Первой в каждом блоке биткоина является так называемая coinbase-транзакция. Она создает новые монеты и направляет майнеру награду. Если посмотреть на обычную транзакцию, она будет иметь входы (input) и выходы (output): адреса, с которых биткоины отправляются, и адреса, на которые они отправляются. Однако в coinbase-транзакции нет входа в привычном смысле, то есть в виде «входного» количества биткоинов: новые монеты возникают как бы ниоткуда. Но вместо этого у нее есть coinbase-параметр, который может содержать произвольные данные (они нигде не используются). «Транзакция, в рамках которой майнер получает вознаграждение за обнаружение блока (coinbase transaction), номинально ничем не отличается от остальных — у нее тоже есть input и output. Другое дело, что в input можно написать что угодно — эта информация игнорируется при проверке блока на валидность», — так поясняет эту систему сооснователь Modern Token Александр Гаркуша. Таким образом, майнер может добавить на блокчейн до 100 байт данных в шестнадцатеричном формате.

Молитва майнера

В 2011 году один из майнеров пула Eligius под ником Luke-Jr начал включать в добываемые блоки католические молитвы на английском и на латыни. Любопытно, что пул был назван в честь святого Элигия — покровителя золотых дел мастеров, чеканщиков, шахтеров, нумизматов и коллекционеров монет.

14 блоков, добытых между 139525 и 140135 блоком, содержат полный текст молитвы Divine Praises — в каждый блок майнер включал по строке. По данным сервиса Messages from the Mines, собирающего записанные на блокчейне сообщения, это стало первой молитвой в блокчейне биткоина. Далее последовало множество других, включая знаменитую «Ave Maria»: «Ave Maria, gratia plena, Dominus tecum. Benedicta tu in mulieribus» («Радуйся, Мария, благодати полная! Господь с Тобою; благословенна Ты между женами», блок 141138) и строки из других молитв: «and life everlasting, through the merits of Jesus Christ, my Lord and Redeemer» («и жизнь вечную, через заслуги Иисуса Христа, моего Господа и Спасителя», блок 140495); «O Heart of Jesus, burning with love for us, inflame our hearts with love for Thee» («O, Сердце Иисуса, пылающее любовью к нам, воспламени наши сердца любовью к тебе», блок 141862), «Jesus, meek and humble of heart, make my heart like unto thine!» («Иисус, кроткий и смиренный сердцем, сделай мое сердце подобным твоему!», блок 142353).

Это вызвало недовольство многих майнеров, которые начали оставлять в блокчейне свои комментарии, прося «прекратить загрязнять блокчейн этой ерундой» и «оставить блокчейн в покое». Учитывая, что среди прочего там были ругательства и даже обвинения в педофилии, майнер другого пула под ником Graet высказал опасения относительно того, как такое «содержание» блокчейна скажется на его массовом принятии: «Я не думаю, что это подходит для такого мультикультурного и мультиконфессионального явления, как биткоин… Вы думаете, это будет стимулировать принятие или станет барьером для многих людей?»

В ходе скандала некоторые майнеры Eligius, не разделяющие католических убеждений, решили покинуть пул. Другие же отметили вклад Luke-Jr в поддержание сети и подчеркнули, что содержание добываемых им блоков, по сути, никого не касается и никому не мешает. Luke-Jr действительно входит в круг ранних разработчиков биткоина, и его имя упоминается в одном ряду с Грегори Максвеллом, Мэттом Коралло и Расселом О'Коннором. «Я тоже майню за Eligius и молитвы имеют для меня не большее значение, чем рандомные данные. Если это помогает Luke-jr работать над биткоин-проектами, я целиком за», — написал bitclown, отмечая, что никто не может обеспечить соблюдение политкорректности на блокчейне.

Сам Luke-Jr обратил внимание на то, что параметр coinbase изначально предполагает, что туда может быть вставлен небольшой текст: «По сути, первый сoinbase (в “генезисном” блоке) содержит либертарианскую пропаганду», — пишет Luke-Jr, имея в виду послание Сатоши.

С небес на землю

Блокчейн стал настоящим мессенджером, позволяя не только увековечивать какие-то записи, но и обмениваться мнениями по поводу актуальных вопросов, собирать статистику и даже рекламировать себя.

Например, многие майнинговые пулы имеют так называемую coinbase-подпись: slush — для Slush Pool, ozcoin — для Ozco.in, bitparking — для Bitparking; и зачастую она полностью совпадает с названием пула: Bitfury, ViaBTC, BTC.COM, BTC Guild, BitMinter и так далее. Таким образом многие пулы «подписывают» добытые ими блоки (например, в блоке 161123 расшифровывается подпись «Mined by BTC Guild» — «добыто BTC Guild»).

Сервис Messages from the Mines называет подпись пула Eligius первой coinbase-записью, оставленной на блокчейне после послания Сатоши (подпись «Eligius1» появилась на блоке 130635, добытом 14 июня 2011 года). Также проект отмечает, что на сегодня большинство блокчейн-сообщений составляют именно подобные подписи.

Указать свое имя могут и сами майнеры — совместно с названием пула или без него: ViaBTC/Mined by miaoran (блок 537034), ViaBTC/Mined by yongwei (блок 537026), /ViaBTC/Mined by zuljuah2 (блок 536924), Mined by haijunaa (блок 536913), Mined by bitriverdx07 (536966), Mined by qls9 (блок 536976) и так далее.

Среди подобных сообщений бывают приветствия, поздравления и прочая информация, например: «Привет от 50BTC.com», «Пирсу и Полу, добыто на GIVE-ME-COINS.com», «С новым годом! Ваш GHash.IO», «добыто на ASIC-майнере», «Сделано в Китае», «привет от poolserverj».

Идеальный «dapp» для голосования уже существует

Обмен сообщениями в блокчейне может использоваться и для принятия решений относительно внесения изменений в сеть: так, в начале января 2012 года Гэвин Андресен представил предложение по усовершенствованию Bitcoin (BIP16) под названием pay-to-hash-script — «плата на хэш скрипта». В BIP16 Андресен описал новый стандарт транзакций и дополнительные правила валидации. По сути, это новый формат адресов, которые представляют собой хэш скрипта и начинаются с цифры 3 (в отличие от обычного публичного ключа, начинающегося с 1). Принцип pay-to-hash-script (P2SH) перекладывает ответственность за предоставление условий «выкупа» транзакции с отправителя на получателя: то есть вы можете отправить биткоины на адрес, совершенно не заботясь о его механизмах защиты. Принимающий клиент может иметь любые условия для принятия платежа (например, требовать ввода парольной фразы, подписей нескольких пользователей и так далее — это и будет скрипт), но с новым форматом адресов отправляющий клиент не обязан понимать, как выполнять такой скрипт. Однако чтобы потратить биткоины, клиент-получатель должен предоставить скрипт, соответствующий хэшу скрипта и данные, которые сделают этот скрипт валидным.

Этому предложению также была присвоена coinbase-подпись — P2SH — и майнеры могли голосовать за его принятие, включая в свой блок эту подпись. Записи типа «eco@ozco.in /P2SH/», «BTC Guild /P2SH/», «/P2SH/BIP16/slush/R», «P2SH/R» присутствуют во многих блоках, генерировавшихся в 2012 году (например, блоки 169000, 169156, 169163, 169170, 169853, 169893, 169100, 175134, 200000, 210234). Можно увидеть, что пулы открыто заявляли свою позицию по предложению, поскольку практически рядом с каждым «P2SH» стоит подпись пула. И так же открыто некоторые выражали свое неприятие предложения: например, тот же Eligius во всех добываемых блоках оставлял записи вроде «NOP2SHp2sh/CHV», добавляя «NO» перед «одобрительной» подписью (примеры можно найти в блоках 163471, 163486, 168554, 170893). В итоге, набрав 55% поддержки сети, P2SH был активирован в апреле 2012 года.

Многоликий блокчейн

Разработчик Кэн Ширрефф нашел и другие послания в блокчейне (зашифрованные не только майнерами, но и обычными пользователями). Среди них — white paper биткоина, хранилище Wikileaks, послания на день святого Валентина, отрывки из Бхагавадгиты — древнеиндийского религиозно-философского произведения на санскрите, стихотворения и число Пи с 1000 знаков после запятой.

Кроме того, блокчейн является хранилищем любовных посланий: на блокчейне биткоина увековечено около 400 признаний в любви и как минимум 11 предложений руки и сердца. Реже для этих целей используются блокчейны эфира и биткоин кэша, но и там можно найти целые любовные письма: «Привет, Сонгсан Сюй Пиг, сегодня 869-ый день с тех пор, как мы вместе, мы справились с отношениями на большом расстоянии, я верю, что если мы сможем преодолеть время и расстояние, мы будем друг для друга единственными. Ты мой супергерой, и я не могу передать, как каждый раз, когда ты держал меня в своих объятиях, я чувствовала, что ты был моим домом. Я завишу от тебя, как ребенок, хочу быть твоей маленькой принцессой, милый. Спасибо за твое терпение и преданность мне. Я люблю тебя навсегда...» — такое сообщение хранит 6170200-ый блок в блокчейне эфира, причем это одно из немногих блокчейн-посланий, написанных девушкой. «Я люблю три вещи в этом мире: солнце, луну и тебя. Солнце в течение дня, луну — ночью, а тебя — навсегда», — такая запись запечатлена в 543814-м блоке биткоин кэша.

Многих пользователей — влюбленных и не только — блокчейн привлекает возможностью навсегда сохранить свое обращение: «Маделейн, я так сильно тебя люблю. Моя любовь к тебе вечна, как это сообщение. Поздравляю с 6-месячной годовщиной!» (6168182 блок эфира); «Меня зовут Перикл, и я добавляю этот текст в блокчейн. Я делаю себя нестираемым с этой планеты» (340672 блок биткоина).

Однако многие используют такую возможность не слишком рационально и уж точно не романтично: так, оскорбление «nigga» встречается на блокчейнах биткоина и эфира примерно по 60 раз, а на блокчейне биткоин кэша — около 40 раз. Еще более популярным стало слово «fuck»: в блокчейнах биткоина и эфира оно упомянуто примерно по 374 и 764 раза соответственно, а в блокчейне биткоин кэша — более 1500 раз, причем значимая часть из полутора тысяч посланий с этим ругательством имеет одного адресата, а именно сообщество биткоина: примерно 80 раз один и тот же пользователь написал: «Плачу 30К сатоши, пожалуйста, используйте сообщение “Fuck Blockstream” (команда разработчиков Bitcoin Core. — DeCenter)», и почти 30 раз кто-то написал: «FuckYOU core developers saying bitcoin ca[sh]», — в продолжение вечной войны названий между сторонниками биткоина и биткоин кэша.

Все тайное становится явным

Хотя функционал «мессенджера» был заложен в блокчейн с самого начала и продемонстрирован Сатоши в первом же блоке биткоина, всеобщее внимание эта черта блокчейна привлекла не так давно и при скандальных обстоятельствах: в марте 2018 года группа ученых из Университета Аахена опубликовала исследование, сообщающее о запрещенном контенте в блокчейне биткоина, в том числе изображениях порнографического характера и ссылках на видео с детской порнографией.

Интересно, что еще в 2011 году, в ходе дискуссии о молитвах в блокчейне, один из пользователей форума bitcointalk написал: «Отходя от обсуждения содержательной стороны, я предлагаю, чтобы все сообщения в блокчейне считались граффити и мы (как сообщество) должны их расчистить. Если бы кто-то вставил в блокчейн детскую порнографию, а неделю спустя опубликовал инструкции по тому, как просмотреть ее, мы все были бы виновны во владении этим».

Однако с технической стороны «очистить» блокчейн от уже существующих записей невозможно, равно как и нельзя винить всех пользователей биткоина в автоматической «причастности» к запрещенному контенту на блокчейне, поскольку данными, хранящимися на блокчейне как децентрализованном реестре, по сути, никто не владеет (разве что их отправитель). Кроме того, найти и прочитать зашифрованный таким образом контент очень сложно, и отношения большинства пользователей с блокчейном сводятся к пересылке транзакций.

Вне зависимости от характера блокчейн-посланий, в системе они считаются спамом и некоторые называют подобное загромождение пространства блоков безответственным: «Учитывая, что биткоин децентрализован, кто угодно может хранить сообщения на блокчейне. Однако это не поощряется как его “раздувание”. Обязанность каждого — не раздувать блокчейн», — сказал основатель «архива» блокчейн-записей Bitcoin Strings под ником Antti в разговоре с BTCManager. Он отметил, что очень важно «иметь возможность доказать, что какие-то данные существовали в какой-то момент времени» — для чего зачастую и используется их фиксация на блокчейне — однако «существуют более удачные способы пометить время создания данных. Например, включать в блокчейн хэш файла, а не полные данные».

Пишем

Майнеры могут записать свое послание при добыче блока, включив его в первую транзакцию. Вероятность «быть услышанными» у таких сообщений выше, по крайней мере, их проще найти. Но, пока вы не стали майнером, такой привилегии у вас не будет. Однако есть много способов «заявить о себе» даже будучи обычным пользователем.

Метод отправки данных при этом будет отличаться: по сути, мы будем пересылать биткоины (а с ними и наше сообщение) на «фейковый» адрес, то есть адрес, который никому не принадлежит и к которому нет приватного ключа. Он будет выглядеть как обычный адрес-публичный ключ и будет отображаться в списке выходов транзакции в том же формате, что и другие выходы. Потому внешне, до расшифровки, «заподозрить» такой адрес в хранении какой-либо нефинансовой информации нельзя. При этом ушедшие туда биткоины будут навсегда утеряны для системы — их больше никто не сможет использовать, так как к ним нет доступа: к этому публичному ключу не существует пары в виде приватного ключа.

Сегодня есть множество user-friendly сервисов, не требующих никаких технических навыков. Среди них — Eternity Wall, Apertus, Cryptograffiti, In the Bitcoin. Все они имеют свои правила: например, ограничения по объему данных (что связано с используемым ими методом отправки данных на блокчейн). Так, Eternity Wall позволяет передавать до 72 символов. В Cryptograffiti нет такого ограничения и можно даже прикреплять файлы, однако стоимость сообщения зависит от его размера: например, отправить сообщение в 100 знаков обойдется в 0.00007246 BTC. Сервис In the Bitcoin позволяет передавать до 4000 символов, при этом за первые 80 символов сайт берет фиксированные 0.0022 биткоина, за 80−160 — 0.0044 биткоина, за 160−240 — 0.0066 биткоина, за 240−320 — 0.0088 биткоина и так далее.

Но, как отмечает биткоин-разработчик Федерико Тенга, «какой смысл в использовании бестрастового и устойчивого к цензуре инструмента, если нам нужны третьесторонние сервисы». Кроме того, самостоятельность в этом вопросе обойдется гораздо дешевле, поскольку для отправки сообщения необходима только транзакция с минимальным количеством биткоинов (текст будет зашифрован внутри нее). И на данный момент минимальный размер транзакции в сети биткоин составляет 547 сатоши, или 0.00000547 биткоина.

Кэн Ширрефф предлагает очень простую схему шифрования, которая подойдет для сообщения из 20 символов:

 Преобразуем текст в шестнадцатеричный формат (то есть из ASCII в HEX).

 Получившееся значение преобразуем в адрес. Для этого подставляем его после слэша в https://blockchain.info/q/hashtoaddress/. Это и будет наш «фейковый» адрес.

 Посылаем на этот адрес минимальное количество биткоинов для осуществления транзакции (важно помнить, что эти биткоины нельзя будет вернуть). Как только блок с этой транзакцией будет добыт, ваше сообщение также навсегда запишется в этот блок.

Если у вас установлен клиент Bitcoin Core и имеются минимальные знания в программировании, можно самостоятельно увековечить и более длинное сообщение. Федерико Тенга опубликовал на Medium пошаговую инструкцию:

 Запускаем клиент Bitcoin Core и открываем консольное окно (help > debug window > console). Для начала необходимо собрать неизрасходованные выходы (UTXO), которые мы будем использовать.

Команда:

Пример:

Вывод:

 Теперь есть все, что нужно для создания raw-транзакции (это транзакция, созданная и управляющаяся через командную строку, что позволяет настроить все параметры вручную), которую мы затем отправим на блокчейн. Следующим шагом конвертируем наше послание в шестнадцатеричный формат. Также сообщение можно сделать «более популярным»: если добавить в его начало буквы «EW», то оно появится на сайте Eternity Wall — этот сервис не только позволяет записывать блокчейн-послания, но и ищет уже существующие, отображая их на своем сайте. Тенга решил оставить запись: «#GenerationBlockchain was here», и эту фразу сервис трансформировал в 4557202347656E65726174696F6E426C6F636B636861696E207761732068657265. С помощью этих данных формируем raw-транзакцию:

Команда:

Пример:

Вывод:

Если вы не установите параметр change, то все биткоины с вашего адреса уйдут майнеру (в данном примере майнеру уйдет лишь комиссия в 0.0002 биткоина).

 Остается лишь подписать транзакцию:

Команда:

Пример:

Вывод:

 Транслируем подписанную транзакцию в сеть:

Команда:

Пример:

Вывод:

Вывод и является идентификатором транзакции, по которому вы сможете найти ее в любом эксплорере. Также это сообщение появилось на Eternity Wall.

Разработчик Адам Таш систематизировал 6 способов, которыми можно зашифровать сообщение на блокчейне:

 Через coinbase: до 100 байт произвольных данных, доступно только майнерам.

 С помощью Pay-to-Fake-Key-Hash (P2FKH): нужно вставить сообщение в скрипт выхода как фейковый хэш публичного ключа (в поле PubKeyHash). При данном методе также создаются нерасходуемые UTXO (то есть то минимальное количество биткоинов, которые вы пересылаете, сгорит). Так можно оставлять до 20 байт данных в каждом выходе, при этом создавая множество выходов в одной транзакции (такая система используется и в Apertus, только в этом случае сервис делает за пользователя всю работу).

 С помощью Pay-to-Fake-Key (P2FK), то есть вставляя данные как фейковый публичный ключ (этот метод описывал Кэн Ширрефф). Пересылаемые биткоины также «сжигаются». Так можно сохранять по 65 байт несжатых данных или 33 байта сжатых.

 С помощью OP_RETURN. Этот скрипт означает, что выход транзакции недействителен, то есть вместо создания фейковых хэшей и адресов этот способ открыто создает нерасходуемые UTXO. Такой метод позволяет сохранять по 80 байт информации в каждой транзакции. И это весьма прозрачный способ передачи данных, поскольку многие сайты, коллекционирующие записи с блокчейна, отслеживают именно такие транзакции.

 С помощью Pay-to-Fake-Multisig (P2FMS): в данном случае настоящий публичный ключ используется совместно с одним или двумя фейковыми ключами. Таким образом можно зашифровать данные в транзакциях с мультиподписями. Существенное отличие от предыдущих вариантов заключается в том, что биткоины из этих транзакций можно потратить. Каждая транзакция может содержать несколько P2FMS-выходов, при этом каждый фейковый публичный ключ позволяет передавать по 65 байтов данных.

 С помощью Pay-to-Fake-Script-Hash (P2FSH). Предложение P2SH мы уже обсуждали в контексте «голосования майнеров». Передача сообщений по такой схеме (только с фейковым хэшем скрипта) работает по принципу второго способа (P2FKH). Произвольные данные можно хранить в скрипте выкупа (redeem script) или в скрипте входа, который ему предшествует. Создающиеся в процессе UTXO тоже нерасходуемые.

Читаем

Чтобы прочитать зашифрованную в определенной транзакции информацию, нужно найти хэш блока, в который она включена. Для этого нам подойдет любой эксплорер: например, Blockchain.info. Идентификатор интересующей нас транзакции вставляем в окно поиска (рассмотрим транзкацию b551e5e2c4afbd43ab81419557def98eaedc3ecea47f0146f4ef44ed1c5a2c1a). Слева, в столбце «сводные данные» будет запись: «включено в блоки» и соответствующий блок с гиперссылкой (в данном случае это блок 163548). Переходим по гиперссылке и справа, в разделе «Хэши» нам нужна первая строка: это и будет хэш нашего блока (0000000000000c52e9ec0db9040bb5cd002ba268779d2f4e210471947f15b17a). Далее нам необходимо получить данные в формате RAW. Для этого вставляем наш хэш в конец строки (после слеша): https://blockexplorer.com/api/rawblock/ и полученный URL (в данном случае — https://blockexplorer.com/api/rawblock/0000000000000c52e9ec0db9040bb5cd002ba268779d2f4e210471947f15b17a) вставляем в адресную строку. Открывшаяся страница будет содержать данные следующего вида: {«rawblock»:«...»}, где вместо многоточия будет разное количество символов — иногда очень много. Все, что стоит между кавычками, мы копируем и вставляем в HEX—ASCII конвертер, он преобразует шестнадцатеричный формат в читаемый текст через таблицу ASCII. Полученный отрезок данных будет содержать информацию из всех транзакций, включенных в этот блок, но не все они заключали в себе какое-то послание. Потому текст искомого сообщения будет находиться между множеством не связанных символов — возможно, его придется поискать. В нашей транзакции было написано: «BitcoinForTheMasses!ˆ» («Биткоин в массы!»)

При чтении тоже есть сервисы-помощники: так, в некоторых эксплорерах (например, Blockchain.info, BTC.com) можно найти расшифровку записей, оставленных майнерами в coinbase-транзакциях — чаще всего название пула или ник майнера. Для этого нужно найти блок и кликнуть на первую транзакцию, включенную в этот блок. В поле входа должно стоять «coinbase» и рядом расшифровка сообщения. Однако полностью полагаться на такой метод нельзя: например, послание Сатоши не расшифровано ни в одном из этих эксплореров.

Другую систему поиска предлагают сервисы Messages from the Mines и Blockchair. Там можно написать слово в окне поиска, и система выдаст все обнаруженные совпадения на блокчейне (при этом Blockchair предоставляет статистику не только по биткоину, но и по эфиру и биткоин кэшу). Также можно посмотреть, в какой блок включена транзакция с данным сообщением. Однако стоит учесть, что статистика таких сайтов несовершенна и некоторых записей там может не оказаться.

Сервис Cryptograffiti, который мы упоминали, говоря о шифровке сообщений, также предоставляет возможность читать содержимое блокчейна и даже указывает идентификатор блока и транзакции, однако в нем нет интерактивного поиска по словам. А в Eternity Wall есть функционал интерактивного поиска, но нет никаких указаний о «местоположении» сообщения, за исключением даты его добавления. Своеобразным «архивом» служит BitcoinStrings.com — пожалуй, наиболее полное собрание блокчейн-записей. На этом ресурсе сообщения с блокчейна отсортированы по 1347 файлам в формате .txt.




Загрузка комментариев…