Опубликован: 01.02.2018 | Доступ: свободный | Студентов: 1352 / 260 | Длительность: 17:50:00
Лекция 8:

Альтернативы Proof of Work

< Лекция 7 || Лекция 8: 12 || Лекция 9 >

Алгоритмы, выполняющие реальную работу

Рассмотрим желаемое свойство вычислительного алгоритма, которое имеет дополнительно социальную функцию.

Как уже отмечалось ранее, экосистема биткоина очень ресурсоемка. По разным оценкам вся сеть майнеров потребляет от 150 до 900 мегаватт энергии, что сравнимо с мощностью небольшой гидроэлектростанции. Но вся мощность используется только для высчитывания SHA-2 хэшей и не имеет какой-либо полезной функции.

Учитывая вышесказанное, появляется резонный вопрос: есть ли такой алгоритм, который приносил бы пользу всему обществу, при этом выполняя функции, необходимые для биткоина? Такой механизм стал бы своего рода утилизацией, снижая затраты на распределенную сеть и ее воздействие на окружающую среду

Рассмотрим группу наиболее очевидных вариантов. Проблемой для них будет, что объем пространства поиска решения очень широк, а решение встречается в этом объеме редко. Для решения подобных задач обычно использовались распределенные вычисления. Но для переноса этого опыта в экосистему криптовалюты нужно преодолеть массу препятствий.

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

Как пример воплощения полезного алгоритма можно рассмотреть Primecoin.

Для получения вознаграждения нужно найти последовательность простых чисел, называемых цепью Каннингема, которая вычисляется по формуле pi=2ia+1. Каждый член такой последовательности проверяется тестом простоты. Первое значение в последовательности делимо на хэш от цепочки блоков (предыдущего блока, mrkl_root и nonce ).

Алгоритм Primecoin действительно приносит результаты. Многие наибольшие цепи Каннингема были обнаружены в результате майнинга. Интересно, что существует проект распределённых вычислений, называемый PrimeGrid, который также нацелен на поиск простых чисел. Но действительно ли эта работа полезна? Цепи Каннингема используются в шифровании, однако, та форма, которая используется в Primecoin, практической пользы не несет.

Давайте рассмотрим другой аспект пользы от биткоина - инвестиции, вложенные в него. По разным оценкам в инфраструктуру криптовалюты вложено более 100 млн долларов. В эту сумму включены как расходы на проектирование и производство нового оборудования.

Современное оборудование для биткоин-майнинга очень производительно в расчёте SHA-2 хэшей – и всё. Идея в том, чтобы создать алгоритм, при котором вложения в улучшения оборудования для майнинга были бы сами по себе полезны.

Вот существующий пример – Permacoin, его идея в том, чтобы заменить майнеры, считающие хэши, на устройства для хранения информации, например, жесткие диски. Тогда побочным результатом развития сети станет большая распределенная сеть хранилищ с репликацией информации.

Принцип работы алгоритма такой: представьте, что есть большой общеизвестный файл F. Для простоты предположим, что F выбирается избранным администратором.

Каждый пользователь собирается сохранить часть этого файла.

В Permacoin файл F разбивается на блоки. Из блоков строится дерево Меркла. Каждый майнер создает ключевую пару. Используя свой публичный ключ майнер псевдослучайно выбирает несколько сегментов файла F, которые он будет хранить. Чтобы получить награду за блок майнер должен выбрать случайно nonce и посчитать хеш h1, включающий хеш предыдущего блока, merkel_root, публичный ключ и выбранный nonce.

Теперь, вместо моментальной проверки на правильность (как в биткоине), исходя из полученного h1 выбираются несколько фрагментов из хранимых сегментов F и вычисляется хэш h2, содержащий всю информацию из h1 и, дополнительно, часть файла F. Полученный хэш h2 сравнивается с целевой сложностью, чтобы определить правильность найденного nonce. Таким образом, единственная возможность для успеха майнинга – сохранить себе часть блоков файла F.

