論文翻訳: The Byzantine Generals Problem
LESLIE LAMPORT, ROBERT SHOSTAK, and MARSHALL PEASE
SRI International
Abstract
信頼性の高いコンピュータシステムは誤動作したコンポーネントがシステムの別の部分に矛盾した情報を与えてしまうことに対処しなければならない。このような状況は抽象的に、ビザンツ軍の将軍たちが敵対する都市に軍隊を展開しているように表現ができる。将軍たちは使者 (messenger) によってのみコミュニケーションを取りながら共通の戦闘計画に合意しなければならない。しかし、そのうちの一人または数人が裏切り者で、他のものを混乱させようとするかも知れない。この問題は忠実な将軍たちが合意に達することを保証するアルゴリズムを見つけることである。口頭のメッセージのみを用いた場合、この問題は 3 分の 2 より多い将軍が忠実である場合にのみ解決可能であることが示される。つまり、1 人の裏切り者が 2 人の忠実な将軍を混乱させることができる。偽造不可能な方法で記述されたメッセージを用いれば、この問題は将軍の人数や裏切り者の可能性にかかわらず解決可能である。そしてこの解決方法の信頼性の高いコンピュータシステムへの応用を論議する。
カテゴリとサブジェクト記述子: C.2.4. [Computer-Communication Networks]: Distributed Systems - network operating systems; D4.4. [Operating Systems]: Communication management - network communication; D.4.5 [Operating Systems]: Reliability - fault tolerance
一般用語: Algorithms, Reliability
その他のキーワードとフレーズ: Interactive consistency
Table of Contents
- Abstract
- 1. 導入
- 2. 不可能性の結果
- 3. 口頭メッセージを用いた解
- 4. 署名付きメッセージを用いた解
- 5. 通信経路の欠落
- 6. 高信頼性システム
- 7. 結論
- References
- 翻訳抄
1. 導入
信頼性の高いコンピュータシステムは一つまたは複数のコンポーネントの故障に対処できなければならない。故障したコンポーネントはしばしば見落とされがちな挙動 ─ つまりシステムの別の部分に矛盾した情報を送信する可能性がある。このような故障に対処する問題は、抽象的にはビザンチン将軍問題 (Byzantine Generals Problem) として表現される。この論文の大部分は抽象化されたこの問題について論議し、最後に我々の解決策が信頼性の高いコンピュータシステムの実現にどのように利用できるかを示す。
ビザンツ軍のいくつかの師団が敵の都市の外に陣取り、それぞれの師団はそれぞれの将軍によって指揮されていると想定する。将軍は使者によってのみ互いに連絡を取ることができる。敵の様子を偵察した後、彼らは共通の作戦を決めなければならない。しかし一部の将軍は裏切り者で、忠実な将軍たちが合意に達することを妨げようとする可能性がある。将軍たちは次のことを保証するアルゴリズムを持たなければならない。
- A. 忠実な将軍たちは同じ作戦行動を決定する
忠実な将軍たちはアルゴリズムの通りの行動をするが裏切り者は何をしても良い。アルゴリズムは裏切り者が何をしようとも条件 A を保証しなければならない。
忠実な将軍たちは合意に達するだけでなく合理的な作戦に合意する必要がある。したがって我々はまた次のことも確認したい。
- B. 少数の裏切り者たちは忠実な将軍たちに不正な作戦を採用させることができない
条件 B は不正な作戦が何であるかを正確に述べる必要があるため定式化が困難であり、我々はそれを試みることをしない。代わりに各将軍がどのように判断に至るかを考える。それぞれの将軍は敵を観測しその観測結果を他の将軍に伝える。
このアプローチは条件 A と B を満たす唯一の方法ではないかも知れないが、我々が知っている唯一の方法である。この方法はそれぞれの将軍が値
- 1. すべての忠実な将軍たちは同じ情報
, , を取得しなければならない
条件 1 は、裏切り者の
- 2. もし
番目の将軍が忠実であれば、彼が送った値はすべての忠実な将軍によって の値として使用されなければならない
条件 1 は、すべての
- 1'. 任意の 2 人の忠実な将軍は同じ値
を使用する
条件 1' と条件 2 は
ビザンチン将軍問題. 司令官である将軍は
- IC1. すべての忠実な副官は同じ命令に従う。
- IC2. 司令官である将軍が忠実であれば、すべての忠実な副官らは彼の送る命令に従う。
条件 IC1 と IC2 は対話的整合性条件と呼ぶ。司令官が忠実であれば IC2 から IC1 が導かれることに注意。ただし司令官が忠実である必要はない。
当初の問題を解くには、ビザンチン将軍問題の解法を用いて
2. 不可能性の結果
ビザンチン将軍問題は一見して単純な問題である。この困難さは、将軍たちが口頭でしかメッセージを送れない場合に 3 分の 2 より多い将軍が忠実でなければ解決策が成立しないという驚くべき事実によって示されている。特に将軍が 3 人しかいない場合、裏切り者が 1 人でもいると解決策は存在しない。口伝のメッセージ内容は完全に送信者の制御下にあり、裏切り者の送信者はどんなメッセージでも送信することができる。このようなメッセージはコンピュータが互いに送信する通常のメッセージタイプに相当する。セクション 4 ではこのようなことがない、署名され記述されたメッセージについて考える。
ここで、口伝のメッセージでは 3 将軍解 (three-general solution) で 1 人の裏切り者も対処できないことを示す。簡単のために "攻撃" (attack) か "退却" (retreat) しか判断できない場合を考える。まず Fig. 1 に描かれているシナリオについて考える。このシナリオでは Commander は忠実で "攻撃" 命令を送信するが、Lieutenant 2 は裏切り者で Lieutenant 1 に "退却" 命令を受けたと報告する。IC2 を満たすためには Lieutenant 1 は攻撃の命令に従わなければならない。
ここで Fig. 2 に示すような別のシナリオを考えてみよう。司令官が裏切り者で Lieutenant 1 に "攻撃" 命令を、Lieutenant 2 に "退却" 命令を送る。Lieutenant 1 は誰が裏切り者かを知らないので、司令官が実際に Lieutenant 2 にどのようなメッセージを送ったかを知ることはできない。したがって、この 2 つの図のシナリオは Lieutenant 1 には全く同じに見える。もし裏切り者が一貫して嘘をつき続けるのであれば、Lieutenant 1 にはこの 2 つの状況を区別するすべはないのでどちらも "攻撃" 命令に従わなければならない。したがって Lieutenant 1 は司令官から "攻撃" 命令を受けたのなら必ずそれに従わなければならない。
しかし同様の議論から Lieutenant 2 が司令官から "退却" 命令を受けたなら Lieutenant 1 が "攻撃" 命令を受けていたとしてもそれに従わなければならないことが分かる。したがって Fig. 2 のシナリオでは Lieutenant 2 は "退却" 命令に、Lieutenant 1 は "攻撃" 命令に従わなければならず条件 IC1 に違反する。したがって、裏切り者が 1 人いる場合に有効な 3 将軍解は存在しない。
一見、説得力があるように見えるかもしれないが、読者にはこのような非厳密的な推論には十分な疑いを持つことを強く勧める。この結果は確かに正しいが、我々は無効な結果に対して同様にもっともらしい "証明" を見たことがある。コンピュータサイエンスや数学の分野でこの種のアルゴリズムの研究ほど非正規な推論が誤りに繋がる可能性が高い分野もないと我々は考えている。1 人の裏切り者を処理できる 3 将軍の解決法の不可能性についての厳密な証明は [3] を参照。
この結果を用いて、
各ビザンチン将軍がアルバニア将軍のおよそ 1/3 を模擬することで 3 将軍の解が得られる。つまり各ビザンチン将軍は最大
ビザンチン将軍問題を解くことが難しいのは厳密な合意に達することが必要だからだと思うかも知れない。しかしそうではなく、近似的な合意を得ることも厳密な合意を得ること同程度に難しいことを示す。ここでは正確な戦闘計画に合意する代わりにおおよその攻撃時刻だけ合意しなければならないとする。より正確には司令官が攻撃時刻を命令すると仮定し、次の 2 つの条件が成立することを要求する:
- IC1'. 忠実な副官は互いに 10 分以内に攻撃する。
- IC2'. 司令官が忠実であれば、すべての忠実な副官は司令官の命令で与えられた時間から 10 分以内に攻撃する。
(攻撃の前日に命令が出されて処理され、命令を受けた時刻は関係なく、命令された攻撃時刻のみが重要であると想定する。)
ビザンチン将軍問題同様、この問題は 1/3 より多い将軍が忠実でない限り解決不可能である。このことを証明するためにまず、1 人の裏切り者がいても対処できる 3 将軍解があれば、1 人の裏切り者がいても対処できるビザンチン将軍問題の 3 将軍解を構成できることを示す。司令官が "攻撃" または "退却" の命令を送りたいとする。彼は想定されるアルゴリズムを使って、攻撃時刻 1:00 を送信して攻撃を命令し、攻撃時刻 2:00 を送信して退却を命じる。各副官は次の手順で命令を出す。
- 副官は司令官から攻撃時刻を受け取った後に次のいずれかを行う:
- 1:10 以前であれば攻撃する。
- 1:50 移行であれば退却する。
- それ以外であれば手順 2 に進む。
- 別の副官にステップ 1 でどのような判断を下したか問う。
- 別の副官が判断に至ったのであれば、彼と同じ判断を下す。
- そうでなければ退却する。
IC2' より、司令官が忠実であれば忠実な副官はステップ 1 で正しい命令を得るため IC2 が満たされる。司令官が忠実であれば IC2 から IC1 が成り立つため、司令官が裏切り者であるという仮定の下で IC1 を証明すれば良い。裏切り者は最大でも 1 人であるため、これは両方の副官が忠実であることを意味する。IC1' より、もし片方の副官がステップ 1 で攻撃を判断すればもう一方はステップ 1 で退却はできない。したがって 1 の段階で 2 人が同じ判断をするか、少なくともどちらかが 2 の段階まで判断を先延ばしにすることになる。この場合、両者が同じ判断に至ることは容易に分かるため IC1 が満たされる。したがって裏切り者 1 人に対処するビザンチン将軍問題の 3 将軍解を構成したことになるが、これは不可能である。したがって、ある裏切り者の存在で IC1' と IC2' を維持する 3 将軍アルゴリズムはあり得ない。
1 人の将軍が他の
- 1より正確には、2 人の将軍では問題が自明なので、3 人以上の将軍の場合にそのような解決法は存在しない。
3. 口頭メッセージを用いた解
上記で裏切り者が
- A1. 送信されたすべてのメッセージは正しく配信される。
- A2. メッセージの受信者は誰がメッセージを送信したかを知っている。
- A3. メッセージの欠落を検出することができる。
A1 により裏切り者は他の 2 人の将軍の送るメッセージを妨害することができず、A2 により偽のメッセージを持ち込んで彼らを混乱させることができない。したがって仮定 A1 と A2 により裏切り者は他の 2 人の将軍の間の通信を妨害することができない。仮定 A3 は単にメッセージを送らないことで決定を妨げようとする裏切り者を阻止する。これらの仮定の実際の実装についてはセクション 6 で述べる。
このセクションおよび次セクションのアルゴリズムでは各将軍が他のすべての将軍に直接メッセージを送ることができることを要求している。セクション 5 ではこのような要求のないアルゴリズムについて述べる。
裏切り者の司令官はどのような命令も送らないようにすることができる。副官は何らかの命令に従わなければならないため、そのような場合に従うべき規定の命令が必要である。我々は RETREAT (退却) を規定の命令とする。
我々はすべての非負整数
このアルゴリズムでの関数
-
の中で過半数値があればその値。なければ RETREAT; -
が順序集合に由来すると想定した場合の中央値。
次のアルゴリズムは前述した
アルゴリズム
- 司令官は各副官に彼の値を送信する。
- 各副官は司令官から受信した値を使用する。値を受け取らなかった場合は RETREAT とする。
アルゴリズム
- 司令官は各副官に彼の値を送信する。
- 各
について、副官 が司令官から受信する値を とし、または値を受け取らない場合は RETREAT とする。副官 はアルゴリズム の司令官として値 を他の の副官のそれぞれに送信する。 - 各
と について、 を副官 がステップ 2 で副官 から受信した値 (アルゴリズム を使用) とし、または値を受け取らない場合は RETREAT とする。副官 は値 を使用する。
このアルゴリズムがどのように機能するかを理解するために
次に司令官が裏切り者の場合でどうなるかを見える。Fig. 4 は裏切り者の司令官が任意の 3 つの値
再帰的アルゴリズム
任意の
補題 1. 任意の
と に対して、 人より多い将軍と最大 人の裏切り者が存在する場合、アルゴリズム は IC2 を満足する。
証明. 証明は
ステップ 1 では忠実な司令官は
次の定理はアルゴリズム
定理 1. 任意の
に対して、 人より多い将軍と最大 人の裏切り者が存在する場合、アルゴリズム は IC1 と IC2 を満足する。
証明. 証明は
まず司令官が忠実である場合を考える。補題 1 の
裏切り者は最大でも
4. 署名付きメッセージを用いた解
Fig. 1 と Fig. 2 のシナリオで見たように裏切り者の偽証能力がビザンチン将軍問題を困難にしている。この能力を制限することができれば問題はより簡単に解決することができる。その一つの方法は、裏切り者が偽造不可能な署名付きメッセージを送れるようにすることである。より正確には A1-A3 に以下の仮定を追加する。
- A4. (a) 忠実な将軍の署名は偽造できず、署名されたメッセージ内容のいかなる変更も検出することができる。(b) 誰でも将軍の署名の真偽を検証できる。
裏切り者の将軍の署名については何も仮定していないことに注意。特に、裏切り者の署名が他の裏切り者によって偽造されることを許容し、それによって裏切り者間の共謀を許容する。
署名付きのメッセージを導入したことで 1 人の裏切り者に対処するために 4 人の将軍が必要という以前の議論は成り立たなくなった。実際、3 将軍解が存在する。ここで、任意の数の将軍に対して
このアルゴリズムは、司令官が署名付きの命令を各副官に送信する。それぞれの副官はその命令に自分の署名を加えて他の副官たちに送信し、副官たちは署名を加えて他の副官たちに送信し、と続く。つまり、ある副官は 1 つの署名付きメッセージを受信し、そのコピーをいくつか作成し、それらのコピーに署名して送信しなければならない。これらのコピーをどのように取得するかは問題ではない; 単一のメッセージはコピーされるかもしれないし、それぞれのメッセージが必要に応じて署名され配布される同一のメッセージのスタックで構成されているかもしれない。
我々のアルゴリズムは 1 つの命令を得るために、一連の命令に適用される関数
- 集合
が単一の要素 からなる場合、 とする。 -
。ここで は空集合である。
要素に順序があると仮定して
次のアルゴリズムでは将軍
アルゴリズム
初期値
- 司令官は自身の値に署名してすべての副官に送信する。
- それぞれの
に対して: - 副官
が司令官から 形式のメッセージを受信し、まだ何の命令も受けていない場合 - 副官は
を に設定する; - 副官は
を他のすべての副官に送信する。
- 副官は
- 副官
が 形式のメッセージを受信し、 が の集合に含まれていない場合 - 副官は
を に追加; -
であれば副官はメッセージ を を除くすべての副官に送信する。
- 副官は
- 副官
- 各
について: 副官 がそれ以上メッセージを受け取らなくなると、彼は の命令に従う。
ステップ 2 で副官
ここではステップ 3 で副官がそれ以上のメッセージを受け取らないことをどのように判断するかは明記していない。
副官
ステップ 2 では、副官
Fig. 5 は司令官が裏切り者である 3 将軍ケースでアルゴリズム
アルゴリズム
ここでこのアルゴリズムの正しさを証明する。
定理 2. 任意の
に対して、裏切り者が最大 人であれば はビザンチン将軍問題を解く。
証明. まず IC2 を証明する。もし司令官が忠実であればステップ 1 で署名した命令
司令官が忠実であれば IC1 は IC2 から導かれるため IC1 を証明するには司令官が裏切り者である場合のみを考えれば良い。忠実な 2 人の副官
-
. この場合、 はメッセージ を に送信するので、 は命令 を受信しなければならない。 -
. 司令官が裏切り者であるため最大 人の副官が裏切り者である。したがって副官 の少なくとも 1 人は忠実である。この忠実な副官は最初に値 を受信したときに に送信していなければならないので、したがって はその値を受け取らなければならない。
これで証明は完了である。∎
5. 通信経路の欠落
ここまでで将軍は他のすべての将軍に直接メッセージを送信できると仮定してきた。ここでこの仮定を外す。その代わりに誰が誰にメッセージを送れるかについて何らかの制限を与える物理的な障壁を仮定する。将軍は単純2有限無向グラフ
口頭メッセージアルゴリズム
定義 1.
(a) ノードの集合
- すべての
が に隣接しており -
と異なる任意の将軍 に対して各 から を経由しない への経路 が存在し、それらの経路 はどれも 以外に共通するノードを持っていない。
(b) すべてのノードが
Fig. 6 は単純 3-正則グラフの例を示す。Fig. 7 は中央のノードが 3 つのノードを含む隣接の正規集合を持たないため 3-正則ではないグラフの例である。
我々は
アルゴリズム
- 司令官に隣接する
人の副官で構成される正規集合 を選ぶ。 - 司令官は
の副官それぞれに自身の値を送信する。 -
の各 について、副官 が司令官から受信する値を とし、値を受け取らない場合は RETREAT とする。副官 は を他のすべての副官 に次のように送信する: -
の場合、定義 1 の a.ii の部分で存在が保証されている経路 に沿って値を送ることで。 -
の場合、 から元の司令官を削除して得られる将軍のグラフに対してアルゴリズム の司令官として行動する。
-
-
の となる各 と各 に対して、ステップ 2 で副官 が副官 から受信した値を とし、値を受信しなかった場合は RETREAT とする。副官 は値 を使用する。ここで である。
ここで裏切り者が最大
補題 2. 任意の
と任意の に対して、裏切り者が最大でも 人であればアルゴリズム は IC2 を満足する。
証明.
ここで
アルゴリズム
定理 3. 任意の
と任意の に対して、裏切り者が最大でも 人であればアルゴリズム はビザンチン将軍問題を解決する。
証明. 定理 2 により、
このアルゴリズム
ビザンチン将軍問題が解ける最も弱い接続性の仮説は忠実な将軍によって形成される部分グラフが接続されていることである。我々はこの仮説の下で将軍の数を
我々はより一般的な結果を次に証明する。ここでグラフの直径 (diameter) は任意の 2 つのノードが最大
定理 4. 任意の
と に対して、裏切り者が最大でも 人しか存在せず、忠実な将軍の部分グラフが直径 であるとき、アルゴリズム は (上記の修正を加えて) ビザンチン将軍問題を解決する。
証明. この証明は定理 2 の証明と非常に似ているためここでは概略を述べるにとどめる。IC2 を証明するために、仮説により忠実な司令官から副官
IC1 を証明するために、司令官が裏切り者であると仮定して忠実な副官
系 (corollary). 忠実な将軍のグラフが接続されている場合、(上記で変更した)
は 人の将軍たちのビザンチン将軍問題を解く。
証明. 忠実な将軍たちのグラフの直径を
定理 4 は忠実な将軍たちの部分グラフが連結していることを仮定している。その証明は簡単に拡張でき、そうでない場合であっても、裏切り者が最大でも
- 忠実な将軍のみを経由する最大
の長さの経路で結ばれた 2 つの忠実な将軍は同じ命令に従うだろう。 - 司令官が忠実であれば、忠実な将軍のみを経由する最大
の長さの経路で彼に結ばれている忠実な副官は彼の命令に従うだろう。
- 2単純グラフ (simple graph) とは、任意の 2 つのノードを結ぶ弧がたかだか 1 つで、すべての弧が異なる 2 つのノードを結ぶものである。
- 3Dolev の最近のアルゴリズム [2] はより少ない接続性を必要とする。
6. 高信頼性システム
高信頼性のコンピュータシステムを実装するために、根本的に信頼性の高い回路部品を使うこと以外に我々が知っている唯一の方法は、複数の異なる "プロセッサ" を使って同じ結果を計算し、それらの出力に対して多数決を行って単一の値を取得することである。(投票はシステム内部で行ってもよいし、出力のユーザによって外部で実行してもよい。) このことは個別のチップ故障から保護するために冗長回路を用いて高信頼性コンピュータを実装する場合でも、核攻撃による個々のサイトの破壊から保護するために冗長コンピューティングサイトを用いた弾道ミサイル防衛システムを実現する場合でも同じである。違いはただ複製された "プロセッサ" のサイズだけである。
高信頼性を達成するための多数決は故障していないプロセッサすべてが同じ出力を生成するという前提で行われる。これはすべてのプロセッサが同じ入力を使用する限り正しい。しかし、単一の入力データは単一の物理コンポーネント (例えば信頼性の高い部品のある回路やミサイル防衛システムのあるレーダーサイト) から得られるものであり、故障しているコンポーネントは他のプロセッサに異なる値を与える可能性がある。さらに、故障していない入力ユニットであっても値を変更中に別のプロセッサが読みだせば異なる値を得ることもある。たとえば 2 つのプロセッサが進行中のクロックを読み取る場合、一方が古い値を取得し、もう一方が新しい値を取得する可能性がある。これを防ぐにはクロックの進行に合わせて読み出しを同期させるしかない。
多数決が高信頼システムをもたらすためには次の 2 つの条件を満たす必要がある:
- 故障していないプロセッサはすべて同じ入力値を使用しなければならない (したがってそれらは同じ出力を生成する)。
- 入力ユニットが故障していない場合、故障していないすべてのプロセスはそれが提供する値を入力として使用する (したがってそれらは正しい出力を生成する)。
これらはちょうど我々の対話型整合性条件 IC1 と IC2 であり、"司令官" は入力を生成するユニット、"副官" はプロセッサ、"忠実" は非故障を意味する。
この問題を "ハードウェア" で解決しようとするのは魅力的なことである。例えばすべてのプロセッサが同じ入力値を得られるように、すべてのプロセッサに同じ配線から入力値を読み取らせることが考えられる。しかし入力ユニットに故障があると、あるプロセッサは "0" と解釈し別のプロセッサは "1" と解釈するような境界ぎりぎりの信号を送る可能性がある。故障しているかもしれない入力装置から異なるプロセッサが同じ値を得ることを保証するには、プロセッサ間で通信してビザンチン将軍問題を解決するしか方法はない。
もちろん故障した入力装置は意味のない入力値を提供するかもしれない。ビザンチン将軍の解決法でできることは、すべてのプロセッサが同じ入力値を使うことを保証することだけである。もしその入力が重要なものであれば冗長な値を提供するいくつかの別の入力装置が必要である。例えばミサイル防衛システムには冗長化された処理サイトだけでなく冗長化されたレーダーが必要である。ただし、入力が冗長化されていても信頼性は達成できないため、故障していないプロセッサが冗長データを使って同じ出力を生成することを保証する必要がある。
入力装置に故障はなく、値を変更中に読み取られことで異なる値を得た場合あっても、やはり故障していないプロセッサが妥当な入力値を取得する必要がある。関数
これまでにいくつかの解決策を示したが、それらは計算機システムの観点ではなくビザンチン将軍の観点で述べられてきた。ここではどのようにこれらの解を高信頼計算機システムに適用できるかを検討する。もちろん "将軍" アルゴリズムをプロセッサで実装することに問題はない。問題は、仮定 A1-A3 (アルゴリズム
A1. 仮定 A1 は故障していないプロセッサが送信したメッセージはすべて正しく配信されることを示している。実際のシステムでは通信回路に障害が発生する可能性がある。口頭メッセージアルゴリズム
A2. 仮定 A2 はプロセッサが受信したあらゆるメッセージの送信元を特定できることを示している。実際に必要なのは故障したプロセッサが故障していないプロセッサに成りすますことができないようにすることである。これは、具体的にはプロセス間通信がメッセージ交換ネットワーク (message switching network) ではなく固定回線 (fixed lines) を介して行われることを意味している。(もし交換ネットワークを使うなら故障したネットワークノードを考慮しなければならずビザンチン将軍問題が再び発生する。) 別のプロセッサへのなりすましはそのメッセージを偽造することを意味するため、A4 を仮定してすべてのメッセージに署名すれば仮定 A2 は必要ないことに注意。
A3. 仮定 A3 はメッセージの欠落を検出できることを要求している。メッセージの欠落は一定時間内にそれが到着しないこと、つまりタイムアウト規則を使用することによってのみ検出することができる。A3 を満たすためにタイムアウトを使用するには次の 2 つの仮定が必要である:
- メッセージの生成と送信に必要な時間の最大値が決まっている。
- 送信者と受信者はある一定の最大誤差の範囲内で同期されたクロックを持つ。
受信者はメッセージが到着するまでにどれくらい待つ必要があるかを知っている必要があるため最初の仮定が必要なのは明らかである。(生成時刻とは、メッセージを生成するために必要なすべての入力を受け取った後にプロセッサがメッセージを送信するまでにかかる時間である。) 2 番目の仮定が必要なことはあまり自明ではない。しかしビザンチン将軍問題を解くにはこの仮定または同等の仮定が必要であることを示すことができる。より正確には、次の場合にのみ将軍が行動を起こすようなアルゴリズムを許すとする。
- ある固定された初期時刻 (すべての将軍で同じ)。
- メッセージの受信時。
- ランダムに選ばれた時間が経過したとき。(つまり将軍はタイマーをランダムな値に設定し、タイマーが切れたときに行動することができる。)
(これにより同期クロックの構築を許可しない、我々が想定するもっとも一般的なクラスのアルゴリズムが得られる。) メッセージの伝達遅延に上限があったとしても、メッセージを任意に迅速に送信できるなら、そのようなアルゴリズムではビザンチン将軍問題を解くことができないことが示される。さらに、裏切り者に許される唯一の不正な行動がメッセージ伝達の失敗であるように制限を設けたとしても解は得られない。この結果の証明はこの論文の範囲外である。伝達遅延に上限と下限を設定することによってプロセッサはメッセージの往復でクロックを実装できることに注意。
上記の 2 つの仮定により未送信メッセージの検出は容易である。
2 つのクロックは正確に同じ速度で動いているわけではないため、最初にどれだけ正確に同期させたとしても定期的に再同期しなければいずれは任意の時間のずれが発生する。そのため、一部のプロセッサに故障が発生した場合でも、プロセッサのクロックを一定の範囲内ですべて同期させるという問題がある。これはビザンチン将軍問題自体と同じくらい難しい問題である。クロック同期問題には、我々のビザンチン将軍問題と密接に関連する解決策が存在する。これらについては今後の論文で紹介する予定である。
A4. 仮定 A4 では、プロセッサが故障していないプロセッサの署名を偽造できないような方法で自身のメッセージに署名できることを要求している。署名とはプロセス
- プロセッサ
が故障していなければ、どの故障プロセッサも を生成することはできない。 -
と が与えられたとき、 が と等しいことはどのプロセスでも判断できる。
ランダムな不正動作 (random malfunction).
を適当に "ランダム化" する関数とすることで、プロセッサのランダムな不正動作が正しい署名を生成する確率を、ランダムな選択手続きを通じて正しい署名を生成する確率、つまり取り得る署名の数の逆数と本質的に等しくすることができる。これを行うための一つの方法として次のようなものがある。メッセージは より小さい正の整数で符号化されていると仮定し、 は 2 の累乗とする。 は と等しく、 は より小さいランダムに選ばれた奇数とする。 を より小さく となるような唯一の値とすると、プロセスは をテストすることによって を確認することができる。他のプロセッサがメモリに を持っていない場合、そのプロセッサが単一の (非ゼロの) メッセージ に対して正しい署名 を生成できる確率は でなければならない: これはランダム選択によってそうなる確率である。(もしプロセッサが簡単な方法で を入手できるなら、故障プロセッサ が を算出する時に を に置き換えて の署名を偽造する可能性が高くなることに注意。) 悪意的な知性 (malicious intelligence). 故障プロセッサが悪意のある知性によって誘導されている場合、例えばシステムを混乱させようとしている人間に操作されている完全に正常なプロセッサである場合、署名関数
の構築は暗号上の問題となる。この問題の解決方法については [1] と [4] を参照。
プロセスがすでにその署名を認識している場合、署名
7. 結論
我々は様々な仮説の元でビザンチン将軍問題に対するいくつかの解を提示し、それらが信頼性の高いコンピュータシステムの実装にどのように利用できるかを示した。これらの解法は必要な時間とメッセージ数の両方で高コストである。アルゴリズム
恣意的な不正動作に対して信頼性を達成することは困難な問題であり、その解決策は本質的にコストがかかると思われる。コストを削減する唯一の方法は起き得る故障の種類を想定することである。例えば、コンピュータは応答しなくなる場合はあっても不正な応答をすることはないと想定できることがよくある。ただし、極めて高い信頼性が要求される場合はそのような想定を置くことができず、ビザンチン将軍の解決法の全コストが必要となる。
References
- DIFFIE, W., AND HELLMAN, M.E. New directions in cryptography. IEEE Trans. Inf. Theory IT-22 (Nov. 1976), 644-654.
- DOLEV, D. The Byzantine generals strike again. J. Algorithms 3, 1 (Jan. 1982).
- PEASE, M., SHOSTAK, R., AND LAMPORT, L. Reaching agreement in the presence of faults. J. ACM 27, 2 (Apr. 1980), 228-234.
- RIVEST, R.L., SHAMIR, A., AND ADLEMAN, L. A method for obtaining digital signatures and public-key cryptosystems. Commun. ACM 21, 2 (Feb. 1978), 120-126.
翻訳抄
ビザンチン将軍問題に関する 1982 年の論文。すべてのプロセスが完全グラフで接続している構成において、署名なしのアルゴリズムでビザンチン将軍問題を解くには
- LAMPORT, Leslie; SHOSTAK, Robert; PEASE, Marshall. The Byzantine Generals Problem. In: ACM Transactions on Programming Languages and Systems, Vol.4, No.3. 1982.

