オブジェクトの広場はオージス総研グループのエンジニアによる技術発表サイトです

クラウド/Webサービス

ビットコイン論文からさぐる ブロックチェーンのヒント

番外編 全11回のまとめ
オージス総研
樋口 匡俊
2020年10月22日

今回は番外編と称して、全11回の連載をぎゅっと1回にまとめたダイジェスト版をお送りします。単なる要約ではなく、信頼できる第三者機関 (TTP) を軸にビットコイン論文の要点を整理するとともに、連載では紹介できなかった新たな「ヒント」も加えました。これから連載を読む方も、もう読んだよという方も、ぜひご覧ください。

ビットコイン論文と「ブロックチェーン」

ビットコイン論文を読むにあたり、まず第一に注意しなければならないことは、「ブロックチェーン (blockchain)」という言葉は論文に一切登場しない、ということです。

「ブロックチェーン」だけではありません。以下の言葉たちもまた、ブロックチェーンの解説記事にはよく出てきますが、論文には一切登場しません。

  • トラストレス (trustless)(連載の第2回を参照。以下同様に関連する回をカッコ内に示します。)
  • 中央集権的/非中央集権的 (centralized/decentralized)(第2回
  • 改ざん耐性/不変性 (tamper-resistance/immutability)
  • トレーサビリティ (traceability)
  • 台帳 (ledger)
  • パブリック/プライベート/コンソーシアムチェーン (public/private/consortium chain)

これらブロックチェーン用語は、論文の作者とされるサトシ・ナカモト (Satoshi Nakamoto) が発明・整理した言葉ではないのです。おそらくは、サトシが2008年に論文を公表し、2年ほど活動してから姿を消した後、人々の中で大きく育まれてきた言葉なのです。

論文の主題:二重使用問題

それでは、ビットコイン論文には一体何が書いてあるかというと、二重使用問題 (double-spending problem) の解決法が書いてあります。ビットコインには細かい機能がいくつもありますが、論文はそれらを網羅的に説明するのではなく、二重使用問題の解決法にしぼって説明しています。

以下は筆者の思うビットコイン論文の構成です。 サトシが二重使用問題を中心に議論を組み立てていることが分かると思います。

  1. Abstract
  2. 序論(第1章)
  3. 本論1: 二重使用問題の解決法(第2 - 5章)
    タイムスタンプ、PoW、ネットワーク
  4. 本論2: 上述の解決法に関する諸問題の解決法(第6 - 10章)
    インセンティブ、軽量クライアント、プライバシー
  5. 本論3: 上述の解決法に関する確率論的説明(第11章)
  6. 結論(第12章)
  7. 参考文献一覧

二重使用問題は、電子マネーの古くからの問題の一つとして知られています。そこでまずは、電子マネーがどのような問題をかかえているのか見ていきましょう。

電子マネーの二つの問題:偽造と多重使用

電子マネーのシステムにおいて、お金はコイン (coin) やトークン (token) などと呼ばれます。コインは金属の硬貨ではなく、単なる電子データです。

電子データであるコインは、金属とくらべて簡単に生成・加工できるという利点があります。一方で、その利点を悪用した二つの問題に対処しなくてはなりません。

一つは、偽物のコインを作ったり書き換えたりする偽造 (forgery) 問題です。対策としては、データの改ざんを検知できるデジタル署名 (digital signature) がよく用いられます。ビットコインの場合は、デジタル署名をチェーンのようにつないで使います。

デジタル署名のチェーン

この図は、ビットコイン論文の第2章「Transactions」から引用したものです。サトシは、このデジタル署名のチェーンをコインと定義しました(第3回)。デジタル署名はトランザクション (transaction) に対して行われるので、このチェーンはトランザクションのチェーンと言ってもよいでしょう。トランザクションとは、コインをいくら支払・受取するか等、取引の内容を記録したデータのことです。

このチェーンは、ブロックのチェーンではないことに注意してください。トランザクションが不正に書き換えられるのを防ぐだけなら、ブロックチェーンは必要ないわけです。

もう一つの問題は、多重使用 (multiple spending) 問題です。多重使用とは、偽物ではなく、本物のコインを何度も使うことです。この多重使用の別名が、二重使用です。「二重」と言いつつ、三回でも四回でも使用されることがありうるのです。

TTP:信頼できる第三者機関

ふつう電子マネーのシステムは、コインを支払う人と受取る人だけでは成り立たず、コインを管理する銀行等の第三者が必要です。二重使用問題を解決するのも、ふつうはその第三者の役目です。コインの使用状況をデータベースに逐一記録しておき、その記録にもとづいて二重に使用されていないか検査するのです。

このように、電子的な商取引に不可欠な銀行等の金融機関を、サトシは信頼できる第三者機関 (Trusted Third Party) と呼んでいます。以下、これを TTP と略します。

TTPを使う電子マネー

サトシは、二重使用問題の解決法を考えるにあたり、従来は必須と思われていた TTP を使わないことにしました※1。TTP を使うけれども依存度は最小限にする、というのではありません。TTP に依存しない、使わない、のです。もし実現すれば、大変画期的なことです。

ビットコイン論文によると、その解決法は、主にP2Pネットワーク、タイムスタンプ、PoW という三つの技術を組み合わせたものということになります。以下では、それら三つの技術について見ていくことにしましょう。

純粋な P2P

TTP である金融機関は使わないにしても、金融機関と似たようなことを行う別の何かは必要でしょう。サトシにとって、その何かとはP2Pネットワークでした。

P2P とは、ピア・トゥ・ピア (peer-to-peer) の略称です。ピアとは、地位や年齢、能力などが同じくらいの仲間のことです。サトシは、仲間と仲間が対等につながりあうネットワークに、TTP と同じような役割を課すことにしたのです。(第3回

TTPを使わない電子マネー

この P2Pネットワークは、ただの P2P ではなく純粋な P2Pを目指さなくてはなりません。実は、一口に P2P といってもさまざまな種類があり、TTP のようなものを必要とする P2P が少なくないのです。2000年頃の P2P ブームの立役者といえるナップスター (Napster) は、まさにその純粋ではない P2P の代表例でした。(第1回

二重使用の検査

ビットコイン論文では、P2Pネットワークを構成するピアのことをノード (node) と呼んでいます。各ノードは、金融機関の代わりとして、それぞれが二重使用の検査を行います。

検査のルールはあらかじめ決まっています。同じコインを使用しているトランザクションが複数ある場合、一番早く届いたトランザクションを受け入れ、二番目以降は二重使用とみなして受け入れない、というルールです。その検査を行うために、各ノードは二つの条件を満たしている必要があります。

一つ目の条件は、トランザクションをすべて知っているということです。存在しているのに認識できていないトランザクションが一つでもあったら、どれが一番早いトランザクションなのか断定できないからです。

そこで、各ノードは協力してトランザクションを教え合います。新たなトランザクションを認識したら、つながっている他のノードに通知し、ノードからノードへバトンのようにリレーしていくのです。これを通信技術の一般的な用語から借りて ブロードキャスト (broadcast) と呼びます(第6回)。「知らないことは無いということを証明せよ」という理論的にムズカシイ問題を無視すれば、これで一つ目の条件はクリアできそうです。

もう一つの条件は、トランザクションの順番を知っているということです。すべてのトランザクションを知った上で、一番早いトランザクションが分かるように、順序正しく記録しなければならないのです。そのためにサトシが導入したのが、タイムスタンプ技術です。

タイムスタンプ

タイムスタンプ (timestamp) とは、総務省のホームページによると、「ある時刻にその電子データが存在していたことと、それ以降改ざんされていないことを証明する技術」です。20年以上前からいくつかの方式が研究されており、主に実用化されているのは TTP に依存する方式です。

サトシが参考にしたのは、TTP に依存はするものの、依存度はかなり低く抑えられる方式でした。第4回では、それをラウンド方式と名付けて詳しく説明しました。

ラウンド方式では、TTP が一定時間待って複数のデータをためこみ、それらのデータにまとめてタイムスタンプを押します。そうした処理一回一回をラウンド (round) と言います。各ラウンドの結果は、ひとつ前のラウンドの結果につながれて、チェーンのように伸びていきます。これをリンキング (linking) と言います。

ひとつながりのチェーンですので、あるラウンドの後ろにつながっているラウンドは、日時も後ろのデータであることは明らかです。TTP といえども、もし2010年と2020年のラウンドの間に2030年のラウンドを差し込んだら、すぐばれてしまいます。

リンキングの仕方が工夫されているため、あるラウンドを書き換える場合は、そのラウンドより後ろのラウンドをすべて作り直さなくてはなりません。チェーンが伸びれば伸びるほど、タイムスタンプを書き換える手間が増えるのです。TTP といえども、もしその手間を省いたら、すぐばれるようになっています。

このラウンドに相当するものを、サトシはブロック (block) と呼ぶことにしました。複数のトランザクションを一定時間ためて、まとめてタイムスタンプを付与する、その一回一回の処理がブロックのチェーンとして伸びていくというわけです。

タイムスタンプサーバー

この図は、ビットコイン論文の第3章「Timestamp Server」から引用したものです。「Block」がラウンド、「Hash」がリンキングに相当します。「Block」の中の「Item」は、タイムスタンプを付与されるトランザクションです。

「ブロックチェーン」という呼び名は、明らかにブロックをチェーンのようにつなげるデータ構造に着目したものですね。実はその構造は、20年以上前から存在するタイムスタンプ技術に基づいているのです。

ブロックチェーンはタイムチェーン!?

ブロックチェーンとタイムスタンプの関係については、従来あまり強調されてきませんでした。試しにブロックチェーンの解説書を何冊か開いて、目次を調べてみてください。見出しに「タイムスタンプ」と書いてある本はとても少ないはずです。※2

本来ならブロックチェーンとタイムスタンプは密接不可分なのでは?、ということで、ここで両者の深い関係を強調すべく、ちょっとした昔話を二つ紹介したいと思います。

一つ目は、ビットコインが動き出して間もない、2009年3月のサトシのコメントです。

Indeed, Bitcoin is a distributed secure timestamp server for transactions. A few lines of code could create a transaction with an extra hash in it of anything that needs to be timestamped.
I should add a command to timestamp a file that way.

たしかに、ビットコインはトランザクションのための分散型の安全なタイムスタンプサーバーです。タイムスタンプを押すものが何であれ、そのハッシュを中に入れたトランザクションを、数行のコードで生成できるかもしれません。 そんな風にタイムスタンプをファイルに押せるようなコマンドを追加するとよさそうです。

「ブロックチェーンは仮想通貨以外にも使える」とよく言われますが、タイムスタンプの用途も元々コインに限ったものではありません。サトシも早い時期から、ビットコインの分散タイムスタンプサーバーとしての機能を、電子データ全般で手軽に使えたらよさそうだと思っていたのですね。

二つ目は、ごく初期のビットコインのソースコードとして伝えられているファイルです。※3

タイムチェーン

左が2008年11月頃のものとされる「main.h」というファイル。右が2009年1月頃の同じ「main.h」です。左側、古い方のコメントには「timechain」と書かれていますね。それが右側、新しい方では「block chain」に書き換えられています。同様の修正が他にもいくつかあります。

つまりサトシは、ブロックをチェーンのようにつなげたものを、ごく初期の段階では「timechain」と呼んでいたらしいのです。「ブロックチェーン」は「タイムチェーン」なのです。

いやはや、このソースコード本物なのでしょうか。本物かどうかはさておき、もしもサトシがブロックのチェーンを「タイムチェーン」と呼び続けていたならば・・・。ブロックチェーンにおけるタイムスタンプの重要性は、いまよりもずっと広く知られるところとなり、ブロックチェーンを取り巻く状況も随分違っていたのではないかと、想像せずにはいられません。

二重使用対策の大枠

さて、二重使用対策の大枠は決まりましたので、ここであらためて整理してみましょう。

まず何よりも、TTP に依存してはいけません。従来の電子マネーとは異なり、ビットコインは TTP を使ってはいけません。これは大前提です。

従来 TTP が果たしていた役割は、代わりにP2Pネットワークが担います。この P2P は、TTP を部分的にも使わない、純粋な P2P を目指します。

P2P を構成する各ノードは、分散タイムスタンプサーバーとして働きます。二重使用の検査を行うためには、トランザクションを順序正しく記録する必要があるからです。

以上、なかなか良さそうなアイデアなのですが、これだけではまだアイデアにすぎません。

残された問題

このアイデアを実現するには、以下のように、解決しなければならない問題がいくつも残っています。

  • ブロックの乱造
    いまのところ各ノードはブロックを簡単に作成できます。一定間隔でブロックを作成するラウンド方式に反して、短時間で大量にブロックを作成するノードがいるかもしれません。
  • ブロックの書き換え
    いまのところ各ノードはブロックを簡単に作成できます。ブロックを書き換えて、その後ろにつながっているすべてのブロックを作り直すのも簡単です。
  • チェーンの選択
    各ノードはそれぞれ異なるブロックのチェーンを伸ばすかもしれません。複数のチェーンができた場合、ネットワークとしてどれか一つのチェーンを選ばなくてはなりません。そうしないと、あっちのチェーンとこっちのチェーンでトランザクションの順番が異なるかもしれず、二重使用の検査ができません。
  • フリーライダー (free rider)
    働いてくれるノードがいるとは限りません。好奇心やボランティア精神が旺盛な人ならともかく、働かずにネットワークの恩恵を受けられるならそれに越したことはないですね。「ただ乗り」問題は、ビットコインに限らない P2P 一般の問題です。
  • コインの発行
    二重使用もなにも、そもそも使用するコインの発行方法が決まっていません。従来の電子マネーは TTP がコインを発行しますが、ビットコインは TTP を使ってはいけません。

もうあきらめて TTP を使えばいいんじゃないでしょうか。そうすれば、ムズカシそうな P2P もタイムスタンプもやめて、従来の電子マネーのようにふつうのデータベースで一件落着なのに・・・。

ところがサトシは、どうやって思いついたのか詳しく語ってはいませんが※4、ともかく PoW を導入することで、これらの問題にまとめて答えてしまいました。

PoW

プルーフ・オブ・ワーク (proof-of-work) 略して PoW は、単一の技術をさす名称ではなく、複数の研究の特徴をまとめてあらわす名称として生まれました。その生みの親の論文によると、PoW とは「ある水準のワークある特定の時間をかけて行ったことを明らかにするプロトコル 」です。(第5回

ワークというのは、コンピューターが行う計算処理のことです。ワークは、ある程度時間がかかるよう難易度が調整されます。ワークには時間がかかりますが、ワークの結果は簡単に検証できるので、もしもサボっていたらすぐばれてしまいます。PoW とは、実行するのはタイヘン検証するのはラクなものなのです。

サトシは、ブロックを一つ生成するためには、ワークを一回こなさなければならないことにしました。ワークは各ノードがそれぞれ一斉に実行し、一番早くワークを終えたノードがブロックのチェーンを一つ伸ばすことができます。ビットコインの PoW は、いわばブロックを生成する権利をかけた、ノード同士の競争なのです。

この競争は、計算速度が一番速いノードが必ず勝つわけではありません。ワークの内容が、何回でも引けるくじ引きのようなものになっているからです。アタリを引いたらワーク完了です。当然、素早くたくさんくじを引く方がアタリが出やすいですが、アタリが出る可能性は誰にでもあります。

アタリを引いたノードは、その情報をブロックに含めて他のノードにブロードキャストします。他のノードは本当にアタリかどうか検証し、本当ならそのブロックでチェーンを伸ばし、嘘なら拒否します。

サトシは、ワークにかかる時間を平均で10分としました。将来、コンピューターの性能が上がっても平均10分を保てるよう、ワークの難易度を調整する仕組みも取り入れています。

PoW で解決する諸問題

ブロックを一つ作るのに平均10分もかかるのでは、ブロックの乱造はできませんね。また、チェーンが長くなれば、ブロックを書き換えてチェーンを作り直すのに1時間やそこらでは全然足りなくなるでしょう。

どれか一本のチェーンを選ぶときは、一番長いチェーンを選ぶことにします(第6回)。一番長いチェーンは、ネットワークの中で最もワークをがんばって伸ばされたチェーンであり、ネットワークの代表とみなしてよさそうです。チェーンは長ければ長いほど、二重使用攻撃を防げる確率も高まるので、その点でも安心です(第11回)。

さらにサトシは、ブロックを生成するときに、コインを一定の枚数発行し、当のノードが所有してよいことにしました。このことは、コインがほしいノードにとって、ワークを行うインセンティブ (incentive) となります。サトシは、PoW とコインの発行ルールとを結び付けて、フリーライダー問題に対処しようとしたわけです。(第8回

そして、PoW のくじ引きのような性質によって、特定の固定した TTP を使わずにブロックのチェーンを伸ばしていけるようになりました。性能の良いコンピューターを用意できるお金持ちや専門家が有利ではありますし、時と場合によっては実質的な TTP が現れることもありますが(第7回)、ブロックを生成するチャンスはすべてのノードが持っているのです。

ビットコインが失ったもの

以上がビットコイン論文の主題である二重使用問題の解決法です。その解決法は、TTP を使わないことにこだわって、既存の技術を巧妙に組み合わせたものでした。

しかし、そのこだわりによって失われたものもあります。それらのうち、連載では以下のことを紹介しました。

  • TTP による不正利用対策第2回
    コインの盗難など不正利用の対策を、TTP である金融機関に期待することはできません。不正な支払を発見しても、取り消してくれる TTP はいません。
  • 価値の安定化第9回
    円やドルなどには、価値の安定化を図る中央銀行や制度が存在します。サトシは TTP 無しでコインの価値を安定させる方法までは思いつきませんでした。
  • 従来のプライバシーモデル第10回
    ビットコイン論文が投稿されたのは、サイファーパンクのメーリングリストでした。しかしサトシは、サイファーパンクや銀行のような従来のプライバシーモデルとは異なるモデルを採用せざるをえませんでした。

TTP に依存しないシステムは、技術的には画期的であり、普及すれば社会に与える影響も大きいでしょう。しかし論文では、ビットコインの欠点についてはほとんど言及されていません。

例えば、論文の第1章「Introduction」では、金融機関など現在のシステムの弱点について、コストの観点から説明されています(第2回)。それにもかかわらず、電力消費の多さがしばしば問題視され、そもそもビットコイン以前から「もったいない」処理とみなされていた PoW のコストについては、まったく説明がありません(第5回)。

ビットコインと現在のシステムとを比較検討し、それぞれの長所・短所、適材適所を見極めるという大変な仕事は、サトシのかわりに論文の読者がやらなければならないのです。

おわりに

「ブロックチェーンはビットコインから生まれた技術である」とよく言われます。もしそれが本当なら、ブロックチェーンとはまず何よりも TTP を使わない技術であるべきでしょう。しかしいまのところ、ブロックチェーンの中にはいわゆる「プライベートチェーン」など、ビットコインと対比して特定の組織による管理・制御の利点を説くものが多く含まれており、そのことが議論の混乱を招いているように思います。

筆者としては、「ビットコインから生まれた技術」には別の名前を付ければよいのではないかと考えています。そうして、必ずしもビットコインほどには TTP にこだわらない「ブロックチェーン」という技術とは明確に区別できるようにすればよいのです。その名前は「サトシ方式」や「ナカモト・アプローチ」など、ビットコイン以外にも応用がきくようにしておくのがよいでしょう。※5

試みに、今回の記事をもとに「サトシ方式」を定義してみるならば、「信頼できる第三者機関 (TTP) を用いずに、P2Pネットワークによる分散タイムスタンプを用いて、一意な順序でデータを記録する方式。代表例は、PoW と組み合わせたビットコイン。」 となるでしょうか。「サトシ方式」と「ブロックチェーン」は、P2P や タイムスタンプなど個別の技術要素としてはいくつか同じものを使うかもしれませんが、TTP へのこだわりという根本的なところでは異なる技術と言えます。

さて、来月11月1日(日本時間)で、ビットコイン論文は発表から12周年を迎えます。変化の速い情報技術としては、ずいぶん昔の論文に見えますが、今読んでもブロックチェーンについて考えるヒントがたくさん見つかると思います。今回の記事が、それらのヒントを読み解くために、少しでも力になれることを願っています。


※1: ビットコイン論文には「instead of trust」など、トラスト (trust) が不要であるかのような表現が見られますが、これはサトシの勇み足で、実際は本記事のとおり、TTP を使わないと解釈するのが妥当と思われます。(第2回

※2: 私見では、ここ1年で以下の記事が話題になっており、ブロックチェーンとタイムスタンプの関係が広く知られるようになってきたと感じています。

※3: ソースコードの取得元は、https://satoshi.nakamotoinstitute.org/code/ です。もとはビットコインのフォーラムで共有されたものです。

※4: サトシは神様ではありませんので、すべて独力で思いついたわけではないでしょう。サトシが参考にしたアダム・バック (Adam Back) の Hashcash は PoW をお金の代わりに利用するものでしたし、ビットコイン論文より少し前に公表された二重使用に関する論文「Distributed Double Spending Prevention」には、P2P で Hashcash を利用するアイデアが書いてあります。

※5: ブロックチェーンの分類として「パブリックチェーン」というものもあり、ビットコインはその一例とされています。しかし私見では、どうもこの分類は、「パブリック」にするかどうか選択できる「ブロックチェーン」という確固たる技術が先にあって、それをビットコインが採用したかのような誤解を与えるように思います。「サトシ方式」は順番が逆で、TTP を使わないという大前提が先にあって、それを実現するために個々の技術要素を選択し組み合わせたものです。TTP を使うか使わないか、選択の余地はありません。

参考資料