投稿者: Vitalik Buterin 投稿日: 2013年12月31日

米国大統領候補のミット・ロムニー氏は、企業は人間であると念を押す。ロムニー候補の主張する結論に同意するかどうかは別として、この言葉には大きな真実がある。企業とは、ある特定のルールの下で働く人々の集団である。企業が財産を所有するということは、その財産は、現在取締役会となっている人々の管理下で、特定の目的のためにのみ使用することができるという法的契約が存在することを意味しているのである。企業が何かを行う場合、それは取締役会がそれを行うべきであると合意したためである。会社が従業員を雇うということは、従業員が会社の顧客に対して、特に支払いに関する特定のルールの下でサービスを提供することに同意していることを意味する。企業が有限責任である場合、それは、特定の人々が政府による法的訴追の恐れを軽減して行動するための特別な特権を与えられていることを意味する - 通常の人々が単独で行動するよりも多くの権利を持つ人々のグループ、しかしそれでも最終的には人々である。いずれにせよ、すべては人と契約にほかならない。

しかし、ここで非常に興味深い問題が出てくる。それは、人間は本当に必要なのか、ということだ。一方では、答えはイエスである。特異点後のある未来には、機械が単独で生き残ることができるようになるだろうが、当面の間、物理的世界と対話するためには、何らかの人間の行動が必要なだけである。しかし一方で、過去200年の間に、その答えはますますノーになってきている。産業革命によって、初めて人間の労働力を大規模に機械に置き換えることができるようになり、今ではデジタル化された高度な工場や、自動車のような複雑な製品を一人で生産するロボットアームが存在するようになりました。しかし、これは底辺の自動化に過ぎず、階級的な肉体労働者は必要なくなり、ロボットをメンテナンスする少数の専門家に取って代わられ、企業の経営は手つかずのままである。つまり、ある専門的な仕事をする人間は必要だとしても、その代わりに経営者を排除することはできないか、という問題です。

多くの企業は何らかのミッション・ステートメントを持っています。多くの場合、それは株主のためにお金を稼ぐことですが、ある時は、彼らが作っている特定の製品に関わる道徳的要請を含み、また、少なくとも理論的には、地域社会を助けるといった他の目標もミックスされることがあります。今のところ、このミッション・ステートメントは、取締役会、そして最終的には株主が解釈する限りにおいてのみ存在します。しかし、現代の情報技術の力で、ミッション・ステートメントをコード化することができたらどうだろう。つまり、トップダウンの人間の指示を必要とせずに、収益を上げ、何らかの機能を果たすために人々に報酬を支払い、自らが実行するためのハードウェアを見出す、侵すことのできないコントラクトを作り出すことができたらどうだろう。

Let's Talk BitcoinのDaniel Larmier氏がこのコンセプトに関する独自の調査で指摘したように、ある意味、ビットコイン自体がまさにそのようなものの非常に初期のプロトタイプであると考えることができます。ビットコインには2100万株があり、これらの株はビットコインの株主とみなされる人たちが所有しています。従業員がいて、彼らに支払うためのプロトコルがあります。およそ10分ごとに、無作為に選ばれた従業員1人に25BTCを支払う。また、マーケティング部門もあり、その大部分は株主自身によって構成されています。しかし、それは非常に限定的なものです。現在時刻以外の世界についてほとんど何も知らず、難易度を除けば機能のどの側面も変えることができず、実際に何かをするわけでもなく、ただ存在し、それを認識するかどうかは世界に委ねられている。問題は、私たちがもっとうまくやれるかどうかだ。

演算処理

最初の課題は、このような企業が実際にどのような意思決定を行うかということです。少なくとも予測可能な環境であれば、与えられた入力を受けて、取るべき行動を計算するようなコードを書くことは簡単だ。しかし、誰がそのコードを実行するのだろうか?もし、そのコードが単にコンピュータプログラムとしてある特定のマシン上に存在するとしたら、そのマシンの所有者がそのマシン全体をシャットダウンしたり、あるいはそのマシンのコードを改変して全財産を自分自身に送金するのをどうやって止めることができるだろうか?この問題に対する有効な答えはただ1つ、分散コンピューティングです。

