:RU: Обновление дизайна Ouroboros Genesis

https://iohk.io/en/blog/posts/2024/05/08/ouroboros-genesis-design-update/

Подробный обзор разработки и внедрения Ouroboros Genesis, последней версии протокола консенсуса, отвечающего за надежность и безопасность Cardano

image

Ouroboros Genesis - это серия усовершенствований и без того надежного протокола Ouroboros, включающая контрмеры для защиты ноды в сети, когда она является новой или возвращается после перерыва.

Ouroboros - это консенсусный протокол, лежащий в основе блокчейна Cardano. Учитывая продолжающееся развитие и растущее распространение Cardano, Ouroboros продвинулся по пути запланированного обновления. Ouroboros Classic стал первым доказуемо безопасным протоколом с доказательством ставки. Ouroboros BFT был промежуточным решением, которое позволило обновить Byron. Ouroboros Praos продолжил разработку Ouroboros Classic. Эволюция Ouroboros продвинется еще дальше с появлением Ouroboros Genesis, релиз которого в настоящее время запланирован на 3 квартал 2024 года.

В этой статье описываются последние обновления в разработке и внедрении протокола Ouroboros Genesis.

История Ouroboros на данный момент

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

Ouroboros делит время работы Cardano на эпохи, которые подразделяются на слоты. Слоты представляют собой короткие периоды времени, когда могут создаваться блоки.

Ouroboros Classic доказал свою безопасность, когда большинство нод подключены к сети и имеют постоянные копии леджера. Злоумышленники не могли предсказать, какая нода станет следующим лидером слота (нода, которая добавит блок в цепочку), что делало атаки очень дорогостоящими.

Ouroboros Praos увеличил рандомность выбора следующего лидера слота и добавил контрмеры для других возможных атак.

Ouroboros Genesis рассмотрит ситуацию, когда нода впервые подключается к сети (начиная с блока генезис) или возвращается после длительного отсутствия. Такие ноды находятся в уязвимом положении, пока не восстановят свою работоспособность. Например, долгосрочная атака происходит, когда злоумышленник пытается переписать историю цепочки. Злоумышленник накапливает большую сумму, позволяющую ему тайно создавать блоки быстрее, чем в основной цепочке. Затем, когда альтернативная история цепочки готова, злоумышленник пытается переключить основную цепочку на свою фейковую цепочку. Реализация Genesis предотвратит долгосрочные атаки, если только синхронизирующаяся нода не будет затменена. Атака Eclipse (атака затмения) происходит, когда злоумышленник пытается окружить ноду-жертву фейковыми одноранговыми нодами, скрывая реальную сеть.

Последние разработки

Genesis представляет следующие новые концепции:

  • пиры (одноранговые ноды) леджера
  • упрощенные контрольные точки (в качестве временного резервного варианта/переопределения)
  • ограничение активности (LoE)
  • отключения по плотности генезиса (GDD)
  • предел терпения (LoP)
  • машина состояния Genesis.

Пиры леджера

Самым существенным отклонением от документации Genesis было раннее архитектурное решение сохранить ограничение ноды Praos на rollback (откат). В Praos нода Cardano не будет выполнять откат более чем на 2160 блоков без ручного вмешательства. Как описано в документации Genesis, нода, подвергшаяся атаке Eclipse, может в течение многих лет выбирать только расширения фейковой цепочки, а затем, когда она, наконец, подключается к ноде, обслуживающей честную цепочку, резко откатить любое количество блоков.

Поскольку на практике ноде не обязательно иметь неограниченную возможность отката, архитекторы вместо этого определили приоритет ограничения отката, который является ключевым для многих ограничений на использование ресурсов. Отказ от него в Genesis привел бы к удалению основного инварианта, на который ссылалась значительная часть предыдущей инженерной работы. Более того, до тех пор, пока синхронизирующаяся нода Cardano Genesis имеет доступ к исправной и честной одноранговой ноде, она, как и нода Praos, не должна требовать отката более чем на 2160 блоков.

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

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

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

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

Резервный вариант: упрощенные контрольные точки

В документе Genesis утверждается, что лучшая цепочка в исправной сети Praos будет содержать больше блоков, чем любая другая цепочка в фиксированном интервале времени сразу после пересечения двух цепочек. Единственное исключение - если сеть Praos не исправна.

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

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

Логика проста и согласуется с остальной частью протокола: файл конфигурации, содержащий список номеров блоков и хеш-пар, каждая из которых приводит к тому, что любой другой блок с таким же номером считается недействительным. Данные конфигурации этой контрольной точки следует использовать с осторожностью и получать их только из надежных источников. В идеале, окончательное выполнение плана восстановления позволит (и даже потребует), чтобы реактивные добавления в список контрольных точек были временными. Единственными постоянными контрольными точками будут те, которые гарантируют, что ключи генезис эпохи Byron больше не имеют отношения к цепочке Cardano.

Ограничение активности

