PoW

Proof-of-Work (доказательство работы) — консенсус, основанный на необходимости выполнения длительной работы (нахождения решения задачи) на стороне клиента, результат которой легко и быстро проверяется на стороне сервера.

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

Назначение Proof-of-Work — удостоверить, что требуемые вычисления действительно были осуществлены при создании нового блока.

История

Впервые требование доказательства выполнения работы приведено в статье Pricing via Processing or Combatting Junk Mail 1993 года.

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

В 1997 году Адам Бэк запустил проект Hashcash, посвящённый защите от спама.
В 1999 году появляется термин Proof-of-Work — использован он был в статье Proofs of Work and Bread Pudding Protocols.
16 августа 2004 года Хэл Финни в своём письме на форуме шифропанков предложил использовать многоразовое доказательство выполнения работы для организации электронной валюты. Вскоре Сатоси Накамото предложил криптовалюту биткоин, где доказательство выполнения работы использовано для значительного усложнения двойного расходования.

Принцип работы

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

Уязвимости

За 11 лет существования сети Bitcoin никто не смог сломать систему и воспользоваться её уязвимостями.

Атака 51%

На ранних этапах существования Bitcoin, как и многие другие криптовалюты, уязвим для «атаки 51%». Если в руках злоумышленника находится больше половины всех вычислительных мощностей в сети, то у него появляется возможность подтверждать только свои блоки, при этом игнорируя чужие, что позволяет ему получать 100% всех производимых биткоинов, а также блокировать любые транзакции. Как вариант, атакующий может переписать всю историю генерации блоков, начиная с определённого момента в прошлом. В результате он может догнать и обогнать текущую цепочку блокчейна, сделав свой вариант валидным. Как итог — деньги, хранящиеся на кошельках пользователей на протяжении продолжительного периода, пропадут.

Двойное расходование

Двойное расходование — повторная передача одних и тех же активов. Данная атака делится на несколько подтипов.

Атака типа «гонки» Злоумышленник совершает транзакцию X, оплачивая покупку товара, одновременно переводя эти же деньги на другой свой счёт транзакцией Y. Если продавец не стал ждать подтверждения транзакции и отгрузил товар, то он пошёл на большой риск: есть 50-процентная вероятность, что транзакция Y может попасть в истинную цепочку.

Атака Финни Злоумышленник пытается найти блок, который содержит его транзакцию Y. Однако, как только блок обнаруживается, атакующий отправляет транзакцию X, после чего он покупает товар. Продавец дожидается подтверждения транзакции X и отгружает товар. Если в этот момент появляется блок с транзакцией Y, то создается ситуация развилки (форк), в которой майнеры должны выбрать один из двух блоков для продолжения цепочки блокчейна. При сосредоточении большого количества вычислительных ресурсов в руках злоумышленника он может значительно увеличить вероятность выбора блока с операцией Y. Таким образом, подтверждённая транзакция не является гарантированно валидной.

Недостатки PoW

Майнинг с применением PoW-алгоритмов тратит чрезвычайно много электроэнергии, так как требует постоянного наращивания вычислительных мощностей. Поэтому PoW-подход является не лучшим решением с точки зрения энергоэффективности.

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

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

Попытки избавиться от недостатков PoW привели к появлению PoS и многочисленных гибридных вариантов.