От чего защищает Proof of Participation
Proof of Participation проектировался против сильного злоумышленника — такого, который может запустить любое число узлов и аккаунтов, видит каждое сообщение в сети, использует любой изъян в логике и располагает большими деньгами. Предполагается лишь, что он не может подделывать подписи, находить коллизии хешей и скупить все токены. Против такого злоумышленника дизайн стремится предотвратить четыре вещи: кражу, цензуру, переписывание истории и нарушение работы цепочки. Эта страница разбирает основные атаки и правила, которые на них отвечают.
Покупка производства блоков
В Proof of Work власть следует за оборудованием, в Proof of Stake — за монетами. И то и другое можно быстро купить. В Proof of Participation у каждого зарегистрированного места, которое не приостановлено, одинаковый шанс быть выбранным для следующего блока, каким бы ни был его баланс или оборудование (см. Жеребьёвка). Монеты и машины сами по себе ничего не покупают: для власти нужны места.
Места приходят только через очередь, в темпе, который задаёт протокол. Первый новичок входит через 7 дней после генезиса. Затем каждый допуск задаёт ожидание следующего: 600 дней, делённые на число мест, учтённых до этого новичка, в пределах от 7 до 90 дней. Генезис-места учитываются не более чем как 11, а приостановленные места не учитываются. При 11 местах ожидание составляет около 54,5 дня, поэтому второй новичок приходит примерно на 61,5-й день. Очередь упорядочена по стейку, умноженному на время ожидания, поэтому злоумышленнику ещё и придётся перебить честных претендентов.
Идентичности Сивиллы
Атакующий по схеме Сивиллы создаёт множество идентичностей, чтобы получить влияние. В Proof of Participation идентичность — это место в реестре, и у каждого места есть реальная цена:
- Деньги. Заблокированный стейк не меньше минимума очереди, который начинается со 100 ZBC (места могут голосованием установить его в пределах от одной атомарной единицы до 250 ZBC, а при входе его может поднять половина медианного стейка в очереди). 10 % из него находятся под риском.
- Время. Место в очереди, упорядоченной по стейку × времени ожидания, и размеренный допуск: недели или месяцы между новичками.
- Работа. Новое место начинает с оценки участия 20 % и ничего не зарабатывает, пока не станет зрелым: 4 единицы оценки после допуска плюс один собственный блок, 2 дня, пока узлов меньше 2 880. Затем оно должно и дальше создавать блоки в свои ходы и ретранслировать данные.
Место, которое замолчало, считается отсутствующим, ничего не зарабатывает и теряет оценку; при нуле оно исключается, а 10 % его залога уходят в пул долголетия. Те же 10 % теряются при выходе в состоянии отсутствия или приостановки и при уходе из очереди. Выход без нарушений возвращает весь залог после 7-дневного периода охлаждения. См. Пропущенные ходы, приостановка и исключение и выход из реестра.
Большинство мест
Допустим, злоумышленник всё же контролирует больше половины мест. Он создавал бы большинство блоков и мог бы строить самую тяжёлую ветвь — именно это покупает большинство в любой схеме с самой тяжёлой цепочкой. Он мог бы:
- задерживать или цензурировать транзакции, не включая их в свои блоки;
- заменять недавние блоки в пределах лимита отката, строя более тяжёлую ветвь.
Подделать что-либо он не мог бы. Каждый узел проверяет каждый блок: подпись каждой транзакции, доказательство сида каждого блока, каждую квитанцию и каждую сумму coinbase. Большинство не может потратить ZBC аккаунтов, ключей от которых у него нет, не может заплатить себе больше фиксированного графика coinbase и не может переписать историю старше 720 блоков (3 часов) или ниже последней контрольной точки spine-цепочки (см. Финальность и откат). Кроме того, блоки, созданные после пропущенных ходов, весят меньше, а простаивающие места теряют доход и оценку.
Игры с сидом
Сид, определяющий каждую жеребьёвку, — выход проверяемой случайной функции: производитель не может выбрать его из нескольких значений. Его единственный рычаг — придержать свой блок, что стоит пропущенного хода, дохода и оценки и лишь передаёт сид следующему выбранному узлу (см. Сид блока (VRF)).
Переписывание истории издалека
Атака на длинную дистанцию (long-range) строит другую историю из далёкого прошлого, например на старых ключах узлов, давно покинувших реестр. Каждая из этих защит останавливает её сама по себе:
- работающий узел никогда не откатывается больше чем на 720 блоков;
- ни один узел не реорганизуется ниже последней контрольной точки, соподписанной в spine-цепочке;
- новый узел следует spine-цепочке, блокам которой нужны две трети мест и которая записывает, какие ключи узлов вошли и какие вышли, поэтому ключей, давно вышедших, в её списке подписантов нет;
- релиз, который устанавливает новый узел, может нести пин релиза, поэтому поддельная история spine-цепочки отклоняется при запуске.
Срок действия ключей не истекает, и никто не проверяет ветви вручную.
Затмение
При атаке затмения (eclipse) злоумышленник окружает узел своими пирами, чтобы тот видел только цепочку злоумышленника. Против зарегистрированного узла это трудно. Назначенные ему пиры, 12 в mainnet, выбираются жеребьёвкой по сиду блока периода и переназначаются каждые 40 блоков (около 10 минут), поэтому злоумышленник не может их выбрать (см. Квитанции и топология сети). Пиры доказывают свои ключи узлов в подписанном рукопожатии, которое к тому же называет хеш генезиса цепочки. А одного честного пира достаточно: выбор ветви идёт по весу, поэтому одно-единственное соединение, сообщающее о более тяжёлой ветви, позволяет узлу загрузить её и проверить блок за блоком. Узел, вершина которого устарела, следует вершине, о которой сообщают две трети выборки зарегистрированных пиров.
Трафик между пирами идёт как простой gRPC, без шифрования: защиту обеспечивают подписи и проверка, а не секретность.
Другие атаки
- Двойное подписание блока доказывается транзакцией EquivocationReport и засчитывается как пропущенный ход (см. Двойное подписание (эквивокация)).
- Повторное воспроизведение подписанной транзакции в другой цепочке ZooBC не удаётся, потому что каждая подпись охватывает хеш генезиса цепочки (см. Подписи, привязанные к цепочке).
- Поддельные снимки обнаруживаются по хешам, названным в соподписанной spine-цепочке, и по выборке, проверенной у зарегистрированных пиров (см. Снимки и быстрая синхронизация).