Что такое задача о византийских генералах
Перейти к содержимому

Что такое задача о византийских генералах

  • автор:

Разбираемся в основах Blockchain: Задача Византийских Генералов. Часть 1

Перевод статьи подготовлен специально для студентов курса «Архитектор высоких нагрузок», который стартует уже в этом месяце.

Блокчейн – это децентрализованная система, состоящая из различных субъектов, которые действуют в зависимости от своих стимулов и имеющейся у них информации.

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

Эти процессы описываются как консенсус.

  • Что происходит, когда участник решает не следовать правилам и вмешаться в состояние своего леджера?
  • Что происходит, когда таких участников в сети достаточно много, но не большинство?

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

Задача двух генералов

Эта задача, впервые опубликованная в 1975 году и получившая свое название в 1978 году, описывает сценарий, когда два генерала атакуют общего врага. Первый генерал считается лидером, а второй – последователем. Армии каждого генерала по отдельности недостаточно, чтобы победить вражескую армию, поэтому им нужно сотрудничать и атаковать одновременно. Этот сценарий выглядит просто, но есть один нюанс:

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

Даже если первое послание будет доставлено, второй генерал должен подтвердить (ACK (acknowledge), обратите внимание на сходство с трехсторонним рукопожатием в TCP), что он получил сообщение, поэтому он отправляет гонца обратно, тем самым воспроизводя предыдущий сценарий, где посланник может быть захвачен. Это перетекает в бесконечные ACK, и из-за этого генералы не могут достичь согласия.

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

Было доказано, что задача двух генералов неразрешима.

Задача Византийских Генералов

Описанная в 1982 году Лэмпортом, Шостаком и Пизом, версия этой задачи оказалось с изюминкой. Она описывает тот же сценарий, где вместо двух генералов о времени атаки должны договориться большее количество генералов. Дополнительная сложность заключается в том, что один или несколько генералов могут быть предателями, то есть они могут солгать о своих намерениях (например, генерал говорит, что он согласен атаковать в 09:00, но не сделает этого).

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

Задача Византийских Генералов. Командующий генерал должен отправить приказ своим n-1 подчиненным, такой что:

  • Все верноподданные подчиненные генералы подчиняются одному приказу.
  • Если командующий генерал верноподданный, тогда все верные ему подчиненные подчиняются его приказам.

В добавок ко второму пункту нужно указать на интересный факт: если командир – предатель, то консенсус все равно должен быть достигнут. В результате все лейтенанты имеют большинство голосов.

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

Теорема: Для любого m, алгоритм OM(m) достигает консенсуса при более чем 3m генералов и максимум m предателях.

Это означает, что алгоритм может достичь консенсуса пока 2/3 участников честны. Если предателей больше 1/3, консенсус не достигается, армии не могут скоординировать свои атаки, и враг побеждает.

Алгоритм ОМ(0)

  1. Командир отправляет свое значение каждому из подчиненных.
  2. Каждый подчиненный использует значение, которое он получает от командира, или использует значение ОТСТУПИТЬ, если не получает никакого значения.
  1. Командир отправляет с свое значение каждому из подчиненных.
  2. Для каждого i, пусть vi будет значением, которое i-й подчиненный получает от командира, либо же будет использовано значение ОТСТУПИТЬ, если подчиненный не получает никакого значения. i-й подчиненный выступает в качестве командира в Алгоритме ОМ(m-1) и отправляет значение каждому из n-2 оставшихся подчиненных.
  3. Для каждого i, при условии, что ji, пусть vj будет значением, которое i-й подчиненный получил от j-ого подчиненного на шаге (2) (используя Алгоритм ОМ(m-1)), или использует значение ОТСТУПИТЬ, если не получает никакого значения. i-й подчиненный использует значение большинства (v1, …, vn-1).

OM(1): Подчиненный 3 – предатель. Ситуация с точки зрения второго подчиненного.

  1. Командир отправляет v всем подчиненным.
  2. L1 посылает L2 значение v или L3 отправляет L2 значение x.
  3. L2 ← большинство(v,v,x) == v

Важно помнить, что цель состоит в том, чтобы большинство подчиненных выбрало одно и то же решение, а не какое-то конкретное.