ただし、ここでいう分散コンピューティングは、SETI@homeやFolding@homeのような分散コンピューティングとは異なり、分散したノードからデータを集めてリクエストを出すセントラルサーバーが存在するものである。むしろ、Bitcoinに見られるような、自己の計算を非中央集権的に自己検証するルール群が必要なのです。ビットコインでは、これは単純な多数決で達成されます。もしあなたが大多数のネットワークパワーでブロックチェーンの計算に協力しないなら、あなたのブロックは破棄され、あなたはブロック報酬を得ることはありません。このメカニズムを覆すほどのコンピュータパワーを持つ攻撃者は一人もいないため、基本的には「流れに身を任せ」、ネットワークをサポートするために正直に行動し、自分のブロック報酬を受け取ることだけが有効な戦略であるというのが理論です。では、この仕組みを分散型コンピューティングに応用すればいいのでしょうか。つまり、ネットワーク上のすべてのコンピュータにプログラムの評価を依頼し、その答えが多数決に一致したものだけに報酬を与えるということはできるのだろうか?答えは、残念ながら「ノー」です。ビットコインは特殊なケースです。ビットコインは単なる通貨であり、それ自体の財産や個人データは持っていないからです。一方、バーチャル・コーポレーションは、ビットコインウォレットの秘密鍵を保管する必要があるだろう。このデータは、ビットコインの取引のように、誰も、誰でも、その全体を利用できないはずのものである。しかし、当然ながら、秘密鍵はまだ使用可能でなければならない。したがって、必要なのは、トランザクションに署名し、さらにビットコインアドレスを生成する、分散化された方法で計算できる何らかのシステムである。幸いなことに、ビットコインはまさにそれを可能にしてくれる。

最初に思いつくのは、マルチシグネチャアドレスです。企業を支え続けることができる1000台のコンピュータがあるとしたら、それぞれのコンピュータに秘密鍵を作らせ、その間に1000分の501のマルチシグネチャアドレスを生成させます。資金を使うには、501のノードからの署名でトランザクションを構築し、ブロックチェーンにブロードキャストするだけです。ここでの問題は明白で、トランザクションが大きすぎることだ。各署名は約70バイトで構成されているため、501個の署名で35キロバイトの取引を行うことになる。ビットコインではデフォルトで1万バイトを超えるスクリプトの取引を拒否しているため、ネットワークに受け入れられるのは非常に困難である。第二に、この解決策はビットコインに特有のものです。企業が非金融目的のためにプライベートデータを保存したい場合、マルチシグネチャースクリプトは役に立ちません。マルチシグネチャーのアドレスが機能するのは、それを評価するビットコインのネットワークがあり、評価が成功するかどうかによってブロックチェーンにトランザクションを配置するためである。プライベートデータの場合、同様のソリューションは本質的に、データを保存し、要求が1000のうち501の署名を必要とする場合にのみデータを提供する分散型当局を必要とします。

暗号技術者の間では「セキュアマルチパーティ計算」と呼ばれている。安全なマルチパーティ計算では、プログラムの入力(正確には模擬「回路」の入力。安全なマルチパーティ計算では「if」文や条件ループを扱えないため)を「シャミールの秘密分散」というアルゴリズムで分割し、その情報の一部を参加者に与える。シャミールの秘密分散は、任意のデータをN個に分割し、そのうちの任意のK個、ただしK-1個が元のデータを復元するのに十分でないようにすることができます(アルゴリズム実行時にKとNを選択します)。2-of-3、5-of-10、501-of-1000が可能である。計算の終わりには、誰もが計算結果の一部を持っていますが、計算中に一人の人間が、何が起こっているのか、ほんの少しも知ることはありません。そして最後に、その断片が組み合わされ、結果が明らかになる。このアルゴリズムの実行時間はO(n3)である.つまり,計算を評価するのに必要な計算ステップ数は,参加者の数の3乗にほぼ比例し,10ノードでは1000ステップ,1000ノードでは10億ステップである.C++で単純な10億ステップのループを計算すると、私のノートパソコンでは20秒程度、サーバーでは1秒の何分の一かで計算できるので、1000ノードが現在のところほぼ実用的な限界といえるでしょう。

その結果、安全なマルチパーティ計算を利用して、ビットコインアドレスを生成し、取引に署名することができるようになりました。アドレス生成の場合、プロトコルは単純です。

公開鍵は整数で足したり、引いたり、かけたり、割ったりすることができるので、意外とこのアルゴリズムは期待通りに動くのです。もし、みんなが同じように501分の1000の秘密鍵を作ると、その秘密鍵は、対応する公開鍵に501分の1000のアルゴリズムを適用して生成されたアドレスに送られたお金を使うことができるようになるのです。これは、Shamirの秘密分散が単なる代数的な式、つまり足し算、引き算、掛け算、割り算しか使っておらず、この式をアドレスと同じように簡単に公開鍵の「上で」計算できるためで、その結果、秘密鍵と公開鍵の変換が代数の前でも後でも問題にはならないのだ。結果として、秘密鍵と公開鍵の変換が代数の前でも後でも問題にはならない。