![]() |
|
|
Реферат: Распределенные алгоритмыВ алгоритме Broadcast(N, 0) (Алгоритм 14.2), каждый процесс принимает решение в импульсе 1. В алгоритме Broadcast(N, t) помощники начинают рекурсивные обращения алгоритма, Broadcast(N-1, t-1), в импульсе 2. Если алгоритм начат в импульсе 1, он принимает решение в импульсе t (это - гипотеза индукции), следовательно если он начат в импульсе 2, все вложенные вызовы принимают решение в импульсе t + 1. В одном том же импульсе принимается решение в Broadcast(N, t). o Чтобы доказывать зависимость (также индукцией) предполагается, что командующий корректен, следовательно все t сбойных процесса находятся среди N-1 помощников. Так как t < (N - l) /3 не всегда выполняется, простую индукцию использовать нельзя, и мы рассуждаем, используя фактическое число неисправностей, обозначенное f. Лемма 14.3 (Зависимость) Если командующий корректен, если имеется f сбойных процессов, и если N > 2f+t, то все корректные процессы останавливаются на входе командующего. Доказательство. В алгоритме Broadcast(N, 0) если командующий корректен, все корректные процессы, останавливаются на значении входа генерала. Теперь предположим, что лемма справедлива для Broadcast(N-1, t-1). Так как командующий корректен, он
посылает свой вход всем помощникам в импульсе 1, так что каждый корректный
помощник q выбирает Лемма 14.4 (Соглашение) Все корректные процессы останавливается на одном и том же значении. Доказательство. Так как зависимость означает соглашение в выполнениях, в которых командующий является корректным, мы теперь сконцентрируемся на случае, когда командующий сбойный. Но тогда самое большее t-l помощников сбойные, что означает, что вложенные вызовы функционируют в пределах своих способностей восстановления! Действительно, t < N/3 означает t - 1 < (N - 1) / 3,
следовательно, вложенные вызовы удовлетворяют соглашению. Таким образом, все корректные
помощники остановятся на одном и том же значении Теорема 14.5 Протокол Broadcast(N, t) (Алгоритм 14.2/14.3) - t-Византийско-устойчивый протокол вещания при t < N/3. Доказательство. Завершение было показано в Лемме 14.2, зависимость в Лемме 14.3, и соглашение в Лемме 14.4. o Протокол Broadcast принимает решение в (t + 1)-ом импульсе, что является оптимальным; см. Подраздел 14.2.6. К сожалению, его сложность по сообщениям экспоненциальная; см. Упражнение 14.1. 14.1.3 Полиномиальный Алгоритм Вещания В этом разделе мы представляем Византийский алгоритм вещания Долева и других [DFF+82], который использует только полиномиальное число сообщений и бит. Временная сложность выше, чем у предыдущего протокола; алгоритм требует 2t+3 импульса для достижения решения. В следующем описании будет предполагаться, что N = 3t + 1, и позже будет обсужден случай N > 3t + 1. Алгоритм использует два порога, L = t + 1 и H = 2t + 1. Эти
числа выбираются так, что (1) каждое множество из L процессов
содержит по крайней мере один корректный процесс, (2) каждое множество из H процессов содержит по крайней мере L корректных процессов,
и (3) имеется по крайней мере H корректных процессов. Обратите внимание, что
предположение Алгоритм обменивается сообщениями типа <bm,
v>, где v или значение 1,
или имя процесса (bm обозначает “broadcast message”, “вещать
сообщение”.) Процесс p содержит двухмерную булеву таблицу R, где В отличие от протокола Broadcast предыдущего подраздела, протокол Долева и других является асимметричным в значениях 0 и 1. Решение 0 - значение по умолчанию и выбирается, если в обмене было недостаточно много сообщений. Если командующий имеет вход 1, он будет “выкрикивать” сообщения <bm, 1>, и получение достаточно большого количества отраженных сообщений, типа <bm, q>, заставляет процесс принять решение 1. В алгоритме уместны три типа действия: инициирование, поддержка и подтверждение. (1)
Поддержка. Процесс p поддерживает процесс q в импульсе i, если в более ранних импульсах p получил
достаточно доказательств, что q послал сообщения <bm,
1>; если дело обстоит так, p пошлет <bm, q> сообщения в
импульсе i. Процесс p прямо поддерживает q, если
p получил сообщение <bm, 1>
от q. Процесс p косвенно поддерживает q, если p получил сообщение
<bm, q> по крайней
мере от L процессов. Множество процессов
Порог для становления косвенным поддерживающим означает, что если корректный процесс поддерживает процесс q, то q послал по крайней мере одно сообщение <bm, 1>. Действительно, предположим, что некоторый корректный процесс поддерживает q, пусть i - первый импульс, в котором это происходит. Так как косвенная поддержка q требует получения по крайней мере одного сообщения <bm, q> от корректного процесса в более раннем импульсе, первая поддержка корректным процессом процесса q - прямая. Прямая поддержка корректным процессом означает, что этот процесс получил сообщение <bm, 1> от q. (2) Подтверждение. Процесс p подтверждает процесс q после получения сообщения <bm, q> от H процессов, то есть, Выбор порогов означает, что, если корректный процесс p подтверждает q, то все корректные процессы подтверждают q самое большее одним импульсом позже. Действительно, предположим, что p подтверждает q после импульса i. Процесс p получил сообщения <bm, q> от H процессов, включая (выбором порогов) по крайней мере L корректных поддерживающих для q. Корректные поддерживающие для q посылают сообщение <bm, q> всем процессам, что означает, что в импульсе i все корректные процессы получают по крайней мере L сообщений <bm, q> и поддерживают q в импульсе i + 1. Таким образом, в импульсе i + 1 все корректные процессы посылают <bm, q>, и поскольку число корректных процессов по крайней мере H, каждый корректный процесс получает достаточную поддержку, чтобы подтвердить q. (3)
Инициирование. Процесс p инициирует, когда у него есть
достаточно доказательств того, что окончательное значения решения будет 1.
После инициирования, процесс p посылает сообщения <bm, 1>.
Инициирование может быть вызвано тремя типами доказательств, а именно (1) p -
командующий и Если корректный помощник r инициирует в конце импульса i, все корректные процессы подтверждают r в конце импульса i + 2. Действительно, r “выкрикивает” <bm, 1> в импульсе i + 1, поэтому все корректные процессы (прямо) поддерживают r в импульсе i + 2, так что каждый процесс получает по крайней мере H сообщений <bm, q> в этом импульсе. Алгоритм продолжается в течение 2t + 3 импульсов; если процесс p подтвердил по крайней мере H процессов (здесь считает командующий) к концу того импульса, p принимает решение 1, иначе p принимает решение 0. См. Алгоритм 14.4. var Импульс i: (* Фаза посылки *) if forall получить все сообщения импульса i; (*обновление состояния*) if i = 1 and
if if i = 2t + 3 then (*принять решение*) if Алгоритм 14.4 Протокол с надежным вещанием. Командующий, являющийся единственным процессом, который может самостоятельно предписать инициирования (в других процессах) занимает мощное положение в алгоритме. Легко заметить, что, если командующий корректно инициирует, начинается лавина сообщений, которая заставляет все корректные процессы подтвердить H процессов и остановиться на значении 1. К тому же если он не инициирует, то нет "критической массы" сообщений, которая ведет к инициированию любого корректного процесса. Лемма 14.6 Алгоритм 14.4 удовлетворяет завершению (и одновременности) и зависимости. Доказательство. Из алгоритма видно, что все корректные процессы принимают решение в конце импульса 2t + 3, что показывает завершение и одновременность. Чтобы показать зависимость, мы предположим, что командующий корректен. Если командующий корректен и имеет вход 1, он “выкрикивает” сообщение <bm, 1> в импульсе 1, заставляя каждый корректный процесс q инициировать. Следовательно, каждый корректный процесс q “выкрикивает” <bm, 1> в импульсе 2, так что к концу импульса 2 каждый корректный процесс p поддерживает все другие корректные процессы. Это означает, что в импульсе 3 каждый корректный p “выкрикивает” <bm, q> для каждого корректного q, так что в конце импульса 3 каждый корректный процесс получает <bm, q> от каждого другого корректного процесса, заставляя его подтвердить q. Таким образом с конца раунда 3 каждый корректный процесс подтвердил H процессов, что означает, что окончательное решение будет 1. (Командующий поддерживается и подтверждается всеми корректными процессами одним импульсом ранее других процессов.) Если командующий корректен и имеет вход 0, он не “выкрикивает” <bm, 1> в импульсе 1, чего не делает и никакой другой корректный процесс. Предположим, что никакой корректный процесс не инициировал в импульсах с 1 по i-1; тогда никакой корректный процесс не посылает <bm, 1> в импульсе i. В конце импульса i никакой корректный процесс не поддерживает и не подтверждает никакого корректного процесса, так как, как мы видели ранее, это подразумевает, что последний процесс послал сообщение <bm, 1>. Следовательно, никакой корректный процесс не инициирует в конце импульса i. Отсюда следует, что никакой корректный процесс не инициирует вообще. Это означает, что никакой корректный процесс никогда не подтверждает корректный процесс, так что никакой корректный процесс не подтверждает более t процессов, и решение в конечном импульсе - 0. o Мы продолжим доказательством соглашения, и будем предполагать в следующих леммах, что командующий сбойный. Достаточная "критическая масса" сообщений, ведущая неизбежно к 1-решению, создается инициированием L корректных процессов, когда имеется по крайней мере четыре импульса. Лемма 14.7 Если L корректных процессов инициируют к концу импульса i, i < 2t, то все корректные процессы останавливаются на значении 1. Доказательство. Пусть i - первый импульс, в конце которого по крайней мере L корректных процессов инициируют, и пусть А обозначает множество корректных процессов, которые инициировали в конце импульса i. Все процессы в A - помощники, так как командующий сбойный. В конце импульса i + 2 все корректные процессы подтвердили помощников в А; мы покажем, что в это время все корректные процессы инициируют. Случай i = 1: Все корректные процессы
подтвердили помощников из А к концу импульса 3, и инициируют, так как Случай Теперь, поскольку все корректные процессы инициируют к концу
раунда i + 2, они подтверждены (всеми корректными процессами) в конце раунда i
+ 4, следовательно все корректные процессы подтвердили по крайней мере H помощников.
Поскольку предполагалось, что i < 2t, Для любого корректного процесса, чтобы остановиться на 1, необходима "лавина", состоящая из инициирования по крайней мере L на корректных процессов. Действительно, 1-решение требует подтверждения по крайней мере H процессов, включая L корректных, что эти корректные процессы инициировали. Вопрос в том может ли Византийский заговор откладывать начало лавины достаточно долго, чтобы вызвать 1-решение в некоторых корректных процессах, без навязывания его в общем согласно Лемме 14.7. Конечно, ответ - нет, так как имеется ограничение на то, как долго заговор может откладывать лавину, и число импульсов, 2t + 3, выбрано точно так, чтобы предотвратить это. Причина - возрастающий порог для требуемого числа подтвержденных процессов; в более поздних импульсах он становится настолько высок, что уже стало необходимо L инициированных корректных помощников, чтобы инициировать следующий корректный процесс. Лемма 14.8 Предположим, что по крайней мере L корректных процессов инициируют в течение алгоритма, и пусть i - первый импульс, в конце которого инициируют L корректных процессов. Тогда i < 2t. Доказательство. Чтобы инициировать в импульсе 2t или выше, корректный процесс должен подтвердить по крайней мере Th(2t) = L + (t-1) помощников. Так как командующий сбойный, то есть самое большее t-1 сбойных помощников, поэтому по крайней мере L корректных помощников должны были быть подтверждены, что показывает, что уже, в более раннем импульсе, L корректных процессов, должно быть, инициировали. o Теорема 14.9 Алгоритм вещания Долева и других (Алгоритм 14.4) - t-Византийско-устойчивый протокол вещания. Доказательство. Завершение (и одновременность также) и зависимость показаны в Лемме 14.6. Чтобы показать соглашение, предположим, что имеется корректный процесс, который останавливается на значении 1. Мы заметили, что это означает, что по крайней мере L корректных процессов инициировали. По Лемме 14.8, впервые это случалось в импульсе i < 2t. Но тогда по Лемме 14.7, все корректные процессы останавливаются на значении 1. o Чтобы облегчить представление алгоритма, было сделано
предположение, что процессы повторяют в каждом раунде сообщения, которые они
посылали в более ранних раундах. Поскольку корректные процессы записывают
сообщения, полученные в более ранних раундах, это не нужно, поэтому достаточно
послать каждое сообщение только. Таким образом, каждый корректный процесс посылает
каждое из N+1 возможных сообщений другому процессу самое большее один раз, что
ограничивает сложность по сообщениям величиной Если число процессов превышает 3t + 1,
для выполнения алгоритма выбирается совокупность 3t активных помощников. (Выбор
выполняется статически, например, выбирая 3t процессов, чьи имена следуют за g
в порядке имен процессов. Командующий и активные помощники сообщают пассивным
помощникам о своем решении, и пассивные помощники останавливаются на значении,
которое они получают от более t процессов. Сложность по сообщениям этого
послойного подхода - 14.2 Протоколы с Установлением Подлинности Злонамеренное поведение, рассматриваемое до сих пор включало неправильную пересылку информации в дополнение к посылке неправильной информации о собственном состоянии процесса. К счастью, это чрезвычайно злонамеренное поведение Византийских процессов может быть ограничено с помощью криптографических средств, которые сделали бы Теорему 14.1 недействительной. Действительно, в сценариях, используемых в ее доказательстве, сбойные процессы посылали бы сообщения как в сценарии 1, получив только сообщения сценария 0. В этом разделе предполагается наличие средства для цифровой
подписи и установления подлинности сообщений. Процесс p,
посылающий сообщение М, добавляет к этому сообщению некоторую дополнительную
информацию (1)
Если p корректен, только p может правдоподобно вычислить (2)
Каждый процесс может эффективно проверять (имея p, М и S)
Схемы подписи основаны на частных и общих ключах. Первое предположение не исключает того, что Византийские процессы могут открыть свои секретные ключи друг другу, что позволяет одному Византийскому процессу подделать подпись другого. Предполагается, что только корректные процессы хранят свои частные ключи в секрете. Мы изучим реализацию схем подписи в Подразделах с 14.2.2 по
14.2.5. В следующем подразделе, сообщение <msg>, подписанное
процессом p, то есть, пара, содержащая <msg> и 14.2.1 Протокол Высокой Степени Восстановления Эффективный Византийский алгоритм вещания, использующий полиномиально много сообщений и t+1 импульсов, был предложен Долевом и Стронгом [DS83]. Установление подлинности, используемое в этом протоколе, разрешает неограниченную способность восстановления. Мы заметим, тем не менее, что могут отказать не более N процессов (из N), и N процессов отказывают, все требования примитивно удовлетворяются; следовательно пусть t < N. Их протокол основан на более раннем, предложенном Лампортом, Шостаком и Пизом [LSP82], который является экспоненциальным по числу сообщений. Мы представляем сначала последний протокол. В импульсе 1 командующий “выкрикивает” сообщение <value, В импульсах со 2 по t + l процессы подписывают и пересылают
сообщения, которые они получили в предыдущем импульсе; следовательно,
сообщение, которым обмениваются в импульсе i, содержит i подписей. Сообщение
<value, v> : g : Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42 |
|
|||||||||||||||||||||||||||||
![]() |
|
Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое. |
||
При использовании материалов - ссылка на сайт обязательна. |