Давайте посмотрим на случай, когда командир – предатель.

OM(1): Командир – предатель.

  1. Командир посылает L1, L2, L3 значения x, y, z соответственно;
  2. L1 посылает значение x подчиненным L2, L3 | L2 посылает L1, L3 значение y | L3 посылает L1, L2 значение z;
  3. L1 ← большинство(x, y, z) | L2 ← большинство(x, y, z) | L3 ← большинство(x, y, z)

Чтобы посмотреть на практический подход к более сложному примеру с 7 генералами и 3 предателями я предлагаю вам прочитать эту статью.

Византийская отказоустойчивость

Византийская отказоустойчивость является характеристикой, которая определяет систему, которая допускает класс отказов, который принадлежит Задаче Византийских Генералов. Византийский отказ – самый сложный класс видов отказов. Он не подразумевает никаких ограничений и не делает предположений о том, какое поведение может иметь узел (например, узел может генерировать любые произвольные данные, выдавая себя за честного участника).

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

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

Как это все относится к блокчейну?

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

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

Когда был изобретен биткоин, большим прорывом стало использование доказательства работы вероятностного решения задачи Византийских Генералов. Оно было подробно описано Сатоши Накамото в этом электронном письме.

Задача византийских генералов: история и решение

В 1982 году криптолог Лесли Лэмпорт сформулировал «задачу византийских генералов», ставшую одной из главных проблем в области обмена данных и затем подтолкнувшую Сатоши Накамото к ее решению с помощью блокчейна. О том, почему этот мысленный эксперимент, к которому поначалу мало кто отнесся всерьез, привел к революции в цифровой экономике, слушайте в архивной лекции доктора технических наук Романа Олейникова.

Формулировка задачи

Первое упоминание проблемы византийских генералов появилось в 1982 году в статье Лесли Лэмпорта. Речь в ней идет о классическом примере из истории феодальных отношений, а именно — о Византии. Есть несколько генералов, которые не подчиняются друг другу. Они берут в осаду город. Генералам необходимо прийти к единому решению: вместе атаковать этот город, чтобы победить, или вместе отступить, чтобы сохранить войска. Если же некоторые из них начнут атаковать, а другие решат отступать, то противник разгромит всю армию по частям, и все генералы потерпят поражение. Им необходимо договориться, но при этом у них отсутствует надежный канал коммуникации между собой. Они могут отправлять друг другу гонцов, но враг может перехватывать гонцов, чтобы подменить сообщение. Следовательно, генералы не могут быть уверены в доставке информации и ее подлинности. В таких условиях им и необходимо прийти к общему решению: вместе атаковать или отступать.

Это наглядный пример для описания технических систем, в которых есть несколько компонентов, выполняющих общее резервирование. Какие-то компоненты могут быть сбойными. Если речь идет о сбоях, когда компонент просто отключается, то это называется Crash fault tolerance (CFT). Если же компонент продолжает работать, но при этом генерирует произвольные сообщения, которые считываются как нормальные и могут приниматься для работы в общей системе, то в этом случае мы получаем BFT-протоколы (Byzantine fault tolerance) — протоколы, стойкие к такому классу сбоев.

Протокол консенсуса Сатоши Накамото

При разработке биткоина Сатоши Накамото удачно объединил решения, которые были известны до него. Он объединил PoW (Proof-of-work) с решениями из децентрализованных систем и пришел к достаточно простому интуитивному протоколу, который до него не существовал. Это и является существенным новшеством биткоина.

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

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

Формулировки требований

Существуют две формулировки требований задачи византийских генералов: более строгая и более мягкая, которой и соответствует биткоин.

Начнем со строгой. Задача византийских генералов должна быть решена в условиях, когда участники протокола обмениваются сообщениями, но при этом нет никакого лимита на время доставки этих сообщений, то есть сообщения могут быть потеряны с некоторой вероятностью или доставка может затянуться на очень длительный срок. Такая сеть называется асинхронной. В этих условиях работают BFT-протоколы. Среди них, например, pBFT, Honey Badger, Algorand, Hashgraph. Все эти протоколы соответствуют строгим требованиям BFT. Они работают в асинхронных сетях (за исключением Algorand — там требуется некоторое ограничение асинхронности). Их главное свойство выражается в том, что если эти протоколы уже пришли к некоторым решениям (построили цепочку блоков), то это решение невозможно отменить: система пришла и история становится неизменяемой.

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