Здесь стоит вспомнить об одном из спорных мест биткоина – честный майнер, то есть участник сети, который подтверждает все транзакции, включенные в блок, вынужден хранить на жестком диске информацию о всех непроведенных транзакциях. На данный момент - это около 200 Мб. Этот объем данных никак не помогает в майнинге и не приносит какого-либо дохода. В случае с Permacoin хранение данных оплачивается майнингом и быть честным майнером выгодно.

Подводя итог можно сказать, что доказательство полезной работы вполне естественная цель. Но этот функционал не должен идти во вред первичной цели – безопасности. На сегодняшний день работающие варианты – распределенное хранилище и нахождение рядов простых чисел. Хотя их общественная польза пока сомнительна, возможно, будут найдены другие интересные реализации.

Алгоритмы, защищенные от распределения

Рассмотрим свойство альтернативных вычислительных алгоритмов, препятствующее сосредоточению вычислительных мощностей сети.

Сейчас майнеры биткоина в основном объединяются в пулы вместо одиночного майнинга. Это приводит к тому, что огромные вычислительные мощности концентрируются в одном месте.

Базовой ценностью биткоина является децентрализация, и подобная консолидация представляет угрозу. Большие пулы становятся очень привлекательной целью для атак, например, взлома или мошенничества. Значит, полезным свойством основного алгоритма будет предотвращение создания больших пулов.

Совсем недавно это проблема стала очень острой, поскольку крупнейший из существующих биткоин-пулов, Gigahash.IO, занял более 50% от общей мощности сети. Это вылилось в поток критики и обсуждений того, что подобная ситуация является огромной угрозой для биткоина и грозит ему гибелью. Пользователи требовали найти техническое решение для проблемы.

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

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

Рассмотрим один интересный тип атак на биткоин-пул - атака виджиланте. Предположим, что есть участник большого пула, который им недоволен. Он участвует в пуле, предоставляя свои минимальные вычисления администратору пула, но, когда он находит правильное решение, он не сообщает его администратору, а уничтожает. Суть атаки состоит в том, что снижается выходная мощность пула. Ущерб для самого виджиланте невелик, ведь он все равно получает вознаграждение пропорционально его вкладу в вычисления.

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

Чтобы убрать возможность коллективного майнинга, нужно создать алгоритм, который будет поощрять пользователей на подобные атаки. Кроме того, каждый, кто находит решение, должен иметь возможность забрать вознаграждение себе. С таким подходом у любого был бы стимул атаковать пул.

То есть в создаваемом алгоритме вычислительной задачи каждая попытка решения должна требовать знания закрытого ключа пользователя. Этот же ключ будет использоваться, чтобы потратить полученное вознаграждение. При таком подходе, чтобы пул работал, администратор должен будет сообщить всем свой закрытый ключ, а значит каждый, нашедший решение сможет забрать награду себе. Второе необходимое свойство алгоритма - позволить членам пула оставаться инкогнито при таких действиях.

Рассмотрим подробнее, как должен работать алгоритм без возможности распределения.

Блок решения такой задачи будет содержать те же данные, что содержатся в блоке для биткоина: хэш предыдущего блока, merkle_root и произвольно выбранное nonce. Так же в блок включается публичный ключ, а майнер должен знать соответствующий приватный ключ. И две подписи, сделанные с помощью этой пары ключей s1 и s2.

Первый шаг, для того, чтобы определить является ли данное nonce решением для задачи – создание подписи s1 с использованием ключевой пары. Подпись должна быть действительной для хэша предыдущего блока и для nonce.

Следующий шаг – вычислить хэш строки, содержащей хэш предыдущего блока, публичный ключ, nonce и подпись s1. Полученный хэш сравнивается с целевым уровнем сложности, как это происходит для биткоина.

