Не так давно между командой проекта Cosmos и некоторыми пользователями BitShares / Steem возникла дискуссия относительно безопасности DPOS в сравнении с заявлениями о ней в официальных бумагах (white paper) конкурентов. Я написал длинный / детальный ответ и подумал, что нужно опубликовать его и здесь.
В этом обсуждении термины “witness-майнер”, “майнер”, “заверитель” и “производитель” использовались без уточнений.
Давайте определимся с терминами:
Производитель блоков
Производитель блоков несет ответственность за группирование транзакций в блок и трансляцию его в сеть. Число производителей блоков на период подтверждения ограничено частотой производства блоков и структурой стимулов.
Заверитель блоков
Всякий, у кого запущена полная нода, является заверителем блоков. Блок считается действительным, если и только если в нем соблюдены правила блокчейна, находящиеся в открытом доступе. Не имеет значения, сколько производителей блоков находятся в сговоре, заверитель блоков (и весь остальной мир) откажутся от любого блока, который не соответствует внутреннему консенсусу. Теоретически допускается бесконечное число заверителей блоков, ограниченное только желанием отдельных людей и бизнесов независимо следить за поведением производителей блоков. Такой мотивацией часто является защита бизнеса от возможности быть обманутым, последовав форку, который нарушает правила консенсуса.
Последний необратимый блок
Блок, который широко признан действительным и неизменяемым. Этот блок должен быть принят всеми заверителями, которым вы доверяете, и подтвержден большинством производителей блоков.
Теперь же, когда все эти термины определены, мы можем прийти к выводу, что акт производства блока не зависит от акта подтверждения блока. При использовании DPOS каждый произведенный блок может рассматриваться как предложение и ничего более. Это схоже с первым этапом процесса коллективного производства блоков, такого как в Tendermint или Ripple.
В DPOS каждый последующий блок - это и подтверждение нескольких предыдущих блоков, и предложение для следующего блока. Набор блоков между последним необратимым блоком (подтвержденным ⅔ производителей) и текущим блоком работает как трубопровод ожидающих предложений блоков.
При использовании пайплайн подхода DPOS имеет среднее время задержки до неизменности 2 * BLOCK_INTERVAL * WITNESSES / 3. Что для STEEM составляет 40 секунд. И если задержка для отдельных транзакций довольно высока, пайплайн позволяет достичь большей пропускной способности, при которой новые транзакции становятся необратимыми каждые три секунды. Более того, пайплайн дает всем переменную вероятность необратимости с ростом количества подписей блока с одной до требуемых ⅔.
Отсюда мы можем вывести, что последний необратимый блок идентичен поступающим блокам в Ripple и Tinderment в том, что это предложение, принятое ⅔ производителей блоков.
Безопасность, обеспечиваемая непроизводящими заверителями
Акт производства блоков ничего не значит, если произведенные блоки не принимаются никем в мире. Одновременно могут существовать сотни тысяч независимых заверителей, которые общаются между собой (ретранслируя блоки и транзакции). Каждый из этих заверителей поддерживает машину состояния, которая не позволит им откатиться от своего собственного восприятия того, какой блок был последним необратимым.
Если же большинство производителей блоков сговорится и начнет производить более длинную цепь в попытке сделать форк за пределом последнего необратимого блока, тогда ни одна биржа, обозреватель блоков, торговец или любой другой заверитель не перейдет на этот форк. Весь мир согласится на “первом увиденном форке”
Это означает, что единственный способ повлиять на двойное проведение транзакции / откат после последнего необратимого блока - это изоляция вашей жертвы и разделение сети + сговор производителей. При внедрении небольших изменений, не затрагивающих консенсус, даже станет возможным для отдельной ноды запрашивать доказательство TaPoS (Транзакции как доказательство доли) у большинства не производящих блоки доверенных пиров, которые периодически транслируют транзакции. В такой модели даже сговорившиеся производители блоков, которые изолируют одну жертву, будут неспособны включать в блоки транзакции от третьих сторон. TaPoS делает это естественным образом, но это можно сделать эксплицитным.
С точки зрения Обеспечения
Работа обладает чистой текущей стоимостью (NPV), равной стоимости будущего потока доходов в сочетании с невозвратными издержками предвыборной агитации. Потеря работы имеет реальную экономическую стоимость. Быть уволенным стоит еще больше, так как добавляется стоимость репутации.
Если существует какой-либо способ сговора большинства производителей блоков и, как следствие, нанесения ощутимого ущерба индивиду, поддерживающему работу полной заверяющей ноды cо стабильными длительными связями с большим количеством пиров, то я вижу необходимость дополнительного обеспечения. Но учитывая, что каждый пир способен независимо подтвердить, что он и все, с кем он сотрудничает, находятся на одном и том же необратимом форке, мы поймем, что возможности обмануть хотя бы одну ноду попросту нет.
Существует две вещи, которые производитель блоков может применить, чтобы “навредить” сети:
- Не произвести блок
- Пропустить производителя блоков перед собой (это скорее всего изолирует атакующего, нежели атакуемого)
Производители блоков как группа могут предотвращать продвижение последнего необратимого блока, пока один из потенциально обратимых форков не будет способен избрать большинство производителей блоков, которые затем продвинут последний необратимый блок. Это означает, что в отсутствии чистого большинства любое меньшинство производителей способно успешно выдержать выборы и сохранить продвижение последнего необратимого блока.
Помимо удержания продвижения последнего необратимого блока большинство производителей блоков также может:
- Игнорировать всё меньшинство производителей и эффективно повышать средний интервал между блоками на 50%
- Игнорировать / цензурировать транзакции / препятствовать процессу выборов
Во всех возможных сценариях атаки нет потенциала для двойного проведения транзакции или традиционного перевода средств. Единственный случай, несущий риск для пользователей, это когда они сталкиваются с финансовой потерей в связи с цензурой их транзакции. Этот риск присущ каждому блокчейну и потому его не имеет смысла рассматривать.
Безопасность, Подотчетность и Жизнеспособность
Я думаю, что сумел доказать неспособность производителей блоков обмануть тысячи независимых заверителей без разделения сети; и тогда как физическое разделение сети остается возможным, логическое разделение сети, определенное не-консенсусными доверенными связями TaPoS, не может быть произведено. Самое большее, что можно сказать, это что доверенные связи TaPoS в настоящее время не используются в качестве упреждающей защиты от атаки с разделением сети.
Единственным средством для связанных обязательствами производителей блоков остается принудительная выплата штрафа за атаку с разделением сети. Если же ее представляется возможным предотвратить с помощью связей TaPoS, то никакие залоги не нужны.
Сеть из тысяч заверителей обеспечивает подотчетность через способность обнаружить и обнародовать производство поддельных цепей. Возможность попасться равна 100%, а последствия включают в себя потерю работы, репутации и потенциальную ответственность перед законом за воровство/мошенничество (потому как стороны известны и замечено двойное расходование и проведение бизнес транзакции вне цепи).
Блокчейн будет оставаться жизнеспособным (продвигающим последний необратимый блок) до тех пор, пока по крайней мере один производитель блоков будет способен обрабатывать достаточное количество ожидающих транзакций, чтобы избрать новых witness-майнеров, которые начнут производить последний необратимый блок вместо него. Даже потеря 100% производителей блоков не отнимет у сети возможности продвигать блок, учитывая, что хардфорк позволит одному witness-майнеру провести новые выборы.
Заключение
Нам не известно стратегий, в которых полная заверяющая нода со стабильными связями может быть обманута, и где ущерб, который могут причинить отдельный производитель блоков или находящееся в сговоре большинство, будет столь ощутимым, что окажется необходимо залоговое обеспечение помимо потери работы/репутации.
Делают ли залоговые обязательства платформу более безопасной? Они работают как входной барьер, который удерживает производство блоков (и, как следствие, права на цензуру) в руках богачей. Возможность применения цензуры гораздо более ценна, чем любая микроскопическая возможность произвести две альтернативные цепи в попытке обмануть изолированную жертву.
Оригинальный пост и его обсуждение ЗДЕСЬ
Данный пост опубликован в рамках бета тестирования проекта RuSteemitBlog
Перевод осуществлен: @mayamarinero
Критика, комментарии и предложения приветствуются.
только Tendermint, а не Tinderment
тут же производится сравнение с cosmos и технологией Tendermint на которой cosmos базируется
Спасибо за поправку, ошибка была в оригинале.
Дэна нужно клонировать или оцифровать и перенести в киберпространство