Практическое решение

Решение задачи византийских генералов позволяет построить децентрализованную систему без какой-либо доверенной стороны, которая будет работать с высокой надежностью. Здесь мы получаем набор компонентов, которые взаимодействуют между собой по некоторому формализованному протоколу, и эти компоненты приходят к единому решению независимо от того, каким образом ведут себя сбойные компоненты. То есть в технической системе не важно, каким образом и какие сообщения посылают сбойные узлы, главное, чтобы их было меньше ⅔, если речь идет о строгих BFT-требованиях. Если мы говорим о криптовалютах, то мы можем построить полностью децентрализованную систему. Часть узлов могут быть сбойными, часть сети может отключаться какими-либо административными средствами, но сеть будет функционировать постоянно. Нет какой-либо одной или нескольких точек, отключив которые можно полностью блокировать сеть.

Влияние на современные платежные системы

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

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

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

Значение для экономики и общества

Это действительно революционный продукт, и некоторые специалисты связывают его с появлением стека протоколов TCP/IP, позволившего в 1980-е годы построить децентрализованную сеть, которую мы сейчас называем интернетом. Проводя аналогии с тем, что предложил в свое время Сатоши, такое же решение на более высоком уровне позволит построить децентрализованные организации.

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

Как византийские генералы помогли создать современную криптовалюту

В децентрализованной системе обмена данными при использовании блокчейна важно учитывать наличие потенциальных злоумышленников, или византийских генералов-предателей

Мысленный эксперимент о верных и неверных генералах помог программистам решить задачу безопасного взаимодействия при использовании технологии блокчейн

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

Задача о византийских генералах

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

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

  • если все честные генералы поведут свои легионы в атаку – Византия одержит победу (благоприятный исход);
  • если все честные генералы прикажут отступать – будут сохранены жизни легионеров (промежуточный исход);
  • если одни честные генералы пойдут вперед, а другие честные генералы дадут приказ к отступлению, исход будет неблагоприятным (враг уничтожит армию).

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

Условие задачи византийских генералов

Византийским генералам на основе полученных данных предстоит выявить предателя в собственных рядах

Криптографы представили математическую задачу в виде легенды о византийской армии

Есть определенное число генералов – N. Их войска дислоцированы в горах и собираются атаковать противника в долине. M генералов из общего числа N перешли на сторону врага и хотят сорвать соглашение между верными генералами. Цель соглашения – узнать численность верных Византии легионов и легионов, возглавляемых генералами-перебежчиками. Соглашение очень важно, ведь для победы или как минимум согласованного отступления необходимо выработать общую стратегию.

Варианты решения задачи

Предположим, что один из четырех генералов оказался предателем (N = 4 , M = 1). Следовательно, трое верных военачальников пошлют верные сведения о количестве своих легионеров, а в сообщениях предателя цифры могут быть какими угодно. Допустим, первый генерал сообщил, что в составе его легиона есть 1 тысяча воинов, у второго – 2 тысячи, у четвертого – 4 тысячи. Третий генерал (перебежчик) указал остальным случайно выбранные цифры x, y, z.
Из полученных данных каждый военачальник формирует свой вектор:

  • 1-й вектор — 1,2,x,4;
  • 2-й вектор — 1,2,y,4;
  • 3-й вектор — 1,2,3,4;
  • 4-й вектор — 1,2,z,4.

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

Участникам блокчейна необходимо выявить недобросовестное звено в цепочке распределения данных

Составление векторов при обмене информацией между участниками блокчейна

Затем генералы определяют количество воинов в каждом легионе. Для расчета первого легиона берется три числа: численность этого легиона, известная из сообщений всех генералов за исключением командующего самим первым легионом. Если одно из 3-х чисел повторяется дважды или трижды, оно помещается в итоговый вектор. Если совпадений нет, значение итогового вектора определяется как «неизвестное».

В итоге каждый верный генерал получает свой вектор N, в котором первый элемент равняется действительной численности войск первого легиона (в случае, если его командир не является предателем) или содержит неправдивые данные (если ее генерал работает на врага). При этом векторы всех верных генералов должны получиться идентичными.