Теперь после определения станет ли подобранный nonce корректным решением, вычисляется вторая подпись с использованием той же ключевой пары, но в нее включается так же и merkle_root.

Суть идеи в том, что необходимо вычислить значение подписи s1 с использованием закрытого ключа, и это покажет правильно ли подобрано решение. И только после нахождения правильного nonce будет вычислена s2, которая покажет, какие транзакции будут включены в блок. То есть необходимо знать закрытый ключ для решения задачи – это также позволит забрать вознаграждение себе. У алгоритма без возможности распределения существует несколько проблем.

Первая проблема – при использовании подобной вычислительной задачи уничтожаются не только нежелательные централизованные пулы, но и хорошие, распределенные, как например P2Pool.

При невозможности объединяться в пулы, майнеры могли бы начать использовать еще худшую форму аутсорса – выполнять майнинг за других. Подобные хостинги для майнеров, возможно еще большая угроза для децентрализованной сети, поскольку администратор имеет физический доступ до всех точек майнинга. В настоящее время идет поиск решения для выхода из данной ситуации.

Виртуальный майнинг, PoS

Рассмотрим алгоритм защиты, который называют доказательством доли владения (proof-of-stake, PoS). Всю группу подобных алгоритмов можно назвать виртуальным майнингом, поскольку они не предполагают вычислительной работы.

То есть мотивации для майнинга, подобной биткоину, нет.

В экосистеме Биткоина пользователи тратят деньги на приобретение оборудования, оплату электричества и другие сопутствующие затраты, чтобы в итоге получить вознаграждение за майнинг. Что произойдет, если убрать шаг покупки оборудования? В результате получится алгоритм, который можно назвать виртуальным майнингом.

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

Рассмотрим потенциальные плюсы данной распределенной системы. Первый – снижение стоимости вычислительной сети, не нужно ни производить, ни приобретать специальное оборудование. Второй плюс, как следствие из первого, – меньшее влияние на окружающую среду. В результате такого подхода каждый пользователь становится как бы вкладчиком в экосистему, а значит, он будет более заинтересован в поддержании ее нормальной работы и в ее развитии. Еще один плюс – защищённость от угрозы со стороны ASICs. Наконец, этот алгоритм защищен от атаки 51%, когда больше половины вычислительной мощности сети сконцентрировано в руках одного майнера.

Экономика биткоина намного меньше, чем мировая экономика. Значит, возможно, что человек, который очень богат вне системы биткоина, приобретет огромные вычислительные мощности, которые невозможно было бы приобрести, используя только средства из экосистемы. Такой человек или группа людей могли бы сделать атаку 51%. Если же представить, что майнинг основан только на монетах, существующих лишь внутри сети, то для атаки нужно будет купить 51% существующих монет. Во-первых, для этого нужно будет перевести часть внешних(реальных) средств в экосистему, например, через обменную биржу. Во-вторых, такой высокий спрос сильно поднимет стоимость криптовалюты и затруднит атаку. Конечно, это спорно, но считается, что намного дороже купить половину существующих биткоинов, чем создать ферму, превышающую половину мощности сети.

Сейчас есть несколько подходов к виртуальному майнингу. Оригинал назывался доказательством доли владения. При этом каждой монете приравнивалась доля владения в системе. Идея в том, что доля растет все время, пока монета не используется. Каждый раз, когда монета используется для расчетов или майнинга, доля сбрасывается.

Другой вариант называют доказательством сжигания (proof-of-burn, PoB). В этом случае для майнинга нужно отправить монету на адрес, с которого гарантированно нельзя её потратить. Например, на адрес, который является хэшем случайного числа, – шансы подобрать к нему соответствующий публичный и приватный ключи ничтожно малы. С другой стороны, вы получаете шанс на получение вознаграждения.

Еще один возможный вариант – доказательство депозита (proof-of-deposit, PoD). Монеты вносятся на временно заблокированный аккаунт, они не уничтожаются, как в предыдущем случае, а вернутся обратно через время. То есть временно блокируется возможность тратить монеты.