Поскольку одноранговые ноды леджера эффективно предотвращают затмения, нода синхронизации может предполагать, что у нее есть по крайней мере одна исправная одноранговая нода, обслуживающая всю честную цепочку. Таким образом, свойство безопасности напрямую обеспечивается простым запретом на выбор синхронизирующейся генезис-нодой более 2160 блоков цепочки после пересечения с цепочками ее пиров. Она будет выбирать только те блоки, с которыми согласны все пиры, которые почти наверняка включают честную ноду. Это ограничение называется ограничением активности (LoE), поскольку синхронизирующаяся нода не должна с готовностью принимать лучший блок, который она видела до сих пор. Фейковая нода может обрабатывать свои альтернативные блоки намного быстрее, чем любая честная нода может обрабатывать исторические блоки.

Отключение по плотности генезиса

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

• атакующая нода утверждает, что у нее больше нет блоков

• атакующая нода обслуживает альтернативную цепочку

• атакующая нода утверждает, что у нее есть альтернативные блоки, но она также не обслуживает их.

Фундаментальное правило из документации Genesis непосредственно смягчает первые два. Если два пира обслуживают разные цепочки и по крайней мере в одной из цепочек после пересечения находится не менее 2161 блока, Genesis отдает предпочтение той цепочке, у которой больше блоков в фиксированном количестве слотов после пересечения двух цепочек. (Честная цепочка всегда выигрывает в этом сравнении. Напомним, что общий префикс отражает пересечение цепочки, даже если одна из цепочек является просто продолжением другой.) Нода Genesis поддержит честную цепочку, отключившись от другого пира. Это действие известно как отключение по плотности генезиса (GDD). После достаточного количества GDD пересечение оставшихся нод будет проходить дальше по исторической цепочке.

Предел терпения

Третий вектор атаки является наиболее сложным для анализа. GDD не работает, если одноранговая нода утверждает, что у нее больше блоков. То есть она утверждает, что количество ее блоков в этом фиксированном количестве слотов увеличится, если ей будет предоставлено больше времени для обработки большего количества блоков. Честный пир всегда открыто заявляет об этом, пока синхронизирующаяся нода действительно не получит все честные блоки. Но атакующий пир может сделать это заявление недобросовестно. Предел терпения (LoP) гарантирует, что пир, заявляющий о наличии большего количества блоков, действительно должен отправить их, и сделать это быстро. Основная сложность заключается в том, что даже добросовестные пиры не могут поддерживать идеальную скорость отклика в течение нескольких часов подряд, у них иногда возникают задержки и т.д. По этой причине LoP реализован в виде “негерметичной корзины” для каждого пира, где утечка - это скорость обработки блоков, в то время как пир заявляет блоки и обрабатывает их медленнее, что отличается от обычной общей минимальной скорости, но емкость корзины каждого честного пира будет достаточно высокой, чтобы выдерживать типичные ожидаемые задержки от здоровых пиров леджера.

Машина состояния Genesis

Нода Genesis отключит LoE, GDD и LoP, как только придет к выводу, что она не отставшая, по двум важным причинам. Во-первых, не отставшая нода в сети Praos, по сути, должна создать наилучший блок, который она может, в слоте, в котором она выбрана. Например, если бы такая нода все еще использовала правила Genesis, сильный злоумышленник потенциально мог бы злоупотребить LoE, чтобы временно запретить жертве выбрать блок, который она только что создала, тем самым предотвратив его распространение по сети. Трудно ограничить общесистемные последствия такого вектора, и поэтому нода Genesis должна вести себя точно так же, как нода Praos, когда она не синхронизируется.

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

• При не отставании нода отключает LoE, GDD и LoP. • Нода приходит к выводу, что она не отставшая, если выполняются следующие условия:

  • у нее достаточно пиров леджера
  • все пиры утверждают, что у них нет дополнительных блоков (что, как гарантирует хорошо настроенный LoP, должно произойти достаточно скоро)
  • нода уже выбрала лучшую из цепочек пиров.

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

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

Следующие шаги

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

Релиз первой версии, поддерживающей Genesis, запланирован на 3 квартал 2024 года. На данном этапе остается неизвестной степень оптимизации, необходимая для компенсации увеличения числа пиров, необходимой для предотвращения затмений.

До тех пор, неизбежный дизайн самонастройки пиров служит шагом на пути к Genesis. Самонастройка машины состояния - это более простой вариант машины состояния Genesis. Во время синхронизации пир взаимодействует только с пирами самонастройки, каждый из которых является надежным, и, следовательно, LoE, GDD и LoP не нужны. В отличие от этого, Genesis позволит синхронизирующейся ноде безопасно включать ненадежные пиры до тех пор, пока она не будет затменена (т.е. пока одна из нод является честной), что позволит удалить самонастраиваемые одноранговые ноды, тем самым децентрализовав инфраструктуру для синхронизации нод и выполнив обещание Ouroboros Genesis.

Нил Берджесс внес свой вклад в создание этой статьи.

// От переводчика: для получения дополнительных переведенных на русский язык статей о Cardano посетите русскоязычный раздел на форуме Cardano. Видеоролики о Cardano на русском языке можно найти на YouTube канале нашего замечательного амбасадора Тимура Сахабутдинова, а также на канале Чарльз Хоскинсон на русском. Хотите поговорить или задать вопрос о Cardano? Тогда приглашаем в наше уютное русскоязычное сообщество Cardano в Telegram. Оставайтесь на связи, все только начинается!

2 Likes