Результат выглядит следующим образом: ( 1,2,f (x,y,z), 4 ), где f (x,y,z) – значение, встречающееся как минимум дважды среди чисел x,y,z или «неизвестное» в случае, если все 3 числа различны. Поскольку x,y,z и функция f (x,y,z) у всех верных генералов совпали, следовательно, согласие достигнуто и враг будет разбит.

Практическое применение задачи

Все участники блокчейна оказываются генералами из византийской задачи

Мысленный эксперимент о византийских генералах имел практическое значение при создании биткоина

Алгоритм решения этой задачи был использован при создании самой популярной криптовалюты – биткоина (ВТС). Так, майнинг цифровых монет и их перераспределение внутри системы происходит с участием византийских генералов, которые обмениваются между собой сводками о состоянии своих войск. Обращение bitcoin осуществляется в децентрализованной сети, построенной на технологии blockchain. Каждый блок создан в соответствии с определенным алгоритмом, содержащим записи обо всех платежных операциях (обмене сообщениями между генералами). Любая операция считается состоявшейся лишь после проверки ее формата, заверения подписью генералов и объединения в блок с остальными транзакциями. Содержимое блоков можно проверить, начиная с самой первой операции, поскольку все они выстроены в последовательную общую цепь.

Блоки состоят из заглавий и перечня завершенных транзакций. Для передачи информации между блоками и их «компактификации» применяется хеш – преобразование вводных данных в бит-строку определенного размера. Для вычисления хеша используется специальный математический алгоритм.

Значение хэша в технологии blockchain

Хеширование применяется для передачи информации между блоками в системе блокчейн

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

Доказательство устойчивости криптовалютных систем

Еще одно свойство биткоина было обнаружено известным американским ученым Лесли Лэмпортом. Он доказал, что согласия в штабе N генералов можно достичь лишь в случае, если количество перебежчиков не превышает N/2 минус один генерал. Это правило, работающее при генерации биткоинов, получило название «правило 51 процента». Говоря проще, если мощности предателей превышают мощности честных генералов, то последние не смогут построить корректную систему векторов по причине недостатка правильной информации. В случае с биткоинами это позволит «перебежчикам» выборочно подтверждать чужие блоки, а значит, контролировать процесс добычи криптовалюты.

Правило 51-го процента подразумевает устойчивость системы, если более половины участников блокчейна действуют честно

Добыча новых биткоинов происходит корректно, пока в блокчейн-сообществе преобладают добросовестные участники

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

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

Algo#1 Византийские генералы запускают ракеты

Kirill Poltoradnev

В больших системах датчики могут выдавать неверные результаты по ряду причин. Их необходимо выявлять и устранять как можно быстрее. Однако, если МКС может обследовать инженер, то исправить что-либо в запущенной ракете уже сложнее. Задача двух генералов — понятная модель концепции отказоустойчивости — способа избежать неверных ответов от датчиков. Далее рассмотрим, каким образом компьютер определяет, какие данные правильные, а какие — нет.

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

Звучит интересно, сложно, но пока непонятно. Ниже — детальное объяснение на простых моделях.

Задача двух генералов

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

Сделать это можно только одним путем — отправить гонца, но два генерала заранее договорились атаковать врага с двух сторон, поэтому гонцу придётся проходить через лагерь противника. Однако, существует вероятность, что гонец будет захвачен противником, а послание — не доставлено. В результате, первая армия может начать наступление в одиночку и потерпеть поражение.

Чтобы этого избежать, второй генерал должен подтвердить свою готовность к нападению (ACK — acknowledge), отправив сообщение первому, подвергая гонца и информацию риску. Такая ситуация перетекает в бесконечные отправления подтверждений, так как наступление возможно только в случае, когда каждый генерал абсолютно уверен, что его союзник готов.

Нет способа гарантировать осведомленность обоих о нападении. Доказано, что задача двух генералов неразрешима.

Обобщенная задача византийских генералов

Новая формулировка задачи двух генералов, разработанная в 1982 году. В задачи мы имеем дело уже не с двумя генералами, а с произвольным количеством, и все они должны договориться о нападении. Дополнительная сложность — некоторые из главнокомандующих могут быть предателями, то есть, солгать о своих намерениях.