Последний вариант– доказательство активности (proof-of-activity, PoA). В нем все владеющие монетами автоматически включаются в майнинг-лотерею. Если выбрана одна из монет конкретного пользователя, он должен за определенное время отправить подписанную своим ключом информацию о следующем блоке.

Подобные алгоритмы сейчас являются предметом пристального интереса со стороны исследователей. Самый острый стоящий перед ними вопрос – дают ли алгоритмы PoW больше защиты, чем PoS. Если окажется, что алгоритмы PoS столь же надежны, то они будут иметь явное преимущество перед очень дорогими PoW. Но лишь время покажет, кто выиграет.

Терминологический словарь

доказательство выполнения работы (proof of work) - функция защиты распределенных систем от злоупотребления услугами (например, DoS-атак или рассылок спама), основанный на необходимости выполнения запрашивающей стороной некоторой достаточно сложной длительной работы (POW-задачи), результат которой легко и быстро проверяется обслуживающей стороной. В случае с криптовалютами доказательством решении задачи является правильно подобранный блок (точнее значение nonce для блока), хэш которого меньше определенного заданного числа, называемого целевым уровнем сложности.

майнер (miner) - программа, используемая для вычислений блоков. Так же человек, который занимается майнингом.

SHA-2 - группа криптографических алгоритмов, однонаправленная хэш-функция

ASIC (application-specific integrated circuit) – дословно интегральная схема специального назначения — интегральная схема, специализированная для решения конкретной задачи.

пул (pool) - специализированный сервис (как правило веб-служба), предоставляющая майнерам объединить вычислительные мощности. Вознаграждение распределяется пропорционально предоставляемым вычислительным ресурсам

майнинг (mining) - деятельность по поддержанию распределенной платформы и созданию новых блоков с возможностью получить вознаграждение в форме новых единиц и комиссионных сборов в различных криптовалютах, например, в биткоин

SHA-256 один из видов алгоритмов семейства SHA-2

хэш (hash) - результат вычисления хэш-функции для набора входных данных. Хэш-функция - преобразование входных данных произвольной длины в выходную строку (хэш) фиксированной длины, выполняемое определённым алгоритмом

XOR - исключающее ИЛИ, строгая дизъюнкция. В случае двух переменных результат выполнения операции является истинным тогда и только тогда, когда один из аргументов является истинным, а второй ложным.

кукушкино хэширование – хэширование методом образования неориентированного графа, называемого "кукушкиным графом", в котором вершинами являются ячейки хеш-таблицы, а рёбра для каждого хэша соединяют два возможных положения (ячейки хеш-таблицы). Тогда жадный алгоритм вставки множества значений в кукушкину хеш-таблицу успешно завершается тогда и только тогда, когда кукушкин граф для этого множества значений является псевдолесом, графом максимум с одним циклом в каждой компоненте связности.

x11 - алгоритм хэширования, который был впервые задействован в создании Darkcoin, использует 11 раундов хэширования с 11-ю различными хэш-функциями (blake, bmw, groestl, jh, keccak, skein, luffa, cubehash, shavite, simd, echo).

блок транзакций(блок) - специальная структура для записи группы транзакций в системе Биткоин и аналогичных ей. Блок состоит из хэша предыдущего блока, хеш-суммы всех включенных транзакций (merkle_root), и случайно перебираемого числа nonce.

merkle_root - дерево Меркла, древовидное хэширование. Хэш всех транзакций необходимых для блока данных

nonce – в криптографии одноразовый случайный или псевдослучайный код передаваемый вместе с паролем и затрудняющий атаку повторного воспроизведения. В криптовалютах nonce в блоке подбирается так, чтобы хэш блока был ниже целевого уровня сложности

< Лекция 7 || Лекция 8: 12 || Лекция 9 >