ブロックチェーンについて議論がなされるとき、「合意」という言葉がひんぱんに使われる。

 たとえばブロックチェーンの機能について、データの正当性を複数のコンピュータが「合意」することで、中央機関に頼らずデータを共有する仕組みだ…などと説明されることがある。

 では、ここでいう「合意」とは、そもそも何を指す言葉なのだろうか?

 この言葉は「両社は協業することに合意いたしました」など、私たちの日常でも多く使われている言葉である。日常的に使われている「合意」をイメージしたまま、ブロックチェーンの議論をしてしまうと、ブロックチェーンの仕組みについてうまく議論できない。

 これに加え、分散システムの学術界/産業界では30年以上前から、分散された複数のコンピュータの間で何らかの合意を形成する「合意問題」という課題に取り組んできた。実際に合意問題を解決するアルゴリズムやプログラムも登場している。

 この分散システムの合意問題をブロックチェーンの議論に取り入れても、やはり議論の中で「合意」が指す意味が食い違ってしまい、合意の意味自体が議論になってしまうことがある(本稿のように)。

 我々はこれまで、ブロックチェーンの議論において合意という言葉を使うとき、何が何について合意しているのか曖昧なまま議論してきたのではないだろうか。議論する人達の頭の中には、それぞれ思い思いの合意のイメージがあって、それをもとに議論するから混乱があったのではないだろうか。

 本稿のタイトル「ブロックチェーンの『合意』の意味を、我々は合意できているのか?」に対する筆者の答えは、「できていない」である。

 本稿では、ブロックチェーンを生み出したビットコインに焦点を合て、それがどのような経緯で分散システムの問題と関係づけられたのか、上下2回に分けて検討する。特に上では「合意問題」を、下では合意問題と密接にかかわる「ビザンチン将軍問題」を中心に取り上げる。

ビットコインが「達成したい」こと

 ビットコインの議論で登場する「合意」とは何かを知るため、まずビットコインとは何を達成したいシステムなのか、サトシ・ナカモトの論文(PDF)からおさらいしよう。

 ビットコインは「仮想通貨システム」、つまり通貨としての利用を目的としたシステムである。たとえばコーヒーなどの商品を売買する通貨として使われることを念頭に作られている。

 仮想通貨システムで懸念される不正の一つとして、二重取引がある(図1)。

図1●仮想通貨における二重取引
図1●仮想通貨における二重取引
(出所:セコムIS研究所)
[画像のクリックで拡大表示]

 図1の例は、Xさんが仮想通貨100円のデータを元手に、Aさんには80円払い、Bさんには70円払うというものである。仮想通貨を受信したAさんとBさんは、不正を見抜くことができない。なぜなら、Xさんの元手となった仮想通貨100円のデータはデジタルデータなので、いくらでもコピー可能だからである。

 ビットコイン以前の仮想通貨システムは、集中管理する中央機関を設置することによって、このような不正を防止し、通貨発行などの管理をしようと設計されてきた。

 ビットコインが挑戦したのは、集中管理する中央機関が存在しないP2Pシステムにおいて、二重取引を防ぎ、通貨発行ができる仮想通貨を実現することだった。

 これを実現するためビットコインが採用したのが、通貨の取引や通貨発行の履歴を全て、ビットコインのネットワークに接続されている全コンピュータがそれぞれ保持するというアイデアである(図2)。ビットコインが稼動し始めてから現在までの全取引や発行履歴を保持する。

図2●中央集権モデルとビットコインモデルにおける、履歴保持の違い
図2●中央集権モデルとビットコインモデルにおける、履歴保持の違い
(出所:セコムIS研究所)
[画像のクリックで拡大表示]

 すなわち、集中管理する中央機関一箇所で管理するのではなく、全コンピュータが全く同じデータを持ち続ける、というアイデアだ。実際、ビットコインに接続されているコンピュータはそれぞれ約85GB(2016年10月現在:blockchain.infoより)のデータを保持している。

 全ての取引の履歴を保持できれば、二重取引を発見し排除することができる。

 ビットコインを健全に運用し続けるためには、ビットコインに接続されている全コンピュータが全く同じ取引の履歴データを持ち続けることが重要なのである。

 この仕組みを議論する際に、合意という言葉が登場してくる。おおざっぱにいえば、取引履歴の正しい順序について大半のコンピュータが「合意」することで、順序を操作して二重取引を行うといった不正ができなくなる…といった形で、合意という言葉が現れる。

 では、ここでいう「合意」とは、そもそも何を指す言葉なのだろうか?