Оригинальная постановка задачи

Командующий генерал должен отправить приказ своим n-1 подчиненным, такой что:

1. Все генералы — НЕ предатели подчиняются одному приказу.

2. Если командующий генерал — НЕ предатель, тогда все подчиненные исполняют его приказы.

Изменим формулировку на более понятную: Так же, как и с двумя генералами, будет один лидер — командир, определивший время наступления. У командира есть свои подчиненные — лейтенанты, исполняющие его команды (причем, они командуют своей армией). Для достижения консенсуса командир и каждый подчиненный должны договориться об одном решении (атака или отступление).

Уточним условие. Если командир — предатель, то консенсус все равно должен быть достигнут. Алгоритм в этом случае основан на значении большинства решений (сообщений), которые получают подчиненные.

Теорема: Для любого числа предателей — m, алгоритм OM(m) достигает консенсуса при более чем 3m генералов.

Иначе говоря, алгоритм достигает консенсуса, пока количество верноподданных лейтенантов составляет 2/3 от всех, а количество предателей — 1/3 соответственно.

Алгоритм OM(m) для m=0

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

Алгоритм OM(m) для m>0

  1. Командир отправляет приказvкаждому из подчиненных.
  2. Для каждого i, пустьvi будет значением, которое i-й подчиненный получает от командира, либо же будет использовано значениеотступить, если подчиненный не получает никакого значения. i-й подчиненный выступает в качестве командира в Алгоритме ОМ(m-1) и отправляет значение каждому из n-2 оставшихся подчиненных, исключая командующего.
  3. Для каждого j, при условии, что j не является i-ым, пусть vj будет значением, которое j-й подчиненный получил от i-ого подчиненного на шаге (2) (используя Алгоритм ОМ(m-1)), или использует значение ОТСТУПИТЬ, если не получает никакого значения. j-й подчиненный использует значение большинства (v1, …, vn-1).

При m=0 предателей нет, каждый подчиненный следует приказу. При m>0 каждый итоговый выбор подчиненного исходит из выбора большинства. То есть на шаге (2) каждый лейтенант оповещает других о своем приказе от командира. Итоговый выбор лейтенанта — большинство из полученных им оповещений.

Разберем конкретный пример — частный случай теоремы.

Есть один командир и три лейтенанта L1, L2, L3. Пусть один из них предатель, например, L3. Тогда алгоритм OM(m) выглядит так:

  1. Командир отправляет v L1, L2 и L3, такое что v=x
  2. L1 отправляет L2x, L3 отправляет L2y, и т.д.
  3. L2 делает свой выбор из набора оповещений (x, x, y) ->x

Окончательное решение принимается из большинства голосов от L1, L2 и L3 и в результате достигается консенсус. Важно помнить, что цель состоит в том, чтобы большинство подчиненных выбрало одно и то же решение, а не какое-то конкретное.

Рассмотрим случай, когда сам командир — предатель

Алгоритм для этого случая такой:

  1. Командир посылает L1, L2, L3 значения x, y, z (разные значения означают разные команды лейтенантам)
  2. L1 посылает значениеxподчиненным L2, L3. В то же время L2 посылает L1, L3 значениеу, а L3 посылает L1, L2 значениеz
  3. L1 принимает значение из большинства(x, y, z), аналогично L2 ← большинство(x, y, z) и L3 ← большинство(x, y, z)

Каждая команда имеет одинаковую ценность, таким образом достигается консенсус. Заметим, что даже если значения x, y, z — все разные, значение большинство(x, y, z) одинаково для всех трех подчиненных. В случае, если x, y, z — совершенно разные приказы, мы можем предположить, что они будут действовать по дефолтному плану — ОТСТУПИТЬ.

Византийская отказоустойчивость

Византийская отказоустойчивость — характеристика, определяющаях систему допущения класса отказов, который принадлежит Задаче Византийских Генералов. Византийский отказ — самый сложный класс видов отказов. Он не подразумевает никаких ограничений и не делает предположений о том, какое поведение может иметь узел(командир). Например, узел-командир-предатель может генерировать любые произвольные данные, выдавая себя за честного участника.

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *